Алексей Добрый

Алексей Добрый

Поддержка сайта
документация

Поддержка сайта

Техническая и не только поддержка проекта от минимального уровня потребностей до комплекса услуг сопровождения.  Каждый проект обладает индивидуальными параметрами и  требует индивидуальных расчетов. Есть общие для всех проектов потребности - это обеспечение бесперебойной  работы серверов (хостинга), своевременная оплата и  мониторинг арендованных ресурсов проекта, оформление необходимых документов, привлечение и работа с
3 min read
iOS prevent scrolling on body
ios

iOS prevent scrolling on body

Обычно чтобы убрать прокрутку с body достаточно добавить правило body { overflow: hidden; } Это позволит например не прокручивать контент, находящийся под оверлеем. НО это не работает в iOS. Одно из быстрых решений добавить правило { postion: fixed; } body.lock-position { height: 100%; overflow: hidden; width: 100%; position: fixed; }
Docker registry
docker

Docker registry

Локальный реестр. Используем команду docker run -d \ -p 5000:5000 \ --restart=always \ --name registry \ registry:2 После запуска команды локальный docker реестр готов к использованию. Но это годится только для примера. Для производственной среды нужно защитить реестр с помощью TLS/SSL и конечно использовать механизм контроля доступа. Копирование образа в
2 min read
RXJS retryWhen with Promise
rxjs

RXJS retryWhen with Promise

retryWhen( receives: (errors: Observable) => Observable, the: scheduler ): Observable Задача: Повторить запрос к серверу, если запрос завершился с ошибкой. При повторении ошибки - пауза между запросами увеличивается, при достижении лимита повторов - запросы прекращаются.   retryWhen - повторить наблюдаемую последовательность при возникновении ошибки, используя настраиваемый критерий. import {timer, interval} from 'rxjs' import
1 min read
Цикличность и пафос
философия

Цикличность и пафос

Вечные ценности, на то они и вечные, чтобы быть актуальными всегда. А как же в разработке? В разработке всё зациклилось. Зациклилось в позитивном смысле. Теперь всё обновляется и изменятся постоянно. Это же прекрасно, становиться лучше и лучше. Это можно сравнить с эволюцией. Но оборотная сторона — слишком быстро устаревает то, что
1 min read
Персонализация в интернет
философия

Персонализация в интернет

Персонализация, однозначно, особенно в конкурентных областях, там, где интернет сегменты насыщенны информацией, ограничивает выбор по региону. И чем выше конкуренция, тем уже область разнообразия. Исторически так сложилось, что поисковая система пытается решать за нас, что нам нужно, определять, где лежит область наших интересов. В итоге, например Яндекс по некоторым поисковым
2 min read
Реактивное программирование - Потоки - BLoC
flutter

Реактивное программирование - Потоки - BLoC

Что такое потоки? Давайте представим трубу, обычную трубу с двумя концами, но только один из них позволяет что-то вставить в него. Когда мы вставляем что-то в этот конец, поток внутри трубы направляется наружу через другой конец. Во Flutter * трубы (pipe) называются Потоки (streams) * для управления потоками обычно используются StreamController * Для
3 min read
Rails, Webpacker: pug and sass loaders
rails

Rails, Webpacker: pug and sass loaders

Кто работает c  Pug, Slim, Sass никогда больше не возвратятся к "чистому" HTML,CSS коду по крайней мере по своей воле. Скорость кодирования высока, ошибок меньше. Rails 6.0.x, Webpacker 5.x (5.2) (2020-10) Не получается запустить "из коробки" связку Sass, Vue, Pug. Прошло уже много времени, но
3 min read
Rails 6.0 - webpacker hmr in docker
rails

Rails 6.0 - webpacker hmr in docker

Главное * для webpacker создаем отдельный docker сервис, но используем один образ * host - имя контейнера где работает webpacker, Rails будет работать (компилировать) с этим адресом * публичный хост - localhost, при HMR будет опрашивать localhost:3035 * разрешить политику подключения  policy.connect_src для HMR * указываем в настройках hmr: true и hot:
1 min read
Swap size Ubuntu 18.04
ubuntu

Swap size Ubuntu 18.04

Swap это пространство, используемое операционной системой для расширения оперативной памяти, при её нехватке. Если памяти не хватает, используется swap, если swap будет заполнен, то работа компьютера станет нестабильной или вообще невозможна. Вот пример изменения размера Swap сначала выключим все swap процессы sudo swapoff -a создадим файл размеров в 8Gb sudo
1 min read
Rails Redis Cache Store
rails

Rails Redis Cache Store

Начиная с Rails 5.2 можно использовать в качестве кеша Redis. Несколько разных типов кеша доступны в Rails:  MemCacheStore, FileStore и MemoryStore. Теперь начиная с версии 5.2 мы имеем встроенную поддержку Redis в качестве хранилища кеша. Как работает кеш в Rails можно почитать здесь. По умолчанию Rails использует кеширование
1 min read
Rails фоновые задачи с Sidekiq
rails

Rails фоновые задачи с Sidekiq

Допусти нам нужно по требованию выполнить импорт данных из CSV и отобразить результаты. При стандартном подходе в контроллере создадим метод  и выполним обработку файла. class HomeController < ApplicationController require 'csv' def upload csv_path = File.join Rails.root, 'db', 'data.csv' CSV.foreach(csv_pathm headers: true) do |item| Element.create(
1 min read
9  ChatBots platform (2018)
bot

9 ChatBots platform (2018)

Зачем нужны чат-боты бизнесу? ChatBot может помочь в развитии отношений с клиентами выполняя некоторые однообразные, можно сказать рутинные операции. Что именно? Чат-бот может легко и без ошибок отвечать на однообразные вопросы, собирать необходимую информацию, создать лиды и контакты в CRM. В чём плюсы * Доступность 24/7. Никогда не устает, всегда
1 min read
Rails TimeZone
rails

Rails TimeZone

Ruby предлагает два класса для управления временем: Time и DateTime. TZInfo является отдельной библиотекой часовых поясов, которая обеспечивает преобразования с учетом перехода на летнее время и включает в себя данные о 582 различных часовых поясах. Часовой пояс в Rails В Rails ActiveSupport::TimeZone является оберткой для TZInfo, предоставляющая набор из
2 min read
rails

OmniAuth Rails

OmniAuth - библиотека стандартизирующая аутентификацию через различных провайдеров  в веб-приложении. Библиотека создавалась чтобы быть мощной, гибкой и в тоже время "маленькой" насколько это возможно. Любой разработчик может создать стратегию для OmniAuth которая сможет аутентифицировать пользователей из разных несовместимых между собой систем (приложений). OmniAuth стратегии создаются для любых случаев от Facebook
2 min read
rails

Rails Request, Subdomain, Host

В Rails доступен request (ActionDispatch::Request) со всей необходимой информацией о запросе.  Основной базовый класс Rack::Request. Чтобы получить данные о различных параметрах  запроса используем встроенные методы и хелперы. Во первых мы можем получить полный базовый url - request.base_url. Получить имя хоста через request.host и имя поддомена,
rails

Rails Slim Markdown Tables

По умолчанию парсер таблиц отключен. И вместо таблиц будет обычная строка. Включить обработку разметки таблиц в связке Rails+Slim+Redcarpet можно через опции подключаемых движков. В данном случае Redcarpet для Markdown. Gemfile gem 'slim-rails' gem 'redcarpet' По умолчанию парсер таблиц отключен. config/initializers/slim.rb # Standard Slim options # Slim::Template.
Некоторые типы данных Rails
rails

Некоторые типы данных Rails

Широко распространенные типы данных в Rails. Гео-координаты и деньги. Гео-данные - координаты точки на карте. Деньги - стоимость товаров и услуг, прайс-лист, финансовые данные. Пример для PostgreSQL. Правильный тип данных имеет важное значение для работы и поддержки приложения.   Гео-данные rails g Location 'lng:decimal{10,6}' 'lat:decimal{10,
1 min read
Rails 5.2.2, Neo4J, Docker
rails

Rails 5.2.2, Neo4J, Docker

Пример настройки Rails 5.2.2 и Neo4J в экосистеме Docker/Docker Compose. Указаны файлы необходимы для начала работы в существующем Ruby on Rails проекте. Можно воспринимать как контрольный лист интеграции Rails с Neo4J. Gemfile gem 'neo4j', '~> 9.4.0' config/application.rb (or config/environments/{development|test|production}
1 min read
Rails - текущая страница?
rails

Rails - текущая страница?

Варианты определения текущей страницы в Rails. Абсолютно стандартная задача в любом веб-приложении. Есть разные варианты определения текущей страницы, по факту текущего URL. Чаще всего используется изменения стилей элементов навигации или подключения разных ресурсов на разные страницы сайта. Использовать params[:id] = link_to 'My', my_path, class: ['navbar-item', ('is-active' if params[
1 min read
Railties
rails

Railties

Rails::Railtie это основа Rails фреймворка, а также некоторые хуки для расширения Rails и/или модификации процесса инициализации. Каждый важный компонент Rails (Action Mailer, Action Record, Action Controller и др.) реализуют Railtie (являются под-классами). Каждый отвечает за свою собственную инициализацию. Это позволяет Rails не иметь каких-либо собственных хуков для компонентов,
1 min read

Certbot WildCard

Использование Wildcard сертификатов от  Let's Encrypt открывает большие   перспективы и экономит кучу денег, при разработке сервисов и приложений. При подтверждение домена проверяется `TXT` записи  домена. Непосредственно во время запроса сертификата, приложение выводит контрольные строки, которые мы должны добавить/обновить  в DNS. Запись вида: _acme-challenge 300 IN TXT "gfj9Xq...Rg85nM" Причем
с9

Amazon Cloud9 IDE --collab mode

Запускаем Amazon C9 Cloud IDE в многопользовательском режиме (multiuser). Здесь мы допускаем, что IDE уже установлена и настроена на работу. Как установить Cloud9 IDE. Реально C9 не поддерживает работу нескольких пользователей одновременно. Для чего это нужно, если в реальности пользователи работают от имени одного пользователя и на одном и том
1 min read

RXJS mergeMap/flatMap

mergeMap( project: function: Observable, resultSelector: function: any, concurrent: number ): Observable Преобразовать каждое испускаемое значение в наблюдаемый объект. flatMap - это псевдоним для mergeMap Если будет активна  только одна внутренняя подписка в конкретный промежуток времени, попробуйте использовать switchMap Если порядок испускания элементов, подписки для внутренних наблюдаемых являются важными, попробуйте concatMap Зачем
1 min read