Effective Modern C++ by Scott Meyers

»If you’re an experienced C++ programmer and are anything like me, you initially approached C++11 thinking, “Yes, yes, I get it. It’s C++, only more so.” But as you learned more, you were surprised by the scope of the changes. auto declarations, range-based for loops, lambda expressions, and rvalue references change the face of C++, to say nothing of the new concurrency features. And then there are the idiomatic changes. 0 and typedefs are out, nullptr and alias declarations are in. Enums should now be scoped. Smart pointers are now preferable to built-in ones. Moving objects is normally better than copying them.«

– Effective Modern C++ by Scott Meyers

Обнаружение дедлока из шелл-скрипта

Задача: Обнаружим дедлок bash-скриптом и отдадим на выход exitcode 1.

Вос/произведем простейший дедлок, запустим ./ily.bin deadlock_off 1000000

ily.cpp:

Дедлок вычислим силами GDB – для этого подготовим следующий скрипт (futex_gdb_py), так как gdb поддерживает питон (через import gdb находим pthread_mutex_lock прямо в gdb)

команда x/3d показывает что им владеет процесс 20861
команда x/3d показывает что им владеет процесс 20860
команда thread 4 показывает что процесс 20860 ждет mutex2
команда thread 5 показывает что процесс 20861 ждет mutex1:

И, собственно сам скрипт bash, для простоты берём pid запущенного процесса по имени ily.bin:

Cortex-M3/M4 [Olimex STM32-P152] GCC + OpenOCD с PN2

Olimex STM32-P152

Среда разработки – Eclipse + GCC (исходный код G ++ Lite) / Atollic TrueSTUDIO + ST-Link/V2

(с) kenjia

Microsoft UI Automation

Каким образом програмно получить значение поля Tag из программы Pilot-BIM? Т.к. программа написана на dotNet, её GUI “подчиняется” модели автоматизации пользовательского интерфейса Microsoft.

Соответственно, берём UISpy и ищем наше поле:

Программа для запоминания ключей 部首

Программа Chi[tai]na предназначена для запоминания 214-ти китайских ключей (упрощённое письмо – chinese simplified).

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

github/chitai_na

nginx telegram webhook behind NAT (&reverse ssh tunneling)

Instead of ngrok, pinggy etc – we’ll do it using own nginx web-server and ssh-tunnel.

/etc/nginx/sites-enabled/tgbot-webhook.conf

On the Bot’s computer in our local network (behind NAT)

ST STM32L152VBT6A support in PlatformIO

OLIMEX STM32-P152 board

JRE as Eclipse plugin

eclipse.ini:

UPD:
org.eclipse.justj.openjdk.hotspot.jre.full-22.0.1-linux-x86_64.tar.gz
org.eclipse.justj.openjdk.hotspot.jre.full-22.0.1-win32-x86_64.tar.gz

Old links:
org.eclipse.justj.openjdk.hotspot.jre.full-19.0.2-linux-x86_64.tar.gz
org.eclipse.justj.openjdk.hotspot.jre.full-19.0.2-win32-x86_64.cab

Creating WDM and driver call

Let’s create a WDM driver and some application to call it (e.g. MFC)

WDM’s source.c

Boost.Log: v2s_mt_nt6 doesn’t match v2s_mt_nt62

При возникновении ошибки

скорее всего, две библиотеки используют одни и те же директивы (#define).
Решение: просто поместите #include файла Boost выше.

Күп агымлы TCP-сәрвәр

Гади консольле TCP-клиент hәм Linux-сокетларын куллана торган сәрвәр.
Сораучы ягы боерык юлыннан өч зурлык ала:

  1. Сораучының исеме
  2. Портның номеры (әйтик, 6669)
  3. Тоташу вакытының озынлыгы (секундаларда)

Сораучы ягы бирелгән вакыт озынлыгы белән сәрвәргә тоташа да, hәм менә мондый форматта сәрвәргә юл җибәрә:
[yyyy-mm-dd hh:mm:ss.ms] “сораучының исеме”

Сәрвәр боерык юлыннан бер генә зурлык ала:
1) Портның номеры

Эшләтеп җибәргәннән соң сәрвәр бирелгән портны тыңлый, сораучылардан белдерүләр ала hәм аларны беркетмәгә (log.txt) яза.

Сораучының hәр тоташуы аерым агымда эшкәртелә.
hәрбер белдерү аерым юлга языла.

Сәрвәр бер үк вакытта берничә сораучы белән эшли һәм log.txt беркетмәгә язу мөмкинлеген тәэмин итә.

Мәсәлән, сәрвәрне эшләтеп җибәрәбез:
tcp_th_srv 3000

Сораучыларны җибәрәбез:
clnt80 Name1 3000 1
clnt80 Name2 3000 2
clnt80 Name3 3000 3

Ул чагында log.txt беркетмәдә якынча шундый юлларны күрербез (сораучыларны эшләтеп җибәрү вакытына бәйле булачак)
[2018-09-19 13:50:01.000] Исем1
[2018-09-19 13:50:02.000] Исем1
[2018-09-19 13:50:02.010] Исем2
[2018-09-19 13:50:03.000] Исем1
[2018-09-19 13:50:03.010] Исем3
[2018-09-19 13:50:04.000] Исем1
[2018-09-19 13:50:04.010] Исем2
[2018-09-19 13:50:05.000] Исем1
[2018-09-19 13:50:06.000] Исем1
[2018-09-19 13:50:06.010] Исем2
[2018-09-19 13:50:06.020] Исем3

һәм башка шундыйлар (һ.б.ш.)

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert