Melnikoff dev
4 subscribers
9 photos
1 video
18 links
Бьюти-фьюча-импрувд-нью-джен дев 2.0.

По вопросам рекламы и сотрудничества пишите @melnikovdv.

По всем остальным вопросам сюда @melnikovdv.

А с жалобами или плохими отзывами не пишите.

Fun channel @mdv_1
Download Telegram
# 2018-10-20

Посмотрел на Progressive Web App (PWA) – технологию от Google, которая позволяет мобильному вебу иметь кеш, работу в фоне, пуши и прочие преимущества нативных приложений.

Посмотрел на примеры реализаций https://pwa.rocks и увидел среди прочих http://web.telegram.org Удивился, открыл. Страничка предложила добавить ярлык на рабочий стол. В итоге в списке приложений телефона появилась иконка Telegram, которая открывает браузер, но выглядит как нативное приложение. То есть даже сложные приложение, как, например, мессенджер может вполне работать как PWA на мобильном.

Конечно, есть недостатки – Edge, IE и Safari пока не поддерживают технологию, но есть и достоинства, ставить приложения многие не хотят, а такую богатую страничку посещать одно удовольствие.

Ну, и супер эффект достигается, когда PWA идет с AMP ;)

Внятный обзор PWA https://medium.com/@deepusnath/4-points-to-keep-in-mind-before-introducing-progressive-web-apps-pwa-to-your-team-8dc66bcf6011
# 2018-11-15

Недавно на Hacker News один из сотрудников Google ответил почему качество софта в компании местами очень посредственное.

Если кратко, то дело в том, что самый простой способ получить promotion – это сделать большой публичный запуск. А за правку багов и за педантичное улучшение продукта ничего кроме мазолей и плохого настроения не получить.

https://news.ycombinator.com/item?id=18379050

Очень похоже на мнение бывшего сотрудника G+, о котором я писал.
Media is too big
VIEW IN TELEGRAM
# 2018-12-17

Пока вы пишите ваши старомодные мобильные приложения на Android и iOS, ваши конкуренты пишут в 2 раза больше на Flutter, Kotlin, а возможно и на, прости Господи, ReactNative.

Инициатива Kotlin Native заключается в компиляции языка в native binaries посредством LLVM. Можно шарить исходники моделек, логику и прочие независимые от платформы вещи, и радоваться тому, что не надо писать дважды. Прямо сейчас в подземельях JetBrains как раз допиливают тулинг, чтобы все работало и к тому же более-менее быстро. Уже сейчас вы можете поиграться с компиляцией в ObjC, как я понимаю.

Две недели, как Flutter официально зарелизили до стабильной версии 1.0. Там все работает немного иначе: код из Dart VM компилируется в машинный код, но при этом работает платформа, как в игровым движке. То есть на GL разработчики Google реализовали виджеты, которые на Android выглядят, как Material, а на iOS в Cupertino стиле. И, как вы понимаете, ничего не остановит их от того, чтобы сделать веб-версию. Примечательно, что при
# 2018-12-18

Веб-студия "На гребне IT" – это

* современные технологии COBOL, CORBA и ActiveX
* доработки после утверждения ТЗ
* коробка установочных дисков
* веб-форум в подарок

Будущее за "На гребне IT"
# 2018-12-26

Прежде чем пользоваться современным веб-сайтом, вы должны:

- закрыть инфомацию о cookies
- закрыть онлайн-ассистента
- закрыть подтверждение местоположения
- закрыть предложение о подписке на newsletter
- заблокировать запрос нотификаций "о самом важном"
- закрыть специальное предложение

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

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

А во главе этого демонического шествия настойчивые просьбы оценить приложение.

Вот вам икона Никиты Бесогона в качестве оберега.

P.S.: Да, канал Михалкова на Youtube называется в честь святого великомученика https://ru.m.wikipedia.org/wiki/Никита_Бесогон
# 2019-08-15

В поисках Святого Грааля

Сегодня только ленивый не мечтает о том, чтобы сэкономить ресурсы и время на создании ПО, а один из самых очевидных способов - кросплатформенная разработка клиентов. Многие ищут этот философский камень, чтобы превратить две, а то и три команды, дублирующие друг друга, в одну.

Еще одна компания заявила, что хочет отказаться от подобного подхода к клиентской разработке. В прошлый раз мы слушали исповедь Airbnb о React Native. На этот раз Dropbox поделился результатами своего видения кросплатформенности.

https://blogs.dropbox.com/tech/2019/08/the-not-so-hidden-cost-of-sharing-code-between-ios-and-android/

tl;dr: пробовали общие вещи написать на C++, но столкнулись с оверхедом в разработке, отсутствием необходимого тулинга, разница в платформах докатилось и до общей C++ библиотеки, проблемы с хайрингом и экспертизой (многие просто не хотят писать на C++ и я их не осуждаю). В итоге все бонусы от переиспользования фактически сведены на нет.

Вообще сейчас существует несколько основных подходов к кросплатфоменности в клиентской разработке:

- Phonegap/Xamarin и подобные

Позволяют писать а-ля веб приложения и рендерят их с помощью своего движка. Самый бородатый из подходов, у которого основная проблемы в "не нативном" виде UI и в сложностях поддержки нативных компонент (взаимодействие с платформой). Про минусы этого подхода очень много информации в сети.

- логика на C++ с прокинутыми вызовами для платформенного UI.

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

Про минусы этого подхода вчера написал Dropbox в своей статье.

- React Native

Превращают js-код в нативный код платформ. Про него нелестно отозвался Airbnb, о чем я уже упоминал https://tt.me/melnikov/AWQecGaFIIk

- Flutter

Разработанный Google фреймворк позволяет писать приложения на языке Dart, который рендерит UI не нативными средствами платформы, а своим способом, написанным на C++, подобно игровым движкам.

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

- Kotlin Native

Инициатива JetBrains иметь нативный платформенный код для UI, но общую логику на Kotlin, которая может быть скомпилирована в Java-байткод или нативно с помощью LLVM.

С этим подходом проблема в том, что шарится только логика, хотя UI, как правило, тоже отнимает много сил, и нельзя использовать привычные библиотеки при разработке логики (только Kotlin Native friednly), чтобы они могли использоваться на разных платформах. Плюс также пока очень сырой тулинг.
# 2019-12-04

Иногда вам хочется посетить какой-нибудь запрещенный сайт. Это может быть LinkedIn, Lurkmore, RuTracker или еще какой. В зависимости от провайдера не все сайты могут открыться. Не так давно сокращатель ссылок bitly.com был тоже заблокирован.

Это происходит из-за Федерального закона от 27 июля 2006 г. № 149-ФЗ «Об информации, информационных технологиях и о защите информации».

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

Установите себе браузер Opera. Он имеет встроенный VPN, который нужно включить в настройках (большой тумблер вкл/выкл). Когда ваш обычный браузер не попадет на очередной сайт из-за блокировок, просто откройте Opera и заходите через нее.
# 2019-12-05

JetBrains представила Space ‒ продукт для облегчения коллективной разработки проектов.

https://www.jetbrains.com/space

Фактически это Jira на стероидах или "швейцарский нож" для разработки:
- рабочие чаты
- календарь
- вики
- трекер задач
- блоги
- контроль версий
- CI/CD
- artifactory и docker registry (и package management в целом, включая distibution)

Может быть cloud или hosted. Для маленьких cloud бесплатно.

То, что сейчас показано на сайте и в превьюшках/скринах, выглядит очень круто.

На перезентации сказали, что есть мобильные приложения, которые написаны на Kotlin/Multiplatform. То есть вся логика у них шарится (JS/iOS/Android).
# 2020-01-16

JetBrains сделали шрифт специально для разработки. Осовременели и эту область. В нем все прекрасно: и продуман для долгой работы с текстом, и выглядит хорошо, и лигатуры есть.

Я до этого использовал везде Fira Code, но этот приятней.

https://www.jetbrains.com/lp/mono/

https://blog.jetbrains.com/blog/2020/01/15/jetbrains-mono-a-new-font-made-for-developers/
# 2020-02-05

Мне очень нравится "Дзэн" языка программирования Python. В какой-то момент он стал настолько популярен, что даже вошел в сам интерпритатор в виде вызова 'import this'.

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

The Zen of Python

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

А написал его один из основных контрибуторов языка ‒ Tim Peters.
Фундаментальное введение в stuctured concurrency

https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/

Статья показывает мысль программиста с 50-х годов прошлого века по наши дни: о важности flow control и как менялись парадигмы; как Дейкстра объявил войну goto, а Кнут наоборот заступался.

Подобные "black box rule" требования к flow control можно спроецировать на concurrency. В итоге приходим к подобию CoroutineContext в Kotlin и получаем простой и понятный механизм cancellation и error handling.
Ребята сделали bug-tracker прямо в git. CLI, веб-клиент и прочие плюшки. Все синкается с issues github, gitlab и прочими, если надо.

Странно, что раньше никто до подобного не додумался. Простые решения типа этого прекрасны.

https://github.com/MichaelMure/git-bug

В качестве примера подобного решения я в личных целях для доков/вики/тасок не использую никаких сервисов, а просто веду каталоги с markdown-документами с линками друг на друга и синкаю через git или Dropbox.
Важность GitHub'а осознаешь больше всего, когда он ложится.

Это как радар в Counter-Strike: когда он есть ты его не замечаешь, но, если его отключить, то резко ощущаешь нехватку.
Если ностальгический интерфейс Windows-98 вызывает у вас скупую гендерно-нейтральную слезу, то вот набор CSS для домашнего творчества, с которым можно повеселить друзей.

https://jdan.github.io/98.css
Jake Wharton сегодня покинул Google.

"Орлы в клетке не сидят" - Хабиб Нурмагомедов
Во время карантина меня E-Legion позвали на митап на тему "Советы новичкам в мобильной разработке".

Сформулировав свои мысли, вот что на мой взгляд важно:

Надо учиться. Если уметь что-то делать хорошо, то можно устроиться в большую компанию, где вас будут облизывать, или, если есть творческая жилка, то сделать что-нибудь свое.
Способов учиться сейчас очень много:
- масса литературы и блогов
- мировые ВУЗы предлагают свои программы, зачастую бесплатно
- Udemy

Держитесь значимых людей (на работе, в индустрии, среди друзей). Это поможет поймать правильный "вижн" и узнать как думают разумные и более опытные люди.

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

Система: "Он начал что-то подозревать, сворачиваемся!"

Уже не в первый раз такое 😳
Гороскоп программиста

♈️ Овен
Отличный день, чтобы экспериментировать с дизайном

♉️ Телец
Постарайтесь не смотреть на QA сверху вниз, сегодня им, как никогда, нужна ваша поддержка

♊️ Близнецы
Проявите осторожность при выборе дня релиза

♋️ Рак
Не начинайте больших задач, обратите больше внимания на миты

♌️ Лев
Звезды рекомендуют заняться рефакторингом, который вы долго откладывали

♍️ Дева
У вас получится взять на себя чужие баги, но это может привести к проблемам на CI

♎️ Весы
Сегодня ваши эстимейты будут точнее, чем обычно

♏️ Скорпион
Удачное время, чтобы оформить отпуск или конференцию

♐️ Стрелец
Не скупитесь на теплые слова тем, кто вас ревьюит

♑️ Козерог
Сегодня вам не стоит заниматься апдейтом серверов

♒️ Водолей
Хороший день, чтобы поспорить о роадмапе проекта

♓️ Рыбы
Разбрасываться словами в Wiki не принесет вам ничего хорошего
Инсайты из мира веба и Typescript

Несмотря на полную поддержку типов и классов, в вебе принято использовать классические JS objects + functions, в частности для моделей.

Для людей из Java/Kotlin/C#/Go это выглядит немного странно. Они видят классы в Typescript и пихают их везде, где можно по умолчанию, когда в JS/TS – это не всегда лучшее решение.

Это обусловлено тем, что многие вещи так сложились исторически, что сделать что-либо проще с объектами. Например, нет способа автоматически вызвать конструктор класса с правильными аргументами. То есть, для клонирования (deep copy) инстанса класса нужно:
- либо использовать библиотеку типа Lodash.deepClone();
- либо писать особую JS-магию, которая не факт, что будет покрывать все случаи;
- либо вручную писать код для клонирования каждого экземпляра класса вручную.

А для JS-объектов есть простое решение в виде использования Spread syntax и, вуаля, данные скопированы.

Еще в вебе нечасто разделяют DTO и модели. Как правило, это одни и те же сущности из-за того что они совпадают с сущностями API, а формат данных в вебе редко меняется (какие-нибудь Protobuff/CBOR здесь редкость), поэтому DTO абстракцию никто обычно не делает.