разочарования
Dec. 19th, 2008 10:19 am- Функция loop получает кучу параметров, внутри неё if, и только в одной ветке
надо поменять значение одного параметра, а в остальные он должен прийти
неизменённым. Как это удобно сделать?
- Вызови в этом месте loop() с новым параметром и заверши работу.
- Но у меня дальше большая общая часть работы.
- Вынеси её в отдельную функцию, вызови loop() из неё.
- Это неудобно. Почему бы не сделать что-то вроде Xout=ifdef(X1, X1, X),
loop(...,Xout)?
- Ты хочешь неправильного. Здесь делают именно так.
- Как это нормально делается? Я же не могу отдать параметр обратно.
- Сложи его значение в ets.
- Но это уже побочный эффект, это неправильная практика. Надо избавляться
от побочных эффектов.
- Здесь делают так.
- Но ets дорого, и неуникально. Я не могу изобретать атом для каждого
процесса, они плодятся по одному для внешнего объекта согласно конфигурации.
Почему бы не использовать словарь процесса?
- Это неправильно. Словарь процесса - костыль, его скоро отменят.
- Но ets - такой же костыль, причём менее удобный, потому что надо использовать
левые сущности вроде имён-атомов.
- Здесь делают так.
- Почему я не могу использовать в качестве идентификатора таблицы текстовую
строку?
- Здесь так не принято.
- Мне нужно сделать общий репозиторий, в который все будут складывать свои
изменения.
- Ты хочешь неправильно. Это распределённая система.
- Я и использую её как распределённую. Каждый тащит изменения к себе, делает
что хочет в любом количестве своих копий и репозиториев, затем, когда решил,
что всё окончательно правильно - делает push.
- Ты хочешь неправильно. Каждый должен коммитить в свою ветку в центральном
репозитории. Дальше у него остальные забирают изменения.
- Я не хочу разводить бардак, особенно когда таких источников будет два
десятка. Каждый обязан влить свои изменения и за это отвечает.
- Ты хочешь неправильно. Здесь так не делают. Приходи, получай ченжсеты
от своих сотрудников и вливай это в общий репозиторий, есть стандартная
поддержка приёма и применения по почте и иными средствами.
- Мне надо чтобы они это делали сами. И это неудобно ещё по целому ряду
параметров - например, надо держать на сервере полный шелл.
- Ты хочешь неправильно. Это распределённая система.
- Если я хочу один репозиторий, но две рабочих копии?
- Ты хочешь неправильно. Это распределённая система. Каждая рабочая копия
получает полную копию репозитория со всей историей.
- Я не хочу каждый раз переливать между двумя репозиториями у себя в home.
- Ты хочешь неправильно. Это распределённая система.
- Лог коммитов сортируется по дате исходного коммита. Если кто-то поставил
дату коммита 70-м годом, его будет очень долго и нудно искать.
- Да, дата коммита и авторство не меняются при слиянии.
- Тогда почему у коммита нет нескольких дат и авторов? Ведь тот, кто влил
набор изменений, тоже сделал существенное действие, которое должно быть
отражено. Он выбрал источник вливания, он выбрал набор изменений.
- Ты хочешь странного.
надо поменять значение одного параметра, а в остальные он должен прийти
неизменённым. Как это удобно сделать?
- Вызови в этом месте loop() с новым параметром и заверши работу.
- Но у меня дальше большая общая часть работы.
- Вынеси её в отдельную функцию, вызови loop() из неё.
- Это неудобно. Почему бы не сделать что-то вроде Xout=ifdef(X1, X1, X),
loop(...,Xout)?
- Ты хочешь неправильного. Здесь делают именно так.
- Как это нормально делается? Я же не могу отдать параметр обратно.
- Сложи его значение в ets.
- Но это уже побочный эффект, это неправильная практика. Надо избавляться
от побочных эффектов.
- Здесь делают так.
- Но ets дорого, и неуникально. Я не могу изобретать атом для каждого
процесса, они плодятся по одному для внешнего объекта согласно конфигурации.
Почему бы не использовать словарь процесса?
- Это неправильно. Словарь процесса - костыль, его скоро отменят.
- Но ets - такой же костыль, причём менее удобный, потому что надо использовать
левые сущности вроде имён-атомов.
- Здесь делают так.
- Почему я не могу использовать в качестве идентификатора таблицы текстовую
строку?
- Здесь так не принято.
- Мне нужно сделать общий репозиторий, в который все будут складывать свои
изменения.
- Ты хочешь неправильно. Это распределённая система.
- Я и использую её как распределённую. Каждый тащит изменения к себе, делает
что хочет в любом количестве своих копий и репозиториев, затем, когда решил,
что всё окончательно правильно - делает push.
- Ты хочешь неправильно. Каждый должен коммитить в свою ветку в центральном
репозитории. Дальше у него остальные забирают изменения.
- Я не хочу разводить бардак, особенно когда таких источников будет два
десятка. Каждый обязан влить свои изменения и за это отвечает.
- Ты хочешь неправильно. Здесь так не делают. Приходи, получай ченжсеты
от своих сотрудников и вливай это в общий репозиторий, есть стандартная
поддержка приёма и применения по почте и иными средствами.
- Мне надо чтобы они это делали сами. И это неудобно ещё по целому ряду
параметров - например, надо держать на сервере полный шелл.
- Ты хочешь неправильно. Это распределённая система.
- Если я хочу один репозиторий, но две рабочих копии?
- Ты хочешь неправильно. Это распределённая система. Каждая рабочая копия
получает полную копию репозитория со всей историей.
- Я не хочу каждый раз переливать между двумя репозиториями у себя в home.
- Ты хочешь неправильно. Это распределённая система.
- Лог коммитов сортируется по дате исходного коммита. Если кто-то поставил
дату коммита 70-м годом, его будет очень долго и нудно искать.
- Да, дата коммита и авторство не меняются при слиянии.
- Тогда почему у коммита нет нескольких дат и авторов? Ведь тот, кто влил
набор изменений, тоже сделал существенное действие, которое должно быть
отражено. Он выбрал источник вливания, он выбрал набор изменений.
- Ты хочешь странного.
no subject
Date: 2008-12-19 08:31 am (UTC)изменения.\\
Как же я не люблю распределённые системы…
У нас вообще дерево репозиториев — ГЛАВНОЕ (Release Engenerring'овое), потом по крупным кускам, потом по командам внутри кусков. В каждой команде есть человек (ротируется раз в месяц, все сидят на этой должности по очереди), который раз в неделю вс изменения команды отправляет наверх, дожидается пока изменения других команд тоже будут отправлены наверх и спускает их вниз, в резпозиторий своей команды.
Жуть.
no subject
Date: 2008-12-19 08:35 am (UTC)Изврат, конечно, зверский. Зато пропала необходимость каждый день восстанавливать содержимое .git/refs/heads/master.
no subject
Date: 2008-12-19 08:42 am (UTC)no subject
Date: 2008-12-19 08:44 am (UTC)Вообще, зачем ВАМ hg, а не subversion, когда один центральный репозиторий, который видят все, — плохо понятно. “Тут так принято”? На мой вкус, hg изрядно ещё сыр.
no subject
Date: 2008-12-19 10:42 am (UTC)no subject
Date: 2008-12-19 10:50 am (UTC)no subject
Date: 2008-12-19 10:52 am (UTC)no subject
Date: 2008-12-19 08:32 am (UTC)no subject
Date: 2008-12-19 08:34 am (UTC)no subject
Date: 2008-12-19 08:44 am (UTC)no subject
Date: 2008-12-19 10:45 am (UTC)http://www.selenic.com/mercurial/wiki/index.cgi/SharedRepoExtension
no subject
Date: 2008-12-19 10:49 am (UTC)фряхуgit!no subject
Date: 2008-12-19 11:01 am (UTC)У нас один общий репозиторий (когда много разработчиков, то не все могут пушить, а просто делятся на небольшие группки - для стройности, но это по желанию). Я юзал и N рабочих копий - один репо, и наоборот (N репозиториев - 1 рабочая копия), ну и уж тем более в хг такой глупостью, как сортировка по дате, и не пахнет.
no subject
Date: 2008-12-19 02:14 pm (UTC)no subject
Date: 2008-12-19 10:49 am (UTC)ты прав, а то у вас локальные заморочки:
цитирую:
"если словарь процесса действительно лучшее решение, то не вижу причин его не поюзать
словарь процесса совершенно точно никто не отменит
XOut = if ... -> X; ... -> X1 end -- это обычная практика"
по поводу таблиц - действительно ets таблицы либо по номеру, либо по атому идентифицируются.
no subject
Date: 2008-12-19 10:50 am (UTC)no subject
Date: 2008-12-19 11:01 am (UTC)loop(A, B, C, X) ->
XOut = if
A > B -> ..., X;
B > C -> ..., X;
true -> ..., A + B + C
end,
...,
loop(A, B, C, XOut).
A + B + C + X лучше
no subject
Date: 2008-12-19 11:10 am (UTC)loop(A, B, C, X) -> XOut = if A > B -> ..., X; B > C -> ..., X; true -> ..., A + B + C + X end, ..., loop(A, B, C, XOut).no subject
Date: 2008-12-19 05:20 pm (UTC)Мы перешли на git c svn'а примерно полторы недели назад и компостировка далась хоть и с трудом, но безболезненно. Зато теперь девелоперы творят всякие трюки типа "Гоша, я вот тут написала эту регистрацию, давай я ее тебе пушну, ты смерджишь с роутерами и пушнешь мне назад?"
no subject
Date: 2008-12-20 09:06 am (UTC)no subject
Date: 2008-12-20 09:23 am (UTC)no subject
Date: 2008-12-20 09:44 am (UTC)Я удивлялся так же как и ты сейчас, когда мне это доказывали два дня подряд:))
no subject
Date: 2008-12-20 09:47 am (UTC)no subject
Date: 2008-12-20 09:56 am (UTC)no subject
Date: 2008-12-20 10:05 am (UTC)no subject
Date: 2008-12-20 10:13 am (UTC)no subject
Date: 2008-12-20 11:11 am (UTC)no subject
Date: 2009-05-04 05:21 pm (UTC)В общем, сейчас работает под общим uid'ом.
no subject
Date: 2009-05-04 07:53 pm (UTC)* * * * * chgrp -R git /var/git; chmod -R g+w /var/git/
no subject
Date: 2008-12-20 01:44 am (UTC)no subject
Date: 2008-12-20 09:07 am (UTC)