作品

Webアプリからハイパーバイザまで

今まで個人的に制作したプログラムを未公開のものを含め記録しています。

ntp時刻表示

C♯で作られた時計アプリ

小学生の頃に制作したC♯製GUIアプリケーションです。

NTPサーバーから時刻を取ってきてPCの時間と比べ何秒遅れてるか表示する単純なアプリです。 設計がずさんなので、起動後数回時刻取得するとハングアップして死ぬ粗末な実装です。

バイナリ: Repository Taprix

HSP Fileget.dll

inet.dllで満足できず制作

制作時期は2014 〜 2015です。

Win32APIでマルチスレッドやイベント駆動型アプリケーションを理解しHSPでのネットワーク関連でいちいちパケットを受信するのが面倒になり、 別スレッドで動作させ、終了すればイベントを発行する形でネットワーク処理を行えるようにしたものです。初のダイナミックリンクライブラリの実装でFFI関係で悩んだことを覚えています。 ただ、コードが拙いせいで途中でハングアップしてしまう不具合等があり、完璧に動作するものではありませんでした。 バージョンニングして複数のバージョンを作成したのもこのソフトウェアが最初だと思います。

バイナリはRepository Taprixに置いています。動作保証はしていません。

実装されている機能
  • HTTP通信
  • TCP通信
  • 別スレッドで通信
  • HSPから呼び出し可能(ダイナミックリンクライブラリ)

MN2

アマチュア無線国家試験の過去問用問題集

あるクラブで使われていたVBで作られていた問題集をHSPなどで書き直したものです。名前はMNas MoNdaisyu => MN*2というナンセンスな由来です。

自分がお世話になっていたある課外クラブで使われていたVisual Basic製の試験対策用の問題集を見て、当時.NETを嫌っていた自分が.NETに依存しないHSPで書き直したものです。 実装好きだった当時は、ただの問題集アプリなのに自動アップデートなどの機能を搭載して結局使ってもらえませんでした。

時が流れて、デバイスの多様化が進んだためWebアプリとして新たに再開発しました。 機能を絞って問題をシャッフルする機能やオフラインで使用する機能のみを搭載しました。今度のは無事使ってもらい、いつの間にか検索上位にヒットするようになりました。 ここでも問題自体は分離し、コード自体はGitHubに公開しています。

ついでにGoogle Assistantで利用可能にしましたが、ほとんど使ってもらえないままGoogle Assistant自体が終了してました。

Web版:MN2 アマチュア無線3級技士国家試験用

Gas2Nasm

Intel構文への憧れ

AT&T syntaxのアセンブリをIntel形式に変更するプログラムです。

制作時期は2015 〜 2016だと思います。WindowsでOS自作をしていた際にCygwinのgccが吐き出すオブジェクトファイル(.o)がどうしてもライブラリ依存なコードを出すので、 NASMでオブジェクトファイルを生成しようとコンパイラが生成するAT&T形式のアセンブリをNASMに渡そうとしたものです。 はりぼてOSのライブラGOにgas2nask があったので、ありがたくそれを使わせていただき、命令セットなどを追加しました。 人のコードを一生懸命読んで改造したのはこれが初めてだと思います。 64bit命令にも一部対応していますが、現在ではほとんど使ってないため実用には耐えきれないと思います。

ソースコード:PG_MANA / Gas2Nasm · GitLab

Salmon for Windows

CでWin32APIを駆使したTwitterクライアント

C言語で何でもかんでも作ろうとした、いわゆるC言語至上主義の最盛期の作品です。制作時期は2015 〜 2017だと思います。

ライブラリにほとんど頼らず、どんな処理もすべてライブラリに頼らず書いていたため、ものすごいコード量の割にできることはすごく少なかったです。 ただ、学んだことは多く世の中のアプリケーションがどのような処理をしているかを低レイヤーから考えられたと思います。 ちなみに、OAuth用のヘッダは以下のように作成していました。

wsprintf(OAuth, TEXT("Authorization: OAuth oauth_consumer_key=\"%s\", oauth_nonce=\"%u\", oauth_signature=\"%s\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"%u\", oauth_token=\"%s\", oauth_version=\"1.0\"\r\n"), ptwset->Uni_cons_key, nonce, Hash, sec, token_key);

Windowsを使わなくなり、コードもどこかに消えてしました。

Salmon for Linux

C++でQtを使って書いたLinux向けTwitterクライアント

Linuxデスクトップを主に使い始めて、Salmon for Windowsのソースコードを移植しながら作成したプログラムです。

開発開始時期は2016年9月12日です。さすがにWin32APIの駆使で疲れLinuxではもっとエレガントに開発したいと初めてフレームワークに手を出したプログラムです。 Qtのイベント駆動モデルや簡単に柔軟なGUIアプリケーションが作成できることにはとても感心しました。 長らくLinux用のながら見Twitterクライアントとして重宝してましたが、UserStreamの終了に伴い開発を終了しました。

ソースコード:PG-MANA/Salmon: LinuxデスクトップユーザのためのTwitterクライアント - GitHub

Sardine

C++でQtを使ったCybozuLive更新情報受信ソフト

セキュリティキャンプで使用していたCybozuLiveの更新状況を手元で確認するために使っていたQtアプリです。

開発開始時期は2017年11月です。 セキュリティキャンプを機に触りだしたサイボウズLiveの新着情報を受信して通知するソフトウェアをQtで作りました。 起動時自動実行したかったので起動オプションに-nをつけると起動時にウィンドウを表示せず通知欄に隠れます。 これも、セキュリティキャンプ時期に重宝してましたが、CybozuLiveが終了するに従い開発を終了しました。

ソースコード:PG_MANA / Sardine · GitLab

Sweetfish

C++でQtを使ったMastodonクライアント

Salmon for Linuxのコードを流用しMastodon用に作ったアプリです。
Salmon for Linuxと見た目は変わりませんが、少しずつ機能追加をしています。 英語表記にも対応して、Snapcraftでも上げています。GUIアプリで唯一まだメンテナンスしているコードです。

ソースコード:GitHub - PG-MANA/Sweetfish: The Mastodon client for Linux with Qt

パッケージ(RPM):Repository Taprix

パッケージ(Snapcraft):Install sweetfish on Linux | Snap Store

Methylenix

Rust製自作OS

2017年からフルスクラッチで書いている複数アーキテクチャ対応のOSです。当時まだRustも自作OSもそこまで流行っていない頃に、一度挫折した自作OSを着実に理解しながら実装しようと始めたものです。FreeBSDなどの既存のOSを参考にしながら抽象化やハードウェア対応を頑張りました。ソースコードリーディングや、仕様書の読み方、設計を考える力が身についたと思います。

TCP/IPを実装してサーバを動作させたところで一段落して別の活動に移行してしまいましたが、今でも時間が出来れば実装を続けています。

ソースコード(GitLab):PG_MANA / Methylenix · GitLab

ソースコード(GitHub):GitHub - PG-MANA/Methylenix: An operating system written in Rust

バイナリ:Repository Taprix

TilePhotoView

Jekyllで作った写真集

友人に写真集のホームページを作ってほしいと頼まれて作成したJekyllのプロジェクトです。2022年に作成しました。デザインなどは友人の注文通りに作り、内部の実装は自分で考えました。双方満足行くものができたようでお気に入りの作品の一つです。

ソースコード:GitHub - PG-MANA/TilePhotoView: The tile-style web photo gallery generator

サンプルサイト:PG_MANA Photo Gallery