Searching for Simplicity

i must think about what i do all the time

как вегда три толстяка в барыше

leave a comment »

Интересное наблюдение про СЕО и всякие микроданные, микроформаты и RDF, которые использует гугл для ранжирования результата http://www.roughtype.com/archives/2011/03/googles_recipe.php.

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

— А сам разобраться в этом ты что не можешь? А я вот могу!

«сайты пишут инженеры для инженеров»
Опять всякие корпорации с большим кошельком банкуют,
занимают топ в поисковиках,
а бедный папакарло не может поделиться с людьми своими знаниями о мире(

Written by karabinovich

20/04/2011 at 5:36

Опубликовано в Без рубрики

Scala имеет очень много некрасивых конструкций…

leave a comment »

поэтому это не будет следующим mainstream JVM language :(
to be continued

Written by karabinovich

19/03/2010 at 20:02

Опубликовано в 1

Fall in love with Scala

leave a comment »

Лекции уважаемого Дмитрия Сошникова про F# показали мне как функциональный подход в программировании может помочь писать красивый, локаничный и надежный код.
Решил выучить функцональный язык.
Не сильно хотелось переходить на .net для изучения F# (да еще менять нетбинс на vs)
Я стал искать функциональный язык в jvm мире и нашел Скалу.
Посмотрев на Scala, помедитировав над его дизайном и обектно-функциональным дуализмом, увидев benchmarks я понял что это то что мне так нехватало в мире jvm.

В поисках простоты, последнии годы я, как и все мы, увлекался динамическими языками (ruby, groovy, javascript). Я был фанатом groovy и пророчил его следующим mainstream языком в jvm мире.
Я думал что вот выйдет компилятор groovy 2.0 в котором доведут скорость исполнения программ
до промышленного уровня и новые enterprise application начнут писаться на groovy.
Но теперь я понимаю что возможности metaprograming и dynamic typing в языке groovy
не позволят ему стать основным языком разработки серверных backend’ов наших приложений.
Этот язык должен быть более формализован (что бы корректность кода проверял компилятор
а не набор unit тестов) т.е. следующий язык, как и Java, должен быть статически типизированным.
Scala именно таким и является да еще дает возможность писать код в функциональном стиле.
Сам автор языка groovy написал, что если бы в 2003 году ему попалась книга «Programming in Scala»
он бы не сел за проектирование groovy.

Короче я нашел для себя еще одну весч которая добавляет радости к моей работе.

P.S. не все конечно красиво в языке Scala (что вы хотите, немец создал:).
Синаксис языка на первый взгляд кажеться немного … «полиморфным» что ли.
Не видно общего стиля в форме конструкций.
Например:
-нумерация в List начинаеться с 0, а в Tuple с 1
-все операторы left-associative, а те которые заканчиваються на символ ‘:’ right-associative
-mutable и immutable коллеции моделируються по разному для List и Set, Map.
-оператор ‘+’ для mutable и immutable Set ведет себя поразному, можно наделать ошибок если забудешь и будешь добовлять к immutable Set объекты

Written by karabinovich

09/03/2010 at 14:32

Опубликовано в 1

Groovy Console запускать Ant’ом

leave a comment »

Вот полезность в Eclipse есть.
Можно запускать groovy console с кодом проекта и с classpath’ом пректа.
Очень удобно, добавил java классик, запустил groovy console и можешь на ходу манипулировать им.
Но я то фанат netbeans, а в нем нету такой полезности :(
Все свои проекты собираю и деплою антом. И вот подумалось, можно ли сделать такую таску в анте?
Оказалось можно.

<!-- Добавляем groovy-all-1.5.7.jar  в класспас -->
<path id="classpath.with.groovy.jar">
   <path refid="classpath.compile"/>
   <pathelement location="${lib.dir}/groovy-all-1.5.7.jar"/>
</path>

<!-- Определяем groovy таску -->
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" 
classpathref="classpath.with.groovy.jar"/>

<!-- И собственно target которая запускает console с необходимым класспасом-->
<target name="console">
   <groovy classpathref="classpath.with.geotools.jar">
    import groovy.ui.Console;
    // UIManager опционален, нужен для красивого UI
    import javax.swing.UIManager;
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

    Console console = new Console(this.class.classLoader, new Binding());
    console.run();
    // синхронизация нужна что бы ant ждал закрытия консоли, а не сам закрывал ее
    console.swing.consoleFrame.windowClosed = { synchronized(console) { console.notify() } }
    synchronized(console)  { console.wait() }
   </groovy>
</target>


И вот получаем очень приятную весч. В командной строке набираем

ant console


и играемся своим кодом.

Written by karabinovich

18/01/2010 at 15:26

Опубликовано в 1

DBCP connection pool and «Communications link failure»

leave a comment »

Используя apache connection pool для работы с mysql, после некоторого простоя приложения имеем:

java.sql.SQLException: Communications link failure


Говорят что для postgre похожая ситуация.

Почему это происходит?
Потому что часто сервер БД устанавливает время «простоя» одного соединения, после которого оно закрывается. Это разумно, зачем серверу держать открытыми не используемые соединения? А пул соединений не знает, что на другой стороне соединение закрыто.

Что делать?
Сказать пулу что бы он перед отдачей соединения тестировал его на «живость».
Для этого пулу нужно установить validationQuery строку и указать когда делать валидацию (testOnBorrow, testOnReturn или testWhileIdle). Я выбрал первое:

datasource = new BasicDataSource();
datasource.setTestOnBorrow(true);
datasource.setValidationQuery("SELECT 1");


Простого запроса ‘SELECT 1’ для mysql и postgre достаточно.

P.S. Альтернатива этому решению — использовать evicting Idle Connections. Тут описано как.

Written by karabinovich

17/10/2009 at 11:33

Опубликовано в db

Tagged with

hibernate и другие ORM усложняют жизнь

4 комментария

Мне понадобилось 3 года использования, что бы понять: hibernate совершенно не нужен.
Для работы с БД  нам нужно знать только sql и jdbc.  Этот язык и технологию любой студент освоит за месяц. А вот если «интерпрайзерство» навяжет нам  hibernate, нам, помимо sql и jdbc, нужно будет выучить еще  3 языка :

язык конфигурации (hiberante-config.xml)
язык описания самого маппинга (*hbm.xml или jpa анотации)
язык запросов (hsql)

Для этого прочитать книгу HIA, помучиться с lazyload, разобраться с OutMemory. Сколько на это уйдет времени? И что самое главное, после освоения, всеравно проще программы не будут.

Мой выбор:

чистый jdbc
commons-dbutils.jar
мой хелпер который по бину генерит INSERT и UPDATE стейтманты

И что самое приятное war-файл весит около 3-4 Мб

P.S.  ActiveRecord конечно рулит, но это не ORM и в java мире их нету :(

Written by karabinovich

27/09/2009 at 13:18

Опубликовано в db

Tagged with

freemarker и точка как десятичный разделитель

with one comment

Если вы работаете на русской Windows то в JVM по умолчанию стоит русская Locale.
Поэтому:

<#assign x = 1.234>
${x?string("0.##")}


выводит число с запятой в качестве десятичного разделителя:

1,234


Что бы Freemarker использовал точку вместо запятой, нужно установить english locale

Configuration cfg = new Configuration();
cfg.setLocale(Locale.ENGLISH);

Written by karabinovich

04/03/2009 at 15:10

Опубликовано в reading

Tagged with