kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

sphinxcontrib-xlsxtableの画像対応

Excelファイルから表を作るSphinx拡張について、埋め込み画像に対応しました。 特にオプションなどは必要なく、画像が使用されたExcelファイルを指定すれば、そのまま画像が利用されます。 .. xlsx-table:: :file: path/to/xlsx/embedded-images.xlsx 以下の…

AnsibleでSSH接続のポートを指定する

ansible_port変数の値をPlaybook/インベントリで指定する ansible-playbookの--extra-varsで指定 ansible-playbookの--ssh-common-args 理解すると、まあ、その通りなのだけど、だいぶ迷走したのでまとめとく。 環境 Ansible 2.9.6 Ubuntu 20.04.1 LTS (WSL2…

podmanでdocker-compose使用時のビルドエラーに対応する

podmanでdocker-composeを使用すると、イメージのビルド時に「FileNotFoundError: [Errno 2] No such file or directory: 'docker':」が出る イメージビルド時にdockerコマンドを実行するが、dockerコマンドが無いため /usr/local/binなどにdockerという名前…

Creative Commons Licenseのテキストファイル

GitHubで適用する時など用。身も蓋もないけど「plaintext」で検索かければ引っかかる。 「Creative Commons License plaintext」で検索 Plaintext versions of Creative Commons 4.0 licenses 公式サイトのフッターの検索で「plaintext」を検索してもOK。 UR…

plusctx (処理履歴の保存と参照)

C++

ライブラリというよりは実装アイデアという感じ。ロギングの課題を解決するために考えていところ、構造的に割と面白かったので組んでみた。 組んだ後でスタックトレースで良いのでは?とも思ったけど、まあ、マルチプラットフォームで取ったり、整形したり、…

Google Testでデータドリブンテスト

C++

Google TestのValue-Parameterized Tests testing::TestWithParam、TEST_P、INSTANTIATE_TEST_SUITE_Pを使う 他の (言語の) テスティングフレームワークで、同一のテストを異なるデータで実行するデータドリブンテストの機能があって、これGoogle Testでも無…

sphinxcontrib-xlsxtableに行・列指定オプションを追加

使用する / 使用しない、行 / 列を指定するオプションを追加 v1.0.0としてリリース Excelファイルから表を作るSphinx拡張について、v1.0.0としてリリースしました。 が、足りない機能があるような無いような...(まあ、必要性がはっきりしたら追加すれば...) …

Sphinx拡張を作ったときに参考にしたモノ

sphinxcontrib-xlsxtableを作る際に参考にしたところ。 最終的にはdocutilsのソースコードまで見ました。 導入その1はSphinx-Users.jpの拡張開発最初の一歩 導入その2はSphinxのドキュメントExtending Sphinx PyPIのパッケージに関してはPyPIのヘルプから飛…

XcodeとgcovrでC++コードのカバレッジを計測する

Xcodeでgcov形式のカバレッジデータ (ステートメントカバレッジとブランチカバレッジ) を出力 gcoverで可視化 Xcode単体では可視化できないブランチカバレッジを取り扱える。 Xcodeへのシームレスな統合は失われるが、設定・実行は簡単で、手順はシンプルに…

XcodeでC++のカバレッジを計測する

ステートメントカバレッジ (C0) 相当を計測できる C++コードの計測が可能 hppはコンパイル対象のファイルとして含める必要がある 厳密にはラインカバレッジらしい。また、ブランチカバレッジは取れない。 環境 macOS 10.15.5 Xcode 11.5 C++ ヘッダーオンリ…

sphinxcontrib-xlsxtableのモジュール実行

sphinxcontrib-xlsxtableをCLIで呼び出し可能にした グリッドテーブル文字列を一旦ファイルに書き出してから、ドキュメントに組み込むことができる グリッドテーブルがファイルに残るので、Git運用との相性がよさそう モジュール実行 sphinxcontrib-xlsxtabl…

sphinxcontrib-xlsxtable

SphinxでExcelファイルから表 (テーブル) を埋め込むSphinx拡張を作りました。 PyPI sphinxcontrib-xlsxtable GitHub sphinxcontrib-xlsxtable 機能的に不十分だったり、Pythonモジュールよくわかってなかったり、PyPIの理解も不十分だったりしますが、まあ…

opensslコマンドを使ってAPIと同じ結果を得る

% openssl aes-128-cbc -e -iv 00000000000000000000000000000000 -K 30313233343536373839414243444546 -nosalt -in data.txt -out out.txt -ivはCBCモードの初期化ベクターで、16進数値で指定する -Kは暗号化キーで、16進数値で指定する -nosoltは暗号化デ…

OpenSSLを使った暗号化 (v1.1.1d)

C++

2015-10-24にOpenSSLでの暗号化の記事を書いたけど、 最近になって試したところコンパイルできなくなっていたので、その修正版。 昔の記事、バージョン書いてなかったから差がわかんね。 環境 OpenSSL v1.1.1d (ソースからビルド) macOS 10.15.3 Xcode 11.3.…

CodeceptJSを動かしてみる

Seleniumとテスティングフレームワークについて調べながらTweetしていたところ、CodeceptJSを薦められるってことがありまして。...ネタか?と思ったりもしたものの、思想的にも作り的にも面白く、今回テストの自動化にあたり、狙っている領域にうまくはまり…

Seleniumを使用してChromeをコントロールする

SeleniumとChromeでHTMLをコントロールしてみる。使用環境はNode.js。 環境 Windows 10 1809 Google Chrome 76.0.3809.100(Official Build) (64 ビット) Node.js v10.16.2 Selenium 4.0.0-alpha.4 ChromeDriver 76.0.3809.68 セットアップ 作業用に適当…

C++向けライブラリの一部実装をSwiftで行おうとして諦めた話

MacでC++のプログラミングをしているとCoreFoundationでは機能が足りないことがある。これまではObjective-Cの関数をC言語スタイルの関数にラップして使用するということをよくやっていた。 今回どうせならObjective-CではなくSwiftでやれないかと試したけど…

sd-loginでログインセッションのStateの監視をする

loginctlやsystemd/sd-login.hのAPIを用いてログインセッションなどの現在状態が取得できる。加えて、monitor APIが用意されていて、各種変更の検知/通知の受け取りが可能となっている。 sd_login_monitor_newで監視オブジェクトを生成 pollでイベントを待ち…

wの元utmp

Linuxのログイン情報の取得について調べているときに、wコマンドの実装について気になった。巡り巡って/var/run/utmpとgetutentにたどり着くんだけど、ファイルについてはwコマンドのman pageに記載があった。 getutxent APIでutmpの中身を読むことでログイ…

systemdのsd-loginでGUIセッション情報を取得する

loginctlで色々とセッション情報が取得できるのはわかったけど、じゃあプログラムから参照する方法はなんだと調べて行ったらsystemdのsd-loginに行き着いた。 systemd/sd-login.hのAPIでloginctlから得られる情報をAPI経由で取得できる systemd-develのイン…

loginctlでGUIセッションの情報を取得する

LinuxでGUI表示中のユーザーかどうか(セッションがアクティブかどうか)を調べる方法がないかと調べて行ったらloginctlに行き着いた。Linuxの(というかsystemdのか?)セッションに詳しくないのでフレーズの使い方が微妙なんだけど、概ね必要な情報は取れ…

OpenSSLを使った暗号化

C++

本記事に記載のOpenSSLはバージョンが古いです v1.1.1dのAPIについてはこちらの記事をどうぞ OpenSSLを使ってAESで暗号化。 暗号化 #include <openssl/evp.h> EVP_CIPHER_CTX ctx = {}; EVP_CIPHER_CTX_init(&ctx); // 暗号化の設定で、EVP_aes_128_ecb等いろいろ const uns</openssl/evp.h>…

Win32 APIを使ってOSを再起動する

ちょっと必要になって調べてた。呼び出す関数はExitWindowsExなんだけど特権の調整が必要で単純に呼び出すだけでは成功しない。 ExitWindowsExから調べていって、LUID_AND_ATTRIBUTESのところで... Its meaning is dependent on the definition and use of t…

C#のラムダをWin32呼び出しで使う

あたり前っちゃーあたり前なんですが、Win32を呼び出す際の選択肢として、なぜかラムダを使うという選択肢が思いつかなかった。 delegate Boolean EnumWindowProc(IntPtr hwnd, IntPtr lp); [DllImport("User32.dll")] private static extern Boolean EnumWi…

C++のラムダがCのコールバックにつかえる

ためしにやったら動いた。さすがC++。 #include <Windows.h> #include <iostream> int main() { HWINSTA sta = GetProcessWindowStation(); EnumDesktops( sta, [](LPTSTR desktop, LPARAM lp)->BOOL { std::cout << desktop << std::endl; return TRUE; }, 0); } Win32は列挙系で</iostream></windows.h>…

WPFでHotKeyBox

ホットキー用のコントロールを自前で作る際のポイント。TextBoxのオーバーライドとかは必要なくて、UserControlから十分作れそうな感じ。 ポイントはPreviewKeyDownで処理すること。KeyDownだとCtrl+Aで全選択されたり、特定のキーを拾えなかったりする。 th…

WPFでWindow MessageのHook

Windows Forms同じくオーバーライドかなぁと思っていたら全然違いました。 using System.Windows.Interop; var wnd = new Window(); wnd.Show(); // Show()の後で無いと取れません。 var handle = new WindowInteropHelper(wnd).Handle; var src = HwndSourc…

WPFでHot Key

WPFでHot Keyを取り扱う方法です。登録自体はWin32を用いますが、仮想キーの取り扱いやWindow Handleの取得方法なども課題になります。 順番に。登録・解除はWin32。 using System.Runtime.InteropServices; [DllImport("User32.dll")] private static exter…

デスクトップを指定してプロセスを起動する

プロセスを起動する際は、通常、元のWindow Stationとデスクトップを引き継ぎますが、CreateProcessではこれらを明示的に指定できるようになっています。 STARTUPINFO si = {}; si.cb = sizeof(si); si.lpDesktop = "WinSta0\\AltDesktop"; PROCESS_INFORMAT…

Window Stationとデスクトップ

Windowsのデスクトップはそもそも一つではありません。デスクトップはWindow Stationによって管理されており、既定でDefault、WinLogon、ScreenSaverがあることになっています。 プロセスはWindow Stationに、スレッドはデスクトップにひも付く感じになって…