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

Записи в рубрике «Информационные технологии»

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

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

4 Июл 2010 19:19

Ни больше ни меньше, а прошла целая эпоха. Сегодня я отказался от браузера Opera в пользу Google Chrome. Здесь я остановлюсь, чтобы все смогли осознать сказанное.

xkcd: Perspective

Продолжим.
дальше

26 Июн 2010 18:42

С выходом iPad'а и 4-го iPhone нам приходится ломать голову над тем, как продлить жизнь наших старых проектов и на этих устройствах. Apple ставит своих разработчиков перед проблемой, от которой ранее их (нас) оберегала — это неоднородная среда выполнения. Если раньше было целых 3 модели телефонов, которые принципиально мало чем отличались друг от друга с точки зрения возможностей, предоставляемых разработчику. Даже разрешение экранов у них совпадало до пиксела. Теперь это совсем не так: iPad — это вообще устройство несколько другого рода, открывающее новые возможности. На 4-м iPhone тоже увеличили разрешение.

Всё это ведёт к тому, что приходиться в той или иной степени адаптировать программу под разные устройства. В хорошо спроектированной программе на UIKit, где святое триединство Model-View-Controller чётко соблюдено, переделать придётся только слой View и вероятно не обойдётся без изменений Controller'а. Но на самом деле это может затронуть и модель, например, если там, условно говоря, «хранятся» изображения, размер которых связан с разрешением экрана (так у нас в одном проекте). А если речь идёт об игровой программе, коих в аппсторе, мягко говоря, немало, то всё становится ещё сложнее: под каждое разрешение, скорее всего, есть отдельный немалый набор графических ресурсов. В связи с этим всем возникает два важных вопроса:

  1. Технический вопрос: Как теперь распространять программы: отдельные версии для отдельных устройств или один большой монстр для «всего»?
  2. Маркетинговый вопрос: Как бы сбить больше бабла с тех, кому нужна и iPad, и iPhone версия, при этом дав сэкономить тем, кому нужно «или-или»?

дальше

13 Июн 2010 21:28

На Новый год подарил Таньке Pocketbook 360, читалку книг на e-ink от отечественных производителей. Как фаната опенсорс меня в ней в первую очередь привлекла открытая (якобы) прошивка и доступный SDK. Затем поучаствовал в конкурсе по написанию игр под эту читалку. Выбрал игру «Балда». Игры в слова как-то очень логично смотрятся на устройстве для чтения книг, не так ли? Да и для динамичных игр с анимацией экран на «электронных чернилах» не слишком приспособлен. Вмешалась работа, не всё удалось реализовать, но кое-какую версию я всё же предоставил и даже за неё полагался приз в виде скидки на тот же самый Pocketbook, при чём при доработке программы обещали его увеличить. Приз мне так и не достался, пусть это будет на совести организаторов. На форуме другие участники писали, что надо было очень постоянно напоминать организаторам об обещанном, и приз-таки можно было выбить, но в моей личной идеальной картине мира подобные дела так не делаются.

А программу я таки доработал и теперь выкладываю версию 1.0.2. Надеюсь, владельцам Pocketbook будет полезна. Собственно, она позволяет играть в Балду. Играть можно против компьютера (3 уровня сложности) и друг против друга. Поддерживаются (теоретически) все модели Pocketbook с прошивкой начиная с версии 14. Модели 302 с сенсорным экраном у меня нет, поэтому проверить работоспособность не могу. Для этой модели реализовано отдельная модель управления (с учётом того, что там собственно тачскрин, а не кнопки), но опробована только на симуляторе.

дальше

2 Июн 2010 16:02

Потребовалось в баш-скрипте получить объём виртуальной памяти, выделенной процессом. Получилось так (через ps aux):

MEMORY_USED=`ps aux | awk -v pid="$PID" '{ if ($2 == pid) print $5 }'`

Где PID — идентификатор процесса.

11 Мар 2010 11:47

Не вся реклама одинаково вредна. У меня есть два примера рекламы, которая оказалась, напротив, полезна.

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

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

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

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

А у вас есть другие примеры полезной рекламы?

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. Нельзя доверять третьесторонним библиотекам даже если они часть хорошо зарекомендовавших себя продуктов. Если бы не моё слепое доверие, времени на починку было бы потрачено в разы меньше.
2 Ноя 2009 13:09

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

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

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

13 Окт 2009 19:46

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

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

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

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

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

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

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

19 Июл 2009 22:46

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

upl-table

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

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