Получи случайную криптовалюту за регистрацию!

✙rozho)))k✙🇺🇦

Логотип телеграм канала @full_of_hatred — ✙rozho)))k✙🇺🇦 R
Логотип телеграм канала @full_of_hatred — ✙rozho)))k✙🇺🇦
Адрес канала: @full_of_hatred
Категории: Технологии
Язык: Русский
Количество подписчиков: 3.65K
Описание канала:

Реклами на каналі немає!
Про автора: www.rozhkov.me/about
Про канал: www.rozhkov.me/about-full-of-hatred
Канал про все що не ІТ: @daily_rozhok
дірект: @xrozhokx
блог: rozhkov.me

Рейтинги и Отзывы

3.33

3 отзыва

Оценить канал full_of_hatred и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

0

3 звезд

1

2 звезд

1

1 звезд

0


Последние сообщения 11

2021-04-16 09:00:01 Архитектура современных веб-приложений на примере adopt.com.ua. Внешние сервисы

В предыдущей части я рассказал о ядре. Теперь пройдемся о внешних вещах.

На Heroku эфемерная файловая система. Это значит, что после перезагрузки инстанса, например при редеплое, все записанные файлы пропадут. Основной контент сайта—это фото, поэтому их нужно где-то хранить. Для этого мы используем AWS S3. Файлы прозрачно загружаются на S3 с помощью RoR, для этого не нужно писать дополнительного кода. То же кстати есть и в Laravel и в других фуллстек-фреймворках.

Кроме хранения файлов их нужно еще и раздавать. Можно настроить бакет на раздачу, но это не очень хороший подход по нескольким причинам: показывать имя бакета миру небезопасно, файлы могут находиться далеко от пользователя, тарификция траффика может быть большой на хороших объемах, нужно настраивать заголовки кеширования. Поэтому мы используем амазоновский CDN — CloudFront. У него есть точки доступа по всему миру и файлы будут отдаваться быстро. Кроме CloudFront есть огромное количество других CDN, но амазон меня устраивает.

Вся AWS инфраструктура развернута с помощью Terraform. Вручную в AWS консоли я ничего не конфигурирую, все настраивается через Terraform. Если завтра мне нужно будет поднять клон адопта, то я смогу сделать это за минуту. Состояние терраформа хранится в бакете на том же амазоне, локально ничего нет.

Для рассылки писем я использую сервис Mailjet. Среди кучи других сервисов он выделятеся тем, что можно делать шаблоны для транзакционных рассылок. Транзакционные рассылки—это письма о регистрации, уведомления от сайта и так далее. Они отличаются от маркетинговых писем тем, что там нужно делать подстановки—например вставлять ссылку с токеном для подтверждения регистрации. В подавляющем большинстве сервисов рассылок так делать нельзя или есть ограничения, например подстановка только имени.

Верстка писем—отдельное тайное искусство. Можно было бы отправлять письма сразу из Rails, но тогда нужно было бы делать для них шаблоны в коде и контент нельзя было бы редактировать нетехническим пользователям. Поэтому все шаблоны собраны в конструкторе Mailjet.

Для того, чтобы письма доставлялись как надо и не попадали в спам, нужно чтобы ваш домен содержал DKIM и SPF записи. Для управления всеми своими доменами я использую Cloudflare. Он бесплатный и быстро работает. Еще там есть защита от DDoS и бесплатный CDN, но я их не использую.

В Mailjet можно делать и маркетинговые рассылки тоже, но мы этим пока что не пользуемся. Аналоги Mailjet это Mailchimp, Mailgun, Unisender и так далее и так далее.

Для ресайза картинок я использую сервис ImageKit. Я уже подробно о нём писал. Очень удобная штука. По API вы загружаете фото и тут же можете получить его в любом необходимом размере.

К сайту подключена OAuth2 авторизация через фейсбук и гугл. Для этого в фейсбуке и гугле соответственно созданы девелоперские аккаунты, а для интеграции используется библиотека Omniauth.

Для донатов используется LiqPay. Тут ничего сложного. Правда нам сейчас отключили платежи т.к. надо обновить доки или зарегистрировать юрлицо, точно не знаю, поэтому пока что донаты на карту.

В следующей часи я расскажу про мониторинг, аналитику и CMS.

#работа #инструменты #проекты
permalink | задонатить
2.2K views06:00
Открыть/Комментировать
2021-04-14 09:00:01 Таймкоди до стріму з Олександром Соловйовим: Clojure, як стати CTO, складність бізнесу

Саша в Ютубі: https://www.youtube.com/channel/UChAo...
Твітер: https://twitter.com/asolovyov
Телеграм канал: https://t.me/bitethebyte​
Та сама крутезна доповідь про FRP:

#8203;

Топ тем для тих у кого мало часу:
00:15:40​ Чи виправдане використання Clojure зважаючи на низьку популярність мови?
00:44:39​ Які якості важливі для СТО?
01:21:42​ Звідки складність та десятки тисяч LoC в e-commerce? Чому Касті не підходять готові рішення (Magento, etc).
01:40:08​ Дія Сіті. Думка Саші про Дію та Мінцифри.

Повний список:
00:00:20​ Початок, вітання.
00:01:42​ Саша розповідає про себе, хто такий, чим знаменитий. Про роботу CTO.
00:04:20​ Що думаємо про перееїзд закордон? Чи варто переїжджати. Про дітей.
00:12:44​ Якого розробника варто брати без технічної співбесіди?
00:14:05​ Наскільки важко знайти розробника на Clojure. Як наймає Каста.
00:15:40​ Чи виправдане використання Clojure зважаючи на низьку популярність мови?
00:18:20​ Чому на Clojure набагато швидше пишеться код?
00:21:08​ Про Python. Дзен Python, чому Clojure краще.
00:22:37​ Інфраструктура Касти. Чому каста не буде мігрувати в cloud.
00:25:20​ Що думаємо про сертифікації.
00:26:34​ Згадуємо часи життя в гуртожитку КПІ.
00:29:55​ Як Саша став СТО та що допомогло йому найбільше.
00:44:39​ Які якості найважливіші для СТО?
00:44:56​ Якість №1: розуміння бізнесу. Чим відрізняється сіньор від джуна.
00:47:40​ Якість №2: Технологічний "компас".
00:49:09​ Якість №3: Сторітеллінг, вміння розповісти людям бачення.
00:54:09​ Що думаємо про golang. Go у Касті.
00:56:41​ Хто стоїть за Clojure.

01:01:10​ Що ще має вміти СТО.
01:02:43​ Книги та ресурси для розвитку навичок проектування та архітектури.
01:05:37​ Як вчитися робити великі проекти.
01:12:19​ Як програмування заважає кар'єрі керівника. Звідки Саша бере час на програмування.
01:17:13​ Що робити якщо раптово потрібно буде масштабуватися? Як правильно робити задачі СТО.
01:21:42​ Звідки складність та десятки тисяч LoC в e-commerce? Чому Касті не підходять готові рішення (Magento, etc).
01:27:30​ Складність бізнесу.
01:35:07​ Чому Каста — продуктова компанія.
01:36:27​ Про аудиторію Касту, рекламу, продажі.
01:40:08​ Дія Сіті. Думка Саші про Дію та Мінцифри.
01:49:31​ Про Гільдію ІТ фахівців.
01:54:12​ Весь державний софт повинен бути відкритим.
01:57:00​ Про адопт, LoC і ефективність.
01:58:00​ Куди інвестувати гроші?

02:01:55​ Як пройшов перехід на віддалену роботу у Касті? Про ефективність ремоуту.
02:07:08​ Каста — золота клітка?
02:08:08​ Як Саша переконав перейти на Clojure:

#8203;
02:09:11​ Що робити після IT? Що би робив Саша якби мав купу грошей.
02:12:15​ Про автомобілі. Яка беха у Саші в гаражі.
02:15:00​ Як зробити таку круту доповідь як Саша зробив про FRP. Як повторити великий успіх?



Підписати петицію проти Дія Сіті: https://petition.president.gov.ua/petition/114468

#кулстори
permalink | задонатить
1.7K viewsedited  06:00
Открыть/Комментировать
2021-04-13 18:54:01 Стрім с Сашою Соловйовим стартує через 5 хв! Підключайтеся!



1.5K viewsedited  15:54
Открыть/Комментировать
2021-04-12 09:00:01 Архитектура современных веб-приложений на примере adopt.com.ua

Я разработчик сервиса по пристройству животных — https://www.adopt.com.ua/ Там вы можете найти себе друга—котика или собачку. Хотя сайт простой, я применяю те же подходы для разработки своих коммерческих проектов. Если бы у меня стояла задача делать стартап, то я всё делал бы так же. Расскажу о том, как всё устроено внутри.

Сайт сделан на Ruby on Rails. Это веб-фреймворк который предоставляет всё, что нужно: слой доступа к базе данных, собственно веб, упаковщик статики, кеширование, бэкграунд джобы, письма и многое другое. Если бы я был питонистом то взял бы Django, если пыхером—Laravel.

Приложение разделено на три логических части: пользовательская, админка и API. Пользовательскую вы видите когда заходите на сайт, админка нужна для модераторов которые публикуют объявления, API используется для синхронизации с внешней CMS.

Всё что вы видите, рисуется на сервере. JS почти не используется и сайт по идее даже может работать без него. JS нужен для отображения результатов поиска, галереи фоток, клиентской валидации форм и кроппера фоток в админке. У такого подхода есть большое количество преимуществ—изоморфность, быстрая отрисовка, нет проблем с SEO, сайт быстро работает везде, не нужно держать отдельного фронтенд-разработчика. Я не фанат современного фронтенда и считаю что если вы не делаете Фигму, то все надо рисовать на сервере, оставляя клиенту минимум. Проект был написан до релиза HotWire, поэтому тут больше JS, чем могло бы быть. Для работы с JS используется библиотека Stimulus.

Верстка главной сделана на Bulma. Сейчас я бы смотрел в сторону TailwindCSS. Bulma тащит довольно много стилей и увеличивает размер конечного бандла.

Для админки я использую шаблон AdminLTE.

База данных — PostgreSQL. Постгреса более чем достаточно для наших задач. Данных немного, поэтому фильтрация и поиск работает быстро без дополнительных оптимизаций. А вот в некоторых коммерческих проектах у меня есть таблицы где по много миллионов записей и там уже нужно думать про организацию правильных индексов.

Каждому проекту нужна обработка очередей и бэкграунд джобы. Это код, который выполняется в фоне чтобы не задерживать пользователя. У нас в фоне делаются следующие вещи: отравляются письма о регистрации, ресайзятся картинки, постятся обновления в телеграм-чат для админов.

Для этого используется стандарт в мире Ruby — Sidekiq. Ему нужен Redis, поэтому у меня есть еще и Redis.

Всё это хостится на Heroku: 1 инстанс для веб-сервера, 1 инстанс для Sidekiq-воркера, 1 постгрес, 1 редис. Heroku предоставляет https для платных аккаунтов, тут не нужно дополнительно возиться с подъемом certbot.

Сорцы проекта находятся на GitLab и он же используется для CI/CD. По коммиту в мастер бегут линтеры и статические анализаторы кода JS—ESLint и Ruby—Rubocop, а дальше всё деплоится одной строкой в Heroku. Тестов на этом проекте нет, потому что я фактически единственный разработчик. Rubocop проверяет не только форматированием кода, но еще и следит за потенциальными багами, например неоптимальным использованием Rails.

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

#работа #проекты #инструменты
permalink | задонатить
1.9K viewsedited  06:00
Открыть/Комментировать
2021-04-09 09:00:15 Стрім №6





Наступного вівторка в нас щоквартальний стрім.

Цього разу в гостях поважна людина: Олександр Соловйов, CTO в kasta.ua, адвокат Clojure, відомий спікер та стрімер.

Будемо обговорювати роботу CTO, складність є-коммерсу, перспективи локальних українських компаній.

Як завжди, до та під час ефіру приймаються запитання за адресою https://app.sli.do/event/q89hkv3v

твітер Саші: https://twitter.com/asolovyov
телеграм канал: @bitethebyte
ютуб канал: https://www.youtube.com/channel/UChAorxVcXUA9MWSLuHLQX3w

Стрім буде українською.





До зустрічі!
1.9K views06:00
Открыть/Комментировать
2021-04-06 09:00:15 Написал туториал по мониторингу Airflow с помощью StatsD и Grafana.

https://databand.ai/blog/everyday-data-engineering-monitoring-airflow-with-prometheus-statsd-and-grafana/

Airflow—это де-факто стандарт в мире дата инжиниринга. Я уже больше года сотрудничаю с компанией databand.ai которая разрабатывает продукт для оркестрации и мониторинга дата пайплайнов и одна из больших задач которую мы решаем—это интеграция с Airflow.

Если у вас крутится кластер Airflow и вы его еще не мониторите→читайте материал. Если уже мониторите—черкните в комментах каким образом.

Следующие технические материалы будут про инструментацию и мониторинг Spark джоб.
2.2K views06:00
Открыть/Комментировать
2021-03-30 18:59:18 Лекція: VPS, IaaS, PaaS. Розгортаємо Python апп на Heroku

Сегодня прочитал для студентов ФПМ КПИ лекцию об облачных провайдерах и Heroku и показал как за 30 секунд задеплоить Python приложение. Лекция українською.





00:00:52 Апп який ми будемо розгортати
00:01:56 VPS
00:15:51 IaaS. Розповідаю та показую AWS
00:35:45 Heroku
00:38:32 Розгортаемємо демо-апп

p.s.: не забываем подписать петицию против Дія Сіті https://petition.president.gov.ua/petition/114468
835 viewsedited  15:59
Открыть/Комментировать
2021-03-18 12:19:53 rozho)))k pinned «Стоп Дия Сити! Друзья. Я не пишу про политику, но сейчас очень важный повод. Чиновники уже много лет пытаются отжать денег у нас и наших ІТ-компаний. Для этого придумывали и просто поднять налоги, и ввести специальную пятую группу ФОП чисто для "ІТ-шных"…»
09:19
Открыть/Комментировать
2021-03-18 10:00:17 Стоп Дия Сити!

Друзья. Я не пишу про политику, но сейчас очень важный повод.

Чиновники уже много лет пытаются отжать денег у нас и наших ІТ-компаний. Для этого придумывали и просто поднять налоги, и ввести специальную пятую группу ФОП чисто для "ІТ-шных" КВЭДов, и другие темы. Сейчас фантазёры из так называемого Министерства Цифровой Трансформации решили воспользоваться опытом беларусских коллег и создать собственный вариант их "Парка Высоких Технологий".

Для этого на коленке написан законопроект 4303 в народе известный под названием "Дія Сіті", а компании будут загонять туда в добровольно-принудительном порядке.

Кроме повышенных ставок налогов и сбора в пользу самой Дії, который непонятно как будет распределяться, законопроект предлагает еще и закрепостить программистов за компаниями и законодательно установить договора о непереманивании сотрудников. Не понравился работодатель? Дружище, ты теперь крепостной без прав, сиди и работай пока не закончился контракт.

Законопроект никак не регулирует деятельность ФОПов работающих напрямую с иностранными клиентами. Я работаю именно так, любой фрилансер вам скажет то же самое, многие люди которые работают в компаниях тоже получают деньги от иностранной фирмы на валютные счета. Я думаю что дальнейшим развитием этих инициатив будет запрещение прямой работы и необходимость вести дела через компанию прокладку в Дія Сіті и "гиг-контракты".

Нам, людям работающим в ІТ, не нужны никакие специальные условия или технопарки для того чтобы эффективно вести деятельность. ІТ отрасль в Украине всё это время развивалась благодаря тому, что государство не вмешивалось в наши дела. Лучше всего будет если так продолжится и дальше.

Мы создали петицию против всей этой инициативы: https://petition.president.gov.ua/petition/114468
Залогиниться и подписаться проще всего через НБУ Bank ID—через учетку украинского банка.

Прошу вас прочесть её и подписать
, а так же маскимально репостнуть среди своих коллег и друзей.

Дополнительное обсуждение ведется на ДОУ: https://dou.ua/forums/topic/33040/

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

Друзья, не будьте равнодушными!

Сделайте репост петиции с хештегом — #StopDiiaCity во всех доступных социальных сетях, чатах и сообществах.

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

«Сначала они тебя не замечают, потом смеются над тобой, затем борются с тобой. А потом ты побеждаешь»

По всем вопросам можете писать в комментарии тут и на ДОУ—Егор, я и другие будут проводить разъяснительную работу.
5.4K views07:00
Открыть/Комментировать
2021-03-17 12:20:16 Когда полезно уметь в leetcode

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

Ну что ж, instant karma! На выходных я писал компилятор телеграмовских сообщений в html—это нужно для двухсторонней синхронизации с Ghost. Взял собщение из телеги, конвертнул в html, засунул в Ghost, получил пост на сайте, Profit! Изи таска.

Телеграм присылает сообщения в хитром формате. Вы можете посмотреть его в документации к Bot API. В одном поле отправляется plaintext, в другом—набор сущностей названных Entity. У них есть "тип"—жирный, курсив, ссылка, хэштег и так далее, "начало"—позиция в тексте откуда начинается форматирование и "длина"—количество символов, на которые распространяется форматирование.

Вроде выглядит просто. Взял текст, порастыкивал тэги по позициям, пошёл пить чай.

Я решил что задача простая, можно взять её нахрапом, и сел писать код.

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

От долгого красноглазия я утомился и вышел в АТБ. Как только я оказался на улице, мне в голову пришло простое и изящное решение. Купив египетской картохи и вакуумированной отечественной "моцареллы", я ломанулся домой. Менее чем за полчаса я написал код который хорошо справлялся со всеми корнеркейсами, был компактным и понятным.

Однако на одном из тестовых постов он всё равно сломался. Уже несколько по другой причине, и я потратил еще пару часов на фикс.

Так вот, если бы я был натаскан на литкод задачи, то изначально пошел бы по правильному пути. Я опубликую своё решение в пятницу, а пока предлагаю пытливому читателю развлечь мозг.

Условия вы можете посмотреть в документации. Нужно принять сообщение от телеграма и конвертнуть его в html со всем форматированием. На самом деле там куча подводных. Это типичная задача типа Rabbit Hole когда ты просто проваливаешься в бездну.

Пример сообщения от телеги: https://gist.github.com/rozhok/75878a86f0df647a802fba0dd7ddbdc5

#работа
permalink | задонатить
2.5K viewsedited  09:20
Открыть/Комментировать