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

2014-06-30

Медсправка в ГИБДД

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

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

Сразу замечу — про место пребывания — наглый пиздеж и провокация. Выписку/справку о (не)состоянии на учете надо по любому получать по месту прописки.

Как сейчас выглядит процедура получения медсправки для предоставления в ГИБДД при получении/замене водительских удостоверений.

Для затравки, как оно было два года назад и вплоть до 1 апреля 2014 года
Можно было зайти на пять минут в одно из многих коммерческих учреждений по продаже справок и, заплатив что-то вокруг 1500 рублей, получить на руки полностью готовую справку.

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

Как это выглядит в реальной жизни.
Вы можете купить нужную справку по цене от 3000 рублей. Но это я не пробовал, не могу сказать, насколько это реально. Я попробовал получить справку относительно честно.

Начало процедуры как и раньше. Заходим в любую коммерческую контору по продаже справок и за 1500 рублей получаем на руки почти готовую справку. Вся процедура укладывается в 5-10 минут. Но теперь в этой справке нет отметок нарколога и психиатра.
Довольно погано то, что далеко не все коммерсы считают своим долгом предупредить несчастных п0циентов, что справка выйдет недоделанной.

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

Есть веб-сайт http://www.mosgorzdrav.ru/
на котором можно найти необходимую информацию. В частности, для прописанных в ЮАО г. Москвы, есть ПНД №18 http://www.mosgorzdrav.ru/pnd18
Психоневрологический диспансер № 18 филиал № 2 ПБ № 14
115522, г. Москва, Пролетарский проспект, д. 4
Эту информацию можно найти и на другом сайте: http://orgpoisk.ru/info/id/1248

Учтите, надо заранее позвонить и уточнить, относится ли ваш адрес прописки к их компетенции, чтобы зря не ездить. Кстати, для этого ПНД неправильно указан номер телефона справочной службы — код должен быть 499. А указан 495. Но это мелочи.
В этом учреждении можно бесплатно поставить отметку психиатра.

У меня эта процедура заняла чуть больше часа, не считая дороги. Отстоять очередь в регистратуру, дождаться пока меня не найдут в картотеке, получить «направление» – бумажку с номером кабинета, отсидеть очередь в кабинет, посидеть в кабинете, пока доктор заполняет какие-то нужные государству бумаги и расписывается в моей медсправке. Пойти обратно в регистратуру и проставить штамп на справке.
Осмотр? Какой осмотр? Энцефалограмма? Электрокардиограмма? Господь с вами, мы и слов то таких не знаем. Никаких осмотров, иначе очередь займет все здание и вырвется на улицу круша всё на своем пути.

Внимательно разглядывая полученный в справку штамп, я увидел, что отметки нарколога нет. И очень расстроился. В ходе телефонного разговора со справкой ПНД 18 у меня сложилось впечатление, что они мне и нарколога обеспечат. Нихуа.
Спасибо добрым людям, обратившим внимание на мои возмущенные стоны – «блять, где же мне нарколога искать?!». Подсказали, что где-то в районе Автозаводской. Всемогущий Яндекс помог, я нашел адрес.

Филиал №6 (НД №6 ГКУЗ "МНПЦ наркологии ДЗМ")
2-й Автозаводский пр., д.4, стр.1
Эта же информация есть тут: http://orgpoisk.ru/info/id/1255
Список филиалов тут:

В этом учреждении можно за 192 рубля поставить отметку нарколога. Бесплатно нельзя.

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

БранЯ наших законотворцев, я добрался до этого НД 6 (Наркологический Диспансер, видимо). Тут процедура прошла быстрее: в регистратуре очереди практически нет, мне мгновенно выдали квитанцию на оплату (192 рубля) и показали на банкомат в холле.
К банкомату, единственному работающему из трех, стояла очередь где-то на полчаса. И было тесно и душно. Я подумал — а какого х., пойду-ка я в банк. В регистратуре меня заверили, что оплатить квитанцию я могу в любом банке и я пошел искать любой банк. В наше время банки везде, за углом любой банк нашелся, но сказал, что этот квиток они у меня не возьмут и отправили нахуй в Сбербанк. Сбербанк нашелся чуть дальше, через 300 метров и был полон народу. Операционистка сказала — нахуй оплачивайте через терминал. Спорить с ней было некогда, да и сил уже не оставалось, поэтому, поиграв с терминалом в игру «угадай, что и где надо нажать», через 5 минут я уже нес оплаченную квитанцию обратно в регистратуру.
Принес, мне тут же ее оприходовали и дали направление в кабинет нарколога. Удивительно, но и тут очереди не было. Зайдя в кабинет, мы с доктором заполнили бумажки и, довольные друг другом, расстались.
Занеся медсправку в регистратуру я мгновенно получил в нее штемпель диспансера и на этом квест «получи медсправку» закончился.

Время я не замерял, но по ощущениям, в НД 6 я потратил около получаса. Причем большая часть времени ушла на поиск Сбербанка и борьбу с терминалом.
Осмотр? Боже упаси, а жить когда? Никаких осмотров, еле успеваем бумажки заполнять.

В итоге, за справку я заплатил около 1300 рублей (если бы не скидка автошколы, это было бы 1700 рублей, дороже чем раньше). И, с разьездами, потратил на это блядское дело два рабочих дня. Вместо 15 минут на зайти-в-киоск-по-дороге. При этом никаких проверок здоровья и осмотров как не было, так и нет. Разве что в ПНД проверили картотеку. В НД вообще ничего не проверяли (или сделали это так быстро, что я не заметил).


А теперь риторический вопрос — и нахуя?


original post http://vasnake.blogspot.com/2014/06/blog-post_30.html

2014-06-27

Цены в автошколе-онлайн

Есть такая автошкола, называется «Автошкола онлайн». Давайте на ее примере посмотрим, как рекламная цена за обучение, от 16000 руб. до 30000 руб. превращается в реальную 40000 а то и 60000 руб.
Информация актуальна на лето 2014 года. Потом это будет еще дороже.

Я не хочу сказать, что у них на сайте кидалово и ложь. Нет, это довольно умелое умалчивание некоторых фактов. В итоге изучения информации, представленной на сайте, может сложится ошибочное впечатление, что за 20000 можно пройти курс обучения и получить водительское удостоверение («права») категории B. Ну уж 30000 руб. точно должно хватить. А вот и нет.

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

Первый взнос 7000 рублей, якобы за оформление бумаг и сопровождение в ГИБДД. Это то, что надо заплатить сразу, подписав договор и заполнив анкету. Теоретически, может так случиться, что вам придется заплатить еще 7000 рублей за «преподавание теории», но фактически в этой Автошколе-онлайн действует постоянная «скидка» под названием «теория бесплатно». Не обольщайтесь, бесплатно ничего не будет.

Дополнительно надо приобрести учебные пособия — ценой от 1500 до 2000 рублей. Я пока не понял, что будет если их не покупать. Но, по любому, лучше купить, ибо от них вам будет реальная польза — читать, изучать, запоминать.

Поправка. Как пояснил лектор теории на моем первом занятии, реально учиться мы будем по 2-м книжкам: ПДД и Задачи Экзаменационные. Все остальное полезно, но не является необходимым.

Уже 9000 рублей набежало. Заплатив эти деньги вы получаете право прослушать курс теории и сдать внутренний экзамен по теории же. Но, как мы все понимаем, без практики это полная фигня и никому не нужно. Ибо ограничившись этим, вы не сможете (вас не допустят) сдать экзамены в ГИБДД. Надо пройти курс практики. Вот тут самое интересное и дорогое.

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

Пройти медкомиссию — 900 рублей, округлим до 1000. Это все равно дешевле, чем у других продавцов медсправок. Добавим фотографирование — 200 рублей.
Еще одни замечательные грабли, спасибо нашим депутанам — с 1 апреля 2014 года врач-нарколог и врач-психиатр стали отдельной проблемой. Ну не врачи сами по себе, а то, что по простому их отметки в медсправке вы уже не получите. Получив недоделанную медсправку (без отметок нарколога и психиатра) необходимо найти, где в местах вашей прописки обитают эти врачи и убедить их нарисовать правильные отметки в вашей справке. Сколько на это уйдет времени, нервов и денег — я еще не представляю.
Пока промежуточный итог = 10000 руб. Напомню — я округляю для наглядности.

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

Тренажеры. 4 занятия (даю справку: два академических часа или полтора часа чистого времени составляют одно занятие) на тренажере входят в состав практики вождения. То есть, если на сайте написано «14 занятий по вождению», это значит, реально водить вы будете только 10 занятий. Заменить тренажеры на реальный автомобиль вам не дадут. Так что, чтобы не зря были потрачены деньги, на тренажерах придется заниматься, всё же какая-то польза. Тренажеры находятся в центральном офисе, посему это будет еще четыре посещения Волгоградки.

Вождение (практика). Нас заманивают усердной рекламой наименее дорогих тарифов «Минимал», «Стандарт» и пр. В «Минимал» входит 14 занятий (четыре из которых на тренажере) и в варианте «Эконом» этот тариф обходится в 9000 рублей. Но это все сказки и замануха. Конечно, есть вероятность, что вы выкрутитесь неизвестным науке образом и умудритесь сдать экзамены внутрениие и в ГИБДД отучившись по тарифу «Минимал» в варианте «Эконом». Но вероятность эта крайне мала. Гораздо вероятнее, что в процессе обучения вы занесете в школу еще тысяч 20 руб. Почему? Объясняю.

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

Теперь про вариант «Эконом». В этом варианте каждый урок вождения вам назначают на то время и на ту площадку, где есть свободная машина. Это может быть где угодно и когда угодно. Отменить или перенести занятие нельзя. Для человека, занятого на работе это просто неприемлемо.
Остается вариант «по будням с 8:30-17:30», что тоже не подарок, но хоть можно выбрать площадку и отменять/переносить занятия. Это стоит уже 29000 рублей. Более удобные варианты еще дороже.
Понятна суть кидалова схемы выкачивания денег?

Вот так мы и получаем цену обучения в 39000 (почти 40000) рублей. В Москве можно найти и дешевле, я видел что-то вроде 36000 за курс в честной школе при ДОСААФ.

А сказки про 20000 — 30000 за обучение, это чиста реклама. Но у вас есть возможность попробовать отучиться за эти деньги, хотите — пробуйте, если не жалко нервов и времени. Я вас предупредил, схема стара как мир: занеся в кассу 100 динаров, лох ставится перед выбором — потерять эти 100 или занести еще 100 для достижения цели.









original post http://vasnake.blogspot.com/2014/06/blog-post_27.html

2014-06-26

PCA


После линейной регрессии была логистическая регрессия. А потом начались нейросети — Neural Networks. Потом нас учили правильно применять изученные алгоритмы (Advice for Applying Machine Learning). А потом нам рассказали про Support Vector Machines (SVMs) и Kernels.
А потом была неделя посвященная темам Clustering (K-Means) и Dimensionality Reduction (PCA).

Сегодня разберем тему снижения размерности.

Dimensionality Reduction — штука довольно занятная в контексте Machine Learning, ибо, в отличие от предсказания злокачественности опухоли с помощью нейросети, к примеру, не несет непосредственной пользы. А вот опосредованно вполне может пригодится.
Одно из применений снижения размерности — сжатие данных. Было в вашем наборе данных две характеристики, а мы оставим одну — сжали данные вдвое.
Другое применение — ускорение обучения машины. Вместо обработки матриц 10000х100500000 можно обрабатывать матрицы 1000х100500000, это будет заметно быстрее.

А еще можно применить снижение размерности для визуализации данных. Если трехмерный график мы еще можем усвоить, то тысячемерный — увольте.

Метод снижения размерности называется Principal Component Analysis (PCA).
Этот метод заключается в нахождении такой редуцированной поверхности в многомерном пространстве (линии на двумерной плоскости, к примеру), для которой сумма квадратов расстояний от поверхности до точек датасета минимальна.

Задача может показаться похожей на линейную регрессию, но это не так. И Cost Function другая и в датасете нет деления на переменные и цель/значение (X, Y). Все фичи датасета – это X. Таким образом, снижение размерности относится к разряду Unsupervised Learning, в отличие от линейной регрессии, относящейся к Supervised Learning.

Что делает PCA?
PCA для нас находит по исходному датасету векторы уменьшенной размерности и вычисляет новые фичи для этой новой размерности.

Математически это делается так:
найти для датасета Covariance Matrix (ковариантную матрицу) — матрица n,n из суммы произведений фич;
найти Eigenvectors (эйгенвекторы) aka «singular value decomposition» этой матрицы.
Первые K векторов из матрицы U в полученных эйгенвекторах — это и будут искомые векторы уменьшенной размерности.
Умножив транспонированную матрицу из этих векторов на данные датасета, мы получим новый, сжатый датасет, что и требовалось.
Нихрена неясно, зато математически кратко выражено.

Ну и в завершение — а какую бы нам выбрать новую, маленькую, хорошую размерность? Для визуализации данных это не вопрос, тут либо 2, либо 3. А вот для сжатия данных надо выбирать новую размерность осторожно, обдуманно.

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

Ошибка вычисляется как сумма квадратов X - Xapprox поделенная на сумму квадратов X. Ну, не совсем X, конечно, там проекции и длины векторов, см.картинки.
Но для такого вычисления нам надо уметь «восстанавливать» исходное значение Х — разжимать данные обратно, получая Xapprox.

Но есть способ проще. В найденных ранее ейгенвекторах есть матрица S. Используя ее, можно заменить операции по вычислению ошибки на простые операции с элементами этой матрицы – суммирование и деление сумм. И не надо вычислять (здесь, во всяком случае) аппроксимированное значение Xapprox.

Вот и все уменьшение размерности методом PCA. Ковариантная матрица, ейгенвекторы и перемножение пары матриц — математическая запись очень лаконична. А что под капотом — нам не объясняли.


Чуть не забыл. В практическом упражнении мы применили PCA для сжатия данных. На входе был набор картинок 32х32 пикселя — изображения лиц людей. А на выходе мы, определив 36 pricipal components, получили картинки 6х6 пикселей. Только это уже как бы и не картинки, это именно наиболее важные области картинок, отвечающие на наибольшую вариативность — чем лица отличаются одно от другого.

А потом, определив 100 PC, получили картинки 10х10, разжав которые обратно получили ошеломляющий результат — см.иллюстрацию.



original post http://vasnake.blogspot.com/2014/06/pca.html

2014-06-25

K-Means


После линейной регрессии была логистическая регрессия. А потом начались нейросети — Neural Networks. Потом нас учили правильно применять изученные алгоритмы (Advice for Applying Machine Learning). А потом нам рассказали про Support Vector Machines (SVMs) и Kernels.
А потом была неделя посвященная темам Clustering (K-Means) и Dimensionality Reduction (PCA). Тему снижения размерности мы отложим на потом. Сегодня поглядим на алгоритм кластеризации под названием K-Means.

Clustering (кластеризация) это класс проблем из раздела Unsupervised Learning, в отличие от рассмотренных ранее, относящихся к Supervised Learning. Принципиальная разница между этими двумя разделами заключается в том, что в проблемах Supervised Learning данные для обучения всегда содержат ответ (метку, label). Нет, так неясно. Давайте так: в тренировочном наборе данных для обучения распознаванию рукописных цифр всегда есть значение цифры изображенной на распознаваемой картинке. Если еще проще, то машина строит догадку – «это цифра 3», а супервайзер бьет ее по рукам линейкой и рявкает – «дура, это цифра 5», после чего машина корректирует коэффициенты в вычислениях, чтобы следующий раз угадать точнее.

А вот в проблемах Unsupervised Learning никаких готовых ответов нет. Есть только наборы данных и их надо как-то структурировать. Например разложить по кучкам согласно некоей общности характеристик (features). Эти кучки и будут кластеры, а процесс отнесения записей данных в тот или иной кластер — кластеризация.

Так как же делается кластеризация? Один из наиболее употребимых алгоритмов называется «K-Means Algorithm».

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

Теперь машина итеративно, до схождения (или ограничения по количеству циклов/времени) делает два шага:

1. Распределяет точки по кластерам (двум, в примере) по принципу близости к центроиду. Cluster Assignment Step.

2. Двигает центроиды кластеров (точки по плоскости) в центр/среднее положение в кластере (облаке точек). Move Centroid Step.


Всё, вот и весь алгоритм.

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

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

Теперь вопрос — а как назначить оптимальное количество кластеров? Ответ очевиден — посчитать Cost Function для разного количества кластеров, построить график и заценить, где на графике происходит резкий (относительно) переход. Это будет метод локтя (Elbow Method).

А вообще-то, обычно количество кластеров назначают вручную, исходя из предполагаемого применения результата. Например разбиение размеров футболок по группам (S, M, L, XL) или (S, SM, M, L, XL, XXL) — что лучше для бизнеса продажи футболок — 4 размера для упрощения производства или 6 размеров для более точного подгона одежды по фигуре?

Что любопытно, в практическом задании мы применяли кластеризацию (K-Means) для сжатия картинок. Уменьшалась цветовая палитра (до 16 цветов) и, как итог, размер файла изображения. Приблизительно в шесть (6) раз.
Фактически, пиксели группировались в 16 кластеров в контексте похожести/близости цвета, после чего группам пикселов присваивался некий «средний» для группы цвет.

Получилось забавно.

 


original post http://vasnake.blogspot.com/2014/06/k-means.html

2014-06-24

C10K

Случайно наткнулся на замечательную статью, в которой содержится обзор и оценка разных подходов к вопросу — а как нам обеспечить 10 000 одновременных соединений (сетевых сессий) на одной машине:

Читал, не мог оторваться, просто как детектив какой-то. Масса информации.

А вышел я на эту статью разглядывая вот эти слайды:
Заголовок провокационный, да. Вообще, презентация способна вызвать немало баттхерта у незрелых личностей. Сначала речь идет о реальной асинхронности ввода/вывода в противовес имитируемой через event loop. Потом делается плавный переход от пула реально асинхронных потоков операционной системы (MS Windows) к обработчикам сетевых протоколов, написанных на Python (Python/C API). Изящно.

А чтобы обеспечить thread-safety и не упираться в GIL, PyParallels делает ход конем: проверяет – главный поток выполняется или нет и если нет — работает в обход GIL, перехватывая thread-sensitive вызовы ядра Python.

Побочным неприятным эффектом изящности их решения можно назвать то, что в параллельных контекстах (код, выполняемых в параллельных потоках) память не освобождается. Поэтому они обязаны быть нежадными и короткими.

А есть видео, где автор показывает слайды:

During the fall of 2012, a heated technical discussion regarding asynchronous programming occurred on python-ideas. One of the outcomes of this discussion was Tulip, an asynchronous programming API for Python 3.3, spearheaded by Guido van Rossum. A lesser known outcome was PyParallel: a set of modifications to the CPython interpreter that allows Python code to execute concurrently across multiple cores.
Twisted, Tulip, Gevent, Stackless/greenlets and even node.js are all variations on the same pattern for achieving "asynchronous I/O": non-blocking I/O performed on a single thread. Each framework provides extensive mechanisms for encapsulating computational work via deferreds, coroutines, generators and yield from clauses that can be executed in the future when a file descriptor is ready for reading or writing.
What I found troubling with all these solutions is that so much effort was being invested to encapsulate future computation (to be executed when a file descriptor is ready for reading or writing), without consideration of the fact that execution is still limited to a single core.
PyParallel approaches the problem in a fundamentally different way. Developers will still write code in such a way that they're encapsulating future computation via the provided APIs, however, thanks to some novel CPython interpreter modifications, such code can be run concurrently across all available cores.


PyParallel - How We Removed the GIL and Exploited All Cores (Without Needing to Remove the GIL at all) - Trent Nelson from PyData on Vimeo.


Несколько слайдов, чиста для иллюстрации темы:





original post http://vasnake.blogspot.com/2014/06/c10k.html

2014-06-23

mp3 splitter

В нынешние непростые времена я на своем iPod слушаю аудиокниги. Живучая, кстати, скотина. Судя по моему блогу, пользуюсь я этой iPod-кой уже лет 8, а она все не сдохнет.
Так вот, аудиокниги бывают нарезаны большими файлами, по часу и более, что очень неудобно, если надо перемотать на какое-то определенное место в записи. Уж очень долго и небыстро работает кнопка fastforward в этом мегадевайсе. Поэтому для меня наиболее удобный размер одного файла аудиокниги — минут 10-30 воспроизведения. Соответственно, иногда приходится нарезать большие файлы на пачки маленьких.

В интернетах можно найти массу утилит по нарезке аудиофайлов кусочками, но не все эти утилиты одинаково полезны. Кто-то глючит, кто-то хочет денег, кто-то не дружит с iTunes. Вот тут я разъясню. Не дружит с айТюнс — это когда нарезанные файлы не хотят заливаться в эту богомерзкую софтину, а не то, о чем вы подумали.

Короче, предлагаю вашему вниманию достойного представителя программ класса «я нарежу ваши mp3 файлы»:
Просто и со вкусом. Что надо — работает, а остального нет.


Раньше, полгода назад, я как-то наткнулся на другую замечательную программу из этого же класса, но, к сожалению, не стал сохранять ее «на потом». Теперь не помню ее названия. Очень жаль, реально толковая была утилита.


original post http://vasnake.blogspot.com/2014/06/mp3-splitter.html

2014-06-21

В Строгино дует

Пятница, 20 июня 2014 года — опять прекрасная погода! Местами солнечно, в целом тепло — около 20 градусов тепла и, самое главное, ветер до 12 метров в секунду. Хорошими такими, длинными порывами.
Сегодня опять получилось выскочить на бластинг на парусе 6 метров, во какой ветер.

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

Отличная погода. И не жарко.



original post http://vasnake.blogspot.com/2014/06/blog-post_21.html

2014-06-20

Blue Jasmine

Давеча отсмотрел фильму «Жасмин», что в оригинале Blue Jasmine (2013).
Директор картины, он же писатель (сценарист) — Вуди Аллен (Woody Allen). В главной роли — Электродрель (Галадриэль) Cate Blanchett.

История про дамочку, вкрутившуюся когда-то в высший свет, удачно выйдя замуж за прохиндея и мошенника, которого играет сам Алек Болдуин (Alec Baldwin).

Это один из немногих фильмов Вуди Аллена, которые я могу смотреть не рефлексируя (типа, это же Вуди Аллен снял, а лента говно говном, наверно я чего-то не понимаю, невежда). И, кстати, один из немногих, где он сам не появляется в кадре.


Хоть и ранжируется как комедия, но комедийного в фильме немного. Скорее легкая психологическая драма с элементами юмора в стиле Аллена. Но фильма занятная, смотреть вполне можно.


original post http://vasnake.blogspot.com/2014/06/blue-jasmine.html

2014-06-19

Certificate

Ура, товарищи! То, чего так долго ждали большевики, свершилось. Мне прислали сертификат (на самом деле это «statement of accomplishment»), подтверждающий, что я успешно завершил курсы

Coursera
Stanford University
Machine Learning

Это не три разных курса, это так называется один десятинедельный курс бесплатного онлайн обучения на Курсере.

Теперь я сертифицированный специалист по Machine Leraning (как бы).



original post http://vasnake.blogspot.com/2014/06/certificate.html

2014-06-18

Get a job at Google

По некоторым сведениям, на работу в Google берут одного из 130 претендентов. Высокий конкурс. При этом 14% работников не имеют высшего образования — гении, вероятно.
Высоко ценятся « T-shaped» профессионалы, обладающие глубокими познаниями в определенной области, но, кроме того, знающие массу всякого обо всяком.

Короче, посмотрите инфографику

А вот так представляли найм на работу в Google в 2011 году


А вот и вкусняшка:
Answers To 15 Google Interview Questions That Will Make You Feel Stupid

Если интересно, вот еще подборка каверзных вопросов, 140 штук:

Говорят, нынче в Гугеле уже не обращают особого внимания на умение решать головоломки. Нынче им важнее способности к обучению.



original post http://vasnake.blogspot.com/2014/06/get-job-at-google.html

2014-06-17

Plone + webcam

Озаботился я тут на днях одной проблемой. Суть проблемы в том, что хочется показывать на веб-странице картинки с веб-камеры. Очевидно, проблеме сто лет в обед и решается она двумя сниппетами кода
HTML
<img id="myimg" src="url to webcam.jpg">
и JS
function showImageFromWebcam() {
    var now = new Date();
    var stamp = parseInt(now.getTime() / 2000, 10);
    $('#myimg').attr('src', "http://clubwindsurf.info/ftpfiles/webcam.jpg?" + stamp);
    setTimeout(showImageFromWebcam, 2000);
}
setTimeout(showImageFromWebcam, 2000);

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

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

Недолгое гугление и игра с jsfiddle привели к следующему решению:
// правильная загрузка картинок с веб-камеры
// http://stackoverflow.com/questions/11632278/use-page-specific-css-in-plone
// http://jsfiddle.net/623rB/13/
// http://jqueryfordesigners.com/image-loading/
// http://docs.plone.org/adapt-and-extend/theming/templates_css/css.html

// HTML
<div id="loader" class="loading"></div>

// CSS
DIV#loader {
    border: 1px solid #ccc;
    width: 640px;
    height: 480px;
}
/**
 * While we're having the loading class set.
 * Removig it, will remove the loading message
 */
 DIV#loader.loading {
    background: url(http://jqueryfordesigners.com/images/spinner.gif) no-repeat center center;
}

// JS
function showImageFromWebcam() {
    var now = new Date();
    var stamp = parseInt(now.getTime() / 2000, 10);

    var img = new Image();

    // wrap our new image in jQuery, then:
    $(img)
    // once the image has loaded, execute this code
    .load(function () {
        // set the image hidden by default
        $(this).hide();

        // with the holding div #loader, apply:
        $('#loader')
        // remove the loading class (so no background spinner),
        .removeClass('loading')
        // then insert our image
        .empty().append(this);

        // fade our image in to create a nice effect
        //$(this).fadeIn(200);
        $(this).show();
        setTimeout(showImageFromWebcam, 2000);
    })

    // if there was an error loading the image, react accordingly
    .error(function () {
        // notify the user that the image could not be loaded
        setTimeout(showImageFromWebcam, 1333);
    })

    // *finally*, set the src attribute of the new image to our image
    .attr('src', "http://clubwindsurf.info/ftpfiles/cam_1.jpg?" + stamp);
}

setTimeout(showImageFromWebcam, 2000);

Результат можно наблюдать тут http://clubwindsurf.info/webcam

А по итогам этого небольшого хакинга у меня родилась очередная хотелка-задача в список того, чем мне можно было бы заняться при избытке свободного времени:

Сделать Plone add-on (http://plone.org/products) с названием типа «Живые снимки с веб-камеры» / «Webcam images live».
Этот аддон (viewlet, portlet, document — пока не решил) спрашивает — где брать картинку, размер картинки (можно и автоматом детектировать), периодичность обновления. После чего вставляет на страницу вышеупомянутый код обновления изображения.

Удивительно, но ничего готового на эту тему я не нашел.

Кстати, в сети нашелся вот такой интересный материал:
Plone, HTML 5 Canvas and Face Detection with Webcam

Добрый человек сделал прототип распознавателя лиц (на базе openCV) в виде аддона к Plone. По сути, он игрался с новыми API в HTML5.



original post http://vasnake.blogspot.com/2014/06/plone-webcam.html

2014-06-16

Neural Net Flaws

Недавно было проведено одно очень интересное исследование. Исследователи исследовали (прикольно, да — три раза подряд) некоторые неявные свойства нейросетей. Результаты ошеломляют.

«Intriguing properties of neural networks»

На i-programmer есть статья об этой работе:

What has been discovered is that a single neuron's feature is no more interpretable as a meaningful feature than a random set of neurons. That is, if you pick a random set of neurons and find the images that produce the maximum output on the set then these images are just as semantically similar as in the single neuron case.
This means that neural networks do not "unscramble" the data by mapping features to individual neurons in say the final layer. The information that the network extracts is just as much distributed across all of the neurons as it is localized in a single neuron.
This is an interesting finding and it leads on to the second and even more remarkable finding..
Every deep neural network has "blind spots" in the sense that there are inputs that are very close to correctly classified examples that are misclassified.

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

Во второй части работы были сделаны ошеломляющие выводы касательно способности нейросетей справляться со своей работой. А именно — для каждой обученной нейросети можно найти такие примеры входных данных, которые будут давать на выходе отрицательный ответ, в то время как эти примеры данных ничтожно отличаются от примеров дающих положительный ответ. Если по простому — то это типа так: нейросеть натренирована распознавать картинки — рукописные цифры. Можно чуть-чуть подправить картинки, так, что глазом не отличишь, а нейросеть перестанет их распознавать.
Как отмечается, это следствие сильной нелинейности функций зависимости выхода нейросети от входа. Если представить эти функции в виде графиков, допустим, в трехмерном пространстве, то среди всего объема возможных вариантов, правильно распознаваемые картинки заключаются внутри неких отдельно расположенных пузырей странной формы. Если картинка хоть чуть-чуть не попадает в один из этих пузырей, происходит ошибка распознавания.

В общем, люди обескуражены и расстроены — как же так, мы думали нейросети спасут мир, а они гораздо тупее чем мы себе представляли.

Вангую: грядет новый виток исследований по теме, что даст еще более сложносочиненные алгоритмы / схемы построения нейросетей.

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

Кстати, следствием второго исследования стал тщательно скрываемый алгоритм генерации «adversarial examples» (можно перевести как «противные примеры»). С точки зрения человека, эти противные примеры практически не отличаются от эталонных данных, но нейросеть на них дает ошибку. Так вот, еспользуя генератор противных примеров в процессе обучения нейросетей, можно изрядно улучшить результаты классификации/распознавания.

Очень ценное изобретение, ящетаю.


original post http://vasnake.blogspot.com/2014/06/neural-net-flaws.html

Каталка в Строгино

11 июня 2014 года днем было очень неплохо. Ветер 5-10 м/с, порывистый, с севера с заворотами на запад. Трудно на таком ветру кататься, надо быть постоянно готовым к выкрутасам.
Зато я опять вышел на бластинг на нашем парусочке шестиметровом. Пацаны гоняют на 8-9 метровый парусах, а я, такой, на шестерке — вжжжжииик...
Прохватил через половину поймы, такой кайф!

К сожалению, это был сегодня единственный выход на бластинг, ветер к вечеру начал сдуваться, кататься стало поспокойнее.

Отлично покатались.

Кстати, сегодня сделал очередное открытие. Я понял, почему продвинутые катальщики предпочитают маленькие доски. Не потому, что это круто или модно, нет. Потому, что большую и тяжелую доску реально трудно выталкивать на бластинг. Вот это я сегодня и прочувствовал.
Потихоньку набираясь опыта, я теперь начинаю обращать внимание не только на свои усилия не свалиться или улететь в катапульту, но и на менее выпуклые детали. В какой-то момент сегодня, разгоняясь, я прочувствовал как тяжело выталкивать ногами доску на бластинг, как в чугунных башмаках ходить. Вот оно чё, Петрович. Теперь буду хотеть доску поменьше осмысленно.



original post http://vasnake.blogspot.com/2014/06/blog-post_16.html

2014-06-11

Укладка

Воспитанные люди не носят мятую одежду. Воспитанные люди носят отглаженную одежду. Тяжело быть воспитанным человеком.
Но жизнь можно облегчить, если знать некоторые трюки. Например, как аккуратно сложить футболку/рубашку, чтобы она в чемодане/на полке шкафа не сильно помялась:


Попробуйте, это офигительно легко. Я проверил.



original post http://vasnake.blogspot.com/2014/06/blog-post.html

2014-06-10

Carrie

Намедни отсмотрел две фильмы по Стивену Кингу:
«Телекинез» 2013, что в оригинале Carrie (2013) и
«Кэрри» 1976, что в оригинале Carrie (1976).


Более свежий фильм это римейк более старого. Несмотря на то, что рейтинг на imdb выше у старого фильма, лично мне современная экранизация понравилась больше. Зрелищнее, динамичнее, что-ли. А если учесть, что подручного главгадины в версии 1976 года играет Джон Траволта (John Travolta), то понятно, почему роль главгадины такая неубедительная.

Кстати, если верить тому же imdb, это первая роль Траволты на большом экране.


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

Одно наблюдение: в фильме 1976 года в кадре не встречается почти ни одного цветного. Все сплошь белые европо-американцы. К чему бы это?


original post http://vasnake.blogspot.com/2014/06/carrie.html

2014-06-09

TrueCrypt всё?

Демократия на марше:

На официальном сайте популярной системы дискового шифрования TrueCrypt опубликовано заявление, что система не является безопасной и может содержать уязвимости. Более того, сообщается, что с мая 2014 года разработка TrueCrypt прекращена. В то же время выпущен финальный релиз TrueCrypt 7.2, который рекомендуется использовать только в качестве промежуточного звена при миграции на другие системы.

Очень жаль, я его использую https://www.google.ru/search?q=truecrypt+site%3Avasnake.blogspot.com

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

Не первый случай и, к сожалению, не последний. Госдеп хочет все видеть, все слышать и все знать про всех. Борьба с терроризмом, понимаете?

Замечательная иллюстрация того, чем западная демократия отличается от православной. На западе на словах свобода и процветание, на деле — грабеж и притеснение. У православных ровно наоборот — формально госдума всё запрещает, а на деле — ты свободен как неуловимый Джо.

Как можно договариваться имея такой разный базис?


original post http://vasnake.blogspot.com/2014/06/truecrypt.html

2014-06-06

Вудгпу (Deluge)

Некоторое время тому, я написал, как пропатчить KDE под FreeBSD код Deluge, чтобы рутрекер его не банил (http://vasnake.blogspot.ru/2014/02/deluge-136-rutracker-patch.html).

Намедни эта история получила свое продолжение.
Внезапно, у меня перестал запускаться клиент Deluge, при запуске выдает такую портянку:

$ Traceback (most recent call last):
  File "/opt/deluge/deluge-1.3.6/env/bin/deluge-gtk", line 9, in <module>
    load_entry_point('deluge==1.3.6', 'gui_scripts', 'deluge-gtk')()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 356, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2431, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2147, in load
    ['__name__'])
  File "/opt/deluge/deluge-1.3.6/deluge/ui/gtkui/__init__.py", line 1, in <module>
    from gtkui import start
  File "/opt/deluge/deluge-1.3.6/deluge/ui/gtkui/gtkui.py", line 79, in <module>
    from torrentview import TorrentView
  File "/opt/deluge/deluge-1.3.6/deluge/ui/gtkui/torrentview.py", line 52, in <module>
    from deluge.ui.tracker_icons import TrackerIcons
  File "/opt/deluge/deluge-1.3.6/deluge/ui/tracker_icons.py", line 51, in <module>
    from deluge.httpdownloader import download_file
  File "/opt/deluge/deluge-1.3.6/deluge/httpdownloader.py", line 35, in <module>
    from twisted.web import client, http
  File "/usr/lib/python2.7/dist-packages/twisted/web/client.py", line 38, in <module>
    from twisted.web.iweb import UNKNOWN_LENGTH, IAgent, IBodyProducer, IResponse
  File "/usr/lib/python2.7/dist-packages/twisted/web/iweb.py", line 19, in <module>
    from twisted.cred.credentials import IUsernameDigestHash
  File "/usr/lib/python2.7/dist-packages/twisted/cred/credentials.py", line 13, in <module>
    import hmac, time, random, re
  File "/usr/lib/python2.7/hmac.py", line 8, in <module>
    from operator import _compare_digest as compare_digest
ImportError: cannot import name _compare_digest

Что делать, куда бежать?
Как обычно, недолгое гугление привело к описанию бага, связанного с тем, что на платформе (Debian Jessie/testing) обновили Python:

if you are using virtualenv then you have to rebuild your virtual
environment
e.g.
$ virtualenv /path/to/your/virtualenv/

Очевидно (http://vasnake.blogspot.ru/2014/02/deluge-136-rutracker-patch.html) патченый Deluge я поставил используя virtualenv. Соответственно, проблема устраняется как прописано доктором:

$ pushd /opt/deluge/deluge-1.3.6/
$ virtualenv --system-site-packages env


И всё заверте...


original post http://vasnake.blogspot.com/2014/06/deluge.html

2014-06-05

SVM, Kernels


После линейной регрессии была логистическая регрессия. А потом начались нейросети — Neural Networks. Потом нас учили правильно применять изученные алгоритмы (Advice for Applying Machine Learning). А потом нам рассказали про Support Vector Machines (SVMs) и Kernels. Это по типу логистической регрессии, только лучше, по крайней мере, в некоторых случаях.

SVM еще называют Large Margin Classificators, потому как результатом применения SVM становится такое решение классификатора, которое проводит разделительную черту между классами так, чтобы расстояние до черты было наибольшим. То есть SVM строит наиболее качественный классификатор (если применять метод правильно).

Основная идея SVM классификатора в том, что Cost Function несколько мофицируется, с тем, чтобы обеспечить обнуление цены при пороговых значениях полинома гипотезы.

Математика, стоящая за оптимизацией такой интересной Cost Function построена на работе с векторами их проекциями и длинами. Возможно поэтому метод и называется Support Vector Machine. При этом есть достаточное количество хороших библиотек для использования SVM «из коробки».

До сих пор вроде все хорошо, можно сделать вывод, что SVM лучше логистической регресси, ибо дает более четкое разделение на классы.

Но тут в тему ворвались Kernels. Как нам обьяснили, SVM + Kernels это прекрасно, ибо, в отличие от логистической регрессии или нейросетей, машина перемалывает вычисления этого комбо сравнительно быстро. И есть огромный плюс — легкость получения нелинейных классификаторов.

Что же такое Kernels? Это способ определения фич (переменных модели, коэффициентов полинома) для полинома в тех случаях, когда нужна нелинейная модель. Традиционно в этих случаях применяют создание новых фич из имеющихся путем возведения в степень — квдрат, куб и т. д. Но можно применить Kernels.

Если на пальцах, то Kernel Function это функция похожести (similarity) одной записи датасета на другую. Только в алгоритме вычисляют похожесть между записями датасета и «landmarks». Лендмарки — это набор точек в пространстве датасета. Если проще — образцовые записи из датасета.

И если в полиноме гипотезы заменить исходные фичи на значения этих Kernel Functions, то получим метод Kernels для вычисления значений гипотезы, и как результат оптимизации Cost Function для этой гипотезы — нелинейный классификатор.

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

Тем не менее, считается, что для некоторых случаев SVM + Kernels это здорово и круто.

Обычно применяют Gaussian Kernels — функция похожести дает холм Гауссова распределения.

Есть еще часто применяемый linear kernel aka no kernel, который дает обычный линейный классификатор.

В общем, если количество фич относительно мало, до 1000, а количество записей данных достаточно, первые десятки тысяч — можно использовать SVM + Gaussian Kernel. И это позволить выработать достойный нелинейный классификатор.

В остальных случаях (много фич и небольшой датасет, мало фич но датасет огромен) — используй SVM с линейным ядром или логистическая регрессия.


В практическом занятии мы строили распознавалку спама, используя SVM + Gaussian Kernel.


original post http://vasnake.blogspot.com/2014/06/svm-kernels.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) 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)