пятница, 28 декабря 2007 г.

SSH Filesystem

sshfs - утилита, которая позволяет примаунтить директорию на сервере. Все, что надо от сервера - это поддерживать SSH File Transfer Protocol. Все, что надо пользеватетю - установить FUSE(фреймворк виртуальных файловых систем) и sshfs. После установки достаточно создать точку монтирования и запустить команду:
Для размонтирования:
Have a lot of fun!

Read More...

BPEL Learning Guide


BPEL Learning Guide

Read More...

Установка/удаление переменных окружения

Установить переменную окружения можно командой export VARNAME=VARVALUE (оболочка bash). Что бы посмотреть, установленна ли она используется команда env (printenv), например так: env | grep VARNAME. Удалить можно либо командой unset VARNAME либо командой export с ключем -n: export -n VARNAME.

Read More...

ActiveBPEL

Пытаюсь установить ActiveBPEL (open-source реализация бипля). Сам исходник - 20 метров, но такая куча зависимостей!!! :-| Уже скачал дополнительно 150 метров - и это еще не конец!!! Мало того - теперь еще и версии не совпадают :(

Read More...

четверг, 27 декабря 2007 г.

Как звучит WSDL

From Wikipedia:

Web Services Description Language (WSDL, pronounced 'wiz-dəl' or spelled out, 'W-S-D-L')

Read More...

Автоматизация бизнес-процессов с помощью BPEL

Автоматизация бизнес-процессов с помощью BPEL - интересная статья о BPEL(читается как "бипль"). В статье показано, какое место занимает бипль в структуре стандартов и спецификаций веб-сервисов и даны два примера использования бипля для разработки простых SOA на базе веб-сервисов (кстати, SOA не на базе веб-сервисов я еще не встречал). Но примеры, к сожаленью, действительно очень простые и описаны вкраце. Хотелось бы понять, как BPEL связан с WSDL на практике (в это я как раз сейчас разбираюсь):

Полный вариант BPEL-файла для процесса определения цены должен, конечно, содержать также соответствующие блоки взаимодействия с Web-сервисами торговых партнеров и код логики выполнения переходов и простейших вычислительных операций (например, выбора наименьшей цены). Дополненный WSDL-файлами (для описания внешних Web-сервисов), он будет представлять собой законченную программу "оркестровки" Web-сервисами.

Read More...

Conductor

В английском языке слово conductor означает не только кондуктора, но и дирижера:

The orchestration and the choreography distinctions are based on analogies: orchestration describes central control of behavior as a conductor in an orchestra...

Read More...

среда, 26 декабря 2007 г.

Linux vs Windows

Собравшись с духом решил окончательно перейти на Linux на рабочей машине. Экперементировал я с ним уже давно и при помощи виртуальной машины запускал частенько, но время Ч - время координальных перемен :) - наступило только сейчас. Долгое время меня останавливало то, что нужно напрячься и найти замену MS Outlook (именно его, потому что нужен календарь с аппоинтментами), MS Office Communicator, баг-трекеру; настроить работу с двумя мониторами и настроить работу с сетью.

Зачем мне нужен Linux? Windows не вызывает во мне раздражения, работает надежно, есть весь необходимый софт для работы и развлечений, причем не обязательно платный (а для платного есть бесплатные креки), в конце концов я к нему привык. Я даже время от времени спорю с теми, кто громко рассказывает про Маст дай :) На Linux я решил перейти по двум причинам. Первая причина простая - любобытство, интересно как это все работает и почему все это так хвалят. Вторая причина - на работе большая часть работы делается на удаленных unix-машинах, а основными инструментами является vim, gdb, gcc, вот как раз эти инструменты и вляются второй причиной, я "в захватi" от vim и gdb.

Дистрибутив я особо не выбирал - попробовал пару версий Mandrake/Mandriva, Red Hat и openSuse 10.2. Остановился на последнем просто потому, что он был последний и выглядел вполне пристойно. Мне кажется, что мои познания пока не позволят оценить какой дистрибутив лучше, какой хуже.

Инсталяция openSuse не сложнее инсталяции Windows, интерфейс интуитивно понятен. Самое главное было понять, что помимо консоли, все можно менеджить через YaST. Количество доступного при инсталяции софта поражает - меню даже есть отдельная ветка development. Единственное, что сразу не понравилось - оконные шрифты какие-то угловатые - но это дело поправимое.

Сразу же бросился настраивать сеть. В процессе наконец-то узнал, что такое samba и какая от нее польза.

Следующим этапом была настройка работы с двумя мониторами. Пришлось узнать о Xinerama и TwinView, разобраться в xorg.conf и как устанавливаются драйвера. Даже скачав дрова для моей видеокарты (NVIDIA GeForce 7300 GS) пришлось довольно долго помучиться. В Windows подобная операци заняла у меня значительно меньше времени (и не пришлось нечего читать дополнительно).

Но самое интересное началось, когда я занялся поиском возможности использовать нужный мне софт. Здесь у меня было (и есть, т.е. проблема не решена) 3 пути:


  • использовать виртуальную машину для запуска Windows и использование нужного софта непосредственно в Windows;
  • найти Linux-аналоги нужного мне Windows-софта;
  • использовать для запуска виндового софта wine.

В качестве виртуальной машины очевидно было попробовать старый добрый VMware. Он с легкостью подхватил Windows из указанной партиции и начал его грузить, но буквально сразу экран стал синим и началась перегрузка - и так до бесконечности. Как я понял, проблема была с драйверами и она решалась, но после этого проблематично было бы загрузить Windows не из под виртуалки, а не еще не готов на столь тесные отношения с линаксом (кстати, по поводу произношение линукс или линакс можно почитать здесь). Поэтому вместо VMware пришлось использовать VirtualBox. Windows благополучно заргузился, но при этом благополучно загрузился процессор и работать стало не возможно. Поигравшись с настройками, удалось достичь полного загруза памяти, при более-менее свободном процессоре, что так же не позволяло комфортно работать. Возникает вопрос, почему тогда под виндой линакс, запушенный в виртуальной машине, работал довольно шустро.

Затем я попробовал найти замену MS Outlook. Для этого довольно не плохо подошол Evolution. Я даже пол дня им пользовался: с exchange server'ом работает, письма шлет, аппоинтменты принимает. Но без проблем не обошлось. Во-первый, каждый раз при проверке почты на сервере вылазило окошко с паролем, сколько бы я не клацал по галочке "сохранить пароль". Во-вторых, не удалось загрузить адресную книгу. В-третьих, не смотря, на то что Outlook далеко не шустрая программа, Evolution работала еще медленее, при это довольно еще иногда висла при закрытии. Попытался поставить более новую версию - не получилось, т.к. потребовалось обновление еще кучи софта. Пытаясь автоматизировать этот процесс, заметил, что ни YaST, ни zypper не хотят работать с удаленными репозиториями. На форумах нашол, что это так же лечится обновлением, но обновление потянуло за собой обновление зависимостей.

Последняя надежда была на wine. Для начала решил попробовать на qip и winamp - не заработали. Обновив wine, удалось запустить winamp. Осталось теперь всего лишь установить и запустит IE с Outlook. Тут возникло столько траблов, что в двух словах и не опишешь. Пробовал так же wine-doors, wine-tools, обновлял последние версии из репозиториев, но за 2 дня так и не удалось установить IE6.

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

И вот перегрузившись опять под Windows, сижу и думаю, а стоит ли использовать Linux, если он такой не юзер-френдли :) На самом деле, желание у меня не пропало. Похоже нужно сначала много чего почитать. Ведь я помню время, когда настройка внутреннего модема в винде занимала неделю. Но является ли сложность линакса его достоинством, о чем так любят говорить нелюбители виндовса? Да, конечно хорошо понимать что ты делаеш, но если пониманием хотелось бы заняться в свободное время, а не вместо выполнения основной задачи.

Read More...

четверг, 20 декабря 2007 г.

Правда и wikipedia

Находясь под впечатлением от статьи Об истине и демократическом выборе – размышления о статье «Почему вы не можете цитировать Википедию в моем классе», решил написать свои размышения о википедии (размышление над размышлениями о статье :))

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

Для начала можно посмотреть самую известную (для меня) энциклопедия - большую советскую (БЭС):

К написанию статей, научному руководству и редактированию с самого начала привлекались крупнейшие ученые страны, и это стало обычной практикой на все дальнейшие годы. Первое издание БСЭ готовилось при непосредственном руководстве и участии Н. И. Бухарина и других видных партийных деятелей...
Тем не менее, авторам и редакторам энциклопедии удалось сосредоточить в ней поистине всё богатство знаний, накопленных человечеством за тысячелетия. Зачастую она была единственным источником адекватной информации о самых различных предметах, событиях и людях для советского человека, и - тем самым - превратилась в одно из ярких и многогранных, в своем роде «культовых», явлений советского времени...
Сведения, собранные в БСЭ, в подавляющем большинстве сохраняют свою актуальность и сегодня. То же, что «устарело», представляет собой непреходящий исторический интерес. Признанием информационной ценности БСЭ может служить тот факт, что в 1973-1983 годах известное англо-американское издательство «Macmillan» предприняло перевод и издание энциклопедии на английском языке ещё задолго до завершения оригинального издания на русском. Оба проекта осуществлялись параллельно, «английские» тома регулярно выходили вслед за «русскими»...
Крупнейшие ученые страны под централизованным управлением. Весомый аргумент, действительно трудно ставить под сомнение то, что они написали. Единственный неприятный момент - это устаревание информации. Имея бумажный вариант энциклопедии практически нереально отслеживать акутальность информации и новейшие знания в некоторой области. Получается, что за достоверность приходится платить актуальностью. Хотя если считать энциклопедию источником фундаментальных знаний, дающим базовые сведения о вопросе, то об актуальности можно и не вспоминать.

Примерно тоже самое можно сказать и о детской энциклопедии (у меня все том до сих пор стоят на полке), иллюстрированном энциклопедическим словаре и т.д. Эти истоники можно назвать достоверными, "правдивыми". Вот их-то и можно поставить вместо многоточия.

Что же с википедией? В упомянутой выше статье указывались два больших минуса: далеко не все статьи попадают в руки квалифицированных людей, которые могут со знанием дела исправить ошибки; не зависимо от квалификации, редакторы статьи могут придерживаться только своей точки зрения, не считаясь с другими.

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

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

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

чем больше писал, тем больше пропадало желание писать дальше

Read More...

среда, 19 декабря 2007 г.

Multiple X Screens

Наконец-то настроил поддержку двух мониторов под Linux'ом (openSuse 10.2) на рабочей машине. Все оказалось предельно просто - достаточно было прочитать доку с сайта nVidia Appendix G. Configuring TwinView и Appendix P. Configuring Multiple X Screens on One Card, а потом запустить nvidia-xconfig.

Read More...

вторник, 18 декабря 2007 г.

B1

Урааааааа! Сегодня получил американскую визу B1! Всего 3 часа возле посольства на морозе и минуты 2 на собеседование :)

Read More...

понедельник, 17 декабря 2007 г.

Интересная циата о теории и практике

In theory, theory and practice are the same. In practice, they are not.
Lawrence Peter Berra

Это было сказанно бейсболистом, но удивительно подходит не только для бейсбола, не зря я ее нашол в книге SOA in Practice.

Read More...

пятница, 14 декабря 2007 г.

SOA in Practice: The Art of Distributed System Design


Только что нашол и скачал книгу Nicolai M. Josuttis, "SOA in Practice: The Art of Distributed System Design (Theory in Practice)". Скачал отсюда. О чем эта книга - можно примерно понять из названия. Чем она меня привлекла? Во-первых, они довольно свежая (2007 год), во-вторых, автор этой книги является автором C++ Templates - The Complete Guide, которую мне не удалось заполучить в бумажном варианте. Да и вообще он известный C++-дядька. Незнаю насколько полезной окажется эта книга в освоении SOA, но покрайнемере картинки в ней выглядят красиво :) Помимо SOA в книге рассматриваются такие моменты как: BPM (business process management), ESB (enterprise service bus), Model-driven service development, Message exchange patterns и Web services.

Read More...

четверг, 13 декабря 2007 г.

boost::any изнутри

boost::any позволяет хранить переменные различных типов без явного указания типа, например так:

В том, что boost::any позволяет создавать вектор "зоопарка-элементов" нет ничего удивительного. Реализация этого класса предельна проста - он просто напросто хранит указатель на класс-холдер конкретного типа. Самое примечательное, что есть в boost::any - это шаблонный конструктор и шаблонный оператор присваивания:

Сразу же надо уточнить, что шаблонный конструктор и шаблонный оператор присваивания не могут быть конструктором копирования и оператором присваивания (их нужно определять отдельно). Эти шаблонные методы позволяют производить присваивание и инициализацию объекта класса boost::any без явного указания типа. Такой подход очень удобен и применяется в stl-контейнерах и различных smart-pointer'ах. Есть даже такая идеома - Coercion by Member Template.

Тип содержимого указывается только при получения значения из контейнера типа. Для этого boost предоставляет шаблонную функцию boost::any_cast, которая сранивает желаемый и реальный типы на основании std::type_info, и в зависимости от результата либо получает конкретное значение у холдера, используя static_cast, либо бросает исключение.

Вот так вот просто и красиво решается задача хранения значений различного типа в одном контейнере.

ЗЫ: забыл как пишется изнутри, вместе или раздельно... :)

Read More...

среда, 5 декабря 2007 г.

Мусор в голове: SOA, ERP, ESB, OSS, КЫГЫР, ЫЙЦУК...

Пару дней в свободное от работы время думал/читал над вопросом автоматизации бизнес процессов с реальной целью применить это на практике. Пока конкретной задачи небыло, просто нужна система, желательно состоящая из модулей, поведение подулей описывается сценарием и нужны какие-нибудь контракты для общения модулей, кроме этого клиенты - веб-браузеры, и звучало что-то на счет что бы как OSS/BSS...

OSS - это как бы направление куда копать ну и кроме того, это немного касается моей текущей работы. Немного погуглив я получил целую кучу подобных аббревиатур: SOA, BPM, ESB, ERP, etc. Почитав об этом всем, решил немного разгребти кучу мусора, которая сейчас образовалась в голове и немного структурировать ее. Поэтому постараюсь описать то, что я понял. Все немного прояснилось, после прочтения статьи Just One More Article About SOA and BPM.

Зачем я хочу разобраться в нагромождении этих аббревиатур? Помимо простого любопытства, я вижу 3 причины:


  • Во-первых, понять, к чему были сказанны слова об OSS/BSS.
  • Во-вторых, я понятия не имею о бизнес процессах, следовательно, нужно узнать, что уже сделанно в этом направлении, какие архитектуры и стандарты используются и есть ли смысл писать все с нуля.
  • Третья причина вытекает из второй. Несомненно в области автоматизации бизнес процессов сделанно уже немало. Поэтому нужно как можно безболезненнее начать "сотрудничать" с уже готовыми решениями, что бы не получилась еще одна системка в большом "зоопарке" систем ((с) from Just One More Article About SOA and BPM).

OSS/BSS
Системы поддержки операционных процессов (OSS) наиболее часто упоминаются в контексте телекоммуникационных систем. Они предназначены для управления ресурсами провайдеров телекоммуникационных сервисов (например, мобильные операторы, интернет-провайдеры, телефонные компании) и их сетями. Но, так как другие отрасли тоже нуждаются в подобных системах, OSS постепенно перешли в разряд подсистемм OSS/BSS, где BSS (системы поддержки бизнеса) решает бизнес задачи, такие как получение ордеров, обработка счетов, платежей и т.д. Дополнительно почитать можно здесь и здесь.

Сразу же возникает вопрос зачем это надо? В моем понимании, наличие OSS/BSS вводит модель построения систем в конкретной отрасли, что позволяет более успешно интегрировать системы, расширять и поддерживать их, а так же позволяет использовать заказчику и производителю один и тот же язык общения. Для телекомуникаций такими моделями являются TNM (Telecommunications Management Network) и, более новая модель, разрабатываемая TeleManagement Forum, TOM (Telecoms Operations Map) или eTOM (enhanced Telecom Operations Map). Есть еще программа TeleManagement Forum, направленная на помощь провайдерам телекоммуникационных сервисов в управлении их бизнесом и называемая NGOSS.

это пока все. получилось не очень структурированно и не очень понятно - мусор пока остается мусором. но мне кажется, что OSS - это все таки не совсем то, что мне нужно. не понятно как это использовать практически и в каких масштабах. следующая на очереди SOA и ERP. вот некоторые ссылки по теме:

SOA и Web-сервисы от IBM
Сервис-ориентированная архитектура
Корпоративная сервисная шина - "бюджетный" подход к решению задач интеграции
Бизнес-процессы и XML
Концепция ESB в отрасли телекоммуникаций
С высоты птичьего полета /блог Сергея Орлика/

Read More...

воскресенье, 2 декабря 2007 г.

Концерт Therion в Киеве

Свое 20-ти летие Therion решил отметить катанием по миру с песнями и начали они с Киева. Программа называлась Adulruna Rediviva - 20 Year Celebration Tour и должна была включать песни из альбома Theli и более поздних.

Концерт начался практически без опоздания (минут 30-40 - не большое опоздание), причем много людей ожидало, что сначала будет разогрев и не спешили в зал. Услышав незнакомые песни с незнакомым вокалом я тоже не спешил заходить, пока они не заиграли Schwarzalbenheim. Вот список того, что они играли (взято отсюда Therion снова в Киеве!):

Der Mitternachtslowe
Schwarzalbenheim
Blood Of kingu
The Falling Stone
Arrow from the Sun
Deggial
The Wine Of Aluqah
The Perrenial Sophia
Son Of The Sun
The Khlysti Evangelist
Son of the Staves Of Time
Tuna 1613
Drum Solo
Muspelheim
The Rise Of Sodom and Gomorrah
Ginnungagap
Lemuria
Cults Of The Shadow
To Mega Therion
Nightside of Eden
Grand Finale / Postludium
Thor (Manowar cover)

Как видно, старых песен было не так уж много. Песни из новых альбомов мне не очень понравились.

Всего на сцене было 8 человек: 3 гитариста и 4 вокалиста (2 тетеньки и 2 дяденьки). Тетеньки пели обалденно и вели себя довольно артистично. А вот с дяденьками было похуже, пели они тоже суперски, но один, как по мне, был похож на престарелого вампира с нарисованной бородой и зализанными волосами, второй выглядел довольно эффектно, но постоянно изображал различными предметами (микрофоном, розой и флагом) свой детородный орган :)) Неплохо было бы видеть на сцене какого ни будь клавишника, который бы жал педали на синтезаторе и вообще под конец у меня создалось впечатление что вместо гитаристов играет фанера, по крайне мере когда исполнялась Grand Finale / Postludium.

Из декораций на сцене были 2 металлические ограды, на которые крепились микрофоны и 2 канделябра (или как там называется палка, сверху которой прикрепляются свечи) с кучей свечей. Бла куча световых эффектов, но так как все осветительное оборудование было расположено ближе к сцене, в конце зала световые эффекты были не так эффективны.

Качество звука мне не очень понравилось - периодически было плохо слышно вокалистов либо наоборот - гитаристов.

Ну а вообще ребята выкладывались по полной и зал встречал дружным ревом каждую песню. Положительных впечатлений осталась масса. Мне больше всего понравилось, что они сыграли кавер Manowar'a Thor, а больше всего не понравилось то, что охранники не давали никому фотографировать и снимать выступление.

Read More...

среда, 28 ноября 2007 г.

Существуют ли конструкторы копирования???

конструкторы копирования... конструкторы копирования... конструкторы копирования... конструкторы копирования... конструкторы копирования... после того, как я повторил это слово 5 раз, каждый раз слыша в ответ "Что-то я не пойму о чем Вы...", сомнения начали одолевать и меня. Действительно, о чем это я??? Может чего напутал?

Только что проводил собеседования у человека, который позиционирует себя (фраза "позиционирует себя" почему то всегда меня коробит) как С++ Синьер Девелопер. Попросил нарисовать конструктор копирования и оператор присваивания для простого класса... В итоге он нарисовал только оператор присваивания, а на счет КК сказал, что такого не существует и в помине, всегда используется оператор копирования, мало того, такой код просто не правильный:

Когда он не поверил мне про КК в векторах... я начал сомневаться сам, разве может человек с 8-ми летним С++ным опытом не слышать о них... Блин, я даж после собеседования написал класс с конструктором копирования :) Все таки КК существуют :))

Read More...

понедельник, 19 ноября 2007 г.

Team Meeting #5

18 ноября в Сумах прошел очередной (#5) семинар разработчиков Team Meeting.

Первый доклад был посвящен системы мониторинга Cacti. Докладчик, Андрей Бородийчук (Dre), поделился опытом применения данной системы и рассказал, какие возможности предоставляет Cacti для системных администраторов.

Второй доклад был незапланированным. Артём Волк (ArtVolk) в перерыве рассказал о создании wap-сайтов. Слушатели услышали, что такое wap 1.3 и wap 2, в чем разница между ними, какие преимущества и недостатки, как отлаживать созданные сайты и какие особенности украинских мобильных операторов.

Самая интересная часть семинара - диалог при помощи Skype с Александром Соловьем - украинским разработчиком, живущим в США. Он немного рассказал, чем вообще там занимается, а потом большую часть времени отвечал на вопросы. Александр работает в компании, которая разрабатывает высоконагруженные масштабируемые веб-системы. Вот наиболее интересные для меня моменты этого диалога, касаемые его работы:

  • упор делается не на технологии, а на опыт и квалификацию программистов; PostreSql и perl используются только из тех соображений, что был опыт работы с ними;
  • чем проще код, тем надежнее работает;
  • нет тестировщиков, юнит тестов и регрессионных тестов, но есть code review;
  • аутсорсинг и работа из дому не есть гуд;
  • политика компании не предумматривает работу в компании программистов из Индии :)
  • и еще много интересного...

Read More...

пятница, 16 ноября 2007 г.

Книга по DSL от Мартина Фаулера

Martin Fowler пишет книгу по Domain Specific Languages. Вчера он решил, что накопилось уже достаточно материала, что бы предоставить некоторый отчет о написанном.

Read More...

четверг, 15 ноября 2007 г.

Что за зверь такой RadRails?

Решил посмотреть посмотреть всякие Ruby IDE. Для начала захотелось попробовать RadRails, которую так не любят в народе (нелюбят например здесь Ходячий труп и признаки смертельной болезни).

Уже удалось создать простой проект и даже запустился сходу - уже хорошо. Документации что-то маловато, а вот кнопок и всяких окошек, на первый взгляд, туева куча. Будем копать дальше :)

Read More...

четверг, 8 ноября 2007 г.

Опыты со SWIG'ом: std::string и Ruby

Решил попробовать изменить пример из предыдущего поста: вместо double использовать std::string. swig предоставляет кучу уже готовых typemaps, в том числе для stl. Теперь файл type.i получился таким:

Пересобрал экстеншн и запустил такой тест:

И... при загрузке расширения вылезла ошибка: LoadError: /usr/lib/ruby/site_ruby/1.8/i586-linux/test.so: undefined symbol: _ZNSs4_Rep20_S_empty_rep_storageE — /usr/lib/ruby/site_ruby/1.8/i586-linux/test.so.

Оказалось, что вся проблема в Makefile: по умолчанию компилятор указывается gcc. Что бы исправить это, добавил в скрипт, генерящий Makefile, одну строчку:

Теперь std::string успешно конвертится в ruby-строки и наобород.

Read More...

Архив статей по COM

Случайно наткнулся на Архив статей "Что такое технология COM". Чем примечателен этот архив - все статьи написанны "человеческим языком" и в одном духе, разбиты на группы в порядке от простого к сложному. Отдельные статьи посвящены таким тема как память, взаимодействие процессов и т.д. Вообщем в отличие от классических трудов по COM'у, таких как "Сущность технологии СОМ. Дональд Бокс." и "Основы COM. Дейл Роджерсон." (можно посмотреть здесь), вызывает больше энтузиазма не останавливаться после первой главы.

Read More...

понедельник, 29 октября 2007 г.

Опыты со SWIG'ом: C++ код и Ruby

Недавно у меня возник вопрос, как скрестить C++ и Ruby, а именно - есть С++ либа, хотелось бы использовать ее из Ruby. Покопавшись немного в инете, нашел статью "Использование C и Ruby", откуда стало ясно, что основные способы создания расширений для Руби - использование Ruby API (ruby.h, rubyio.h, intern.h) и утилита SWIG. Для начала решил попробовать SWIG.

SWIG на основе С и С++ интерфейса генерит код для расширений к другим высокоуровневым языкам (причем не только к скриптовым). На входе получает файл интерфейса .i, на выходе - С или С++ код.

В качестве примера берем такой код:

Создаем интерфейсный файл test.i:

Тепер на основанни этого файла можно сгенерить код расширения для Руби:

swig -c++ -ruby test.i

Очевидно, что -ruby указывает целевой язык.

Ключ -с++ указывает на то, что исходный код написан на с++. Если этого не указать, то может вылезти ворнинг типа: "test.i:7 Warning(301): class keyword used, but not in C++ mode.", файл получится с расширением .c и в дальнейшем возникнут проблемы с его сборкой.

Для указания имя модуля можно использовать либо ключ -module либо в интерфейсном файле добавить строку %module name.

Результат выполнения команды файл test_wrap.cxx. Получить необходимую библиотеку из него можно двумя способами - создать скрипт, генерящий make-файл или собрать в ручную. В ручную это будет выглядеть подобным образом:

Скрипт, создающий Makefile, будет выглядеть так:

В итоге получилась библиотека test.so. Осталось посмотреть, как это будет работать в Руби:

В принципе ничего сложного.

Интересно что получится, если type_t определить как std::string... Все описанные выше манипуляции прошли нормально, но вот тест не пошол, в месте require 'test' выводит ошибку 'LoadError'. Просто так не получается, но SWIG предоставляет механизм typemaps - трансляция С/С++ типа в тип целевого языка, т.е. теоретически можно использовать контейнеры STL в коде, который будет использоваться Руби, но это оставлю до следующего раза.

Read More...

вторник, 23 октября 2007 г.

Неизвестный Киев: Киево-Печерская крепость, Госпитальное укрепление

На прошлой неделе просматривал экскурсии на сайте "Интересный Киев" и узнал о существовании Киево-Печерская крепости. Крепость включает в себя:

  • Старая Печерская крепость, цитадель (А);
  • Васильковское укрепление (Б);
  • Госпитальное укрепление (В);
  • Зверинецкое укрепление (Г);
  • Лысогорский форт (Д);
  • северный фас крепости(оборонительные казармы, мастерские, подпорные стенки) (Е).


"Интересный Киев" организовывал экскурсию в Госпитальное укрепление, которое находиться между метро Печерская и Кловская, на територии военного госпиталя. Госпитатьное укрепление уцелело практически на 100%!!! В центре города - огромная территории с оборонительными сооружениями, валами, рвами, стенами с бойницами, пушками на валах!



Самое поразительное, что вокруг - жилые дома!



Все-таки Киев - действительно удивительный город.



Госпитальные укрепления состоят из 5 или 6 капониров. Экскурсия предполагала посещение только 2-х. Самый интересный - Косой капонир, который был превращен в политическую тюрьму в 60-х годах 19 века. Здесь сидели и были расстреляны поляки - участники востания 1863 года.



Сейчас здесь музей - можно посмотреть камеры, в которых содержались заключенные, солдатскую форму, оружие, фотографии и т.д.



Помимо этого здесь находится музей Трипольской культуры (частная колекция).



Во втором капонире, который мы посетили - выставка, посвященная истории Киева и выставка фотографий крепостей.



Цены на вход в музеи просто смешные. Но людей практиччески нет. По началу мне показалось, что здесь только одна наша группа.



Вообщем 2 часа пролетели очень быстро. Здесь есть на что поспомотреть и сюда стоит сходить.



Некоторые ссылки по этой же теме:
Фото альбом Киев - Киевская крепость. Косой капонир
Крепости КИЕВА
Косий капонір
Косой капонир
Памятник-музей "Киевская крепость" (Косой капонир)



PS: один из капониров до сих пор еще не реставрирован и состояние его - плачевное:


Read More...

четверг, 18 октября 2007 г.

Рубиновые сокеты

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

  • протокол (TCP, UDP, raw IP);
  • локальный IP адрес (к нему чему сокет привязывается при создании);
  • локальный порт (к нему чему сокет привязывается при создании);
  • удаленный IP адрес;
  • удаленный порт (используя эти параметры сокет конектится к удаленному сокету).

Сокеты реализуются с посредством библиотек, таких как Berkeley sockets (BSD sockets) или Winsock.

Ruby предоставляет свой инструментарий для работы с сокетами (на базе BSD sockets):

Работа с сокетами в Руби реализуется иерархией классов:

Из названий классов примерно понятно их назначение. BasicSocket - это абстрактный класс для всех сокетов. Методы этого класса ничем не оличаются от того, что можно увидеть в С++: accept, bind, listen и т.д. У BasicSocket есть методы класса (аналогия - статические методы С++) и методы объекта.

UNIXSocket - предоставляет IPC и использованием UNIX domain protocol (AF_UNIX).

UNIXServer - помогает создавать UNIX domain protocol серверы.

IPSocket - базовый класс для сокетов с протоколами, использующими IP (AF_INET).

UDPSocket и TCPSocket - классы для сокетов с UDP и TCP протоколами.

SOCKSSocket - помогает строить приложения, основанные на SOCKS-протоколе.

Socket - предоставляет доступ к лежажашей в основе всех сокетов реализации BSD Sockets API.

IO - базовый класс для операций ввода/вывода в Руби. При создании приложения с сокетами, полезным является метода IO#select( readArray [, writeArray [ errorArray [ timeout ] ] ] ) - ожидает, когда станут доступными данные с утройств ввода/вывода. Первый параметр метода - массив IO-объектов. Второй параметр - таймаут в секундах; если он равен nil, то ожидание происходит бесконечно.

Более подробно о классах и их методах можно почитать здесь: Sockets Programming in Ruby, The Pragmatic Programmer's Guide.

Создавать сокеты можно несколькими способами. Первый способ напроминает подход C:

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

Для удаления сокета используется метод close.

IP адреса в Руби могу быть представленны как в виде имени хоста, так и в виде '0.0.0.0':

Для сокетов можно устанавливать и получать параметры используя методы: getsockopt и setsockopt.

Простой пример использования сокетов:

Таким образом, работа с сокетами в Ruby не представляет большой сложности, особенно для тех, кто знаком с сокетами на С.

Read More...

среда, 17 октября 2007 г.

The GoF patterns in Ruby

I've just found implementation of the GoF patterns in Ruby with examples.

Read More...

вторник, 16 октября 2007 г.

Шпаргалка по созданию Makefile

Что такое Makefile? Makefile - это сценарий для утилиты make. Эта утилита помогает автоматизировать процесс компиляции проекта (проектов):

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

По умолчанию утилита make считает, что файл сценариев называется Makefile, поэтому компиляцию можно запустить простым вызовом make в одной директории в Makefile. Если же имя файла сценария отличается, то нужно использовать явное указание его имени и ключ -f:

make -f prjmake.nmk

Makefile состоит из нескольких основных частей:
  • правила;
  • директивы;
  • переменные;
  • комментарии.

Начнем рассмотрение в обратном порядке списка - от простого к сложному.

Комментарии.
Комментарий обозначается символом '#'. Если нужно использовать символ '#' в другом контексте, то необходимо добавить обратный слэш: '\#'.

Перменные.
Сделать файл сценариев более простым и читабельным можно используя переменные. В терминологии make-файлов, переменные являются синонимами макроопределений. Создать переменную очень просто:

LIB = lib1.o lib2.o lib3.o

Название переменной задается в верхнем регистре (по негласному соглашению). Для получения параметров переменной используется смпользуются скобки и символ '
$(PATH)

Значение переменной может вычисляться рекурсивно:

PATH=$(PATH)/trunc

Либо можно использовать другую форму записи:

PATH+=/trunc

Некоторые переменные являются стандартыми константами, для них нельзя вычислять значение рекусивно. Такими перменными являются: CC (имя компилятора С), СХХ (имя компилятора С++), CFLAGS (параметры С компилятора), CXXFLAGS (параметры С++ компилятора).

Помимо переменных, определенных "писателем" файла, Make-файл предполагает использование автоматических переменных, значения которых вычисляются в контексте использования таких переменных (вычисление основывается на цели и зависимости правила - о целях и зависимостях ниже):
  • $@ - имя цели;
  • $$@ - имя цели, если его необходимо ввести в строке описания зависимости справа от двоеточия;
  • $< - имя первой зависомости;
  • $? - имена всех зависимостей (с пробелами) которые новее, чем цель;
  • $^ - имена всез зависимостей с пробелами;
  • $* - имя текущего предусловия за вычетом суффикса;
  • $% - имя соответствующего .о файла, если текущей целью является файл библиотеки;
  • $** - только для nmake - внутри правила обозначаются все зависимости, оказавшиеся справа от двоеточия;
  • D - часть имени внутренних макроопределений, описывающая директорию файла (допустимые варианты применения: $(@D), $$(@D), $(
  • F - часть имени внутренних макоопределений, описывающая собственно имя файла (допустимые варианты прменения: $(@F), $$(@F), $(
  • B - часть имени внутренних макроопределений, описывающая базовое имя файла (без диска, директориии и расширения);
  • R - часть имени внутренних макроопределений, описывающая полный путь к файлу за вычетом расширения.

Директивы.
Директива - это команда для make с указанием, что делать в процессе чтения make-файла. Может выполнять такие действия:
  • подключать другие make-файлы;
  • принимать решение какие части файла использовать, а какие игнорировать (в зависимости от значения переменных);
  • определение значений переменных.

Поключать другие make-файлы можно директивой include. Она указвает утилите make, что нужно приостановить чтение текущего файла и прочитать указанные файлы:

include filenames...

Если фала не существует - выводиться ошибка. Для отключения сообщени об ошибке, к директиве добавлятеся префикс '-':

-include file1

Решение о том, какие части make-файла использовать, а какие игнорировать, примается на основе условий, синтаксис которого имеет вид:

Например:

Определить значение перенной можно при помощи дериктив define... endef:

В этом случает значение переменной two-lines = echo foo; echo $(bar)

Правила.
Правила объясняют make, что и как нужно пересобирать. В общем виде структура выглядит так:

Здесь targets - имена файлов-результатов, разделенные пробелами; так же может быть действие не связанное с процессом компиляции, например, clean. prerequisites - зависимости, то, от чего зависит создание targets. command - комманда, которая выполняется для получения targets; может быть не одна; перед командой обязательно ставиться табуляция.

Существуют несколько фиктивных целей:
  • all - выполнение работы по достижению всех частных целей, перечисленных ниже;
  • build - компиляция и сборка всех устаренших (невыполненных) целей/файлов;
  • clean - удаление всех файлов, кроме исходных;
  • docs - подготовка документации и размещение таких файлов в соответствующих системных директориях;
  • examples - компиляция и сборка примеров;
  • install - работа, по размещению всех готовых частей проекта в соответствующих директориях.

В именах файлов могут использоваться wildcards:

objects = *.o

Пример использования правил:

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

Если бы в предыдущем примере mytest зависел от нескольких o-файлов, то шаблонное правило можно было бы записать так:

Некоторый ключи компилятора:
-I"path/to/include" - директория со списком хидеров.
-Wall-Werror - вывод варнингов.
-O1, -O2, -O3 - оптимизация.

Некоторые ключи сборки:
-llibrary - указывает линковшику использовать библиотеку library при сборке программы.
-s - не включает симольные таблицы и информацию о размещении функций в испольняемый файл. Использование этого ключа позволяет существенно ужать исполняемые файлы.
-L"path/to/libs" - директория с библиотеками.
-static - статическая компоновка библиотек.

Больше почитать о Makefile можно здесь: Writing Makefiles

Об опциях компилятора можно почитать здесь.

Read More...

понедельник, 15 октября 2007 г.

Muse in Kiev

Muse Live in Kiev - one more video, bad quality but good sound:

Read More...

C + Ruby

It is no secret that Ruby sends messages to invoke methods. So it much slower than in C. If you need speed in accessing instance variables and invoking methods you can use CplusRuby:


With CplusRuby you can define custom C structures from within Ruby and wrap them easily in a Ruby class. You can as well define C functions that can access this structure easily. CplusRuby generates setter/getter methods for every property and wrapper methods for the C functions.

The purpose is speed! The C functions can access the C-structure, which is much faster than accessing instance variables. Also, the C functions can call each other directly. This is *much* faster than invoking a method in Ruby. As wrappers are generated, the Ruby-side can access all C-structures and functions as well.

Read More...

воскресенье, 14 октября 2007 г.

Reading C type declarations

Article Reading C type declarations intends to describe how read difficult C statements such as

Read More...

Muse в Киеве

Не смотря на угрозу отмены, концерт Muse вчера все же состоялся.



Билеты были не дешевые (в 1-ю фан зону я покупал за 200 грн, а в секторах сидячие места стоили до 500 или 550), но людей собралась огромное количество. Вместимость Дворца спорта - 10000, как мне показалось, людей пришло не меньше. Стоять порой было возможно только прыгая на одной ноге.



Концерт начался после часовой задержки и продолжался около полтора часа. Список песен (взят отсюда):

1. Take a Bow
2. Hysteria
3. Map of the Problematique
4. Butterflies & Hurricanes
5. Supermassive Black Hole
6. Feeling Good
7. Sunburn
8. Apocalypse Please
9. Soldier's Poem
10. Invincible
11. Starlight
12. Time Is Running Out
13. New Born
14. Stockholm Syndrome

На бис:
15. Plug In Baby
16. Knights of Cydonia


Каждая песня встречалась дружным ревом толпы и групповым пением. Очень жаль, что на бис вышли только один раз, не смотря на то, что звали их очень долго. За последнее время дважды на бис они выходили только на концерте в Риге.

После Sunburn'a, плавно переходящего в Apocalypse Please (хотя может я перепутал), Matthew Bellamy сбил ногой какую-то фиговину ( это оказался усилитель) с лампочками с колонки, а потом отдал ее на растерзание толпы.

Было много световых эффектов, звук был отличный, во время Plug In Baby по традиции пустили огромные шары с конфетти. Получил от концерта только положительные впечатления, сорванный голос и обтоптанную обувь :)

ЗЫ: фотки мона глянуть тут: ФОТО MUSE в Киеве, blah-blah-MUSE, Muse в Киеве, почитать Київ 13 жовтня 2007 року

ЗЫ2: видео к концерта, где происходит инцидент Мэтью с усилителем:


Read More...

вторник, 9 октября 2007 г.

Software Engineering Radio

Software Engineering Radio - The Podcast for Professional Software Developers.

Здесь собраны и постоянно обновляются записи разговоров с девелоперами о девелопменте. Файлы в среднем по 40-50 метров. К некоторым прилагаются слайды и ссылки на источники по теме.

Возможно будет полезно девелоперам, которые хотят импрувить свой английский.

В дополнение можно посмотреть лекции университета Беркли (Berkeley).

Read More...

С++ под капюшоном

C++ under the hood - в этой доке один из сотрудников микрософта рассказывает как устроен С++ изнутри (Microsoft Visual C++), т.е. размещаются в памяти классы, наследование, виртуальное наследование, виртуальные функции и т.д. Полного представления об реализации С++ (Microsoft Visual C++) она не дает, но отвечает на некоторые вопросы которые любят спрашивать на собеседованиях и в brainbench.

Read More...

четверг, 4 октября 2007 г.

Тираж закончился. Оставьте заявку...


Тираж закончился. Оставьте заявку. Мы постараемся отыскать эту книгу для Вас, немедленно известив Вас об этом...

Недавно решил купить книгу Шаблоны C++: справочник разработчика. Захотелось полистать бумажный вариант. Оказалось, что поздно опомнился. Когда услышал на Петровке, что такой книги больше нет, вся продана - не поверил. Стал искать по интернет магазинам - таже ситуация. Есть только на российских сайтах и вроде как есть во Львове. Посмотрел, что тираж у нее всего 5000 экз (хотя встречалась и цифра 3000). Значит все уже раскупили. Но у Страуструпового Язык программирования C++. Специальное издание тираж такой же и встречается в купленном виде намного чаше. И вообще, 3000-5000 экземпляров - это нормальный тираж для книг по программированию. Может их изымают и сжигают? Фигня какая-то. Надо купить, пока до Львова не добрарилсь :)

Read More...

среда, 3 октября 2007 г.

Ruby-гуру со всего мира о Ruby

Здесь можно почитать что думаю о Руби программисты из разных стран мира: Advice For Ruby Beginners

Read More...

вторник, 2 октября 2007 г.

Временно бесплатная книга по Ruby on Rails

60 дней будет доступна в pdf формате книга Build Your Own Ruby on Rails Applications на сайте SitePoint

Read More...

В российский школах будет своя ось

Шутка о то, что в России планируется разработать специальную ось для школ, были известна уже давно. Теперь это уже не шутка, а реальная угроза для учителей и школьников: Россия выбирает третий путь

...Рассматривалось два направления -- либо обеспечить все школы лицензионными программами, либо быстро внедрить СПО. Первый путь означает, по мнению Медведева, что страна попадет в зависимость от западных производителей, а второй чреват риском увязнуть в нестыковках различных версий безбрежного моря доступных сегодня бесплатных программ.

Поэтому будет писаться своя ось, свой софт... Мы не ищем легких путей :)))

Read More...

Программистские видео лекции

В дополнении к книгам, можно посмотреть лекции по программированию на C++, Java, Perl, Python и т.д. Programming Language Video Lectures

Read More...

Программистские онлайновые книжки

Your Book Case. Preview The Book You Want To Buy. Тут есть такие интересные книжки как:

C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond

CPP Coding Standards 101 Rules Guidelines and Best Practices

и т.д.

Read More...

Циклы в Руби

На первый взгяд, Руби предоставляет не большой набор встроенных конструкций для создания циклов. Здесь нет привычного for(i=0;i < N;i++), только while и until.

while выполняет до тех пор, пока выражение равно true. until выполняется пока выражение не станет равно true.

Цикл можно описывать в одной строке, переместив проверку условия в конец строки:

Для управлением цикла из нутри самого цикла существуют такие конструкции как break (прервать выполнение цикла), redo (выполнить итерацию сначала, без вычисления условия или перехода к следующему итератору), next (прервать текущую итерацию и перейти к следующей) и retry (цикл выполняет заново с самой первой итерации).

Но это далеко не все, что предоставляет Руби для сознания циклов. Циклы можно создавать используя итераторы и методы классов. Например:

Кроме того, в Руби есть встроенный итератор loop:

Есть еще конструкция for .. in ..:

Read More...

понедельник, 1 октября 2007 г.

Один Vim, много файлов

Являсь мощным текстовым редактором, vim позволяет с помошью одной командной строки сделать столько, сколько другие редакторы не могут позволить сделать с помошью мыши и шаманского бубна. Например работа с несколькими файлами. Для открытия в vim нескольких файлов достаточно в командной строке написать:

vim file1 fill2

Перемещаться по открытым файлам можно будет с помощью команд :n (вперед), :prev (назад). Это самый простой способ.

vim позволяет разбивать окна:



Для этого есть команды :split (горизонтальное разбиение) и :vsplit (вертикальное разбиение). Если просто выполнить команду без параметров, то текущее окно равномерно разобъется на 2 окна с одинаковым содержимым. Для просмотра двух файлов одновременно, можно либо указать имя файла после команды (:split filename) либо перейти в нужное окно и открыть файл командой :e filename. В обоих случаях файл будет открыт и доступен для редактирования.

Если необходимо открыть файл только для просмотра, можно использовать команду :sview filename.

Для перемещения между окнами используется комбинация: ctrl+w (double w).

По умолчанию окно разбивается пополам, но можно указать размер в строках первого из разбиваемых окон :Nsplit, где N - размер в строках.

Разбивать файлы на отдельный окна можно еще при открытии:

vim -o file1 file2 file3

Параметр -o - горизонтальное разбиение, -O - вертикальное. Так же можно указать сколько разбиений будет, добавив количество к одному из этих параметров:

vim -o3 file1 file2

После запуска, окно будет разбино на 3 части, третья из которых будет пуста.

И еще одна полезная возможность - сохранение текущего сеанса, со всеми сплитами, путями к открытым файлам и т.д. Команды :mksession name и :mkview name - сохраняют текущую сессию. Каманды :source name и :loadview name - востанавливают соответственно (созданные предыдущими командами скрипты открывают нужные файли и, если надо, сплитят окно).


Больше узнать об этом всем можно спросив в самого вима :help split.

Read More...

gdb links

Пара ссылок на доки по gdb:
- Debugging with GDB (объемная дока по всему, что умеет отладчик; дока поддерживается разработчиками gdb)
- Отладка с помощью GDB (то же самое, но на русском и не обновлялось с марта 2000)

Read More...

Посещение "Водно-информационный центра"

Недалеко от арки Дружбы народов в Киеве, в Хрещатом парке, находиться Водно-информационный центр - две башни, похожие на пожарные вышки. Этим вышкам уже больше 130 лет. Внизу между ними на глубине 5 метров находиться помещение, в котором раньше был резервуар для воды. В этом резервуаре и организована выставка всего, что связанно с водой.



В самом начале можно увидеть макет центра Киева 130 лет назад, с указанием всех путей перемещения воды (от Днепра к двум водонапорным башням, от башен - к потребителям) и речной аквариум с рыбами из Днепра.



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



предметов быта, связанных с водой,



канализационного коллектора с мусором и чучелами крыс,



всяких приборов,



небольшого кинотеатра,



аквариума с карпами, которых можно гладить.



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

Read More...

четверг, 27 сентября 2007 г.

Rubinius - Ruby VM написанная на Ruby

Rubinius - виртуальная машина и компилятор для Руби.

Большинство реализаций Руби, такие как JRuby, XRuby, Gardens Point Ruby.NET, IronRuby, написаны на С. Rubinius использует идею, взятую из архитектуры Smalltalk-80 VM - он написан на языке-подмножестве самого себя. Этот язык называется Garnet. Evan Phoenix объясняет это так:

It's still something I plan on doing sooner rather than later. There ended up being a lot of issues we wanted to tackle first, and we haven't get got back to working on Garnet (the new name for Cuby). There were no particular problems yet, but I'm sure well find some.

Garnet looks like ruby at first glance, but the semantics of what things mean have been rewired.
For example, in garnet code 'd = c.to_ref' appears to call a method called to_ref on c, but garnet will translate that into 'd = &c', which is C code. One way to think about it is as a really advanced C preprocessor. It tries to map as much as it can to C constructs. The idea is something that looks like ruby, but behaves like C.

Поподробнее о Rubinius можно почитать тут:
The Rubinius Project
All content and news on InfoQ about Rubinius
evan.musing << current

Read More...

Чешская мечта (Польша, Краков)

...продолжение описания тура "Чешская мечта" в Чехию через Польшу...

В 7 часов утра выехали автобусом изо Львова в направлении польской границы. Всего 5 часов на границе и мы в Польше.

Сразу заметно, что мы выехали за границу - на бигбордах практически исчезли надписи на родном языке. Хотя загадочное слово "гуртовня" встречалось еще много километров от границы. Вообще, приграничные районы у "нас" и у "них" похожи как две капли воды - сплошные торговые точки и "гуртовни". Но совсем другие дороги! Чем дальше родина, тем больше необычного. И вот первое впечатление: "А де картоха? Де огороды вокруг домов??"



По обочинам - аккуратные разноцветные домики с черепичными крышами, вокруг них - лужайки с качелями, креслами, цветам, вокруг лужаек - небольшые декоративные заборчики. Во многих поселках вдоль дорог стоят шумопоглатители - высокие пластиковые (наверно даже не пластиковые) высокие заборы, в некоторых случаях даже прозрачные. У-у-у-у буржуи! Проехали всего ничего, а уже такие отличия!

При въезде в Польшу я не оценил качество дорог, только на обратном пути, когда въехали во Львовскую область и вдруг автобус начал скакать. Встечались и платные участки дорог. Но не все так хорошо - машин на дорогах было ощутимо больше, чем на Украине. Как мне показалось, поляки предпочитают жить подальше от города, туда ездят только работать.

Уже начало темнеть, когда мы приехали в Краков. Высадившись в Старом Городе, недалеко от Вавеля, отправились на первую экскурсию по вечернему городу.



Старый Город - сплошные старинные здания и костелы. Так как это была моя первая поездка в еропейский город, я непереставал удивляться. Здания в хорошем состоянии, везде чисто, освещено и никто не пьет пиво на улицах. Именно здесь, я оценил запрет на распитие пива на улицах.



Выйдя на Рыночную площадь, я понял, что именно так я представлял себе Европу. Булыжник вместо асфальта, бесчисленные кафаны, уличные музыканты, все это окружено старинными зданиями, освещено многочисленными фонарями, а посреди площади - старое здание Ратуши. Даже люди казались не такими, более "европейскими". Ни в Киеве, ни в Москве такого ощущение у меня небыло. И я подумал, а что же тогда в Праге, разве может быть красивее и "европейскее"?? Забылась даже усталось от более чем десяти часовой поездки в автобусе.



Но времени на прогулку у нас было не много, до 11 часов вечера нашу группу надо было поселить в гостинице (гостиница Artur на окраине города, намного лучше гостиницы в которой мы жили в Праге).

На утро по программе у нас была запланированна поездка в аквапарк, что существенно сокращало время на экскурсию по Кракову (для клиентов гостиницы в аквапарке должы были предоставляться скидки, но руководитель группы об этом не обмолвилась и словом). Поэтому мы отказались от аквапарка и рано утром отправились в город.



Старый город не такой уж и большой, но очень насыщенный достопремечательностями. В Вавель, краковский кремль, мы должны были отправиться с гидом, большая часть группы вернется из аквапарка. Поэтому у нас было достаточно времени что бы посмотреть то, что не входило в программу и самим дополнительно погулять по Вавелю. Оказалось, что не стоит ити туда с гидом, предоставляемым тур фирмой. Там намного интереснее побродить самому - можно увидеть больше и не нужно постоянно бежать за кем-то. Либо самому взять одного из многочисленных гидов уже там, на месте.



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



И вот в 14 часов мы выехали из Кракова в Прагу...

Здесь можно посмотреть некоторые краковские фотки

Read More...

среда, 26 сентября 2007 г.

How to swap two variables in Ruby?

Yeah, It's really simple to do! You must write only one string:

Ruby provides parallel assignment - they can be preformed in parallel. So it's normal code for Ruby:

Moreover, Ruby provides nested assignment:

Read More...

Особенности изменяемых атрибутов (writable attributes) в Ruby

Изменяемые атрибуты (writable attributes) - атрибуты объекта, которые могут быть изменены сторонними объектами. Для этих атрибутов должен быть определен метод присвоения или или ему должно быть разрешено изменение (attr_writer, attr_accessor), что бы этот метод сгенерился автоматически :

Ruby позволяет создавать виртуальные атрибуты - реально переменной объекта не существует, но есть методы, имитирующие доступ к ней:

Все понятно. Не понятно только почему в методе reset доступ к hour осуществляется через self, а в методе dump - без self. Оказывается, что в случае отсутствия self при записи значения hour интерпритируется как локальная переменная метода reset. Поэтому нужно явно указывать что вызывается метод класса, а не выполняется инициализация локальной переменной. Это существенно только для записи значения. При чтении self не обязателен. Если забыть об этом, можно получить не очевидную ошибку.

Read More...

ГрОб в Киеве

Что-то Летов зачастил в Киев. Совсем недавно, год назад ГрОб приежал со своим очередным новым альбомом. И снова новый альбом "Зачем сняться сны".



Вообще, мнения о последних альбомах расходятся координально, начиная от "Летов опопсел, списался, спелся, спился и т.д... гавно..." и заканчивая "Наконец-то Летов начал писать нормальную музыку... видать бросил пить... курить...". "Зачем сняться сны" я еще не слушал, поэтому не буду о нем судить. Имхо последние альбомы начиная со "Звездопада" действительно писал не тот Летов, которому "насрать на свое лицо", но этому не делает их ни хуже, ни лучше.

На предыдуший концерт, 26 ноября 2006 года, я шол со некоторым страхом разочарования. Да и альбом предыдущий прослушал только незадолго до самого концерта... Но Летов показал, что до старого пердунства ему еще далеко! Пестни из нового альбома были жирно разбавлены "хитами 80-х и 90-х".

Кто здесь самый лютый судья? Кто здесь самый удалой Господь?

Read More...

вторник, 25 сентября 2007 г.

DSL (domain-specific language)

DSLs(domain-specific language, DSL) - языки программировая, позволяющие решать строго определённые задачи. Часто DSL-программа не компилируется в байт код или исполняемый код. Результат "компиляции" такой программы - объект предметной области.

Возьмем для примера парсеры, которые применяются повсеместно (компиляторы, браузеры, текстовые редакторы и т.д.) Был разработан стандарт генератора парсера для Unix систем, который называется Yacc (Yet Another Compiler Compiler). Релизация этого стандарта (Berkley Yacc, Yaxx, Yecc) служит только для одной цели - генерация парсеров. Yacc генерирует код парсера на языке С основываясь на группе правил (аналитической граматике). Это один из примеров DSL.

Любую задачу предметной области лучше всего описывать языком, специально созданным для этого. Это отличает DSL от объектно-ориентированных языков, таких как например С++, Java и т.д. ОО язык позволяет создавать любые конструкции, DSL оперирует только понятиями предметной области. Поэтому последний имеет очень ограниченный синтаксис, не позволяющий ничего лишнего (например создание потоков, чтение файлов и т.д.)

Самая идея языков предметной области не нова. Уже давно используются макросы, shell-скрипты (grep, awk, yacc), язык для работы с базами данных SQL.

Мартин Фаулер в своей статье Языковой инструментарий: новая жизнь языков предметной области выделяет 2 типа языков предметной области: внешние и внутренние.

Внешними я называю те DSL, которые написаны на языке, отличном от основного языка программного приложения - как две последние формы в нашем несложном примере. Примерами DSL такого типа могут служить "малые языки" Unix и конфигурационные XML файлы...

Что касается внутренних DSL, то они превращают в DSL сам основной язык приложения. Лучшим примером такого языка служит Lisp.

Если нужен язык для решения спецефических задач, а чего нет, то его можно реализовать. В реализации нового внешнего DSL нет ничего хитрого. Просто нужно определиться с терминами, которым оперирует предметная область и отобразить их в синтаксисе. Здесь можно посмотреть пример разработки нового DSL на Java. А здесь - разработка нового DSL на Ruby.

DSL DLS'ем, но возникает вполне резонный вопрос. А не дорого ли каждый раз разрабатывать DSL. Т.е. сама по себе разработка - это еще пол дела. Ведь в дальнейшем нужен супорт, редактор по красивше, обучение синтаксису пользователя, да еще и отладку не плохо было бы иметь. В этом и заключаются минусы языков предметной области.

Сейчас развивает новый тип программного обеспеченя - языковой инструментарий (language workbenches). Это полноценные среды для создания DSL. Например, Meta Programming System (MPS) компании JetBrains, Майкрософтовский Software Factories. О разработке и проектировани DSL с использованием MPS можно почитать здесь.

Read More...

Гардарика. Битва за Київ.

Нещодавно у місті Бровари пройшов фестиваль історичної реконструкції Гардарика. Гардарикою називаються земелі Київської Русі в скандинавській літературі.

Фестиваль складався з двох частин: театральне дійство (битва за фортецю, змагання стрільців) и виступ 5-ти музичних гуртів. Перша частина починалась о 14-й годині, друга - о 18-й.



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



Взагалі, перша частина була досить цікава, але доволі млява. Всім сподобався турнір на кращого бійця, коли один з бійців переміг спочатку одного іншого, потім одночасно двох. Битва за фортецю була цікава великою кількістю бійців. Але коли розпочалося змагання стрільців, люди почали розходитися. Мешенями для стрільців були 3 лицаря.



Деякі зі стрільців використовівали навіть бойові стріли.



Потім почалась музична частина. Перша з виступаючих груп майже не сприймалась слухачами. Але чи далі, тим меньше залишалося пива в магазині через дорогу і тим більше людей починало рухатись. Шалений успіх мали тільки Holy Blood та Тінь Сонця. Хоча їм чомусь досить сильно скоротили час виступу.

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

Read More...