Не так давно вышла статья, в которой автор описывал свой framework для написания приложений с использованием Ruby, Sinatra и websoсket. Но в том решении не был затронут вопрос горизонтального масштабирования. Так при подключении к одному из узлов, пользователи могут получать уведомления/данные только о событиях/изменениях, вызванных пользователями этого же узла, а при изменениях, внесенных через другой, они не узнают. Для решения данной задачи необходимо организовать общую шину данных. Рассматривать данную задачу буду в контексте обмена сообщениями клиент-клиент.
Разработчик
Как DRYить модели
5 min
17KВ большинстве рельсовых проектов основная концентрация кода приходится на модели. Все наверняка читали про Slim controllers & fat models и стараются впихать в модели как можно больше, а в контроллеры как можно меньше. Что ж, это похвально, однако в стремлении утолстить модели многие часто забывают про принцип DRY — don't (fucking) repeat yourself.
Я тут постараюсь вкратце расписать, как в районе моделей и рыбку съесть, и про DRY не забыть.
Я тут постараюсь вкратце расписать, как в районе моделей и рыбку съесть, и про DRY не забыть.
+56
Архитектура контроллеров: простые советы на каждый день
6 min
3.9KТо, что контроллеры должны быть «худыми» знают все, но по мере наращивания функционала поддерживать чистоту контроллеров становится все сложнее и сложнее. Мы хотим предложить несколько рекомендаций как содержать свои контроллеры максимально чистыми без ущерба для качества кода.
+43
Авторизация через Facebook, Google, Twitter и Github используя Omniauth
16 min
31KTutorial
Translation
Озадачившись однажды вопросом добавление регистрации/входа на сайт через сторонние сервисы начал искать, что уже есть готового, либо описания как это уже кто-то делал. Готовые сервисы были откину сразу, остался вариант реализовывать самому. И тут Google навел на подробную инструкцию. Ознакомившись и вдохновленный тем решением сделал свою модификацию, все работало, был просто счастлив.
Спустя некоторое время решил посмотреть что-же еще есть на том ресурсе интересного, но к своему разочарованию сайт был не доступен. Слава кэшу Яндекса, откуда была выдернута копия того материала. И чтобы он не пропал безвозвратно, решил сделать его перевод и выложить здесь.
И так приступим...
Эта глава будет посвящена известному гему Omniauth. Omniauth это новая система идентификации поверх Rack для мультипровайдерной внешней идентификации. Он будет использован для связи CommunityGuides (прим: в настоящий момент ресурс не доступен и похоже уже не вернется) с Facebook, Google, Twitter и Github. Данная глава покажет как интегрировать все это с существующей идентификацией через Devise.
Спустя некоторое время решил посмотреть что-же еще есть на том ресурсе интересного, но к своему разочарованию сайт был не доступен. Слава кэшу Яндекса, откуда была выдернута копия того материала. И чтобы он не пропал безвозвратно, решил сделать его перевод и выложить здесь.
И так приступим...
Эта глава будет посвящена известному гему Omniauth. Omniauth это новая система идентификации поверх Rack для мультипровайдерной внешней идентификации. Он будет использован для связи CommunityGuides (прим: в настоящий момент ресурс не доступен и похоже уже не вернется) с Facebook, Google, Twitter и Github. Данная глава покажет как интегрировать все это с существующей идентификацией через Devise.
+2
Аутентификация в Rails-приложениях с помощью Devise. Часть 1: базовая настройка
8 min
86KПредлагаю вашему вниманию один из лучших, на мой взгляд, гемов для аутентификации в rails-приложениях. К сожалению, русскоязычной информации по данному гему очень мало, в том числе и на хабре, поэтому хочу осветить данную тему. Статья, в первую очередь, рассчитана на новичков и представляет из себя подробный туториал по настройке аутентификации на основе упомянутого гема. В первой части я освещу шаги по базовой настройке. Далее подробнее о геме.
Devise — это ruby-гем, предоставляющий возможности для аутентификации в rails-приложениях. Devise работает в связке с гемом Warden, который в свою очередь предоставляет сам механизм для аутентификации в rack-базированных ruby-приложениях. Основные особенности Devise описаны ниже:
Итак, приступим к установке и настройке Devise для вашего rails-приложения. Дальнейший процесс для удобочитаемости будет разбит на отдельные шаги.
Devise — это ruby-гем, предоставляющий возможности для аутентификации в rails-приложениях. Devise работает в связке с гемом Warden, который в свою очередь предоставляет сам механизм для аутентификации в rack-базированных ruby-приложениях. Основные особенности Devise описаны ниже:
- основан на Rack;
- является законченным MVC-решением, основанным на Rails;
- разрешает вход в систему по нескольким моделям одновременно;
- основан на модульности: использует только то, что вам действительно необходимо.
Итак, приступим к установке и настройке Devise для вашего rails-приложения. Дальнейший процесс для удобочитаемости будет разбит на отдельные шаги.
+15
CRUD-приложение на Ext JS и Ruby on Rails за 7 минут
5 min
22KTutorial
Translation
Это обновленная версия устаревшего поста.
Этот пост покажет вам простые шаги по созданию менеджера задач TODO с использованием Ext JS, Ruby on Rails и Netzke. Это займет у вас приблизительно 7 минут, и если вам заранее любопытно, стоит ли оно того, загляните прямиком в секцию «Обсуждаем результаты» (кстати, самую большую). Наша цель заключается в создании веб-приложения которое позволит нам добавлять, редактировать и удалять задачи TODO, так же как и помечать их как завершенные. В дополнение к этому вы сможете сортировать задачи, делать поиск по ним, редактировать несколько задач одновременно — и это еще не все. Если хотите, засекайте время на секундомере — и давайте приступим.
Этот пост покажет вам простые шаги по созданию менеджера задач TODO с использованием Ext JS, Ruby on Rails и Netzke. Это займет у вас приблизительно 7 минут, и если вам заранее любопытно, стоит ли оно того, загляните прямиком в секцию «Обсуждаем результаты» (кстати, самую большую). Наша цель заключается в создании веб-приложения которое позволит нам добавлять, редактировать и удалять задачи TODO, так же как и помечать их как завершенные. В дополнение к этому вы сможете сортировать задачи, делать поиск по ним, редактировать несколько задач одновременно — и это еще не все. Если хотите, засекайте время на секундомере — и давайте приступим.
+23
Различные методы загрузки ассоциаций в Ruby on Rails
3 min
42KRails предоставляют нам 4 различных способа загрузки ассоциаций: preload, eager_load, includes и joins. Рассмотрим каждый из них:
Этот метод загружает ассоциации в отдельном запросе:
Т.к. preload всегда создает два отдельных запроса, то мы не можем использовать таблицу posts в условии выборки:
А таблицу users – можем:
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)
+34
ActiveRecord немного про грабли, Relations и индексы
8 min
23K Хочу рассказать Вам о наболевшем: о работе с AR в целом и с Relation в частности; предостеречь от стандартных садовых изделий, которые легко могут испортить жизнь и сделать код медленным и прожорливым. Повествование будет основываться на Rails 3.2 и ActiveRecord того же разлива. В Rails 4, конечно же, много чего нового и полезного, но на него ещё перейти нужно, да и фундамент в любом случае один и тот же.
Сей материал, по большей части, предназначен для начинающих, ибо автору очень больно смотреть на извлечение содержимого целых таблиц в память в виде ActiveRecord объектов и на прочие отстрелы конечностей при использовании AR. Разработчикам, познавшим дзен, топик вряд ли принесёт пользу, они могут лишь Помочь, дополнив его своими примерами и назиданиями.
Сей материал, по большей части, предназначен для начинающих, ибо автору очень больно смотреть на извлечение содержимого целых таблиц в память в виде ActiveRecord объектов и на прочие отстрелы конечностей при использовании AR. Разработчикам, познавшим дзен, топик вряд ли принесёт пользу, они могут лишь Помочь, дополнив его своими примерами и назиданиями.
+21
IPv6 под прицелом
14 min
77KКазалось бы, зачем сейчас вообще вспоминать про IPv6? Ведь несмотря на то, что последние блоки IPv4-адресов были розданы региональным регистраторам, интернет работает без каких-либо изменений. Дело в том, что IPv6 впервые появился в 1995 году, а полностью его заголовок описали в RFC в 1998 году. Почему это важно? Да по той причине, что разрабатывался он без учета угроз, с той же доверительной схемой, что и IPv4. И в процессе разработки стояли задачи сделать более быстрый протокол и с большим количеством адресов, а не более безопасный и защищенный.
+52
Покупаем на taobao.com
6 min
81KЯ оставил в России много настольных игр, везти их с собой во Вьетнам смысла не видел. Надеялся, что можно будет что-то купить на месте. Облом-с, тут про настольные игры мало чего слышали, никаких магазинчиков специализированных нет. Выход был найден — рядом Китай, с огромным ассортиментом и относительно небольшими ценами. Сейчас я вам расскажу, на примере закупки настольных игр, как можно покупать что-то в Китае.
taobao.com — это китайский ebay, или что-то на него похожее. Большое количество разных магазинов, предоставляющих разного вида товары. Если я все правильно понял — сам taobao это как аггрегатор таких магазинов. Можно найти огромное количество разных товаров: игрушки, техника, одежда, и т.д. и т.п. Разброс цен большой, как всегда для Китая, от очень и очень низких, до обычных европейских. Качество соответственное.
taobao.com — это китайский ebay, или что-то на него похожее. Большое количество разных магазинов, предоставляющих разного вида товары. Если я все правильно понял — сам taobao это как аггрегатор таких магазинов. Можно найти огромное количество разных товаров: игрушки, техника, одежда, и т.д. и т.п. Разброс цен большой, как всегда для Китая, от очень и очень низких, до обычных европейских. Качество соответственное.
+25
UG007: мини-ПК с Bluetooth, двухъядерным процессором и Android 4.1.1 за 60 у.е
1 min
164KДа, Raspberry Pi пока что вне конкуренции — практически нет миниатюрных ПК подобного класса за подобную цену. Но
+42
Развертываем свой сайт на Heroku
4 min
163KTutorial
Здравствуй, Хабрахабр! Недавно у меня возникла необходимость развернуть свое Rails web-приложение на Heroku и я, к своему удивлению, не нашел почти ничего об этом на просторах не только Хабра, но и рунета в целом, поэтому я решил поделиться с вами своим опытом. Подробности о том, что и как я делал находятся под катом!
+2
IPv6 в Cisco или будущее уже рядом (Часть 1)
7 min
56KВведение
Протокол IPv6 является наследником повсеместно используемого сегодня протокола IP четвёртой версии, IPv4, и естественно, наследует большую часть логики работы этого протокола. Так, например, заголовки пакетов в IPv4 и IPv6 очень похожи, используется та же логика пересылки пакетов – маршрутизация на основе адреса получателя, контроль времени нахождения пакета в сети с помощью TTL и так далее. Однако, есть и существенные отличия: кроме изменения длины самого IP-адреса произошёл отказ от использования широковещания в любой форме, включая направленное (Broadcast, Directed broadcast). Вместо него теперь используются групповые рассылки (multicast). Также исчез ARP-протокол, функции которого возложены на ICMP, что заставит отделы информационной безопасности внимательнее относиться к данному протоколу, так как простое его запрещение уже стало невозможным. Мы не станем описывать все изменения, произошедшие с протоколом, так как читатель сможет с лёгкостью найти их на большинстве IT-ресурсов. Вместо этого покажем практические примеры настройки устройств на базе Cisco IOS для работы с IPv6.
Многие начинающие сетевые специалисты задаются вопросом: «Нужно ли сейчас начинать изучать IPv6?» На наш взгляд, сегодня уже нельзя подходить к IPv6 как к отдельной главе или технологии, вместо этого все изучаемые техники и методики следует отрабатывать сразу на обоих версиях протокола IP. Так, например, при изучении работы протокола динамической маршрутизации EIGRP стоит проводить настройку тестовых сетей в лаборатории как для IPv4, так и для IPv6 одновременно. Перейдём от слов к делу!
+17
Матрица компетенций Ruby on Rails разработчика
4 min
9.2KКак начинающему Rails разработчику понять, в какую сторону копать, чтобы как можно быстрее стать опытным программистом? Понятно, что нужно работать, работать и еще раз работать. Но кроме этого важен горизонт, который даст понять, в какую же сторону нужно идти по дороге к званию профессионала.
Два месяца назад мы запустили оффлайн&онлайн курсы в Харькове по Ruby on Rails для начинающих RubyBursa. Из особенностей — половина занятий было в учебном классе, половина в формате вебинара. Мы поставили жесткие условия выполнения домашних заданий и за первое невыполнение участники получали желтую карточку, за второе — красное и выбывали с курсов. Такие «драконовские методы» позволили 35 из 40 участников дойти до конца со 100% выполнением всех домашних задач.
Некоторые ученики в процессе учебы интересовались: «а что же дальше?». Наш преподаватель Оксана специально в виде ответа на этот вопрос подготовила пробную версию матрицы компетенции Ruby разработчика. Не претендуем на академичность и понимаем возможную спорность предложенной схемы.
Определите сколько баллов у вас есть суммарно по всем направлениям и подведите итог в конце статьи:
Два месяца назад мы запустили оффлайн&онлайн курсы в Харькове по Ruby on Rails для начинающих RubyBursa. Из особенностей — половина занятий было в учебном классе, половина в формате вебинара. Мы поставили жесткие условия выполнения домашних заданий и за первое невыполнение участники получали желтую карточку, за второе — красное и выбывали с курсов. Такие «драконовские методы» позволили 35 из 40 участников дойти до конца со 100% выполнением всех домашних задач.
Некоторые ученики в процессе учебы интересовались: «а что же дальше?». Наш преподаватель Оксана специально в виде ответа на этот вопрос подготовила пробную версию матрицы компетенции Ruby разработчика. Не претендуем на академичность и понимаем возможную спорность предложенной схемы.
Определите сколько баллов у вас есть суммарно по всем направлениям и подведите итог в конце статьи:
+1
8 ловушек программирования
13 min
224KЭта статья содержит те ловушки программирования, в которые я попадал сам, продолжаю попадать и возможно никогда не прекращу, а также те, в которых я находил своих товарищей.
Однако я верю в то, что их можно избежать, если знать в какие ловушки можно попасть и как из них выбираться. Возможно эта вера — очередная ловушка.
+236
7 трюков при работе с массивами в Ruby
2 min
29KTutorial
Translation
В данной статье описаны некоторые интересные трюки как можно эффективно использовать и работать с массивами в Ruby. Конечно же, есть РубиДок и множество других ресурсов, где подробно описаны все доступные методы, но здесь я хочу поделиться именно способами использования.
+17
Обрезаем фото в стиле «ВКонтакте»
3 min
17KВ этом HOWTO я раскажу вам как обрезать фотографию до нужного вам размера и залить её на сервер с помощью Ruby on Rails.
+47
Ruby: cheatsheet для изучения
14 min
60KTutorial
Это — статья-roadmap-cheatsheet для изучающих Ruby. Вместо того, чтобы рассказывать очередной how-to я постараюсь расписать все те вещи, которые, на мой взгляд, можно изложить кратко и емко, с упором на то, что программисту пришедшему с других языков и платформ может показаться не очевидным, антипоисковым и просто затратным по времени на изучение без подсказок — на остальное просто дам ссылки. Не смотря на то, что в природе существует множество туториалов/кастов/книг/чего угодно по чему угодно — именно такого формата мне самому всегда не хватает. И по сути, это те вещи, которые чаще всего рассказываю при вопросах «а как оно вообще?», «с чего начать?», «а как делается такая вот штука?», «а какой gem лучше?». Кстати, пока работал над этой статьей на Хабре появилась похожая про Python — видимо, идея витает в воздухе.
+49
Видео-курс по JavaScript на русском языке
1 min
218KЗдравствуй, Хабр!
Представляю вам свой курс по JavaScript, недавно прошедний на Хекслете. Курс состоит из семи лекций общей продолжительностью около четырех часов.
Первая лекция: Введение в JavaScript, немного истории, числа (тут есть ошибка: функция toFixed округляет значения).
Остальное – под катом.
Представляю вам свой курс по JavaScript, недавно прошедний на Хекслете. Курс состоит из семи лекций общей продолжительностью около четырех часов.
- Раздача на Рутрекере (видео+слайды)
- Прямые ссылки на видеофайлы: первая лекция, вторая, третья, четвертая, пятая, шестая и седьмая
- Прямая ссылка на слайды (zip-архив pdf-файлов)
- Подкаст в iTunes
- Плейлист на YouTube
- Форум курса
Первая лекция: Введение в JavaScript, немного истории, числа (тут есть ошибка: функция toFixed округляет значения).
Остальное – под катом.
+119
Вымогатель Win32/Nymaim – хроники обфускации
5 min
17KВ прошлом месяце мы писали о кампании по распространению вредоносного ПО «Home Campaign». Злоумышленники на протяжении длительного времени компрометировали веб-серверы, работающие под управлением Apache Linux, используя при этом вредоносный модуль Apache известный как Darkeech (обнаруживается ESET как Linux/Chapro). Этот код использовался для перенаправления пользователей веб-сайтов на набор эксплойтов Blackhole Exploit Kit. В процессе анализа атаки выяснилось, что ее полезной нагрузкой было семейство вымогателей (ransomware) Win32/Nymaim. Данный анализ посвящен техническим особенностям этой вредоносной программы и способам ее установки на компьютеры пользователей.
+46
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