tgindex

Битмап / словарь разработчика

описание

Всё, что должен знать настоящий сеньор — короткие, но ёмкие заметки о разработке, инструментах, практиках, бизнесе. Выходят каждый день. Подписывайся!

450
подписчиков
Охват к подписчикам
144,7%
ERR
Реакции к просмотрам
1,04%
136 на 20 постов
Пересылки к просмотрам
0,35%
46
Постов в день
0,0
всего 20

Где отзываются чаще

доля реакций к просмотрам
  • 14 сент. 2024 г.SELECT FOR UPDATE — способ избежать состояния гонки (race condition) и взаимных блокировок в UPDATE, исполняющихся одновременною Поддерживается в Postgres, MySQL c InnoDB, Oracle. 📚 Например, пользователь покупает товары 1 и 4 в интернет магазине, и нам надо обновить остатки в БД: BEGIN; SELECT * FROM product_qty WHERE product_id IN (1,4) ORDER BY product_id FOR UPDATE; UPDATE product_qty SET qty = qty - 1 WHERE product_id IN (1,4); COMMIT; 🎯 Как это работает: 1️⃣ начинаем транзакцию 2️⃣ делаем SELECT ... FOR UPDATE: обновляем несколько строк, значит нужно использовать ORDER BY 3️⃣ дальше обычный UPDATE 4️⃣ наконец, COMMIT, чтобы завершить транзакцию и снять блокировки Без ORDER BY в п.2 одновремено исполняющиеся транзакции могут попытаться взять блокировки в разном порядке, что может привести к дедлоку. ⚠️ В зависимости от уровня изоляции транзакций, другие SELECT без FOR UPDATE могут получить устаревшие значения. 🔗 https://ru.wikipedia.org/wiki/Select_for_update2,38%
  • 21 сент. 2024 г.Мне кажется, это очень хорошо! А вы говорите "на русском"?2,01%
  • 15 сент. 2024 г.Транзистор — полупроводниковый компонент, который используется для усиления и преобразования аналоговых сигналов (например, звука), а также в качестве переключателя (ключа, switch) для цифровых сигналов. 📅 Изобретен в 1947 году в Bell Labs тремя учеными: Джоном Бардином, Уолтером Браттейном и Уильямом Шокли. Транзисторы пришли на замену менее надёжным и более громоздким вакуумным лампам, что позволило создать всю современную электронику — от простейших радио до самых современных миниатюрных процессоров. 🥇 Его создатали получили за своё изобретение Нобелевскую премию по физике в 1956 году. Количество транзисторов в процессорах увеличилось от всего 2,250 штук в Intel 4004, выпущенном в 1971 году, до сотен миллиардов в самых современных процессорах. Их размеры за это же время уменьшились до всего лишь десятков атомов: транзистор произведённый по 5-нм техпроцессу имеет размер около 70 атомов в ширину. А вот как выглядит первый в мире транзистор ⬇️ 🔗 https://www.youtube.com/watch?v=xvrjIJw3OSU1,88%
  • 18 сент. 2024 г.Пивот (pivot) — это серьёзное изменение в бизнес-модели или стратегии стартапа. 👌 Пивоты совершают стартапы, когда изначальная идея не приносит ожидаемых результатов. Обычно это затрагивает: • продукт и его позиционирование • целевую аудиторию • способ привлечения и удержания клиентов Пивоты важно совершать вовремя, пока есть ресурсы, и на основе обратной связи от реальных пользователей. 🔑 Ключевая задача разработки: уметь быстро превращать продукт из ужа в ежа и докатывать изменения до пользователей. 📚 Например, ваш стартап изначально делал приложение для фитнеса, ориентированное на профессиональных спортсменов. После анализа рынка и обратной связи от пользователей команда решает изменить фокус на более широкую аудиторию любителей фитнеса, добавляя функции, такие как отслеживание активности и персонализированные планы тренировок. Если это изменение позволяет привлечь новых пользователей, а юнит-экономика при этом сходится, его можно считать успешным. 🔗 https://ru.wikipedia.org/wiki/Пивот1,69%
  • 23 сент. 2024 г.А тем временем, канал уходит на каникулы! До связи 👋1,64%
  • 16 сент. 2024 г.🤗 На прошлой неделе мы писали про: - Задача двух генералов - Сериализация - Парное программирование - DFS - Lean-стартап - Same-origin policy - JSON5 - SELECT FOR UPDATE - Транзистор ❤️‍🔥 Может, уже что-то пригодилось?1,63%
  • 17 сент. 2024 г.Суррогатный ключ — сгенерированный уникальный идентификатор строки в реляционной БД. 💎 Зачем они нужны? Скажем, в таблице Users натуральным ключом может быть: • email или phone • username • комбинация first_name, last_name, birthday ⛔️ Натуральные ключи имеют недостатки: • при обновлении ключа придётся обновлять и связанные таблицы • требования к уникальности меняются: бизнес может разрешить разным клиентам использовать один email или телефон • их опасно использовать в публичных URL, API и т.п. ✅ Лучше использовать суррогатные ключи, никак не связанные с данными в таблице: • они гарантированно уникальны • просты в использовании • не меняются вместе с данными • индексы по ним обычно работают быстрее 📖 Суррогатный ключ можно сделать из монотонно растущего INTEGER: CREATE TABLE Users ( user_id SERIAL PRIMARY KEY, username VARCHAR(255), email VARCHAR(255) NOT NULL, ); Или же взять рандомный или около-рандомный идентификатор, например, UUID. 🔗 https://ru.wikipedia.org/wiki/Суррогатный_ключ1,61%
  • 27 июн. 2025 г.AI-революция в разработке софта Все только и твердят о ней. Половина новостей на HackerNews про AI/LLM, деньги поднимают только AI-cтартапы, причём какими-то неприличными раундами. Агенты и копайлоты повсюду. Я согласен с оценкой "AI изменит разработку софта"; вероятно, даже уже изменил. И сам очень стараюсь победить формировавшиеся десятилетиями привычки и использовать LLM для всё большего количества тупых или неинтересных мне задач. Это всё-таки процентов 80-90 программирования. Но мои наблюдения как менеджера и консультанта, помогающего с наймом, всё-таки отличаются. Пока на примере чуть более десятка человек, но почему-то мне сложно представить, что тренд развернётся. 🫣 Пример с работы: разработчик несколько дней подряд говорит, что работает над задачей, в последний день отсылает PR, где десяток комитов на полторы тысячи строк сделаны за 2 часа. Глаз цепляется за сообщения об ошибках с эмоджи (этого мы не делаем) и на русском (это провал, проект полностью англоязычный). Говорит, что "курсор написал", а русский язык "перевести забыл". Да, хорошо, курсор написал — но он не проверил, а на ревью отправил. Мне, как техлиду, такой код зачем? Я и сам так написать могу. 🫠 Пример с собеседований: парень достаточно бодро начинает решать задачку, исследует доки на API, в это время копайлот в режиме агента создаёт ему шаблон проекта, добавляет всякие зависимости. Я впечатлён: выглядит как очень толковый, разумный подход. Шаблон создан, какие-то кусочки кода написаны, разработчик тем временем путается в синтаксисе destructuring в JS (найм на JS/TS позицию) и, что ещё смешнее и печальнее, долго возится с отладкой ошибки от его собственной (ну, копайлотом написанной) ручки. Потому что там ответ от внешнего API обёрнут в ответ от cобственного бэкенда, и ошибка где-то по пути потерялась. Интуиции посмотреть именно туда, разумеется, нет, потому что код-то писал не он! Закончить задачу он не успел, интервью не прошёл. Хотя люди, которые пишут код сами, успевают. Это ли не иронично, что AI-помощники не помогли, а только помешали в этих ситуациях? Я вижу, что разработчики начинают больше лениться, теряют остроту ума, навыки отладки и декомпозиции задач. Не набивают свои нужные шишки и не учатся новому. Если допустить — а это гигантское допущение!, — что код писать будут только машины, нам всё-таки придётся его читать, ведь ответственность не может быть на машине. А если самому не писать, то скоро и понимать разучишься. Причём происходит это, видимо, с той же пугающей скоростью, с какой Т9 убил орфографию, а телефоны — пунктуацию в сообщениях. Что думаете об AI-революции в нашей профессии?1,38%
  • 12 июн. 2025 г.Этот простой способ поможет вам... Думаю каждый раз, когда пишу код: - А тут взять существующий тип или создать новый? - А вдруг в базе NULL, потому что я схему без гарантий сделал, а мне нужно значение? - Вернуть ошибку или как-то обработать? Пока у меня не было явно осознанного процесса, я постоянно о подобную ерунду спотыкался. Каждый из этих вопросов может завести в дебри, залезать в которые вообще не нужно прямо сейчас. Теперь в начале работы я пишу себе небольшой TODO. Прям буквально по пунктами, что нужно сделать. Особенность каждого из этих пунктов в том, что я отлично понимаю, как его сделать. Достать ID из payload — да пожалуйста. Дифнуть 2 слайса — util.SliceDiffRight наготове. Кайф в том, что такой подход позволяет работать по "прогрессивному джипегу". В задаче обычно 80-90% очевидных шагов, а над оставшимся нужно поразмышлять. Но если сразу схватиться кодить, то есть шанс перепутать одно с другим и потратить кучу времени на какую-то ерунду. И вот, всего каких-то полтора десятилетия — и я допёр до работающего процесса. 👍 всегда так делаю ❤️ кайф, полезно 🌚 код пусть агенты пишут1,10%
  • 20 сент. 2024 г.sort — это утилита в unix-подобных ОС для сортировки строчек в текстовых файлах. 🧩 Полезные ключи: • -t, — указать разделитель колонок , • -k5,5 — сортировка по 5-й колонке • -n — числовая, а не лексикографическая (алфавитная) сортировка • -g — поддержка чисел с плавающей запятой • -r — обратная сортировка 📚 Возьмём файл с заказами orders.csv: id,fname,lname,pid,qty,date,addr,price 1,Иван,Иванов,101,2,2024-09-01,Ленина 123,4000 2,Анна,Смирнова,202,1,2024-09-02,Пушкина 45,1999 3,Борис,Петров,303,3,2024-09-03,Гоголя 78,5998 4,Ольга,Кузнецова,404,1,2024-09-04,Чехова 90,2999 5,Алексей,Морозов,505,2,2024-09-05,Толстого 123,5000 Отсортируем по цене: sort -t, -k8,8nr orders.csv. По фамилии: LC_ALL=C.UTF-8 sort -t, -k3,3 orders.csv.LC_ALL=C.UTF-8 необходим для поддержки юникода. 🌟 Как и другие unix-утилиты, sort удобно объединять с другими командами через |. Например, отсортируем заказы по pid и возьмём только 3 поля: sort -t, -k4,4 orders.csv | cut -d, -f4,3,8 🔗 https://ru.wikipedia.org/wiki/Sort_(Unix)1,02%
  • 19 сент. 2024 г.Stack overflow — ошибка, когда программа пытается использовать больше памяти на стеке, чем разрешено операционной системой. 📌 Обычно случается при: • слишком большой глубине рекурсивных вызовов • большом количестве локальных переменных 📖 Например, на моей MacOS максимальная глубина стека — 8172 Кб (ulimit -s). Если какая-то программа попробует использовать больше, ОС прервёт её выполнение. Скомпилируем простейшую программу: #include <stdio.h> void go(int n) { printf("%d\n", n); go(n + 1); } int main() { go(1); return 0; } без оптимизаций (gcc -o test test.c) и запустим: ... 261471 [1] 78367 segmentation fault ./test Программа попыталась занять больше памяти на стеке, чем разрешено ОС, и была завершена. Если увеличить размер стека, например, до 16 Мб (ulimit -s 16384), то ошибка случится позже. А если включить оптимизации через флаг -O2 в gcc, то она сможет работать бесконечно, т.к. комплиятор "развернёт" рекурсию в цикл — cм. комментарии. 🔗 https://en.wikipedia.org/wiki/Stack_overflow0,93%
  • 12 сент. 2025 г.Друзья, а есть ли среди вас или ваших близких 🚀 начинающие разработчики, которым не удаётся найти работу? Хочу узнать побольше о вашей ситуации. Взамен предлагаю ✅ бесплатное ревью вашего резюме и консультацию на тему карьеры, собеседований, технологий. 👉 Заполняйте форму: https://forms.gle/3dy98JQkoATkTva49 👈 Или перешлите тем, кому актуально. Спасибо! 🙏0,81%