Как я был опенсорсником…

    Давным-давно, в одной далекой-предалекой Галактике…


    Все началось довольно прозаично… было желание доработать программный продукт, но не было ни малейшего представления, как оно там все устроено… и это было давно, очень давно…

      Году наверное в 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 :)
    Поделиться публикацией

    Комментарии 34

    • НЛО прилетело и опубликовало эту надпись здесь
        +12
        приехала семья из отпуска, и я снова стал обычным гражданином :) глаза уже не такие красные как летом :), код конечно пишу но уже гораздо меньше времени остается на это…
        +17
        Завидую белой завистью. Везет же некоторым с талантами от рождения. Мне чтобы чуть-чуть (реально чуть-чуть) подправить virtualbox понадобилось около двух недель по два часа в день. И это при том, что на С и С++ я профессионально программирую более пятнадцати лет. А некоторые умудряются за несколько часов без знания языка O_O. Говорила бабушка, что надо было грузчиком идти работать, а я ей не верил :).
          +2
          ну это я Си не знал, а вообще на всяком разном по-программировал, ну и до этого, в институте писал на паскале «глюкала» (я тогда не знал что оно называется демо:)… ну как на паскале, основные манипуляции с видеопамятью на асме), но после армии я подобной фигней :) конеш не занимался уже… надо денюшку зарабатывать и семью кормить т.п.
          0
          Преимущество vim — в том, что он одинаков под всеми платформами. Я его настроил как штатный редактор и в FAR под Win, и в MC под Линуксом. А с плагинами — самая настоящая ИДЕ. Это к тому, чтобы не путаться при переходе :)
          А вообще — мнтересно было почитать, как в опенсорц попадают.
          –16
          > все что нужно как правило было написано до тебя, и надо всего лишь найти нужный тебе код и удачно скопипастить :)
          проще написать свой, чем разбирать чужое говно
            +1
            совсем не обязательно копи-пастить первый попавшийся кусок кода, да и «копипастить» это небольшое утрирование, можно подсмотреть идею, алгоритм, реализацию… всегда есть чему поучиться.
              +11
              проще написать свое говно, чем разбираться в чужом коде

              практически всегда это так выглядить со стороны.
                +1
                densmirnov.bestpersons.ru/feed/post380222/. Чтобы разобраться в чужом коде и удачно скопипастисть уйдёт Х времени, в то же время для того, чтобы написать и порядночно отладить свой уйдёт, как минимум 3*Х. Не надо откидать каких бы то ни было наработок человеческого разума только потому, что ето не твой разум.
                  0
                  Чтобы написать свой код и отладить его уйдет X времени, но для того чтобы НАЙТИ нужный код + в нем разобраться и перенести в свой проект — уйдет X*3.
                    +1
                    С++: зачем использовать STL — чужой код, много подчёркиваний, я лутше свой напишу.
                    Javascript: нафиг нам JQuery, я сам такое написать могу.
                    Я всё правильно понял?
                      +2
                      Ну, в принципе, все интересные и новые проекты именно так и начинаются. «А давайте напишем *, только с азартными играми и развратными женщинами» :)
                        0
                        Нет, не правильно. Мы говорили о копипастинге кода из чужого проекта, а не использовании библиотек.
                    +6
                    Велосипедостроительство видимо таки любимая забава наших программистов. Потом удивляемся, что в линуксе 9000 аналогов «блокнота» и ICQ-клиентов, а нормального софта — нет.
                      0
                      Ну почему же? Есть большие проекты вроде GIMP или Blender, Gnome и KDE (в этой тусовке так вообще все кипит, офис свой грохнули уже, рисовалки всякие, интерфейс симпатичный).
                        0
                        да и нормального icq клиента тоже нет, фактически.
                          0
                          не обижайте pidgin, он старается как может
                        +1
                        По мере накопления опыта программист начинает более терпимо относиться к чужому и собственному говнокоду, чем вы сейчас :-)
                          0
                          Читать и разбираться в чужом коде — это не плохо, копипастить — это зло.
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          «дружным молодым, перспективным коллективом™»

                          Правильно писать: «молодая, динамично развивающаяся компания».
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              Опаньки… Не думал что автор dcget присутствует на хабре :)
                              Буквально месяц назад искал нормальный консольный клиент под линукс, чтобы умел нормально скачивать файло по хешу.
                              Вы наверное думаете, что я сейчас напишу какой прекрасной штукой оказался dcget? :) Нет, все совсем не так, я даже собрать его не смог. Ни на CentOS 5.3, ни на zenwalk, ни на ubuntu, с выполнением всех требований по зависимостям.
                              Судя по двум темам на двух разных форумах такая проблема существует не только у меня.

                              Резюме: если софт пишется только для себя — не надо вообще его выкладывать и прикрываться громким словом «опенсорс», имхо.
                                0
                                дак, там мыло указано, а то что собрать не можете это ведь поправимо не так ли? ;) изначально он делался под wl500pg, причем то с чего оно форкалось (shakespeer) писано жестко под макось, и под линь собирается с напильником. Забросил его в связи с подготовкой к рождению второй ляльки, так что отмаз железобетонный :)… Вот если бы найти того (тех) кто готов был бы поучаствовать и разделить, так сказать, тяготы и лишения, было бы вообще чудесненько, там на самом деле до релиза не так уж и много пилить. Нужно перевести его на автоконф и еще кое чего по мелочи.
                                  0
                                  будет время — возможно займусь
                                  но от шейкспира скорее всего откажусь, лучше уж взять что-нибудь маленькое, нативное и простое, например microdc/nanodc
                                    0
                                    шекспир хорош своей архитектурой, есть микро-сервер который занимается раздачей и скачиванием, и есть клиент который общается с этим сервером, при такой реализации можно писать любые фронт-энды.
                                      0
                                      Да я изначально не про реализацию говорил. У меня не было времени смотреть исходники :)
                                      Я говорил, что не стоит релизить настолько сырые продукты, тем более если не планируется их доводить до ума.
                                      В текущем состоянии dcget использовать нельзя, к сожалению.
                                      Я верю, что при определенных условиях он соберется и даже будет работать, но это как раз и называется «софтом для себя».
                                        0
                                        вобщем если быдут конкретные вопросы пишите, постараюсь помочь :)
                                  0
                                  Release early
                                  +1
                                  А ведь можно было просто прикрутить WinSCP к Far'у :)
                                  winscp.net/eng/docs/far
                                    0
                                    вообще то я им пользуюсь, но у него несколько иная сфера применения.

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое