22 дек. 2008 г.

Lua Alchemy v0.1

Мы с партнёром по проекту Робертом Штевином (Robert Stehwien) выкатили релиз Lua Alchemy 0.1:

http://code.google.com/p/lua-alchemy

Демо лежит здесь.

Lua Alchemy — это порт языка Lua во Flash при помощи Adobe Alchemy (компилятора C/C++ во флешовый байт-код).

Главная фича — обеспечение тесного взаимодействия между Lua и ActionScript.

Маленький пример (код на Lua):



local alertClass = as3.class("mx.controls::Alert")
local vbox = as3.new("mx.containers::VBox")
local label = as3.new("mx.controls::Label")
local input = as3.new("mx.controls::TextInput")
local button = as3.new("mx.controls::Button")

as3.set(label, "text", "Name:")

as3.set(button, "label", "Say Hello");
as3.call(button, "addEventListener", "click",
function (e)
as3.call(alertClass, "show", "Hello " .. as3.get(input, "text"), as3.type(e))
end, false, 0, true)

as3.call(vbox, "addChild", label)
as3.call(vbox, "addChild", input)
as3.call(vbox, "addChild", button)

as3.call(canvas, "addChild", vbox)

В ближайших планах реализация синтаксического сахара:

local alertClass = as3.class("mx.controls::Alert")
local vbox = as3.new("mx.containers::VBox")
local label = as3.new("mx.controls::Label")
local input = as3.new("mx.controls::TextInput")
local button = as3.new("mx.controls::Button")

label.text = "Name:"
button.label = "Say Hello"

button:addEventListener("click",
function (e)
alertClass:show("Hello " .. input.text, as3.type(e))
end, false, 0, true)

vbox:addChild(label)
vbox:addChild(input)
vbox:addChild(button)

canvas:addChild(vbox)
Код остальных примеров можно посмотреть здесь.

26 нояб. 2008 г.

15 нояб. 2008 г.

19 окт. 2008 г.

Protected metatables

If you set a __metatable field in the metatable, getmetatable will return the value of this field, whereas setmetatable will raise an error.

Roberto Ierusalimschy, Programming in Lua 1st edition, 13.3 - Library-Defined Metamethods


> mt = { __metatable = true }
> t = {}
> setmetatable(t, mt)
> setmetatable(t, mt)
stdin:1: cannot change a protected metatable
stack traceback:
[C]: in function 'setmetatable'
stdin:1: in main chunk
[C]: ?

15 окт. 2008 г.

Вещизм

Новый макбук — мечта!

10 окт. 2008 г.

23 сент. 2008 г.

Три новые линзы от Lensbabies

Photokina продолжает радовать приятными новинками.

Хочу себе Lensbaby Composer с полным набором оптики... Оригинальная 3G для меня всё-таки сложновата — заставляет каждый раз проделывать слишком долгий путь от подсознания к кадру.

21 сент. 2008 г.

Canon EOS 5D Mark II

Осторожно. Читать только, если есть лишние 2700 $ (в России, понятно, ещё больше). Здесь.

P.S. Читаем комменты по ссылке выше. Смотрим примеры видео здесь.

P.P.S. ААА!!!

P.P.P.S. То самое видео выложили вместе с кратким видео о том, как его делали.

Страсти по шеллу

Задача: есть два файла с экспортированными из базы таблицами (база — dbf, из-под мака работать не удобно). Нужно получить выборку со слиянием двух таблиц по заданной колонке.

1. Сортируем оба файла:
$ cat file.ext | sort -t $'\t' -k2,2 >file.sorted.ext
Здесь мы отсортировали файл с колонками, разделёнными табуляцией по второму столбцу. Сортировать оба файла надо по столбцу, в котором находится ключ.

Особенности:

1.1. Чтобы передать из bash'а в командной строке табуляцию, нужно использовать экранирование по стандарту ANSI C: [CTRL+V][TAB].

1.2. Sort не работает с юникодом, если LC_LOCALE не C. Проверяем так:
$ locale
LANG="ru_RU.UTF-8"
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL="C"
Если нужно делаем
$ export LC_COLLATE=C
Замечаем, что less не выводит русские буквы если LC_* не русские.

2. Объединяем данные:
$ join -t $'\t' -o 1.1,2.2 -1 2 -2 1 file1.ext file2.ext >join.ext
Здесь мы выводим объединённые данные для двух файлов со столбцами, разделёнными табуляцией. Выводим первый столбец из первого файла и второй из второго. Ведём слияние по второму столбцу первого файла и первому столбцу второго (там должны быть одинаковые данные).

Замечаем, что:

2.1. Join НЕ работает если ключевая колонка не отсортирована (или отсортирована в обратном порядке) хотя бы в одном файле.

12 сент. 2008 г.

До чего техника дошла!

Дожили! Консоль теперь уже и в вебдванольные приложения встраивают. Попробуйте нажать тильду (~) в окне RSS-читалки beta.bloglines.com. Особенно интересно, что делает команда zombie.

(Хотел написать «фидочиталки», но нет, Фидо она-таки не читает.)

Кстати, Bloglines — отличный сервис. Рекомендую.

18 июл. 2008 г.

Lua: Динамический список возвращаемых значений без создания таблицы

Задача
print(
tvalues(
{ a = 1, b = 2, c = 3 },
"a", "b", "xxx", "c", "yyy"
)
)
--> 1 2 nil 3 nil

Типичное решение требует создания таблицы:
function tvalues(t, ...)
local n, r = select("#", ...), { }
for i = 1, n do
t[i] = t[select(i, ...)]
end
return unpack(r, 1, n)
end

Shmuel Zeigerman посоветовал использовать следующий рекурсивный подход:
function tvalues(t, ...)
local key = (...)
if key ~= nil then
return t[key], tvalues(t, select(2, ...))
end
return nil
end

24 мая 2008 г.

ОО

Анонс. Передача Виртуалити, выпуск 11, часть 2. 29.08.2007

Видео здесь (1:32 -- 2:10):

http://games-tv.ru/v/397

20 мая 2008 г.

out-35-10-all.txt

Typifying crackled tenacious colossal avenues.
Manhandling wobbled, poisonous.
Sledding crewing balloons.
Idyllic!

13 мая 2008 г.

Экспорт списка контактов из Adium'а на AppleScript'е

Странная всё-таки штука этот AppleScript...

tell application "Adium"
set fileName to choose file name default name "AdiumContacts.txt"
set fileHandler to open for access fileName with write permission
try
set allContacts to every contact
repeat with oneContact in allContacts
write ?
"\"" & (title of account of oneContact as text) & "\", " & ?
"\"" & (title of oneContact as text) & "\", " & ?
"\"" & (display name of oneContact as text) & "\", " & ?
"
" to fileHandler
end repeat
on error errStr number errorNumber
close access fileHandler
error errStr number errorNumber
end try
close access fileHandler
end tell