Как стать автором
Обновить
255
0

Пользователь

Отправить сообщение

Компилируем FFmpeg в WebAssembly (=ffmpeg.js): Часть 3 — Конвертация avi в mp4

Время на прочтение5 мин
Количество просмотров4.6K



Список переведённых частей серии:


  1. Приготовления
  2. Компиляция с Emscripten
  3. Конвертация avi в mp4 (вы тут)



В этой части ма разберём:



  1. Компиляцию библиотеки FFmpeg с оптимизированными аргументами.
  2. Управление файловой системой Emscripten.
  3. Разработку ffmpeg.js v0.1.0 и конвертацию видео.

Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии4

Компилируем FFmpeg в WebAssembly (=ffmpeg.js): Часть 2 — Компиляция с Emscripten

Время на прочтение6 мин
Количество просмотров4.9K



Список переведённых частей серии:


  1. Приготовления
  2. Компиляция с Emscripten (вы тут)
  3. Конвертация avi в mp4


Начиная с этой части, материал будет посложнее, так что не стесняйтесь гуглить по ходу чтения, если не понимаете, что происходит.


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


В этой части мы разберём:


  1. Как настроить окружение для Emscripten в Docker
  2. Использование emconfigure и emmake 
  3. Как решать проблемы, возникающие при компиляции FFmpeg с Emscripten

Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии1

Компилируем FFmpeg в WebAssembly (=ffmpeg.js): Часть 1 — Приготовления

Время на прочтение3 мин
Количество просмотров8.1K



Список переведённых частей серии:


  1. Приготовления (вы тут)
  2. Компиляция с Emscripten
  3. Конвертация avi в mp4




Из этой части вы узнаете:


  1. Зачем это всё нужно
  2. Как скомпилировать FFmpeg в Docker



Зачем это всё нужно


Главные задачи у серии публикаций такие:


  1. Создать туториал по использованию Emscripten для компиляции C/C++ библиотек в JavaScript (более детальный и полезный, чем написанные ранее)
  2. Персональная памятка

Почему FFmpeg?


FFmpeg — это свободный проект с открытым исходным кодом, состоящий из обширного набора библиотек и программ для обработки видео, аудио и других мультимедийных файлов/трансляций. (из Википедии)


Библиотеки JavaScript, которая предоставляла бы подобные возможности, попросту не существует. Если вы погуглите «ffmpeg.js», то найдёте несколько решений, подобных тому что мы собираемся сделать:



Эти библиотеки, конечно, можно использовать, но у них есть свои недостатки:


  1. Используемые версии как FFmpeg, так и Emscripten устарели
  2. Проекты не поддерживаются уже долгое время

Изначально я планировал заняться поддержкой какой-нибудь из двух библиотек, но так как за годы накопилось слишком много изменений, решил сделать всё с чистого листа, попутно создав туториал по использованию Emscripten для компиляции большой C/C++ библиотеки.

Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии1

Плюсы и минусы Django

Время на прочтение3 мин
Количество просмотров33K

Прим. перев.: Эта статья рассчитана в основном на тех кто только выбирает фреймворк для веб-разработки. Опытные разработчики на Django вряд ли узнают что-то новое.



Django описывают как «веб-фреймворк для перфекционистов с дедлайнами». Его создали, чтобы переходить от прототипов к готовым сервисам как можно быстрее.


Фреймворк поможет разработать CRUD приложение под ключ. С Django не придется изобретать велосипед. Он работает из коробки и позволит сосредоточиться на бизнес-логике и продуктах для обычных людей.


Плюсы Джанго


Принцип «Всё включено» («Batteries included»)


Фраза «всё включено» означает, что большинство инструментов для создания приложения — часть фреймворка, а не поставляются в виде отдельных библиотек.


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


  • ORM
  • Миграции базы данных
  • Аутентификация пользователя
  • Панель администратора
  • Формы
Читать дальше →
Всего голосов 25: ↑20 и ↓5+15
Комментарии19

Хороший разработчик мудр, а не гениален

Время на прочтение5 мин
Количество просмотров18K


Одним из самых важных уроков, которые я постиг в качестве разработчика 15 лет назад, была эта простая мысль:


Хороший код выразителен, а не впечатляющ.

Я помню, как услышав это спросил «А в чём разница?», и получил ответ.


«Выразительный» — понятный, однозначный и конкретный. А раз так, написание выразительного кода потребует работы с конкретной задачей. Вложение сил и времени в его создание служит конкретной цели, а результат соответствует ожиданию.


«Впечатляющий» — код, который запоминается. Написание кода, запоминающегося своими сложными структурами и алгоритмами, хотя и почешет ваше эго, станет настоящей болью для того, кто будет поддерживать его в будущем. И если последний окажется маньяком, узнавшим ваш адрес, храни вас Господь от его гнева.


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


«Гениальные» разработчики, так же обладая умом, напротив, думают лишь о настоящем. Они умеют решать текущие проблемы быстро и эффектно. Вот только гора от их хаков и выкрутасов постоянно накапливается и однажды обрушает код, хороня под собой репутации всех причастных. Вот почему Стив Макконнелл однажды верно заметил:


Программирование — не работа в ЦРУ, вам не нужно быть смекалистым.

И мудрые разработчики не делают ничего смекалистого. Они пишут скучный и простой код, который легко понять. Ни больше, ни меньше.




Вот ещё несколько принципов мудрых разработчиков.


Читать дальше →
Всего голосов 55: ↑47 и ↓8+39
Комментарии14

5 главных алгоритмов сэмплинга

Время на прочтение4 мин
Количество просмотров29K


Работа с данными — работа с алгоритмами обработки данных.


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


Эта статья посвящена наиболее распространённым способам сэмплинга при работе с данными.

Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии1

Скруглённые или остроугольные?

Время на прочтение3 мин
Количество просмотров18K

Скруглённые или квадратные? Вот в чём вопрос.

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


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


Переменные, используемые для улучшения заметности
Читать дальше →
Всего голосов 28: ↑26 и ↓2+24
Комментарии19

Деплоим ML проект, используя Flask как REST API, и делаем доступным через приложение на Flutter

Время на прочтение5 мин
Количество просмотров9.8K


Введение


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


Мы будем использовать Flask для нашего REST API, Flutter для мобильного приложения и Keras для машинного обучения. В качестве базы данных для хранения информации о содержимом изображений используем MongoDB, а для получения информации возьмём уже натренированную модель ResNet50. При необходимости мы сможем заменить модель, используя методы save_model() и load_model(), доступные в Keras. Последний потребует около 100 Мб при первоначальной загрузке модели. Почитать о других доступных моделях можно в документации.

Читать дальше →
Всего голосов 9: ↑7 и ↓2+5
Комментарии5

Почему Senior Developer'ы не могут устроиться на работу

Время на прочтение3 мин
Количество просмотров153K


Сначала о том, как 5 месяцев назад я проходил собеседование на работу. Меня посоветовал друг, и прошло уже немало времени, с момента как я ответил рекрутеру. Я был поражён, как сильно весь процесс изменился за последние 5 лет.


После первичного созвона меня отправили на сторонний сайт (HackerRank), чтобы я решил три небольших задачки за 1 час. Для меня это был первый подобный опыт. Первые две задачки были простыми, но третья оказалась посложней. Когда время подошло к концу, моё решение не проходило все тесты, а только где-то 8 из 10 необходимых.

Читать дальше →
Всего голосов 165: ↑151 и ↓14+137
Комментарии909

Про пытки Джулиана Ассанжа

Время на прочтение4 мин
Количество просмотров49K


Автор оригинальной статьи — профессор Нильс Мельцер (Nils Melzer), спец. докладчик ООН по пыткам.


Я понимаю, что на первый взгляд это кажется бредом. Как может жизнь в посольстве с котом и скейтбордом быть пыткой? Именно так подумал и я, когда Ассанж впервые обратился в мой офис за защитой. Как и большинство людей тогда, я был отравлен безостановочной клеветнической кампанией, которая велась на протяжении многих лет. Поэтому потребовалось приложить немало усилий, чтобы наконец-то привлечь моё неохотное внимание. Но изучая факты, я постепенно всё больше наполнялся отвращением и недоумением по отношению к происходящему.

Читать дальше →
Всего голосов 176: ↑150 и ↓26+124
Комментарии145

В Италии началась Open Source революция

Время на прочтение4 мин
Количество просмотров66K

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


Оригинальный пост на английском опубликован представителем итальянской государственной команды по цифровизации (Italian Government Digital Transformation Team) — прим. перев.


«Свобода, ведущая народ»


Цифровизация Италии достигла Рубикона. Вступивший в силу закон гласит, что государственные учреждения должны стараться использовать программное обеспечение с открытым исходным кодом в первую очередь, а также публиковать всё разработанное для них ПО как Open Source. На практике реализация закона закреплена в наборе обязательных принципов.


Следуя этим гайдлайнам гос. учреждения могут (и должны) опубликовать всё ПО, приобретённое ранее и приобретаемое с этого момента, на Developers Italia.

Мы впервые упомянули эти правила в 2018 году в статье «Открытое программное обеспечение и государство: онлайн-рекомендации по приобретению и повторному использованию ПО», в которой было анонсировано начало публичных консультаций. В течение этого периода нам прислали много ценных комментариев, которыми гайдлайны были дополнены. Это чётко показало, что пришло время окончательно принять парадигму Open Source.


Спустя несколько месяцев, после одобрения Объединённой конференцией и Европейской комиссией, процесс принятия был завершён, а гайдлайны опубликованы в Official Journal (такая публикация является условием вступления закона в силу — прим. перев.).

Читать дальше →
Всего голосов 140: ↑139 и ↓1+138
Комментарии137

Деплоим на PythonAnywhere из GitHub

Время на прочтение5 мин
Количество просмотров21K



Каждый может сделать так:


локальный проект → github


С (платным) ssh доступом вы сможете сделать так:


локальный проект → PythonAnywhere


В статье показано как (бесплатно) сделать так:


локальный проект → github → PythonAnywhere


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

Читать дальше →
Всего голосов 10: ↑9 и ↓1+8
Комментарии1

10 фич для ускорения анализа данных в Python

Время на прочтение5 мин
Количество просмотров21K

Источник

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


1. Профилирование Pandas Dataframe


Профилирование помогает лучше понять наши данные, и пакет Pandas Profiling создан как раз для этого. Библиотека даст возможность просто и быстро выполнить разведочный анализ Pandas Dataframe. Обычно в таких случаях в качестве первого шага используются функции df.describe() и df.info(), но они сообщают мало и плохо справляются с большими наборами данных. Одна строка кода с использованием Pandas Profiling, напротив, выведет много информации в интерактивном HTML-отчете.


Вот что вычисляется для заданного набора данных:


Статистика выводимая Pandas Profiling.

Установка


pip install pandas-profiling
или
conda install -c anaconda pandas-profiling

Использование


Давайте используем набор данных о пассажирах Титаника, чтобы продемонстрировать возможности профайлера.

Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии6

3 практических примера использования деструктурирования в JavaScript

Время на прочтение2 мин
Количество просмотров8.5K

Пишем код чище, используя паттерны деструктурирования



Вы, наверное, уже знакомы с деструктурированием в JavaScript. Оно пришло к нам в 2015 году в спецификации ES6, но если вам нужно освежить знания, то на сайте Mozilla можно почитать большую подробную статью, как это всё работает.


Но знать как работает совсем не то же, что знать как использовать. Вот три паттерна, которые помогут вам сделать код чище, надёжнее и читаемее!


1. Именованные аргументы функции


Именованные аргументы это альтернативный позиционным аргументам путь обработки параметров функции. Вместо того, чтобы указывать аргументы в строго определённом порядке, просто указывайте их имя. В Питоне, например, это выглядит так:


def sum(a=1,b=2,c=3):
  return a+b+c

sum(b=5,a=10)

Видите? Порядок не важен, если вы явно указали имя параметра. Преимуществами по сравнению с позиционными аргументами является то, что:


  1. Можно опустить один или несколько параметров при вызове функции
  2. Порядок при передаче аргументов теперь не важен
  3. Код стал читаемее 

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


function sum({a = 1, b = 2, c = 3}) {
  return a + b + c
}

sum({b: 10, a: 5}) // 5 + 10 + 3 = 18

Все цели достигнуты: можно не указывать c, порядок теперь не важен, и аргументы сопровождаются своими именами. Всё это возможно именно благодаря деструктурированию.

Читать дальше →
Всего голосов 20: ↑16 и ↓4+12
Комментарии4

Как делать сайты в 2019 году

Время на прочтение3 мин
Количество просмотров129K

Веб стремительно меняется, не отставай и ты!



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


Давайте-ка шаг за шагом разберём важнейшие принципы веб-дизайна в 2019 году.


Обязательно дайте пользователю знать, что у сайта есть мобильное приложение


Это важнейший принцип, и на то есть свои причины. Фокус-группы, на которые мы уже потратили кучу денег, показали что первое же, чего захочет пользователь попав на ваш сайт — установить мобильное приложение.


Ну а кратчайший путь к этому — показать здоровенное модальное окно:



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


Совет: Если у вас нет мобильного приложения, не беда! Просто запихните весь сайт в  webview с отключенной безопасностью и пишите, что это мобильное приложение!

Читать дальше →
Всего голосов 244: ↑233 и ↓11+222
Комментарии278

Тёмный режим не решит проблем с экранами

Время на прочтение5 мин
Количество просмотров13K

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


Чуть раньше я публиковал перевод статьи «Тёмные времена наступают», автор которой заявляла о пользе режима и пророчила его повсеместное внедрение. В этой статье упор сделан на исследования по теме и влияние опции на разных людей. — прим. перев.


Фото: Andrew Brookes/Cultura/Getty

Ночь застилает экраны наших компьютеров.



Она приходит в виде тёмного режима, модной в технологической отрасли функции, когда привычные яркие фоны заменяются тёмно-синими или чёрными. Twitter выпустил тёмный режим для сайта в 2017 году, а Facebook Messenger представил аналогичную функцию в апреле 2019. Особенно примечательным было объявление Apple на WWDC на прошлой неделе, что выходящая осенью iOS 13 тоже получит подобную опцию. Компания утверждает, что с тёмным режимом «каждый элемент на экране будет чуть меньше напрягать глаза», а некоторые люди заявляют, что включение функции помогает бороться с мигренью.

Читать дальше →
Всего голосов 24: ↑15 и ↓9+6
Комментарии40

Один язык чтобы править всеми

Время на прочтение6 мин
Количество просмотров28K

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



На момент написания этой статьи запрос «программирование какой язык изучать первым» выдаёт 517 миллионов поисковых результатов. Каждый из этих сайтов будет нахваливать один определённый язык, и 90% из них, в конечном итоге, порекомендуют Python или JavaScript.


Без долгих прелюдий я хотел бы официально декларировать, что все эти 517 миллионов сайтов неправы и заявить, что язык, который надо изучать первым — фундаментальная логика.


Просто знать как кодить ещё не достаточно. Рынок настолько насыщен выпускниками институтов и курсов, что позиция джуниора практически перестала существовать*. Чтобы преуспеть в сегодняшнем мире, вы должны и кодить, и иметь продвинутое фундаментальное логическое мышление.


* здесь и далее, пожалуйста, помните, что это перевод, и ситуация на рынке труда у автора и в вашей стране может быть различной (как и другие нюансы), что, однако, само по себе не делает оригинальную статью хуже — прим. перев.


Мой первый урок информатики


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


«Сегодня мы будем дегустировать самостоятельно приготовленные пломбиры. Но с одним условием: вы должны составить список конкретных инструкций, как приготовить десерт, а я — буду им следовать»

Читать дальше →
Всего голосов 59: ↑49 и ↓10+39
Комментарии53

Почему ['1', '7', '11'].map(parseInt) возвращает [1, NaN, 3] в Javascript?

Время на прочтение4 мин
Количество просмотров66K


Javascript — странный. Не верите? Ну попробуйте тогда преобразовать массив строк в целые числа с помощью map и parseInt. Запустите консоль (F12 на Chrome), вставьте код ниже и нажмите Enter


['1', '7', '11'].map(parseInt);

Вместо ожидаемого массива целых чисел [1, 7, 11] мы получаем [1, NaN, 3]. Но как так? Чтобы узнать в чём тут дело, сначала нам придётся поговорить о некоторых базовых концепциях Javascript. Если вам нужен TL;DR, пролистывайте статью до самого конца.

Читать дальше →
Всего голосов 165: ↑134 и ↓31+103
Комментарии145

Как опубликовать консольную утилиту на PyPI за 1 минуту

Время на прочтение2 мин
Количество просмотров8.6K


Разработав консольную утилиту, вы решаетесь опубликовать её на PyPI. Ну правда, что может быть лучше, чем сделать её доступной через pip install? Погуглив, что для этого надо, вы, возможно, наткнётесь на единственный найденный мной пост по теме, который мало того что от 2014 года, так ещё и требует от вас создать кучу папок и файлов для совершенно ненужных (вам) вещей.


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

Читать дальше →
Всего голосов 44: ↑42 и ↓2+40
Комментарии1

Отличия LabelEncoder и OneHotEncoder в SciKit Learn

Время на прочтение3 мин
Количество просмотров52K

Если вы недавно начали свой путь в машинном обучении, вы можете запутаться между LabelEncoder и OneHotEncoder. Оба кодировщика — часть библиотеки SciKit Learn в Python и оба используются для преобразования категориальных или текстовых данных в числа, которые наши предсказательные модели понимают лучше. Давайте выясним отличия между кодировщиками на простеньком примере.




Кодирование признаков


Прежде всего, документацию SciKit Learn для LabelEncoder можно найти здесь. Теперь рассмотрим такие данные:


Данные из SuperDataScience

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

Читать дальше →
Всего голосов 13: ↑9 и ↓4+5
Комментарии3

Информация

В рейтинге
3 668-й
Зарегистрирован
Активность