Мониторинг внешнего интерфейса (UL/DL) роутера Keenetic с помощью виджета рабочего стола (плагин Rainmeter)

Keenetic Rainmeter Plugin

Однажды мне захотелось видеть график загрузки внешнего канала моего роутера Keenetic Viva (KN-1910) прямо на рабочем столе Windows 10.

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

Почитав документацию для создания виджетов (в их терминологии "скины") и внешних плагинов, я написал плагин на С++. Плагин общается с роутером по REST API.

 

Как передать множество файлов одной команде из контекстного меню проводника Windows

You can archive it with my program called singleinstance (sourcecode).
No shell extensions involved.

The main idea is that one instance of my program will be launched per file you have selected. It is checking if another instance of singleinstance program is running, and using Inter-Process Communication to notify the existing instance that other files have been selected.

Что должен знать идеальный C++ программист в вакууме

У нас в России зачастую неадекватные требования к программистам. 

Вот как могла бы выглядеть идеальная вакансия С++ программиста:

1. C++, стандарт, Страустрап/D&E/Джосаттис/Вандервуд, Дьюхэрст/Мейерс/Саттер, RAII, правило трех, exception-

safety, Александреску/Абрахамс-Гуртовой, type erasure, CRTP, NVI, SFINAE, Koenig lookup, Duff's device, Boost, Сик-Ламсдейн/Карлссон, TR1, TR on C++ performance, тест Степанова, forwarding problem, SPECS, C++0x

2. Компиляторы, особенности реализации стандарта, ограничения реализации, интринсики, отличия стандартных библиотек (контейнеры, rand), ABI, реализация виртуальных функций, виртуального наследования, исключений, RTTI, switch, указателей на функции и методы; оптимизации, copy elision (RVO, NRVO), sizeof на различных платформах, дефайны компилятора и среды, __declspec, ключи компилятора, empty-base optimization, статическая и динамическая линковка, манглинг, распределенная компиляция, precompiled header, single compilation unit, (strict) aliasing/restrict, inline/_forceinline, volatile

3. Мультитредность, обедающие философы, deadlock/race condition/starvation, атомарность, lock инструкции процессора, CAS или LL/SC, wait/lock/obstruction-free, ABA problem, написание lock-free контейнеров, spin-lock, TLS/per-thread data, OpenMP, MPI, map-reduce, critical section/mutex/semaphore/condition variable, WaitForSingleObject/WaitForMultipleObjects, green thread/coroutine, pthreads

Resharper C++, впечатления

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

Никогда не думал, что разработка на С++ в IDE может быть так же удобна, как, например, разработка на C# или Java.

Статья на хабре: http://habrahabr.ru/company/JetBrains/blog/255151/

Хотя, конечно, мои проекты не содержат какой-то сложной работы с шаблонами или фичами C++11, тем не менее, я очень доволен. По сравнению со стандартным IntelliSense или VisualAssist X, небо и земля. С++ разработчики более не могут считать себя обделенными.

Ссылки на разные open source проекты на C++

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

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

Распространение Windows приложений в Linux (Wine) при помощи InnoSetup

First, we need to detect Wine in the InnoSetup script.

function LoadLibraryA(lpLibFileName: PAnsiChar): THandle;
external 'LoadLibraryA@kernel32.dll stdcall';
function GetProcAddress(Module: THandle; ProcName: PAnsiChar): Longword;
external 'GetProcAddress@kernel32.dll stdcall';

function IsWine: boolean;
var  LibHandle  : THandle;
begin
  LibHandle := LoadLibraryA('ntdll.dll');
  Result:= GetProcAddress(LibHandle, 'wine_get_version')<> 0;
end;