読者です 読者をやめる 読者になる 読者になる

ANTLR のターゲットに Go が追加されたので Gogland とあわせて遊んでみる

概要 ANTLR ってのは,いわゆるパーサジェネレーターです. 去年の年末に出たバージョン 4.6 からターゲットに Go が追加されました . かなり昔に使ったことあったんですが,v4 になってだいぶ整理されて洗練された感じになってました. この記事は結構適…

Tips: goa で Consumes 指定したときはデフォルトの Content-Type タイプが読み込まれなくなるので注意

goa はデフォルトで json / xml / gob を受け付けてデコードしてくれるようになっているので特に意識することないと思うのですが,'application/x-www-form-urlencoded' とか,独自のデコーダー作りたいときとかには,Consumes 関数を API の中に書いて指定…

goa で Type と MediaType を混ぜないでうまく再利用する

概要 goa では レスポンスの形式を MediaType で定義します.一方,Type は Payload の形式などを定義します. MediaType は Type の特殊な形で,Veiw とか Link が増えたやつなので,Type の代わりに使えるんですけど, Type の代わりに使うと振る舞いが微…

vaaaaanquishさんの名前を間違えると指摘してくれる slack bot を goa で書く

概要 この記事は Go(その3) Advent Calendar の19日目に間に合わなかった今更ながらの記事です。 goa の紹介のために,slack の Outgoing-Webhooks を使って mattn さんの書かれた 「deeeetさんの名前を間違えると指摘してくれるbot」を goa で書くつもりで…

goa tips: 小ネタ (swaggerドキュメントの抑制とパラメータ必須要素について)

概要 goa のちょっとしたネタです. swagger ドキュメントに出したくない要素を抑制する swagger ドキュメントに出したくない要素を Metadata() を利用して抑制することができるようになりました. 特定の Resource を出力したくなければ Resource() の下で …

goa tips: swagger-ui がサービスできないときのドキュメントどうする問題

概要 goa は swagger ドキュメントを生成してくれるので,これを swagger-ui をつかってサービスしてやると API が分かりやすく,お試しも出来てかなりいいかんじになります.しかし,環境によってはサービスを立ち上げることが出来ないとか,ドキュメントを…

goa の controller を実装する

概要 goa のデザインが出来たら goagen でコードを生成しましょう. コードが生成できたら,次にコントローラ部分を書いていく必要があります.これはビジネスロジックにあたる部分です. というか,goa はデザインを書いて,goagen してコード生成後は,こ…

形態素解析器 kagome を Google App Engine で動かす

概要 kagome を GAE で動かしたいってのをチラホラ耳にしてたのですが,先日ついに issue が投げられたので対応してみました. 正確には UniDic をあきらめて IPADic だけ対応してる kagome.ipadic で動かせることを確認しました. 何が問題なのか? golang …

goa tips : swagger-ui を使って手っ取り早く API を試す

はじめに 折角 API を作ったら,簡単に試して,仕様も俯瞰的に確認したいものです. そんなわけで,今回は開発環境で使える swagger-ui の tips です. swagger-ui は swagger ドキュメントを閲覧するためのサービスを提供してくれます. しかも API コンソ…

goa tips : Type と MediaType を使い分けよう

はじめに MediaType と Type の意味を理解してを適切に使い分けましょう(自戒. よく間違えます.github の issue とか goa の slack channel にもよく質問が上がってます. MediaType はレスポンスの形式 MediaType は Type としても利用できますが,本来…

goa tips : Attribute と Param と Member は同じもの

はじめに API デザインの書き方を一通り説明したので,コントローラーの実装の説明する前に, goa の tips をいくつか取り上げたいと思います. という訳で,Attribute も Param も Member も,すべて Attribute のエイリアス関数で同じものなんです.という…

goa の API デザインの書き方 後編 (Resource と Payload)

概要 goa の API デザインについて,デザインを定義する4つの要素の概要説明の後半です. ✓ API … API サーバの定義 ✓ MediaType … レスポンスデータの定義 Resource … APIが管理するデータへのアクセス方法 / エンドポイントなどを定義 Payload … API に送…

goa の API デザインの書き方 前編 (API と MediaType)

はじめに goa の API デザインについて,デザインを定義する4つの要素について概要を説明します. API … API サーバの定義 MediaType … レスポンスデータの定義 Resource … APIが管理するデータへのアクセス方法 / エンドポイントなどを定義 Payload … API …

goa のインストールと実行

概要 goa は DSL で書かれた API デザインを goa のツールで変換してコードを生成します. そのコード生成ツールは goagen です.まずはこれをインストールして,実際に動かしてみるところまで説明します. 生成されるファイルとか,利用する API デザインに…

goa をはじめよう

はじめに goa ってのは golang で APIデザインを書くと,そこから API サーバのモックとかクライアントとかドキュメントとか一通り生成してくれるマイクロサービス用のフレームワークのことです. とてもすばらしいプロダクトなのですが,goa という名前のグ…

golang: goa勉強会を開催しました

connpass.com goa って何? goa ってのは golang で APIデザインを書くと,そこから API サーバのモックとかクライアントとかドキュメントとか一通り生成してくれるマイクロサービス用のフレームワークのことです. goa は golang のソースとして DSL が書け…

それはたぶんあなたの欲しかった名詞ではない

概要 形態素解析してテキストの中から名詞っぽいところだけを抜き出したい.ってのはよくある話だと思うのですが,単純にやるといろいろ混じってます. ( '-`).oO( そもそも抜き出してるのは名詞の形態素であって,名詞句じゃないもんな・・・. 名詞を抜き…

kagomeでNeologdを無理矢理つかう

概要 サポートしてるわけでもないし,テストしてるわけでもないんだけど,Hackしてくれるひとがいるみたいだからメモ.なにかあったらフィードバックしてくれるとうれしいです. 個人的な考えですけど,今時点でneologdをサポートするのはちょっと躊躇してま…

callbackでiteratorっぽくcommon-prefix search を直したらちょっとパフォーマンスが改善した

はじめに ikawaha.hateblo.jp これの続編です.callback関数を使うようにして,返値でヒープを使わないようにしたらパフォーマンスもちょっと改善しました. 背景 common-prefix search(共通接頭辞検索)とは「電気」「電気通信」「電気通信大学」というキ…

細かすぎて伝わらない「形態素解析器 kagome のメモリ周りの話」を pprof で調べる

はじめに きっかけは形態素解析器 kagome にいただいた Issue です. github.com 端的に言うと, 入力文字列に対して,前から1文字ずつずらしながら辞書引きを繰り返して,可能性のある形態素をすべて洗い出すんですが,その際に辞書を CommonPrefixSearch …

golang で形態素解析を並列実行させて Word Count する

はじめに kagome は goroutine セーフに作ってあるんですが,あんまり並列実行的なサンプルとか書いてないなと思って並列実行でテキストに出てくる名詞を引っこ抜いて数えるサンプルを作りました. あと,昨日 suzuken =san が 形態素解析をした後の品詞が取…

形態素解析結果のグラフをスッキリさせてみた

mecabって「フォード・モーター」を「フォード ・ モーター」(3token)にしたり「フォード・モーター」(1token)にしたりするのねこれは文依存なのか?? 文字(フォードとか)依存なのか??— はせがわ (@shunhase12) 2016年2月25日 こんなつぶやきを見つけた. …

golang で neologd の正規化処理を書いてみた(けどダメだった)

TL;DR neologd を使う前にしておいた方がいい入力の前処理があります. 今回はこれを golang でささっと書いてみようと思ってはまって投げ出した話です. neologd の wiki を参考に必要とされている正規化処理を順に見ていきます. Regexp.ja · neologd/meca…

kagome で UniDic を使えるようにするまでの紆余曲折

相変わらずコツコツ作ってる Pure golang な形態素解析器 kagome ですが,これまで IPA 辞書しか使えなかったんですけど,UniDic も使えるようになりました. バイナリサイズは若干大きくなりますが,辞書内包にしているので,「使ってる辞書何だったけ?案…

github の tag を削除する

メモ github でタグはつけられるけど,削除するのは手元でやって push するしかない? git push --delete origin v.1.2.0 みたいにする.

heroku に pure golang な形態素解析サーバをあげてみた

はじめに とりあえずやってみたという内容です.heroku 使うのも初めてなので,用語とか理解とかが違うところもあるかもしれませんが,作業ログがなにかの役に立てば幸いです.ツッコミあればお願いします! 前準備 heroku のアカウントをつくっておく必要が…

golang で勝手にさだベントカレンダー

はじめに これは,さだまさし x IT Advent Calendar 2015 - Qiita の17日目の記事ではありません. とても盛り上がってたので,golang で何かして投稿しようと思ったら,すでに埋まってしまっていました orz. そんなわけで勝手に「さだベントカレンダー」で…

golang で正規表現の必須要素を抽出してみる

はじめに この記事は Go Advent Calendar 2015 14日の記事です. 正規表現の必須要素の抽出についてお話ししたいと思います.古典的な話題ですし,鋭い方は golang と別に関係ないんじゃないの?と思われるかもしれませんが,最後に Russ Cox 氏の素晴らしい…

golangで bufio.Scanner を使うだけで日本語の文を1文ずつそれとなく切り出す

日本語のテキストから文ぽいところを抜き出すためのプログラムを作りました. いつも1行ずつ文字列を切り出すときに bufio.Scanner を使っていると思いますが, Scanner は区切りの方法をいろいろ変えることが出来る(標準でもスペースで切り分けられた単語…

TinySegmenter.jl の高速化手法を追っかけてみた

今日の元ネタはこちらです. chezou.hatenablog.com 他言語との比較が行われているわけですが,Julia 版はアルゴリズムの作りが他とだいぶ変わってしまっているので, そのまま比較するのはどうかなと思うわけですが,でも,Julia が書けるわけでもないので…

time.Tick() を for ループの中に書いてはいけない

time.Tick(3 * time.Second) と書くと,3秒ごとにお知らせしてくれるチャンネルを返してくれます. 一定時間間隔で何かをチェックしたいときには便利ですよね.select と組み合わせて使います. package main import ( "fmt" "time" ) func main() { for { s…

手元のPCで動かせる slackbot を作って遊ぶ (3)

前回:手元のPCで動かせる slackbot を作って遊ぶ (2) 前回用意した bot だと,websocket からメッセージが来るまで待機しちゃうので, 3時になったら「おやつだよー」と知らせてくれる機能を入れようとすると,どうもしっくりきません. websocket からのメ…

手元のPCで動かせる slackbot を作って遊ぶ (2)

前回:手元のPCで動かせる slackbot を作って遊ぶ (1) 前回は,大まかな流れを説明しました. 今回は,token の取得の方法,チャンネルやユーザー情報の取得,やりとりするメッセージの構造なんかを 説明したいと思います. 説明範囲の参考実装は,こちらに…

手元のPCで動かせる slackbot を作って遊ぶ (1)

今回の元ネタはこちらです: www.opsdash.com 前々から slack bot を立ち上げて遊んでみたいとは思ってたんですが, どっかにサーバ借りて・・・とか考えるとなかなか面倒で遠ざかってました. 実は,slack には Real Time Messaging API という WebSocket …

形態素解析器 kagome のリファクタリングをしました

github.com pure golang な辞書内包型形態素解析器 kagome のリファクタリングをしました. v1.0.0 タグを振ってリリースしてあります 4月あたりからコツコツやってはいたんですが,なかなか時間が取れなくてすっかり夏も終わってしまいました. 今回のテー…

アイコンをくるくる回すやつ

mattn さんの猫アイコンを回すやつ. mattn/nekokakgithub.com 自分のアイコンも回してみたかったんだけど,減色の処理が端折られてたので悲しい感じに.gif アニメは256色(!)までしか使えないっぽいんだけど,こいつを web safe color に落とし込んでるので…

メモ:golangでひらがなをカタカナに変換する

備忘メモ.こちらを参考にさせていただきました.(というかそのままなので,元記事をあたってください) Go言語で文字列の変換(全角・半角、ひらがな・カタカナ)をする : Serendip - Webデザイン・プログラミングwww.serendip.ws CaseRange で変換する元の…

1binary 自己完結型の 形態素解析器 kagome を 作ってみた話

GoCon 2015 Summer の発表スライドです.

「たぶんみんな間違えてる golang の HTTP Respose Body の閉じ方」は間違えてる

結局 golang の HTTP Response Body はどう閉じるのが正しいのか? - 押してダメならふて寝しろ でいろいろ考察して参りましたが, mattn さんが Russ Cox さんに聞いてくださって解決しました. resp.Body.Close の件、Russ Cox から返事貰った。err が返る…

結局 golang の HTTP Response Body はどう閉じるのが正しいのか?

さっそくカウンター記事を頂きました.ありがとうございます! たぶんみんな間違っていないgolangのHTTP Respose Bodyの閉じ方 - Qiitaqiita.com たしかに必ず閉じてるように見えます.エラーがあっても Body が non-nil なら閉じるようにコード仕込んでおく…

たぶんみんな間違えてる golang の HTTP Respose Body の閉じ方

元ネタはこちらのブログ. 50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs あまりにも衝撃的でした.HTTP Response の Body を閉じるとき,たぶん,みんなこう書いてると思うんだけど, 誤)エラーがないかチェックしてから閉じ…

メモ:goquery の EachWithBreak

概要 goquery の Each は目的のものが見つかってもループを切り上げないが,EachWithBreak なら適当なタイミングでループを切り上げられる. コード doc.Find("select#my_selection").Find("option"). EachWithBreak(func(_ int, s *goquery.Selection) bool…

golang の httptest のサンプル

概要 防備メモφ(..) ハンドラで何も指定していない場合はステータスコード200が返る. サンプル package main import ( "fmt" "net/http" "net/http/httptest" ) func main() { mux := http.NewServeMux() mux.HandleFunc( "/hello", func(w http.Response…

golang でテスト用のサーバを立ててクライアントのテストする

概要 golangならwebサーバにアクセスするようなクライアントがすぐかける! ・・・んだけど,テストどうしよう.というお話のメモ. net/http/httptestというパッケージが用意されているのでこれを利用すればダミーのテストサーバを立てて,そこへのアクセス…

モンキーパッチのライブラリを使って,golang のメソッドを差し替える黒魔術を使ってみた

モンキーパッチというのは,オリジナルのソースコードを変更せずに実行時にコードを拡張したり変更したりする手法のことです.動的言語で見かけるようなモンキーパッチを golang でもやってのけることができます(って,そういうライブラリを作っちゃった人…

golang で map の key を interface{} にするとリンゴが赤いのとオレンジが赤いのとを区別できる

map の key に interface{} を渡すパターン. こうしておくと key に型を含められるので,同じ文字列を突っ込んでも区別できます. 型のスコープもあるので,map 自体はをグローバルに公開していても中のデータを局所的に扱えていい感じです. golang は型を…

go install ...

φ(..)メモメモ go install cmd/foo/baa/... ではうまくいかなくて, go install ./cmd/foo/baa/... だとうまくいく.

φ(..)メモ:Gunosy Go利用の現状確認会(Gunosy.go#11)

防備 φ(..) メモなので分かってないとことか勘違いしているとことかありあり. スライド 発表 概要 1 Gunosy APIチームGo開発フロー // Speaker Deck 1月にjoinされた"きょこみ"さんの発表.環境整備からデプロイ・運用まで 2 神に近づくx/net/context (Fi…

golang でどうしても文字列のポインタが欲しいとき,たいていは何か間違っているんだが,それでもポインタが必要なときもあるという釈然としない気持ち

golang で文字列のポインタが欲しい! そう感じたとき,だいたい何か間違ってます. 参考:Goでxxxのポインタを取っているプログラムはだいたい全部間違っている でも,時々どうしてもポインタが欲しくなるときがあります. たとえば ORM ライブラリ gorm の…

転職しました

Goで求人なんてあるのか:パシフィックポーター株式会社『【リモート勤務可】ヘアサロンの予約一元管理システム「かんざし」を Go言語で開発するエンジニアを募集!』#forkwell http://t.co/AkC6fEJsBB— ikawaha (@ikawaha) 2014, 11月 4 なんて呟いてた僕で…