Pull to refresh
9
0
Trdat Mkrtchyan @wombtromb

Frontend developer

Send message

Путь к трансдьюсерам на чистом JavaScript

Reading time13 min
Views18K
Если вы наслышаны о так называемых «трансдьюсерах», но до сих пор не применяете их в JavaScript-разработке, сегодня у вас есть шанс найти ответы на вопросы: «Что такое трансдьюсеры?» и «Как ими пользоваться?». Это позволит вам понять, нужны ли они в ваших проектах, и, если нужны — поможет приступить к их использованию.



Речь пойдёт о том, как писать код, который предназначен для построения хорошо подходящих для компоновки конвейеров преобразований данных, не потребляющий слишком много памяти. Для того, чтобы как следует разобраться в концепции трансдьюсеров, начнём мы с более простых механизмов, редьюсеров, или функций для свёртки данных.
Читать дальше →
Total votes 31: ↑25 and ↓6+19
Comments12

Супер муравейник на ClojureCLR

Reading time10 min
Views14K
Многопоточность в Clojure выведена на новый уровень развития, поскольку там реализованы транзакции изменений памяти STM (The software transactional memory system). В качестве демонстрации Рич Хикки (божественный автор Clojure) и Дэвид Миллер (человек, который написал реализацию Clojure под .Net) предлагают программу «ants», которая моделирует муравейник. Каждый муравей там живет в отдельном потоке. Муравьи бегают по клеткам общего поля, собирают еду, носят ее в муравейник и не конфликтуют друг с другом.

Результат своих упражнений с этой программой я и хочу вынести на общее обозрение. Надеюсь, статья будет полезна тем, кто начинает знакомиться с Clojure на платформе .Net.
Читать дальше →
Total votes 27: ↑24 and ↓3+21
Comments6

Устранение загадочной ошибки «undefined is not a function» в V8

Reading time1 min
Views43K
Джаваскриптовая ошибка «undefined is not a function» довольно загадочна. Как раз поэтому определённым спросом пользуются разъяснительные статьи, из которых читатель, начинающий изучать программирование на JavaScript, способен узнать о том, что такая ошибка (попытка использовать неопределённое значение как функцию) чаще всего возникает при вызове несуществующего метода объекта (а такой вызов, в свою очередь, чаще всего происходит в случае опечатки в названии метода). Такой разъяснительной статьёю может послужить «Ошибки в JavaScript и как их исправить», например.

Однако и после разъяснений остаётся мысль о том, что обнаружение и устранение опечаток (да и других оплошностей при вызове методов) было бы много проще, если бы название «виновного» метода содержалось непосредственно в тексте появляющейся ошибки.

Так и вышло:

Читать дальше →
Total votes 45: ↑35 and ↓10+25
Comments22

Несколько интересностей и полезностей для веб-разработчика #42

Reading time6 min
Views37K
Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

Webtorrent




Полноценный торрент клиент для NodeJS и браузеров. Стримминг будет работать прямо в браузере благодаря WebRTC (data chanels) для P2P транспортировки. А самое главное «It's Just JavaScript™», то есть не нужны никакие дополнительные плагины или расширения. Проект собрал более 3000 звезд на GitHub и на данный момент предоставляет следующие возможности: непосредственно саму потоковую передача данных, загрузка нескольких торрентов одновременно, поддержку magnet uri, peer discovery и protocol extension api, возможность подключения WebTorrent клиентов на разных доменах, стримминг видео в <video> тег в формате (webm (vp8, vp9) или mp4 (h.264)), а также в AirPlay, Chromecast, VLC player и прочие устройства.

var WebTorrent = require('webtorrent')

var client = new WebTorrent()
var magnetUri = '...'

client.add(magnetUri, function (torrent) {
  // Got torrent metadata!
  console.log('Torrent info hash:', torrent.infoHash)

  torrent.files.forEach(function (file) {
    // Get a url for each file
    file.getBlobURL(function (err, url) {
      if (err) throw err

      // Add a link to the page
      var a = document.createElement('a')
      a.download = file.name
      a.href = url
      a.textContent = 'Download ' + file.name
      document.body.appendChild(a)
    })
  })
})

Читать дальше →
Total votes 49: ↑44 and ↓5+39
Comments17

Вырезать и копировать в буффер с помощью JavaScript

Reading time4 min
Views99K
Начиная с IE10 добавлена поддержка команд «Копировать» и «Вырезать» с помощью метода Document.execCommand(). Так же эти методы доступны в Chrome начиная с версии 43.

Любой текст выделенный в браузере при выполнении одной из этих команд будет скопирован или вырезан в буфер обмена пользователя. Это позволяет предложить пользователю простой метод выделить часть текста и скопировать в буфер обмена.

Это становится крайне полезным в сочетании с API программного выделения текста, что бы задать что скопировать в буфер. Примеры будут рассмотрены в этой статье.
Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments25

Установка и запуск Android-приложений на Linux

Reading time1 min
Views192K
image

Как известно, многие Android-приложения можно нативно запускать на Chrome OS благодаря библиотеке Chrome App Runtime.

С помощью расширений chromeos-apk и ARChon запуск Android APK стал возможен и на других ОС.

В этой публикации я расскажу, как установить произвольное Android-приложение на Ubuntu 14.04.
Читать дальше →
Total votes 30: ↑26 and ↓4+22
Comments33

Node.js в огне

Reading time6 min
Views51K
Мы создаем новое поколение веб-приложения Netflix.com, использующего node.js. Вы можете узнать больше о нашем походе из презентации, которую мы представили на NodeConf.eu несколько месяцев назад. Сегодня я хочу поделиться накопленным опытом в настройке производительности нового стека нашего приложения.

Мы впервые столкнулись с проблемами, когда заметили, что задержка запроса в нашем node.js приложении со временем увеличивается. К тому же оно использовало больше ресурсов процессора, чем мы ожидали, и это коррелировало с временем задержки. Нам приходилось использовать перезагрузку как временное решение, пока мы искали причину с помощью новых инструментов и техник аналитики производительности в нашей Linux EC2 среде.

Читать дальше →
Total votes 69: ↑64 and ↓5+59
Comments64

Астрономы окончательно убедились в выходе Voyager 1 в межзвездное пространство

Reading time2 min
Views63K
This artist's concept shows the Voyager 1 spacecraft entering the space between stars.

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

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

Читать дальше →
Total votes 71: ↑64 and ↓7+57
Comments17

Квантовые деньги

Reading time4 min
Views27K
В последнее время в шумихе по поводу квантовых компьютеров (точек, телепортов), на мой взгляд, теряется одна маленькая, но крайне важная деталь, а именно качественно новый механизм. Мир ожидает от квантовых компьютеров неслыханного быстродействия (чтоб взломать RSA), но это то же самое быстродействие, только быстрее; от квантовых точек — высокого разрешения (чтоб смотреть анимэ), те же пиксели/люминофор, только еще меньше; телепотация — то же самое отоволокно/OWC только быстрее (конечно же, я упрощаю).
Но еще в 1969 году (до Феймана, Рида, Минина, Бениоффа, Дойча, Екимова) один чудак предложил идею, которая может лечь в основу будущей инфраструктуры обмена информацией.

В своей статье «Conjugate coding», которую он написал в 1969, а опубликовали ее только в 1983, Стивен Виснер предложил идею как защитить деньги от подделки.

Что самое привлекательное в идее квантовой проверки подлинности, что она строится не на сложности (технической, вычислительной, инженерной, математической и т.д.), а на физической невозможности. На Хабре был замечательный обзор «Техника для проверки подлинности денег», где, помимо оптических, электрических, механических и тд способов защиты, вскользь упоминались квантовые деньги. (со слабыми измерениями пока мало что ясно, поэтому они не угроза квантовым деньгам)

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

На картинке: Квантовая банкнота, предложенная Стивеном Виcнером в 1969 году. Содержит пирамиду с глазом, серийный номер и 20 ловушек для фотонов, чье содержимое является загадкой. В каждой ловушке находится 1 фотон с неизвестной поляризацией.

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

Статья написана для Хабра редакцией сайта о платежных системах с мониторингом обменников Web-payment.ru
Читать дальше →
Total votes 53: ↑46 and ↓7+39
Comments27

Сокобан на Javascript в 30 строк

Reading time1 min
Views17K
Всем привет, решил приобщиться к общему безумию. В 30 строк уже написали почти все, что могли, но старого доброго сокобана я не нашел (возможно, плохо искал), так что хочу восполнить этот пробел.



Ссылка на fiddle
Читать дальше →
Total votes 118: ↑73 and ↓45+28
Comments25

Змейка на Canvas

Reading time5 min
Views14K
Приветствую уважаемое хабра-сообщество. После прочтения поста «Создаём игру, используя canvas и спрайты» в день его выхода, решил углубить свои познания в Canvas. Так, как пока в работе не приходилось сталкиваться с этим элементом, пришлось пробежаться на скорую руку по API.
Конечно, рисование линий, прямоугольников, треугольников и полукругов весьма занимательное занятие. Но для приобретения реального опыта была поставлена задача – создать что-то функциональное и простое.

Вот так родилась идея написать собственную игру, всем знакомую змейку.
Читать дальше →
Total votes 12: ↑7 and ↓5+2
Comments16

Курс «Принципы реактивного программирования» на coursera.org

Reading time7 min
Views35K
Принципы реактивного программирования Я хочу рассказать о современной дисциплине программирования, отвечающей растущим требованиям масштабируемости, отказоустойчивости и быстрого отклика, и незаменимой как в многоядерных средах, так и в облачных вычислениях, а также представить вам открытый онлайн-курс по ней, который начнётся всего через несколько дней.

Читать дальше →
Total votes 23: ↑13 and ↓10+3
Comments10

Функциональное программирование на Javascript

Reading time15 min
Views128K


Краткое содержание:

Возьмем немного функций высшего порядка, добавим частичное применение функций, приправим fold с map-ом и получим Javascript DSL для работы с DOM.

Человеческим языком:
Простое и понятное введение в функциональное программирование на чистом и понятном Javascript.

В отличие от «Через тернии к Haskell» все разжевано (возможно даже слишком) и разложено по полочкам.

Прочтение статьи развоплотит миф о неприменимости ФП в реальной жизни. Вы сможете смотреть на решение одной и той же задачи с разных точек зрения. Прямо как на картинке.

Читать дальше →
Total votes 123: ↑114 and ↓9+105
Comments54

Lisp разработчик: две стороны одной медали

Reading time6 min
Views20K
Я уже около 20 лет программирую на Lisp и прочитал множество сообщений Usenet и статей в блогах, написанных Lisp — разработчиками. Я часто задавал себе вопрос — А существует ли типичный Lisp — разработчик, как существуют типичные представители наций или других групп людей?

После некоторых размышлений, я пришел к выводу, что определенно существует, и этот характер влиял на историю развития языка, его сильные и слабые стороны. Так родилась эта статья, которая без сомнений кого-то заденет и подтолкнет спору.
Читать дальше →
Total votes 88: ↑81 and ↓7+74
Comments161

Кто живет в соцсетях?

Reading time8 min
Views75K

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

О том, что удалось выудить из таких данных, и пойдет рассказ.
Читать дальше →
Total votes 131: ↑124 and ↓7+117
Comments115

Создаём своё расширение для Google Chrome

Reading time5 min
Views228K
На хабре уже есть несколько статей о создании расширений для хрома, поделюсь своим опытом, затронув основные вещи и места, в которых у меня возникли трудности.
Что понадобится для создания расширения в двух словах:
1) Базовые знания Javascript
2) Базовые знания HTML
3) 5$

Покажу создание расширения для хрома на примере своего, созданного для подсчета «потерянного времени» в интернете. То есть это расширение считает время, проведенное на сайтах с возможностью определения посещенных сайтов по категориям: полезное время, либо потерянное время.
Читать дальше →
Total votes 20: ↑13 and ↓7+6
Comments15

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity