タグ

ブックマーク / tanakh.hatenablog.com (6)

  • argopt: Rust向けの宣言的なコマンドライン引数パーザー - 純粋関数型雑記帳

    TL;DR 簡潔で直感的に扱える、宣言的なRust向けのコマンドライン引数パーザーを作りました。 https://crates.io/crates/argopt モチベーション Rustにstructoptというライブラリがあります。これはコマンドライン引数をパーズするライブラリなんですが、僕はこのライブラリが大好きなんです。Rustのライブラリの中で一二を争うほど好きです。なんならコマンドラインツールをRustを書く理由の大部分がこのライブラリの存在といっても過言ではないかもしれません(過言ですけど)。 しかしstructoptも使い続けていると、どうにももっと便利にできるんじゃないのかと思う部分が出てきます。structoptでは名前の通りコマンドライン引数をstructで定義して、それに#[derive(StructOpt)] とStructOptをderiveすることでパーザーのコ

    argopt: Rust向けの宣言的なコマンドライン引数パーザー - 純粋関数型雑記帳
    zetta1985
    zetta1985 2020/08/31
  • 使いやすさを重視したHTMLスクレイピングライブラリを作った - 純粋関数型雑記帳

    TL:DR レポジトリ https://github.com/tanakh/easy-scraper ドキュメント 背景 このところ訳あってRustHTMLからデータを抽出するコードを書いていたのですが、 既存のスクレイピングライブラリが(個人的には)どれもいまいち使いやすくないなあと思っていました。 HTMLから望みのデータを取り出すのはいろいろやり方があるかと思いますが、 ツリーを自力でトラバースするのはさすがにあまりにも面倒です。 近頃人気のライブラリを見てみますと、CSSセレクターで目的のノードを選択して、 その周辺のノードをたどるコードを書いて、 欲しい情報を取り出すという感じのものが多いようです。 RustにもHTMLのDOMツリーをCSSセレクターで検索して見つかったノードをイテレーターで返してくれたりする、 scraperというライブラリがあります。 例えば、<li>要素

    使いやすさを重視したHTMLスクレイピングライブラリを作った - 純粋関数型雑記帳
    zetta1985
    zetta1985 2020/02/13
    XPath使うライブラリはすでに存在する(libxmlのラッパーとか)けど、これはこれでわかりやすそう
  • waf チュートリアル - 純粋関数型雑記帳

    waf - The flexible build system http://code.google.com/p/waf/ wafというものを最近知り一目惚れしてしまったので、紹介記事を書きます。ユーザーが増えると嬉しいな。 wafとは何か?特徴・利点・使うべき理由 wafはPythonベースのビルドシステムです。同様のことを行うツールとして、Autotools、Scons、CMake、Antなどがあります。Sconsからの派生で、比較的新しいソフトウェアです。 分かりやすい Pythonで書かれており、スクリプトもPythonで記述します。シェルスクリプトと謎のマクロが入り混じるAutotoolsや、独自言語のCMakeなどに比べて扱い易いです。Pythonを知っていれば非常にすんなりと使いこなすことが出来ます。Pythonを知らなくても、他の独自言語を覚えるよりは実りがあるかと思います

    waf チュートリアル - 純粋関数型雑記帳
    zetta1985
    zetta1985 2020/02/13
  • Rustでメモ化を行うためのシンプルなライブラリを作った - 純粋関数型雑記帳

    TL;DR 一行追加するだけで関数をメモ化するマクロを作った。 成果物はこちら https://docs.rs/memoise/ 背景 同じ引数に対して同じ値を返す関数(いわゆる参照透明だったり数学的だったりな関数)では、 関数の計算結果を保存しておくことによって計算を高速化したりすることができます。 このようなテクニックを関数のメモ化(memoise, memoize, memoization)などと呼びます。 特に再帰的に定義される関数についてメモ化を行うことによって、 動的計画法の実装をシンプルで直感的なものにできたりします。 しかし、関数のメモ化はやりたいことが自明なのにもかかわらず、 毎回手で書いていると微妙に面倒だったり、うっかりメモ化忘れで計算量が爆発してしまったり、 ちょっと辛いところがありました。 特にRustを使っていると、グローバル変数を雑に使うことを許して貰えないの

    Rustでメモ化を行うためのシンプルなライブラリを作った - 純粋関数型雑記帳
    zetta1985
    zetta1985 2020/02/01
  • 美しい日本のファミコンエミュレータ - 純粋関数型雑記帳

    ちょっと前、ふとしたことから nestech.txt なるファミコンの資料を 読んでいたのだが、読んでいたら久しぶりにエミュレータを書きたいような 気持ちがふつふつと湧き出てきて、それからそれが数日経っても 一向に収まらないので、結局書き始めることにした。 しかし、いまさらファミコンエミュレータというのもなぁ… ということなので、思い切り簡素なソースのものに仕上げようということになった。 名付けて"美しい日のファミコンエミュレータ"である。 (名前、モロパクリだけど…) で、作ること数日。ようやく形になった。 http://fxp.hp.infoseek.co.jp/emu/bjne-0.0.0.zip WindowsXPで開発したが、SDLを用いて書かれていて、 環境依存も特に無いはずなのでLinuxとかでもコンパイルは出来るはず。 …えっ?なんでHaskellじゃないのかって? Ha

    美しい日本のファミコンエミュレータ - 純粋関数型雑記帳
    zetta1985
    zetta1985 2019/08/14
  • C++向け簡易コマンドラインパーザ cmdline - 純粋関数型雑記帳

    を作りました。 http://github.com/tanakh/cmdline 何か コマンドライン引き数の解析を助けるライブラリです。同じ目的のライブラリに、Cの標準関数であるgetoptやgoogleのgflagsなどがありますが、cmdlineは適当に使えてそこそこ便利というのを目指しています。getoptは使いにくいし、usageも自分で書く必要がある。gflagsはライブラリをインストールしたり、リンクしたりちょっと大掛かり。cmdlineは、1ヘッダファイルで、コピーするだけで使えて、修正BSDライセンスで公開しているので、自由にプログラムに取り込んでいただけます。 コードサンプル #include "cmdline.h" int main(int argc, char *argv[]) { cmdline::parser p; p.add("hoge", 'h', "hog

    C++向け簡易コマンドラインパーザ cmdline - 純粋関数型雑記帳
  • 1