2024年からは、まとまってようといなかろうと積極的に記事にすることにしたので、しょうもない記事を書いてみます。
今回はC++のplacement new
です。
2024年からは、まとまってようといなかろうと積極的に記事にすることにしたので、しょうもない記事を書いてみます。
今回はC++のplacement new
です。
linuxだとdiff -uprN
でパッチを作成して、patch -p1 <パッチファイル
みたいなことをしてパッチを当てますが、この方法linuxでしか使えません。これをパッチ当てる部分だけpythonで使えるようにしたい、というのがこの記事の主旨です。
pypi(pip)でパッケージ探せばいいのかなぁと思ってたのですが、古かったり機能が足りなかったり、テスト用のmockのためのコードだったり、欲しいものとやや違ってて、当初は自作するしかという状況でした。しかし、最近 whatthepatch
というパッケージを見つけ、自作をやめて使用例を記事にすることにしました。
C/C++のmemcpyは十分に最適化されており、forループする大抵のコードよりは速くなるように出来ています。しかし測り方を間違えると十分な効果を期待できません。例えばLinuxで以下のコードでは正しく測定できません。なぜだか分かりますか?
#include <chrono>
#include <iostream>
#include <cstring>
using namespace std;
using namespace std::chrono;
typedef size_t target_t;
int main(int argc, char* argv[]) {
constexpr size_t N = 1024 * 1024 * 1024; // 1GiB
auto src = new target_t[N/sizeof(target_t)];
auto dst = new target_t[N/sizeof(target_t)];
auto begin = high_resolution_clock::now();
memcpy(dst, src, N);
auto end = high_resolution_clock::now();
cout << N << "bytes copy: " << N / 1024. / 1024. / duration_cast<nanoseconds>(end - begin).count() * 1000000000 << "[MiB/s]" << endl;
return 0;
}
プログラムは正しく動きます。
$ g++ -g -O0 hoge.cpp -o hoge
$ ./hoge
1073741824bytes copy: 1560.47[MiB/s]
$
何が正しく測定できてないのでしょう?
表題のとおりの小ネタです。
テキストファイルの解析をしていると、次の塊の先頭が前の塊の終端を表すことがあり、よく先読みをしたくなったりします。そんなときに「1つだけ」先を読めるiteratorを書いてみました。
今回は、900円ほどで購入したUSBドングルタイプのWi-FiアダプタのTL-WN725Nを、UbuntuからWi-Fiアクセスポイントにしてみます。この機種は箱には無線LAN子機と明記されているのですが、親機としての機能も併せ持ち、APとして利用可能なようです。
Linux(今回はUbuntu20.04)でTUIする方法を紹介します。LinuxでGUIでなく端末操作する場合、CLIと言ったりしますが、今回はTUIです。
ニュアンス的にはテキストでグラフィカルなウィジェットを模したインターフェースを表現し、キーボードだけで操作していく、簡易GUI的なテキストベースのUIをTUIと呼ぶ感じです。作り的にはncursesなどを利用したアプリケーションになります。
GUIなLinuxからsshを使って別のGUIなLinuxに入って作業するとき、たまにXの画面が欲しいときがあります。そういうときssh -Xで繋ぐと手元の画面にリモートのGUIアプリを表示して操作することができます。便利な小技ですよね。
$ ssh -X user-name@remote-host
$ gedit
しかし、こうして繋いだ場合も、管理者権限が必要とかでsudoでGUIアプリを起動すると使えないというケースがよくあります。Xの認証の仕組みから使えないのですが、今回はsudoした先でGUIアプリを起動する方法を説明します。
ただし、本番運用の公開サーバーでX関係のライブラリなど必要のないパッケージを入れるのは個人的にはやめた方がいいと思います。あくまで複数のGUIを持つLinux開発マシンを渡り歩くときの小技です。また使い終わったらゴミを残さないようにしましょう。
今更ながら620円でRaspberry Pi Picoを買いました!PCのUSBに繋ぐと…
(電子工作をしない場合)それしか出来ない小さな基板です。
今回はこの基板のLED光らせて、電子工作なしにデバッグしてみたりします。
ブラウザにソースコードを貼り付けて、各種言語をオンラインで実行する環境は多くあります。古くはJavaScriptのJSFiddleとかですが、最近だと(言語名)-playgroundみたいな名前で、公式に運用されてるケースも多いです。
今回のターゲット言語であるC++もご多分に漏れず、いくつかの環境があります。
上の2つの環境はC++のソースファイル編集がブラウザ上で出来るものの、コンパイルと実行はサーバー上で実施されます。今回はコンパイルと実行もブラウザ上で実施してみようという試みです。
本日なんかおかしな挙動をしてたXセッションを裏から操作するために、Ctrl+Alt+F3とかでコンソール操作を試みていたところ、
ubuntu login: xxx
password:
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.13.0-39-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0のアップデートはすぐに適用されます。
Your Hardware Enablement Stack (HWE) is supported until April 2025.
最終ログイン: 2022/04/01 (金) 00:00:00 JST 日時 pts/0
xxx@ubuntu:~$
ここで「Your Hardware Enablement Stack (HWE) is supported until April 2025.」というメッセージに気付きました。今まで見過ごしていたのか、今日初めて出てきたのか知りませんが、これの意味が分からずにモヤっとします。今回はこれを調べてみました。