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

2013-11-29

loxodrome

A ‘rhumb line’ (or loxodrome) is a path of constant bearing, which crosses all meridians at the same angle.
Sailors used to (and sometimes still) navigate along rhumb lines since it is easier to follow a constant compass bearing than to be continually adjusting the bearing, as is needed to follow a great circle. Rhumb lines are straight lines on a Mercator Projection map (also helpful for navigation).
Rhumb lines are generally longer than great-circle (orthodrome) routes. For instance, London to New York is 4% longer along a rhumb line than along a great circle – important for aviation fuel, but not particularly to sailing vessels. New York to Beijing – close to the most extreme example possible (though not sailable!) – is 30% longer along a rhumb line.


Превосходный сборник формул, вместе с реализацией на Javascript, для вычисления дистанции, азимута и прочей широта/долгота геометрии. При рассчетах Земля считается круглой (не эллипс).
Очень удобно, если надо что-то GPS-ное посчитать прям сразу — все калькуляторы есть прямо на странице, с подробнейшими разьяснениями, как и что считается.
Мастхэв, однозначно.

А это применение формулы haversine (дистанция по круглой земле) в запросе к базе MySQL:
SELECT id,
    ( 6371 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) )
        AS distance
    FROM markers
    HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
Запрос отбирает 20 ближайших маркеров, находящихся в 25-ти километровой зоне для заданных (в градусах) lat, lng.
Просто, не правда ли?




original post http://vasnake.blogspot.com/2013/11/loxodrome.html

2013-11-28

Был JBoss Application Server, стал WildFly

Наши корреспонденты сообщают:

Компания Red Hat представила новый открытый проект WildFly, призванный заменить собой Java EE сервер приложений JBoss и сосредоточить развитие на интенсивном продвижении новых технологий. Кроме смены бренда и переосмысления задач, новый продукт будет отличаться поддержкой Java EE 7, модульной структурой, ориентацией на высокую производительность, увеличением гибкости и реализацией современных методов разработки.
...
Анонсированное изменение затрагивает только JBoss Application Server, который переводится под бренд WildFly
WildFly будет сфокусирован на быстром внедрении инноваций и продвижении новых технологий. В качестве основной области использования WildFly рассматривается разработка и быстрое внедрение прототипов.


JBoss устарел, да здравствует WildFly! В нем даже WebSockets будет, во как. Лучше поздно чем никогда, точно.


РедХатовцы таки молодцы. Умудряются и деньги зарабатывать и ОпенСорц развивать.

original post http://vasnake.blogspot.com/2013/11/jboss-application-server-wildfly.html

2013-11-27

Nvidia GeForce 560

Если у вас вдруг стала виснуть MS Windows и, так ужвышло, видеокарта типа Nvidia GeForce 560, то, возможно, проблема вызвана свежим обновлением винды. Во всяком случае, лично у меня так и было. Винда накатила обновление, а в нем свежий драйвер для GeForce. И началось: пропадания курсора, рывки и, как итог — глухой зависон, тремя пальцами не поднять. Причем виснет два-три раза в день, в 2D. Целый день игрулек в режиме 3D не выявил никаких отклонений от нормы.

Это что ж надо было сделать с драйвером, что стал глючить старый добрый 2D?!

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


original post http://vasnake.blogspot.com/2013/11/nvidia-geforce-560.html

2013-11-26

И так тоже бывает

Намедни испытал разрыв шаблона.
Обычное дело, покупаешь что-нибудь на Ebay, ждешь, пока наши таможня с почтой управятся, через месяц-полтора получаешь свою посылку, отстояв не менее получаса в очереди в почтовом отделении. Никогда иначе не было, норма.
И тут, внезапно, в среду меня будят звонком из FedEx, говорят — к обеду привезем посылку, встречайте и из дома не отлучайтесь. Внезапность тут в том, что в среду посылка уже у меня, причем с доставкой на дом, а отправлена она была из солнечной Англии в понедельник. Вечером. То есть, что же получается? Посылка ехала фактически одни сутки?

Ну ладно, это все-таки FedEx, не слоупочта. Самое смешное, что такая сверхскоростная доставка не стоила мне (формально) ни копейки. Я просто закупился на 300 фунтов в http://stores.ebay.co.uk/surfdomeshop/
А доставку они сделали бесплатно. Да еще и лишнюю футболку по распиздяйству в пакет добавили, и не простую а золотую дорогую, 35-фунтовую.

Это реклама, да.


original post http://vasnake.blogspot.com/2013/11/blog-post_21.html

2013-11-25

Idiocracy

Намедни отсмотрел фильму Idiocracy (2006).
Ожидаемо, фильма сильно понравилась. Компьютерная графика так себе, да и в сюжете есть натяжки, но это напрочь перекрывается иллюстративностью идеи. А идея очень простая — с ростом технического прогресса, эволюция человечества повернула вспять. Отбор перестал быть естественным.
Настоятельно рекомендую засмотреть — смешно и поучительно, как и полагается сказке.

Довольно давно я видел еще один фильм от Mike Judge, Office Space (1999). Тоже весьма неплохо.

Короче, теперь вы знаете, что засмотреть в выходные.


original post http://vasnake.blogspot.com/2013/11/idiocracy.html

2013-11-22

Whole thing in memory

Since the traditional means of retrieving the data from a relational database is not fast enough and 11 million records is not such a big set after all, I decided to put the whole thing in memory

Я просто тащусь от того, как этот парень решает задачки. Профи в BigData.

Вот еще пример.
Дано: 11 миллионов записей неких данных, в виде CSV файла.
Надо: сделать веб-карту на которой пользователи могут видеть плотность распределения этих данных, в зависимости от заданных параметров.

Решение: засунуть все данные в BigMemory, заодно написав параллельный загрузчик; написать веб REST интерфейс к этим данным, реализующий ArcGIS Rest JSON interface for an ArcGISDynamicLayer; написать рендерер, рисующий растровую картинку по отобранным данным. За кадром осталось решение выборки и агрегации (нужна же плотность?) данных.
Ну и развернуть приложение: на Амазоне поднять три инстанса, на двух — хранилище данных, на одном веб-сервис (и, видимо, веб-карта).

И все это писано на Java, исходники лежат на Github.

Since the traditional means of retrieving the data from a relational database is not fast enough and 11 million records is not such a big set after all, I decided to put the whole thing in memory. BTW, this is a meme that has been trending for while now, and the most vocal about it is SAP HANA.
I decided to use Terracotta's BigMemory to hold the data in the "off-heap" and use its EHCache query capability to aggregate and fetch the data.  Now despite the name, I used the cache "eternal" capabilities to forever hold the data elements.




original post http://vasnake.blogspot.com/2013/11/whole-thing-in-memory.html

2013-11-21

Коды для управления переадресацией в GSM

Сколько лет уж пользуюсь сотовой связью — люди столько не живут, а ни разу не настраивал переадресацию.
Тем не менее, есть информация (не проверял!), я просто оставлю ее здесь ©.

Переадресация вызова при неответе в течение определённого времени:
*#61# запросить текущие настройки у оператора
##61# отключить переадресацию
**61*номер#через сколько секунд# включить переадресацию на указанный номер, если вызов не принят в течение указанного количества секунд (кратного 5, максимум 30)

Переадресация вызова при недоступности абонента:
*#62# запросить текущие настройки у оператора
#62# отключить переадресацию
**62*номер# включить переадресацию на указанный номер

Переадресация вызова, если номер занят:
*#67# запросить текущие настройки у оператора
##67# отключить переадресацию
**67*номер# включить переадресацию на указанный номер

Безусловная переадресация всех входящих вызовов:
*#21# запросить текущие настройки у оператора
##21# отключить переадресацию
**21*номер# включить переадресацию на указанный номер

Отключить всю переадресацию:
##002#

На самом деле, можно это всё ещё настраивать отдельно по типам входящих вызовов, еcли кто-то этим пользуется.. Для этого надо после команды (но до времени) вписать тип звонка:
*11 – голосовые
*13 – факс
*25 – данные
*89 – вторая линия
Переадресация факсовых вызовов на номер 1234567 после 30 секунд неответа будет выглядеть так: **61*1234567*13*30#


Может, кому-то и пригодится.


original post http://vasnake.blogspot.com/2013/11/gsm.html

2013-11-20

Patching

Что такое patching, почему это плохо и как сделать хорошо — статья про Python и тестирование кода:

Python has the power to override any attribute on any module or class, but just because you can doesn't mean you should. This is true in regular code, but just as true of unittests. Many testing libraries (mock, Twisted's trial, py.test) provide facilities for overriding some piece of global state; you can also do so manually. Occasionally these facilities prove invaluable, but often they are used unnecessarily. Better alternatives are available.
...
As I've demonstrated, patching can often be avoided by restructuring code to be more testable. The same Python features that make patching so easy also make avoiding patching just as easy. Given the choice, you should avoid changing global state when testing individual components


Если в двух словах — патчинг это замена какого либо обьекта/глобальной переменной на свою версию. Чтобы обойтись без патчинга, достаточно локализовать неудачный код и слегка отрефакторить его, добавив параметризацию.

Читайте статью, там все на пальцах, с примерами разьяснено.


original post http://vasnake.blogspot.com/2013/11/patching.html

2013-11-19

Multithreaded Python Tutorial

Меньше чем 300 строк кода содержит программа на Python, демонстрирующая многопоточную реализацию игры Nibbles.
К программе прилагается статья, подробно рассказывающая что, зачем и как — про многопоточность в Python.

Okay, let’s write a Python program that demonstrates how to use threads and locks. This program is based off of my “Snake” clone in Chapter 6 of my Making Games with Python & Pygame book. Except instead of a worm running around eating apples, we’ll just have the worm running around the screen. And instead of just one worm, we will have multiple worms. Each worm will be controlled by a separate thread. The shared variable will have the data structure that represents which places on the screen (called “cells” in this program) are occupied by a worm. A worm cannot move forward to occupy a cell if another worm is already there. We will use locks to ensure that the worms don’t occupy the same cell as another worm.


Всем, кто интересуется параллельностью и многопоточностью в Python — читать немедленно.

И не забывайте про GIL, зарубающий полезность многопоточных Python программ на многоядерных процессорах.


original post http://vasnake.blogspot.com/2013/11/multithreaded-python-tutorial.html

2013-11-18

The Ashley Book of Knots

Очень полезная книга: The Ashley Book of Knots by Clifford Warren Ashley

Книга узлов Эшли. Наиболее популярный на Западе справочник посвященный узлам. Изданный в 1944 году в Нью-Йорке, переиздавался 12 раз.

Кто-то носит его повсюду с собой называя - наша "Библия узлов". В нем собраны и проиллюстрированы способы завязывания более 7000 разнообразных узлов. Будет особенно интересна и полезна альпинистам, рыболовам, туристам, яхтсменам, любителям макраме.

Жанр: Справочники. Учебная литература.
Год: 1993
Автор: Clifford W. Ashley
Страниц: 636, множество иллюстраций, схем
Язык: Английский
Формат: Djvu/Rar
Размер: 20.6 Mb


Довольно легко находится гуглением.


original post http://vasnake.blogspot.com/2013/11/the-ashley-book-of-knots.html

2013-11-15

Больше языков

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

Программисты очень привязываются к своим любимым языкам, а я не хочу оскорбить ничьи чувства, поэтому я объясню свою позицию, используя гипотетический язык с названием Блаб.

Блаб попадает в середину континуума абстрактности. Это не самый мощный язык, но он мощнее, чем Cobol или машинный язык.
И на самом деле, наш гипотетический программист на Блабе не будет использовать ни Cobol, ни машинный код. Для машинных кодов есть компиляторы. Что же касается Cobol'а, наш программист не знает, как на этом языке вообще что-то можно сделать. В Cobol'е даже нет некой возможности X, присутствующей в Блабе.

Когда наш гипотетический Блаб-программист смотрит вниз на континуум мощности языков, он знает, что смотрит вниз. Менее мощные, чем Блаб, языки явно менее мощны, так как в них нет некой особенности, к которой привык программист. Но когда он смотрит в другом направлении, вверх, он не осознает, что смотрит вверх. То, что он видит, — это просто "странные" языки. Возможно, он считает их одинаковыми с Блабом по мощности, но со всяческими сложными штучками. Блаба для нашего программиста вполне достаточно, так как он думает на Блабе.

Когда мы поменяем точку обзора программиста, используя любой язык программирования выше по континууму мощности, мы обнаружим, что теперь программист смотрит на Блаб сверху вниз. "Как же можно что-то сделать, используя Блаб? В нем отсутствует даже конструкция Y!"

Используя метод индукции, приходишь к выводу, что только те программисты, которые понимают самый мощный язык, в состоянии осознать полную картину разницы в мощности между различными языками (видимо, именно это имел ввиду Эрик Реймонд, когда говорил о том, что Lisp сделает вас лучше как программиста). Следуя парадоксу Блаба, нельзя доверять мнению других: другие программисты довольны тем языком, который используют, потому что этот язык определяет способ их программистского мышления.


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

Так, немедленно, не откладывая — писать на LISP.
А еще я когда-то давно хотел попробовать написать что-нибудь на Prolog. Тоже тема.



original post http://vasnake.blogspot.com/2013/11/blog-post_12.html

2013-11-14

Ремонт паруса

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

Надо ремонтировать.

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

Женя, спасибо!



original post http://vasnake.blogspot.com/2013/11/blog-post_12.html

2013-11-13

Фордак от Дашер

Дашер нас научит, как правильно делать фордак. Смотрим во всех подробностях:

1 Подготовка к повороту.


2 Вход в поворот, работа рук, отцепление трапеции.


3 Вход в поворот, работа ног.


4 Начало поворота, втянуться на доску, карвить, закрыть парус.


5 Вход в поворот, закрытие паруса, карвинг доски.


6 Поворот, смена ног, работа с парусом.


7 Выход из поворота. Перемена ног.


8 Выход из поворота. Переброс паруса.


9 Выход из поворота. Перебрось парус и отвисни.

И не забудьте сперва научиться глиссировать в петлях, не как попало, а как следует.


original post vasnake.blogspot.com/2013/11/blog-post_13.html

2013-11-12

PCL

PCL в данном случае — это Practical Common Lisp.

Это перевод на русский язык замечательной книги Practical Common Lisp.

Если вы считаете, что наибольшее удовольствие в программировании доставляют большие результаты, достигнутые с помощью кода, просто и прозрачно выражающего ваши желания, тогда программирование на Common Lisp будет самым приятным из того, что вы можете делать на компьютере. Используя Common Lisp, вы достигнете б́ольших результатов за меньшее время по сравнению с другими языками программирования.
Серьёзное заявление. Могу ли я доказать это? Да, но не на нескольких страницах введения. Вам придётся познакомиться с Lisp поближе и убедиться в этом самим — так что всё-таки придётся читать книгу до конца. А сейчас, позвольте мне начать с нескольких смешных эпизодов, из истории моего пути к языку Lisp. В следующей главе я объясню выгоды, которые вы получите от изучения Common Lisp.
Я – один из немногих Lisp-хакеров во втором поколении. Мой отец начал заниматься компьютерами с написания на ассемблере операционной системы для машины, которую он использовал для сбора данных при подготовке его докторской диссертации по физике. После работы с компьютерами в разных физических лабораториях, к 80-м отец полностью оставил физику и стал работать в большой фармацевтической компании.
У этой компании был проект по созданию программы, моделирующей производственные процессы на химических заводах (если вы увеличите эту емкость, как это повлияет на годовой результат?). Старая команда писала всё на языке FORTRAN, использовала половину бюджета и почти всё отведённое время, но не могла продемонстрировать никаких результатов. Это было в 80-х, пик бума искусственного интеллекта (ИИ), Lisp так и витал в воздухе. Так что мой папа — в то время еще не поклонник языка Lisp — пошёл в университет Карнеги-Меллона, чтобы пообщаться с людьми, работавшими над тем, что впоследствии стало Common Lisp, и узнать, сможет ли Lisp стать подходящим языком для его проекта.
Ребята из университета показали ему кое-что из своих разработок, и это его убедило. Отец, в свою очередь, убедил своих боссов позволить ему взять провальный проект и сделать его на Lisp. Год спустя, используя остатки бюджета, команда отца представила работающее приложение, обладающее возможностями, на реализацию которых старая команда уже и не надеялась. Мой папа объясняет, что причина успеха – в решении использовать Lisp.
Однако, это всего лишь первый эпизод. Может быть, мой отец ошибался в причине своего успеха. Или, может быть, Lisp был лучше других языков лишь для того времени. В настоящее время мы имеем кучу новых языков программирования, многие из которых переняли часть достоинств Lisp. Действительно ли я считаю, что использование языка Lisp может дать вам те же выгоды, что и моему отцу в 80-х? Читайте дальше.



Что тут добавить, Лисп это Лисп. Легенда.

original post http://vasnake.blogspot.com/2013/11/pcl.html

2013-11-11

Фордак от Гая Крибба

Гай Крибб нас научит, как правильно делать фордак. Смотрим:

подготовка.


вход в поворот.


перестановка ног.


переброс паруса.

выход из поворота.

Честно скопипижжено из http://windsurf.smugmug.com/



original post http://vasnake.blogspot.com/2013/11/blog-post_6.html

2013-11-08

Pro secrets. Start to finish 9/9

Секреты профессионалов. От старта до финиша. Ролик 9/9.
Слаломисты (широкие доски, формула, огромные камберные паруса) рассказывают и показывают — как правильно поворачивать на слаломной дистанции; как не только сделать максимально быстрый поворот, но и заставить соперников делать «плохой» поворот.

Честно скопипижжено с http://windsurf.smugmug.com/Windsurfing



original post http://vasnake.blogspot.com/2013/11/pro-secrets-start-to-finish-99.html

2013-11-07

Pro secrets. Start to finish 8/9

Секреты профессионалов. От старта до финиша. Ролик 8/9.
Слаломисты (широкие доски, формула, огромные камберные паруса) рассказывают и показывают — как использовать изменения погоды, окружающей среды - тактика гонок.
Честно скопипижжено с http://windsurf.smugmug.com/Windsurfing


original post http://vasnake.blogspot.com/2013/11/pro-secrets-start-to-finish-89.html

2013-11-06

Headless Selenium WebDriver

Тестирование веб-приложений в браузере, автомагически.

Example of capturing a screenshot from Selenium WebDriver in Python:
#!/usr/bin/env python
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.ubuntu.com/')
browser.save_screenshot('screenie.png')
browser.quit()

А как быть, если надо в консоли?

The problem is that my Jenkins CI server has no display, so I must run my GUI tests in a headless X-server.
A colleague pointed me to PyVirtualDisplay, a Python wrapper for Xvfb and Xephyr
#!/usr/bin/env python
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
# now Firefox will run in a virtual display. 
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()
display.stop()




original post http://vasnake.blogspot.com/2013/11/headless-selenium-webdriver.html

2013-11-05

ashx include

Есть в мире MS Windows такой веб-сервер, называется IIS. Для этого веб-сервера довольно удобно писать обработчики запросов, используя файлы типа ashx (generic handler). Несмотря на все усилия Микрософт, для написания таких обработчиков нет необходимости в Visual Studio. Хотя .Net используется, куда ж без него.

Типичный файл (load.ashx) выглядит примерно так:
<%@ WebHandler Language="C#" Class="load" Debug="true" %>

using System;
using System.IO;
using System.Web;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.Web.Caching;

public class load: IHttpHandler {
    // Override the ProcessRequest method.
    public void ProcessRequest(HttpContext context) {
        var saveid = String.Empty;
        // only for GET method
        saveid = context.Request.QueryString["map"];
        var path =
            VUtils.storeconfFromJson(
                VUtils.loadConfig(
                    VUtils.storageConfigFilename(context))
            ).fileStoragePath;
        var fname = String.Format(@"{1}/map.{0}.js", saveid, path);
        context.Response.ContentType = "application/json";
        context.Response.ContentEncoding = Encoding.UTF8;
        context.Response.Write(string.Format("{{file: '{0}'}}", fname));
    }

    // Override the IsReusable property.
    public bool IsReusable {
        get { return false; }
    }
}
Из этого файла, для краткости, вырезан вспомогательный код, в частности класса «VUtils».

И вот тут я подхожу к главному. Как бы сделать так, чтобы повторно используемый код вынести в отдельный файл?
Хочу аналог директивы «include», как в C/C++.

Ответ неожиданно прост, хотя в интернетах и не находится: используй «CompilerOptions», Люк.

Пример. Выношу библиотеку кода в отдельный файл lib.cs:
using System;
using System.IO;
using System.Web;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.Web.Caching;

public class VUtils {

    public class VStoreConfig {
        public string fileStoragePath { get; set; }
    }

    public static string computeSHA1Hash(string val) {
        if(val.Equals("")) { return ""; }
        byte[] data = System.Text.Encoding.UTF8.GetBytes(val);
        System.Security.Cryptography.SHA1 sha = new System.Security.Cryptography.SHA1Managed();
        byte[] res = sha.ComputeHash(data);
        return System.BitConverter.ToString(res).Replace("-", "").ToUpper();
    }

    public static string storageConfigFilename(HttpContext context) {
        return context.Server.MapPath("~/store.config");
    }

    private static object _lockobject = new object();

    public static string loadConfig(string fileName) {
        string config = string.Empty;
        lock(_lockobject) {
            if(System.IO.File.Exists(fileName)) {
                using(System.IO.StreamReader file = new System.IO.StreamReader(fileName)) {
                    config = file.ReadToEnd();
                }
            }
        }
        return config;
    }

    public static VStoreConfig storeconfFromJson(string confJson) {
        var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
        var cnf = jss.Deserialize<VStoreConfig>(confJson);
        return cnf;
    }
}

В обработчике запроса load.ashx меняю заголовок:
<%@ WebHandler Language="C#" Class="load" Debug="true" CodeBehind="lib.cs" CompilerOptions="c:\Inetpub\wwwroot\miniportal\store\lib.cs" %>

...
public class load: IHttpHandler {
... 
        var path =
            VUtils.storeconfFromJson(
                VUtils.loadConfig(
                    VUtils.storageConfigFilename(context))
            ).fileStoragePath;
...
И этого достаточно. В коде класса «load» я могу пользоваться классами из библиотеки lib.cs.

Для завершения картины, вот полный код другого обработчика, save.ashx:
<%@ WebHandler Language="C#" Class="store" Debug="true" CodeBehind="lib.cs" CompilerOptions="c:\Inetpub\wwwroot\miniportal\store\lib.cs" %>

using System;
using System.IO;
using System.Web;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.Web.Caching;

public class store: IHttpHandler {

    // Override the ProcessRequest method.
    public void ProcessRequest(HttpContext context) {
        var jsonString = String.Empty;
        // only for POST method
        jsonString = context.Request.Form["map"];
        if(jsonString == null) { jsonString = ""; }
        var hash = VUtils.computeSHA1Hash(jsonString);

        var path =
            VUtils.storeconfFromJson(
                VUtils.loadConfig(
                    VUtils.storageConfigFilename(context))
            ).fileStoragePath;
        var fname = String.Format(@"{1}/map.{0}.js", hash, path);

        System.IO.File.WriteAllText(fname, jsonString);

        context.Response.ContentType = "application/json";
        context.Response.ContentEncoding = Encoding.UTF8;
        context.Response.Write(string.Format("{{sha1: '{0}'}}", hash));
    }

    // Override the IsReusable property.
    public bool IsReusable {
        get { return false; }
    }
}
Задача решена, принцип DRY не нарушен.

Пока неясно, как избавиться от указания полного пути к файлам в директиве CompilerOptions. Но пока это не сильно мешает.


original post http://vasnake.blogspot.com/2013/10/ashx-include.html

2013-11-04

Pidgin

Хоть и на буржуйском, но все равно, замечательное руководство по освоению не менее замечательной программы IM — Pidgin.



original post http://vasnake.blogspot.com/2013/10/pidgin.html

2013-11-01

Лохуин

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

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


Отметим, что еще в 1961 году вышел в печать роман Клиффорда Саймака «Что может быть проще времени» (Time is the Simplest Thing).
В этом романе описано состояние «простых людей», боящихся и ненавидящих новые поколения, обладающие способностями, которых нет у этих обычных людей.

- Завтра ночью - канун Дня всех святых, - продолжал Блэйн. -
Вот тогда-то все и должно начаться.
Он увидел, как люди напряглись, и быстро заговорил дальше:
- Не знаю, как ему это удалось, но тем или иным способом
Финн создал среди паранормальных людей что-то вроде небольшого
подполья. Те, конечно, не подозревают, кто за всем стоит. Для них
это псевдопатриотическое движение, своеобразный протест. Не
слишком большого размаха, без особенных успехов. Но успехи Финну
и не нужны. Все, что ему нужно, - это создать еще парочку
прецедентов, продемонстрировать еще несколько "ужасных"
примеров. Это его метод: с помощью примеров будить ярость у толпы.
И это подполье, действует через паранормальных подростков,
готовит к этой ночи несколько паракинетических демонстраций.
Удобный случай, сказали им, показать, что такое паракинетика.
Удобный случай свести кое-какие счеты. Могу себе представить,
сколько накопилось неоплаченных счетов.
Он сделал паузу и взглянул на окаменевшие от страха лица.
- Вы должны представлять, как подействуют дюжина - всего
дюжина - подобных демонстраций на воображение обывателей всего
земного шара, если Финн преподнесет их должным образом.
- Их будет не дюжина, - тихо произнес Эндрюс. - По всему
миру их может быть, сотня, а может, даже несколько тысяч. И на
следующее утро нас сметут с лица земли.
- А как тебе стало это известно? - взволнованно наклонился к
ему Картер. - Такое Финн мог рассказать только своему сообщнику.
- Я обменялся с ним разумами, - объяснил Блэйн. - Есть такой
прием, я ему научился на другой планете. Я вложил в него матрицу
моего разума, а взамен взял копию его. Вроде копировальной
бумаги. Трудно себе представить, но это осуществимо.
- Вряд ли Финн тебе благодарен за это, - заметил Эндрюс. -
Заполучить себе в мозги такой беспокойный разум, как твой!
- Да, Финн выглядел несколько огорченным, - согласился Блэйн.
- Подростки будут изображать из себя чертей, - произнес
Картер. - Они будут распахивать двери. Переносить автомобили.
Разломают какие-нибудь сараи. Ну, и всякие потусторонние вопли,
разумеется.
- На этом и строится расчет, - подтвердил Блэйн. - Вроде бы
обычные, традиционные шалости на День всех святых. Но для
пострадавших это будет не просто озорство. Они решать, что все
силы ада вышли из тьмы и обрушились на мир. Повсюду им будут
видеться призраки, черти и оборотни. И так хорошего мало, а если
учесть больное воображение напуганных обывателей... Наутро будут
рассказывать о кишках, намотанных на забор, о перерезанных
глотках, о похищенных девочках. И всякий раз это будет не там,
где рассказывают, а где-то неподалеку. И люди будут верить.
Верить в любую небылицу.
- Тем не менее, - заметил Джексон, - мы не можем слишком
сурово осуждать наших детей, решившихся на это. Вы представить
себе не можете, мистер, что им пришлось повидать. Их презирают и
унижают. Едва вступив в жизнь, они уже знакомятся с сегрегацией и
знают, что повсюду на них будут показывать пальцем...




original post http://vasnake.blogspot.com/2013/10/blog-post_31.html

Архив блога

Ярлыки

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) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (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) Photo (9) купи/продай (9) 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)