potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

GitHubでしでかしました

GitHubを個人的な保管庫としてだけ使う方は頻繁にログアウトすることを推奨します。 ログイン状態であることに気付かず変な操作をして、他の方のリポジトリに迷惑をかけました。 具体的には間違えてRevert Changesしました。 キャンセル方法が分からなくてミ…

AngleSharp、JSON.NET、ML.NET、Infer.NETは.NET財団のプロジェクト

C#

AngleSharp、Json.NET、ML.NET、Infer.NET、気づいたらMicrosoft主導の.NET財団のプロジェクトになっていました。AngleSharpは企業ベースだと思いこんでいたので、これまでより使いやすくなりました。 .NET Bioなどの知らなかったプロジェクトもあるので、時…

Python 3&Pandas 1.4.4&SciPy 1.9.1 平均値・標準偏差・標本サイズを持つデータフレームに母平均の95%信頼区間を追加する

平均値・標準偏差・標本サイズを持つデータフレームに母分散既知・未知(標準分布とt分布)の母平均の95%信頼区間を追加するコードです。 from scipy import stats import pandas as pd df = pd.DataFrame({ "mean": (0, 1, 2, 3), "sd": (1, 10, 1, 10), "n…

Python 3&Pandas 1.4.4 データフレームは[]とloc[]でタプルによる列指定結果が違う

Pandas 1.4.4ではデータフレームの列名による列指定に[]とloc[]が使えますが、これらはタプルで列名を指定したときの動作が異なります。[]はタプルをひとつのキーとして扱い、loc[]はデータフレームの持つ列名により動作を変えます。前者はデータフレームが…

Python 3 tkinterでWhiteBrowserの簡単な操作を提供するGUIアプリケーション

2022/12/5更新:タグファイルの作成対応、WBDirInfoクラスの作成、設定ファイル及び一部変数名のアンダーライン削減。 動画管理ソフトWhiteBrowserの簡単な操作を提供するGUIアプリケーションです。Python標準ライブラリーtkinterモジュールの練習で作成して…

Python 3 tkinterのbind("<1>", ...)は左クリックでなく左ボタン降下

tkinterのbind("<1>", ...)あるいはbind("<Button-1>", ...)は左クリックではなく左ボタン降下です。この方法でコールバック関数からポップアップメニューを呼び出すとボタンの表示が降下状態のままになります。 左クリックを検出したい場合はButton(..., command=...)</button-1>…

R&tidyverse ggplot2::stat_smooth既定のLOESSは惰性学習

ggplot2のstat_smooth関数でmethod引数の既定値として使われるLOESSは惰性学習(lazy learning)だそうです。k近傍法と同じで、与えられたデータ自体をモデルとします。回帰分析のように係数を求めたりはしません。 PCAと併用してとりあえず分類するような場…

C++20&Win API SHGetNameFromIDList関数で項目の表示名を取得する

シェル項目の表示名を取得するにはSHGetNameFromIDList関数を使えます。C++環境ではIShellItemインターフェイスを使いますが、Pythonなどでインターフェイスを介したくない場合に便利です。 #include <format> #include <iostream> #define STRICT #define NOMINMAX #include <Windows.h> </windows.h></iostream></format>…

Python 3 ctypesは関数のrestypeにctypes.HRESULTを指定すると自動でエラーを発生する

ctypesモジュールは関数のrestypeにctypes.HRESULTを指定すると戻り値がエラーの場合に自動でraiseするようです。エラーの発生時は手動で握りつぶそうとしていたのですが、可読性のためにctypes.c_intをctypes.HRESULTに変えたらOSErrorが発生するようになり…

R&ggplot2 qqplotrのプロットをpurrrで結合してpatchworkで表示する

qqplotrのプロットをpurrrで結合してpatchworkで表示するコードです。要は次の図を関数主体で作成するコードです。 コード コードの説明 qqplotrパッケージとqqplotr::stat_qq_*関数 ggplot(data, aes(...=!!sym(変数))) | コード library(purrr) library(gg…

C++20&Win API&WIL HTTPSプロトコルのコンテンツを取得する

WinINet APIを使用してHTTPSプロトコルのコンテンツ(https://~)を取得するコードです。 #include <string> #include <span> #include <optional> #include <vector> #define STRICT #define NOMINMAX #include <Windows.h> #pragma comment(lib, "wininet.lib") #include <wininet.h> #include "wil/resource.h" </wininet.h></windows.h></vector></optional></span></string>…

C++20&Win API&WIL IUIAutomationElementを列挙する

COMとWILを使ってIUIAutomationElementを列挙するコードです。 実行例(ExplorerPatcher起動中) Source.cpp #include <format> #include <iostream> #include "string_util.hpp" #define STRICT #define NOMINMAX #include <Windows.h> #include <UIAutomation.h> #include "stl_win.hpp" #include "wil/c</uiautomation.h></windows.h></iostream></format>…

C++20 円柱モデルHSV色クラスとHSV四角形の描画

円柱モデルのHSV色を扱うクラスとそれを利用したHSV四角形(V固定)の描画サンプルです。RGBとHSVの変換はWikipediaのコードを使用しています。 HSVをH:[0, 360)、SとV:[0, 1]で扱うとRGBも[0, 1]で扱う方が簡単です。そのため、[0, 1]のRGBと[0, 255]のRG…

R&tidyverse&openxlsx xlsxファイルのテーブルを読み込む

xlsxファイルでテーブルの名前からデータを読み込むコードです。テーブルの名前からシート名とA1形式範囲の取得はopenxlsx、シート名とA1形式範囲の読み込みにはreadxlを使用しています。 カレントディレクトリに「テーブル1」テーブルを持つxlsxファイルを…

Python&SciPy&matplotlib 2つの正規分布の交点を求めて垂線を描画する。

SciPyとmatplotlibの学習で書いたコードです。実行すると2つの正規分布の解(根)を求め、グラフに交点から横軸への垂線を描画します。根の存在を前提としてコードを簡略化しています。ここではscipy.optimize.root_scalarを使用しますが、sympyを使う方法も…

Python&SciPy&matplotlib 2つの正規分布の曲線と重複領域を描画する

SciPyとmatplotlibの学習で書いたコードです。実行するとパラメーターの異なる2つの正規分布とそれらの重複領域を描画します。 import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt # 正規分布のPDF f1 = lambda x: norm.pdf(…

Python&SciPy&matplotlib 正規分布の曲線と下側・上側2.5%領域の塗りつぶし

SciPyとmatplotlibの学習で書いたコードです。実行すると標準正規分布と下側・上側2.5%領域を描画します。 import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt # 正規分布で使う平均値と標準偏差 mean_sd = (0, 1) # グラフ…

C++20&Win API&WIL AMSIプロバイダーのCLSIDと表示名を取得する。

WindowsのAMSI(マルウェア対策スキャンインターフェイス)プロバイダーのCLSIDと表示名を取得するコードです。AMSIについてはMicrosoftの公式ドキュメントを参照ください。 #include <string> #include <vector> #define STRICT #define NOMINMAX #define WIN32_LEAN_AND_ME</vector></string>…

JavaScript クラスのインスタンスからクラスのオブジェクトを取得する

インスタンスのconstructorプロパティでクラスのオブジェクトを取得できます。このオブジェクトを操作すればクラスのオブジェクトプロパティを操作できます。 class Class1 { static X = 123; } const a = new Class1(); console.log(a.constructor.X) //-> …

R 標準ライブラリ・tidyverse系のチップス

Rの自分用チップスです。ちょっとずつ増やしていきたいです。 ベクトルの末尾/先頭N個以外を取り出す ベクトルのインデックスベクトルを安全に返す。 文字列ベクトルを変形する パッケージの関数名一覧を返す。 Rのベースパッケージを検索する summary(lm(.…

JavaScript Canvas APIでアナログ時計を描画する(カスタム要素仕様)

JavaScriptのCanvas APIでアナログ時計を描画するコードです。カスタム要素も使用しています。 本来は類似名前空間やむき出しのオブジェクトよりもモジュールを使った方が適切ですが、ローカルでのデバッグが面倒なので通常のスクリプトとして分割しています…

JavaScript new Boolean(false) === true

JavaScriptには論理型(boolean)のオブジェクトラッパーであるBooleanクラスが存在しており、プリミティブ型のbooleanとは異なる動作をします。Booleanクラスのインスタンスは保持する値に関わらずtrulyです。 console.log(new Boolean(false) === false) /…

JavaScript &&と||はfalsyまたはtrulyを返す(false/trueとは限らない)

JavaScriptの&&と||はC/C++の&&と||と微妙に異なる動作をします。 類似点:左から右へ順次評価する。評価が左側で終われば右側は評価されない。 相違点:結果は最後に評価した値そのもの(C/C++ではtrue/false)。 類似点は次のコードで確認できます。&&では…

C++23 std::optionalのand_then、or_else、transform

C++23ではstd::optionalにand_then、or_else、transformが導入されるそうです。 and_thenはstd::optionalが有効値の場合に変換処理を実行した結果を返します。or_elseはstd::optionalが無効値の場合に変換処理を実行した結果を返します。いずれも変換処理はs…

C++20&MSVC 範囲for文でco_yieldを使う場合は参照で受け取る

MSVCはC++20でもジェネレーターが使えるようにexperimental機能としてstd::experimental::generator<T>を提供しています。このクラスを使うとco_yieldで簡単にジェネレーターを実装できますが、範囲for文と組み合わせる場合は参照で受け取った方が良さそうです</t>…

C# JPEGファイルEXIFデータのWindows用評価とキーワードを取得・設定・削除する

JPEGファイルEXIFデータのWindows用評価とキーワードを取得・設定・削除するサンプルコードです。 #nullable enable using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Runtime.Serialization; using Syste…

C# System.Drawing.Imaging.PropertyDataのインスタンスを作成する

System.Drawing.Imaging.PropertyDataはJPEGファイルのEXIFデータを取得・設定する際に必要ですが、コンストラクタが非公開なので通常の方法ではインスタンスを作成できません。これはSystem.Runtime.Serialization.FormatterServicesのGetSafeUninitialized…

C# P/InvokeとCOM呼び出し時、UnmanagedType.LPWStrは強制的にMarshal.FreeCoTaskMemされる

P/InvokeとCOM呼び出し時、UnmanagedType.LPWStrのMarshal.FreeCoTaskMemは不要らしいです。CoTaskMemFreeが必要なLPWSTRはout IntPtrやout SafeHandleで受け取らなくても、out stringで受け取れば自動でMarshal.FreeCoTaskMemされるそうです。 ただし複数回…

C++20&WinAPI &WIL Shell.Applicationでエクスプローラーウィンドウの情報を取得する

Shell.Application(CLSID_Shell)でエクスプローラーウィンドウの情報を取得するサンプルコードです。 VBやC#経由で使う場合はIDispatchを使って名前からメンバーを参照することが多いですが、ここではインターフェイス(IShellWindows、IWebBrowser2)を取…

R&tidyverse tibbleに条件分岐で列を追加する

Rとtidyverse 1.3.1でtibbleに条件分岐で列を追加するサンプルコードです。case_whenは%>% case_when(条件式~値, ...)の形式で条件を満たす値を返します。最後のTRUE~NA_real_はどの条件にも一致しない要素の値を指定しています。NA_real_がNAではないのはca…