Pull to refresh
0
0

Разработчик

Send message

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

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

Как DRYить модели

Reading time5 min
Views17K
В большинстве рельсовых проектов основная концентрация кода приходится на модели. Все наверняка читали про Slim controllers & fat models и стараются впихать в модели как можно больше, а в контроллеры как можно меньше. Что ж, это похвально, однако в стремлении утолстить модели многие часто забывают про принцип DRY — don't (fucking) repeat yourself.

Я тут постараюсь вкратце расписать, как в районе моделей и рыбку съесть, и про DRY не забыть.

Читать дальше →
Total votes 64: ↑60 and ↓4+56
Comments22

Архитектура контроллеров: простые советы на каждый день

Reading time6 min
Views3.9K
То, что контроллеры должны быть «худыми» знают все, но по мере наращивания функционала поддерживать чистоту контроллеров становится все сложнее и сложнее. Мы хотим предложить несколько рекомендаций как содержать свои контроллеры максимально чистыми без ущерба для качества кода.
Читать дальше →
Total votes 51: ↑47 and ↓4+43
Comments44

Авторизация через 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

Аутентификация в Rails-приложениях с помощью Devise. Часть 1: базовая настройка

Reading time8 min
Views86K
Предлагаю вашему вниманию один из лучших, на мой взгляд, гемов для аутентификации в rails-приложениях. К сожалению, русскоязычной информации по данному гему очень мало, в том числе и на хабре, поэтому хочу осветить данную тему. Статья, в первую очередь, рассчитана на новичков и представляет из себя подробный туториал по настройке аутентификации на основе упомянутого гема. В первой части я освещу шаги по базовой настройке. Далее подробнее о геме.

Devise — это ruby-гем, предоставляющий возможности для аутентификации в rails-приложениях. Devise работает в связке с гемом Warden, который в свою очередь предоставляет сам механизм для аутентификации в rack-базированных ruby-приложениях. Основные особенности Devise описаны ниже:
  • основан на Rack;
  • является законченным MVC-решением, основанным на Rails;
  • разрешает вход в систему по нескольким моделям одновременно;
  • основан на модульности: использует только то, что вам действительно необходимо.

Итак, приступим к установке и настройке Devise для вашего rails-приложения. Дальнейший процесс для удобочитаемости будет разбит на отдельные шаги.
Читать дальше →
Total votes 29: ↑22 and ↓7+15
Comments19

CRUD-приложение на Ext JS и Ruby on Rails за 7 минут

Reading time5 min
Views22K
Это обновленная версия устаревшего поста.

Этот пост покажет вам простые шаги по созданию менеджера задач TODO с использованием Ext JS, Ruby on Rails и Netzke. Это займет у вас приблизительно 7 минут, и если вам заранее любопытно, стоит ли оно того, загляните прямиком в секцию «Обсуждаем результаты» (кстати, самую большую). Наша цель заключается в создании веб-приложения которое позволит нам добавлять, редактировать и удалять задачи TODO, так же как и помечать их как завершенные. В дополнение к этому вы сможете сортировать задачи, делать поиск по ним, редактировать несколько задач одновременно — и это еще не все. Если хотите, засекайте время на секундомере — и давайте приступим.



Читать дальше →
Total votes 47: ↑35 and ↓12+23
Comments42

Различные методы загрузки ассоциаций в Ruby on Rails

Reading time3 min
Views42K
Rails предоставляют нам 4 различных способа загрузки ассоциаций: preload, eager_load, includes и joins. Рассмотрим каждый из них:

Preload


Этот метод загружает ассоциации в отдельном запросе:
User.preload(:posts).to_a

# =>
SELECT "users".* FROM "users"
SELECT "posts".* FROM "posts"  WHERE "posts"."user_id" IN (1)

Т.к. preload всегда создает два отдельных запроса, то мы не можем использовать таблицу posts в условии выборки:
User.preload(:posts).where("posts.desc='ruby is awesome'")

# =>
SQLite3::SQLException: no such column: posts.desc:
SELECT "users".* FROM "users"  WHERE (posts.desc='ruby is awesome')

А таблицу users – можем:
User.preload(:posts).where("users.name='Neeraj'")

# =>
SELECT "users".* FROM "users"  WHERE (users.name='Neeraj')
SELECT "posts".* FROM "posts"  WHERE "posts"."user_id" IN (3)

Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments2

ActiveRecord немного про грабли, Relations и индексы

Reading time8 min
Views23K
Хочу рассказать Вам о наболевшем: о работе с AR в целом и с Relation в частности; предостеречь от стандартных садовых изделий, которые легко могут испортить жизнь и сделать код медленным и прожорливым. Повествование будет основываться на Rails 3.2 и ActiveRecord того же разлива. В Rails 4, конечно же, много чего нового и полезного, но на него ещё перейти нужно, да и фундамент в любом случае один и тот же.

Сей материал, по большей части, предназначен для начинающих, ибо автору очень больно смотреть на извлечение содержимого целых таблиц в память в виде ActiveRecord объектов и на прочие отстрелы конечностей при использовании AR. Разработчикам, познавшим дзен, топик вряд ли принесёт пользу, они могут лишь Помочь, дополнив его своими примерами и назиданиями.
Читать дальше →
Total votes 27: ↑24 and ↓3+21
Comments41

IPv6 под прицелом

Reading time14 min
Views77K


Казалось бы, зачем сейчас вообще вспоминать про IPv6? Ведь несмотря на то, что последние блоки IPv4-адресов были розданы региональным регистраторам, интернет работает без каких-либо изменений. Дело в том, что IPv6 впервые появился в 1995 году, а полностью его заголовок описали в RFC в 1998 году. Почему это важно? Да по той причине, что разрабатывался он без учета угроз, с той же доверительной схемой, что и IPv4. И в процессе разработки стояли задачи сделать более быстрый протокол и с большим количеством адресов, а не более безопасный и защищенный.
Подробности
Total votes 58: ↑55 and ↓3+52
Comments41

Покупаем на taobao.com

Reading time6 min
Views81K
Я оставил в России много настольных игр, везти их с собой во Вьетнам смысла не видел. Надеялся, что можно будет что-то купить на месте. Облом-с, тут про настольные игры мало чего слышали, никаких магазинчиков специализированных нет. Выход был найден — рядом Китай, с огромным ассортиментом и относительно небольшими ценами. Сейчас я вам расскажу, на примере закупки настольных игр, как можно покупать что-то в Китае.

taobao.com — это китайский ebay, или что-то на него похожее. Большое количество разных магазинов, предоставляющих разного вида товары. Если я все правильно понял — сам taobao это как аггрегатор таких магазинов. Можно найти огромное количество разных товаров: игрушки, техника, одежда, и т.д. и т.п. Разброс цен большой, как всегда для Китая, от очень и очень низких, до обычных европейских. Качество соответственное.

Читать дальше
Total votes 43: ↑34 and ↓9+25
Comments15

UG007: мини-ПК с Bluetooth, двухъядерным процессором и Android 4.1.1 за 60 у.е

Reading time1 min
Views164K


Да, Raspberry Pi пока что вне конкуренции — практически нет миниатюрных ПК подобного класса за подобную цену. Но чем дальше в лес с течением времени появляется все больше интересных моделей мини-ПК, которые являются более функциональными, чем указанная модель. Одним из интересных вариантов является UG007, это миниатюрный ПК в форм-факторе флешки, который может похвастаться двухъядерным процессором Rockchip RK3066 с частотой работы ядра 1,6 ГГц, 1 ГБ ОЗУ и 8 ГБ внутренней памяти.

Читать дальше →
Total votes 56: ↑49 and ↓7+42
Comments107

Развертываем свой сайт на Heroku

Reading time4 min
Views163K
Здравствуй, Хабрахабр! Недавно у меня возникла необходимость развернуть свое Rails web-приложение на Heroku и я, к своему удивлению, не нашел почти ничего об этом на просторах не только Хабра, но и рунета в целом, поэтому я решил поделиться с вами своим опытом. Подробности о том, что и как я делал находятся под катом!


Читать дальше →
Total votes 22: ↑12 and ↓10+2
Comments13

IPv6 в Cisco или будущее уже рядом (Часть 1)

Reading time7 min
Views56K
image

Введение



Протокол IPv6 является наследником повсеместно используемого сегодня протокола IP четвёртой версии, IPv4, и естественно, наследует большую часть логики работы этого протокола. Так, например, заголовки пакетов в IPv4 и IPv6 очень похожи, используется та же логика пересылки пакетов – маршрутизация на основе адреса получателя, контроль времени нахождения пакета в сети с помощью TTL и так далее. Однако, есть и существенные отличия: кроме изменения длины самого IP-адреса произошёл отказ от использования широковещания в любой форме, включая направленное (Broadcast, Directed broadcast). Вместо него теперь используются групповые рассылки (multicast). Также исчез ARP-протокол, функции которого возложены на ICMP, что заставит отделы информационной безопасности внимательнее относиться к данному протоколу, так как простое его запрещение уже стало невозможным. Мы не станем описывать все изменения, произошедшие с протоколом, так как читатель сможет с лёгкостью найти их на большинстве IT-ресурсов. Вместо этого покажем практические примеры настройки устройств на базе Cisco IOS для работы с IPv6.
Многие начинающие сетевые специалисты задаются вопросом: «Нужно ли сейчас начинать изучать IPv6?» На наш взгляд, сегодня уже нельзя подходить к IPv6 как к отдельной главе или технологии, вместо этого все изучаемые техники и методики следует отрабатывать сразу на обоих версиях протокола IP. Так, например, при изучении работы протокола динамической маршрутизации EIGRP стоит проводить настройку тестовых сетей в лаборатории как для IPv4, так и для IPv6 одновременно. Перейдём от слов к делу!

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

Матрица компетенций Ruby on Rails разработчика

Reading time4 min
Views9.2K
Как начинающему Rails разработчику понять, в какую сторону копать, чтобы как можно быстрее стать опытным программистом? Понятно, что нужно работать, работать и еще раз работать. Но кроме этого важен горизонт, который даст понять, в какую же сторону нужно идти по дороге к званию профессионала.

Два месяца назад мы запустили оффлайн&онлайн курсы в Харькове по Ruby on Rails для начинающих RubyBursa. Из особенностей — половина занятий было в учебном классе, половина в формате вебинара. Мы поставили жесткие условия выполнения домашних заданий и за первое невыполнение участники получали желтую карточку, за второе — красное и выбывали с курсов. Такие «драконовские методы» позволили 35 из 40 участников дойти до конца со 100% выполнением всех домашних задач.

Некоторые ученики в процессе учебы интересовались: «а что же дальше?». Наш преподаватель Оксана специально в виде ответа на этот вопрос подготовила пробную версию матрицы компетенции Ruby разработчика. Не претендуем на академичность и понимаем возможную спорность предложенной схемы.

Определите сколько баллов у вас есть суммарно по всем направлениям и подведите итог в конце статьи:
Читать дальше →
Total votes 1: ↑1 and ↓0+1
Comments1

8 ловушек программирования

Reading time13 min
Views224K


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

Однако я верю в то, что их можно избежать, если знать в какие ловушки можно попасть и как из них выбираться. Возможно эта вера — очередная ловушка.
Читать дальше →
Total votes 276: ↑256 and ↓20+236
Comments83

7 трюков при работе с массивами в Ruby

Reading time2 min
Views29K
ruby arrays

В данной статье описаны некоторые интересные трюки как можно эффективно использовать и работать с массивами в Ruby. Конечно же, есть РубиДок и множество других ресурсов, где подробно описаны все доступные методы, но здесь я хочу поделиться именно способами использования.
Читать дальше →
Total votes 39: ↑28 and ↓11+17
Comments6

Ruby: cheatsheet для изучения

Reading time14 min
Views60K
Это — статья-roadmap-cheatsheet для изучающих Ruby. Вместо того, чтобы рассказывать очередной how-to я постараюсь расписать все те вещи, которые, на мой взгляд, можно изложить кратко и емко, с упором на то, что программисту пришедшему с других языков и платформ может показаться не очевидным, антипоисковым и просто затратным по времени на изучение без подсказок — на остальное просто дам ссылки. Не смотря на то, что в природе существует множество туториалов/кастов/книг/чего угодно по чему угодно — именно такого формата мне самому всегда не хватает. И по сути, это те вещи, которые чаще всего рассказываю при вопросах «а как оно вообще?», «с чего начать?», «а как делается такая вот штука?», «а какой gem лучше?». Кстати, пока работал над этой статьей на Хабре появилась похожая про Python — видимо, идея витает в воздухе.
Читать дальше →
Total votes 49: ↑49 and ↓0+49
Comments20

Видео-курс по JavaScript на русском языке

Reading time1 min
Views218K
Здравствуй, Хабр!

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



Первая лекция: Введение в JavaScript, немного истории, числа (тут есть ошибка: функция toFixed округляет значения).



Остальное – под катом.
Читать дальше →
Total votes 135: ↑127 and ↓8+119
Comments23

Вымогатель Win32/Nymaim – хроники обфускации

Reading time5 min
Views17K
В прошлом месяце мы писали о кампании по распространению вредоносного ПО «Home Campaign». Злоумышленники на протяжении длительного времени компрометировали веб-серверы, работающие под управлением Apache Linux, используя при этом вредоносный модуль Apache известный как Darkeech (обнаруживается ESET как Linux/Chapro). Этот код использовался для перенаправления пользователей веб-сайтов на набор эксплойтов Blackhole Exploit Kit. В процессе анализа атаки выяснилось, что ее полезной нагрузкой было семейство вымогателей (ransomware) Win32/Nymaim. Данный анализ посвящен техническим особенностям этой вредоносной программы и способам ее установки на компьютеры пользователей.



Читать дальше →
Total votes 48: ↑47 and ↓1+46
Comments8

Information

Rating
Does not participate
Location
Краснознаменск (Московская обл.), Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Lead
Web development
Ruby
Ruby on Rails
Kotlin
JavaScript
Golang
Assembler
Database design
Database
OOP