Skip to content

Instantly share code, notes, and snippets.

View bdm-k's full-sized avatar

Guojun Wu bdm-k

  • The University of Tokyo
  • Tokyo, Japan
View GitHub Profile
@bdm-k
bdm-k / byte_display.sv
Last active October 24, 2023 06:03
A SystemVerilog module that displays byte data with 7 segment displays.
module byte_display(
input logic clk, rstn,
input logic [7:0] data,
output logic [6:0] segment, // = {CA, CB, CC, CD, CE, CF, CG}
output logic [1:0] digit_en // = {AN[1], AN[0]}
);
localparam CLK_CNT_LIMIT = 65536 - 1; // 2^16 - 1
@bdm-k
bdm-k / 弱い型変数.md
Created February 2, 2024 08:50
OCaml の弱い型変数についての解説

ML の型システムには 2 種類の型変数があります。多相型の型変数と単相型の型変数です。OCaml では多相型の型変数のことを単に型変数と言い、単層型の型変数のことを弱い型変数と言います。

弱い型変数が現れるプログラム例を見てみましょう。

let id x = x in id id

関数 id のラムダ計算での表記は $\lambda x.x$ です。$(\lambda x.x)(\lambda x.x)\rightarrow_{\beta}\lambda x.x$ なので、id id の型も id と同じになるように思われます。しかし、実際には id の型は 'a -> 'a であるのに対し、id id の型は '_weak -> '_weak になります。('_weak は弱い型変数)

id id の前半の idid1、後半の idid2 とおきます。id1 の引数の型は 'a であり、実引数である id2 の型は 'b -> 'b です。整合性をとるために 'a'b -> 'b を単一化します。

Rootless コンテナの実装

概要

一般ユーザーの権限で実行できるコンテナのことを rootless コンテナと言います. Rootless コンテナを使うと, コンテナ内では root ユーザーとほぼ同じ権限を持つ一方で, コンテナの外では一般ユーザーの権限しか持たないようなプロセスを実行することができます. Rootless コンテナは, user namespace の機能を使用して実装します. User namespace とは, user ID, group ID, capabilities などのセキュリティに関連する属性を管理する namespace です.

User namespace 内にプロセスを作成

clone(2) を使って新しい user namespace 内に子プロセスを作成することができます. clone には次の 4 つの引数を渡します.

  • fn: 子プロセスのエントリーポイントとなる関数. void のポインタを受け取り, int を返す必要があります.
  • stack: 子プロセスがスタックとして使うメモリ領域の底を指すポインタ.
  • flags: 挙動を変更するフラグ.
@bdm-k
bdm-k / phomemo-m110-print-image.ts
Last active July 1, 2024 14:52
Print images on the Phomemo M110 printer
/*
* This script allows you to print images on the Phomemo M110 printer.
* It utilizes the Web Serial API, so it only works on browsers supporting it (e.g. Chrome).
* We have confirmed its operation in the following environments:
* - macOS Sonoma 14.5, Chrome 125
* - Windows 11 23H2, Chrome 126
*
* We follow the protocol outlined on this page:
* https://github.com/vivier/phomemo-tools
*