Git: как перенести работу в новую ветку
Вадим Венедиктов, 1 ноября 2010 года
Допустим, вы работали в ветке master, сделали несколько рабочих законченных коммитов, а потом начали работу над какой-то новой функцией и поняли, что закончить её сегодня вам не удастся. Вы можете просто отложить работу над этим функционалом и продолжить работу в мастере:
$ git checkout -b dirty#1239
M app/views/orders/_check_form.html.erb
M ...
M spec/views/orders/new.html.erb_spec.rb
Switched to a new branch 'dirty#1239'
Вам сообщат, что все изменения, над которыми вы работали, переехали в новую ветку dirty#1239. После решетки удобно указать номер задачи в вашей системе учёта задач, например [redmine](http://www.redmine.org/). Теперь можно закоммитить изменения в этой ветке и вернуться обратно в **master:
$ git commit -am "New function, refs #1239"
$ git checkout master
Switched to branch 'master'
И вы снова окажетесь на последнем рабочем коммите в корне дерева, можно делать push и pull спокойно.
Если что, у нас есть курсы по программированию для новичков. Заходите, смотрите, учитесь!
Вадим Венедиктов, 25 октября 2010 года
Вчера мы с Максом нашли в одном из наших приложений ошибку, связанную с тем, что 31 октября Россия переходит на зимнее время. Зима приближается, я хочу сказать.
Вадим Венедиктов, 14 октября 2010 года
При суммарном объеме заказов от 5000 руб. до 200 000 руб. за последние 365 дней предоставляется персональная скидка, которая вычисляется по формуле
ln (Z) *6,5060407363636 - 54,4132058628328
где Z - сумма всех заказов за 365 дней, оплаченных денежными средствами, поступившими на расчетный счет интернет-ателье, без учета стоимости доставки.
— сообщение от интернет-ателье Рубашка на заказ
Это они на полном серьёзе. Жалко, что они не объяснили, что такое натуральный логарифм. Кажется, в нашем блоге пора открывать рубрику «идиоты».
Вадим Венедиктов, 11 октября 2010 года
Я не продолжаю удивляться тому, насколько идиотские ошибки совершают отечественные компании.
Неужели не ясно, например, что оплата любой услуги должна быть лёгкая. В интернете отсутствует возможность передать деньги лично, как в магазине, но это не значит, что процесс должен быть сложнее, чем оплата банковской картой или в крайнем случае оплата распечатанной квитанции.
Мы пользуемся телефонным номером от компании UIS. Мне надоело ходить в банк каждый месяц и я решил оплатить услуги сразу на 4 месяца вперёд. Но я не смог выставить себе такой счёт в личном кабинете! Мне пришлось звонить и просить об этом оператора. И это ещё не всё! Квитанция пришла в неправильной кодировке. Мне пришлось звонить ещё раз и просить пересохранить её в другом формате. А в формате pdf квитанции они прислать не могут вообще.
Простая оплата — это едва ли не самое важное, что должно быть у успешной бизнес-модели. Не важно, насколько нужный и полезный у вас товар. Не важно, насколько выгодные у вас цены. Не важно, насколько классная у вас реклама. Эффективность всего этого для продажи сложно оценить.
Но если у клиента не получилось оплатить ваш товар — он его совершенно точно не купит.
Во всех крупных компаниях сидят роботы с человеческими голосами. Всюду, в Стриме, в МТС, в Мегафоне, в ВТБ24, в Акадо, везде куда я звонил в последнее время.
Везде люди работают по какой-нибудь заданной схеме. Это, наверное, эффективно и они успевают обработать больше звонков, но это ужасно вымораживает. После общение с таким роботом даже на меня, человека жизнерадостного и весёлого, находит уныние:
«Вадим, чем я ещё могу Вам помочь?» — равнодушно, но бодро спрашивает девушка или молодой человек после того, как я выяснил всё, что мне было нужно. Вот это «Вадим» и предложение помощи кажутся мне довольно убедительными. Так и хочется попросить: «сгоняй на кухню, сваргань пару молочных коктейлей, а?».
Но человеку на том конце провода, конечно, также плевать на мои проблемы, как и любому другому человеку из любой другой компании с поддержкой по телефону. Просто этот лучше надрессирован. Именно вот эта последняя мысль и нагоняет уныние. Лучше бы не напоминали об этом, честное слово.
Я уже довольно давно не могу сделать заказ в Утконосе. Cегодня я позвонил туда: девушка спокойно, весело и (о чудо!) без всего этого формального дерьма объяснила, что свободных интервалов нет потому что магазины переезжают на другие адреса. Она сказала, что я могу попробовать поймать интервал ночью в 12 часов или переждать несколько дней и всё будет работать как раньше.
Наверное, она была не так вежлива и формальна. Она не спросила моего имени и обращалась ко мне просто на «Вы», но она звучала искренне. Оператор крупной компании никогда не произведёт на меня такого ощущения. Готов поспорить, что человек из поддержки Стрима вообще никогда не использует на работе такие человеческие слова как «переждать» или «поймать».
Маловероятно, что крупным компаниям, которые по каким-то причинам приняли решение выдрессировать свою поддержку по телефону, когда-нибудь придёт в голову, что общаться с ней не так приятно, как со службами поддержки маленьких компаний, где огромные деньги на «повышение эффективности операторов колл-центра с целью повышения лояльности клиента и увеличения качества бренда» и т.д. ещё не выделили.
Не исключено, что операторы Утконоса когда-нибудь тоже станут такими же формальными и металлическими. Тогда на одну человеческую поддержку в России станет меньше.
Каждый из нас увлекается чем-то больше, чем другие и поэтому каждому из нас всегда есть, что рассказать другим участникам команды, чтобы сделать процесс работы интереснее, эффективнее, быстрее и, в конце концов, приятнее.
Макс знает про всякие новые программы, сервисы. Его сложно удивить каким-нибудь новым навороченным мобильным телефоном или новой технологией передачи данных. Он постоянно улучшает свою среду разработки с технологической точки зрения и даёт советы другим участникам команды.
Именно от него я узнал о том, что «Стрим» совместно с «МТС» ввели новую линейку тарифов на домашний интернет, предоставляя модем в субаренду. Так что сейчас я на новом модеме, который (будем надеяться) не отключается раз в два-три дня и скорость моего соединения возросла в три раза.
Вчера он подсказал мне удобную программку xournal для быстрого рисования эскизов на планшете. А ещё, он постоянно ускоряет нашу работу c vim.
Конечно, это не означает, что я не ищу никаких программ и не слежу за новостями в области технологий. Мне это тоже интересно. Но, я хочу сказать, если мне нужно узнать что-нибудь, например, про мобильный интернет, я спрошу Макса.
Я стараюсь следить за эффективным использованием времени. Мы с Максом оба довольно занятые люди и без грамотного подхода к организации времени, распределению задач и выбору последовательности действий не обойтись. Поэтому каждый раз, когда мы на чём-то пробуксовываем, я чувствую, что это скорее моя вина, нежели кого-то ещё в нашей команде. Если какой-то функционал у нас не получается долгое время, я начинаю разбираться, где и почему мы застряли. Иногда удаётся за один вечер исправить ход разработки и сдвинуть ситуацию с «мёртвой точки», которые у нас, чего уж греха таить, тоже бывают.
Это похоже на разделение труда: кто-то лучше разбирается в программах, кто-то — в организации времени. Вы всегда можете чему-то научить вашу команду и не стоит упускать возможности сделать это. В конечном итоге сложно указать способ сделать вашу работу более эффективной с практически нулевыми затратами.
Я много слышал про Dropbox, и думал, что это очередной файлообменник, который мне не нужен. Я был абсолютно не прав.
Dropbox предоставляет вам пространства на 2 Гб бесплатно, а также dropbox-клиенты для Linux, Maс и Windows. В т.ч. консольные, что открывает бездну возможностей.
В чём главная прелесть? Вы установили клиент, указали ему папку, которая будет синхронизироваться с сервером и всё! Теперь любой файл, который оказался в этой папке синхронизируется с сервером абсолютно без вашего участия. Причём, отсылаются только изменённые части файла, что экономит время и трафик. Кроме того, сохраняется история версий файла с возможностью откатиться назад. И всё это в фоновом режиме с шифрованием SSL (безопасность) на сервера Amazon S3 (надёжность), повторюсь, без участия пользователя.
Таким образом, ваша dropbox-папка с актуальными версиями ваших файлов доступна вам на всех вашим компьютерах. Если же вы в гостях, к вашим услугам веб-версия вашей папки. Кроме того, есть public подпапка, доступная тем, кому вы дали ссылку на файл или папку. Есть возможность делиться подпапкой с другим дропбоксером. Т.е., это подпапка совместного использования, с историей изменений, авторством и всякое такое.
Из приятных мелочей: мобильные клиенты (в т.ч. iphone), встроенная подпапка photo с автоматической организацией галереи (при просмотре с веб-клиента), rss-лента изменений в папке (полезно при совместном использовании) и графическое отображение происходящего с папкой.
Кстати, dropbox даёт возможность увеличить лимит бесплатного объёма приглашая друзей. В этом случае и приглашающий и приглашаемый получают по 250 мб. Поэтому, буду очень рад, если вы воспользуетесь моей реферальной ссылкой для регистрации.
Оценить время на выполнение задачи едва ли не важнее, чем выполнить эту задачу.
Очень мало задач позволяют точно оценить, сколько времени они займут. Я знаю, что прогуляться за хлебом я успею за двадцать минут, но я понятия не имею, сколько займёт исправление вёрстки нашего сайта под IE6,7,8. Я могу сказать: «час-полтора» и я могу ошибиться в два или три раза.
Но какую-то оценку иметь всё-таки хочется!
Чисто психологически проще браться за выполнение чего-то, что займёт, пускай, полтора часа, чем за то, что может занять от 15 минут до трёх суток.
Часто, врубаясь в решение какой-то задачи с головой, я трачу на неё в несколько раз больше времени, чем планировал. Я теряю эффективность и внимательность после долгой нагрузки на мозг, но паузу сделать не могу, увлекаемый обманчивым ощущением «я уже почти у цели».
И то, что должно было занять пятнадцать минут, растягивается-таки на трое суток.
Это похоже на азартную игру. Вы можете сказать себе: если я потрачу эти 500 рублей, то закончу игру. Но никто не гарантирует вам, что азарт не захватит вас, и что после игры у вас всё ещё будет ваша квартира.
К счастью, проблему со временными оценками можно решить довольно просто. Надо немного переформулировать задачу и отчётливо понимать, что у вас не полтора часа на то, чтобы что-то сделать, а полтора часа на то, чтобы понять, успеете ли вы это сделать за полтора часа.
А понять это иногда представляется возможным уже через полчаса работы. Особенно, если дело касается вёрстки под IE6,7,8.
Если поняли, что не успеваете, откладывайте задачу и начинайте заниматься другой. Вставайте из-за игрового стола. Сегодня не ваш день — не стоит терять деньги.
Когда до этой задачи вновь дойдёт очередь, вы уже точнее оцените время на её исполнение. Или вовсе разобьёте её на подзадачи, малые объёмы работы оценивать проще.
Технологии стремительно упрощают создание веб-приложений.
Добавить универсальный, удобный, кроссбраузерный, мультиязычный, полностью настраиваемый, приятный на вид элемент интерфейса для указания даты и времени можно за несколько секунд:
Подключаем jQuery и jQuery-ui, локализацию для русского языка и расширение для выбора времени:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js"></script>
<script type="text/javascript" src="/javascripts/jquery-ui/datepicker-ru.js"></script>
<script type="text/javascript" src="/javascripts/jquery-ui/timepicker-addon.js"></script>
Немного стилей:
<link href="/stylesheets/jquery-ui/jquery-ui-1.8.4.custom.css" media="screen" rel="stylesheet" type="text/css" />
<style type="text/css">
#ui-timepicker-div dl{ text-align: left; }
#ui-timepicker-div dl dt{ height: 25px; }
#ui-timepicker-div dl dd{ margin: -25px 0 10px 65px; }
</style>
И цепляем календарик к полю для ввода:
<script type="text/javascript">
$(function(){
$('#order_datetime').datetimepicker($.extend($.datepicker.regional['ru'],{
stepMinute: 5
}));
});
</script>
В результате получаем вот что:
Живые примеры на сайте автора дополнения
А ещё, у нас есть курсы по программированию для новичков. Заходите, смотрите, учитесь.
Как я уже говорил, придумать идею нового интересного и нужного сервиса очень просто. Мне в голову они приходят регулярно, вот самые лучшие из тех, что пришли мне за последнее время:
Любой может добавить человека (политического деятеля, знаменитость или просто своего друга), можно рассказать, какой поступок он совершил со ссылкой на источник в интернете, можно этот поступок оценить как хороший или плохой. Всё, можно будет сразу прочитать, чего плохого и хорошего, скажем, сделал этот ваш Лужков.
Добавляете ваши задачи, а другие пользователи оценивают, насколько они сложные или простые. Соответственно, вы — оцениваете задачи других. Каждой задаче по результатам оценок выставляется число очков опыта, которое человек получит, если её выполнит. Придумать систему уровней и поощрений как в онлайновых играх, что будет мотивировать людей выполнять их дела.
Можно добавить все свои электронные почтовые ящики, аккаунты в социальных сетях, блогах и службах обмена мгновенным сообщениями, чтобы всегда иметь доступ к любой переписке, с помощью какого бы средства связи вы её не вели. На базе этого можно сделать страницу, где перечислены все контактные данные пользователя, которые он захочет сделать доступными и такая страничка станет его визиткой.
Я считаю, что это идеи интересных и полезных сайтов, которыми я сам бы с удовольствием стал пользоваться. Конечно, быть может, что-то подобное в интернете уже есть, но просто не попадалось мне на глаза. Конечно, все эти идеи требуют доработки и обдумывания, как лучше их можно реализовать. Конечно, надо придумать, как каждую из них можно довести до прибыльности. Но мне кажется, что всё это в разы круче, чем делать очередной Группон или социальную сеть по интересам.
И мне не жалко моих идей. Берите и делайте! Может быть, что-то из этого сделаем мы. Если вы нас опередите — будет плохо. Если этих сервисов в интернете никогда не появится — будет ещё хуже.
В работе мы используем удивительный, быстрый, гибкий, расширяемый редактор VIM. Он чертовски, фантастически хорош. Его вклад в ускорение разработки трудно переоценить.
Сколько бы ты не работал с этим редактором, всегда есть возможность узнать про него что-то новое.
Так, например, недавно я наткнулся на серию замечательных скринкастов по VIM, которую, со свойственным ему обаянием, ведёт канадский малый Дерек Уайт, если я правильно транслитерировал его фамилию. Очень рекомендую к ознакомлению.
Иногда некоторые вещи кажутся людям настолько очевидными, что они могу машинально не задумываясь говорить их с уверенным видом настоящих экспертов и знатоков.
Хотя это может быть полная ерунда!
Если вас не будут знать, то проект загниет в самом начале. Низок процент постоянных пользователей проекта. Обыватель выяснит 2-3 приоритетных службы и больше ваши услуги ему не нужны.
Мы слышали и продолжаем слышать подобные фразы про Таксовик очень часто. Многим кажется очевидным, что пользователь со временем выберет себе два-три таксопарка, один для аэропорта, один для поездок по городу днём, один — ночью, и больше не вернётся на наш сайт.
Но это ни черта не так!
Мы абсолютно ничего не делаем, однако наша посещаемость постоянно растёт. Наши пользователи возвращаются к нам снова и снова. Кажется, зайти к нам и сделать пару кликов, чтобы найти оптимальное предложение, для людей проще и удобнее, чем записать номер в телефонную книгу и просто звонить по нему, когда нужно вызвать такси.
Представьте, как скучно было бы, если бы все последствия ваших действий можно было бы более-менее предсказать. К счастью, это не так. Редко когда удаётся оценить всё многообразие факторов, одним из которых является, например, ваша страсть изменить что-то в этом мире. Поэтому не обращайте внимания на мнения «экспертов» касательно ваших задумок. Проверяйте ваши идеи и изменяйте эти мнения!
Особенно не напрягаясь, работая вечерами или только утром, мы с Максом закончили итерацию, добавляющую в нашу систему довольно непростой модуль синхронизации адресов.
Когда последний тест сказал, что всё хорошо и последняя задача в Redmine была закрыта, я решил посмотреть, сколько же времени ушло на эту итерацию. Выяснилось, что первый коммит по ней был 25 августа. То есть, неделю назад. А система учета времени подмигнув сказала, что мы управились за 30 часов общего времени.
Пускай, не учтено время на обсуждение и создание задач. Пускай, ещё остались какие-то баги, на которые придётся потратить пару часов. Но, чёрт возьми, мне кажется, что скорости, которой нам удалось достичь, можно позавидовать.
Я вспомнил, что было введено нами в практику в последние несколько месяцев и вот список того, что могло нас так сильно ускорить:
Скорее всего, повлияло все в комплексе, но про некоторые из этих пунктов я расскаж поподробнее в ближайших постах.
Вадим Венедиктов, 26 августа 2010 года
Иногда программирование напоминает мне покер: можно за пару часов внедрить в приложение огромный функционал, а можно те же два часа пытаться разобраться в какой-нибудь ерудне и не продвинуться ни на йоту.
Важно уметь выкинуть карты в пасс и встать из-за стола.
Пусть крутой венчурный инвестор дал 10-ти командам из пяти человек, занимающимся интернет-проектами, по 3 миллиона долларов на 5 лет. Один из стартапов принёс через 5 лет 1 биллион долларов. А остальные — провалились, потому что то, что они делали, оказалось неинтересно людям и проекты не окупили расходов инвестора.
Что мы имеем? У инвестора — биллион долларов без тех 30-ти миллионов, которые он вложил в начале и на которые ему плевать. У одной из команд — перспективный проект и хорошие зарплаты.
Кто же проиграл в этой ситуации?
Те 45 ребят, которые выкинули по пять лет своей жизни каждый на разработку никому не нужной херни за чужие деньги.