ikawahaのブックマーク (190)

  • goa で静的ファイル配信に go-bindata を使う - tchsskのブログ

    goa には静的ファイル配信のための DSL として Files が用意されており、以下のような定義を行うと FileServer を生成してくれます。 Files("/swagger/*filepath", "public/swagger/") 生成される FileServer は http.FileSystem という interface を通してファイルオープンを行うのですが、従来は http.Dir という実装を固定で使う仕様になっていました。 http.Dir は実行環境のネイティブファイルシステムからファイルオープンを行います。これは、ビルドしたバイナリを実行環境にデプロイする際に Files で定義した静的ファイルもそのファイルシステム上に配置する必要がある、ということを意味します。 Go は、ビルドしたバイナリひとつをデプロイすれば動作する、いわゆるシングルバイナリが魅力の

    goa で静的ファイル配信に go-bindata を使う - tchsskのブログ
    ikawaha
    ikawaha 2017/07/11
    サーバと一緒にサーバ仕様も 1binary で配布できるようになった 🙌
  • goaのDSLのAttributeについて - kawaken's blog

    スニペットづくりのためにコード読んでいて気づいたのでメモ。 v1の方。 Attributeとは AttributeはView, Type, Attribute, Attributesの中で使える関数で、属性を指定するのに使用する。nested attributeってのがあるらしく、Attributeの中でAttributeが使えるらしいが、よくわからない。 Attributeの引数 ドキュメントによると、Attributeの定義は以下のようになっている。 https://goa.design/reference/goa/design/apidsl/#func-attribute-a-name-apidsl-attribute-a func Attribute(name string, args ...interface{}) 1つ目がAttributeの名前になるstringで、2つ目はi

    goaのDSLのAttributeについて - kawaken's blog
    ikawaha
    ikawaha 2017/07/05
    Header そうなってたんかー
  • goa へのプルリクエストの送り方 (バックポート編) - tchsskのブログ

    goa へのプルリクエストの送り方 (バックポート編) です。 goa では互換性維持のため master と v1 を別ブランチで管理しています。そのため、プルリクエストが master にマージされたあと、その変更を v1 ブランチにバックポートするようお願いされることがあります。編ではその手順について解説します。 1. リポジトリに移動 コンソールで以下のコマンドを実行します。 $ cd $GOPATH/src/github.com/goadesign/goa 2. v1 から新しいブランチをチェックアウト コンソールで以下のコマンドを実行します。 $ git fetch $ git checkout -b $BRANCHNAME origin/v1 $BRANCHNAME には任意のブランチ名を入れてください。例えばブランチ名を foo-bar-v1 とする場合は以下の様になりま

    goa へのプルリクエストの送り方 (バックポート編) - tchsskのブログ
    ikawaha
    ikawaha 2017/06/28
    丁寧な goa への pr の送り方最終回.goa に pr おくるとホッコリできるので手引きを参考に是非 pr 送るべき
  • goa勉強会 in 六本木一丁目でLTしてきましたので内容の補足など - きょこみのーと

    istyle.connpass.com LTしてきました。色々学びあって楽しかったです。 会場提供のistyleさんありがとうございました。 少しだけ補足説明とexampleコードを書いたので紹介しようと思います。 LTした資料 speakerdeck.com 注意点 gogoaについてすでにある程度理解がある人向けです goaのversionは、v1.2.0の前提で話しています go generate使ってコード生成して開発する流れについて –forceをつけることで毎回mainのgenerateは作り直してます。 //go:generate goagen -o gen main --force -d github.com/kyokomi/example_goa_api/_design //go:generate goagen -o gen app -d github.com/kyok

    goa勉強会 in 六本木一丁目でLTしてきましたので内容の補足など - きょこみのーと
  • 形態素解析器 kagome を Google App Engine の最も安いインスタンスで動かす - 押してダメならふて寝しろ

    概要 前回までのあらすじ: kagome を GAE で動かしたいという話があり,kagome.ipadic という IPA 辞書だけを収めたコンパクト版を用意して,GAE 上で動作させることに成功したわけですが,メモリの消費量が多くて B4インスタンス(メモリ 512MB)以上じゃないと動作しなかったわけです.正直,kagome を GAE で動かしたいという話をチラホラ聞くものの,それは「動くかどうか試してみたい」的なやつで,実際使ってらっしゃるという話は聞こえてこなかったわけです. ところが・・・ Javaだとgomoku使えばB1/F1でも余裕で動いたんだけど、中々上手くいかんなぁ。— かず@GAE/Goやってます (@Kazzz) 2017年5月22日 kagome はちと動作に敷居が高いとのご指摘を受け, 不幸にも黒塗りの高級車に追突してしまう後輩をかばいすべての責任を負った三

    形態素解析器 kagome を Google App Engine の最も安いインスタンスで動かす - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2017/06/02
    実行時メモリを156MBほど減らせました
  • golang で utf8 でない文字列を for range で回すとどうなるか - 押してダメならふて寝しろ

    概要 golang の string は意識しなければたいていの場合 utf8 な文字列なわけですが, ファイルからテキスト読んできたりすると,非 utf8 な文字列が混じることとかあります. そんな 非 utf8 な文字列を for range で回した場合の挙動でハマったのでメモ. 端的に言うとRob Pike 氏のこれをよく読もう: Strings, bytes, runes and characters in Go - The Go Blog 文字ごとに処理する golang で string の長さをとると,それは byte 長です.たとえば len("日語") の値は 9 になります. いわゆる文字(日,,語)のことを golang では rune と定義していますが,文字ごとに処理したい場合には, for range で文字列を回してやればうまくいきます.(以下,文字とは

    golang で utf8 でない文字列を for range で回すとどうなるか - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2017/05/19
    しってた?(しらんかった orz)
  • Go言語にさらに入門するために係り受け解析器を書いた話 - yasuhisa's blog

    今年からGo言語に入門していますが、もう少し複雑なものをものを書いてみたいと思ったので、係り受け解析器を書きました。その過程で工夫したこと、苦労したことをまとめます。作ったものはこちら。 一人で作っているプロジェクトですが、100行以下の細かめの修正毎にPull Requestを作っているので、どのような過程でやっているかが比較的分かりやすいと思います。 easy-first algorithmについて 係り受け解析アルゴリズムの1つです 最も自信のある(つまり簡単な)ところから係り受け関係を付けていくgreedyな方法です コーパスには正解の係り受けは付与されていますが、簡単さの順序は当然分からないので、構造化パーセプトロンでそれを含めて学習します 構造化パーセプロトンについては入門エントリを書いているので、興味がある方はどうぞ なぜ係り受け解析器を書いてGo言語の入門をするのか 学んだ

    Go言語にさらに入門するために係り受け解析器を書いた話 - yasuhisa's blog
    ikawaha
    ikawaha 2017/05/10
  • GolangのgoaでAPIをデザインしよう(基本編) - ぺい

    goaはいいぞ! Golanggoaの勉強に役立つ情報まとめ - ぺい goaの情報をもっと見たい方は、上のリンクから確認してください goAPIを作成する場合は、必ずといっていいくらいgoaでやっている私ですが、日ではあまり使っている人が居ません。恐らくこの理由は日語の情報があまり無いことやシンプルなサンプル集がないからかもしれない・・・と思いまして、軽量なサンプルを定期的に紹介していくことにしました。 API設計フェーズ goaは最初に設計を行ってから、その設計書を元に実装を行っていきます。設計はDSLと呼ばれるもので、最初はこの定義に慣れないですが、読み方さえ分かれば容易にAPIを設計出来ます。 何が嬉しいの? 例えば、GET /users/:IDというエンドポイントがあるとします。どのようなロジックを組む必要があるでしょう? 例 curl http://localhost/

    GolangのgoaでAPIをデザインしよう(基本編) - ぺい
    ikawaha
    ikawaha 2017/05/05
    goa はいいぞ
  • goa 公式サイトを日本語翻訳した & goa の開発メンバーになった - tchsskのブログ

    goa 公式サイトを日語翻訳した 昨年始めた goa 公式サイトの日語翻訳が終わりました。 goa.design 日の開発者にあまり使われてないのは日語のリソースが少ないからでは、ということで昨年末に ikawaha さんとプロジェクトを開始したのですが、結構分量があったので数ヶ月かかってしまいました。細かい修正は残っているものの、一旦は年度内に完了できてよかったです。 Go で Web API の開発を行う際には是非 goa を候補に加えてみて下さい。 goa の開発メンバーになった 2 月末に goa の開発メンバーになりました。 先日アナウンスされた v1.2.0 のポストでも大きく取り上げてもらいました。 goa.design 以下、引用です。 Taichi was one of the first contributors to goa, his contribution

    goa 公式サイトを日本語翻訳した & goa の開発メンバーになった - tchsskのブログ
    ikawaha
    ikawaha 2017/04/18
    かっこよくコード吐くコード書く goa のコアメンバーすごい 🙌
  • Go言語のヒープに確保するデータの初期化コストについて調べてみた(Go1.8.1版)

    golangで p := new(Type) と p := &Type{} の使い分けってどうするべきだろう? — MURAOKA Taro (@kaoriya) 2017年4月12日 こちらのツイートに対して、以下のベンチ結果が紹介されていました。 Go言語のヒープに確保するデータの初期化コストについて調べてみた しかしhnakamur2さんも言及しているように、 これはGo1.2.2時の結果。 その後、GoのコンパイラがGo実装になったり、SSAが導入されたりと、 今のコンパイラの実装は当時とは全く違うものになっています。 というわけで、現時点での最新のバージョン(Go1.8.1)で、同様の検証をおこなってみました。 検証コード 検証に使用したコードはGo1.2.2のときと全く同じものです。 // alloc_overhead.go package main type containe

    ikawaha
    ikawaha 2017/04/13
  • なぜ goa の DSL はブランク識別子への代入が必要なのか - tchsskのブログ

    goa のトップレベル DSL goa の design は DSL をネストさせながら記述しますが、その一番上の階層に来るものをトップレベル DSL と呼びます。標準で用意されている apidsl では以下の DSL がそれに当たります。 API() Resource() Type() MediaType() 前提として、すべての DSL は Go の関数であり、それを用いて記述される design は Go のソースコードです。 トップレベル DSL の記述 goa ではトップレベル DSL を以下のように記述します。 var _ = API("cellar", func() { // Definitions. }) なぜ以下のように書けないのでしょうか? API("cellar", func() { // Definitions. }) Go の言語仕様 まず Go の言語仕様を確認

    なぜ goa の DSL はブランク識別子への代入が必要なのか - tchsskのブログ
    ikawaha
    ikawaha 2017/03/31
    なるほど
  • goaを使ったGAE/Go開発が辛かった話。 - ぺい

    2017 - 03 - 29 goaを使ったGAE/Go開発が辛かった話。 goa x GAE/Go 結構辛いので、何か解決策あれば教えていただきたいです。 結論 goaが使用しているパッケージの中にsyscallをインポートしているパッケージがあるので、forkして コンパイル 対象から外す記述を追加した上で、パッケージのimport先をVendor以下で書き換えてプッシュしたら行けた。(やばい) プルリクがマージされれば一瞬で終わる問題です。 goaとは github.com speakerdeck.com デザインベースで開発を行うことが出来るGoの フレームワーク です。 個人的には、もっと人気出てもいいのになと感じているくらい良い OSS です。 GAE/Goとは Google の クラウド サービスの GCP のPaaSのことです。GoGoogle は開発した言語とあっ

    goaを使ったGAE/Go開発が辛かった話。 - ぺい
    ikawaha
    ikawaha 2017/03/30
  • golang.tokyo#4でGo開発環境Goglandのライブデモを見てきた | メルカリエンジニアリング

    こんにちは、メルカリアッテのAPIチームでGoエンジニアをしている@sonatardです。 この記事は弊社ソウゾウの社員である@tenntennが運営しているgolang.tokyo #4のブログ枠として書いています。 golang.tokyo #4では、ゲストスピーカーとしてJetBrains社のSergey Ignatov氏にご登壇いただきGoglandをライブデモ形式で紹介して頂きました。 メルカリアッテではGoogle App Engine for Go (GAE/Go) を全面的に採用しており、サーバサイドエンジニアの中でもGoglandの利用者が増えています。そこでSergey Ignatov氏に紹介して頂いた機能とソウゾウ エンジニアたちが利用しているお気に入りの機能をまとめてご紹介したいと思います。 ソウゾウがGAE/Goを採用した経緯は@ttsuruokaのatte 開発

    golang.tokyo#4でGo開発環境Goglandのライブデモを見てきた | メルカリエンジニアリング
  • ANTLR のターゲットに Go が追加されたので Gogland とあわせて遊んでみる - 押してダメならふて寝しろ

    概要 ANTLR ってのは,いわゆるパーサジェネレーターです. 去年の年末に出たバージョン 4.6 からターゲットに Go が追加されました 🙌 . かなり昔に使ったことあったんですが,v4 になってだいぶ整理されて洗練された感じになってました. この記事は結構適当にやってしまっていると思うので,ちゃんとやりたいならリファレンスを読んだ方がよさそうです(ぉ. The Definitive ANTLR 4 Reference 作者: Terence Parr出版社/メーカー: Pragmatic Bookshelf発売日: 2013/01/22メディア: ペーパーバックこの商品を含むブログを見る ANTLR の簡単な紹介 入力のあるプログラム書いていると,入力が well-formed であるかどうかをチェックする必要があることがあります. 正規表現とか使って自分で入力が正しいかどうかチェ

    ANTLR のターゲットに Go が追加されたので Gogland とあわせて遊んでみる - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2017/03/21
    書いた。Goで完結できるようになったのが嬉しい
  • Golangのcontext.Valueの使い方

    Go1.7でcontextパッケージが標準パッケージに入りしいろいろなところで使われるようになってきた.先日リリースされたGo1.8においてもdatabase/sqlパッケージなどでcontextのサポートが入るなどますます重要なパッケージになっている. “Go1.7のcontextパッケージ”で書いたようにcontextは「キャンセルのためのシグナルの受け渡しの標準的なインターフェース」として主に使われる.ある関数やメソッドの第1引数にcontext.Contextが渡せるようになっていればキャンセルを実行したときにその関数は適切に処理を中断しリソースを解放することを期待する.これはパッケージの作者とその利用者との間のある種の契約のようになっている(パッケージ側でgoroutine作るなというパターンもここで効いてくる). これだけではなくcontext.Contextインターフェースに

    ikawaha
    ikawaha 2017/02/23
    ためになる
  • 購読中のブログ - はてなブログ

    パスワードを忘れた方はパスワードの再設定を行ってください。 うまくログインできない方はお問い合わせをご覧いただき、Cookieの設定をご確認ください。

    ikawaha
    ikawaha 2017/02/21
  • swagger.json のルーティングをCLIで確認する - kawaken's blog

    goaを使ってAPIのデザインをしているときに、ルーティングの確認がしたくなる。 ikawahaさんの、goa tips : swagger-ui を使って手っ取り早く API を試す - 押してダメならふて寝しろ にあるように、swagger-ui用のルーティングを使うことで確認ができるのだが、正直もんにょりする。 という話を会社で話していたところ、後輩がCLIのツールを作ってくれた。 GitHub - decafe09/swrt swagger.json をパースして、ルーティングを表示してくれる。 $ curl -s http://petstore.swagger.io/v2/swagger.json > swagger.json $ swrt http://petstore.swagger.io/v2 PUT /pet POST /pet GET /pet/findByStatus

    swagger.json のルーティングをCLIで確認する - kawaken's blog
    ikawaha
    ikawaha 2017/02/21
    便利
  • Tips: goa で Consumes 指定したときはデフォルトの Content-Type タイプが読み込まれなくなるので注意 - 押してダメならふて寝しろ

    goa はデフォルトで json / xml / gob を受け付けてデコードしてくれるようになっているので特に意識することないと思うのですが,'application/x-www-form-urlencoded' とか,独自のデコーダー作りたいときとかには,Consumes 関数を API の中に書いて指定する必要があります. たとえば,application/x-www-form-urlencoded をデコードするようにしたいときは,次のようにします. var _ = API("myapi", func() { Scheme("http") Host("localhost:8080") Consumes("application/x-www-form-urlencoded", func() { // ★ ← こんなかんじ Package("github.com/goadesign/g

    Tips: goa で Consumes 指定したときはデフォルトの Content-Type タイプが読み込まれなくなるので注意 - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2017/02/16
    勘違いしてたのでメモ書いた #goadesign
  • 新はてなブックマークボタン公開! ボタンを押して、Tシャツ&ステッカーが当たるキャンペーンに参加しよう - はてなブックマーク開発ブログ

    ※ キャンペーンは終了しました。たくさんのご応募ありがとうございました 先日お伝えした通り、日から新しいはてなブックマークボタンをご利用いただけるようになりました! はてなブックマークボタンはこれまで種類の選択肢が少なく、かつモバイルページでは扱いづらいデザインでした。今回、種類とサイズの柔軟な変更に対応し、スマートフォンでも見やすく使いやすいデザインになりました。 以下のガイドページから、お好きなデザインにカスタマイズしてご利用ください。 ▽ はてなブックマークボタンの作成・設置について - はてなブックマーク ※ 現在すでにページに設置しているタグの貼り替えなどは不要です 新しいボタンを押して、Tシャツとステッカーを当てよう! このリニューアルを記念して、非売品の「はてなブックマークTシャツ」と今回新たに制作した「はてなブックマークボタンステッカー」をセットにして2名様に、さらに「は

    新はてなブックマークボタン公開! ボタンを押して、Tシャツ&ステッカーが当たるキャンペーンに参加しよう - はてなブックマーク開発ブログ
    ikawaha
    ikawaha 2017/02/16
    ワー
  • goa で Type と MediaType を混ぜないでうまく再利用する - 押してダメならふて寝しろ

    概要 goa では レスポンスの形式を MediaType で定義します.一方,Type は Payload の形式などを定義します. MediaType は Type の特殊な形で,Veiw とか Link が増えたやつなので,Type の代わりに使えるんですけど, Type の代わりに使うと振る舞いが微妙に違うことから変なことになったりするので,代わりに使うのはやめておきたいところです. でも,Payload で使う要素とMediaTypeで使う要素は大体一緒のことが多く,同じ事を何度も書いたりするのはダルいこともありますし, Attribute を流用したいということも多いのではないでしょうか. Attribute を流用するいくつかの場面,方法について説明したいと思います. Reference 関数を使う Reference 関数を使うと,すでに定義済みの Type や Media

    goa で Type と MediaType を混ぜないでうまく再利用する - 押してダメならふて寝しろ
    ikawaha
    ikawaha 2017/02/11
    最近ドキュメントを読んで気づいたのでメモ #goadesign