Tuesday, July 15, 2014

OdessaJS 2014

5-6 липня я був запрошений на OdessaJS для того, щоб зробити доклад про побудову enterprise-level application використовуючи AngularJS. Сам доклад можно подивитися тут: http://slides.olostan.name/twinfield_neoui/twinfield_neoui.html#1

Сама конференція вразила мене своєю “молодіжностю” - було дуже багато молоді. Як серед відвідувачів, так і спікерів. Організатори - Артем Тритяк та Юлія Черняк зробили все, щоб з скучної по своїй суті девелоперскої коференції зробити драйвову веселу тусовку. Дуже багато спілкування було саме поза-доповідями. Люди кодили просто у коридорах.

Як відомо, будь яка конференція - це 50% доповіді, та 50% - це спілкування на афтерпаті. І тут організаторам вдалось зробити все на вищому рівні: афтерпаті після першого дня продовжувалась майже до початку наступного - до 7 ранку на березі моря.

Але і технічна частина була просто чудова: було все - від широкого кола фронт-енд фреймворків, до сурового node.js бекенда. Важко було вибрати на яку саме доповідь піти.

І завершили все “круглим столом” з доповідачами, на якому була можливіть поділитися life-hack’ами з тими, хто тільки починає свою кар’єру девелопера.

Я впевнен, що івент вдався! І наступний OdessaJS буде абсолютним must-visit івентом!

Tuesday, February 25, 2014

Easy Dart on Google Compute Engine (GCE)


 One-line  download SDK and install command for current user would be:
curl -L "https://docs.google.com/uc?authuser=0&id=0B1i4NDqKFLYJM3NlYnRhLXFfXzQ&export=download" |sh

Long version:

Actually Dart could be run on Google Compute Engine instances as described on this article.  There you also can find other details on how to configure GCE instances.

But the problem is that you need to recompile Dart, as SDK provided on Dart downloads page does not run on instances provided by GCE at this moment (Debian 7 and CentOS 6). If you will try, you'll get this response:
/dart: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by ./dart)
/dart: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./dart)
But when you want to have your instance up and running quick, probably you don't want to spend instance's resources on recompile as it will cost you additional money.

Wednesday, February 12, 2014

Go CMS for Google Apps Engine



Not so long ago I've starting digging into Go language and found it very attractive for server-side development. The reasons are:

  1. It is fast ("near C performance")
  2. It is garbage collected
  3. Syntax is though little bit strange (comparable to Dart), but still quite easy to learn
  4. Easy to start
Also Go is supported by Google Apps Engine.

Speaking about performance, I should mention cost. If you're in "cloud", then you should think about "cost per request" - how much resources were used to serve request. So if application is faster, it should be cheaper in case if you're using real "cloud" platform, such as GAE that can automatically scale your application.

Also because Go in compiled language, instance startup is much faster then Java/Python.   

The Idea

Sunday, November 24, 2013

Child process balancer for Node.JS: Building block of Message Driven Architecture

This article is devoted to "child-balancer" - project that I've published recently to GitHub.

The Idea

Idea of this project raised when I'd a small task that required a serious CPU-heavy calculations. Server, on which this script should run had 16 Xeon CPUs, so there were some space to use.

Sunday, April 10, 2011

Very simple EventBus/PubSub implementation (Java)

While investigating and learning usage of CQRS parrtern I've found that there is no any simple event bus implementation for Java (exept this one, but it do not had sources).

So I've used idea of "Java Programming Tip: Building Your Own Event Bus" blog post, and made my own implementation.

It allows very-very simple and not optimized way of publishing/subscribing on events with consentation on simplicity.

Friday, March 25, 2011

Math coombinator: 5-3-4/1/2=0

(Post is in english, because I've decided to make russian blog posts at specialized it-oriented web community - http://olostan.habrahabr.ru/blog/, so translations of these posts would be posted there)
(Пост на английском потому что я решил русско-язычные посты вести в блоге сообщества http://olostan.habrahabr.ru/blog/. Перевод этого поста будет доступен позже по этой ссылке)

Not so long ago I've noticed one funny post on bash.org.ru (free translation):
xxx: There is numbers 1 3 4 and 6. Task is to get 24 using addition, substruction and multiplication. Numbers could be used only once.
yyy: Listen, can you send me when I will be at office - I got something else to do at home
...and I start thinking about efficient algorithm for solving this problem!

To simplify little bit I've decided to forbid using grouping parentheses. So problem could be stated in such way:

There is a set of numbers A1...An, and target number X. Task is no find such combination of this numbers (order could be changed), that Ax1 (op1) Ax2 (op2) ... (opn-1) An = X. (op1..n-1 - are one of operations "+","-","*","/")

I decided to use C++ to practice with this language. Mostly same solution could be made on any language.

Ok, lets start.

First analysis shows that this problem could be solved with finding vertex in the graph with predefined characteristics. So we can reduce this problem to problem of finding path from some (any) initial vertex to target vertex.

Graph could be set in such way:
  • Vertex are some permutation of initial numbers and some set of operations.
  • Two vertexes are connected if there is one swap op numbers and one operation changed.

So from any vertex we can get connected vertexes in such way: swap all possible pairs of numbers and for all swapped numbers change one operation.

For example: we have initial numbers 1,2,3. So from vertex (1+2+3) we can get vertexes: (2+1+3),(1*2+3), (3*2+1) etc.

After initial implementation of this algorithm I got results what I've expected. Example output could be:
result:2-1*3-4+5=0 (tested 29828)
Nice, but I do not like 29k of tested solutions... "Can we do better"? I think yes. Lets remember "A* search algorithm". May be we can use that idea and sort solutions based on how closer we are to target?

There was a tiny change: replace 'queue' with 'priority_queue' and add cost function that will compare two solutions based on how close we are. So each time we get some solution to test we get solution that is more closer to target result.

So after this change I got:
result:4/1+3-5-2=0 (tested 4)
Much better! So with only such small optimization I've lowered length of searching to 4 iterations! Here is a table comparing results of 'queue' and 'priority_queue':

result:4/1+3-5-2=0 (tested 4)result:2-1*3-4+5=0 (tested 29828)
result:1+2-3-4+5=1 (tested 3)result:1-2+3+4-5=1 (tested 251)
result:3/1*4-5*2=2 (tested 109)result:3-2-1*4+5=2 (tested 29601)
result:1-2+3-4+5=3 (tested 3)result:1-2+3-4+5=3 (tested 248)
result:1*2+4-5+3=4 (tested 3)result:1-2*3+4+5=4 (tested 246)
result:1+2+3-5+4=5 (tested 2)result:2+1+3+4-5=5 (tested 11)
result:1+5+3*2*4=30 (tested 3)result:2*4*3+1+5=30 (tested 558)
result:1+5/2*3*4=31 (tested 4)result:3*5/2*4+1=31 (tested 59961)
result:5*2*4-1-3=36 (tested 181)result:4*2*5-1-3=36 (tested 1006943)
result:1*2*4*5-3=37 (tested 160)result:2*1*5*4-3=37 (tested 1004303)

So as result I can say that there is a point try to find more efficient way of solving problem.

Source code of solution (very dirty and may be contains some implementation bugs, but my task was not to write a 'clean code' example, but write a solution) is stored on GitHub Gist.

Monday, November 8, 2010


В общем, уже как почти месяц как я перешел на Ubuntu. Перед этим хоть и знал и изредко пользовался альтернативными ОС (сервер, который обслуживает look.org.ua на FreeBSD, который я сам "поднимал" и "конфижил"), но как домашнюю все никак не решался установить. Да и специфика работы (в основном разработка на .NET) на это сильно влияла.

И вот с выпуском Ubuntu версии 10.10 решился.

Что понравилось

  • Дружелюбие. При чем не только "для чайников", но и как "адвансед" пользователь я смогу очень удобно разметить диск, указать какую FS (а из десяток на выбор).

  • Софт. Поиск, установка софта проcто очарователен. При чем как и "Центр приложений", так и "Менеджер пакетов". Особо отмечу то, насколько "вливается" установка приложений, которых нет в списке - достаточно с сайта загрузить пакет, как будет автоматически зарегистрирован источник, и софт будет атоматически обновляться.

  • Эстетичность. Многие судят Ubuntu за то, что она копирует макось. Возможно. Но это, блин, красиво. Все на своих местах. Я сначала попробовал другие темы, но вернулся на "дефолтовую" - просто и со вкусом. Хотя немного серовато. Но всякие compiz-эффекты просто радуют глаз и расслабляют (например Win+E, Win-W).

  • Скорость. По сравнению с Windows7 просто поражает то, как ведет себя система сразу после загрузки (которая происходит просто магически быстро - даже заставка с точечками не успевает толком помигать) - а именно отзывчивость системы. Загрузилась - работай. В Windows после загрузки при запуске броузера или другой софта идут какие-то подгрузки винта и т.д. На самом деле мне иногда это было тяжело понять - ведь, к примеру, броузер "весит" метров.. ну еще 20 библиотеки незагруженные. При современных винтах 40мб грузится примерно секунду. Видимо Windows на фоне еще делает много операций.

Что НЕ понравилось

  • "по умолчанию" система ввода плохо дружила с моей мышкой (A4Tech X7) при переключении раскладки. Чинится установкой новой версии xinput (спасибо инфраструктуре PPA это делается в 2 клика). Подсказали на "хабре".
  • то, как встроен чат в систему. Идея отличная, но я не сразу понял что при закрытии "Списка собеседников" я выхожу из онлайна. При этом стандартный клиент, который идет с системой не умеет прятаться в трей. (см. комментарии. может что поменяли)

  • треевые "popup-ы", которые размываются при наведении мышкой - ну привык я когда идет popup о том, что новое сообщение быстро кликать на попапе чтоб открыть его. Тут эти popup-ы чисто информативные.

  • в целом имхо "трей" сейчас остается самым слабым местом - наборы иконок там сильно выбиваются из общей целосности интерфейса. Все-таки система треевых иконок (которые в notification area) в Windows7 имхо более продуманна - можно некоторые прятать и показывать по необходимости.

  • Шрифты. Да, стандартные красивые, но я все-таки привык к обычным, виндовым. По этому быстро доставил себе пакет дополнительных шрифтов.

Из "нестандартных" установил Chrome, Skype, Dropbox, VMWare и ощущение от системы просто отличные.

Не хватает только iTunes (для более простой работы с iPad) нет.