16.03.2016Как я встраивал reCAPTCHA v2 в свой антикварный бложек
Предпосылки
Мы живём в интересное время. Когда я увлекался довольно серьёзно руби он рэйлз, лет шесть-семь назад, была версия руби 1.8.7 и версия рельсов 2.3. Все неспешно переходили на руби 1.9.1 и рэйлз 3.0. Сегодня, пять лет спустя, стабильная версия руби — 2.2.3, а про рельсы уже агитируют переходить на 5.0, хоть и бета. Когда же я начал свой первый проект на ноде — три года назад, — версия node.js была что-то типа 0.22. А сегодня уже 5.8!
А недавно имел разговор с читателем на тему того, что стремительно возросшая популярность джаваскрипта создаёт ситуацию, при которой, уходя в отпуск, программисты рискуют вернуться с устаревшими навыками, потому что за две недели появились три новых прекрасный фреймворка, а два не менее прекрасных — умерли.
Антиквариат
До последнего перерыва, рассказ о начинке моего блога мог бы легко заполнить парочку в меру интересных статей, а сейчас это представляет интерес только для археологов. Что касается движков для блога вообще, то про когда-то популярный ЖЖ все уже забыли. Стремительно набирает моду вести канал в Телеграме. А товарищ мой — Илья — в когда-то давно в качестве платформы для блога сделал самый правильный, как мне сегодня кажется, выбор — генератор статического сайта.
Что ещё? Технология оупенайди, на которой у меня были прикручены комментарии, умерла. Рекапча, которую я прикручивал в комментарии Ире, была куплена Гуглом и ещё пока жива, но уже выпустили вторую версию, и я боюсь, как бы они таки не закрыли первую, как Гугл это умеет делать. Но даже тогда джем, который я использовал, чтобы встроить капчу, волшебным образом исчез из библиотек, и мне пришлось таскать его с собой в папочке vendor. Про вёрстку я даже не говорю.
В общем, для того, чтобы взять и переписать проект с нуля, много ума не нужно. Но сегодня мне интересно покопаться в старье и посмотреть, что ещё из него можно выжать. Поэтому, если вы любите свои старые поделки так, как люблю их я, то очень важно овладеть навыком написания обезьяньих заплаток (monkey patch).
reCAPTCHA v2
Когда я решил использовать новую капчу, я даже не стал искать библиотек. С вероятностью 80% они не заработают на моей старинной системе, и с вероятностью 30% перестанут поддерживаться очень скоро. Просто читаем документацию, встраиваем капчу в форму отправки комментария, а на сервере прямо в методе создания комментария пишем, например:
url = URI.parse('https://www.google.com/recaptcha/api/siteverify')
req = Net::HTTP::Post.new(url.path)
req.set_form_data 'secret' => 'SECRET_KEY',
'response' => params['g-recaptcha-response'],
'remoteip' => request.remote_ip
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
res = JSON.parse(https.start { |p| p.request req }.body)
if res['success'] ...
И далее с ответом можно делать всё, что угодно. В тонкости уже не вдаюсь, потому что, как может увидеть дорогой читатель, даже хэши у меня написаны с ракетами, а не по-современному с двоеточиями.
Да, это противоречит паттерну MVC, да, это противоречит ООП. Но посмотрите на саму капчу: она не учитывает положения формы на странице, когда открывает своё окно. А также не работает задокументированная фича data-tabindex. Полно хороших библиотек и поделок увядают так и не исправив своих ошибок. Такова реальность программиста сегодня. Красивая библиотека для встраивания в проект на рельсах не сделает эту капчу лучше, но исправлять описанные выше ошибки можно тоже обезьяньими заплатками.
В общем, есть, конечно, определённый кайф в том, чтобы сделать всё максимально по науке и близко к идеалу, но не менее приятно пользоваться смекалкой и собрать что-нибудь из грязи и палок. Безусловно, есть ещё и очень приятное чувство освобождения в том, чтобы разрешить себе делать что-то не идеально.
01.03.2016Февраль
Когда я ещё планировал писать итоги года 2015, хотел написать, что впервые в жизни смог контролировать свой вес. Всю жизнь я думал, что в моём случае конституция просто не позволяет ничего сделать. Однако только с помощью изменений в питании мне удалось набрать за год более 15 килограмм. При этом во время перерывов на хирургию, а следовательно без нагрузок, вес можно было держать стабильным. Всё решается просто питанием. При этом, конечно, к тридцати пяти годам понятно, что какие бы в интернете ни писали истории про сумасшедших старичков в коротких спортивных красных шортах, у каждого тела есть свои пределы в силе, скорости и выносливости.
♯♯♯
Открыл для себя уже не новую игру про дополненную реальность — «Ингресс». Игра заключается в том, чтобы мотаться по городу и не только по городу, но и куда подальше, захватывать порталы и сообща создавать поля. Две фракции, которые отличаются только легендой и цветом, но с точки зрения игровой механики делают одно и то же. Если хотите, могу прислать вам инвайт — мне за это беджик дадут, если вы дорастёте до второго-третьего уровня :) Только чур за зелёных играть! Для меня это примечательно по двум причинам. Во-первых, я никогда не любил такие игры, где нельзя всё сделать идеально и навсегда. Всё, что я делаю в этой игре, могут поломать, испортить и всему помешать. Это совершенно невыносимо, но и притягательно оказалось. Во-вторых, возможности игры в одиночку достаточно ограничены. Для всего интересного нужна команда. Например, чтобы натянуть такое вот поле в 29 слоёв, хоть и всего на несколько часов (об этом мне только мечтать и мечтать ещё):
Но вообще, лучше как минимум втроём, а лучше ввосьмером что-то делать. И поскольку игре уже более трёх лет, то возникает такой эффект, как у Кортасара в «Модели для сборки», что люди живут в городе, в который мне постороннему нет входа. В общем два таких эмоциональных барьера оказались преодолены. Ура!
♯♯♯
В феврале возобновил ведение своего программерского бложека. Постараюсь выдерживать ритм по одной статье в две недели. В статьях всегда обращаюсь к читателю на ты, представляя, что меня читает один человек. И тут в районном чатике по «Ингрессу» этот самый читатель обнаружился. Он узнал меня по нику и рассказал, что упарывался по моим статьям пять и более лет назад (когда я их писал). Я был, конечно, очень радостный от такого поворота событий!
♯♯♯
Получил, наконец-то, нормальную вводную в «Дизайн человека» (Human Design). Мне раньше система казалась чрезмерно навороченной. Но сейчас всё так совпало, что стало прикольно. Вообще, я открыт к любым наукам и моделям о человеке. Есть множество систем разного качества, возраста и объёма подкрепляющих эмпирических наблюдений. Мне было бы вполне нормально думать про, например, свою крапивницу-аллергию, как про «нестабильный ветер», если бы при условии, что когда я делаю упражнения и ем еду, которые стабилизируют «ветер», мои симптомы успокаиваются или проходят совсем. Или список болезней и вызывающих их «грехов» был бы тоже прикольным, если бы работала обратная связь хотя бы в каком-то объёме. С интересом всё пробую на себе. Пока, например, в медицинском отношении на первом месте, конечно, хирургия, на втором — таблетки, а на третьем — питание. А в «Дизайне человека» на текущий момент зацепила именно позиция про приятие и изучение себя, какой есть. Это может быть система описания человека, которая опережает своё время, как периодическая система Менделеева, а может оказаться полной туфтой, вызванной естественным желанием восприятия увязывать в причины и следствия и связывать между собой всё, что попало. А считаю я так, возможно, потому что я по профилю 5/1 :)
01.02.2016Январь 2016
Итоги года я пропустил, потому что в аккурат под Новый год слёг с вирусом, температурой, ватной головой и невозможностью не только писать и читать что-либо, но даже смотреть сериалы. Организм управился за 5 дней. Итоги года, однако, подводить оказалось сложно. Потому что не смотря на наполненный событиями год, за январь сформировалось ощущение, что весь предыдущий год был как бы в анабиозе. Я занялся файтом и просто спортом. А также начал лечить застарелые проблемы со здоровьем: сожрал неимоверное количество всякого рода таблеток, сдал неимоверное количество анализов, посетил три НИИ с медицинскими специальностями в названии и два раза лежал на операционном столе. Окончательно растерял почти все социальные связи и собеседников для умного разговора. Окончательно отказался от алкоголя. Но в целом год был про жизнь тела, а голова моя как будто спала.
♯♯♯
Чтобы как-то вернуть нормальные функции головы, я решил затеять графоманский проект и подводить итоги каждого месяца (или просто писать, что было интересного). Год обещает быть богатым на события и изменения. Надеюсь, не обманет. Хотя и ссу, конечно, тоже. В связи с чем возобновил ещё и рукописный дневник и подумываю возобновить программерский бложек. Удачи мне!
♯♯♯
Безусловное приобретение месяца — совершенно волшебный инстаграм актрисы мастерской Петра Фоменко Ирины Горбачёвой. Не могу оторваться. Придётся идти в театр теперь.
♯♯♯
Думаю теперь, стоит ли восстанавливать старые контакты, или лучше новые заводить? Заметил, что понятия о добре, зле, правде и нравственности у всех людей со временем не только размываются, но и немного дрейфуют в стороны. Прямо заметно, как иногда наступает рассинхрон с человеком, про которого думал, что мы на одной волне.
♯♯♯
Сделал коуб (Простите за повтор, что видел). Прикольно, что раньше для меня эта песня была про прорыв. Важно только что на той стороне. А тут в ленте в фсбуке запостили эту гифку, а в комментариях эту песню (это не я додумался их совместить), и стало понятно, что переход — это тоже суперважный процесс. И в песне только про начало перехода. А на ту сторону ещё нужно дойти. Если.
♯♯♯
Вроде всё. Такие дела.
26.09.2015Люби себя, сука!
Восьмой месяц занимаюсь в клубе «Другой бой». То, что мне обещали ребята, что меняется тело — полностью верно. Совершенно по-другому себя чувствую. Кроме того, для личных спортивных целей мне впервые удалось осознанно набрать массу, чего не получалось у меня никогда за мои 35 лет. Наел, конечно, в добавок себе бока. Мне кажется, никто в мире не строг так со мной и не презирает меня за малейшее несовершенство, как я сам. Самое главное пока испытание я прошёл: купил себе рашгард и не прекратил тренировку. У нас статистика такая, что 50% перестают ходить сразу после покупки рашгарда.
♯♯♯
В обществе незнакомых людей, особенно если это прекрасные девушки, чувствую себя как железный дровосек. Раньше для подвижности суставов дровосека я использовал алкоголь. Но потом попадал в совершенно ядовитый стыд, даже если ничего ТАКОГО не делал. Потому что никто в мире не строг так со мной и не презирает меня за малейшее несовершенство, как я сам. Но алкоголь сошёл на нет по ряду причин за последние два года. Потому дровосек пребывал в некотором оцепенении. Надеюсь, что это могло прокатить за некоторую загадочность. Я, конечно, могу рассказать девушке, как именно она умрёт, если в комнате появится чёрная дыра размером с монету (или массой с монету — совсем другое дело). Или я даже знаю несколько фраз для подката на английском типа такого: Hey, girl! Are you my appendix? Because I don't understand what you do, but I have this weird feeling in my stomach that makes me want to take you out. Но поскольку никто в мире не строг так со мной и не презирает меня за малейшее несовершенство, как я сам, всё это отметено как несоответствующее ситуации и слишком задротское. Стоял молчаливый и таинственный.
♯♯♯
Сегодня после функциональной тренировки на почве бокса в парилке разговорился с мужчиной. Он занимался боксом 3 года и профессионально музыкой. Потом сломал руку, бокс бросил, а музыку — нет. Красной линией через весь разговор проходило то, что жёны и девушки заставляют мужчин лезть из кожи вон в спорте (но не его). Что Спиваков (кстати, второразрядник по боксу) ходит в качалочку в 70 лет, потому что из него жена верёвки вьёт (но у собеседника не такая). Что марафон и Айрон мэн парни бегают, потому что в кругу их девушек некруто, если у тебя парень не бежал Айрон мэн (но не у его девушки). А сам он к тому моменту провёл в зале уже 3 часа (час бассейн, час бег, час качалочка). ТРИ, Карл! А я всё это слушал и думал, что даже если ты и проецируешь это на близких (приписываешь им это), то всё равно не самом деле никто в мире не строг так с тобой и не презирает тебя за малейшее несовершенство, как ты сам.
18.03.2015Тело
В школе для меня физкультура была постоянным источником стыда и унижения. Короткие дистанции я бегал медленнее всех, подтягиваться и отжиматься на брусьях никогда не умел ни разу. Поскольку я много болел, то у меня появилась справка, которая позволяла мне тусить на физкультуре, но отказываться от того, что мне казалось чрезмерно сложным. Называется «подготовительная группа». Кроссы я бегал, в футбол играл, а от унижения быть худшим отказывался. Хотя по телосложению всё понятно. У меня даже выработалась привычка оправдываться за свою худобу. Которая до сих пор включается иногда так, что я не успеваю соскочить.
Я ни разу не видел человека, который бы «до» выглядел как я, а «после» на него было бы приятно смотреть и не передёргивало, как когда видишь силиконовые губы или опухоль на лице. Однако над собой я провёл ряд экспериментов со спортом и питанием. Каждый раз моё тело воспринимало это как насилие и как-нибудь серьёзно взбрыкивало, чтобы я был вынужден прекратить. Услышал множество историй о том, как просто набрать массу от людей, которые уже в утробе матери занимались атлетикой (я так же могу рассказать, как легко выучить два иностранных языка или бросить любую привычку не напрягая волю чрезмерно). Каждому своё — постоянно бубню я себе.
Начать налаживать контакт с телом мне очень помог пилатес. Два года я учился неспешно без насилия заниматься спортом. И со временем мне захотелось исследовать более подвижные и динамические нагрузки, определить свои реальные границы и поиграться с ними. Добавить больше потока. И более мужского спорта, конечно, захотелось. Многие из знакомых мне мужчин с тонкой душевной организацией (not gay!), но не таким хрупким телосложением, отзывались уважительно о клубе «Другой бой». В этом году дозрел и я. В отличие от того опыта единоборств, что я имел сам и видел, когда исследовал тему, в этом клубе всё просто отлично с состоянием ума во время тренировки. Это важно!
Очень много времени я провёл за исследованием своей психики. И сейчас в плане личного развития, мне кажется, что наступил некоторый предел того, что для меня можно решить размышлениями и разговорами. Овладение своим телом и исследование собственных границ — такая моя терапия в ближайшее время. И всего того, что сейчас хочется: мужественности, динамики, потоковости, скорости, силы, игры — на занятиях прямо в достатке! И хоть я тут обратно самый хиленький, но уже без справки, мне — очень нравится!
Это я всё к тому, что сегодня, в среду вечером в центре Москвы пройдёт открытый урок. Милости прошу, кому интересно. Форма для записи справа.
23.01.2015Гадание на встречных
Раньше я любил задавшись сложным вопросом открыть книгу на случайной странице и читать ответ. Но всё это меркнет по сравнению с гаданием на встречных. Вопроса в этом случае даже не нужно. Обычно это случается в метро. Попрошайки не подходят на роль таких встречных, потому что искусство историй, почему нужны деньги, в Москве довольно сильно развито. Из него исчезла наивность и непосредственность. Можно услышать всё, начиная от билетов на поезд и заканчивая деньгами на презерватив. Интерес тут, скорее, фольклорный. Гораздо интереснее материально незаинтересованные носители ворот в иные миры. Как правило, это люди подвыпившие, — такова специфика местности. Я узнаю их по желанию — моему и всех окружающих — от них отмахнуться, потому что они пристали со своей какой-то ерундой. Тут нужно сделать следующее: внимательно на человека посмотреть и услышать, что он говорит. Услышав, ответить коротко и по делу, не вовлекаясь в спор, но и не отмахиваясь. Если он продолжает говорить, повторить вышеописанное несколько раз: выслушав внимательно, ответить коротко и по делу. Обычно после третьего раза следует такая значительная пауза: то, что он хотел сказать, чего казалось много, пока от него отмахивались, кончилось. Вот тут-то, дорогой читатель, не зевай: сейчас будет удар мудрости, знак, разгадка. Один молодой человек, расспросив меня про велосипед, когда кончились вопросы, вдруг попросил у меня номер телефона, чтобы вместе кататься потом. Второй уже менее молодой человек сказал: «Люди должны жить 40-45 лет, больше не нужно». А афганец на алюминиевой ноге сообщил: «Знаешь, каким проклятьем наградил меня Бог? Не иметь права на ошибку! Ух, я ему уебану!» — и погрозил кулаком в небо.
28.12.20142014
Довольно заметную роль в году сыграл совершенно бешеный съёмочный сезон. Съёмки начались 22 мая, а закончились аж 19 декабря. Мы обновили наше оборудование и ПО. Сняли 1,2 миллиона панорам. И будем это всё обрабатывать до весны. Результатами своей работы во всём этом я удовлетворён.
♯♯♯
Основной темой года было выражение: «Выше задницы не прыгнешь». Во всём, чем я занимался в этом году и с чем соприкасался, во всех областях — я сталкивался с ограничениями, которые невозможно преодолеть. В работе, личных планах, здоровье, отношениях с близкими и далёкими всегда находился такой момент, когда приложение усилий ничего не давало. Что-то никогда нельзя изменить. Чего-то никогда нельзя избежать. Можно бесконечно прилагать усилия, а результата не будет.
Это интересный опыт. Умение обходиться с такими вещами существенно добавляет мудрости и зрелости. По крайней мере я себя стал ощущать более зрелым. Хотя и не могу сказать, что я легко умею с таким теперь обходиться.
♯♯♯
Жену отправил к тёще и планирую встречать Новый год за работой.
♯♯♯
Разгрёб большое количество старых висяков, и теперь у меня в почте пустая папка «входящие». Впервые за несколько лет. Так что, если вдруг я вам что-то должен или обещал, то сейчас самое время напомнить мне об этом.
07.11.2014За работу
Пользуясь случаем, хотел похвастаться вот этим проектом. В нём заключается ещё и знаковый момент, очень для меня важный. Если вы приблизите на максимальный зум панорамы, то увидите, что в этом году мы неприлично увеличили разрешение. До 100 (ста) мегапикселей. Это совпало с тем, что в этом сезоне я в очередной (третий) раз сменил интерфейс съёмочной программы. В итоге довольно существенно мы форсировали инновации в наш процесс.
Ещё больше инноваций добавилось, когда Артём поехал снимать КБЖД (Артём и установка на одной панораме). И после того, как вернулся, он сказал мне: «Я привык, что обычно у нас я отвечаю за то, чтобы ввязываться, когда всё сырое и неизвестное, а у тебя обычно за зиму добавляется одна кнопочка, но тут ты, похоже, меня переплюнул». Мне было очень приятно :) А Артём, похоже, воспринял это как вызов и ввязался во столько всего, что сезон у нас никак не заканчивается.
17.08.2014Жизнь в цифре
Форсквер окончательно разделился на два приложения, выкинув чекины в сворм. А так же отменил мои любимые бейджи. А ведь всё было ради них! Раньше мы в поездках им пользовались, потому что если нам нравится форсквер, то и места, которые нравятся его любителям, нам могут тоже понравиться. Так часто бывало. А теперь он будет подсказывать места, которые нравятся тем, кто пользуется свормом... Чувствую себя ужасным старпёром.
♯♯♯
Илья поделился совершенно прекрасной историей. Перескажу для обычных людей :) По ссылке — отчёт об ошибке. Чувак жалуется, что у него после обновлений не печатает принтер из ОпенОфиса. Другой подтверждает. Потом после другого обновления — печатает. Потом опять не печатает. Постит всякие логи, версии, короче, необходимые данные, чтобы те, кто разрабатывают ПО могли исправить. Никто не понимает, в чём дело, пока жена (!) этого чувака не жалуется ему на то, что принтер не печатает ПО ВТОРНИКАМ! Комментарий 28. И после этого он выясняет, что оказывается в середине процесса вывода на печать есть утилитка «file», которая определяет тип файла, и если она видит в определённом месте «Tue», то считает, что это программа на эрланге. Понимаете? Ни один программист не предположит, что проблема в дне недели! Услышав такое предположение — найти, подтвердить и исправить просто. Но вот предположить — только жена!
27.04.2014Письменно
Подобно тому, как ноль с опозданием проникал в цифры и числа, в письменность с задержкой проникал пробел. Сложность письма, мне кажется, от добавления пробелов существенно не увеличивается и не уменьшается, а вот чтение без пробелов — это не для слабаков. Поэтому все правила слитного и раздельного написания во время письма кажутся мне надуманными, потому что преследуют цели, связанные с чтением. Не понятно, например, почему в русском нельзя, как в немецком, спрессовать в одно существительное больше двух корней, если не считать самосвалосвал и змееедоеда. Особенно заметна эта надуманность в близких языках. Например, в чешском «не» с глаголами пишется слитно. Только представьте! Есть слово «входить» и слово «невходить». «Вставать» и «невставать». Разные слова. А вот возвратное «ся» в чешском так и осталось отдельным словом, как во множестве неславянских языков. Это всё я думал, едучи в Пражском метро, глядя на надпись «neopírejte se o dveře».
♯♯♯
Уже десять дней как завёл себе очередной рукописный дневник. Пишу в него каждый день. От этого очень приятно становится в голове. Совершенно очевидно, что мысль подуманная, мысль сказанная и мысль записанная — это три большие разницы. Это заметно было ещё когда я в прошлом году перечитывал свой рукописный дневник 2006-2012. Всё, что я считал очень важным, что меня очень беспокоило, но что я не записал подробно, сейчас я не могу вспомнить. Вижу упоминание о каких-то размышлениях, но совершенно не помню, что за размышления были такие важные тогда? А так же сон после просмотра какого-нибудь видео и после получаса письма — это два разных сна.