oleg_log
1.77K subscribers
1.86K photos
130 videos
9 files
2.77K links
Shelter for antisocial programmers "Oleg"

halp: @olegkovalov
web: https://olegk.dev
fov: @oleg_fov
chat: @oleg_log_blabla
podcast: @generictalks
Download Telegram
Что лично меня больше всего бесит в процессе написания кода - это тулинг и настройки окружения.

Нельзя просто взять и начать нормально работать. Сначала надо прочитать мануалы по настройке. И... обломаться, потому что с момента написания мануала сменилось 2 мажорные версии.
Почитать все релевантные ишью на гитхабе, пролистать stack overflow, откатиться к версиям, которые использовали на момент написания мануала.
Зафиксировать версии, чтоб случайно что-то не обновилось...

Через некоторое время все начнет тормозить. И опять по кругу - ишью на гитхабе, мануалы на medium, stack overflow...

Но если ты решил что-то поменять...

- "Обнови npm! Вышла новая мажорная версия! У тебя 6.14, а вышла 7.5". ЭЭЭ... А где были 7.1-7.4? Ну ок... Слетают все сохраненные токены к приватным репам. Как ты их настраивал - хз. Лезешь в доки, разбираешься.

- "request перестали поддерживать, замени на другое". Ладно, что там у фронтов? axios? Что может пойти не так? Это же просто http клиент... 3 часа ищешь как установить лимит на request timeout. Знаете как? НИКАК! Ну т.е. в интернете есть пяток (!) рецептов, но ни один не работает...

- Пора поменять flow на ts. Да, знаю, это другое, но все-таки... Нужен аналог
 $PropertyType Type, 'prop'  
Похоже, что это
 Pick Type, 'prop'  
... Чет не так работает.... А потому что это вам не это! Аналог -
 Type['prop'] 
Сцукоооооо....

- Так, что там с ts в качестве тестранера используют... Ага, убираем ava, берем jest... Хз, что там в джесте происходит, но тесты, которые отрабатывают за 20 секунд при запуске через ava, на jest я выключил через 5 минут, потому что мне надоело. ПЯТЬ МИНУТ!!! Если запускать тесты по одному - работает, но занимает в 3-4 раза больше времени...

Думаете так только в js? Ха! Java, python, haskell, c, c++ - я всякое пробовал. Везде ад. Где-то лучше, где-то хуже, но везде. На go плюс-минус ничего, но только если вы смогли настроить GOPATH и не забили на этом этапе :) Ну и если все нужные вам пакеты доступны на гитхабе и подходят под ту версию рантайма, которую вы используете...

"А давайте изобретем сборщик на java и будем им билдить плюсы!" Ну, бл, давайте... Помогло? Нет конечно! Но теперь у нас есть +1 сборщик, с которым нужно разбираться (bazel).

Я не понимаю, почему до сих пор нет отдельных вакансий на писателей конфигов для линтеров и вебпаков, нет публичных реп от известных компаний с настройками IDE (с зафиксированными версиями пакетов и тестами на это) и вот этого всего. Мало того, что человек, на которого компания тратит в лучшем случае 500k в месяц (да-да, налоги, офис, больничные...), большую часть времени не думает, а работает как наборщица текста (купите tabnine), ему еще приходится и этой хренью заниматься.

Все это убивает время и увеличивает энтропию. От этого выгорают зумеры! (хотя зумеры от всего выгорают...)

Однажды Резерфорд зашел поздно вечером в свою лабораторию и увидел там, несмотря на неурочный час, одного из своих подававших надежды сотрудников.
«Что вы делаете здесь так поздно?» — удивился ученый.
«Работаю», — ответил подававший надежды.
«Что же вы, в таком случае, делали днем?»
«Разумеется, работал».
«А утром? Неужели и утром вы тоже работали?»
«И утром тоже».
«Позвольте, — неподдельно изумился Резерфорд, — а когда же вы думаете?» — и перестал возлагать на этого сотрудника особые надежды.
угадайте кто ночью 4 раза просыпался и делал k delete pods -n kek lol дада, это я. кубернетес чтобы рестартить сервисы руками, как тебе такое, Kelsey?
*детские и взрослые слезы радости*

In this repository you'll find the fully reversed source code for GTA III (master branch) and GTA VC (miami branch).

https://github.com/GTAmodding/re3
oleg_log
*детские и взрослые слезы радости* In this repository you'll find the fully reversed source code for GTA III (master branch) and GTA VC (miami branch). https://github.com/GTAmodding/re3
- Is it true that NPC cars are not checked for collision? And collision checking only starts when something happens near?
- This is sort of true, they are "on rails" (meaning no physics calculations are performed) until something collides with it, like a bullet, a car or a player. At that point they are handed off to a more expensive process which includes checking physics each frame.

и это красиво.

https://news.ycombinator.com/item?id=26130320
едем
Вы же наверное слышали, что в Python завозят pattern matching. Как всегда не все довольны.

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

Да и конструкция довольно популярна в других языках, супер-сомнительного новаторства нет.

У меня как-то даже болело, что все приходится писать через elif (else+if который), когда и так было понятно, что мог бы быть свитч.

https://github.com/gvanrossum/patma (спасибо Антону за пинг)
Готовитесь к собеседованиям? (Перед тем как ругаться на варианты ответа, вспомните про 10 вариантов и то, сколько есть причин и видов собесов, поэтому «имеем что имеем»)
Anonymous Poll
10%
Да, я джун
25%
Да, я мидл
25%
Да, сеньор
4%
Нет, джун
11%
Нет, мидл
17%
Нет, сеньор
2%
Другое (в коменты)
7%
Не применимо
Пока люди хвастаются, как они продали биткоин по 28к (когда он перепрыгнул 50к), я дебажу network policies в Kubernetes. Это веселее.

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

  egress:
- to:
- podSelector:
matchExpressions:
- key: app
operator: In
values:
- kek-api
- namespaceSelector:
matchExpressions:
- key: name
operator: In
values:
- FOO

Все смотрится ок, да? Вот только лейблов name=FOO на неймспейсе FOO не было.

Советую https://github.com/ahmetb/kubernetes-network-policy-recipes (тут как раз это было в ридми, мол сделай kubectl label namespace/other team=operations и дерзай, но это сложнее чем кажется)

(UPD мем в профанкторе как раз про это)
Осмелюсь (хоть и частично) не согласится с данным постом https://xn--r1a.website/manandthemachine/650 (тлдр про систем дизайн/архитектурное интервью)

Я давно в @oleg_log_plus (внезапно реклама) про это говорил и суть проста: если вы будете спрашивать только про лоад-балансеры, всякик NoSQL, CAP (зачем-то) и другие крутые слова, то вы ничего не проверите, ну разве что кто-то пролистывал Медиум по теме.

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

Возвращаясь к посту, который я накатал ранее. Спрашивать надо про дизайн системы доставки пиццы, как автоматизировать эскалаторы в ТЦ и как должен работать ЦУП.

Вот тут-то вы и проверите, насколько ваш кандидат умеет мыслить над проблемой, анализировать требования и задавать каверзные вопросы, пытаясь не зафейлить собес.

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

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

Еще одно: надо не только вам задавать эти вопросы, но и самим ходить на подобные собесы, тупо умнеть будете.
1 из аргументов, почему бояться N**2 не надо. https://twitter.com/BruceDawson0xB/status/1120381406700429312
Захватывающая история о неработающей синхронизации в rsync, причиной которой был баг 24-летней (!) давности в реализации протокола TCP Linux ядра. Буквально через несколько часов после появления письма с описанием проблемы в рассылке Neal Cardwell подготовил патч с исправлением (фикс из двух строк). Знаю Neal Cardwell как автора packetdrill - утилиты для функционального тестирования TCP, IP протоколов. С её помощью тесткейсы для тестирования можно описывать на DSL в декларативном стиле и они выглядят короче и нагляднее, чем такой же тексткейс, но на Си.

 Create a listening TCP socket.
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0 bind(3, ..., ...) = 0
+0 listen(3, 1) = 0

// Establish a new connection.
+0 < S 0:0(0) win 32792 <mss 1000,sackOK,nop,nop,nop,wscale 7>
+0 > S. 0:0(0) ack 1 win 29200 <mss
1460,nop,nop,sackOK,nop,wscale 6>
+.1 < . 1:1(0) ack 1 win 257
+0 accept(3, ..., ...) = 4

// sequence number out of window!
+.010 < R. 29202:29202(0) ack 1 win 257

// verify that the connection is OK
+.010 write(4, ..., 1000) = 1000
+0 > P. 1:1001(1000) ack 1


https://engineering.skroutz.gr/blog/uncovering-a-24-year-old-bug-in-the-linux-kernel/
Ничего супернеобычного, но за конфиг nginx отдельный лайк
Chrome фичу с группами вкладок из альфы достал, правда 1й опыт показал, что особо ничего этого (в моем флоу) не давало
Вы менеджерами паролей пользуетесь? Если да, то какими и почему?

Укажите еще, пожалуйста, это для приватной жизни или на работе "впарили". Все же это имеет значение)
Долгожданный (для меня) пост об изменениях в модулях для го 1.16

Не мутируем теперь го.мод на каждый чих, пожалуй самое важное. Ну и по дефолту теперь включены. Уиииииииии

https://blog.golang.org/go116-module-changes

UPD: я сильно ступил, пропустив module retraction, когда ответственный автор либы может пушнуть инфо про плохие версии всем пользователям либы. Это ж отличная вещь чтобы быть из коробки!