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

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 …

Как я запускал интернет-магазин. Часть 4. Переезд.

22/03/2017

В прошлом посте я рассказывал о косяках Opencart, сегодня хочу рассказать о том, как мы переехали на новый движок интернет-магазина Хорошоп.

Самое важное в интернет-магазине это, конечно, удобство для посетителя и дизайн. И здесь у Хорошоп все очень хорошо, поскольку вы не занимаетесь выбором «шкурки» и кастомизацией миллиона параметров как это происходит с Опенкартом, а получаете готовую работу с уникальным дизайном, который везде хорош и складен, в том числе и на мобильных платформах. Мы заказали дизайн «как у Truper» и с первой попытки получили результат, который ни разу не хотелось исправить! А это дорогого стоит.

Второе по важности качество, это удобство заказа и оплаты, возможность выполнить заказ «в один клик»™. И здесь Хорошоп был хорош, интеграция с всевозможными инструментами, такими как Liqpay для оплаты через Приват24, интеграция с API Новой Почты, которая позволяет делать экспресс-накладную (!) и интеграция с смс-сервисом. Все это очень и очень позитивно сказывается на воронке продаж и конверсии.

Третье, аналитика. Интеграция с Google Analytics и Yandex.Metrika работают просто отлично, с пошаговой конверсией, через dataLayer

 

 

Четвертое, управление товаром. Отлично продуманная навигация, удобный парсинг прайса из XLS, все это в сильно лучшую сторону отличает Хорошоп от Opencart. Гибкая фильтрация каталога, там где нужно удобное обновление информации без перезагрузки страницы. Например, установка новой цены на товар может выполняться прямо в таблице товара, как в екселе!

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

Подрезюмирую. По-моему желание сэкономить затраты на старте и пройти всю боль, отрицание и принятие настройки и интеграции модулей и тем оформления Opencart следует каждому начинающему интернет-предпринимателю. Иначе как он сможет сразу оценить все то, что изначально сделано правильно и хорошо и все то, на что НЕ ПОТРАТИТСЯ уйма времени и сил и будет работать сразу как надо из коробки в хорошем продукте, в таком как Хорошоп.

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

Отличные иллюстрации работы известных алгоритмов

15/02/2017

Приятные и понятные анимации иллюстрирующие работу алгоритмов Quicksort, Binary Search, BFS.

https://illustrated-algorithms.now.sh/

Вот я и стал коммитить в Clojure опенсорц

30/12/2016

Я уже как-то признавался в любви языку программирования Clojure, но все руки не доходили до чего-то более-менее серьезного. Всем интересующимся программистам рекомендую почитать Out of the tar pit про растущую сложность создания и поддержки современных программ, и как с этим бороться.

Разработка на Clojure не похожа на легкую прогулку. Сначала открываешь для себя концепции функционального программирования, начинаешь любить рекурсию, абсолютно под другим углом разворачиваешь мозг и только работая над реальным кодом начинаешь постигать все вот это вот дао функциональщины, принципы разделения и организации кода в неймспейсы, трудности дебага, прелести REPLа.

LightTable, конечно, редактор с характером, но, пожалуй, лучшее из того что есть на сегодняшний день для интерактивной разработки, почитайте и посмотрите видео у Никиты Прокопова про это. Да-да, не смотря на весь мой опыт с Vim, Emacs, Spacemacs.

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

И вот, работая над Clojure прототипом JSON API нашей админки я незаметно для себя стал контрибьютором в Open Source, чему, конечно, очень рад.

Вот моя первая clojure библиотека для работы с бизнес-временем при расчетах различных SLA. Значительно более элегантное функциональное и гибкое решение, нежели то, которое я запилил когда-то на Ruby. Тестирование в Clojure делается во много раз приятнее, чем рельсовым rspec. Гораздо меньше фрикций на подготовку тестового окружения, да и при желании написание тестов можно проводить прямо в редакторе в том же файле что и само код при интерактивной разработке! А затем переместить все тесты в отдельный выделенный для этого неймспейс.

Собственно вот линк на мою первую библиотеку https://github.com/mprokopov/business-time. Пришлось окунуться в недружелюбный мир Java и разобраться с могучей joda-time и почему у всех реализаций joda-time для clojure отсутствуют то тут то там обертки (wrappers) методов для объектов типа Duration и многого другого.

Также закоммитил pull-request в Korma для лечения JDBC MySQL timezone issues, про наличие которых вообще не подозревал, пока не стал разбираться с business time.
https://github.com/korma/Korma/pull/374. Вообще Korma это такой почти рельсовый ORM, который выглядит очень удобно для работы с SQL при помощи абстракций, так близких всем рельсовикам. Но что действительно хочется попробовать это мигрировать от MySQL/Postgres в сторону Datomic. Datomic выглядит той самой «серебрянной пулей» баз данных, которая обладает просто таки уникальными свойствами.

Для разработки JSON API есть подход от использования самого «ничего», то есть голого Compojure, так и более высокоуровневые Liberator и Pedestal, которые уже больше похожи на фреймворки, нежели библиотеки. Кстати, с Clojure очень хорошо доходит разница между библиотеками и фреймворками, но следует все же помнить, что с большей мощью приходит и большая ответственность.

Делать open source мир вокруг себя богаче легко и приятно, присоединяйтесь, друзья!

Дайджест находок вебмастера 2016-10-27

27/10/2016

Полезно иногда заглядывать в исходники интересных сайтов, вот некоторые из моих находок.

Такой же вебвизор как и в Яндекс Метрике. Бесплатный чуть более чем полностью. https://www.smartlook.com/

%d1%81%d0%ba%d1%80%d0%b8%d0%bd%d1%88%d0%be%d1%82-2016-10-27-13-31-42

Наблюдать за пользователями сайта realtime? Да еще и кликать за них мышью? Да, такое возможно.

https://peekin.io/ Сам сервис хоть и бесплатен, но в стадии alpha.

Stay tuned.