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) удастся написать пару-тройку статей. Интересного материала полно — а вот времени, увы, как всегда мало.

9 сент. 2010 г.

Грузинские хачапури

Пока не забыл как готовил, записываю, чтобы потом воспроизвести.

Основывался на двух рецептах:


Выход: четыре лепёшки.

Ингредиенты для начинки:
  • Сыр твёрдый (Литовский пармезан, варианты см. в источниках), ~150 грамм (пол-куска)
  • Сыр мягкий (Сулугуни, варианты см. в источниках), ~150 грамм
  • Два небольших яйца
  • Пряности (я использовал итальянские травы, свежемолотый перец, перед заправкой положил свежий укроп; зависит от сыров — если пресные, можно подсыпать для вкуса; задумываюсь а не положить ли в следующий раз немного чили)
  • Соль по вкусу (сложно понять не попробовав первый хачапури — если сыры не очень солёные, солите!)
По поводу количества сыра меня терзают сомнения. В источниках указаны гораздо большие веса — но у меня получилось начинки вполне достаточно. Лепёшки так же плотно начинены, как те, что я ел раньше.

В любом случае, сыр брал на глаз. Натёр большую советскую суповую тарелку с горкой.

Ингредиенты для теста:
  • Стакан кефира (кефир я не гасил, если вы нормально относитесь к соде, наверное, стоит, см. источники — но и с негашённым вкусно)
  • Два небольших яйца
  • Три стакана муки
  • Столовая ложка душистого оливкового масла (животного жира не было под рукой)
  • Щепотка мелкой соли
Приготовление начинки:
  1. Натереть сыр (пармезан на мелкой, сулугуни на крупной тёрке, другие варианты в источниках)
  2. Вбить яйца (я вбивал не прямо в начинку, а заранее слегка взбалтывал отдельно)
  3. Посолить, приправить
  4. Хорошо перемешать
  5. Поставить в холодильник доходить (минимум на час)
Приготовление теста:
  1. Вылить кефир в кастрюлю
  2. Вбить яйца
  3. Посолить
  4. Добавить оливковое масло
  5. Всё размешать до однородной консистенции
  6. Добавлять постепенно муку, постоянно размешивая. Тесто должно получиться нежное, мягкое и липкое (но держащее форму).
  7. Тесту обязательно дать постоять хотя бы час! Если начать готовить сразу, оно будет рваться. Лучше всего дать постоять в холодильнике сутки — разница во вкусе действительно чувствуется (в лучшую сторону).
Собственно сборка лепёшки:
  1. Тесто липкое! Насыпьте в мисочку муки и постоянно макайте в неё пальцы.
  2. Возьмите четверть теста, скатайте руками в шар, положите на ровную, присыпанную мукой поверхность.
  3. Раскатайте скалкой примерно до размера сковороды. (Если тесто получается очень тонким — у вас очень большая сковорода, смените её!)
  4. Положите в центр начинку, разровняйте её примерно до половины диаметра лепёшки.
  5. Сейчас — самое время добавить в хачапури мелконарезанную свежую зелень (по желанию). Я не стал класть её в начинку, чтобы она лучше хранилась.
  6. Заверните края лепёшки к центру, полностью закрыв начинку. Защипните тесто, чтобы оно не раскрывалось.
  7. Убедитесь, что на столе у вас достаточно муки — если сейчас тесто порвётся, будет обидно.
  8. Аккуратно раскатайте закрытую лепёшку с начинкой до размеров сковороды.
  9. Если тесто всё-таки порвалось, сложите лепёшку в четыре раза и раскатайте снова. Получится слоёный хачапури — чуть менее вкусно, но с дыркой жарить нельзя, всё вытечет.
Готовка:
  1. Хорошо разогрейте сковороду.
  2. Налейте на неё оливковое масло для жарки (у меня не было животного жира под рукой). Масло тоже должно хорошо нагреться .
  3. Готовьте на среднем огне.
  4. Приготовьте тарелку, на которую выложите готовую лепёшку. Жарка проходит быстро и взять её потом вы не успеете. Если будете готовить несколько лепёшек сразу и класть их одну на одну, верх каждой готовой лепёшки нужно смазать маслом — чтобы не слиплись. Тарелку можно подогреть, чтобы хачапури не запотевал и остывал медленнее — но это для эстетов.
  5. Положите лепёшку на сковороду. Осторожно! Масло будет брызгаться!
  6. Не накрывайте крышкой.
  7. Возьмите в руку лопатку и не выпускайте её.
  8. Стойте над хачапури и посматривайте на его нижнюю сторону (можно аккуратно приподнимать лопаткой). Как только она слегка подрумянится, переворачивайте! Осторожно, масло! На лепёшке должны остаться светлые места. Если она вся румяная, вы пережарили. (Одна сторона жарится примерно две с половиной минуты, но ориентируйтесь на интуицию.)
  9. Поджарив до лёгкой румяности вторую сторону, снимите хачапури на тарелку.
  10. Хачапури нужно съесть сразу, пока он горячий! Если вы готовите два хачапури сразу (на двоих), задумайтесь о том, чтобы делать это одновременно на двух сковородах — так никому не придётся есть холодное. Но в первый раз, думаю, так не стоит делать.
Приятного аппетита!

P.S. Некоторые мысли:
  • С укропом я переборщил. Вообще, вместо укропа должна отлично пойти кинза!
  • Нужен более пикантный сыр. Начинка получилась немного пресноватой. (Но всё равно — вкусно, особенно после того, как я добавил приправ! Просто с правильным сыром будет взрыв мозга.)
  • Ни в коем случае нельзя брать "химическую" брынзу / фетаки, которой забиты магазины. То же относится и к кефиру. Берите максимально натуральные продукты. "Химические" ингридиенты не выдерживают нагрева и получается кислая гадость.
  • Оставшееся тесто обязательно присыпайте мукой — а то засохнет, даже в холодильнике! Обращайте внимание на место, от которого была отрезана очередная порция.
P.P.S. Результаты экспериментов:
  • Пробовал с чили — интересно, но забивает послевкусие.
  • Пробовал с кинзой — понравилось.
  • Для придания пикантности добавил оказавшийся неудачным недавно купленный сыр с плесенью. Вкусно но дороговато.

24 авг. 2010 г.

Розовый слон

Fleur


Зачем мне розовый слон?
Уверена, знаю вполне,
Объективно c любых сторон,
Абсолютно не нужен мне.
Но он ходит за мной всё время,
И уже надоел мне страшно.
Ведь люблю я других зверей,
Чёрных и камуфляжных.

Ни к чему мне розовый слон,
Но жалко его прогнать.
И к тому, что всегда мы вдвоём
Стала я привыкать.
Уже беспокоюсь о нём,
Он со мной на каждом шагу.
В жизнь мою влился розовый слон,
Я уже без него не могу.

Каждый должен об этом знать,
Так устроена жизнь.
Если хочешь что-нибудь потерять - привяжись.
И как только поверишь в Эдем, благодать
Всё разрушит удар судьбы.
Если хочешь что-нибудь потерять - полюби.

И как только стал нужен мне он,
Неотъемлем, необходим, почему-то стал розовый слон
Замкнут и нелюдим.
Не стремится розовый слон
Быть со мной каждую минуту,
Как-то странно он отстранён, избегает меня почему-то.
Для меня это страшная драма - его нет со мной целый миг.
Тут приходит мне телеграмма,
Слон нашёл хозяев других.
Как же мне это всё пережить,
Я умру, я сойду с ума.
Как вернуть мне или как забыть розового слона?

Каждый должен об этом знать,
Так устроена жизнь.
Если хочешь что-нибудь потерять - привяжись.
И как только поверишь в Эдем, благодать
Всё разрушит удар судьбы.
Если хочешь что-нибудь потерять - полюби.

Чтоб не плакать и не скорбить,
И любых избежать потерь,
Никогда никого не люби,
Никогда никому не верь.
Но сама я так вряд ли смогу,
Скоро новая будет весна,
И опять я себе найду какого-нибудь слона.

Каждый должен об этом знать,
Так устроена жизнь.
Если хочешь что-нибудь потерять - привяжись.
И как только поверишь в Эдем, благодать
Всё разрушит удар судьбы.
Если хочешь что-нибудь потерять - полюби.

19 авг. 2010 г.

В восьмой раз

Город
В. Цой

Я смотрю в календарь, я знаю, что скоро зима.
Наша улица на глазах меняет цвета.
За решеткой желтой листвы я вижу птиц.
Моя двадцатая осень сводит меня с ума.

Я люблю этот город,
Но зима здесь слишком длинна.
Я люблю этот город,
Но зима здесь слишком темна.
Я люблю этот город,
Но так страшно здесь быть одному,
И за красивыми узорами льда
Мертва чистота окна.

Фонари за окном горят почти целый день.
В это время я не верю глазам, я верю часам.
И теперь я занят только охраной тепла.
Вот ушел еще год - сколько останется нам?

Я люблю этот город,
Но зима здесь слишком длинна.
Я люблю этот город,
Но зима здесь слишком темна.
Я люблю этот город,
Но так страшно здесь быть одному,
И за красивыми узорами льда
Мертва чистота окна.