2022年3月27日 星期日

Intel M.2 Wifi Adaptor 2022

 

CRF

這些 Intel® 無線介面卡是支援 Intel® 整合式連接的 CRF 模組:

    Intel® Wi-Fi 6E AX211
    Intel® Wi-Fi 6 AX201
    Intel® Wireless-AC 9560
    Intel® Wireless-AC 9462
    Intel® Wireless-AC 9461

$ in RMB

2022-03
I bought AC9560NGW at $27 that can reaches 866Mhz with ASUS AC Router.
Sellers said 9260 at $70 with better compatibility with same functions.
Someone sells AX210 with pcie x1 adaptor at $129.

2022-03
I bought AC8260 at $28 with M2 to PCIe x1 at $20.

2022-04

AC8260 on MSI B450M Mortar Max needs to set BIOS PCIe X1 from PCIE_2 to PCIE_3. Ubuntu 20.04 works well with 866MHz. Test Speed with iCable 130MB/s.

Intel

https://ark.intel.com/content/www/tw/zh/ark.html#@Wireless

Inter Killer

AX1675is M.2 2230 M.2 1216 M.2 CNVio2
AX1650is M.2 2230 M.2 1216 M.2 CNVio2
AX1675xw M.2 2230 M.2 1216 PCIe
AX1650xw M.2 2230 M.2 1216 PCIe

Intel Wifi 6E

AX411 M.2 CNVio2
AX211 M.2 2230 M.2 1216 M.2 CNVio2
AX210 M.2 2230 M.2 1216 PCIe

Intel Wifi 6

AX201 M.2 2230 M.2 1216 M.2 CNVio2 $80
AX200 M.2 2230 M.2 1216 PCIe

Intel Wireless 9000

AC9560 M.2 2230 M.2 1216 M.2 CNVio2 $27
AC9462 M.2 2230 M.2 1216 M.2 CNVio2
AC9461 M.2 2230 M.2 1216 M.2 CNVio2
AC9260 M.2 2230 M.2 1216 PCI

Intel Wireless 8000

AC8265 M.2 2230 M.2 1216 PCIe
AC8260 M.2 2230 M.2 1216 PCIe $28

Intel Wireless 7200

AC7265 HMC M.2 2230 M.2 1216 PCIe $35
AC7260 Desktop PCIe $48
AC7260 HMC M.2 2230 M.2 1216 PCIe $28

Intel Wireless 3100

Intel Old Wireless


Intel Driver for Linux

https://www.intel.com/content/www/us/en/support/articles/000005511/wireless.html


2022年3月26日 星期六

Stress test CPU and memory on Ubuntu 20.04

 Stress test CPU and memory on Ubuntu 20.04

 

 psensor

======

https://techhut.tv/monitor-amd-ryzen-temps-in-linux/

 https://wpitchoune.net/psensor/

Ryzen 9 3900x

tctl  51

tdie 58


 not using

======

https://askubuntu.com/questions/1038701/how-do-i-check-system-health

https://askubuntu.com/questions/948854/how-do-i-stress-test-cpu-and-ram-at-the-same-time/948865#948865

sudo apt-get install jq
sudo apt-get install curl


2022年3月17日 星期四

Open VPN Ubuntu 20.04 focal

 https://openvpn.net/cloud-docs/openvpn-3-client-for-linux/


sudo apt install apt-transport-https

sudo wget https://swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub

sudo apt-key add openvpn-repo-pkg-key.pub

sudo wget -O /etc/apt/sources.list.d/openvpn3.list https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-focal.list

sudo apt update

sudo apt install openvpn3


Debian 9 stretch

Debian 10 buster

Ubuntu 16.04 xenial

Ubuntu 18.04 bionic

Ubuntu 19.10 eoan

Ubuntu 20.04 focal



# using .ovpn profile

$ openvpn3 config-import --config ovpn.ovpn

Configuration imported.  Configuration path: /net/openvpn/v3/configuration/535489f0xdeeex4b97xb130x4f150b876def


#start

openvpn3 session-start --config ovpn.ovpn

Using pre-loaded configuration profile 'rleung.ovpn'

Session path: /net/openvpn/v3/sessions/7b8b05afscf2fs4207s93b8s9836b9cbaa92

Connected


# list

openvpn3 sessions-list

-----------------------------------------------------------------------------

        Path: /net/openvpn/v3/sessions/7b8b05afscf2fs4207s93b8s9836b9cbaa92

     Created: Thu Mar 17 17:27:29 2018                  PID: 464399

       Owner: ricky                                  Device: tun0

 Config name: ovpn.ovpn

Session name: 172.10.20.11

      Status: Connection, Client connected

-----------------------------------------------------------------------------



# manage disconnect

openvpn3 session-manage --disconnect --config rleung.ovpn


Initiated session shutdown.


Connection statistics:

     BYTES_IN.................7314066

     BYTES_OUT................1384787

     PACKETS_IN..................9189

     PACKETS_OUT.................7968

     TUN_BYTES_IN.............1190233

     TUN_BYTES_OUT............7090182

     TUN_PACKETS_IN..............7957

     TUN_PACKETS_OUT.............9179


2022年3月16日 星期三

GIT How to move some files from a repository to another repository? Use git am and patch

 https://stackoverflow.com/questions/1365541/how-to-move-some-files-from-one-git-repo-to-another-not-a-clone-preserving-hi



cd repository
git log --pretty=email --patch-with-stat --reverse --full-index --binary -- path/to/file_or_folder > patch.txt
cd ../another_repository
git am --committer-date-is-author-date < ../repository/patch.txt


Use 
git am --reject --committer-date-is-author-date < ../repository/patch.txt


https://jyx.github.io/apply-patches-in-git.html

$ git am < my_new_feature.patch
$ git apply --reject --whitespace=fix my_new_feature.patch
$ git status
$ vim my_conflicting_file.c*
$ find . -name "*.rej" -exec rm -f {} \;
$ git add .
$ git am --resolved

My Repeat:
git status
rm .rej
git am --skip


git add .
git am --continue



2022年3月15日 星期二

C++ libevent with CMake 2022

http://senlinzhan.github.io/2017/08/12/libevent/
http://man6.org/blog/Libevent/CMake%E7%BC%96%E8%AF%91Libevent.md


libevent-2.1.8

$ wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
$ tar -xzvf libevent-2.1.8-stable.tar.gz
$ cd libevent-2.1.8-stable
$ ./configure
$ make
$ sudo make install


CMakeList.txt

cmake_minimum_required(VERSION 3.10)
project(alligator)

include_directories(/usr/local/include)
link_directories(/usr/local/lib)

add_executable(alligator a.cpp)
target_link_libraries(alligator event)


c.app

#include <event2/event.h>
#include <iostream>
#include <string>
void timer_cb(evutil_socket_t fd, short what, void *arg)
{
    auto str = static_cast<std::string *>(arg);
    std::cout << *str << std::endl;
}
int main()
{
    std::string str = "Hello, World!";
    auto *base = event_base_new();
    struct timeval five_seconds = {1, 0};
    auto *ev = event_new(base, -1, EV_TIMEOUT, timer_cb, (void *)&str);
    event_add(ev, &five_seconds);
    event_base_dispatch(base);
    event_free(ev);
    event_base_free(base);
    return 0;
}


Ends

2022年3月9日 星期三

WSL 2 on Windows 10 Lenovo X1 Carbon gen 5 i5-7200U Slow and commands to stop

 https://pureinfotech.com/shutdown-linux-distro-wsl/

It is 2022. Chrome to google very slow. After stopping those wsl, Chrome becomes faster.

>wsl --list --verbose

  NAME                   STATE           VERSION
* Ubuntu                 Stopped         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2

wsl -t docker-desktop-data
wsl -t docker-desktop
wsl -t Ubuntu


wsl --list --verbose


End

2022年3月7日 星期一

spdlog with cmake 3.14 FetchContent

 Minimal code that spdlog can be used


main.cpp

#include <spdlog/spdlog.h>
int main() {
spdlog::info("Welcome to spdlog!");
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.14)
project(untitled9)
set(CMAKE_CXX_STANDARD 17)
add_executable(untitled9 main.cpp)

include(FetchContent)
set(GITHUB_URL_ROOT https://github.com/)
FetchContent_Declare(spdlog URL ${GITHUB_URL_ROOT}/gabime/spdlog/archive/v1.8.1.tar.gz)
FetchContent_MakeAvailable(spdlog)
target_link_libraries(untitled9 PUBLIC spdlog)



End

spdlog in CLion in 2022

 https://github.com/gabime/spdlog


Ubuntu new project, language standard use "C++17" or "C++14"


"Copy the include folder to your build tree and use a C++11 compiler" so that "include/spdlog/spdlog.h" exists

https://github.com/gabime/spdlog/tree/v1.x/include


CMakeLists.txt

cmake_minimum_required(VERSION 3.21)
project(untitled8)
set(CMAKE_CXX_STANDARD 17)
add_executable(untitled8 main.cpp)
include_directories("include")

main.cpp

#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}


Basic usage

#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}


Comprehensive

CMakeList.txt

cmake_minimum_required(VERSION 3.21)
project(untitled8)
set(CMAKE_CXX_STANDARD 17)
add_executable(untitled8 main.cpp)
include_directories("include")

find_package (Threads REQUIRED)
target_link_libraries(untitled8 ${CMAKE_THREAD_LIBS_INIT})

main.cpp

#include <iostream>

// trace 0 > debug 1 > info 2 > warn 3 > error 4 > critical 5 > off 6
#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_DEBUG

#include "spdlog/spdlog.h"
struct TempLogLevel {
TempLogLevel(spdlog::level::level_enum newLevel = spdlog::level::debug) : oldLevel(spdlog::get_level()) {
spdlog::set_level(newLevel);
}
~TempLogLevel() {
spdlog::set_level(oldLevel);
}
private:
spdlog::level::level_enum oldLevel;
};

// Basic usage
#include "spdlog/spdlog.h"
void basic() {
spdlog::debug("This message should not be displayed..");

spdlog::info("Welcome to spdlog!");
spdlog::error("Some error message with arg: {}", 1);

spdlog::warn("Easy padding in numbers like {:08d}", 12);
spdlog::critical("Support for int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}", 42);
spdlog::info("Support for floats {:03.2f}", 1.23456);
spdlog::info("Positional args are {1} {0}..", "too", "supported");
spdlog::info("{:<30}", "left aligned");


spdlog::set_level(spdlog::level::debug); // Set global log level to debug
spdlog::debug("This message should be displayed..");
spdlog::set_level(spdlog::level::info);

// change log pattern
//spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");

// Compile time log levels
// define SPDLOG_ACTIVE_LEVEL to desired level
SPDLOG_TRACE("Some trace message with param {}", 42);
SPDLOG_DEBUG("see me if you #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_DEBUG");

SPDLOG_INFO("SPDLOG_INFO");
}

// Create stdout/stderr logger object
#include "spdlog/sinks/stdout_color_sinks.h"
void stdout_example()
{
// create color multi threaded logger
auto console = spdlog::stdout_color_mt("console");
console->info("apple");
auto err_logger = spdlog::stderr_color_mt("stderr");
spdlog::get("console")->info("loggers can be retrieved from a global registry using the spdlog::get(logger_name)");
}

// Basic file logger
#include "spdlog/sinks/basic_file_sink.h"
void basic_logfile_example()
{
try
{
auto logger = spdlog::basic_logger_mt("basic_logger", "logs/basic-log.txt");
logger->info("spdlog::basic_logger_mt() to logs/basic-log.txt");
}
catch (const spdlog::spdlog_ex &ex)
{
std::cout << "Log init failed: " << ex.what() << std::endl;
}
}

// Rotating files
#include "spdlog/sinks/rotating_file_sink.h"
void rotating_example()
{
// Create a file rotating logger with 5mb size max and 3 rotated files
auto max_size = 1048576 * 5; // 5242880
auto max_files = 3;
auto logger = spdlog::rotating_logger_mt("some_logger_name", "logs/rotating.txt", max_size, max_files);
for (int i=0; i<1000*1000; ++i) {
logger->info("time {}", time(nullptr));
}
// acutal file is 5242868, 12 bytes less than 5242880
/*
-rw-rw-r-- 1 user user 5242868 3 7 11:45 rotating.1.txt
-rw-rw-r-- 1 user user 5242868 3 7 11:45 rotating.2.txt
-rw-rw-r-- 1 user user 5242868 3 7 11:45 rotating.3.txt
-rw-rw-r-- 1 user user 5085584 3 7 11:45 rotating.txt
*/
}

// Daily files
#include "spdlog/sinks/daily_file_sink.h"
void daily_example()
{
// Create a daily logger - a new file is created every day on 2:30am
auto logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.txt", 2, 30);
}

// Backtrace support
void backtrace() {
// Debug messages can be stored in a ring buffer instead of being logged immediately.
// This is useful in order to display debug logs only when really needed (e.g. when error happens).
// When needed, call dump_backtrace() to see them.

spdlog::enable_backtrace(32); // Store the latest 32 messages in a buffer. Older messages will be dropped.
// or my_logger->enable_backtrace(32)..
for(int i = 0; i < 100; i++)
{
spdlog::debug("Backtrace message {}", i); // not logged yet..
}
// e.g. if some error happened:
spdlog::dump_backtrace(); // log them now! show the last 32 messages

// or my_logger->dump_backtrace(32)..
}

// Periodic flush
void periodic() {
// periodically flush all *registered* loggers every 3 seconds:
// warning: only use if all your loggers are thread safe ("_mt" loggers)
spdlog::flush_every(std::chrono::seconds(3));
}

// Stopwatch
#include "spdlog/stopwatch.h"
void stopwatch_example()
{
spdlog::stopwatch sw;
int count = 0;
for (int i=0; i<1000*1000; ++i) {
count += i;
}
spdlog::debug("Elapsed {}", sw);
spdlog::debug("Elapsed {:.3}", sw);
spdlog::debug("Elapsed {:.9}s", sw);
// need below in cmakes
// find_package (Threads REQUIRED)
// target_link_libraries(untitled8 ${CMAKE_THREAD_LIBS_INIT})
}

// Log binary data in hex
// many types of std::container<char> types can be used.
// ranges are supported too.
// format flags:
// {:X} - print in uppercase.
// {:s} - don't separate each byte with space.
// {:p} - don't print the position on each line start.
// {:n} - don't split the output to lines.
// {:a} - show ASCII if :n is not set.
#include "spdlog/fmt/bin_to_hex.h"
void binary_example()
{
auto console = spdlog::get("console");
std::array<char, 80> buf;
console->info("Binary example: {}", spdlog::to_hex(buf));
console->info("Another binary example:{:n}", spdlog::to_hex(std::begin(buf), std::begin(buf) + 10));
// more examples:
// logger->info("uppercase: {:X}", spdlog::to_hex(buf));
// logger->info("uppercase, no delimiters: {:Xs}", spdlog::to_hex(buf));
// logger->info("uppercase, no delimiters, no position info: {:Xsp}", spdlog::to_hex(buf));
}

// Logger with multi sinks - each with different format and log level
// create logger with 2 targets with different log levels and formats.
// the console will show only warnings or errors, while the file will log all.
void multi_sink_example()
{
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
console_sink->set_level(spdlog::level::warn);
console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");

auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/multisink.txt", true);
file_sink->set_level(spdlog::level::trace);

spdlog::logger logger("multi_sink", {console_sink, file_sink});
logger.set_level(spdlog::level::debug);
logger.warn("this should appear in both console and file");
logger.info("this message should not appear in the console, only in the file");
}

// Asynchronous logging
#include "spdlog/async.h"
#include "spdlog/sinks/basic_file_sink.h"
void async_example()
{
// default thread pool settings can be modified *before* creating the async logger:
// spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1 backing thread.
auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_file_logger", "logs/async_log.txt");
async_file->info("basic_logger_mt async_factory logs/async_log.txt");
// alternatively:
// auto async_file = spdlog::create_async<spdlog::sinks::basic_file_sink_mt>("async_file_logger", "logs/async_log.txt");
}

// Asynchronous logger with multi sinks
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"
void multi_sink_example2()
{
spdlog::init_thread_pool(8192, 1);
auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt >();
auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("logs/multi_sink_example2.txt", 1024*1024*10, 3);
std::vector<spdlog::sink_ptr> sinks {stdout_sink, rotating_sink};
auto logger = std::make_shared<spdlog::async_logger>("loggername", sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_policy::block);
spdlog::register_logger(logger);
logger->info("multi_sink_example2()");
}

// User defined types
// user defined types logging by implementing operator<<
#include "spdlog/fmt/ostr.h" // must be included
struct my_type
{
int i;
template<typename OStream>
friend OStream &operator<<(OStream &os, const my_type &c)
{
return os << "[my_type i=" << c.i << "]";
}
};
void user_defined_example()
{
spdlog::get("console")->info("user defined type: {}", my_type{14});
}

// User defined flags in the log pattern
// Log patterns can contain custom flags.
// the following example will add new flag '%*' - which will be bound to a <my_formatter_flag> instance.
#include "spdlog/pattern_formatter.h"
class my_formatter_flag : public spdlog::custom_flag_formatter
{
public:
void format(const spdlog::details::log_msg &, const std::tm &, spdlog::memory_buf_t &dest) override
{
std::string some_txt = "custom-flag";
dest.append(some_txt.data(), some_txt.data() + some_txt.size());
}

std::unique_ptr<custom_flag_formatter> clone() const override
{
return spdlog::details::make_unique<my_formatter_flag>();
}
};
void custom_flags_example()
{
auto formatter = std::make_unique<spdlog::pattern_formatter>();
formatter->add_flag<my_formatter_flag>('*').set_pattern("[%n] [%*] [%^%l%$] %v");
spdlog::set_formatter(std::move(formatter));
}

// Custom error handler
#include "spdlog/sinks/syslog_sink.h"
void syslog_example()
{
std::string ident = "spdlog-example";
auto syslog_logger = spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
syslog_logger->warn("This is warning that will end up in syslog.");
// tail -f /var/log/syslog
/*
Mar 7 12:25:08 ricky-ryzen systemd[1440]: Starting Kite Updater...
Mar 7 12:25:10 ricky-ryzen spdlog-example[1578877]: This is warning that will end up in syslog.
Mar 7 12:25:10 ricky-ryzen systemd[1440]: kite-updater.service: Succeeded.
*/
}

// Android example
#ifdef __ANDROID__
#include "spdlog/sinks/android_sink.h"
void android_example()
{
std::string tag = "spdlog-android";
auto android_logger = spdlog::android_logger_mt("android", tag);
android_logger->critical("Use \"adb shell logcat\" to view this message.");
}
#endif

// Load log levels from env variable or from argv
#include "spdlog/cfg/env.h"
int main_env()
{
spdlog::cfg::load_env_levels();
return 0;
}

// Load log levels from env variable or from argv
#include "spdlog/cfg/argv.h" // for loading levels from argv
int main_argv (int argc, char *argv[])
{
// ./example SPDLOG_LEVEL=info,mylogger=trace
// #include "spdlog/cfg/argv.h" // for loading levels from argv
spdlog::cfg::load_argv_levels(argc, argv);
return 0;
}

// Log file open/close event handlers
// You can get callbacks from spdlog before/after log file has been opened or closed.
// This is useful for cleanup procedures or for adding someting the start/end of the log files.
void file_events_example()
{
// pass the spdlog::file_event_handlers to file sinks for open/close log file notifications
spdlog::file_event_handlers handlers;
handlers.before_open = [](spdlog::filename_t filename) { spdlog::info("Before opening {}", filename); };
handlers.after_open = [](spdlog::filename_t filename, std::FILE *fstream) { fputs("After opening\n", fstream); };
handlers.before_close = [](spdlog::filename_t filename, std::FILE *fstream) { fputs("Before closing\n", fstream); };
handlers.after_close = [](spdlog::filename_t filename) { spdlog::info("After closing {}", filename); };
auto my_logger = spdlog::basic_logger_st("some_logger", "logs/events-sample.txt", true, handlers);
}

// Replace the Default Logger
void replace_default_logger_example()
{
auto new_logger = spdlog::basic_logger_mt("new_default_logger", "logs/new-default-log.txt", true);
spdlog::set_default_logger(new_logger);
spdlog::info("new logger log message");
}

int main(int argc, char *argv[])
{
basic();
stdout_example();
basic_logfile_example();
rotating_example();
backtrace();
periodic();
stopwatch_example();
binary_example();
multi_sink_example();
async_example();
multi_sink_example2();
user_defined_example();
custom_flags_example();
syslog_example();
#ifdef __ANDROID__
android_example();
#endif
main_env();
main_argv(argc, argv);
file_events_example();
replace_default_logger_example();
return 0;
}



End

End

End



2023 Promox on Morefine N6000 16GB 512GB

2023 Promox on Morefine N6000 16GB 512GB Software Etcher 100MB (not but can be rufus-4.3.exe 1.4MB) Proxmox VE 7.4 ISO Installer (1st ISO re...