ねぇうしくんうしくん

今週のまとめ (一週間で自分が見た技術系サイトのログ)が今のところメインです。プログラミング言語、人工知能、セキュリティ 等

今週のまとめ (2017/3/24)

はい。

プログラミング言語

A C++14 cheat-sheet on lvalues, rvalues, xvalues, and more

github.com

C++14 に登場する(面倒な)概念である *value についてのまとめ。

Structure and Interpretation of Computer Programs (Unofficial)

sarabander.github.io

CSの代表的な教科書 SICP (https://mitpress.mit.edu/sicp/full-text/book/book.html) のスタイルを調整し見やすくした HTML バージョン。具体的にはフォントサイズの調整やシンタックスハイライトが改良されている。

Visualizing Garbage Collection Algorithms

spin.atomicobject.com

数種のGCについての GIF アニメでのビジュアライゼーションとその解説。2014年。

アルゴリズム

Notes on Lock Free Programming (Part 1)

loonytek.com

lock-freeアルゴリズム についての覚書。Part 1 とあるので続くはず。最後の論文も読むのがよさそう。

Paxos in 25 lines

http://nil.csail.mit.edu/6.824/2015/notes/paxos-code.html

分散合意形成アルゴリズム Paxos を 25 行の疑似コードにまとめたもの。詳しい内容は論文などを当たってください。

数学

Immersive Math

Immersive Math

線形代数の教科書。図は JavaScript によりインタラクティブにいじることができ、直感的な理解につながる。

機械学習

Hopfield Networks in Go

mlexplore.org

ニューラルネットワークの一種であるホップフィールドネットワークの解説とGo言語での実装

クラウド

dawson: serverless framework for Node.js on AWS

dawson | a serverless framework for Node.js on AWS

サーバーレスサービスの AWS Lambda の Node 向けの開発&デプロイツール。類似プロジェクトして、Apex がある。

apex.run

その他

LOOPY: a tool for thinking in systems

ncase.me

ダイナミックシステムのビジュアライゼーションを行うツール。解説によるとインタラクティブにノード間の値の増減などを操作できるらしい。

Interactive Mouth Simulator

Pink Trombone (注:音が出ます)

口腔の断面図をマウスなどでいじることで発声のシミュレーションをするアプリケーション。単純に面白い。

今週のまとめ(2017/3/3)

AWS Lambda で Twitter bot を書き直した

以前は VPS (さくらのクラウド) で docker-compose でとある Twitter bot を動かしていたんですが、偶に謎の死が発生するため代替として AWS Lambda で動かすようにしました。 技術的な詳細については以下とだいたい同じなのでここでは述べません。

qiita.com

ほかに運用している bot として、TwitterやイラストサイトをクロールしてSlackに通知するやつがあるのですが、それも Lambda 化したいと思っています。もしできたらそれについての技術的な手順は別に書こうと思います。

リンク集

数が少ないのでジャンル別で章立てしません。

[プログラミング言語] Rust for functional Programmers

Rust for functional programmers

Rust を HaskellOCaml と比較し、Rust における関数型プログラミングについて俯瞰します。

[数学] Functional Differential Geometry

mitpress.mit.edu

SICP の著者の一人が書いた微分幾何学の本です。 Functional とあるように、随所に数式の Scheme 実装が載っており楽しいです。ページの左下にある Open Access から無料で PDF がダウンロードできます。

Multiformats

multiformats.io

プロトコルやフォーマットの種類に一意なIDをつけ、それをデータの先頭に付加することによって自己言及的な表現をするという考えをもとに設計されたメタフォーマットです。ハッシュやネットワークアドレス、baseXX、コーデックなどが対象となっています。各言語での実装も提示されています。

gdbgui

github.com

GDB の Web フロントエンドです。Chrome の DevTools にインスパイアされている点が多いです。

[C++] Metal

Metal

C++14 向けのコンパイルタイム計算ライブラリです。類似したプロジェクトとして、Boost.HanaSprout があります。

今週のまとめ (2017/2/24)

機械学習

Generative Adversarial Networks (GANs) in 50 lines of code (PyTorch)

medium.com

GAN (Generative Adversarial Networks) の minimum な Pytorch での実装 (50行)。

High-Resolution Image Inpainting using Multi-Scale Neural Patch Synthesis

github.com

『マルチスケールニューラルパッチ合成を用いた高画質画像修復』の Torch での実装。論文はこちら。以下の図は論文からの引用。

Deep Learning Applications

handong1587.github.io

ディープラーニングの応用に関する論文やブログ記事などのまとめ。 記事自体は2015年に作られているが、最近の論文も多いので更新されている模様。現在の項目数は200を超えている。

プログラミング言語

Haskell - Marvin

Welcome to marvin’s documentation! — marvin 0.1.5-β documentation

Haskell で ChatBot を作る 言語内DSL

Haskell - Ten Example Uses of Monads

haskellexists.blogspot.jp

Haskellモナドの実例集 ( 確率プログラミング・STM・論理プログラミング・スレッドプログラミング etc… ) Haskell初心者がモナドの実際の利用方法を把握するのに良さそう。

Java - Java Libraries you cannnot miss in 2017

blog.jevsejev.io

モダンな Java 開発において役立つライブラリについての解説。DI、ネットワーク、リアクティブシステムなどのライブラリなどに加え、テストに関するフレームワークが多い。

セキュリティ

Penetration Testing Tools Cheat Sheet

highon.coffee

侵入テストで使うツールとその使用方法についての豊富な資料。ツールはほとんどCLIのものである。

アルゴリズム

Wykobi - Computational Geometry Tutorial

wykobi.com

計算幾何学ライブラリ Wykobi のチュートリアルだが、図付きで多くのアルゴリズムが解説されているので総覧としても利用できる。 示されているコードはライブラリの使い方なので、実際のアルゴリズムの実装はライブラリの中身を見る必要がある。

近況

「今週のまとめ」は事実上オンラインブックマークと化してしまった。そこで、どうせならオンラインブックマークのシステムを作ってみようかと今考えている。

ブックマークのコンテンツは、awesome のように Github においてテキストベースで管理する。そして、ブックマークの追加・削除は、適当なサーバにWebアプリを置いて REST API でできるようにする ( CLIで作っても良いのだが、スマホからもアクセスしたいので )。あるいは、Twitterのツイートしたリンクからスクレイピングし自動で追加するということもできる。

まだ構想段階だが、そのうちに作り上げたい。その暁には、「今週のまとめ」はお役御免となるかもしれない。

今週のまとめ

Web

hack.css - dead simple css framework

http://hackcss.com/

徹底的にシンプルな CSS フレームワーク。フォームヤグリッドなどの必要最低限の定義はされている。 ヘッダの先頭に Markdown のように#を表示しているのが斬新。

Linux

Rush - コマンドの並列実行

github.com

コマンドを並列実行するといえば GNU Parallel *1 が有名であるが、それと似たようなアプリケーション。GNU Parallelは Perl で実装されているが、これは Go 言語で実装されており若干早いらしい。 余談であるが、使用例がバイオインフォっぽいことに気づいた。*2

分散システム

Notes on Distributed Systems for Young Bloods

Notes on Distributed Systems for Young Bloods – Something Similar

分散システム初心者向けへの箴言集。

Thrill - C++で大規模データ処理

http://project-thrill.org/

C++ で大規模データ処理を扱うためのフレームワークC++ なので Java 製の Hadoop などよりもスループットが早いことがウリらしい。スライドが一番概要が掴みやすいか。

インフラ

Beehive - 自前IFTTT

github.com

IFTTT のようなレシピベースのオートメーションサービスを自前のサーバーでできるようにするプロジェクト。Golangで書かれており、現在数十のアプレット(bee)が存在する。ユーザーが自由にアプレットを追加できそうだが、ドキュメントが不足してるので今後に期待。

DevOps Bookmark

DevOps Bookmarks

DevOps に関するサイトを集めたリスト。カテゴリ分けされており、メニューで条件を絞って検索ができる。

サーバーレス・アーキテクチャで構築したシステムの運用はどうやるのか?

cloudpack.media

AWS Lambda とそのなかまたちだけで構成した動画配信サーバーについての話。当該記事はそのモニタリングシステムについての話。サーバーレスという旨みを活かして料金が下げるという話には感心した。

ソフトウェア工学

10つのソフトウェア工学の誤り

medium.com

ビジネスロジックをとにかく再利用可能にする」「何でも汎用的にしようとする」といってソフトウェアエンジニアが陥りやすい誤り「オーバーエンジニアリング」について簡潔かつ痛烈に批判していく。2016年のサンドイッチレイヤーの図を見て笑ってしまった。

統計

The Probability and Statistics Cookbook

statistics.zone

確率統計の公式や分布に関する早見表。検定、確率過程、時系列データなど手広く扱っている。最後のページにはおなじみの確率分布相関図がある。

アルゴリズム

Big O CheetSheet

http://bigocheatsheet.com/

主要データ構造とソートに関しての計算量早見表。競技勢とかはもっと謎のデータ構造とか知ってそうなので作って欲しい(他力本願)

PostgresSQL のクエリ最適化の遺伝的アルゴリズム

第58章 遺伝的問い合わせ最適化

最近PostgresSQLを調べ始めたのだが、意外なところでGAが実戦投入されていることを知った。 補足資料としては以下の通り。

近況

iPhone の画面は依然として割れている。

*1:いつもlとrの位置と数で迷う

*2:バイオインフォの研究においてシェルスクリプトを知ってるのと知らないのでは能率が全く違うと思っている。

今週のまとめ (2017/2/10)

arXiv を見るビューアーを作った

zkro.hateblo.jp

グラフィックス関連

ディープラーニング

その他

近況

iPhoneの画面が割れた

arXiv を見るビューアーを作った

45deg.github.io

arXivはAPIを提供しているが、 親切なことに Access-Control-Allow-Origin: * ヘッダを付けてくれている。 つまり、クロスオリジンの制約なく API にアクセスできるため、任意のドメインから XHR のみ (つまりクライアントアプリケーションのみ) で API にアクセスできる。 それに気づいたため、折角なので作ってみた。

機能としては、今のところカテゴリの選択と日付の選択だけである。要望があれば言っていただければ嬉しい。 また、arXiv自体の挙動が不安定(例えば、アナウンスタイムを過ぎてもアナウンスされない、前日のサブミッションが翌日のサブミッションに混ざっている等)なことに加え、まだ十分に動作確認していないのでバグが発生するかもしれないがご容赦願いたい。

使用した技術

Mithril.js

つい先日ver 1.0.0がリリースされたSAP向けフロントエンドライブラリ。その軽さ(ベンチマークがサイトに載ってある)とXHRが組み込まれているところが気に入って採用した。 使ってみた所感は以下の通り。

  • JSX や webpackによるモジュール分割 の連携などでかなり楽になった。APIを必要最小限にしながら、うまくモダンJSのエコシステムを利用していると思う。
  • ステート管理の自由度が高い。逆に言えば、雑に作るとひどいコードになる (若干なった)。真面目に使うなら Redux などのステート管理ライブラリを使うのが良さそう。
  • React と比べるとやはりプラクティスやリソースが少ないのが気になる (自由度が高いので尚更)。それについては時間が解決してくれるだろう。
  • 結論としては、今後もこういった小〜中規模のアプリケーションにはどんどん採用していこうと思った。

Tachyons

レスポンシブルな CSS ツールキット。Tachyonsを用いると、

div.hoge {
  margin: 1em;
  border-radius: .5rem;
  border-style: solid;
  border-width: 1px;
  padding: .5rem;
}

といった CSS

<div class="ma2 br3 ba1 pa1"></div>

と等価となる。

つまり、Tachyonsは、再利用性が高い豊富なクラス定義を組み合わせることでデザインを構築し、CSSを書く労力を減らすという思想に基づいたツールキットである。Bootstrap などにある高レベルなコンポーネント (フォームやボタンなど)は提供されていない。そういったフレームワークに比べると、 Tachyons はユーザーが自分でデザインする点において低水準であるが、自由度はかなり高いといえる。 また、モジュールの粒度がかなり細かいので必要最低限までファイルサイズの最適化が可能となる。

今週のまとめ / 確率的プログラミング と CPUを作るゲーム

ブログはじめました (2年ぶり)。毎週つぶやいたリンクとか思いついたアイデアとかについてまとめてこうと思います。

続きを読む