Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

среда, 30 сентября 2015 г.

Шаблоны проектирования на площадке JuJa

Я давно не постил в блог, а все потому что в начале кода начал работать с инфопродуктами. За пол года записал сотню часов видео материалов в моем блоге на Youtube для разных java-групп. Некоторые материалы доступны бесплтано, но все же я заметил, что многие даже не смотрят линки, которыми я делюсь бесплатно. Заплатив за что-то ты будешь внимательнее изучать. Твой тренинг состоится. 

Одним из таких  продуктов, которыми я горжусь является "Шаблоны по цене чашечки кофе". 54 шаблона на целый год. Каждую неделю ты получаешь по одному видеобзору шаблона продолжительностью от получаса до часа. Получешь это весь следующий год. 


Сюда входит: разные вариации классики, пару живых примеров, тесты, uml диаграмма, слайды презентации и видео обзор продолжительностью от получаса до часа. На подготовку одного такого шаблона уходит от 4х до 10 часов времени. Стоимость чисто символическая. Язык Java. С каждым выпуском добавляем новых плюшек по фидбеку клиентов.


К чему это я? Всегда хотел изучить все-пре-все шаблоны проектирования, теперь не отвертишься :) И пусть теперь на собеседовании только спросят "какой ваш любимый шаблон проектирования..

Я уверен что 54ю шаблонами все не закончится и этот проект перерастет во что-то большее. Уже сейчас в идеях запускать параллельно Алгоритмы и структуры данных.

Если интересно приобщиться, разобраться, наконец-то в этих шаблонах. Подписывайся у нас 


Изучи сам, а потом объясни, как устроены шаблоны коллегам в своей команде. 

Обучая обучаешься.

А вот пару слайдов из презы


Какашульки в коде


Вопрос был только что в группе JuJa.
Який код ревью вважаєте більш оптимальним? По задачним (програміст-тімлід) чи командним по кожній задачі. Чи все ж таки че залежить від наявності часу на проекті?
Много ко многим. Все смотрят все. Коллективное владение кодом. Как в XP Смайлик «smile»

Пробовал несколько форматов: 
1) Команда собирается и все смотрят diff за какой-то промежуток времени - где-то раз в неделю. С попкорном, шутками. А тот, чей код смотрят - записывает замечания :) На мой вопрос "а мы жеж не весь код успеваем посмотреть..." Менеджер отвечал - "тут как ППС и писюны в подворотне, они каждый день циркулируют по маршруту, сегодня собрали двоих штрафанули, завтра еще одного, потом еще двоих и так со временем все писюны будут наказаны"

2) В команде где два фронт и два бекенд дивелопера. Мы либо решаем задачи (когда сложно) в парах, либо каждый решает свою часть а потом мерджим не только в мастер, но и в понимании друг-друга (я объясняю свою, часть напарник свою). 

3) Самокодревью - когда ты перед коммитом сам просматриваешь свои diff и критичненько так относишься к коду расставляя тудушки или фикся походу сразу. Часто тут всплывают всякие экспериментыльные какашульки, которые не стоило коммитить но удалить забыл. Тудушки ставлю, потому как хочется залить в мастер уже через 10 минут, если могу фиксить сразу в течении этого времени - фикшу, иначе туду. Чтобы кодревью небыло кайфоломом - иначе будет подсознательно ломать в будущем делать ревью.

4) Кодревью бывало записывал на видос перед коммитом скринрекодером и выставлял линк в коммите. Кто хотел, потом мог изучить подробно. Обычно, когда готовишь код на показ, хочется его сделать как можно более классняцким.

5) Бывало и такое, что тимлид грозно разрушал код своим кодревью, в таком случае не стоит ожидать, что код пойдет в мастер когда он по твоему "готов" и просто воспринимать это как очередной этап доделки. Иногда бывало, что Архитектор смотрел код, тогда не то что доделки, переделки случались. Бывало и такое, что 3 итерации были как "классно, давай запомним, и попробуем еще такой вариант - а потом выберем что лучше". Это классный опыт был, сильно прокачался тогда.

6) В процессе обучения или если есть свободное время ребятам советую подобных к 5) подход - написал, работает? попробуй сделай то же но иначе, а потом сравни результаты. Тут рефакторинг прокачивается. 

7) Самое лучшее код ревью, конечно же в парном программировании - там оно всегда по чуть-чуть. 

8) Еще одна рекомендация - смотреть на свой код (уде реализованную фичу) спустя несколько дней (или как минимум мерджить после сна). Смотришь на свой код и думаешь - от блин...

И вообще, код надо постоянно допиливать, если к нему не вазвращаешься - он устаревает. Чем больше к нему подходов, тем класснее он становится.

Не будет ломать до- или переделывать когда у тебя есть тесты. Не будет ломать до- или переделывать работу, когда у тебя есть тесты. Рефакторинг с тестами не только безопасен, но и начинает приносить удовольствие. А кодревью - это заявка на рефакторинг.

Какашульки в коде есть всегда. И да! Никаких деплоев в пятницу вечером!

Как-то так

среда, 2 сентября 2015 г.

Как заработать на pet project через механизм пожертвований?

Обратились за помощью в чатике. Вот линк на оригинал.
Уже третий год в свободное время я пишу С++ библиотеку, предназначенную, в частности, для генерации машин разбора текстов по заданному синтаксису. Недавно понял, что работа подходит к концу и захотелось как-нибудь представить эту штуку миру. Я не знаю пока нужна ли она кому-нибудь, но в любом случаи есть желание получить с неё какие-нибудь деньги. Не хочу делать библиотеку платной, мне больше нравится схема с выкладыванием кода в open source и получением денег через пожертвования.
Тут, собственно, место для вопросов:
Пробовал ли кто-нибудь зарабатывать на своих open source проектах через систему пожертвований? Если да - не могли бы коротко поделиться опытом? Возможно, кто-нибудь может дать ссылки на свои публикации в связи с таким опытом? Или, возможно, кто-то просто видел подобные публикации?
По деталям интересуют прежде всего следующие темы:
1. Как оформлялся проект? Какие платёжные системы использовались для получения пожертвований? Насколько сложно решить юридические вопросы? 
2. В случаи если к проекту подключались ещё люди (чем чёрт не шутит, вдруг комьюнити какое-нибудь возникнет), каким образом решался вопрос дележа пожертвований?
Вопрос без ответа. Быть может его стоило задать на ДОУ :) Но вместе с тем поделюсь своим наблюдением в этом направлении. Начну немного из далека. Как обычно :) 

Как-то раз я получил больно по моему дивелоперскому самолюбию. Будучи ментором от компании GL по технической части на одном стартаперском собрании от одной большой компании, я наблюдал одну интересную картину. Чуть позже я еще поучаствую в роли Автора проекта в стартап гонках с проектом codenjoy и даже второе место займем. Так что кухню попробую со стороны клиента. Но тут я был Ментором - то есть экспертом, который консультировал молодых стартаперов, в их погоне за инвестициями. Ментором я мог быть только с технической точки зрения.



Проходило это приблизительно так. Несколько столиков за одним из которых сидел и я. Эксперты - это бизнесмены и управляющие крупных компаний. И команда из стартаперов - обычно - двое ребят. Тут еще вопрос, кто у кого учился, поскольку первым моим открытием было то, что до технических вопросов так и не дошли. Основной вопрос - "а деньги где?". На этом все участники и крешились.

На обсуждения проектов было по 20 минут, команды ротировались по разным столам, дабы получить максимум фидбека от различных Экспертов. Тут запомнилась мне одна команда ребят. В них я увидел родственную душу, поскольку ребята были из айти, технари. Это чувствовалось. Во-первых - они уже написали много функционала как настоящие два дивелопера. Все остальные группы были несколько по-иному укомплектованы - технарь+продажник. Во-вторых на вопрос где деньги - они единственные ничего не ответили (и я бы тоже на тот момент не ответил, я жеж технарь, а значит код_иписать - мое призвание). В-третьих на вопрос "а сколько вы хотите (уже кушаете) денег" был ответ "ну мы получаем на работе столько-то...". 

Чуть позже, вы кулуаре на кофепаузе общение продолжилось, но более неформальное. И тут один из Экспертов из моего "столика" сказал приблизительно такую фразу "Испорченные Аутсорсом". Это меня сильно кольнуло, поскольку я сам был из Аутсорса. В эту емкую фразу он вкладывал этих три пункта: 1) два дивелопера написали много кода 2) как продавать не знают 3) при этом привыкли тратить много денег. И я вынужден был согласиться. Есть просто две разных ветки - я-технарь и я-предприниматель. Вот и все. 


К чему это я. Успех проекта, на 5-10% - это написанный код. Причем как оказалось, об этом (как и о том, какую технологию выбрать) люди бизнеса думают в последнюю очередь и обычно делегируют тем самым технарям, когда уже понятно где деньги, для кого работаем, как их привлекаем... Если же программист-технарь собирается сделать свой Facebook он начинает с кодинга, архитектуры. Он уже понимает ценность для Клиента, потому как ожидает, что все вокруг такие же люди как и он, а ему эта тулза уже помагает. Но вся правда в том, что людям вокруг надо либо что-то совсем другое, либо что-то подобное, "но с перламутровыми пуговичками". И гениальный интерфейс технаря они видят где-то так.


Что делать? Работать со своими клиентами. Ладно, если код уже написан частично - покажи его своему потенциальному клиенту (из своей ЦА - целевой аудитории). Дай ему инструмент в руки, закрой рот и смотри, что он с ним делать будет. Не рассказывай как оно работает и зачем оно. Просто дай ему в руки. И слушай. Да, верю, хочется рассказать как классно ты применил кривую Безье где-то там на 35-м скрине, но это лишнее. Ты учишься - а значит молчи и наблюдай за User Experience. И если видишь неточность - запиши на потом, обсудить/решить/удалить. Будь готов, что тебя не так поймут. Совсем не так. И будь готов это потом исправить.

Идем дальше. Я говорил о ЦА. Целевой Аудитории. Ты знаешь, кто эти ребята? Возраст? Пол? Где живут? Чем интересуются? Какой у них распорядок дня? Какие проблемы они решают? Как им твое решение пригодится? Тебе предстоит детально нарисовать портрет своего клиента, дабы знать, где его ловить. Потому что без привлечения клиентов ничего не будет. Я это понял, когда собрал первый свой самостоятельно подготовленный вебинар. Тема Рефакторинг. Тему я знаю и люблю, потому как настоящий технарь взялся сразу за слайды и код. Потом анонс на блоге, в соцсетях на моей страничке и собралось аж 3,5 человека. С половиной - потому как один пришел на половину и ушел когда услышал, что будет запись (которую скорее всего он никогда и не досмотрит). Вот так вот. И это при том, что у меня на связи в Fb на то время было около 600 человек, и в блоге читателей по 300 в день. 

А все потому, что я не сфокусировался на своей ЦА. Из всех моих 600 друзей-подписчиков на Fb заинтересованных темой было всего лишь 3,5. Вот они и пришли. Конверсия 0,58%. А значит мне надо 60000 друзей, чтобы хоть как-то с таким процентом собирать вебинары. Тогда у меня не было ответа на вопрос что делать с этим всем и я просто оставил это дело. Чуть позже я узнал про то, что у Facebook оказывается есть реклама и ее можно заказать, указав в детальных продробностях кому и когда ее показывать. Об этом опыте я писал несколькими постами ранее. Вывод какой? Надо быть лазером. Сфокусированным. Когерентным. Монохроматическим и поляризованным. 


Работать со своей ЦА - значит, привлекать ее и вкладывать в это ресурсы (время и деньги). Реклама на FB - это то что можно купить. За 10$ можно привлечь на твою страничку (грубо) около 100 человек. Они кликнут на рекламу и перейдут на нее. Прочитают описание проекта и скорее всего 80% из них покинут страничку на всегда. За остальных предстоит как-то зацепиться. Инструментов много - страничка проекта на FB, рассылка на новые статьи по теме в твоем блоге, возможность принять участие в каком-то квесте от твоей компании.

Говоря "твоей компании" я подразумеваю команду. Кто-то должен постить посты. Кто-то должен следить за рекламой. Кто-то должен общаться с клиентами. Кто-то должен рисовать дизайн. Кто-то должен думать об инвестициях. Кто-то должен управлять командой. Пока ты будешь писать код. Да, в самом начале пути ты можешь все делать сам. Именно потому до кода вряд-ли сразу дойдет. Дай Бог до первых прототипов. "Но я технарь!" я хочу кодить, а не бизнес делать. Есть жеж донейт, например - можно его заюзать.


Верну на землю. Донейт - это предложение сделать что-то клиенту. Оно размещено где-то на страничке. Клиент пришел, увидел его (или нет), принял решение помочь (или принял не помогать). И у этой цепочки есть своя вероятность - конверсия. На 1000 человек, которые попали на страничку - задонейтят скажем 1% или 10 человек (и это очень-очень-очень оптимистично). Вопрос. Ты позаботился о том, чтобы на твоей страничке было тех самых 1000 человек (в месяц, за неделю или в день)? У тебя вообще есть страничка с описанием проекта? Кто кроме твоих друзей знает, что твой проект вообще существует?


Заведи блог и регулярно туда публикуйся на тему той проблемы, которую решаешь. Заведи страничку в соцсетях и привлекай людей, потенциально заинтересованных в том, что ты делаешь. Делай для них больше мгновенной пользы и возможно когда-нибудь они начнут тебя благодарить, донейтя в твой проект. Ах да, тут важно - твои мысли никто не читает, тебе надо об этом сообщить. Мол проект свободный, вот кнопка донейт, можешь оплатить. При клике на кнопку клиента отправит в какой-то агрегатор денег, где он сможет ввести номер карточки или какой-то другой аккаунт с деньгами (вебмани например) и расстаться с ними в пользу твоего проекта. Тут техническти должно быть все вылизано, потому что если донейтить тебе сложно, многие сдадутся еще при первой неудаче. Технически это выглядит так. 

Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
За формой стоит интеркасса, подобный сервис есть и у liqpay и других агрегаторов. Но подобная форма, оставленная без присмотра где-то на страницах блога приносит аж один платеж в месяц. Тебя устроит 200 грн в месяц? Где-то такая вот конверсия у нас в постСНГ. Ты сам когда в последний раз донейтил кому-то? Самый яркий пример - Википедия. Все ею пользуются, и она активно сообщает - нам надо денег. Ты платил? Если да, то больше 1 раза? Люблю задавать этот вопрос людям, поскольку мало кто платит. Это как в том анекдоте.
Как-то раз в одно село пригласили кузнеца-мастера, дабы тот установил всем красивые кованные ворота. Так как это было с русским человеком, то конечно же он оценив труд запросил бочку спирта за эту работу. Все согласились и он принялся за работу. Когда работа была сделана на главной площади была установлена бочка, в которую от каждой хаты надо было по ведру спирта. Задача не сложная. Процесс пошел. Когда бочка была до верху наполнена оказалось, что в ней чистая вода. Как так? Просто каждый думал "ведро воды не испортит бочку крепкого спирта".  
Так и с донейтом у нас, многие думают, что это сделает кто-то другой - но не я. И а результате донате у нас не работает.


А что работает? А работают продажи. Ты делаешь пользу? Ты делишься ею? Установи цену и вперед продавать. Если не хочешь сам - найди себе в команду продажника, человека который будет не только наглее и уверенее в этом деле чем ты, но и поверит в твой продукт. Но тут опять же надо смотреть за тем, чтобы к твоему продукту был постоянный приток людей - этим занимается Маркетинг, а значит в команду надо Маркетолога. Вас уже трое. Продажник, Маркетолог и ты-Технарь.  Начинать можно и делая все самому. Но скорее всего ты хочешь просто кодить. А если так - найди для начала Сейлза (Sales, Продажник), а потом вместе подумайте над Маркетингом.


Напарник еще поможет тем, что будет держать тебя в тонусе заявляениями типа "тут понимаешь, людям надо вот это и вот так и уже завтра". Вы будете много спорить, но не о гипотезах, а о том, что надо Клиенту, так как Сейлз каждый день общается с ними и знает лучше, что надо сделать. Будет с кем обсудить проектные трудности, прочистить ментальные запоры, генерить новые идеи, набирать команду.

А что касается донейта? Есть еще один пост на эту тему у меня... Суть вкратце в том, что надо 1) быть в состоянии помогать окружающим 2) быть готовым принимать от них помощь в благодарность.


Простой тест. Ты стоишь в очереди, купил в супермаркете продукты. По чеку не хватает 30 грн при общей сумме чека в 500 грн. Товар один, допустим игрушка на ДР ребенку. Денег нет, ты ищешь по всем сусекам и все равно никак. Очередь начинает уже бубнеть, мол че там так долго. И тут к тебе протягивается рука соседа-незнакомца, а там 50 грн. ты смотришь ему в глаза, а он одобрительно кивает "бери". Твои варианты: 1) отказаться от помощи и попросить отложить товар и вернуться через 40 минут (дорога домой и обратно) 2) сказать спасибо, взять 50 грн и рассчитаться. Что выбираешь?

Большинство ответит 1) Отказаться и пойти домой. Я жеж сам, у меня жеж есть все что надо... Сходство как раз в том, что большинство людей как раз и бедные. Люди с такой подсознательной программой будут все делать для того, чтобы "все сами" и деньги будут их обходить стороной. Если ты тест не прошел, но с другой стороны хочешь поддержки проекта - я вижу конфликт.

Тут же вопрос к "я не хочу продавать, ибо хочу опенсорс". Тут момент один есть - не стоит ставить ИЛИ между ПРОДАВАТЬ и ОПЕНСОРС. Ты можешь выложить проект в опенсорс И продавать свои услуги, связанные с ним. Предложение задонейтить это тоже продажа. Так что не ИЛИ, но И.

Вопросы еще были какие:
1. Как оформлялся проект? Какие платёжные системы использовались для получения пожертвований? Насколько сложно решить юридические вопросы? 
Про платежные системы было сказано выше: интеркасса, liqpay, приват24 - и еще пару десятков других. Все они предоставляют возможность оплатить тебе за что-то. Регистрация занимает минут 15. Еще часа два прикрутка формы к блогу. За юридическими вопросами в налоговую - там есть специалисты - проконсультируют. Но при донейте в 200 грн в месяц, я думаю надо размышлять немного о других вещах: люди, конверсия, маркетинг.
2. В случаи если к проекту подключались ещё люди (чем чёрт не шутит, вдруг комьюнити какое-нибудь возникнет), каким образом решался вопрос дележа пожертвований?
Комьюнити не вознкает само по себе. Тебе надо будет попыхтеть, чтобы оно случилось. Говоря техническим языком - тебе надо будет закодить его. Модуль привлечения клиентов. Модуль удержания клиентов. Модуль перевода клиента в контрибьютора. Модуль сбора средств. 


По моей практике - самый назойливый клиент это не боль, а дар - его можно попробовать привлекать. Если он ко всему еще технарь - то вообще супер. Критикует что-то - предлагаешь сделать лучше и дачешь ссылку на репозиторий. Пусть сделает ветку, исправит ошибку, предложит pull request, а ты рассмотри его. Часть отвалится сразу, часть после нескольких коммитов. Кто-то будет регулярно контрибьютить. Их и приглашай в core team на % от компании. Его обсуждайте. Если будет донейт, делите его. Если будут продажи - делите их. 

Но опять же - должна быть опция "вот работа, бери и делай если хочешь", должна быть описана и понятна для лида. Но перед тем, как ты будешь это ватоматизировать в модуль конвертации лидов в контрибьюторов (маркетинг) надо побыть в роли сейлза и попредлагать эту опцию тем, кто к тебе уже обратился - так ты узнаешь много интересного про свое предложение, поработаешь с возражениями.  

А еще можно попробовать кикстартер ему подобные (наши) ресурсы типа https://biggggidea.com/ Но это уже отдельная история... На этих сайтах описано как подавать проект.