Не мог обойти вниманием сиё творение.
Ребята запилили на суровом C++11/14 однозадачную сервисо-ориентированную операционку. Суть: операционка с минимальным футпринтом (образ 707кб), которая обслуживает ровно одну задачу (в их терминологии - сервис) и работает под управлением виртуальной машины: KVM, VirtualBox, используя возможности аппаратной виртуализации.
Сама операционка внутри представлена в виде асинхронного фреймворка, призванного, в первую очередь, строить сетевые приложения. Т.е. внутри реализован стек TCP/IP (судя по описанию, пока только IPv4, но IPv6 активно пилится). Многопоточность не поддерживается, реализован подход с кооперативной многозадачностью, которых очень хорошо ложится на асинхронную модель. Есть базовая поддержка файловых и дисковых операций (как минимум есть поддержка RAM-диска и файловых систем Ext4 и FAT).
При всём этом доступны для использования libc++ от LLVM (в том числе исключения), stdc в лице newlib.
В общем, интересное решение для сервис-ориентированных архитектур, для создания выделенных микросервисов. Плюс приятная лицензия: Apache2.
Ну и ссылки:
Покупаешь палки, ходишь, и через некоторое время наконечники превращаются в такое:
и перестают “цепляться”, а при дальнейшем износе уже начинают убиваться сами палки.
Всегда хочется, что бы ноутбук смог проработать в автономке подольше. Тут помимо оптимизации энергопотребления (статей посвящённых этому вопросу в интернетах уйма) иногда встаёт вопрос более ёмкой батареи. Причём актуальность автономной работы часто перекрывает некоторые неудобства, связанные с весом и габаритами.
Или разлепляем пельмени, а потом собираем их обратно. Пару заметок.
Собственно разработчики Linux Mint всегда рекомендовали использовать новую установку вместо того, что бы просто обновлять систему. Несколько релизов я всё же обновлялся путём исправления репозиториев и apg-get upgrade
/ apt-get dist-upgrade
. При выходе 18 версии дистрибутива авторы выложили инструмент и инструкцию для сего обновления:
Как обычно проблемы кроятся в мелочах. А именно: не учитывается влияние PPA от слова совсем.
Снова мемориз.
-
Находим BIOS
тут или по модели
тут. Скачиваем ISO. Не смущаемся наличием в описании разных Windows.
-
Используем руководство
отсюда. В частности,
как использовать GRUB2, что бы не шить ISO никуда. У меня не сработало - зависание программы прошивальщика после первого подтверждения своих намерений. Помог способ с
загрузочной флешкой. Конспективно:
./geteltorito.pl -o xxx.img xxx.iso
sudo dd if=xxx.img of=/dev/sdX
-
Перезагружаемся, выбираем флешку как источник загрузки и грузимся с неё. Дальше всё понятно.
Опционально
проверяем версию BIOS и время релиза из системы:
sudo dmidecode -s bios-version
sudo dmidecode -s bios-release-date
Это просто мемориз, а то задолбался каждый раз искать где и как брать свежий фирмварь и патчер для JNX.
-
Прошивка:
-
Патчер:
-
GPSMAP 66/66s:
- Просто полезная информация:
Инструкция по обновлению (подсматривается на официальной странице прошивки нажав Ctrl-U :simple_smile:):
NOTE FOR USERS WANTING TO DOWNLOAD SOFTWARE ON ONE COMPUTER AND THEN INSTALL IT TO THEIR
DEVICE USING A DIFFERENT COMPUTER:
1) To download the region file used by WebUpdater, copy and paste this link into your browser
on computer #1:
http://download.garmin.com/software/GPSMAP62_78_WebUpdater__630.gcd
2) Bring GPSMAP62_78_WebUpdater__630.gcd to computer #2 where your device is attached.
3a) Then you can drag-and-drop GPSMAP62_78_WebUpdater__630.gcd onto the WebUpdater icon on your desktop.
3b) Or you can invoke WebUpdater at the command line, passing in the region file as a parameter:
C:<br/>>WebUpdater.exe c:<br/>path<br/>to<br/>GPSMAP62_78_WebUpdater__630.gcd
Что они нормальным путём этого не предлагают мне не понятно.
Инструкция тоже не полная. Нужно:
- Скачать файл прошивки
- Переименовать его в GUPDATE.GCD
- Закачать на флешку в папочку Garmin
- Перезагрузите навигатор, прошивка начнётся сама.
Изрядно обновил статью
, поместил ссылку на неё в
статьи. Если коротко: то в общем и целом настройка чуть упростилась и улучшилась. Но дёготь остался, куда без него.
В преддверии похода по Восточному Саяну впервые приготовил топлёное масло. Оказалось несложно - главное подобрать хороший исходный продукт.
Вырвано из G+:
С сайта:
A curated list of awesome C/C++ frameworks, libraries, resources, and shiny things
Систематизированный список библиотек для решения различных задач на C++. Пока ограничен битбакетом и гитхабом, поэтому добавить некоторые полезные библиотеки за пределами этих площадок пока (?) возможности нет.
Список раньше хостился на GitHub, теперь обрёл второе рождение в виде сервиса.
Система рейтингов и меток должна помогать выбирать полезное. Как будет работать на самом деле - покажет время.
В подвале сайта смотреть подобные каталоги для других языков, в частности,
Rust и
Go.
На первомайские планировали сходить немного траверса по Партизанскому хребту с заходом на г.Синяя. Заход: по р.Икрянка от села Ястребовка. Выход: р.Правая Икрянка в село Ястребовка.
Идея поста родилась при употреблении чая во внутрь на южной кухне.
Недавно смотрел один доклад (точнее бегло просматривал) про Rust и в момент, когда начался рассказ про life-time, глаз зацепился за такой опасный пример из мира C++:
string get_url()
{
return "http://htrd.su";
}
string_view get_schema(string_view v)
{
// тут какие-то действия, я их опущу
auto result = v;
return result;
}
int main()
{
auto v = get_schema(get_url());
}
Что такое string_view - смотреть
тут или
тут. Если коротко - это невладеющая строка. Полезна для экономии на аллокациях, когда нужно работать с частями исходной строки.
В общем, из природы string_view
следует и проблемы в коде выше: get_url()
вернёт временный объект, который будет уничтожен в конце выражения, а следовательно, v
будет ссылаться на невалидный участок памяти.
У меня в голове родилось, сходу, вариант защиты от такого: так как string_view
не владеет строкой, то перемещение для строки сделать невозможно (да и семантически неверно), а перемещающий конструктор будет предпочтён для временного объекта. Следовательно если сделать перемещающий конструктор для string
у string_view
удалённым, то код выше сломается на этапе компиляции.
Пост для истории. Основные посылы, которые “не позволили” мне воспользоваться конвертером для ручки Platinum Balance можно почитать на
penmania.ru.
Перезаправка картриджа не более грязная или долгая работа (наоборот, показалось, что выходит более чисто и быстро) чем заправка конвертера ручки. Но меня мучал вопрос хранения уже заправленных картриджей, ведь в этом случае проблема перезаправки становится ещё менее выраженной: при большей ёмкости и N-ном количестве картриджей шприц для заправки и бутылёк чернил можно хранить только дома и не носить с собой вообще.
Навеяно.
Из того, что мне понравилось:
-
SDL2
* Язык: C
* Реализация: библиотека
* Реально проста для простых применений. Куча примеров и статей в интернете. Поддерживает достаточно большое число платформ и компиляторов.
-
CImg
* Язык: C++
* Реализация: header-only
* Библиотека отличается феноменальной простотой установки: только один заголовочный файл и всё. Минусом будет только тот факт, что нужно будет указать правильные флаги линковщика для целевой платформы. Но при этом весь базовый функционал для рисования и процессинга изображений присутствует. Дружится с OpenCV. Думаю, стоит рассматривать вариант этой библиотеки, когда нужно что-то по-быстрому нарисовать.
-
SMFL
* Язык: C++
* Реализация: библиотека
* С данной библиотекой особо не имел дел. Но примеры представляют её эдаким вариантом SDL, но на C++. Стоит попробовать.
Кроме того, на ресурсе
cppreference.com есть свой
список библиотек под различные задачи (в дополнение к
предыдущему посту), и, в частности,
для графики.
ЗЫ по ссылке выше есть интересная библиотечка для пользовательского интерфейса (GUI):
nana, стоит пощупать. А так же для TUI:
cwidget.
ЗЗЫ прочие ссылки:
На RSDN промелькнуло, может ещё кому полезно будет:
Кто хочет дополнить - шлите мёрж-реквесты.
Прочие полезные ссылки, спасибо @sikmir:
-
C++ links - A categorized list of C++ resources. Assembler, Lock-free и иже с ними.
-
Awesome C/C++ - A curated list of awesome C/C++ frameworks, libraries, resources, and shiny things. Inspired by awesome-… stuff.
Пока речь пойдёт про алиасы (alias) для man. Потом, может быть, что-то будет дополнено.
MAN
Часто возникает вопрос: “man чаво?”. Кроме того, интересные программистам документы, обычно, находятся в секциях 2 (системные вызовы), 3 (библиотечные вызовы) и 7 (стандарты, соглашения, обзоры). По назначению других секций можете спрашивать:
man # intro
где #
- номер секции от 1 до 7.
В общем родилось три алиаса: для обращения и для поиска.
Для использование, код ниже поместить в ~/.bashrc
alias man-prog='man -s 2,3,7'
alias man-prog-search='man -s 2,3,7 -K'
alias man-prog-apropos='man -s 2,3,7 -k'
Первый - просто ограничивает область поиска и по man-prog printf
выведет не описание команды, а описание функции.
Второй - обеспечивает полнотекстовый поиск по страницам, третий - по индексу (apropos). В чём разница. Поясню на примере:
$ man-prog-apropos tcp
clnttcp_create (3) - library routines for remote procedure calls
clock_getcpuclockid (3) - obtain ID of a process CPU-time clock
getcpu (2) - determine CPU and NUMA node on which the calling thread is running
pthread_getcpuclockid (3) - retrieve ID of a thread's CPU time clock
QwtCPointerData (3) - (неизвестный объект)
sched_getcpu (3) - determine CPU on which the calling thread is running
svctcp_create (3) - library routines for remote procedure calls
tcp (7) - TCP protocol
zmq_tcp (7) - 0MQ unicast transport using TCP
Вроде всё хорошо. Дальше:
$ man-prog-apropos TCP_CORK
TCP_CORK: ничего подходящего не найдено.
Оппа… В гуголь лезть? А если так:
$ man-prog-search TCP_CORK
--Man-- след: sendfile(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
--Man-- след: sendfile64(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
--Man-- след: sendmsg(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
--Man-- след: sendto(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
--Man-- след: splice(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
--Man-- след: tcp(7) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
в man 7 tcp
мы найдём искомое описание.