Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2011-07-31

Почему я не люблю перелеты

Я люблю комфорт. А летать самолетом — это когда на трехчасовой собственно перелет уходит двенадцать часов жизни и ни один, повторяю, ни один из этих часов нельзя назвать проведенным в комфорте. То ли дело поезд. Добрался до вокзала, загрузился в купе и отдыхай. А с авиаперевозками что-то не так. Почему 3-х часовой перелет превращается в 12-ти часовое путешествие?

Побурчал и будя.
Как можно догадаться, я вернулся из отпуска. Был проверен отель Barut Hotels Hemera resort, город Сиде, Анталья, Турция (гуглокарта, якарта). Спать, жрать, купаться, чуть-чуть загорать, гулять, кататься на водном мотоцикле и заниматься виндсерфингом. Такая получилась программа отдыха. Зверушки остались довольны — отель прекрасный, люди приветливые, место хорошее, море видали и менее мутное, но по утрам почти идеально.

Что особого?
Когда ехали, боялись, что будет очень жарко, ибо конец июля. Но ничего, обошлось. По вечерам вполне можно гулять и чувствовать себя не рыбой на сковороде а вполне бодрячком.

С отелем вышло очень удачно. Он еще не испорчен людьми сорта руссо-туристо-облико-морале. Даже узнав, что мы из России, персонал не менял своего радушно-доброжелательного отношения к нам.

Отдельная тема — виндсерфинг! Это так классно, оказывается! Хочу еще.

В общем, при случае еще раз посетим. Нам все очень понравилось.

А подпись, к примеру, такая: а ведь мне еще обратно чебурахаться, ёклмн! Тяжко быть нубом.

2011-07-29

ArcGIS 10, Python

Обучающие материалы по использованию Python в ArcGIS 10
resources.arcgis.com/gallery/file/geoprocessing/details?entryID=E659B67B-1422-2418-A0FE-4F1642052299
18 мегабайт, большая часть — примеры обрабатываемых данных.

Topics covered include scripting geoprocessing workflows, batch processing, reading and creating data, raster analysis with the ArcPy Spatial Analyst module, map automation with the ArcPy Mapping module, and creating script tools.

blogs.esri.com/Dev/blogs/geoprocessing/archive/2011/05/24/Extending-ArcGIS-with-Python
 

2011-07-28

26 Терабит/сек

Содержимое двухтерабайтного жесткого диска за одну секунду — круто! Вот они, новые рубежи в передаче данных

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

Поскольку в этом случае принимающий лазерный генератор не способен расшифровать сигнал, использовался алгоритм, известный как быстрое преобразование Фурье. Учёные применили его не математически, а оптически — разделив входящий луч на разные «дорожки», прибывающие в разное время.

В прошлом году скорость передачи данных таким способом превысила 10 Тбит/с, а теперь информация была успешно отправлена на 50-километровое расстояние со скоростью 26 Тбит/с.

citforum.ru/news/26297
nature.com/nphoton/journal/v5/n6/full/nphoton.2011.74
bbc.co.uk/news/science-environment
 

2011-07-27

ФИС

С мест сообщают, что

Президент Дмитрий Медведев подписал указ о создании Федеральной службы по интеллектуальной собственности, которая должна принять на себя функции Роспатента и других агентств, выполняющих функции контроля и надзора в сфере правовой охраны и использования интеллектуальной собственности.

citforum.ru/news/26299

В то время как настоящий тест гласит

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

kremlin.ru/news/11318

Жирненьким видно? «...результатов... созданных за счет ... федерального бюджета...».
Пираты могут не беспокоиться?

2011-07-26

Зубы

Способ проверить качество чистки зубов

достаточно несколько капель йода на сантиметр воды в чашке, размешать и пополоскать секунд 15-20, после этого один раз прополоскать водой. Йод смоется с чистой эмали и впитается в налёт, сразу наглядно качество чистки

Соки и газировки содержат кислоту, вредную для зубов. Долго жевать резинку вредно, как и скрипеть во сне зубами.

А вот досаждает, и порой до бешенства, упорное желание оставаться в рамках своего невежества. «А я думала…» или «решил дождаться назначенного приёма…» после наставления с повторением «если будет болеть или вообще что-то не так – сразу звоните в любое время!» выбешивает донельзя. Какого лешего ДУМАТЬ, если НЕ ЗНАЕШЬ?! На основании чего судить и рассуждать?!

popdoc.ru/articles/158
alradist.livejournal.com

Очередь к доктору больше чем на месяц. Теперь будет еще больше.

2011-07-25

Головоломка

Тем, кто думает, что знает C, C++
Остальным смело пропустить мимо.
Что делает это макро?

template <typename T, size_t N>
char (&ArraySizeHelper(T (&array)[N]))[N];
#define arraysize(array) (sizeof(ArraySizeHelper(array)))
meta-coding.blogspot.com/2011/05/safer-sizeof-for-arrays-in-c

2011-07-24

WIFI in Linux

Как в Linux подключится к wifi точке доступа?

Давайте рассмотрим два случая настройки соединения с беспроводной точкой доступа:
- графическое приложение Wicd (для примера);
- консольные утилиты.

Предполагается, что у вас имеется беспроводное сетевое устройство (адаптер), который работает под Linux....
Также предполагается, что у вас имеются в наличии два параметра для подключения к беспроводной точке: SSID и идентификационный ключ. Без них (особенно - без второго, так как первый еще можно легко узнать) вы не сможете установить соединение.

rus-linux.net/ /lvs/wifi/nastroika-wifi-na-Linux-desktope
vasnake.blogspot.com/2009/03/debian-wireless-wpa-tkip-psk

2011-07-23

ASP.NET ViewState

Срывая покровы. Весьма полезная (дотнетовцам) статья про ASP .NET ViewState.

А вот документация на MSDN, которая описывает то, как элементы управления хранят свое состояние между postback'ами. Нельзя сказать, что эта документация неверна, но в ней содержится утверждение, которое не до конца правильно:

«Если элемент управления использует ViewState для свойства вместо скрытого поля, это свойство будет автоматически сохраняться между отправками ответов клиенту.»

Похоже, что здесь подразумевается что все, что пихается во ViewState, будет отправляться клиенту. НЕПРАВДА! Понятно, откуда берется такая суматоха вокруг ViewState'а. Нигде в Интернете я не смог найти 100%-но полного и точно описания его работы! Лучшая статья, которую я видел, это статья Скотта Митчелла. Она обязательна к прочтению. Однако она не объясняет взаимодействие родительских и дочерних элементов управления во время инициализации и трекинга ViewState'а, и уже это вызывает множество непониманий ViewState'а, по крайней мере исходя из моего опыта.

Так что первая цель этой статьи — дать исчерпывающее объяснение того, как функционирует ViewState, от начала до конца, по возможности закрывая белые пятна, оставленные другими статьями. После подробного описания процесса ViewState'а я покажу несколько ошибок, которые допускают разработчики при использовании ViewState'а, как правило даже не догадываясь об этом, и как эти ошибки исправлять. Следует отметить, что я писал эту статью на основе ASP.NET 1.x. Однако изменений в механизме ViewState'а в ASP.NET 2.0 очень мало. В частности, появился новый тип ViewState'а — ControlState, однако он используется точно также, как и ViewState, поэтому мы можем его просто проигнорировать.

Сперва позвольте мне объяснить, почему я считаю, что понимание сути ViewState'а очень важно:

Непонимание ViewState'а ведет к...

Потере важной информации
Атакам на ViewState
Плохой производительности — вплоть до ОТСУТСТВИЯ ПРОИЗВОДИТЕЛЬНОСТИ
Плохой расширяемости — как много пользователей вы сможете обслужить, если каждый из них будет отправлять 50k с каждым запросом?
Плохому дизайну вообще
Головной боли, тошноте, головокружениям и необратимому искривлению формы надбровных дуг.
...

habrahabr.ru/blogs/net/119537

Сцылки на оригинал статьи я не нашел.

Из каментов:

Подскажите, если используешь ASP.NET MVC, то имеет ли смысл читать статью?

Вьюстейт с MVC использовать нельзя, концепция этих подходов к разработке разная.
MVC принимает http протокол как неизбежность, и не пытается оградить разработчиков от него, городя абстракции, жизненный цикл страницы, вьюстейты и апдейтпанели. Плюс используется MVC паттерн, что делает проекты дружелюбными к юнит тестам, например.
Web Forms же пытается косить под WinForms, но жизнь есть жизнь, и у такой дружелюбности к тем, кто переходит с вин формс, есть своя цена вроде таких штук.

Вот так как-то.

2011-07-22

APEX

Апекс крут, апекс силен, но что делать, если в таблице больше 10000 записей и опубликованный отчет кажет «This query returns more than 10 000 rows, please filter your data to ensure complete results»?

Есть ответ.

В режиме разработчика открываете нужную страницу, в левой колонке (Page Rendering) находите свою таблицу и щелкаете правой кнопкой. Выбираете «Edit Report Attributes». Вкладка «Pagination», параметр «Maximum Row Count». Это все, жмете «Apply» и наслаждаетесь пельмешком.

vasnake.blogspot.com/2011/03/blog-post_9909

2011-07-21

Fusion tables

А Google не спит, Google движется к мировому господству :)
Нынче у него серьезные подвижки в гео-инструментах. Лично меня поразили фьюжн-таблицы. Просто, изячно, мощно. Хотите построить свою маленькую ГИС с блекджеком и шлюхами? Вам понадобятся браузер, учетка в Google и, кровь постиндустриальной цивилизации — данные.

allowing GIS experts to worry about geospatial information science rather than geospatial information systems
mapspersecond.com/blog/2011/05/a-few-google-geo-presentations

google.com/fusiontables/DataSource?dsrcid=207308
google.com/fusiontables/public/tour
google.com/support/fusiontables/bin/answer.py?answer=1032332
sites.google.com/site/fusiontablestalks/stories

2011-07-20

django_sorting

Симпатичная получилась сортировка, зацените.

After all, what use is a data catalog if you can’t rely on the search results? While designing the page, we decided we wanted to include several ways to sort and filter results along with the standard text search. I’d used directeur’s django_sorting module before, and was highly impressed at how well it integrated with other info already in search parameters, so I decided to use it again. The only thing keeping me from seamlessly dropping in this module was our desire to use images instead of words for the “click on this to sort” link. Django_sorting was built with table headers in mind; so much so that the examples are all about table header tags with a link inside them. We had a slightly different implementation in mind.

azavea.com/blogs/labs/2011/05/using-jdango_sorting-without-text-anchors

Немного jQuery, немного спрайтов и выглядит как новенький.

2011-07-19

Exadata Database Machine

Как это работало раньше. Как это работает сейчас и будет работать еще долго. Надо ли упоминать, что в России можно по пальцам одной руки (ну, может и двух) пересчитать конторы, в которых не просто «произведена инсталляция» а реально работает «как раньше»? Но почитать про перспективы и тенденции всегда интересно.

Как это работало раньше, все хорошо знают. Транзакционные системы работали со своим массивом данных, над ним строились хранилища данных, которые обрабатывали и агрегировали по определенным правилам транзакционные данные, чтобы предоставлять к ним быстрый доступ. На основе данных из хранилища строилась динамическая аналитическая отчетность (то, что называется OLAP), на них строились специальные приложения для доступа, «витрины данных» и так далее. Каждый из уровней в этой архитектуре обладал своими серьезными ограничениями на работу с полным массивом бизнес-данных компании. Но сейчас ситуация начала стремительно и принципиально меняться
...
Создание Exadata Database Machine – практически бесконечно горизонтально масштабируемой – это революция с точки зрения доступа и обработки данных. И это колоссальный вызов таким столпам серверного рынка hi-end, как IBM и HP. Сегодня эти производители пока еще занимают доминирующее положение на рынке серверов под ERP-системы и другие бизнес-приложения, но угроза со стороны Oracle, как мне кажется, недооценена

ibusiness.ru/15768
oracle.com/us/products/database/exadata-database-machine

2011-07-18

ASP.NET MVC

Дейв из DTSAgile показывает изготовление кастомного обработчика ошибок (404 в частности) на базе MVC ASP.NET

Unlike a Web Forms app, where a url translates to a file on disk, MVC uses a set of routes to invoke methods on controller. So, when a request comes in with a bogus Url, say http://dtsams.com/bogus, the app actually throws an exception because it’s trying to instantiate BogusController, which of course is not part of the application. To catch this exception, we implement Application_Error in Global.asax
...

blog.davebouwman.com/2011/04/21/custom-404-pages-for-asp-net-mvc-3

Типа, howto.

2011-07-17

resumable HTTP upload

Прототипчик велосипеда я написал. Но ёлы-палы, ушло на это полгода! На 700 строк кода. Не, я точно не многозадачный, надо с этим уже смириться.

VCU - Vasnake web Chunked Upload (да, веб - с маленькой, зато я с большой буквы :) Работающий прототип решения задачи "resumable chunked upload over HTTP". Серверный скрипт сделан как внешний метод Zope, клиент сделан тоже на Python. До законченного решения еще пилить и пилить, но основная функция работает.
sites.google.com/site/vasnake

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

2011-07-16

SOP

С подачи terrakot проснулось любопытство к парадигмам программостроения. Читал, недолго думал :)

Feature-oriented programming, Aspect-oriented programming, Subject-oriented programming. Object-oriented programming... Это парадигмы, помогающие людям не разбрасываться, дающие ориентиры в их деятельности. Деятельности типа — разложить сложную проблему (задачу) на маленькие и не такие сложные кусочки. После чего из этих кусочков собрать действующую модель, на которой можно попробовать решить проблему (задачу).

Еще проще? Ну вот удобно людям мыслить именно такими категориями а не какими либо другими.

Но как не крути, в конечном итоге все сводится опять таки к формуле программы = структуры + алгоритмы. Можно моделировать агентов (Смитов :) с подобием свободы воли, которые кооперативно ловят баги; можно моделировать жестко детерминированных роботов — так или иначе, но надо придумать и реализовать способ и алгоритм решения конкретной задачи. Гланды тоже можно вырезать по разному. Кому как удобнее.

Кстати, что любопытно, AOP отличается от SOP практически одной деталью. В AOP пересечения определяются как внешние по отношению к программному обьекту, а в SOP как внутренние. Тут надо пару хороших примеров подобрать, для осознания, наподобие тех, что вот тут приведены: slacy.com/blog/2010/03/suject-oriented-programming-sop-vs-object-oriented-programming-oop

en.wikipedia.org/wiki/Subject-oriented_programming
mat.net.ua/mat/Virt-Algoritmi-programmi
lib.ru/CPPHB/cpptut
offline.computerra.ru/2006/633/262140
vasnake.blogspot.com/2011/06/aop

2011-07-15

Froyo

Все люди как люди, у всех уже Android 2.2 а то и 2.3. Один я как дурак, на 2.1. Потому как любезная Моторола забила болт на обновление проданных в России аппаратов. Долго я ждал, не изменится ли чего к лучшему, само, без моего вмешательства. Нет, не изменилось. И пришел день, и настал другой...

Короче, прошил я свой булыжник (или Булыжник?), теперь он как приличный, на Android 2.2.1. И даже не очень страшно было.

Контакты для меня сохранил Google, накопленное на карте памяти добро там и осталось. А все остальное — потеряно навеки, ибо возиться с бекапами я не захотел. Даже названия часто используемых программ не записал. По принципу — если очень важно, вспомню и поставлю из Маркета. Так и произошло, что важно — вспомнил и установил.

А вот как выглядит инструкция по прошивке, адаптированная для меня лично.

Запустить виртмашину с виндой, пробросить в нее USB-коннект с телом.
Установить универсальные драйвера для булыжника под винду http://4pda.ru/forum/dl/post/677449/Motorola_Mobile_Drivers_4.7.1_MotoConnect_1.1.31.exe
Установить прошивальшик — RSD Lite http://4pda.ru/forum/dl/post/870524/RSD_Lite_4.9.rar
Скачать прошивку из коллекции http://and-developers.com/sbf:milestone221 я выбрал 2.2.1 UK, хотя тут http://and-developers.com/sbf:milestone можно было и для России найти (что странно — если есть прошивка для России, почему ее нельзя поставить «правильным» способом?).

Прошить тел: сделать хард-ресет (необязательно, но некоторым помогает избежать странных глюков); подключить тел к компу «только для зарядки»; запустить RSDLite и пощелкать «Show Device», тело должно опознаться; кнопкой «...» выбрать файл прошивки и щелкануть «Start». Ждать. После ребута тела успеть подключить юсб-коннект обратно к виртмашине.
Потом еще раз сделать хард-ресет. На всякий случай.

Перед тем как делать прошивку на 2.2.1 я, по недоразумению, прошил это:
http://4pda.ru/forum/dl/post/796151/vulnerable_recovery_only_RAMDLD90_78.zip
Хуже не стало.

Как сделать хардресет (© не мой)
1. Выключить телефон
2. Нажать кнопку Х на хардверной клавиатуре и держать не отпуская
3. Нажать кнопку питания и держать до появления моторольского логотипа (буква М в белом круге)
4. Отпустить питание и продолжаю держать кнопку Х на хардверной клавиатуре до появления треугольника с восклицательным знаком внутри.С момента появления моторольского логотипа до появления треугольника проходит секунд 15
5. Отпустить кнопку Х на хардверной клавиатуре
6. Нажать громкость вверх и держать
7. Коротко нажать кнопку камеры (именно камеры, а не Х) - появляется меню синими буквами. Все - вы в меню рекавери. Кнопки можно отпустить.
8. Выбираем Wipe data/factory reset

2011-07-14

DNSSEC

Домены debian.org и debian.net теперь обеспечены защитой DNSSEC. При правильном применении, эта технология сильно снижает угрозы от спуфинга и фишинга.

To our knowledge, Debian is the first large Linux distribution who has
secured its zones using DNSSEC with a valid trust chain from the IANA
root zone” says Peter.

Usage of Domain Name Security Extenstions
—————————————–

Probably the easiest way to use DNSSEC is the usage of the unbound [1]
package as resolver. Please see wiki page [2] for details on how to
use unbound and DNSSEC.

1: http://packages.debian.org/unbound
2: http://wiki.debian.org/DNSSEC

debian-news.net/2011/05/14
dnssec.ru
en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions
ru.wikipedia.org/wiki/DNSSEC

Полезное дело (уходит писать записку сисадмину).

2011-07-13

Внезапно

Отвалился тырнет. Внезапно. Через час не поднялся, пришлось звонить в суппорт. Там, обычное дело, надо продраться через голосовое меню и подождать (это в час ночи-то) некоторое время ответа оператора. Оператор быстренько выясняет, что происходит замена оборудования и до завтра тырнету не будет. И вот мне любопытно, если у прова есть возможность рассылать SMS-ки с предложением подключить доп.услуги (и они этой возможностью пользуются), почему бы ему не рассылать SMS-ки с предупреждением о отключениях? Неужто не окупится уважительное к клиентам отношение?
Можно и по электропочте рассылать, еще проще.
UPD — Вот чудики, не поленились, прислали SMS-ку с извинениями за перебои в сервисе. Ну в натуре, дорогой провайдер, нах эти извинения. Присылай уведомления о предстоящих/случившихся отключениях.

А вот еще мне интересно, есть ли планы добавить в соцсети (Фейсбук и подобные) возможности полноценной блогоплощадки? С открытым доступом к записям? Если бы тому же Фейсбуку добавили такое, не было бы причин мне не переехать на мордокнигу. Было бы даже удобно.

2011-07-09

YAT

Или «Исчо Адын Шаблонизатор (yet another template parser)». В закладках нашлось, жалко предавать забвению:

Вниманию читателей предлагается простой в использовании обработчик шаблонов на языке PHP с поддержкой условных конструкций, циклов, подключения вложенных шаблонов и запуска сторонних модулей (функций). Время обработки шаблона составляет в среднем 20-70 мс. Для работы требуется подключение одного php-файла размером 12 Кб (около 300 строк кода). Код стабилен и применяется на нескольких работающих проектах.

webew.ru/articles/3609.webew

Хорошая штука, особенно для начинающих PHP-истов. Есть на чем поучиться. А вот что плохо — код шаблона не является валидным HTML и его нельзя ваять в визуальных редакторах. Это жаль.

Пострелять и отдохнуть

Или отдохнуть и пострелять...

Свое свободное время Вы можете целесообразно провести в помещении тира и уютном ресторане, которые находятся в бывшем историческом водоеме с 1882 г. Тир является знаменательным культурно - техническим памятником города. Если у Вас возникнет желание пострелять, не смущайтесь что у Вас нет оружейного удостоверения, достаточно предоставить гражданское удостоверение или паспорт. Можете здесь стрелять на стрелковом тренажере, также из настоящего разнокалиберного оружия, сделать экзамен на оружейное удостоверение. Посетить тир можете каждый день с 14 до 22 часов, в субботу и воскресенье с 12 до 22 часов. ул. Свагова 28, 36001 Карловы Вары, тел.: 017/322 0420.

karlovyvary.ru/articles


Про этот самый тир писал анонимный циник:

я теперь могу поделиться собственными впечатлениями от поездки "пострелять".
Карловы Вары, оно же - Карлсбад, рекламный постер заведения Вы можете увидать ниже. Это небольшой ресторан (скорее,бар) в склоне горы, в котором есть стрелковый тир на 25 метров. Заведению - мои наилучшие рекомендации: безукоризненно вежливый персонал, умный и грамотный инструктор, отличная минеральная вода. :)
Из чего я стрелял, каковы результаты и ощущения? Оговорюсь сразу: я описываю свои ощущения, и мои выводы базируются на них и только на них, не претендуя на общую оценку для указанного оружия. Точки попаданий на мишенях помечены красным. Условия стрельбы: дистанция 25 м, стандартная пистолетная мишень. Выбрано было 4 следующих ствола...

amironov.com/blogs/node/318

Хорошая штука тир. Надо бы себе такой завести.

2011-07-08

Битрикс

Цитата
Неописуемы безобразия, которые можно увидеть в коде человека, знающего мало, а делающего много.
intervolga.ru/weblog/70

Толковый человек написал статью в трех частях. Многабукаф, но статья хорошая, почитать стоит. Получилось нечто вроде психоанализа: «почему я продолжаю использовать Битрикс».
Видимо, Битрикс реально хорош как универсальное коробочное решение.

Битрикс строится с ориентацией на конечного потребителя. Он работает чтобы бизнес с ним рос и развивался.
Немного компаний, которые принципиально пользуются только бесплатным софтом, и почему веб должен быть исключением?
Бизнес выше денег ценит предсказуемость, гарантии, независимость, небольшие риски.
Мне мнение в том, что Битрикс в сайтостроении четко вписался именно в эту систему ценностей.
Разработчики ценят другое: красоту своего кода, творчество, новые технологии, возможность хвалиться.
В эту систему ценностей Битрикс попадает плохо.

intervolga.ru/weblog/70

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

2011-07-07

На что обращать внимание

Вспоминается анекдот «... первый же залетевший дятел...» (Google подсказывает, что это не анекдот а Второй Закон Вейнберга)

Институт SANS (SysAdmin, Audit, Network, Security), совместно с организацией MITRE и ведущими экспертами по компьютерной безопасности, подготовил новую редакцию рейтинга 25 самых опасных ошибок, приводящих к возникновению серьезных уязвимостей. Рейтинг построен на основе анализа уязвимостей, обнаруженных в течение 2010 года.
...
Общий рейтинг:

1. SQL Injection: Неспособность сохранения целостной структуры SQL запроса, что может привести к подстановке злоумышленником SQL запроса;
2. OS Command Injection: Неспособность корректного формирования структуры запускаемого приложения, может привести к подстановке кода злоумышленника при выполнении внешней команды, через определение некорректных значений, используемых в качестве параметров запускаемой программы;
3. Buffer Overflow: Копирование содержимого буфера без предварительной проверки размера входных данных. Неспособность удержать действия в определенных жестких рамках или в пределах заданного буфера памяти, приводит к классическим уязвимостям вида выхода за допустимые границы и переполнению буфера;
...

citforum.ru/news/26522


И мне узелочек на память о построении трехголовой гидры (APEX, Autodesk Map Server (former Topobase), Plone):
кусок конфига Apache на фронтэнде
...
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
RewriteLog "logs/rewrite.log"
RewriteLogLevel 2

BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

RewriteMap esc int:escape
RewriteEngine On

# патамучта мэпсервер и апекс используют жестко прошитые урлы и
# не все получается завернуть на корень /minsk
RewriteCond %{REQUEST_URI} ^/mapserver2012
RewriteRule ^/(.*)$ http://localhost:8090/$1 [P,L]
RewriteCond %{REQUEST_URI} ^/pls
RewriteRule ^/(.*)$ http://localhost:7778/$1 [P,L]
RewriteCond %{REQUEST_URI} ^/i/
RewriteRule ^/(.*)$ http://localhost:7778/$1 [P,L]

<Location />
# только знающим логин есть заход на сайт
 Order allow,deny
 Allow from all
 AuthType Digest
 AuthName "MVK"
 AuthDigestDomain /minsk /mapserver2012 /i
 AuthDigestProvider file
 AuthUserFile "c:\opt\Apache2.2\bin\secrets.dat"
 AuthGroupFile "c:\opt\Apache2.2\bin\groups.dat"
 Require valid-user
</Location>

<Location /minsk>
# завернуть на Plone (он хороший, все урлы внутре сам переписывает)
# site/minsk -> localhost:8080/mvk
 RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/minsk
 RewriteRule ^(.*)/minsk(.*)$ http://localhost:8080/VirtualHostBase/http/www.site.net:80/mvk/VirtualHostRoot/_vh_minsk$2 [P,L]
 ProxyPassReverse http://localhost:8080/mvk
</Location>

<Location /minsk/tab/bigtab>
# завернуть на APEX
# http://www.site.net/minsk/tab/bigtab/ -> http://oraserv/pls/apex/f?p=103:2:2646278573266379::NO:::
 RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/minsk/tab/bigtab
 RewriteRule ^(.*)/minsk/tab/bigtab(.*)$ http://localhost:7778/pls/apex$2 [P,L]
 ProxyPassReverse /pls/apex
</Location>

<Location /minsk/mapserver2012>
# завернуть на мэпсервер
# http://www.allgis.org/minsk/mapserver2012/appext/ -> http://mapserver/mapserver2012/appext/
 RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/minsk/mapserver2012
 RewriteRule ^(.*)/minsk/mapserver2012(.*)$ http://localhost:8090/mapserver2012$2 [P,L]
 RewriteCond %{REQUEST_URI} mapserver2012
 RewriteRule ^(.*)mapserver2012(.*)$ http://localhost:8090/mapserver2012$2 [P,L]
 ProxyPassReverse /mapserver2012
</Location>

Далеко не все ProxyPassReverse нужны. Но, главное, работает.

2011-07-05

win2008, update HAL

В ранних версиях WinNT было очень непросто включить поддержку многопроцессорности. Помню, приобрели мы сервер, с двумя сокетами, но по бедности — только с одним процессором. Винду поставили, понятно, с однопроцессорным HAL-ом. И потом, когда появился второй процессор, было целое приключение с реконфигурацией этой винды. Но за один вечер вроде справились.

Нынче у нас MS Windows 2008. И по недосмотру, виртуалку сделали с одним ядром. И винду туда накатили. Пока сообразили, что есть нужда в двухголовом сервере, вода утекла — понаставили софта фсякого, поздно пить боржоми переустанавливать выньдос. И возникла задача — заставить вин2008 увидеть второй процессор.
Виртмашину сконфигурили, не проблема. А что с выньдосом делать — неясно. Допрос Гугеля с пристрастием, результатов не дал. Где пишут, что в ней уж и нету однопроцессорных HAL-ов, где — что надо драйвер HAL-а с буковкой «m» как-то поставить.

Оказалось всё проще. Запускаем msconfig, переходим на вкладку «Загрузка», щелкаем кнопу «Дополнительные параметры...», в открывшемся окне включаем галку «Обнаружение HAL». ОК сколько надо и перезапуск. После старта будет видно наличные процы. Усё.

И совсем несложно.

2011-07-04

Fourth of July

1776 год, декларация независимости от Королевства ВеликоБритании. Чуть больше 200 лет Соединенным Штатам Америки. Да и Бог с ними.

Знакомьтесь, SciDB. Специальная БД для поддержки обработки огромных массивов данных. Почитал я про нее и подумал — а насколько хорошо такая БД подходит под сбор и анализ сетевого трафика? Например, от качков торрентов? Ниже цитаты, длинные, но резать рука не поднимается.

Объявлено о выходе SciDB 11.06, первого стабильного релиза проекта по созданию свободной СУБД для использования в области обработки научных данных, полученных в результате экспериментов и наблюдений. В качестве примеров областей, в которых может использоваться СУБД, называется хранение и анализ наблюдений в оптической и радио астрономии, сейсмологии, генетике, океанографии, геологии, климатических и экологических наблюдениях. Кроме научного применения SciDB может использоваться для обработки статистики работы различных сенсоров в нефтедобывающей отрасли и медицинских учреждениях, выполнения финансовой аналитики. СУБД спроектирована для анализа огромных массивов данных (тысячи петабайт) и изначально поддерживает кластеризацию, масштабируясь от одного сервера до десятков тысяч узлов. Код SciDB распространяется в рамках лицензии GPLv3.
...
SciDB непохожа на классические СУБД и в ущерб поддержке некоторых привычных возможностей оптимизирована для обработки и анализа "сырых" данных, которые интенсивно читаются, но почти не изменяются. СУБД не рассчитана на обработку транзакций в реальном времени (OLTP), не поддерживает ACID (атомарность, непротиворечивость, изоляция, долговечность) и журналирование, обеспечивая транзакции лишь на минимальном уровне.
...
Возможности SciDB сосредоточены вокруг сложной аналитики, для которой стандартная реляционная модель оказывается неэффективной - хранилище оптимизировано для единовременной записи мало структурированных данных и их последующего интенсивного чтения. Вместо добавления отдельных строк, применяется подход загрузки сразу больших порций данных. Хранение данных организовано в виде многомерных вложенных массивов, для обработки которых вместо SQL задействованы языки AQL (Array Query Language) и AFL (Array Functional Language).

citforum.ru/news/26481


Наличие декларативного языка запросов к массивам обеспечивает прозрачный доступ к терабайтам многомерных данных. В SciDB реализован язык AQL (Array Query Language), во многом похожий на язык SQL. В AQL присутствует такая же конструкция SELECT FROM WHERE, только язык оперирует с массивами, а не с множествами. Язык запросов AQL позволяет формулировать запросы, анализирующие окрестности точек. Разбиение данных по чанкам с перехлестами позволяет выполнять такие запросы параллельно без коммуникации вычислительных узлов. Один из основных операторов AQL – это REGRID, который во многом похож на популярный MapReduce. REGRID создает новый массив данных на основе исходного, пользуясь двумя функциями – доменной и агрегатной. Доменная функция выбирает подмножество массива для подсчета, а агрегатная функция подсчитывает значение элемента выходного массива. Используя REGRID, гораздо проще выбирать точки с их окрестностями, а модель хранения чанков с перехлестом позволяет вычислять выходной массив параллельно на всех узлах без коммуникаций. Рассмотрим пример использования оператора REGRID для сглаживания исходных данных гауссовским фильтром.

SELECT l FROM CCD AS C
REGRID (
SELECT l FROM CCD AS C1 WHERE C1.i BETWEEN C.i–20 AND C.i+20
AND C1.j BETWEEN C.j-20 and C.j+20,
SUM( C1.l * a*e^( (-i-b1)^2/(2*c1^2) + (-j-b2)^2/(2*c2^2)))

В этом примере первый параметр в операторе REGRID выбирает окрестность точек 40х40 вокруг входной точки массива, а второй оператор считает гауссовскую функцию на основе выбранных точек.

В реляционных базах такие запросы невозможны, даже простая выборка данных, когда пользователю надо выбрать куб данных – то, что делает доменная функция, – уже сложная задача для реляционных баз. Для этого реляционным базам требуется многомерный индекс или придется пробежаться по всем данным таблицы, в то время как в SciDB это встроенная возможность.
...
Полноценная поддержка полного цикла работы с научными данными

Как упоминалось раньше, из-за недостатков существующих СУБД большинство научных проектов, в которых встает задача анализа больших объемов данных, осуществляют обработку и анализ исходных данных вне системы управления базами данных. SciDB решает эту проблему, обеспечивая эффективное и удобное хранилище исходных данных и широкий набор инструментов для обработки и анализа данных. Версионное хранилище и учет всех преобразований данных позволяет пользователям SciDB получить точную информацию о версиях данных и о всех вычислениях, произведенных над исходными данными. Это позволяет эффективно устранять ошибки в алгоритмах переработки данных, отслеживать процесс переработки исходных данных при получении подозрительных результатов, и в точности повторять вычисления над исходными данными. При этом SciDB работает без каких-либо ограничений, как на суперкомпьютерном кластере, так и на персональном компьютере, что позволит ученым работать в одной и той же среде со своими данными. Система SciDB также отслеживает происхождение данных. При обработке сырых данных и полученных из них объектов SciDB запоминает запросы, с помощью которых были получены те или иные результаты. По требованию пользователя СУБД может проиграть процесс получения результатов из сырых данных или выдать выборку базы данных, которая требуется для получения результата.

supercomputers.ru/index id=167:scidb

2011-07-03

Echoprint

Опознание музыки. По «пальчикам».

Платформа создана и открыта публике. Осталось немногое — запустить открытый веб-сервис и пропиариться.

Многие меломаны наверняка знают о существовании таких сервисов распознавания музыки, как Shazam и Soundhound. Это настоящая находка для желающих «здесь и сейчас» узнать, что же за музыкальная композиция играет ...
Echoprint позиционируется как «полностью свободный и открытый сервис для сохранения и дальнейшей идентификации музыкальных композиций, поддерживаемый The Echo Nest»....
Echoprint построен по аналогии с существующими сервисами распознавания музыки и состоит из трех компонентов:

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

Все эти компоненты в Echoprint открыты — распространяются под Open Source-лицензиями.

nixp.ru/news

Программа Codegen http://echoprint.me/codegen вычисляет «отпечатки пальцев» скормленного ей музыкального фрагмента.
Echoprint Server http://echoprint.me/server сидит на БД и ищет в ней ответ (параметры музыкальной композиции) по заданным «пальчикам».
Дамп БД http://echoprint.me/data_download (нынче около 3.5 гигабайт) с накопленными данными музЫки.

Все это открыто и доступно. Качайте, компиляйте, пользуйтесь. Если вы сняли «пальчики» с интересующей музЫки, можете воспользоваться веб-сервисом от EchoNest. Они хостят сервер и БД.

Собственно, никто не мешает самостоятельно нарисовать аппликуху для коммуникатора/смартфона, которая снимала бы «пальчики» (с микрофона или файла) и отсылала бы их на сервис. А в ответ — показывала бы, что там в БД есть по этим «пальчикам». Просто коммунизм какой-то.

2011-07-01

cx_Oracle & LOB

Странные дела, при гуглении вопроса «как засунуть Python-ом данные в Oracle-евый CLOB?» вылезает целая куча встречных вопросов. Типа «я не могу... как мне...». При том, что в установочном пакете cx_Oracle есть примеры и тесты записи и чтения LOB-ов. Я по ним за 15 минут сделал рабочий пример, без шуму и пыли.

USERNAME = 'MKV'
PASSWORD = '1234'
TNSENTRY = 'tb12'
ARRAY_SIZE = 50
class VoraDriver:
 def __init__(self):
  self.connection = ''
  self.cursor = ''
 def setUp(self):
  self.connection = cx_Oracle.connect(USERNAME, PASSWORD, TNSENTRY)
  self.cursor = self.connection.cursor()
  self.cursor.arraysize = ARRAY_SIZE
 def __del__(self):
  del self.cursor
  del self.connection
#class VoraDriver:

class VcsvReader:
 def __init__(self, fname='t.csv'):
  self.fname = fname
  self.fileObj = open(fname, 'rb')
  self.csvReader = csv.reader(self.fileObj, \
   delimiter=';', quotechar="'", quoting=csv.QUOTE_ALL, lineterminator='\n')
 def __del__(self):
  del self.csvReader
  self.fileObj.close()
 def readrow(self):
  try:
   return self.csvReader.next()
  except:
   return None
#class VcsvReader:

def insertRecord(row, ora):
 ora.cursor.setinputsizes(coords = cx_Oracle.CLOB)
 ora.cursor.execute("""
INSERT INTO MKV.BIGTAB (
  DWG, TYPENAME, TYPENUM, LYR, EID, HAND, XDATA, COORDS, ROTANG, TXT, CLOSTY, RAD)
values (:dwg, :typename, :typenum, :layer, :id, :handle, :xdata,
  :coords,
  :angle, :text, :closed, :radius
)""", dwg = row[0], typename = row[1], typenum = row[2], layer = row[3].decode('utf-8'), \
 id = row[4], handle = row[5],\
 xdata = row[6].decode('utf-8'), coords = row[7], angle = row[8], text = row[9].decode('utf-8'),\
 closed = row[10].decode('utf-8'), radius = row[11])
 #~ ora.connection.commit()
#def insertRecord(row, ora):

def doWork(inp):
 ora = VoraDriver()
 ora.setUp()
 rdr = VcsvReader(inp)
 csvRowNum = 0
 while True:
  row = rdr.readrow()
  csvRowNum += 1
  if row == None: break
  if csvRowNum < 3:
   t = map(lambda a: (sys.stdout.write('[%s], ' % a)), row)
   print
   continue
  insertRecord(row, ora)
...

Я не понял, народ, какие проблемы? За полчаса 100000 записей инсертнулось не жужжа. Самый большой CLOB был почти 33 килобайта.

А по сути, несмотря на всю крутоту Oracle, текстовую строку длиннее 4000 байт в текстовое поле не запихать. Приходится использовать LOB-ы. Что не так удобно, как хочется.


У меня тут было про блобы + MS SQL
 

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) Klaipeda (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) купи/продай (9) Photo (8) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)