Forwarded from UfoStation
ByteByteGo_System-Design.pdf
37.8 MB
System Design. The Big Archive
Большая памятка от ByteByteGo для подготовки к собеседованиям или расширения кругозора.
Некоторые вопросы из книги:
— Deployment strategies
— Tradeoff between latency and consistency
— AWS Lambda behind the scenes
— Why is Redis so Fast?
— Why is Kafka fast?
— How does Twitter work?
— Stock exchange design
Большая памятка от ByteByteGo для подготовки к собеседованиям или расширения кругозора.
Некоторые вопросы из книги:
— Deployment strategies
— Tradeoff between latency and consistency
— AWS Lambda behind the scenes
— Why is Redis so Fast?
— Why is Kafka fast?
— How does Twitter work?
— Stock exchange design
👍32🤡2
Forwarded from Пятиминутка PHP
Антон Морев показал как он работает на 7 мониторах - я был впечатлён 🤯
Говорит обычно у него с десяток запущенных PhpStorm, пару сотен вкладок в браузере, множество docker контейнеров, больше всего не любит перезагружать комьютер - перезагрузка отнимает много времени.
2 видеокарты, 96 Гб оперативки, 5,5 Тб SSD, чтобы не разбирать хлам файлов просто докупает новые SSD по терабайту - моё почтение!
https://youtu.be/z8pnoBh9o9s?si=RA5g--7htjT1oNQt
Говорит обычно у него с десяток запущенных PhpStorm, пару сотен вкладок в браузере, множество docker контейнеров, больше всего не любит перезагружать комьютер - перезагрузка отнимает много времени.
2 видеокарты, 96 Гб оперативки, 5,5 Тб SSD, чтобы не разбирать хлам файлов просто докупает новые SSD по терабайту - моё почтение!
https://youtu.be/z8pnoBh9o9s?si=RA5g--7htjT1oNQt
YouTube
7 мониторов - отличное решение для программиста
Решил поделиться тем, как устроена "мониторная" часть моего рабочего места. Я давно работаю на 6 мониторах и, недавно добавился седьмой. Уже есть мысли куда поставить восьмой, но об этом когда-набудь потом:)
В ролике поделился своим путем к 7 мониторам …
В ролике поделился своим путем к 7 мониторам …
🤡37🤯11👍6👎4💩4❤1😁1
Время от времени обновляется индекс популярности TIOBE для языков программирования. И постоянно его публикуют различные сми, каналы, обсуждают в подкастах. Но блин, этот индекс строится на анализе статистики поисковых запросов.
Т.е. по сути это не самые распространенные языки, а языки, которые вызывают много вопросов! (литералли)
Например, если кто-то спросит в гугле "ну почему python такое говно", то это прибавит в индексе TIOBE питону лишний балл.
Вот текущий топ, как обычно немного всратый:
1 Python
2 C
3 C++
4 Java
5 C#
6 JavaScript
7 PHP
8 Visual Basic
9 SQL
10 Scratch
11 Go
12 Fortran
13 Delphi/Object Pascal
14 MATLAB
15 Assembly language
16 Swift
17 Kotlin
18 Ruby
19 Rust
20 COBOL
Т.е. по сути это не самые распространенные языки, а языки, которые вызывают много вопросов! (литералли)
Например, если кто-то спросит в гугле "ну почему python такое говно", то это прибавит в индексе TIOBE питону лишний балл.
Вот текущий топ, как обычно немного всратый:
1 Python
2 C
3 C++
4 Java
5 C#
6 JavaScript
7 PHP
8 Visual Basic
9 SQL
10 Scratch
11 Go
12 Fortran
13 Delphi/Object Pascal
14 MATLAB
15 Assembly language
16 Swift
17 Kotlin
18 Ruby
19 Rust
20 COBOL
🤷♂11🌭5🤡2😁1💩1
Опрос для Go-разработчиков. Только для языка Go!
Какое у вас требование к обязательному покрытию кода тестами? Выберите ближайшую цифру
Какое у вас требование к обязательному покрытию кода тестами? Выберите ближайшую цифру
Anonymous Poll
13%
Нет обязательного покрытия
2%
100
1%
90
8%
80
5%
70
4%
60
1%
50
4%
< 50
63%
мне просто посмотреть
😁12🤡2
Почему я сделал этот опрос ☝️. Дело в том, что формальное требование в 80% покрытия тестами для языка Go на мой взгляд трудновыполнимо. Например, добавился такой новый код (псевдокод):
err := zaprosSelectVBazu(....)
if err != nil {
return fmt.Errorf("zapros error: %w", err)
}
err = drugoyZaprosSelectVBazu(...)
if err != nil {
return fmt.Errorf("drugoy zapros error: %w", err)
}
и т.д.
Т.е. значимых тут строк две, которые стоит покрыть тестами, но есть еще две - это обработка ошибок, которые фиг знает, зачем покрывать.
Т.е. покрытие тут будет 50%. Это если логов нет прямо тут, иначе будет еще хуже. И что вы делаете, если у вас пайплайн жестко настроен на то, чтобы новый код был покрыт не меньше 80%?
Ну т.е. можно, конечно, подсунуть вместо данных мусор, и проверить, что есть ошибка, но что это даст с точки зрения качества кода и его поддерживаемости? Имхо это лишнее.
В других языках был бы try ... catch, который бы для таких случаев ловил сразу всё один раз и выдавал а-ля http 500, но это же го.
При этом 40 человек ответили, что у них обязательное покрытие 80%. Я чего-то не понимаю, как вы это делаете, ребят?
err := zaprosSelectVBazu(....)
if err != nil {
return fmt.Errorf("zapros error: %w", err)
}
err = drugoyZaprosSelectVBazu(...)
if err != nil {
return fmt.Errorf("drugoy zapros error: %w", err)
}
и т.д.
Т.е. значимых тут строк две, которые стоит покрыть тестами, но есть еще две - это обработка ошибок, которые фиг знает, зачем покрывать.
Т.е. покрытие тут будет 50%. Это если логов нет прямо тут, иначе будет еще хуже. И что вы делаете, если у вас пайплайн жестко настроен на то, чтобы новый код был покрыт не меньше 80%?
Ну т.е. можно, конечно, подсунуть вместо данных мусор, и проверить, что есть ошибка, но что это даст с точки зрения качества кода и его поддерживаемости? Имхо это лишнее.
В других языках был бы try ... catch, который бы для таких случаев ловил сразу всё один раз и выдавал а-ля http 500, но это же го.
При этом 40 человек ответили, что у них обязательное покрытие 80%. Я чего-то не понимаю, как вы это делаете, ребят?
👍13😁4🤡3💯2🤔1
https://habr.com/ru/articles/789526/
Ужасно, конечно, что можно себе подпортить карьеру навсегда. Или СБ найдет какой-то проступок молодости или внезапно ваши тройки в университете (20 лет назад) будут на что-то влиять. Видел вакансии с требованием "An exceptional academic track record from both high school and university"
Ужасно, конечно, что можно себе подпортить карьеру навсегда. Или СБ найдет какой-то проступок молодости или внезапно ваши тройки в университете (20 лет назад) будут на что-то влиять. Видел вакансии с требованием "An exceptional academic track record from both high school and university"
Хабр
Как я внезапно стал «наркоманом» и не прошел СБ в нескольких госбанках
Вместо вступления На фоне событий последних лет в РФ, в прошлом году решил я распрощаться с компанией в США, в которой проработал 6 лет. Закрыл ИП, юр. счета. На фоне заявлений, дескать, сейчас в...
👍11😢8😱5🤷♂4🤡2🔥1
Появилось исследование на предмет влияния требования возвращения в офисы (RTO) на различные показатели. Анализировались компании из S&P500. В результате выяснилось, что финансовые показатели при возвращении в офисы никак не улучшаются, а удовлетворённость сотрудников падает.
https://deliverypdf.ssrn.com/delivery.php?ID=689110098112003004031017067005075075039006014007064066093070077069026023112003095081038035000043106003046064017116085080085127027053082084022064075127083127101076120084047038089073118002076021087115026025117093107092121112078110084069086073066081017112&EXT=pdf&INDEX=TRUE
https://deliverypdf.ssrn.com/delivery.php?ID=689110098112003004031017067005075075039006014007064066093070077069026023112003095081038035000043106003046064017116085080085127027053082084022064075127083127101076120084047038089073118002076021087115026025117093107092121112078110084069086073066081017112&EXT=pdf&INDEX=TRUE
Ssrn
Return-to-Office Mandates
Using a sample of Standard and Poor’s 500 firms, we examine determinants and consequences of U.S. firms’ return-to-office (RTO) mandates. Results of our determi
👍20❤4🤡4
смотрите-ка, кто-то прочитал мои мысли. В одном посте я предлагал внедрять нейролинк и записывать всё, что есть в мозгу, чтобы обучать человекоподобных роботов. А тут люди сделали попроще - тупо навесили на ребёнка камеру и обучают по ней ИИ говорить (https://hightech.plus/2024/02/02/rebenok-s-kameroi-na-golove-pomog-ii-nauchitsya-govorit).
🔥10🤡3
Как вы наверно уже знаете, вышел Go 1.22, об этом все уже написали. В том числе, в Go добавили (пока что в экспериментальном режиме, под флагом) итераторы. Т.е. оператор yield и прочие штуки, которые есть уже наверно во всех языках. Теперь затащили и в Go. Ну ок.
Вещь, конечно, полезная, уберёт многословность, например, при обработке ответа из базы. А где-то и лишние каналы. Но ёлы-палы, неужели это самая главная проблема?
Имхо, если уж добавлять сахар, то в самом главном месте. По всем опросам среди раздражающих факторов языка обработка ошибок по-прежнему лидер №1 с большим-пребольшим отрывом. И разработчки Go не могут этого не видеть.
Кроме того, есть куча пропозалов с различными вариантами, как это упростить, не нарушая явность обработки ошибок. Так в чем же дело? Неужели есть какая-то прям нерешаемая проблема?
Бесит всё 🙂
Вещь, конечно, полезная, уберёт многословность, например, при обработке ответа из базы. А где-то и лишние каналы. Но ёлы-палы, неужели это самая главная проблема?
Имхо, если уж добавлять сахар, то в самом главном месте. По всем опросам среди раздражающих факторов языка обработка ошибок по-прежнему лидер №1 с большим-пребольшим отрывом. И разработчки Go не могут этого не видеть.
Кроме того, есть куча пропозалов с различными вариантами, как это упростить, не нарушая явность обработки ошибок. Так в чем же дело? Неужели есть какая-то прям нерешаемая проблема?
Бесит всё 🙂
Bitfield Consulting
Iterators in Go: the iter package and new stdlib APIs — Bitfield Consulting
Iterators in Go are a neat way to write “lazy loops”, where we never generate more results than we actually use. Let’s see what that would look like in Go programs, and what new facilities it gives us in the standard library.
😁13👍6❤1🤡1
Интересная статья о том, что корпорации очень далеко ушли от понятия agile, где по задумке команды должны работать адаптивно, автономно и в соответствии с насущными вечно меняющимися потребностями. Но при этом компании продолжают называть аджайлом свои по сути waterfall-процессы с четким планированием и внешним контролем над всеми внутрикомандными процессами.
"Корпоративный Agile пытается отдать приоритет адаптации И предсказуемости, не осознавая, что нужно выбрать что-то одно"
Автор предлагает или перейти к настоящему basic-аджайлу или честно называть происходящее водопадом.
https://bits.danielrothmann.com/corporate-agile
"Корпоративный Agile пытается отдать приоритет адаптации И предсказуемости, не осознавая, что нужно выбрать что-то одно"
Автор предлагает или перейти к настоящему basic-аджайлу или честно называть происходящее водопадом.
https://bits.danielrothmann.com/corporate-agile
👍21🤡2
Появился новый форк nginx из-за разногласий разработчиков с руководством F5: freenginx
Интервью Рыбака с автором форка: https://habr.com/ru/articles/794096/
Интервью Рыбака с автором форка: https://habr.com/ru/articles/794096/
👾7😁1
Media is too big
VIEW IN TELEGRAM
Недавно прогремела нейросеть, генерящая видосы из промптов. Внимание, вопрос: сколько волчат на видео?
😁28❤1
Узнал сегодня небольшой хак из мира Postgres. Например, у вас есть таблица с купонами, и у купонов есть некая дата устаревания valid_until. Допустим, вам надо обеспечить такой констрейнт, чтобы у одного человека не было одновременно больше одного неустаревшего купона.
Например, таблица изначально выглядит так:
Думаю, всем известно, что есть ключевое слово UNIQUE, с помощью которого можно обеспечить уникальность какого-то поля/полей. Но напрямую оно нам не подойдет, так как в базе могут остаться устаревшие купоны, которые будут конфликтовать со свежими.
Также многим известно, что UNIQUE может идти с условием. Казалось бы, добавить просто к констрейнту WHERE (valid_until > NOW()) и дело с концом. Однако так нельзя: невозможно сделать констрейт по функции, которую заранее не вычислить. Т.е. WHERE (is_valid) бы прокатило, но не сравнение с NOW().
Можно выкрутиться с помощью триггера, но есть способ поэлегантнее.
В посгресе есть тип данных tsrange (диапазон времени), а также ключевое слово EXCLUDE, с помощью которого можно запретить вставку строк, где диапазоны пересекаются:
EXCLUDE USING GIST (tsrange(created_at, valid_until) WITH &&)
Но это условие действует на всю таблицу, а не в рамках юзера. Поэтому надо добавить еще одно:
EXCLUDE USING GIST (user_id WITH =, tsrange(created_at, valid_until) WITH &&)
(чтобы это работало, нужно сначала включить расширение btree_gist: CREATE EXTENSION IF NOT EXISTS btree_gist;)
Итого, проверяем:
последний insert не пройдёт: "ERROR: conflicting key value violates exclusion constraint"
Например, таблица изначально выглядит так:
CREATE TABLE coupons (
id bigint primary key generated by default as identity,
user_id bigint not null,
created_at timestamp not null,
valid_until timestamp not null
)
Думаю, всем известно, что есть ключевое слово UNIQUE, с помощью которого можно обеспечить уникальность какого-то поля/полей. Но напрямую оно нам не подойдет, так как в базе могут остаться устаревшие купоны, которые будут конфликтовать со свежими.
Также многим известно, что UNIQUE может идти с условием. Казалось бы, добавить просто к констрейнту WHERE (valid_until > NOW()) и дело с концом. Однако так нельзя: невозможно сделать констрейт по функции, которую заранее не вычислить. Т.е. WHERE (is_valid) бы прокатило, но не сравнение с NOW().
Можно выкрутиться с помощью триггера, но есть способ поэлегантнее.
В посгресе есть тип данных tsrange (диапазон времени), а также ключевое слово EXCLUDE, с помощью которого можно запретить вставку строк, где диапазоны пересекаются:
EXCLUDE USING GIST (tsrange(created_at, valid_until) WITH &&)
Но это условие действует на всю таблицу, а не в рамках юзера. Поэтому надо добавить еще одно:
EXCLUDE USING GIST (user_id WITH =, tsrange(created_at, valid_until) WITH &&)
(чтобы это работало, нужно сначала включить расширение btree_gist: CREATE EXTENSION IF NOT EXISTS btree_gist;)
Итого, проверяем:
CREATE EXTENSION IF NOT EXISTS btree_gist;
CREATE TABLE coupons (
id bigint primary key generated by default as identity,
user_id bigint not null,
created_at timestamp not null,
valid_until timestamp not null,
EXCLUDE USING GIST (
user_id WITH =,
tsrange(created_at, valid_until) WITH &&
)
);
INSERT INTO coupons(user_id, created_at, valid_until)
VALUES
(100500, now(), now() + interval '1 day');
INSERT INTO coupons(user_id, created_at, valid_until)
VALUES
(100501, now(), now() + interval '10 day');
INSERT INTO coupons(user_id, created_at, valid_until)
VALUES
(100500, now(), now() + interval '10 day');
последний insert не пройдёт: "ERROR: conflicting key value violates exclusion constraint"
👍28🔥10🌚1
На реддите появилась статья "Популярные настройки git "
Например, автокоррекция опечаток: git ocmmit -> git commit
Или как подключить разные настройки для разных путей (можно задать разные e-mailы для личных и рабочих репозиториев)
Я для себя нашел пару полезных вещей
Например, автокоррекция опечаток: git ocmmit -> git commit
Или как подключить разные настройки для разных путей (можно задать разные e-mailы для личных и рабочих репозиториев)
[includeIf "gitdir:~/code/<work>/"]
path = "~/code/<work>/.gitconfig"
Я для себя нашел пару полезных вещей
👍19❤3
Cross Join - канал о разработке
Узнал сегодня небольшой хак из мира Postgres. Например, у вас есть таблица с купонами, и у купонов есть некая дата устаревания valid_until. Допустим, вам надо обеспечить такой констрейнт, чтобы у одного человека не было одновременно больше одного неустаревшего…
Оформил пост в статью на Хабре. Плюсаните, кто может )
Хабр
PostgreSQL: обеспечение уникальности записи с проверкой даты валидности
Как бы вы решали такую задачу? Предположим, есть таблица с купонами, и у купонов есть некая дата устаревания valid_until. Вам надо обеспечить такое ограничение (constraint) на уровне БД, чтобы у...
❤10🔥4👍2💩2
Котлин немного странный.
Если код на Java такой:
То на Котлине это будет
Во-первых, кому помешало слово new? А во вторых, почему лямбда-функция из второго аргумента аргумента переместилась куда-то наружу, за скобки? В чем логика-то?
С непривычки мозгу это как-то сложно распарсить.
Upd. Чтобы строить DSL
Если код на Java такой:
MyClass myObject = new MyClass("abc", n -> System.out.println(n));
То на Котлине это будет
val myObject = MyClass("abc") { n -> println(n) }
Во-первых, кому помешало слово new? А во вторых, почему лямбда-функция из второго аргумента аргумента переместилась куда-то наружу, за скобки? В чем логика-то?
С непривычки мозгу это как-то сложно распарсить.
Upd. Чтобы строить DSL
🤡21😁5👎4👍3🤯1
Недавно заопенсорсили Puter - так называемую "Internet OS". Там можно кодить в vscode, рисовать и прочие штуки. Короче, имитация десктопа операционной системы в браузере.
Но самый прикол, что там всё написано на jQuery :). А вы смеялись над выходом 4 версии )))
Но самый прикол, что там всё написано на jQuery :). А вы смеялись над выходом 4 версии )))
🔥13👍3❤1
Forwarded from StarScream Broadcasting
Составлял на работе “индивидуальный план развития сотрудника” и понял что именно мне не нравится в этой штуке.
1. Нет никакой связи между задачами на работе и этим самым развитием. Можно качать навык по БД но если задач на это нет - то и навык быстро уйдет и не закрепится.
2. На развитие нужно время и ресурсы - или программист тратит свое личное время, или тратит рабочее. Ни компания ни человек - особо тратить свое время и ресурсы не хотят.
3. Мотивация - выполнение какого либо пункта из плана развития сотрудника никак на него не влияет. И тут вопрос даже не про повышение оклада или грейда - а про промежуточные шаги, прогресс по развитию.
4. Выставление целей по методикам типа STAR на начальном этапе чаще всего туманно. Непонятно можно ли будет получить практический результат, можно ли его будет оценить?
5. ИПР это штука обязательная, но почему-то за пару лет все синьорами не стали. И не станут. И не факт, что хотят. И не факт, что нужно.
6. Есть бизнес задачи, цели спринта, итерации, квартала, до отпуска надо дожить, давайте после майских. Развитие не в фокусе. И это относится и к разработчику и к руководителю.
Как заставить эту штуку работать? И быть полезной и сотруднику и тимлиду? Что я делаю или пробую делать.
1. Нужен список болей, проблем, точек роста конкретно у вас на рабочем месте. Запросы долгие, процесс хромает, документации мало - с таким списком сотруднику будет легче выбрать навык который он может прокачать на практической проблеме.
2. Не делайте эту штуку обязательной: кто-то просто не захочет делиться своими планами, у кого то они просто не совпадают с вашими. Шапочно знаю одного девопса который активно осваивает пивоварение в свободное время и уже строит себе цех под Кропоткиным(никакого кубернетеса).
3. Если у человека все таки есть план развития - и он сам его составил, помогайте, спрашивайте про прогресс, отмечайте его.
Всякие штуки типа evolution review могут быть полезными только если обе стороны видят в них пользу иначе это свалится в бюрократию и демагогию.
1. Нет никакой связи между задачами на работе и этим самым развитием. Можно качать навык по БД но если задач на это нет - то и навык быстро уйдет и не закрепится.
2. На развитие нужно время и ресурсы - или программист тратит свое личное время, или тратит рабочее. Ни компания ни человек - особо тратить свое время и ресурсы не хотят.
3. Мотивация - выполнение какого либо пункта из плана развития сотрудника никак на него не влияет. И тут вопрос даже не про повышение оклада или грейда - а про промежуточные шаги, прогресс по развитию.
4. Выставление целей по методикам типа STAR на начальном этапе чаще всего туманно. Непонятно можно ли будет получить практический результат, можно ли его будет оценить?
5. ИПР это штука обязательная, но почему-то за пару лет все синьорами не стали. И не станут. И не факт, что хотят. И не факт, что нужно.
6. Есть бизнес задачи, цели спринта, итерации, квартала, до отпуска надо дожить, давайте после майских. Развитие не в фокусе. И это относится и к разработчику и к руководителю.
Как заставить эту штуку работать? И быть полезной и сотруднику и тимлиду? Что я делаю или пробую делать.
1. Нужен список болей, проблем, точек роста конкретно у вас на рабочем месте. Запросы долгие, процесс хромает, документации мало - с таким списком сотруднику будет легче выбрать навык который он может прокачать на практической проблеме.
2. Не делайте эту штуку обязательной: кто-то просто не захочет делиться своими планами, у кого то они просто не совпадают с вашими. Шапочно знаю одного девопса который активно осваивает пивоварение в свободное время и уже строит себе цех под Кропоткиным(никакого кубернетеса).
3. Если у человека все таки есть план развития - и он сам его составил, помогайте, спрашивайте про прогресс, отмечайте его.
Всякие штуки типа evolution review могут быть полезными только если обе стороны видят в них пользу иначе это свалится в бюрократию и демагогию.
👍32❤9👏2🤮1
Cognition labs разработали ai-программиста, который по их словам пользуется IDE, браузером, самообучается, коммуницирует с "заказчиком" для уточнения деталей, а самое главное - в тесте SWE-bench (решение реальных проблем с гитхаба) достиг показателя в 13%, что в 10 раз лучше всех других подобных попыток.
Чё делается-то
https://www.cognition-labs.com/blog
Чё делается-то
https://www.cognition-labs.com/blog
😁7👍6🔥3🥰2💩2🥱1