Если еще есть javascript-разработчики, незнакомые с библиотекой ExtJS (http://extjs.com), то пора бы это сделать. Но а если серьезно, то в предверии выхода альфа версии ветки ExtJS 2.0 в рунете, благодаря добрым людям, появился русскоязычный ресурс, посвященный этой библиотеке: extjs.ru
Визуализируем данные на JavaScript
3 min
4.3K
Translation

Развитие компьютерной графики подталкивает нас к изобретению всё новых способов графического представления данных. Разрабатывались различные прикладные программы для визуализации данных на локальных компьютерах. Однако всё изменилось с развитием интернета: в нём содержатся колоссальные объёмы информации, которые нам постоянно хочется представить как-то удобнее, дружелюбнее, понятнее. Что же мы имеем на сегодняшний день?
Существует немалое число серверных библиотек и утилит, способных генерировать сложные графики. Однако я считаю, что такой подход не всегда оптимален. Если мы можем производить визуализацию на стороне клиента с помощью JavaScript, то почему бы нам не воспользоваться такой возможностью? Логика работы подобной связки проста: сервер генерирует данные, а клиент их визуализирует.
Разумеется, вы можете воспользоваться Flash, Silverlight или Java-апплетами, однако в этом обзоре я хотел бы вам показать библиотеки визуализации, написанные на чистом JavaScript.
Синтез 3D звука :: Clunk
2 min
2.9KРаботая над проектом уютненькой аркады, я с сожалением обнаружил что OpenAL отбирает слишком много моего времени. Мало того, что для него пришлось написать менеджер звуков о полутора тысячах строк кода, так ещё и приходилось бороться с разного рода чёрной магией. (Например реализация от nvidia намертво вешала венду) Поэтому, я внезапно решил что потратил на него достаточно времени и написал свой собственный велосипед, который и был успешно обкатан в поле, и выпущен с открытыми исходниками на sourceforge.
Вообще, наше ухо не такое уж и хитрое устройство. Позицию источника ухо определяет двумя способами. В горизонтальной плоскости звук приходит в одно ухо чуть раньше чем в другое. Простая тригонометрия умноженная на диаметр головы и дело в шляпе! :)
Второй способ уже куда сложнее — голова имеет разную плотность и разные технологические отверстия, следовательно, спектр звука искажается по разному в зависимости от направления вхождения сигнала. Было много попыток сделать эталонную голову(ничего постыдного, даже Стив Джобс делал это), заполнить её желеобразным заменителем мозга и померить искажения эталонного звука, например проект KEMAR из MIT.
Мой проект называется Clunk, и умеет практически всё, что необходимо уметь звуковой библиотеке:
Адрес проекта на sf.net: https://sourceforge.net/projects/clunk
Если вам интересно, можно смело писать мне в icq, я готов ответить на любые вопросы.
Вообще, наше ухо не такое уж и хитрое устройство. Позицию источника ухо определяет двумя способами. В горизонтальной плоскости звук приходит в одно ухо чуть раньше чем в другое. Простая тригонометрия умноженная на диаметр головы и дело в шляпе! :)
Второй способ уже куда сложнее — голова имеет разную плотность и разные технологические отверстия, следовательно, спектр звука искажается по разному в зависимости от направления вхождения сигнала. Было много попыток сделать эталонную голову(ничего постыдного, даже Стив Джобс делал это), заполнить её желеобразным заменителем мозга и померить искажения эталонного звука, например проект KEMAR из MIT.
Мой проект называется Clunk, и умеет практически всё, что необходимо уметь звуковой библиотеке:
- Бесконечное количество всего: музыкальных потоков (SDL_Mix умеет только один, например), объектов и именованных источников звука прикреплённых к объектам или слушателю.
- Простое апи на c++. (В OpenAL вы вынуждены сами перестраивать сцену, для того чтобы перекинуть 16 источников поближе к слушателю, рестартуя источники (sic), ещё рекомендую посмотреть примерчик «как сделать фоновую музыку на OpenAL», ~полтыщи строк кода =-O ) )
- HRTF, HDT описанные выше(собственно 3d звук)
- Поддержка всех distance models (падение громкости в зависимости от расстояния) из OpenAL
- Опциональная оптимизация под процессоры с технологией SSE
- Эффект допплера
- Должно работать под всеми платформами где есть SDL, не содержит платформно-зависимого кода.
- Лицензия LGPL 2.1 — можно использовать в коммерческих продуктах.
Адрес проекта на sf.net: https://sourceforge.net/projects/clunk
Если вам интересно, можно смело писать мне в icq, я готов ответить на любые вопросы.
Поддерживает-ли браузер пользователя CSS в необходимом объеме?
1 min
1.7K
вышел boost 1.40.0
1 min
622Как-то незаметно еще в конце августа вышла новая версия библиотеки boost.
Исправлено большое количество багов а также обновлена документация.
www.boost.org/users/download/version_1_40_0
Исправлено большое количество багов а также обновлена документация.
www.boost.org/users/download/version_1_40_0
Программа Calibre. Управление библиотекой и универсальный конвертер электронных книг
4 min
212KПредисловие
Так как являюсь большим поклонником чтения, то в какой момент взор мой упал на электронные книги. Преимущества были для меня налицо. Особенно с частыми командировками. Вес, размер, удобство, ну и цена электронных версий книг (предпочитаю честную покупку текстов). Попользовавшись несколькими экземплярами остановился на Sony PRS-505. Сначала смутил формат lrf, но выход был быстро найден — онлайн-конвертеры fb2 в lrf. Онлайн — потому что являюсь пользователем Linux и дома и на работе, плюс дома для игр использую WinXP. В общем полный разброд. Но когда начал искать книги на английском, то наткнулся на кучу других форматов от pdf до epub и еще более экзотические варианты. Плюс книг на компах стало много и разбираться в них стало трудновато (я не единственный пользователь еКниги в семье). В общем назрела необходимость в каком то управлении этим хаосом и удобным конвертированием форматов, плюс нативная поддержка Linux. В одном из комментов на Хабре увидел упоминание про Calibre. Скачал, поставил — понравилось. Теперь пользуюсь полностью ей. Поэтому хотелось бы сделать краткий обзор данной программы.
Underscore.js — библиотека, которая так хороша, что должна быть вне закона
3 min
49KКаждый, кому приходилось писать объемные куски осмысленного кода на javascript, рано или поздно понимал, что ему многого не хватает в этом языке или просто неудобны некоторые врожденные конструкции. Для сглаживания шероховатостей применяются jQuery, Prototype, MooTools etc. Кто-то уже мало представляет себе, как можно кодить без них. Сегодня я расскажу о еще одной маааленькой библиотечке, которая делает мир javascript-программиста еще прекраснее. Речь пойдет о Underscore.js
Перехват вызовов функций в Linux или простейший файрвол своими руками
5 min
4.1KВступление
Нетерпеливым эти лирические отступления можно не читать.
Некоторое время назад меня посетила мысль: «Как сделать так, чтобы закрыть доступ к интернету (или к какому-то конкретному хосту) какой-нибудь одной программе в Linux?». Эта мысль меня посетила и полетела дальше по своим делам. И вот сегодня я получил в свой RSS-ридер один вопрос на askdev.ru. Ба! Да это как раз то, о чем я думал! Надо помочь человеку, заодно и самому разобраться в вопросе.
Полез я в гугл смотреть, нету ли каких-нибудь намеков на решение. Оттуда я узнал, что штатным iptables это с некоторых пор сделать стало невозможно, а народ рекомендует посмотреть в сторону AppArmor. «Горя огромным желанием изучить AppArmor», я стал искать дальше и почти случайно наткнулся на сообщение на ЛОРе, в котором описывался довольно интересный метод.
Sausage.js — библиотека для превращения любого кода в цепочку вызовов
4 min
1.4KЯ думаю каждый, кто хотя бы раз сталкивался с Canvas в встречал на своем пути одну не крайне не удобную вещь. При работе с Canvas для изменения любого параметра контекста или вызова метода, приходится обращаться сперва к контексту, а потом к методу/свойству — это очень напрягает.
Всегда хочется вот такой код:
Превратить в цепочку:
Sausage.js — 1268 байт (скоро будет меньше килобайта), решающие ваши проблемы.
«Luke, use __noSuchMethod__» — и все дела, скажете вы. А как же поддержка доисторических браузеров?
Все кто не равнодушен к Canvas, цепочками вызовов и к Lisp прошу под кат
Всегда хочется вот такой код:
var ctx = document.querySelectorAll('canvas')[0].getContext('2d');
ctx.fillStyle = '#eee';
ctx.strokeStyle = 'blue';
ctx.beginPath();
ctx.moveTo(10, 10)
ctx.lineTo(100, 10)
ctx.lineTo(100, 100)
ctx.lineTo(10, 100)
ctx.lineTo(10, 10)
ctx.closePath()
ctx.stroke()
ctx.fill();
Превратить в цепочку:
ctx
.fillStyle('#eee')
.strokeStyle('blue')
.beginPath()
.moveTo(10, 10)
.lineTo(100, 10)
.lineTo(100, 100)
.lineTo(10, 100)
.lineTo(10, 10)
.closePath()
.stroke()
.fill();
Sausage.js — 1268 байт (скоро будет меньше килобайта), решающие ваши проблемы.
«Luke, use __noSuchMethod__» — и все дела, скажете вы. А как же поддержка доисторических браузеров?
Все кто не равнодушен к Canvas, цепочками вызовов и к Lisp прошу под кат
Магия JavaScript: arguments
3 min
66Karguments
— очень специфическая штука, о которой новички и даже любители знают только то, что это «вроде массив, но какой-то неправильный». На самом деле, у него есть ряд интересных особенностей. Предлагаю в топике пофантазировать на тему TypeHinting, аргументов по-умолчанию и всякого другого.(function (foo, bar) {
console.log(typeof arguments); // ?
arguments[0] = 42;
console.log(foo); // ?
})(10, 20);
А также покажу интересную идею-библиотеку
function test (foo, bar) {
Args(arguments).defaults(100, 100);
return [foo, bar];
};
test( ); // 100, 100
test(15 ); // 15, 100
test(21, 42); // 21, 42
libral – слой абстракции доступа к библиотекам сжатия
2 min
1.2K
На данный момент поддерживаются библиотеки:
- libc — без сжатия
- zlib — www.zlib.net
- lzo — www.oberhumer.com/opensource/lzo
- snappy — code.google.com/p/snappy
- bzip2 — www.bzip.org
Новый Javascript фреймворк основаный на Scriptographer
2 min
2.4K
Translation

Создан Юргом Лени и Джонатаном Пакей, Paper.js является фреймворком сценариев векторной графики с открытым исходным кодом, который работает поверх HTML5 Canvas. Он предлагает чистый Scenegraph / DOM и много ярких функций, для создания и работы с векторной графикой и кривыми Безье.
Paper.js основана на и в значительной степени совместимы с Scriptographer, средой сценариев для Adobe Illustrator, первоначально разрабатывающаяся Юргом и Джонатананом более чем 10 лет.
Reactive Extensions for JavaScript. Полное руководство
7 min
41K
Tutorial
Хотите использовать Observable Collections? Слышали про Reactive Extensions? Нравится LINQ? Не нравится писать спагетти-код? Нужны монады? И все это на JavaScript?
Мой open source велосипед
4 min
18K“Воин не бросит начатое.”
Мастер Шифу, м.ф. Кунг-фу Панда
Можно рассматривать этот топик не как технический, а как художественный. Тут не будет кусков кода, диаграмм классов и прочей ерунды. Будет история одного java open source проекта, который я разрабатываю уже около года.
Все началось, когда я был на четвертом курсе одного провинциального российского университета. С семестра, о котором ходили легенды на моей специальности, как о “семестре-убийце“ с его 55-ю лабораторными работами по графике, компиляторам и вычислительной математике (далее ВМ).
Мастер Шифу, м.ф. Кунг-фу Панда
Можно рассматривать этот топик не как технический, а как художественный. Тут не будет кусков кода, диаграмм классов и прочей ерунды. Будет история одного java open source проекта, который я разрабатываю уже около года.
Начало
Все началось, когда я был на четвертом курсе одного провинциального российского университета. С семестра, о котором ходили легенды на моей специальности, как о “семестре-убийце“ с его 55-ю лабораторными работами по графике, компиляторам и вычислительной математике (далее ВМ).
Программирование для PlayStation 2: CD(DVD)-ROM Library — часть первая
7 min
5K
1. Прошу прощения, что долго не писал.
2. Готов PS2 SDK.
Я хотел не упускать CD(DVD)-ROM Library, поэтому ссылки и гайд по установке PS2 SDK вы найдете в конце второй части этой статьи.
Тема достаточно сложная.
PS2 SDK доступен тут. Narod.ru.
Магнет (ссылка нормально не вставляется благодаря хабра-парсеру): magnet:?xt=urn:btih:F6114E45C5E392E6D213F2547C466FADB5DA5A13&dn=sce.zip&tr=udp%3a//tracker.openbittorrent.com%3a80/announce
Еще одна ссылка. Спасибо Konstantinus и ahmpro
CodeIgniter Command Line library — небольшой ассистент для работы с CLI
3 min
3.1KКак вы наверное знаете, в php есть интересная функция для обработки данных, поступающих из командной строки: getopt. Но есть одна маленькая проблема — она неправильно работает в CodeIgniter, да и не совсем удобная.
А так как у меня было немного свободного времени, желание написать что-нибудь своё опен сорсное, попробовать в деле github (сижу на hg+bitbucket), и наконец сделать что-то полезное для тухнущего CodeIgniter и его сообщества, я решил написать свой костыль, призванный немного скрасить написание cli скриптов на данном фреймворке.
Оно умеет самый минимум — искать заданные аргументы, производить их валидацию (если не указаны обязательные) и выводить подсказки по использованию вашего скрипта, а при желании легко может быть допилено для использования без привязки к CodeIgniter:

А так как у меня было немного свободного времени, желание написать что-нибудь своё опен сорсное, попробовать в деле github (сижу на hg+bitbucket), и наконец сделать что-то полезное для тухнущего CodeIgniter и его сообщества, я решил написать свой костыль, призванный немного скрасить написание cli скриптов на данном фреймворке.
Оно умеет самый минимум — искать заданные аргументы, производить их валидацию (если не указаны обязательные) и выводить подсказки по использованию вашего скрипта, а при желании легко может быть допилено для использования без привязки к CodeIgniter:

Logy — логгер с человеческим лицом
4 min
2.8KНекоторое время назад мне пришла в голову идея сделать логирование в Java более дружелюбным, простым и в тоже время достаточно гибким в настройке. Такие требования справедливы пожалуй, в средних и малых проекта, где можно обойтись без громоздкого log4j. Буквально за неделю, идея переросла в простенькую Java библиотеку с ни менее простым названием — logy.
Использование:
Вывод:
Как по мне, выглядит очень читабельно, благодаря синтаксическому сахару, DSL-like API и динамическому определению параметров логирования в момент вызова (читай без дополнительных полей
Использование:
import static logy.Logy.*;
public class Test {
public void test() {
String s[] = {"a", "b"};
warn("Can't find", quote(upper("c")), "in", group(quote(upper(scalar(s)))));
}
}
Вывод:
29.06.2012 1:19:25 Test.test [WARN] :: Can't find "C" in ["A", "B"]
Как по мне, выглядит очень читабельно, благодаря синтаксическому сахару, DSL-like API и динамическому определению параметров логирования в момент вызова (читай без дополнительных полей
public static final Logger logger = ...
в классе).Neutrino — крошечный js-фреймворк с полноценным наследованием и событиями
4 min
7.6KВ проектах с небольшим фронтэндом бывает не всегда разумно использовать тяжелые фреймворки вроде backbone, ember или knockout. Тем не менее потребность использовать модели, наследование и качественное взаимодействие между ними остается. Предлагаю вашему вниманию фреймворк Neutrino, который делает все вышеперечисленное, при этом его размер не превышает 100 строк кода.
Индусский код в Микрочипе
8 min
62KПонадобилось быстро подключить SD-карточку к микроконтроллеру, и задача казалась простецкой — добрый микрочип предлагает библиотеки для всего чего угодно (ах, поставить линк на библиотеки — не судьба), но после первого взгляда на их код, волосы на голове начали шевелиться.
Те кто общался с саппортом микрочипа, наверное замечал что зачастую попадает на индийский департамент конторы, и все-бы ничего если бы не подозрение что весь микрочип разом переехал в Бомбей и набрал индийских бездомных школьников для написания своих библиотек.

Не подумайте, что я сейчас пытаюсь гнуть расово верную линию — не имел опыта общения конкретно с индусами, но точно знаю что среди наших их тоже достаточно (не верите — наберите «95» в гугле), но понятие «индусского кода» появилось давно и закрепилось довольно прочно, хотя вы и не найдете его в политкорректной википедии (но гугол о нем точно знает).
Итак, если вы хотите научиться программировать так как это делают в микрочипе следуйте следующим простым советам…
Те кто общался с саппортом микрочипа, наверное замечал что зачастую попадает на индийский департамент конторы, и все-бы ничего если бы не подозрение что весь микрочип разом переехал в Бомбей и набрал индийских бездомных школьников для написания своих библиотек.

Не подумайте, что я сейчас пытаюсь гнуть расово верную линию — не имел опыта общения конкретно с индусами, но точно знаю что среди наших их тоже достаточно (не верите — наберите «95» в гугле), но понятие «индусского кода» появилось давно и закрепилось довольно прочно, хотя вы и не найдете его в политкорректной википедии (но гугол о нем точно знает).
Индусский код (не индийский или индейский) — жаргонное нарицательное название для программного кода крайне низкого качества, использующего простые, но порочные принципы «copy-paste».
Почему именно индусский?
По слухам в Индии с некоторых времен существует практика оценки производительности труда программиста на основе количества написанного кода. Чем больше кода, тем больше программист работает, и, следовательно, выше его оклад. Шустрые индусы быстро сообразили, как обманывать неквалифицированных заказчиков.
Полезное замечание от kaladhara
Житель Индии — индиец, а индус — это последователь любого направления индуизма. Таким образом даже чукча преклонных годов, исповедующий шиваизм (и, вероятно пишуший на с++) — индус.
Итак, если вы хотите научиться программировать так как это делают в микрочипе следуйте следующим простым советам…
Элегантные строки
4 min
16KПредставим, что нам нужно что-нибудь сделать со строками в .net. Что-то не очень сложное, но и не совсем простое. Например, для правильного форматирования, расставить пробелы после запятых в тексте. Что же предлагает .net из коробки?
Что-то такое:
Постойте, но мы же хотели расставлять пробелы, а не заменять запятые!..
Что-то такое:
string str = "...";
str.Replace(",", ", ");
Постойте, но мы же хотели расставлять пробелы, а не заменять запятые!..