суббота, 16 августа 2008 г.

Последняя запись на blogspot'е.

Это сообщение всем своим видом сообщает, что данный блог закрыт по причине переезда на другую платформу.

RSS уже обновлен и натравлен на временное пристанище на wordPress'е. А нет ничего более постоянного, чем временное =) Цель данного переезда в том, чтобы в конечно итоге переползти на stand-alone блог и сделать ему более приветливый вид =) А WordPress подходит для этого чуть лучше, как мне кажется. Все записи успешно импортированы туда, вместе с комментариями. Спасибо команде WordPress за этот безболезненный переезд =)

Писать чаще не обещаю, да и не нужно это. Следите за изменениями на SmartMasses, там постоянно появляются новые товары, а лучше подпишитесь на RSS и тогда все обновления и скидочные акции будут падать вам в ридер.

Мой эксперимент с Oracle можно считать начавшимся, с понедельника приступаю к написанию агрегатов. Читаю Тома Кайта на ночь и восхищаюсь изворотливостью человеческого разума =)


BTheMad

воскресенье, 10 августа 2008 г.

Oracle, JDeveloper и PL/SQL

Так уж получилось, что я решил чуть-чуть сместить фокус своей девелоперской деятельности в сторону Oracle PL/SQL. Нет, мне совершенно не надоел веб, просто у меня есть свой проект Smart Masses, который представляет собой магазин для гиков и сочувствующих имени доктора Жаба, и мне его более чем достаточно для экспериментов. А учитывая, что в конторе, где я работаю всегда есть возможность выбора проекта, я решил «прокачать» знания по sql и pl/sql, с которым до этого не работал. Для начала оформил себе оракловые курсы по банальному sql и уложил все знания в систему =) Учиться понравилось. Вчера съездил в Олимпийский и закупил литературы по Oracle PL/SQL и немного Тома Кайта для души =)

Сегодня уже установил себе Oracle 10g XE на Ubuntu 8.04 и начал вдумчиво читать литературу и выполнять примеры.

У оракла есть некая IDE с незамысловатым названием JDeveloper. Не то, чтобы я горю желанием изучить ещё одну IDE, но посмотреть на неё захотелось. Ставиться она не без бубна, но официального руководства вполне достаточно. Единственная проблема возникает, когда пытаешься законнектиться к базе из неё. Проблема выражается двумя ошибками:

ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified

И ничего не признает. Выставление параметра NLS_LANG в профиле баша ничего не дает. После многочисленных расследований и поисков в гугле решение было найдено. В файл jdev.conf необходимо добавить пару строк:

AddVMOption -Duser.language=en
AddVMOption -Duser.region=us

Оказывается Ынтырпрайз Жава не очень признает всякие NLS_LANG и берет параметры прямо из среды обитания. И эти параметры оказываются неверными. Этот «хак» подходит для любых IDE, написанных на этом чудесном кросс-платформенном языке и использующихся для разработки под Oracle.

И вот ещё одна ссылка по которой можно почитать чуть более объемное описание проблемы и способы её решения. Отличный статья, рекомендую.

...тем же вечером...

Продолжая копать в нужном направлении, нарвался на SqlDeveloper, выпускаемый Oracle. Который не несет в себе столько уг, как jDeveloper. При установке был капризен и требовал путей к jvm, не смотря на то, что она была прописана в PATH. Ещё пытался (неудачно) создавать файл jdk в дирректории ~/.sqldeveloper/ и писать туда этот самый путь, чтобы не спрашивать каждый раз при старте. Но что-то у него не задавалось. Пришлось создать ему этот файлик, раздать на него 777 (на всякий случай =) и вот тогда, он туда уже всё написал.

Ну и баг NLS data files лечился тем же способом. В sqldeveloper.conf добавились те же магические строки =) Вот такой вот он...ЫнтЫрпрайз.

воскресенье, 6 апреля 2008 г.

Авиабилет Москва-Амстердам-Москва.

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

В свете того, что мне понадобилось слетать в Амстердам =) я начал искать самую бюджетную возможность добраться до города...тюльпанов. Самолетом. В одном вменяемом агентстве мне поведали, что в Амстер летает много авиакомпаний. Просто многие из них с пересадкой в каком-нибудь европейском городе. Вот список тех, кого пробивал я:

  • Аэрофлот (без пересадки)
  • KLM (различные варианты)
  • AlItalia (с пересадкой)
  • SAS (с пересадкой)
  • LOT (с пересадкой)
  • SwissAir (с пересадкой)

Далее я аккуратно просчитал билет на одинаковые даты во всех авиакомпаниях. К сожалению, цены я тогда не переписал, а сейчас билет на те же даты стоит уже по-другому. Но в итоге я отправился за билетами в SAS, т.к. их вариант (14 т.р.) оказался самым выгодным с точки зрения времени вылета/времени полета/цены. Такой же, но беспересадочный рейс у KLM стоил на 2 т.р. дороже.

Надеюсь, что качество сервиса будет на сколько-нибудь приличном уровне и я не подпаду под статью "скупой платит дважды" =)

пятница, 4 апреля 2008 г.

Ubuntu 8.04 beta. Шаг вперед, два шага назад.

Зачем обновляться до beta?..

Угораздило меня попасть на сайт убунты, и увидеть там "25 дней до релиза". Потом угораздило прочитать в каком-то блоге об успешном обновлении до бетаВерсии. До этого читал, что человек обновился до альфы, и ему всё нравится.

Вечер был свободный ;) Поэтому и я набрал update-manager -d и смело нажал "Обновить". Убунта честно предупредила, что обновляться будет до беты, что качать придется метров 900 и что вообще всё опасно. Пути назад не было =)

Я думал, что процесс пойдет автоматически, поэтому пошёл пить чай, однако, вернувшись, я обнаружил диалоговое окошко с вопросом "Какой из конфигов использовать для ..." И таких вопросов мне задали много. Т.е. не уходите пить чай, а вдумчиво следите за обновлением. К тому же это процесс поинтереснее дефрагментации диска ;)

И что в итоге?..

В принципе, все изменения отражены в changelog'ах, поэтому я приведу лишь субъективные впечатления.

  • Пропал звук. Устройств, на которые можно подавать звук в системе обнаружено не было. Проблема была в ядре, оно обновилось спустя 4 дня. Звук появился. Ура.
  • В системе поселился Tracker, который активно за мной следит. И всё время всё индексирует. Пока я с ним не общался на предмет индекса, но лишний значок в трее заметил ;)
  • FireFox обновился до 3b4, следовательно, половина add-on'ов стала неработоспособной. Особенно мне не хватает FireBug и Del.icio.us-плагина. Ставить "check for version compatibility" в "none" мне не хочется. В прошлый раз плохо закончилось =) Подождем...
  • Слетела тема MacOsX (надеюсь, не палюсь ;) Правда не целиком, а только частично. Оччень весилит
  • Есть ощущение, что система дольше грузится. Надеюсь, после релиза ей полегчает

Вообщем, это хороший такой LTS-релиз, т.е. без наворотов и революций. Обновление прошло почти успешно, полет нормальный. Ждем релиза.

среда, 26 марта 2008 г.

Как я подСел на подКасты.

Сегодняшняя микрозаметка будет посвящена подкастам, кои я открыл для себя совершенно недавно. Дело, кажется началось с Хабра, на котором подКастам отведен отдельный тег, где они кучкуются. Вообщем, в очередной раз увидев на главной странице новость о выходе очередного подкаста, я решил послушать о чем же говорят люди. Послушав, кажется, об ИнтернетМаркетинге, я жОсктко вдохновился и понял, что подКасты являются идеальным заполнителем рыхлого времени, которое, обычно, забивается музыкой. Или, если совсем всё плохо, радио

Но не удобно же, блин качать их по ссылкам и заливать в телефон руками. Поэтому, пошерстив безнадежный рунет, нашел на забугорном сайте более или менее приличную таблицу сравнения. Прошерстив и её, выбрал самое банальное - gPodder, который в Убунте ставиться apt'ом.

GPodder умеет уже многое. Конечно с багами и прочим, но это джедаям опенСорса не помехи. Например, он может синхронизировать подкасты с плеером или iPod'ом. Мой телефон он принял за плеер и удачно залил на флешку то, что скачал. Правда с русскими кодировками у него плохо. И файлики называются _____.__C___.mp3. Но это тоже не пугает джЕдаев =)

А разжиться подКастными RSS-лентами я сумел на rpod, где их превеликое множество. Приводить список выбранных мною я не буду...мания величия у меня сегодня не в пике.

четверг, 13 марта 2008 г.

Ubuntu. Проблема с кодировкой CD/DVD дисков.

Давно возникал вопрос, почему на вставленных cd/dvd дисках папочки с русскими названиями были представлены знаками вопроса. В связи с тем, что дисками я не часто пользовался, я на это забивал =) Ну а если не забивал, то пробирался по диску вслепую =)

Ответ был подсмотрен в убунтарии на хабре. Вся (грустная) правда в том, что диски монтируются в неизвестной кодировке. Чтобы ситуацию поправить раз и навсегда, стоит открыть на редактирование /etc/fstab и дописать там в опциях монтирования оптоДисков iocharset=utf8

П.С. Больше трех месяцев в Ubuntu. Полет нормальный =)

четверг, 28 февраля 2008 г.

Обо всем по-немногу. Firefox, AMR, ExtJS.

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

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

Конвертация AMR и 3gp.

Я часто пользуюсь диктофоном на мобильном телефон. Во-первых, потому что не всегда есть возможность достать бумагу и ручку, а во-вторых для того, чтобы хранились логи встреч, которые потом можно послушать, если забыл что же было решено по итогам встречи ;)

Я не помню уже, чем конвертировал из amr в mp3 под Windows, но под *nix искать программу долго не пришлось. Попробовав несколько самопальных скриптов, некоторые из которых опасны для жизни файлов ;) я остановился на программе Mobile Media Converter (ссылка внизу страницы, между гуглоРекламой, долго искал =). Программа с самым банальным интерфейсом и тем очень удобна. Умеет работать с amr и 3gp, а большего мне и не нужно.

Знаменитый баг Firefox

С этим багом я столкнулся сразу же после установки Ubuntu. Это тот самый знаменитый баг, из-за которого хоткеи не работают в русской раскладке. Его уже поправили (за деньги), но исправления будут только в Firefox 3. А пока, необходимо установить маленький add-on, который всё вам поправит. И будет шастье =)

Небольшой багФикс для ExtJS

Замешивая полный винегрет из тем, упомяну ещё одну вещь. Все знают, что ExtJS можно заставить говорить по-русски в окошках/менюшках, просто подключив файл с русской локалью. Но в нем есть один неприятный и редкий баг. При работе с DateField, когда выставляется формат содержащий месяц прописью (янв, фев и пр.), мы получаем январь 1970 года и ничего кроме.

Вся проблема кроется в массиве Date.monthNumbers, в котором содержатся неверные короткие имена. Надо просто заменить его на следующий:

Date.monthNumbers = {
  Янв : 0,
  Фев : 1,
  Мар : 2,
  Апр : 3,
  Май : 4,
  Июн : 5,
  Июл : 6,
  Авг : 7,
  Сен : 8,
  Окт : 9,
  Ноя : 10,
  Дек : 11
};

На сегодня — всё. Надеюсь, что скоро станет посвободнее и я допишу туториал по ExtJS и гридам с фильтром и поиском =)

понедельник, 28 января 2008 г.

Управление сторонними библиотеками в Subversion.

В этом блоге я ни разу не постил переводы. Повода не было. Но вот в RSS пробежала статья, описывающая правильное управление внешними библиотеками в Subversion. Она мне настолько понравилась, что я решил опубликовать её вольный перевод. К сожалению, времени потестировать рецепт у меня не было, поэтому буду переводить "as is". Если заметите какие-нибудь неточности, отпишите в комментах, исправлю.

Subversion Externals

В Subversion существует удобный механизм управления внешними библиотеками, который позволяет автоматически экспортировать код из других репозиториев в рабочий проект. Это svn:externals. Этот пост создан в качестве напоминания самому себе, о том, как это реализовать. Потому что каждый раз забывая, я вынужден гуглить. А решение, к которому я прихожу каждый раз одно и то же.

Для начала, предположим, что у нас в репозитории есть папка lib/, и мы хотим положить в неё код из папок library/ и incubator/library/ проекта Zend Framework. Конечная структура папок выглядит следующим образом:


myApplication/
    lib/
        incubator/Zend/
        Zend/

Для этого необходимы следующие заклинания:


$ cd lib/
$ export SVN_EDITOR=vim
$ svn propedit svn:externals .

(Разумеется, стоит заменить vim на редактор, привычный Вам)

В запустившемся Vim'е (emacs'е, nano) необходимы следующие строки:


incubator http://framework.zend.com/svn/framework/branch/release-1.0/incubator/library
Zend http://framework.zend.com/svn/framework/branch/release-1.0/library/Zend

Стоит отметить, отметить, что release-1.0 это текущий релиз ZF, а следующий будет release-1.5. Если вам необходима текущая версия ZF 1.5, то это будет release-1.5PR

Сохраняемся, выходим из редактора и видим следующее сообщение:

Set new value for property 'svn:externals' on '.'

Вот и всё! Не забываем закоммититься и теперь для поддержания ZF в состоянии актуальности не забываем запускать svn up.

среда, 23 января 2008 г.

ExtJs. Многостраничный грид с фильтром и поиском. Часть 1.

Просматривая статистику поискового трафика, любезно предоставленную мне feedburner'ом, я замечаю, что основная масса трафика идет на тему ExtJS. Мне не совсем понятен этот момент ;) Обычно, когда мне что-то надо узнать по ExtJs, я двигаю на их форум. Потому что именно там собрана вся информация, которая вообще может пригодиться (после документации, конечно). В гугле я ищу только конкретные ошибки, которые выдает мне FireBug. Потому что поисковая система форума далека от идеала.

Но, в свете того, что я чуть подправил вектор своего блога и ориентируюсь на пользователей больше, чем раньше, я начну серию статей, посвященных ExtJS. А точнее одному удобному виджету, который может быть применен во множестве ситуаций. Речь идет о многостраничном гриде с поиском и фильтром.

Работая с ещё с ExtJS 1.1, я нашел замечательный топик, в котором рассказывалось о подобном гриде. И приводился замечательный пример. В этом примере всё отлично. Но он написан на первой версии и использует в качестве бэк-энда python. В этой серии туториалов я опишу создание такого же грида, с использованием ExtJS 2.0, php5 и Oracle (для MySQL будут приведены примеры запросов, не сильно отличающиеся от ораклинских).

В этой заметке я лишь опишу примерную структуру будущего виджета, а в дальнейшем приведу код с комментариями и пояснениями.

Итак. Наш грид будет состоять из:

  • grid.html - html-файл, содержащий разметку страницы
  • grid_data.php - файл, обслуживающий запросы к БД со стороны грида
  • grid.js - js-файл, содержащий основной код приложения

Архитектура будет банальной. Наш грид посредством AJAX-запросов, будет обращаться к php-файлику и тот будет передавать ему данные в формате JSON. Запросы к БД будут всего двух типов:

  • Запрос очередной страницы с данными
  • Поисковый запрос

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

На сегодня всё. Stay on line.

воскресенье, 13 января 2008 г.

О синхронизации Google Calendar с телефоном.

С тех пор, как я последний раз поднимал эту тему, прошло немного времени, однако любезный Dragonhorse отписал в комментариях ссылку на вторую версию GCalSync'а. Напомню, что это маленькая JavaMe программка, которая устанавливается на телефон и синхронизирует календарь на телефоне с Google Calendar. В качестве ее недостатка можно было выделить лёгкую "глюкавость" и невозможность синхронизировать несколько гугло-календарей.

В связи с этим я спокойно пользовался goosync'ом в его бесплатном исполнении. Однако, во второй версии программы, был доработан интерфейс, убрана "глюкавость" (каких-то багов ещё добавили, конечно =) и, самое главное, была реализована возможность синхронизации с двумя и более гугло-календарей.

Таким образом, не вижу смысла более пользоваться GooSync и перехожу на неё. Ещё раз спасибо, Dragonhorse.

Для обладателей Motorola A1200 (и каких-нибудь ещё), привожу рецепт по преданию программе работоспособности, потому что без рецепта телефон запрещал ей читать календарь.

  1. Качаем .jar файл с программой
  2. Устанавливаем программу на флешку
  3. Подключаем телефон к компу и ищем на флешке файл .system/java/DownloadApps/MIDletxxx/registry.txt
  4. Меняем Domain: untrusted на Domain: Manufacturer
  5. Меняем Is-Trusted: 0 на Is-Trusted: 1
  6. Меняем DRM-Mode: Forbidden на DRM-Mode: Allowed

После этих манипуляций, телефон начнет доверять программе и они подружатся. А мы получим двухстороннюю синхронизацию мобильного телефона и google calendar. Что не может не радовать =)

пятница, 11 января 2008 г.

del.icio.us, как хранилище информации в системе GTD.

С тех пор, как я прочел книгу Дэвида Аллена "Getting things done", прошло уже достаточно времени. Я прикипел к ThinkingRock со всеми его фишечками и прикрученным календарем, поэтому на другие GTD-системы я смотрю, сравнивая их с тем, что есть в ThinkingRock. Единственное, с чем я не до конца определился — это хранилище информации.

Дэвид Аллен рекомендует использовать шкаф с папками. Создавать по папке на каждую тему, упорядочить их по алфавиту и хранить в шкафу. В такой системе меня не устраивает пара моментов:

  • Громоздкость
  • "Оффлайновость"

В силу того, что большая часть моей работы проходит через комп, и большая часть информации идет в цифровом виде, мне необходимо цифровое хранилище информации. Блуждая по зарубежным ресурсам (тут можно привести длинный список), я наткнулся на очередное эссе на тему "Моё ГТД", в котором упоминается макосовский софт DEVONthink, который я попробовать не смог в силу его макосОвости и небесплтатности. Но судя по заверениям создателей и личным впечатлениям автора эссе (а он, судя по всему, завсегдатай известного макОсно-ГТДшного блога 43Folders, т.е. ему верить можно ;) софт достойный.

Убедившись в очередной раз, что надо либо ставить MacOSX на PC (фи), либо покупать Mac (о, да), и поняв, что отдавать деньги в очередной раз не хочется, я решил подумать ещё раз =)

Вторая дума (по мотивам того же эссе) занесла меня на backPack. Опять же, основываясь на заверениях автора эссе и создателей сервиса, пришел к мысли, что сервис хороший. Только, он платный. Точнее есть бесплатный вариант, но настолько урезанный, что способен только заманить на платный аккаунт. А жить на нем невозможно. Это понимаешь только после бесплатной регистрации. Но попробовать его стоит. Может кому сильно понравится, и он останется там жить ;)

После нескольких часов поиска, я вспомнил про del.icio.us, который я использовал как временное пристанище для ссылок и периодический источник полезных линков. И его тэги показались мне вполне удачной идеей.

Не мудрствуя лукаво, я решил сотворить из него information storage для он-лайн статей. Есть, конечно, вероятность, что статьи канут в лету, но кэш гугла останется с нами. И, имея нормальное название статьи и линк на неё, можно у гугла будет попросить показать последнее, что он об этой странице запомнил ;)

Помня, что лучший "упорядочиватель" — это время, я решил не слишком углубляться в создание сложной структуры тэгов. Я пробежался по всем закладкам, благо их было около сотни, стер те, что были устаревшими или более не полезными, и "заТэгил" те, что остались. В процессе "тэганья", я выделил несколько основных направлений, по которым я буду (предположительно) складировать информацию и вывел их наверх (@development, @nix и пр.). Далее, я создал пару тэгов ещё повыше ;) (@@print - распечатать и @@parse - изучить). Оглядев сложившуюся систему, я поудалял тэги, в которых было по одной записи, сократив их число ещё чуть. Таким образом, получилась довольно стройная система. Разумеется, она будет изменяться. Возможно будут появляться новые верхнеУровневые тэги.

Результатом я остался доволен. По-крайней мере часть хранилища у меня есть. Если найду более универсальный способ - обязательно расскажу

Что касается хранилища оффЛайн-информации, то в субботу поеду за папками и файлами и наклейками =) Посмотрим, что из этого получится. Главное купить побольше, чтобы можно было беспроблемно выкидывать ;)