«Избегайте преждевременного обобщения», советует Хаак. «Не создавайте систему способную предсказать любое изменение. Пусть она будет достаточно гибкой для внесения изменений».
Чтобы определить, когда требуется обобщение, Хаак использует Правило Трех: «Когда вы в первый раз увидите, что что-либо может повторяться, не обобщайте это. В следующий раз сделайте все аналогичным способом, возможно даже при помощи копипастинга, но только не обобщайте. В третий раз хорошенько подумайте, как это можно обобщить».
— Откуда вы знаете, что я ненормальная? — спросила Алиса.
— Потому что ты тут, — просто сказал Кот. — Иначе бы ты сюда не попала.
— Потому что ты тут, — просто сказал Кот. — Иначе бы ты сюда не попала.
18 февраля 2008 г.
Цитата: Хаак
Бывший MVP (Most Valuable Professional – Самый Ценный Специалист) Microsoft Фил Хаак о повторных использованиях и обобщениях при разработке ПО
Updated: Знакомство с Vim
По просьбе читателей поправил текст старой статьи "Знакомство с Vim. Настройки". Добавлено краткое описание режимов, а сам контент сделан более последовательным.
6 февраля 2008 г.
Еще раз об MDA
Возвращаясь к напечатанному, хотелось бы добавить...
Разработка серьезного программного продукта обычно ведется с использованием средств версионного контроля. При таком подходе довольно часто возникает необходимость выполнять какие-то работы (например, исправление ошибок) на дополнительных ветках, чтобы по окончании этих работ аккуратно слить результат на основную ветку.
Так вот. Инструмента для выполнения merge UML-моделей я еще не встречал. В результате, все слияния и разрешения конфликтов выполняются визуально и вручную. Слияние элементарного изменения может потребовать в разы (а то и в десятки раз) больше времени, чем само внесение этого изменения в модель. Поэтому, я не понимаю, как можно нескольким разработчикам эффективно работать по MDA-технологии.
Разработка серьезного программного продукта обычно ведется с использованием средств версионного контроля. При таком подходе довольно часто возникает необходимость выполнять какие-то работы (например, исправление ошибок) на дополнительных ветках, чтобы по окончании этих работ аккуратно слить результат на основную ветку.
Так вот. Инструмента для выполнения merge UML-моделей я еще не встречал. В результате, все слияния и разрешения конфликтов выполняются визуально и вручную. Слияние элементарного изменения может потребовать в разы (а то и в десятки раз) больше времени, чем само внесение этого изменения в модель. Поэтому, я не понимаю, как можно нескольким разработчикам эффективно работать по MDA-технологии.
1 февраля 2008 г.
Как сделать merge в cleartool
В ClearCase сделать слияние (merge) для файлов с разных веток довольно просто. Проблемы начинаются, если на сливаемых ветках добавлялись или удалялись файлы. Оказывается, слияние директорий в ClearCase — задача непростая.
Выполнить слияние двух веток можно следующей командой:
Эта команда выполнит слияние с ветки
Пример. У меня в текущей папке есть файлы file1, file2 и file3. На ветке
В результате выполнения файлы file1 и file3 будут вычекнуты (checkout) на текущую ветку и модифицированы в соответствии с изменениями на ветке
Но вот, предположим, что на ветке
Описание команды
Только после этого можно будет безболезненно выполнить
Итак, синхронизируем текщую директорию с веткой
Теперь можно зачекать измененную директорию (а можно сделать это потом). И наконец-то можно выполнить долгожданный
Будет выполнено слияние для файлов file1, file3 и file4. Теперь нужно внести в репозиторий результаты слияния веток. Заносим всё сразу — зачем мелочиться? :)
Ух. Кажется, несложно. Но когда у нас нужно синхронизировать не одну директорию, а, скажем, десяток? Все эти действия превращаются в пытку :( К счастью, действия, необходимые для синхронизации директорий, довольно легко автоматизировать каким-нибудь простеньким скриптом. Что я и сделаю на досуге :)
Выполнить слияние двух веток можно следующей командой:
cleartool findmerge . -fversion <version/label> -co -nc -merge -gmerge
Эта команда выполнит слияние с ветки
version
или label
на текущую ветку для всех файлов, содержащих изменения. Ключ -gmerge
удобно использовать при работе в графической среде — при возникновении конфликтов cleartool запустит визуальный инструмент для разрешения конфликтов вручную. Но при работе, например, по SSH, указывать этот ключ смысла не имеет; в этом случае используется консольный инструмент разрешения конфликтов. Тем, кто пользуется консольным, можно только посочувствовать.Пример. У меня в текущей папке есть файлы file1, file2 и file3. На ветке
/main/mybranch1
выполнены изменения для файлов file1 и file3. Чтобы слить изменения с ветки /main/mybranch1
на текущую ветку, мне необходимо выполнить команду:
cleartool findmerge . -fversion /main/mybranch1/LATEST -co -nc -merge -gmerge
В результате выполнения файлы file1 и file3 будут вычекнуты (checkout) на текущую ветку и модифицированы в соответствии с изменениями на ветке
/main/mybranch1
. Мне останется лишь выполнить checkin для измененных файлов. Файл file2 останется нетронутым.Но вот, предположим, что на ветке
/main/mybranch1
добавлен еще один файл — file4. Выполнение findmerge
никак не коснется этого файла, потому что на текущей ветке этого файла нет. Значит, нужно сначала сделать merge для директории.Описание команды
merge
говорит о том, что слияние директорий происходит в три шага:- убедиться, что на "той" ветке нет вычекнутых элементов;
- вычекнуть директорию в текущей ветке;
- выполнить команду
cleartool merge
для директории.
Только после этого можно будет безболезненно выполнить
cleartool findmerge
.Итак, синхронизируем текщую директорию с веткой
/main/mybranch1
:
ct co -nc .
ct merge -to ./ ./@@/main/mybranch1/LATEST
Added file file4 to ./.
Теперь можно зачекать измененную директорию (а можно сделать это потом). И наконец-то можно выполнить долгожданный
findmerge
:
cleartool findmerge . -fversion /main/mybranch1/LATEST -co -nc -merge -gmerge
Будет выполнено слияние для файлов file1, file3 и file4. Теперь нужно внести в репозиторий результаты слияния веток. Заносим всё сразу — зачем мелочиться? :)
ct ci -c "Merged from /main/mybranch1." `ct lsco -r -cview -short`
Ух. Кажется, несложно. Но когда у нас нужно синхронизировать не одну директорию, а, скажем, десяток? Все эти действия превращаются в пытку :( К счастью, действия, необходимые для синхронизации директорий, довольно легко автоматизировать каким-нибудь простеньким скриптом. Что я и сделаю на досуге :)
Теги:
программирование,
clearcase,
linux,
shell,
unix
Подписаться на:
Сообщения (Atom)