DevFM
2.35K subscribers
80 photos
5 videos
493 links
О разработке: технологии, инструменты, system design, процессы, команды

Для связи @sa_bul
Download Telegram
Любая работа по программированию начинается с анализа предметной области. Рекомендуется пара этих ресурсов - для русского и английского поиска.

https://cyberleninka.ru

https://www.researchgate.net

https://scholar.google.com/

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

Видео можно искать так
https://research.google.com/youtube8m/explore.html

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

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

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

Пример:
1. https://cyberleninka.ru/article/n/mnogokriterialnaya-otsenka-kachestva-fotografiy/viewer В статье рассматриваются различные критерии качества изображений, а также их количественная оценка. Из полезного: оценка резкости изображения, что может быть полезно для выделения одного наиболее информативного кадра в потоке на заданном промежутке времени. Есть математические операции по подсчету, а также примеры использования OpenCV для получения количественных оценок

2. https://cyberleninka.ru/article/n/algoritmy-predobrabotki-izobrazheniy-v-sisteme-identifikatsii-lits-v-videopotoke/viewer В статье описывается алгоритмы предобработки изображений для их последующей обработки. Сюда входит
- Обесцвечивание
- Выравнивание гистограммы яркости изображения
- Выравнивание изображения относительно вертикальной оси симметрии лица (по возможности)
- Масштабирование

3. https://www.researchgate.net/publication/341892534_VIDEO_DATA_QUALITY_IMPROVEMENT_METHODS_AND_TOOLS_DEVELOPMENT_FOR_MOBILE_VISION_SYSTEMS В статье производится сравнение подходов однопоточной и многопоточной мобильной обработки видео, зависимость скорости обработки видео от его разрешения, а также приводятся примеры перехода из пространства RGB в YUV на OpenCV с целью оценки освещенности изображения

4. https://github.com/shubham0204/Age-Gender_Estimation_TF-Android Приложение под Android, определяющее пол и возраст человека на изображении. Прилагаются скриншоты результатов распознавания. Если с точностью определения пола все хорошо, то c определением возраста как-то не очень (числовые оценки не приводятся). Есть ссылки на датасет и блокноты в Colab, которые экспортируют модели TFLite (используется в приложении для Android). Из полезного можно вынести на мобилку модель для определения пола.

#sudo #edu #devfm
🔥6
Пятничное развлекательное.

Один из самых известных скетчей на тему постановки задачи неспециалистом – 7 красных линий, в оригинале The Expert.

PS: а решение задачи существует
PPS: современное образование - вообще проблема

#fun #edu #sudo
👍6🔥4
Сегодня рассмотрим плохую статью про выбор способа изучения программирования. За неделю статья получила 20 минусов, а автор 7 минусов в карму. Давайте критически посмотрим, где есть проблемы.

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

Самое мясо начинается дальше. Автор формирует таблицу сравнения "самых популярных языков". Сразу возникает много вопросов, которые следует учесть студентам в рамках работы над курсовыми и дипломными работами.

1. Выбор ЯП. Почему эти 6 языков и по какой метрике они самые популярные? Например, по TIOBE шестым по популярности идёт Visual Basic. По версии PYPL С и С++ объединены, а в топ шесть входят JavaScript (третий) и PHP (шестой). Согласно обзору от stackoverflow в лидерах JavaScript, SQL, Python, Java, C#, bash. HTML я убрал как язык разметки, а не программирования, а TypeScript грубо считаю диалектом JS.
Кстати, по этому же обзору Docker — самая популярная технология в 2022 году, отмеченная как fundamental tool for Professional Developers, как и git в обзоре 2021 года.

Как можно выбирать?
— сослаться на рейтинг
— взять набор, например, разных представителей — один компилируемый язык, один интерпретируемый, один с типизацией, второй без
— субъективно отобрать произвольные 6 языков. Почему эти? Я автор, я так вижу. Но не надо говорить тогда, что это самые популярные ЯП. Вы взяли их, так как они в вашем информационном поле

2. Критерии для сравнения. Вот тут совсем дичь. "Скорость обработки"? А в чём мы измеряем и на какой задаче? Например, Python из-за GIL в многопоточном варианте для cpu-intensive задач — просто ужас.

Как минимум, критерии должны отвечать двум требованиям:
— полнота, то есть все важные характеристики должны быть учтены
— достаточность, то есть никакой критерий выкинуть нельзя

Критерии должны быть подробно описаны и словами с обоснованием полноты и достаточности. Например, если мы ищем ЯП для формирования программы обработки таблицы со 100 записями и 5 полями каждая, то критерий "производительность" нам не нужен. Если все альтернативы по критериям имеют одинаковую оценку, то критерий плохой и должен быть удалён.

Если мы говорим о выборе ЯП для начинающих разработчиков, то скорость обработки нам тоже не требуется как критерий. Что нам может быть важно? Небольшое количество конструкций для запоминания, отсутствие магии, доступность IDE для работы, понятные сообщения об ошибках и быстрая обратная связь (когда компилятор бьёт по рукам и говорит, где конкретно ошибка), доступность литературы и иных обучающих материалов. Вот эти пункты могут выступать кандидатами в критерии.

3. Оценки по критериям. Читабельность у C# 7, а у Python 6? Мммм? А у C++ тоже 6? А вы видели крестики-нолики на шаблонах? Как это оценивалось? Идеальный критерий имеет объективную численную оценку. В Python 33 ключевых слова, в С++ таких слов 92. Это факты. Субъективная оценка — зло, которого следует избегать. Если что-то надо-таки оценивать, то требуется множество экспертов и какой-то формализованный способ сбора мнений, например, метод парных сравнений, который использовали в фильме "Социальная сеть" 2010 года (сайт для сравнения девушек как студенческий проект Цукерберга).

Выбор и обоснование критериев — трудозатратная задача. Но без толковых критериев весь сравнительных обзор становится бесполезным и идёт в /dev/null.

#sudo #edu #devfm
👍101🔥1💩1
Ключевые аспекты хорошего Dockerfile

— Порядок команд важен. Вверху редко меняющиеся сущности (ставим зависимости apt-get, pip), внизу – часто меняющиеся (копируем ваш код)
— Слои нарастают и не удаляются. Если слой генерирует «мусор» – удалять нужно в этом же слое, иначе место не уменьшится
— Пользуемся готовыми образами на dockerhub

Если пробросить внутрь контейнера каталог с вашим кодом – вы получите dev-контейнер, сразу подхватывающий изменения кода. Исполняемый скрипт запустится новой версии, веб-сервер сам перезапустится.

И помните – если docker вам мешает, скорее всего, вы что-то делаете неправильно.
#skills #sudo #devfm
🔥4
Online resources to learn how to code

Основной источник знаний — это техническая документация. В целом, man — всему голова. Отсюда возникает необходимость в английском языке, как интернациональном языке разработчиков. Это как латынь у медиков — в IT без английского никуда. По крайней мере, пока нас не поработят китайцы.

А ваш проект должен содержать подробное readme.

#sudo
👍13🔥1
Databases среди Professional Developers. Всегда переключаем на Professional Developers, потому что лучшее надо смотреть у лучших. Те, кто Learning to Code, вам подсказать не смогут

Неплохо бы знать парочку баз данных отсюда. Имеет смысл изучить реляционную (например, PostgreSQL) и документную (например, MongoDB) базы.

Во всех опросах можно было выбирать несколько галочек, так что сумма больше 100%

#sudo
👍10🔥2
Other tools среди Professional Developers

Варианты, мягко говоря, странные. Менеджеры пакетов npm, yarn, homebrew я бы исключил (это что-то уровня IDE), как и платформы для игр Unity, Unreal Engine (они должны идти в frameworks).

Среди оставшегося доминирует контейнерная виртуализация Docker и система управления контейнерами Kubernetes. Без докера никуда, господа.

#sudo
👍11🔥3
Version control systems среди Professional Developers

Git 97%, SVN 6%. Варианты "без системы контроля версий" и mercurial менее 3% в сумме.

Не умеешь в Git? Ты не разработчик

#sudo
👍15🔥2👎1
Когда код не работает, то понять проблему помогут следующие способы:
1. Метод пристального взгляда. Полезное упражнение для мозга – попытаться в голове построчно воспроизвести код и состояния всех переменных
2. Отладка. Воспользоваться IDE или сторонними инструментами для пошагового запуска с контролем выбранных переменных. Этот способ следует освоить, пользоваться горячими клавишами и точками останова. Незаменим при разборе чужого кода или сложных структур данных
3. Юнит-тесты. Вместе с кодом важно писать изолированные тесты, покрывающие ту функцию, над которой вы сейчас работаете. Выгодное отличие от отладки – накопительный эффект. Чем больше уже написано тестов, тем меньше область поиска ошибки
4. Отладочные принты. Выводить нужные переменные. Детский способ вникания в код. Почему детский? Есть альтернатива лучше по всем параметрам
5. Логгирование. Это отладочная печать на стероидах. Можно сконфигурировать выводимое сообщение (добавить время и дату, добавить название вызываемого модуля и функции и многое другое). Можно настроить уровень предупреждений. В info писать важное (например, изменение состояния в базе данных), в error писать ошибки, а в debug – нужное для отладки. Прелесть в том, что debug убирать не придётся. В конфиге настраиваем писать только info и выше, и в результате debug выполняться не будут. Удобно
Про логгирование недавно был пост в канале по питону

Наилучшим сочетанием я считаю 3, 5, 1 – именно в таком порядке. Всегда писать тесты, часто использовать логгирование и использовать мозг

#sudo #procode #devfm
👍8🔥2
Одним из вариантов безопасной пересылки данных является передача зашифрованного rar/zip архива с паролем. В rar есть удобная галочка "шифровать имена файлов", когда названия файлов внутри архива не показываются. Но rar формат проприетарный, что плохо с точки зрения криптографии и является дурным тоном. Берём zip.

О пароле можно договориться заранее. Если пересылка регулярная, на помощь может прийти одноразовый блокнот. Менее безопасным является пересылка архива по одному каналу связи (мессенджер), а пароля – по другому (СМС, почта, другой мессенджер).

Надёжный пароль состоит не менее, чем из 20 символов. Отличный пароль – набор из 4+ английских слов. Изменение регистра и спецсимволы приветствуются. Примеры хороших паролей:

HowAwesomeHumanBrain
ComputerGamesAreNotBad
Many%Coders%Can%Code%Windows

Такие пароли легко запомнить и сложно перебрать (и bruteforce, и перебор по словарю за разумное время не производится).

PS: Идеальным будет пароль вроде JVoZlEoHk~?rsnJFCZ1pJ%IEp, но его невозможно запомнить и тяжело набирать. Тут могут помочь менеджеры паролей, но это другая тема.

#sudo #skills #devfm
👍8🔥3
DevFM
Одним из вариантов безопасной пересылки данных является передача зашифрованного rar/zip архива с паролем. В rar есть удобная галочка "шифровать имена файлов", когда названия файлов внутри архива не показываются. Но rar формат проприетарный, что плохо с точки…
Как сформировать надёжный мастер-пароль для менеджера паролей, о которых мы писали ранее? Самым простым, при этом самым неломаемым вариантом будет кусок стихотворения со всей пунктуацией.

Я вас любил: любовь ещё, быть может,

Это почти идеальный пароль. Можно ещё добавить спецсимволов вместо пробелов или ещё как-то усложнить текст одному вам понятным образом.

PS: Не используйте свои любимые цитаты. Выбранный фрагмент должен иметь нулевую связь с вами, как личностью.
#skills #sudo #devfm
👍12🔥2
Год назад на хабре вышла занятная статья Письмо преподавателям вузов. Хватит губить будущее ИТ. В ней модератор хабра поднимает следующую проблему. Кто-то из преподавателей сделал автомат за зачёт при публикации на хабре, которая набрала +4 рейтинга. В результате на хабр набежала толпа студентов с материалами разного уровня, в том числе со слёзными просьбами пропустить статью из песочницы.

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

Хотите я расскажу, что из вуза реально нужно в работе?

— Умение работать с литературой, источниками и технической документацией, отличать фуфло от профессиональных материалов, уметь определять актуальность и совместимость информации с реальной рабочей задачей.
— Знание фундаментальных основ специальности и специализации. В ИТ знания нужно обновлять быстро и непрерывно, поэтому важно иметь хорошую основу, на которую будет ложиться актуальная теория и практика.
— Умение анализировать, синтезировать, декомпозировать идеи и задачи, выделять главное.
— Способность представить свой труд — на конференции, в статье на Хабре, в печатном издании, на ковре у директора, на митинге перед тимлидом.
— Навык здравой оценки своих знаний и пробела в них.

Такие вот дела. Напомню, что мы рассказывали правильный порядок анализа предметной области.
#edu #sudo
👍102🔥2