Skip to content

Instantly share code, notes, and snippets.

View asmichi's full-sized avatar

asmichi asmichi

View GitHub Profile
@asmichi
asmichi / PseudoConsoleApplicationError.cpp
Created March 30, 2024 14:56
Pseudo Console: Application error in a hosted child when the parent is killed before the child gets the time to initialize
#define WIN32_LEAN_AND_MEAN
#define NOMIMNAX
#include <Windows.h>
#include <processthreadsapi.h>
// If this parent process is killed before the hosted process gets the time to initialize (especially when the system is busy),
// the "Application Error" dialog will pop up with error code 0xc0000142 (STATUS_DLL_INIT_FAILED)
// as noted in the Note:
//
// https://learn.microsoft.com/en-us/windows/console/creating-a-pseudoconsole-session#creating-the-hosted-process
@asmichi
asmichi / benchmark_windows_fs_metadata_query.cpp
Last active February 27, 2024 13:50
Benchmark Windows file system metadata query
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include <Windows.h>
#include <array>
#include <cstdio>
#include <chrono>
#include <thread>
#include <vector>
constexpr int FileCount = 1024;
@asmichi
asmichi / SecurityDescriptorWithExplicitACL.cpp
Last active December 29, 2023 08:13
Create a security descriptor with an explicit ACL using Win32 APIs
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include <Windows.h>
#include <AclAPI.h>
#include <psapi.h>
#include <sddl.h>
#include <cassert>
#include <cstdio>
@asmichi
asmichi / MyReadOnlyDictionaryWithBaseClassValue.cs
Last active April 22, 2023 17:30
Dictionary<string, List<int>> as IReadOnlyDictionary<string, IReadOnlyList<int>>
// https://blog.kyubuns.dev/entry/2023/04/22/201156
//
// IReadOnlyDictionary<TKey, TValue> は、IEnumerable<KeyValuePair<TKey, TValue>> を
// 実装できるためには invariant でなければならない (いつもの)。 KeyValuePair<TKey, TValue> はもちろん invariant だから。
//
// IReadOnlyDictionary で返さなくてよければもっといろいろできるのだが。
// でもやっぱり標準の型である IReadOnlyDictionary をインターフェースにしたいこともありがちで。
using System.Collections;
using System.Diagnostics.CodeAnalysis;
@asmichi
asmichi / ReadConsoleInput.cpp
Created June 18, 2022 10:12
ReadConsoleInput example
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include <Windows.h>
#include <cassert>
#include <cstdio>
namespace
{
void PrintLastError(const char* name)
{
@asmichi
asmichi / AbuseImprovedStringInterpolation.cs
Last active August 11, 2021 10:50
Improved Interpolated Strings を濫用して、 string 以外の結果を生成してみる
// Improved Interpolated Strings を濫用して、 string 以外の結果を生成してみる。
using System.Runtime.CompilerServices;
using System.Text;
/*
args[0] = C:\Program Files\dotnet\dotnet.exe
args[1] = build
args[2] = Sugoi App\Sugoi App.sln
args[3] = --nologo
@asmichi
asmichi / UpdateAllVisualStudioInstances.ps1
Created June 21, 2021 13:07
Update all Visual Studio instances
# すべての Visual Studio インスタンスを更新する。管理者権限で実行する。
#Requires -Version 7.0
$vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
$vs_installer = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe"
$instances = & $vswhere -prerelease -format json -sort | ConvertFrom-Json
# 古いバージョンから更新する
[array]::Reverse($instances)
@asmichi
asmichi / SCM_RIGHTS.cpp
Last active January 30, 2021 13:47
Sending file descriptors through domain sockets
#include <cassert>
#include <cstdio>
#include <cstdio>
#include <cstring>
#include <sys/socket.h>
#include <unistd.h>
constexpr int SocketMaxFdsPerCall = 1;
struct CmsgFds
@asmichi
asmichi / Makefile
Last active June 15, 2020 03:32
order-only prerequisites の使用例: 自動生成されるヘッダファイル
# order-only prerequisites の使用例: 自動生成されるヘッダファイル
# https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html#Prerequisite-Types
all: app
PROTO_SRCS = foo.proto bar.proto
CC_SRCS = app.cc foo.pb.cc bar.pb.cc
CC_OBJS = $(CC_SRCS:.cc=.o)
-include $(PROTO_SRCS:.proto=.proto.d)
@asmichi
asmichi / ChildAutoReaper.c
Created February 2, 2019 11:21
What happens when you perform waitpid(-1, ...)?
#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include <stdbool.h>
#include <memory.h>