Pull to refresh
1
0
Демидюк Денис @iDennis

User

Send message

Материалы MoscowJS 12

Reading time1 min
Views9.3K
Двенадцатый митап MoscowJS прошёл 26 июня в офисе компании Mail.ru. На встрече выступили ребята из Яндекса, Mail.ru и Tai.st. Говорили об облаках, оптимизациях мобильного веба и, конечно, расчёсках! Мы собрали видео и другие материалы события в одном посте.

Вот как это было…
Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments0

Вход в web-приложение с использованием распознавания лица

Reading time3 min
Views21K


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

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

Итак, представленный ниже метод биометрической аутентификации не рекомендуется для промышленной эксплуатации в качестве замены первого фактора (пароля). Риск при использовании метода в качестве второго фактора существенно меньше, но все еще существует — решайте сами. Я просто расскажу, как и с помощью каких инструментов можно организовать аутентификацию для веб приложения с использованием распознавания и валидации изображения человеческого лица. Аппаратная реализация — обычная web-камера.
Читать дальше →
Total votes 30: ↑24 and ↓6+18
Comments40

Адаптивная верстка с Restive.JS

Reading time4 min
Views20K
Для начала хотел бы вам сказать, что моя специализация — это Backend, но версткой и клиентской частью приходится заниматься постоянно, особенно в своих проектах, которые я делаю в одиночку. Уже давно стало негласным правилом то, что сайт должен быть удобен на всех устройствах, включая всё их разнообразие, особенно в век популяризации мобильного интернета. Благо, CSS3 позволяет это делать при помощи медиа-выражений (media queries). Но есть еще один способ, показавшийся мне более удобным. В зависимости от размера экрана, его ориентации, типа устройства, устанавливать глобальные стили тегу html (можно и другим элементам). А в CSS, отталкиваясь от этих классов, задавать особые стили для разных случаев. Так CSS станет более понятным и мы избавимся от использования медиа-выражений. Для этого нам и понадобится Restive.JS. Так как я человек-практик, да и полное описание лучше читать на сайте плагина, то в статье я ограничусь созданием адаптивной мини-страницы, в процессе которого, надеюсь, станет понятно, для чего всё это необходимо.
Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments19

Особенности использования MongoDB

Reading time4 min
Views28K


Чуть больше года назад меня попросили поучаствовать в развитии одной известной в узких кругах (но не всегда с хорошей стороны) социальной сети. В то время я уже был фанатом языка Haxe, поэтому с тем на чём писать вопросов не возникало. А вот с БД они появились. Опыт использования MS SQL Server и MySQL говорили о том, что когда дело касается больших объёмов информации, то порой случаются сложности (практически невозможным становится изменение структуры БД, а когда-то быстрые запросы работают уже критически медленно). Посовещавшись с коллегами (у которых уже был опыт с Mongo), мы решили использовать именно эту СУБД. А о тех особенностях, которые всплыли в течение этого года я и расскажу ниже.
Читать дальше →
Total votes 42: ↑29 and ↓13+16
Comments21

Генерация CSS-спрайтов с Gulp

Reading time6 min
Views64K

Работая над одним большим проектом, мы с напарником задумались над тем, чтобы автоматизировать процесс сбора спрайтов на проекте.
До этого спрайты собирались ручками или с помощью онлайн сервисов, что отнимало достаточно времени.
Проект уже собирался Gulp'ом и было принято решение найти адаптированный под него сборщик спрайтов.
Ищем решение
Total votes 29: ↑26 and ↓3+23
Comments47

Intersystems Caché: Globals API для .NET – прямой доступ к глобалам из C#

Reading time15 min
Views7.2K
Недавно возникла необходимость сравнить скорость записи/чтения данных из СУБД Intersystems Caché, используя разные виды доступа – прямой к глобалам, объектный и реляционный. С объектным и реляционным доступом все понятно, а вот с прямым (он же direct access) пришлось разбираться. Для тех, кому, как и мне, с первого взгляда документация не дала полного понимания процесса, и предназначена эта статья. Для примера буду делать консольное приложение в лучших традициях процедурного программирования.
Читать дальше →
Total votes 14: ↑11 and ↓3+8
Comments9

Форматирование цены, или как я input переписывал

Reading time5 min
Views23K
По работе недавно столкнулся с, вроде бы, тривиальной задачей — форматирование цены и деление ее по разрядам.
Ничего сложного решил я. Тем более на просторах интернета лежит уже куча готовых решений от простых и скучных (разворачиваем строку, добавляем через каждые 3 символа пробелы и разворачиваем назад) до вполне интересных (уверен что эту регулярку многие видели, но речь не о ней)
price.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')


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


На глаза попадались даже библиотеки, для разбивания чисел по разрядам, но я решил остановится на вышеупомянутой регулярке.
Повесил форматирование на keyup, что может быть сложнее?
Как выяснилось - может.
Total votes 25: ↑15 and ↓10+5
Comments30

Python вышел на 1-е место для обучения программированию в университетах США

Reading time1 min
Views42K
По состоянию на июль 2014 года Python вышел на 1-е место в программах начального обучения программированию в университетах США, пишет журнал Communication of the ACM.



27 из 39 крупнейших факультетов программирования (69%) в университетах предлагают курсы обучения на Python по программам CS0 или CS1 (introductionary courses). Ситуация изменилась в последние три года. В частности, недавно на Python перевели вводные курсы программирования Массачусетский технологический институт и Калифорнийский университет в Беркли.
Читать дальше →
Total votes 50: ↑42 and ↓8+34
Comments31

TJ Holowaychuk: Прощай Node.js

Reading time5 min
Views54K
Примечание от переводчика:

Я решил перевести эту статью в основном из-за личности автора. TJ вложил очень много усилий в развитие Node.js и его инфраструктуры, он автор таких проектов как express, jade, mocha, stylus, автор 550 репозиториев на npm. Существуют также теория, что под этим именем скрывается группа людей.

Как бы то ни было, JavaScript и Go сообщества в ближайшие время ожидают изменения.

Покидая страну Node.js


Я сражался с Node.js достаточно долго, что бы перестать получать от этого удовольствие, это мое официальное прощание! И, что еще важнее, я ищу людей, которые смогут поддерживать мои проекты!

Node отлично справляется с некоторыми вещами, но, к сожалению, это не самый подходящий инструмент для того, что мне сейчас интересно. Я все еще планирую использовать его для сайтов, но если вы хотели бы заняться поддержкой одного из моих проектов, дайте мне знать. Просто оставьте комментарий с вашим именем на Github, ссылкой на npm и названием проекта. Как обычно я прошу не делать больших изменений в существующих API: создать новый проект будет проще.

Я также продолжу поддерживать Koa.

Читать дальше →
Total votes 108: ↑95 and ↓13+82
Comments70

Расширенный материал по Java 8

Reading time4 min
Views52K
Не секрет, что многие Java-программисты, начиная свой путь в индустрии, уделяют большое внимание «тяжелым» технологиям — OpenJPA, Spring, JAX-RS, EJB, WS-*,… Это дает возможность как скорее влиться в современные корпоративные проекты, так и максимизировать скорость роста зарплаты.

Многие из них в конце концов «спускаются» до технологий лежащих в основе указанных фреймворков — JDBC, Servlet API, NIO/NIO.2. Однако прискорбно, что зачастую не остается время на детальное изучение самого языка и возможностей платформы.

Речь идет не о тонкостях или экзотике, а о том, что составляет существенную часть работы фреймворка: Servlet-контейнер использует множественные ClassLoader-ы, JPA2-провайдер использует манипулирование байткодом, абсолютное большинство библиотек используют Reflection API, всеобщее использование Generics только «усугубилось» с появлением функциональных интерфейсов (java.lang.function.*) и лямбд.

На недопонимание изначальной платформы (ClassLoader, Reflection API) накладываются «новвоведения» Java 5 (Generics), а теперь еще и Java 8 (методы в интерфейсах, ссылки на методы, лямбды, Stream API, JSR 308: Pluggable Type Systems). Надо обратить внимание на то, что Generics + Java 8 — это не просто языковые фичи, это частично переход к функциональному стилю программирования.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

Я собрал определенное количество полезных (на мой взгляд) ссылок по следующим темам
  1. Методы в интерфейсах, ссылки на методы, множественное наследование
  2. Лямбды (Project Lambda)
  3. Stream API
  4. Функциональные алгоритмы
  5. Аннотации
  6. Генерики
  7. Reflection API
  8. Загрузка классов

Надеюсь кто-то сочтет их полезными.
Читать дальше →
Total votes 43: ↑34 and ↓9+25
Comments35

Метапрограммирование с примерами на JavaScript

Reading time15 min
Views42K
Эта статья, еще одна попытка переосмысления метапрограммирования, которые я периодически предпринимаю. Идея каждый раз уточняется, но в этот раз удалось подобрать достаточно простых и понятных примеров, которые одновременно очень компактны и иллюстративны, имеют реальное полезное применение и не тянут за собой библиотек и зависимостей. В момент публикации я буду докладывать эту тему на ОдессаJS, поэтому, статью можно использовать, как место для вопросов и комментариев к докладу. Формат статьи дает возможность более полно изложить материал, чем в докладе, слушатели которого, не освобождаются от прочтения.

UPD: Обновленная видеоверсия статьи на Youtube (лекция записана в Киевском политехническом институте 18 апреля 2019 года в рамках курса «100 видео-лекций по программированию»):

Читать дальше →
Total votes 52: ↑39 and ↓13+26
Comments23

Запрет хранения данных россиян на зарубежных серверах: что будет после 1 сентября 2016 года?

Reading time3 min
Views248K


Сегодня состоялось событие которого все так долго ждали, теперь не будет никаких полумер, с 1 сентября 2016 запрещено хранение любых персональных данных за пределами РФ.

Что произошло?
Что попадает под запрет?
Что будет с интернетом?
Что всё это значит?
Что делать?


На эти вопросы я постараюсь ответить внутри поста.
Читать дальше →
Total votes 270: ↑226 and ↓44+182
Comments1006

Личный кабинет и мобильное приложение

Reading time3 min
Views31K


Здравствуйте. В первой части статьи я рассказал о том, как мы модернизировали портал www.megafon.ru и интернет-магазин. Было много комментариев по поводу личного кабинета, поэтому мы решили выделить для рассказа о его обновлении отдельный топик. Естественно, меняя сайт, мы не обошли и этот важный инструмент.

Сегодня речь пойдет о Личном кабинете, а также новом мобильном приложении «МегаФон Личный кабинет».
Читать дальше →
Total votes 87: ↑46 and ↓41+5
Comments14

Apple выпустила набор обновлений для своих продуктов

Reading time1 min
Views5.8K
Вчера компания выпустила обновления для своих продуктов Apple TV, операционных систем iOS и OS X Mavericks, а также для веб-браузера Safari. Обновления исправляют широкий спектр уязвимостей, которыми могут воспользоваться злоумышленники. Наибольшему количеству исправлений подвергся движок WebKit. С использованием уязвимостей в WebKit атакующие могут удаленно исполнить произвольный код в браузере. В модификациях WebKit, которые используются в iOS и Apple TV, исправлено 28 таких Remote Code Execution уязвимостей.



Про исправленные уязвимости для iOS 7 мы подробно писали в предыдущем посте. Обновления для Apple TV исправляют те же самые уязвимости, которые были обнаружены в компонентах iOS 7, за исключением CVE-2014-1383. Эта уязвимость может быть использована злоумышленниками для проведения транзакции в iTunes Store без подтверждения авторизации. Злоумышленник уже должен иметь доступ к разблокированному устройству и может обойти повторный запрос на подтверждение пароля в iTunes Store.

Читать дальше →
Total votes 20: ↑12 and ↓8+4
Comments1

Определитель типа блокировки сайтов у провайдера

Reading time1 min
Views139K
image

Написал тут маленькую программку, которая позволяет определить тип блокировки сайтов из реестра, применяемый провайдером. Она умеет определять подмену DNS, перенаправление DNS, IP/Port restricted DPI, Full DPI, ну и блокировку по IP, конечно же.
Программа отправляет применяемый тип блокировки на сервер, в дальнейшем можно будет составить таблицу по провайдерам.

Написано на Python 3.
Репозиторий на Github
Бинарники для Windows
Total votes 124: ↑121 and ↓3+118
Comments118

Web Application Firewall (ModSecurity) в действии

Reading time12 min
Views38K
Атаки на уровень web-приложений одни из самых распространенных и часто крайне критичны. В данной статье хочу показать насколько способен WAF ModSecurity отражать данные угрозы.

1. Межсетевой экран уровня web-приложений Modsecurity


1.1 Проект ModSecurity


ModSecurity создан Иваном Ристиком (Ivan Ristic) в 2003 году и представляет собой firewall Web-приложений, который может использоваться как модуль Web-сервера Apache, либо работать в автономном режиме и позволяющий защитить Web-приложения как от известных, так и неизвестных атак. Его использование прозрачно, как установка, так и удаление не требует изменения настройки сервисов и сетевой топологии. Кроме того, при обнаружении уязвимого места теперь не обязательно впопыхах изменять исходный код, делая новые ошибки, достаточно на первых порах добавить новое правило, запрещающее вредную комбинацию. Modsecurity может защищать одновременно несколько Web-серверов, в том числе и отличных от Apache [1].
Читать дальше →
Total votes 14: ↑8 and ↓6+2
Comments9

JSCS: JavaScript Code Style

Reading time3 min
Views59K
Когда девять месяцев назад я написал для себя маленькую консольную утилиту, я и не подозревал, что вскоре она превратится в серьёзный и единственный в своём роде инструмент, которым будут пользоваться даже такие известные всем команды, как jQuery, Bootstrap, Angular. Сейчас, когда я пишу эту статью, у моего проекта на гитхабе 1010 звёздочек, и мне очень радостно думать о том, что так много людей смогли с помощью моей придумки сделать свою работу удобнее.

История этого проекта началась с моей личной боли.

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

Читать дальше →
Total votes 126: ↑121 and ↓5+116
Comments118

Вы мне Javascript сломали

Reading time5 min
Views63K
Давным-давно

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

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

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

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

Мы достигли расцвета JS

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

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

Мы следовали вменяемому процессу и делали отличные вещи из отличного кода, освободившись от оков мерзких корпоративных фреймворков.
А потом вы всё сломали
Total votes 239: ↑176 and ↓63+113
Comments122

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

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

Intercooler.js


Кто нибудь помнит FullAjax — разработку Руслана Синицкого sirus (нынешний основатель Jelastic)? Вкратце это библиотека для работы с AJAX с помощью объявления определенных атрибутов у элементов, а подробнее об этом написано в постах «Прямые ссылки на AJAX веб-сайтах – наша технология Fullajax Direct Link», «Полный AJAX. Теория и Примеры. Фишки и Фичи» и «Fly AJAX — пишите меньше, имейте больше. Нестандартный AJAX и индексация поисковиками». Вернемся к Intercooler, это нечто похожее:

<div id="targetDiv">Results Div...</div>
<i id="indicator" style="display:none" class="fa fa-spinner fa-spin">
<input id="hiddenInput" type="hidden" name="hidden" value="42"/>

<div ic-trigger-on="click" ic-verb="POST" ic-src="/example" ic-include="#hiddenInput" ic-indicator="#indicator" ic-target="#targetDiv" ic-transition="none">
    Click Me!
</div>

После клика по div, отправляется POST запрос со значением поля с #hiddenInput, а в процессе будет отображаться #indicator. Ответ будет передан в блок #targetDiv. Разве не здорово?

Читать дальше →
Total votes 63: ↑57 and ↓6+51
Comments11

Information

Rating
Does not participate
Location
Брест, Брестская обл., Беларусь
Date of birth
Registered
Activity