• ZX-Spectrum 48k

    Неизвестный Синклер

    Весьма занимательное чтиво об истории становления компьютера ZX-Spectrum, Клайве Синклере и компании Sinclair Research. Цветной, с полноценной клавиатурой, дешевый К декабрю 1981 года количество проданных ZX81 превысило 250 тысяч. На

    Read more »
  • King Valley

    King’s Valley на ZX-Spectrum

    Эту игру я писал, если не ошибаюсь, еще в школьные годы, аккурат до поступления в ВА РБ. Уровни помогали мне делать мой брат Илья Угольник и Янушкевич Евгений. Так же

    Read more »
  • YouCompleteMe in action

    Рандомные тормоза Vim с плагином YouCompleteMe

    Пользуюсь для C/C++ комплитером YouCompleteMe, базирующемся на clang. Периодически YCM тормозил так сильно, что ввод символа производился с задержкой в несколько секунд. Происходило это рандомно, от размеров проекта никак не

    Read more »
  • Simple Veiwer GL

    Simple Viewer GL

    Сегодня ночью взялся за доработку вьювера изображений – Simple Viewer. Давно хотелось отказаться от использования Gfl SDK. Эта библиотека является частью проекта XnView. Библиотека хорошая и удобная, хорошо документированная. Поддерживает

    Read more »
  • Rubik's Stopwatch

    Rubik’s cube Stop-watch

    Таймер для учёта времени сборки кубика Рубика и прочих головоломок. Более подробно о возможностях таймера написано ниже скриншота. Могу сказать одно, я пользуюсь своим таймером, так как считаю его наиболее

    Read more »

Android: скриншот с помощью adb

На девайсе под управлением Android сделать скриншот статического (!) изображения можно скопировав информацию из фреймбуфера:

adb pull /dev/graphics/fb0 fb.bgra

Расширение bgra нужно для convert из набора ImageMagick, что бы он мог понять каков порядок ARGB. Я пробовал снимать скриншоты на девайсе от Sony, там порядок был BGRA. Возможно он таков на всех устройствах.

В цикле снимать скриншоты можно так:

while [ 1 ] ; do adb pull /dev/graphics/fb0 fb-`date +"%H-%M-%S"`.bgra ; sleep 1 ; done

Конвертация:

convert -size 480x854 -depth 8 fb-*.bgra screenshot-%05d.png

iOS: Invalid Image Path

Вот с такой “CFBundleIcons: AppIcon 120×120 not found” ошибкой столкнулся сегодня при попытке выгрузить новую версию игры в AppStore. Проблема была в “а возьму-ка я этот iconset-темплейт и с его помощью нагенерю иконки”. Темплейт хороший, умеет все нужные иконки. И даже на одну больше, чем мне нужно. Вот из-за нее и была проблема.

Решается просто. В Project navigator кликаем на ресурс Images.xcassets, выбираем AppIcon, удаляем иконку из слота CarPlay iOS 8 120pt. Все, проблема решена.

Android: завершение приложения

Для “завершения” приложения на Android я раньше делал finish() из Activity и exit() из NDK.
Это далеко не лучший, хотя и кардинально чистящий вариант.

После некоторых раздумий решил завершать apploop и дергать из Activity “хоум скрин”:

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(startMain);

iOS: определение версии ОС

Эти макросы позволяют без усилий и лишнего кода определять версию iOS:

#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)

#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)

Использовать можно так:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
    // iOS 7.0+ specific code
}

Этот способ лучше способа с float, поскольку с его помощью можно детектить и вот такой формат 6.1.3.

if([[[UIDevice currentDevice] systemVersion] floatValue] > 6.13)
{
    // iOS 6.13
}

Перезагрузка iOS-устройства

Если во время отладки зависнет “ай”-девайс и перестанет реагировать на любые внешние воздействия, то перерзагрузить устройство можно удерживая кнопки Home и Power.

Симптомы такие: черный экран, горит подсветка, девайс не реагирует на нажатия кнопок, но iTunes его видит. Xcode ругается “process launch failed: launch or suspend in progress”.

Сказ о том, как сильные магниты перевозили

Слышали, как ящик с магнитами в поезде везли? Ну, там одни в купе ящик с сильными магнитами везли, а другие тоже ящик, но с часами на продажу. И на руках часы еще у всех. Слава. Не Партии, Правительству, Президенту, т. е. Генеральному секретарю, лично и дорогому. А часы Слава, или Командирские, а может быть и простой Полет. Или приборы всякие, что магнитов боятся, несмотря на то, что дорогие очень. И все сразу в одном купе. Часы, конечно, встали у всех, приборы вышли из строя и т. д. Все знают байку? Мне, так, часто рассказывали.

На LOR прочитал сию забавную историю о перевозке сильных магнитов. Правда или нет, судить не мне.

Screen config

Мой новый конфиг screen. Ничего особенного, просто решил обновить.

Скриншот запущенного screen:
gnu screen

Собственно сам конфиг: ~/.screenrc

# Select whether you want to see the copyright notice during startup:
startup_message off

term screen-256color
terminfo rxvt-unicode 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

# Get rid of trailing spaces
defbce "on"

hardstatus alwayslastline "%{+b wk} %-w%{-b wk} %n %t %{-}%+w %41=%H @ %l %-= %= %D,%c:%s "

# Set the scrollback length:
#defscrollback 10000

Pixel Art в Linux

King's Valley objectsНовая игра, над которой уже неделю идет работа будет в old-school стиле. А для этого стиля хорошо подходит Pixel Art. До сего момента вся графика делалась в любимом мною GIMP. Но, стоит признаться самому себе, он для этого подходит не лучшим образом.

Поиск подходящих Pixel Art редакторов дал два проекта – Aseprite и GrafX2.

Aseprite Это редактор с открытым кодом, доступны бинарные сборки для Windows и OS X. Обе платные. Линуксоиды могут взять сорцы на GitHub и собрать редактор самостоятельно.

Мне для сборки Aseprite пришлось пропатчить несколько правил для сборки – оставляем libpng, giflib, pixman и libloadpng идущие в комплекте.

$ mkdir build ; cd build
$ cmake -DENABLE_UPDATER=off \
 -DUSE_SHARED_ALLEGRO4=on \
 -DUSE_SHARED_CURL=on \
 -DUSE_SHARED_JPEGLIB=on \
 -DUSE_SHARED_LIBLOADPNG=off \
 -DUSE_SHARED_LIBPNG=off \
 -DUSE_SHARED_TINYXML=on \
 -DUSE_SHARED_ZLIB=on \
 -DFULLSCREEN_PLATFORM=on  ..
$ make

После стрипаем бинарник (strip aseprite), дабы уменьшить его размер в 15 раз.

Далее кладем полученный бинарник вместе с директорией data в удобное место и пользуемся на здоровье.

Aseprite интуитивно-понятный, но у меня не умеет работать в полноэкранном режиме, размеры окна задаются в конфиге (не умеет налету менять разрешение), поддерживает одновременную работу с несколькими проектами, поддерживает слои и анимацию.

GrafX2 Расторовый графический редактор, создан под впечатлением от амиговских редакторов Deluxe Paint и Brilliance. Нацелен на создание 8-битной графики, включает большое количество инструментов и эффектов, подходящие для pixel-art, игровой графики. Редактор написан для Linux и Windows, но может быть портирован и на другие платформы (по заверению автора).

Умеет переключать разрешение окна налету, умеет полноэкранный режим. Менее интуитивен. Очень понравилась работа с палитрой цветов.

1 2 3 68