namibia-africa-landscape-nature-clouds-sky-away

ギルドワークスの3つの事業の未来を描く合宿

普段リモートワークをやっているギルドワークスでは、2、3ヶ月に一度を合宿を行っています。
これまでの合宿の様子はギルドワークスの合宿風景ワイガヤミーティング-自分達のことを語り合う場-などを御覧ください。

合宿場

2015年最後の合宿を12月も押し迫った先日の日曜、月曜に行いました。
場所は何度もお世話になっている味な宿 静観荘です。
ここは周りが閑静で、和室でゆっくり話せ、何よりご飯が美味しいので、よく利用させてもらっています。
20151221_072237

20151220_131715

20151220_131800

どんな話をしたか?

ギルドワークスでは大きく3つの事業があります。
1つは「正しいものを探索する価値探索」。
もう1つは「正しくつくる開発」。
最後は「正しいものを正しくつくる現場を増やす現場コーチ」です。

この合宿では、ギルドワークスのそれぞれの事業のあるべき理想像、そこに至るまでに様々な課題を洗い出し、その課題をどうやって倒していこうと思っているのか?という点で色々議論をしました。
このような議論になった際に「過去がどうだったか?」にこだわるあまり未来に目が向かない場合もあります。しかし、ギルドワークスの合宿では、過去は「未来を良くするための学び」という感覚であり、その学びを未来の作戦に向けてどう活かしていくか?という姿勢がとても強く出ます。

夜は、美味しいご飯、お酒と共に、この1年で仲間になった4人を中心に「ギルドワークスで実際に一緒にやってみて」という切り口での感想などを話しあったりしました。
思えば4人で立ち上げたギルドワークスも2倍以上の9人になっていました。

20151220_183226

20151220_183303

20151221_072929

翌日は「価値探索カンファレンス」

翌日は朝ごはんを食べ、個人の目標を共有した後、東京都内に取って返し「価値探索カンファレンス」を開催しました。
こちらには平日昼間にかかわらず20人強の方参加いただき、また終わった後も色々と質問をいただきました。この価値探索カンファレンスでの話の詳細はそれぞれ発表したメンバーが順次ブログにアップする予定です。

このような感じで普段はリモートワークをしながらも、時に合宿をして膝を突き合わせ「正しいものを正しくつくる」ことを実現しようとしているギルドワークスに興味を持たれた方はお気軽に【ギルドワークスに依頼する】をご覧の上、お問合せください。

Photo via VisualHunt.com

google

RailsでGoogle Cloud Visionを使って画像とテキスト認識をしてみる

水谷です。

前回の記事でTensorFlowをアプリから呼び出して画像に何が写っているか認識するアプリを紹介しました。

その後、Google Could Vision APIの発表があり、より画像認識を使いやすいかたちで提供されることになりました。

発表ブログ

Could Vision APIが何なのかやそのすごさはこちらの動画を参照してください。

先行プレビューの登録ができたので、ここではRailsアプリに組み込んで使ってみたいと思います。

画像認識

前回の記事と同じように、写真にあるものを認識してみましょう。

まず、APIには以下の形式で送信します。

{
  "requests": [
    {
      "image": {
        "content": "jisYIujijJIUJI...."
      },
      "features": [
        {
          "type": "LABEL_DETECTION",
          "maxResults": 10
        }
      ]
    }
  ]
}

contentにはBase64でエンコードした画像ファイルをいれます。typeには写真の中に何があるかを認識されるためのLABEL_DETECTIONを指定します。

レスポンスは下記のようなJSONになります。

{
  "responses": [
    {
      "labelAnnotations": [
        {
          "mid": "/m/07dm6",
          "description": "tiger",
          "score": 0.9995195
        },
        {
          "mid": "/m/01280g",
          "description": "wildlife",
          "score": 0.96001059
        },
        {
          "mid": "/m/09686",
          "description": "vertebrate",
          "score": 0.85704827
        },
        {
          "mid": "/m/04rky",
          "description": "mammal",
          "score": 0.85094059
        },
        {
          "mid": "/m/089v3",
          "description": "zoo",
          "score": 0.788213
        },
        {
          "mid": "/m/0cdnk",
          "description": "panthera",
          "score": 0.73796427
        },
        {
          "mid": "/m/0307l",
          "description": "felidae",
          "score": 0.57086021
        },
        {
          "mid": "/m/01lrl",
          "description": "carnivora",
          "score": 0.56989247
        },
        {
          "mid": "/m/0891tx",
          "description": "toyger",
          "score": 0.52950406
        }
      ]
    }
  ]
}

labelAnnotationsに認識した物体をその物体である可能性を示すscoreとともに配列で返ってきます。

今回は簡単にscoreが高いものを表示するようにします。実際のコードはこちらを参照ください。

GitHub

それでは結果をみてみましょう。

虎

ちゃんとtiger(虎)と認識しましたね。

もう一つやってみましょう。

クマ

これも、brown bear(クマ)と認識してくれます。

テキスト認識

Google Cloud Visionのもう一つ文字を認識する機能があります。それを試してみましょう。

まず、リクエストからみてみましょう。

{
  "requests": [
    {
      "image": {
        "content": "Yjiijijii54ji...."
      },
      "features": [
        {
          "type": "TEXT_DETECTION",
          "maxResults":10
        }
      ]
    }
  ]
}

先ほどの画像認識と同じような内容で、typeにTEXT_DETECTIONを指定します。

レスポンスは次のようになります。

{
  "responses": [
    {
      "textAnnotations": [
        {
          "locale": "ja",
          "description": "アルバイト募集\\n一緒にお店を盛り上げてくれる\\n仲間を募集しています。\\n業 務内容:ホール·厨房\\n年 齢:18歳以上\\n時給:アルバイト希望900円以上\\n社員希望相談\\n●シフト制\\n昇給あり\\n食事付き\\n·制服貸与\\n/※まずは、お電話またはスタッフまでお問い合わせください。\\nTEL : 04674485n担 当体木\\n",
          "boundingPoly": {
            "vertices": [
              {
                x: 275,
                y: 742
              },
              {
                x: 1910,
                y: 742
              },
              {
                x: 1910,
                y: 2908
              },
              {
                x: 275,
                y: 2908
              }
            ]
          }
        }
      ]
    }
  ]
}

descriptionに認識したテキストがはいります。

それでは、実際に写真をあげた結果はこのようになります。

0

ほぼ、認識できてますね。

手書きの場合も試してみましょう。

1

おしいですね。やはりところどころ認識できてないです。ただ、数字はちゃんと認識できてます。

まとめ

今回ご紹介した機能以外にも、顔、ロゴや建物などのランドマークなども認識することができます。

いままでも画像認識やOCRなどの技術はあったものの精度の面で不安があり、実際にサービスに使うためにはいくつもの壁を越える必要がありました。このGoogle Cloud VisionではGoogleのサービスの中で蓄積されたデータを基にしているので高い精度を期待できるのではないでしょうか。

そういえば、Google Photoがでた当初、「結婚式」と入力して結婚式で撮った写真が一覧にでたあの衝撃を思い出します。その技術がこんなにも手軽に使えるのはとてもわくわくしますね。

この記事を読んでギルドワークスに興味を持たれた方はお気軽に【ギルドワークスに依頼する】をご覧の上、お問合せください。

0c58a10e-ca8f-b5b6-7c72-090c896740c9

CircleCI から Elastic Beanstalk にデプロイする

こんにちは、ギルドワークスの上野です。

ギルドワークスでは、開発したアプリケーションを Elastic Beanstalk を利用してデプロイ、運用しています。

EB CLI を入れることで、コマンドラインからデプロイすることもできますが、
自動化したいってなりますよね。
そこで自動化のやり方を調べたので、ブログにも書いておきます。

ちなみに自分のローカル環境に構築する際は、以下のコマンドで簡単にインストールできます。(python や pip がインストールされている前提)

pip install awsebcli

ですが、僕の環境ではどうもアップデートが上手くできなくて、いろいろいじってたらぶっ壊れて動かなくなったりしましたw
brew で入れたら今のところ安定しています。

brew install awsebcli

1. circle.yml の設定


machine:
  python:
    version: 2.7.6

dependencies:
  pre:
    - pip install awsebcli

deployment:
  staging:
    branch: master
    commands:
      - eb deploy [env環境名]
  production:
    branch: production
    commands:
      - eb deploy [env環境名]

staging、production や branch の指定は任意です。
CircleCI の設定はこれだけです。

参考までに

CircleCI は結構いろんな指定ができるので以下の内容も確認してみてください。
https://circleci.com/docs/configuration

2.config.global.yml の設定

.elasticbeanstalk の下に config.global.yml を作成します。


global:
  application_name: [アプリケーション名]
  default_region: ap-northeast-1

application_name は Beanstalk を作成する際のアプリケーション名です。

3. CircleCI の設定

最後に CircleCI の設定に AWSのアクセスキー等を設定します。

Project Settings の AWS Permissions の中です。

スクリーンショット 2015-12-15 18.57.41

あとは、指定したブランチにマージされるとデプロイされます。
めっちゃ便利ですね。

ギルドワークスではデプロイの徹底的な見直しを通じて、「正しいものを正しくつくる」を実現しようとしています。コーチや開発など、お手伝いできることがあればぜひ、お問い合わせください

 

IMG_1622

禅とソフトウェア設計技術

心の落ち着きは、技術的作業にとって決して表面的なものではない。これこそが重要なものである。心の落ち着きを生み出すものは、優れた仕事であり、それを破壊するものは悪い仕事である。仕様書、計量器機、品質管理、最終点検などはすべて、作業責任者に心の落ち着きを与えるための手段である。ここでは心の落ち着き以外に重要なものは何ひとつない。なぜかといえば、心の落ち着きこそが例の <<クオリティ>> を知覚するための前提条件だからである。

(※ 禅とオートバイ修理技術より(単行本 下巻164ページ) )

ギルドワークスさんとパートナーとして一緒にお仕事させていただいています、木目沢(@pilgrim_reds)と申します。

ソフトウェアにとって、心の落ち着きをもたらしてくれるもの、つまりは優れた仕事、 <<クオリティ>>を知覚できるものは何でしょうか?

Excelの設計書?
トランザクションスクリプトなソースコード?

これらを注意深く、完璧に仕上げたとして心に落ち着きを与えられるでしょうか?

変わり続ける仕様・業務の知識・ビジネス、100%なくすことができないバグが存在する前提がある以上、ソースとドキュメントとの乖離があるのではないかという不安と、ソースコードを変更するたびに他にも影響があるのではないかという不安は消えないのではないのでしょうか?

であれば、ソースコードに変更を加えることが容易になる設計手法こそが心に落ち着きを与えうる設計であると言えると思うのです。

私たちは、ドメイン駆動設計にその活路を見出し取り組んでいます。

それにしても、「心の落ち着き」と「<<クオリティ>>」を結びつけるということに意外であると思う一方、ソフトウェアに携わってきた経験上、妙な納得感がありました。
設計手法以外にも深夜・休日まで仕事をしてしまう、少ないコミュニケーション、要件定義・設計・開発など工程でチームが分かれる・・・などなど心を乱す要因はいろいろありそうですね。

最後に、心の落ち着きを生み出すために美味しい一杯のコーヒーを飲みましょう。。。

この記事を読んでギルドワークスに興味を持たれた方はお気軽に【ギルドワークスに依頼する】をご覧の上、お問合せください