2025-12-26
#js 

特定のドメインにあるメールアドレスかどうかなどをチェックするシンプルなJavaScriptのライブラリ、IDCheckerをつくりました。

テストファースト、AIしあげなライブラリの作り方。

1. 使うイメージでテストコードをかく
import * as t from "https://deno.land/std/testing/asserts.ts"; import { IDChecker } from "./IDChecker.js"; Deno.test("simple", () => { const ts = new IDChecker([ "*@test.com", "abc@test2.com", "ghi@*", ]); t.assertEquals(ts.check("abc@test.com"), true); t.assertEquals(ts.check("def@test.com"), true); t.assertEquals(ts.check("@test.com"), true); t.assertEquals(ts.check("test.com"), false); t.assertEquals(ts.check("abc@test2.com"), true); t.assertEquals(ts.check("abc@test3.com"), false); t.assertEquals(ts.check("ghi@test3.com"), true); t.assertEquals(ts.check("ghi@test4.com"), true); }); 今回ほしいのは後方一致と完全一致でしたが、ついでに前方一致も作っておくことにします。(よくばりすぎに注意!)

2. テストが通るように実装する
export class IDChecker { constructor(list) { this.list = list; } check(s) { for (const item of this.list) { if (item.startsWith("*")) { if (s.endsWith(item.substring(1))) return true; } else if (item.endsWith("*")) { if (s.startsWith(item.substring(0, item.length - 1))) return true; } else if (item == s) { return true; } } return false; } } 割と簡単ですが、コンパクトにテストできるの大事!

3. AIにドキュメントやロゴを作ってもらいチェック!

「code4fukui/IDChecker」

できあがり!
ついでに英語ドキュメントもできちゃいます!

つくろう、OSS、オープンソースソフトウェア!

2025-12-25
MERRY XMAS with IchigoJam!
IchigoJam Advent Calendar 2025」最終日のエントリー、なめらか文字スクロール!



なめらかな横スクロールの秘密は、100-110行で、PCGを使って16コ定義したキャラクターです。190-200行で切り替えることでなめらかに動いているように見せています。

100 FORI=0TO7:V=1<<I-1:FORJ=0TO7:POKE#700+I*16+J,V:NEXT:NEXT 110 FORI=0TO7:V=~(1<<I-1):FORJ=0TO7:POKE#708+I*16+J,V:NEXT:NEXT 120 'FORI=0TO15STEP2:?CHR$(224+I);CHR$(224+I+1),I:NEXT 130 Z=15:VIDEO3:'Z=31 IF VIDEO1 140 S="MERRY XMAS! ":F=6:'8KANA 150 X=0 160 FORI=0TO7:C=PEEK(S+X/F):V=PEEK(C*8+I)>>(7-X%F)&1:C=PEEK(S+(X+1)/F):W=PEEK(C*8+I)>>(7-(X+1)%F)&1 170 P=(V!=W)*240+V 180 LCZ,2+I:?CHR$(P);:NEXT 190 FORI=1TO7:COPY240*8,224*8+16*I,16:WAIT2:NEXT 200 COPY240*8,224*8,16 210 SCROLL LEFT 220 X=X+1:IF X/F=LEN(S) X=0 230 GOTO160


アルファベット表示は、F=6として、隙間が空きすぎないように設定しています。


カタカナも表示できます。カタカナや絵文字を表示する場合は、Fを8にして、横8ドット分表示するモードにしましょう。


IchigoDyhookで作ったプログラム、ちょうど1画面に収まりました! あえてUSBシリアルで転送せず、写真から打ち込みました。MSX時代が懐かしい!


「RUN on IchigoJam web」

IchigoJam webだと、ちょっとなめらかさに欠けるので、ぜひ実機でご覧ください!
プロジェクターで映すと、大きな看板替わりにもなりそう!


「IchigoJam - Qiita Advent Calendar 2025 - Qiita」

IchigoJam Advent Calendar 2025、みなさんのエントリー、ありがとうございました!

links
- IchigoJam
- IchigoJam - Qiita Advent Calendar 2025 - Qiita
- IchigoJam Advent Calendar 参加者募集!

2025-12-24
256兆色で表現するHDR画像を保存する形式にOpenEXR(オープンイーエックスアール)というものがあることを知りました。macのプレビューにも、OpenEXR保存オプションあり!

RGBが各8bit、1677万色の古典的画像の標準、BMP(ビットマップ)のまさにHDR版。シンプルな形式はJavaScriptでも簡単に実装できるとのことで、用意してみました。


「code4fukui/OpenEXR」

ByteWriter.jsByteReader.jsを使って、16bit浮動小数点数の配列をヘッダー付きで保存します。32bit浮動小数点数バージョンもありますが、当面は16bit版でいいでしょう。


「exapmle.exr」

おもしろいみはあまりないですが、HDR画像です。HDR対応環境で開くと、白(=#FFFFFF)を超えた、明るさを確認できます。

links
- WebGPUを使って実現するHDR

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS