Как научится программировать

June 20, 2017

Меня иногда люди спрашивают как научится программировать. Вообще я не знаю, но если мы говорим про веб, то по-моему нужно начинать с Рейлс. Мне кажется если прочитать Agile Web Development with Rails и guides.rubyonrails.com, а это пару месяцев, то можно выходить уже на первую работу.

Рейлс даёт хорошее предложение представление от архитектуре веб приложения целиком. Конечно вот это выглядит проще:

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

и вот это:

require 'sinatra'

get '/frank-says' do
  'Put this in your pipe & smoke it!'
end

и это (хм, хотя это ничего не делает полезного):

package main

import "fmt"

func main() {
    fmt.Println("Hello, 世界")
}

однако на рейлс можно делать настоящие приложения (Depot Application, м-м-м), а вот сделать что-то интересное на ноде, синатре или го нужны гораздо более мощные скилы.

Ямл-переменные

June 19, 2017

Я обращал внимание на & и * в database.yml нового рейлс-приложения, но никогда не задумывался, что это можно использовать в произвольных yml-файлах. Например, если есть какой-нибудь пайплайн и хочется DRY в конфиге, то можно сделать так:

vars:
  env: &env
    SOME: 1
    ANOTHER: "foo"

pipeline:
  step1:
    cmd: "echo 1"
    env: *env

  step2:
    cmd: "echo 2"
    env: *env

В руби по крайней мере это работает, но насколько я понимаю, это часть синтаксиса.

irb> YAML.load(File.read("demo.yml"))
# {"vars"=>{"env"=>{"SOME"=>1, "ANOTHER"=>"foo"}},
# "pipeline"=>{
# "step1"=>{"cmd"=>"echo 1", "env"=>{"SOME"=>1, "ANOTHER"=>"foo"}},
# "step2"=>{"cmd"=>"echo 2", "env"=>{"SOME"=>1, "ANOTHER"=>"foo"}}}}

Фокусировка

June 16, 2017

Раньше у меня был большой список мелких задач, которые нужно сделать в свободное время. Кнопку там подвинуть, оптимизировать страницу и тд. И я действительно эти задачи делал. Иногда.

Сейчас у меня другой принцип - не делать несущественные задачи, вообще. Если нет откровенной грязи (а откуда ей взяться когда 15 лет за клавиатурой?), то тормозящие страницы, некрасивые интерфейсы чаще всего симптомы какой-то более серьезной, системной проблемы. И скорее всего нужно сконцентрироваться на ней.

Страница тормозит чаще всего, что в начале данных было мало, а сейчас много. И возможно нужно не кеш ставить (чур-чур), а подумать как подтюнить систему целиком под новые реалии. К тому же база для экспериментов в этот момент уже хорошая.

Trello API

June 15, 2017

У нас есть небольшая рейлс-приблуда для планирования спринтов, я ее решил интегрировать с трелло. Это первая интеграция в жизни, которую можно осуществить за 10 минут.

Client.js возвращает в браузер список карточек без всякого серверного кода. Мне нужен был только автокомплетишн названий карточек, с помощью jquery-ui autocomplete это делается элементарно. Любопытный подход у трелло.

js.erb

June 14, 2017

В одном внутреннем интерфейсе мне нужно было сделать а-ля crud без перезагрузки страницы. Конечно сегодня такие вещи положено делать на реакте и прочей js-радости, но я вспомнил про старичка js.erb.

Честно скажу, к рендеренигу кусков js на сервере я отношусь с презрением с тех пор как услышал термин unobtrusive javascript. Однако нафигачить небольшой интерфейс оказалось настолько быстро и приятно, что вы ещё будете настраивать вебпакер, даже если это 5.1, а я уже буду допивать свою первую пинту пенного.

Злоупотреблять этим не стоит (ни js.erb, ни пенным), но если нужно построить на рейлс почти spa для пары важных страниц - очень удобно.

Перейдите на другую сторону улицы

June 13, 2017

5 лет назад мне достался в наследство свежий, только начатый рейлс проект, который использовал sqlite в продакшене (и запущен был он в development-режиме, так как ребята не справились с компиляцией ассетов, и в качестве уникального ключа для событий использовался текущий таймпстемп в секундах, а-а-а-а). Под впечатлением я написал в Твиттер, что людей, которые используют sqlite в продакшене нужно лишать права голоса.

Шли годы, я поменял своё мнение, голосовать им можно, но встретив таких людей на улице, стоит перейти на другую стороны дороги.

Это все конечно шутки, но такие откровенно паталогические решения мне даже неинтересно обсуждать. Они возникли не из-за глупости или глубоких идей, а из-за непрофессионализма. Это скучно.

Кадры решают все

June 9, 2017

В фильме про Гугл конечно все чистейшая правда кроме одной вещи, саппорт у Гугл самый омерзительный среди всех IT-компаний, которые я когда либо встречал. Дорваться до живого человека - искусство, дорваться до живого человека, который решит проблему - неведомое искусство.

Информационное поле

June 8, 2017

Я иногда думаю насколько изменилось сильно информационное поле. Я обычно не читаю новости и Фейсбук, но все равно в голову проникло, какой был сильный ураган, МЧС облажалось или наоборот молодцы, не понял, происки правительства и бла-бла.

Вспоминая времена до интернета, мне кажется, люди знали что ураганы бывают только в штате Канзас, да и то они бывают, только чтобы раздавить злую Бастинду и обеспечить приключениями Элли и Тотошку. А то что было в Москве - это просто сильный ветер. И в разговорах на кухне ему бы уделили одно предложение: "не фига себе какой сильный ветер". Если бы этот ветер свалил теплицу или дерево, ему бы уделили чуть более эмоциональное предложение: "охренеть какой сильный ветер". Но в принципе также бы этим ограничились.

Сегодня же современный человек должен знать слишком много левой фигни. И про ураганы, про ливневые канализации, права меньшинств, выборы какие-то нескончаемые, вред и пользу глютена (wtf это вообще? :)) и так далее, и тому подобное. По возможности стараюсь фильтровать, фильтровать, фильтровать. И думать про профессию.

Обновления

June 7, 2017

Некоторые люди говорят, что они любят обновления, сразу же ставят, изучают новые фичи. Помню какая была движуха была во время новой флетовой iOS, люди ставили какие-то глючные беты. А я не люблю обновления. У меня уже устоявшиеся рабочие привычки и ждать когда это все загрузится - раздражает.

На днях, на работе, дал слабину и согласился на какое-то обновление, которое 20 минут ставилось. И вот сейчас такая же фигня с домашним компом, пишу пост с телефона :-/. Тим Кук, остановись!

Докер - это Кольт мира разработки

June 6, 2017

Как пару веков назад полковник Кольт уравнял права людей, так и докер сегодня уравнял права языков. В вебе становится совершенно не важно какая технология обработала этот запрос, главное чтобы за приемлеемое время и более менее правильно. Очевидно, что через 5 лет все, что будет поставляться не в контейнере будет как сегодня "PHP через FTP", что-то изчезающе архаичное.

И еще, маленькая изюминка, что докер легализовал любой веб-опыт. Я вложился 10 лет в Руби и в Рейлс, на самом деле достаточно сектанские технологии и какие-нибудь парни из телекомов и прочего традиционного IT криво ухмылялись (они кстати до сих пор чуть ухмыляются, но уже далеко не так криво). И изучив одну технологию глубоко я сегодя ничего не потерял, не изучив никакую другую серверную технологию. А запрос я как-нибудь из контейнера и на руби обработаю.