Pull to refresh
81
-1
Алексей @fuCtor

Backend developer

Send message

Балансировка в Finagle: как работает и как сделать свой балансировщик

Level of difficultyMedium
Reading time10 min
Views1.6K

Finagle — библиотека от разработчиков Twitter. Ее используют для организации межсервисного RPC и построения mesh-микросервисной архитектуры. У библиотеки богатая функциональность по тонкой настройке и интроспекции, но сегодня мы рассмотрим клиентскую балансировку.

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

JRuby + Ratpack = ❤️

Reading time8 min
Views5K

Многие разработчики на Ruby знают как обстоят дела с асинхронным выполнением кода на имеющихся серверах. Либо вы используете что-то на EventMachine, либо колдуете с Ruby::Concurrent, Celluloid.


В любом случае, это работает не сильно эффективно из-за GIL (ждем, надеемся и верим в Ruby 3).
Но есть реализации свободные от этой проблемы, одна из них поверх JVM — JRuby, где теже самые библиотеки будут чувствовать себя гораздо комфортней.


Много расписывать не буду, думаю все как минимум слышали про него. Главной особенностью данной реализации является легкая интеграция с любой библиотекой на JVM. Это открывает большой простор в выборе библиотек и готовых инструментов.

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

ВКонтакте запустил сервис денежных переводов

Reading time2 min
Views50K
Сегодня ВКонтакте, похоже, выкатил новое обновление. Некоторые пользователи уже могли увидеть уведомления в чатах (в вэб-версии точно) о новом сервисе, с сегодняшнего дня пользователи социальной сети получили возможность делать переводы с пластиковых карт другим пользователям. Не знаю, всем ли открыт доступ, возможно, как часто у них бывает, обновление будет выкатывать волнами.

image
Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments69

Прием уведомлений от внешних сервисов, или зачем был сделан Hooksler

Reading time5 min
Views7.4K
В последнее время большую популярность приобрел сервис для командной коммуникации Slack. Из коробки он имеет немалое количество интеграций с различными сервисами + довольно удобное внешнее API. Но при всем при этом на бесплатных аккаунтах есть ограничение в 5 интеграций. Прицепили мы github, newrelic + пару досок с trello и все, количество их закончилось. Можно использовать универсальный Incoming WebHook, но он само собой имеет свой формат и никак не совместим с другими сервисами. Но программист не был бы программистом, если бы не решил эту задачу.
Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments2

Горизонтальное масштабирование websocket-ов на Ruby

Reading time6 min
Views8.6K
Не так давно вышла статья, в которой автор описывал свой framework для написания приложений с использованием Ruby, Sinatra и websoсket. Но в том решении не был затронут вопрос горизонтального масштабирования. Так при подключении к одному из узлов, пользователи могут получать уведомления/данные только о событиях/изменениях, вызванных пользователями этого же узла, а при изменениях, внесенных через другой, они не узнают. Для решения данной задачи необходимо организовать общую шину данных. Рассматривать данную задачу буду в контексте обмена сообщениями клиент-клиент.
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments11

Интеграция Ruby в Nginx

Reading time6 min
Views14K


Уже достаточно давно существует всем известная связка Nginx + Lua, в том числе здесь был ряд статей. Но время не стоит на месте. Примерно год назад появилась первая версия модуля, интегрирующего Ruby в Nginx.
Читать дальше →
Total votes 23: ↑17 and ↓6+11
Comments28

Подсчет статистики загрузок в Google Analytics

Reading time3 min
Views9.8K

Продолжая тему использования связки Nginx + Lua решил поделиться небольшой инструкцией подсчета загрузки статических данных и учетом всего этого в Google Analytics.
Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments11

Авторизация через Facebook, Google, Twitter и Github используя Omniauth

Reading time16 min
Views31K
Озадачившись однажды вопросом добавление регистрации/входа на сайт через сторонние сервисы начал искать, что уже есть готового, либо описания как это уже кто-то делал. Готовые сервисы были откину сразу, остался вариант реализовывать самому. И тут Google навел на подробную инструкцию. Ознакомившись и вдохновленный тем решением сделал свою модификацию, все работало, был просто счастлив.

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

И так приступим...


Эта глава будет посвящена известному гему Omniauth. Omniauth это новая система идентификации поверх Rack для мультипровайдерной внешней идентификации. Он будет использован для связи CommunityGuides (прим: в настоящий момент ресурс не доступен и похоже уже не вернется) с Facebook, Google, Twitter и Github. Данная глава покажет как интегрировать все это с существующей идентификацией через Devise.
Читать дальше →
Total votes 6: ↑4 and ↓2+2
Comments10

Неканоническое STI в Rails

Reading time4 min
Views9.1K
Перед тем как начать повествование, вспомним что же такое STI.

STI (Single Table Inheritance) — паттерн проектирования, который позволяет перенести объектно-ориентированное наследование на таблицу реляционной базы данных. В таблице БД должно присутствовать поле идентифицирующее название класса в иерархии. Зачастую, в том числе в RoR, поле называют type.

С помощью данного паттерна можно создавать объекты, которые содержат идентичный набор полей, но имеют разное поведение. Например, таблица пользователей, содержащая имя, логин и пароль, но использовалось два класс пользователей Admin, Visitor. Каждый класс, содержит как унаследованны так и индивидуальный набор методов. Определение того, какой класс будет создан и используется поле type, имя поля может быть переопределено.

Таким образом, если рассматривать канонический случай: имена классов хранятся в одной таблице с данными.

Но может случится иная ситуация…
Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments9

Работа с моделями и делегатами на примере создания списка аля FireFox

Reading time8 min
Views26K
Не раз проскакивали сравнения сложности построения интерфейсов на Qt. В данной статье приведу пример, как можно сделать список в стиле списка модулей FireFox.



Для этого воспользуемся MVC подходом, который реализован в Qt. На выходе получим что-то вроде этого:


Весь процесс разделим на 3 части:
  1. создание модели
  2. создание делегата
  3. создание представления


Читать дальше →
Total votes 54: ↑47 and ↓7+40
Comments12

Launcher для Google AI Challenge Tools

Reading time1 min
Views1.1K
Многие на Хабрахабр приняли участие в Google AI Challenge. Скачали инструменты для локального тестирования и уже ощутили прелесть и удобство их:
  • запуск с консоли;
  • десятки открытых страниц с симуляцией (мне лайв режим не нравится например), либо обновлять надо;
  • чтобы сделать новую симуляцию нужно править файл запуска;
  • и другие

Сидел я так, сидел и в один прекрасный день задумался, а почему бы не сделать мини инструмент, который бы все это объединял в одном месте и забыть про консоль.
Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments41

Поддомены в Rails

Reading time4 min
Views6.5K
Думаю каждый кто работал с под-доменами в Rails 3 видел данный скринкаст.

Когда столкнулся с этим примером стояла задача сделать динамические поддомены + некоторые фиксированные. Динамические должны были соответствовать некоторому полю одной из моделей. Таким образом были выдвинуты условия для конечного решения:
  • возможность указания фиксированного поддомена, либо группы поддоменов;
  • возможность привязки к полю из модели ActiveRecord;
  • удобный синтаксис для записи всего этого в routes.rb.
Читать дальше →
Total votes 34: ↑31 and ↓3+28
Comments10

Открыта бесплатная регистрация своих адресов во ВКонтакте

Reading time1 min
Views2.8K
Все помнят, что X месяцев назад администрация данной социальной сети предоставила возможность: за определенную плату заменить адрес своей страницы с vkontakte.ru/idXXXXXX на что-то более запоминающееся (vkontakte.ru/superbaby) + как отметил Alaska создается одноименный поддомен.
Зайдя сегодня утром после очередного перехода по страницам увидел сообщение, что не хотели бы заменить адрес на предложенный (адрес формировался из фамилии) и снизу соответственно согласен/не согласен. В тоже время если зайти в настройки то можно уже указать тот адрес который всеже хотелось бы.

image

image
Скриншоты LOtuSS

Читать дальше →
Total votes 152: ↑101 and ↓51+50
Comments240

Создание смазывания фона под окном в Windows

Reading time2 min
Views3.9K
Буквально вчера в блогах разработчиков Qt был опубликован топик, в котором описывалось как можно создать эффект размытия фона под окном приложения в Windows Vista и Windows 7.

Под катом его перевод
Total votes 23: ↑22 and ↓1+21
Comments30

Notepad++ как инструмент для совместного редактирования текста

Reading time1 min
Views2.9K
Думаю многие пользуются или пользовались текстовым редактором Notepad++. Данный редактор кроме своего базового функционала имеет не плохой набор плагинов. Так в последней сборке был обнаружен примечательный модуль под названием NppNetNote.
Читать дальше →
Total votes 18: ↑16 and ↓2+14
Comments9

rWin 0.5 beta — клиент для rTorrent на Qt

Reading time2 min
Views2.5K
Многим известен торрент клиент для Unix систем rTorrent. Его достоинством и недостатком является консольный интерфейс, но есть множество способов борьбы с ним, начиная от web интерфейсов (wTorrent), заканчивая frontend-ом написанным на Java (nTorrent). Лично сам пользуюсь web интерфейсом + screen в консоли. Все бы хорошо, НО за время использования (а это уже примерно как год) постоянно было неудобство со слежением за загрузками и регулировкой скорости закачки. Поэтому решил сделать небольшой клиент, который бы висел в трее, показывал скорость загрузки и другую полезную информацию.
Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments47

Работа с альтернативными потоками данных через WinAPI

Reading time5 min
Views11K
В прошлой статье я описал, что такое альтернативные потоки и как их можно использовать. Там были примеры работы с ними через командную строку, но можно делать тоже самое и программно стандартными средствами WinAPI.
Ниже дан свободный перевод части статьи, касающейся данного вопроса.
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments11

Альтернативные потоки данных в NTFS или как спрятать блокнот

Reading time2 min
Views56K

Введение


Поддержка альтернативных потоков данных (AltDS) была добавлена в NTFS для совместимости с файловой системой HFS от Macintosh, которая использовала поток ресурсов для хранения иконок и другой информации о файле. Использование AltDS скрыто от пользователя и не доступно обычными средствами. Проводник и другие приложения работают со стандартным потоком и не могут читать данные из альтернативных. С помощью AltDS можно легко скрывать данные, которые не могут быть обнаружены стандартными проверками системы. Эта статья даст основную информацию о работе и определении AltDS.
продолжение
Total votes 97: ↑93 and ↓4+89
Comments53

Использование различных изображений на каждом мониторе в Vista или XP

Reading time1 min
Views23K
Используете ли вы для работы два монитора? И не возникало ли желание установить изображение рабочего стола для каждого экрана в отдельности? Думаю что возникало, но, попробовав сделать это, возникла проблема. Проблема заключалась в том, что Vista не позволяла установить различные изображения, а ставила на обоих мониторах одинаковое. Тогда в поисках ответа на вопрос «Как это сделать?» нашел следующее решение.
Решение под катом
Total votes 36: ↑27 and ↓9+18
Comments45

Идея сервиса: PC-Линч

Reading time2 min
Views527
Почти на всех более или менее посещаемых форумах есть раздел посвященный компьютерному железу. И не редко там появляются топики вида «оцените сборку» или «помогите собрать компьютер». И тогда пришла в голову идея…
Читать дальше →
Total votes 1: ↑1 and ↓0+1
Comments25

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Backend Developer
Lead
Scala
Git
Docker
Redis
High-loaded systems
Designing application architecture
PostgreSQL