Как стать автором
Обновить

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

Время на прочтение7 мин
Количество просмотров1.6K

Кто я?



Начнем прежде всего с этого вопроса. Я — обычный студент-недоучка Иркутского Государственного Лингвистического Университета. В свободное время увлекаюсь разными вещами, на ноутбуке использую 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, но уже не так часто и баз такого энтузиазма. Надеюсь, это ненадолго. Может после сессии займусь..? Не хотелось бы забрасывать, и тем более не хотелось бы разочаровывать людей.
Теги:
Хабы:
Всего голосов 72: ↑58 и ↓14+44
Комментарии25

Публикации