作品

WebアプリからOSまで

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

ntp時刻表示

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

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

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

実装されている機能
  • (S?)NTPサーバーから時刻取得
  • 内蔵時計とのズレを表示
  • サーバー変更

時刻表示

C(using Win32API)で作られたアプリ

これもまた制作時期はおそらく小〜中学生の頃に作ったと思われるGUIアプリケーションです。

上記のアプリをWin32APIでゴリゴリ書きなおしたソフトウェアです。スレッドという概念を理解し始めマルチスレッドなアプリケーションを制作するようになりました。 「猫でもわかるWindowsプログラミング」を参考にしました。バイナリ・ソース共に行方不明です。

実装されている機能
  • 時刻表示(メインスレッドと別にカウント)

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で書き直したものです。 実装好きだった当時は、ただの問題集アプリなのに自動アップデートなどの機能を搭載して結局使ってもらえませんでした。

実用的なアプリとしてはこれが最初だと思います。選択肢をシャッフルするなど新しい機能も搭載しました。 問題の記述をプログラムから分離するなど汎用性も考えるようになりました。ただし独自フォーマットを使用しており後々再移植で苦労しました。 前述の通り、アップデータの観点から頒布は終了してます。

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

ついでにGoogle Assistantで利用可能にしましたがこちらは使っている人はほとんどいないです...

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

Google Assistant版:MN2問題集 | Google アシスタント

実装されている機能
  • 問題集(デフォルトはアマチュア無線3級)
  • 選択肢のシャッフル

Gas2Nasm

Intel構文への憧れ

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

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

ソースコード頒布:Gas2Nasm | Software Taprix

実装されている機能
  • AT&T記法からIntel記法への変換
  • デバッグ情報をごっそり消す
  • 一部64bit命令(movqなど)対応

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を使わなくなり、コードもどこかに消えてしました。

実装されている機能
  • ツイート
  • ユーザーストリーム受信
  • TwitterのJSON解析
  • 名前、ツイートなどテキストのみ表示
  • デバッグ情報

Salmon for Linux

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

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

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

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

実装されている機能
  • ツイート
  • TwitterのJSON解析
  • ツイートを画像、動画ともに表示
  • RT&Fav&リプなど

Sardine

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

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

開発開始時期は2017年11月です。

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

ソースコード:PG_MANA / Sardine — Bitbucket

実装されている機能
  • 新着情報一覧を表示
  • 通知欄に常駐し新着情報を通知
  • -nを起動オプションにつけることでウィンドウを表示しない