Pull to refresh
12
0
Send message

Монадные трансформеры для практикующих программистов

Reading time6 min
Views12K

Прикладное введение в монадные трансформеры, от проблемы к решению


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


Всё как обычно: несколько лаконичных однострочных выражений (да, детка, это Scala!), несколько странных ошибок компилятора (о, нет, Scala, нет!), лёгкое сожаление о том, что вы написали такой запутанный код… И вдруг вы сталкиваетесь со странной проблемой: выражение for не компилируется. «Ничего страшного», — думаете вы: «сейчас гляну на StackOverflow», как вы это делаете ежедневно. Как все мы это делаем ежедневно.


Но сегодня, похоже, неудачный день.


Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments8

Флагманы линейки Cisco Wi-Fi появились в России

Reading time4 min
Views8.6K
В феврале этого года в России открылись к заказу точки доступа Cisco Aironet серий 2800 и 3800 — флагманские точки портфолио Cisco с поддержкой стандарта 802.11ac Wave 2. Эти продукты позволяют достичь невиданной ранее производительности в сети Wi-Fi – 5.2Гб/с. Производство точек доступа серий 2800, 3800 находится в России, в городе Тверь.


Cisco Aironet серий 2800 и 3800 разработаны для надежной, продолжительной и высокопроизводительной работы.
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments8

rssh, или Как разрешить SCP, но запретить SSH

Reading time2 min
Views19K
Вполне адекватная ситуация: у вас есть удалённая Linux-машина с доступом по SSH, и вам срочно нужно дать кому-то из знакомых возможность загрузить на эту машину файл. Разумеется, нам абсолютно лениво разворачивать ради этого FTP-сервер. Да и зачем, когда есть SCP?

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

Выход вроде как всплывает: надо заменить пользователю shell по умолчанию (/bin/sh) на что-нибудь другое. Вот только что?
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments22

Дарвин был лентяем, и вам бы это также не помешало

Reading time16 min
Views36K

У многих известных учёных есть нечто общее: они не работали по многу часов в день


image

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

Как же они достигли всего? Может ли поколение, воспитанное на уверенности в необходимости 80-часовой рабочей недели для достижения успеха, научиться чему-либо на примере жизни людей, заложивших основы теории хаоса, топологии, или написавших "Большие надежды"?
Читать дальше →
Total votes 41: ↑36 and ↓5+31
Comments44

Что не так со светодиодными лентами?

Reading time3 min
Views48K
Друзья, всем привет! Если со светодиодными лампами всё более-менее понятно и производители пишут основные характеристики. То со светодиодными лентами ситуация довольно смутная. К примеру на имеющихся у меня лентах не указаны такие важные характеристики, как индекс цветопередачи — CRI, цветовая температура (бывают отличия) и я уж не говорю про световой поток.

Почему бы нам не начать тестирование лент?
Читать дальше →
Total votes 63: ↑62 and ↓1+61
Comments142

Scala: parser combinators на примере парсера формул

Reading time9 min
Views12K

Время от времени у меня возникает желание придумать свой собственный маленький язык программирования и написать интерпретатор. В этот раз я начал писать на scala, узнал про библиотеку parser combinators, и был поражён: оказывается, можно писать парсеры легко и просто. Чтобы не превращать статью в пособие по "рисованию совы", ниже приведёна реализация разбора и вычисления выражений типа "1 + 2 * sin(pi / 2)".


Сам парсинг и вычисление выражения занимают всего лишь 44 непустых строчки — не то чтобы я сильно стремился сократить их количество, но выглядит это реально просто и лаконично. Проект на github.


Для сравнения:



Итак, если вам не терпится увидеть результат:


Ответственный за парсинг кусочек кода
object FormulaParser extends RegexParsers with PackratParsers {

    def id: Parser[Id] = "[a-zA-Z][a-zA-Z0-9_]*".r ^^ Id

    def number: Parser[Number] = "-" ~> number ^^ (n => Number(-n.value)) |
        ("[0-9]+\\.[0-9]*".r | "[0-9]+".r) ^^ (s => Number(s.toDouble))

    def funcCall: Parser[FuncCall] = id ~ ("(" ~> expression <~ ")") ^^ {case id ~ exp => FuncCall(id, exp)}

    def value: Parser[Expression] = number | funcCall | id | ("(" ~> expression <~ ")")

    lazy val term: PackratParser[Expression] = term ~ ("*" | "/") ~ value ^^ binOperation | value

    lazy val expression: PackratParser[Expression] = expression ~ ("+" | "-") ~ term ^^ binOperation | term
    ...
}

Посмотрите на следущую строчку:


def value: Parser[Expression] = number | funcCall | id | ("(" ~> expression <~ ")")

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


Это возможно по следующим причинам:


  1. В scala разрешено давать методам замечательные названия типа "~", "~>", "<~", "|", "^^". Комбинация парсеров p и q записывается как p~q, а возможность выбрать один из них: p|q. Читается намного лучше, чем p.andThen(q) или p.or(q)
  2. Благодаря неявным преобразованиям (implicits) и строчка "abc" и регулярное выражение "[0-9]+".r при необходимости превращаются в парсеры.
  3. В языке мощная статическая система типов, которая позволяет ловить ошибки сразу.

Думаю, мне удалось Вас заинтересовать, поэтому дальше всё будет по порядку.


Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments11

Учим TensorFlow рисовать кириллицу

Reading time7 min
Views14K
Привет Хабр! За последние годы новые подходы в обучении нейронных сетей позволили существенно расширить сферы практического применения машинного обучения. А появление большого количества хороших высокоуровневых библиотек дало возможность проверить свои навыки специалистам разного уровня подготовки.

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

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

В качестве библиотеки был выбран TensorFlow. А за задачей и её решением прошу под кат…
Читать дальше →
Total votes 59: ↑58 and ↓1+57
Comments7

Как мотивировать пользователей залипнуть в вашем продукте навсегда: Фреймворк Папы Григория

Reading time5 min
Views19K
Почему у Фейсбука десятизначное число пользователей, а у большинства приложений — просто около десяти? Как побудить пользователей приходить снова и снова? Что движет ими?

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

Я предпочитаю название Фреймворк Папы Григория. Вам его составляющие наверняка знакомы как семь смертных грехов. Семь главных грехов. Peccata capitalia.

Давайте посмотрим как успешные приложения умело их используют и позволяют предаться всем им одновременно.

Папа Григорий в своем труде «Толкование на Книгу Иова, или Нравственные толкования» (Expositio in librum Iob sive Moralia) упорядочил их от самых простых в реализации, но привлекающих не всех, до самых сильных, над которыми, однако, надо потрудиться.
Читать дальше →
Total votes 51: ↑50 and ↓1+49
Comments15

Кластеризация текстовых документов по семантическим признакам (часть вторая: описание моделей)

Reading time6 min
Views11K

Модели Word2Vec


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

Идея сглаживания в следующем.
Читать дальше →
Total votes 18: ↑15 and ↓3+12
Comments3

Кластеризация текстовых документов по семантическим признакам (часть первая: описание алгоритма)

Reading time6 min
Views30K
Существует огромное количество алгоритмов кластеризации. Основная идея большинства из них – объединить одинаковые последовательности в один класс или кластер на основе сходства. Как правило, выбор алгоритма определяется поставленной задачей. Что касается текстовых данных, то здесь сравниваемыми составляющими служат последовательности слов и их атрибутов (например, вес слова в тексте, тип именованной сущности, тональность и пр.). Таким образом, тексты изначально преобразуются в вектора, с которыми производят разного типа манипуляции. При этом, как правило, возникает ряд проблем, связанных с: выбором первичных кластеров, зависимостью качества кластеризации от длины текста, определением общего количества кластеров и т.п. Но наиболее сложной проблемой является отсутствие связи между близкими по смыслу текстами, в которых используется разная лексика. В таких случаях объединение должно происходить не только на основе сходства, а еще и на основе семантической смежности или ассоциативности.


Читать дальше →
Total votes 14: ↑9 and ↓5+4
Comments9

Веселые картинки для развития мышления ребенка

Reading time8 min
Views47K
image
Кто самый легкий?
(иллюстрация из журнала «Веселые картинки», 1983, №4)

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

Применение погремушек и сосок оказалось делом более-менее простым, но вот с «развивающими играми» все показалось намного интереснее. Можно ли на самом деле усиливать развитие мыслительных способностей у ребенка, и как это делать?

Чтобы ответить на этот вопрос, я оставила карьеру ученого и пошла работать педагогом дополнительного образования. То, что вы прочитаете дальше – результат, пардон, опытов над детьми (не волнуйтесь, ни один подопытный ребенок не пострадал).
Читать дальше →
Total votes 54: ↑54 and ↓0+54
Comments246

Мифы о Spark, или Может ли пользоваться Spark обычный Java-разработчик

Reading time31 min
Views45K
Продолжаем расшифровывать и местами облагораживать хардкорные доклады спикеров JPoint 2016. Сегодня доклад поменьше, всего час с копейками, соответственно, концентрация пользы и отжига на одну минуту зашкаливает.

Итак, Евгений EvgenyBorisov Борисов о Spark, мифах и немного о том, дествительно ли тексты Pink Floyd адекватнее, чем у Кэти Пэрри.





Это будет необычный доклад о Spark.

Обычно много рассказывают про Spark, какой он крутой, показывают код на Scala. Но у меня немного другая цель. Во-первых, я поговорю о том, что такое Spark и зачем он нужен. Но основная цель — показать, что вы, как Java-девелоперы, можете прекрасно им пользоваться. В этом докладе мы развеем несколько мифов о Spark.
Total votes 34: ↑30 and ↓4+26
Comments8

Фундаментальные законы информационной безопасности

Reading time7 min
Views49K

Все мы знаем о фундаментальных законах физики, открытые Ньютоном и Галилеем. Наверное хотя бы немного со школьных парт слышали об аксиоматике Евклида. Кто решил хотя бы приблизиться к положению homo universalis, (хотя в наш XXI век это весьма непросто) наверное что-то слышал о законах Данилевского, Тойнби и/или Сэмюэла Хантингтона...


А что с Информационной Безопасностью? Есть ли у нас, ИБ-шников свои фундаментальные законы? Да — есть! И в этой статье о них пойдет речь.


Дальше читать
Total votes 40: ↑37 and ↓3+34
Comments43

Прогноз на Specification pattern в Domain layer — ожидаются проблемы

Reading time3 min
Views20K
Data Access Layer – одна из наиболее больных тем.
Написание хорошего слоя доступа к данным – это не тривиальная задача. Примеров реализации невероятно много, но адекватных среди них единицы.
Можно ли считать реализацию шаблона Repository — DAL?
Вот что предлагают MS msdn.microsoft.com/en-us/library/ff649690.aspx
image
А вот и местные работы habrahabr.ru/post/52173
Варианты довольно нормальные.
Но когда я вижу
«Репозиторий – это фасад для доступа к базе данных.»
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments187

Обзор инструментов для вскрытия хэша: John the Ripper password cracker и MDCrack

Reading time6 min
Views36K
На данный момент хэш можно вскрыть пятью способами: грубый перебор (брутфорс), подбор по словарю, по словарю с правилами (гибридная атака), rainbow таблицы (радужные таблицы) и криптоатака. Сами хэши можно разделить на обычные хэши, и хэши с солью (salt, «затравка»). Эта статья посвящена программам john и mdcrack. На их примере, также рассмотрим основные методы для реализации брутфорса.
Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments6

Как создать музыку для видеоигры

Reading time5 min
Views55K
[Публикую собственный перевод статьи за авторством TitanSlayer, автора музыки для видео игр, фильмов и ТВ]

Мне всегда нравились видеоигры. С самого детства я был очарован, загипнотизирован такими играми как Quake, Hexen, Heroes of Might & Magic.

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

В этой статье я собираюсь осветить фундаментальные основы: особенности взаимодействия автора саундтрека с разработчиком, и то, как автор должен подойти к работе над музыкой для игры.
Total votes 29: ↑27 and ↓2+25
Comments17

Портативный огород Click and Grow. Выращиваем зелень дома или в офисе круглый год

Reading time3 min
Views20K


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

Считается, что причиной этого может быть авитаминоз — нехватка необходимых для организма человека витаминов. И хотя некоторые ученые говорят о том, что авитаминоза нет, большинство специалистов уверены в обратном. Как бы там ни было, восполнить недостаток можно свежими овощами и фруктами, которых весной не так и много. Здесь может помочь собственный небольшой огород с парой грядок, засаженных зеленью. Но вот беда и огород есть не у всех, плюс многие люди не считают работу с землей таким уж увлекательным делом. В ситуации, когда хочется свеженьких овощей и фруктов, на помощь может прийти умный сад Click and Grow.
Total votes 17: ↑13 and ↓4+9
Comments72

От моноидов к алгебрам де Моргана. Строим абстракции на Haskell

Reading time14 min
Views13K

Что общего у нормального распределения, конечных автоматов, хеш-таблиц, произвольных предикатов, строк, выпуклых оболочек, афинных преобразований, файлов конфигураций и стилей CSS? А что объединяет целые числа, типы в Haskell, произвольные графы, альтернативные функторы, матрицы, регулярные выражения и статистические выборки? Наконец, можно ли как-то связать между собой булеву алгебру, электрические цепи, прямоугольные таблицы, теплоизоляцию труб или зданий и изображения на плоскости? На эти вопросы есть два важных ответа: 1) со всеми этими объектами работают программисты, 2) эти объекты имеют сходную алгебраическую структуру: первые являются моноидами, вторые — полукольцами, третьи — алгебрами де Моргана.

Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments12

Ардуино-совместимый ПЛК CONTROLLINO, часть 1

Reading time6 min
Views54K
Впервые про программируемый логический контроллер по имени CONTROLLINO мне довелось узнать году еще в 2014-м в случайной переписке с человеком, который подбирал себе ПЛК для домашней автоматизации. Я ему рекомендовал какие-то классические модели, а он в ответ сообщил, мол, видел на кикстартере некий интересный проект под названием CONTROLLINIO. Это промышленный ПЛК, который программируется так же, как Arduino, в его родной IDE.

Тот парень работал php-программером и С++ был для него не проблема. Деньги и идеи имел, а желания изучать LAD или Codesys нет. В итоге отписался, что сделал предзаказ на CONTROLLINO и больше на связь не выходил.

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


Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments156

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity