Pull to refresh
104
0
Максим Васильев @qmax

Инженер

Send message

Формула белогривых лошадок: perlin noise в картинках

Reading time3 min
Views17K


Наверняка всякий, кто встречался с «перлиновым шумом» (perlin noise), пробовал генерить текстуру облаков.
Потомучто оно само напрашивается.

О шуме Перлина на хабре уже была статья, но в ней очень мало картинок.

мегабайты монохромных картинок под катом!

Скрипт: монтирование vdi виртуалок на Dom0 в XenServer 6

Reading time1 min
Views2.8K
Время от времени возникает необходимость залезть в файловую систему виртуалки извне самой виртуалки.
Например, пофиксить рухнувшую систему, или залить содержимое из другого источника.

Наиболее универсальный, независящий от способа хранения, метод доступа к ним — это подмонтировать их в виртуалке управляющего домена Dom0.
Вероятно, это можно сделать и из другого домена, если каким-то образом засунуть туда xapi утилиты.
Но я не знаю как.

В общем, алгоритм подключения такой:
1. узнать uuid нужного vdi (с помощью xe vdi-list)
2. создать vbd-устройстко с воткнутым в него этим vdi (xe vbd-create)
3. подключить это усртройство к Dom0-VM (xe vbd-plug)
4. узнать имя блочного устройства, которое получило это vbd (xe vbd-list)
5. делать с ним что угодно средствами операционки. (mount, fdisk, etc)
6. отключить vbd устройство от Dom0 (xe vbd-unplug)
7. удалить vbd (xe vbd-destroy)

Для автоматизации всего этого процесса и исключения необходимости копипаста UUIDов я нарисовал небольшой скриптец: serial-experiments-qmax.googlecode.com/svn/xenserver/vdiutil
Читать дальше →

Визуализация модели данных

Reading time1 min
Views3.9K
Для django есть хорошая утилитка, которая анализирует описание модели данных и рисует её графическое представление в dot-формате graphviz.
Сегодня переписал эту утилитку под appengine.

image

Утилита распознаёт Expando (добавляет многоточие в список атрибутов),
наследование от PolyModel (рисует стрелки наследования),
а также ссылочные свойства (в том числе самодельные, типа ManyToManyProperty).

Как пользоваться:
  1. засунуть скрипт в каталог с sdk
  2. запустить её из корневого каталога приложения, указав аргументами список модулей для анализа (в формате имён дя import):
    python path/to/modelviz.py models.foo models.bar > models.dot
  3. сконвертить полученный dot-файл во что-нибудь более удобное, например, в png:
    dot models.dot -Tpng > models.png
  4. наслаждаться неземной красотой

Полезные мелочи: перекодировка неправильной раскладки

Reading time2 min
Views8.4K
Часто случается, что текст набран в неправильной раскладке.
Владение методом слепого набора, конечно, существенно уменьшает эту вероятность, но казусы всё равно случаются.
Особенно обидно, если текст довольно большой и перенабирать лень.

Способ автоматически перенабирать текст.

мои первые игрушки: волновой гаджет «Meeting Time Matcher»

Reading time2 min
Views472
Собираться группами по трое и больше — обычная практика для людей.
Иногда можно созвониться и договориться о месте и времени встречи, иногда можно объявить о встрече у себя в блоге.
Однако, ситуация может заметно осложниться, если вы собираете не тусовку на свой день рождения в родной деревне, а онлайновую встречу с участниками из разных концов света и, как следствие, в разных часовых поясах, которых только в России 11. Так, что когда у вас среда, у кого-то может быть уже четверг, и выбрать оптимальное время для встречи может оказаться нетривиально

Сделанный мной гаджет предназначается какраз для таких ситуаций.
  • организатор вставляет в объявление гаджет и обозначает даты, когда предполагается встреча;
  • участники отмечают в табличке время, когда они в эти дни свободны, и их выбор запоминается;
  • гаджет показывает, сколько участников могут быть в онлайне для каждого интервала времени;
  • все участники видят табличку в своём родном часовом поясе, но при желании могут переключиться на чужой, посмотреть «сколько это у него времени будет»;

image
Посмотреть в действии можно в этой волне
URL гаджета для вставки в волны кнопкой «install gadget by URL» есть во вкладке «help».
А в отдельной волне есть инсталятор с удобной кнопкой, чтоб не париться с URLами.

подробности разработки

Использование ГуглоГрупп для ограничения доступа к волнам

Reading time2 min
Views779
Вольный и немного дополненный перевод из Groups: The Google Groups Solution (Elliot Cable et al)
Это до сих пор не упоминается нигде в публичных волнах или документах, и, наверное самое время обозначить этот момент. Особенно с учётом уязвимости публичных волн.
Сервер ГуглоВолны имеет поддержку групп и минимальные средства ограничения доступа на их основе.Они просто забыли нам об этом сказать.
Реализовано это с помощью уже существующего сервиса — Google Groups.
В будущем, волны будут иметь свои собственные средства управления доступом, но пока это единственно доступное временное решение.
Читать дальше →

перевод Best Practices for Architecting GWT App

Reading time1 min
Views1.2K
Группа HabraTranslation
взялась за перевод презентации
(Google I/O 2009) Best Practices for Architecting GWT App.

Приглашаю присоединиться желающих, знакомых с спецификой Java, Web-разработок и слэнгом программистов.

IO-2009: Google Wave: Under the Hood теперь по-русски

Reading time1 min
Views708
В видео презентации добавлен русский перевод субтитров.

(если русские субтитры не выбрались автоматически, это можно сделать крайней правой кнопкой на панели плэера в подменю «cc», но уже после начала проигрывания)

Перевод совершался совместными усилиями команды HabraTranslation:
hellt, ruguevara, Wit, qmax, djvu, Helpa, Вадим Барсуков, nashev
Им помогали: Марина Оганян, Юлия Папелис, delorfin, GigaByTe26

Отдельное спасибо ruguevara и сервису translated.by.

контакты из вконтакта

Reading time1 min
Views4.9K
Случилось мне недавно потерять телефон. Вместе с телефонной книгой.
И бэкапов, по закону подлости, не было.

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

Всё, что осталось сделать — это научить файрфокс забирать эту телефонную книгу и сохранять их в потребный для загрузки в мобилу формат.
Что я и сделал, написав greasemonkey скрипт IzKontakta.
Он сохраняет контакты ваших друзей в формате vCard, который можно загрузить в телефон.

Теперь я снова в контакте.

Upd.
возможно расширение функционала скрипта в формате расширения/аддона к файрфоксу.
предложения уже обсуждаются в комментах

средства для совместного он-лайн перевода

Reading time5 min
Views7.3K
Disclamer: Это незавершённая статья о средствах для совместной работы. Вы можете помочь сообществу, исправив и дополнив её :)
(статья публикуется для аггрегации мнений и опыта онлайн перевода)

В целом, при совместном переводе актуальны следующие моменты:
  • формат представления: разбивка текста на отдельные блоки — предолжеиня/параграфы
  • средства редактирования и импорта/експорта, возможность альтернативных переводов
  • доступ к словарю, автоматическому переводу
  • координация совместной деятельности
  • контроль состояния процесса:
    • обозначение статуса каждого переведённого блока (подстрочный перевод, литературизированный, спорный момент, окончательный вариант, итп)
    • индикатор завершённости
    • история изменений
  • предоставление доступа

По этим пунктам, ИМХО, и стоит рассматривать доступные средства.
Читать дальше →

русский перевод презентации Google Wave

Reading time1 min
Views1.4K
Завершён перевод на русский субтитров к Google Wave Developer Preview.
Перевод доступен формате srt.
(в субтитрах много нахлёстов, которые не все плэеры умеют корректно отображать. mplayer показывает их с опцией -overlapsub).

Upd: Субтитры добавлены в основной ролик на ютюбе.
Субтитры можно выбрать в списке доступных языков крайней кнопочкой панельки управления плэера.

Перевод осуществлён совместными усилиями команды HabraTranslation:
qmax, tom, nc00x, Voidus, sfunx, @P_r_i_m_a_t, Nashev, djvu, hellt, david_mz, (а также поприветствуем новых хабраюзеров: ) stok_man, terre, Moran, karlicos, cr_az, andrew.shyn.

Также выражаем благодарность ArMikael и DileSoft за привлечение ресурсов.
И разработчикам Google Docs за средства совместной работы, которыми вы воспользовались :)

P.S.
Неактуальные ссылки:
посмотреть на overstream
ролик со встроенными субтитрами на рутюбе

Перевод на русский презентации Google Wave Developer Preview на Google IO 2009

Reading time2 min
Views2.4K
На конференции Google IO, состоявшейся в конце мая 2009,
Гугл презентовал революционную технологию Google Waves.
Это одна из немногих и самая первая презентация технологии.
Но презентация, как и другие материалы, доступны толко на английском.
(Upd: перевод статьи Тима О'Рейли)
Многие в IT сфере хорошо владеют английским, но далеко не у всех есть практика восприятия живой речи.

В связи с этим предлагаю совместными усилиями сделать перевод текста этого выступления.

Upd: При хорошем раскладе, можно будет сделать субтитры и предложить их гуглу, или самим залить на ютюб.

Целей у затеи можно усмотреть несколько:
  1. Дать возможность более полно ознакомиться с презентацией тем, кто плохо воспринимает английский на слух, или же вовсе не понимает его.
  2. Попрактиковаться в аудировании и переводе с английского.
  3. Поиграть с уже существующими средствами совместной работы, предоставляемыми Гуглом в виде GoogleDocs (Upd: и google groups)
  4. ?????
  5. just fun

детали реализации

стерео-тетрис

Reading time1 min
Views1.1K
Технология SIRDS (Single Image Random Dot Stereograms) — это способ создания изображений, которые выглядят рельефными при разглядывании с фокусированием взгляда за плоскостью изображения.
Тысячи их можно найти в сети.
Можно даже найти анимированные.

Так вот, а это — стереотетрис.

P.S.
возможно, будет проще, если поставить монитор поближе.
P.P.S.
и мышку отодвинуть.

P.S. 2
zlogic нашёл ещё и sird-версию quake.
но это уже полный фейерверк! :)

4ёх-мерные игры

Reading time4 min
Views22K
В топике о десятимерном пространстве, помимо идей об употреблении веществ и всяких астральных проекциях, высказывались идеи о четырёхмерной игре, чтобы «посмотреть, как это выглядит».
Тут имеется ввиду 4 пространственных измерения.
Фокусы с ветвлением и наложением во времени есть в играх типа Chronotron и аналогичных.
обзор существующих игр и соображения по реализации

генерация читабельной абракадабры

Reading time6 min
Views3.4K
На просторах интернета можно найти сервисы для генерации бессмысленных текстов, известных также как «Lorem Ipsum».
Обычно они используются в качестве «рыбы» для заполнения всяких макетов дизайна.
Как вариант — можно использовать их в качестве текстов для клавиатурных тренажёров.

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

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

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


На мой вкус, это гораздо веселее.

Идея довольно проста — она заключается в том, чтобы генерировать текст по буквам, с учётом их сочетаемости в русском языке.
Читать дальше →

Prett Parsing — метод Вогана Пратта для разбора выражений

Reading time3 min
Views5.6K
В тему компиляций и вычислений выражений.

В далёком 1973 году Воган Прэтт (Vaughan Pratt) предложил простой и эффективный метод разбора выражений, не использующий ни автоматы, ни грамматику как таковую.

Идея заключается в том, что каждый символ (token) наделяется свойствами:
lbp = приоритет связывания символа слева,
nud = функция, определяющая результат применения оператора в начале выражения,
led = функция, определяющая результат применения в середине выражения.

Основной разбор осуществляется по схеме:
разбор(приоритет продолжения):
    вытолкнуть символ из входного потока
    результат = вызов nud этого символа
    пока приоритет lbp следующего в потоке символа > приоритета продолжения:
        вытолкнуть символ из входного потока
        результат = применени led этого символа к текущему результату

Константы и переменные имеют приоритет связывания 0, а функция nud возвращает их значение (или ссылку). Поэтому применение разбора к константам сразу возратит их значение.
Для бинарных операторов функция led рекурсивно вызывает продолжение разбора (справа) вплоть до более низкого приоритета, и делает что-нибудь с уже накопленым (слева) результатом, и полученным рекурсивно.
Результат применения оператора аггрегируется для внешнего вызова.
Много-арные операторы — получают аргументы дополнительным вызовом функции разбора.
Префиксные операторы делаются с помощью определения для них функции nud.
Для правостороннего связывания меняется приоритет продолжения рекурсивного разбора.

На сайте effbot.org приводится подробная реализация на питоне.
Там же есть ссылки для жаваскрипта и схемы.
наглядный пример на питоне

континуации и stateful веб-программирование (Updated!)

Reading time5 min
Views2.7K
Идея совсем не нова. Идея древна.
Однако большинство наблюдаемых вокруг веб-фреймворков упорно игнорируют эту идею.

Она заключается в том, чтобы использовать континуации (continuations) для магического превращения RESTful (stateless) веб-приложений в более удобный и привычный stateful формат.
Читать дальше →

Кабельное хозяйство

Reading time4 min
Views11K
По индукции на статью arxontа.

Хотелось бы поделиться опытом учёта сетевых и телефонных кабелей и способам их маркировки (обозначений). Выслушать по этому поводу критику и поинтересоваться, как к этими задачам подходят другие сисадмины.

Опишу правила, которых мы придерживаемся (стараемся придерживаться) в нашей конторе (~80 компов, ~80 телефонов, 8 камер наблюдения, 4 сервера, 8 VoIP шлюзов, 1 стойка, полтора провайдера, полтора сисадмина)
Читать дальше →

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Registered
Activity