472 читачі, 7 публікацій

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»

LED підсвічування монітора своїми руками

Час непомітно йде і здавалося б недавно куплена техніка вже виходить з ладу. Так, відпрацювавши свої 10000 годин, наказали довго жити лампи мого монітора
(AOC 2216Sa). Спочатку підсвічування стала включатися не з першого разу (після включення монітора підсвічування вимикалася через кілька секунд), що вирішу
валося повторним включенням / виключенням монітора, з часом монітор доводилося вимикати / вимикати вже 3 рази, потім 5, потім 10 і в якийсь момент він не
міг включити підсвічування вже незалежно від числа спроб включення. Витягнуті на світло божий лампи виявилися з почорнілими краями і законно вирушили в ут
иль. Спроба поставити лампи на заміну (були куплені нові лампи відповідного розміру) успіхом не увінчалася (кілька разів монітор зміг включити підсвічуван
ня, але швидко знову пішов у режим включився-виключився) і з'ясування причин в чому може бути проблема вже в електроніці монітора привели мене до думк
и про те що простіше буде зібрати власне підсвічування монітора на світлодіодах ніж ремонтувати наявну схему інвертора для CCFL ламп, тим більше в мережі
вже траплялися статті показують принципову можливість такої заміни.
Читати далі →

Штучний інтелект і чому мій комп'ютер мене не розуміє?

Гектор Левек wiki стверджує, що його комп'ютер тупий. І ваш теж. Siri і голосовий пошук Google вміють розуміти приготовані пропозиції. Наприклад «Які фільми будуть показувати неподалік в 7 годин?» Але що щодо питання «Чи може алігатор пробігти стометрівку з бар'єрами?» Таке питання ніхто раніше не ставив. Але будь-який дорослий може знайти відповідь на нього (Ні. Алігатори не можуть брати участь у бігу з бар'єрами). Але якщо ви спробуєте ввести це питання в Google, то отримаєте тонни інформації про спортивній команді з легкої атлетики Florida Gators. Інші пошукові системи, такі як Wolfram Alpha, теж не здатні знайти відповідь на поставлене запитання. Watson, комп'ютерна система виграла вікторину «Jeopardy!», Навряд чи покаже себе краще.

Читати далі →

Kinect 3.0

Ми живемо в дивовижний час, в якому людству стають доступні тонни нових технологій. Ми з вами можемо винайти практично все, що тільки мислимо. Безліч платформ для краудфандінга дозволяють втілити ідеї в життя при порівняно невеликих витратах. Так чого ж ми сидимо? Ми ж тут усі, практично, інженери з освіти!

Це було дещо риторичне запитання, але ідеї завжди літають навколо нас. Часто буває, що відкриваючи вранці почитати новини, ми бачимо саме те про що замислювалися недавно, але не залишили про це ні єдиної запису. Так що ця стаття якраз і є цей невеликий запис, яким хотілося б поділитися з співтовариством.

Читати далі →

Дев'ять ознак суворого адміністратора Unix

Ознака 1: ми не використовуємо sudo

Як CAPS LOCK — «круїз-контроль для крутотенюшкі», так і sudo — «костиль для нерішучих». Якщо нам потрібно зробити щось від імені root, ми використовуємо su, а не фігню sudo. Якщо якась із Unix-подібних операційних систем змушує нас використовувати sudo, то перше що ми робимо — sudo su і встановлюємо пароль для користувача root, щоб комфортно користуватися su надалі. Постійне використання sudo можна порівняти з плаванням c надувним колом у животі — це безпечніше, так, але позбавляє необхідності обдумування вчинків.

Читати далі →

Нове розширення PHP дозволяє додавати довільні методи до скалярів

На Github з'явилося нове експериментальне розширення PHP "scalar_objects", за допомогою якого можна додавати будь-які методи до чисел, рядків, масивів.
Виглядає це приблизно так:

$result = $string->replace('shit', 'candy')->remove(',')->toUpper()->split(" ")->sort();

Симпатично, чи не так?
Інструкції з установки можна знайти за посиланням вище, потрібно PHP 5.4.
Майте на увазі, що розширення перебуває в дуже ранній альфа-версії, перший Комміт датований 24 січня.
Радує, що автор розширення — контриб'ютор PHP Микита Попов: є ймовірність, що подібне API небудь додадуть в ядро інтерпретатора.
Далі я просто покажу як можна використовувати ці нові можливості в розробці.

Читати далі →

Перестаньте неправильно використовувати випадаючі списки

Форми складаються з самих різних елементів інтерфейсу. Якщо ви не знаєте, як правильно з ними поводитися, ви можете сильно ускладнити заповнення форм. Найчастіше помиляються, застосовуючи випадаючі списки (select menu).

Коли використовувати

Іноді можна зустріти випадаючі списки з 2 варіантами, іноді — з більш ніж 20. В обох випадках це неправильно. Якщо у користувача є менш 5 варіантів вибору, слід використовувати радіокнопки. Так вибір буде простіше і швидше, тому що користувачеві потрібно лише глянути на варіанти і один раз клікнути. З випадним списком йому потрібно натиснути на нього, знайти відповідний варіант і клікнути знову. Також інші варіанти не видно, поки ви не натиснете на випадаючий список. Якщо їх менше 5, краще наочно показати їх у формі у вигляді радіокнопок — користувачі зможуть швидко їх переглянути.

Читати далі →