Архив рубрики: Информационные технологии

Компьютеры, программирование, украинская IT-индустрия и всё, что с этим связано. Говорят, что человечество променяло космос на информационные технологии. Если так, то именно им предстоит изменить нашу жизнь, потому что больше нечему.

Home, End, Page Up и Page Down в Terminal.app

Делаю много iPhone девелопмента, брозерс. Из-за чего плотно сел на Мак ОС. Только что дошли руки починить тамошний Терминал. По умолчанию клавиши Home, End, Page Up и Page Down работают там совсем неправильно. Загуглить всё легко, но отчего-то я долгое время просто терпел. Вот здесь нашёл решение. Правда оно не очень крутое, Home и End всё равно фейлят. Но в первом комменте приводится 100% работающий вариант, что даже в vim всё работает как надо.

Короче, в настройках терминала для текущей тему выбираем вкладку “Keyboard”. В списке находим все нужные клавиши и меняем текущие значения на “send string to terminal:” с такими строками:

Home \033[7~
End \033[4~
Page Up \033[5~
Page Down \033[6~

Внезапно, всё работает.

MySQL C++ Connector Fail

В текущем проекте возникла необходимость работать с MySQL базой данных из C++. Кроме базового API на «чистом»  C, разработчики MySQL (кому она там сейчас принадлежит?) предоставляют надстройки для различных языков программирования, называя их connector'ами. В их числе имеется и красивая высокоуровневая обвязка для C++. Хорошая альтернатива слабо предназначенному для непосредственного использования libmysqlclient, казалось бы.

Вскоре начались проблемы. Случайные вылеты, причинами которых были баги самого мерзкого характера: какая-то дрянь портила чужие области памяти. Потратив предварительно несколько часов, я так и не сумел сходу решить проблему. Уже тогда я подошёл вплотную к MySQL коннектору, но решил что столь явной проблемы (на максимально простом тест-кейсе) в официальной библиотеке быть просто не может, а значит проблема где-то раньше в моём коде. Потому решено было временно отложить решение (вылеты были регулярными, но не столь частыми) и сначала дописать функционал до определённого уровня, что и было проделано.

Пришло время второго захода. В ход пошли хитроизощрённые отладочные техники с hardware watchpoint'ами и утилитами для отслеживания выделения памяти. Снова несколько часов и снова вижу проблему в connector'е. Тут-то я наконец сосредоточенно погуглил и нагуглил письмо в mailing list MySQL, где описывалась похожая проблема. Автор письма потрудился залезть в исходники коннектора (что я уже было собирался делать) и обнаружил там серьёзные проблемы. Кому интересно, подробно могут почитать по ссылке, но суть в том, что там просто элементарная ошибка (и не одна) с освобождением памяти, которая приводит к самым неприятным последствиям.

В итоге, код работы с базой (благо, ещё не разросшийся) был переориентирован на использование сишной libmysqlclient и счастье наступило.

Мораль:

  1. Не используйте MySQL C++ Connector. Это какой-то вообще слабо поддерживаемый проект. Мало ли что там ещё за проблемы найдутся.
  2. Нельзя доверять третьесторонним библиотекам даже если они часть хорошо зарекомендовавших себя продуктов. Если бы не моё слепое доверие, времени на починку было бы потрачено в разы меньше.

UPD. Кстати, существует ещё mysql++. Не пробовал, но должно быть ок.

Разобрать чёртову клавиатуру

logitech_deluxe_250_disassemble_hintЕсли вам когда-нибудь, как мне вчера, понадобиться разобрать клавиатуру Logitech Deluxe 250 PS/2, то знайте, что помимо огромного количества шурупов, которые видны с задней стороны клавиатуры, имеются ещё 4: два — под резиновыми ножками снизу (ножки нужно аккуратно сковырнуть, а потом при обратной сборке придётся клеить обратно), а ещё два — в районе клавиш Caps Lock и «+» на дополнительной клавиатуре (крышечки клавиш надо снять).

На других клавиатурах, возможно, также подобное встречается. У меня, на то, чтобы понять, как эту чёртову клавиатуру раскрутить ушёл хренов час. И интернеты мне не помогли.

UPD. Благодарные читатели сообщают, что модель 350 разбирается похожим образом. Только не надо снимать резиновые ножки (под ними пусто). Есть только 2 скрытых винта под кнопками (там же где и к 250-й).

Программания 14

Конкурс прошел. Организаторы бухают, GlobalLogic подсчитывает сэкономленные деньги, а мы, простые программисты из команды «Яволидио», радуемся, что девятичасовая гонка наконец закончилась.

Анализирую произошедшее, прежде всего хочется отметить некоторую двойственность всего происходившего на конкурсе: с одной стороны как бы надо было спешить спешить, бегать, с другой — высокое место по времени не означает ровным счётом ничего. С одной стороны задачи были из серии так называемого «спортивного программирования», с другой — надо было как бы писать красиво и документировано, с третьей — всё это надо было делать ещё и очень быстро. Были сложные задания, на которые отводилось очень мало времени, были совсем лёгкие задачи (определить лежать ли три точки на одной прямой, lol), на которые времени выделялось слишком много. В итоге вышла полная неясность что, как и зачем.

В начале игры, пришло понимание, что C++ при всём своём величии — не самый лучший выбор для решения подобных задач. С другой стороны, написали на нём почти всё, наловчившись под конец. Только пару задач наш штатный вебдевелопер проделал на PHP, дав нам отдохнуть. Опыта олимпиад и вообще подобных конкурсов у нашей команды почти не было.

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

В итоге, по времени, мы пришли четвёртыми, хотя реально и того быстрее, просто организаторы затупили в конце. В «поле» наблюдались многочисленные нарушения. Квест же пешеходный, если в команде достаточно человек можно разделиться: одни снимают текущий код, другие — садятся на хвост более успешной команде. Вот и получалось, что некоторые умудрялись пробежать полцентра города за 15 секунд. Организаторы пообещали раздать штрафов (бойтесь, heratoz ;)).

Доигрывал, одним глазом смотря футбол. На вопросе про ГКЧП я как раз сокрушался по поводу не забитого Шевой пенальти, за что был удостоен звания виновного в нефинишировании вторыми.

Бойтесь конкуренты: три ноутбука Леново и три внешних винчестера (экстраполируем призы за 2-е и 3-е места) будут нашими.

Сайт Металлиста

Новый сайт Металлиста не стал лучше. Снова добавили бестолковой вебдванольности. Страшный флеш-ролик на пол экрана с последними новостями. Мокрый пол везде, пёстро и бесполезно. В ущерб самому важному — удобству получения информации. Спрашивается, зачем было уменьшать турнирную таблицу на главной? Места что ли не хватало? Разве этот огрызок может быть кому-то полезным?

upl-table

И когда же, наконец, разработчики сайта узнают об RSS?

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

Главная проблема Project Manager'ов в Украине

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

Во всех компаниях, где мне приходилось работать, эти самые менеджеры были абсолютно бесполезной прослойкой между заказчиками, начальством и командой. Они только усложняли  жизнь разработчика. Будучи абсолютно неспособны разобраться в сути процессов, которыми они «управляли», они были вынуждены как-то оправдывать своё существование (и зарплату), вмешиваясь в рабочий процесс там, где от него следовало держаться подальше (подсказывать программисту, как ему починить баг, sic!), или просто регулярно отвлекая разработчика необходимостью предоставлять абсолютно бессмысленные отчёты (не всякие отчёты одинаково бессмысленные, я знаю).

Читать далее

Футбольная IT Лига 2009 в городе Харькове

Эта информация для Вас, если:

  1. Вы работаете в сфере информационных технологий или имеете соответствующее образование.
  2. Вы играете в футбол, не против поиграть в футбол или хотя бы просто интересуетесь футболом.
  3. Вы живёте в городе Харькове.

Суть: один мой знакомый организует осенью (сентябрь—октябрь) футбольный турнир для харьковских IT'шников. Собственно, вся информация есть на официальном сайте. Хочу только добавить следующее.

Во-первых, я участвую :-)

Во-вторых, поучаствовать можете и вы. Если вы работаете в более-менее крупной харьковской IT-компании, то с большой вероятностью её руководство получило официальное приглашение от организаторов на электронную почту. Требуйте информации у начальства :-) Если ничего никто не получал или вы, скажем, фрилансер или, к примеру, работаете IT-специалистом, но не в IT-компании, то вам нужно собрать команду (до 15-ти человек, разумный минимум — человек 8) и сделать предварительную заявку, написав организаторам (почта partorg@itleague.kharkov.ua). Если команду вам никак не собрать, но участвовать хочется, всё равно напишите организаторам, возможно, таких как вы желающих наберётся на целую команду.

В-третьих, мероприятие действительно того стоит. Соревноваться Вы будете не с затесавшимися в команды профессионалами из ПФЛ, а с такими же как Вы, программерами, сисадминами, дизайнерами и проджект-менеджерами. Организаторы обещают за этим уследить. Дух соревнования, все дела. Играть будем на ОСК «Металлист» (на комплексе мини-футбольных полей Детской академии). Судить будут профессиональные судьи, лечить профессиональные медики, играть профессиональные футболисты не будут. Цена вопроса: две с половиной штуки с команды смотрите на сайте.

Завершающее напутственное слово: иногда стоит вылезать из-за компьютера. Это я себе :-)

Geek Clock Plasmoid

geek-clock-plasmoid-screen-01Некоторое время назад в Интернетах обсуждали забавные часы, где на циферблате вместо цифр были оригинальные подписи из области математики, физики и компьютерных наук. Вчера я в рамках любви к KDE 4, написал эмулирующих их плазмоид. «Написал» сказано громко, так как писать пришлось мало (взял код обычных часов :)), больше рисовать. В общем, все интересующиеся могут посетить страничку проекта или страничку на kde-look. С пакетами для разных дистрибутивов пока что плохо (пытаюсь подружиться с openSUSE Build Service), есть только PKGBUILD для моего любимого Arch Linux.

Исходники само собой прилагаются, собрать не так уж и трудно (если, конечно, у вас имеется cmake и devel-пакеты для KDE 4 ). Делается примерно так (в директории, куда предварительно распакованы исходники):

cmake -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix`
make
sudo make install

iPhone SDK Hint: перемещение элементов в UITableView

UITableView можно настроить так, чтобы пользователь имел возможность менять элементы таблицы местами, перетаскивая их. Естественно, на эти перемещения программа должна реагировать, внося соответствующие изменения в структуры данных, отображаемых в таблице.

Как использовать этот функционал достаточно внятно описано в документации, но есть небольшой нюанс. Если просто задать:

cell.showsReorderControl = YES;

для каждой UITableViewCell (и предварительно выставить для таблицы свойство editing в YES), то ничего не измениться. Для того, чтобы у ячеек таблицы действительно появился контрол, позволяющий перетаскивание, необходимо у UITableViewDataSource определить следующие методы:

- (BOOL)tableView:(UITableView *)tableview canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
	return YES;	
}
 
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath 
	toIndexPath:(NSIndexPath *)toIndexPath {
 
}

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

Свой /etc/hosts для каждой wi-fi сети (через NetworkManager)

Условия задачи: имеется ноутбук, тягаемый туда-сюда, как и полагается ноутбуку. Есть пара основных мест, где он бывает: дом и работа. И там и сям он подключается к локальной сети через wi-fi. И там и сям имеются некие сервера, которые из оружающего мира видны через внешний IP, а из локальной сети только через локальный IP (порты форвардятся на роутере) по некой причине, которую я сам не до конца догоняю, но поделать с этим ничего нельзя. Если вы находясь в той же сети, что и сервер, попробуете зайти на него, используя его доменное имя, а не прямой локальный IP, то вас ждёт облом, ибо DNS выдаст вам внешний IP. Решение есть такое: прописать всем компам в локальной сети в файле hosts локальный айпишник для заданных доменных имён. Для стационарных компов это сделано и забыто, но как быть с упомянутым выше ноутом?

Решение: под Виндой я написал скрипт, которым вручную переключал hosts на нужную сеть (скрипт просто копировал заранее подготовленный файл). Но вот недавно я после полугодового перерыва, вновь окунулся в чудесный мир Линукс (об этом отдельно) и подумал, что переключать руками как-то западло. Читать далее