Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.19K photos
24 videos
930 links
ЛаМПовое с Бобровским
Download Telegram
Лаборатория Математики и Программирования Сергея Бобровского
В ряде ситуаций, когда вы провалили собес, это может быть к лучшему не только в плане опыта. Например, Брайан Эктон не прошёл в 2009-м стандартное техническое собеседование в facebook, и с горя запилил whatsapp. Сперва, кстати, это была просто мобильная программка…
"Термы -- это деревья, а деревья -- это термы"
-- Банчи (книга "Конечные автоматы, их алгебры и грамматики – к теории формальных выражений")

Компиляторы, автоматы, AST, правила вывода, разбор json, редьюсинг алгебраических выражений, паттерн матчинг и многое многое другое -- это всё про переписывание термов.

На F# пацаны разбирают что-то вроде (^f.(^x.f(^y.xxy))(^x.f(^y.xxy))) легко и просто (редуцируется этот терм к нормальной форме? неа, он рекурсивен; подумайте, почему), а вот если термов сотня миллионов?? )))

Например, можно запилить hott-плагин для Lean , сэмулировав аксиому унивалентности:

universe u

constant U : Type u

-- простейшая версия эквивалентности типов :)
constant equiv : U → U → Type u
axiom univalence : ∀ (A B : U), equiv A B → A = B

example (A B : U) (e : equiv A B) : A = B := univalence A B e


Или расширить новыми теориями инструменты формальной верификации криптографических протоколов ProVerif или Tamarin (в них тоже активно используются термы и правила их переписывания) ...

=

Однако с лёгкой печалью обнаружил, что vds с озу 200 гиг под подобные задачки стоит дороже, чем дедик, меньше $100/месяц не получается...
(и хорошо масштабируемый русский облачный сервис для Jupyter я тоже не нашёл)

Рабочие станции Dell 7920, HP Z8 G4, Lenovo P920 (потенциально терабайты оперативки) продаются с 16 гб (!) от трёх тысяч долларов (а серваки уже от $5 тыс). Какие-то мутные материнки вроде ASUS ROG Rampage VI Extreme Encore 128гб продаются за 100 долларов, но крайне сомнительно, reconditioned сгорит через неделю.
1🤯59🔥10👍8🫡42
Вкатываемся в понедельник 💪🏻💪🏻💪🏻

По картинке кстати ничего странного, совершенно типовая ситуация: пацан явно не проходил мой курс по software design, который так и называется: "Незримые механизмы логики". В частности, часть 2 "Как так получается, что вроде бы давно работающий код всё ещё содержит баги?".
138😁19👍7🤔3🫡2
Почему в своё время стали так популярны нетипизированные языки (PHP, Python, ...)? Потому что компьютеры тогда были столь слабы, что если пишешь код на языке со статической типизаций и включённым тайпчекингом, то каждое сохранение файла может длиться десятки секунд. Это дико бесило :)

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

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

С тех пор однако мэйнстрим тянет и тянет в массы "культуру" тестирования, объявляя её обязательной, хотя 90% закодированных вручную тестов в любой современной системе бесполезны (например, потому, что тесты нужны только если они не работают), и вместо них должны (бы) быть статические типы.

В любом случае, каждому разработчику, который хочет стать Программистом с большой буквы, 💯 полезно поиграть в такие высокоинтеллектуальные игры, как система типов в F# (и в F*), мета-программирование на темплейтах плюсов, генерики TypeScript, боль и страдание Rust :) и т.п. Такой этап в карьере стратегически весьма важен.
10👍6510🫡10🔥3
"На смену изумлению приходит ужас"

Последние новости от наших курсантов :)


В планах включить настройку по отключению/включению всех шедулеров, поскольку сейчас висит техдолг на их локальную отладку. В данный момент мы руками прописываем в начале выполнения шедулера return, чтобы он не стучался к той базе, к которой локально нет доступа:)

---

1. Мозг - глючное. Если не переносить мышление и особенно проектирование в экзокортекс - всегда просочится подобная "все-фигня" (читаю Левенчука понемногу :)
2. С протекшим в реализацию "не правильным" обобщением бороться можно, и в коде и инфраструктуре, но все как то сплошными костылями. Иногда эти костыли настолько ущербны и к тому же не очень просты (как минимум не дешевы по времени), что проще жить дальше, ибо...
3. Нормально делать и пытаться делать нужно было с самого начала. Тут мы плавно возвращаемся к пункту 1, где на примере опыта никто экзокортекс не использовал.

---

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

select ...
from card
join card_adv ca1 on card.id = ca1.id and ca1.field1 = 15 and ca1.field2 = 53
join card_adv ca2 on card.id = ca2.id and ca2.field1 = 48 and ca2.field2 = 19
...


---

По итогу перепроверили айпишники и правда, срок договора выделенных прямых айпи истек, аналитик продлил его и запрос отправился, шаг выполнился, но не следующий...
А все потому что 1с решил поменять жсон ответ с Да на "Да", наша кукухазачеркнуто десериализация по дто полетела на попытки спарсить булеву :)

--

Когда заглядываешь во внутрь тех структур данных которыми активно пользуешься, с них спадает магическая вуаль, и ты поражаешься что не так уж замысловато все устроено.
На смену изумлению приходит ужас, когда смотришь на свой старый код с этими структурами, понимая сколько лишних телодвижений происходит.
Благодаря курсу я немного пролечил свой синдром самозванца.
(Когда-то на собеседовании не смог динамический массив реализовать, теперь гештальт закрыт :)
335👍286🤔3🏆2
Как вы считаете, что более бесполезно?
Anonymous Poll
67%
алгоритмы
33%
структуры данных
😁57🤔287🤓3👍2
Смотрю, сейчас многие ноют дескать "найм сломан", "у меня 100500 лет опыта, а на моё резюме 0 отлкиков" бла бла бла.

Ну, тут либо твой опыт программирования столь впечатляющ, что кадровики просто не верят, что ты настоящий, а не AI 😂
либо это скрытая награда от Вселенной за то, что ты освободился от участия в очередном круге ада собеседований на давно уже закрытые вакансии.

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

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

Или нет?
1👍75🔥14🫡7🏆32
Когда тебе дают 60 миллиардов рублей на то, чтобы внедрить технологию, которая будет официально работать на 96%, и ни эти мифические проценты, не само "внедрение" проконтролировать ну никак невозможно (хотя для отчётности конечно нарисуют красивые kpi), понятно, ты будешь в первую очередь вкладывать миллионы рублей в свой пиар, чтобы создавалась видимость твоей активности. Например, проплачивать популярным ютуберам, чтобы они побольше ныли, что дескать средств доступа становится всё меньше. В ЦРУ очередная раздача премий 😎

В учебнике по языку спецификаций TLA+ вводится понятие формальных свойств системы -- не как инженерная характеристика, а как некоторый инвариант (в СильныхИдеях разбираю этот момент в материале "Формализуем понятие надёжности системы").

Самый сильный инвариант -- STRONG:
"во всех состояниях x находится под контролем (в допустимом диапазоне)"

Ну а в случае с 60 млрд. мы получим самый слабый инвариант WEAK:
"по крайней мере, в одном состоянии x находится под контролем"

И когда вокруг "весь этот горький катаклизм, который я здесь наблюдаю, и Владимир Николаевич тоже", инвариант WEAK совершенно бессмысленен.
246👍12🤔12🫡1
"Wildberries крадёт заказы. Жёсткий баг заставляет покупки СРАЗУ уезжать обратно на склад, даже если срок хранения не истёк. Деньги при этом списываются! Проблема висит уже больше четырёх часов."

В СильныхИдеях разбираю подобные случаи и рекомендую, что с ними можно поделать:

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

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

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

Мы ничего не можем поделать с последствиями ошибок данного класса -- обычно они весьма серьёзны, хотя мы и можем сделать эти вещи немного более управляемыми..."

Извините, вы обречены.
249👍13🫡5🔥31
Ну, дорогие, вы чего ↑ ↑ ↑

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

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

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

Короче, всем срочно на мой курс по software design "Незримые механизмы логики" 🙏

P.S. Shittier с картинки забираем тут.
150👍7🔥7🐳5🫡5
Ваша карьера программиста определяется не тем, насколько хороший код вы можете написать, а тем, насколько дерьмовый код вы можете прочитать, и затем улучшить.

Мой курс "Ясное легаси" в помощь.
1👍7217🏆8🔥3🫡1
Товарищи курсанты, в первый курс АСД добавлено 25 доп.задач (делать их обязательно:) все решения я проверяю). По достаточно сложным задачкам получаете бонус золота рейтинга на учебном сервере.

Разбираем, что такое радужные 🌈 таблицы, как ддосить хэш, как солить крипту, и т.п.

Кто уже проходил, можно перепройти (бесплатно, через платный курс), но обязательно на другом языке программирования (сейчас я поддерживаю на сервере C#, Java, Python и Go).
1🤝451610👍7🔥4
Тестирую "сломанность найма", завтра будут первые промежуточные результаты. Видите, даже хх ру не пускает, не хочет, чтобы я менял работу ☺️
1😁68👍6
Промежуточные итоги эксперимента по найму в течение трёх дней :)
Я типа парень 28 лет, 5 лет опыта в разработке.

278 показов. 7 просмотров. Ноль приглашений.

А всего 3-4 года назад за полдня по аналогичному резюме насыпалось полно классных офферов...

Однако пока поспешных выводов делать не будем. Сервисы по работе сильно изменились (теперь их откровенная цель -- побольше бабла:), к ним тоже надо адаптироваться. Раньше, по-моему, даже возможности отклика на вакансию не было.
В принципе, конверсия из показов в просмотры 1-3% это классика. Посмотрим как, просмотры в отклики конвертнутся.

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

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

P.S. Кстати, смотрю, реально много резюме программистов мужиков 40,50,60 лет. Видел даже одного 70-летку )
8👍58🤔34🔥4🥰2🫡2
Holy shit! It's impossible, but it happened…

25-го сентября переезд! )))

Провайдер, где у меня хостинг учебного сервера, и который 19 марта переименовался и слился с кем-то более крупным, оповещает:

...Мы запускаем процесс переноса услуг из устаревшего биллинга в новый биллинг ISP BillManager, и новую хостинговую платформу на базе Ispmanager.
Перенос Ваших услуг запланирован на 25 сентября 2024 года в течение рабочего дня.

...в новом личном кабинете будет подключена услуга виртуального хостинга, и начнется процесс переноса сайтов на новую платформу. В связи с этим, Ваши услуги могут быть недоступны до 30 минут в момент проведения работ.
...После завершения переноса мы проверим работу Ваших сайтов, внесём необходимые изменения, если таковые потребуются для корректной работы сайтов на новой платформе, и вы получите финальное уведомление о завершении переноса услуг. После которого Вам будет необходимо проверить работу сайтов и их административных интерфейсов со своей стороны.
Поменяются ip адреса сайта, почтового сервера, ftp сервера...
Поменяется основной ftp логин...
Изменятся пути к домашней директории, для совместимости будет создан симлинк, повторяющий старые пути, так что скрипты, использующие абсолютные пути, сломаться не должны...
После переезда возможно понадобится поменять сервер входящей и исходящей почты. Так же, если ранее использовался простой пароль, то по соображениям защиты от взлома он не будет установлен, и вместо него система сгенерирует более сложный пароль...
Внимание! Адресные книги, Фильтры (Rules), группы (Groups) и листы рассылок перенесены не будут. Также перестанет работать перенаправление почты на IP адрес (если таковое используется). Станет невозможным отправление почты от имени несуществующего ящика...

В письме нету вообще ни строчки, а зачем этот перенос нужен мне? Ну хотя бы для вида приврали, что дескать "после переноса у вас будет более удобный административный интерфейс, более быстрые серверы...".
И уж тем более никаких извинений "за доставленные неудобства". Но зато "Вам будет необходимо...".
С какой стати? Чтобы новый хозяин купил себе очередной Порш Panamera GTS?

Когда я буду директором ФАС, полностью запрещу любые слияния и поглощения, после которых качество сервиса для клиентов не становится значительно более высоким. Сейчас это 💯 противоположный процесс. Выигрывают в каждом таком случае пара человек -- владельцы объединяемых бизнесов, а тысячи пользователей в проигрыше.

=

Сейчас у меня там всё на PHP 7.0 :) поэтому не исключено, что 25.09.24 всё рухнет. В принципе, перебросить сайт на другой хостинг, ну 2-3 часа, причём основное время уйдёт больше на возню с настройками. Там учебные материалы да скрипты, и всё. Вся база mySQL, SQL-скрипт генерации вместе с данными, 545 кб ) Ни логов, ни истории я принципиально не веду, поэтому размер особо и не растёт.

Посмотрю что быстрее, если после "переноса услуг" потребуется долго всё восстанавливать, так скорее всего и сделаю.
🤯52👍197😁7🔥2
Ростелеком и Минцифры категорически опровергают. Проверить, понятно, уже невозможно, но кому выгодно?

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

Если это хакеры -- то для отвлечения внимания от реального взлома ГУ например.

Возможно, что просто кто-то решил хайпануть, набрать просмотров.

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

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

=

"По описанию - обычный IDOR. Скорее всего на бэке в ГУ ходят через суперучётку, а бэк для фронта не проверяет права доступа."

В любом случае, напомню азы: "Сети для самых маленьких." с акцентом на ACL (Access Control List), ну и конечно модный сегодня Broken Access Control (наиболее серьезная угроза современных веб-приложений, которая перешла с пятого на первое место в TOP-10 самых распространенных векторов атак) -- "Все, что нужно знать про BAC".
240👍17❤‍🔥4🏆4
"Can GPT-O1 Kill All Bugs? An Evaluation of GPT-Family LLMs on QuixBugs"

The results demonstrate that O1's repair capability exceeds that of prior GPT-family models, successfully fixing all 40 bugs in the benchmark.
7🤔5216👍5😁3
Скажу страшное, но ... PHP +Laravel снова возвращается... 🙈
(хотя есть и другие мнения)

Laravel намедни собрала $57 млн для серии А.... Увы, но похоже это будет новый JavaScript...
(но только с оглядкой на TypeScript)
45🤔28👍3🤯2🐳2
Свежее продолжение темы от Эрика нашего Мейера )))
(это святой cs, который в своё время сказал легендарную фразу "Why the fuck do we let people that have no computer science backgrounds write code? Unacceptable!")

I don't understand how anyone can write code anymore without AI assistance.

On the other hand, I also don't understand how (at this time) anyone that has no deep understanding of CS can write complex code with just AI.

Ergo, this is a fantastic time to be a developer; but enjoy it while you can!
59👍11🤔532