4-5 червня в Києві відбудеться RubyC-2016!

RubyC – це найбільша українська конференція, присвячена Ruby, Ruby on Rails і супутнім технологіям. Організатор, компанія Svitla Systems, щорічно збирає в Києві понад 250 учасників з усієї України та країн СНД. У 2016 році конференція пройде 4 та 5 червня у Конгрес Холі готелю «Русь».

На відміну від попередніх років, цього року RubyC стає повністю англомовною конференцією, відтак всі запрошені спікери будуть презентувати свої теми виключно англійською мовою.

Традиційно в рамках конференції виступає 14 експертів, як правило, половина з них – представники європейських країн і США. Наразі, перші 7 спікерів вже заявлені, серед них учасники минулого року легко впізнають Бена Лоувела (Ben Lovell), дотепного бородатого британця, чиї виступи незмінно піднімають настрій, а також Божидара Батсова (Bozhidar Batsov), болгарського розробника, минулорічний виступ якого викликав величезну кількість позитивних відгуків, а відеозапис зібрав понад 2500 тисяч переглядів.

Вперше RubyC представить Енді Пайка (Andy Pike), британського програміста, який останні кілька років успішно виступає на різних IT-конференціях, а також Роберта Панковецького (Robert Pankowecki), активного учасника польської Ruby спільноти. Серед українських рубістів раді оголосити участь Михайла Бортника, Олександра Симонова і Дмитра Зіміна, чиї доповіді буде корисно і цікаво послухати. Повну інформацію про спікерів і теми, з якими, щоправда, ще не всі визначилися, можна знайти на сайті rubyc.eu/.

Окрім цього RubyC продовжує приймати заявки на виступи, тому якщо у вас є ідеї, якими ви хочете поділитися – просимо реєструватися через цю форму. Фінальний список спікерів буде представлений в кінці березня.

І звичайно, RubyC-2016 висловлює величезну подяку цьогорічним Ruby Спонсорам, компаніям DataArt та Global Logic, без яких конференція навряд чи відбулася б; а також Медіа партнерам: Ruby No Name, Ruby Garage, Lohika, Daxx, Українська IT Асоціація, Innocode, Ruby Flow and Ruby Jobs, IT Education Academy та Belarus Ruby User Group, завдяки яким конференція продовжує рости і розвиватися.

І окреме спасибі нашому прекрасному майданчику – готелю «Русь».

А поки організатори займаються різними організаторськими штуками, попередній продаж квитків категорії Early Birds успішно стартував і триватиме до кінця березня.

Чекаємо вас на RubyC-2016!

Стежити за нашими новинами можна на twitter.com/rubyc_eu або www.facebook.com/RubyC.eu/.

RubyC-2015 представляє інтерв'ю з Еріком Міхаельс-Обером

Напередодні третьої київської конференції RubyC-2015 (30-31 травня 2015 року), організатори представляють інтерв'ю з Еріком Міхаельс-Обером (Erik Michaels-Ober), рубістом з Німеччини, який став RubyHero-2014. Ерік є популярним ментором серед різних Ruby-спільнот: Ruby Summer of Code, Google Summer of Code і Rails Girls Summer of Code. В рамках RubyC-2015 Ерік представить тему Crystal programming language, подробиці про яку можна дізнатися на сайті http://rubyc.eu/#speakers, а більше дізнатися про сам Еріці можна з його відповідей.

I started working on Ruby full-time in 2006, when my team decided to port our web application from PHP to Rails. Rails had just turned 1.0. I believe we were using Ruby version 1.8.4 with Mongrel as the web server. This was before Rack, Bundler, RubyGems.org, or GitHub. In retrospect, it’s hard to imagine working on Ruby without these tools that I now use on a daily basis.

Ruby made me realize the value of people over computers. Most programming languages are optimized to make executing code fast. Ruby is optimized to make reading and writing code fast. This changed the way I thought about code: from something that I write for the computer to something that I write for other people.

Ruby, the language, is great but my true love is the Ruby community. By joining this community, I’m now connected to nice people, all around the world. I love meeting new Rubyists at meetups and conferences. I’ve learned so much from others, who openly share their knowledge on their blogs, podcasts, screencasts, etc. I love Rails Girls, RailsBridge, and other community programs to make programming more diverse and inclusive. I also love the creative spirit of the Ruby community, inspiring projects like Artoo, Kids Ruby, Shoes, Gosu, Sonic Pi, etc.

I think Ruby would be better language if the syntax was more consistent. For example, Ruby has 2 different ways to make a hash and 7 different ways to make a function (def, proc, Proc.new, lambda, ->, {}, do…end) compared to JavaScript, which has a unified hash/object syntax and one way to define a function, regardless of whether it’s named or anonymous. Ruby also has too many aliases compared to Python’s philosophy that there should be only one obvious way to do something. Design is the art of making decisions. By having multiple names for the same method (e.g. map/collect, reduce/inject, find/detect, find_all/select, etc.), the Ruby designers avoided making a hard decision, hoisting that choice onto the user. Ruby also has many similar names for methods that are subtly different (e.g. ==, ===, eql?, equal?). I’ve been using Ruby daily for almost 10 years and I still can’t remember the difference between eql? and equal? without looking it up. I wish these methods had more descriptive names. Another example is the subtle differences between the alias keyword and alias_method, or private and protected. I think symbols could be replaced by frozen strings and removed from the user-facing part of the language. There are a few other language “features” I would remove from the Ruby if it was up to me, like the Perl-inspired global_variables. In my opinion, these do not mesh well with the rest of the language. There are also a lot of poorly maintained and outdated code in the Ruby standard library. I’d like to see the standard library refreshed to use newer language features, like keyword arguments. If these features are not useful enough for the core/standard libraries, they should be removed from the language, since they add unnecessary complexity. The ability for Ruby to catch some type errors at startup time would be nice. I’d also like an ahead-of-time compiler than generates native binaries. And better runtime performance. I’ve started using Crystal instead of Ruby, which I will be giving my talk about, since it has most of the features I like about the Ruby language without many of the features I dislike.

If talking about the most terrible architectural solution/code I have ever met, the first thing that comes to mind is the way Rails performs uniqueness validation. For those who don’t know, it just does just does a SELECT to see whether the field already exists before doing an INSERT. The first problem is that these two operations are not done in a transaction, so there’s a race condition that allows non-unique values to be inserted. However, transactions are not a good solution either, since they would cause too much table locking. The best solution is simply to create a UNIQUE INDEX on that field in the database, which guarantees correctness and optimal performance. The Rails approach to uniqueness validation is an impedance mismatch that gives the user a false sense of security.

The most spectacular Ruby news in 2014 was the creation of RubyBench.org by Alan Guo Xiang Tan. It is an incredibly valuable (and long-overdue) contribution to the Ruby community. This project will ensure that there are no performance regressions in Ruby so it only gets faster with each release. If RubyBench existed in the past, it could have prevented the performance regression in require that snuck into Ruby 1.9.

Life after Ruby is Crystal! See my talk for more information. ;)

Currently I am working on rewriting the Twitter CLI in Crystal and coaching a Rails Girls Summer of Code team.

My dev environment contains the Fish shell, which I recommend to anyone who spends a lot of time on the command line. Try it for a week and you’ll never go back!

My favorite Ruby blogs\communities\websites are Ruby-Talk, Ruby Weekly, and This week in Rails mailing lists. Blogs, written by Aaron Patterson, Aman Gupta, Sam Saffron, James Edward Gray II, Thomas Reynolds, Sandi Metz, Tom Stuart, Avdi Grimm, Jessica Kerr and Pat Shaughnessy. I also read lots of non-Ruby blogs.

I recommend the bookRuby Under a Microscope” by Pat Shaughnessy because it is a fascinating look at how Ruby works under the hood. I would also recommend Practical Object-Oriented Design in Ruby by Sandi Metz to any Rubyist who hasn’t read it yet. For a better theoretical understanding of computer science, I recommend Understanding Computation by Tom Stuart. To absolute beginners, I recommend Learn to Program by Chris Pine. Finally, Why's (Poignant) Guide to Ruby has a special place in my heart.

My personal life hack is: add the following line to your crontab: */30 9-17 * * 1-5 say «Stand up and walk around»

Пастка CMS

Кінець 2013 Maxim Chernyak написав чудову статтю в якій підкреслював виняткову важливість підтримки архітектури додатків настільки простий, наскільки це можливо. Здивований що на Хабре досі не було перекладу, пропоную ознайомитися з перекладом цієї статті. Також прошу повідомляти про всі можливі друкарських помилках і неточності перекладу.
 
 
Преамбула
Багато років тому у нас було додаток Ruby on Rails. Все починалося з об'єктів. Деякі виступали прототипами для інших об'єктів. Інші вимагали безліч пов'язаних з ними частин, частин цих частин і т.д. Наскільки багато? Мабуть, одним прототипам відомо. Ці прототипи повинні були мати інтерфейс для адміністрування, але зміна логіки роботи одного прототипу могла призвести до ланцюгової реакції в інших частинах. Будь-яка зміна об'єктів та їх прототипів пролягали через пов'язану мережу з різних моделей. Складність інтерфейсу для адміністрування швидко злетіла до небес. Дійшло до того моменту, коли прототипи мали стати Серіалізуемое, що зберігають фрагменти своєї логіки. З цього моменту кожна фіча ставала предметом дуже важкою реалізації, і, в кінцевому рахунку, додаток скотилося до стану, коли модифікація і доробка стали практично неможливі. Було таке відчуття, ніби CMS нав'язувала себе в якості посередника між фичей та її реалізацією, подібно системам, орієнтованим виключно на бізнес-логіку, з нагромадженням високорівневих абстракцій.
 
Думаєте це була найгірша частина проекту? Це був ще тільки мінімально життєздатний продукт в новому стартапі.
 
Читати далі →

Rails 4 Engines. Розробка gem'а через mountable engine - читаємо логи сервера


Так уже сталося, що виникло непереборне бажання написати свій Rails gem. По-перше, академічний інтерес — такого ще не робив, по-друге, назріла проблема, вирішення якої важливо особисто для мене і яке хотілося б використовувати в кількох своїх проектах.
 
На Хабре вже були статті про створення gem'ов (раз два три )
 
Але на їх основі створити повноцінний gem не можна — вони сильно застаріли і, як правило, являють собою переклад скупий офіційній документації. А головне, вони в більшій частині описують створення Readme і License файлів, а власне функціонал gem'a зводиться до Hello World.
 
 

Проблема

Не знаю, як у кого, а от у мене регулярно буває ситуація — прикрутив нову фічу локально, перевірив, начебто працює. Запускаєш cap deploy, дивишся на сервер, а там
«Sorry, but something went wrong.
If you are the application owner check the logs for more information. »
Ну а далі — ssh до сервера, cd до папки програми і розкопка логів. Що б не говорили прихильники vim і emacs, але намагатися знайти щось в балці з їх допомогою — то ще заняття. Простіше вже запустити tailf і намагатися знайти руками. Є ще rmate, але у мене він якось не прижився.
 
 

Ідея

Написати gem, який буде виводити результати команди tail в браузер по заданому шляху. Бажано, щоб була можливість дивитися всі. Log файли в папці log /
 
Читати далі →

Rails 4. Гнучка розробка веб-додатків

Перед вами нове видання бестселера «Agile web development with Rails », написаного Семом Рубі — керівником Apache Software Foundation і розробником формату Atom, Дейвом Томасом — автором книги «Programming Ruby » і Девідом Хенссоном — творцем технології Rails. Rails являє собою середовище, що полегшує розробку, розгортання та обслуговування веб-додатків. За час, що минув з моменту її першого релізу, Rails пройшла шлях від маловідомої технології до феномену світового масштабу і стала саме тим середовищем, яку обирають, щоб створювати так звані «додатки Web 2.0». Ця книга, вже давно стала настільною з вивчення Ruby on Rails, призначена для всіх програмістів, які збираються створювати та розгортати сучасні веб-додатки. З першої частини книги ви отримаєте початкове уявлення про мову Ruby і загальні відомості про самому середовищі Rails. Далі на прикладі створення інтернет-магазину ви вивчіть концепції, покладені в основу Rails. У третій частині розглядається вся екосистема Rails: її функції, можливості і додаткові модулі. Оновлене видання книги описує роботу з Rails покоління 4 і Ruby 1.9 і 2.0.
 
 image
 
 Книга на сайті видавництва ПИТЕР
 Книга в Озоне
 
 Зміст
 Уривок
 
 
Читати далі →

Критична вразливість в Rails. Знову



Чергова уразливість (CVE-2013-0333) в Rails дозволяє зловмисникам минаючи аутентифікацію запускати довільний код.

Вразливі версії: 2.3.x, 3.0.x
Безпечні: 3.1.x, 3.2.x або додатка використовують yajl-ruby
Пофікшено у версіях: 3.0.20, 2.3.16

Зараз-то що сталося?


3.0 і 2.3 Rails підтримують кілька бекенда для парсингу JSON. Один з бекенда включає в себе трансформування JSON в YAML через YAML Parser. Зловмисник може виконати довільний код, якщо передасть спеціальний запит c закодованим YAML (згадаймо CVE-2013-0156 ).

Читати далі →