Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Поднимайтесь как можно выше по дереву, собирайте цветы и дарите их близким.
Вас ждут уникальные награды и 22 выгодных промокода!

Пикаджамп

Аркады, Казуальные, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • Animalrescueed Animalrescueed 36 постов
  • Oskanov Oskanov 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
79
anetto1502
anetto1502
2 года назад
Программирование на python

Вопрос на собеседовании python junior developer — вывод списка⁠⁠

Наткнулся на github на список вопросов к собеседованию python разработчика. Заинтересовал вопрос про вывод списка, ответ на который морально устарел.

Что выведет такой код?

Вопрос на собеседовании python junior developer — вывод списка Программирование, Разработка, IT, Обучение, Python, Собеседование, Telegram

В первую очередь это вопрос на внимательность. Но есть и о чём порассуждать.
1. Сразу начнём с PEP8. Называть переменную List нельзя, такой формат именования используется для классов.

class List():
.  pass  # точка в начале - иначе пикабу не даёт выставить табуляцию

2. Заметна опечатка — создался List, срез делается по list. Но тут начинается интересное. Эта версия кода в python3.6 вызовет ошибку TypeError: 'type' object is not subscriptable.

Вопрос на собеседовании python junior developer — вывод списка Программирование, Разработка, IT, Обучение, Python, Собеседование, Telegram

Связано это с тем, что list — ключевое слово для создания списка в формате list(). Но без круглых скобок list — это сам класс list, а не экземпляр. У самого класса список не определена операция получения элемента по номеру (subscription).


С обновлением системы указания типов в 3.9 питоне, выражение вида list[10:] рассматривается интерпретатором как список диапазонов или list[slice(10, None, None)] и выдавать ошибку уже не будет.

Вопрос на собеседовании python junior developer — вывод списка Программирование, Разработка, IT, Обучение, Python, Собеседование, Telegram

3. Если код был бы такой
list_a = []
print(list_b[10:])

То мы получили бы ошибку NameError: name 'list_' is not defined независимо от версии питона.

Итого исходный код приведёт к:

— TypeError, если мы использовали ключевое слово list в python3.6

— list[slice(10, None, None) для python3.9

— NameError, если мы использовали несуществующее название переменной.


И такой код вообще не должен пройти code review.


В телеграмм-канале devfm разбираем разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командную разработку.

Показать полностью 2
[моё] Программирование Разработка IT Обучение Python Собеседование Telegram
53
95
anetto1502
anetto1502
2 года назад
Программирование на python

Ответ на пост «Без рейтинга. Самообучение PHP или курсы»⁠⁠1

По PHP не подскажу. ЯП много и выбор в целом не однозначен. Но выбирать технологию следует с оглядкой на
1. популярность. Чем популярнее, тем больше мануалов, помощи везде и всё такое
2. сообщество. Мануалы нужны хорошего качества, иначе найденные решения будут учить плохому
3. применимость. У каждого инструмента своя область


по пункту 1 можно ориентироваться на рейтинги. Сами по себе рейтинги мало что говорят, но вот динамика подсказывает. Смотрим TIOBE. На скрине ниже выделены python, java и PHP.

Ответ на пост «Без рейтинга. Самообучение PHP или курсы» PHP, Языки программирования, Самообразование, Python, Текст, Разработка, Обучение, Программирование, IT, SQL, Telegram, Ответ на пост, Длиннопост

Нисходящий тренд PHP должен вызывать настороженность. Стоит ли выбирать инструмент, у которого было 10% рынка, а теперь 1.5?

более того, по пункту 2 - сообщество у PHP большие проблемы. В плане там слишком много legacy, очень много плохих подходов, переход на PHP7 вызвал большой раскол и вообще всё не очень хорошо. Имеет смысл идти в PHP, только если у вас есть хороший ментор. Перенять крутой опыт в любой технологии полезно.


Про курсы. Материала куча всякого разного. Рекомендую ориентироваться на крутые книги, добавлять статьи + видеоматериалы по теме. Можно посмотреть на бесплатные или недорогие платные курсы. Курсы типа за 120к в целом имеют мало смысла.

Наверное, 80% успеха в изучении - это самостоятельная работа. Ещё 20% заложено в обратную связь, когда вам покажут на ошибки. Прикол в том, что на больших образовательных площадках обратную связь дают далеко не профессиональные разработчики. Посмотрите вакансии тех, кто проверяет домашку, например, по запросу "<площадка> наставник", речь про зп в районе 30-55к в месяц.

Ответ на пост «Без рейтинга. Самообучение PHP или курсы» PHP, Языки программирования, Самообразование, Python, Текст, Разработка, Обучение, Программирование, IT, SQL, Telegram, Ответ на пост, Длиннопост

Материалы в платных курсах могут быть далеко не выдающиеся по уровню. Можно наткнуться на плохой платный курс и на хороший бесплатный, и наоборот.


Небольшая подборка бесплатного материала по Python для старта:

1. Классическим хорошим курсом из бесплатных считаются Поколения Python на stepik для начинающих и для продвинутых.

2. На ютубе есть годные лекции Тимофей Хирьянова из МФТИ.

3. Python: основы и применение на stepik

4. Не питоном единым, поэтому надо ещё и немного в базы. Можно посмотреть на Интерактивный тренажер по SQL

5. Освоить git, достаточно 4 глав из книги Pro Git


Можно пойти на codewars и leetcode для закрепления умения программировать. Когда сложилось базовое понимание происходящего, рекомендую переключаться на книги типа Лутца (двухтомник, нужно свежее 5 издание 2019-2020 годов) и идти по ней. Книга большая и достаточно сложная, но покрывает много важных деталей. Можно читать не всю, а главами или разделами по непонятным темам.


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


А дальше нужно писать как можно больше кода, периодически осматриваясь вокруг. Разработка - это не только язык, это ещё библиотеки, фреймворки, разные инструменты, тесты, проектирование архитектуры, командная разработка, получение задач через bug tracker, работа с ветками в git и вообще flow разработки, CI/CD и ещё много всякого разного.


Одним из источников кругозора может быть телеграмм-канал devfm, где разбираются разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командная разработка.

Показать полностью 1
[моё] PHP Языки программирования Самообразование Python Текст Разработка Обучение Программирование IT SQL Telegram Ответ на пост Длиннопост
72
3030
mems.baker
mems.baker
2 года назад
Юмор для всех и каждого

Большинство лайфхаков я вижу вот так:⁠⁠

tg - Mem's_Bakery

Большинство лайфхаков я вижу вот так: Юмор, Картинка с текстом, Telegram, Дверь, Ручка, YouTube, Лайфхак, Совет, Обучение
Юмор Картинка с текстом Telegram Дверь Ручка YouTube Лайфхак Совет Обучение
35
86
anetto1502
anetto1502
2 года назад
Программирование на python

Не копируйте примеры кода сразу в терминал⁠⁠

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


Как это технически работает?


В JS можно на событие copy навесить свой обработчик, который что-то модифицирует. Есть более современное Clipboard API.

Этот функционал позволяет осуществить атаку на целостность данных через манипуляцию с содержимым буфера обмена. Результат - страничка, где написано


echo "not evil"

Теперь скопируйте этот фрагмент и вставьте в терминал. Поздравляю, вас хакнули. В терминал вставился другой текст

echo "evil"

Не копируйте команды сразу в терминал. Лучше перепечатать (так ещё и запомнится лучше) или идти по пути сайт — блокнот — анализ глазками. Копировать без переноса строки тоже не поможет — наглый js может вставить в буффер символ переноса строки. В итоге безопасное

pip install -U pytest

Может сделать с вами что-то злобное. Не всегда об этом можно узнать. Команды в терминале, которые начинаются с пробела, в истории команд не сохраняются. Если вывод команды достаточно длинный (установка пакета для python является хорошим примером), то вы даже не увидите настоящую введенную команду.


А ещё так можно модифицировать ваш .bashrc, сделав любой alias.


В телеграм-канале разбираем разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командную разработку.

Показать полностью
[моё] Разработка Программирование IT Обучение Python Linux Telegram Командная оболочка bash Уязвимость Текст
23
64
anetto1502
anetto1502
2 года назад
GNU/Linux

Ковыряем атаку forkbomb на bash в docker⁠⁠

Есть такой вид атаки на отказ в обслуживании (DoS, Denial of Service) — forkbomb. Запускается процесс, который бесконечно порождает сам себя, пожирая все ресурсы системы. Прав суперпользователя не требуется, любой пользователь может создавать процессы.


Cкрипт атаки выглядит так. Функция порождает две версии себя, связанные конвейером. Правая функция уходит в фоновый режим с помощью знака амперсанд &.

forkbomb()
{
forkbomb | forkbomb&
}

Скрипт можно переписать в непонятный однострочник, изменив название на символ двоеточия:

:(){ :|:& }; :

Такой набор символов эквивалентен скрипту выше. При этом он компактен, и его могут запихнуть вам в качестве шуточного ответа на вопрос. Спасибо ещё, что не патч Бармина.


В видео также рассматриваются линуксовые команды команды

1. lscpu

2. nproc

3. uptime

4. top

5. free

6. переменные $$ $PPID

7. настройка числа PID в /proc/sys/kernel/pid_max

8. ctrl-L для очистки терминала

9. разделение экрана в терминале terminator

10. буфер выделения и вставка по нажатию на колёсико мышки

11. pkill


И разбираются флаги такой docker команды

docker run --it --rm --cpus="0.5" --memory=4G --pids-limit=1000 --name=forkbomb ubuntu bash

Плюс применяются команды docker ps / stats / exec.


Хотите почувствовать себя капитаном тонущего корабля? Теперь ресурсы системы принадлежат не вам, а паразитному процессу forkbomb. Приятного просмотра!

Починить атакованную систему можно только перезагрузкой. Ну, если атакующий скрипт вам не дописали в .bashrc. Тогда только recovery mode в grub.


В телеграм-канале разбираем разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командную разработку.

Показать полностью 1
[моё] Разработка Программирование IT Обучение Linux Telegram Командная оболочка bash Видео YouTube
18
47
anetto1502
anetto1502
3 года назад
Программирование на python

Закон дырявых абстракций и GIL в python⁠⁠

Давным давно Джоел Спольски рассказал о "законе дырявых абстракций" (оригинал от 2002 года). В современном мире, чтобы починить проблему, часто надо уметь работать на уровень ниже текущего уровня абстракции. Проблема может быть с compose, docker, конкретной библиотекой, python, операционной системой, сетью, железом... Чем больше абстракций вы знаете, тем больше вероятность, что вы сможете решить проблему следующего уровня.


Нельзя в один момент освоить десяток нужных инструментов и абстракций. Нужно плавно расширять используемый инструментарий. Освоили git? Ни строчки кода далее без него. Научились тестам? В каждом проекте их нужно писать с самого начала. Теперь Docker в копилке? Применяем, если это уместно. Чем больше опыта в разных технологиях, тем вы сильнее как специалист.


Расскажу о своём опыте. В статье как расширить технический кругозор я делился, что для ориентирования в технологиях я постоянно читал хабр (2010-2015 года, самый расцвет технического контента там). Пришёл ко мне коллега со следующим вопросом. Я, говорит, выгружаю строю граф друзей в социальной сети, для этого массово скриптом на python выгружаю оттуда списки всех друзей и складываю в mongodb. Запускаю выборку на N человек на 1 потоке — скрипт работает 60 секунд. Запускаю на 10 потоках — скрипт работает 70 секунд. Мне надо N увеличить и запуститься на сутки, но какого чёрта увеличение числа процессоров замедляет выполнение?  Где проблему искать?

Это питон тормозит?

В монге проблемы?

С компом что-то не так?

Социальная сеть меня банит?

Сеть тормозит?

Где вообще искать беду?


А я просто знал ответ. Прочитал накануне статью про GIL в python. На вики она выглядит так. Если кратко, то из-за потоковой небезопасности кода на Си, который внутри всех стандартных библиотек питона, интерпретатор физически работает на одном ядре, а многопоточность реализована с блокировками. Это не важно для IO-bound задач (когда код ждёт внешних данных), но критична для CPU-bound задач (когда реально надо все ядра использовать).

Для починки всего-то и надо, что заменить модуль многопоточности threading.Thread на многопроцессность multiprocessing.Process. Теперь работают 10 независимых процессов, которые делают своё черное дело. У них нет связи (общего адресного пространства), которое есть у потоков. Но в этой задаче связь и не нужна была, процессу выдавался пул адресов для анализа.

И теперь 60 секунд на 1 ядре превратилось в 10 секунд на 10 ядрах. Да, не в 10 раз ускорилось, но это вполне годное ускорение. А ещё можно посмотреть, как делают рядом и воспользоваться топовым инструментом.


В телеграм-канале разбираем разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командную разработку.

Показать полностью
[моё] Программирование Разработка IT Обучение Linux Python Telegram Текст
22
16
anetto1502
anetto1502
3 года назад
Программирование на python

Как анализировать предметную область перед разработкой на примере видеоаналитики⁠⁠

Хочу поделиться с разработчиками своим опытом научного поиска. Изобретать велосипед хорошо только в учебных целях. Но весело :)


Любая работа по программированию начинается с анализа предметной области. Надёжнее всего использовать материалы из рецензируемых научных изданий (отечественные ВАК и РИНЦ, зарубежные WebOfScience и Scopus — напрямую из РФ недоступны). Наличие рецензирования обычно позволяет отбросить плохие статьи, что в целом повышает качество оставшихся статей. Могу порекомендовать для русского и английского поиска такие ресурсы


Киберленинка — open science платформа

ResearchGate — соц сеть для учёных (англ).

Google.Академия — сбор знаний отовсюду

ArXiv — сборник препринтов, то есть незавершённых исследований


Мне меньше нравятся, но тоже хороши:


eLibrary — собственно, сам РИНЦ

IEEE Xplore

Semantic Scholar

Springer


У большинства современных рецензируемых статей есть DOI. Отсутствие не страшно, но в современном мире удивительно.


В начале ищутся самые популярные статьи, потом следует подкрутить фильтры и взять самые свежие (не старше 5 лет, не старше 3 лет — зависит от области знаний). Большую часть усилий стоит сосредоточить на англоязычных источниках, там самый свежий и актуальный материал.


Если статья интересная, но отсутствует в открытом доступе, можно погуглить "название статьи filetype:pdf" в гугле. Нередко так можно найти PDF от автора, препринт или статьи, которые на искомую ссылаются.


Видео примеры по тегам можно искать по размеченным видео с ютуба.


Интересные рассмотренные статьи необходимо заносить в список с небольшой аннотацией. Такой список позволит в большей степени понимать и ориентироваться в предметной области. и синхронизировать усилия нескольких людей. Например,


1. <ссылка>. Работа на "хорошо". В работе есть данные по нейросети, которая с 80% точностью распознаёт человека в маске. Ссылка на программу есть, на датасет нет. Напрямую применить нельзя, но можно взять часть про нормализацию кадра

2. <ссылка>. Выглядела на "отлично", по факту бред. Литературы нет, написано на коленке


Примеры разобранных статей в области видеоаналитики:

1. Многокритериальная оценка качества фотографий. В статье рассматриваются различные критерии качества изображений, а также их количественная оценка. Из полезного: оценка резкости изображения, что может быть полезно для выделения одного наиболее информативного кадра в потоке на заданном промежутке времени. Есть математические операции по подсчету, а также примеры использования OpenCV для получения количественных оценок

2. Алгоритмы предобработки изображений в системе идентификации лиц в видеопотоке. В статье описывается алгоритмы предобработки изображений для их последующей обработки. Сюда входит

— Обесцвечивание

— Выравнивание гистограммы яркости изображения

— Выравнивание изображения относительно вертикальной оси симметрии лица (по возможности)

— Масштабирование

3. Video data quality improvement methods and tools development for mobile vision systems. В статье производится сравнение подходов однопоточной и многопоточной мобильной обработки видео, зависимость скорости обработки видео от его разрешения, а также приводятся примеры перехода из пространства RGB в YUV на OpenCV с целью оценки освещенности изображения

4. Age + Gender Estimation in Android with TensorFlow. Приложение под Android, определяющее пол и возраст человека на изображении. Прилагаются скриншоты результатов распознавания. Если с точностью определения пола все хорошо, то c определением возраста как-то не очень (числовые оценки не приводятся). Есть ссылки на датасет и блокноты в Colab, которые экспортируют модели TFLite (используется в приложении для Android). Из полезного можно вынести на мобилку модель для определения пола.


Очень важно изучить существующие открытые проекты на github. Например, если мы пытаемся по видеоряду определить возраст человека и всё делаем на питоне, то можно поискать age detection и выбрать ограничение на python. На текущий момент в поиске будет почти 600 проектов. Их берём и разбираем — есть ли документация, можно ли запустить, свежее ли, есть ли описание. Если что-то можно переиспользовать (с оглядкой на лицензию) — то переиспользуем.

Как анализировать предметную область перед разработкой на примере видеоаналитики Программирование, Разработка, Python, IT, Обучение, Telegram, Наука, Длиннопост

В телеграм-канале разбираем разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командную разработку.

PS: спасибо Александре Элбакян за sci-hub

Показать полностью 1
[моё] Программирование Разработка Python IT Обучение Telegram Наука Длиннопост
7
40
anetto1502
anetto1502
3 года назад
Программирование на python

Рефакторим простое на python⁠⁠

Давайте посмотрим на 10 строк кода.

Рефакторим простое на python Программирование, Разработка, Python, Обучение, Telegram, IT, Код, Длиннопост

Вроде всё хорошо. Классическое открытие файла с помощью контекстного менеджера with, классическая построчная обработка. Разбиваем строку, записываем в список словарей. Всё ли по канону? Неа:

1. Смотрим документацию: readlines возвращает список всех строк файла. Значит, для большого файла может быть беда. Современный питон позволяет итерироваться сразу по объекту file_. Просто пишем

for line in file_:

2. raw_line[0] и прочие индексы — это всегда ужас. Заменяем на

fio, login = line.split(";")

Вроде то же самое, но мы сразу понимаем, что было в строке. И тут же видим следующую проблему.

3. А что, если в строке нет двоеточия, или этих двоеточий больше одного? То есть нужна обработка ошибок на исключение ValueError, если справа split вернул не два значения. Добавляем try-except.

4. Частая проблема split — это лишние пробелы. Скорее всего, потребуется strip всем переменным после split.

Итого 4 ошибки на 10 строк кода.


Теперь посмотрим на переработанный код. Docstring вырезан для краткости.

Рефакторим простое на python Программирование, Разработка, Python, Обучение, Telegram, IT, Код, Длиннопост

Код теперь крут:

1. Есть аннотация типов. Понятно, что на входе строка, на выходе список.

2. С файлом всё работаем через контекстный менеджер, то есть закрыть не забудем — оно само

3. Не забыли про запрет использования file как ключевого слова, поэтому file_

4. При разбиении строки по точке с запятой используем именованные переменные

5. При ошибках — кастомные исключения. Не забудьте их документировать в docstring

6. Добавлены strip для убирания лишних пробелов по краям. Опционально

7. Выходная переменная называется logins

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

В общем, каждая строка на своём месте. Или всё ещё нет?


Возьмём такой входной файл

Иванов Иван;anetto
Сидоров Петр;bnetto
Петров Артём;сnetto

Для него вывод итогового logins будет выглядеть так

[{'fio': 'Иванов Иван', 'login': 'anetto'}, {'fio': 'Сидоров Петр', 'login': 'bnetto'}, {'fio': 'Петров Артём', 'login': 'сnetto'}]

Этот словарь не является удобной конструкцией, ФИО доступно как logins["fio"]. Кроме того, мы демонстрируем наружу внутреннее представление, нарушая принцип инкапсуляции. Замена словаря на список, например, заставит переписать весь код, который использует эту структуру данных. Какой может быть выход?


Создадим класс Student и превратим словарь в экземпляр класса. Можно использовать namedtuple из collections, но мы пойдём своим путём - создадим класс с двумя полями (fio, login) и двумя методами (конструктор и repr для вывода). Теперь logins будет списком экземпляров класса.

Рефакторим простое на python Программирование, Разработка, Python, Обучение, Telegram, IT, Код, Длиннопост

Бонусов много:

1. Мы скрываем внутреннее устройство Student. Наружу мы отдаём только пару полей, откуда мы их берём никто снаружи не знает. Вместо logins["fio"] теперь используется logins.fio.

2. Можем к Student добавлять методы. Например, вывод фамилии с инициалами в стиле Иванов И.И. — теперь это в нашей власти. В примере в repr выводится ФИО:логин. Мы полностью можем кастомизировать вывод.

3. Можем добавить новые способы создания этого студента, например, данные брать из базы данных.

Пока методов нет, можно выключать диагностику pylint, а то нам будет ругаться "у класса слишком мало публичных методов". Не забываем включить её обратно после класса.


Теперь вывод выглядит так

[Иванов Иван:anetto, Сидоров Петр:bnetto, Петров Артём:сnetto]

В телеграм-канале разбираем разные нюансы из жизни разработчика на Python и не только — python, bash, linux, тесты, командную разработку. На ютуб-канале вы можете посмотреть часовой стрим по созданию небольшого проекта на gitlab.

PS: а как лучше вставлять фрагменты кода? В цитатах нет подсветки :(

Показать полностью 2
[моё] Программирование Разработка Python Обучение Telegram IT Код Длиннопост
39
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии