среда, мая 16, 2012

Вышла DB2 v10.1

Прекрасная новость, вышла DB2 10.1 в т.ч. Express-C

http://db2express.com/ru/

http://freedb2.com/2012/04/30/db2-express-c-v10-an-even-better-database-still-free-of-charge/

суббота, ноября 26, 2011

MSL готовится к старту на Марс

Через полчаса произойдет историческое событие - старт миссии MSL на Марс. Прямую трансляцию можно смотреть здесь. Также запостил в блог Informix.

пятница, ноября 25, 2011

Разделение разрядов в числах

В Java 7 появилась новая возможность предназначенная для разделения разрядов в числовых значениях. Теперь в числах можно использовать символ подчеркивания, сделано это чтобы повысить читаемость чисел в исходном коде.
Сравните:
int var1 = 123456789;

И вот такую запись:
int var1 = 123_456_789;

Если число большое то такое разделение разрядов существенно повышает читабельность кода.

понедельник, ноября 21, 2011

Как проверить использует ли Java VM обновленную time-zone

В связи с отменой перехода на зимнее время в России, актуален вопрос правильной работы приложений. Чтобы узнать использует правильное время ваше Java-приложение, можно скомпилировать и запустить следующий код:

import java.util.Date;

public class TestTime {
    public static void main (String [] args) {
        System.out.println(new Date());
    }
}

Если время которое покажет приложение отличается от системного, то надо обновить time-zone для установленной Java VM.

Немного о null и индексах в разных СУБД

Определим используется ли значение null в индексах btree в различных СУБД. Для тестирования возьмем три разные базы: Informix, DB2 и Oracle.

В каждой базе создается таблица в которой в индексированном поле 30% значений null.
create table t1 (f1 int);
Таблица наполняется данными (зависит от базы, ниже пример для Oracle):
insert into t1 select 1 from dual connect by level <=30;
insert into t1 select null from dual connect by level <=70;
Строится индекс по таблице:
create index idx_t1 on t1(f1);

И собирается статистика для оптимизатора.
Запускается запрос select * from t1 where f1 is null; с поиском по этому полю условие is null. Проверяем используется ли индекс.

Оракл версия 10gR2  ( для получения плана запроса используем set autotrace on) :



--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    30 |    60 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   |    30 |    60 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("F1" IS NULL)


TABLE ACCESS FULL т.е. в случае когда делается поиск по значениям null, делается полный скан таблицы.
в индексах b-tree значения null не включается.


Informix версия 11.70UC2 (для получения плана запроса используем set explain on):


select * from t1 where f1 is null;

Estimated Cost: 2
Estimated # of Rows Returned: 30

  1) informix.t1: INDEX PATH

    (1) Index Name: informix.idx_t1
        Index Keys: f1   (Key-Only)  (Serial, fragments: ALL)
        Lower Index Filter: informix.t1.f1 IS NULL

Индекс используется. В индексах b-tree включается значение null



DB2 версия v9.7.0.2 (для получения плана запроса используем db2expln) :


Statement:

  select *
  from db2inst1.t1
  where f1 is null


Access Table Name = DB2INST1.T1  ID = 3,5
|  Index Scan:  Name = DB2INST1.IDX_T1  ID = 1
|  |  Regular Index (Not Clustered)
|  |  Index Columns:
|  |  |  1: F1 (Ascending)
|  #Columns = 1
|  Skip Inserted Rows
|  Avoid Locking Committed Data
|  Currently Committed for Cursor Stability
|  #Key Columns = 1
|  |  Start Key: Inclusive Value
|  |  |  |  1: NULL
|  |  Stop Key: Inclusive Value
|  |  |  |  1: NULL
|  Index-Only Access
|  Index Prefetch: None
|  Lock Intents
|  |  Table: Intent Share
|  |  Row  : Next Key Share
|  Sargable Index Predicate(s)
|  |  Return Data to Application
|  |  |  #Columns = 1
Return Data Completion



В плане видим что также используется индекс (Index-Only Access), т.е. null значения включаются в индекс.


Т.о. из трех рассматриваемых СУБД только Оракл не включает значения null в индекс, Informix и DB2 наоборот согласно данным оптимизатора, включают null значения в индекс.

пятница, ноября 18, 2011

Новое оформление блога

Переключил блог в новое оформление, пока выглядит непривычно. Вернул как было.

среда, ноября 24, 2010

четверг, октября 21, 2010

Mercurial и TortoiseHg

При использовании Mercurial часто бывает необходимость посмотреть дерево проекта в графическом виде. При этом можно конечно использовать и встроенное средство просмотра, но удобнее пользоваться TortoiseHg. Причем для запуска можно даже не выходить из консоли: достаточно запустить команду hgtk log. У команды hgtk есть также много других ключей для выполнения разных задач из графического интерфейса.

среда, октября 20, 2010

Жаркое лето 2010

Прошедшее лето 2010 было просто супер: жара стояла с середины июня и до середины августа! Правда дождей практически не было.

пятница, июня 04, 2010

Дубы которые мы выращиваем

Прошло всего два месяца с момента посадки желудей и вот они - красавцы дубы, растут:

среда, марта 31, 2010

Mercurial и Kdiff3

Если вы работаете с Mercurial, и не устраивает стандартный консольный diff, то можно прикрутить другой, например графический Kdiff3. Особенно это актуально когда вы работаете в Windows, а файлы исходных кодов используют кодировку UTF-8.
Для начала скачиваем и устанавливаем Kdiff3. Затем производим непосредственно настройку Mercurial:
добавляем в файл .hgrc записи:

[extensions]
hgext.extdiff =

[extdiff]
cmd.kdiff3 = "Путь к исполняемому файлу kdiff3.exe"
Более подробно см. здесь

среда, января 27, 2010

Возвращаясь к теме использования G1

Как известно использование нового сборщика мусора G1 в JVM бесплатно. На всякий случай вот ссылка Использование G1 - бесплатно!
Но в release notes к обновлению Java 6u18 все равно почему то не рекомендуют его использовать в рабочих системах, если нет поддержки. Видимо еще не все баги отловлены.

вторник, января 19, 2010

Используйте RSS

Не понимаю какой смысл использовать twitter для того чтобы давать возможность отслеживать обновления сайта. Есть же RSS, это та самая технология которая для этого и предназначена. Использовать twitter, ну может быть кому то и покажется это удобным.

четверг, сентября 17, 2009

Клонирование виртуальных машин в VirtualBox

При использовании VirtualBox бывает необходимо сделать копию исходной ВМ чтобы перенести ее на другой компьютер или использовать на этом же. Для клонирования недостаточно просто скопировать контейнер ВМ, если она будет запускаться там же где и исходная ВМ, поскольку у них будут одинаковые идентификаторы UUID. Чтобы у клонированной ВМ был другой UUID, надо использовать для клонирования команду:

VBoxManage clonehd originalvm clonevm

где originalvm это исходная ВМ, а clonevm это копия

Также можно просто скопировать исходную ВМ а затем сменить у нее UUID c помощью команды:

VBoxManage internalcommands sethduuid clonevm

среда, сентября 09, 2009

Новый планировщик для ядра Linux

Планировщик BFS ускоряет реакцию на запуск приложений или работу самих приложений. Вобщем говорят что интерфейс системы при его использовании становиться гораздо быстрее. Для использования надо патчить ядро. Как пропатчить ядро для BFS читать здесь. Вообще интересные отзывы, все говорят что после патча все работает быстрее.

среда, августа 05, 2009

Netbeans, Mercurial и кодировка UTF8

Мои проекты в Java используют кодировку исходных файлов UTF8 (но бывает и 1251). Поэтому когда я поместил очередной проект под контроль версий Mercurial, а затем через некоторое время работы с проектом, посмотрел историю проекта, то был неприятно удивлен, увидев вместо русских комментариев крякозябры. Получилось что введенный в UTF8 текст комментариев не отображался правильно. Причем в свойствах проекта была установлена кодировка UTF8. Однако решение все же нашлось: надо при запуске Netbeans явно указывать кодировку UTF8. Сделать это можно с помощью конфигурационного файла в %Каталог установки Netbeans%\etc\netbeans.conf. В нем добавить к параметру netbeans_default_options строку "-J-Dfile.encoding=UTF-8". Тогда Netbeans будет принудительно отображать не только исходники, но и прочие текстовые файлы с кодировкой UTF8.

воскресенье, июля 05, 2009

вторник, марта 03, 2009

Один хорошо, но практика дает три

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

среда, ноября 05, 2008

Вива Обама!

Барак Обама одержал уверенную победу на президентских выборах в США. Порадуемся за американцев и будем надеятся что отношения между нашими странами будут более позитивными.