Size: a a a

2019 April 10
javawatch
Девчатки, котятки, запилил я вам пост с фоточками с JPoint
https://habr.com/ru/company/jugru/blog/447498/
источник
2019 April 12
javawatch
В то время, как кое-кто из особо одарённых российских разработчиков наперебой утверждает, что "девопс не нужен" или даже "девопс не существует", #1 Open Source компания в мире позиционирует свой #1 продукт для разработчиков вот так. Где теперь ваш бог.
источник
javawatch
Вчера вечером Windows раздуплилась и накатила обновления. Официально они исправили 74 уязвимости, включая несколько 0day.

Неофициально они починили мою инсталляцию Windows Preview, которая развалилась к чертям собачьим совсем недавно. "Ничего не знаем, так и было, всё работало, вам показалось что Edge самоудалился!" Теперь можно не переустанавливать Windows.

https://portal.msrc.microsoft.com/en-us/security-guidance/summary


Раздуплились не только они. Регулярный апдейт выпустила Adobe, исправив 43 уязвимости. (https://blogs.adobe.com/psirt/?p=1735), а за ними и Intel поправило 4 уязвимости (https://www.zdnet.com/article/intel-finally-issues-spoiler-attack-alert-now-non-spectre-exploit-gets-cve-but-no-patch/)

Надо сейчас обновить Premiere, может быть они пойдут по примеру Microsoft и починят то, что они сломали переходом интерфейса на отрисовку с помощью JavaScript в Node.js (перешли они давно, но теперь у них особо свежая и радикальная манера).
источник
javawatch
Актуально для жителей Питера. И где теперь покупать железо?
источник
javawatch
Всё что вы хотели знать про подсказки по C++ в VSCode
источник
javawatch
Как же я ору с YouTube API. Вначале они придумывают сервис-аккаунты... И потом запрещают с них стримить. НАЙС. В результате нужно логиниться через OAuth один раз вручную и потом реюзать стейт. WAAAT?
источник
2019 April 13
javawatch
Гугл сам может понимать, что домен принадлежит тебе
источник
javawatch
А это вам пруфца про сервис-аккаунты. Хорошо что оказывается, этот экран можно тупо пропустить
источник
javawatch
Ну и последняя картинка на ночь (надеюсь что последняя). Кровавый Microsoft убивает GitHub!
источник
javawatch
источник
javawatch
источник
javawatch
Только что ·
"Админы не нужны"

Не нужны не админы, а старые технологии времен 80-х годов производства. "Админы" как таковые никуда не девались. Просто они сейчас настраивают докеры и программируют infrastructure as code, вместо того, чтобы вручную /etc/hosts править в ed. Современный админ - это чувак, который понимает что такое кубернетис и может налабать скриптятину на го.

"Программисты не нужны" это тоже лол. То, что ты можешь налабать скриптятину на го, не делает тебя программистом.

Чертовы хипсторы. Обколются своей марихуаной и дяплоят проды
источник
javawatch
Прямо сейчас OpenAI будет рвать в Dota2 чемпионов мира - команду OG.

Проблемы:
- OG сейчас раза в 3 слабее, чем на чемпионате  (ни одного высокого места с сентября),
- лидер команды в отпуске (не тренировался два месяца),
- не все герои и прочие ограничения в пользу OpenAI

Смогут ли победить мясные мешки?

https://www.twitch.tv/openai
источник
javawatch
Захотел обновить прошивку у весов. А она не обновляется. Вот официальный ответ техподдержки. В тред призываются разработчики софта с автоматическим развёртыванием, узнать как скучно вы живёте.

"Hello,

I'll be happy to assist you today. Generally, if an update is available for the Index Smart Scale, you will need to use the scale, then let it sit for a day or two. Using the scale anytime during this period will disrupt the update process. Use the scale one time after receiving this email, verify your metrics show in Garmin Connect, and then allow the scale to Sleep for two days.

Thank you for choosing Garmin,

CJ

Product Support - Fitness Team
Garmin International"
источник
2019 April 15
javawatch
Эй сидельцы, вечер в хату, кто в авторитете? Тут на StackOverflow закончились технические вопросы и стало по канону обсуждать положняков: что сделал Шипилёв для джава-комьюнити и не идиоты ли разработчики Стандарта

https://ru.stackoverflow.com/questions/969586/%D0%9F%D1%80%D0%B8%D1%87%D0%B5%D0%BC-%D0%B7%D0%B4%D0%B5%D1%81%D1%8C-%D0%BB%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0
источник
javawatch
А ещё я вам статью по C++ написал. Совершенно непонятно, насколько написанное там корректно и разумно, я не настоящий сварщик.

https://habr.com/ru/company/jugru/blog/447900/
источник
javawatch
Последний абзац стоило бы написать менее политкорректно 🙂 Проблема "customization point object" в том, что это плохое название. Многие точки, если не большинство - ничего не расширяют.

[Вещи](https://en.cppreference.com/w/cpp/ranges/begin) вроде ranges::begin, ranges::end, и ranges::swap - это настоящие CPO. Вызов любой из них запускает описанное выше сложное метапрограммирование, чтобы найти найти и вызвать правильно кастомизированные begin, end или swap, или реализацию по умолчанию, или вызов станет ill-formed (в SFINAE-совместимом стиле). Поскольку часть концептов из библиотеки определены в терминах корректного вызова CPO (например, Range и Swappable), правильно ограниченный обобщённый код должен использовать такие CPO. Конечно, если вы заранее знаете конкретный тип и альтернативный способ вытащить из него итератор, можно делать и так.

[Вещи](https://en.cppreference.com/w/cpp/ranges/begin) вроде ranges::cbegin - это CPO без той части, которая "CP". Они выполняют поведение по-умолчанию, поэтому по смыслу это ни разу не customization point. Точно так же, формально, [range adaptor object](https://en.cppreference.com/w/cpp/ranges#Range_adaptors) - тоже CPO, но ничего настраиваемого там нет. Их отнесли к CPO только из соображений консистентности (как в случае с cbegin) или упрощения специфкации (адапторы).

И наконец, есть вещи вроде [ranges::all_of](https://en.cppreference.com/w/cpp/algorithm/ranges/all_any_none_of), являющиеся квази-CPO, или *ниблоидами*.

Формально, то что помечено данным маркером [на CppReference](https://en.cppreference.com/w/cpp/algorithm/ranges/) означает *похожие* на функции сущности, обладающие следующими свойствами:
* При их вызове нельзя явно специфицировать список шаблонных аргументов,
* Они невидимы для ADL,
* Если обычный неквалифицированный поиск найдёт соответствие такой сущности для имени, находящегося в левой части оператора вызова функции, это отключит ADL.

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

struct all_of_fn {
 template< InputIterator I, Sentinel<I> S, class Proj = std::identity,
           IndirectUnaryPredicate<projected<I, Proj>> Pred >
 bool operator()( I first, S last, Pred pred, Proj proj = {} ) const
 {
   return ranges::find_if_not(first, last, std::ref(pred), std::ref(proj)) == last;
 }

 template< InputRange R, class Proj = std::identity,
           IndirectUnaryPredicate<projected<ranges::iterator_t<R>, Proj>> Pred >
 bool operator()( R&& r, Pred pred, Proj proj = {} ) const
 {
   return operator()(ranges::begin(r), ranges::end(r), std::ref(pred), std::ref(proj));
 }
};
inline constexpr all_of_fn all_of;


Иначе говоря, это какие-то функциональные шаблоны, в которые внедрена особая уличная магия, блокирующая работу ADL, хитрая запись которой позволяет реализовать ниблоид как функцинальный объект. Всё это делается исключительно для того, чтобы отключить проклятый ADL, чтобы он перестал подбирать неограниченные перегрузки из неймспейса std в случае, когда ограниченный алгоритм из std::ranges запустили без квалификации. Поскольку алгоритмы std::range принимают пары Iterator-Sentinel, они обычно менее специазированны, чем их двойники в std, и поэтому вываливаются из механизма поиска оверлоадов.
источник
javawatch
В Телеграме какой-то баг, не могу нормально сделать подсветку в предыдущем посте.
источник
2019 April 16
javawatch
Видеостриминг - это боль.

Оказывается, чтобы Facebook выдал тебе нормальное качество картинки, а не ту рассыпающуюся фигню, которую вы видели - нужно получить левелап (https://www.facebook.com/fbgaminghome/creators/levelup).

А для него (кроме всего прочего вроде количества подписчиков) - нужно стримить из вполне определённой страны. Пришлось в соцсеточках вспомнить, что моя родина это - Германия, Франкфурт.

Теперь, у меня есть сервак во Франкфурте, и через него надо пробросить стрим. Лицухи на Flussonic у меня нету, поэтому я пошёл кратчайшим путём и поставил nginx-rtmp. И вначале всё было приятно, проброс RTMP заработал за считаные минуты.

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

Главное началось с того, что после этого Фейсбук радостно сообщил: с 1 мая больше не будет работать RTMP. Останется только RTMPS, который в варианте фейсбука - просто RTMP по шифрованому каналу.

Во-первых, оказалось что просто push в nginx-rtmp с rtmps не работает. Значит, нужен exec_push, который - тарам-пам-пам - не работает на Windows. И раз уж всё равно нужно юзать Linux, то nginx перенесём прямо на франкфуртский сервак.

И вот тут начинается боль и ужас. Что я ни делаю - стрим на ФБ нихера не идёт. В самом лучшем случае он быстро запускается на пару секунд, вспыхивает картинка и тут же гаснет.

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

Потом не набрел на исходники, libavformat в поставке ffmpeg и протокола rtmp внутри него.

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

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

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

И теперь этот кусок говна паковать в пакет и таскать с собой... вечно.

И вот, почти шесть часов утра, и OBS таки пропихивает RTMPS на Фейсбук через фракнфуртский сервак.

Надо поспать часа четыре хотя бы... То ли дальше будет. Интересно, Макс Лапшин (Max Lapshin) тоже постоянно мучался, а я не замечал?)
источник
javawatch
#streaming

Проблема в том, что с Nginx это совершенно беспросветная херня. На Windows, Nginx не будет работать в полноценном режиме c exec (насколько я понял по документации), а режим совместимости с Linux-бинарями на Windows 10 не дает доступа к GPU, и транскодировать пачкау стримов без GPU (в моем случае - nvenc) - безумие. Плюс это усложняет конфигурацию, а стримеры как правило - не самые продвинутые технари. С другой стороны, способность nginx раздавать видео совершенно не нужна, потому что реальное видео раздают стриминговые сервисы вроде Mixer и YouTube.

Это означает, что с Nginx на клиентском компьютере можно попрощаться и запускать его максимум для заворачивания изначального стрима в RTMP и потом - для оперативного мониторинга трансляции. Ну или выкинуть его нах и написать свой минимальный rtmp сервер, который можно будет контролировать руками, а не пытаться безуспешно осознать, чего же там в недрах nginx понаписано.

И вместо этого нужно написать небольшой координатор для ffmpeg и cvlc, который будет собственно транскодить и форвардить на стриминговые площадки. И вот его уже можно написать на нормальных языках - Golang, Java, C# Core.
источник