ikawahaのブックマーク (190)

  • vaaaaanquishさんの名前を間違えると指摘してくれる slack bot を goa で書く - 押してダメならふて寝しろ

    概要 この記事は Go(その3) Advent Calendar の19日目に間に合わなかった今更ながらの記事です。 goa の紹介のために,slack の Outgoing-Webhooks を使って mattn さんの書かれた 「deeeetさんの名前を間違えると指摘してくれるbot」を goa で書くつもりで, 去年のアドベントカレンダー用に進めてたネタだったんですが, slack が投げてくるデータの形式が分からなくて頓挫していたのを最近解決したので,今更ながらに書いてみました. slack で vaaaaanquish さんの名前を間違えると指摘してくれる bot を作ります. おことわり これはいわゆるネタですので,slack-bot を goa で作るのをおすすめしている訳ではないことにご注意ください. goa の機能の一端を例を通しながら見ていただければ幸いです. vaaa

    vaaaaanquishさんの名前を間違えると指摘してくれる slack bot を goa で書く - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2017/01/11
    書いた
  • Coursera の Algorithms on Strings 受けました - たにしきんぐダム

    Cousera の Algorithms on Strings を受講していて、平日にお昼ご飯べながらビデオを見たり休日とかに課題をやったりしていたのですが先日完走しました!(講義は4週分なのですが忙しかったり難しかったりで2ヶ月くらいかかってしまった) お金を払うと課題提出システムみたいなのが使えて提出したプログラムの時間/空間計算量を教えてくれるらしいけど無料でも授業ビデオと資料にはアクセスできた めちゃくちゃ良かったのでみんなも受講しましょう www.coursera.org きっかけはアルバイト先で開催されていたのに参加させてもらったのと、 ISUCON6予選で高速な文字列マッチングアルゴリズムが全く分からず悔しい思いをしたから(正規表現の更新・キャッシュをうまく頑張れば十分な点数は獲得できたみたいですが...)でした。 学んで終わりじゃ多分忘れるから何とか応用とかできたら良い

    Coursera の Algorithms on Strings 受けました - たにしきんぐダム
    ikawaha
    ikawaha 2017/01/05
  • 文字列アルゴリズムの学びかた - Hatena Developer Blog

    こんにちは!はてなアプリケーションエンジニアの id:takuya-a です。 みなさんは、このような疑問をもったことはありませんか? grep はどのように文字列を検索しているのか? MeCab はどうやって辞書を高速にルックアップしているのか? パーサやコンパイラを作りたいけど、何から始めればいいのか? 稿では、「文字列アルゴリズムとはどんなものなのか?」「なぜ重要なのか?」「何を知っておくべきか?」「どうやって勉強すればいいのか?」といった疑問にお答えしていこうと思います。 文字列アルゴリズムの意外な応用や、モチベーションを保ちやすい勉強のしかた、文字列アルゴリズムを勉強するために行った社内での取り組み、実装するときのコツといったトピックについても触れています。 このエントリは、はてなエンジニアアドベントカレンダー2016の22日目の記事です。昨日は id:syou6162 さんに

    文字列アルゴリズムの学びかた - Hatena Developer Blog
    ikawaha
    ikawaha 2016/12/22
    文字列🙌
  • goa でデザイン・ファーストをシュッとする - Qiita

    はじめに この記事は Go(その3) Advent Calendar の19日目の記事です。 goa.design(以下 goa)の紹介をしたいと思います。 goa は APIデザインを書くと、そこから API サーバのモックとかクライアントとかドキュメントとか一通り生成してくれるマイクロサービス用のフレームワークのことです。 goa は APIデザインを書いて → レビュー → 実装 → デザイン見直し → ・・・ とサイクルを回して開発するプロセスをとれるようにできています。まずは API デザインを書くことで見通しよく進めよう、というのが goa を利用する際の設計方針です。 とてもすばらしいプロダクトなのですが、goa という名前のググラビリティが非常に悪く、なかなか広まらないなーと記事を書いたりしてました。最近、ちょっとずつですが goa のよさが広がってきていて(?) Adve

    goa でデザイン・ファーストをシュッとする - Qiita
    ikawaha
    ikawaha 2016/12/19
    書いた
  • goa tips: 小ネタ (swaggerドキュメントの抑制とパラメータ必須要素について) - 押してダメならふて寝しろ

    ikawaha
    ikawaha 2016/12/18
    書いた
  • Swagger 定義から goa の design を生成する ago という CLI を作りはじめた - tchsskのブログ

    これは Go (その2) Advent Calendar 2016 の 17 日目の記事です。 ここ半年ほど goa というフレームワークを気に入って使っているのですが、思うところがあって goa に関連する ago という CLI を作りはじめました。この記事では、簡単な goa の説明から、今回の開発に至った経緯と、このツールで行えることについて記述します。 goa とは Go でマイクロサービスな Web API を作るためのフレームワークです。 github.com goa の DSL で design と呼ばれる定義を書いたら、 goagen というジェネレータを使ってサーバやクライアントなど各種のコードを生成することができます。毎度リンクを貼らせて頂いているのですが @ikawaha さんによる連載記事が当にオススメです。 ikawaha.hateblo.jp goa 流行ら

    ikawaha
    ikawaha 2016/12/18
    すごすぎる / design を構成する DSL の 1/3 程度は既にサポートしているので既存の Swagger 定義がある場合は goa 導入の助けになると思います。鋭意開発中なので近日中にすべての DSL がサポートされる予定です。
  • これからMicroservicesな開発をするならgoaがおすすめという話 - Qiita

    実際にMicroservicesを作る場合の話 必要な要件を並べてみましたが、自分のチームの場合、実際は上記の多くはApplication側で解決せずAWSGCP、その他SaaS, PaaSの提供する機能で解決するようにしており、例えば下記のように対処可能です。 Load balancingはAWS ALB Message QueueはAWS SQS TracingはAWS Xray などなど。 とすると、Microservicesを開発する上で大切になってくるのは、チームが多くのAPIとやり取りするその過程を円滑にすることだと考えており、過去はそこをswaggerで記述してAPIデザインをレビューし合うことで解決しておりました。 ただし、課題としてAPIドキュメントを作成するフローと実際にAPIを作るフローが一連の流れにならない、ツールとして別々な世界の話になっているため、ドキュメント

    これからMicroservicesな開発をするならgoaがおすすめという話 - Qiita
    ikawaha
    ikawaha 2016/12/17
    goa いいよ.goa.
  • 「ATOK」に“AI”を初搭載! 誤変換率を30%改善 | AERA dot. (アエラドット)

    ジャストシステムが「ATOK 2017」を発表したこの記事の写真をすべて見る 日発の日本語入力システム「ATOK」がさらなる進化を遂げる――「ATOK」を開発・販売するジャストシステムが12月1日、新製品発表会を開き、「ATOK 2017」やワープロソフト「一太郎2017」などの新製品群を来年2月3日に発売することを発表した。 「ATOK 2017」では機械学習機能に初めて「ATOKディープコアエンジン」と呼ばれるAI技術を採用した。これにより前作の「ATOK 2016」に比べ誤変換率が30%改善したとしている。「ディープラーニング」と呼ばれるAI学習機能を取り入れることで、同音異義語ごとの出現確率や、前の単語との距離を考慮した組み合わせの確率を総合的に計算することが可能となり、より自然な文節区切りでの変換を実現した。 例えば、これまで「さいしんもでるもでる(最新モデルも出る)」と一度に

    「ATOK」に“AI”を初搭載! 誤変換率を30%改善 | AERA dot. (アエラドット)
  • GoでSSHサーバにラインエディタが欲しいなら golang.org/x/crypto/ssh/terminal - Qiita

    はじめに GoはSSHサーバを書くのもかんたんです。ほとんどの場合、あなたのSSHサーバはユーザからのコマンド入力を受け付けるものでしょう。その場合、キー入力の列を文字列に変換するラインエディタと呼ばれるものが必要になります。Goではgolang.org/x/crypto/ssh/terminalがそれです。 SSHサーバを書く SSHサーバを書きましょう。GoでSSHサーバを書くにはgolang.org/x/crypto/sshを使います。 ここでは例として入力行を送り返すだけの単純なSSHサーバを考えます。120行ほどあるので、読み飛ばしてもらってかまいません。重要なポイントは以下の3点だけです。 プロンプトを表示する w.WriteString(prompt) ユーザの入力行を受け取る l, _, err := r.ReadLine() 入力行を送り返す w.WriteString(

    GoでSSHサーバにラインエディタが欲しいなら golang.org/x/crypto/ssh/terminal - Qiita
    ikawaha
    ikawaha 2016/12/02
    自分で書いたものと同じのが golang.org/x/ 以下にあったらある意味うれしいけどなw “GoにはSSHサーバのライブラリはあるが、併用するラインエディタが不足していると早とちりして自前で書いてしまったという失敗”
  • 新MacBook ProのTouch Barに見る「不都合な余白」

    いよいよ出荷が始まったアップルの新MacBook Pro「Touch Bar」搭載モデル。東京でも家電量販店のアップル売り場に入荷しており、さっそく人だかりができていました。

    新MacBook ProのTouch Barに見る「不都合な余白」
    ikawaha
    ikawaha 2016/11/24
    !! 知らなかった orz / ちなみに右端のTouch IDは電源ボタンを兼ねており
  • goa tips: swagger-ui がサービスできないときのドキュメントどうする問題 - 押してダメならふて寝しろ

    概要 goa は swagger ドキュメントを生成してくれるので,これを swagger-ui をつかってサービスしてやると API が分かりやすく,お試しも出来てかなりいいかんじになります.しかし,環境によってはサービスを立ち上げることが出来ないとか,ドキュメントを確認して欲しい人がサービスにアクセスできないとかいうことが結構あります.そんなとき swagger.(json|yaml) をそのまま渡して 「swagger editor でみてね!」が通じない場合の対処方法です. ブラウザで見れるように加工する bootprint を使う swagger.json を変換してブラウザで見れるように変換したものを用意します.利用するのは bootprint と bootprint-swagger です. これは npm で最初に一回インストールしておけばいいです. Makefile に入れ

    goa tips: swagger-ui がサービスできないときのドキュメントどうする問題 - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2016/10/20
    goaのメモ書いた (9).ドキュメント共有したいけどswagger-ui使えないときもあるよね #goadesign
  • Big Sky :: golang でパフォーマンスチューニングする際に気を付けるべきこと

    golang のテストツールには標準でベンチマークツールが付属しています。例えば、引数 n を貰ってその数分だけメッセージの入ったスライスを返す関数 makeSlice が以下の実装だったとします。 foo.go package foo import "fmt" func makeSlice(n int) []string { var r []string for i := 0; i < n; i++ { r = append(r, fmt.Sprintf("%03d だよーん", i)) } return r } 如何にも遅そうなコードですね。まずはこのコードを単品で計測するベンチマークを書きます。 foo_test.go package foo import "testing" func BenchmarkMakeSlice(b *testing.B) { b.ResetTimer()

    Big Sky :: golang でパフォーマンスチューニングする際に気を付けるべきこと
  • Swagger 仕様を複数ファイル出力する goa プラグイン Multiswagger を作った - tchsskのブログ

    作りました。 github.com goa とは Go でマイクロサービスな Web API を作るためのライブラリです。 github.com goa の DSL で design と呼ばれる定義を書いたら、 goagen というジェネレータを使ってサーバやクライアントなど各種のコードを生成することができます。日語だと @ikawaha さんによる連載記事が非常にわかりやすくてオススメです。 ikawaha.hateblo.jp Multiswagger とは Swagger 仕様を出力するための goagen のプラグインです。 goagen に内蔵されているデフォルトの Swagger ジェネレータと互換性がありますが、Description() という DSL が JSON のとき、そのキー毎に Swagger 仕様を出力します。 apidsl.Description(`{ "k

    ikawaha
    ikawaha 2016/10/18
    これ使うとgoaで仕様を多言語で用意できるようになるゴクリ #goadesign
  • SwaggerでRESTful APIの管理を楽にする - Qiita

    背景 最近は変化し続ける要件に対応するために、システムも柔軟であることが求められています。 そのため、部分的に変更やスケールの可能なシステムを構築し、API経由で連携するマイクロサービス的アーキテクチャが増えてきています。 そういった設計の中で問題になっていくのが、従来のモノリシックなアプリケーションではIDEやコンパイラなどで行っていた、機能間のインターフェイスをどう管理するかという部分です。 Swaggerとは? SwaggerとはRESTful APIのドキュメントや、サーバ、クライアントコード、エディタ、またそれらを扱うための仕様などを提供するフレームワークです。 公式サイトでは、The World's Most Popular Framework for APIsと謳っています。 その理由は、マイクロソフト、Google、IBM、SmartBearなどを大手の企業を含む「Open

    SwaggerでRESTful APIの管理を楽にする - Qiita
  • goa の controller を実装する - 押してダメならふて寝しろ

    概要 goa のデザインが出来たら goagen でコードを生成しましょう. コードが生成できたら,次にコントローラ部分を書いていく必要があります.これはビジネスロジックにあたる部分です. というか,goa はデザインを書いて,goagen してコード生成後は,ここしか編集する部分がないです.他の生成されたファイルには DO NOT MODIFY のコメントがヘッダについています. 準備:コントローラのコードはどこにある? コントローラーのコードがどのコマンドでどこに配置されるかについては, goa のインストールと実行 - 押してダメならふて寝しろ でまとめてありますので詳しくはこちらからあたってください. 以下では,おなじみの最小構成のデザインをサンプルにどのようにメディアタイプやペイロードを扱えばいいかを説明したいと思います. 最小構成のデザインサンプル: package desig

    goa の controller を実装する - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2016/10/12
    だいぶ間空いてしまったけど goa の記事書いた (8) #公式のドキュメント翻訳したほうがいいのかもしれない #goadesign
  • 形態素解析器 kagome を Google App Engine で動かす - 押してダメならふて寝しろ

    概要 kagome を GAE で動かしたいってのをチラホラ耳にしてたのですが,先日ついに issue が投げられたので対応してみました. 正確には UniDic をあきらめて IPADic だけ対応してる kagome.ipadic で動かせることを確認しました. 何が問題なのか? golang のプログラムを GAE で動かすには以下の2点の制限があります. GAE では unsafe, syscall, cgo を使ってると動かせない GAE では1ファイル32MBのサイズ制限がある kagome を最初に作ったときは辞書を有限状態トランスデューサー(fst)で構築してて,どうしてもこいつが unsafe 使う実装になってたので対応あきらめてたんですが,なんかの時に辞書を double array trie になおして,辞書からは殆ど unsafe をなくしていたので,今回は1カ所直

    形態素解析器 kagome を Google App Engine で動かす - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2016/10/04
    書いた.長年の(?)懸案が解決されましたが誰得なんですかね :p
  • おふろcafe utataneで格安開発合宿をした - きょこみのーと

    ofurocafe-utatane.com また合宿してました。もう今年5〜6回は合宿してる気がする。 一泊する合宿では最安値。移動とか事とかビールとか込みで、トータル1万円くらい (圧倒的コスパ感) 宿のポイント Good 1ヶ月前に予約したら早割で1泊1人2900円という安さ 無限コーヒー2種類 管内着がゆったり なんか雰囲気がよい サウナ・露天風呂あり。風呂結構広い Cafeが結構料理とかクオリティ高い(1800〜1500円くらい) 24:00以降も利用できて、フロントでビールとかツマミを買ってダラダラ飲めて良かった Bad 値段が安いせいか、学生とか女子会?っぽいメンバーが多い 席がなくて通路とか床に座ってる人がいた 荷物とかを置きっぱなしにして強引に席を確保して回転率を下げている集団が多かった ランチの回転率が圧倒的に悪かった(2時間制とかなんかうまく運用でカバーしないとや

    おふろcafe utataneで格安開発合宿をした - きょこみのーと
    ikawaha
    ikawaha 2016/09/22
    おふろcafeってこんなとこなのか
  • goa tips : swagger-ui を使って手っ取り早く API を試す - 押してダメならふて寝しろ

    はじめに 折角 API を作ったら,簡単に試して,仕様も俯瞰的に確認したいものです. そんなわけで,今回は開発環境で使える swagger-ui の tips です. swagger-ui は swagger ドキュメントを閲覧するためのサービスを提供してくれます. しかも API コンソールがついているので,ドキュメントを確認しながらその場で API を試すことが出来ます. github.com これをサービスとして立ち上げて,goa で生成した swagger ドキュメントをセットするというのもまどろっこしいので, goa で生成したサービスを立ち上げると,swagger-ui も一緒にサービスするようにしてしまおう.というのが今回の目標です. swagger-ui を配置 swagger-ui の distフォルダをコピーしてきます. 以下の説明では,作業ディレクトリの swagge

    goa tips : swagger-ui を使って手っ取り早く API を試す - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2016/09/21
    ほぼ日 goa,書いた (7)
  • ISUCON6予選をトップ通過しました : DSAS開発者の部屋

    @methane です。「この技術部には問題がある!」というチーム名で @kizkoh (インフラ担当), @mecha_g3 (アプリ担当) とともに ISUCON 6 に参戦し、予選をトップスコアで通過しました。 恒例のふりかえり記事を書きます。 ふりかえり 残念ながらスコアは記録してないのですが、時系列順にやったことをまとめます。 アプリのコードは methane/isu6q-app で公開しているので、興味がある方はコードを確認してください。 strings.Replacer を使う 使用言語は最初から Go と決めていたのですが、Goの初期実装は遅すぎてタイムアウトで最初からスコア無しでした。 top でアプリのCPUが支配的なのはすぐ判りましたし、コードを読めばなにが遅いのかも一発で判りました。そんなに長くないので関数全体を張ります。 func htmlify(w http.R

    ISUCON6予選をトップ通過しました : DSAS開発者の部屋
  • goa tips : Type と MediaType を使い分けよう - 押してダメならふて寝しろ

    はじめに MediaType と Type の意味を理解してを適切に使い分けましょう(自戒. よく間違えます.github の issue とか goa の slack channel にもよく質問が上がってます. MediaType はレスポンスの形式 MediaType は Type としても利用できますが,来の意味的にはレスポンスデータです. Payload の要素に MediaType を利用することは可能ですが,MediaType で指定したいと思っているデータ形式と同等のものを Type で定義してそれで指定するのが無難でしょう.Payload の要素に MediaType を使って,これに Example を適用するとうまく設定できないケースがあるため(バグ?)その観点からも避けた方がよさそうです. また,MediaType の定義には,MediaType を利用することは

    goa tips : Type と MediaType を使い分けよう - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2016/09/16
    日刊 goa,だいぶへばってきて今日は短めの tips です (6)