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

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

Умер Деннис Ритчи

Только что узнал, что 9-го октября умер Деннис Ритчи, автор языка C, один из основных разработчиков Unix. Учёный и программист, чья работа лежит в основе современного мира информационных технологий. Айфоны и андроиды, макось и винда — далеко не полный список того, в разработку чего Ритчи прямо или косвенно сделал значительный вклад. Обидно, но, к сожалению, характерно, что новость о его смерти прошла даже мимо меня, утонув в потоке массовой скорби по Стиву Джобсу. Пафосный бизнесмен, зарабатывавший миллиарды, и скромный учёный, на работе которого зарабатывали миллиарды. Мир скорбит о первом, я — о втором.

Неизвестная ошибка

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

Позвони мне позвони

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

Ссылка на этой кнопке представляет собой URI, который обрабатывается клиентом Скайп, если таковой установлен и поддерживает такие штуки в конкретном браузере и операционной системе. Вот так она обычно выглядит:

skype:wicharek?call

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

Bash-fu. Выполнить для каждого файла в одну линию

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

for FILE in SOMEWHERE; do SOMETHING; done

Вот так, например, можно все wav-файлы в текущей директории конвертировать в CAF с кодеком IMA4 (полезно для iOS приложений). Работает под Маком с установлеными тулзами для разработки (нужна afconvert оттуда):

for FILE in *.wav; do afconvert $FILE `basename "$FILE" .wav`.caf -d ima4 -f caff -v; done

Зарегистрировался в IDP

JobsРегистрация в iPhone Developer Program для стран Третьего мира стала работать предельно просто. Чуваки с appdev.ru предлагают сделать всё за 300 баксов? На самом деле нужно всего 100 на любой нормальной Визе, которую принимают в западных магазинах. Только имя на ней должно в точности соответствовать имени эккаунта. Специалисты по транслитерации из OTPBank'а считают, что моё имя пишется Vitalii. Поэтому теперь меня так зовут и для Эпла.

Процесс регистрации предполагает отправку факса. PamFax в руки, там 3 факса бесплатно, а вам нужен один. Распечатываете форму, заполняете, фоткаете. Или даже не распечатываете, а прямо в фотошопе и заполняете. Кто там разберёт? Дядюшка Стив старается для вас, дорогие аутсорсеры. А вот дядя Витя Янукович не старается. Абсолютно легального способа вывести деньги из App Store, похоже, не существует. Если знаете — расскажите.

Реквием для Opera

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

xkcd: Perspective

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

Что плохо в Universal Applications для iOS

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

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

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

Читать далее

Балда для Pocketbook

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

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

Читать далее

Bash-fu. Объём виртуальной памяти, выделенной процессом

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

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

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

Полезная реклама

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

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

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

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

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

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