Posts

Showing posts from 2011

Открытый софт для научных расчетов

Задачки у меня бывают разные, кратенькое описание того, что может потребоваться я приводил здесь: Софт для спектрального анализа/численного моделирования/etc. Дело происходит в Linux Debian, соответственно, интересует софт, который устанавливается из стандартного репозитория (что подразумевает опенсорсность).  Для начала я протестировал двумерное Фурье преобразование (прямое и обратное) на широко известном тестовом изображении Lenna. Заодно в процессе поиска нужных функций увидел заметки об истории этого изображения  Просто Лена  и  Обработка изображений: кто такая Лена Выбор софта для такой типичной задачки вполне себе наличествует: Scientific Computing with Free software on GNU/Linux HOWTO Пакеты прикладных программ Инструменты визуализации данных для Linux На практике же оказалось не так радужно, как хотелось бы. Из того, что есть в дебиане, работает "из коробки" только пакет octave . Зато для него можно установить множество ра...

MS Excel XML to CSV

XSLT file excel2csv.xsl <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mso="urn:schemas-microsoft-com:office:spreadsheet" version="1.0"> <xsl:output method="text" encoding="UTF-8"/> <xsl:template match="/">    <xsl:for-each select="mso:Workbook/mso:Worksheet/mso:Table/mso:Row">         <xsl:for-each select="mso:Cell">                 <xsl:value-of select="mso:Data"/>                         <xsl:if test="position()!=last()">                         <xsl:text>      </xsl:text>                         </xsl:if>         </xsl:for-each>       ...

Lossless музыка: ape+cue и flac+cue

Как мне недавно имели честь сообщить, аз есмь ретроград - не слушаю Vinil RIP :) В самом деле, по старинке обхожусь mp3. Собственно, когда-то проблемы были с воспроизведением lossless форматов, а разницы с mp3 не заметил. Но вот сегодня доступно много всякого разного именно в виде рипов виниловых пластинок, из того что я давно хотел отыскать - так что разбираемся. 1. Если у нас есть flac+cue - достаточно привести к юникодной кодировку (текстового) файла cue: cat *.cue | iconv -f cp1251 -t utf8 > .cue Впрочем, необходимо это только тогда, когда имя файла flac содержит не-латинские символы - в ином случае все можно прослушать и без перекодировки. 2. Когда у нас наличествует набор файлов ape + cue, ставим пакеты pacpl , flac и monkeys-audio (для установки последнего нужно подключить репозиторий http://www.debian-multimedia.org/ ) и далее перекодируем (здесь команда рекурсивно пройдет все подкаталоги в поисках файлов ape и создаст файлы flac): pacpl -t flac -o ape -r . Как и ...

О LevelDB и SQLite

Новость: Компания Google открыла исходные тексты БД LevelDB Кратко о LevelDB - хранилище ключ-значение, однопоточный доступ, нет гарантий целостности всех данных, в памяти держит копию всех данных лог-файлов. Утилита для тестирования SQLite у них кривая, мои патчи к ней брать тут Результаты тестирования с патчем для использования целочисленного Primary Key смотреть здесь Как видим, LevelDB на тестах показывает местами так себе преимущество относительно реляционной транзакционной СУБД... а местами ухитряется быть еще и медленнее :) Неплохо бы сравнить с CDB от DJB с патчем, убирающем ограничение на "константность". В любом случае, по проведенным тестам нет смысла в использовании LevelDB - функционал урезан сильно, а заметного выигрыша в производительности не видно. Равно есть куда улучшать и SQLite - некоторые результаты плохи на фоне остальных тестов. Значит, у нас многое еще впереди .

Обновление eglibc в debian

eglibc (2.13-8) unstable; urgency=low Starting with the eglibc package version 2.13-5, the libraries are shipped in the multiarch directory /lib/$arch instead of the more traditional /lib. The toolchain in Debian has been updated to cope with that, and most build systems should be unaffected. If you are using a non-Debian toolchain to build your software and it is not able to cope with multiarch, you might try to pass the following options to your compiler: -I/usr/include/$arch --sysroot /usr/lib/$arch -- Aurelien Jarno Sun, 26 Jun 2011 22:28:52 +0200

Семантический веб и формат RDF

В результате общения на форуме с разработчиком Virtuoso возникло желание поглядеть, что бы все это значило и не будет ли оно полезно мне. Итак, смотрим. Немного ликбеза: Облако и куб: RDF в аналитической базе данных Описание языка запросов: SPARQL Набор утилит: Command Line Semantic Web With Redland В дебиане доступны следующие пакеты: redland-utils (утилита rdfproc), rasqal-utils (утилита roqet) и raptor-utils (утилита rapper). На этих утилитах построен облачный сервис Triplr — Web Command Line Запрос из найденных в сети примеров: $ time roqet -e 'PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?website FROM WHERE { ?person foaf:weblog ?website ; foaf:name ?name . ?website a foaf:Document}' ... roqet: Query returned 74 results real 0m1.929s user 0m0.112s sys 0m0.012s $ openload http://planetrdf.com/bloggers.rdf -t|grep Content-Length: URL: http://planetrdf.com:80/bloggers.rdf Content-Length: 56645 Теперь попробуем протестировать самостоятельно. Дл...

Haproxy и openload: 40ms проблема

При тестировании сервисов за реверс-прокси HAProxy посредством утилиты openload обнаружилась занимательная вещь: любой запрос выполняется не быстрее, нежели за 40 мс! Даже с "monitor-uri /TESTME" (при наличии этой директивы во фронтэнде HAProxy сам обрабатывает запрос, сообщая о состоянии текущего фронтэнда). Запросы openload через HAProxy: $ openload http://127.0.0.1/TESTME 1 URL: http://127.0.0.1:80/TESTME Clients: 1 MaTps 25.00, Tps 25.00, Resp Time 0.040, Err 0%, Count 25 MaTps 25.00, Tps 25.00, Resp Time 0.040, Err 0%, Count 50 MaTps 25.00, Tps 25.00, Resp Time 0.040, Err 0%, Count 75 MaTps 25.00, Tps 25.00, Resp Time 0.040, Err 0%, Count 100 Прямое подключение openload к серверу: $ openload http://127.0.0.1/TESTME 1 URL: http://127.0.0.1:80/TESTME Clients: 1 MaTps 2590.64, Tps 2590.64, Resp Time 0.000, Err 0%, Count 2601 MaTps 2609.15, Tps 2775.79, Resp Time 0.000, Err 0%, Count 5399 MaTps 2644.94, Tps 2967.00, Resp T...

TclCloud is an opensource tcl interface to the Amazon AWS webservices

Свершилось :) Полное описание и исходники см. по ссылке TclCloud TclCloud is an opensource tcl interface to the Amazon AWS webservices api that enabled cloud automation of most AWS products and operations. Example use cases include the following: * starting and stopping EC2 instances * attaching EBS volumes * creating and interfacing with SimpleDB and RDS instances * managing EC2 Autoscale and Load Balancer configurations * sending Simple Email Service messages * creating, submitting and monitoring Elastic Map Reduce (Hadoop) jobs * configuring VPC networks * and so on ... For more information on the Amazon AWS cloud products, see: http://aws.amazon.com/products/ Для удобства собрал пакет, брать в моем репозитории или по ссылке Tcl cloud deb package

Деб-пакеты с модулями SQLite

Собрал некоторые расширения как деб-пакеты, см. репозиторий http://mobigroup.ru/debian/pool-squeeze/main/s/ В апстримовском расширении FTS3 поправлен баг, мешающий собирать его отдельным модулем. Версия из текущего trunk, умеет conflict-resolution для виртуальных таблиц (можно писать insert or replace ...). Также добавлена поддержка стеммеров Snowball . Модуль ICU собран "как есть" апстримовский. Добавлен модуль для подсчета хэша sha1 (используется быстрая реализация из BSD-систем). Для перекомпиляции, в т.ч. под другие ОС, см. в архивах файлик debian/rules, где содержатся команды сборки. Для удобства загрузку нужных расширений можно сделать с помощью файла ресурсов: $ cat ~/.sqliterc .load /usr/lib/libsqlitetcl.so .load /usr/lib/libsqliteicu.so .load /usr/lib/libsqlitefts3.so .load /usr/lib/libsqlitesha1.so $ sqlite3 -- Loading resources from /home/veter/.sqliterc

Оптимизация взаимодействия веб-клиента и сервера - Практические задачи

В завершение мы немного поговорим о типовых задачах, с которых многие из нас и начинают впервые заниматься веб-проектами. Предложенные далее решения будут настолько просты, что вы их сможете реализовать сразу же в процессе чтения статьи, а далее и масштабировать, при необходимости. Хотелось бы немного остановиться на вопросе запуска сервисов. Способов запуска сервисов в линукс немало - скрипты http://ru.wikipedia.org/wiki/Init : init (сокращение от англ. initialization — инициализация) — программа в UNIX и Unix-подобных системах, которая запускает все остальные процессы. утилита nohup : nohup — UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (hangup); таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы. и даже запуск в сеансе screen . Для использования init нужны рутовые права или специальная настройка системы для запуска с правами пользователя посредством команды sudo...

Оптимизация взаимодействия веб-клиента и сервера - Кэширующий прокси

Об этих "невидимках" многие разработчики забывают, ведь кэширующие прокси находятся где-то далеко от серверов проекта и нам не подчиняются. Зато с ними мы совершенно бесплатно получаем так называемую CDN (Content Delivery Network), о которой мечтают чуть ли не все веб-разработчики. Очевидно то, что для сохраненных в кэше прокси-серверов объектов запрос к веб-серверу не требуется и это может очень значительно снижать нагрузку на оборудование нашего веб-ресурса. Но это еще не все, ведь клиент получает HTTP-ответ от ближайшего к нему прокси, у которого нужный ресурс есть в кэше, таким образом, время отклика снижается многократно. Если же нужный объект закэширован непосредственно в браузере, результат окажется еще лучше. Также в любой момент можно установить кэширующий прокси на своем сервере (или серверах) и так масштабировать веб-проект. Кэширующие прокси стандартизированы и следует лишь настроить отдачу нужных HTTP-заголовков для управления кэшированием с помощью веб-сервера и...

Оптимизация взаимодействия веб-клиента и сервера - Настройка операционной системы

Для нагруженного сайта необходимость настройки сервера мало у кого вызывает удивление, да и для небольших веб-проектов стоит заранее предусмотреть опции защиты от DDOS-атак. По умолчанию Linux-системы имеют сетевые настройки, более подходящие для десктопов, нежели для серверов. Какие-либо общие рекомендации дать сложно, потому предлагаю читателям набор настроек, которые достаточно хороши для "среднего" сервера. /etc/sysctl.conf net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 net.ipv4.conf.default.rp_filter=1 net.ipv4.tcp_syncookies=1 net.ipv4.tcp_keepalive_time = 120 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 5 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 4000 net.ipv4.tcp_max_syn_backlog = 4096 net.i...

Оптимизация взаимодействия веб-клиента и сервера - Реверс-прокси

Реверс-прокси это все равно что дворецкий, встречающий гостей в аристократическом замке, и при плохом выборе наш проект поворачивается к посетителям отнюдь не лицом. Современные реверс-прокси также являются и балансировщиками нагрузки, позволяя распределять поступающие запросы по множеству серверов-обработчиков. Среди "чистых" реверс-прокси, не обремененных сторонней функциональностью, стоит назвать Pound и HAProxy . Рассмотрим особенности их использования в реальных проектах. Начнем с Pound, как более простого: Pound позволяет распределять нагрузку между множеством Web-серверов, а также имеет встроенную поддержку SSL. Для небольших проектов Pound будет прекрасным выбором, но при росте проекта может потребоваться его замена. На процессоре уровня Pentium D примерно при 200-300 HTTPS или 600-800 HTTP-запросах в секунду Pound перестает справляться с нагрузкой. Разработчики Pound в ответ на подобные вопросы рекомендуют воспользоваться другими реверс-прокси, пригодными дл...

Оптимизация взаимодействия веб-клиента и сервера - Сервера приложений (платформы)

Многие динамические сайты для проектов с высокой нагрузкой используют специализированные веб-сервера со встроенным интерпретатором какого-либо скриптового языка и встроенными средствами оптимизации и масштабирования. Такие системы принято называть серверами приложений : Сервер приложений (англ. application server) — сервер, исполняющий некоторые прикладные программы. Термин также относится и к программному обеспечению, установленному на таком сервере и обеспечивающему выполнение прикладного ПО. Ниже мы предпримем небольшой экскурс в историю и познакомимся с первым или одним из первых серверов приложений, который успешно развивался все эти годы и сегодня является мощной и эффективной системой уровня предприятия. Ссылки в основном ведут на англоязычные ресурсы, потому что в рунете практически нет информации о веб-технологиях 1990-х, активно развивавшихся в США. На самом же деле ко времени появления форка довольно примитивного веб-сервера NCSA HTTPd 1.3 под именем Apache в 1995 год...

Оптимизация взаимодействия веб-клиента и сервера - Динамический контент

Что касается раздачи динамического контента ("динамики"), хорошо известным методом является использование CGI-технологии : CGI (от англ. Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, используемого для связи внешней программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, хотя многие предпочитают названия «скрипт» (сценарий) или «CGI-программа». Сам интерфейс разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода/вывода. Такими возможностями обладают даже скрипты для встроенных командных интерпретаторов операционных систем, поэтому в тех случаях, когда нет нужды в сложной функциональности, могут использоваться простые командные скрипты. Промежуточным решением между CGI и серверами приложений можно назвать технологию FastCGI , позволяющую убрать часть ограничений CGI, но имеющую и свои ...

Оптимизация взаимодействия веб-клиента и сервера - Статический контент

Image
Введение Зачастую достаточно лишь позаботиться об интенсивном кэшировании статики на стороне клиента (включая сюда кэширующие прокси-серверы интернет-провайдеров), и количество запросов на статику оказывается относительно мало, так что оптимизация этих и так "легких" запросов становится бесполезной. Но что делать, если запросов все равно очень много? Это может быть вызвано как характером контента (например, фотогалерея), так и просто высокой посещаемостью, особенно когда много уникальных посетителей. Легковесность Минималистичные веб-сервера для раздачи статики совсем или почти совсем не требуют настройки, обеспечивая при этом высокую производительность. Одним из действительно простых и эффективных веб-серверов для отдачи статического контента является  fnord : Программа fnord представляет собой миниатюрный HTTP сервер(15k размером), запускаемый посредством TCP суперсервера tcpsvd, tcpserver или другого. fnord хорошо оптимизированный и быстрый, поддерживает передачу методом...

Оптимизация взаимодействия веб-клиента и сервера - Введение

Всемирная паутина (www) начиналась с полностью статичных веб-ресурсов, так что пользователи могли лишь просматривать предложенные веб-странички и скачивать файлы. Со временем появлялись все более развитые средства взаимодействия с пользователями, начали использовать кукисы (cookie) для идентификации пользователей, предложили формы обратной связи и форумы. Сегодня многие веб-сайты обзавелись базами данных и активно применяют ajax-технологию для удобства посетителей, и для нас стал привычен термин "веб-приложения". Происходящее сравнимо с революционными изменениями, порожденными открытием книгопечатания, и даже более того - ведь теперь не только информация стала как никогда раньше доступной и глобальной, но и каждый ее потребитель легко и быстро может связаться с автором, включаясь таким образом в процесс создания новой информации. Все это здорово, но техническая часть взаимодействия между веб-приложениями и их пользователями производит впечатление чрезвычайно сложного процесса...

Internet Explorer Application Compatibility VPC Image

Обновились образы для тестирования сайтов в ИЕ разных версий . Для конвертации и запуска образов потребуются deb-пакеты unrar, qemu-utils и virtualbox/virtualbox-ose Скачиваем архивированный образ в формате .vhd (VirtualPc) и превращаем в .vdi (VirtualBox): unrar e Windows_XP_IE6.exe mv Windows\ XP.vhd Windows_XP.vhd mv Windows\ XP.vmc Windows_XP.vmc qemu-img convert -O raw Windows_XP.vhd Windows_XP.bin vboxmanage convertdd Windows_XP.bin Windows_XP.vdi

Выравнивание числа в SQLite

В очередной раз получаю вопрос, как сделать выравнивание числа в SQLite. Оставляя "за кадром" необходимость это делать в эскулайт, отвечаю - это сделать несложно, вот пример: sqlite> create table a(val integer); sqlite> insert into a(val) values(1); sqlite> insert into a(val) values(10); sqlite> insert into a(val) values(100); sqlite> insert into a(val) values(1000); sqlite> select substr('0000000',1,7-length(val))||val from a; 0000001 0000010 0000100 0001000

Чудеса яваскрипт

Спасибо ixti за следующую ссылку: i am myself but also not myself : var foo = [0]; console.log(foo == !foo); console.log(foo == foo); Если кто не догадался, в обоих случаях результатом будет true. И "на закуску": all your commas are belong to Array

О программистах

— Знаешь, чем отличается хороший программист от программиста-профессионала? — Чем? — Хороший программист пишет хороший код, когда у него хорошее настроение, а профессионал пишет хороший код всегда. Авторство, как водится, неизвестно :-) На правах физика добавлю еще сказанное некогда Эйнштейном: Для нашей работы необходимы два условия: неустанная выдержка и готовность всегда выбросить за борт то, на что ты потратил так много времени и труда.

Android SDK on debian squeeze host

See common instructions here: Installing the SDK $ sudo aptitude install eclipse libswt-gtk-3.5-java $ ./android --verbose update sdk No command line parameters provided, launching UI. See 'android --help' for operations from the command line. Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3550 or swt-pi-gtk in swt.library.path, java.library.path or the jar file at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source) at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source) at org.eclipse.swt.internal.gtk.OS. (Unknown Source) at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source) at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source) at org.eclipse.swt.widgets.Display. (Unknown Source) at com.android.sdkmanager.Main.showMainWindow(Main.java:297) at com.android.sdkmanager.Main.doAction(Main.java:265) at com.android.sdkmanager.Main.run(Main.java:99) at com.android.sdkmanager.Main.main(Main.java:88) ...

Что хорошего в jQuery 1.5

Анонс: Состоялся релиз jQuery 1.5 То, чего мы так долго ждали, свершилось: jQuery Deferred Object (подробное описание) и Использование Deferred объектов в jQuery 1.5 Заметим, что теперь обработчики можно назначать цепочками, это радует. Также стоит глянуть официальную документацию, грепнув по номеру версии 1.5: jQuery.ajax() Из фильтров, конверторов и транспортов меня лично заинтересовали конверторы, а подробное описание всего перечисленного есть здесь: Extending Ajax На тестовом проекте уже обкатал новые возможности - кода стало меньше, и читается он легче, профит. Что касается скорости работы - визуально разницы не заметил, поскольку и предыдущая версия jQuery быстро работает, тем не менее, приятно, что добавлены различные оптимизации.

Looking Ahead to Tcl 8.6 Jeff Hobbs

Про тикль 8.6, немного о бизнесе: Looking Ahead to Tcl 8.6 Jeff Hobbs Похоже, 8.7 все-таки будет, прежде чем появится версия 9.

FTS3 Snowball Stemmer

Итак, поддержка стеммеров snowball для SQLite: http://sqlite.mobigroup.ru/wiki?name=FTS3+Snowball+Stemmer Пример использования: CREATE VIRTUAL TABLE fts USING fts4(text,TOKENIZE icu russian); insert into fts (text) values ('Нафига'); insert into fts (text) values ('попу'); insert into fts (text) values ('наган'); insert into fts (text) values ('если'); insert into fts (text) values ('поп'); insert into fts (text) values ('не'); insert into fts (text) values ('хулиган'); select * from fts where fts match 'поп'; попу поп sqlite> select * from fts where fts match 'нафиг'; Нафига Примечание: аналогично можно использовать и fts3 виртуальные таблицы, но рекомендуется переходить на fts4.

Определение byteorder

int main(int argc, char *argv[]) { int test = 1; if ( (((char *)(&test))[0]) == 1) { printf("NDR (little_endian)\n"); return 0; //NDR (little_endian) } else { printf("XDR (big_endian)\n"); return 1; //XDR (big_endian) } }

Пересчет координат с некоторых судовых навигаторов

int main(int argc, char *argv[]) { double xpos = 4784270; double ypos = 7803506; double RadToDeg = 57.2957795132; double DegToRad = 0.0174532925199; double b = 6356752.3142; double PI = 3.141592654; double HALF_PI = 1.570796327; double MerToGeoLong = xpos * RadToDeg / b; printf("GeoLong = %f\n",MerToGeoLong); double MerToGeoLat = RadToDeg * (2 * atan(exp(ypos / b)) - HALF_PI); printf("GeoLat = %f\n",MerToGeoLat); }