• 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

    Небольшой вьювер изображений использующий OpenGL. Пользуюсь этим вьювером в повседневной работе для быстрого просмотра списка изображений, определения параметров области, которую занимает спрайт на текстуре. Поддерживаемые форматы: PSD (первые 4 цветовых

    Read more »
  • Rubik's Stopwatch

    Rubik’s cube Stop-watch

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

    Read more »

GLSL: Clock style bar

Написал GLES шейдер, который имитирует круговое заполнение энергии (прогресса, маны, etc.). Код шейдера и демонстрация работы доступна на сайте ShaderToy – https://www.shadertoy.com/view/XlsGzf

Время в миллисекундах

Возвращает использование времени в миллисекундах для вызвавшего процесса и всех его нитей:

#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>

int getCpuTime()
{
  struct rusage rus;
  getrusage(0, &rus);
  return rus.ru_utime.tv_sec * 1000 + rus.ru_utime.tv_usec / 1000;
}

Подробности в man getrusage.

Boot Demo

Boot Demo Нашел у себя в файлопомойке свою первую демку для x86 от 1997 года. Помню, что эта демка была написана вначале на Си и на i386 SX она жестоко тормозила. Тогда я переписал ее на ассемблере (это был мой первый опыт программирования на ассемблере для x86). И она шустро работала на всем том говне, которое можно было найти в то время.

С помощью утилиты Demoinst (автор Алексей Шаблюк) демка записывалась в свободные сектора на HDD и устанавливался бут, который ее запускал. После включения и инициализации компьютера запускалась эта демка, а по нажатию на любой клавиши запускался оригинальный загрузчик. Тогда это казалось прикольно :)

Запустить демку удалось только под DosBox. При запуске в DosEmu эмулятор крешится (Fault out of DOSEMU code, cs:eip=33:4a5563, cr2=11cf, fault_cnt=1). В демке нет поддержки v-sync, поэтому она в эмуляторе мерцает.

p.s. Сейчас для меня кажется странным, что такое простое приложение на Си могло быть таким тормозным. Вероятно мой Си-кунг-фу был низкого уровня.

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”.

1 2 3 69