Пытался понять как реализовать SVG фильтр feComposite, ибо SVG дока унылая, поэтому залез в сорцы вебкита. Там тоже документации ноль, ещё и код очень странный.
Хочу научиться собирать ядро на продвинутом уровне что бы лучше изучить внутреннее устройство самого ядра и уметь «затачивать» ядро для определенных задач, что бы выжимать максимум из железа. Есть ноут с которым экспериментирую на железе. На данный этапе обучения поставил себе такие задачи:
Отчистить ядро от неиспользуемых компонентов (например убрать amd-микрокод, если ноут на intel). Возможно, отключить защиту от Spectre и Meltdown
Уменьшить время на загрузку ядра
Получить выигрыш в производительности/энергоэффективности. Да, знаю, что улучшение будет на уровне погрешности, но это больше «для души» чем для решения реальной задачи
Научится кросс-компилировать ядро
Уже многократно собирал ядро с кастомным конфигом и патчами, но изменения там были минимальные. Часто я просто следовал инструкции. Хочется всё же комфортно себя чувствовать при конфигурировании ядра. Посоветуйте литературу/сайты/статьи/материалы/патчи/хитрости/лайфхаки и т.п. на которые стоит обратить внимание
На имеющемся железе пробрасывает NVMe примерно на его родной скорости, и делает это в два с лишним раза быстрее штатного линуксового nvme-over-tcp. Дальше упирается в мой слабый клиентский комп, но на большом железе производительность растёт до миллионов IOPS через один диск. 50 GbE успешно загружал на полную катушку, был, практически, line rate.
Допустим, я поставлю Gentoo. Достаточно ли обновляться из исходников раз в месяц, чтобы процесс обновления не стал перманентным? И сколько может занять обновление на железе Intel Core i3-3110M / 16 GB RAM / SSD 480 GB ? Можно ли обновления собирать на инструментальной машине, которая мощней, и потом как-то загружать собранные (скомпилированные) обновления на целевую машину?
Можно ли запустить программу, написанную на языке rust, на компьютерах с процессорами Эльбрус?
Как я понимаю, llvm не рассчитан на такую архитектуру. Правда, есть двоичная трансляция кода. Можно ли рассчитывать хотя бы на 80% скорости по сравнению с тем, как если бы был оптимизирующий родной компилятор с языка rust для Эльбруса?
Для тех, кто не знает что это такое - https://electronjs.org/. Фреймворк построения десктопных приложений на NodeJS+JavaScript.
Критикуется за потребление 150 МБ памяти на базовом Hello World, потому что именно столько потребляет одна вкладка с Webkit в браузерах, и несоответствие системному стилю Gtk+/Qt.
Примеры приложений на Electron - Atom, VSCode, Skype, Discord, Slack, Google Music Desktop, Etcher, hyper.is и даже эмулятор Windows 95.
.. не Dependency Injection, а именно Inversion of Control я смотрю в плюсах не популярен. В мире Java без этого тебя сначала засмеют, а потом когда поймут что ты не унимаешься - то изобьют.
Что я подразумеваю под IoC
Есть контейнер, в которым по определенным ключам (типы, строки) регистрируются классы
Контейнер обязан уметь создавать инстансы каждого из классов, если надо подставляя ему или в конструктор или как-то по другому его зависимости
Группы регистраций классов можно обьединять в модули, которые просто устанавливаются подключением к основном контейнеру. Они тогда предоставлют или требуют другие класса для своей работы. По сути как паззл.
В тестах можно заменять целы модули указывая «запусти мне весь контейнер, но пожалуйста замени MyClass на MyMockClass»
Пример на псевдокоде который вроде бы как С++
class IB {
public:
int value() = 0;
};
class B : public IB {
public:
int value() {
return 1;
}
};
class A {
A(std::shared_ptr<IB> b) : b_(b) {}
int value() {
return b_->value();
}
private:
std::shared_ptr<IB> b_;
};
void MyModule(Container& c) {
c.RegisterAs<IB, B>(CREATE(
B()
));
c.Register<A>(CREATE(
A(INJECT(IB))
));
}
int main() {
Container c;
MyModule(c);
std::cout << c.Get<A>()->value() << std::endl;
return 0;
}
Вместо shared_ptr может вполне быть unique_ptr и B будет не синглтоном внутри контейнера, а будет создаваться отдельно для каждого класса-пользователя. Слово синглтон перестает быть пугающим, потому что это не глобальный синглтон, а синглтон в одном контейнере, плюс легко тестируется и нету проблем с неправильной инициализацией.
В тесте запросто выполняется MyModule, а потом регистрация IB меняется на MockB.
Вопрос, чего не популярно? Врядли аргументы оправданы о том что это лишнее и все такое актуальны, пакетные менеджеры это решают. Зато тестирование на уровень легче, что уже с десяток лет используется в Java во все поля
Всем привет, очередной вопрос назрел.
Начал изучать паттерны javaEE, делаю тестовый проект на Spring/Hibernate. Как я понимаю - основная фишка Спринга это именно IoC, то бишь избавление от зависимости на конкретную реализацию доступа к модели - DAO (верно?).
Также вводится понятие сервиса, которые работают с реализацией DAO..
Вобщем, у меня взрывается моск от таких дел, ведь получается, на одну модель Device имеем ещё 5 классов:
Не жирно ли? Или я чего-то не допонимаю, но зачем еще и интерфейс для сервиса, есть ведь уже для DAO?
Вообще, в каких случаях стоит всё это городить, если не предвидится нужды менять способ доступа к модели?
У меня есть домашний сервачок, который раздает по сети фото, видео, музыку.
На нем стоял арч и в течении трех лет все было отлично, пока я не обновила его находясь в отпуске (да, глупый поступок). На связь он уже не вышел. Теперь думаю сменить его на что-то более стабильное: centos или debian.
Еще одна проблема, которую я хотела бы решить. Пока я пыталась подобрать софт, мной были установлены и удалены plex, ampache, subsonic и еще куча софта. Что-то не тянуло необходимые зависимости, их я доустанавливала сама, а после удаления основного пакета, оставались эти потерянные зависимости и прочие потроха в виде конфигов.
Посоветуйте инструмент, для создания контейнеров, в рамках которых можно было бы гадить зависимостями, пакетами, конфигами и прочим, но при удалении контейнера, чтобы сама система оставалось девственно чистой. VirtualBox - слишком жирно, хотелось бы, чтобы ядро, окружение, уже установленные в системе пакеты расшаривались между контейнерами, а сами контейнеры были изолированы между друг другом.
Ну и какой дистрибутив лучше подойдет под это дело: centos или debian. Другие не рассматриваю, потому что мне кажется эти два достаточно хороши, чтобы не обращать внимание на другие.
Для контейнеров приложений (application containers) есть куча систем сборки: Dockerfile, buildah, Buildkit, img, Bazel, kaniko, и еще куча разных.
Для системных контейнеров (system containers, которые запускают в LXC/LXD/systemd-nspawn) нашел только distrobuilder, но его нет в репозиториях (для меня не проблема, но хочу, чтобы пользователи контейнера могли его легко пересобрать, это было бы плюсом).
Кто-нибудь что-нибудь подскажет, что использовать? Мне нужно взять готовый образ ОС (debian 10, например), скопировать несколько файлов по определенным путям, установить несколько программ из репозитория, и сделать из этого контейнер. В общем, то, что делает dockerfile, только для системных контейнеров.
Хоть ansible бери.
Давным-давно, лет 5 назад у меня был курс по вебу с сервлетами и JDBC. Уже тогда это было немного устаревшим и разрозненным курсом, а теперь и подавно. Тем не менее JSP и прочие HTTPRequest лежат в основе любого Java фреймворка. При том, что во многом построение страницы нынче делается на клиенте при помощи JS, а сервер лишь ассинхронно передает JSON-ы из базы через Hibernate (если я правильно уловил суть нынешнего мейнстрима в вебе).
Вопрос состоит в следующем: стоит ли мне тратить время и делать проекты как практику на сервлетах или же забить и лучше делать приложения сразу на Spring+Vue?
A: Ради эксперимента, повысится комфорт пользования терминалом или нет.
Q: Причем тут Rust?
A: Ни при чем, но из-за нативности и отсутствия GC на нем толпа людей побежала переписывать что ни попадя. С таким же успехом можно было бы и npm install, но тормозило бы. Ближе opam install или go get
Теперь мой терминал по истине свистит и пердит. Даю список если кому надо.
starship - shell command prompt, показывает кучу полезной информации в зависимости от контекста, например git branch если в репозитории, версии софта и ЯП если в каталогах с сорцами, hostname если зайти по ssh.
tldr- сокращенная версия man, показывает как чем пользоваться в примерах, а не выдавая полную справку. Страницы поддерживаются сообществом для громадного количества утилит. Изначальный проект - https://tldr.sh/
https://amp.rs/ - сильно отличается от vim, непривычно, глючит. Навигация по дефолту очень крутая зато.
Все вышеперечисленое ставится через cargo install <package_name> (кроме alacritty), название смотрите на страницах. Сам cargo и Rust ставятся через
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
P.S. Призываю остальных взять ЯП вашей секты и поставить такой эксперимент и отписаться. Да-да, расскажите как вы пользовались ls на Java. Пользователей emacs прошу не беспокоить
Уже не одно десятилетие прошло с момента появления модели акторов. Такая стройная теоретическая модель должна была вытеснить мютексы, условные переменные и прочие примитивы для синхронизации shared state.
Вкратце, причины неуспеха модели акторов из статьи:
1) Акторы не имеют прямой связи с моделью ООП.
2) Поведение динамическое, зачастую трудно предсказуемое и проблемы появляются в run-time. Что еще усугубляется возможностью актора создавать других акторов.
4) Требования по памяти обычно не могут быть определены до запуска.
5) Идея асинхронного обмена сообщениями затрудняет реализацию некоторых алгоритмов.
6) Сложность в реализации протокола последовательного взаимодействия между акторами.
Прочитал сравнение SIP vs H.323, после которого складывается ощущение, что SIP убогая костыльная (по всем пунктам) поделка, а H.323 серьезный професиональный протокол
Почему же тогда SIP выстрелил? IP-телефоны, VoIP от операторов - всё это на SIP. А о H.323 упоминают как правило в негативном ключе?
В двух словах, это VDPAU драйвер, который использует OpenGL для рисования и VA-API для декодирования видео.
VDPAU это открытый интерфейс, который подразумевает единую точку входа (libvdpau) и подключаемые драйверы; API не замкнуто накоротко на nVidia. Выбор конкретного драйвера осуществляется либо через переменную окружения VDPAU_DRIVER, либо спрашивается у X-сервера. Если так или иначе получить имя не удалось, считается, что оно есть «nvidia». Драйвер представляет собой разделяемую библиотеку с именем вида libvdpau_<drivername>.so.1. Программы линкуются с libvdpau, а она в свою очередь загружает нужный драйвер.
Чтобы использовать, нужно собрать, положить библиотеку в директорию, где её сможет найти компоновщик, и добавить в окружение переменную VDPAU_DRIVER=va_gl. Проверить, что драйвер работает, можно запустив vdpauinfo. А vainfo покажет, работает ли драйвер VA-API.
На видеокартах AMD по чудаковатым причинам происходят падения внутри XCloseDisplay. Чтобы обойти проблему, нужно в переменную VDPAU_QUIRKS добавить строку XCloseDisplay. Элементы в VDPAU_QUIRKS перечисляются через запятую, слитно, без пробелов и служат для тонкой настройки поведения драйвера. Кроме XCloseDisplay, есть ещё параметр ShowWatermark, включающий отображение строки va_gl в правом нижнем углу. Полный список можно найти в README.md.
Начиная с версии 2.99.908 xf86-video-intel сообщает переходнику libvdpau.so имя VDPAU драйвера. Символьных ссылок libvdpau_i965.so.1 → libvdpau_va_gl.so.1 libvdpau_i915.so.1 → libvdpau_va_gl.so.1 достаточно для загрузки, и необходимости в использовании VDPAU_DRIVER больше нет.
Я тут в процессе написания драйвера vdpau застрял. Чтобы заработало ускорение декодирования, надо вызывать vaapi. Проблема состоит в том, что оба интерфейса требуют разные параметры H.264. Часть из них совпадает по имени поля в структурах (имена взяты из стандарта), а часть нет. При этом VAAPI требует намного больше данных, чем VDPAU, то есть мне нужно откуда-то эти данные взять.
К примеру, нужен такой параметр, как first_mb_in_slice. Его можно достать из потока, ffmpeg его достаёт и... выбрасывает. А потом, когда нужно формировать это поле для передачи в vaRenderPicture, высчитывает заново, причём с текстом стандарта это плохо соотносится (там должно быть смещение, либо половина смещения, в зависимости от флага. Код в ffmpeg делит пополам только координату y, а x просто прибавляет). И так далее. Всё осложняется тем, что я не знаком с подробностями технологий сжатия видео.
Насколько я понял, если VDPAU успешно декодирует видео, значит параметров в его структурах достаточно, чтобы декодировать слайсы, стало быть должна быть возможность восстановить недостающие параметры.
В общем, нужна рука помощи. Я тут ниже буду постить особо непонятные мне моменты. Надеюсь на ваше понимание.
Upd. Все параметры нашлись в самом потоке. Первый байт после заголовка — NAL header, дальше slice_header (7.3.3), в котором и были недостающие данные.
Российская компания, мировой лидер в области разработки высокотехнологичного ПО операторского класса для обработки и передачи широкополосной речи, видео и данных в сетях с пакетной коммутацией приглашает в штат C/C++ программиста/Специалиста по цифровой обработке сигналов
Обязанности:
Участие в разработке и интеграции ПО международного класса для голосовых, видео звонков и конференций;
Кросс-платформенная разработка под Linux, Windows, iOS, Android и другие популярные платформы;
Реализация, поддержка и развитие алгоритмов улучшения речи в VVoIP системах;
Участие в развитии in-house технологий VVoIP.
Требования
Высшее техническое образование;
Опыт разработки на C/C++;
Понимание математических принципов обработки цифровых сигналов;
Опыт реализации алгоритмов DSP (фильтрация, корреляции, преобразование Фурье и т.п.);
Хорошее знание методов адаптивной фильтрации (опыт реализации будет плюсом);
Опыт работы с Matlab;
Опыт оптимизации алгоритмов DSP (снижение ресурсоемкости).
Желательно:
Опыт разработки и реализации алгоритмов DSP: эхоподавление (AEC), шумоподавление (noise reduction), автоматическая регулировка усиления (AGC);
Опыт кросс платформенной разработки (любые платформы);
Опыт разработки под платформы Андроид, Apple iOS, Windows Phone.
Условия найма:
З\п до 170.000 Net и выше (обсуждается с успешным соискателем). Доплата за питание 3 000 руб.
Удобный комфортабельный красивый современный офис в районе м.Павелецкая/Пролетарская
Гибкий график работы для сотрудников (с 9-12 до 18-22.30), свободный график обеда, можно выбрать любое время в течение рабочего дня (кроме столовой рядом с офисом имеется много всяких кафе и пр.)
Отпуск 28 календарных дней,
ДМС включая стоматологию
Профессиональный коллектив, сложные развивающие задачи, причастность к созданию продукта, востребованного на глобальном рынке, демократичная атмосфера
Предлагаю удаленный аудит, настройку, оптимизацию, администрирование и организацию информационной защиты инфраструктур серверов/систем/сетей.
{{ Интересует только постоянная удаленка и/или средние/крупные проекты с постоянной занятостью с фиксированной компенсацией. Мелкие разовые заказы не интересуют }}.
Настройка, администрирование:
Операционных систем семейства Unix: Linux, FreeBSD, etc.
Систем эмуляции архитектур различного уровня их виртуализации: Qemu/KVM, Xen, VMWare.
Поддержка контейнерных объектов виртуализации высокого уровня: OpenVZ, LXC/Docker.
Систем управления базами данных как реляционного свойства: MySQL, PostrgeSQL, Oracle, Ingres, так и нереляционного: Redis, MongoDB, CouchDB
Программного обеспечения сервисов сетевого назначения и обеспечения работы приложений: mail,proxy,web,vpn,etc.
Систем цифровой телефонии/телефонных станций и сигналинговых сетей в различных схемах на базе ПО Asterisk, FreeSwitch, OpenSIPs/OpenSER.
Биллинговых систем/систем расчетов хостингов, операторов связи, других видов услуг.
Систем наблюдения и мониторинга: zabbix/nagios/cacti/etc.
Настройка и оптимизация коммутируемых и маршрутизируемых ip сетей на базе протоколов статической и динамической маршрутизации, коммутации.
Масштабирование проектов/решений/сервисов, аудит и обеспечение необходимого уровня их отказоустойчивости, доступности, распределенности, масштабируемости в различных вариациях: LoadBalancing/HighAvaliability сетей и сервисов в том числе при использовании таких решений как heartbeat-технологии: lvs/keepalived/pacemaker-автоматизации, haproxy и других.
Решений масштабирования объектов хранения: распределенных и кластеризованных и псевдо-кластеризованных файловых систем и устройств.
Систем контроля безопасности служб и сервисов систем, выявления и реагирования на угрозы в соответствие с международными стандартами ISO и локальными территориальными стандартами безопасности. Параметризации и нивелирования угроз по их свойствам. Применение сопутствующих инструментов, как свободно распространяемых, так и коммерческих аналогов систем: IDS/IPS/AAA/Firewall/etc.
Инструментов и методов автоматизации процессов сопровождения инфраструктуры и разработки на основе git/svn, а также оболочек chief/puppet/ansible, а также многоуровневых интегрированных инфраструктур автоматизации процессов/микросервисов на на базе облачных решений, а также с использованием kubernetes, и продуктов и оценки необходимости использования таковых.
Обеспечение динамики процессов CI/CD для тестовых сред и сред разработки. В основном Jenkins.
Выявление и устранение технических последствий несанкционированного доступа к инфраструктуре, причин утечек информации, защита итд.
Организация и внедрение уникальных и индивидуальных решений в области анонимизации сетей/структур. Под заказ и под ключ.
Консультации в сфере указанной компетенции, внедрение, планирование, поддержка.
Решение многих других сложных и нетривиальных задач в контексте обозначенной тематики.
Не организация, а частное лицо.
{{ В случае возникновения вопросов, просьба обращаться только через указанные контакты: }}