2020/06/17


今まで C++ でちょっとしたウェブアプリを作る際は crow という micro-framework を使ってきました。

GitHub - ipkn/crow: Crow is very fast and easy to use C++ micro web framework (inspired by Python Flask)

How to Build If you just want to use crow, copy amalgamate/crow_all.h and include it. Requirements C...

https://github.com/ipkn/crow

ヘッダオンリーで使えてとても便利だったのですが、boost に依存している点があまり好きじゃなかったのと、最近 crow の開発が止まり最新の boost でビルド出来なくなってしまったので、自分で作る事にしました。

GitHub - mattn/clask: Web micro-framework like flask in C++.

# include " clask/core.hpp " int main () { auto s = clask::server (); s. GET ( " / " , [](clask::req...

https://github.com/mattn/clask

C++ から flask ぽく使える事を目指しました。ヘッダオンリーで使えます。HTTP ヘッダを解析する所だけ kazuho さんの picohttpparser を使わせて頂いています。

#include "clask/core.hpp"

int main() {
  auto s = clask::server();
  s.GET("/", [](clask::request& req) {
    return "OK!";
  });
  s.GET("/foo", [](clask::response& resp, clask::request& req) {
    resp.set_header("content-type""text/html");
    resp.write("he<b>l</b>lo");
  });
  s.run();
}

boost にも依存していませんし Windows でも問題なく動作します。ただしコンパイルには C++17 をサポートしているコンパイラが必要です。keep-alive に対応したマルチスレッドなウェブサーバなので、静的な2文字("OK)くらいのコンテンツだと 70000req/sec くらい出ます(ログ出力を無効にした場合/Ryzen 5)。まだまだ実験的ですが、幾らかアプリケーションが作れるまで来たので、今後簡単な C++ のウェブアプリは clask を使って行こうと思っています。ドキュメントが皆無なのですが、これから整備していく予定です。使用例を5つほど用意していますので、興味のある方は pull-request 頂けると嬉しいです。

clask/example at master · mattn/clask · GitHub

Explore GitHub → Learn & contribute Topics Collections Trending Learning Lab Open source guides...

https://github.com/mattn/clask/tree/master/example
Posted at by



2020/05/30


WSL2 がリリースされ Windows 10 Home Edition でも使える様になったので色々遊んでるのだけど、Windows 側とテキストを交換したい時に面倒で、クリップボードを共有する方法を模索した。

最悪 /dev/clipboard を実装するまで考えたけど、面倒過ぎたし exe の実行厳しい(何か常駐させてユーザランドから起動する為にサーバがいる)だろうから別の方法を考えた。WSL2 は binfmt (たぶん違うけど良く似た奴だろう) で Windows の exe が起動できるので、コマンド経由で stdin/stdout を read/write できる物を起動する方法を考えた。

で自分で書くかと Windows Terminal 起動した時点で「Windows Terminal からコピペできるやん、いらなくね?」となり、本来の目的を忘れかけていたので、おとなしく GitHub からそういったコマンドを探した。

GitHub - equalsraf/win32yank: Windows clipboard tool

Dismiss Join GitHub today GitHub is home to over 50 million developers working together to host and ...

https://github.com/equalsraf/win32yank

こちら便利そうだったけど、僕は Go 言語使いなので、go get で一発で入るのが欲しかった。最終的には以下のリポジトリにある gocopy と gopaste が良さそうだった。

GitHub - atotto/clipboard: clipboard for golang

Clipboard for Go Provide copying and pasting to the Clipboard for Go. Build: -1 go get github.com/ato...

https://github.com/atotto/clipboard

Windows 側では以下の様にインストールする。

go get github.com/atotto/clipboard/cmd/gocopy
go get github.com/atotto/clipboard/cmd/gopaste

あとは WSL2 の .bash_aliases に以下を足した。

alias gocopy=/mnt/c/Users/mattn/go/bin/gocopy.exe
alias gopaste=/mnt/c/Users/mattn/go/bin/gopaste.exe

パスは個人によって違うの修正して下さい。

$ echo あいう | gocopy

$ gopaste
あいう

こんな感じに使う。

追記

Vim から :w !goclip したいのであれば alias じゃなく shell で wrapper 書くかシンボリックリンクを WSL2 のパスの通った所に張るのが良さそうです。ちなみに PowerShell の get-clipboard と clip.exe でも出来るけど遅いのが嫌いなのでこの方法にしました。

Posted at by



2020/04/18


技術評論社様より献本頂きました。

色々なプログラミング言語の生い立ちや特色、エピソード、それらの言語での FizzBuzz の書き方など、プログラミングを始めたばかりの方が読んで楽しめる本だと思います。

僕も昔からプログラミング言語が大好きなので色々なプログラミング言語を触ってきましたし、自作言語もいくらか作ってきました。僕の初めてのプログラミング言語は BASIC でした。シャープの MZ シリーズの高速化が行われ「スーパー MZ」と呼ばれていた MZ-2500 を使い、自作のゲームを作っていました。あの頃のマイコンや BASIC は今と比べるととてもチープで、出来る事も限られていました。しかしそのお陰で僕達パソコン少年達は Z80 という CPU を高速に扱う為にハンドアセンブル(アセンブラが高価すぎて買えないので変換表を見ながらニーモニックを打ち込む事)を覚える事ができました。今から考えると、あれだけコンピュータに真正面から向き合って多くの時間を費やしてプログラミングに打ち込めたのはとても貴重な時間だったなと思います。

あの頃のパソコン少年たちは今どうしてるんでしょうね。僕がプログラミング言語を触り始めた時には、プログラミング言語を選ぶ事なんか出来ませんでした。当たり前の様に BASIC を使い、高速化の為にアセンブリを覚えました。しかし今は違います。自分の好きなスタイルの、目的に近い、そして速く簡単に書けるプログラミング言語を探す事ができる様になりました。とても恵まれた話です。インタプリタ言語だけでなく、静的型付け言語もあります。Ruby に対する JRuby の様に異なる処理系が幾つも存在する事もあります。TypeScript の様に実際に動作する JavaScript 上に作られた別のプログラミング言語もあります。もう10年するとさらに多くのプログラミング言語が登場しているかもしれませんね。今回読んだ本書で登場してくるプログラミング言語のおよそ 6~7 割を触った事がありましたが、もう 10 年後に登場しているであろうプログラミング言語の多くはもう把握できていないかもしれませんね。

僕は Erlang や Elixir は触った事はあるものの、どの様な経緯で作られた言語なのか、また最近だとどの企業で採用されているかなど、まったく知らなかったのですが本書で知る事ができてとても興味深く読ませて頂きました。知らない事も沢山書かれています。初級中級の方だけでなく上級の方でも十分に楽しめる本だと思いました。

Posted at by