係り受け解析して可視化するくんを作った

詳細はGithubのREADME.mdを見て頂ければと思いますが、標準入力で入力した文章を係り受け解析し、有向グラフとして可視化するくんを作りました。 fishの練習がてら言語処理100本ノック 2015でやった内容を使いまわしました。結果は以下のようになります。 (…

GolangでHMAC-SHA256署名する

APIの認証でHMAC(Hash-based Message Authentication Code)を使用したいことがあります。 HMACはその名の通り、あるhash-basedなメッセージ認証符号で、メッセージと秘密鍵をもとに生成されます。 今回はハッシュ関数にSHA256を用いて、HMACしてみます。 実…

GolangでMiller-Rabin素数判定法を実装してみる

背景 Wikipedia にも記載されていますが、 Miller-Rabin素数判定法は 与えられた数が素数かどうかを判定する素数判定アルゴリズムの一種で、乱択アルゴリズムです。 フェルマーテストでは、以下のフェルマーの小定理を用いて 素数判定を行いますが、カーマイ…

Atomでconfig.fishをハイライトさせる

zshからfishに移行している最中にconfig.fishがAtomでハイライトされていなかったのでさせました。 単純に拡張子とscope nameを対応させるだけですが、fishを検索ワードにしてると意外と引っかからなかったのでメモ書きとしてまとめておきます。 事前準備(fi…

GolangでCuckoo Hashingを実装してみた

2017/5/27 修正 int64型であるkeyを[]byte型へconvertする際にhasher.Write([]byte(string(key)))ではうまくいかないため以下のように修正しました。 b := make([]byte, 8) binary.LittleEndian.PutUint64(b, uint64(key)) hasher.Write(b) 背景 BloomFilter…

Golangで有向グラフをかく

背景 言語処理100本ノック 2015をやっている最中に、有向グラフで表示する問題(Q44)に遭遇しました。 gographvizでDOT言語のdotファイルを作成し、graphvizで可視化したのでまとめます。 動作環境 # sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 …

Golangで言語処理100本ノック2015 第4章: 形態素解析

言語処理100本ノック 2015の第4章: 形態素解析の10問です。 前処理 mecabの処理は先に済ませておきます。 # mecab neko.txt -o neko.txt.mecab 30. 形態素解析結果の読み込み 形態素解析結果(neko.txt.mecab)を読み込むプログラムを実装せよ.ただし,各形…

Golangのmath/bigでIntを直接入力したい

背景 Golangの基本型であるint64ではのため20桁程度(※)でoverflowを起こします。そのため、math/bigパッケージのNewIntを使おうとするとoverflowのコンパイルエラーになります。 ※正確には、符号付き64bit整数の最大値9223372036854775807(ギリギリ19桁)を超…

DH鍵交換でもWiresharkでSSL/TLSを復号化したい

WiresharkでSSL通信の中身を覗いてみる を拝見し、実際に自分の手を動かしてみたのですが、記事内でも触れられているようにDiffie-Hellman(DH) key exchange (および楕円曲線を用いたECDH) では、実際に鍵を送り合うわけではなく、鍵を生成するためのパラメ…

2016年度に読んだ本まとめ

年度も変わったので2016年度の一年間で読んだ本をまとめました。 例によって小説とか漫画は数が多くなりすぎるので割愛です。 技術書 GitHub実践入門 ~Pull Requestによる開発の変革 いい加減、GitHub触っておかないとな、と思ったので読みました。 今でもた…

Golangで棒グラフを描く

背景 言語処理100本ノック 2015をやっている最中に、棒グラフで表示する問題(Q37)に遭遇しました。簡単に検索したところ、意外と日本語記事が少なかったので、Gonum Plotを色々触ってみたメモを残しておきます。 packageのインストール Gonum Plotにもありま…

Golangで言語処理100本ノック2015 第3章: 正規表現

言語処理100本ノック 2015の第3章: 正規表現の10問です。 20. JSONデータの読み込み Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ. gist1c2eef5c84cb1bb2f2ffc…

tracerouteで * (アスタリスク)になる理由

背景 「ネットワークがつながらない!」といったトラブルシューティングをしていると、 tracerouteの結果が、以下のように経路の途中で*になる事象によく遭遇します。 今回はIPヘッダやパケットを見比べながら、なぜ*になるのかを見ていきます。 $ tracerout…

dockerで<none>になったimageを一発で削除するシェル芸

タイトルのままですが、docker imagesを見たときにTAGが<none>となってしまったdocker imageをまとめて削除するためのシェル芸です。 シェルも書けるようになりたいなという思いから、練習がてら。 docker images | grep none | sed -E 's/ +/ /g' | cut -f 3 -d '</none>…

Golangでcounting BloomFilterを実装してみた

先日実装したBloomFilter に要素の削除ができるようにcounting BloomFilterを実装しました。 概要 単純なBloomFilter では要素を削除することはできません。 BloomFilterへのマッピングが、削除したい特定の要素によるものか、はたまた別の要素によるものか…

Golangの関数リテラルについてメモ書き

A Tour of GoのFunction valuesを読んでいて、色々勘違いしていてわからなくなってしまったので、手を動かしてわかるようになるまでのメモ書きです。 要旨 勘違いしていたのはA Tour of Goの以下の記載についてです。 関数も変数です。他の変数のように関数…

Golangで言語処理100本ノック2015 第2章: UNIXコマンドの基礎

言語処理100本ノック 2015の第2章: UNIXコマンドの基礎の10問です。 10. 行数のカウント 行数をカウントせよ.確認にはwcコマンドを用いよ. gista7b27f35e5b111f979022b367ef696c4 # wc hightemp.txt 24 48 813 hightemp.txt ReadLine()で一行ずつ読み込み…

GolangでBloomFilterを実装してみた

2018/02/17追記 Goらしくレシーバを使うようリファクタリングしました。 実装が少し変わっていますが、考え方自体は本記事から変わりありません。 リファクタリング後の実装は以下のGithubのとおりです。 github.com 前回調べたBloomFilterをGolangで実装し…

BloomFilterについて調べてみた

BloomFilterとは Wikipedia にも記載されていますが、ある要素が集合に属しているかを検査できるフィルタです。 一番最初に思いつく実装としては、こんな感じでしょうか。 集合の先頭から順に要素を比較していく 途中で見つかれば「属している」 最後まで見…

Golangでソートアルゴリズムのベンチマークを書いてみる

前回はテストを書いたので、今回はベンチマークです。対象アルゴリズムは前回同様、以下7つのソートアルゴリズムです。 バブルソート 選択ソート 挿入ソート シェルソート マージソート クイックソート ヒープソート ベンチマークの書き方 Go言語標準のtest…

Golangでソートアルゴリズムのテストを書いてみる

背景 先日書いた記事 にてクイックソートのバグをご指摘頂きました。 実装中は適当に入力値を変えてソートがうまくできていることを確認していたものの、実装して満足してしまったためにバグが混入していました。 やはり テストはしっかり書かなくてはいけな…

基本的なソートアルゴリズムをGolangで実装してみた

2017/1/14 修正 intelf000さんのご指摘を受け、クイックソートについて、以下のバグを修正しました。 (合わせてsliceが参照渡しであることにも注意し、実装を改めています) [内容] a[left], a[right], pivotが同一の値となった場合に panic: runtime error: …

Golangで言語処理100本ノック2015 第1章: 準備運動

Golangで言語処理100本ノック2015 第1章: 準備運動 言語処理100本ノック 2015の第1章: 準備運動の10問です。 00. 文字列の逆順 文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ. gist09251fc66515bb60f15d58721c08466a rune(int…

Golomb-coded setについて調べてみた

Oku KazuhoさんのHTTP/2の課題と将来を拝見していたらGolomb-coded setなるものが登場したのでいろいろ調べたメモです。 BloomFilterについてもそのうち記事にするかもしれないです。 むしろBloomFilterを先に書くべきでは。 前提、やりたいこと やりたいこ…

「トランプを3枚出してその積を103で割った余りの値の元素をいかに早く言うか」をGolangとMySQLで実装する

背景 こちらのツイートが流れてきたのでgolangで実装してみました。 「トランプを3枚出してその積を103で割った余りの値の元素をいかに早く言うか」 環境 CentOS Linux release 7.2.1511 (Core) mysql Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using E…

SECCON 2016 WriteUp

はじめに SECCON2016に参加しました。 初CTFです。 開催されていることに当日気がついた程度の情弱ですが、 とりあえず手を動かしてみたかったのでチャレンジしてみました。 結果1問解答でした。せっかくなのでwriteup残します。 Vigenère 問題 k: ?????????…

Golangのdeferの処理順序

背景 Jxckさんのgihyo連載 でGoを触っていて、以下の記載を読んで、エラー処理でlog.Fatalとかしていたら実行されないのでどういう仕組なのか遊んだメモです。 先の例ではfile.Close()の関数呼び出しをdeferの後ろに記述すると,この処理がmain()を抜ける直…

Googleクラウド自然言語APIをPostmanで遊ぶ

背景 Googleクラウド自然言語APIを使ってみた を拝読しました。 自分でも試したいと思いつつもGoogle Cloud Platform(GCP)を使ったことがなかったので、せっかくの機会なので触ってみることにしました。 GCPのプロジェクト作成 CCPにログイン後、ホーム画面…

Javaでwavを再生する

背景 Javaで音声ファイルを再生させたくて Javaでmp3を再生する(コード編) を参考に書いていたもののjavax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input fileのエラーが出て手が止まりました。 エラーにも書…

RapidSSLのファイル認証タイプ証明書のクローリングでハマったこと

背景 LINE bot APIが公開されたので遊んでみようということで ドメインも取得したものの、https通信が必須かつ Let's Encryptのような無料の証明書は受け付けてもらえないという 噂を耳にし、ニジモのSSLストアからRapidSSLにて購入することにしました。 証…