ルーター自作本を試す環境をnetnsの仮想ネットワークで実現する

ルーター自作でわかるパケットの流れ/小俣 光之を読みました。 本文にほとんどがソースコードのためひたすら写経しました。 ちなみに後半に差し掛かったあたりで気づいたのですが、サポートページでソースコードは公開されています。 「せっかく書いたのだか…

【Golang】DFS(深さ優先探索)による有向グラフのcycle detectを実装する

【Golang】DFS(深さ優先探索)による無向グラフのcycle detectを実装する - 逆さまにしたの続きで、今度は有向グラフのcycle detectです。 Detect Cycle in Directed Graph Algorithmを視聴したので、実装してみることにします。 有向グラフにおけるDFSによる…

sliceとmapのdelete(+make)はどちらが速いのか

Golangでmapとsliceどちらが速いのかに引き続いて、要素を削除する場合のベンチマークを取ってみる。 やり方 slice メモリリークしないようにSliceTricksにある以下の方法で要素を削除する。 copy(a[i:], a[i+1:]) a[len(a)-1] = nil // or the zero value o…

【nsdi'18論文】Stateless Datacenter Load-balancing with Beamerを読んだ

2018年4月9日〜11日に開催されていたnsdi'18で Community Awardに選ばれたStateless Datacenter Load-balancing with Beamerの論文を読んだのでメモ書きを残します。 こちらで発表も見れます。 自分の理解の範囲で記載しているので、詳細や正確性を求める方…

【Golang】DFS(深さ優先探索)による無向グラフのcycle detectを実装する

前回のDisjoint-set algorithmに引き続き、Cycle in Undirected Graph Graph AlgorithmのDFSによるcycle detect実装してみます。 前回は、自作のgraphパッケージを使いましたが、グラフの持ち方(データ構造)も検討しながらまとめたいと思います。 DFSによるc…

Golangのmapとsliceはどちらが速いのか

GoのパフォーマンスTipsメモにインデックスアクセスについて、以下のように述べられている。 mapのインデックスアクセスはsliceの数十倍遅い。 100件以下の場合バイナリサーチでsliceから目的の値を探すほうが早い。 100要素超えくらいからmapのアクセス速度…

ビットコインとブロックチェーン:暗号通貨を支える技術を読んだ

Mastering Bitcoinの邦訳であるビットコインとブロックチェーン:暗号通貨を支える技術/アンドレアス・M・アントノプロス (著), 今井 崇也 (翻訳), 鳩貝 淳一郎 (翻訳)を読みました。 Blockchainのバイブルと名高い本書ですが、その評判に違わない内容でした…

Golangで言語処理100本ノック2015 目次

言語処理100本ノック 2015を完走したので、目次として各記事へのリンクをまとめました。 Golangで言語処理100本ノック2015 第1章: 準備運動 Golangで言語処理100本ノック2015 第2章: UNIXコマンドの基礎 Golangで言語処理100本ノック2015 第3章: 正規表現 Go…

Golangで言語処理100本ノック2015 第10章: ベクトル空間法 (II)

言語処理100本ノック 2015の第10章: ベクトル空間法 (II)の10問です。 第10章では,前章に引き続き単語ベクトルの学習に取り組む. 90. word2vecによる学習 81で作成したコーパスに対してword2vecを適用し,単語ベクトルを学習せよ.さらに,学習した単語ベ…

【Golang】Ward法で階層的クラスタリングするパッケージを書いた

背景 言語処理100本ノックのQ98を解くにあたって、Go実装がなかったので実装し、goClusteringというパッケージにしました。k-meansもQ97で実装したので、将来的には他のクラスタリングアルゴリズムも統合するかもしれません。 概要 内部的には、階層構造を二…

Golangで言語処理100本ノック2015 第9章: ベクトル空間法 (I)

言語処理100本ノック 2015の第9章: ベクトル空間法 (I)の10問です。 enwiki-20150112-400-r10-105752.txt.bz2は,2015年1月12日時点の英語のWikipedia記事のうち,約400語以上で構成される記事の中から,ランダムに1/10サンプリングした105,752記事のテキス…

GolangでIBLTを実装してみた

前回の記事では、IBLTの概要について記載しました。 今回はIBLTのデータ構造と実装について記載します。 なお、使った図などはこちらにスライドとしてまとめています。 データ構造 IBLTは以下のようにm個のcellを持ちます。 各cellには、count、keySum、valu…

Bitcoin Cashのブロック伝搬速度を10倍にするGrapheneで使われているInvertible Bloom Lookup Tables(IBLT)について調べてみた

Bitcoin Cashのブロック伝搬速度を10倍にするという話もあるGrapheneでも使われている Invertible Bloom Lookup Tables(以下、IBLT)について調べました。 背景 IBLTはもともと集合一致などで使われるデータ構造です。ブロックチェーンに限った技術ではありま…

Atom gotestsでレシーバがあったときにテストが自動生成されないバグを直した話

Atom gotestsでレシーバがあったときにテストが生成されないバグを直した話 少し前に以下のツイートをし、Atom pluginのgotestsを使って ユニットテストの自動生成をしてました。 goのテスト自動生成ツール。めっちゃ便利。すごい。https://t.co/15Fd5sq2VI—…

【Golang】gobで変数をファイルに保存する

gobは、Go専用のバイナリシリアライズフォーマットです。 シリアライズフォーマットとしては、Protocol Buffers1がデファクトでしょうし、Go専用のgobは他の言語で扱えず、使い勝手としても難しいところです。 しかし、Goしか使っていないような環境で、変数…

Visual Studio Codeをインストールするときにやったこと

AtomからVScodeに移行したメモです。 自分しか使ってないようなkey-bindとかもありますが、 同じように設定に困ったら参考にしてください。 カラーテーマ Atom One Dark Theme 表示関連 goのソースコードのみタブを半角スペース2つへ "[go]": { "editor.inse…

ブロックチェーンアプリケーション開発の教科書を読んでハマったところメモ

ブロックチェーンアプリケーション開発の教科書 / 加嵜長門(著), 篠原航(著), 丸山弘詩(編集)を読みました。 仮想通貨の基礎知識、事例:1-5章 Ethereumのスマートコントラクト実装:6-8章 今現在議論となっているトピック、これからブロックチェーンがどう…

【Golang】Disjoint-set algorithmによる無向グラフのcycle detectを実装する

Cycle in Undirected Graph Graph Algorithmを視聴したので、Disjoint set algorithmによるcycle detect実装してみます。 Disjoint set algorithmでは、以下3つの操作を使うことでcycle detectを行います。 MakeSet 各nodeだけの集合を作る(初期化) Union 2…

【Golang】reflect.DeepEqualでsliceとmapを組み合わせて比較する

先日、集合や族を扱うパッケージを書いていたところ、mapやsliceが混じった構造でどのようにEqualを実装するかで少しハマりました。reflect.DeepEqualの実装を見て解決したので備忘として整理します。 ちょうどGoで違うmapであることをテストする でも、同じ…

Golangでgraphパッケージを書いた

グラフ理論のアルゴリズムで遊ぶための前準備として、graphパッケージを自作してみました。 基本的な操作として、以下ができます。 無向グラフ/有向グラフの生成 頂点(Vertex)の追加/削除 辺(Edge)の追加/削除 How to Install $ go get github.com/cipepser/…

【Golang】LINE Notifyで画像を送る

先日の記事では、LINE Notifyでメッセージを送りました。 今回は画像を送ってみます。 少し検索してみても、メッセージを送る記事ばかりで画像を送るのはあまりないですね。 LINE公式のSDKでもimageFileで検索しても、実装されていないようなので、自分で実…

歴代の年始め最初に発表されたCVE(1999〜2018)をスクレイピングする

Googleスプレッドシートでのスクレイピングがとても便利なので、 題材としてNISTから1999年以降毎年最初に発表されたCVE(CVE-yyyy-0001)の descriptionを抜き出してみました。 やり方 IMPORTXML関数を使うだけです。簡単かつ強力でした。 フォーマットはIMPO…

【メモ】仮想通貨のハッシュ関数に求められる性質について

自分の頭の中を整理するために調べたり、考えたりしたメモ書きです。 備忘としてこちらに残すことにします。 全射性/単射性について 順列の最小完全ハッシュ関数に書いてあるように、全射性も単射性も必須ではない。 全射 def: が全射 射影した先(上記のB)…

GolangでFacebook feedを取得するSDKを書いた

bot作りに精を出している今日このごろ、Facebookのfeedが更新されたら通知するbotを作ろうと思い、自分用のfeed取得SDKを作ったので使い方をまとめます。 今のところGetFeedという関数しかないです。 Install どちらも自作になってしまいますが、以下2つをgo…

GolangでLINE Notify

LINEのBOTをDeveloper Trialのときに遊んで以来、ご無沙汰だったのですが、改めてLINE Notifyを試したらものすごく手軽でした。 ぐぐってみるとherokuにデブロイする系の記事が多いのですが、HTTPでPOSTするだけで通知できるので、備忘がてら手順をまとめた…

Karabiner11.4.0で「ctrl+かな」を「ESC」にバインドする

Karabinerを11.4.0にアップデートしたら、今までprivate.xmlに設定してきたkey bindingsが使えなくなってしまいました。公式のマニュアルやKarabiner-Elementsの設定項目をまとめましたを参考にしながら、「ctrl+かな」を「ESC」にバインドする設定をしたの…

KarabinerのSimple Vi ModeをHigh Sierraでも使う

Karabinerが使えなくなると聞いていたので、ずっとHigh Sierraにアップデートするのを渋っていたのですが、ついにアップデートしました。渋っている間に対応が済んでおり、Simple Vi Modeも使えたので、設定方法をまとめます。 環境 macOS High Sierra ver 1…

Golangでx-www-form-urlencodedのリクエストを投げる

やりたいことはタイトルそのままです。 parameter=hogeをhttpでPOSTする方法は以下です。 form := url.Values{} form.Add("paramter", "hoge") body := strings.NewReader(form.Encode()) req, err := http.NewRequest("POST", "https://example.com", body)…

Golangのnew()とmake()の違い

この記事は Go (その3) Advent Calendar 2017 の5日目の記事です。 本記事では、変数の宣言に用いられる組み込み関数new()とmake()の違いについてまとめます。 まとめ さっそくですが、違いを表にまとめます。 new(T) make(T) 対象 任意の型 slice, map, cha…

go tool compileの使い方

少し試したものの、忘れそうなのでメモ書きとして残します。 サンプルコード package main import "fmt" func main() { fmt.Println("hello world") } オブジェクトファイルの生成 -Sが1つだと標準出力のみです。2つだと.oファイルが生成されます。 $ go too…