вівторок, липня 22, 2008

mercurial - нова для мене та поки слабо досліджена система, проте вже є
достатьньо проектів які ведуться в цій CVS і за розвитком яких я стежу.

Якщо для subversion є настільний клієнт Tortoise SVN , який покриває
мої потреби на 100%, то для mercurial прийнятного GUI-клієнта поки
немає. Аналог Tortoise SVN, Tortoise Hg має один неприємний дефект, він
конфліктує з встановленим Wing IDE, тому я від Tortoise Hg відмовився.
Незручність для мене консольного клієнта в тому що мені треба зайти в
кожну папку проекту і там маю виконати команду hg update. Цю задачу
було автоматизовано невеликим скриптом для iPython(інтерактивна консоль длоя Python). Зауважу що я використовую iPython
в режиму роботи командної оболонки , для цього він запускається з
опціями ipython -p sh . Всі дії проводилися на Windows XP проте повинно
працювати без змін і на будь-якому xUnix/Linux де можна встановити
Python та mercurial.



Всі проекти які я відстежую в мене зберігаються наступним чином:

some_drive\repository\svn\proj1
proj2
proj3
\hg\hg_proj1
hg_proj2
hg_proj3

Для рекурсивного оновлення проектів в підпапках я написав такий скрипт:

dirs = %mglob dir:*
for d in dirs:
cd $d
pwd
!hg pull
!hg update
up()

Розберемо по черзі що відбувається:

  1. dirs = %mglob dir:* в змінну dirs поміщається результат роботи вбудованої магічної команди (тут режим автопідстановки не здатен правильно розібратися, тому '%' писати обов'язково). mglob повертає список які підходять під заданий фільтр, а саме всі підпапки в поточній папці.
  2. for d in dirs: - цикл для перебору списку папок, змінній d під час кожної ітерації присвоюватиметься наступний елемент списку dirs
  3. cd $d - команда зміни поточної папки на папку вказану в змінній d. Зверніть увагу на знак '$', він дає вказівку інтерпритатору передати командному інтерпритатору вже результат виконаної команди чи змінну, в даному випадку назви підпапок.
  4. pwd - ще одна вбудована магічна команда, повертає поточну папку в
    якій ми знаходимся.
  5. !hg pull - для отримання змін з головного репозитарію(отримання змінн ззовні), зауважте на знак '!' він означає що викликається зовнішня команда.
  6. !hg update - оновлення локальної копії, тобто злиття змін отриманих на попередньому кроці з вашою копією.
  7. up() - функція еквівалентна cd .. - повернення на рівень вище, в даному випадку дужки () обов'язкові.

В результаті роботи скрипт зайде в кожну підпапку першого підрівня відносно поточної папки, виведе поточну папку, виконає там команду !hg update та повернеться на рівень вверх.

Збережемо як макрос цей код, для наступних використань, для цього виконаємо наступну команду: %macro hgrecupdate 150-151 , де hgrecupdate назва макроса, 150-151 - номери рядків в яких введено код макроса.

Щоб протестувати його роботу виконаємо наступні команди.


cd E:\repository\hg\ - команда зміни поточної директорії (треба зауважити, що системну команду !cd використовувати не рекомендовано, тому тут в реальності викликаєтьсся вбудована магічна команда(magic command) %cd, але оскільки по замовчуванню ввімкнуто режим автопідстановки, то знак '%' писати необов'язково).
hgrecupdate - власне виклик макроса рекурсивного оновлення.

Зразок виконання макроса зображено нижче:

--------------------> hgrecupdate()
<12> 'e:\\repository\\hg\\byteflow'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
<12> 'e:\\repository\\hg\\colubrid-main'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
<12> 'e:\\repository\\hg\\jinja-main'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
<12> 'e:\\repository\\hg\\lodgeit-main'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
<12> 'e:\\repository\\hg\\pocoo-main'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
<12> 'e:\\repository\\hg\\pygments-main'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
<12> 'e:\\repository\\hg\\pylons'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
<12> 'e:\\repository\\hg\\QuickWiki'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
<12> 'e:\\repository\\hg\\textpress-main'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
<12> 'e:\\repository\\hg\\werkzeug-main'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved


Проте, закінчивши роботу інтерпритатора ми виявимо, що макроси не зберігаються між сесіями. Тому для цього викличемо%store hgrecupdate
макрос буде збережено в постійній пам'яті і його можна буде викликати в наступних сесіях.

Розв'язуючи реальну задачу я показав тільки деякі прості методики роботи з інтерактивним інтерпритатором iPython в режимі командної оболонки. Проте для складніших задач вам прийдеться зануритися в документацію.

понеділок, липня 14, 2008

Сьогодні вирішив для різноманітності зрадити ідеї мінімалізму і набрати кілька html-сторіночок в Microsoft Expression Web 2, який вони позиціонують як наступника Frontpage та прямого конкурента Adobe Dreamweawer. Програма встановлення досить оригінальна, встановилося через пень колоду, а все через те що я видалив приховану копію інсталяційних файлів MS Office 2007, прийшлося заново перевстановити Office 2007, щоб відновити Локальне джерело встановлення (Msocache) і на те потратити 1,8 Гб :E. Питається яке діло Expression Web до Офісу, а майже ніякого, оскільки його можна встановити і на машину де офісу немає, але так як вони використовують частково спільні бібліотеки та технологію microsoft installer то доводиться йти на такі жертви (я надіюся що коли набудь менеджеру який придумав Локальне джерело встановлення відірвуть все зайве, в тому числі руки які однозначно ростуть в нього з дупи, оскільки проблем, які він покликаний вирішувати не вирішує, а проблеми створює постійно).
Ну гаразд встановили, пора запускати. Майкрософт дає можливість використовувати продукт безкоштовно 30 днів, мені для ознайомлення вистачить. Запустив. Приємна темна тема, якраз під стать Zune Theme яка в мене встановлена. Приступаю до власне редактора, десь я це все бачив. Редактор 1:1 передертий з Visual Studio Web Developer, що добре, бо мені їхня ідеологія реалізації WYSIWYG подобається. А далі почав набирати невеличку статтю. І все було чудово, якщо не рахувати постійно вставляння span-ів з lang="en-us" хоча його ніхто й не просив, ну нічого ручками почищу. Нарешті документ готовий і я вирішив за старою звичкою, як в Visual Studio , запустити на перегляд по F5, мені вискочило якесь віконечко з попередженням яке не встиг прочитати, а далі .............
Далі МАТИ, ТРОХПОВЕРХОВІ, НЕ ДЛЯ ДРУКУ. То творіння криворуких індусів знищило 45 хвилин роботи, повернувши документ майже до початкового вигляду. При цьому відкат(Undo/Redo) НЕ ПРАЦЮЄ. Заспокоївшись трохи я вирішив подивитися що ж таке робить та злощасна F5. А не тут то було, довідка НЕ ЗАПУСКАЄТЬСЯ, в принципі. Видає що не знайдено розділи які відповідають шуканій темі. Шукати ж в величезному списку команд немає бажання.
Резюме. Expression Web 2 відправляється в смітник. InType, Notepad++, Visual Studio Web Developer мені вистачає. Майкрософт в стадії цвітучої деградації. Продукти все монстроїдальніші, а помилки пропускаються в реліз все примітивніші. Є відділи які знаходять можливість випускати достойні продукти, але їх все менше, маркетинг стоїть попереду воза, якість не в моді.
До криворуких розробників Expression Web 2, до вашого відома, відкат (Undo/Redo) був реалізований ще в часи DOS-івського 5-го Word, може й швидше, просто древнішого не застав. Ящо самі не здатні реалізувати зробіть Copy-Paste з Miscrosoft Office чи Visual Studio.