Wicharek.name
домашние страницы о всяком
Входи:

Записи в рубрике «Планета Developers.org.ua»

Эта рубрика объединяет посты, которые попадают на Планету разработчиков.

Можно подписаться на RSS только для этой рубрики...

26 Янв 2010 00:03

Делаю много 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~

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

27 Дек 2009 13:19

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

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

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

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

Мораль:

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

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

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

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

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

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

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

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

2 Сен 2009 13:01

Ты понимаешь, что родился по неправильную сторону капитализма, когда… На самом деле, с завидной регулярностью. Ну вот, например, я хочу себе купить ноутбук. Мои основные требования к нему предельно просты: я хочу хорошую видеокарту и не хочу большой экран. Почему-то производители уверены, что если, блин, я плачу за видеокарту, то почему бы мне и не заплатить за 17-тидюймовую поебень. Уважаемые производители, я не знаю какие фокус-группы вы там собирали и маркетинговые исследования проводили, но мне нужен именно такой ноутбук. По простой причине: 90% времени я работаю с подключенным внешним монитором. Просто мне нравится, когда у меня всё с собой. Утром я встаю, кладу ноутбук в рюкзак и еду в офис, а вечером забираю его обратно домой. Мне никогда и в голову не придёт играть в игры на экране ноутбука (вы же ведь пытаетесь всучить мне 17-ку именно для этих целей, не так ли?). Я уже молчу о том, что хорошая видеокарта меня интересует в первую очередь не игр ради, а для комфортной работы, так уж вышло, что она связана с компьютерной графикой. Есть ещё ряд специфичных требований: например, видеокарта мне нужна nVidia, так как ATI/AMD не способна родить адекватные драйвера для Линукса, да и вообще всячески сосёт, хоть и открывает спецификации (а куда им деваться-то?).

И вот я нахожу внезапно ноутбук, который меня бы устроил. И что же? Купить его в Украине (за адекватные деньги) — задача непосильная. Купить его да ещё и выбрать подходящие опции — непосильная вдвойне. Я прошерстил все украинские онлайн и оффлайн магазины и максимум, что я нашёл, это модель G50V с худшей видеокартой, зато двумя жёсткими дисками (всего 640 гигабайт) за невменяемую цену в почти 2200 долларов, в то время как в российских онлайн-магазинах модель Vt с теми же 640 гигабайтами стоит порядка 1500 у.е. (!).

В этой чёртовой стране миллионы людей только тем и занимаются, что кому-то что-то перепродают. У нас экономика такая: всё что мы производим — это металлопрокат на старых советских металлургических комбинатах, жратву (чернозём же, хуле) и программное обеспечение руками специалистов, выученных на обломках старых советских технических вузов. Так продайте же мне нормальный ноутбук, чёрт возьми. Нет, я не хочу договариваться со знакомыми, которые «привезут мне из Штатов» палёное говно без гарантии, не хочу покупать такое же палёное говно на ебэях. Я просто хочу нормальный магазин, который продаст мне нормальный ноутбук за нормальные деньги.

К слову. Информация к размышлению: iPhone официально продаётся в осмеянной полунищей Молдове (пруфлинк), а ещё в таких развитых странах, как, например, Камерун и Гвинея (полный список). Попробуйте найти среди стран Украину.

P.S. Видимо куплю через знакомых в России. Украинские бизнесмены убейте себя.

13 Июл 2009 21:35

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

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

дальше

5 Июл 2009 22:09

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

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

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

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

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

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

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

2 Июл 2009 13:21

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
27 Июн 2009 10:56

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 {
 
}

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

12 Июн 2009 23:28

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

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

4 Май 2009 14:58

quake_live

Quake Live — клёвая штука, если кто не играл. Она с конца февраля находится в открытом бета-тестировании. Это практически тот же самый Quake 3 Arena, только MMO.

Сама игра — это как бы плагин к браузеру (Internet Explorer и Firefox), то есть надо этот плагин предварительно установить. Для FF по крайней мере так, под IE это, скорее всего работает как ActiveX компонент, то есть его сам IE и установит. Да-да, пока только Windows, но Mac OS X и Линукс на подходе.

После установки проходим 10-тиминутную «практику», на основании которой игра определит наш уровень навыков. После чего из списка доступных игр выбираем подходящую. При этом нам показывается уровень участвующих в ней игроков: насколько он выше или ниже нашего. Выбираем, жмём «Play» и играем.

дальше