2020/06/19


元ネタ

作ったもの。

mattn/fakemovie · GitHub
https://github.com/mattn/fakemovie

Go のパッケージにしてあるので、Go の HTTP サーバからサーブする画像全てに再生ボタンを付ける様なミドルウェアを作る事もできてとても便利です。一応、オマケとしてコマンドを用意してあります。

$ fakemovie -r 40 input.png
fakemovie

こんな感じに使えるのでご利用下さい。

Posted at by



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