Мой путь в Open Source :) Михаил Богданов

суббота авг 01, 2009

Для просмотра процессов в Unix я привык использовать команду ps, однако недавно наткнулся в OpenSolaris на команду prstat.

Она интересна тем, что позволяет отслеживать состояние процессов в реальном времени, а так же отслеживать процессы по зонам.

Подробнее об этой команде написано здесь: http://docs.sun.com/app/docs/doc/820-2979/rmtaskproj.task-6?l=ru&a=view

А так же конечно на man странице :)

четверг июл 30, 2009

Отличную книгу по OpenSolaris на русском в формате PDF можно найти здесь:

http://opensolaris.org/os/community/edu/curriculum_development/

суббота июл 11, 2009

Встала задача прикрутить RMagick к Ruby on Rails на сервере с OpenSolaris 2009.06

Первая проблема была в том что последний RMagick gem работает с более новой версией ImageMagick,  нежели лежит в opensolaris.org репозитории. Это значит придется ставить из исходников.

 Во-первых для этого понадобится SunStudio, поставить ее можно их стандартного репозитория, после установки добаить путь каталога bin в переменную PATH

Далее качаем ImageMagick: http://imagemagick.org/script/install-source.php

На этой страничке также описан процесс установки, он стандартный. Но здесь надо сделать замечание, команду ./configure следует запускать с параметрами:

./configure --disable-static --with-modules --without-perl --without-magick-plus-plus --with-quantum-depth=8 CC=gcc

Я не уверен что это минимальный набор параметров, при котором программа установится, но он гарантировано работает, кто знает что отсюда следует выкинуть - пишите в комментариях

итак, ставим ImageMagick, теперь у нас встанет и gem rmagick

Но работать эта связка все равно не будет ) rmagick не находит путь к файлам библиотеки, для решения этой проблемы надо прописать путь поиска:

crle -u -l /usr/local/lib


Вот и все, теперь должно работать )

воскресенье июл 05, 2009

Я конечно понимаю что ошибка [NoMemoryError: failed to allocate memory] может возникать при разных обстоятельствах, но конкретно у меня она была вот в таком контексте:

Status: 500 Internal Server Error
NoMemoryError: failed to allocate memory: SET SQL_AUTO_IS_NULL=0

Потратив довольно много времени на поиски в гугле, я нашел вот такую полезную ссылку: ссылка

Там написано:

Проблема в том что MySQL 5.1 криво работает с рельсами, для решения проблемы нужно:

  1. Скачать старую версию MySQL client library (можно прямо отсюда)
  2. Скопировать библиотеку в папку ruby (у меня это C:\Ruby\bin)
  3. Перезапустить MySQL

Вот и все

Да, кстати, думаю что Вы уже поняли, но чтобы не кидали камни в мой огород, уточню: все что написано выше касается Windows

среда июн 10, 2009

Данил Еремеев:

Был рад поучавствовать в проекте. До этого не учавствовал в подобных соревнованиях, отчасти поэтому и решил попробовать. С java fx так же ранее не доводилось встречаться. На сайте проекта без проблем нашел всю необходимую документацию, и впринципе довольно быстро начал получать удовольствие от разработки, без копаний в документации и т.д. Оттолкнуло от продолжения развития своего алгоритма отсутствие многомерных массивов в javafx. Так же не очень понравились странные "тормоза" апплета в ie на моей машине - иногда некоторые места в интерфейсе просто не перерисовывались. Так же была бы приятна функциональность протестировать свой алгоритм при игре с другими игроками на сервере, без ожидания розыгрыша ночью (хотя я может быть чего то не углядел).

Любую технологию сложно осваивать если нет задачи, благо ВУЗ, всегда предлагает нам большой выбор несложных и часто бесполезных задач.

Организовал я группу ребят писать очередной курсач на JavaFX, результаты работы доступны на сайте http://otu.mabogdanov.ru

Что я могу сказать после этого про JavaFX?

  1. Писать на JavaFX приятней чем на Action Script 3. Работая после этого Java, мне постоянно хотелось после этого прибиндить что нибудь к чему нибудь. Механизм привязок влюбляет в себя сразу и навсегда. (Тригеры тоже ничего ;) )
  2. Элементы функциональности прекрасны, структуры типа 
  3. var values = for (varLine in vl where indexof varLine mod 2 == 0) {varLine.valueRange};

    экономят кучу времени и кода

  4. Понятно что разделение декларативного описания интерфейса и логики приложения - это правильно, но не правильно что иногда разделив, их сложно заставить работать вместе. Такая проблема неизбежно когда используются два совершенно разных языка, например XML и ActionScript, XML и C#... JavaFX - уникальное решение, язык который очень удачно совмещает в себе декларативные и императивные черты.
  5. Как бы не прекрасен был механизм биндинга им надо пользоваться акуратно, первая моя программа на JavaFX работала медленно, ненадежно, в общем плохо. Для избежани таких пролем надо всегда четко представлять себе какие цепочки привязок заускаются в каждый момент, не происходит ли это в цикле, в критических по скорости местах. Иногда один лишний bind делает программу медленнее в десятки раз, вплоть до полного зависания
  6.  До сих пор остается проблема с запуском на клиентских машинах. Во-первых к сожалению не у всех есть JRE, думаю с приходом BlueRay в массы эта ситуация поправится, а пока очень непросто уговорить пользователя скачать и поставить себе на компьютер нечто размером в 14 мегабайт. JavaFX аплеты не запускаются в браузере Opera, все еще непонятно что с Linux системами. Правда это ситуация постепенно исправляется - JavaFX 1.2 по утверждению создателей работает на Ubuntu и OpenSolaris. Java - она тем и славится что работает везде, и думаю что JavaFX очень скоро догонит своего старшего брата.
Исходные коды нашей работы доступны для сканичвания на том же сайте, правда хочу отметить что после выхода JavaFX 1.2 они не компилируются, там буквально два мелких изменения, Вы можете исправить сами или подождать когда я залью на сервер новую версию

понедельник апр 13, 2009

Как я искал такой пример в интернете! Ох как искал! Но нету ) все примеры под eclipse, a NetBeans настойчиво не хотел импортировать клипсовые проекты

И к тому же все эти примеры были очень пересыщены, сложно было сходу разобраться что к чему.

Итак:  к посту прикреплен файл .rar где лежит проект NetBeans

Как мы все это ставим? сначала открываем проект в NetBeans, жмем Run - должно все работать (при нажатии на кнопку поле заполняется словом "Mikle")

Потом самое главное: нам нужен Flex Builder 3, скачать его можно с офиц сайта.

Запускаем и импортируем проект из папки web/flex внимание! нужно поставить галочку "импортировать в иной путь" и оставить проект там где он есть

Далеее....

Допишу завтра!!!!  (15.04.2009)

Итак, наступило завтра (29.04.2009) понимаю что странное исчисление дней... ну что ж поделать )

Flex Builder использует абсолютные пути к файлам поэтому надо вручную поредоктировать файлы:

web\flex\.flexProperties

web\flex\.actionScriptProperties

итак, билдим во флексе и запускаем  нетбинсе, все должно работать!

Проект развивается, в нем активно участвует 5 человек, еще столько же параллельно обучаются. По схеме: задача дается как реальному исполнителю так и обучающемуся, конечно в работе используется то что сделал первый, но для ученика это возможность поработать над реальным проектом, посмотреть как решают задачи опытные разработчики.  Как только в один прекрасный момент работа одно из стажеров будет качественной - он перейдет в группу разработчиков.

Мы используем Java как серверный язык, Glassfish как сервер приложений.

Вся клиентская часть пишется на Flex.

Они общаются между собой по протоколу AMF, который реализуется на сервере с помощью связки Spring Fraemwork + BlazeDS

Первый вариант работы мы сделали на JSF + AJAX, результатом остались недовольны, и вот почему:

1) По умолчанию NetBeans предлагает использовать JSF компоненты Woodstock - весьма рпотеворичивая технология, где весь браузерный html генерируется с помощью javascript ужена клиенте. Отсюда проблемы со скоростью и переодические глюки.

2) Неудобство работы с AJAX. Для работы с Ajax в JSF предлагается библиотека Dynafaces, действительно при малых затратах она позволяет быстро реализовать динамическое изменение страницы, но как только возникает потребность сделать что то выходящее за рамки стандартных действий, начинаются проблемы. Вообще я прихожу в последнее время что чем "легче" инструментарий, тем проще с ним работать. Поэтому сейчас я предпочитаю html код генерировать чистым JSP+JSTL, используя Spring MVC.. или даже Ruby on Rails

3) Вечная проблема с разными браузерами, тут думаю можно обойтись без комментариев

В итоге была выбрана технология Flex, впечатления самые радужные, клиентская часть пишется быстро и просто, работает на ура и никаких проблем с разными браузерами. Серверный код значительно похудел за счет вырезания клиентских контроллеров и адаптеров, осталась одна логика приложения. Благодаря IoC контейнеру в Spring используются обычные Java классы без всяких дополнительных интерфесов.

 Что получается в итоге к сожалению показать не могу, проект закрытый, но в следующем посту выложу исходные коды простейшего приложения, использующего связку Java + Spring + BlazeDS + Flex

вторник янв 27, 2009

В прошлой записи я рассказал о нашем проекте VoIP WebAdmin (название рабочее). Теперь я хочу поговорить о нем с технической точки зрения: используемые технологии и мои впечатления от работы с ними.

Итак, программа представляет собой веб-приложение. Для разработки был выбран web application framework - Java Server Faces.

Впечатления двоякие. С одной стороны пока делаешь стандартные действия, проблем не возникает и скорость разработки оказывается высокой. Например связь данных и интерфейса, табличное представление информации и прочее...

Но стоит сделать шаг в сторону и начинаются проблемы. Элементарный пример: пусть мы хотим задать задать элементу Text Field ширину 300px. Казалось бы, что проще?! Выделаем в NetBeans компонент textField1 и ищем свойство Width... не находим :) Ладно, пусть так, зато находим свойство Style. Вот это то что нужно! CSS как раз для этого и создан. Пишем туда заветную строчку: width: 300px; Выглядит это так:


Открываем страницу в браузере... Тут нас ждет разочарование! Поле как было своего размера (примерно 150px), так и осталось.

Начинаем разбираться в чем проблема, CSS есть CSS он должен работать везде. Поможет нам великолепный модуль к Firefox - Firebug. С помощью него находим html код, в который JSF преобразовал наш textField1.

Не правда ли многовато для одного контрола? Но главное не это. Посмотрите к чему JSF применил наш Style! к компоненту <span>  в котором лежит наш <input>, размер которого мы хотели менять. А это значит что какие бы мы не указывали width и height для textField1, размер не изменится. Вот так все печально.

Решение проблемы конечно есть. Не красивое, но есть. Дело в том что в CSS есть возможность определять стили для дочерних элементов компонента  класса. А наш input это как раз дочерний элемент контейнера <span>, к которому JSF наш класс и применит.

Работает это так:

Теперь сомотрим в браузер и радуемся :)

Несмотря на то что проблема решена, остается вопрос, почему такая простая вещь делается таким нестандартным способом? И это не единственный случай, с которым я столкнулся.

И думаю что я могу дать ответ на этот вопрос. Дело в том что JSF позиционируется как Framework для создания web-приложений, а не сайтов. Никогда не понимал в чем разница между ними, а сейчас кажется понял. Web-приложение предполагает большую функциоанльность, но неприхотливость в вопросе интерфейса. JSF предоставляет богатый набор компонентов в расчете на то что разработчик не будет пытаться изменить их внешний вид. Цель JSF - максимально приблизить разработку Web-интерфейса к созданию обычного приложения на Swing. И на мой взгляд он с этой задачей достойно справляется.

Самый частый вопрос, который мне задают при рассказе об Open Source - как на этом делают деньги? Действительно, сколько бы работа не приносила удовольствия, кушать все равно хочется. И я нашел на ответ на этот вопрос в виде реального оплачиваемого проекта для моего сообщества.

Началось все с открытого письма от Филипа Торчинского с информацией о работе, предлагаемой некой европейской фирмой. Не доверяя своим знаниям в языке, я обратился к своей знакомой, свободно владеющей английским (настоящая красавица, фото прилагается). Вскоре мое резюме было на почте работодателя.

Для разработки нам был предложен проект веб-администрирования системы ip телефонии. Преодолевая языковые барьеры мы наконец поняли что именно от нас хотят (а это бывает непросто даже с русскоязычными заказчиками) и сделали первый commit на svn сервер.

Данный опыт показал что слово Euro чудесным образом стимулирует у студентов тягу к знаниям и открытым технологиям. На данный момент основных разработчиков всего три, остальные с редким усердием учат яву :) 

У студентов две проблемы:

  1. Где взять знания
  2. Где их выгодно применить.

Программа Sun Campus Ambassador традиционно дает ответ на первый вопрос, второй остается чаще всего не раскрытым. И это неправильно! Мы ведь Амбассадоры! Под нашим началом самые талантливые, самые перспективные студенты. Sun Microsystems предоставляет нам отличную информационную, техническую и образовательную базу. Сегодня у меня встреча по поводу еще одного проекта. Работа будет для каждого участника моего OSUM.

Та, без кого этот проект был бы невозможен: