Как я стал разработчиком

    Кто я?



    Начнем прежде всего с этого вопроса. Я — обычный студент-недоучка Иркутского Государственного Лингвистического Университета. В свободное время увлекаюсь разными вещами, на ноутбуке использую Linux и KDE4. Учусь по специальности «теоретическая и прикладная лингвистика», здесь нас преподы в общем-то называют «технологи». На самом деле нам до технологов как этим преподам до осознания принципа open source. Есть у нас даже курс лекций под названием «Программирование в перспективных средах», где нам странный препод дает решать задачки на Delphi. В общем-то, для того чтобы научиться программировать язык как таковой не особенно принципиален, с другой стороны, каждый язык программирования определяет в какой парадигме вы привыкнете «думать». Это, конечно, имхо, но все же.

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

    Знакомство с проектом



    Я узнал о проекте KDE4 for Windows и стал пристально следить за его развитием. Конечно, сначала у меня интернета даже толком не было — сидеть с GPRS соединением по рублю за метр — это жестоко. Но уже тогда меня манило всеми правдами и неправдами попробовать. Затем пришел анлим и возможность такая предоставилась. Первым релизом, который я попробовал был 4.0.64, если мне не изменяет память. Идея того, что все приложения KDE можно будет использовать и на Windows меня заинтриговала. А большое количество багов только прибавило огня — с помощью удобной утилиты в составе KDE багрепорт по приложению можно было написать за минуту.

    Примерно в это же время я стал часто сидеть в IRC на канале проекта. Там разговаривал с разработчиками, узнавал новости, выяснял интересующие меня моменты. Часто стал ходить на страничку проекта. Поначалу ставил все по описанию с той страницы. Что-то получалось, что-то нет. Бежал опять на канал, выяснял что да как. Оказалось что страница с инструкцией довольно сильно устарела, потому что документирование никогда не было сильной стороной разработчиков, особенно когда команда работает в поте лица из-за нехватки человекоресурсов. Тогда я предложил переписать инструкцию. Сел и минут через 30 она была уже готова. Отдал человеку, он проверил, поправил мои ошибки (как грамматические, так и смысловые) и внес изменения в страницу, которая работала на движке Wiki. Тогда я глянул на русский вариант этой же страницы и обновил и его тоже. По ходу дела я замечал, что нет пакетов локализации. Оказалось, их и не было никогда на этой платформе. Я пробовал качать файлы из SVN и переводить их, но это не особо получалось. Даже хотел попробовать вступить в команду переводчиков, но что-то как-то не заладилось с ними. Да и не пытался сильно.

    Потом мне показали Commit filter — штука, которая посылает каждый коммит выбранного разработчика или в выбранный проект к вам на мыло. Так я стал следить за основными изменениями в коде. Естественно, в С++ я вообще не шарил, так, просто по комментариям к патчам и по ключевым словам BUGFIX, например, мог понять что тут кой-чего пофиксили, или тут добавили новую фичу.

    Еще то тут, то там пытался делать какие-нибудь креативные работы. Пробовал делать MsStyle который бы привносил бы оформление окон в стиле Oxygen, а также стандартных виджетов (в приложениях KDE виджетам можно придать стиль Oxygen одной галочкой в System Settings).

    В какой-то момент пробовал учить С++, с переменным успехом и начальными «победами». Качал книжки по программированию, но мало какие дочитывал до трети даже. Слишком сложно мне все казалось. А человек, с которым мы довольно сильно сдружились, все чаще стал намекать, мол, а этот баг ждет пока его пофиксишь именно ты =)

    Первый билд



    Надо еще отметить, что для разработки требовалось самому хотя бы скомпилить локальную версию, а я до сих пор пользовался пакетами. Но тогда я все еще не воспринимал всерьез себя как возможного программиста и разработчика. Просто часто при багрепорте создается ситуация, когда баг пофиксили в транке, или когда просят проверить с более свежей версией KDE чем та, с которой найден баг. А версии новее чем из пакетов где достать? Вот и ходил все вокруг, да около.

    В то время я еще много качал разных дистрибутивов Linux, и у меня раздел на диске размером около 20 гигабайт был забит образами дисков. И тут случилось «несчастье» — при проверке очередного дистрибутива (проверял я их установкой в специально отведенный для таких проверок раздел) я по запарке форматнул все свое накопленное добро.

    Надо еще отметить, что к этому времен я уже скачал книжку о программировании в Qt4 и начал довольно успешно продвигаться по главам. То, что для меня казалось жуткими танцами с бубном (вроде установки и настройки компилятора, не говоря уже о самой компиляции) оказалось совсем тривиальной задачей. Становилось действительно интересно.

    И тут, когда в очередной раз мой друг в привате предложил мне скомпилить KDE из исходников я просто не смог найти оправдания чтобы не делать этого: места теперь у меня навалом, начальный чекаут на 128kbps — да у меня выходные впереди! Да и совсем недавно мне дали особые права на bugs.kde.org — я мог сам закрывать баги, а созданные мной репорты не нуждались в подтверждении (стандартный статус репорта — UNCONFIRMED, мои же создавались уже как NEW). И я решился на сборку из исходников.

    Для поддержания действительно свежего состояния было решено использовать питоновый скрипт emerge, который был разработан специально для KDE for Windows и не имеет ничего общего с emerge из Gentoo.

    Скачал питон, subversion, настроил переменные окружения, определился с утилитами и запустил первый билд. Сначала был чекаут Qt и его зависимостей, потом началась его компиляция. О, это был (и остается по сей день) адски долгий и мучительный процесс. Затем легче — kdelibs, kdebase-* и далее.

    Уже тогда мне открыли секрет — портируется не что-нибудь, а то, что считалось привилегией только Linux и X11 рабочих операционных систем — сама Plasma!

    Конечно, не все билдилось с первого раза, не все получалось с наскоку. Переписывались инструкции и коммитились новые патчи. Не подумайте что специально для меня или я как-то к этому был причастен, но все же.

    Был момент когда из commit filter мне пришлось выбирать все патчи (а точнее номера коммитов), которые парни сделали для Plasma. Задача немудрёная, но все же было приятно, что попросили именно меня — мне очень хотелось быть полезным.

    Первый патч



    Как вы уже знаете, для установки KDE на Windows используется специальный установщик. В нем было много недостатков и до сих пор есть 'room for improvements', так сказать. И вот нашел я очередной баг: с очередным релизом их список изменился, но странным образом — один релиз из stable был продублирован в unstable. Так как в нестабильной ветке не было такого релиза, то соответственно и установщик попадал впросак при попытке выбрать именно его. Товарищ мой предложил мне покопаться в коде. А, чем черт не шутит. Полез смотреть… Так как мой наставник был более знаком с устройством установщика, то он сразу указал примерно в каких файлах нужно искать ответ.

    Весь вечер я рыл код, но для меня это была почти филькина грамота. Почти. В конце концов, Assistant сослужил мне хорошую службу. Но я так и не нашел ответа. На следующий день — глянул пару раз и, отчаявшись, закрыл. И тут мне пришло письмо от «сенсея» — он нашел баг, но не стал его исправлять. Вместо этого он указал мне в каком именно файле стоит искать, а также на какие debug сообщения стоит обратить внимание. Теперь это был уже скорее вызов.

    Я корпел над смыслом этого отрывка кода порядочно. Перелистал его вдоль и поперек, на бумаге записывал последовательно значения всех переменных в каждый момент выполнения кода (я и сейчас не знаю как пользоваться такими утилитами в нормальных IDE, которые имеют возможность отслеживать эти данные, но меня это не сильно напрягает). Все впустую.

    В следующий день я корпел еще дольше и таки смог найти ошибку. Но ведь найти ошибку — не все. надо еще ее исправить! Хм… А ведь я ни разу еще не писал ничего в чужом коде… Аж даже растерялся что сделать. Полистал Assistant и нашел нужный мне метод. попробовал добавить его и… получилось! =)

    Нет смысла описывать мои чувства на тот момент. Мой куратор объяснил мне как создать патч и сказал, что будет лучше, если я открою багрепорт и прикреплю к нему свой патч. Было жутко непосебе, ведь фактически это он нашел баг, и он навел меня на него, пусть и исправил его все же я… Я сделал как он просил и вскоре багрепорт был закрыт. #174452 — RESOLVED: FIXED

    Модуль



    С того патча прошло какое-то время. Мой куратор сказал что у него назрело задание для меня — написать модуль, который бы регистрировал plasma.exe как оболочку Windows вместо explorer.exe. Честно говоря, я был несколько напуган. Писать модуль… Да я понятия не имею как это!

    Все было гораздо проще — сказали взять модуль попроще и выкинуть из него все ненужное. Ну, ломать — не строить! Скопировал модуль смайлов в отдельную папку, скомпилил — работает. начала медленно его кастрировать пока не осталась одна только форма. Скомпилил, установил. работает. Пустышка.

    Чтобы с ней работать мой друг заставил меня подать прошение на SVN аккаунт. Нехотя, я все же сделал это, и почти тем же вечером я получил его! Мне выделили местечко в playground'е, где я взращивал свое детище. Кстати, свой первй же коммит я закосячил — не вписал log message >_< Ну, первый блин…

    Так я начал работу над своим модулем. В него начал набивать мясо — первые пара виджетов для выбора между существующими оболочками. Данные читались из реестра с помощью функций библиотеки Qt, поэтому с ужасами WinAPI я имел счастье не встречаться. Зато по ходу узнал много полезного, и понял большую часть того, что читал в книжках. на самом деле, многие записи просто были непонятны мне. Но мой наставник помог. Он очень понятно мне все объяснял, так что в общем-то я вполне неплохо освоил это дело.

    Потом понадобились еще функции, к ним еще виджеты, и новые заморочки — для установки «правильных» обоев я находил отношение сторон при текущем разрешении экрана и выбирал максимальное резрешение с тем же отношением сторон. Так что при разрешении экрана в 1152х864 мне установились обои с разрешением 1600х1200. С другим разрешением — другие.

    Были по ходу исполнения идеи, реализация которых требовала использование WinAPI, но в итоге осталась только одна строка для установления атрибута «скрытый» у файла со списком установленных обоев (да-да, такой есть!).

    Ближе к релизу 4.2 модуль был убран из playground… чтобы быть перенесенным в kdebase-runtime! Затем этот модуль, вместе с курсорами Oxygen, специально конвертированными для Windows, был упакован в отдельный пакет kde-additional.

    Другие проекты



    Кроме модуля я заглядывал и в другие проекты. Но только заглядывал — читать чужой код, сами понимаете, неудобно. В общем, только в KDiff я нашел и исправил баг (с появлением двух диалогов открытия файла). Мой куратор подталкивал меня заглядывать в другие проекты. например, когда он портировал Konsole, то предложил мне узнать в чем кроется проблема, что не дает стирать символы. Но этот код был мне не по зубам. Потом был Konvi4 (рабочее название Konversation для KDE4), в котором я также нашел пару багов, но был не в состоянии исправить их. Жаль, конечно, но, видимо, кодер из меня не очень хороший.

    После некоторой передышки я для себя занимался колупанием Trayplayer'а с kde-apps.org — плеера без единой формы, который играл музыку, сидя в трее. Прикольная вещь, я почти прикрутил к нему плейлист, но нашел загвоздки и как-то подзабросил и его.

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

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 25

      +1
      Очень круто!
      Только добавь кат пожалуйста!
        0
        Спасиюо, добавил :)
        0
        И тематика супер, и пост длинный, и стиль выдержан, даже подзаголовочки есть! Ну идеал. Так что же под кат помешало все это засунуть? Заранее спасибо.
          0
          Спасибо за комментарий. Про кат забыл совершенно — у меня есть такая привычка. Да и постил в 4 часа ночи, так что тут забыть такие вещи легко.
          –3
          Было бы интересно увидеть что-нибудь типо zverCD только на KDE
            0
            А почему бы собственно и нет? Это я к минусовщикам — чего только не демонстрировали с LiveCD, чем KDE хуже?
              0
              Честно говоря, никогда не любил левые сборки винды, особенно то, что отдает предпочтение английскому языку в написании русских слов (это я о слове «zver» вместо «beast» или «зверь»).
              А как вы себе представляете LiveCD? Максимум что здесь можно сделать — порыться в коде установщика, перекроить его на автономную установку по двум-трем кликам мышью и сделать из него фактически Autorun для диска, на который положить пакеты. В принципе как опция людям без интерната подошло бы неплохо.
              LiveCD на KDE for Windows — это во-первых пиратство, потому как подразумевает распространение копии Windows, а во-вторых, Plasma еще слишком сырая и находится в стадии экспериментальных разработок, поэтому особо такой LiveCD мало чем будет отличаться от простой установки KDE on Windows.
            0
            Если не секрет, сколько месяцев прошло между началом изучения c++ и созданием приложения на qt для смены windows shell?
              0
              Трудно сказать. Начинал изучение С++ я несколько раз и всегда бросал потому что было непонятно. Если считать от момента когда я в последний раз занялся C++ в связке с Qt, то это заняло менее полугода. Но это очень неточно — я просто помню что примерно в июле я уже думал над переписыванием одной программы на Qt (хотя я более чем уверен что тогда бы я этого не осилил), а окончательная версия моего модуля вошла в релиз 4.2, если не ошибаюсь. Ну как окончательная, как обычно — большая часть сделана, остался отлов багов :)
              0
              Большое спасибо — очень интересно и познавательно.
                +2
                Обязательно продолжайте! На таких как вы держится сообщество.
                • UFO just landed and posted this here
                  • UFO just landed and posted this here
                      0
                      Проверьте орфографию и опечатки. «карпел», «забразывать» и многое другое. Уж как студент Лингвистического Университета вы могли бы писать и без таких досадных ошибок
                        0
                        Текст писался в электричке на маленькой клавиатуре Eee PC 900. Плюс я же написал что я студент-недоучка :P
                        Но спасибо за замечания. Постараюсь поправить.
                        +1
                        Отличная статья! Продолжайте писать и то и другое.

                        Возможно, ваша статья будет мотивировать других людей писать OpenSource и помогать разбираться с багами…

                        PS Вам очень повезло с сенсеем :)
                          +2
                          Да, у меня очень хороший учитель попался. Многое он мне буквально на пальцах объяснял так, как ни в одной книге не напишут.
                          +1
                          Читать чуждой код не только не неудобно, но даже очень полезно.
                            0
                            Согласен. Это полезно всегда.
                            +2
                            «Как я стал разработчиком» — я думаю, стоило бы назвать — «Как я начинал». Потому что до разработчика, как пешком до Китая(очень многим). Хотя возможно через 5-10 лет, буду читать ваши книге наравне с Александреску или Руссиновича. Дерзайте.
                              +5
                              Ну, с вашим вариантом названия было совершенно непонятно что я начинал.
                              А еще у всех разное представление о том, что такое разработчик. Я же не пишу о себе как о профессиональном разработчике, занимающимся работой над проектом в полный рабочий день.
                              Я сам долго не хотел принимать этот статус, потому что не считал себя таковым. Но все же разработчик — это тот кто разрабатывает. Контрибьютор, если желаете. В конце концов, мне доверили SVN аккаунт, я создавал свой код и я исправлял ошибки в нем, и не только в нем. Считаю себя разработчиком. Пусть и не таким крутым как упомянутые вами личности.
                              0
                              Пост отличный и автор молодец! А кроме всего прочего пост в очередной раз доказывает правильность и простоту архитектуры положенной в основу Qt4 и перенятую в KDE4.

                              Теперь мне с двойным усилием хочется выкроить немного времени и немного поправть taskbar =)
                                0
                                спасибо, интересно. Какие книги посоветуйте по кодингу?
                                  0
                                  Ну, посоветую лишь то, что сам попробовал и что советовали другие.
                                  Р. Лафоре — ООП в C++. Эту многие считают самой удобной и лучшей среди аналогов.
                                  Jasmin Blanchette, Mark Summerfield — C++ GUI Programming with Qt4. Эту книгу можно найти и в русском варианте — я читал в оригинале, в то время как мой одногруппник раздобыл русский перевод.
                                  0
                                  спасибо за интересную статью
                                  вот, кстати, ресурс для начинающих линукс разработчиков www.lindevel.ru, сам недавно начал изучать

                                  Only users with full accounts can post comments. Log in, please.