image

Якщо ви зачаровані мовою Elixir, то приходьте 16 березня о 19:00 на Мансарду Rambler&Co. Ми поговоримо про Elixir, Phoenix Framework, Erlang OTP і доведемо перевагу наших buzzwords над будь-якими іншими.

Читати далі →

Ruby — чудовий мову з безліччю цікавих деталей, які ви могли раніше і не бачити.
У цьому пості я зібрав кілька таких деталей в список.

1. Heredoc + Метод
Якщо у вас є якісь текстові дані, які ви хочете включити у програму, ви можете використовувати «heredoc». В результаті ви отримаєте рядок, наприклад, так:

input = <<-IN
ULL
RRDDD
LURDL
IN

Але додатково до цього можна використовувати пост-процесинг, наприклад розділити текст за словами. Ruby дозволяє робити таке:

input = <<-IN.split
ULL
RRDDD
LURDL
IN

А ще в Ruby 2.3 з'явився «хвилястий» heredoc <<~. Він видаляє всі прогалини, використані для відступів, поширену проблему використання heredoc для тексту.


Читати далі →

Вийшла Hanami v1.0.0.beta1

image
Про Hanami вже писали на хабре, і у команди є, чим нас порадувати:
Заморозка фіч, логгер рівня проекту, автоматичне логгирование HTTP запитів, SQL-запити та міграції. Мінорні виправлення помилок.
Реліз
v1.0.0.beta1
заморожує розробку нового функціоналу) Hanami для 1.0, разом з тим додає кілька нових функцій і трохи виправлень.
З цього моменту Hanami API's буде залишатися стабільним аж до версії 2.0.
Стабільний реліз (
v1.0.0
) очікується між кінцем березня і початком квітня 2017, що збігається за часом з традицією милування квітучою Сакурою (Hanami) в Японії.
Читати далі →

Як ми прослідковували хакатони або "чим важча робота, тим легше на неї влаштуватися"

Хакатони бувають різні. І, перш ніж ви назвете мене Капітаном Очевидність, дозвольте розібрати їх на частини, щоб пояснити ту мутацію, яку ми сконструювали для заходу 18 лютого.




Читати далі →

Не вбивайте свою мотивацію: освоюйте Ruby on Rails на цікавих прикладах

Всі ж пам'ятають, як це буває: ти вчишся чомусь новому, але раптом раз і зажурився. А все чому? Тому що розробка типових програм при навчанні нудне до зубовного скреготу.

Подібні завдання стають ВБИВЦЯМИ мотивації №1.

Особисто я не хочу, щоб мої учні втрачали мотивацію і здавалися на півдорозі. Тому я створив цей кілометровий список з 27 кумедних ідей для додатків, які ви можете створити, поки навчаєтеся використовувати React на пару з Ruby on Rails.



Читати далі →

Управління складністю в проектах на ruby on rails. Частина 3

попередній частині я розповів про контролери та роутинг. Тепер поговоримо про форми. Досить часто потрібно реалізувати форми, яким не відповідає жодна модель. Або додати валідацію, яка має зміст лише в конкретному бізнес-процесі.
Я розповім про 2 типи форм: form-objects і types.
Объкты-форми використовуються для обработи та валідації користувальницького введення, коли дані потрібні для будь-якої операції. Наприклад, вхід користувача в систему або фільтрація даних.
Types використовуються, якщо потрібно розширити поведінку моделі. Наприклад, у вашому проекті користувачі можуть реєструватися як через vkontakte, так і через звичайну форму. Заповнення email обов'язково для звичайних користувачів, а для vk користувачів — ні. Така поведінка легко вирішується за допомогою types.
Читати далі →

Як тестувати контейнери RoR з GitLab CI у контейнері

Чим гарний GitLab, так це тим, що будучи за габаритами слоном у посудній лавці, він вміє акуратно встановлюватися і майже завжди працює з коробки. Але погано вміє відновлюватися і дбати про себе, коли дуже прямі руки начебто моїх порушують звичне йому оточення. Не буду заглиблюватися в те, як мені вдавалося вбити його до стану, коли навіть видалення та встановлення з нуля не допомагає, але під уникнення черговий нескінченної епопеї з дебагом і перевстановлення сервера я виніс все це справа в Docker контейнер. Зручно — на робочій машині немає мільйона залежностей, примонтировал директорії для репозиторіїв, журнали та бази даних і все працює. Відновлення — перезаснувати контейнер і згодувати бекап (до речі, не забудьте перевірити свої бекапи, як свідчить досвід GitLab, це не зайве).

З іншого боку, є розроблювальна Rails додаток, яке на реальній машині тримає тільки код; Rails, gems, і все інше спочиває в Docker контейнері. Для своєї роботи вона використовує Redis і Postgres, кожен знаходиться на своєму контейнері. Для кожного контейнера примонтирована директорія, щоб важливі для додатка дані не залишалися всередині.



Завдання в тому, щоб Gitlab CI нормально відпрацював. Начебто все просто, але — він сам знаходиться в контейнері.

Читати далі →

Redmine на MySQL з RocksDB швидше, ніж з InnoDB, від 20% до 3 разів

Ми зібрали форк MySQL від Facebook з движком RocksDB замість InnoDB і потестували його з реальними додатками: Drupal, Wordpress, Redmine.
Це офігенна штука. При низькому навантаженні виграш маленький, десятки відсотків. Зате при високому навантаженні виграш в рази. Коли RocksDB додадуть в стабільний реліз в MariaDB, я впевнений, що протягом півроку половина народу перейде з InnoDB на RocksDB. Особливо, невеликі сайти на cloud/VPS та виділених серверах.
Що такого хорошого в MyRocks? Лінійна запис замість випадкової і зниження числа дискових операцій взагалі. Тобто транзакції бази даних породжують менше дискових операцій, менше займають чергу диска, і пишуться набагато швидше.
Я зібрав у статтю результати тестування реальних сценаріїв Redmine, додав аналіз результатів і висновки. Redmine на MySQL з RocksDB виявився швидше, ніж з InnoDB — від 20% при мінімальному навантаженні до 3 разів при максимальній. Пізніше підготую матеріали по Drupal та іншим PHP-додатків.
Ви зможете перевірити роботу MyRocks і самостійно — в кінці статті є посилання на інсталятори і віртуальні машини з LAMP/LEMP/Ruby стеками, зібрані з MyRocks замість MySQL.


Читати далі →

Проста і жахлива історія про шифрування

Це буде історія про відкрите ПЗ, довірі та відповідальності.

Задача та її розв'язок
Як-то раз мені знадобилося додати в свій додаток на Ruby симетричне шифрування. Алгоритм AES здався мені хорошим вибором і я вирішив знайти бібліотеку шифрування з підтримкою цього алгоритму. Оскільки я писав на Ruby, зробив те ж саме, що зробив би на моєму місці практично кожен програміст на Ruby — пішов в Google і написав запит «ruby gem aes». Звичайно ж, Google першої рядком запропонував мені gem, називається (ось несподіванка!) — «aes». Він був дуже простий у використанні:

require 'aes'

message = "Super secret message"
key = "password"

encrypted = AES.encrypt(message, key) # RZhMg/RzyTXK4QKOJDhGJg==$BYAvRONIsfKjX+uYiZ8TCsW7C2Ug9fH7cfRG9mbvx9o=
decrypted = AES.decrypt(encrypted, key) # Super secret message


Якщо ви при розшифровці використовували невірний пароль, gem викидав помилку:
decrypted = AES.decrypt(encrypted, "Some other password") #=> aes.rb:76:in `final': bad decrypt (OpenSSL::Cipher::CipherError)


Ну, відмінно. Що ж могло піти не так?

Читати далі →