タグ

ブックマーク / techblog.kayac.com (52)

  • チャットメッセージの即時反映を支える技術 - KAYAC engineers' blog

    Lobiチームの長田です。 今回はLobiの根幹であるチャットサービスの、Streaming APIについて紹介します。 多くのチャットサービスがそうであるように、 Lobiでも新しいチャットメッセージが画面リロードの必要なく表示されるようになっています。 チャットメッセージをデータストリームとしてクライアントに送信するためのAPIがStreaming APIです。 LobiのチャットサービスはiOS・Android・Webブラウザで利用することができ、 これら全てでStreaming APIを使ったチャット画面の自動更新を実現しています。 即時反映の実装方法としては Polling Long Polling Web Socket など複数の方法が挙げられますが、LobiではHTTPリクエストのLong Pollingをベースにした 独自のフォーマットを使用しています。 仕組み app -

    チャットメッセージの即時反映を支える技術 - KAYAC engineers' blog
    oppara
    oppara 2016/10/01
  • AngularJSを使ったWebサイトでSEOするためにLobiがやっていること - KAYAC engineers' blog

    スマートフォンのネイティブアプリをメインにサービス展開しているLobiですが、 Webブラウザからも利用することができます。 https://web.lobi.co Webブラウザからでもチャットの投稿・閲覧が行えます。 このサイトは AngularJS を用いて実装されています。 AngularJSとは AngularJSはGoogleが提供しているJavaScriptライブラリです。 https://angularjs.org/ Webページ内でのユーザーのアクションに対応するコンテンツ生成や表示変更などをJavaScriptで強力に実現します。 SEOとの相性 AnguraJSに限らず、JavaScriptで動的にコンテンツを生成するWebページには、 SEOとの相性が悪いという欠点があります。 これは検索エンジンのクローラーがJavaScriptの実行までは行わないことに起因してい

    AngularJSを使ったWebサイトでSEOするためにLobiがやっていること - KAYAC engineers' blog
    oppara
    oppara 2016/07/27
  • Lobiのログ集約・解析のはなし - KAYAC engineers' blog

    Lobiチームの長田です。 あらゆるWebサービスがそうであるように、Lobiでも日々大量のログが出力されています。 今回はこのログをどのように集約・解析しているかを紹介します。 TL;DR アクセスログ・アプリログなど、毎秒10000行以上のログが生成されている Fluentdを使用しログを集約 consul serviceを利用した集約サーバーの冗長化 ログ中のイベント検知・集約にはNorikraを使用 アクセスログの各種解析にはAmazon Redshiftを利用 ログの集約 ログ収集エージェント Lobiではログの集約にFluentdを利用しています。 Fluentd | Open Source Data Collector | Unified Logging Layer ログファイルの集約にはfluent-agent-hydraを、Perlアプリケーション内からのログ送信にはFl

    Lobiのログ集約・解析のはなし - KAYAC engineers' blog
    oppara
    oppara 2016/06/27
    Lobiのログ集約・解析のはなし | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • AWS Lambdaを使ってベンチサーバー無しで社内ISUCONを運営したはなし - KAYAC engineers' blog

    新人研修担当の長田です。 今年も新人研修の締めとして社内ISUCONを行いました。 昨年はプログラミング基礎の講師をやったのですが、 今年はその実績を買われて(?)社内ISUCONの出題を担当することになりました。 過去のISUCON準備の様子を傍から見ていた身としては、 準備を始める前から「とにかく大変そうだ・・・」というイメージを持っていました。 問題を作りこむ以上、どうしてもISUCON当日ぎりぎりまでかかってしまうのでしょう。 ぎりぎりになるのはまあ準備する人が頑張ればいいとして、 ぎりぎりになった結果競技自体の進行が危ぶまれるのは避けたい! ということで、いくつか効率化という名の妥協策をとることにしました。 効率化できるところは? 毎回新規に出題するのはしんどい! 社内ISUCONは過去2回実施していますが、 どちらも新規に高速化対象のWebアプリケーションを作成していました。

    AWS Lambdaを使ってベンチサーバー無しで社内ISUCONを運営したはなし - KAYAC engineers' blog
    oppara
    oppara 2016/05/18
    AWS Lambdaを使ってベンチサーバー無しで社内ISUCONを運営したはなし | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • Perlだけじゃない!Lobiのサーバーサイドで活躍しているGo製プロダクト7+1個 - KAYAC engineers' blog

    Lobiはメインの言語としてPerlを採用しています。 サーバーサイドで使用するコードは、Webアプリケーションから手動実行用のスクリプトまで、 ほとんどがPerlで書かれています。 (なぜかPerl6のコードがあることになっていますが、さすがにまだ使ってません) が、そこは適材適所。 Goの方が適していると判断した部分では積極的に利用しています。 Goの使いどころ 単機能を高いパフォーマンスで実現する必要がある場合はGoの出番です。 バイナリひとつを配置すれば動作するというポータビリティも魅力的です。 これらのツール・アプリは単独で実行され、一部はアプリケーションの要求に応じてその機能を提供します。 spam-filter maintainer gunfish katsubushi stretcher rin fluent-agent-hydra nuko それでは各ツール・アプリについ

    oppara
    oppara 2016/04/28
    Perlだけじゃない!Lobiのサーバーサイドで活躍しているGo製プロダクト7+1個 | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • LobiのDB masterがダウンすると何が起こるのか - KAYAC engineers' blog

    Lobiチームの長田です。 今回はLobiで使用しているデータベースの構成・運用について紹介します。 TL;DR メインのデータベースとしてMySQLを使用 一般的なmaster-slave構成 HAProxyとMHAでDBのfailoverを自動化 HAProxyでslaveへの接続を分散・死活監視 MHAで障害時のfailover・ENIを付け替えてmaster切り替え で、何が起こるの? サービスが提供できなくなります。 ユーザーの認証情報等、サービス提供に必要不可欠なデータを管理しているため、一時的なサービス停止は免れません。 ユーザー体験的にもビジネス的にも、大変厳しい状態です。 この「一時的」な時間を可能な限り短くするために障害復旧の一次対応を自動化しています。 自動化のメリットとして、単純にサービス停止時間が短くなることはもちろん、 復旧処理を行う際の人的なエラーを未然に防ぐ

    LobiのDB masterがダウンすると何が起こるのか - KAYAC engineers' blog
    oppara
    oppara 2016/03/31
    LobiのDB masterがダウンすると何が起こるのか | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • ファイル更新もchef実行もstretcherで!Lobiをデプロイするときにやっていること - KAYAC engineers' blog

    Lobiチームの長田です。 今回は現在運用中のLobiというサービスのデプロイについて紹介します。 Lobi Chat & Game Community Lobiについての紹介は以前のエントリを参照ください。 サーバーサイドエンジニア視点でLobiというサービスを紹介します | tech.kayac.com - KAYAC engineers' blog TL;DR デプロイ=各種ファイル更新とサービスへの反映、chefの実行 毎日十数回のデプロイを行っている デプロイ対象は数十台単位 十余名のサーバーサイドエンジニア全員にデプロイ権限がある Auto Scalingを考慮したデプロイ手段を採用している ファイル更新もchef実行もstretcherでOK まだまだ改善の余地あり おおまかな手順 番環境にデプロイするぞ!という段になると、こんな操作が行われます。 GitHub上でコードレ

    ファイル更新もchef実行もstretcherで!Lobiをデプロイするときにやっていること - KAYAC engineers' blog
    oppara
    oppara 2016/03/03
    ファイル更新もchef実行もstretcherで!Lobiをデプロイするときにやっていること | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • Electron + React + Redux - KAYAC engineers' blog

    JSで書くデスクトップアプリが熱い Electron 熱いです。 Atom を始め、Qiita の Kobito や Slack など、 十分に実用できるアプリケーションが登場しはじめています。 なにかと話題のRPGツクールMVは、NW.js(旧node-webkit)ですが、これもJSで書かれていますね。 NW.js は、その他、女の子といちゃこらする系のゲームでも使われています。 JS でデスクトップアプリを書いて、うん千万売り上げるのも、もはや絵空事ではありません。 今回は、Electron と ReduxReact の組み合わせで、 デスクトップアプリを作るまでの、簡単なチュートリアルを書きます。 登場人物紹介 Electron Github が開発してる、JS でデスクトップアプリが書けるすごいやつ NW.js より活発そうですごい React Facebook 製のすごいやつ

    Electron + React + Redux - KAYAC engineers' blog
    oppara
    oppara 2016/01/14
    Electron + React + Redux | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • #24 CSSでブロックレベル要素を上下左右センターリングする方法 - KAYAC engineers' blog

    こんにちは、フロントエンドエンジニアのコウです! この記事はTech KAYAC Advent Calendar 201524日目です。 小テスト 問題:CSSで、灰色の円 div.circle をラッパー div.wrapper の中央に配置する方法は? CSSを下のテキストエリアに書いてください。.circle の高さと幅は 100px です。 See the Pen center the block both vertically and horizontally by GSSxGSS (@gssxgss) on CodePen. できましたか? おめでとうございます〜 どの方法をつかいましたか? それでは、様々なセンターリングの方法を見てみましょう! (プレビューコード画面右下の"+"と"-"を何回か押してみてください) CSSレベル1の大先輩ーーvertical-align と

    #24 CSSでブロックレベル要素を上下左右センターリングする方法 - KAYAC engineers' blog
    oppara
    oppara 2016/01/08
    CSSでブロックレベル要素を上下左右センターリングする方法 | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • 機械学習をつかって「今日なに着てく?」を教えてもらうためのモック - KAYAC engineers' blog

    tech.kayac.com Advent Calendar 2015 14日目担当の @_somtd です。 最近暑かったり、寒かったりどうもおかしな気候がつづきますね。 若いエンジニアがどんどん増えて立場が危うい昨今。気候の変化に柔軟に対応し、身体だけは健康でいたいと願っています。 そんな中、今回のアドベントカレンダーでは機械学習をつかって「今日なに着てく?」を教えてもらうためのモックを試します。 問題を簡単にするために(時間がなくてリアルなデータを用意できなかったので)以下のデータセットを用意します。 データ 100日分の「なにを着たか?」というデータ sample_wear.txt temperature:気温 rainfall:降水確率 outer:アウター(コート等) (0:着ない/1:ジャケット/2:ナイロンパーカー/3:ダウンジャケット) tops:トップ(上着) (0:T

    機械学習をつかって「今日なに着てく?」を教えてもらうためのモック - KAYAC engineers' blog
    oppara
    oppara 2016/01/05
    機械学習をつかって「今日なに着てく?」を教えてもらうためのモック | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • Objective-C で RFC を斜め読みして WebSocket サーバを書いた話 - KAYAC engineers' blog

    この記事は tech.kayac.com Advent Calendar 2015 の21日目、 @Gemmbu がお送りします。 NOTE これ作る前までは WiiU って体に対してコントローラが複数繋げられると思っていたんですが、一つだけなんですね Apple TV がリリースされたことですし、何かアプリを作りたいなと思って Apple TV は居間で使うから、一人でやるよりみんなでできるのがいい みんなで使うのに Apple TV アプリに加えて iOS/Android アプリを落とすのはめんどい それなら Apple TV アプリ内に HTTP/WebSocket サーバ立ち上げてそこみんなのスマフォをつなげればいいのでは? って上記を試せるコードをサクッと書いてみましたので、サンプルプロジェクトを実装しましょう ソースコードの入手 cocoapods 対応とかしていないので h

    Objective-C で RFC を斜め読みして WebSocket サーバを書いた話 - KAYAC engineers' blog
    oppara
    oppara 2015/12/29
  • App StoreのレビューをSlackに流すbotを作ってみた - KAYAC engineers' blog

    はじめに ※ この記事は Tech KAYAC Advent Calendar 2015 11日目の記事です はじめまして。「ぼくらの甲子園!ポケット」というスマフォゲームアプリの開発と運用を担当している@laoujiです。 サービスインしているゲームの運用をしているエンジニアにとってユーザの声を聞くことが非常に重要だと思います。 約半年前にApp StoreやGoogle Playのアプリレビューの内容を社内IRCに流すバッチスクリプトを作って、定時的にレビューを読むことを習慣にしています。 それから時間が経って、7日に@fujiwaraが説明したように、9月末ぐらいからチーム内のコミュニケーションをほぼ全部Slackに移行しました。 その作ったバッチスクリプトの結果がnopasteのマルチホスト対応のおかげで引き続きSlack上でも見れますが、Slackになるとやっぱりplain te

    App StoreのレビューをSlackに流すbotを作ってみた - KAYAC engineers' blog
    oppara
    oppara 2015/12/12
  • 世界の何処かで MySQL(InnoDB)の REPEATABLE READ に嵌る人を1人でも減らすために - KAYAC engineers' blog

    tech.kayac.com Advent Calendar 2015 8日目担当の @m0t0k1ch1 です。 今年は MySQL さんにいろいろ泣かされた1年でした。特に、あの夏、幾夜をともにした実行計画のゆらぎは一生忘れな(ry さて。。。今回は、そんな中でも誰もが一度は嵌るであろう(?)MySQL(InnoDB)の REPEATABLE READ の嵌りどころについて自分なりにまとめてみようと思います。 この記事が目指すこと MySQL の各トランザクション分離レベルの嵌りどころについては、現状でも種々のブログ記事などでまとめられており、そんなに真新しい話ではないと思います。が、過去の自分のように、嵌ったことがない人間からすると、 話としてはなんとなく理解できる が、抽象的でいまいち身につかない というのが現実でした。嵌りどころに実際に嵌った今読み返してみると、「あーーー、、、そ

    世界の何処かで MySQL(InnoDB)の REPEATABLE READ に嵌る人を1人でも減らすために - KAYAC engineers' blog
    oppara
    oppara 2015/12/08
    世界の何処かで MySQL(InnoDB)の REPEATABLE READ に嵌る人を1人でも減らすために | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • 社内IRCをSlackに移行した時にやったこと - KAYAC engineers' blog

    藤原です。 カヤック社内では長らく社内のチャットシステムとして、Skype と IRC を併用してきました。Skype には一応全員アカウントを持っているのですが、IRCと比較すると botでの自動化が難しい 過去ログを参照しづらい 自分以外にだれもオンラインになっていないと発言できない (深夜の障害対応などで致命的) という特性のため、エンジニアを中心に好んで IRC を使用していたチームも多く、分断されていた状態でした。 今年は Slack が一気に世間的に広まったこともあり、ここはひとつ全社のチャットシステムを Slack に移行しよう!という気運が盛り上がり、現在自社サービスのすべてと一部のクライアントワークチームが Slack に移行完了しています。 (以前から Skype を使用している部署はまだ移行し切れていないので、全社統一は来年の課題です) このエントリでは、IRC から

    社内IRCをSlackに移行した時にやったこと - KAYAC engineers' blog
    oppara
    oppara 2015/12/08
    社内IRCをSlackに移行した時にやったこと | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • WebGLも怖くない!canvasライブラリを効率良く学ぶオススメの順番 - KAYAC engineers' blog

    このエントリーは tech.kayac.com Advent Calendar 2015 の4日目のエントリーです。 こんにちは! 今年の春、カヤックに新卒として入社した、フロントエンドエンジニアの深澤(@takumifukasawa)です。 今回は、「canvasのライブラリは手をつける順番で理解度が大きく変わる」と思った出来事について書きます。 canvasライブラリで表現の幅は広がるが、種類が多くて迷う。 僕は7月に、『1日1jsdo.it』という企画を始めました。主にcanvasの勉強のためです。 これは、「1日に1つプログラムで何か作品を作る → それをjsdo.it(※1)に投稿する」習慣のことです。 途中で1週間ほど間が空いてしまった時期はありますが、この習慣を4,5ヶ月ほど続けていて、いまのところ120個近くの作品が出来上がっています(たいてい、仕事を終えて帰ってから寝るま

    WebGLも怖くない!canvasライブラリを効率良く学ぶオススメの順番 - KAYAC engineers' blog
    oppara
    oppara 2015/12/08
    WebGLも怖くない!canvasライブラリを効率良く学ぶオススメの順番 | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • ブラウザ界のブルーオーシャン! Google Chromeの「新規タブ」を活用したサービスとは!? - KAYAC engineers' blog

    どうも、ご無沙汰しております。 カヤックで新卒2年目フロントエンドエンジニアをやっております、田島と申します。 さてさて、我々Webフロントエンジニアhtml, css, javascriptという武器を手に、 ブラウザという主戦場で戦っているわけですが、もはやブラウザという土俵は近年において、 レッドオーシャン極まりない状態と化しております。 たまには肩の力を抜いて、人が少ないところで勝負してみるのも、良いのではないでしょうか。 実は、ブラウザの中にもそんな「ブルーオーシャン」と呼ぶべき領域が存在しているのです。 それが、ココです。 そうです、ココです。 Google Chromeで「新規タブ」を開いたときに出る、真っさらなページです。ここを攻めましょう。 エンジニアの方ならご存知かと思いますが、このページは Chrome拡張をつくってダウンロードしてもらうことで、自由にカスタマイズす

    ブラウザ界のブルーオーシャン! Google Chromeの「新規タブ」を活用したサービスとは!? - KAYAC engineers' blog
    oppara
    oppara 2015/12/08
    ブラウザ界のブルーオーシャン! Google Chromeの「新規タブ」を活用したサービスとは!? | https://t.co/nzgBh7qXM9 - KAYAC engineers' blog B!
  • 今年テストで頑張ったことまとめ - KAYAC engineers' blog

    この記事は tech.kayac.com Advent Calendar 2015 2日目です。 こんにちは、最近よく過激派と呼ばれている穏健派のshogo82148です。 今年一年、安心して開発ができるようテストに特に力を入れてきました。 そこで今年テストでおこなった取り組みを振り返ってみようと思います。 残念ながらGoではなくPerlのテストのお話です。 テストをとにかく速くする! 最初に手をつけたのはテストのスピードです。 まず全部のテストが通るようリファクタリングをしてから機能追加というスタイルで開発していたんですが、 全部のテストが終わるまでに10分20分もかかっていてはいつまでたっても機能追加に着手できません。 Jenkins EC2 Plugin とりあえずマシンパワーで解決だ!ということでEC2でマシンパワーの高いインスタンスを使いました。 Spot Instanceを必要

    今年テストで頑張ったことまとめ - KAYAC engineers' blog
    oppara
    oppara 2015/12/02
  • 今年の新人研修はgoでした - KAYAC engineers' blog

    新人研修のgo担当だったhandlenameです。 昨夏、Go言語を積極的に推進していきます。という宣言を出しましたが、 この一環として新人研修で扱う言語としてgoが選ばれました。 研修では何をやったのか Webサービスの開発・運用に関わる要素を対象としました。 goの研修に使える時間は合わせて10時間程度と限られていたこともあり、 かなり内容を絞っています。 開発環境の準備 研修に入る前に、受講者それぞれに開発環境の準備をしてもらいました。 brew install go 環境変数の設定 エディタの設定(保存時にgofmt自動実行) 幸いここで躓いた受講者はいなかったようです。 Tour of Go プログラミングは全くの未経験、という受講者はいなかったので、 いきなりTour of Gogoのコードを書いてもらいました。 基文法/制御構文/データ構造/並列処理 の4つのセクションに

    今年の新人研修はgoでした - KAYAC engineers' blog
    oppara
    oppara 2015/05/01
  • #24 mirageがDockerの中で走るようになりました、その他開発秘話 - KAYAC engineers' blog

    この記事は tech.kayac.com Advent Calendar 2014 24日目です。 tech.kayac.com アドベントカレンダー、いかがでしたか? こんにちは、@acidlemon です。今日はクリスマスイブ! 今年のtech.kayac.com Advent Calendar はお楽しみいただけたでしょうか? Unityあり、Golangあり、Rubyあり、Javascript/ECMAScriptあり、Perlありとバラエティに富んだ内容でしたね。個人的にはSwiftがなかったのが心残りなのですが…。まぁ来年若者にがんばってもらいます。 また、1日目でご紹介した、ぼくがノリで11月末にIKEAで買ってきたリアルアドベントカレンダーも無事ぼくの手元に帰ってきました。チョコおいしいです。 ※心に余裕がなかったらしく、「書いたら」が「買いたら」になっている… さて、今年

    #24 mirageがDockerの中で走るようになりました、その他開発秘話 - KAYAC engineers' blog
    oppara
    oppara 2015/01/24
    mirageがDockerの中で走るようになりました、その他開発秘話 | http://t.co/3WL1PKcyVu - KAYAC engineers' blog B!
  • #2 最近goで色々作った話 ~ 今年も残り18営業日 ~ - KAYAC engineers' blog

    はじめに こんにちは、1日目担当の@p_chinから褒められてるのか嫌味なのか分からない紹介をうけ、更には 頼りGayのある先輩とtypoされ下からの突き上げが厳しいなぁ…と感じる今日この頃。 @Konboi です。 今年の teck kayac AdventCalendar2014 のテーマは 「自分のなかのアツいあれな話」 Go言語推しでいこう!ということもあり、最近はGoが自分の中でアツいです!激アツです!! 鉄は熱いうちになんとかというのでアツいうちに色々つくってみたので、今日は最近Goで作ったものを紹介しようと思います。 ghooks ghooks こちらはGithubのWeb hookのレシーバーで Github::Hooks::Receiver, octoks のGolang製だと思っていただければと思います。 これは現在携わっているプロジェクトの開発環境にも導入しており p

    #2 最近goで色々作った話 ~ 今年も残り18営業日 ~ - KAYAC engineers' blog
    oppara
    oppara 2014/12/04