пятница, 30 октября 2009 г.

Старая ошибка в бинарном поиске в Java

Случайно наткнулся на статью Joshua Bloch о любопытной ошибке в реализации бинарного поиска в старой версии Java. Вот ссылка http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html. Суть проблемы в том, что на массивах из очень большого количества элементов(примерно миллиард элементов) данный поиск бы ломался. Причина этого, неочевидна, но проста. А именно при сложении двух чисел типа int можно получить число, больше максимально возможного для int. А, как мы знаем, в бинарном поиске позиция текущего элемента вычисляется, как среднее между двумя числами:

int mid =(low + high) / 2;

Джош переписывает эту строчку кода на:

int mid = low + ((high - low) / 2);

или что лучше по производительности:
int mid = (low + high) >>> 1;

Последняя строка сейчас и используется в Arrays и в Collections. Вот такая забавная история.

воскресенье, 18 октября 2009 г.

666 евро в месяц

Предлагают нам учиться во Франции и получить единоразовую стипендию в размере 8000 евро на год. А это получается по 666,6(6) евро в месяц. Неплохо. У нас в ЮУрГУ стипендия равна примерно 50$ в месяц. А зарплата сотрудников института что-то около 120-150$.
Как же тут учиться и одновременно не работать?

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

Интересные заметки по Java

Пишет некто  Dr. Heinz M. Kabutz. Довольно интересные заметки http://www.javaspecialists.eu/archive/archive.jsp

вторник, 13 октября 2009 г.

Пара вопрос к программистам-практикам на C/C++

Подскажите пожалуйста хорошие книги, статьи на тему "дизайна", конструирования программ на языке Си. Интересует, как пишутся "средней руки" системные программы на Си и желательно под Unix системы.
Общие принципы видятся такими:

  1. Выделяются относительно обособленные куски. Они раскидываются по разным файлам
  2. Для них пишутся свои структуры("замены классам") и функции.
  3. В файле(ах) "main" это все собирается воедино
Слишком уж абстрактно...
Также интересно, какими инструментами пользуются для статического анализа кода на предмет ошибок и возможных утечек памяти. В качестве IDE думаю взять Eclipse CDT. 

суббота, 10 октября 2009 г.

Программа для быстрого перевода

Использую сам уже более двух месяцев и рекомендую другим попробовать программу-обертку для перевода от Google Translate http://translateclient.com/. Выделяете любой текст и появляется иконка с кнопкой. Нажимаете и получаете перевод. Можно настроить перевод с любого на любой язык. Также, можно легко отключить работу программы в некоторых приложениях, например в Eclipse, чтобы она не выводила подсказку при выделении текста. Программа стабильна и не глючит.
Автору данной программы большое спасибо!
p.s.: забыл добавить, что работает это только для windows :(

среда, 7 октября 2009 г.

Как сделать в svn уведомления о коммитах

Теперь я понимаю *nix'ые HOW-TO и пошаговые инструкции, где и что нужно вводить :). Вот моё HOW-TO. Сам я устанавливал это на Linux сервере.
1) http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/mailer/mailer.py- сам скрипт для рассылки
http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/mailer/mailer.conf.example настройки для этого скрипта
2) Кладете mailer.py в вашу любимую директорию со скриптами. Не забудьте сделать chmod 755.
3) Переименуйте mailer.conf.example в mailer.conf. Положите его в директорию /home/username/svn/yourproject/conf/. Сделайте chmod 755.
4) Правьте mailer.conf. Тут все зависит от ваших настроек сервера. В моем случае я раскомментировал строчку с mail_command и smtp_hostname.
Запишите в to_addr адреса членов комманды, которые будут получать уведомления. Адреса разделяйте через пробел.
Добавьте в reply_to почтовый адрес сервера(для красоты и фильтрации:)).
Там ещё много всяких настроек. Они уже на усмотрение остаются.
5) Заключительный шаг.
Идем в svn директорию проекта и находим там папку hooks. Переименовываем файл post-commit.tmpl в post-commit. Делаем chmod 755.
Там комментируем лишние линии, кроме REPOS и REV.
Добавляем следующую линию, описывающую путь до скрипта:
/home/username/script/mailer.py commit "$REPOS" "$REV"

Слайды к статье про фунциональное программирование в Java

Многие, наверное, читали следующую статью http://antilamer.livejournal.com/245962.html. Но я думаю, что далеко не все видели слайды к данной статье http://spbhug.folding-maps.org/wiki/EugeneKirpichov?action=AttachFile&do=get&target=JavaFP_ru.ppt. В презентации больше информации, примеров и вообще лучше усваивается.

p.s.: хотя в Google на запрос "Функциональное программирование Java" данные слайды вылезают первыми.

Проглядел комментарии

Извиняюсь перед всеми, что не выводил комментарии. Надеялся, что мне по почте будут выводиться уведомления и попросту не смотрел.
p.s.: Там есть комментарии, оставленные несколько месяцев назад...

пятница, 2 октября 2009 г.

Наука
Выбрал темой для научных исследований тему №3:"координатор параллельной СУБД на базе СУБД PostgreSQL". Буду постргеc ковырять, а также MPI. Все это дело, между прочим, пишется на чистых Сях. Прощай JVM и сборка мусора! Привет, Access Denied и free!

ФП
Стало доходить "промышленное понимание" основ функционального программирования(ФП). К сожалению, не читал ни одной книги по ФП, поэтому называю это понимание промышленным. Оно ничем фундаментальным не подкреплено. Однако, теперь лень писать циклы, а однотипные действия очень хочется запихать в некие "объектики-функции"(скажем так:)). В Java для этого очень могут помочь доп. библиотеки. Но увлекаться всем этим не стоит. Нужно держать code-style. Однако, приходит смутное понимание, что 1000 строк кода можно уместить в 500 и даже меньше и все будет читабельно. Хочется иметь не 100 методов, а 10 объектов-функций и просто комбинировать их :)

Универ
Очень хочется сюда попасть. Посмотрим, насколько это окажется реальностью.

четверг, 1 октября 2009 г.

Ссылки на подкасты и научная работа

Сейчас совсем мало времени и некогда писать статьи, но писать что-то надо, поэтому буду кидать ссылки на интересные сайты и статьи. Ну и отрывистые замечания.

Подкасты, которые я регулярно слушаю:
http://ruby.rpod.ru/
http://maxim.podfm.ru/runetologia/
http://taop.rpod.ru/


Также предложили следующие темы для научной работы:
- оптимизация обменов данными в параллельной СУБД для многопроцессорных
иерархий.
- динамическая реконфигурация параллельной СУБД.
- координатор параллельной СУБД на базе СУБД PostgreSQL


Проект на RoR развивается и скоро уже будет в продакшн :-) Ждите...