Pull to refresh
33
0

Программист

Send message

Извлечение 4096-битных ключей RSA с помощью микрофона

Reading time 3 min
Views 107K


Знаменитый криптограф Ади Шамир (буква “S” в аббревиатуре RSA) с коллегами вчера опубликовал научную работу под названием «Извлечение ключа RSA путём акустического криптоанализа с низкой частотой дискретизации» (RSA Key Extraction via Low-Bandwidth Acoustic Cryptanalysis). За сложным названием скрывается исключительно доступный метод извлечения ключей RSA (в реализации GnuPG) с помощью обычного мобильного телефона или микрофона. Достаточно лишь положить телефон в 30 см от компьютера жертвы. Если использовать качественные микрофоны, то извлекать ключи можно с расстояния до 4 метров.
Читать дальше →
Total votes 156: ↑144 and ↓12 +132
Comments 219

Переписываем приложение под Blockchain

Reading time 6 min
Views 11K

Before and after


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


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


В последнее время по роду деятельности мне довелось поработать с несколькими проектами связанными с криптовалютой и blockchain-технологиями. Познакомившись ближе с Ethereum и его идеологией децентрализованных приложений (ĐApp) я просто заболел этой идеей: никакой цензуры, никто не может прикрыть ваш бизнес, никто не может конфисковать ваши средства, невозможно просто взять и выключить сервер на котором работает ваше приложение. В определенный момент я пришёл к выводу, что именно в такой среде мой проект может иметь шансы на жизнь.


Итак, взглянем на фронт работ.

Читать дальше →
Total votes 14: ↑11 and ↓3 +8
Comments 71

Нейросеть в 11 строчек на Python

Reading time 8 min
Views 532K

О чём статья


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

Дайте код!


X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
y = np.array([[0,1,1,0]]).T
syn0 = 2*np.random.random((3,4)) - 1
syn1 = 2*np.random.random((4,1)) - 1
for j in xrange(60000):
    l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
    l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
    l2_delta = (y - l2)*(l2*(1-l2))
    l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
    syn1 += l1.T.dot(l2_delta)
    syn0 += X.T.dot(l1_delta)


Слишком сжато? Давайте разобьём его на более простые части.
Читать дальше →
Total votes 47: ↑44 and ↓3 +41
Comments 17

SOINN — самообучающийся алгоритм для роботов

Reading time 23 min
Views 51K
Пост №1. Что такое SOINN

робот SOINN
SOINN – это самоорганизующаяся инкрементная нейронная сеть. Структура и алгоритм такой нейронной сети повидимому хорошо себя зарекомендовал в японской лаборатории Hasegawa (сайт — haselab.info), потому что он в итоге был взят за основу и дальнейшее развитие алгоритмов искусственного интеллекта шло путем небольших модификаций и надстроек к сети SOINN.

Базовая сеть SOINN состоит из двух слоев. Сеть получает входной вектор и на первом слое после обучения создает узел (нейрон) – определяющий класс для входных данных. Если входной вектор похож на существующий класс (мера похожести определяется настройками алгоритма обучения) то два самых похожих нейрона первого слоя объединяются связью, либо если входной вектор не похож не на один существующей класс, то в первом слое создается новый нейрон, определяющий текущий класс. Очень похожие нейроны первого слоя, объединенные связью, определяются как один класс. Первый слой является входным слоем для второго слоя, и по аналогичному алгоритму, с небольшим исключением, создаются классы во втором слое.

На основе SOINN созданы такие сети, как (далее представлены название сети и описание сети от ее создателей):
Читать дальше →
Total votes 38: ↑33 and ↓5 +28
Comments 17

Osliki.Net – социальная доставка

Reading time 2 min
Views 2.3K
Osliki.Net

Исходный код доступен на GitHub. Используется full-stack JavaScript инструментарий Node.js + Angular2 + MongoDB, сборка Gulp.js, тестирование Mocha, хостинг DigitalOcean, платежи PayPal API.

Этапы процесса создания проекта запечатлены на LiveCoding.

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

Таким образом, пользователи могут выступать и в качестве клиентов, которым нужна доставка, и в качестве путешественников, которые могут доставлять что-либо. Путешественник имеет возможность выставлять счета на оплату клиенту, service fee, вместе с PayPal fee, составляет около 10%.

Проект будет интересен в первую очередь:
  • людям, которые находятся далеко от дома (тоска по родной еде типа халвы, шоколада, кефира и т.д., необходимость в специфичных лекарствах)
  • тем кто хочет сэкономить на покупке товаров. Один подписчик на livecoding, например, утверждал что во Франции электроника дешевле чем в Британии :)
  • студентам, которые учатся вдали от дома, и сезонно перемещаются от места учебы до дома и обратно
  • дальнобойщикам, стюардессам, коммивояжерам вообщем всем тем, кто по роду деятельности часто путешествует и не прочь на этом дополнительно подзаработать.

Читать дальше →
Total votes 5: ↑4 and ↓1 +3
Comments 23

Изучаем Derby 0.6, пример #1

Reading time 11 min
Views 16K
image
Последние несколько месяцев я участвую в нескольких проектах, разрабатываемых на Derby (реактивный fullstack javascript-фреймворк). Часть из них вполне успешно работает в продакшине, часть стартует в ближайшее время.

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

Идея у меня проста — поделиться полученными знаниями, если это конечно будет интересно и востребовано. Я хочу взять несколько примеров из проекта derby-examples и разобрать их по полочкам. Либо, воссоздавая их с нуля, попутно объяснить логику создания, с точки зрения специалиста, либо же, по готовому примеру объяснить те моменты, которые были не раскрыты в предыдущих примерах. Короче, если понравится, думаю разобрать 5-6 примеров.
Читать дальше →
Total votes 52: ↑47 and ↓5 +42
Comments 42

Лицензия для вашего open-source проекта

Reading time 98 min
Views 181K
В этой статье я хочу немного поговорить об авторском праве и свободных лицензиях на ПО. Текст является результатом самостоятельного выбора лицензий и их применения к своим проектам.

Статья будет полезна тем, кто хочет:

— в общих чертах понять, что такое авторское право (но лучше обратиться к юристу);
— подобрать свободную лицензию для своего проекта;
— разобраться, что нужно писать в шапке файла исходного кода.
Читать дальше →
Total votes 136: ↑132 and ↓4 +128
Comments 117

Meteor. Разрабатываем TODO List

Reading time 36 min
Views 61K
В данном уроке я не хочу обсуждать, почему метеор убийца веба, тем более я так не считаю, но определенную симпатию к этому фреймворку имею. Поэтому хочу показать с чего можно начать при разработке приложения на нем, какие есть пакеты и вообще, что такое этот метеор.

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

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

И еще одно предупреждение: в данном уроке будут использоваться следующие технологии для непосредственного написания примера:

  • jade — html препроцессор;
  • less — css препроцессор;
  • coffeescript — язык программирования, компилируемый в javascript.

Видео, демонстрирующее приложение, полученное в ходе урока



И кому все еще интересно, добро пожаловать под кат.
Читать дальше →
Total votes 67: ↑59 and ↓8 +51
Comments 19

На пороге дополненной реальности: к чему готовиться разработчикам (часть 1 из 3)

Reading time 8 min
Views 22K

Аннотация


Представляю вашему вниманию материалы одноименного доклада, сделанного мной на конференции ADD-2010 осенью прошлого года.

В докладе после краткого экскурса в историю рассматривается текущее1) состояние дел в освоении дополненной реальности:
  • использование датчиков: акселерометры, гироскопы, магнитные компасы, GPS
    (различные мобильные телефоны, Wii, Sony Move, XSens)
  • использование маркеров: с инфракрасной подстветкой, в видимом диапазоне
    (Sony Move, OptiTrack, Vicon)
  • использование структурированной подсветки
    (на примере Microsoft Surface)
  • Z-камеры, выдающие картику + расстояние до объекта
    (Microsoft Kinect, её предшественники и аналоги)
  • безмаркерный захват движений
    (OrganicMotion, iPi Soft Desktop Motion Capture)
  • сканирование 3d-поверхности по набору изображений:
    (стереокамеры, 3d-сканеры, воссоздание 3d-сцены с движущейся камеры)
Читать дальше →
Total votes 69: ↑68 and ↓1 +67
Comments 27

Идеальная «Web-разработка» или путь от идеи до готового проекта

Reading time 4 min
Views 820
imageВ продолжение топика о Целях и средствах, а так же благодаря топику, который показал, что есть люди, готовые делиться идеями.

Часто вижу такую картину – кто-то придумал что-то, воможно, гениальное, но не знает, как реализовать. Кто-то знает как – но сам реализовать не может в силу отсутствия знаний/времени. Кто-то об этом вообще не задумывается, но может сделать часть или полностью реализовать идею. Остальные могли бы воспользоваться, если бы об этом узнали, или порекомендовать другим, если бы знали их интересы/потребности. В результате, большинство идей умирают, даже толком не родившись.
Предлагаю следующее решение хабрасообществу
Total votes 36: ↑31 and ↓5 +26
Comments 71

Назад в будущее — Аватарки в телефонной книге

Reading time 2 min
Views 20K
image

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

Под катом решение.
Читать дальше →
Total votes 27: ↑9 and ↓18 -9
Comments 38

BaasCMS – бэкенд не нужен

Reading time 4 min
Views 8.9K


BaasCMS — это JavaScript CMS, использующая в качестве бэкенда популярных провайдеров BaaS. На данный момент поддерживается только Parse.com.

Исходный код BaasCMS доступен на GitHub.

BaasCMS Demo на GitHub Pages
Тоже самое BaasCMS Demo на Tumblr

Можно посмотреть Админ-панель для этого демо (изменения/добавление запрещены). В соответвующую форму на главной странице админки нужно вставить следующие ключи:

  • Application ID: nM7P7NnFA95CK1WrqWOf9wa3mskctaTOdk9vYflj
  • Javascript Key: 0zHfA9FG8L1xR699qmFXjxkZ1pDxgml0MWZMpqJG

Читать дальше →
Total votes 22: ↑14 and ↓8 +6
Comments 1

Создание многопользовательской realtime игры на node.js

Reading time 5 min
Views 53K


Несколько месяцев назад мы с коллегами решили сделать многопользовательскую realtime игру, которая могла бы работать в вебе. Мы решили использовать node.js для нашего сервера. Это решение привело к очень убедительному успеху — наш сервер работал несколько месяцев без единого падения или перезагрузки процесса.

Мы решили написать нашу игру на node.js, потому что мы слышали много хорошего об этой платформе и очень хотели немного с ней поиграть. И это было потрясающе — мы очень быстро вошли в тему. Для node.js существует множество любопытных библиотек, способных решать абсолютно разные задачи. Побочным преимуществом использования node для серверной части является, собственно, javascript — очень простой в обращении язык. Это позволило нам сфокусироваться на проблемах, которые встречаются во всех realtime играх, без лишней суеты, ограничений и необходимости компилировать код, как это случается при использовании менее динамических языков.

Также node.js проявил себя как очень легковесный язык, даже в моменты пиковой нагрузки. Для нашей игры, процесс node.js использовал только один поток и потреблял всего около 3-4% CPU при одновременной работе 8-10 копий игры, каждая со своим собственным движком обнаружения столкновений.
Читать дальше →
Total votes 64: ↑59 and ↓5 +54
Comments 47

Canvas в GIF на Javascript

Reading time 9 min
Views 24K

Расскажу об особенностях с которыми я столкнулся при сохранении изображения из canvas в GIF.
Тут будут рассмотрены готовые решения и мой собственный javascript код квантизации изображения (то есть уменьшение палитры до 256 цветов). Так же будут затронуты вопросы быстродействия некоторых javascript конструкций.
Читать дальше →
Total votes 68: ↑65 and ↓3 +62
Comments 33

Тачка Бонда, или Виртурилка рулит!

Reading time 5 min
Views 99K
— На женщин всегда производят впечатления крайности. Либо слишком большие, либо слишком маленькие. …
Алекс Экслер, «Ария Князя Игоря, или Наши в Турции»


Предвидя вопросы «когда тираж?» — докладываю. Виртурилка в тиражном виде готова на 99%, осталось сделать сэмплы и проверить живьём. На это неделя-две уйдёт, после чего мы готовы к тиражу. Просто к нам приходит много укоров в том что мы пару публикаций сделали и пропали. Количество тиражных экземпляров увеличили до 5000, ибо предзаказов на 2 тысячи набралось. Предзаказ ещё открыт до конца месяца.

Ну а теперь по теме топика


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



Читать дальше →
Total votes 201: ↑189 and ↓12 +177
Comments 103

Node.js + Chromium = AppJS: один из перспективных вариантов второго шага эволюции веборазработчика

Reading time 4 min
Views 35K
Сейчас мы с вами немного поговорим о том, как недавнее появление нового инструмента и связанных с ним возможностей открывает перед современными веборазработчиками возможность достаточно быстро эволюционировать, переходить на новые уровни, обретать новые профессиональные навыки, осваивать новые области созидательного труда. Таким инструментом является Node.js и растущая вокруг него инфраструктура.

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

Исторически это не первый из таких инструментов.
Каждый из нас может вспомнить, что были и до появления Node.js попытки создать движок для удобного программирования на джаваскрипте (Windows Script Host, Rhino, JSDB, и так далее).

Однако только у Node мы видим и достаточно быстрый движок (V8), и кросс-платформенность, и простой API, и превеликое множество дополнительных модулей. Сочетание этих достоинств делает Node удачным и удобным.

Второй шаг эволюции веборазработчика совершается тогда, когда знание языка JavaScript (а также других веботехнологий — прежде всего CSS и HTML или XML) становится можно применять для разработки ещё и приложений с графическим интерфейсом пользователя — то есть с GUI.

Многие производители создавали средства вебоподобной разработки GUI-приложений.
Здесь можно припомнить с десяток более или менее успешных попыток достигнуть желаемого.

Фонд Мозиллы придумал сперва XUL и XULRunner, а затем и целую операционную систему — Firefox OS.

«Хьюлетт-Паккард» выпустил webOS (с недавних пор — Open webOS).

Google придумал Google Chrome OS.

Ещё можно вспомнить, что у Qt есть основанный на JavaScript язык разметки GUI — QML называется.

Развиваются PhoneGap, Appcelerator Titanium, Adobe AIR и другие средства вебоподобного программирования кросс-платформенных приложений.

Часть вышеперечисленных решений родилась на свет увесистою (например, когда для запуска вебоподобного приложения требуется крупная виртуальная машина или даже новая операционная система). Большинство из них также потребует от программиста выучить некоторый API, иногда довольно корявый и страшный (например, XPCOM для XULRunner), но даже когда такой API достаточно изящен, то всё же изучение его требует усилий. Чем больше он умеет, тем более обширным окажется API.

Между тем, если на первом шаге своей эволюции веборазработчик успел выучить API от Node.js — нет ли возможности опереться на это знание и не учить в дальнейшем ничего лишнего?

Второй шаг эволюции веборазработчика становится естественным продолжением первого, если разметка и оформление вебоподобного приложения задаются при помощи HTML и CSS, а поведение — при помощи JavaScript, причём «под капотом» работает ужé известный разработчику движок Node.js.

В частности, если воспользоваться AppJS, то тогда объектная модель (DOM) демонстрируемой «страницы» содержит под именем window.node глобальный объект Node.js, и мы можем без труда прочесть в window.node.process.versions.node версию Node, в window.node.process.arch архитектуру процессора, в window.node.process.platform платформу, и вывести какое-нибудь такое сообщение в окне нашего графического приложения:

[скриншот]

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

Что же такое AppJS?

Читать дальше →
Total votes 67: ↑54 and ↓13 +41
Comments 58

Простые стейт-машины на службе у разработчика

Reading time 8 min
Views 182K
Представьте на минутку обычного программиста. Допустим, его зовут Вася и ему нужно сделать анимированную менюшку на сайт/десктоп приложение/мобильный апп. Знаете, которые выезжают сверху вниз, как меню у окна Windows или меню с яблочком у OS X. Вот такое.

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

var opened = false;

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

var opened = false;
var animating = false;

function onClick(event) {
  if (animating) return;
  if (opened) close();
  else open();
}

Через какое-то время Васе говорят, что меню может быть полностью выключено и неактивно. Не вопрос! Мы-то с вами тут программисты опытные, все понимаем, что… нужно добавить ЕЩЕ ОДИН ФЛАГ! И, всего-то через пару дней разработки, код меню уже пестрит двустрочными IF-ами типа вот такого:

if (enabled && opened && !animating && !selected && finishedTransition && !endOfTheWorld && ...) { ... }

Вася начинает задаваться вопросами: как вообще может быть, что animating == true и enabled == false; почему у него время от времени все глючит; как тут вообще поймешь в каком состоянии находится меню. Ага! Состояния... О них дальше и пойдет речь.

Знакомьтесь, это Вася.


Читать дальше →
Total votes 114: ↑92 and ↓22 +70
Comments 96

Node.js + Chromium = node-webkit: ещё более перспективный вариант второго шага эволюции веборазработчика

Reading time 3 min
Views 47K
Предисловие от переводчика.  В постскриптуме к моей вчерашней блогозаписи я указал, что AppJS — это не единственное такое средство, которое позволяет создавать приложения с GUI (графическим интерфейсом пользователя) при помощи вебоподобных методов разработки на языках HTML, CSS и JavaScript с использованием движка Node.js. Естественной иллюстрацией к этому постскриптуму является нижеследующий перевод гитхабовской страницы проекта node-webkit. И сразу скажу: я предвижу заранее, что непредвзятый взгляд ваш сочтёт node-webkit ещё более удобным и развитым средством, чем AppJS.



Введение


node-webkit — среда для запуска приложений, основанная на Chromium и Node.js. При помощи node-webkit можно создавать традиционные графические приложения посредством HTML и JavaScript. Также node-webkit позволяет вызывать модули Node.js прямо из DOM и тем обеспечивает новый способ создания таких приложений и употребления веботехнологий в них.

node-webkit создан и разрабатывается в Интеловском Центре технологий с открытым исходным кодом (Intel Open Source Technology Center).

Введение в node-webkit (слайды).

Достоинства


  • Приложения создаются при помощи современных HTML5, CSS3, JS и WebGL.
     
  • Полная поддержка API Node.js и созданных другими разработчиками модулей.
     
  • Вызов API Node.js без потерь в производительности.
     
  • Лёгкость упаковки и распространения приложений.

Читать дальше →
Total votes 55: ↑50 and ↓5 +45
Comments 30

В MIT разработали систему построения карт в реальном времени для спасателей

Reading time 2 min
Views 24K
Во время спасательных и поисковых операций спастелям жизненно важно всегда чётко представлять, в какой части здания они находятся, каковы кратчайшие пути эвакуации, какие помещения уже обследованы и где в эту секунду работают их коллеги. Особенно остро эта задача стоит при пожаре и задымлении. В MIT создали индивидуальную систему автоматического построения карты помещения, которая позволяет спасателю всегда знать, где он находится.


Читать дальше →
Total votes 97: ↑90 and ↓7 +83
Comments 63

Компьютерное зрение с использованием человеческого мозга

Reading time 1 min
Views 25K


После более четырёх лет разработки Агентство по перспективным оборонным научно-исследовательским разработкам США (DARPA) представило уникальную систему компьютерного зрения. Уникальность её в том, что для уточнения распознавания компьютерная система использует ЭЭГ-сигнал с человеческого мозга.
Читать дальше →
Total votes 36: ↑36 and ↓0 +36
Comments 40

Information

Rating
Does not participate
Location
Quebec, Канада
Registered
Activity