суббота, 15 мая 2010 г.

Продемонстрируй быдло-сайт!

Как я уже упоминал в предыдущих постах, быдло философия в айти имеет очень важное значение.
Но вот представьте: пишите вы совершенно быдляцкий быдлосайт на джумле, и уже готовы продемонстрировать его заказчику. Но в силу своей нефрилансерской сущности под рукой не имеется машины, имеющей статический ип в интернете. Хостинг для проекта тоже еще не куплен. Беда!

На помощь приходит сервис временного хостинга: http://tempopage.com

Все делается мгновенно: задаете время жизни своего сайта (от 1 часа до 30 дней), выбираете предустановленную CMS (на момент написания доступны Joomla 1.5 и Wordpress 2.7), подтверждаете регистрацию через почту и вуаля! В вашем распоряжении фтп доступ к внутренностям приложения джумлы (признаюсь, не пробовал удалять все и подсовывать другое пхп приложение) и phpMyAdmin доступ к MySQL (доступна 1 база данных).
Все это конечно же бесплатно.
Очень неприятный минус - частые недолгие падения сайта. Зашел на сайт - работает, через 5 мин попробовал - уже недоступен. Однако на главной странице сервиса имеется подозрительная надпись "Beta 1.0v" вне всякого контекста. Можно предположить, что сервис тестируется и улучшается и минус этот будет устранен в дальнейшем.

понедельник, 1 марта 2010 г.

Python GUI

Решил значит я написать десктопное приложение на питоне, в котором требовался бы определенный набор виджетов, а так же рисование несложных, но интерактивных 2д высеров. И сразу же увяз в болоте различных вариантов графического представления. С ним у питона не все гладко.

Итак на данный момент что известно

  • wxPython - бегемот, однако вроде активно юзается. Депенденси для него составляет 29 неприятных метров. Бегемотность и является самым большим минусом.
  • PyQT - еще более бегемотистый (но и по всей видимости более продвинутый - имеется релиз для 3го питона) бегемот. Минус опять же размер депенденси ( в которую входит нафиг не сдавшиеся мне вспомогательные С++ костыли из qt-core).
  • pygame - надстройка над SDL для питона. Примеры игрух выглядят весьма убого. Так же немного не прельщает реализация собственного мейн цикла. Полноценной библиотеки виджетов нету. Депенденси небольшая, однако работа со звуком мне на данный момент не нужна, с виджетами как уже сказал проблема. Посему смысл использования теряется.
  • кучи всяких дохлых библиотек не дошедших даже до релиза 1.* : AnyGui, EasyGui, OcempGUI, Ocean, PyUi
То, что подает надежды
  • pyFLTK - байндинг питона на FLTK, некий легковесный с++ гуи тулкит. И pyFLTK, и FLTK доступны в генту портеже, оба проекта живы.
  • AVC - позволяет не привязываться к определенному ГУИ фреймворку а легко
    переключаться между ними:  GTK+, Qt3, Qt4, Tk, wxWidgets, Swing в Jython.
  • Tkinter - вроде в последних версиях начал выглядеть прилично, плюс здесь можно найти библиотеки для него, первая pmw очевидно жива и даже входит в gentoo portage. Также обнаружено расширение Tix. Также упоминались некоторое расширение тем ttk, есть даже какой-то проект. Надо проработать тему расширений для Tkinter.
Так что на данный момент хотелось бы попробовать [AVC +] Tkinter.

четверг, 11 февраля 2010 г.

Struts 2 и две submit кнопки в форме

На самом деле кнопок может быть и больше. Но именно столько мне необходимо было предоставить. Сценарий прост: надо произвести два разных действия по реакции на одну  иту же форму. обычными ресетами тут не обойтись. Поэтому встречаем костыль-решение, которое я взял отсюда (надеюсь автор не будет против на распространение такой нужной информации).


1. в кнопках пишем

<input type="submit" name="submitSave" value="Сохранить"/>
<input type="submit" name="submitCancel" value="Отмена"/>

2. в стратс экшене пишем

private boolean submitSave = false;
private boolean submitCancel = false;
   
public void setSubmitSave(boolean submitSave) {
    this.submitSave = true;
}
public void setSubmitCancel(boolean submitCancel) {
    this.submitCancel = true;
}

Вуаля, вот он костылек, в сеттерах. После этого можно юзать булеан филды и быть счастливым.



CSS будни

Очередная бородатая проблема с нормальным размещением контента на странице с использованием CSS. На этот раз было необходимо просто центрировать по вертикали один <div> внутри другого <div>'а. Совершенно простая задача, но решается через костыли (увы-увы, мой милый цсс, ты слишком идеален для нашего грязного мира).

Подходы которые не работают (и которые не следует даже пытаться реализовать):
  • аналогично центрированию по горизонтали margin-top: auto; margin-bottom: auto;
  • margin-top: 50%; даже при определенной высоте отца-контейнера приводит к каким-то рандомным скаканиям
Делать правильно нужно так:
  1. ставим у дива-отца position: relative; и не забываем задать его высоту.
  2. ставим у дива-сына position: absolute; и top: 50%;


понедельник, 1 февраля 2010 г.

Graphviz: начало

Да. Нелегко девелопить небольшой проект. Так и тянутся руки применять совершенно ненужные фичи чтобы поиграться с ними. Вот такова и история Graphviz в моей жизни. Так или иначе, о нем есть что рассказать.
Использовать Graphviz я решил по причине сильного нежелания генерить картинки диаграмм классов в какой-нить UML тулзе и потом вставлять эту картинку в вики проекта. Не хотелось при каждом изменении заново открывать диаграмму в тулзе, заново генерить картинку, заново ее вставлять в вики. Мне показалось, что данная последовательность действий - это, как говорят, overkill. Ведь я всего лишь хочу отобразить отношения между сущностями (оххохо). И для этого мне совершенно неважно как они будут расположены относительно друг друга. В случае с UML тулзой я решаю и эту ненужную задачу (конечно для красивых презентаций это задача нужна, но не в случае с вики). Примерно так же думали и разработчики Graphviz.

Для моей задачи я использовал не весь Graphviz, а только его подмодуль - dot.
Полезной оказалась статья http://www.ffnn.nl/pages/articles/media/uml-diagrams-using-graphviz-dot.php показывающая примеры использования DOT language для рисования диаграммы классов. В статье не показаны примеры различных типов стрелок (вы же помните эти глупые стрелки агрегации и композиции!), для этого юзаем параметр arrowhead.
Следует также помнить что для включения DOT маркапа в вики трака нужно поставить плагин, а в самой вики писать

{{{
#!graphviz

здесь ваш DOT-код

}}}

Вот как я стильно заюзал DOT для своей диаграмки

{{{
#!graphviz
digraph G {
node [
shape = "record"
]
Report->Message [arrowhead = diamond ]
FieldValue->Report [arrowhead = odiamond]
Field->ReportType [arrowhead = odiamond]
Field->FieldValue [arrowhead = diamond]
}
}}}

Trac: удовольствие разработки

Мдя, вот такой пафосный заголовок, но действительно интересно становится, когда упорядочиваешь проект с помощью Trac.

Немножко ознакомившись с Trac, начал искать разную инфу. Теперь мне пора закрывать все 50 открытых вкладок и поэтому решил сохранить все полезное в этом посте. Вот что получилось:
Кроме того нашел-таки способ рисовать диаграммы в вики с помощью маркапа:
  1. Ставим себе визуализатор http://www.graphviz.org
  2. Ставим плагин http://trac-hacks.org/wiki/GraphvizPlugin
  3. Наслаждаемся автоматическим рисованием стрелочек, кружочков и квадратиков по мановению руки.
Синтаксис для Graphviz весьма простой, но требуется время чтобы нагуглить то, что нужно. Поэтому в следующем посте размещу кое-что полезное по нему.

Trac: начало

На самом деле я имел удовольствие познакомиться с Trac уже давно. Однако знакомство то было мимолетным, оставив лишь приятное впечатление легкости интерфейса по сравнению с другими системами проджект менеджмента/баг трекинга.

По умолчанию следует думать, что в траке все замечательно. Исключения составляют следующие соображения:

  • на одном из форумов было указано на то, что из-за системы перекрестных ссылок в репозитории-вики-тикетах использование репозитория в другом проекте (например при создании форка проекта) приносит большие головные боли. Иными словами перекрестные ссылки создают связанность всех компонентов, которая очень удобна но только при сохранении целостности проекта.

  • я не нашел (пока) удобного варианта для быстрого редактирования хотя бы простых диаграмм в вики трака



При установке плагинов для windows версии трака следует проделать следующий костылек (найден в ридми BitNami Trac):

NOTE FOR WINDOWS USERS: Currently,
the easy_install Python script works a little funky
on Windows. We're already working on fixing it, but
installing Python eggs using the mentioned operating
systems needs a bit of extra tweaking. To install
a Trac plugin like WebAdmin, for example, you will
need to follow the guidelines available at
http://trac.edgewall.org/wiki/WebAdmin , and after
that, stop your servers using the Start Menu Shortcuts and copy

* python/DLLs
* python/Lib

folders to

* apache2/bin

overwriting its contents. That done, launch
the servers again and everything should work fine.