Чашка Кода
467 subscribers
254 photos
5 videos
1 file
161 links
👋 Я - Никита, Senior разработчик, автор курсов по Python-разработке. Пишу на Python и Rust

✏️ В этом канале посты, которые сделают твой путь к веб-разработке проще

Задать вопрос, позвать на конференцию, записать со мной курс/статью/подкаст
👉 @PySage
Download Telegram
🔜 Просили пост про контейнеризацию, вот он:

Если вы пишите на Python, то вы используете во всех проектах виртуальное окружение (python -m venv venv). Вы ведь используете его? В какой то мере виртуальное окружение похоже на использование контейнеров.

🔘 Зачем вообще нужна контейнеризация?
Скорее всего, вы пишите код на своём компьютере, на Windows, либо на MacOS. А вот запускать написанное приложение вы будете уже на сервере, на котором будет запущен Linux. И просто так запустить код не получится, скорее всего какие то зависимости написаны вообще только для одной системы.

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

📌 Docker
Самым популярным выбором приложения для контейнеризации является докер. Если вы ещё с ним не знакомы, то обязательно изучите его. Вот отличный, бесплатный курс по Docker. На любом собесе у вас будет вопрос про него!

Когда я только изучал разработку, долгое время не использовал докер. Казалось, что для небольших проектов он избыточен. Но если вы попробуете запустить две разные БД для своего проекта, лучше докера инструмента вы не найдёте. Причём изучать его досконально не нужно, достаточно уметь запускать несколько контейнеров с разным содержимым *️⃣

📌 Если вы можете запустить свой веб-сервер в одном контейнере, а его БД - в другом, то этого вполне достаточно!

🍰 #мудрость_на_каждый_день #просто_о_сложном #работа_в_it
Please open Telegram to view this post
VIEW IN TELEGRAM
741
🔊 Итоги живого подкаста

На прошлой неделе проводил "Живой подкаст", на котором действующие разработчики из СберТеха, Ашана, МТС и Wildberries поделились своими впечатлениями от обучения в Школе 21 и опытом работы в IT.

🔥 Было очень интересно и продуктивно. Это одно из самых успешных мероприятий, что я проводил! Рекомендую присоединится в следующий раз. Будущее мероприятие хотим сделать более открытым, но в таком же формате: оффлайн в Москве, без записи и трансляции (включите уведомления от канала, чтобы не пропустить анонс).

📌 Одним из вопросов, который зрители задали ведущим, был следующий: "После того как вы вышли на работу, что для вас стало чем-то новым (что удивило)?". Вопрос мне понравился, но формат шоу не позволял мне лично ответить на этот вопрос и поделиться мнением. Поэтому решил поделиться с вами своим откровением от работы в IT здесь.

Никто не пишет код специально плохо.


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

👉 Поняв это, я вывел для себя следующее:
Не спрашивайте себя, почему я должен работать с таким кодом. Спросите себя, как я могу сделать код, с которым приятно работать?


P.S. Чтобы исправить уже работающий код и ничего не сломать, следуйте правилам рефакторинга: подробнее.

🍰 #мысли #it
Please open Telegram to view this post
VIEW IN TELEGRAM
54311
⚡️ Что это такое за окном..?

...это же пятница! А значит, настало время для традиционной пятничной активности 🫥

Готовлю пост про своё рабочее место. А вот загадка 🔽
Please open Telegram to view this post
VIEW IN TELEGRAM
211
Какой предмет всегда есть на моём рабочем столе?
Anonymous Quiz
29%
Бутылка воды
22%
Эспандер
49%
Блокнот с ручкой
22211
👉Продолжение поста про мою главную ошибку за год работы

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

🤖 Обычно мы берём в работу задачи, которые можно сделать за 3 дня или меньше. Эта задача была оценена более чем в 2 недели работы! Казалось, что её невозможно разделить на подзадачи. Но если задача не связана с R&D (требует какого то исследования), то мы точно понимаем, что хотим сделать. А когда понятно что делать, то можно разделить на подзадачи.

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

➡️ Мораль: разбивайте задачу на подзадачи. Если вы не можете этого сделать, значит, что ваша задача не изучена в должной степени.
Please open Telegram to view this post
VIEW IN TELEGRAM
32111
Как "накрутить" опыт?

Как рассказывать про опыт, когда его нет? Или говоря проще, как "накручивать" опыт? Возможно я вас расстрою, но чтобы говорить про свой опыт, он у вас должен быть!

Чтобы получить работу, нужен опыт. А чтобы получить опыт, нужна работа? Не обязательно! Написал решение для ЛЮБОЙ ситуации и теперь вам будет что рассказать на собеседовании про свой опыт.

Опыт для любой ситуации:
🔘Совсем не значете что делать? Пишите в лс: @PySage
🔘Хотите писать на Python? Пройдите бесплатный курс на степике
🔘Прошли курсы и умеете писать код? Решите 150 задач на литкоде из моей подборки
🔘Изучили алгоритмы? Напишите сервисы.

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

Любой этот компонент будет микросервисом в крупном приложении. Добавьте методы CRUD для работы с данными, подготовьте деплой и это будет ваш реальный опыт!

Нужны примеры не из веба? Пиши интересующую сферу в комментарии, и я расскажу 👇

🍰 #мой_путь #мысли #it
Please open Telegram to view this post
VIEW IN TELEGRAM
522111
➡️ Для решения 90% алгоритмов достаточно знать всего десяток концепций.

Делюсь первой из них в сегодняшней истории! Хотите остальные? Ставьте 🚀

🍰  #it #python_полезности #просто_о_сложном
Please open Telegram to view this post
VIEW IN TELEGRAM
1311
This media is not supported in the widget
VIEW IN TELEGRAM
1022
👩‍💻 Любите разбираться в чужом коде? Я - нет!

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

Я написал решение, в котором перебираю отсортированный массив и считаю, сколько вхождений в строку каждого числа. Если текущее число встречается чаще, чем прошлое, то его и сохраняем. Вот код:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums.sort()
max_seen = 0
max_seen_num = nums[0]
current_streak = 0
prev_num = nums[0]

for num in nums:
if num == prev_num:
current_streak += 1
else:
current_streak = 1

prev_num = num
if current_streak > max_seen:
max_seen = current_streak
max_seen_num = num

return max_seen_num


Казалось, что тут даже нечего обсуждать, но я решил сократить решение. Если у нас будет всего два уникальных числа, то те числа, которых больше, должны занять больше половины всего списка. Таким образом, достаточно вернуть центральный элемент отсортированного массива. И используя анонимные функции, можно написать даже так:
class Solution:
majorityElement = lambda _, nums: sorted(nums)[len(nums)//2]


Код уже достаточно сомнительный, но я зашёл в решения и посмотрел самое эффективное. Вот оно:
(bytes('浩潰瑲猠慴楴瑳捩ੳ⁦‽灯湥∨獵牥漮瑵Ⱒ✠❷਩潦⁲楬敮椠瑳楤㩮 †渠浵敢彲捯畣敲据獥㴠搠晥畡瑬楤瑣氨浡摢㩡〠਩††畮獭㴠氠獩⡴慭⡰湩ⱴ氠湩⹥獲牴灩⤨ㅛⴺ崱献汰瑩✬⤩਩††灵数⁲‽敬⡮畮獭⼯㈠ †映牯渠浵敢⁲湩渠浵㩳 †††渠浵敢彲捯畣敲据獥湛浵敢嵲⬠‽਱††††晩渠浵敢彲捯畣敲据獥湛浵敢嵲㸠甠灰牥਺††††††牰湩⡴畮扭牥 楦敬昽਩††††††牢慥੫硥瑩〨','u16')[2:])


🤔 И вот тут уже возникли вопросы, а точнее всего один:
"Что вообще тут происходит!?"


🌩 Оказалось, что всё очень просто, это закодированный в utf-16 код. При кодировании в Unicode, в начале добавляется специальный маркер и в коде выше его убирают, используя [2:]. Если раскодировать это решение, то код будет такой:
import statistics

class Solution:
def majorityElement(self, nums: list[int]) -> int:
return statistics.mode(nums)


🔩 Что происходит я понял, а вот зачем так делать - нет. Может вы знаете? Пишите свои версии в комментарии

🍰 #it #python #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
5211
🤔 Говорят, что только фейк-сеньоры любят рабочие созвоны. А как считаете вы?

🍰 #it #мемы
Please open Telegram to view this post
VIEW IN TELEGRAM
5311
🔥 Что нужно изучить до того, как начать программировать?

Обновим самый популярный пост в канале!

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

Что нужно разработчику и в каком порядке изучать, на картинке к посту🔝

Основные моменты:
🔴 Отличный бесплатный курс по MySQL, после него стоит перейти на PostrgeSQL. На самом деле не важно чем вы пользуетесь, подходит даже SQLite.
🔴 Обязательно решите 23 лёгких задания тут. Потом решите вообще все задания.
🔴 Необходимо понимать, как запустить БД в контейнере ➡️ бесплатного курса по Docker.
🔴 Если вам понравятся БД и вы захотите больше ➡️изучите postrespro и прочитайте "книжку с кабанчиком" это самая известная книга о БД

🍰 #it #базы_данных #бесплатно
Please open Telegram to view this post
VIEW IN TELEGRAM
6211
Для решения 90% алгоритмов достаточно знать всего десяток концепций.

Продолжаем делится алгоритмами в истории! Сегодня алгоритм двух указателей.
Хотите остальные? Ставьте 🚀

🍰 #it #python_полезности #просто_о_сложном #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
2
This media is not supported in the widget
VIEW IN TELEGRAM
711
👉 Нашёл лучшую замену Docker на MacOS!

Если вы работаете на устройствах с MacOS, то наверняка вы тоже испытывали проблемы при использовании Docker. Необходимость запуска докера через десктоп приложение, большое потребление памяти, а на корпоративных устройствах его вообще удаляют... Есть решение! 🔥

🟣 OrbStack предоставляет все возможности Docker и даже больше. В приложении можно запускать как контейнеры, так и виртуальные машины! Само приложение выглядит хорошо и действительно потребляет меньше ресурсов. Отдельно отмечу:

✔️бесшовный переход, ставите orbstack и дальше используете привычные команды докера
✔️легко ставится через brew install orbstack
✔️при установке с .dmg можно перенести из докера все образы и контейнеры
✔️ дизайн в стиле Apple, десктоп версия выглядит очень гармонично на маке
✔️бесплатно для личного использования

📣 Резюмируя: OrbStack это лёгкая и удобная замена Docker, с бесшовной интеграцией в вашу привычную работу.

🍰 #it #python_полезности #находки
Please open Telegram to view this post
VIEW IN TELEGRAM
7222
Я устал, помогите пожалуйста! 😶

Я очень люблю пить чай. Чайник стоит на кухне и для удобства я сделал кнопку включения чайника в другой комнате. Так получилось, что кнопок три и только одна включает чайник. Другие две ничего не делают. Я никак не могу запомнить, какая кнопка включает чайник. Каждый раз приходится по очереди включать каждую и идти проверять😜

Наверняка есть решение лучше? Одновременно можно включить только одну кнопку 👇

🍰 #it #python_полезности #it_загадка
Please open Telegram to view this post
VIEW IN TELEGRAM
421
Какое наименьшее количество раз мне нужно сходить на кухню, чтобы определить, какой выключатель верный?
Anonymous Quiz
13%
0
41%
1
41%
2
5%
3
21
📚 Рубрика: «Книжная полка разработчика»

Чем может быть полезна самая известная книга в дизайн-сообществе разработчику? Автор отвечает в самой книге:
Производство хорошего продукта требует гораздо большего, чем одни только хорошие технические навыки.

🔜 Прочитал «Дизайн привычных вещей» от автора Дона Нормана. Я хотел прочитать эту книгу ещё 10 лет назад, а первое издание книги вышло в 1988 году (!). Казалось бы: книга уже устарела, написана психологом для дизайнеров, причём тут технические специалисты? Рассказываю 💋

🔺 У вас когда-нибудь было такое, что вы не можете открыть дверь с первого раза? Хотите потянуть, а её надо толкать вперёд, или вообще нажать на кнопку, чтобы дверь сама открылась? Дон Норман не стал скрывать чувства и написал множество статей о ситуациях, когда вроде привычная вещь оказывалась настоящим квестом. Такие ситуации даже получили название "дверь Нормана". Эти статьи и стали фундаментом его книги «Дизайн привычных вещей». Это великолепная книга о том, как делать продукты для людей.

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

В одном посте невозможно описать мой восторг от книги, ведь только список используемой литературы в ней занимает 14 страниц! Просто доверьтесь и добавьте книгу на книжную полку🙂

📚 Обновлённый список обязательных к прочтению книг:

🟢 До выхода на работу:
• Грокаем алгоритмы
• Карьера программиста

🟢После выхода на работу:
Паттерны проектирования
Подготовка к сложному интервью

🟢Чтобы поднять грейд:
• Дизайн привычных вещей
• Книга с кабанчиком
• Погружение в рефакторинг

🍰 #книжная_полка #it #python_полезности
Please open Telegram to view this post
VIEW IN TELEGRAM
5421
☕️ Разберём задачу поста-головоломки про чайник

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

А зная это, легко понять, как решить задачу.

Сначала мы нажимаем на первую кнопку и ждём какое-то время. Потом выключаем первую и включаем вторую. После нажатия второй кнопки сразу идём проверять чайник.
*️⃣ вода горячая 🔜 первая кнопка
*️⃣ горит лампочка, вода холодная 🔜 вторая кнопка
*️⃣ вода холодная, не горит лампочка 🔜 третья кнопка

🍰 #it #it_загадка
Please open Telegram to view this post
VIEW IN TELEGRAM
6211
🍃 Что это пролетает мимо нас? - Лето

Наверняка вы пропустили какие-то посты, пока наслаждались горячим июлем! Собрали все посты за месяц:

💋Концепции алгоритмов: Указатель
💋Разобрались в чужом коде
💋Мем про рабочие созвоны
💋Обновили самый популярный пост про БД
💋Концепции алгоритмов 2: Два указателя
💋Лучшая замена докер-приложения на маке
💋Сложная задачка и её решение
💋Обзор на книгу «Дизайн привычных вещей»

Ставьте реакты к постам и пишите в комментарии, какие посты хотите увидеть в августе👇

🍰 #it #коджест
Please open Telegram to view this post
VIEW IN TELEGRAM
1111
This media is not supported in your browser
VIEW IN TELEGRAM
💥 Устали от бардака в меню-баре вашего мака? Решение есть!

Dozer
Я пользуюсь маком и поставил себе множество приложений. Даже советовал вам в этом посте бесплатные приложения. В какой-то момент трей работающих приложений заполнился и я начал искать решение. Делюсь бесплатным приложением с вами!

Dozer позволяет скрыть все иконки в трее, не больше не меньше. Сразу отмечу минус: не очевидно, как вообще пользоваться программой, пришлось почитать README и посидеть в настройках. Если у вас будут проблемы при настройке - пишите в комменты, помогу!

Ссылка на гит

🍰 #it #находки
Please open Telegram to view this post
VIEW IN TELEGRAM
31
А как вы называете верхнюю правую часть?
Anonymous Poll
29%
Меню-бар
42%
Трей
25%
Панель задач
4%
Свой вариант в комментариях👇