Pull to refresh
13
0
Андрей Кондратьев @Andruhon

Software Developer

Send message

Изучая Vaadin

Reading time3 min
Views44K
Я хочу рассказать про Vaadin — фреймворк для разработки веб-приложений на Java. Да, на Java этих фреймворков — пруд пруди, но Vaadin заметно выделяется среди них.

Чем Vaadin отличается от других Java web фреймворков?


Если вкратце, Vaadin позволяет писать веб-приложение в стиле Swing:
import com.vaadin.ui.*;

public class HelloWorld extends com.vaadin.Application {

    public void init() { 
        Window main = new Window("Hello window"); 
        setMainWindow(main);
        main.addComponent(new Label("Hello World!")); 
    }
}

Считается преимуществом, при использовании Vaadin приходится программировать только на одном языке — Java, то есть не надо заморачиваться с XML, JavaScript, Html и т.д. и можно вовсю использовать весь мощный инструментарий Java: рефакторинг, юнит-тесты, заглушки (моки) и т.д. Ты пишешь new Label("Hello World!"), а Vaadin сам уже ломает голову, как это превратить в Html и JavaScript.

С чем можно сравнить Vaadin?
Total votes 53: ↑44 and ↓9+35
Comments51

Wicket+лямбды: типобезопасная и лаконичная реализация IModel

Reading time4 min
Views4.9K
Стандартная задача при разработке веб-приложения: есть объект данных, требуется эти данные отобразить (вывести в HTML). В Apache Wicket данные для этого привязываются к компонентам (которые и будут заниматься отображением) с помощью моделей (реализующих интерфейс IModel).

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

    T getObject();

Абстракция простая и лаконичная, но не всё так просто на практике. Под катом — сказ о том, как Java 8 помогла победить многословность и небезопасность стандартных подходов.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments5

Декораторы и рефлексия в TypeScript: от новичка до эксперта (ч.1)

Reading time6 min
Views60K


От переводчика: TypeScript — довольно молодой и активно развивающийся язык. К сожалению, в русскоязычной части Интернета о нем довольно мало информации, что не способствует его популярности.

Многие возможности, которые сейчас реализованы в ES6, значительно раньше появились именно в TypeScript. Более того, некоторые возможности и предложенные стандарты ES7 также имеют экспериментальную реализацию в этом языке. Об одной из них, появившейся сравнительно недавно — декораторах — и пойдет речь.

Предлагаю вашему вниманию перевод статьи (а точнее, цикла статей) о декораторах в TypeScript под авторством Remo H.Jansen

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

Java и время: часть вторая

Reading time21 min
Views228K
Эта статья написана в продолжение к первой части и посвящена новому Date Time API, который был введен в Java 8. Я изначально хотел оформить эту тему отдельно, поскольку она достаточно большая и серьезная. Я еще сам не в полной мере начал использовать этот API в проектах, поэтому разбираться будем вместе по ходу. В принципе в переходе на новый API нет никакой срочной необходимости, более того многие еще и не начинали проекты на Java 8, а это означает, что время на освоение еще есть.

В статье я постараюсь не скатываться в банальный перевод штатной документации, больше я хотел бы сконцентрироваться на том, что мне показалось особенно важным.
Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments4

Про волнения в головах

Reading time13 min
Views24K

Пару месяцев назад мне захотелось поэкспериментировать с нейроинтерфейсом. Никогда этой темой не занимался, но вдруг стало любопытно. Вроде как лет 5-10 назад обещали бум нейроустройств, а всё что мы сейчас имеем на рынке — устройство чтобы махать ушами, устройство чтобы светить камешком, да устройство чтобы левитировать шаром. Где-то на подходе устройство чтобы будить вовремя. Вот тут есть неплохая статья про всё это дело. В то же время регулярно появляются какие-то исследования, где рассказывают, что люди могут научиться двигать роботическими руками-ногами или писать тексты (1, 2, 3, вот тут есть подборка). Но это всё опытное, в единственном экземпляре, со стоимостью аппаратуры как хорошее авто.

А где что-то посередине? Что-то полезное обычному пользователю? Пусть даже не везде, а в каких-то отдельных применениях. Ведь даже навскидку придумывается несколько вещей: детектор засыпания для водителя, повышение работоспособности (например через выбор музыки, или управление перерывами!). Можно выбрать что-то более специфическое. Например смотреть и анализировать своё состояние в киберспорте. Для этого же даже трекеры зрачков выпускают и используют. Почему нет таких применений? Этот вопрос мучил меня. В итоге решил почитать куда наука движется, а так же купить простенькую нейрогарнитуру и затестить. В статье — попытка разобраться в теме, немного исходников и много анализа текущих достижений потребительской электроники.
Читать дальше →
Total votes 43: ↑43 and ↓0+43
Comments9

Почему ваш любимый мессенджер должен умереть

Reading time18 min
Views328K
image
Кладбище мессенджеров, на котором обязательно должны оказаться Skype, Viber, WhatsApp, Hangouts, ooVoo, Apple iMessage, Telegram, Line, Facebook messenger и еще сотни мессенджеров, которым только предстоит выйти в ближайшее время.

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

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

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

image

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


Читать дальше →
Total votes 260: ↑230 and ↓30+200
Comments357

Systemd и контейнеры: знакомство с systemd-nspawn

Reading time8 min
Views21K
PR-1505-3

Контейнеризация сегодня — одна из самых актуальныx тем. Количество публикаций о таких популярных инструментах, как LXC или Docker, исчисляется тысячами, если не десятками тысяч.
В этой статье бы хотели мы обсудить ещё одно решение, о котором публикаций на русском языке пока что мало. Речь идёт о systemd-nspawn — инструменте для создания изолированных сред, который является одним из компонентов systemd. А закрепление systemd в качестве стандарта в мире Linux — уже свершившийся факт. В свете этого факта есть все основания полагать, что в ближайшее время сфера применения systemd-nspawn существенно расширится, и познакомиться с этим инструментом поближе стоит уже сейчас.
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments8

Семь советов по внедрению HTTP/2

Reading time9 min
Views45K
Недавно вышла новая версия стандарта HTTP. В мае 2015 года был утвержден HTTP/2, который получил распространение среди браузеров и веб-серверов (включая NGINX и NGINX Plus). На данный момент более 60% используемых браузеров поддерживают HTTP/2, причем эта цифра продолжает увеличиваться с каждым месяцем.

Стандарт HTTP/2 основан на протоколе SPDY, разработанном компанией Google. В Google Chrome поддержка SPDY будет осуществляться до начала 2016 года. NGINX одним из первых реализовал протокол SPDY и сейчас играет ведущую роль в продвижении HTTP/2. Была опубликована статья, в которой дано подробное описание HTTP/2, приводится сравнение со SPDY и подробно описывается процесс внедрения нового протокола.
Читать дальше →
Total votes 22: ↑19 and ↓3+16
Comments10

Про Parboiled (Часть 3)

Reading time10 min
Views4.3K
Часть 3: Извлечение данных

В этой статье мы построим парсер для уже описанного нами ранее формата конфигурационных файлов. Также мы реализуем небольшой DSL для упрощенного доступа к элементам полученного дерева. Еще из этой статьи вы узнаете о типах правил, действиях парсера, а так же о «темной материи» Parboiled — стеке значений.

Структура цикла:


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

Про Parboiled (Часть 2)

Reading time16 min
Views5K
Часть 2. Сопоставление текста

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

Для закрепления знаний мы напишем простой распознаватель для несложной грамматики. Именно распознаватель (recognizer), а не полноценный парсер, так как он будет только сопоставлять входной текст c описанными нами правилами (также называемыми продукциями), но не будет извлекать из сопоставленного текста какие-либо значения. Распознаватель может быть полезным и сам по себе, так как может работать в качестве валидатора: если вход оказался некорректным, распознаватель даст об этом знать и расскажет, что пошло не так и где. А совсем классным наш распознаватель станет тогда, когда мы узнаем, как извлекать разобранные значения и причем тут какой-то «value stack». Ну что, поехали?

Структура цикла:


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

Обработка строк в Java. Часть II: Pattern, Matcher

Reading time6 min
Views324K

Вступление


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

  1. String, StringBuffer, StringBuilder (реализация строк)
  2. Pattern, Matcher (регулярные выражения)

Сегодня поговорим о регулярных выражениях в Java, рассмотрим их механизм и подход к обработке. Также рассмотрим функциональные возможности пакета java.util.regex.
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments8

Обзор ES6 в 350 пунктах. Часть первая

Reading time6 min
Views56K
Моя серия заметок ES6 in Depth, состоящая из 24 записей, описывает большинство синтаксических изменений и нововведений в ES6. В этой публикации я подведу итог всего изложенного в предыдущих статьях, чтобы дать возможность посмотреть еще раз на всё вместе. Также я добавил ссылки на мой блог, чтобы в случае необходимости сразу же можно было посмотреть подробнее.



Я слышал, вы любите маркированные списки, так что вот вам статья со списком, который состоит из нескольких сотен элементов.
Читать дальше →
Total votes 37: ↑34 and ↓3+31
Comments58

Создание плагина для Intellij IDEA. Заметки и мелкие советы

Reading time4 min
Views23K
Полгода назад или около того я загорелся-таки идей написать свой плагин для Intellij IDEA. Согласно задумке, он должен был считать, сколько времени разработчик потратил на проект (всего, за день, за сеанс) и отображать результат на диаграмме. Никакой магии, но такая функция здорово помогла бы мне рассчитывать время работы.


И что из этого вышло?
Total votes 16: ↑16 and ↓0+16
Comments17

Как я победил в конкурсе BigData от Beeline

Reading time7 min
Views87K
image

Все уже много раз слышали про конкурс по машинному обучению от Билайн и даже читали статьи (раз, два). Теперь конкурс закончился, и так вышло, что первое место досталось мне. И хотя от предыдущих участников меня и отделяли всего сотые доли процента, я все же хотел бы рассказать, что же такого особенного сделал. На самом деле — ничего невероятного.
Читать дальше →
Total votes 100: ↑92 and ↓8+84
Comments32

Про Parboiled

Reading time7 min
Views10K

Часть 1. Почему Parboiled?


Сегодня, в свете бурного роста популярности функциональных языков программирования, всё чаще находят себе применение комбинаторы парсеров — инструменты, облегчающие разбор текста простым смертным. Такие библиотеки, как Parsec (Haskell) и Planck (OCaml) уже успели хорошо себя зарекомендовать в своих экосистемах. Их удобство и возможности в своё время подтолкнули создателя языка Scala, Мартина Одерски, внести в стандартную библиотеку их аналог — Scala Parser Combinators (ныне вынесены в scala-modules), а знание и умение пользоваться подобными инструментами — отнести к обязательным требованиям к Scala-разработчикам уровня A3.

Эта серия статей посвящена библиотеке Parboiled — мощной альтернативе и возможной замене для Scala Parser Combinators. В ней мы подробно рассмотрим работу с текущей версией библиотеки — Parboiled2, а также уделим внимание Parboiled1, так как большая часть существующего кода всё ещё использует именно её.

Структура цикла:


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

Изолируем демоны с systemd или «вам не нужен Docker для этого!»

Reading time9 min
Views50K
В последнее время я вижу, как довольно большое количество людей применяет контейнерную виртуализацию только для того, чтобы запереть потенциально небезопасное приложение внутри контейнера. Как правило, используют для этого Docker из-за его распространенности, и не знают ничего лучше. Действительно, многие демоны первоначально запускаются от имени root, а далее либо понижают свои привилегии, либо master-процесс порождает обрабатывающие процессы с пониженными привилегиями. А есть и такие, которые работают исключительно от root. Если в демоне обнаружат уязвимость, которая позволяет получить доступ с максимальными привилегиями, будет не очень приятно обнаружить злоумышленников, уже успевших скачать все данные и оставить вирусов.
Контейнеризация, предоставляемая Docker и другим подобным ПО, действительно спасает от этой проблемы, но также и привносит новые: необходимо создавать контейнер для каждого демона, заботиться о сохранности измененных файлов, обновлять базовый образ, да и сами контейнеры часто основаны на разных ОС, которые необходимо хранить на диске, хотя они вам, в общем-то, и не особо нужны. Что делать, если вам не нужны контейнеры как таковые, в Docker Hub приложение собрано не так, как нужно вам, да и версия устарела, SELinux и AppArmor кажутся вам слишком сложными, а вам бы хотелось запускать его в вашем окружении, но используя такую же изоляцию, которую использует Docker?

Capabilities

В чем отличие обычного пользователя от root? Почему root может управлять сетью, загружать модули ядра, монтировать файловые системы, убивать процессы любых пользователей, а обычный пользователь лишен таких возможностей? Все дело в capabilities — средстве для управления привилегиями. Все эти привилегии даются пользователю с UID 0 (т.е. root) по умолчанию, а у обычного пользователя нет ни одного из них. Привилегии можно как дать, так и отобрать. Так, например, привычная команда ping требует создания RAW-сокета, что невозможно сделать от имени обычного пользователя. Исторически, на ping ставили SUID-флаг, который просто запускал программу от имени суперпользователя, но сейчас все современные дистрибутивы выставляют CAP_NET_RAW capability, которая позволяет запускать ping из-под любого аккаунта.
Получить список установленных capabilities файла можно командой getcap из состава libcap.
% getcap $(which ping)
/usr/bin/ping = cap_net_raw+ep

Флаг p здесь означает permitted, т.е. у приложения есть возможность использовать заданную capability, e значит effective — приложение будет ее использовать, и есть еще флаг iinheritable, что дает возможность сохранять список capabilities при вызове функции execve().
Capabilities можно задать как на уровне ФС, так и просто у отдельного потока программы. Получить capability, которая не была доступна с момента запуска, нельзя, т.е. привилегии можно только понижать, но не повышать.
Также существуют биты безопасности (Secure Bits), их три: KEEP_CAPS позволяет сохранить capability при вызове setuid, NO_SETUID_FIXUP отключает перенастройку capability при вызове setuid, и NOROOT запрещает выдачу дополнительных привилегий при запуске suid-программ.
Читать дальше →
Total votes 72: ↑70 and ↓2+68
Comments34

Значимость SPF

Reading time4 min
Views191K
Хочу обратить ваше внимание на важную, на мой взгляд, проблему, которой пренебрегают даже самые крупные и инновационные компании мира. Проблема заключается в отсутствии у большинства доменов SPF-записи, которая защищает домен от его несанкционированного использования в электронной почте.
SPF (Sender Policy Framework) представляет из себя текстовую запись в TXT-записи DNS домена. Запись содержит информацию о списке серверов, которые имеют право отправлять письма от имени этого домена и механизм обработки писем, отправленных от других серверов.
Например, SPF-запись «example.com. TXT «v=spf1 +a +mx -all»» говорит о том, что отправлять письма от имени домена «example.com» могут сервера, указанные в A и MX-записях этого домена, а письма, отправленные от других серверов должны быть удалены (Fail).

Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments34

О проектах на открытых данных, поиске финансирования общественных проектов и об открытых данных о госфинансах

Reading time5 min
Views5.5K
Когда мы говорим про открытые данные, то всегда важно помнить что они невозможны без принципиального наличия данных вообще. Я как человек, занимающийся анализом данных госданных в области госфинансов, и вся команда нашего проекта Госзатраты, занимаемся тем, что регулярно пытаемся убедить ведомства, ответственные за госполитику в этой области, в том, чтобы открытые данные были доступны и чтобы с ними было максимально удобно работать.



Во многом именно в этом и является залог успеха общественных проектов. Найти «топливо» в виде данных на которых проект может быть построен и найти «топливо» в виде финансирования которое позволило бы проекту появится и поддерживаться. Например, проект Госзатраты где мы анализируем данные госконтрактов поддерживается Комитетом Гражданских инициатив (http://komitetgi.ru). И Госзатраты это один из немногих технологических некоммерческих проектов КГИ и технологических некоммерческих проектов в России в принципе.

Я хочу затронуть сразу несколько важных тем. И прошу каждую из этих тем рассматривать как вопрос.

Негосударственные проекты создающие открытые данные
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments5

Введение в RxJava: Ключевые типы

Reading time7 min
Views134K
rxjava
В вводной статье мы рассмотрели преимущества реактивного подхода в программировании на Java, а также ситуации в которых библиотека Rx бывает более или менее полезной. В этой части мы рассмотрим основные типы, на которых базируется концепция реактивного программирования и несколько дополнительных классов, которые помогут нам в понимании принципов работы библиотеки.
Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments0

Лоукост VDS хостинг в России. Возможно ли?

Reading time8 min
Views45K
Айхор

Впечатлившись успехами американского хостера DigitalOcean (чего уж скрывать), мы в 2014 году решили создать недорогой и качественный VDS хостинг в России. На тот момент в нашем распоряжении был небольшой «дата-центр» из 4 стоек, располагавшийся в здании бывшего общежития, а в качестве системы охлаждения использовалось две недорогие сплит-системы. Канал на 100 мегабит, 2 древних маршрутизатора Cisco и сотня относительно новых серверов. Было бы смешно обещать клиентам хорошее качество с таким Starter Kit-ом. Но мы решили постараться достигнуть своей цели. Попробуем дать ответ на заголовок данного поста, и параллельно расскажем о нашем опыте создания лоукост хостинга.
Читать дальше →
Total votes 65: ↑60 and ↓5+55
Comments232
1
23 ...

Information

Rating
Does not participate
Location
Окленд, Auckland, Новая Зеландия
Date of birth
Registered
Activity