С
logo
0
читателей
Сурен Хоренян | Программирование  Образовательные ролики про программированию и алгоритмам
О проекте Просмотр Уровни подписки Фильтры Статистика Обновления проекта Поделиться Метки
Все проекты
О проекте
Привет! Меня зовут Сурен, я Senior Python Developer.
Онлайн-образованием я занимаюсь с 2018 года. Люблю Python, алгоритмы, базы данных. Рад поделиться с вами опытом и знаниями.
Все мои ресурсы: https://taplink.cc/mahenzon
Публикации, доступные бесплатно
Уровни подписки
Единоразовый платёж

Безвозмездное пожертвование без возможности возврата. Этот взнос не предоставляет доступ к закрытому контенту.

Помочь проекту
O(n^2) 210₽ месяц 2 142₽ год
(-15%)
При подписке на год для вас действует 15% скидка. 15% основная скидка и 0% доп. скидка за ваш уровень на проекте Сурен Хоренян | Программирование

Это хороший способ решить задачу. Ваша помощь обеспечит оплату одного превью!

Оформить подписку
O(n * log(n)) 500₽ месяц 4 920₽ год
(-18%)
При подписке на год для вас действует 18% скидка. 18% основная скидка и 0% доп. скидка за ваш уровень на проекте Сурен Хоренян | Программирование

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

Оформить подписку
O(n) 990₽ месяц 9 504₽ год
(-20%)
При подписке на год для вас действует 20% скидка. 20% основная скидка и 0% доп. скидка за ваш уровень на проекте Сурен Хоренян | Программирование

Показав на собеседовании решение с линейной сложностью вы точно пройдёте дальше. За два месяца подписки вы поможете с монтажом одного видео!

Оформить подписку
O(log(n)) 1 950₽ месяц 18 252₽ год
(-22%)
При подписке на год для вас действует 22% скидка. 22% основная скидка и 0% доп. скидка за ваш уровень на проекте Сурен Хоренян | Программирование

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

Оформить подписку
O(1) 3 200₽ месяц 28 800₽ год
(-25%)
При подписке на год для вас действует 25% скидка. 25% основная скидка и 0% доп. скидка за ваш уровень на проекте Сурен Хоренян | Программирование

Круче тебя и быть не может. Ты как словарь в Python - на тебе всё держится! Спасибо за обеспечение полного цикла производства одного видео в месяц! Я выражу тебе личную благодарность в этом видео.

Оформить подписку
Фильтры
Статистика
Обновления проекта
Контакты
Поделиться
Метки
Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Циклические импорты

Как ‎же‏ ‎легко ‎натолкнуться ‎на ‎циклические ‎импорты.‏ ‎Обычно ‎исправить‏ ‎такую‏ ‎ошибку ‎несложно, ‎а‏ ‎ещё ‎проще‏ ‎не ‎доводить ‎до ‎такого‏ ‎совсем,‏ ‎ведь ‎достаточно‏ ‎следовать ‎нескольким‏ ‎простым ‎правилам:

  • под ‎одну ‎сущность ‎нужно‏ ‎выделять‏ ‎отдельный ‎модуль;
  • для‏ ‎совмещения ‎двух‏ ‎(и ‎более) ‎сущностей ‎создавайте ‎новый‏ ‎модуль,‏ ‎там‏ ‎объявляйте ‎новую‏ ‎обертку ‎(функцию,‏ ‎класс), ‎которая‏ ‎будет‏ ‎выполнять ‎требуемые‏ ‎действия ‎(объединять ‎сущности; ‎делать ‎вызов‏ ‎объектов, ‎и‏ ‎т.‏ ‎д.).

Не ‎бойтесь ‎создавать‏ ‎новые ‎модули‏ ‎и ‎функции, ‎никто ‎не‏ ‎осудит‏ ‎вас ‎за‏ ‎слишком ‎маленькие‏ ‎файлы., ‎а ‎вот ‎за ‎большие‏ ‎может‏ ‎прилететь ‎по‏ ‎шапке. ‎Да‏ ‎и ‎вам ‎потом ‎сложнее ‎будет‏ ‎там‏ ‎ковыряться.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Объективно ли?

Как ‎же‏ ‎странно ‎слышать ‎«объективно ‎это ‎какая-то‏ ‎фигня» ‎или‏ ‎«ну‏ ‎объективно ‎мне ‎это‏ ‎совсем ‎не‏ ‎нравится». ‎А ‎ещё ‎корёжит‏ ‎с‏ ‎«объективно, ‎выглядит‏ ‎красиво!». ‎Что‏ ‎за ‎чушь? ‎Объективно ‎это ‎неоспоримо,‏ ‎непредвзято.‏ ‎Например, ‎ноутбук‏ ‎весит ‎два‏ ‎килограмма ‎и ‎сто ‎грамм. ‎Или‏ ‎что‏ ‎у‏ ‎отдельно ‎взятой‏ ‎машины ‎ровно‏ ‎четыре ‎колеса.‏ ‎Это‏ ‎объективно.

А ‎тяжелый‏ ‎ноутбук ‎или ‎легкий, ‎красивая ‎машина,‏ ‎или ‎страшная,‏ ‎это‏ ‎уже ‎совсем ‎не‏ ‎объективно, ‎это‏ ‎субъективно.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Програ́ммное обеспе́чение

Програ́ммное ‎обеспе́чение

Програ́ммное‏ ‎обеспе́чение ‎обеспе́чивает ‎рабо́ту ‎компью́тера.

Мы ‎с‏ ‎вами ‎пишем‏ ‎програ́ммное‏ ‎обеспе́чение, ‎и ‎это‏ ‎совсем ‎не‏ ‎обеспече́ние ‎(как ‎некоторые ‎произносят),‏ ‎ни‏ ‎к ‎каким‏ ‎печенькам ‎ПО‏ ‎отношения ‎не ‎имеет ‎(даже ‎если‏ ‎речь‏ ‎про ‎кукисы).

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Этого достаточно

Очень ‎сложно‏ ‎довести ‎дело ‎до ‎конца, ‎если‏ ‎пытаешься ‎сделать‏ ‎ещё‏ ‎лучше, ‎ещё ‎круче,‏ ‎ещё ‎красивше,‏ ‎ещё ‎оптимальнее. ‎Хорошо, ‎что‏ ‎уже‏ ‎написанный ‎код‏ ‎работает, ‎и‏ ‎его ‎не ‎нужно ‎доделывать, ‎можно‏ ‎так‏ ‎передать ‎дальше,‏ ‎описанная ‎задача‏ ‎понятна, ‎и ‎можно ‎не ‎вдаваться‏ ‎в‏ ‎детали,‏ ‎а ‎сказанные‏ ‎слова ‎донесли‏ ‎мысль, ‎и‏ ‎не‏ ‎нужно ‎подсвечивать‏ ‎тонкости. ‎Можно ‎было ‎бы ‎сделать‏ ‎этот ‎пост‏ ‎подробнее‏ ‎и ‎длиннее, ‎но‏ ‎этого ‎достаточно.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

xfail

Когда ‎вы‏ ‎пишите ‎тесты, вы ‎можете ‎столкнуться ‎с‏ ‎ситуацией, ‎что‏ ‎тест‏ ‎падает, ‎и ‎пока‏ ‎что ‎это‏ ‎ожидаемое ‎поведение ‎(например, ‎тест‏ ‎сломался,‏ ‎и ‎его‏ ‎нужно ‎починить,‏ ‎но ‎пока ‎что ‎нужно ‎пометить,‏ ‎что‏ ‎так ‎и‏ ‎задумано). ‎Для‏ ‎этого ‎в ‎pytest ‎есть ‎метка‏ ‎xfail.‏ ‎Просто‏ ‎навешиваем ‎декоратор‏ ‎xfail, и ‎если‏ ‎этот ‎тест‏ ‎упал,‏ ‎то ‎ничего‏ ‎страшного, ‎так ‎и ‎было ‎задумано‏ ‎(важно ‎не‏ ‎путать‏ ‎с ‎ожиданием ‎исключения,‏ ‎когда ‎мы‏ ‎хотим, ‎чтобы ‎произошла ‎ошибка‏ ‎в‏ ‎коде, ‎а‏ ‎не ‎в‏ ‎тесте).

Так ‎вот, ‎сегодня, ‎ковыряясь ‎в‏ ‎unittest,‏ ‎я ‎для‏ ‎себя ‎открыл‏ ‎декоратор ‎expectedFailure, и ‎у ‎меня ‎появилось‏ ‎понимание‏ ‎значения‏ ‎xfail: ‎«x»‏ ‎читается ‎как‏ ‎«ex», ‎то‏ ‎есть‏ ‎это ‎просто‏ ‎сокращение ‎для ‎«expected ‎failure».

Вот ‎так‏ ‎всё ‎просто,‏ ‎а‏ ‎я ‎и ‎не‏ ‎придавал ‎значения.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Хватит путать git и GitHub / GitLab

Хватит ‎путать‏ ‎git ‎и ‎GitHub ‎/ ‎GitLab

Что‏ ‎такое ‎git?‏ ‎Система‏ ‎контроля ‎версий. ‎Так‏ ‎почему ‎вы‏ ‎продолжаете ‎писать ‎«git» ‎/‏ ‎«гит»‏ ‎подразумевая ‎GitHub‏ ‎или ‎GitLab?‏ ‎Вы ‎же ‎понимаете, ‎что ‎это‏ ‎разные‏ ‎инструменты? ‎Вы‏ ‎пытаетесь ‎сэкономить‏ ‎три ‎буквы? ‎Почему ‎у ‎вас‏ ‎в‏ ‎голове‏ ‎укладывается ‎фраза‏ ‎«не ‎могу‏ ‎зайти ‎на‏ ‎git»,‏ ‎или ‎«у‏ ‎меня ‎недоступен ‎git»?

Прикиньте, ‎у ‎вас‏ ‎не ‎открывается‏ ‎интернет-магазин‏ ‎в ‎браузере, ‎и‏ ‎вы ‎пишете‏ ‎в ‎поддержку ‎«у ‎меня‏ ‎не‏ ‎работает ‎html».‏ ‎Звучит ‎странно,‏ ‎да? ‎И ‎даже ‎это ‎было‏ ‎бы‏ ‎более ‎логично,‏ ‎чем ‎путать‏ ‎git ‎и ‎сайт ‎по ‎типу‏ ‎GitHub,‏ ‎ведь‏ ‎у ‎вас‏ ‎может ‎быть‏ ‎старый ‎браузер,‏ ‎в‏ ‎котором ‎действительно‏ ‎не ‎работают ‎новые ‎фишки ‎свежего‏ ‎HTML.

Вы ‎бы‏ ‎ещё‏ ‎про ‎Bitbucket ‎писали‏ ‎«git». ‎Или,‏ ‎раз ‎название ‎начинается ‎не‏ ‎на‏ ‎«Git», ‎то‏ ‎не ‎стыкуется?‏ ‎Кстати, ‎а ‎битбакет ‎ещё ‎существует?

Он‏ ‎же‏ ‎Гога, ‎он‏ ‎же ‎Гоша,‏ ‎он ‎же ‎Юрий, ‎он ‎же‏ ‎Гора,‏ ‎он‏ ‎же ‎Жора

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Запускайте код реже

Запускайте ‎код‏ ‎реже

Не ‎нужно ‎запускать ‎код ‎после‏ ‎каждой ‎новой‏ ‎строчки.‏ ‎Не ‎нужно ‎запускать‏ ‎код ‎даже‏ ‎после ‎создания ‎новой ‎функции.‏ ‎Вам‏ ‎кажется, ‎что‏ ‎что-то ‎не‏ ‎так, ‎и ‎что ‎где-то ‎будет‏ ‎ошибка.‏ ‎И, ‎вероятно,‏ ‎это ‎будет‏ ‎так. ‎Особенно ‎на ‎старте. ‎Но‏ ‎не‏ ‎тратьте‏ ‎время ‎зря.‏ ‎Описывайте ‎понятные‏ ‎короткие ‎функции,‏ ‎добавляйте‏ ‎логирование, ‎ловите‏ ‎исключения. ‎И ‎при ‎запуске ‎проверяйте‏ ‎фичу ‎целиком.‏ ‎У‏ ‎вас ‎нет ‎задачи‏ ‎«написать ‎функцию».‏ ‎Есть ‎задача ‎«выполнить ‎работу‏ ‎от‏ ‎А ‎до‏ ‎Б». ‎И‏ ‎вот ‎проверяйте, ‎работает ‎ли ‎фича,‏ ‎а‏ ‎не ‎отдельная‏ ‎функция.

А ‎ещё‏ ‎пишите ‎тесты.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Полдюжины

Полдюжины

Почему ‎не‏ ‎проще ‎сказать ‎«шесть»?

А ‎на ‎английском‏ ‎вообще ‎«half‏ ‎a‏ ‎dozen» ‎vs ‎«six».

Зачем?

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Покрывайте код тестами

Начните ‎с‏ ‎юнит-тестов. ‎Потом ‎можно ‎разобраться ‎с‏ ‎апи-тестами. ‎Про‏ ‎интеграционные‏ ‎тесы ‎даже ‎пока‏ ‎заикаться ‎не‏ ‎буду.

В ‎Python ‎начинайте ‎с‏ ‎unittest,‏ ‎потом ‎переходите‏ ‎на ‎pytest.‏ ‎С ‎pytest ‎уже ‎никуда ‎уходить‏ ‎не‏ ‎нужно, ‎это‏ ‎лучший ‎фреймворк‏ ‎для ‎тестирования.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Error response from daemon: pull access denied for…

Error ‎response‏ ‎from ‎daemon: ‎pull ‎access ‎denied‏ ‎for ‎…

Уже‏ ‎столкнулись?‏ ‎Обсуждение ‎на ‎хабре

Решение‏ ‎простое: ‎подставляем‏ ‎зеркало ‎в ‎конфиге, ‎описано‏ ‎тут:‏ ‎https://huecker.io/

Напоминаю, ‎что‏ ‎на ‎продакшн‏ ‎образ ‎должен ‎тянуться ‎из ‎вашего‏ ‎собственного‏ ‎registry, ‎который,‏ ‎конечно ‎же,‏ ‎заблаговременно ‎в ‎вашей ‎компании ‎подготовили‏ ‎и‏ ‎заполнили.

Текст‏ ‎ошибки:

Error ‎response‏ ‎from ‎daemon:‏ ‎pull ‎access‏ ‎denied‏ ‎for ‎nginx,‏ ‎repository ‎does ‎not ‎exist ‎or‏ ‎may ‎require‏ ‎'docker‏ ‎login': ‎denied: ‎<html><body><h1>403‏ ‎Forbidden</h1> ‎Since‏ ‎Docker ‎is ‎a ‎US‏ ‎company,‏ ‎we ‎must‏ ‎comply ‎with‏ ‎US ‎export ‎control ‎regulations. ‎In‏ ‎an‏ ‎effort ‎to‏ ‎comply ‎with‏ ‎these, ‎we ‎now ‎block ‎all‏ ‎IP‏ ‎addresses‏ ‎that ‎are‏ ‎located ‎in‏ ‎Cuba, ‎Iran,‏ ‎North‏ ‎Korea, ‎Republic‏ ‎of ‎Crimea, ‎Sudan, ‎and ‎Syria.‏ ‎If ‎you‏ ‎are‏ ‎not ‎in ‎one‏ ‎of ‎these‏ ‎cities, ‎countries, ‎or ‎regions‏ ‎and‏ ‎are ‎blocked,‏ ‎please ‎reach‏ ‎out ‎to ‎https://hub.docker.com/support/contact/ </body></html>

Но ‎писать ‎на‏ ‎почту‏ ‎бесполезно, ‎отвечают‏ ‎бестолковой ‎отбивкой.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Повесить трубку

Вы ‎задумывались,‏ ‎что ‎никто ‎уже ‎давно ‎не‏ ‎вешает ‎и‏ ‎даже‏ ‎не ‎кладёт ‎трубку?‏ ‎Мы ‎сбрасываем‏ ‎звонок, ‎отключаемся, ‎выходим ‎с‏ ‎созвона‏ ‎/ ‎встречи‏ ‎/ ‎митинга.‏ ‎Но ‎всё ‎равно ‎в ‎обиходе‏ ‎присутствует‏ ‎«повесить ‎трубку»,‏ ‎хотя ‎вешать,‏ ‎в ‎общем-то, ‎и ‎нечего, ‎и‏ ‎некуда.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

yaml или yml?

Как ‎же‏ ‎я ‎не ‎люблю, ‎когда ‎один‏ ‎тип ‎можно‏ ‎обозначить‏ ‎двумя ‎расширениями. ‎Зачем‏ ‎существует ‎`.yml`,‏ ‎когда ‎есть ‎`.yaml`? ‎Кто‏ ‎и‏ ‎что ‎пытался‏ ‎сэкономить, ‎добавляя‏ ‎возможность ‎сделать ‎сокращенное ‎расширение? ‎Вот‏ ‎между‏ ‎`.doc` ‎и‏ ‎`.docx` ‎огромная‏ ‎разница. ‎А ‎зачем ‎так ‎поступили‏ ‎с‏ ‎ямлом?

Я‏ ‎обычно ‎использую‏ ‎`.yaml`. ‎Но‏ ‎когда ‎замечаю,‏ ‎что‏ ‎уже ‎написал‏ ‎`.yml`, ‎просто ‎тяжело ‎вздыхаю ‎и‏ ‎оставляю ‎как‏ ‎есть.

А‏ ‎вы ‎как ‎именуете?

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Парные носки

Какие ‎носки‏ ‎парные? ‎Для ‎меня ‎в ‎первую‏ ‎очередь ‎это‏ ‎те,‏ ‎которые ‎одинаково ‎сидят‏ ‎на ‎ногах,‏ ‎на ‎одинаковой ‎высоте, ‎одинаково‏ ‎сдавливают‏ ‎(или ‎одинаково‏ ‎не ‎ощущаются).‏ ‎Цвет ‎или ‎рисунок ‎на ‎носках‏ ‎далеко‏ ‎не ‎первичный‏ ‎признак ‎парности.‏ ‎Более ‎того, ‎если ‎брать ‎носки‏ ‎набором‏ ‎(например‏ ‎пять ‎пар‏ ‎вместе), ‎то‏ ‎вообще ‎не‏ ‎важно,‏ ‎каких ‎они‏ ‎цветов. ‎Все ‎носки ‎из ‎одного‏ ‎набора ‎удобно‏ ‎носить‏ ‎в ‎любом ‎сочетании‏ ‎(пока ‎какие-то‏ ‎не ‎станут ‎более ‎разношенными).‏ ‎Ну‏ ‎и ‎что,‏ ‎что ‎на‏ ‎одной ‎ноге ‎красный ‎носок, ‎а‏ ‎на‏ ‎другой ‎зеленый?‏ ‎Какая ‎разница?‏ ‎Главное ‎что ‎удобно. ‎И ‎что‏ ‎носки‏ ‎без‏ ‎дырок.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Нельзя импортировать из главного модуля

У ‎вас‏ ‎есть ‎main.py, или ‎app.py, или ‎run.py. Это ‎ваш‏ ‎главный ‎модуль,‏ ‎он‏ ‎же ‎«точка ‎входа».‏ ‎Вы ‎запускаете‏ ‎своё ‎приложение ‎через ‎этот‏ ‎модуль.‏ ‎В ‎этом‏ ‎модуле ‎импортировано‏ ‎всё, ‎что ‎нужно ‎для ‎запуска‏ ‎этого‏ ‎проекта. ‎Из‏ ‎главного ‎модуля‏ ‎нельзя ‎импортировать ‎ничего ‎и ‎никогда.‏ ‎Никакой‏ ‎вложенный‏ ‎модуль ‎не‏ ‎может ‎импортировать‏ ‎из ‎главного‏ ‎модуля.‏ ‎Ваша ‎рука‏ ‎не ‎должна ‎никогда ‎даже ‎близко‏ ‎находиться ‎к‏ ‎набору‏ ‎from ‎main ‎import‏ ‎….

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Одна очередь

Почему ‎«единая‏ ‎очередь» ‎не ‎везде? ‎Например, ‎в‏ ‎продуктовом ‎магазине‏ ‎нужно‏ ‎выбрать ‎кассу, ‎где‏ ‎поменьше ‎людей,‏ ‎и ‎у ‎людей ‎корзины‏ ‎поменьше.‏ ‎Почему ‎нельзя‏ ‎выстроить ‎одну‏ ‎очередь, ‎а ‎к ‎освободившейся ‎кассе‏ ‎будет‏ ‎подходить ‎следующий‏ ‎человек ‎из‏ ‎очереди?

Подобное ‎часто ‎можно ‎встретить ‎на‏ ‎паспортном‏ ‎контроле‏ ‎в ‎аэропорту:‏ ‎ты ‎можешь‏ ‎стоять ‎двадцать‏ ‎минут‏ ‎ждать, ‎пока‏ ‎человека ‎перед ‎тобой ‎дополнительно ‎опрашивают‏ ‎и ‎тщательно‏ ‎проверяют‏ ‎его ‎документы. ‎А‏ ‎буквально ‎соседняя‏ ‎очередь ‎двигается ‎со ‎скоростью‏ ‎два‏ ‎человека ‎в‏ ‎минуту. ‎В‏ ‎аэропорту ‎Звартноц ‎(международный ‎аэропорт ‎Еревана)‏ ‎как‏ ‎раз ‎используют‏ ‎единую ‎очередь,‏ ‎там ‎даже ‎под ‎это ‎выделен‏ ‎отдельный‏ ‎человек.‏ ‎И ‎каждому‏ ‎говорят ‎«идите‏ ‎к ‎седьмому‏ ‎окошку»,‏ ‎«идите ‎к‏ ‎пятому ‎окошку».

Понятно, ‎что ‎не ‎важно,‏ ‎какое ‎распределение,‏ ‎если‏ ‎ни ‎одно ‎окошко‏ ‎/ ‎ни‏ ‎одна ‎касса ‎не ‎простаивает.‏ ‎И‏ ‎общее ‎время‏ ‎обработки ‎всё‏ ‎равно ‎не ‎изменится. ‎Но ‎время‏ ‎ожидания‏ ‎отдельного ‎человека‏ ‎может ‎сильно‏ ‎сократиться, ‎плюс ‎вклиниться ‎в ‎такую‏ ‎очередь‏ ‎будет‏ ‎заметно ‎сложнее.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Долг знаний это норма

Что ‎за‏ ‎долг ‎знаний? ‎Это ‎когда ‎вы‏ ‎уже ‎можете‏ ‎что-то‏ ‎сделать, ‎но ‎пока‏ ‎не ‎понимаете,‏ ‎как ‎программа ‎работает, ‎как‏ ‎вам‏ ‎удалось. ‎И‏ ‎речь ‎не‏ ‎про ‎простую ‎копипасту, ‎я ‎про‏ ‎написание‏ ‎строк ‎кода.‏ ‎Например, ‎вы‏ ‎не ‎понимаете, ‎как ‎работает ‎библиотека‏ ‎requests,‏ ‎как‏ ‎расшифровывается ‎API‏ ‎или ‎что‏ ‎такое ‎json,‏ ‎но‏ ‎уже ‎можете‏ ‎сделать ‎запрос ‎на ‎API ‎сервис‏ ‎погоды ‎и‏ ‎отправить‏ ‎прогноз ‎пользователю ‎через‏ ‎телеграм ‎бот.‏ ‎Если ‎при ‎этом ‎у‏ ‎вас‏ ‎есть ‎ощущение‏ ‎«вроде ‎работает,‏ ‎но ‎я ‎не ‎понимаю ‎как‏ ‎и‏ ‎почему», ‎то‏ ‎это ‎тот‏ ‎самый ‎долг ‎знаний.

Долг ‎знаний ‎—‏ ‎круто.‏ ‎Это‏ ‎значит, ‎что‏ ‎вы ‎движетесь‏ ‎вперед ‎и‏ ‎растёте.‏ ‎Позже, ‎когда‏ ‎придёт ‎время, ‎вы ‎разберетесь ‎со‏ ‎всем, ‎что‏ ‎было‏ ‎непонятно ‎ранее. ‎Но‏ ‎эти ‎скучные‏ ‎и ‎даже ‎нудные ‎знания‏ ‎не‏ ‎нужны ‎на‏ ‎старте, ‎когда‏ ‎в ‎вас ‎горит ‎желание ‎сделать‏ ‎что-то‏ ‎полезное ‎и‏ ‎наглядное.

Непонятно, ‎как‏ ‎работает ‎список? ‎Почему ‎он ‎расширяется,‏ ‎и‏ ‎зачем‏ ‎тогда ‎вообще‏ ‎использовать ‎кортеж?‏ ‎Не ‎страшно,‏ ‎потом‏ ‎разберетесь, ‎узнаете‏ ‎про ‎особенности ‎всего, ‎что ‎вы‏ ‎используете ‎в‏ ‎коде.‏ ‎А ‎пока ‎просто‏ ‎пишите ‎код,‏ ‎который ‎будет ‎работать. ‎Пишите‏ ‎как‏ ‎понимаете, ‎смотрите‏ ‎на ‎примеры‏ ‎из ‎документации ‎и ‎переписывайте ‎вручную‏ ‎то‏ ‎же ‎самое‏ ‎(главное ‎не‏ ‎копипастить).

Вы ‎обязательно ‎покроете ‎долг ‎знаний,‏ ‎не‏ ‎нужно‏ ‎позволять ‎ему‏ ‎угнетать ‎вас.‏ ‎Пишите ‎как‏ ‎получится,‏ ‎а ‎потом‏ ‎разберетесь, ‎почему ‎оно ‎работает. ‎Ведь‏ ‎если ‎оно‏ ‎не‏ ‎будет ‎работать, ‎вам‏ ‎придётся ‎разбираться‏ ‎здесь ‎и ‎сейчас, ‎чтобы‏ ‎довести‏ ‎программу ‎до‏ ‎желаемого ‎вида.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Абсолютный путь относителен

Вы ‎не‏ ‎знаете, ‎на ‎какой ‎операционной ‎системе‏ ‎будет ‎работать‏ ‎ваше‏ ‎приложение. ‎И ‎в‏ ‎какую ‎папку‏ ‎сложат ‎ваш ‎проект. ‎Вы‏ ‎можете‏ ‎работать ‎на‏ ‎макос, ‎ваш‏ ‎коллега ‎пишет ‎на ‎винде, ‎а‏ ‎в‏ ‎продакшн ‎запустят‏ ‎на ‎убунте.

Необходимо‏ ‎надежно ‎получать ‎путь ‎к ‎файлу‏ ‎для‏ ‎чтения‏ ‎/ ‎записи,‏ ‎независимо ‎от‏ ‎платформы ‎и‏ ‎места‏ ‎хранения.

Нельзя ‎указать‏ ‎просто ‎захардкоженный ‎абсолютный ‎путь ‎к‏ ‎файлу, ‎просто‏ ‎потому‏ ‎что ‎на ‎всех‏ ‎ОС ‎будет‏ ‎разный ‎корень, ‎не ‎говоря‏ ‎уже‏ ‎о ‎разных‏ ‎именах ‎пользователя.‏ ‎Вам ‎нужно ‎знать ‎путь ‎к‏ ‎файлу‏ ‎и ‎путь‏ ‎к ‎корню,‏ ‎откуда ‎вы ‎работаете.

Вы ‎не ‎сможете‏ ‎использовать‏ ‎абсолютный‏ ‎путь ‎к‏ ‎файлу ‎в‏ ‎хранилище, ‎так‏ ‎как‏ ‎не ‎знаете‏ ‎корень ‎хранилища ‎заранее. ‎К ‎примеру,‏ ‎у ‎вас‏ ‎может‏ ‎быть ‎отдельно ‎бакет‏ ‎S3 ‎и‏ ‎отдельно ‎путь ‎к ‎файлу.‏ ‎И‏ ‎только ‎при‏ ‎обращении ‎вы‏ ‎будете ‎склеивать ‎полный ‎путь.

Абсолютный ‎путь‏ ‎тоже‏ ‎строится ‎относительно.‏ ‎Вы ‎можете‏ ‎быть ‎уверены, ‎что ‎файлы ‎вашего‏ ‎проекта‏ ‎будут‏ ‎расположены ‎именно‏ ‎в ‎таком‏ ‎виде ‎на‏ ‎любой‏ ‎ОС. ‎Поэтому‏ ‎вы ‎выбираете ‎файл ‎внутри ‎вашего‏ ‎проекта, ‎относительно‏ ‎которого‏ ‎вы ‎будете ‎строить‏ ‎абсолютный ‎путь.‏ ‎Например, ‎это ‎файл, ‎где‏ ‎вы‏ ‎читаете ‎конфигурацию.‏ ‎Берете ‎путь‏ ‎к ‎файлу, ‎через ‎него ‎получаете‏ ‎путь‏ ‎к ‎корню‏ ‎вашего ‎проекта,‏ ‎и ‎уже ‎относительно ‎этого ‎значения‏ ‎строите‏ ‎абсолютные‏ ‎пути.

И ‎да,‏ ‎вот ‎эти‏ ‎абсолютные ‎пути,‏ ‎построенные‏ ‎относительно ‎корня‏ ‎проекта, ‎удобнее ‎и ‎надежнее, ‎чем‏ ‎обычные ‎относительные‏ ‎пути.

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Используйте абсолютные пути. Всегда

Даже ‎если‏ ‎«ну ‎только ‎в ‎этот ‎раз».‏ ‎Нет. ‎И‏ ‎«только‏ ‎быстренько ‎для ‎отладки»‏ ‎тоже ‎нет.‏ ‎Абсолютные ‎пути ‎должны ‎быть‏ ‎всегда.‏ ‎Относительных ‎путей‏ ‎не ‎должно‏ ‎быть ‎совсем. ‎Никогда.

Чтение ‎или ‎запись‏ ‎файла?‏ ‎Указывайте ‎абсолютный‏ ‎путь.

Почему? ‎Относительный‏ ‎путь ‎вычисляется ‎относительно ‎текущей ‎рабочей‏ ‎директории.‏ ‎Абсолютный‏ ‎путь ‎вычисляется‏ ‎относительно ‎корня‏ ‎файловой ‎системы.‏ ‎Что‏ ‎реже ‎меняется?‏ ‎Вот ‎это ‎и ‎выбираем.

Список ‎ситуаций,‏ ‎когда ‎можно‏ ‎использовать‏ ‎относительные ‎пути:

Читать: 1+ мин
С
logo
Сурен Хоренян | Программирование

Я люблю этап подготовки

Как ‎классно‏ ‎готовиться. ‎Например, ‎готовиться ‎снимать ‎видео.‏ ‎Так ‎и‏ ‎думаешь‏ ‎себе ‎в ‎голове,‏ ‎как ‎классно‏ ‎всё ‎расскажешь. ‎Или ‎готовиться‏ ‎писать‏ ‎пост. ‎Уже‏ ‎планируешь, ‎как‏ ‎красиво ‎изложишь ‎мысль ‎(нет).

А ‎этап‏ ‎подготовки‏ ‎перед ‎этим‏ ‎ещё ‎интереснее:‏ ‎оформить ‎заметку, ‎потом ‎понять, ‎что‏ ‎есть‏ ‎мысли‏ ‎по ‎ещё‏ ‎нескольким ‎темам,‏ ‎поэтому ‎надо‏ ‎дополнить‏ ‎список. ‎Затем‏ ‎увидеть, ‎что ‎список ‎можно ‎переоформить‏ ‎в ‎виде‏ ‎таблицы,‏ ‎переделать ‎ещё ‎раз.‏ ‎и, ‎вроде‏ ‎как, ‎это ‎называется ‎«прокрастинация»‏ ‎—‏ ‎обратная ‎сторона‏ ‎перфекционизма, ‎когда‏ ‎ты ‎делаешь ‎всё, ‎кроме ‎того,‏ ‎что‏ ‎нужно, ‎и‏ ‎находишь ‎себе‏ ‎оправдание, ‎ведь ‎надо ‎же ‎сделать‏ ‎красиво,‏ ‎верно?

Только‏ ‎этап ‎подготовки‏ ‎к ‎путешествию‏ ‎не ‎люблю.‏ ‎Каждый‏ ‎раз ‎собирать‏ ‎вещи. ‎тяжеловато.

Читать: 3+ мин
С
logo
Сурен Хоренян | Программирование

Зачем мне ваша поддержка и про стабильность

Привет! ‎Это‏ ‎пост ‎о ‎том, ‎почему ‎мне‏ ‎очень ‎ценна‏ ‎ваша‏ ‎поддержка ‎и ‎что‏ ‎вы ‎получите‏ ‎взамен. ‎В ‎посте ‎скриншоты‏ ‎с‏ ‎планами ‎работ‏ ‎(прошлыми ‎и‏ ‎будущими).

TL;DR

(too-long, ‎didn't ‎read)

Производство ‎видео ‎стоит‏ ‎денег.‏ ‎Монтаж, ‎превью.‏ ‎Я ‎плачу‏ ‎за ‎это ‎сам, ‎поэтому ‎мне‏ ‎будет‏ ‎очень‏ ‎приятно, ‎если‏ ‎вы ‎мне‏ ‎с ‎этим‏ ‎поможете.‏ ‎Дополнительная ‎мотивация‏ ‎позволит ‎мне ‎продержаться ‎дольше. ‎Вам‏ ‎нравятся ‎видео?‏ ‎Самая‏ ‎классная ‎поддержка ‎это‏ ‎ваши ‎комментарии‏ ‎и ‎лайки. ‎А ‎если‏ ‎вы‏ ‎ещё ‎можете‏ ‎закинуть ‎копеечку,‏ ‎это ‎вообще ‎супер ‎мега ‎круто!


Что‏ ‎вы‏ ‎получаете

Вы ‎могли‏ ‎заметить, ‎что‏ ‎с ‎октября ‎видео ‎на ‎канале‏ ‎выходят‏ ‎регулярно.‏ ‎Это ‎моя‏ ‎демонстрация ‎для‏ ‎вас, ‎что‏ ‎я‏ ‎могу ‎поставлять‏ ‎контент ‎стабильно. ‎

Когда ‎наберем ‎10‏ ‎платных ‎подписчиков,‏ ‎запущу‏ ‎рубрику ‎с ‎ответами‏ ‎на ‎ваши‏ ‎вопросы ‎(в ‎видео ‎формате).‏ ‎Если‏ ‎будет ‎актуально,‏ ‎конечно.

На ‎что‏ ‎идут ‎деньги

Для ‎того, ‎чтобы ‎видео‏ ‎выходили‏ ‎так ‎часто‏ ‎(а ‎два‏ ‎видео ‎в ‎неделю ‎это ‎много‏ ‎работы),‏ ‎монтажом‏ ‎занимаются ‎фрилансеры.‏ ‎Если ‎бы‏ ‎монтировал ‎я‏ ‎сам,‏ ‎выходило ‎бы‏ ‎от ‎силы ‎два-три ‎видео ‎в‏ ‎месяц. ‎А‏ ‎их‏ ‎выходит ‎восемь ‎(по‏ ‎два ‎в‏ ‎неделю). ‎Сегодня ‎я ‎работаю‏ ‎с‏ ‎тремя ‎фрилансерами,‏ ‎этого ‎как‏ ‎раз ‎хватает, ‎чтобы ‎успевать ‎сделать‏ ‎нужный‏ ‎объем, ‎так‏ ‎как ‎у‏ ‎кого-то ‎одно ‎видео ‎занимает ‎две‏ ‎недели,‏ ‎у‏ ‎кого-то ‎на‏ ‎монтаж ‎уходит‏ ‎одна ‎неделя,‏ ‎а‏ ‎кто-то ‎был‏ ‎очень ‎занят ‎и ‎не ‎успел.‏ ‎И ‎превью,‏ ‎конечно,‏ ‎рисую ‎не ‎сам.‏ ‎Опустим ‎факт,‏ ‎что ‎с ‎каждым ‎нужно‏ ‎всё‏ ‎согласовывать, ‎вносить‏ ‎правки, ‎всё‏ ‎отсматривать ‎и ‎пересматривать ‎(вот ‎я‏ ‎один‏ ‎раз ‎не‏ ‎пересмотрел ‎ролик,‏ ‎и ‎уже ‎зрители ‎заметили ‎косяки,‏ ‎которые‏ ‎проявились‏ ‎при ‎экспорте,‏ ‎это ‎я‏ ‎про ‎последний‏ ‎КодКниги‏ ‎про ‎ошибки).‏ ‎

В ‎зависимости ‎от ‎выполненного ‎объема‏ ‎работ ‎это‏ ‎16-20‏ ‎тысяч ‎рублей ‎в‏ ‎месяц. ‎Проецируем‏ ‎на ‎год, ‎и ‎выходит‏ ‎примерно‏ ‎200к ‎в‏ ‎год ‎просто‏ ‎на ‎хобби. ‎Не ‎говоря ‎уже‏ ‎об‏ ‎оборудовании, ‎которое‏ ‎я ‎покупаю,‏ ‎чтобы ‎упростить ‎съемки ‎и ‎повысить‏ ‎качество‏ ‎видео.‏ ‎Эти ‎деньги‏ ‎у ‎меня‏ ‎от ‎дополнительных‏ ‎подработок‏ ‎и ‎контрактов,‏ ‎налоговая ‎в ‎курсе. ‎Вы ‎могли‏ ‎видеть ‎меня‏ ‎на‏ ‎разных ‎образовательных ‎площадках,‏ ‎я ‎сотрудничаю‏ ‎с ‎многими ‎платформами. ‎Так‏ ‎что‏ ‎если ‎вы‏ ‎сможете ‎хотя‏ ‎бы ‎часть ‎производственных ‎трат ‎компенсировать,‏ ‎мне‏ ‎будет ‎супер‏ ‎приятно.

Заработать ‎на‏ ‎нас ‎решил?!

Конечно, ‎хотелось ‎бы. ‎Но‏ ‎сейчас‏ ‎я‏ ‎делаю ‎видео‏ ‎только ‎на‏ ‎своём ‎энтузиазме.‏ ‎Если‏ ‎/ ‎когда‏ ‎ваше ‎спонсорство ‎начнёт ‎покрывать ‎и‏ ‎превышать ‎траты‏ ‎на‏ ‎производство, ‎ролики ‎будут‏ ‎выходить ‎чаще.‏ ‎Возможно, ‎новые ‎форматы ‎также‏ ‎добавят‏ ‎вам ‎желания‏ ‎немного ‎мне‏ ‎помочь.

И ‎ещё ‎раз ‎уточню, ‎что‏ ‎всё,‏ ‎что ‎я‏ ‎сейчас ‎публикую,‏ ‎остаётся ‎также ‎в ‎общем ‎доступе,‏ ‎подобные‏ ‎ролики‏ ‎продолжат ‎выходить‏ ‎и ‎дальше.‏ ‎Самая ‎большая‏ ‎поддержка‏ ‎это ‎ваши‏ ‎комментарии ‎и ‎лайки.

Ниже ‎скриншоты, ‎как‏ ‎выглядит ‎план‏ ‎съемок‏ ‎и ‎публикаций ‎на‏ ‎октябрь-ноябрь. ‎Как‏ ‎видите, ‎я ‎могу ‎позволить‏ ‎себе‏ ‎две ‎недели‏ ‎ничего ‎не‏ ‎снимать, ‎и ‎всё ‎продолжит ‎выходить‏ ‎стабильно.‏ ‎Так ‎что‏ ‎если ‎вы‏ ‎будете ‎готовы ‎поддержать ‎производство, ‎может‏ ‎выходить‏ ‎больше‏ ‎роликов.

Спасибо ‎за‏ ‎вашу ‎поддержку!


Показать еще

Обновления проекта

Статистика

Метки

Фильтры

Подарить подписку

Будет создан код, который позволит адресату получить бесплатный для него доступ на определённый уровень подписки.

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

Будет создан код, который позволит адресату получить сумму на баланс.

Разово будет списана указанная сумма и зачислена на баланс пользователя, воспользовавшегося данным промокодом.

Добавить карту
0/2048