Инструменты пользователя

Инструменты сайта



// Пидан: взгляд с другого ракурса или кольцо Ойры

Уже, как обычно, сезон снегоступинга сходу не задаётся и в этом году. Практически весь декабрь проболел какой-то заразой (кашель без каких либо намёков на температуру или насморк), а на Новый Год, вместо празднования на вершине горы в палатке, обошёлся компанией градусника и некоторого количества мероприятий по возвращению здоровья.

Но вот новогодние каникулы закончились. Незаметно пролетела первая рабочая неделя и первые выходные. Желание куда-то выгрестись обрело форму рассылки писем с предложением сходить хоть куда-то хоть на сколько. В результате собралась компания: я, Коля, Кирилл. На один день решается сходить Спайдер (он же Лёха) с женой. Сам после перелома и для него выход — чисто проверить возможности. Он же предлагает забрасываться на его пепелаце. Обратно планируем выбираться уже на электричке.

Маршрут на 21-22 января, по итогу, получился таким:

// Qt Creator, CMake: отображение всех файлов в стоковом плагине

Немного в сторону от CMakeProjectManager2, в направлении стокового плагина.

Дискуссия на LOR навела на мысль. Ради спортивного интереса попробовал реализовать и… получилось! :)

За подробностями под кат.

// CMakeProjectManager2: теперь и с Server Mode

Вот и прошло почти два месяца с последних изменений.

Время было потрачено:

  1. для ожидания некоторой стабилизации апстрима, так как, по сути, они требовали писать абсолютно новый код для реализации текущего функционала, а в условиях сильных и фатальных изменений, переписывать свой код на каждый чих… у меня столько времени нет.
  2. была предпринята неудачная попытка продвинуть код в апстрим.
  3. ну и изучался новый код, когда выпадало время, плюс раздумья - как применить функциональность и для серверного режима работы CMake.

Так как код отвергли, а это, по сути, написанная с нуля реализация старого функционала, то он был взят за основу новых изменений. Ну как основу - 99%.

Есть и изменения. Малой кровью была создана обёртка поверх Server Mode Reader'а, которая предоставляет всего его внутренние профиты за исключением классического вида дерева файлов.

Соответственно изменения, сделанные для старого ридера (Tealeaf Reader), который используется для версий CMake младше 3.7, в части отображения всех файлов, добавления, удаления и переименования теперь применимы и для Server Mode Reader.

Сразу же был найден и первый баг: неправильно обрабатываются дефайны из CMAke (add_definition()). Патч уже отослан, у себя в коде изменений делать не буду, подожду, пока попадёт в апстрим, потом засинхронизируюсь.

Функциональность же передачи Toolchain файлов выла дропнута. Можно делать настройки через Kit или же вручную создать параметр CMAKE_TOOLCHAIN_FILE и задать нужный. Главное не забудьте сделать Build → Clear CMake Configuration после этого. Ну и будьте готовы, что парсер C++ вас перестанет понимать, как минимум, частично.

Пакеты для Ubuntu 14.04 и 16.04 и производных уже доступны через PPA. Не забываем внимательно читать описание репозитория.

В ближайших планах подготовить ветку для стабильной версии QtC - 4.2. Там окажется только текущая функциональность и нового появляться не будет (если только кто-то не возьмёт её на сопровождение). Есть вероятность, что серверный режим будет выключен, так как он требует много смежных изменений и бекпортирования. Явные косяки тоже будут переноситься. В будущем, планирую саппортить только текущую версию QtC. Для старых не планирую даже исправления ошибок переносить. На всё это нужно время.

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

Ну и с ошибками и предложениями: https://github.com/h4tr3d/cmakeprojectmanager2/issues

// ThinkPad T530: доступ к Break, Pause, Scroll Lock и SysReq

Начиная с Tx30 Lenovo дропнули старую клавиатуру на ноутбуках серии ThinkPad, что очень грустно, так как новая в части предоставляемой раскладки просто не выдерживает критики. Одно расположение клавиши Print Screen чего только стоит - ощущение, что клавиатура для ярых скриншотеров, не меньше. С другой стороны, расположение PgUp/PgUp значительно более удобнее, нежели на классике.

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

Клавиша Комбинация
Break Fn+B
SysRq Fn+S
Scroll Lock Fn+K
Pause Fn+P

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

Собственно вопрос, а чего бы эти значения не нанести на сами клавиши?

Ииии важное замечение, как работать с SysRq в Linux:

  1. Нажимаем Alt
  2. Нажимаем Fn
  3. Нажимаем S
  4. Отпускаем S
  5. Отпускаем Fn
  6. Нажимаем нужно командную клавишу (например S для синхронизации дисковых буферов, P - для распечатки регистров или C для паники :)
  7. Отпускаем нажатые клавиши в любом порядке или, не отпуская Alt, нажимаем следующую командную клавишу

ВАЖНО: простое нажатие Alt+Fn+S+буква ни к чему не приведут.

// CMakeProjectManager2 возвращается

В продолжение Qt Creator, CMake и судьба CMakeProjectManager2.

Ревью https://codereview.qt-project.org/#/c/180827/ расставило точки над i: "Project View == Build System View", билд система не может отображать все файлы проекта? Значит не будем показывать. Билд система не предоставляет возможности добавлять, переименовывать и удалять файлы в проекте? Значит не будем даже пытаться предоставить возможность это делать. Не удобно? Ничего, целостность концепции важнее.

Хотя… мне одному кажется, что абстракции тут текут? Ведь Project View сам по себе подразумевает именно проект?

Да, моё решение тоже не верх совершенства, даже так - костыль. Но он же реально помогает в условиях отсутствия более приличной альтернативы…

Ну и обоснование всего одно: «Я боюсь баг-репортов».

Неприятно, что у меня куча идей, а код из-за сервер-мода будет очень сильно меняться ещё, теперь держать кодовую базу в актуальном состоянии будет всё сложнее (более тяжёлые мёржи).

В любом случае, сейчас будет перезагрузка кода, потому как для новой кодовой базы, по сути, написан новый код. Сейчас буду думать, как наименьшей кровью в истории перенести новые изменения. Скорее всего придётся заревертить все прошлые мои изменений, привести master в состояние идентичное qtc-master, после чего просто сделать новый комит.

Ну а родной менеджер начнёт поддерживать данную функциональность, только кода CMake Server Mode сподобится на это. Удачи в ожидании :) Особенно при том условии, что конкуренты (KDevelop, Clion) это умеют делать.

// SSL на блоге

SSL Everywhere. С HTTP настроен редирект на HTTPS.

Сертификаты от Let's Encrypt, получение и обновление сертификатов через CertBot.

Работать будет с браузерами, которые умеют SNI, т.е. в пролёте древние Андроиды на 2.3.7, всякие IE6-IE8, HTTP клиенты в Java 6u45 и 7u25.

Первоначальный рейтинг C тюнился до A+ по следующим статьям:

Результат: https://www.ssllabs.com/ssltest/analyze.html?d=htrd.su&hideResults=on

Что пришлось менять и что поломалось:

  • Ссылки на банеры, в частности картинки пришлось утянуть себе, так как доступны только по HTTP
  • Воспользоваться миграционными тулами Disqus, что бы восстановить комментарии к статьям (URL Mapper, предварительно запросив текущий список и обработав его скриптом)
  • Счётчики G+ слетели. Как их чинить для новых страниц - хз.
  • Что ещё отвалилось. Иначе невозможно :)

// Garmin GPSMAP 64s

Обновочка. Продал свой GPSMAP 62s, как более неподдерживаемый. Плюс хотелось GLONASS. Зачем только не совсем понимаю :)

Отличия пока только визуальные: 62s мне достался практически сразу после выхода, и у него была детская болячка - скрипел корпус. 64s появился в 2014 году и корпус более крепкий. А вот резиновая заглушка для USB и антены на новом навигаторе доверия не внушает. Ещё более тактильная отдача на кнопках при нажатии.

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

Заявлено более короткий срок жизни от батареи. Минимальное время включения подсветки экрана увеличено с 5 сек до 15.

В этой модели можно заряжать аккумуляторы от USB. С одним «но»: внутри батарейного отсека появилась кнопка, что бы зарядка началась, нужно, что бы она была нажата. Автоматически это может сделать фирменный пак аккумуляторов, которые «сшит» общей рубашкой. Эта рубашка и зажимает кнопку. Типа, что бы беспечный пользователь не начал заряжать щелочные батарейки.

К сожалению, погонять чисто GLONASS на приборе не получится, доступные режимы: GPS, GPS+GLONASS. Чисто GLONASS - нет. А очень бы хотелось.

Теперь по ценам… Не покупайте у наших барыг! Типичная цена на навигатор в России - 25000 руб. Плюс минус. Самая маленькая найденная - около 20к руб. Добавьте судя стоимость доставки - от 500 до 1500 руб. (особенно, если хочется быстрее получить). А вот покупка и доставка с Амазона (я выбрал дорогую доставку UPS за 37$) вышла примерно в 15800 руб. (получил в руки за 1.5 недели). Что даже дешевле покупки мною предыдущего навигатора 62s - он мне обошёлся в 15900 руб., а ведь происходило это существенно раньше и по совсем другому курсу доллара. Так-то. Продавец: https://www.amazon.com/gp/product/B00HWL9AS8/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1. Карту памяти купил уже тут, отдал за 32Гб около 1000 руб.

// Учебные фильмы

Я на них вырос (часть из них крутили по УТВ): https://www.youtube.com/user/AKhodus/videos

// Qt Creator, CMake и судьба CMakeProjectManager2

Проект в стадии прекращения работы над ним…

// Беспроводная магия

Мужика вообще посмотреть стоит. Дядька тот ещё колдун.

// Уплотнительные кольца для BRS-8

Прошлой зимой потёк бензонасос горелки. Потёк внезапно и в походе, хорошо был баллон газа.

Протечка случилась по зазору вращающегося штока на насосе для прикручивания шланга.

Как оказалось, уплотнительная резинка растянулась. Готовых рем-комплектов на али не оказалось, пришлось мерить кольца и искать уже конкретные экземпляры.

Для начала небольшой словарь, которые поможет искать нужные номиналы:

  • OD - внешний диаметр
  • ID - внутренний диаметр
  • CS - толщина кольца

Запрос стоит формировать как-то так: «oil rubber ring CS ###mm», подставляя нужную толщину.

Самих номиналов колец оказалось 4 штуки: кольца внутри проблемного штока (4 штуки), хоть и похожи, он сам шток конический и два чуть больше. Итак:

  1. OD 12мм, ID 8мм, CS 2мм - 2 штуки (диаметр посадочного места 8.2мм)
  2. OD 12.5мм, ID 8.5мм, CS 2мм - 2 штуки (диаметр посадочного места не замерил, потом обновлю)
  3. OD 6мм, ID 3мм, CS 1.5мм - 6 штук (диаметр посадочного места 3.1мм) - это уплотнители на штоке шланга (4 штуки) и в насосе (2 штуки)
  4. OD 33мм, ID 26мм, CS 3.5мм - 2+ штук - уплотнительные кольца на резьбе пробки бутылки и самом насосе, диаметр может варироваться, там главное придавить их.

Варианты на Ali:

Ссылка на аналогичную проблему:

Раньше была возможность купить комплект:

но сейчас китаец не продаёт. Найти аналогичный - не смог.

Смущает только больший номинал колец в ремкомплекте для Kovea Booster+1 - https://primalp.com/posuda-gorelki/gazovye-aksessuary/kovea-remkomplekt-dlya-kb-0603/ (кстати его можно попробовать использовать, заказать в Тибете, например).

// OpenOCD, ThreadX и ваш процессор

TODO: нужно перетянуть статью в т.ч. сюда. Пока ссылка:

https://habrahabr.ru/post/249991/

// О PDF-просмотрщиках

Немного о наболевшем.

В PDF, обычно, распространяется документация.

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

По ссылкам неплохо иметь возможность переходить.

До сего момента речь шла, практически, о 100% доступных читалок для PDF.

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

Внезапно, но это, казалось бы простое требование просто фантастически прореживает стройные ряды просмотрщиков!

После длительных поисков и переборов остался такой набор:

  • Кроссплатформенные
    • Как это не парадоксально, но это PDF.js иными словами - Firefox. И он, пожалуй, единственный.
  • Linux
    • Тут тоже нет разнообразия, единственный представитель, который умеет эту простую фичу - KDEшный Okular. Evince и производные что-то пытаются делать, но работают очень странно. Другие не умеют вовсе.
  • Windows
    • Кто сказал - Acrobat Reader? Нет! Он не умеет. Из опробованных мной, с неперегруженным интерфейсом, только два варианта: STDUViewer и Sumatra PDF. Первый подглючивает временами, остановился на втором (на работе). Foxit Reader тоже, вроде, умеет, но его новомодный интерфейс мне непонятен и неприятен.

UPD: Сегодня появилась статья на Хабре, где человек соединил Qt, QWebEngineView и PDF.js, вот репозиторий на GitHub:

Про годность или негодность сего поделия напишу чуть позже.

// Системы заземления TN-S, TN-C, TNC-S, TT, IT

Наглядная статья: Системы заземления TN-S, TN-C, TNC-S, TT, IT

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

  • Если у вас до сих пор проводка по квартире алюмишкой в полтора квадрата - озадачьтесь установкой меди. И зарисуйте схему проводки.
  • Не чурайтесь использовать разделительный трансформатор для титана, стиральной машины и т.п.
  • УЗО
  • Если ваша сеть не TN-S, то сделайте (наймите того, кто сможет!) хотя бы TN-C-S. Следите, что бы заземляющий ноль не был подключен на тот же «орех», что и остальные. А лучше, что бы у вас было два своих подключения на нулевой провод в щитке: один для нуля, другой - для защитного зануления. Ещё лучше: требуйте от своей управляйки модернизации сети. В конце концов, часто то, что нам подсовывают под кап-ремонтом, им не является. Замена коммуникаций - это уже часть его.

// Переключение раскладки по CapsLock в Windows

На работе приходится сидеть в Windows по ряду причин, но очень неудобно, что нет привычного переключателя раскладок клавиатуры по CapsLock.

Перебрал несколько вариантов: специализированные утилиты (сайты большинства умерли (привет Recaps, Keyla) за исключением, пожалуй Capslang), правка реестра Windows (https://habrahabr.ru/post/305658/, не понравилось), использовал PuntoSwitcher (стрельба из пушки по воробьям ради только переключалки, плюс досадно глючил временами).

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

CapsLockLangSwitch.ahk
SetTitleMatchMode RegEx
#ifWinNotActive, ^.+ - Oracle VM VirtualBox$
	SetCapsLockState, AlwaysOff
	+CapsLock::CapsLock
	CapsLock::Send, {Ctrl down}{Shift down}{Shift up}{Ctrl up}
#ifWinNotActive
return

Сохраняем, запускаем, пользуемся. Если нужно, добавляем в автозагрузку. CapsLock остаётся доступен по сочетанию Shift+CapsLock.

Справочник по регуляркам: https://autohotkey.com/docs/misc/RegEx-QuickRef.htm

Ссылки по теме:

// Распродажа туристического снаряжения

Немного накопилось, что не подошло, что хочется поменять, а что уже заменилось, поэтому выставляю:

  • Лот 1: (Б/У) Навигатор Garmin GPSMAP 62s, в полной комплектации, с картами ДВ, Домашних вулканов Камчатки, Кодара, Тункинских гольцов на Восточном Сайне и района Белухи на Алтае, цена вопроса 15000 руб УШЁЛ

// C++ и хорошие практики

Существуют хорошие практики программирования и их стоит изучать. Часть из них применима не всегда. Часть стандартов хорошо себя зарекомендовала, но стоят денег, например MISRA C++, но, помимо цены, ещё и достаточно консервативен и покрывает только язык до стандарта C++11 (выпущен в 2008 году).

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

  • The C++ Core Guidelines - естественно на первом месте, руководство от, можно сказать, создателей, корифеев языка. Основные составители Бьярне Страуструп, Герб Саттер и, конечно, сообщество. Развивается оперативно и быстро адаптируется под новые фишки стандарта.
  • High Integrity C++ Coding Standard - коротко и по делу. Немного пояснения: https://en.wikipedia.org/wiki/High_Integrity_C%2B%2B. Сейчас покрывает C++11. На этот стандарт даёт отсылки MISRA C++ 2008.
  • Все книги из Скотта Майерса из серии Эффективное программирование на C++.

Ну и на затравку: писать надёжный софт на C++ можно - C++ on Mars: Incorporating C++ into Mars Rover Flight Software ;-)

И стоит помнить, что есть практики, есть стандарты, но не стоит выключать свой мозг и обкладываться паттернами, бустом и прочими непотребствами, если вам нужно вывести всего лишь «Hello, world!».

// Пакеты с отладочными символами для Debian

Пара линков на тему:

Первый описывает базовые подходы для версий debhelper меньше и больше 7. Второй линк описывает новый, рекомендованный подход с автоматическим созданием dbgsym пакетов.

Что бы файлы с отладочной информацией строились в PPA, в настройках (Change details…) нужно включить опции:

[x] Build debug symbols
[x] Publish debug symbols

// Ветки обсуждений в Thunderbird

Просто перечисление нескольких скрытых опций, которые могут оказаться полезными. В дополнение к http://kb.mozillazine.org/Stop_threading_by_subject:

  • mailnews.sort_threads_by_root - если кому-то хочется, что бы при сортировке по дате обсуждений использовалась дата корневого письма, а не самого последнее. Не знаю, кому такое может пригодиться, но полезно знать, на случай, если какое-то расширение изменит эту настройку в true.
  • mail.operate_on_msgs_in_collapsed_threads - управляет поведением на свёрнутых обсуждениях: показывать не-conversation вариант (true - по-умолчанию) или показывает корневое сообщение (false). Так как conversation-вариант попросту нефункциональный в TB, то я использую false.

Теперь ищу способ для:

  • Сделать свернутое обсуждение не просто подчёркнутым но выделенным жирным. Вроде как через пользовательский CSS можно.
  • Сделать так, что бы обсуждение было только с одним уровнем ветвления, а остальные сообщения были в порядке прихода. Для большинства обсуждений важна хронология, а контекст содержится в цитируемом сообщении. Этот бы вариант можно было бы решить группировкой по дискуссии (Group By Discussion), к сожалению поиск в интернете для этого не дал мне результатов (и вопрошание на SuperUser - тоже).

Ну а под катом немного расширений, которые могут показаться кому-то интересными в части организации дискуссий.

// CMake и Qt Creator: на пути к CMake server mode

В транке появилась пачка изменений, ориентированные на использование CMake Server Mode, в связи с чем плагин теперь может работать только с CMake версии 3.0 и более новым. Тобиас крепко взялся за плагин и будем надеяться, что, как минимум, скоро не будет требоваться:

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

Пока CMake Server Mode большего не предоставлят: в основном информация, но не изменение её. Так что ожидать автоматическое добавление файла к нужной цели или переименование файла в билд-системе средствами этого нового режима не стоит.

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

И от себя: в CMakeProjectManager2 добавил возможность использовать трюк от cmake, что бы задать варианты возможных значений для какого-то параметра и выводить их при редактировании в виде выпадающего списка. Фичу портировал в апстрим и завёл ревью, кому нужно, голосуйте: https://codereview.qt-project.org/#/c/173340

Про сам трюк:

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

set_property(CACHE OptionName PROPERTY STRINGS PossibleValue1 PossibleValue2 PossibleValue3 ... PossibleValueN)

Ни на что, кроме как для подсказки GUI этот параметр не влияет: CMake не делает валидацию введённых значений, поэтому возможность задать любое другое - остаётся.

Ссылки по теме:

// IncludeOS

Не мог обойти вниманием сиё творение.

Ребята запилили на суровом C++11/14 однозадачную сервисо-ориентированную операционку. Суть: операционка с минимальным футпринтом (образ 707кб), которая обслуживает ровно одну задачу (в их терминологии - сервис) и работает под управлением виртуальной машины: KVM, VirtualBox, используя возможности аппаратной виртуализации.

Сама операционка внутри представлена в виде асинхронного фреймворка, призванного, в первую очередь, строить сетевые приложения. Т.е. внутри реализован стек TCP/IP (судя по описанию, пока только IPv4, но IPv6 активно пилится). Многопоточность не поддерживается, реализован подход с кооперативной многозадачностью, которых очень хорошо ложится на асинхронную модель. Есть базовая поддержка файловых и дисковых операций (как минимум есть поддержка RAM-диска и файловых систем Ext4 и FAT).

При всём этом доступны для использования libc++ от LLVM (в том числе исключения), stdc в лице newlib.

В общем, интересное решение для сервис-ориентированных архитектур, для создания выделенных микросервисов. Плюс приятная лицензия: Apache2.

Ну и ссылки:

// Наконечники на трекинговые палки

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

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

// Батареи для Lenovo Thinkpad T530

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

// Обновление Linux Mint 17.3 до 18...

Или разлепляем пельмени, а потом собираем их обратно. Пару заметок.

Собственно разработчики Linux Mint всегда рекомендовали использовать новую установку вместо того, что бы просто обновлять систему. Несколько релизов я всё же обновлялся путём исправления репозиториев и apg-get upgrade / apt-get dist-upgrade. При выходе 18 версии дистрибутива авторы выложили инструмент и инструкцию для сего обновления:

Как обычно проблемы кроятся в мелочах. А именно: не учитывается влияние PPA от слова совсем.

// Thinkpad T530 BIOS Update

Снова мемориз.

  1. Находим BIOS тут или по модели тут. Скачиваем ISO. Не смущаемся наличием в описании разных Windows.
  2. Используем руководство отсюда. В частности, как использовать 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

// Garmin GPSMAP 62s/64s: обновления

Это просто мемориз, а то задолбался каждый раз искать где и как брать свежий фирмварь и патчер для JNX.

  1. Прошивка:
  2. Патчер:

Инструкция по обновлению (подсматривается на официальной странице прошивки нажав Ctrl-U :-)):

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:\>WebUpdater.exe c:\path\to\GPSMAP62_78_WebUpdater__630.gcd

Что они нормальным путём этого не предлагают мне не понятно.

Инструкция тоже не полная. Нужно:

  1. Скачать файл прошивки
  2. Переименовать его в GUPDATE.GCD
  3. Закачать на флешку в папочку Garmin
  4. Перезагрузите навигатор, прошивка начнётся сама.

// Обновление в статьях

Изрядно обновил статью Linux, ThinkPad T530 и miniDP (displayport), поместил ссылку на неё в Статьи. Если коротко: то в общем и целом настройка чуть упростилась и улучшилась. Но дёготь остался, куда без него.

// Топлёное масло

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

// Awesome C++

Вырвано из G+:

С сайта:

A curated list of awesome C/C++ frameworks, libraries, resources, and shiny things

Систематизированный список библиотек для решения различных задач на C++. Пока ограничен битбакетом и гитхабом, поэтому добавить некоторые полезные библиотеки за пределами этих площадок пока (?) возможности нет.

Список раньше хостился на GitHub, теперь обрёл второе рождение в виде сервиса.

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

В подвале сайта смотреть подобные каталоги для других языков, в частности, Rust и Go.

// Две Икрянки и немного Партизанского хребта

На первомайские планировали сходить немного траверса по Партизанскому хребту с заходом на г.Синяя. Заход: по р.Икрянка от села Ястребовка. Выход: р.Правая Икрянка в село Ястребовка.

// Хранение перезаправленных картриджей ручек Platinum

Пост для истории. Основные посылы, которые «не позволили» мне воспользоваться конвертером для ручки Platinum Balance можно почитать на penmania.ru.

Перезаправка картриджа не более грязная или долгая работа (наоборот, показалось, что выходит более чисто и быстро) чем заправка конвертера ручки. Но меня мучал вопрос хранения уже заправленных картриджей, ведь в этом случае проблема перезаправки становится ещё менее выраженной: при большей ёмкости и N-ном количестве картриджей шприц для заправки и бутылёк чернил можно хранить только дома и не носить с собой вообще.

// std::string_view и временные объекты

Идея поста родилась при употреблении чая во внутрь на южной кухне.

Недавно смотрел один доклад (точнее бегло просматривал) про 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 удалённым, то код выше сломается на этапе компиляции.

// C++ и 2D графика

Навеяно.

Из того, что мне понравилось:

    • Язык: C
    • Реализация: библиотека
    • Реально проста для простых применений. Куча примеров и статей в интернете. Поддерживает достаточно большое число платформ и компиляторов.
    • Язык: C++
    • Реализация: header-only
    • Библиотека отличается феноменальной простотой установки: только один заголовочный файл и всё. Минусом будет только тот факт, что нужно будет указать правильные флаги линковщика для целевой платформы. Но при этом весь базовый функционал для рисования и процессинга изображений присутствует. Дружится с OpenCV. Думаю, стоит рассматривать вариант этой библиотеки, когда нужно что-то по-быстрому нарисовать.
    • Язык: C++
    • Реализация: библиотека
    • С данной библиотекой особо не имел дел. Но примеры представляют её эдаким вариантом SDL, но на C++. Стоит попробовать.

Кроме того, на ресурсе cppreference.com есть свой список библиотек под различные задачи (в дополнение к предыдущему посту), и, в частности, для графики.

ЗЫ по ссылке выше есть интересная библиотечка для пользовательского интерфейса (GUI): nana, стоит пощупать. А так же для TUI: cwidget.

ЗЗЫ прочие ссылки:

// Коллекция ресурсов по современному C++

На RSDN промелькнуло, может ещё кому полезно будет:

Кто хочет дополнить - шлите мёрж-реквесты.

Прочие полезные ссылки, спасибо @sikmir:

// Полезные алиасы для программиста

Пока речь пойдёт про алиасы (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 мы найдём искомое описание.

// std::cout, std::cerr и std::clog

Сначала немного информации из мира С.

При запуске приложения (речь идёт о POSIX) вместе с ним открывается 3 файловых дескритоптора:

  • 0 - ассоциирован со стандартным вводом (stdin)
  • 1 - ассоциирован со стандартным выводом (stdout)
  • 2 - ассоциирован со стандартным выводом в поток ошибок (stderr)

В стандартной библиотеки Си используется FILE*-based буфферизируемый доступ к файлам и терминалу. В stdio.h объявлены следующие глобальные символы, которые отражают стандартные потоки ввода вывода:

  • stdin
  • stdout
  • stderr

Соответственно их свободно можно использовать вместе с семейством функций fread()/fprintf(), обеспечивая буфферизированный доступ.

Сами файловые дескрипторы POSIX объявляет через макросы в unistd.h:

  • STDIN_FILENO
  • STDOUT_FILENO
  • STDERR_FILENO

Соответственно их свободно можно использовать со всем семейством функций read(), write() и, даже, select()/epoll() и fcntl() (например, при помощи fcntl(O_NONBLOCK)+select+read можно реализовать аналог getch() из старого доброго Borland C++). Доступ через эти функции не буфферизирован.

Доступ к одному потоку разными механизмами в одной программе лучше не осуществлять: буферизация это уровень библиотеки C и внутреннего устройства FILE. write() или read() ближе к системным вызовам и ничего про это знать не обязаны. Как результат можете получить перемешивание текста даже в однопоточном приложении. Это не отменяет того файла, что сам fwrite() может, в конце концов, вызвать write().

На этом экскурс закончим и вернёмся в C++.

В C++ для работы с потоками служит библиотека iostream. Причём доступ к конкретному стриму может быть как буфферизируемым так и не буфферизируемым (зависит от потребностей).

Библиотека декларирует объекты, связанные со стандартными потоками:

  • std::cin - стандартный ввод
  • std::cout - стандартный вывод
  • std::cerr - стандартный вывод ошибок и
  • std::clog - для логирования

Про std::cin особо гооврить (пока?) не будем - он один, в своём роде. А вот про оставшиеся три стоит.

Итак, начнём с std::cout и std::cerr. В C++ они, помимо того, что связаны с разными дескрипторами, несколько отличаются поведением:

  • std::cout - буферизируемый
  • std::cerr - не буферизируемый

Такое отличие явственно следует из семантики использования: ошибку нужно увидеть сразу без ожидания каких-то дополнительных действий со стороны программиста типа std::flush или std::endl (он, кстати, делает и flush, поэтому, для большей производительности строки в нормальном выводе стоит заканчивать '\n', а не std::endl).

Ок, а что за std::clog? А это всего-лишь std::cerr + буферизация. И снова, семантика использования проста: диагностика может чуть и подождать, что бы не понижать производительность вывода, но смешиваться с нормальным выводом не есть хорошо, мы, ведь, можем использовать приложения в пайпе и, желательно, разделить диагностику и ошибки от обычного вывода.

Собственно, немного обобщая:

  • std::cout - используется для обычного вывода результатов работы программы на экран, эти данные могут быть переданы дальше по пайпу для обработки.
  • std::cerr - вывод сообщений об ошибке в обработке, что бы не подмешивались в основной поток и не ломали логику работы других программ в пайпе. При этом сообщение выводим максимально скоро.
  • std::clog - используем для разного рода диагностических сообщений, но когда использование std::cerr замедляет вывод из-за более частого дёргания системных вызовов, при этом, не подмешиваемся в основной поток и не мешаем работе других приложений в пайплайне.

Хорошим тоном, так же, является вывод справки по программе в std::cout, если вызвано с параметрами -h|–help - тогда её удобно смотреть в, например, less без дополнительных телодвижений, а вот справку по опциям, в случае неправильной установки какого-то параметра (или пропуска обязательного), лучше выводить (тут особой разницы не вижу) в std::cerr или std::clog.

И, на последок, лекция по поводу тормозов iostream и вообще, а как оно там внутри устроено:

// Source Specific Multicast и Asio

Недавно на ru.SO проскочил вопрос: как можно подключиться к SSM (Source Specific Multicast) группе?

Нюанс в том, что для этого используется опция `MCAST_JOIN_SOURCE_GROUP` для которой нет объекта-обёртки. Но, как оказалось, такой объект пишется самостоятельно на раз-два. Под катом я продублирую свой ответ, как пример подхода реализации нужного функционала. Пример не самый идеологически правильный, но, как оказалось, рабочий. Автор сам предложил свой вариант с захватом сырого хендла. Такой подход тоже имеет смысл в некоторых ситуациях8).

8)
у меня случилось однажды так подружить сетевые абстракции Asio и libev, реализовав, тем самым, реактор на Asio :-)

// С юга на север по Ливадийскому хребту

23 февраля решили отпраздновать очередным снегоступингом.

По предложению Кирилла рассматривали варианты посещения южных отрогов Ливадийского хребта.

Маршрут изначально рассматривался как:
Фокино-г.Халаза-г.Горбуша-г.Лысый дед-Молёный мыс
но в результате был скорректирован до:
Душкино-падь Светланка-г.Круглая-г.Пидан-Лукьяновка.

Собралось три человека: я, Кирилл, Саня. В роли адового тропильщика в этот раз Кирилл.

// GeoCrop 1.0

Я подумал и решил, что функционала и стабильности достаточно для релиза версии 1.0.

Так что да будет так: https://github.com/h4tr3d/geocrop/releases/tag/v1.0

// GeoCrop и популярные привязки

Если у вас на входе привязанный GeoTIFF, то проблем нет никаких, но если у вас просто растр (.png, .jpeg, .gif) и привязка для него, то есть нюансы. Вообще, GeoCrop умеет работать с любыми данными, с которыми умеет общаться GDAL. Но в в некоторых случаях не всё получается гладко, так, например, только сегодня он научился читать файл проекции для world-привязок (пара .prj+.pgw).

На просторах интернета можно встретить различные описания привязок, самые популярные:

  • Ozi Explorer
  • World files9)
  • Global Mapper

рассмотрим более подробно.

Ozi Explorer

GDAL не умеет только шифрованные OZFX, а так привязанная карта представляет собой пару .map+растр, где растр - это, обычно, .gif, .jpg или .png, реже - .bmp. При наличии такой привязки geocrop можно вызвать без дополнительных приготовлений:

geocrop -f VRT -s 50k K-53-026-A.map K-53-026-A.vrt

Обратите внимание, что передаётся map файл, а не растр.

World files

Т.к. сама привязка состоит из двух файлов (.prj+.pgw), то не так просто сказать, что и откуда читать. Согласно документации .pgw, .pngw или .wld файл10) подтягивается автоматически, если на входе карта в PNG (про другие форматы - ниже), а вот .prj файл нужно читать самому. Для этого в последней версии GeoCrop сделана небольшая эвристика:

  • Если растр содержит пустую проекцию, то производится попытка прочитать проекцию (формат WKT или PROJ.4) из файла с таким же именем, но расширением .prj и .prf.
  • Либо файл проекции можно жестко задать при помощи новой опции -p srs_def

Т.е. при наличии привязки в виде world files GeoCrop так же можно вызвать без дополнительных приготовлений так:

geocrop -f VRT -s 50k K-53-026-A.png K-53-026-A.vrt

если файл проекции находится в K-53-026-A.prj или K-53-026-A.prf, или так:

geocrop -f VRT -s 50k -p K-53-026-A.wkt K-53-026-A.png K-53-026-A.vrt

Обратите внимание, что в обоих случаях в качестве входного источника передаётся сам растр, а не его привязка.

Если у вас растры отличные от PNG:

  • BMP - привязка ищется в .bpw, .bmpw или .wld.
  • GIF - привязка ищется в .gfw, .gifw или .wld.
  • TIFF - если это GeoTIFF со встроенной привязкой, то она и используется, если это просто растр, то привязка ищется в .tfw, .tifw/.tiffw или .wld, а так же в MapInfo .tab файле.
  • JPEG - привязка ищется в .jgw, .jpgw/.jpegw или .wld, а так же MapInfo .tab файле.

Полный и актуальный список всегда можно посмотреть тут: http://www.gdal.org/formats_list.html

Global Mapper

В данный момент GDAL не поддерживает данный формат, а значит не поддерживает и GeoCrop. Ищите способ как сконвертировать его во что-то удобочитаемое.

Вообще .gmw файлы достаточно простые для разбора, так что, возможно, появится у меня и их поддержка. Тем более, что для тех же карт GGC там сразу зашита информация об обрезке (только странно, что они сразу не сделали рамку прозрачной).

// Новый режим в GeoCrop

Теперь в GeoCrop появился новый режим: генерация полигона для обрезки рамки в формате CSV+WKT. Вывод на stdout, так что можно сохранить в любой удобный файл из скрипта, после чего использовать как аргумент для -cutline у gdalwarp в какой-то более сложной команде. Вызова gdalwarp при этом не происходит.

Активируется режим опцией -g (от [g]enerate). Указывать выходной файл при этом не нужно - он будет проигнорирован.

Так же, теперь появилась возможность указывать файл с описанием проекции: -p srs_file. Сама проекция должна быть в формате WKT или PROJ.4. Эта опция перезаписывает определение проекции в текущем файле. Полезна для преобразования файлов с привязками в виде world-файлов. Более того, если проекция в файле пустая, а опция не указана то произведётся попытка прочитать её автоматически из файла с таким же именем, но с расширением .prj или .prf (какой первый попадётся). Так что популярные карты ГГЦ с такими привязками теперь можно конвертировать так же просто, как и с привязками Ozi Explorer.

Чуть раньше реализована функциональность по передаче дополнительных параметров gdalwarp. Для этого нужно завершить опции приложения двойным минусом , опции после него будут переданы gdalwarp как есть без изменений:

geocrop -f VRT -s 200k K-53-07.map K-53-07.vrt -- -overwrite

опция -overwrite будет передана gdalwarp. Помимо этого, теперь можно переопределить и сам исполняемый файл gdalwarp - опция -w GDALWARP.

Кроме того изменился формат опций, стало возможным указывать выходной формат (опция -f FMT, как следствие, образовались такие возможности: Быстро и ненавязчиво готовим карту для открытия в QMapShack) или только обрезать рамку, не делая кроп (опция -n).

// Быстро и ненавязчиво готовим карту для открытия в QMapShack

Для примера будет рассмотрен сервис http://loadmap.net, который предоставляет карты с привязками в формате OziExplorer.

Минусом подобных карт бывает то, что у них есть рамка и отдельные листы карт перекрывают друг друга при открытии. Для того, что бы рамку резать я уже написал ранее11) про свою программку geocrop.

Теперь про самый смак: QMS умеет открывать .vrt файлы. VRT файл это XML документ, с описанием привязки и различных преобразований, понятные движку GDAL. Так вот, в ходе беглого исследования оказалось, что мой способ резки рамки применим к VRT файлам: данное преобразование просто сохраняется внутри и применяется при открытии! Если добавить сюда тот факт, что переконвертации самого растра не происходит и просто формируется дополнительный маленький XML файл, то счастье становится полным.

Рассматривать вопрос сборки программы я подробно не буду, скажу только, что нужны dev пакеты для libgdal и libproj4. Устанавливать программу не нужно - просто скопируйте в удобное место, у меня это ~/bin. Сборка и работа на Windows не проверялась.

Вот, преамбула завершилась… Основная часть будет короче :)

  1. Скачиваем растровый файл карты, допустим это 500-метровка K-53-027-A, тогда файл будет K-53-027-A.png
  2. Скачиваем файл привязки K-53-027-A.map
  3. Обрезаем рамку и формируем VRT:
    ~/bin/geocrop -s 50k -f VRT K-53-027-A.map K-53-027-A.vrt

    Обратите внимание на параметр -s - он задаёт масштаб листа в виде делителя, т.е. опущена 1:, а буква обозначает степень десятки на которое нужно домножить: 50k (кило) = 50 * 10^3 = 50000 и масштаб тогда 1:50000, т.е. пятисотметровка.

11)
ozi2map от туда более не актуальна

// QMapShack

Внезапно QMapShack стал юзабельным!

Но немного истории. QMapShack это революционное развитие QLandkarteGT от того же автора. Просто архитектурно QLandkarteGT перестал соответствовать требованиям.

Итак, как минимум следующие фичи теперь доступны в QMS (принятая аббревиатура для QMapShack в расслылке)12):

  • Открытие серии файлов с геоданными, переданных, как аргументы приложения. Это не относится с картам (?) - они берутся только из директорий, которые вы настроили в программе (аналогично произвольная карта не может быть открыта через File → Open Map, такого пункта просто нет).
  • Поддерживаются ВСЕ форматы карт, которые поддерживаются GDAL (!). Но делается это не напрямую, а через формирование .vrt файла. Сей унифицированный способ отменил отдельное открытие GeoTIFF - теперь нужно и для него формировать vrt-файл. К счастью теперь это делается через внутренний инструмент vrtbuilder и позволяет в большинстве случаев обойтись без утомительной конвертации в GeoTIFF, например привязок OziExplorer13)14). Вообще список теперь достаточно вменяемый:
    • Векторые карты:
      • .img - веркторные карты Garmin в non-NT формате. NT-формат не поддерживается и поддерживаться не планируется.
    • Растровые карты:
      • .vrt - враппер для всех типов GDAL.
      • .jnx - Garmin Birds Eye.
      • .rmap - CompeGPS Map Container
    • Онлайн карты:
      • .wmts - WMTSCapabilities.xml с любого картографического сервера, переименованный в уникальное имя. Дальше есть подробности.
      • .tms - описание правил использования TMS серверов. Через такие файлы можно подключить всякие OpenStreetMap, OpenCycleMap и так далее. Встроенный мастер позволит сгенерировать такие файлы для некоторых популярных сервисов.
    • DEM рельеф:
      • .vrt - как и прочие растровые карты
  • (!) Более развитые средства управления геоданными. Каждый файл GPX воспринимается как отдельный контейнер-проект. Данные между ними можно копировать. Теперь можно объединить несколько треков в один (!).
  • (!) Больше информации по трекам: можно задать тип активности, можно посмотреть графики высоты от расстояния, скорости от расстояния, или прогресса пути от времени.
  • (!) Более развитые средства редактирования треков. Правда точки так и не удаляются, но можно скрыть их, спрямив, например, трек (убрав топтание на месте, при остановке на обед или заделку колеса на велосипеде).
  • (?) Более активное использование мыши в окне отображения карты. В контекстном меню находится большинство полезных пунктов, типа создания путевой точки или трека. Да и вообще больше динамики в интерфейсе, точнее в области карты.
  • (!!!) Выделение, печать или сохранение произвольной области карты. Костыльное решение я делал для QLGT, но его не приняли. Там можно было распечатать только видимую часть карты.

А вот теперь каких инструментов не хватает в QMS, но есть в QLGT:

  1. Инструмент привязки карты по точкам (в визуальной форме). Не знаю, будет ли сделан, но таск завёл.
  2. Экспорт выделенного куска карты в JNX. Потребность сомнительная, но пару раз пригождалась.

Ну и ссылки:

12)
(!) отмечены фичи уникальные, по сравнению с QLGT, а (-), то, что убрано, (?) - спорные изменения
13)
В случае привязок Ozi, нужно открывать .map файл, в случае привязок .pgw+.prj открывать нужно одноимённую картинку
14)
К сожалению, на карты и привязки с http://loadmap.net он упорно ругается

// Читинза под снегом 2

Их было четверо…
Они шли, шли, шли и, наконец, пришли!

Наконец-то первый полноценный снегоступный ПВД за сезон. То несросты, то переносы, но всё-таки собрались: Я, Коля, Кирилл и Гена.

А вообще, пробую завести ещё одну традицию: снегоступинг на Читинзу во второй половине января или начале февраля. В прошлом году была первая серия.

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

Маршрут изначально намечали:
Партизан (пл.98 км) - руч.Просечный - С-В хребет - вершина 1156 м - трверс на Читинзу - Читинза - С-З хребет - р.Постышевка - Наречное.

Но в электричке скорректировали его до:
Красноармейский - Ручьи - С-С-В хребет (классика) - Читинза - траверс на Смольную - Смольная - С-В хребет - вершина 734 м - руч.Прав.Лесопильный - Тигровой

Небольшая сводка:

День Протопали
км
Набор высоты
м
Сброс высоты
м
Время в движении
ч
Средняя скорость
км/ч
Начало движения
ч
Конец движения
ч
Сб 16.9 1434 554 06:25 2.0 10:00 18:34
Вс 14.2 201 1091 04:33 3.1 09:04 14:38
Всего 31 1635 1645 10:58 2.8


Подкатом немного текста и фотографий.

// Электродвигатели "на пальцах"

Не могу не пропиарить цикл статей по управлению и устройству различных электродвигателей (ДПТ, АД, СД, всякие шаговики и так далее):

Да и вообще рекомендую блог к подписке: НПФ ВЕКТОР

// Про снегоступы

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

  • Гуляешь по парку? Пожалуйста - walking!
  • Чуть сложнее? Да на здоровье - hikking!
  • Уже несёшь дом за спиной? Всегда рады - backpacking!
  • Идёшь в лыжный поход? Нет проблем - randonnee skiing (или ski touring)!
  • Hillwalking, mountaineering, и так далее.

Под каждую нишу своё снаряжение, подготовленные тропы, гиды и так далее.

При чём тут снегоступы? Оказывается и для них есть свои названия:

  • Наш жаргонный «снегоступинг» - это snowshoeing,
  • а «снегоступер» - snowshoer.

В статье на википедии про это есть. Уж не знаю, существуют ли подготовленные снегоступные трассы, но если ответ положительный - я не удивлюсь :)

// Как дышать на холоде

Хорошая статья на тему (автор - полярник):

Правда не знал, что -20, даже при ветре, это экстремально холодно :)

По способам: всё правильно. К примеру, дыхание ртом, когда язык загибаешь к нёбу. Про этот способ несколько лет назад сказал мой друг Олег. С тех пор и пользуюсь. Балаклава с «намордником» тоже решает. Правда скулы нужно не забывать закрывать, а то легкие не застудишь, а ряху обморозишь.

// Малый треверс Ботанического хребта и г.Острая по С-З гребню

Кто не понял - название шутка. Привет Спайдеру ;-)

На воробей сходить никого сблатовать не получилось. Пришлось ноги напрячь, хотя бы где-то в районе города. Результат:

  1. Время: 6:15
    1. в движении: 5:06
  2. Километраж: 16.2 км
  3. Средняя скорость: 3.17 км/час
  4. Общий набор высоты: 1076 м
  5. Общий сброс высоты: 939 м

К слову сказать - до Острой не дошёл, но об этом дальше.

// Обновление Qt Creator

Пока LOG, Habrahabr и другие гудят по поводу смены лицензионной политики в части Qt (переход на LPGL3) и QtC (переход с LGPL2.1 на GPL3 /именно GPL/ с исключением для плагинов), у меня дошли руки обновить PPA: https://launchpad.net/~adrozdoff/+archive/ubuntu/qtcreator-git

Ну и несколько интересных (для меня) изменений, которые стали доступны в этом билде. Добро пожаловать под кат.

// C++11: несуразность std::thread

Пост-вопрос.

Может кто объяснить, почему в стандарт вошла настолько обрезанная версия реализации std::thread? Ведь предлагаемый интерфейс не предоставляет абсолютно никаких средств передачи параметров потоку в момент создания, к примеру, тот же размер стека, что крайне актуально на всяких RTOS. При этом Boost.Thread такую возможность предоставляют средствами boost::thread::attributes:

    template <class F>
    explicit thread(attributes& attrs, F f);
 
    template <class F>
    thread(attributes& attrs, F &&f);
 
    template <class F, class ...Args>
    explicit thread(attributes& attrs, F&& f, Args&&... args);

Средства хоть и лимитированные, но доступ к native_handle атрибута позволяют тюнить параметры на конкретной платформе. Но в стандартной библиотеке нет и их. Нипанимать. Explain. Explain.

PS libstdc++ зато предоставляет достаточно простые средства, что бы добавить поддержку своих потоков (на той же RTOS), не прибегая к модификации кода библиотеки (если кому интересно, могу на пальцах разбросать как, но без полной реализации).