Процессор J1 — куда уж проще

Осторожно — эта статья не содержит и теоретической, ни практической пользы, и была написана просто, как подведение черты под одним из увлечений.

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

Для тех, кто не слышал никогда о J1 — это простенький процессор,
ориентированный на язык Форт. Для любителей подробностей — официальный сайт J1 CPU.

Так вот, я с гордостью могу сказать, что я маялся бездельем и тем временем написал эмулятор + компилятор почти-Форта для J1. Здесь я расскажу что это и зачем. Читать далее

Реклама

adk-libusb = adk+libusb

Сделал вот крохотную библиотечку. Любителям андроида и железок должно понравится.

Если вы еще не слышали про ADK (Android Open Accessory Development Kit), то есть неплохая презентация с прошлогоднего Google IO 2011. Там бравые дяди в юбках и очках рассказывают и показывают что это и зачем этот ADK нужен. Читать далее

Android+SDL: Будь мужиком, пиши на C!

Я люблю C.
Я любою джаву не меньше, но это совсем не то чувство первой любви, которое я испытываю к C.

Я никогда не работал с SDL, но мне кажется, что он очень удобен для написания игр. По крайней мере я бы купился на его кросс-платформенность. Тем более, что теперь в списке его платформ еще и Android. Читать далее

Lua за 60 минут

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

Lua? Что это?

Lua — простой встраиваемый язык (его можно интегрировать с вашими программами, написанными на других языках), легкий и понятный, с одним типом данных, с однообразным синтаксисом. Идеальный язык для изучения.

Зачем?

Lua может вам пригодится:

* если вы геймер (плагины для World of Warcraft и множества других игр)
* если вы пишете игры (очень часто в играх движок пишут на C/C++, а AI — на Lua)
* если вы системный программист (на Lua можно писать плагины для nmap, wireshark, nginx и других утилит)
* если вы embedded-разработчик (Lua очень быстрый, компактный и требует очень мало ресурсов) Читать далее

tip-топ. Или не тип-топ?

Недавно узнал, что у сайта http://golang.org есть особенная версия — http://tip.golang.org

Там находится всякая документация относительно последней версии (tip, по-старинке — head: последний коммит) языка из репозитория.

Вот, например, когда я последний раз его обновлял, я удивился, что там больше нет Makefile (помните — еще недавно мы их учились писать). Теперь все возложили на утилиту go. И сборку, и установку, и тестирование, и форматирование кода. Читать далее

Go 1

Слышали, да? Это стучат клавиатуры и щелкают мыши. Там пишут Go 1.

Это будет первая стабильная база языка Go. API зачерствеет и не будет меняться каждый месяц. Язык станет совсем взрослым и серьезным.

Появятся нумерация версий языка — напр., в Go 1.x будут включаться багфиксы для Go 1.

Итак, что же нового принесет язык? Читать далее

addr2line, или Мне стыдно

Статья будет очень короткой.
Я столько лет писал и отлаживал, но даже и не знал о таком инструменте. А штука полезная, если неохота лезть в gdb.

Пишем глючную программу

Вот пример нерабочей программы:

void f() {
	int *p = 0x12345; /* Invalid address */
	*p = 5;
}

int main() {
	f();
	return 0;
}

Ошибка, естественно в 3-й строке. Но допустим мы ее не заметили. Соберем отладочный и релизный бинарники, например таким Makefile:

all: debug release

debug:
	gcc main.c -g -o main.debug

release:
	gcc main.c -o main.release
	strip main.release

Ааа! У меня ничего не работает!

Пользователь говорит, что ваша программа падает с загадочным segmentation fault. Но мы не боимся, и наша логика теперь простая.

Во-первых, смотрим вывод dmesg:

$ ./main.release
zsh: segmentation fault  ./main.release
$ dmesg | tail
....
[90461.350925] main.release[21028]: segfault at 12345 ip 00000000004004f4 sp 00007fffe640ce10 error 6 in main.release[400000+1000]

Вот мы узнали адрес, на котором произошел вылет — 0x00000000004004f4

И тут на арену выходит addr2line, которая по этому адресу и дебажному бинарнику говорит нам где ошибка:

$ addr2line -e main.debug 0x00000000004004f4                                                                                                          
/tmp/addr/main.c:3

Вот и все. Исправляем ошибку в третей строчке в файле main.c. Круто, правда?