avva: (Default)
[personal profile] avva
Играюсь с исходниками Мозиллы (Firebird).

Какое ужасно запутанное, сложное дерево, сам чёрт голову сломит. Сгрузил самый свежий код из CVS, построил debug-версию. Запускается. Захотел сделать так, чтобы оно пользовалось не моей директорией профиля $HOME/.phoenix, а какой-нибудь другой, скажем, $HOME/.phoenix-devel . Довольно скромное пожелание, правда? Почти час провозился, пока заставил его. Главное, нашёл код, который открывает или создаёт директорию профиля. В Юниксе он берёт $HOME и добавляет к нему DEFAULT_PRODUCT_DIR, который устанавливается в MOZ_USER_DIR, который всегда ".mozilla", и в Firebird тоже. Но чёрт побери, оно ж использует директорию .phoenix всё-таки, и всё там создаёт/редактирует. Я туда, сюда, захожу в gdb, отлавливаю вызовы этой функции — ну да, исправно вызывается много раз и всем говорит "$HOME/.mozilla", а используется тем не менее .phoenix. Что за чёрт? Ну хорошо, делаю глобальный поиск ".phoenix" по всему дереву, ничего интересного не нахожу. Делаю поиск по "phoenix", тоже ничего интересного не нахожу. Мистика. Что он его, по буквам собирает?

Тут я заметил, что директорию $HOME/.mozilla он-таки исправно создаёт при каждом запуске, если я её удаляю. Но всё равно не использует, а испольует .phoenix. Я разозлился окончательно, удалил .phoenix, чтобы заставить его создать, запустил под gdb, и поставил breakpoint на mkdir(2). Вот это не обойдёшь, сволочь. И поймал-таки момент создания, проследил stack trace, и что оказывается? Это идёт от другой функции GetProductDirectory, в совершенно другом месте, классе, файле и модуле, но почти точной копии той, первой, которая, видимо, устарела (но почему вызывается двадцать раз во время работы?). Эта фунцкия, однако, не вставляет зафигаченное в compile-time значение ".mozilla", а добавляет к $HOME значение mProductDir, а его откуда берёт? А вот откуда:

mProductDir.Assign(NS_LITERAL_CSTRING(".") + aProductName);
ToLowerCase(mProductDir);


Естественно, aProductName в совсем другом месте определяется как "Phoenix", в результате выходит .Phoenix, а после вызова ToLowerCase — искомый .phoenix. Неудивительно, что я не смог это глобальным грепом найти!

Извращенцы чёртовы.


Главное, у них постоянно такое. Куча кода повторяется два раза, с какими-то мелкими изменениями, и поди разбери, какая из двух версий или какой из двух классов "настоящий", учитывая ещё, что оба компилируются и иногда оба вызываются во время работы программы, только один из них — "по историческим причинам". Необходима радикальная чистка авгиевых конюшен. And don't get me started on their build process.

Date: 2004-01-10 09:48 am (UTC)
From: [identity profile] liquidee.livejournal.com
Я думаю, разработчики это знают и сами. Только, боюсь, в случае Mozilla Firebird это не самый быстрый процесс, особенно учитывая то, что Mozilla Firebird всё-таки ещё очень сильно зависит от Mozilla.

Date: 2004-01-10 10:10 am (UTC)
From: [identity profile] cmm.livejournal.com
тенденция высокопрофильных опенсорсных проектов превращаться в hugeware ещё ждёт своего небрезгливого исследователя.

Date: 2004-01-11 03:01 am (UTC)
From: [identity profile] msh.livejournal.com
duh! Так это всегда с "народным" opensource, все лезут в архитекторы, в крайнем случае в кодеры. А код менеджить это ж скучно

Date: 2004-01-11 03:30 am (UTC)
From: [identity profile] cmm.livejournal.com
не уверен.
по-моим наблюдениям, на одного фичерописца в больших народных проектах приходится как минимум пара компульсивных починителей/подчищателей.
ежовых рукавиц на них нету, вопчем.

Date: 2004-01-10 11:36 am (UTC)
From: [identity profile] thedimka.livejournal.com
я тоже как-то пытался гимп ковырять, но терпения не хватило,
так всё запутанно у них

Date: 2004-01-10 04:19 pm (UTC)
From: [identity profile] zigmar.livejournal.com
Я недавно наткнулся письмо пару-летней давности одного из основых ментейнеров Гимпа с обсуждением преспектив развития. Так там говорилось что 1.2 это мертвая ветка, состоящая восновном из легаси кода и воркэраундов. По этому и фичеров новых за последние пару лет практически не было - чуть ли не любое изменение кода тянуло за собой баги в самых непредсказуеммых местах. Так что основной задачей ветки 1.3 они ставили отчистку старого кода или даже его переписование заного. Собственно по последним релизам 1.3 они очень неплохо с того времени преуспели...

ЗЫ: 1.4 не будет :) Будет 2.0

Date: 2004-01-10 01:37 pm (UTC)
From: [identity profile] sartoris.livejournal.com
Любое дерево исходников - как лодка. Как назовешь, так и поплывет. Вносить изменения ретроактивно - очень тяжело и чревато жуткими последствиями.

Я сейчас столкнулся на работе с этой проблемой. Там правда дело не в редантном коде, а в том, что дерево убогое, а весь building procedure - кровоточит. Приходится резать по живому, но я хотя бы код почти весь наизусть знаю... А в Mozilla никто весь код наизусть не знает...

Date: 2004-01-10 01:48 pm (UTC)
From: [identity profile] cax.livejournal.com
А то ты сам не знаешь, из-за чего помер Netscape 4

Date: 2004-01-10 02:15 pm (UTC)
From: [identity profile] zigmar.livejournal.com
Заглянул в исходники... ужас... плачет по ним code refactoring. Правда я не очень хорошо себе представляю, как можно делать рефакторинг на сорс с котороым работает такое количество народу.

Date: 2004-01-10 04:01 pm (UTC)
From: [identity profile] drakkh.livejournal.com
просто рефакторинг должен делать один человек и опубликовать результаты. а то, что остальным потом придется разбираться с его изменениями - неизбежно. но в долгосрочной перспективе это должно иметь смысл, как и наличие человека, который знает продукт в целом и может координировать процесс разработки, вынося общие вещи на уровень библиотек и совместно используемых модулей.

Date: 2004-01-10 04:11 pm (UTC)
From: [identity profile] zigmar.livejournal.com
Да, но я не знаю насколько это реально (если вообще) сказать нескольким сотням (?) девелоперов "стоп" и остановить ведь девелопмент на пару месяцев пока кто-то будет делать рефакторинг? Напрашивается вопрос - можно-ли делать рефакторинг парралельно с работой другимих програмеров? Я сомневаюсь. По-моему merge от такого загнется ;) А еще и CVS - например переименовать файл, или вычленить модуль в отдельную деректорию - это целая эпопея. ИМХО, в большенсве случаев просто предпочтут обойтись без этого. Вообщем, мрак, ИМХО...

Date: 2004-01-10 08:13 pm (UTC)
From: [identity profile] meshko.livejournal.com
У меня диплом был такой. Система, которая помогает делать рефакторинг. Типа если ты меняешь интерфейс какой-то библиотеки в большом проекте, то ты на специальном языке их описываешь и потом человек, который хочет перейти на новую версию твоей библиотеки, может автоматически это самое преобразование своего кода запустить.
Единственный реальный результат моей работы, которым я могу поделиться: сделать это правильно сложно :)

Date: 2004-01-11 10:50 am (UTC)
From: [identity profile] zigmar.livejournal.com
sounds interesting :)
Кстати, ты небось для c++ делал, да? Я слышал что задачи автоматического рефакторинга в Жабе решаются на порядок легче...

Date: 2004-01-11 02:44 pm (UTC)
From: [identity profile] meshko.livejournal.com
Нет, я как раз в Яве и делал, но там практически ничего толком сделано не было. Ява для это действительно, наверное, лучше -- там мощные механизмы для reflection.
Но хватит об этом, мне грустно об этом вспоминать :)

Opera

Date: 2004-01-11 12:21 am (UTC)
From: [identity profile] npopok.livejournal.com
Лутшый браузер - Opera - тоже есть (http://www.opera.com/download/index.dml?platform=linux) под Linux. (http://opera.com) ()

Re: Opera

Date: 2004-01-11 12:24 am (UTC)
From: [identity profile] avva.livejournal.com
Каким образом, интересно, Opera "лучший браузер" в контексте записи об изменении исходного кода браузера?

В этом контексте Opera не лучше и не хуже, чем Internet Explorer.

:-)

Date: 2004-01-11 01:26 am (UTC)
From: [identity profile] npopok.livejournal.com
Никаким. Просто пропаганда :-)

Уж очень я её люблю за всё: скорость, настраиваемость, и главное - интэрфейс.

Чтобы хорошо работало, в Опере не нужно изменять исходный код. Надо лишь вставить регистрационный.

А вы линуховскую версию Фаербёрда роете?

не-а

Date: 2004-01-11 12:59 am (UTC)
From: [identity profile] wildernesscat.livejournal.com
Я попробовал и отказался. Слишком много хороших сайтов неправильно показывает :(

Ого-го!

Date: 2004-01-11 01:27 am (UTC)
From: [identity profile] npopok.livejournal.com
Удивлён.

И сомневаюсь, что "хороших" сайтов. Дайте ссылочку, а? Может быть, они хороши в плане контента, но никак не в плане грамотного кодинга.

Однако, постойте... У меня в ранних версиях(сейчас - 7.23) тоже иногда отображалось не так(...как в IE). Но это недочёт кодеров, которые делают не по спецификации, а по тому, как выглядит в IE и Мозилле.

Последние версии стараюцца идти в ногу с мейнстримом, и ни одного "косяка" в отображении HTML я не встречал.

Date: 2004-01-11 01:43 am (UTC)
From: [identity profile] wildernesscat.livejournal.com
Вот скажем ивритский сайт (http://www.emap.co.il) вообще не загружается в Опере, а в IE - всё как надо. Вообще у Оперы с право-на-левыми языками слабовато...

heh

Date: 2004-01-11 06:34 am (UTC)
From: (Anonymous)
grep -r -i

Re: heh

Date: 2004-01-11 06:40 am (UTC)
From: [identity profile] avva.livejournal.com
Это было бы бесполезным, т.к. нашло бы огромное количество не относящихся к делу фениксов (всяких PHOENIX в константах, #define'ов огромное количество итд. итп.).

Re: heh

Date: 2004-01-11 02:47 pm (UTC)
From: [identity profile] meshko.livejournal.com
grep -rI "[p|P]hoenix" *

Я это на самом деле к тому, что -I надо делать.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
2829 30 31   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 1st, 2026 06:34 pm
Powered by Dreamwidth Studios