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