Ruby and Smalltalk

24/05/2020

Ruby has so much inspiration from the Smalltalk!

Here are my findings:

My recent tasks

03/03/2020

and much more.

Applescript instantly open Zoom link from the iCal calendar

26/02/2020

This is really my little timesaver because you know, a lot of meetings happen when you work remotely.
Works best with Alfred 4 using mapped hotkey.

tell application "Calendar"
	tell calendar "maksym.prokopov@trilogy.com"
		set itemLocation to location of first event where its start date ≤ (current date) + 10 * minutes and end date ≥ (current date)
		if itemLocation contains "zoom.us" then tell application "Finder" to open location itemLocation
	end tell
end tell

Два древних языка, которые нужно изучить программисту

08/01/2019

Почему нужно проинвестировать время в изучение двух древних языков Lisp и SmallTalk?

Я уверен, что это сделает вас на шаг ближе к стадиям развития специалист и эксперт.

Nikita Prokopov сделал отличный talk о стадиях компетентности программиста. Идея в том, что каждый программист на своем пути развития проходит пять стадий развития:

Никита ближе к концу доклада на примере собственного опыта сравнивает два языка: Java и Clojure и выдвигает предположение о том, что Java хорош для новичков, а Clojure это глоток свежего воздуха для уставших опытных программистов.

Интересно отзывается о Java создатель SmallTalk, легендарный Alan Kay, – «Java монополизировала термин Объектно-Ориентированный и совершенно зря«.

Идеи заложенные SmallTalk сильно опередили свое время, а своевременность это решаюший фактор для успеха. Вы только подумайте, в конце 70х SmallTalk изобрел концепции:

Идеи SmallTalk были адаптированы в последствии в Java, Ruby, Objective C и массе других более коммерчески успешных языков программирования, но все они отличаются.

Трагедия SmallTalk – это маркетинговый провал, целая индустрия могла пойти другим направлением и быть лучше, чем сейчас.

 

Я уверен, что по-настоящему выдающиеся языки содержат правильные фундаментальные концепции, минимум синтаксиса и максимум гибкости и эффективности. Такими языками несомненно являются Lisp и SmallTalk.

Вещи в веб-деве, которые меня действительно впечатлили

16/01/2018

Lightmod и Nightcode редактор с подсветкой синтаксиса, где Clojure и ClojureScript работают из коробки и есть несколько хороших примеров кода прямо в той же коробке.

Удивительно, какие вещи может сделать один человек. Проекты также содержат интерактивный REPL прямо на странице ClojureScriptа. Впрочем, это лучше показать.

ClojureScript REPL right in your Google Chrome Dirac. Лучше всего за себя скажет сам скриншот Dirac. Отличная поддержка ClojureScript прямо в вашем браузере!

В этом же контексте имеет смысл посмотреть на paren-soup онлайн редактор для Clojurescript.

AnyBar for boot

Приятное уведомление небольшой иконкой в тулбаре, все ли тесты прошли ок или не все.

 

Про Boot. Сейчас у нас помимо Leininghen у нас есть и Clojure CLI tools и Boot. Так как я сам из мира Ruby on Rails, то Boot это что-то, что совмещает в себе rake, rails, capistrano, rspec и guard  в одном флаконе, если вы понимаете, о чем я.

 

На текущий момент tooling для Clojure/ClojureScript становится настолько простым и мощным, что даже не знаю, с чем это можно сравнить. Я очень рад жить в такое интересное время.

И, наконец, Vase. Быстрый способ разработать на удобном и расширяемом DSL различные микросервисы с JSON. Драматически ускоряет разработку.

Про редакторы и IDE

10/01/2018

Я люблю время от времени тыкать палочкой в различные редакторы и пробовать их в своей работе.

Сейчас появилось очень много интересных и быстрых штук типа Sublime, Atom, LightTable. Ребята из Jetbrains создают отличные (но медленные и прожорливые) IDE типа WebStorm, RubyMine, PyCharm.

Также небезынтересно было посмотреть, что и как используют сейчас в качестве редактора другие программисты https://github.com/A/code-screenshots.

И, конечно, незабвенные Vim и Emacs. Уверен, что постигнуть нужно оба редактора. Первый, обязательно, за дружелюбность к пальцам, которая перерастает при помощи двигательной памяти в такую производительность управления текстом, которую очень непросто достигнуть конкурентам. И, кстати, именно поэтому практически все вышеперечисленные редакторы предлагают режим эмуляции Vim. Включая Emacs. И, кстати, о Emacs.

Постигнуть всю глубину глубин Emacs нужно (можно) только после того, как проходишь программистскую стадию изучения Lisp. Именно тогда начинаешь осознавать, почему вот уже 40 лет (!) этот комбайн бороздит просторы программистских компьютеров. Да потому что сделать интеграцию редактора с любыми современными инструментами, включая те, которые еще не разработали, очень легко. Например, что работает у меня сейчас в Emacs?

Управление Docker. Прямо не выходя из редактора можно управлять контейнерами, имиджами. Ссыль:https://github.com/Silex/docker.el

Интеграция с Redmine. При помощи хоткеев я очень быстро могу вставлять Issues в текст прямо из Redmine!
https://www.youtube.com/watch?v=Qhl3JRO7xp0
Ссыль: https://github.com/gongo/org-redmine

Интеграция с Trello. Хоткеем создавать/редактировать/удалять карточку в списках на доске. Управлять досками.
Ссыль: https://github.com/org-trello/org-trello

Работа в slack.
Ссыль: https://github.com/yuya373/emacs-slack

И вот поэтому каждому уважающему себя программисту в обязательном порядке нужно прочитать одну из самых читаемых статей на YCombinator про Lisp http://www.defmacro.org/ramblings/lisp.html и начать наслаждаться преимуществами IDE, которые заложены в редактор на уровне архитектуры.

Моноколесо Ninebot One S2: Ремонт прокола камеры своими руками

01/11/2017

Однажды ехал вечером домой и не заметил достаточно глубокую яму. После обследовал колесо: включается-выключается, крутится, но шина спущена. Взял в руки потерпевшего и понес 🙂 Насмотрелся видео с разбором колеса до хорошего доступа к шине, также посмотрел видео, где кто-то умудрился заклеить колесо не разбирая. Но у меня не настолько хороши навыки гинеколога, чтобы повторить подобную процедуру.

Что понадобилось мне для ремонта: шестигранники, маленький чтобы открутить небольшой винт снизу педали, побольше для раскрутки основных винтов, которые держат крышку и еще чуть больше, чтобы открутить педали. Хорошая крестовая отвертка. Плоская железка или кусок крепкого пластика, чтобы поддеть шину для разбортировки. Также потребуется велосипедный набор для ремонта камер, в него входит наждак для зачистки поверхности резины, резиновый клей и заплатки.

 

Для доступа к камере прийдется полностью снять:

 

Вся работа заняла около 1-1,5 часа, а в следующий раз, думаю уйдет на всю процедуру не более 30-40 минут.

 

Со снятой полностью крышкой.

Впечатления от внутренностей после разборки и сборки:

 

 

На этой фотографии видна моя заплатка на камере снизу.

Если вы решили сами повторить этот опыт, то посмотрите пока это видео, а в следующий раз я попробую записать свое.

Что почистить на вашем Mac?

28/07/2017

То, что раньше делал прекрасный Daisy Disk, сейчас вполне неплохо выполняет встроенная в Mac OS Sierra утилита.

Разработка фронтенда на веб катится не туда.

22/07/2017

«Спасибо скажем мы Аллаху,
за то, что он наполнил мир глупцами,
Иначе не увидели бы мы мудрецов»

Омар Хайям.

Потребовалось мне на днях запилить динамический веб на стеке React + Redux. Полез посмотреть, чем нынче пользуется уважаемая общественность. Оказывается, стандартно используют Javascript ES-2015, он же ES6. Чтобы запустить это счастье нужно, следите за руками: туго перевязанная упаковка с npm + nodejs, Webpack, Babel. npm доставит вам различные пакаджи, библиотеки типа react, redux, webpack нужен для динамической сборки и предкомпиляции приложения, babel позволит вам писать код на модных стандартах джаваскрипта не особо заботясь о совместимости с предыдущими браузерами.

Ну ок, хорошо, webpack позволяет динамически пересобирать модули с зависимостями при изменении кода и автоматически подгружает/перегружает код в браузере.

Теперь про боль.
Окунулся по локоть в Джаваскрипт. Синтаксис. Сахар. Синтаксический сахар. Больше сахара. Еще больше сахара. Ожирение.

Я вот сейчас даже статью с Хабра процитирую про новый синтаксис для вызова функций.

○ p1 => expr отлично подходит, если параметр один;
○ p1 => expr имеет неявный оператор return для выражения expr;
○ чтобы неявно вернуть объект, нужно обернуть его в круглые скобки () => ({ foo: ‘bar’ }), иначе получите ошибку;
○ круглые скобки необходимы, когда у вас 0, 2 или больше параметров () => expr or (p1, p2) => expr;
○ фигурные скобки в правой части представляют блок кода, в котором может содержаться несколько инструкций () => {};
○ при использовании такого синтаксиса неявного return нет, его нужно писать () => { return ‘foo’ }.

Что? Что это было?

После чего, конечно, начинают появляться статьи из серии «Почему я все еще использую слово function вместо модного синтаксиса». И это естественно, потому что еще после Perl люди поняли, что злоупотребление уличной магией в разработке до добра не доводит. Но, похоже, уже подросло новое поколение программистов, которым нужно заново пройтись по тем же граблям.

Или вот в описании Redux, говорят, в редьюсерах не используйте функции, изменяющие состояние, генерите новые значения. Иммутабельность делайте. Но все равно остается прекрасная возможность выстрелить себе в ногу.

Мой ответ такой: потому что Javascript идет не туда. Потому что асинхронность + мутабельный стейт = проблемы. Именно с этим пытается бороться React. Но React это библиотека, а не язык. Библиотека может только упрашивать и рекомендовать, но не заставлять.

Так получилось, что я довольно сильно два года назад погрузился в Clojure и ClojureScript. Вот про что мне сегодня хочется рассказать, так это про то приятное ощущение, когда понимаешь, что люди очень сильно думали, чтобы сделать правильно и красиво.

Все, о чем могли мечтать большевики, в Clojure/ClojureScript есть – структуры данных иммутабельные по-умолчанию, синтаксис языка НЕ ИЗМЕНЯЕТСЯ, просто потому что незачем это делать, есть прекрасный интероп с Java/Javascript, что открывает обширные возможности использования достояния человечества в виде maven, npm инфраструктуры, при чем активно поощряется использование библиотеки Google Closure, а это, я вам скажу, наверное более правильный путь сохранять совместимость со старыми браузерами, чем Babel. Плюс из коробки отличная минификация через вычисление и отрезание неиспользуемых участков кода при сборке большого js. Все вот эти modular-css пытаются решить проблему code as data и data as code, всунуть в JS возможность использовать CSS как код, при том, что для любого lisp, которым является также и Clojure это нативное свойство языка. Модульность и разделение кода на куски в Clojure вообще сделана гениально: namespace + имя сущности однозначно адресует нужную сущность. Про clojure.spec я вообще промолчу, недооцененная многими библиотека, которая решает фундаментальную проблему несовместимости зависимостей. Что такое правильный подход: основу языка оставлять по-максимуму без изменений, а новые фишки добавлять через библиотеки, так как это сделали, например, с core.async для добавления coroutines как в go. И правильно, если это будут использовать 2% пользователей, то зачем это догружать остальным 98%?

В общем, жаль, что коммьюнити не так активно делает маркетинг Clojure/ClojureScript и в целом порог для входа остается очень и очень высоким для среднего разработчика с одной стороны из-за недостаточного количества примеров, которые бы давали быстрый результат, а с другой стороны понимание функционального подхода требует определенных умственных усилий. Нужна новая кровь в такие проекты. Чтобы начать послушайте бесплатные онлайн курсы по Clojure. Может и понравится, %username%.

Музей Мерседес-Бенц в Штуттгарте

01/06/2017

Музей Мерседес-Бенц в Штутгарте произвел на меня неизгладимое впечатление. Легко можно потратить на его посещение целый день и даже этого будет мало. Пожалуй, начну с развенчания некоторых мифов.  У нас в сознании Мерседес-Бенц представляется одной торговой маркой, но дело в том, что Мерседес был только одной из марок автомобилей компании Даймлер, а компания Карла Бенца была основным конкурентом Даймлер вплоть до объединения в 1926г. Впрочем, все по порядку.

read more …