и посмотреть медиа
Точка входа - основы программирования
и посмотреть медиа
Базовые знания по основам программирования для новичков.
Базовые знания по основам программирования для новичков.
Курс фундаментальных понятий: алгоритмы, структуры данных, языки программирования. Идеально для начинающих без опыта.
Достаньте точный цвет пикселя из картинки прямо в браузере Задача звучит просто: есть скриншот или логотип, нужен точный HEX конкретного пикселя. Обычно за этим идут в графический редактор, хотя браузер умеет сам, и загружать картинку никуда не надо. Работает это через Canvas — элемент HTML, на котором можно рисовать и, что важнее, читать нарисованное по пикселям. Порядок такой: загрузить изображение, нарисовать его на canvas, забрать массив пикселей и достать нужный. В массиве каждый пиксель занимает четыре числа: красный, зелёный, синий и прозрачность. Упражнение хорошо тем, что за один маленький проект вы трогаете объект Image, события загрузки и типизированные массивы. Возьмите код примера и соберите пипетку, которая показывает цвет под курсором. #javascript
Открыть канал и посмотреть медиаРазнесите разросшуюся проверку по цепочке маленьких обработчиков В каждом проекте однажды заводится функция, которую никто не хочет трогать. Начиналось с одной проверки, потом добавили if, потом ещё один, а сверху появился комментарий «не менять, не прочитав целиком». Новичков о ней предупреждают на онбординге. Паттерн Chain of Responsibility, цепочка обязанностей, разбирает такой ком на части. Вместо одного метода, который знает всё, вы строите цепочку обработчиков: каждый знает ровно одно правило и решает, пропустить запрос дальше или остановить прямо здесь. Ни один обработчик не знает ни длины цепочки, ни того, кто стоит до и после него. Возьмите свою самую разросшуюся проверку и попробуйте выделить из неё два независимых правила. Разбор паттерна покажет, как связать их в цепочку так, чтобы добавление третьего не требовало трогать первые два.
Открыть канал и посмотреть медиаСловарь это массив, хеш-функция и план на случай, когда два ключа попали в одну ячейку Автор собирает хеш-таблицу на Rust с нуля, чтобы показать, почему словари и HashMap быстрые и где они ломаются. Первая версия проста: hash(key) % capacity даёт индекс в массиве. Она тут же ломается на коллизии: в таблице на 16 ячеек «Bananas» и «Eggs» попадают в один слот, и второе значение затирает первое. Классический ответ, список в каждой ячейке, работает, но разбрасывает узлы по памяти и промахивается мимо кеша процессора. Поэтому автор реализует линейное пробирование: если ячейка занята, идём в следующую по кругу. Дальше видно, почему таблицу приходится перестраивать, когда она заполняется, и почему вставка в словарь иногда внезапно дорогая. Код короткий, Rust знать не обязательно, идея переносится на dict в Python и Map в JavaScript. #основы
Открыть канал и посмотреть медиаЧто делать, когда файл с данными не открывает даже ноутбук Файл на несколько сотен миллионов строк, просьба «просто быстро посчитай сумму по регионам», спиннер на десять минут и упавшая программа. Дело не в вопросе, а в попытке сделать работу сотни компьютеров на одном. Apache Spark — движок, который режет одну большую задачу на куски, считает их на многих машинах одновременно и собирает ответ обратно. PySpark это его питоновский интерфейс: вы пишете обычный на вид Python, а параллельная работа происходит под капотом. Разбор без диссертации рассчитан минут на тринадцать и ведёт от «что это вообще такое» до первой работающей задачи на PySpark, вместе с ловушками, в которые попадают новички. Открывайте его в тот момент, когда pandas на вашем файле начнёт задыхаться. #python
Открыть канал и посмотреть медиаСоберите первую нейросеть на Python без матана и видеокарты Слово «нейросеть» звучит так, будто нужен продвинутый матанализ, мощная машина и тысячи строк кода. Ничего из этого не нужно. На базовом уровне нейросеть это математическая модель, которая берёт на вход числа, что-то с ними считает, выдаёт предсказание, сравнивает его с правильным ответом и подправляет себя, чтобы в следующий раз ошибиться меньше. Этот цикл и есть обучение, всё остальное надстраивается сверху. В туториале такую сеть строят руками на Python и NumPy, без фреймворков, чтобы был виден каждый шаг. Хороший следующий шаг после основ языка: слова «слой», «веса» и «обучение» перестанут быть заклинаниями и станут строчками кода, которые вы написали сами. #python
Открыть канал и посмотреть медиа«Нужно много памяти и быстрый процессор или хорошая видеокарта» — это два разных требования Хиллел Уэйн выложил вторую главу своей книги Logic for Programmers бесплатно. Он начинает с предикатов, функций, которые возвращают да или нет, и показывает, как фразу из ТЗ превратить в формулу: CanRunProgram(c) = RAM(c) && CPU(c) || GPU(c). Тут же видно, что фраза двусмысленна: (RAM && CPU) || GPU или RAM && (CPU || GPU). В русском предложении этого не заметить, в формуле нельзя не заметить. Дальше импликация, множества и кванторы «для всех» и «существует», всё на примерах из кода и с упражнениями с ответами. Символы автор берёт с клавиатуры: &&, ||, !, =>, без математических значков. Если формальная логика в университете прошла мимо, это самое короткое введение, после которого требования к программе начинаешь читать иначе. #основы
Открыть канал и посмотреть медиаВ документации Python появилась таблица, сколько стоит каждая операция со списком и словарём Почему l.pop() дешёвый, а l.pop(0) нет, и чем x in set отличается от x in list: раньше за этим ходили в вики или исходники CPython. В документации 3.16 появилась отдельная страница со сложностью операций для list, tuple, dict, set, str и range в нотации O-большое. Половина вопросов «почему тормозит» на собеседованиях закрывается этой таблицей. В нашем канале Zen of Python разобрали подробнее. #python #основы
Открыть канал и посмотреть медиаЧем интерпретатор отличается от JIT и почему интерпретаторы всё ещё нужны Два самых распространённых способа исполнять программу. Интерпретатор читает инструкции по одной и выполняет каждую сам, как переводчик на переговорах. JIT-компилятор сначала переводит горячий участок в машинный код процессора, а потом запускает его напрямую, и это в разы быстрее. Браузерные движки сочетают оба: начинают с интерпретатора и переводят в машинный код только горячие участки, это называют tiered execution. Зачем тогда интерпретаторы? JIT нужно право записывать в память исполняемый код, а на iOS и в некоторых защищённых средах это запрещено. Ему нужна память под скомпилированный код, которой нет на микроконтроллере. И его результат зависит от машины, а смарт-контрактам и песочницам нужен одинаковый результат везде. Хороший пример того, как далеко можно разогнать интерпретатор, вышел на этой неделе: Wasmi 2.0, интерпретатор WebAssembly на Rust, стал в 2,2 раза быстрее предыдущей версии за счёт того, как устроен цикл выбора инструкций и как хранятся промежуточные значения. Что такое dispatch и аккумуляторные регистры простыми словами, разобрали на сайте. #основы
Открыть канал и посмотреть медиаЧто делать, если ключ от сервиса уехал в публичный репозиторий Поздний вечер, код наконец заработал, git add ., коммит, пуш. Через несколько минут расход по API растёт, появляются запросы, которых вы не делали, а счёт больше ожидаемого. Первый порыв, стереть строчку и закоммитить заново, не спасает: старый коммит остаётся в истории репозитория, и ключ достают оттуда. Поэтому чистка истории идёт не первым шагом, а после того, как ключ отозван и выпущен новый. Разбор проходит порядок действий целиком, включая удаление секрета из уже опубликованных коммитов. А чтобы не возвращаться к этому, заведите привычку: перед первым пушем нового проекта убедитесь, что .env лежит в .gitignore. #основы
Открыть канал и посмотреть медиаТолько зарегистрированные пользователи могут делиться своим мнением.
Станьте первым, кто поделится своим впечатлением об этом ресурсе!