После экспериментов с роутером Zyxel Keenetic 4G II (прошил неофициальную прошивку серии V1 (V1.11.RU.NDMS), на родной серии V2 непредсказуемо работал multicast IPTV) заметил, что WiFi стал работать как-то нестабильно (затыки с сайтами, постоянный реконнект у мессенджеров). Временами, но стабильно, стал вылазить диалог с просьбой ввести пароль от точки. Будто бы порвалась связь и не получилось подключиться с какого-то количества попыток.
Размышляя, что менял (ну кроме самой прошивки), вспомнил, что я переключил WiFi с режима 11b/g на режим 11b/g/n (раньше прошивка читалки не могла цепляться, если AP в таком режиме, после прошивку исправили, а настройки так и остались). Действительно, когда я переключил роутер обратно в режим 11b/g, то всё стало на свои места, так что не прошивка виновата. Казалось бы - решение найдено, но такой путь - не наш метод (хотя… если ничто другое не помогает, то лучше синица в руках, чем журавль в небе).
Запоздалый пост. Краткое описалово может чуть позже (или никогда) накатаю, а фото вот:
https://picasaweb.google.com/116960244871002539190/102015
Сделал PPA, куда положил MinGW GCC 5: https://launchpad.net/~adrozdoff/+archive/ubuntu/mingw
Версия GCC на момент написания поста: 5.3.0. Сборка зависит от репозитория https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test/+packages (если надумаете собирать сами).
Краткие характеристики сборки:
- Модель потоков: только posix (требуется libwinpthreads), т.к. позволяет использовать все возможности C++11/C++14. Если будет спрос на win32, то нужно только добавить одну строчку и чуть подкорректировать альтернативы (т.е. сборка поддерживает, просто выключил win32).
- Обработка исключений: sjlj для win32 и seh для win64
- Сборка для Win32 и Win64
Добавление репозитория:
sudo apt-add-repository ppa:adrozdoff/mingw
Установка:
sudo apt-get install gcc-5-mingw-w64 g++-5-mingw-w64
Компилятор с суффиксом -5
, что бы не конфликтовать с тем, что распространяется вместе с Ubuntu/Mint.
В этом же репозитории планирую выкладывать сборки библиотек.
Создать альтернативы:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 99
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 99
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 20
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 99
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 99
sudo update-alternatives --set c++ /usr/bin/g++
После чего можно переключаться вручную через меню:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
или скриптом:
sudo update-alternatives --set gcc /usr/bin/gcc-5
sudo update-alternatives --set g++ /usr/bin/g++-5
или вернуть в автоматический режим:
sudo update-alternatives --auto gcc
sudo update-alternatives --auto g++
Снести альтернативы:
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++
Или только указанную:
sudo update-alternatives --remove gcc /usr/bin/gcc-4.9
sudo update-alternatives --remove g++ /usr/bin/g++-4.9
В последнем случае, подберётся другая альтернатива (на основе приоритета) и выбор будет выставлен в auto. Если альтернатив нет, то будут почищены все симлинки.
На основе: http://askubuntu.com/questions/26498/choose-gcc-and-g-version
Данная статья практически на 100% отражает и мой подход к использованию ссылок и указателей, рекомендую к ознакомлению:
http://eao197.blogspot.ru/2015/11/progthoughts-c.html
Тезисно:
void f(const T &p)
ожидает реально существующий объект, но не изменяет его;
void f(T &p)
ожидает реально существующий объект и изменяет его;
void f(const T *p)
ожидает объект или nullptr
, если объект существует, то не изменяет его;
void f(T *p)
ожидает объект или nullptr
, если объект существует, то изменяет его;
void f(unique_ptr<T> p)
ожидает объект или nullptr
; если объект существует, то забирает ответственность за его удаление;
void f(shared_ptr<T> p)
ожидает объект или nullptr
; если объект существует, то разделяет владение этим объектом (что дает право функции f()
сохранить p
у себя для дальнейшего использования или передать кому-то еще).
Как-то упустил сей момент:
Вообще FAQ стоит перечитать.
Если нужно сделать повторный стриминг небольшого файла (или просто сделать большой файл из нескольких повторов маленького), то поможет такая команда:
ffmpeg -re -f lavfi -i "movie=filename=/some/path/input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" -ar 44100 -f flv rtmp://some.server/app/live
Чуть подробнее:
-re
процессит входные фреймы так, как если бы это был live stream
- формат входного файла
lavfi
говорит, что входной файл, это не регулярный файл, устройство или сетевой ресурс, а описание графа фильтра (комплексного)
- соответственно аргументом
-i
становится описание графа фильтра:
1. movie
- фильтр задаёт источник данных, а его параметр loop=N
задаёт число повторов, 0 - бесконечное число раз, отличное от нуля - будет сделано именно такое число повторов.
2. setpts
- предыдущий фильтр действует принципу KISS: попросили повторять файл - буду, но PTS будет оставаться без модификаций, соответсвенно муксеру это может (и даже, скорее всего, обязательно) показаться неприятным. Соответственно нам нужно пересчитать PTS на основе прошедших (N
) кадров, фреймрейта (FRAME_RATE
) и time-base входного PTS (TB
, про time-base я уже писал)
Дальнейшие опции роли не играют и могут сильно варьироваться. Выходным файлом может быть что угодно. Проблемы могут быть с входными файлами с переменным фреймрейтом, но я таких не видел.
Продублировал как ответы на вопросы на сайта Stack Exchange:
Просто памятка:
- Генерируем ключ (
gpg --gen-key
).
- Экспортируем ключ (
gpg -a --export <тут мыло или другой идентификатор ключа>
, а подробнее тут: https://www.gnupg.org/gph/en/manual/x56.html).
- Идём на http://keyserver.ubuntu.com/ и добавляем в окно “Submitting a new OpenPGP Key” ключ экспортированный на прошлом шаге.
- Теперь получаем отпечаток (fingerprint) ключа (
gpg --fingerprint
)
- Идём на https://launchpad.net/~USERNAME/+editpgpkeys, проходим все
круги ада шаги авторизации и на странице внизу находим “Import an OpenPGP key” и в поле ввода копируем свой отпечаток с предыдущего шага. Причём нажатие на кнопку Import Key может как-то странно реагировать, тогда как нажатие Enter в онке ввода отпечатка работает как надо.
- Ждём письма на почту.
- Расшифровываем файл из письма (
gpg -d file.txt
).
- Переходим по ссылке из файла.
- PROFIT.
Имеет смысл в ~/.profile
или ~/.bashrc
добавить строки:
# PPA
export DEBFULLNAME="Foo Bar"
export DEBEMAIL="foo_bar@gmail.com"
Одно но: полное имя и почта должны соответствовать идентификатору ключа GPG. Иначе - создавайте алиасы.
Хороший WM((http://icemw.org, https://ru.wikipedia.org/wiki/IceWM)). Официально не развивается с 2013 года. Хорошей новостью является то, что автор не совсем на него забил и, хотя бы, обновляет сайт. Собственно на сайте появилась ссылка на неофициальный, но развиваемый репозиторий: https://github.com/bbidulock/icewm, так что реквесты приветствуются :)
Есть такой чип: Cypress FX3. Это чип для построения USB 3.0 устройств. Внутри железная реализация протокола, 512кБ памяти и ядро ARM926E-JS. Cypress предоставляет SDK, в котором поставляется RTOS ThreadX и необходимый код для работы с их железом.
Как и классических встраеваемых SDK есть возможность ставить пользовательские колбеки и, по сути, управлять и строить логику конкретного приложения, ну и реализовать нужное вам USB 3.0 (2.0 тоже) устройство.
Пост ни о чём. Просто хочется узнать сколько людей читает этот блог :) Такая вот блажь накатила. Поэтому велкам в камменты: кто читает, кому что интересно, может какие-то пожелания и т.п.
Тут немец один в почту постучался. У него проблемы с кодированием кодеком VP9:
ffmpeg: /build/buildd/libvpx-1.3.0/vp9/encoder/vp9_encodeframe.c:1747: rd_pick_partition: Assertion `tp_orig < *tp' failed.
Если вы сидите на каком-нить Mint 17 или Ubuntu 14.04, то у вас в системе стоит libvpx версии 1.3.0 в котором есть баг: при параметре arnr-maxframes
равным нулю он крешится вот таким вот образом. Причем 0
- это валидное значение согласно документации. Если эту опцию принудительно не указывать для vpxenc, то он нормально кодирует, т.е. использует какое-то значение отличное от нуля, если указать - такой же креш. А вот FFmpeg, там внутри тоже не без косяка: лапша в настройках, задаёт дефолтное значение в 0
, хотя разработчики рассчитывали (судя по всему) как раз на -1
. Потому такая петрушка.
Лечится указанием ffmpeg опции -arnr-maxframes
со значением -1
или больше 0
. -1
- включит это самое “дефолтное” значение внутри libvpx.
В новых версиях libvpx проблема исправлена. Репорты:
ЗЫ о целесообразности использования VP9 меня не спрашивайте. Меня просто спросили, а я разобрался :)
ЗЗЫ FFmpeg версии 2.8.1 но роли это не играет.
Заголовок не отражает всей сути. Конкретно:
VirtualBox: 5.0.8 Гость: Linut Mint 17.2 и Ubuntu 14.04.2, x86_64 Зост: Win8, x86_64 Сборка Qt Creator из PPA: https://launchpad.net/~adrozdoff/+archive/ubuntu/qtcreator-git Проблема: при запуске крешится. Выводится такой стек-трейс:
alexd@alexd-VirtualBox ~ $ qtcreator-git libGL error: pci id for fd 18: 80ee:beef, driver (null) OpenGL Warning: glFlushVertexArrayRangeNV not found in mesa table OpenGL Warning: glVertexArrayRangeNV not found in mesa table OpenGL Warning: glCombinerInputNV not found in mesa table OpenGL Warning: glCombinerOutputNV not found in mesa table OpenGL Warning: glCombinerParameterfNV not found in mesa table OpenGL Warning: glCombinerParameterfvNV not found in mesa table OpenGL Warning: glCombinerParameteriNV not found in mesa table OpenGL Warning: glCombinerParameterivNV not found in mesa table OpenGL Warning: glFinalCombinerInputNV not found in mesa table OpenGL Warning: glGetCombinerInputParameterfvNV not found in mesa table OpenGL Warning: glGetCombinerInputParameterivNV not found in mesa table OpenGL Warning: glGetCombinerOutputParameterfvNV not found in mesa table OpenGL Warning: glGetCombinerOutputParameterivNV not found in mesa table OpenGL Warning: glGetFinalCombinerInputParameterfvNV not found in mesa table OpenGL Warning: glGetFinalCombinerInputParameterivNV not found in mesa table OpenGL Warning: glDeleteFencesNV not found in mesa table OpenGL Warning: glFinishFenceNV not found in mesa table OpenGL Warning: glGenFencesNV not found in mesa table OpenGL Warning: glGetFenceivNV not found in mesa table OpenGL Warning: glIsFenceNV not found in mesa table OpenGL Warning: glSetFenceNV not found in mesa table OpenGL Warning: glTestFenceNV not found in mesa table libGL error: core dri or dri2 extension not found libGL error: failed to load driver: vboxvideo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals Could not initialize GLX 0 libLLVM-3.
Пост основан на двух вопросах на Тостере и RU.SO. На RU.SO я же накатал ответ, на основе которого и буду строить свой псто. Кроме того, рассматриваю более подробно как работает перемотка со стороны FFmpeg.
В общем, жаждущие - подкат.
Волею судеб, китайская BRS-8 оказалась первой моей шланговой горелкой (мультитопливной тоже, но роли не играет). Но был замечен минус: после обычных накручивающихся (через ковеевский переходник Cobra) ощущался повышенный расход газа. Но плюсы контура испарителя и возможность погреть баллон очень сильно манили. Ещё хотелось чего-то более лёгкого: вес “газового” комплекта BRS-8 у меня доходит до 500 грамм, что не сильно мало.
Рассматривал различные варинты, взвешивал за и против (если кому интересно: выкладки могу опубликовать), ориентировался на известные бренды. Остановился на Optimus Vega, при покупке на eBay она встала мне с доставкой около 4000 руб, текущая цена, в районе 7000 руб, поставила бы на ней крест изначально. Собственно варианты были следующими:
- Optimus Vega
- MSR WindPro II
- Primus Express Spider
- Primus Gravity II EF
Плюс краем глаза смотрел на Fire-Maple VOLCANO FMS-118 (или читать обзор) (забегая вперёд, скажу, что в текущей ситуации остановился бы на ней)
Итак, сама горелка:
