Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.19K photos
24 videos
930 links
ЛаМПовое с Бобровским
Download Telegram
У меня на рутубе много подкастов, которые слушаю фоном, и сегодня он внезапно стал отключаться, едва уходишь на другую вкладку или просто сам хром сворачиваешь, или переключаешься на другую программу.

Я "ничего не трогал ничего не обновлял ничего не менял комп перезагружал", но главное что в фоне продолжает прекрасно работать и ютуб, и вквидео, и даже одноклассники-видео :) и онлайн-кинотеатры разные, то есть проблема конкретно в рутубе. Впрочем, по очевидным причинам совершенно не удивлён. Видимо, совсем у пацанов дела плохи, раз приходится экономить трафик таким образом )))

Любой джун-фронтендер подскажет, как можно эту проблему решить на время жизни вкладки: надо отрубить Page Visibility API.

F12 -> Console ->

Object.defineProperty(document, 'hidden', { value: false, configurable: false });
Object.defineProperty(document, 'visibilityState', { value: 'visible', configurable: false });


А если регулярно повторяется, автоматизируем подмену API с помощью Tampermonkey.

Подкасты с рутуба я из гуманных соображений всегда слушал в видеоформате 144, но теперь из вредности буду всегда ставить 1080++.

( даже стрим мэдисона на кике в фоне норм работает 😊 начинал он кстати с рутуба... )

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

27.03.25 Сегодня вроде заработало; был баг?
30.03.25 Опять сломалось...
😎36😁22👍10🤔3🐳3
Как Spring-разработчик заваривает чай.

Входные данные: Spring-разработчик не может просто взять и заварить чай, ему нужен DI.

Spring Context: всё должно быть бинами: @TeaBean, @Sugar (опционально, как всегда), @BoilingWater.

Прокси-слой (AOP): прежде чем выдать чай, нужно залогировать процесс и замерить время заваривания.

Внешний сервис: вода берётся асинхронно (@Async), а если кран не работает – автоматический retry (@Retryable).

Exception Handler: если чайник сломался, Spring gracefully вернёт TeaPotException (HTTP 418 I'm a teapot).

Можно добавить ещё @Scheduled для автоматического чаепития каждые 2 часа.
😁57👍97💯4🏆2
Продолжаю работу с курсантами 🤓

...С основной работы я уже ушел, 21го числа. Решили что нет смысла "лямку тянуть" до конца месяца. (Как то даже по спокойнее сразу стало - снизилась тревожность и себя стал слышать, даже идеи сами приходят)

...Я в первую очередь буду на свои модели менять, потому что уж очень важный узел, и как будто ЛЛМ вообще не нужен, а хороший NLU классификатор который можно прозрачно дообучить/переобучить после того как обнаружатся странности.
Такие роутеры классификаторы на LLM это вообще рандом. Осенью очень много смешных поведений ловили. Буквально чуть чуть промпт меняешь, пробел лишний или слово 1-2, и результат вообще другой.

...Теперь командам разработки без выделенных девопсов/dba никогда не посоветую self-hosted HA-кластер сопровождать).
Кстати месяц где-то назад одну мою команду как раз отговорил на основе этого моего опыта.

(а ты сможешь самостоятельно обновить кластера без даунтайма?)


...В одном из проектов заменил PostgreSQL на MongoDB. Исходной причиной стало понимание того, что более эффективно будет работать с денормализованными данными. Таким образом мы перешли от набора таблиц к единому документу, что упростило схему БД и сделало выполнение запросов более быстрым. В дополнение к этому мы получили отказоустойчивый кластер из коробки, что упрощает процесс его сопровождения.

...Неужели, ORM так и работает: использует под капотом эти функции для получения запросов в виде json, а потом при помощи какого-нибудь jackson мапит их в объекты?!

...Альтернативой в экосистеме Go между ORM и голым SQL могут служить инструменты, такие как query-билдеры, например,
squirrel. - Они способны на 99% загрыть потребность в ORM, если стоит вопрос о гибкости и удобстве построения сложных запросов.
Если говорить про модели данных, то одной из лучших рекомендаций для ослабления ограничеий ORM-ов может стать денормализация таблиц и формирование более избыточных моделей, чтобы была возможность гибко с ними работать без излишних джоинов и сложной бизнес-логики.


...Помимо этих интеграции вышел очередной баг с 1с, господа решили раз в месяц менять в каком нибудь api ответ datetime полей с null, на mindate.
Также переводил на новый pipeline и десерилизовал ответ от 1с новым самописным десириализатором,по вашим занятиям избавился полностью от nullable полей в record ответе от 1с, и жить стало в разы легче, теперь я работаю с двумя состояниями даты, либо она конкретная, либо минимальная.

Да, писать свой собственный клей для подобных случаев, похоже , надо будет всегда, главная проблема что он со временем сам превращается в баттлнек )

Горжусь вами, дорогие!
❤️❤️❤️❤️❤️❤️❤️
👍4817🔥1
Сейчас истеричные белки по поводу AI заводятся ровно по двум темам:

1. Смотрите! Смотрите! Очередной жпт порвал все другие жпт в неких абстрактных программистских тестах в вакууме, которые к реальной работе имеет отношение более чем никакое, и делаются крупными конторами исключительно для перепиаривания конкурентов и развода лохов-инвесторов.

Я проверил намедни новую дипсику 31 со всеми её супер-пупер-синками, так она не смогла корректно сгенерить линейный json для создания простой диаграммки из пяти квадратиков со стрелочками, хотя я мучил её полчаса -- а нарисовать вручную оказалось 3 минуты. Как всегда, "дешевле девочку посадить за эксель", чем платить сотни долларов за токены.

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

=

А что если действительно AIsys? Сейчас в эту темку вкладывается беспрецедентная сумма, доселе невиданная в истории человечества.

"ИИ может сыграть роль в приходе Антихриста, — заявил Патриарх Кирилл. ...ИИ должен быть поставлен под жёсткий контроль государства и "в хорошем смысле общества".

Но разве его послушает кто-то из демонстративно крестящихся на камеры, когда под распил заходит такое баблище...

Но, не получится служить одновременно Богу и AIsys-у.
38🤔20🐳7💯1🫡1
Как NET-разработчик заваривает кофе.

Входные данные
: C# программист не может просто налить кипяток. Нужен ICoffeeService, иначе это "антипаттерн".

DI Container: всё должно быть интерфейсами:
- ICoffeeService (но реализация OutOfMemoryCoffeeService)
- ISugar (опционально, как Nullable<Sugar>)
- IBoilingWater (но только если лицензия Azure позволяет)

Middleware/AOP:прежде чем выдать кофе:
- обязательно залогировать (ILogger<Coffee>)
- замерить время (Stopwatch + метрики в Prometheus)
- добавить RetryPolicy (потому что WaterAPI тормозит)

Exception Handler: если кофемашина сломалась:
- вернуть 503 Service Unavailable
- или CoffeeMachineException (с подсказкой "Обновите NuGet-пакет")

Внешний сервис: обязательно:
- HttpClient с таймаутом в 1 секунду (но ждём 10)
- Polly с 5 попытками (хотя после 3-ей уже пора писать в саппорт)
- обязательно ConfigureAwait(false), иначе deadlock

Выходной результат: кофе со StackTrace:
- "NullReferenceException: Sugar was not injected"
- "AzureTimeoutException: WaterAPI не ответил за 365 дней"


...из обсуждений в рабочем чате:
"Почему кофе холодный? 🤮 Потому что был async void BrewAsync()"
"Почему в чашке StackOverflowException? 💩 Рекурсивный вызов AddSugar()"
"Кто-то забыл Dispose() чашку 🤡 — теперь в памяти утечка кофеина"

+ тимлид сразу подкидывает новых проблем, AFAIK!!1 💥
- Блок с [Obsolete] методами ("Старый кофеварка")
- BackgroundService для автоматического кофепития
- .gitignore для сбежавшего кофе

(1я серия про java)
😁58😎7👍521
Так называемый "естественный язык" прекрасен для целей, для которых он был создан: грубость, рассказывание шуток, жульничество или занятие любовью,

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


-- Эдсгер Дейкстра
👍61🤔1551💯1
Отчёт за неделю.

— Основной паблик:
Как 10-кратно сократить количество багов в продакшене?
Эта best practice известна в программной инженерии не один десяток лет, но в 98% она не применяется, потому что системное мышление отсутствует у современных ит-менеджеров более чем полностью. Они способны мыслить лишь глупеньким карго-культом "список пользовательских фич" + "надо сделать побыстрее", но это не вина их, а беда.
Например, по ФЗ № 323, главврач любой клиники обязан иметь высшее медицинское образование + 5 лет работы в медицине. А в айтишке достаточно быть племянником гендира или приятелем овнера, и сразу войти в айти-директора...


Для донов-начинающих + по саморазвитию:

...Многие опасаются, что AI заменит их на работе.
Лично я настроен скептически. Технологические инновации всегда приводили к сокращению количества людей, необходимых для работы над чем-либо. Однако в то же время это создавало новые рабочие места.
Но, действительно, эффективное обучение — наиболее важный софт-скилл сегодня, чем когда-либо.
Обучение - это сверхспособность.

...Создаём себе "Второй мозг 2.0".



Для донов-неначинающих:
...Полезные платные подписки для сеньоров и техлидов: AI IDE, полезный свежий контент, поисковик c AI, лучшая в мире рисовалка диаграмм...

...Продолжаю выкладывать для донов материалы СильныхИдей.
29. Open Closed Principle (OCP) и ФП.
Мы хотим иметь возможность повторно использовать и расширять код без необходимости изменять исходную реализацию. ФП достигает этого с помощью двух инструментов...



— Бусти:

Как работают Virtual Threads JVM

Книги по СильнымИдеям:

1. БАЗА программной инженерии

2. Software Design с акцентом на Programming in Small


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

Зря я конечно своим собственным советам сразу не следовал 🙈
Теперь сперва делаю очень тщательные тесты. Например, для типа Путь/Path (гомотопия; тип, который представляет доказательство тождества между двумя значениями) такие тесты сделал: создание рефлексивного пути, композиция путей (транзитивность), симметрия пути (инверсия), композиция нерефлексивных путей, композиция с последующей инверсией... Всё на Python, с примерами.
(за такой работой прям чувствуешь, как живёшь 💥 :)

=

Но в целом временно отвлёкся на другое: копирую первый курс трека "Как понять в программировании всё" на внешнюю платформу, 42% сделал, и потом будет доступен всем желающим НЕначинающим, кто хочет потом попасть в мою Школу.
А начинающим, напомню, в группе для начинающих , для донов несколько раз в месяц провожу регулярные наборы.

Копирую в основном потому, что на моём учебном сервере нету возможности автоматического приёма оплаты... да только вот везде помимо плюсов ещё и свои минусы. Внешняя платформа, как и многие другие, в том числе и Бусти, вчера весь день лежала из-за отказа яндекс облака. Вроде бы ЯОблако - критически важная инфраструктура, но... 2N+1? ДГУ? ATS? Нет, не слышали видимо. Tier II lol, даже по-моему до 999 не дотянули, если простой был больше 8часов45минут.
👍439🔥6❤‍🔥4
Ну, с Днём Математика!

Знаете почему, родители постоянно вас спрашивали и спрашивают: "Кем ты хочешь стать? Какие у тебя планы по работе?". Они хотят украсть вашу идею!

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

Математика -- это инструмент богатых.

"кто не учит матан будет переработан в метан" (с)

"Если вы обнаружите себя в положении, в котором вы будете терпеть постоянные неудачи в личной и деловой жизни, то начнете обвинять в этом судьбу, карму, духов животных или какой-нибудь иной вид магии. В то время, как причина гораздо проще - математика. Всегда есть закономерность, но она не всегда легко различима. Не переставайте искать только потому, что не увидели закономерность в первые 7 лет."

= Кстати а вы же уже посмотрели сериал "Опасные числа", что я раньше рекомендовал? к просмотру обязателен!
"топовые темы -- это криптография и теория типов" (с)

Математики - самые опасные люди на планете.
50👍15🔥8
Периодически ребята мне пишут:
"Я решил дальше развиваться самостоятельно, и спасибо за рыбу"
🙏👍 у меня выделилось ещё немного времени на любимую computer science ❤️

испытанный способ решать вопросы
как будто их нет
во всём видеть солнечный свет...
🤔4324👍7
Как Django-разработчик заваривает чай.

Входные данные: Python-разработчик не может просто вскипятить воду. Нужно создать модель Tea и миграцию.

Django ORM: всё должно быть объектами:
Tea.objects.filter(is_hot=True) (но почему-то возвращает None)
Sugar(optional=True) (но всегда NULL в проде)
HotWater() выполняется за O(n^3) (потому что "потом оптимизируем")

Middleware: прежде чем выдать чай:
- проверить @login_required (гости чай не получают)
- добавить @cache_control (чтобы чай не остывал)
- запустить @transaction.atomic (иначе сахар может исчезнуть)

Error Handling: если чайник сломался:
вернуть 500 Internal Server Error
или TemplateDoesNotExist (шаблон чашки потерялся)
или ImproperlyConfigured (настройки чайника кривые)

Внешний сервис: особенности:
requests.get(timeout=1) (но ждём 30 секунд)
3 попытки (хотя вода уже закончилась после первой)
ConnectionError (соседи отключили API)

Выходной результат: чай с багами:
TypeError: NoneType is not drinkable
MigrationError: Сахара нет в базе
CircularImportError: чай пытается импортировать сам себя

Из рабочих чатов:
"Почему чай холодный? 🤮 Потому что забыли @async_to_sync"
"Почему в чашке MemoryError? 💩 Слишком много locals()"
"Кто-то сделал
tea.save() но забыл commit=True 🤡"
"Чайник упал с SIGTERM (системный администратор экономил электричество) ☠️"



Не забываем про
venv/bin/activate_teapot
./manage.py brew_tea --force
requirements.txt с зависимостями (teapot==2.7.0, django-sugar-plugin)

(1-я серия про java)
(2-я серия про с#)
😁43👍145🐳32
Отчёт за неделю.

Был сильно занят, помогал пацанам в очередном веб3-стартапе.
В основном выходилось выступать в роли психотерапевта, только вместо пациентов разработчики, которые непрерывно кричат 'Кто это написал?!' и физически тыкают пальцем в монитор (что я вообще всю жизнь категорически запрещаю).
Пытался объяснить что "быстро выкатить важнейшие фичи" и "сделать на совесть" -- это совсем не синонимы, особенно когда техдолг уже выше крыши (а крыша — это вчерашний дедлайн). Когда ребята на митингах буквально каждый день ругаются, куда делся тот самый очень важный таск, который "вот только что был в бэклоге", а теперь его нет ни в джире, ни в головах команды, и нигде вообще в этом мире...

Основной паблик:

По моей статистике сотен курсантов, даже про такую базу, как PMBoK или SMBoK, или сертификация ISO (я уж молчу про CMM), не наберётся даже 1%, который в теме хотя бы немного...


Для донов-начинающих + по саморазвитию:

-- Рассматриваем очередную стратегию управления временем, которая помогает повысить продуктивность с помощью ...

Для донов-неначинающих:

-- Продолжение трека "Элитный программист":
25. Как стать цифровым минималистом .
Если вы сможете несколько дней не открывать ленту сообщений, и это даётся вам относительно легко, то тогда следует постепенно приступать к тонкой настройке своей ленты, внося коррективы в ваше поведение, которые и позволят манипулировать алгоритмами.
Для того, чтобы снова не скатиться к компульсивному использованию социальных сетей, необходимо выработать две привычки. Все действия, о которых мы говорили ранее (за исключением тех, которые касались изменения настроек приложений), направлены на выработку этих двух привычек ...

-- Продолжаю выкладывать для всех донов материалы СильныхИдей -- доступны моим курсантам, но тут расширенные версии, дополненные множеством примеров.
30. Liskov Substitution Principle
Принцип подстановки Лисков -- это, по сути, контравариантность: позволяется использовать более универсальный тип, чем заданный исходно.
Этот принцип широко распространён в ФП: мы создаём функцию с генериками (полиморфными типами), чтобы гарантировать, что входные данные одного типа могут быть заменены на данные другого типа без каких-либо изменений в существующем коде. Функция с аргументами общего типа должна обеспечить корректную работу реализации независимо от конкретных типов передаваемых аргументов.

Напомню, что первые две дюжины материалов СильныхИдей пока ещё доступны на бусти и пока по очень дружелюбным ценам:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small

-- Копирую первый курс трека "Как понять в программировании всё" на внешнюю платформу, 42% => 75% сделал, и потом будет доступен всем желающим НЕначинающим, кто хочет потом попасть в мою Школу.

❤️❤️❤️
13714👍14
Любимая Российская Федерация -- лучшая в мире страна для создания своего микро/мини айти-бизнеса (и все остальные страны ей завидуют:).

Главное -- ориентироваться на массовые продукты для рублёвой аудитории и/или менторинг (про 2b забудьте вообще, и с меня пример не берите). В России есть отличные готовые платформы для лёгкого и простого создания онлайн-курсов с приёмом денег и выводом на карточку, платные блоги на Бусти, ВК и Дзене с автоматической оплатой и ежедневным выводом, донатные сервисы с приёмом как рублей так и валюты, этого более чем достаточно. Самозанятым зарегистрироваться 15 минут.

Не моё:
"6 продаж по 15к = 90 тысяч за неделю на новом курсе по нейросетям
В планах ещё 7, шобы было 200 тысяч рублей
Курс не мой, а участницы раскачки (групповое обучение)
Участница хотела делать чек 5 тыщ, на что я сказал, что за эти деньги сейчас нихера не купишь и то как она вкладывается стоит минимум 15к. Хотя по-моему мнению можно и за 30 продавать, но пока рановато, будет саботировать.
Прописали тариф и о боже… стали покупать за новый чек.
Но самое главное это можно повторить 12 раз за год и заработать минимум 2,5 млн рублей. Это если в трафик вкладывать по 10к всего. А если по 50к, то можно и 5 млн сделать."

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

При этом даже не смотрите темки про автоворонки продаж, маркетинг, сарафанное радио и прочую ересь: пока не будете зарабатывать миллион рублей в месяц, вкладывайтесь исключительно в прямую рекламу своих сервисов и услуг.
243🤔199😁5💯3
Как OCaml-разработчик заваривает чай.

Входные данные: OCaml-разработчик не может просто заварить чай. Нужно:

- Доказать, что чай существует (Tea.t)
- Проверить exhaustiveness pattern matching'а
- Убедиться, что чай иммутабельный

Functor Brewery: всё должно быть модулями:
module type TEA = sig
type t
val brew : int -> t option
end
module Make (S : SUGAR) : TEA


- 'a tea — полиморфный тип (но в runtime всё равно int)
- Сахар опционален (option), потому что "сахар — это зло"

Monadic Layers: прежде чем выдать чай:
- Обернуть в option (вдруг чайник пустой)
- Сделать bind (потому что монады — наше всё)
- Запустить map (преобразовать bitter в drinkable)

Exception Handler: если что-то пошло не так:
- Match_failure (не учли случай холодной воды)
- Stack_overflow (рекурсивное кипячение)
- Или просто вернём None (и сделаем вид, что так и задумано)

Внешние эффекты: IO это боль:
Sys.command "boil_water" (но нужны права sudo)
Unix.sleep 3600 (потому что тип int, а не float)
Thread.yield() (пока ждём, можно почитать про алгебраические эффекты)

Выходной результат: чистая функция вернула:
Some tea (но забыли, что это unit -> tea option)
None (потому что "ленивые вычисления")
Или вдруг tea lazy_t (чай обещан, но не заварен)

Из рабочих чатов:
"Почему чай холодный? 🤮 Потому что забыли Lazy.force"
"Почему в чашке
TypeError? 💩 Sugar.t не совместим с Tea.t"
"Кто-то использовал
Obj.magic — теперь чай превратился в кофе 🤡"
"Рекурсивное заваривание:
let rec tea = brew tea in tea 🥶"

Тимлид набрасывает на вечер пятницы, AFAIK:

- Блок с ppx расширениями ([@@deriving brew])
- GADT-версию (type _ tea = Black : string tea | Green : int tea)
- Сигнатуру ASYNC_TEA с Lwt.t

Особые случаи:
let drink = function
| Hot -> "Чай готов!"
| Cold -> failwith "Недопустимое состояние"
(* | _ -> ... *) (* warning: неохватывающий паттерн *)

(1-я серия про java)
(2-я серия про с#)
(3-я серия про django)
27😁21👍65🐳2
Немедленно прекратите всё, что вы делаете "по старинке".

Что вы можете изучить сейчас, чтобы быть готовым к качественно другому будущему, которое уже вот-вот, и счёт идёт на считанные месяцы?

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

(2018) GPT-1: 512 токенов
(2019) GPT-2: 1024 токена
(2020) GPT-3: 2048 токенов
(2023) Claude 2.1: 200 000 токенов
(2024) Gemini 1.5 Pro: 1 000 000 токенов
(2025) Llama 4: 10 000 000 токенов

Даже на логарифмической шкале линия последних лет заметно загибается вверх )))
Это какой-то сверх-экспоненциальный рост.
36🤯19💯65😁2
Наши блогеры на апрель.

Александр Новиков первым завёл Бусти с донами, рекомендую:

"Концентрат IT-литературы.
Cаммари ключевых IT-книг: концентрат идей, разбитый по главам и дополненный реальным опытом.
Идеально для тех, кто хочет разбираться в важном, но не имеет возможности (или желания) тратить долгие часы на чтение и анализ материала."

Очень качественная ручная работа, никакой жпт и близко не стоит.

=

Вам не нужны длительные технические курсы или тем более высшее образование в области искусственного интеллекта: учебная программа устареет задолго до того, как вы закончите учёбу. Вместо этого занимайтесь computer science и software design в качестве базы, и будьте в курсе событий, связанных с AI, с помощью тематических блогов, статей и небольших сайд-проектов.
4👍55431🔥1
Классная игра "Natural Number Game" (an introduction to mathematical proof).
На базе прувера Lean 4.

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

На выходных можно поиграть, а также посмотреть слегка в тему фильмы "21" 2008-го года, и "Поедем с тобой в Макао" Романа Михайлова.

"Почему числа прекрасны? Это всё равно что спрашивать, почему прекрасна Девятая симфония Людвига ван Бетховена. Если вы не понимаете почему, никто не сможет вам объяснить. Я знаю, что числа прекрасны. Если они не прекрасны, то не прекрасно ничто".
-- Пал Эрдёш

Деньги – это заменитель счастья. Когда вы несчастливы, вы пытаетесь заполучить побольше денег, ещё больше денег. Люди, которые очень скупы в том, что касается денег, это очень несчастные люди.
👍533🔥32
Продолжаю работу с курсантами 🤓

С LanguageExt я столкнулся на прошлой работе, на Америку.
Увидел как ребята там мастерски избегают проверок на null, не кидают эксепшены, и балуются с Option и Either, посыпая сверху LINQ. Аж влюбился. Вспомнил и теперь хочу попробовать приноровится к либе на этом проекте...

...По фронту. Долго не верстал и решил попробовать связать Vite + React + Tailwind. Намаялся чтобы все заработало нормально)

...В целом, конечно, даже близко к предложенному решению почти ничего нет, что грустно. С другой стороны какие-то отдельные детали и подходы я все таки выхватил. Ряд логичных предположений и вычислений в актив можно занести.
Не помню чтобы сталкивался (может и никогда не сталкивался) с подходом, когда для аналитического подсчета присоединяются таблицы целиком, без связи (по типу "LEFT JOIN zone_vulnerability zv ON 1=1 -- Join all zones for averaging")
Ну а в целом, это конечно просто космос :)

...Интересно наблюдать как на этих задачах работает мозг после обучения программированию в школе и университете по стандартным программам.
Первым делом хочется вытащить всё из базы через что-то вроде ORM, а потом уже проводить "сложные" вычисления на родном императивном языке.
SQL, наоборот, предельно декларативен и на нём можно написать ту же программу в функционально стиле:
CASE WHEN - это местный map,
SUM, COUNT, AVG, ... - разные варианты reduce.

...Схема базы данных однозначно усложнилась.
Степень реализма поражает, на работе похожую картину увидел как пришёл, только у вас таблицы ещё задокументированы)

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

Раньше я думал, что REST API — это просто CRUD с ID и JSON. Теперь я вижу, что можно строить архитектуру по-разному: данные могут существовать в коде или быть "спрятанными" в процессах сериализации, а API можно организовать без привязки к глобальному хранилищу...

...Научился разворачивать корпоративный монолит на php (было больно из-за большого количества падающих билдов)

Самая провальная попытка, не учтены многие вещи. Многое надо переосмыслить и многое потренировать еще...

...Наконец-то у меня стало получаться! Сам справился со всеми пунктами.

❤️❤️❤️❤️❤️
❤‍🔥40👍147👌7🔥1
Отчёт за неделю.

Основной паблик:

...Всё то программистское, что ты знал раньше — ОБМАН. Твои скиллы больше тебя не защитят. Грядёт что-то масштабное — то, о чём тебя никто не предупреждал.
Смейся сколько хочешь. Называй это "ненастоящая работа."
Но когда совсем молодой парнишка щёлкает взрослые рабочие задачки, он щёлкает их существенно быстрее — в РАЗЫ быстрее — чем ты.
Потому что правила игры изменились.
Это не скиллы — это ПРОМПТЫ.
Это не талант от рождения — это новый ВАЙБ.



Для донов-начинающих + по саморазвитию:

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

Набор на мой новый трек для начинающих с полного нуля, 3 места закончились за 1:20. Такие наборы для донов теперь проводятся регулярно.

Для донов-неначинающих:

Продолжаю выкладывать материалы СильныхИдей -- доступны моим курсантам, но тут расширенные версии, дополненные множеством примеров.
31. Interface Segregation Principle (ISP)
Это, пожалуй, самый простой принцип из всех пяти: создавая любые интерфейсы, делайте их как можно меньше. Разделяйте большие интерфейсы с кучей возможностей на более мелкие, чтобы каждый интерфейс обеспечивал именно то, что он обещает (SRP), и ничего больше. И наоборот, если вы нарушаете SRP, то ваш интерфейс, скорее всего, тоже станет раздутым из-за ненужных свойств и методов...


Напомню, что первые две дюжины материалов СильныхИдей (по сути две книги) пока доступны на бусти, и пока по очень дружелюбным ценам:
1. БАЗА программной инженерии
2. Software Design с акцентом на Programming in Small

=

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

...Синхронизм: кто-то купил этот курс, пока я ещё только начал утром этот пост )))) хз как чел нашёл ссылку. Я там случайно оставил два места для проверки.
"Ученик "Сергей" оплатил курс "Как понять в программировании всё: БАЗА" Сегодня 10:09" (и уже прошёл 16% :)

Осталось одно, при большом желании можно пройти соответствующий "квест" и его найти. Всё, и второе место кто-то нашёл :)
Потом запись будет только для донов, но регулярно.


Бусти:

Как войти в ML за ОДИН месяц

=

Возобновил работу над курсом "Ясные Системы" (как быстро и легко писать ПРОСТОЙ код систем масштаба ultra-large-scale). Просто систематизированный набор различных эвристик, которые достаточно применять механически, и всё будет супер.
Сейчас 10 23 эвристики, как наберётся 42, дам курсантам доступ.
Стараюсь делать эти эвристики максимально минималистично (несколько фраз, максимум 2-3 абзаца), что оказывается существенно сложнее, нежели расписывать всё подробно )))

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

Суть в том, чтобы улучшить результат, не улучшая навыки.

Все мы по большому счёту -- просто груда никчемности. По своей воле, без надсмотрщика, нам крайне сложно взяться за самостоятельное обучение темам, где результат небыстр и неочевиден. Поэтому в подобных случаях приходится действовать путём трюков.
👍40❤‍🔥531🔥1
...И вернулся наконец к "Гомотопической теории типов для программистов".
Некоторые определения пока получаются рекурсивными )))

Например когда изучаем абстракции Петель и Путей, приходится добавлять понятие Базовой точки. Так-то все эти понятия по большому счёту на уровне алгебры и геометрии обычной старшей школы. Например, петля — это путь от точки к самой себе :) И третьеклассник поймёт.

Базовая точка здесь принципиально важна, так как именно относительно неё формируется петля, но засада в том, что от базовой точки измеряются все гомотопические эквивалентности, которым соответственно надо дать отдельное определение. Тут мы добираемся до pointed типа, который позволяет определить конструкции, зависящие от конкретной точки отсчёта (например, фундаментальная группа пространства). Теперь надо разобраться с первой гомотопической группой, и с рекурсивными определениями функций из высших индуктивных типов в другие типы, однако до HIT мы ещё не добрались, а когда берём высший индуктивный тип Окружность, смотрим, почему фундаментальная группа окружности изоморфна группе целых чисел Z, откуда возвращаемся к гомотопической эквивалентности и группе петель...

Но что интересно, все эти рекурсивные определения весьма неплохо понимаются 🙃
Просто терминология такая математическая, но на самом деле сами понятия весьма простые, делаем их наглядные реализации на Python.

Попутно откопал классный разбор на пальцах этих темок в нескольких абзацах с картинками. Так-то это второй третий курсы универа, или даже физ-мат школы.
👍47❤‍🔥653😁1