作品

作ったもの

作ったものを大雑把に書いてます。文体が整ってないので軽く読んでもらえると幸いです。

ntp時刻表示

C♯で作られたアプリ

制作時期は不明です。小、中学生の頃のような。

(S?)NTPサーバーから時刻を取ってきてPCの時間と比べ何秒遅れてるか表示するやつ。どういう作りなのか全くもって忘れた。Cシャープで書かれているのだけはわかってる。確かどっかからソースを持ってきたかな。起動後数回時刻取得するとハングアップして死ぬ。

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

時刻表示

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

これまた制作時期は不明です。小、中学生の頃のような。

Win32APIでゴリゴリ書かれてる謎ソフト。スレッド大好き時代の幕開け作品である。「猫でもわかるWindowsプログラミング」を参考にしました。バイナリ・ソース行方不明

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

HSP Fileget.dll

HSP inet.dllで満足できなかった頃の作品

制作時期は2014〜2015。

いちいちパケット受信しに行くのがめんどくさいな、別スレッドで動けよ。と始まった開発。実をいうと1.0.0.2まで異様に遅いから実用的じゃない。1.0.0.3か1.1.0.0が使える...かな。1.0.0.3から.1.0.1.0に飛ばずに.1.1.0.0に飛ぶズタズタバージョン管理。メンテナンスはしてないのであんまり期待はしないでください(一応ちゃんと動くので使ってもらえたら嬉しい)。スレッド作って受信してウィンドウメッセージ飛ばす仕組み。今見るとライブラリの恐ろしいほどコードが汚い。クソコードグランプリでれる。(ただしさっき言ったように一応1.0.0.3からちゃんと動く)

頒布:Fileget | Software Taprix

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

MN2

MNas MoNdaishuだからMN^2という謎の命名

制作時期は2013(非公開)〜2015

某所で頒布していたアマチュア無線問題集がVBで記述されて、改造計画がでたとき「VBの開発のサポート終了しているで!?」とおひとり様開発したもの。HSPでゴリゴリ書かれている。手続き型のオンパレードでちょっとオブジェクト指向に興味が湧いた。前述のFilegetがアップデートシステムで使われてる。なんと平文通信である。しかも鍵署名システムしてない。ヤバイ。WindowsにLinuxみたいなパッケージ管理システムあれば...(Linuxのパッケージ管理に慣れたつもりの人)。MN2 Ver1.1は内部的には2.0になってる、アップデートシステムの通信を覗けばわかる。エラーが発生すると自動報告するシステム搭載。Qtで書き直そうという考えが少なからずある。パッケージにある「read me.txt」ってなんだよ、READMEじゃないのかよぉ(過去の自分への疑問)。

内容的には完成度は今までに比べて高いはず。問題自体は全部引っ張ってきてる。選択肢をシャッフルするので番号で覚えることが無くなりそう...かな。問題は組み替えられるけどアマチュア無線以外の問題は今の所存在しない。できたら作ってみて遊んでください。アマチュア無線3級を目指す方は使ってもらえると幸いです。

頒布:MN2 MNAS頒布終了。倉庫に保管中(動作保証なし)

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

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

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

Gas2Nasm

Intel構文への憧れ

制作時期は2015〜2016

cygwinのgccが吐き出すオブジェクトファイル(.o)がどうしてもライブラリ依存なコードを出すのでNASMでオブジェクトファイルを生成しようと考えたもの。はりぼてOSのライブラGOにgas2naskがあるのでそれに命令セットを追加したり、ラベルの生成方法を変えた。人のコードを一生懸命読んだのは初めてかな。改造部分はコードが上手かわかんない。デバッグ情報をガツガツ削ってNASMで使えるようにする。Hello,world!くらいなら問題はないが、でかいOSではどうなるかわからん。MNOSは耐えきったけど小さいOSだからかね。よく見るとちらほら64bit命令に対応してる。Linuxをメインで使うようになってからgccでnostdなオブジェクトファイルが出せるので使わなくなったし、RustでのOSでも不要だった。

一応Linuxでもビルドできるが一箇所だけstrncpy_sがあるので適宜修正してください。将来のアップデートでstrncpy_sは消すかもしれない(_s系はLinuxで動かないし闇)。

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

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

Salmon for Windows

Cで書き始めた自前Twitterクライアント

制作時期は2015〜2017

Salmon for WindowsはC言語至上主義の最盛期の作品である。以後勢力は衰退した。

C言語でライブラリ的なものを作るためについでにWin32APIもくっつけたやつ。なんとOAuthをsprintfでゴリゴリ実装しているのである。ガクガクブルブル、今考えると恐ろしい。でもそんなことあり得るだろうか。どうせ昔の記憶が改ざんされてるんだろう。ソースも再構成して残ってないし。なんて思ってたらソースコードが出てきて、開いてみると

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);

ヤバイコードが出てきたのである。wsprintfとsprintf_sが混ざったコード、APIに投げるときはwsprintfなどでUnicodeにして、それ以外はマルチバイト文字にしてsprintfで処理する。Win32APIの修羅場である。この実装を作るのに1年かかったというのも納得だ。画面表示は画像が出せずスクロールもできない。Win32API難しすぎる(技術不足)。後述のLinux版は一応C++になっていて一本化に務める。JSON処理はJansson、SHA1処理はSHA1ccを使用させてもらってます。ありがたや〜。Linuxにメインが移って以来あんまり開発してない。

追記: ソースコード及び説明も完全に抹殺されました。

詳細: 削除されました

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

Salmon for Linux

C++ with Qtで書いたTwitterクライアント

制作時期は2016年9月12日〜

Salmon for WIndowsのコードを引っ張ってきてQtで書いたもの。開発途上。詳しくはREADME.mdみて。

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

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

Sardine

C++ with Qtで書いたCybozuLive更新情報受信ソフト

制作時期は2017年11月〜

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

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

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