28 окт. 2011 г.

4 окт. 2011 г.

Стук

В. Цой

Струн провода, ток по рукам,
Телефон на все голоса говорит:
-"Пока-а!" Пора...
И пальто на гвозде, шарф в рукаве
И перчатки в карманах шепчут:
-"Подожди до утра!" До утра...

Но странный стук зовет: "В дорогу!"
Может сердца, а может стук в дверь.
И, когда я обернусь на пороге,
Я скажу одно лишь слово: "Верь!"

И опять на вокзал, и опять к поездам,
И опять проводник выдаст белье и чай,
И опять не усну, и опять сквозь грохот колес
Мне послышится слово: "Прощай!"

Но странный стук зовет: "В дорогу!"
Может сердца, а может стук в дверь.
И, когда я обернусь на пороге,
Я скажу одно лишь слово...

Declarative Internal DSLs in Lua: A Game Changing Experience

17 июн. 2011 г.

Тёплый салат с рисом

(Рабочее название)

Рецепт экспериментальный, ингредиенты кладу на глазок.

Выход: одна большая порция.

Рис:

Налить оливковое масло для жарки на разогретую широкую сковороду.
Высыпать три горсти риса.
Слегка обжарить.
Залить водой, так чтобы уровень воды был в два раза выше уровня риса.
Посолить, добавить специи по вкусу.
Накрыть крышкой и оставить в покое на медленном огне пока вся вода не испарится. Когда вода испарилась — рис готов.

Салат:

Пол-пакета шпината от Белой дачи выложить в тарелку.
Натереть пармезан.
Покрошить сыр Danish Blue
Покрошить половину солёного огурца среднего размера.
Залить заправкой (одна часть лимонного сока, три части оливкового масла первого отжима)
Перемешать.

Когда рис будет готов, выложить его поверх салата и разровнять так, чтобы салат внизу немного распарился. Рис и салат не перемешивать!

Сбрызнуть сверху оливковым маслом первого отжима.

К салату можно добавить мясо, например, буженину. Хорошо ещё покрошить зелёный лук и укроп. Лимонный сок можно заменить на мелко нарезанный лимон без цедры. Можно заменить шпинат на другую зелень, главное, чтобы её вкус не ухудшался от нагревания.

Ещё в салат хорошо класть свежий розмарин, острый перец.

5 июн. 2011 г.

Lua Alchemy v0.3

Зарелизил Lua Alchemy v0.3: http://bit.ly/mghgfb

18 апр. 2011 г.

luatexts 0.1.1

Выпустил luatexts 0.1.1: luabins-подобную библиотеку для Lua-friendly binary-safe текстовой сериализации.

В новой версии улучшена валидация UTF-8.

17 апр. 2011 г.

Новые релизы

Давно не писал об обновлениях в "моих" проектах с открытым исходным кодом (т.е. тех, где я — maintainer). Исправляюсь.

Обновления:
  • lua-alchemy v0.2.2 — собраны все фиксы за последние три года (включая пару новых).
Релизы:
  • lua-hiredis v0.1.1 — биндинги в Lua для клиентской библиотеки hiredis для NoSQL БД Redis.
  • lua-geoip v0.1.1 — биндинги в Lua для MaxMind GeoIP C API.
  • luatexts v0.1 — luabins-подобная библиотека для Lua-friendly binary-safe текстовой сериализации.
  • json2lua v0.3.2 — утилита командной строки для конверсии JSON в код конструктора таблицы Lua.
  • lua2json v0.1 — утилита командной строки для конверсии кода конструктора таблицы Lua в JSON.
  • lua-aplicado v0.0.1 — прикладная библиотека для Lua с кодом общего назначения.
  • lua-nucleo v0.0.2 — "основная" библиотека для Lua.
  • lua-inih v0.1 — биндинги в Lua для библиотеки работы с INI-файлами inih.

9 февр. 2011 г.

Новый дизайн

Сменил дизайн у блога. Новая цветовая схема менее напрягает глаза. Колонка с текстом теперь шире.

Пишите в комментариях, если что-то отображается не так.

Импорт JSON в Google Spreadsheets

В предыдущем посте я описал как пользоваться встроенной в Google Spreadsheets поддержкой импорта данных из XML (а также упомянул, что есть поддержка CSV, TSV, HTML, RSS и ATOM).

С JSON всё несколько хуже, но данные тоже вполне можно импортировать — просто придётся написать несколько строк кода.

Данные у меня такие:
  {
"result": {
"item": [
{
"id": 1,
"stime": 1291680000,
"value": 29699
},
{
"id": 2,
"stime": 1291690000,
"value": 30281
},
]
}
}
В данном случае мне не нужно было загружать данные через интернет, наоборот, пользователь должен получать этот JSON хитрым способом и вставлять этот его в таблицу руками.

Google Spreadsheets можно писать скрипты на JavaScript. Этим мы и воспользуемся чтобы их загрузить.

Создаём новую таблицу. Идём в меню Инструменты | Скрипты | Редактор скриптов.

Добавляем такой скрипт:
function convertJSON2Table() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var data = sheet.getRange(2, 1, 1, 1).getValue();
if (data == "")
{
sheet.getRange(
2, 1, 1, 1
).setValue(
"PASTE JSON DUMP HERE"
);
return;
}

var obj = Utilities.jsonParse(data);
if (!obj.result || !obj.result.item)
{
sheet.getRange(
1, 1, 1, 1
).setValue(
"BAD DATA FORMAT"
);
return;
}

sheet.clear();

obj = obj.result.item;

var col = 1
for (var k in obj[1])
{
sheet.getRange(1, col++).setValue(k)
}

var line = 2
for (var i in obj)
{
var entry = obj[i];
var col = 1;
for (var k in entry)
{
var val = entry[k];
if (k == "stime")
{
val = new Date(val * 1000);
}
sheet.getRange(
line, col++
).setValue(val);
}
++line;
}
}
Вставляем данные в ячейку A2 первого листа.

Выбираем в меню Инструменты | Скрипты | Управление. Выбираем "convertJSON2Table", жмём Run.

Вуаля, наш JSON превратился в табличные данные.

У меня не было много времени для того, чтобы возиться со скриптом и делать всё красиво. Так что в реализации присутствуют некрасивые хаки (тот же способ ввода данных, например) — но она, по крайней мере, работает.

Импорт XML, CSV, TSV, HTML в Google Spreadsheets

Оказывается, в Google Spreadsheets очень легко можно импортировать данные в XML , которые лежат где-нибудь в интернете. Для этого нужно вставить в ячейку вот такую формулу (разбита на несколько строк для читаемости):


=ImportXML(
"http://example.com/data.xml";
"/table/tr"
)

Первый аргумент — URL, второй аргумент — путь XPath к данным.

Пример данных для приведённой выше формулы:


<?xml version="1.0" encoding="UTF-8"?>
<table>
<tr><td>14.10.2010</td><td>504</td></tr>
<tr><td>15.10.2010</td><td>505</td></tr>
</table>

Также поддерживается импорт CSV, TSV, HTML, RSS и ATOM.

1 янв. 2011 г.

С Новым годом!

Друзья, с Новым годом!

Прошедший год был сложный, но интересный. Прошёл он, кажется, не зря.

Пусть Новый год будет ещё лучше!

Этот блог я не забросил, но теперь пишу сюда только если есть время и желание написать больше пары строк. В Новом году вы можете найти мои посты в твиттере @agladysh и в Фейсбуке: agladysh. Надеюсь, что и для Хабра (agladysh) удастся написать пару-тройку статей. Интересного материала полно — а вот времени, увы, как всегда мало.