Давным-давно, в одной далекой-предалекой Галактике…
Все началось довольно прозаично… было желание доработать программный продукт, но не было ни малейшего представления, как оно там все устроено… и это было давно, очень давно…
Году наверное в 2003-м... к тому времени я уже довольно таки долгое время являлся пользователем дистрибутива Slackware, так что о том как собирать ПО я знал уже неплохо, но вот знания «си» мне сильно не хватало (забегая вперед признаюсь, я и сейчас его не очень то знаю :). Тем не менее сильно хотелось добавить одну полезную для меня фичу в Midnight Commander. А именно опцию сортировки файлов, когда первыми идут «исполняемые файлы», как это сделано например в far. С помощью аськи, глупых вопросов к приятелям-сишникам и упорства достойного лучшего применения, худо бедно удалось сделать то что хотел… хотя и криво… Но главное оно работало! (какой же кайф угробить 2 дня но сделать то что хотел)
Больше к mc я не притрагивался остановившись на достигнутом… Шли годы… :)
ASUS wl-500gP
В какой то момент времени, года 2-3 назад, я стал счастливым владельцем забавной белой коробочки, с гордым названием — Asus WL500g Premium. Т.к. с родным mc из репозитария oleo все было совсем «не очень», то пришлось садиться и пилить чтобы можно было худо бедно иметь возможность работать с именами в UTF-8… Попилить пришлось изрядно ибо с UTF-8 патчами от Дебиана и FC собираться mc на коробочке наотрез отказался, было не просто, но я таки асилил… (сам был в шоке:) ). Учитывая практически нулевое знание си, процесс несколько затянулся. Но когда все было закончено результат в виде готового пакета я выложил на соответствующем форуме, для таких же страждущих UTF в mc на «коробочке».
В результате ковыряний я конечно не изучил си, просто понял что в принципе достаточно немного упорства и терпения чтобы делать небольшие патчи. Главное не ломать слишком сильно систему и пользоваться приемами XP (Extreme Programming) такие как Непрерывная работоспособность кода и т.п. Так я и решился взяться за первый проект под «коробочку» это легкий DC++ клиент который мог бы работать на совсем дохлом железе, имел хорошую поддержку национальных языков и мог раздавать и принимать файлы частями и из разных источников. В качестве концепции была выбран подход утилиты wget, т.е. отдаем ссылку утилите, а она дальше занимается всем сама и завершает работу, когда дело будет сделано. Так родилась идея консольного DC++ клиента dcget. Отсмотрев множество легковесных открытых проектов, был найден ShakesPeer, который является клиент-серверной реализацией DC++ клиента, в основе которого лежит общение через сокеты UI и собственно движком который занимается закачкой и раздачей контента.
Вот его то я и решил форкнуть, добавив недостающего мне функционала. Задача была не такая сложная, но навигация по ��ужому коду доставляла множество неудобств, требовался подходящий редактор. Мне очень не хватало редактора похожего на редактор far со сходными сочетаниями клавиш, и его возможностями работы с исходным кодом, вроде перехода к определению функций и прочих приятных мелочей присущим удобным редакторам. Чтобы совсем уж не бедствовать я настроил в vim необходимые средства превращающие его в IDE и потихоньку им пользовался. Но тяжело переучивать старую собаку новым трюкам. Помнить на автомате 3 набора горячих клавиш для меня оказалось просто непосильной задачей, причем бывало что поработав в far я на автомате портил текст в vim и наоборот… бывало что без мата не обходилось (где то я это уже говорил...:).
Midnight Commander
Тем временем я наткнулся на новость на opennet о том, что появилась новая версия mc с дополнительными патчами, вроде раскраски файлов и прочих полезных мелочей, (многие из которых, кстати говоря, уже были в моей сборке под «коробочку») и решил связаться с командой в плане «поделиться опытом» и отдать пару своих мелких патчей из сборки под WL500gP. Как оказалось ребята были «дружным молодым, перспективным коллективом» () :) с которым просто найти общий язык и взаимопонимание. Все что нужно было сделать чтобы вступить в команду это сделать приватный и публичный ключ и отправить полученный публичный ключ Патрику Винертзу, чтобы меня зарегистрировали на сайте Миднайт коммандера и я получил доступ на запись в git репозтарий. Так вот все и началось…
Итак, что было в сухом остатке: неумение пользоваться git, незнание языка си, опыт програ��мирования на многих языках и большое желание сделать mcedit более удобным в использовании редактором, имеющим тот же набор фич что и far. Первый принятый мой патч был как раз патч реализующий отображение исполняемых файлов в начале списка. На этот раз патч был реализован идеологически верно и не являлся грязным хаком. К счастью в команде были те, кто отсматривал мои патчи и проводил большую работу по ревизии моего кода без них я бы наверное не осилил бы и десятой части написанного. В результате у меня появился редактор полностью удовлетворяющий мои потребности в плане использования его в качестве IDE. И что самое интересное — практически всё что мне было нужно там и так было, только зарыто так глубоко что и не добраться, либо в немного «недопиленном» состоянии. В общем, чем больше капался с текстом редактора, тем больше находил недореализованных фич, иногда бывало забавно, что доделав очередной патч находил подобную же реализацию, в самом неожиданном месте, после чего удалял свое и дорабатывал то что есть до нужной кондиции… Подход в основном был такой — по максимуму сделать свой код простым и понятным для дальнейшего сопровождения и по максимуму вписывающимся в общую концепцию и стиль проекта.
Так вот я и стал типичным красноглазым опенсорсником :), вечером кодинг для души, днем написание отчетов и форм в компании где я работаю.
Выводы :)
Кстати говоря, писать открытый код, это просто халява с точки зрения программиста :), все что нужно как правило было написано до тебя, и надо всего лишь найти нужный тебе код и удачно скопипастить :) Я понимаю конечно что все рано или поздно надоедает и заканчивается… даже самые интересные вещи. А есть еще и совсем неинтересные, типа поиска и исправления не очевидных и сложно-повторяемых багов, но что поделаешь попав в секту так просто из нее не выбраться :)) Но надеюсь произойдет это, не раньше исправления последней критической проблемы, как то пока не хочется подводить ребят…
Работа в команде это конечно отдельная тема… интереснейший опыт с точки зрения программиста — ревизии кода, парное программирование, обсуждения задач и способов возможной реализации и прочия-прочия-прочия…
fin
PS: вот так вот, получив нужный и удобный инструмент для работы над своей поделкой — dcget, потерял, практически полный, к ней интерес… се ля ви :)
PPS: хотя если кого то интересует консольный DC++ клиент под *nix милости прошу.
Извиняюсь за некоторую скомканность повествования, долбанный T9 :)
