Friday, October 17, 2008

Bash feat. Ant runner

I like Ant. I made some maintenance tasks for my projects and here Bash script that launches them via crontab.

It uses native Ant XML build files that you can specify by absolute or relative path.

There is useful option -r When that is set and build is failed, you will recieve on specified e-mail address short message that build was broken, include it's name.

albass@cisco:~$ ./ -t db/analyze
Will run ./db/analyze.xml build.

Use -d key if you want to debug it.


# Description: ANT runner
# Author: Alexey Bass (albass)
# Version: 1.1.0, 16/10/2008
SCRIPT_VERSION="1.1.0, 16/10/2008"

# ant location. home directory, not file

if [ ! -f $ANT_SCRIPT ]; then
echo "[ERROR] ANT not found at $ANT_SCRIPT"
echo "Please, check the location and correct ANT_HOME if need."
exit 1

# Will be used for reporting to email without it.
# Example: albass => albass + DEFAULT_EMAIL_SUFFIX
# Example: =>

# Holds email for reports.
# need to send notice email if build failed

# holds task name to run

# normally, we don't need debug. that's default.

cat << EOF
Usage: [options] [-r email] -t task

-h Show this message
-t Task to run. Absolute or relative (to PWD) path without ".xml"
-v Print version information and exit
-a Runs Ant diagnostics
-r Send fail notice to provided e-mail address if need
-d Enable debug mode, shows extra info while running


echo $0

which java
java -version

$ANT_SCRIPT -version


$ANT_SCRIPT -diagnostics


# check for full e-mail was specified
local TEST=`echo "$REPORT_EMAIL" | grep "@"`

if [ -z $TEST ]; then

if [ $IS_DEBUG -eq 1 ]; then
echo "[DEBUG] Fail notice will be sent to $REPORT_EMAIL"

# no options specified
if [ $# -eq 0 ]; then
echo "Hey, try -h for help"
exit 1

# get throught passed options
while getopts "hvr:t:da" OPTION
case $OPTION in
exit 0
exit 0
exit 0
echo "[DEBUG] is on"
exit 0

if [ $IS_SEND_EMAIL_ON_FAIL -eq 1 ]; then

# user has task?
if [ ${#TASK_TO_RUN} -eq 0 ]; then
echo "[ERROR] Please, specify task to run"
exit 1

# if not absolute path, set relative
if [ ! -f $TASK_TO_RUN ]; then

if [ $IS_DEBUG -eq 1 ]; then
echo "[DEBUG] Task path: $TASK_TO_RUN"

# does build exists?
if [ ! -f $TASK_TO_RUN ]; then
echo "[ERROR] Can not find task: $TASK_TO_RUN"
exit 1

if [ $IS_DEBUG -eq 1 ]; then
echo "[DEBUG] Starting ANT"
if [ $? -ne 0 ]; then
if [ $IS_SEND_EMAIL_ON_FAIL -eq 1 ]; then

if [ $IS_DEBUG -eq 1 ]; then
echo "[DEBUG] Sending e-mail..."


if [ $IS_DEBUG -eq 1 ]; then
echo "[DEBUG] E-mail sent"

exit 1;
if [ $IS_DEBUG -eq 1 ]; then
echo "[DEBUG] Congratulations, Failed! E-mail will not sent, use -r for that"

exit 0

In case you wish to improve it and not so familiar with Bash, here is the manual.

Thursday, October 9, 2008

Электроника ИМ-11 Луноход

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

И только сейчас, по прошествии 10-15 лет я узнал, что на самом деле это… клон. А я-то думал, что это чудо советских инженеров. Прототип — Big Trak, у них даже сайт есть.

А ещё, оказывается, к нему можно было прицеп подцеплять. Я всё думал, зачем у него там люк такой маленький над клавиатурой есть. Прицепа у меня не было, к сожалению.

Записи о нём (ней) в интернете:

Я тут подумал, наверное, она очень повлияла на то, что я стал программистом :-)

Monday, October 6, 2008

Valid HTML 2.0

So sweet and funny image :-)
Found it dated 20-Mar-2000 07:29.

Tuesday, September 30, 2008

собираю новый компьютер

в виду грядущей покупки нового настольного компьютера, весь вечер «копал» интернет.

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

  • Выбор БП по визуальным признакам – руководство
  • Как нам выбрать системную плату так, чтобы потом об этом не жалеть?
  • Поиск на форуме
  • Классификация видео ATI и NVIDIA
  • Большое тестирование термоинтерфейсов (термопасты)
  • Каталог протестированных блоков питания на Ф-Центер

  • p.s. куда деть старый компутер? желательно его продать за символическую сумму, чтобы немного сократить расходы на новый. эх…

    Friday, September 19, 2008

    Book shelf

    Last book I was read is something about electricity at University program.
    That was quite a long time ago, almost 5 years. Now I'm working as software engineer (programmer) at Cisco Systems for a about 2 years.

    One day I found myself missing books. Internet is good, it is a lot of stuff there. It is too much there that you can lose one's way without a compass. So I opened browser at Amazon and started to collect my «geeky» library.

    High Performance MySQL
    By Baron Schwartz, Peter Zaitsev, Vadim Tkachenko, Jeremy Zawodny, Arjen Lentz, Derek J. Balling
    Paperback: 708 pages
    Publisher: O'Reilly Media, Inc.; 2 edition (June 26, 2008)
    ISBN-10: 0596101716
    ISBN-13: 978-0596101718

    Test Driven: TDD and Acceptance TDD for Java Developers
    By Lasse Koskela
    Paperback: 470 pages
    Publisher: Manning Publications (October 12, 2007)
    ISBN-10: 1932394850
    ISBN-13: 978-1932394856

    Continuous Integration: Improving Software Quality and Reducing Risk
    By Paul Duvall, Steve Matyas, Andrew Glover
    Paperback: 336 pages
    Publisher: Addison-Wesley Professional (July 9, 2007)
    ISBN-10: 0321336380
    ISBN-13: 978-0321336385

    Implementation Patterns
    By Kent Beck
    Paperback: 176 pages
    Publisher: Addison-Wesley Professional; 1 edition (November 2, 2007)
    ISBN-10: 0321413091
    ISBN-13: 978-0321413093

    Objects of Desire: Design and Society Since 1750
    By Adrian Forty
    Paperback: 245 pages
    Publisher: Thames & Hudson (May 1992)
    ISBN-10: 0500274126
    ISBN-13: 978-0500274125

    Head First Design Patterns (Head First)
    By Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra
    Paperback: 676 pages
    Publisher: O'Reilly Media, Inc.; 1 edition (October 25, 2004)
    ISBN-10: 0596007124
    ISBN-13: 978-0596007126

    Design Patterns: Elements of Reusable Object-Oriented Software
    By Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides
    Hardcover: 416 pages
    Publisher: Addison-Wesley Professional (November 10, 1994)
    ISBN-10: 0201633612
    ISBN-13: 978-0201633610

    The Visual Display of Quantitative Information
    By Edward R. Tufte
    Hardcover: 197 pages
    Publisher: Graphics Press; 2 edition (May 2001)
    ISBN-10: 0961392142
    ISBN-13: 978-0961392147

    All books are in English. I'm not promise, but I should make review some day.

    Never late to learn

    There are full lecture materials and videos. Something amazing.

    Stanford Engineering Everywhere

    Introduction to Computer Science
    Programming Methodology (CS106A)
    Programming Abstractions (CS106B)
    Programming Paradigms (CS107)

    Artificial Intelligence
    Introduction to Robotics (CS223A)
    Natural Language Processing(CS224N)
    Machine Learning (CS229)

    Linear Systems and Optimization
    The Fourier Transform and its Applications (EE261)
    Introduction to Linear Dynamical Systems (EE263)
    Convex Optimization I (EE364A)
    Convex Optimization II (EE364B)

    Massachusetts Institute of Technology

    See all courses

    Saturday, September 13, 2008

    Wednesday, August 27, 2008

    с какой стороны бензобак у вашего автомобиля?

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

    вы тоже не знали?:) так вот я подумал, почему бы не упростить головоломку. раз уж там нарисована топливная колонка со шлангом, так почему бы не использовать этот образ как-то так?

    обновление: поискал по этой теме ещё картинки и на многих нарисована та же колонка совсем одна, только шланг то с одной стороны, то с другой. так, на мой взгляд, идеально. получается что у моего Mitsubishi Lancer дизайнер лоханулся — стрелка с одной стороны, шланг — с другой.

    ещё, если оставлять вариант колонка + авто, то открытая дверь должна быть только у водителя, не как в моём примере, когда открыты обе передних двери. так мы получим 100% правильную «целевую аудиторию»:)

    Friday, August 22, 2008

    I was linked today to an article about development techniques. Scott Berkun in Asshole driven development summarize some fun and sad facts that programmers deal with their work life. Comments are also good! ;-)

    Some examples:

    Asshole Driven development (ADD) &mdash Any team where the biggest jerk makes all the big decisions is asshole driven development. All wisdom, logic or process goes out the window when Mr. Asshole is in the room, doing whatever idiotic, selfish thing he thinks is best. There may rules and processes, but Mr. A breaks them and people follow anyway.

    Shovel-Driven Development (SDD) &mdash Get it out the door as quickly as possible, cut-n-paste from anything that you find that works on Google, if it works it’s ready.

    Leave This, Do That (LTDT) &mdash The kind that happens when nobody actually has any master plan about things and the whole development is purely reactive? No module gets finished properly as people jump to the next bug/feature/module on an almost hourly basis.

    Wednesday, July 9, 2008

    Firefox in design mode

    Open any page you want to make editable every single place and run this snippet in address bar:

    javascript:document.body.contentEditable='true'; document.designMode='on'; void 0;

    Saturday, June 28, 2008

    Привязные ремни и ненужные обгоны

    Есть вещи, против которых человек бессилен. Например, ситуации на дороге.

    Не делайте глупости там, где этого не нужно.

    Всегда пристёгивайте ремни, даже сзади.

    Где и как правильно искать книгу в сети

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

    Основы ловли книг в поисковиках
    В наше время, все поисковики умеют сканировать электронные форматы (PDF, CHM и прочие), так что вбиваем название книги или лучше её ISBN номер — так будет намного проще найти нужную вам книгу. А далее начинается игра с запросом: добавляем разные форматы документов.

    Если вы формируете запрос в кавычках (смотрите мои примеры ниже), то поиск будет произведён именно по указанной фразе. Запрос без ковычек выдаст вам больше результатов, похожих на то, что вы ищете.

    • Advanced Search
    • Advanced Operators
    • по формату: "Война и Мир" filetype:pdf | filetype:doc
    • по адресу: "Герой нашего времени" inurl:\.pdf
    • язык: "Евгений Онегин" lang:ru

    Я буду следить за пополнением и точностью этого списка.

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

    Friday, June 27, 2008

    Simple HTTP error pages collection

    This is collection of following HTTP error pages to show to user instead of regular black-white versions as you get from default Apache HTTP Server or some others.

    Client Error 4xx
    • 400 — Bad Request
    • 401 — Unauthorized
    • 403 — Forbidden
    • 404 — Not Found
    • 405 — Method Not Allowed
    • 408 — Request Timeout
    • 410 — Gone
    • 411 — Length Required
    • 412 — Precondition Failed
    • 413 — Request Entity Too Large
    • 414 — Request-URI Too Long
    • 415 — Unsupported Media Type
    Server Error 5xx
    • 500 — Internal Server Error
    • 501 — Not Implemented
    • 502 — Bad Gateway
    • 503 — Service Unavailable
    You should know, that Apache has build-in support for multi language error pages and mine is not, english only (as for now). It may be important depending on project you are working on.

    All you need to do is to replace following patterns:
    1) replace your site link

    <a href="http://your-site/" title="http://your-site/">Home page</a>

    2) and your e-mail and name

    <a href="mailto:your-name@your-site" title="Your Name">Web-admin</a>

    Now, you need to configure your front-end.

    Apache (at httpd.conf or external included in httpd.conf)

    ErrorDocument 400 /http_errors/en/400.html
    ErrorDocument 401 /http_errors/en/401.html
    ErrorDocument 403 /http_errors/en/403.html
    ErrorDocument 404 /http_errors/en/404.html
    ErrorDocument 405 /http_errors/en/405.html
    ErrorDocument 408 /http_errors/en/408.html
    ErrorDocument 410 /http_errors/en/410.html
    ErrorDocument 411 /http_errors/en/411.html
    ErrorDocument 412 /http_errors/en/412.html
    ErrorDocument 413 /http_errors/en/413.html
    ErrorDocument 414 /http_errors/en/414.html
    ErrorDocument 415 /http_errors/en/415.html

    ErrorDocument 500 /http_errors/en/500.html
    ErrorDocument 501 /http_errors/en/501.html
    ErrorDocument 502 /http_errors/en/502.html
    ErrorDocument 503 /http_errors/en/503.html
    ErrorDocument 506 /http_errors/en/506.html

    nginx (at nginx.conf or external included in ginx.conf)

    error_page 400 /http_errors/en/400.html;
    error_page 401 /http_errors/en/401.html;
    error_page 402 /http_errors/en/402.html;
    error_page 403 /http_errors/en/403.html;
    error_page 404 /http_errors/en/404.html;
    error_page 405 /http_errors/en/405.html;
    error_page 408 /http_errors/en/408.html;
    error_page 410 /http_errors/en/410.html;
    error_page 411 /http_errors/en/411.html;
    error_page 412 /http_errors/en/412.html;
    error_page 413 /http_errors/en/413.html;
    error_page 414 /http_errors/en/414.html;
    error_page 415 /http_errors/en/415.html;

    error_page 500 /http_errors/en/500.html;
    error_page 501 /http_errors/en/501.html;
    error_page 502 /http_errors/en/502.html;
    error_page 503 /http_errors/en/503.html;
    error_page 504 /http_errors/en/504.html;

    «/http_errors» should be in «DocumentRoot» for this configuration.

    Download link:
    http errors v1.1.0 (12 KB)

    Things TODO:
    1) want to make tool, for auto generation of these files and to inject there you name and home page links (probably on Java).
    2) need to add some open source license

    See also:
    Hypertext Transfer Protocol -- HTTP/1.1
    Status Code Definitions

    JBoss and Tomcat problems with Java ClassLoader

    Last week I was stucked with some specified java problem.
    i made a dynamic web application (servlets and JSP stuff) and used some external libraries (JARs) inside WAR-file. there was under «WebContent/WEB-INF/lib/».

    The problem description is that some classes is not visible from where it is being loaded. This happens when you have an isolated deployment (like a WAR) and you try to load it from outside the WAR. This may not be directly. e.g. A WAR class loads a class from outside the WAR which in turn tries to load a class from inside the war.

    To understand the root of the problem, it is recommended to look at the Advanced JBoss Class Loading.

    And solution was to place these JAR-files not in WAR, but in «jboss/server/default/lib/ext» folder. Or even better — make there you folder and add following in the «jboss/server/default/conf/jboss-service.xml».

    <classpath codebase="${jboss.server.lib.url:lib}/YOUR_DIR" archives="*"/>

    See also:
    Why do I get ClassNotFoundException or NoClassDefFoundError
    Classloader/Classpath problem

    All this true for JBoss 4.2.0.

    Thursday, June 26, 2008

    java — quick list from array

    import java.util.Arrays;
    import java.util.List;

    public class Array
    List<String> animals = Arrays.asList(new String[] {"lion", "tiger", "bear"});

    Monday, June 9, 2008

    new Canon EOS 40D Kit

    хочу похвастаться покупкой, сделанной нами на прошлой неделе в пятницу, 6 июня 2008 года (очень важная дата может быть :-). мы купили полу профессиональный зеркальный фотоаппарат Canon EOS 40D.

    правильнее сказать, мы взяли комплект: сам аппарат и объектив EF-S 17–85 f/4-5,6 IS USM к нему.

    чистый вес фотоаппарата без аккумулятора и объектива - 740 грамм. линза отдельно весит 475 грамм. итого, с батареей внутри, у нас в руках получается около 1.5 килограмма техники!

    в нагрузку мы взяли карту памяти (как без неё?) SanDisk Extreme® III CompactFlash® 2GB, чтобы можно было сразу начать снимать.

    и сумка для всего этого добра (влагозащищённую, с капюшоном :-) Nova 2 AW от Lowe Pro.

    мы очень довольны, так как давно хотели купить купить новый аппарат! правда придётся поголодать пару-тройку месяцев, чтобы отдать кредит :-) в это время, нужно освоить это чудо-технику и идти снимать!

    подробный обзор этого агрегата на английском языке с картинками можно найти на Digital Photography Review.

    Thursday, May 8, 2008

    Chicken chicken chicken

    Friday, April 18, 2008

    how to use xHTML tags with XSLT

    on my current task i started to use XSLT heavily. i have a set of XML-files and when anybody viewing them, browser applies specified XSLT-file.

    as more than i used combinations of this technologies, was very impressed how things can be done easily.

    today i got some issue. i had some code portion in XML that contains xHTML tags.

    XML content:

    <em>err assertFalse</em>
    out assertFalse
    failure assertFalse(junit.SimpleTest1): error message

    XSLT formatting:

    <xsl:value-of select="output"/>

    so i need to show this output content to user using inside xHTML tags, so first line expected to be emphasized. but it not! all because, XSL processor escaping special characters by default ("<" to "&lt;") to make valid output.

    i found helpful links on Dev Shed forum. all you need, is to add disable-output-escaping="yes".

    <xsl:value-of select="output" disable-output-escaping="yes"/>

    btw, it's working only in IE-family and Safari. it's funny discussion at FF bugzilla started 2001-09-04 and to thus far.

    Friday, April 11, 2008

    get firefox or opera, not IE

    Saturday, March 15, 2008

    ideal web environment structure tips

    why to compile

    i think, you should do this cause this way you can enable only required stuff for all your programs (such apache web server, mysql, php, etc).

    for example, i don’t need all default modules in my apache that eat more memory than application can use. same thing — php.

    configuration files

    vi is good. i even know how to use it. but i prefer to make symbol links to my config files (httpd.conf, my.conf, etc) to some place where it automatically backup’d and i can access via windows editors to change, copy, share them. this files only read by daemons on startup. while windows still default os in many companies…

    to be contunied…

    Thursday, March 6, 2008

    mysql performance tips


    The DELAYED option is very useful if you have clients that cannot or need not wait for the INSERT to complete. This is a common situation when you use MySQL for logging and you also periodically run SELECT and UPDATE statements that take a long time to complete. It gets an okay from the server at once, and the row is queued to be inserted when the table is not in use by any other thread. Also inserts from many clients are bundled together and written in one block.

    Wednesday, March 5, 2008

    mysql dba queries

    this post is small refcard of useful queries to understand your database and find some problems. list will be updated constantly with new ones.

    --- mysql-dba-queries.sql --------------------------------



    /* */
    SHOW VARIABLES LIKE '%innodb%';

    /* */

    SHOW GRANTS FOR 'viewer';


    /* Find total number of tables, rows, total data in index size for given MySQL Instance */

    COUNT(*) `tables`
    , CONCAT(ROUND(SUM(`table_rows`)/1024, 2), ' K') `rows`
    , CONCAT(ROUND(SUM(`data_length`)/1048576, 2), ' M') `data`
    , CONCAT(ROUND(SUM(`index_length`)/1048576,2), ' M') `idx`
    , CONCAT(ROUND(SUM(`data_length`+`index_length`)/1048576, 2), ' M') `total_size`
    , ROUND(SUM(`index_length`)/SUM(`data_length`), 2) `idx_frac`

    /* Find biggest databases */

    , COUNT(*) `tables`
    , CONCAT(ROUND(SUM(`table_rows`)/1024, 2), ' K') `rows`
    , CONCAT(ROUND(SUM(`data_length`)/1048576, 2), ' M') `data`
    , CONCAT(ROUND(SUM(`index_length`)/1048576, 2), ' M') `idx`
    , CONCAT(ROUND(SUM(`data_length`+`index_length`)/1048576, 2), ' M') `total_size`
    , ROUND(SUM(`index_length`)/SUM(`data_length`), 2) `idx_frac`
    SUM(`data_length`+`index_length`) DESC
    LIMIT 10;

    /* Data Distribution by Storage Engines */

    , COUNT(*) `tables`
    , CONCAT(ROUND(SUM(`table_rows`)/1024, 2), ' K') `rows`
    , CONCAT(ROUND(SUM(`data_length`)/1048576, 2), ' M') `data`
    , CONCAT(ROUND(SUM(`index_length`)/1048576, 2), ' M') `idx`
    , CONCAT(ROUND(SUM(`data_length`+`index_length`)/1048576, 2), ' M') `total_size`
    , ROUND(SUM(`index_length`)/SUM(`data_length`), 2) `idx_frac`
    SUM(`data_length`+`index_length`) DESC
    LIMIT 10;

    --- mysql-dba-queries.sql ----------------------------EOF-

    Thanks to:
    — Peter Zaitsev and his MySQL Performance Blog
    MySQL Documentation

    Friday, February 15, 2008

    How to fold your t-shirt in seconds

    I was looking for this video a lot of time, and here it is ;-)

    p.s. just try, it's a lot of fun ;-)

    Saturday, February 2, 2008

    nginx 0.5.35

    tar xzvf nginx-0.5.35.tar.gz

    tar xjvf pcre-7.6.tar.bz2

    tar xjvf zlib-1.2.3.tar.bz2

    tar xzvf mod_rpaf-0.6.tar.gz
    cd mod_rpaf-0.6
    /usr/local/httpd/bin/apxs -i -c -n mod_rpaf-2.0.c
    cd ..

    cd nginx-0.5.35
    make clean
    ./configure --with-zlib=../zlib-1.2.3 --with-pcre=../pcre-7.6
    make -j4
    make install

    /usr/local/nginx/sbin/nginx -V
    ps ax -o pid,ppid,user,%cpu,vsz,wchan,command|egrep '(nginx|PID)'

    cat /usr/local/nginx/conf/nginx.conf

    Friday, January 25, 2008

    Bit Box

    Prodigy - Breathe

    Thursday, January 24, 2008