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

2012-12-30

CultureInfo

Как сменить локаль в Silverlight на время исполнения некоего кода?
Вот примерно так:

// change locale for decimal separator's sake
var currCulture = System.Globalization.CultureInfo.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
if(sr != null) res = sr.ToJson();
System.Threading.Thread.CurrentThread.CurrentCulture = currCulture;
return res;

 
Некоторые спросят — а зачем это надо? Ответ: в основном затем, чтобы мог сработать код, который сделан без учета того простого факта, что в разных культурах по разному записывают данные. Например дату и время. Или, в моем случае, десятичный разделитель.

Напоролся я тут на грабли, впрочем достаточно типичные. В некоей библиотеке есть тип данных с кодеком ToJson/FromJson. Писали библиотеку, понятное дело, заклятые друзья американцы (возможно, руками индусов). В условиях системных настроек на русскую локаль, дробное число функцией ToJson записывается через запятую, например 1,5
А функция FromJson такой записи не понимает. Ей подавай точку: 1.5
Обычное дело, чего там. При этом никаких настроек на локаль, типа object.ToString(cultureinfo) и в помине нет.

Поэтому, перед вызовом ToJson приходится выставлять американскую локаль и после восстанавливать предыдущую.

original post http://vasnake.blogspot.com/2012/12/cultureinfo.html

2012-12-27

Web maps platform

Намедни посетила меня идея. На первый взгляд вполне занятная. Суть ее в том, чтобы и на елку влезть и жопу не ободрать, ничего нового.
Если серьезно, то хочется воспользоваться преимуществами веб-карт заточенных под ArcGIS и при этом не платить за ArcGIS сервер. Ведь вьюверы, типа «ArcGIS Viewer for Silverlight» или «ArcGIS Viewer for Flex» обладают развесистой функциональностью и при этом свободно доступны для использования и расширения. Конечно, OpenLayers тоже хорош, но по количеству функций таки уступает поделкам Esri. Одна беда, вьюверы от Esri заточены на использование ArcGIS сервера, в частности, WFS/WFS-T не поддерживают.

Так вот, идея, которая меня посетила, формулируется приблизительно так:
а что если написать веб-сервис, который будет брать данные из PostGIS (для начала) и отдавать их в формате ArcGIS REST API? Тогда можно будет использовать такой сервис в веб-картах от Esri и при этом не платить за ArcGIS сервер (от 30 000 долларов между прочим). Пример подобного сервиса http://featureserver.org/

Можно, конечно, и по другому: дописать модуль к, скажем, «ArcGIS Viewer for Silverlight», который реализует что-то вроде FeatureLayer поверх сервиса WFS-T. Кстати, есть даже пример такого подхода
для «ArcGIS Viewer for Flex».

Про идею всё. Будем посмотреть, как пойдет.

Дальше идет перечень интересных материалов, найденных мною в процессе первичного сбора информации. Коллекция интересных сцылок, тысызыть.

Building an Android and iOS mobile mapping application using the ArcGIS API for Flex http://www.adobe.com/devnet/flash-builder/articles/mobile-mapping-app-arcgis.html
На примере показано, как построить аппликуху типа веб-карта для Android и iOS. Еще один кирпич в огород Silverlight и мешок навоза в огород Flash/Flex.

О, чуть не забыл. Важный но не всем очевидный момент для картостроителей — есть два способа использовать данные некоего слоя в веб-карте. Я имею в виду данные на уровне отдельных обьектов — точек, линий, полигонов. Первый и наиболее распространенный — это вытаскивание из таблицы БД нужной выборки и оформление ее в формат, понимаемый OpenLayers, например GeoJSON. Файл в этом формате подтаскивается аяксом на страницу с картой и яваскриптом рисуется слой (расставляются маркеры). Так работают Google Maps, Yandex Maps и прочие вроде
Такой способ вполне годится для того, что называется «пометки».

Второй, менее распространенный но более мощный способ заключается в подключении к веб-карте слоя типа WFS/WFS-T. FeatureLayer другими словами. Для этого нужен некий полноценный карт-сервер вроде
или специализированный сервис вроде
И, как всегда, есть промежуточные решения, например
находящийся на пересечении этих двух подходов.

Далее.

GeoREST is a web-centric framework for distributing geospatial data. It allows RESTful feature-based access to spatial data sources, including full editing capabilities, through a MapGuide server or directly via FDO.
Набор библиотек на C++ и минисервер HTTP для обеспечения REST протокола. Читает кучу форматов данных и выдает основные веб-форматы геоданных.

Google Vector Layers allows you to easily add one or more vector layers from a number of different geo web services to a Google Maps API based application.
и проект близнец
Яваскрипт, используя гуглокарты как подложку, позволяет выводить на нее векторные данные из разных источников.

Integrating PostGIS in Web Applications
Слайдовая презентация по связке PostGIS, OpenLayers, GeoServer, MapServer.

Creating GeoJSON Feature Collections with JSON and PostGIS functions
Демонстрация, как простым SQL запросом вынуть из PostGIS данные в формате GeoJSON.

OpenLayers demo using BDGA data - WFS-T and more
Яваскрипт, полнофункциональный пример редактирования геоданных — можно рисовать дороги и заполнять атрибутивные формочки.

OpenLayers WFS-T Using a GeoServer Hosted PostGIS Layer
Показано пошагово, как создать собственную аппликуху — веб-карту с функциями редактирования геоданных.

This workshop will introduce you to the OpenGeo Suite, a complete web mapping solution.
Семинар по построению комплексного решения для веб-карт из компонент: PostGIS, GeoServer, GeoWebCache, OpenLayers, GeoExt.

Ффух. Если все это одолеть, то становится понятен уровень текущего развития веб-картографии в рамках концепции «сделай сам и сервер и клиента».
А еще есть полновесные решения типа ArcGIS, менее полновесные типа MapGuide http://mapguide.osgeo.org/. А есть легковесные, типа Google Maps API и Yandex Maps API.

original post http://vasnake.blogspot.com/2012/12/web-maps-platform.html

2012-12-26

Git рулит

Как быстро отыскать ту ревизию кода, на которой падают тесты?
Есть команда bisect в git. Как ее применение выглядит на примере:

I learned about git bisect from this Stack Overflow poll: What are your favorite git features or tricks? I thought it was so cool that I wanted to share an example.
After upgrading from Django 1.2.3 to Django 1.3, something broke on the website I was working on. To figure out what was wrong, I used git bisect to find the Django revision that introduced the relevant change. I cloned the Django github repo and pip install -e'd it into my virtualenv. Then I used git bisect as follows:
  • Start git bisect
    $ git bisect start 
    $ git bisect bad 1.3 
    $ git bisect good 1.2.3 
    Bisecting: a merge base must be tested
      [618153bd3b047529f6cfb50917c88270f30e8ea8] Fixed #10843: the textile tests now pass against the latest textile library.
    Note: 1.3 and 1.2.3 are git tags in the Django git repo. Commit SHA1 hashes can be used instead.
  • Start the development server in another terminal. Load the webpage in the browser. The page loads without error.
    [04/Aug/2011 19:13:20] "GET /my/webpage/ HTTP/1.1" 200 16279
  • Mark the revision good
    $ git bisect good 
    Bisecting: 774 revisions left to test after this (roughly 10 steps)
    [39591cddccffdf3b66cfaaa60b95257daa4ef8c5] Fixed #14781 - Setting "CACHE_PREFIX" should be "CACHE_KEY_PREFIX". Thanks to adamv for report and patch.
  • Reload the page. This time it throws a 500 error.
    [04/Aug/2011 19:13:59] "GET /my/webpage/ HTTP/1.1" 500 118861
  • Mark the revision bad
    $ git bisect bad 
    Bisecting: 387 revisions left to test after this (roughly 9 steps)
    [6630bd24f45c7967c49b90adf82c63dd7d93e6f7] Fixed #13863 -- Corrected decimal separator in Swedish format module. Thanks, Ulf Urdén.
  • Reload
… и так далее ...
After marking the last commit, git bisect shows the first bad commit as 622bf3b2199e5e7015edccb00f1ab694291ca121
    $ git bisect good
    622bf3b2199e5e7015edccb00f1ab694291ca121 is the first bad commit
    commit 622bf3b2199e5e7015edccb00f1ab694291ca121
    Author: kmtracey <kmtracey>
    Date:   Sat Sep 11 01:39:16 2010 +0000
    
        Fixed #11905: Raise an error on model form creation if a non-existent field was listed in fields. Thanks ben and copelco.
        
        
        git-svn-id: http://code.djangoproject.com/svn/django/trunk@13739 bcc190cf-cafb-0310-a4f2-bffc1f526a37
    
    :040000 040000 87ec1601b970938b55382a5aa66db74716552c3d 2d418dfe8dd9f67fea408e022aa13838086ce33b M      django
    :040000 040000 054e6f42b3b467e47f295f8fda6cdc8a7f2c054c 52ba5265ba9d6458f23c8cb4a8a9bdcdbfc1f590 M      tests</kmtracey>
Note: checking for failed unit tests instead of checking for a 500 error in the browser is another (probably better) way to test with git bisect.
Note 2: The problem with my code was that I was adding extra fields to a model formset in the wrong way. I was trying to use add_fields on a base model formset instead of creating a custom Form with the extra field and specifying it in the factory. This Stack Overflow answer solved the problem for me.

Отличная штука, однозначно.

original post http://vasnake.blogspot.com/2012/12/git.html

GeographicLib

Занятно устроен Web. Простым прощелкиванием ссылок выходишь на полезное. Чаще на ненужное, правда.
Походу, смотрел блог тематический, про ArcGIS Silverlight API, наткнулся на преобразование координат в UTM, которое кроме американцев никому напрочь не надо:

Wanted to show UTM coordinates (plus zone and hemisphere) while moving the mouse on a Web Mercator map.
Searched and found this very useful class and used it in the MouseMove event of the map.
With Esri Silverlight API it took only a few minutes to do! Used WGS84 ellipsoid.


Но зато там сцылка на интересный класс GeoUTMConverter, через которую я вышел на библиотеку geographiclib. Очень полезную — и координаты конвертирует и расстояния считает и азимуты/направления и кучу всего еще:

GeographicLib is a small set of C++ classes for performing conversions between geographic, UTM, UPS, MGRS, geocentric, and local cartesian coordinates, for gravity (e.g., EGM2008), geoid height and geomagnetic field (e.g., WMM2010) calculations, and for solving geodesic problems. The emphasis is on returning accurate results with errors close to round-off (about 5–15 nanometers). New accurate algorithms for Geodesics on the ellipsoid and Transverse Mercator projection have been developed for this library.


И, что немаловажно, либой можно пользоваться из Python, Javascript и др.

Поиграть можно тут
Зацените кривизну меркаторской проекции :)

original post http://vasnake.blogspot.com/2012/12/geographiclib.html

2012-12-24

Пока не поздно

Слушайте сюда, рассказываю как получить банковскую карту ака кредитку, которая одновременно будет проездным билетом на всех видах транспорта. Это про карты от «Банк Москвы» и функцию БОПС, в завершение вот этого.

У меня есть зарплатная дебетовка, в которую был вшит проездной на метро. За этот проездной ежемесячно брали комиссию 10 рублей. Пару месяцев назад, внезапно, комиссия возросла до 40 рублей. Я поинтересовался в интернетах — типа, чо за дела? Выяснилось, что теперь помимо метро, будут по карте пускать в автобус, троллейбус, трамвай. Прекрасно, подумал я. И попробовал залезть в автобус. Фигу.

Пока суть да дело, до местного отделения банка я добрался только недавно. Зашел, спросил — че-как? Говорят, езжай в отделение на Трубной, там тебе все сделают.
Сегодня заехал в отделение на Трубной, обратился в окошко №1, показал паспорт, отдал карту, не успел шмыгнуть носом как получил карту обратно со словами - «всё, теперь будет работать». Куда девушка сунула карточку, я заметить не успел.

Все понятно? Не задавайте вопросов, не заходите в местные отделения, сразу идите в отделение на Трубной, окно №1, прямо напротив входной двери. При себе иметь банковскую карточку и паспорт. Минута — и увас универсальный проездной.

Возможно, скоро эту лавочку прикроют, ибо центральная служба поддержки упорно настаивает на том, чтобы клиент писал заявление на перевыпуск карты. Поэтому не ждите, идите на Трубную.

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

original post http://vasnake.blogspot.com/2012/12/blog-post_24.html

186614-6

Законопроект № 186614-6
О мерах воздействия на лиц, причастных к нарушению прав граждан Российской Федерации

Такой вой поднялся вокруг закона имени Димы Яковлева, что стало очень трудно понять, а что, собственно говоря, происходит?

Если не полениться и прочесть текст закона
то становится понятным следующее (далее доморощенный разбор текста закона).

Читать это очень трудно, в основном из-за оборотов типа

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

Составляющих приблизительно четверть текста, умещающегося на 9 страницах при печати в два интервала. Наверное поэтому никто и не читает. Но если приловчиться скипать эдакое, то текст закона очень прост: поводы для внесения в бан-лист, что можно сделать с забанеными, какие некоммерческие организации следует прикрыть, детей не отдадим, кто еще кроме США попадает под раздачу.

Далее. Статья четвертая закона, вмещающаяся на одну страницу, явно и безусловно запрещает усыновление/удочерение российских детей любому гражданину США. Безусловно, то есть вообще. С этим всё ясно и вопросов нет — с вступлением закона в силу ни одного российского ребенка усыновить в США легально не дадут. И никаких «если» и «может быть».

Остальной текст на восьми страницах посвящен определению негодных граждан США, ведению списка этих граждан и запрету некоммерческих организаций.
Вот тут мне хочется разобрать текст закона поподробнее.

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

наделенных государственными полномочиями и способствовавших своими действиями (бездействием) освобождению от ответственности лиц, совершивших преступления в отношении граждан Российской Федерации или причастных к их совершению
или
вынесших необоснованные и несправедливые приговоры в отношении граждан Российской Федерации;
ж) осуществляющих необоснованное юридическое преследование граждан Российской Федерации;
з) принявших необоснованные решения, нарушившие права и законные интересы граждан и организаций Российской Федерации;

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

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

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

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

Выводы. Закон я прочел и он мне очень не понравился.

Закон странный — это сразу три закона: про черный список негодных граждан США и примкнувших к ним государств; про некоммерческие организации вредящие интересам РФ; и про усыновление российских детей.
Первые два — неправомочны без внесения правок, обеспечивающих принятие решения судебным порядком.
Про детей всё правомочно, но непонятно — дети то при чём? Прям как в анекдоте, цитирую: бить будем жидов и велосипедистов — конец цитаты. Чем РФ может навредить США, запретив усыновлять российских детей? Или мы не хотим навредить США? А чего мы хотим? Что плохого в том, что граждане США берут в семьи российских детей (при условии выполнения определенных процедур, гарантирующих детям свободу и безопасность)?

Общее впечатление — бред нездорового сознания. Закон не правильный и не логичный ни в одной из своих частей.
Хотя задумка про некоммерческие политические организации спонсируемые США — хорошая. А черный список это вообще не закон — у нас виза нужна, чтобы вьехать из США — вот и не давайте ее. А отобрать у негодного активы и недвижимость возможно в правовом государстве только через суд.
У нас получается неправовое государство.

original post http://vasnake.blogspot.com/2012/12/186614-6.html

2012-12-21

И опять screencast

Опять весь день делал скринкаст. Надоело, зато польза есть: я убедился, что багу в Картобонус победил и отработал технологию рендеринга субтитров в видео.
В общих чертах, скринкаст делается как тут и описано. Но есть поправки.

В новой версии MediaCoder не обязательно перегонять AVI в AVI, чтобы отрендерить субтитры. У меня все получилось при перегоне OGV в AVI. Это раз.

Рендер сабов в MediaCoder сам разбивает длинные строки на несколько и помещает их в кадр, нет нужды заниматься этим вручную. Это два. И три - по умолчанию, рендер ставит размер буков в 30% от размера кадра, а это многовато, на мой вкус.

И последнее. Я пока не разобрался, как заставить JW Player начинать играть поток сразу вне зависимости от режима плеера. А то он MP4 играет не дожидаясь пока весь ролик загрузится, но только если плеер в режиме HTML5. Если использует Flash, то плеер ждет пока весь ролик загрузится.
А если использовать формат FLV, то без Flash кина вообще не будет.


А, чуть не забыл. Про «БМ не торт» - я тут по электропочте вопрос заслал в их суппорт, так после обмена парой писем мне сообщили, типа, «позвони по номеру … добавочный ...». Я позвонил, набираю добавочный — станция сбрасывает звонок. Пару раз попробовал и похерил это дело. Написал в ответ как есть — не могу дозвониться. Не прошло и часу, как в почту упало предложение: дождитесь ответа оператора и закажите добавочный ему.
Ага, щаз. Делать мне больше нечего. Опять же вопрос у меня закрыт а номер для звонка не бесплатный а тариф у меня на звонки не безлимитный.
Вот такой теперь у Банка Москвы суппорт. Не торт.

original post http://vasnake.blogspot.com/2012/12/screencast_21.html

2012-12-20

БМ или нет в жизни счастья

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

Другой пример. Я как-то жаловался, что Альфа Банк за обслуживание непомерных денег хочет, полторы тыщи рублей в год Наташка заплатила за три счета и две дебетовые карточки. Сравнивал с БМ. А нынче у БМ получается не меньше. За обслуживание кредитки рублей 600-700 в год, за смс уведомления 50 рублей в месяц, за функцию проездного 40 рублей в месяц — сколько получается? Не меньше тех же полутора тыщ в год а то и больше.

Какие все жадные стали.

А тут еще бага неуловимая в Картобонусе. Вчера поймал, исправил, проверил — все работает как положено. Сегодня тестирую — опять та же бага проявляется.
Чудеса.

original post http://vasnake.blogspot.com/2012/12/blog-post_20.html

2012-12-19

Pinball

Прикольную историю сегодня прочел, про игру Pinball в MS Windows.

Two of us tried to debug the program to figure out what was going on, but given that this was code written several years earlier by an outside company, and that nobody at Microsoft ever understood how the code worked (much less still understood it), and that most of the code was completely uncommented, we simply couldn't figure out why the collision detector was not working. Heck, we couldn't even find the collision detector!


Смысл в том, что автор занимался переносом виндового добра на 64 бита, пинболл тоже был в списке. Но поскольку по простому перекомпилировать не получилось, пришлось заниматься отладкой. И тут ребята конкретно очумели, ибо код, написанный «сторонней компанией по контракту» разобрать и понять было невозможно. Потыркались и бросили, ибо планы, сроки... сами знаете.

Вот так из-за говнокодеров в 64-битной MS Windows нету игры Pinball.


Кстати, есть для Python пакет sh, бывший pbs. Упрощает работу с subprocess.

original post http://vasnake.blogspot.com/2012/12/pinball.html

2012-12-18

Python web framework

А вот еще один приятный фреймворк для веб-разработки на Python: web2py.
Без излишней монструозности, есть встроенная админка, интеграция с БД, хороший набор высокоуровневых абстракций без потери низкоуровневых плюшек — посмотрите на примеры:

Мне особенно понравился пример №10, где генерируется тикет для админа, путем автоматического отлова ошибки в коде.

А какие широкие возможности для деплоя:
от встроенного веб-сервера, через CGI, FCGI, WSGI и со всеми остановками до GAE.

Обязательно надо будет испытать.

original post http://vasnake.blogspot.com/2012/12/python-web-framework.html

Screencast

Сегодня понадобилось не просто сделать screencast а еще добавить в него комментарии в виде субтитров. Само по себе это не трудно: скринкаст можно сделать количеством способов чуть менее чем 100 500 1000, субтитры тоже не рокет саенс а просто текстовый файл. Но чтобы показывать ролик через веб (не с Ютуба), субтитры должны быть отрендерены прямо в кадры ролика.

Текущая технология такова.

На хост машину (Linux) ставлю рекордер Recordmydesktop (есть в пакетах Debian).
В виртмашине (MS Windows в virtualbox) прокручиваю действо, записывая рекордером.
Получившийся ролик перегоняю в AVI пакетом MediaCoder.
Готовлю файл субтитров в Subtitle Edit, при этом удобно воспользоваться интегрированным окном просмотра видео, для чего нужен еще и VLC.
Вклеиваю субтитры в видеоряд, перегоняя AVI в AVI (это важно!) MediaCoder-ом, использовав его вкладку Subtitle.
Получившийся ролик кодирую в MP4 с подходящим битрейтом (1000 — 1500 Kbps) все тем же MediaCoder.
Файл MP4 публикую с помощью JW Player.

Как-то непросто, зато работает.

Как нетрудно заметить, это реклама MediaCoder.

original post http://vasnake.blogspot.com/2012/12/screencast.html

2012-12-14

Лето, ах лето

Покатаемся немного вместе с windmax-ом
Настроение улучшает на раз.
Это было здесь http://goo.gl/maps/R2s0r

Это мне только кажется или он правда прыгал с волны чтобы потом искупаться?

А наши предки зачем-то завоевали Сибирь (С) не помню чей.

original post http://vasnake.blogspot.com/2012/12/blog-post_14.html

2012-12-13

Cache-Control во Flask

Нашел полезняшку для Flask-разработки: как обеспечить выдачу свежей версии некоей страницы, без кеширования в браузере. Обычно это не нужно, но лично у меня одна из страниц — это содержимое XML файла и URL заканчивается на «.xml». Видимо mime-type провоцирует браузер на кеширование именно этой страницы, потому что другие работают как положено. Пришлось искать способ отключить кеширование для этого URL.
Нашел:

from flask import make_response
from functools import update_wrapper

def nocache(f):
    def new_func(*args, **kwargs):
        resp = make_response(f(*args, **kwargs))
        resp.cache_control.no_cache = True
        return resp
    return update_wrapper(new_func, f)
@app.route('/nocache')
@nocache
def something_not_cached():
    return render_template(...)

Проверил, работает.

original post http://vasnake.blogspot.com/2012/12/cache-control-flask.html

2012-12-12

The Debian Administrator's Handbook

В прошлом году собирали средства, в этом году книгу выпустили на свободу, в следующем году...? Наверное, выйдет редация для Debian Wheezy.
А пока приветствуются добровольцы для перевода книги на разные языки. Некоторые переводы уже сделаны (испанский, к примеру). Русский даже не начат, что печально.

Translate the book
This is certainly the best way to help. By contributing a new translation or completing/improving an existing one, you’re helping to make the book available to even more people than today.
Download the Git repository:$ git clone git://anonscm.debian.org/debian-handbook/debian-handbook.git
Now have a look at the README.translators file to learn more about the work it involves. Join the mailing list dedicated to coordination with translators, don’t hesitate to ask questions there.


Каждый раз как я попадаю на эту страницу, борюсь с желанием ввязаться в работу по переводу. Но пока успешно себя останавливаю, вспоминая сколько времени у меня потребовал перевод книги по Zope. А эта тоже не маленькая, почти 500 страниц. Опять же, какой смысл в русскоязычной книге по обслуживанию и ремонту наглухо нерусской системы? Сисадмин Дебиана просто обязан знать английский язык. Есть, конечно, одна причина для перевода — популяризация Linux в общем и Дебиана в частности среди неспециалистов. А оно нам надо? Вон, ситуация с ламерьем ковыряющим MS Windows очень показательна в этом плане.

Не, не буду переводить.

original post http://vasnake.blogspot.com/2012/12/the-debian-administrators-handbook.html

2012-12-11

Прошивка Android Ice Cream Sandwich (ICS) 4.0.4 в Samsung GT-N7000 Galaxy Note

не ходите дети в Африку гулять

все хорошо, что хорошо кончается

Не так давно мне достался плафон ака еНот ака Samsung GT-N7000 Galaxy Note с родной прошивкой ICS 4.0.3. Прекрасный аппарат с замечательным экраном. Также можно похвалить конструкцию корпуса и батарею – корпус не пускает внутрь пыль и вообще крепок, а батарея может протянуть до 10 суток. Но ведь никогда не бывает все хорошо, обязательно найдется бяка. В моем случае бякой стал «дядя Жора», который приходил, как я успел заметить, в момент подключения к зарядке и мог уйти а мог и не уйти. Рестарт тела не помогал. Методом тыка выяснилось, что ОС как-то цепляла клавиатуру (перепробовал три клавы) и та высаживала батарею за 7 часов. Больше всего выбешивала нестабильность — то неделю от батареи, то 7 часов. Несколько раз попытавшись решить проблему с помощью гомеопатии, я принял трудное решение — сменить прошивку.

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

Итак, цель - убрать жор батареи (подозрение на кривую прошивку, которая гадит в клавиатуру); снизить эл.потребление вообще, убрав лишние программы (киес отличается аппетитом).
Задачи — прошить Андроид ICS 4.0.4; получить рутовый доступ; провести тюнинг с помощью рута.
В себя верю, препятствий не замечаю, вперде!

Забегая вперед: все файлы, упомянутые во здесь, я собрал в кучку и выложил в виде торрента:
Info Hash: 9759a6c1856ed44954b4ee4ab00e22d908a660f8
ибо из всего времени (два вечера), что я потратил на достижение своей цели, большая часть ушла на хождение по битым сцылкам и выискивание файлов с помощью гугеля. Отдельный вопрос — а почему энтузиасты прошивочного дела так запустили ситуацию с файлами? Почему никто из них не пользуется торрентами?
Кстати, mediafire - хороший файлообменник, hotfile — нехороший.

Подготовка, сбор информации.
Что мы (я и мои «умные железяки») имеем.
Текущая прошивка Samsung GT-N7000 Galaxy Note:
4.0.3
pda n7000xxlq3
phone n7000xxlpt
csc n7000xxlp7

С вопросом - «как на это поставить более другую свежую прошивку наиболее простым способом» я обратился к своему домашнему эксперту — Наташке. Она в ответ заслала мне пачку сцылок на 4pda.ru Я полез читать и скоро стал худо-бедно понимать, что куда пихать и в какой последовательности. Позже выяснилось страшное.
Как бы так сказать, чтобы никого не обидеть... С сожалением признаюсь: 4pda.ru сакс, в то время как forum.xda-developers.com — рулез. Во всяком случае для тех, кто хочет поправить/обновить прошивку своего плафона/смартфона и не получить кирпич. Мои основные претензии к 4пда: информация малоподробна, разбросана по разным веткам и постам форума; важная информация может просто не попасться на глаза или ее тупо нет; ссылки на файлы часто битые, используемые хостинги файлов вызывают желание применить устрашение 3-ей степени к тем, кто их придумал и использует. На форуме xda-developers ситуация значительно лучше, рекомендую.

Суммируя - начал я собирать информацию с 4пда, но очень скоро оказался на хда-девелоперс, информацией и файлами с которого и воспользовался. Кстати, там первым делом меня предупредили, что айс-крим-сендвич для енота в стоковой версии обладает ужасной багой – при вайпе/флеше и прочих операциях стирания/переформатирования очень легко получить кирпич. Это обусловлено комбинацией дефекта в чипе и использющего этот дефект кода в ядре андроида. И тут же мне предложили патченое, безопасное ядро да еще с уже включенным рутом. После чего все сомнения в рулезности хда-девелоперс отпали навсегда.

На 4пда больше ни ногой.

Первоначальные источники информации:
Samsung GT-N7000 Galaxy Note - Прошивка ICS (OS 4.x.x) http://4pda.ru/forum/index.php?showtopic=339770&st=1710#entry14265071
В этой теме обсуждаются официальные прошивки Jelly Bean (JB 4.1.x) http://4pda.ru/forum/index.php?showtopic=391720
Полезные советы: [STOCK ROMS] N7000 All stock ROMs + install + Root guide All at 1place,Latest 4.0.4 http://forum.xda-developers.com/showthread.php?t=1424997
Don't wipe anything from stock ICS recovery
Don't factory reset/Hard reset on stock ICS.
Don't flash any Wipe version of ICS ROM

Немного теории. Возможные способы прошивки (цитата):
Обновить через CWM (CWM Manager) - расширенный рековери, можно шить всё, что угодно, прошивки, ядра, модемы, отдельные патчи. Одно но, что бы можно было прошить через рековери, прошивка должна бы в виде zip архива специальной конструкции, tar через CWM не прошьёшь. Но часто встречаются деокседированные варианты стока почти без изменений в zip варианте. (Всегда без жёлтого треугольника)
Обновить через Odin - (Возможность получить жёлтый треугольник) прошивка чего угодно напрямую через сервисный прошивальщик, если вы прошиваете через Odin и не хотите получить жёлтый треугольник - важно убедится, что вы устанавливаете оффициальную сервисную прошивку (редко, но в виде tar или PDA бывают кастомы). Если файл, который вы шьёте через Odin не оффициальная сервисная или официальная сервисная но поврежденная (повреждён файл, не докачана до конца), то при прошивке получите жёлтый треугольник и запустится счётчик кастомов.

В моем варианте сначала была прошита «официальная» самсунговская прошивка через Один (спецпрограмма авторства Самсунга) а потом два патча прошиты через CWM (видимо это ClockWorkMode — такой режим работы тела).

На руках имеется MS Windows 7 х64 на лаптопе. Под это дело я выискал и скачал набор файлов, который мне советовали на форумах, подсовывая битые сцылки. Как же я, эээ, замучался, выискивая и выкачивая файло. Чтобы другие не мучались, весь этот набор я выложил в виде торрента — люди, не мучайтесь, качайте свободно.

Процесс пошел.

Сперва я, на всякий случай, запустил тоталкоммандер от имени администратора и действия с файлами выполнял уже из него. Чуть не забыл, тел перед началом надо зарядить до упора, во избежание неприятностей.

Установил на лаптоп драйвера для смартфона — SAMSUNG_USB_Driver_for_Mobile_Phones.exe Оказалось, что 64-битная версия там есть, файл usb_drivers_GalaxyS_x64.zip оказался не нужен.

Распаковал и запустил флешер Odin_v1.87.zip Более новые версии использовать не рискнул, ибо про них точно не известно, поддерживают они GT-N7000 или нет.

Распаковал саму прошивку Samsung-Updates.com-GT-N7000_SER_1_20121101112257_828wnvtwbn.zip
Мало того, что скачать ее с хотфайлс было нелегко, прошивка оказалась с мерзким сюрпризом (тянул отсюда http://samsung-updates.com/device/?id=GT-N7000&region=SER по наводке с богомерзкого 4пда), эх, лучше бы я взял прошивку с хда-девелоперс. Хотя, есть мнение, что такую прошивку с сюрпризом можно получить и одобренным Самсунгом способом, просто обновив прошивку через меню настроек тела.
В чем сюрприз? Эта прошивка лочит сетевые сервисы сим карты (network lock). Разлочка была отдельным приключением, о чем ниже.

Собственно прошивка через Один:
в окне Один-а кнопкой PDA выбрать файл прошивки %какеготам%.tar.md5;
выключить тел, запустить его в режиме загрузчика зажав кнопки Vol down + Home + Power, и потом Vol up, тут нужна определенная сноровка, на экране тела станет видно текст «Downloading..»;
USB шнурком подключить тел к лаптопу;
в Один загорится желтым гнездо порта: ID com port;
щелкнуть кнопку Start;
ждать..., тел потом уйдет в ребут, потом будет долго грузиться — ждать;
когда процесс прошивки Одином будет завершен, гнездо порта станет зеленым, над ним появится надпись Pass (ID:COM section will turn Green & will show Pass in the box above ID:COM section);
отключить устройство от лаптопа.

Перезапустить тел. О ужас, на экран вылезло такое сообщение
enter network lock control key
Это и есть сюрприз с залочкой. Теперь ни позвонить, ни принять звонок. Я нажал кнопу dismiss и спокойно продолжил запуск тела. Как эту бяку убрать вообще — написано ниже.

Пройти мастер настройки. Потом я залез в Settings — About, где тел кажет
baseband version n7000xxlrk
build number imm76d.xxlru
это полезная информация, особенно в части LRK, LRU.

Уже кое что: на данном этапе у меня стоковая прошивка 4.0.4 Ice Cream Sandwich с залоченными сервисами SIM карты. Спасибо, что не кирпич.

Продолжаю по плану. Получение root доступа к телу.

Спасибо добрым людям с хда-девелоперс, можно легко и непридужденно, одним махом, получить Root + safe kernel + advance recovery. По информации отсюда http://forum.xda-developers.com/showthread.php?t=1329360
скачать патч - тут важно было выбрать правильный файл, исходя из версии уже установленного ядра, обозначаемого серией символов. У меня ядро вроде N7000 XXLRU, поэтому патч я скачал XXLRU-VDI http://www.mediafire.com/file/s4a139538ams3y3/PhilZ-cwm6-XXLRU-VDI-3.71-signed.zip

зип-файл положить (любым доступным способом) на SD карту тела, в корень;
выключить тел, запустить режим рекавери (volume up+home+power);
из меню выбрать "apply update from external storage" - курсор перемещается кнопками громкости, выбор кнопкой вкл/выкл;
выбрать положенный на карту зип-файл, пойдет патчевание;
как закончит патчевать, выбрать из меню пункт reboot.

Теперь у меня безопасное ядро (вайпом/хардресетом кирпич не сделать) и рутовый доступ. Продолжаю по плану, осталось чуть-чуть.

Разлочка и тюнингование.

Установить из Google Play или из приложенных к пакету файлов APK следующие аппликухи
busybox by stephen (stericson);
Ktool by Hellcat;
Galaxy_S Unlock by Helroz.
У меня появился соблазн сразу воспользоваться программой «Galaxy_S Unlock» для разлочки, и я ей воспользовался. Не повторяйте моей ошибки и не теряйте времени, для успешной разлочки надо сперва поставить патч — см.ниже.

Перед разлочкой настоятельно советуют сделать резервную копию EFS folder с помощью Ktools. Эта копия может спасти ваш тел, если что-то пойдет не так. Я сделал.

Как убрать network lock.
Вероятно, легче этого не допустить, тщательно выбрав ядро для прошивки, но это не мой случай, поэтому:
положить на SD карту, в корень, патч CriskeloRom-Fix-Network-Lock-InstallCWM.zip, он меняет библиотеку для Radio Interface Layer - libsec-ril.so (о, сколько я искал этот патч, про то можно отдельную историю рассказать);
установить патч через меню recovery, тем же способом, что ставил патч на предыдущем шаге;
ребутнуть тел.

Патч есть, теперь собственно разлочка.
Выключить тел;
вынуть симку, включить тел;
запустить программу Galaxy_S Unlock и в ней (там на экране все будет нарисовано, не перепутаешь):
сделать резервную копию (шаг 1);
пропатчить (шаг 2);
выключить тел, вставить симку, запустить тел;
проверить работу сети, например, в настройках зайти в меню выбора сотовых операторов – разлочилось?
Если нет – попробовать более тщательно выполнить инструкцию, как у меня и было – раза с третьего только все срослось и блокировка пропала.
После разлочки следует выполнить шаг 3 в программе разлочки. А я в добавок сделал еще одну копию EFS folder с помощью Ktools. Ну так, на всякий случай.

Ура, свежая прошивка, безопасное ядро, рут и тел даже работает.

Ну и завершающий этап — запрет ненужных программ, типа Kies, чтобы батарею не жрали.
Из Google Play поставить App Quarantine ROOT/FREEZE by ramdroid и внести в карантин всякое ненужное. Предварительно пришлось включить режим USB debug в настройках и понять, что для внесения в карантин надо поставить галочку напротив названия ненужной программы и потом сверху справа нажать изображение замка навесного.

У меня все получилось, чего и вам желаю.
Через неделю-другую станет ясно, лучше стало или нет. Но, по любому, я узнал много нового и это хорошо.

Все файлы, упомянутые в статье, я выложил в виде торрента:
Источники

original post http://vasnake.blogspot.com/2012/12/android-ice-cream-sandwich-ics-404.html

2012-12-10

Big Data + ArcGIS

В ArcGIS 10.1 есть много новых и очень интересных особенностей. Похоже, ESRI движется в правильном направлении.
Вот, скажем, практически готовый пример распределенной обработки фичекласса с использованием техники map-reduce.

* Export a FeatureClass to an HDFS folder
* Register that folder as a Hive table
* Run command line Hive queries
* Execute Hive queries from ArcPy and show the results in ArcMap
* Execute a MapReduce Job as a GP Tool
* Import an HDFS Folder (result of MapReduce Job) as a FeatureClass


в статье приведен пошаговый, со слайдами, процесс любви к родине конвертации и обсчета данных. В ходе обработки используются (помимо ArcGIS):
* Hive is a data warehouse system for Hadoop that facilitates easy data summarization, ad-hoc queries, and the analysis of large datasets stored in Hadoop compatible file systems.
Для «пощупать» предлагают виртмашины с предустановленным и настроенным Apache Hadoop (CDH).

Мне вообще нравятся темы высоких нагрузок и бигдата, а тут, помимо этого, зацепило еще тем, что можно сделать даже ArcGIS GP Tool по схеме map-reduce поверх распределенных данных. Раньше о таком инструментарии и не мечтали, а тут — вот он, бери-не-жалко.

original post http://vasnake.blogspot.com/2012/12/big-data-arcgis.html

2012-12-08

Flask request data

Python (Flask): How to get whole raw post body?

To use this, all you need to do is to hook the calculating stream in before the request starts consuming data

В качестве предисловия я использовал две фразы, которые можно считать ключом к теме поста. Фразы отсюда
Кроме фраз, я оттуда использовал и примеры кода, скомбинировав их в то решение, что подошло для меня.

Как-то так получилось (by design), что внутренняя механика фреймворка Flask (werkzeug) не дает простого способа получить данные, засланные в приложение, в нетронутом виде. Зачем нужно такой доступ получать — тема отдельная. Иногда надо приходится. Читая документацию невнимательно, можно сделать вывод, что эти данные можно взять из request.data, но это не так. Вернее, не совсем так. Если в запросе был указан Content-type понимаемый Flask-ом, то данные будут распарсены и request.data будет пустым. А данные лягут в словарь request.form — поди собери обратно.

Короче, в тех редких, но вполне возможных ситуациях, когда Content-type заставляет Flask парсить тело запроса, а парсить его нельзя ибо данные нужны целиком — спасает чтение из потока request.environ['wsgi.input']. Но учтите, это тоже не просто. Во первых, надо точно знать длину потока; во вторых, поток надо успеть прочесть до того, как произойдет обращение ко всяким request.data, request.form и тому подобное (подробнее см.в доках).

Еще короче — смотрите пример:

from flask import Flask, url_for, render_template, request
app = Flask(__name__)
...
@app.route('/kvsproxy', methods=['GET', 'POST'])
def kvsproxyPage():
...
    if request.method == 'POST':
        rawdata = getWsgiInput()
…
def getWsgiInput():
    if not request.method == 'POST': return ''
    env = request.environ
    stream = env['wsgi.input']
    cl = env.get('CONTENT_LENGTH', '0')
    cl = 0 if cl == '' else int(cl)
    if cl == 0: return ''
    return stream.read(cl)

Вполне работает.

А причина, по которой надо так извращаться — ошибка, допущенная мною при написании клиента, который засылает такие запросы. Клиент не делает urlencode на строку данных, хотя в заголовке пишет, что данные закодированы. И поправлять этого клиента уже поздно, думать проверять надо было раньше.

original post http://vasnake.blogspot.com/2012/12/flask-request-data.html

2012-12-06

ddos

И такой бизнес тоже есть — чужой трафик чистить от мусора

DDoS-атаках рассказывает создатель Highload Lab и сети фильтрации трафика QRATOR Александр Лямин
...
Стоимость атаки сильно зависит от того, как она реализуется. Исполнителем может выступать студент, который сам что-то написал и готов поработать за пиво, а может и организованная группировка.
Есть типы атак, которые могут стоить, по слухам, полмиллиона рублей и больше
...
Мы классифицируем атаки очень просто: атаки на приложения, атаки на канальную полосу (скорость измеряется в гигабитах/с), атаки на сетевую инфраструктуру (скорость измеряется в пакетах в секунду), атаки на транспортный уровень (стек TCP/IP).
Самая мякотка — это уровень приложения. Почему? Потому, что у атак уровня приложения плечо максимально. Плечо атаки — это отношение ресурсов, необходимых на стороне атакующих, к ресурсам, необходимым на стороне приложения (на стороне защищающихся).
...
Что такое атаки на сетевом уровне? Просто залить полосой в 56 Гбит — это clustery sort называется. Это последнее средство, когда ничего уже не помогает. Такие атаки очень дороги и чрезвычайно разрушительны не только для самой жертвы, но и для всех, кто «стоит рядом». Как правило, они не могут продолжаться дольше двух-трех суток, так как начинают доставлять проблемы даже источникам атаки — сетям, с которых она производится.
...
Когда к нам приходит клиент, мы объясняем, что ему необходимо перевести DNS на наш IP-адрес (которой мы ему выделяем). Также, чтобы избежать атаки на прямой IP клиента, который уже засвечен в сети, необходимо его как минимум поменять, а как максимум — поменять этот IP и дополнительно скрыть с помощью настроек iptables или файервола все IP-адреса, кроме наших.
Как только перестраивается DNS, начинается фильтрация. А дальше происходит самое интересное — обучение фильтров. Обычно мы задаем для себя планку: после двух часов под атакой ресурс клиента должен начать работать. И в целом ее выдерживаем.
...
Мы долго пытались разобраться с TCP/IP-стеком, смотрели на Free BSD и Linux и в итоге пришли к выводу, что стек в его теперешнем состоянии нам совершенно не нравится. У нас есть своя облегченная версия TCP/IP, которая очень хорошо себя ведет на текущих короткоживущих протоколах, быстрых TCP-соединениях.
...
От атак базового уровня защититься можно (в смысле — самостоятельно?). Для этого нужно обязательно иметь выделенный хостинг, а также возможность скомпилировать модули и свою версию веб-сервера. Статей на эту тему написано много, и я, наверное, отошлю вас к своей статье 2008 года (найти ее можно в блоге на highloadlab.ru). Это одна из первых статей, в которой доступно изложено, что и как следует сделать. Также рекомендую ознакомиться с презентацией «Практическое руководство по выживанию в DDoS», которую мы показывали на Highload++ в 2009 году.
...
Трафик — это одна из наших главных статей расходов. Его тратится не просто много, а очень много.
...
Для предприятий малого бизнеса у нас есть специальный тариф — 5000 рублей. Но это не значит, что по более низким расценкам мы работаем хуже. На всех наших тарифах используется одна и та же система, качество фильтрации везде одинаково.
...
Мы подумали, что если бы нам удалось создать систему, построение и функционирование которой обходилось бы дешевле, чем проведение атаки, способной убить эту систему, то мы бы ликвидировали экономическое плечо атаки. Атаковать стало бы невыгодно. Исходя из этого, мы и строили идеологию развития нашего решения.


Одно слово — молодцы!

original post http://vasnake.blogspot.com/2012/12/ddos.html

2012-12-05

wifi

Небольшой практикум на тему «как получить доступ к чужой сети wifi».

возможная скорость перебора. Она ограничена скоростью обработки роутером WPS-запросов: одни точки доступа будут выдавать результат каждую секунду, другие — каждые десять секунд. Основное время при этом затрачивается на расчет открытого ключа по алгоритму Диффи-Хеллмана, он должен быть сгенерирован перед шагом M3. Затраченное на это время можно уменьшить, выбрав на стороне клиента простой секретный ключ, который в дальнейшем упростит расчеты других ключей. Практика показывает, что для успешного результата обычно достаточно перебрать лишь половину всех вариантов, и в среднем брутфорс занимает всего от четырех до десяти часов.


Речь идет о использовании слабости метода WPS, применяемого для спаривания узлов.

большинство современных роутеров поддерживают механизм WPS (Wi-Fi Protected Setup). С его помощью пользователь за считанные секунды может настроить безопасную беспроводную сеть, вообще не забивая себе голову тем, что «где-то еще нужно включить шифрование и прописать WPA-ключ». Ввел в системе восьмизначный символьный PIN, который написан на роутере, – и готово!


Но даже если вынести WPS за скобки, статья остается полезной, ибо на практике показано как применять архиполезные тулзы, типа aircrack-ng (http://www.aircrack-ng.org/doku.php).

Предупрежден, значит вооружен.

original post http://vasnake.blogspot.com/2012/12/wifi.html

2012-12-04

Положительный имидж

Ходил сегодня на почту, за гидрошмотками, купленными через ebay. От Британии до России посылки шли два дня, от таможни до меня еще месяц. Позор ужасный.
А к вечеру на глаза попалось это:

На днях меня занесло в местное отделение Почты России, днем ранее шел сильный снегопад, дороги в Москве занесло, дворники с утра чистили крыши, расчищали дорожки к подъездам. На улице стемнело и я промахнулся мимо входа в отделение почты, так как три ступеньки были занесены снегом так, что подняться по ним без риска для жизни, не представлялось возможным. Никак. Дополняло чудесную картину отсутствие иллюминации. Я грешным делом подумал, что вход находится дальше, там тоже были занесенные ступеньки, но по ним можно было вскарабкаться хоть как-то. Там подсказали, что почта в соседней двери. Преодолеваю ступеньки, держусь за поручень — чувствую себя как старик, под ногами разъезжается смятый снег.

Темный предбаник, в котором вообще нет света. Закрытая дверь, дергаю ее и попадаю в царство света — все залито лампочками, тепло, стоят столы и внутри находятся какие-то люди! Раница в ощущениях настолько разительная, что в первый момент это воспринимается как чудо — внутри есть жизнь!


Уж не знаю, в какое почтовое отделение ходил Муртазин, но его описание с фотографической точностью рисует мой личный поход к почтарям. Один-в-один.
Такое оформление входа в почту, это часть нового имиджа ПР? Или просто случайность?

Архив блога

Ярлыки

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)