вторник, 22 июня 2010 г.

Поисковики

Несколько достаточно полезных поисковиков.

Поиск картинок по картинкам

http://www.tineye.com/ - находит картинки, похожие на заданную. Мне был полезен, когда надо было определить знаменитость по фотографии.

Поиск названия шрифта по картинке

http://new.myfonts.com/WhatTheFont/ - находит шрифт по хожий на шрифт с картинки. Однажды пришлось исправлять текст на картике, а подобрать похожий шрифт не получалось.

Поиск музыки по мелодии
http://www.midomi.com/ - находит музыкальное произведение по мелодии. Бывает такое, что в песне ни слова не разобрать, да и слышал ты её где-нибудь на рынке. Этот сервис поможет найти песню.

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

воскресенье, 20 июня 2010 г.

PHP abstract static function - о_0

<?php

abstract class A {
abstract static function f1();
static function f2(){
echo self::f1("\n");
}
}

class B extends A {
static function f1(){return 'test';}
}

B::f2();


Fatal error: Cannot call abstract method A::f1() in 1.php on line 6

среда, 16 июня 2010 г.

Определение фазы луны по дате на PHP

Потребовалось мне как-то определить время охоты на обортней. Вроде логично - полнолуние. Полез я разыскивать, что такое полнолуние и понял, что понятие "полнолуние" - весьма непродолжительное. Всего-то мгновение. Причем не обязательно в нашей половине планеты будет ночь. Сначала хотел ограничить ночь полнолуния - от заката до рассвета в дату полнолуния. И тут я наступил на ещё один камень, оказывается ночь - не одна дата, а (внезапно) две. Потому решил привязаться к менее дискретному понятию - фазам луны. Итог, ночь полнолуния, когда фаза луны между 14.5 и 15.5 от заката до рассвета. И вот собственно PHP код для определения фазы луны.

function get_moon_phase_normalize( $v ){
    $v = $v - floor( $v );
    if($v < 0) {
        $v = $v + 1;
    }
    return $v;
}

function get_moon_phase($timestamp){
    $date = date("Y-m-d", $timestamp);
    list($Y, $M, $D) = explode('-', $date);
    $YY = $Y - floor(0.0 + (12 - $M) / 10);
    $MM = ($M + 9)%12;
    $K1 = floor(365.25 * ($YY + 4712));
    $K2 = floor(30.6 * $MM + 0.5);
    $K3 = floor(floor(($YY / 100) + 49) * 0.75) - 38;
    $JD = $K1 + $K2 + $D + 59;
    if($JD > 2299160)
        $JD = $JD - $K3;
    $IP = get_moon_phase_normalize(($JD - 2451550.1) / 29.530588853);
    $AG = $IP*29.53;

    return $AG;
}


Алгоритм взят с http://blogs.msdn.com/b/rucoding4fun/archive/2009/09/07/arduino.aspx

понедельник, 24 мая 2010 г.

Расширение индексов InnoDB может изменить производительность неожиданным образом

Есть старое правило для MySQL, которое гласит, что если на таблице наложено два ключа (a) и (a, b), то первый ключ можно снять, ибо для выборки будет достаточно второго ключа.

В статье на www.mysqlperformanceblog.com наглядно показано, что это правило верно не всегда. Дело в том, что в InnoDB особое внимание уделяется clustered index. Clustered index идёт как замыкающий элемент каждого ключа. То есть индексы надо рассматривать как (a, id) и (a,b,id). Теперь, зная это, подумаем что произойдёт с запросом

SELECT * FROM table WHERE a = 3 ORDER BY id LIMIT 1;

если мы уберём ключ (а) и оставим ключ (a,b).

Вообще статья заставила меня переосмыслить использование и оптимизацию ключей в InnoDB.

вторник, 18 мая 2010 г.

Shift + NumPad. О вреде хоткеев или NumPad не работает

В один прекрасный день я обнаружил, что у меня в Ubuntu перестал работать NumPad. Вернее работать он продолжал, а вот цифры и кнопки арифметики работать перестали. Только при выключенном NumLock функционал курсора оставался на клавишах. Я переключился из Xorg в консоль и обнаружил, что в консоли NumPad работает.

Делаю вывод, что проблема сугубо программная, а не аппаратная, потому полез в гугл и вот, что я там обнаружил. Оказывается проблеме уже больше 2 лет. Появляется она, если по неосторожности нажать Shift+NumLock. В этом случае включается управление курсором мыши с клавиатуры. Так как одиночные нажатия сдвигают курсор на один пиксел, заметить, что курсор передвинулся довольно сложно. Вот и получается формулировка, что NumPad не работает. Чтобы отключить управление надо повторно нажать Shift+NumLock.

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

Офисным работникам на заметку: хоткей работает даже на заблокированном компьютере, так что если желаете сделать гадость ближнему своему, можете не стесняться. Shift+NumLock.

четверг, 25 февраля 2010 г.

python и чайник

икогда, икогда е стригите огти около оутбука!!
Если вы надумали поэкспериментировать с питоном, то самой очевидной и бестолковой ошибкой будет назвать файл тестового скрипта тем же именем, что и библиотеку. Убил два часа на то чтобы понять, что ошибка

File "/home/alexxz/pygame.py", line 4, in
screen = pygame.display.set_mode((640, 400))
AttributeError: 'module' object has no attribute 'display'

вызвана тем, что меня угораздило файл назвать pygame.py. Для того, чтобы исправить ситуацию просто переименуйте файл и удалите pygame.pyc.

четверг, 24 декабря 2009 г.

Audacious2 и русские ID3 теги в Ubuntu karmic coala

Для того чтобы Audacious2 научился воспринимать русские ID3 теги в Ubuntu Karmic Coala надо добавить и сгенерить соответствующую локаль ru_RU.CP1251 и изменить настройки проигрывателя. "Язык для автоматического определения кодировки" надо указать "Русский", а "Кодировку по умолчанию" - CP-1251 соответственно.