株式会社インフィニットループ PHPとスマホアプリ開発を行う札幌のシステム会社

技術ブログ

  1. トップ>
  2. 技術ブログ>
  3. 社内勉強会の記事一覧

2015年07月16日 (木)

著者 : 

第1回社内 Web Security 勉強会実施レポート

Web Security 勉強会1

こんにちは。アルバイトの take (@ww24) です。

みなさん、情報セキュリティに気を付けていますか?

特に Web サービスにおいて、セキュリティへの配慮は必要不可欠です。とりあえず動けば良いと、正常系にのみ気を取られていると脆弱性は生まれます。

先日、社内で Web Security 勉強会を実施しました。

(続きを読む…)

2015年04月24日 (金)

著者 : 

【社内勉強会レポート】Service Workers Push APIハンズオン

JavaScript 大好きな、アルバイトの take (@ww24) です。

インフィニットループでは、毎週金曜日に社内勉強会を行っています。

先日リリースされたばかりの Chrome 42 の新機能、 Push API のハンズオンを行いました。

slide

 

Push API を用いると、 Web アプリでネイティブアプリのように、アプリを起動していない時にも通知を発行することが可能になります。

現在は Google Chrome と Chrome for Android しか対応していませんが、今後対応するブラウザが増えていくと思われる注目の技術仕様です。

(続きを読む…)

2014年08月08日 (金)

著者 : 

PHP5.4 で実装された trait のまとめと実際の利用例

弊社技術ブログへお越しのみなさま、こんにちは。今年度入社の新人、 capiba- です。

先日、社内勉強会にて「traitを使って楽したい話」という演目で簡単に trait について発表しました。
trait が実装された PHP5.4 は2年も前にリリースされたものなので、何故今更、という話になると思います。
しかし、ネット上(特に日本語圏)においての trait の記事はまだまだ少なく、具体例を探すのも大変だったので、「もしかして trait はあまり浸透していないんじゃないか?」と考え、 trait の有用性を世に広めるためにこの記事を作り始めました。

今回は、初心者ながら個人的に調べたり考えたりしたことを、

  1. trait とはなにか
  2. trait の実装方法と利用方法
  3. どのようなケースで実装するか
  4. 実装時の小ネタ

の4点に絞ってご紹介しようと思います。

1. trait とはなにか

今回ここでは「何故 trait という機能が搭載されたか」を紹介します。
概要に関しては公式のマニュアルが非常に明快な解説をしているので、是非お読みください。

結論から言うと、 trait は…

(続きを読む…)

2013年08月27日 (火)

著者 : 

OS Xで作業効率を5%上げるSlateの紹介

こんにちは。今回は過去に勉強会で発表したSlateについて紹介します。

Slateとは

jigish/slate – Github

Slateとは、OS X上で動作し、ウィンドウのフォーカス移動・リサイズ・移動などをキーボードから楽に行えるようにするアプリケーションです。ウィンドウ操作を高速に、マウスから手を離さずに行えるようになります。

slate_resize_example

実際にSlateでウィンドウのリサイズ/移動を行っているところのgifアニメです。このような操作の他、

  • ウィンドウの配置の記録/復元
  • 特定のアプリケーションや、指定した方向にフォーカスを移す
  • スクリーン間でウィンドウを飛ばす
  • ウィンドウにヒントを表示してフォーカス移動する

などの操作をキーボードから行うことができます。

Slateの設定

slate_menu

Slate自体はステータスバーに常駐する簡素なアプリケーションで、細かな設定を行うGUIなどは用意されていません。Slateの設定は独自の書式の.slateかJavaScriptで.slate.jsに記述します。ある程度の操作は.slateで記述できますが、より複雑な操作を行いたくなったら.slate.jsを書くと良いでしょう。

詳細な設定方法はgithub上によくまとめられています。
README.mdには使用できるoperationなどが, WikiのJavaScript-ConfigsにはJavaScriptから扱える各種APIが記述されています。

例えばvim-likeにalt + hjklでフォーカス移動がしたい場合は次のように記述できます。

// .slate
bind l:alt focus right
bind h:alt focus left
bind k:alt focus up
bind j:alt focus down

少々面倒ですが、慣れると快適なので自分好みに設定していくことをおすすめします。
参考に私の設定ファイルの一部を貼っておきます。私は.slate.jsに全て書いていますが、.slate.slate.jsは併用することができます。

// .slate.js
var util = {
  // alt + ..
  key: function(k, mod) {
    return k + ':alt' + (mod ? ',' + mod : '');
  },
  focusWindow: function(f) {
    var hit = false;
    slate.eachApp(function(app) {
      if (hit) return;
      app.eachWindow(function(win) {
        if (hit) return;
        if (f(win)) {
          win.focus();
          hit = true;
        }
      });
    });
  },
  nextScreen: function(screen) {
    return slate.screenForRef(String( (screen.id()+1)%slate.screenCount() ));
  }
};

// return     .. iTermを起動
slate.bind(util.key('return'), function(win) {
  slate.shell('/usr/bin/open -n -a iTerm');
});

// r+ctrl     .. Slateの再起動
slate.bind(util.key('r', 'ctrl'), function(win) {
  slate.operation('relaunch').run();
});

// hjkl       .. その方向へフォーカス移動
slate.bind(util.key('h'), slate.operation('focus', { direction: 'left' }));
slate.bind(util.key('j'), slate.operation('focus', { direction: 'down' }));
slate.bind(util.key('k'), slate.operation('focus', { direction: 'up' }));
slate.bind(util.key('l'), slate.operation('focus', { direction: 'right' }));

// i          .. 下に隠れているウィンドウをフォーカス
slate.bind(util.key('i'), slate.operation('focus', { direction: 'behind' }));

// o          .. スクリーン間でフォーカスを移動
slate.bind(util.key('o'), function(win) {
  var next = util.nextScreen(slate.screen());

  util.focusWindow(function(win) {
    return win.screen().id() == next.id();
  });
});

// o+shift    .. 次のスクリーンへ飛ばす
slate.bind(util.key('o', 'shift'), function(win) {
  if (!win) return;
  var next = util.nextScreen(win.screen());

  win.move(next.visibleRect());
});

// j+shift    .. 4隅に飛ばす
var corners = slate.bind(util.key('j', 'shift'), slate.operation('chain', {
  operations: _.map(['top-right', 'bottom-right', 'bottom-left', 'top-left'], function(d) {
    return slate.operation('corner', {
      direction: d,
      width: 'screenSizeX/2',
      height: 'screenSizeY/2'
    });
  })
}));

// k+shift    .. 左右に飛ばす
slate.bind(util.key('k', 'shift'), slate.operation('chain', {
  operations: _.map(['left', 'right'], function(d) {
    return slate.operation('push', {
      direction: d,
      style: 'bar-resize:screenSizeX/2'
    });
  })
}));

// h+shift   .. ウィンドウが左にあるなら縮小, 右にあるなら拡大
slate.bind(util.key('h', 'shift'), function(win) {
  if (!win) return;
  var rect = win.rect();
  var bounds = win.screen().visibleRect();
  if (bounds.x + bounds.width - 30 < rect.x + rect.width) {
    rect.x -= bounds.width * 0.05;
    rect.width = bounds.x + bounds.width - rect.x;
  } else {
    rect.width -= bounds.width * 0.05;
  }
  win.doOperation('move', rect);
});

// l+shift   .. ウィンドウが右にあるなら縮小, 左にあるなら拡大
slate.bind(util.key('l', 'shift'), function(win) {
  if (!win) return;
  var rect = win.rect();
  var bounds = win.screen().visibleRect();
  if (rect.x < bounds.x + 30) {
    rect.x = bounds.x;
    rect.width += bounds.width * 0.05;
  } else {
    rect.x += bounds.width * 0.05;
    rect.width -= bounds.width * 0.05;
  }
  win.doOperation('move', rect);
});

// m          .. 最大化
slate.bind(util.key('m'), function(win) {
  if (!win) return;
  var bounds = win.screen().visibleRect();
  win.doOperation('move', bounds);
});

最後に

勉強会で使用したスライドに手を加えたものを貼っておきます。
この記事内ではSlateの基礎に視野を絞りましたが、スライド内では併用したいアプリケーションやSlateそのものの拡張についても言及しています。

スライドを開く

2012年11月09日 (金)

著者 : 

【社内勉強会レポート】 CEDEC2012のセッション「パズル&ドラゴンズ ~嫁と開発と私~」を読む会

はじめまして アルバイトとして入社1ヶ月のikedaです。
社内ブログは新人の通る道ということで今回の勉強会のレポートを書かせていただきます。

勉強会の様子

今回の勉強会では8月に行われたCEDEC2012での山本大介氏によるセッション「パズル&ドラゴンズ ~嫁と開発と私~」を読む会を行いました。

このセッションからヒットする(万人受けする)ゲームの企画を学びました。

このセッションで重要だと思う点をまとめてみました。

・メインゲームの面白さだけを追及し過度なソーシャル性などに頼らない
・ゲーム内で売りたい内容は本開発前にいくつか考えておく
・遊んでくれない理由を考える
・有料販売前提で その価格で提供する覚悟で開発を行う
・一番遊ばせたいところはサーバで管理する
・家族・友人などの普段ゲームで遊ばない人にプレイしてもらう

中でも私が一番印象に残ったのは、「嫁レビュー」と名づけられた 社員の嫁にプレイしてもらい意見を聞くというものです。さらに この嫁レビューで開発者の想定外の操作をされた事がきっかけでパズドラ特有のコンボシステムが生まれたという事も驚かされました。

私は今回の勉強会で初めてパズドラというゲームを知りました。
そしてパズドラというゲームを知ってから地下鉄に乗ってみると
予想以上に遊んでいる人が多いことに驚きました。

今回のセッションやパズル&ドラゴンズの詳細は以下をご覧ください。

CEDEC2012 パズル&ドラゴンズ ~嫁と開発と私~

パズル&ドラゴンズ公式サイト

2012年08月16日 (木)

著者 : 

【社内勉強会レポート】「Mobageを支える技術」を読む

今回の勉強会では技術評論者から出版されている「Mobageを支える技術」(DeNA著)を読みました。この勉強会は複数回に分けて行われる予定で、第一回目の今回はレプリケーション遅延のページを中心に読みました。

近年急成長し、横浜ベイスターズを買収するなど飛ぶ鳥を落とす勢いのDeNAですが、ソーシャルゲームの運用経験が豊富な同社が著した本ということで、その内容は私たちの期待に十分に応えるものでした。

本書を読み、レプリケーション遅延をいかに防ぐかがソーシャルゲーム運営上の重要事項と痛感させられました。中でも画面遷移を頻繁に行うヘビーユーザーはわずかなレプリケーション遅延にも気づくというくだりは驚きでした。こうしたヘビーユーザーでも不満なく遊べるような体制を構築することが、全体の顧客満足度の向上に欠かせないと感じました。

ほかにも、安全なMySQLのバージョンアップの手順や、レプリケーション遅延の防止策など、DeNAと同じくソーシャルゲームを運営する当社にとって参考になる部分が多く、実際の業務に応用できそうなものも多々ありました。

レプリケーション遅延防止策の一つとして、あえてスレーブにスペックの劣るサーバを入れることで、遅延しそうな状態を予測する手法などは非常にうまい方法だと皆感心していました。

ソーシャルゲームの運用を行う方やMySQLを用いて高負荷のサービスを運用している方はこの「Mobageを支える技術」を一読してみてはいかがでしょうか。

 

——————

 

当社ではMySQLに精通した方、高負荷のサービスを運用した経験のある方を募集しています。興味をお持ちの方は当社の求人ページをご覧ください。 → 求人ページ

2012年07月13日 (金)

著者 : 

【社内勉強会レポート】他社の開発体制を勉強する会

こんにちは、kamuiです。今回の社内勉強会では協力会社として弊社に勤務しているスタッフの方にお話をいただき、他社では開発や運用をどのように行っているのかを勉強する会を開きました。

勉強会では、スタッフの方の所属会社における基本的な開発体制やサーバー構成の話をはじめとして、テストファーストで開発を進めているといった話や、開発部門の企画との窓口が開発のリーダーに一本化され、開発部門の人間がより開発に集中できるようになっているといった話は弊社にとって非常に参考になりました。発表が終了した後の質疑応答では、

 

『開発・運営にどれほどの人員を割いているか』

『テスト時のデバッグチームと開発チームの連携はどうなっているか』

『開発言語と開発に用いるフレームワークはどうしているか』、

 

などの質問が勉強会に参加した皆さんから次々に上がりました。その後も活発に議論が行われ、有意義な勉強会となったと思います。今回の勉強会をきっかけに他社の開発体制の良い部分を取り入れ、弊社の開発体制がより良いものになるよう努力していきたいと思います。

—————

 

弊社では他部門とのコミュニケーションの窓口となり、意見を開発にフィードバックできるようなエンジニアの方を募集しています。

詳細はこちらをご覧ください → 求人ページ

  • このブログについて

    このブログは、札幌市の「株式会社インフィニットループ」が運営する技術ブログです。
    お仕事で使えるITネタを社員たちが発信します!

    最新の記事