ねぇうしくんうしくん

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

今週のまとめ (2017/4/21)

今週のまとめのリンクは iCloud のメモ帳で管理しています。iPhone からの保存が楽なので…

プログラミング言語

cmacro – Lisp macros for C

github.com

C言語で高機能な衛生的マクロを実現する(前)処理系。記法は sweet.js (JSにマクロを導入するもの) ( の以前のバージョン *1 ) のものに近い。

Why ML/OCaml are good for writing compilers?

Why ML/OCaml are good for writing compilers

なぜ ML や OCamlコンパイラが書かれているかの理由についての投稿。1998年の文章だが、2017年の今でもそれらコンパイラの実装言語としてよく使われており、その理由はここに書かれているものとほとんど変わらないと考える。

目次?: 1. ガベージコレクション 2. 末尾再帰の最適化 3. MLのデータ型はコンパイル処理において扱いやすい。 4. MLのデータコンストラクタは AST の扱いを楽にする。 5. 安全性 6. MLは再帰的構造が特徴である問題領域(定理証明等)に対して設計された 7. 例外 8. 型推論 9. 構文解析器ツールキットの存在 (yacc/lex/burg) *2 10. 実行速度 11. サポート *3 12. ライブラリ 13. モジュールシステム

Ruby 2.4 のハッシュテーブル高速化を理解する

Ruby 2.4 のハッシュテーブル高速化を理解する // Speaker Deck

題意の通り。ハードウェアでのデータの局所性に着目し高速化を行ったとのこと。

機械学習

Paperspace Machine Learning

www.paperspace.com

機械学習(主に深層学習)に特化したクラウド計算サービスで、GPUを提供している。時間毎課金。競合として AWS [pg]2.xlarge との比較表が載っている。*4

インフラ

aws-fpga

github.com

AWS には FPGA を提供する F1 インスタンス ( https://aws.amazon.com/jp/ec2/instance-types/f1/ ) がある。これはそのための HDK (Hardware Development Kit) と SDK。合成の部分は vivado を使っているのでライセンス?が必要。

AWS Codestar

New- Introducing AWS CodeStar – Quickly Develop, Build, and Deploy Applications on AWS | AWS Blog

AWS 上でのアプリケーションに対する統合された コード管理 & CI サービス。

  • EC2, Lambda などのいろいろなサービス・言語に対応
  • Django や Express (Node) などの blueprint からすぐにアプリケーションを作れる。
  • AWS上でのコード管理、テスト、デプロイの一元管理が可能。
  • Eclipse や VS、JIRA との連携。

が注目すべき点。

アルゴリズム

500 Data structures and Algorithms interview questions and their solutions

500 Data structures and algorithms interview qu... - Techie Delight - Quora

プログラマの採用面接で聞かれるような、アルゴリズムとデータ構造に関する一問一答集。それぞれの問いには、時間・空間計算量別に複数の回答(C/Java)が載っている。

Competitive Programmer’s Handbook

Competitive Programmer's Handbook

IOI や ICPC に出場する学生に向けた競技プログラミングの無料 e-book。グラフアルゴリズムが三章のうち一章まるごと割かれている。

類似した競技プログラミングの本(で無料に手に入るもの)としては、 Competitive Programming Book Companion Website がある。(一部有料)

その他

Nintaco - NES Emulator

Download Nintaco

NESエミュレータ。C, C#, Java, Lua, PythonAPI が提供され、メモリや入出力などが制御できる。例えば、ゲームのAIを作るなどの用途が考えられる。

Kakoune Code Editor

kakoune.org

VimにインスパイアされたTUIのエディタ。Sublime Text にあるような Multiple Selection や 複数人で編集する Collaborative edit などが主な機能となる。Vim のモードの概念や hjkl による移動等の一部のキーバインドなどが継承されている。今後少しずつ使ってみて慣れてきたら記事を上げたいと思う。

*1: 0.x 系列。現行の sweet js は AST を operational に変換するような設計になった

*2: よくわからなかった

*3: これは時代を反映していると思う(開発元の研究所からの手厚いサポートがあったと書かれている)。だが、今では OCaml の大きな(ユーザー|開発者|研究者)コミュニティが存在するのでサポートに関しては(別の観点ではあるが)今でも通用する。

*4: これインフラカテゴリでも良かった

今週のまとめ (2017/4/14)

すた丼

プログラミング言語

Dale - Lisp Flavored C

github.com

Lisp のような S式で記述されたコンパイラ型言語。Lisp風Cとあるが、C言語へのトランスレータではなくLLVMをバックエンドとしている。 また、macro や module や concept などの C言語を超えた言語機構もある。

LowLevelProgramming-University

github.com

低レベルプログラミングについての資料集。 アセンブリC言語、ハードウェア、ファームウェアLinuxカーネルデバイスドライバなどの資料が載っている。

Functional Language Research Compiler

github.com

Intel製の関数プログラミングコンパイラフレームワーク。これを用いると

[GHC フロントエンド] 
↓ Ext Core
[HRC (Haskell Research Compiler)] 
↓ MIL IR 
[FLRC] 
↓ C files 
[Intel C Compiler] → Executable binary

のようにしてCコードが出力され、iccコンパイルされるらしい。

セキュリティ

Detecting ROP with statistical learning of program characteristics

blog.acolyer.org

ROP( Return-oriented programming - Wikipedia )検出の手段として統計的手法が用いられることがあり、そこでは異常検知による物が多いが、新たな統計的尺度を用いることによって検出率を改善した…という論文をまとめているブログ記事。

人工知能

Best Practices for Applying Deep Learning to Novel Applications

[1704.01568] Best Practices for Applying Deep Learning to Novel Applications

ディープラーニングを実際のアプリケーションに応用するためのベストプラクティス集。論文の最後には実際の応用例として arXiv のリンクが会ってうれしい。

以下の流れで説明されている

  1. 準備を行う。
  2. データを準備する
  3. 作りたいアプリケーションに対して、それに近いディープラーニングのアプリケーションとの類似点を見つける
  4. 最小限のベースモデルを作る
  5. 可視化やデバッグツールを作る
  6. モデルのチューニングをする
  7. エンドツーエンドの学習、あるいは学習器の組み合わせなど

今週のまとめ (2017/4/7)

プログラミング言語

[Rust] Building Realtime APIs in Rust

Building Realtime APIs in Rust – Robert Lord

Rust を用いたネットワークプログラミング、フレームワークを用いて 認証システムやリアルタイムAPIを構築するデモ。

[JavaScript] BitArray.js

github.com

1bitのフラグデータを配列して32bit数値などにパックするビット配列の実装。通常の配列を用いるより高速 (約1.54倍) で メモリ効率は著しく良い (98.75%の削減)

[JavaScript] Using the Chrome devtools new code coverage feature

blog.logrocket.com

Chrome Canary の DevTools にコードカバレッジ計測ツールが公開された。これにより環境構築不要で簡単にカバレッジ計測ができるようになりかなり嬉しい。この関連記事には他の DevTools の機能が紹介されているのでそちらも見るとタメになる。

0.30000000000000004.com

0.30000000000000004.com

ドメイン名で出落ち感があるが、各言語(41個)での浮動小数点計算での計算誤差の違いをまとめた資料となっている。

アルゴリズム

Interesting data structures: the BK-tree

http://signal-to-noise.xyz/post/bk-tree/

距離空間でデータのインデックス化を行うデータ構造である、BK木についての解説。レーベンシュタイン距離を使うと文字列の効率的な検索に使えるようで、この記事もその実例とコードを示している。

機械学習

arxivist

arxivst.com

arXiv に投稿されるマシンラーニング関連の論文のキュレーション。説明を読む限り人力で選択・要約を行っている。

数学

Higher-Dimensional Categories: an illustrated guide book

http://cheng.staff.shef.ac.uk/guidebook/guidebook-new.pdf

高次元圏(高階圏) についての解説。図が豊富に使われており丁寧だが、話題自体は難解なので読むのには力がいる。

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

プレミアム華金。

プログラミング言語

Alpaca Lang

github.com

ML(Meta Language)に似た正格静的型付言語。ErlangVM (BEAM) 上で動くのが特徴。ロゴが可愛い。

[Rust][C++] Rust from a C++ programmer’s perspective

omtcyfz.github.io

Rust の人気がアツい。以前に 関数型プログラマーのためのRust を紹介したが、これは C++ ユーザー向けの比較。

Articulate Lisp

articulate-lisp.com

Common Lisp を勉強するときに便利な本やサイトなどのリソース集。

AI

Stochastic Program Optimization

blog.acolyer.org

確率的プログラム最適化 *1 についての論文についてのまとめと解説。ディープは使われていない。

RankPL

github.com

確率モデルの表現と推論をする言語。

Logic Production Systems (LPS)

bitbucket.org

「Logic Production System」は、命令型プログラミング言語の特性と、宣言型データベースおよび知識表現言語の特性を組み合わせた新しいコンピュータ言語です。

とのこと。

数学

AsciiMath

AsciiMath

数式を表記するための新しいフォーマットとそのMathJaxプラグイン。従来のTeX表記に比べ、シンプルで可読性にすぐれている。例として sum_(i=1)^n i^3=((n(n+1))/2)^2 といった感じで書ける。

類似したプロジェクトにMathifyというのもある、こちらのほうがよりミニマルか。 www.mathifyit.com

*1:確率的最適化ではない (手法としては使われている?)。 確率的 + プログラム最適化(コンパイラがやる仕事)

今週のまとめ (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のツイートしたリンクからスクレイピングし自動で追加するということもできる。

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