Как стать автором
Обновить
33
0
Николай Иванов @ivnik

Пользователь

Отправить сообщение

Путешествие за бугор и обратно: как не надо устраиваться работать за рубежом

Время на прочтение11 мин
Количество просмотров216K

Тема трудовой эмиграции в IT-сообществе — одна из любимых. Кто не задумывался о том чтобы уехать туда где трава зеленее? Интернет кишит различными success story. Я же хочу показать, как вашу success story может испортить неудачный выбор места работы.


В этой статье хочу поделиться с вами своей историей неудачной эмиграции в Прагу и работы с неудачным работодателем, и помочь избежать совершения ошибок, которые совершил я. Немного о себе: меня зовут Алексей, я Java-разработчик, переехал в Санкт-Петербург из Новосибирского Академгородка.


image
Читать дальше →
Всего голосов 414: ↑403 и ↓11+392
Комментарии1266

101 способ приготовления RabbitMQ и немного о pipeline архитектуре

Время на прочтение18 мин
Количество просмотров45K

Павел Филонов (во время выступления работал в Positive Technologies)


Павел Филонов

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

Сначала немного в качестве пролога. Это приятная часть.



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

Вместе с такой задачей приходит и целая серия проблем.
Всего голосов 50: ↑46 и ↓4+42
Комментарии30

Прощай, объектно-ориентированное программирование

Время на прочтение8 мин
Количество просмотров105K


Я в течение десятилетий программировал на объектно-ориентированных языках. Первым из них стал С++, затем был Smalltalk, и наконец .NET и Java. Я фанатично использовал преимущества наследования, инкапсуляции и полиморфизма, этих трёх столпов парадигмы объектно-ориентированного программирования. Мне очень хотелось воспользоваться обещанным повторным использованием и прикоснуться к мудрости, накопленной моими предшественниками в этой новой и захватывающей сфере. Меня волновала сама мысль о том, что я могу мапить объекты реального мира в классы и думал, что весь мир можно аккуратно разложить по местам.

Я не мог ошибаться сильнее.
Читать дальше →
Всего голосов 225: ↑118 и ↓107+11
Комментарии329

Active/Passive PostgreSQL Cluster с использованием Pacemaker, Corosync

Время на прочтение5 мин
Количество просмотров25K
image

Описание

В данной статье рассматривается пример настройки Active/Passive кластера для PostgreSQL с использованием Pacemaker, Corosync. В качестве дисковой подсистемы рассматривается диск от системы хранения данных (CSV). Решение напоминает Windows Failover Cluster от Microsoft.

Технические подробности:
Версия операционной системы — CentOS 7.1
Версия пакета pacemaker — 1.1.13-10
Версия пакета pcs — 0.9.143
Версия PostgreSQL — 9.4.6
В качестве серверов(2шт) — железные сервера 2*12 CPU/ 94GB memory
В качестве CSV(Cluster Shared Volume) — массив класса Mid-Range Hitachi RAID 1+0


Подготовка узлов кластера

Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии24

Масштабирование производительности PostgreSQL с помощью партицирования таблиц

Время на прочтение13 мин
Количество просмотров32K

Классический сценарий


Вы работаете над проектом, где транзакционные данные хранятся в базе данных. Затем вы развёртываете приложение в рабочей среде, и производительность великолепна! Запросы проходят шустро, и задержка при их вводе практически незаметна. Через несколько дней/недель/месяцев база данных становится всё больше и больше, и скорость запросов замедляется.

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

Администратор базы данных (DBA) посмотрит и проследит, чтобы база данных была оптимально настроена. Он предложит добавить определённые индексы, убрать логирование на отдельную партицию, подправить параметры движка базы данных и убедиться, что база данных здорова. Можно также добавить выделенных IOPS (Input/Output Operations Per second) на EBS диске, чтобы увеличить скорость дисковых партиций. Это даст вам выиграть время и даст возможность решить главную проблему.

Рано или поздно вы поймёте, что данные в вашей базе данных являются узким местом (botleneck).
В базах данных многих приложений важность информации уменьшается со временем. Если вы сможете придумать способ избавиться от этой информации, ваши запросы будут проходить быстрее, время создания бэкапов уменьшится, и вы сэкономите кучу места. Вы можете удалить эту информацию, однако тогда она пропадёт безвозвратно. Вы можете послать множество DELETE запросов, вызвав создание тонн логов, и использовать кучу ресурсов движка базы данных. Так как же мы избавимся от старой информации эффективно, но не потеряв её навсегда?
В примерах мы будем использовать PostgreSQL 9.2 на Engine Yard. Вам также нужен git для установки plsh.

Читать дальше →
Всего голосов 45: ↑43 и ↓2+41
Комментарии15

Я знал, как валидировать email-адрес. Пока не прочитал RFC

Время на прочтение5 мин
Количество просмотров129K
От переводчика: прочитав статью, начал было отвечать в комментариях, но решил, что текст, на которую я собирался ссылаться, достоин отдельной публикации. Встречайте!
Если вы знаете, как валидировать email-адрес, поднимите руку. Те из вас, кто поднял руку — опустите её немедленно, пока вас кто-нибудь не увидел: это достаточно глупо — сидеть в одиночестве за клавиатурой с поднятой рукой; я говорил в переносном смысле.

До вчерашнего дня я бы тоже поднял руку (в переносном смысле). Мне нужно было проверить валидность email-адреса на сервере. Я это уже делал несколько сот тысяч раз (не шучу — я считал) при помощи классного регулярного выражения из моей личной библиотеки.

В этот раз меня почему-то потянуло ещё раз осмыслить мои предположения. Я никогда не читал (и даже не пролистывал) RFC по email-адресам. Я попросту основывал мою реализацию на основе того, что я подразумевал под корректным email-адресом. Ну, вы в курсе, что обычно говорят о том, кто подразумевает. [прим. перев. Автор имеет в виду игру слов: «when you assume, you make an ass out of you and me» — «когда вы (что-то) подразумеваете, вы делаете /./удака из себя и из меня»]

И обнаружил кое-что занимательное: почти все регулярные выражения, представлены в интернете как «проверяющие корректность email-адреса», излишне строги.
Читать дальше →
Всего голосов 80: ↑66 и ↓14+52
Комментарии99

Пишем свой Spliterator

Время на прочтение11 мин
Количество просмотров51K
Многие из вас уже попробовали на вкус Stream API — потоки Java 8. Наверняка у некоторых возникло желание не только пользоваться готовыми потоками от коллекций, массивов, случайных чисел, но и создать какой-то принципиально новый поток. Для этого вам потребуется написать свой сплитератор. Spliterator — это начинка потока, публичная часть его внутренней логики. В этой статье я расскажу, как и зачем я писал сплитератор.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии34

«Идеальный» кластер. Часть 3.1 Внедрение MySQL Multi-Master кластера

Время на прочтение16 мин
Количество просмотров77K

В продолжение цикла статей об «Идеальном» кластере хочу поделиться моим опытом развертывания и настройки Multi-Master кластеров MySQL.




Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии71

Как легко расшифровать TLS-трафик от браузера в Wireshark

Время на прочтение2 мин
Количество просмотров156K
Многим из вас знаком Wireshark — анализатор трафика, который помогает понять работу сети, диагностировать проблемы, и вообще умеет кучу вещей.

image

Одна из проблем с тем, как работает Wireshark, заключается в невозможности легко проанализировать зашифрованный трафик, вроде TLS. Раньше вы могли указать Wireshark приватные ключи, если они у вас были, и расшифровывать трафик на лету, но это работало только в том случае, если использовался исключительно RSA. Эта функциональность сломалась из-за того, что люди начали продвигать совершенную прямую секретность (Perfect Forward Secrecy), и приватного ключа стало недостаточно, чтобы получить сессионный ключ, который используется для расшифровки данных. Вторая проблема заключается в том, что приватный ключ не должен или не может быть выгружен с клиента, сервера или HSM (Hardware Security Module), в котором находится. Из-за этого, мне приходилось прибегать к сомнительным ухищрениям с расшифровкой трафика через man-in-the-middle (например, через sslstrip).

Логгирование сессионных ключей спешит на помощь!


Что ж, друзья, сегодня я вам расскажу о способе проще! Оказалось, что Firefox и Development-версия Chrome поддерживают логгирование симметричных сессионных ключей, которые используются для зашифровки трафика, в файл. Вы можете указать этот файл в Wireshark, и (вуаля!) трафик расшифровался. Давайте-ка настроим это дело.
Читать дальше →
Всего голосов 83: ↑82 и ↓1+81
Комментарии22

How to prepare TCP

Время на прочтение8 мин
Количество просмотров54K


Когда кому-то или чему-то становится плохо, то требуется нечто большее, чем просто констатация данного факта.
Читать дальше →
Всего голосов 34: ↑30 и ↓4+26
Комментарии10

Памятка начинающему фотографу

Время на прочтение2 мин
Количество просмотров149K
Хабраюзер nicothin сделал памятку начинающим фотографам — короткую шпаргалку, материал которой описывает тот крайний минимум, который необходим каждому, кто собирается снимать сознательно. Вкратце опишу что это и зачем.
Читать дальше →
Всего голосов 133: ↑103 и ↓30+73
Комментарии59

Потоковое видео в Android

Время на прочтение7 мин
Количество просмотров198K
В этой заметке я хочу рассказать о некоторых подводных камнях, с которыми можно столкнуться при работе с потоковым видео в Android приложениях. Конкретно, речь пойдёт о конвертации видео и протоколах доставки/воспроизведения видео.
Сразу оговорюсь, что экспертом я в данной области не являюсь, а лишь хочу поделится недавно полученным опытом.


Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии15

«Хакинтош» – стоит ли игра свеч?

Время на прочтение4 мин
Количество просмотров351K
imageХочу поделиться своим мнением и опытом относительно работы Mac OS X на обычном PC компьютере. Может кому-то этот топик будет интересен или полезен.

Я разработчик ПО для Mac OS X и iOS. И я обожаю технику и ПО от Apple (но я не являюсь ярым фанатом). За свою жизнь у меня побывало много гаджетов от Apple: PowerBook G4, MacBook, iMac, MacBook Pro, iPhone, iPad и пр.

Техника для меня лишь инструмент достижения целей. В данный момент времени на работе я использую iMac (Core i5), в личных целях: обычный стационарный PC, ноутбук Lenovo, телефон на Android и iPad.

Недавно мне для работы дома понадобился очень мощный компьютер с Mac OS X. По характеристикам из техники Apple подходили лишь топовый iMac (с Core i7-2600 3,4 ГГц) и Mac Pro. Оба стоят просто запредельные деньги — более 100 тыс. рублей. Я психологически не был готов потратить такие деньги на компьютер. Ограничил бюджет суммой 55 тыс. рублей и решил собрать «Хакинтош». Я немного слежу за тематикой «Хакинтош» и имею четкое представление, что «там и как».

Читать дальше →
Всего голосов 330: ↑239 и ↓91+148
Комментарии331

Акинатор и математика

Время на прочтение6 мин
Количество просмотров110K
На Хабре уже несколько раз всплывала тема Акинатора, в том числе и с тегом не знаю как оно работает. Я на него наткнулся недавно и, разумеется, был восхищен. Затем, как вероятно и многим другим, мне в голову пришла мысль: «А как же это работает?» Ответа на этот вопрос я нигде не нашел, а потому задался целью написать аналогичную по функциональности программу, разобравшись по ходу дела что к чему.
Читать дальше →
Всего голосов 103: ↑95 и ↓8+87
Комментарии78

Взаимодействие Java-приложений с JGroups

Время на прочтение5 мин
Количество просмотров6.5K
Сегодня я хочу рассказать о JGroups. Это Java-библиотека для организации группового взаимодействия между различными процессами Java. Приложения, использующие JGroups могут:
  • Создавать и уничтожать группы
  • Присоединяться к группам и покидать их
  • Получать оповещения о новых членах групп
  • Отправлять сообщения конкретному процессу или всем процессам группы
Библиотека достаточно широко используется, в частности в сервере приложений JBoss, в кэше OSCache и в Grid-платформе Infinispan.

Здесь я ограничусь начальной информацией и опишу создание простого группового чата на Java.

Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии2

Охота на Java-разработчиков: как профессионально расти и стать желанной целью

Время на прочтение7 мин
Количество просмотров84K
image
Двое на этой фотографии через месяц сменили работу на более крутую

Студент, который только учит Java, может получить в Москве больше, чем действующий разработчик. К примеру, в Российском центре разработки Deutsche Bank стипендия колеблется в районе 100 тыс.руб. в месяц — и вас за эти деньги ещё только учат, работа — потом.

Спрос на разработчиков каждый год растёт примерно на 10-15 процентов, а база для образования не справляется. И потребности растут, и текучка большая: ведь в какой-то момент выяснилось, что Java позволяет наиболее индустриально разрабатывать код.

Так вот, сейчас я расскажу, какие есть варианты карьеры в России и за рубежом есть у вас, если вы уже знаете Java или, по крайней мере, у вас есть пара месяцев, чтобы перейти на новый язык и новую среду разработки. За рубежом, кстати, Amazon, Facebook, Twitter и LinkedIn активно нанимают Java-инженеров, специализирующихся на бэкэндах. А у нас — Одноклассники, Deutsche Bank, Oracle, Luxoft, Сбербанк-Технологии, Azul и другие. Пошли, покажу, что и как.
Читать дальше →
Всего голосов 72: ↑48 и ↓24+24
Комментарии79

Placebo-кнопки в повседневности и в веб-дизайне

Время на прочтение4 мин
Количество просмотров35K
imageГде-то полгода назад под знаками пешеходного перехода появились яркие желтые сенсорные кнопки с индикатором активации (когда нажимаешь на кнопку загорается красная лампочка, расположенная непосредственно над ней, такая же лампочка загорается на кнопке, расположенной на противоположной стороне). Логичный вывод о том, что эти кнопки как-то управляют светофором, не получил достаточного практического подтверждения. Те редкие случаи, когда после нажатия загорался зеленый свет, скорее были совпадением, чем результатом отлаженной работы системы управления.

Быстрый поиск на просторах интернета подсказал, что кнопки должны бы управлять светофорами, но еще не выполняют своих функций по тем или иным причинам. В комментариях на одном из форумов была приведена ссылка на статью BBC в которой описывался подобный опыт в других странах. Из статьи следовало, что либо эти кнопки должны работать в ночное время, либо они являются уловкой, которая называется «кнопки-плацебо».
Читать дальше →
Всего голосов 65: ↑58 и ↓7+51
Комментарии50

Как решать проблемы пользователей не за сутки, а за минуты: ускоряем поиск по логам

Время на прочтение6 мин
Количество просмотров29K
Мы в Почте Mail.Ru постоянно сталкиваемся с необходимостью работать с историей пользователей. Учитывая, что ежемесячная аудитория проекта составляет более 40 миллионов человек, история всех их действий – это порядка петабайта данных. Потребность в поиске по логам у нас возникает сотни раз в день, а на получение нужной информации в среднем уходило несколько часов. При этом, по нашим предположениям, извлечение информации из логов можно было ускорить до нескольких секунд.

Чтобы оценить целесообразность разработки системы для оптимизации поиска по логам, мы воспользовались вот этой таблицей с XKCD:



(на самом деле нет, но нам она все равно нравится).

Итак, мы всерьез взялись за оптимизацию. Итогом нашей работы стала разработка системы, благодаря которой мы можем поднять историю действий примерно в 100 000 (сто тысяч, это не опечатка) раз быстрее. Мы разработали big-data сервис, который позволяет хранить петабайты информации в структурированном виде: каждому ключу у нас соответствует лог каких-то событий. Хранилище устроено так, что оно способно работать и на самых дешевых SATA-дисках, и на больших многодисковых хранилищах с минимальным количеством процессорного времени, при этом оно полностью fault-толерантно — если вдруг какая-то машина выйдет из строя, это ни на что не влияет. Если в системе заканчивается место, в нее просто добавляется сервер или несколько: система автоматически увидит их и начнет записывать данные. Чтение данных происходит почти моментально.
Читать дальше →
Всего голосов 72: ↑60 и ↓12+48
Комментарии64

Возвращаем дочерний класс из родительского. Факультатив

Время на прочтение3 мин
Количество просмотров22K
С какой целью это может понадобиться? Например, если хочется использовать "текучий интерфейс". Правда, если часть методов разместить в родительском классе, то для них не получится сделать полноценный «текучий интерфейс» — эти методы требуется приводить (кастовать) к дочернему.

Казалось бы, печаль да и только, но если очень хочется, то ведь можется. Поэтому, давайте слегка нарушим правило и «известим» родительский класс о его наследниках.
Читать дальше →
Всего голосов 18: ↑13 и ↓5+8
Комментарии21

Использование liquibase плагина для Maven

Время на прочтение2 мин
Количество просмотров22K
Привет хабр, много было уже на писано на тему liquibase и Maven, но я не смог найти ничего про liquibase-maven-plugin и его настройку, а ведь это очень удобный плагин. Вот я и решил написать о том, как его настроить.

Плагин liquibase-maven-plugin предназначен для управления liquibase из Maven. Вот пример команды mvn liquibase:update, для обновления базы данных.

Для начала предлагаю разобраться с тем, что такое Maven и liquibase.



Мавен — это инструмент для сборки Java проекта: компиляции, создания jar, создания дистрибутива программы, генерации документации. Более подробно о самом Maven можно прочитать в статье Apache Maven — основы



Liquibase — это система управления миграциями базы данных. Для ознакомления с liquiabase так же можно прочитать в статье Управление миграциями БД с Liquibase

После того, как мы разобрались с Maven и liquibase, можно перейти к созданию maven проекта и настройке liquibase плагина.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии5
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность