こんにちは。アルバイトの take (@ww24) です。
みなさん、情報セキュリティに気を付けていますか?
特に Web サービスにおいて、セキュリティへの配慮は必要不可欠です。とりあえず動けば良いと、正常系にのみ気を取られていると脆弱性は生まれます。
先日、社内で Web Security 勉強会を実施しました。
2015年07月16日 (木)
こんにちは。アルバイトの take (@ww24) です。
みなさん、情報セキュリティに気を付けていますか?
特に Web サービスにおいて、セキュリティへの配慮は必要不可欠です。とりあえず動けば良いと、正常系にのみ気を取られていると脆弱性は生まれます。
先日、社内で Web Security 勉強会を実施しました。
2015年04月24日 (金)
2014年08月08日 (金)
弊社技術ブログへお越しのみなさま、こんにちは。今年度入社の新人、 YamaYuski です。
先日、社内勉強会にて「traitを使って楽したい話」という演目で簡単に trait について発表しました。
trait が実装された PHP5.4 は2年も前にリリースされたものなので、何故今更、という話になると思います。
しかし、ネット上(特に日本語圏)においての trait の記事はまだまだ少なく、具体例を探すのも大変だったので、「もしかして trait はあまり浸透していないんじゃないか?」と考え、 trait の有用性を世に広めるためにこの記事を作り始めました。
今回は、初心者ながら個人的に調べたり考えたりしたことを、
の4点に絞ってご紹介しようと思います。
今回ここでは「何故 trait という機能が搭載されたか」を紹介します。
概要に関しては公式のマニュアルが非常に明快な解説をしているので、是非お読みください。
結論から言うと、 trait は…
2014年05月29日 (木)
2013年08月27日 (火)
こんにちは。今回は過去に勉強会で発表したSlateについて紹介します。
Slateとは、OS X上で動作し、ウィンドウのフォーカス移動・リサイズ・移動などをキーボードから楽に行えるようにするアプリケーションです。ウィンドウ操作を高速に、マウスから手を離さずに行えるようになります。
実際にSlateでウィンドウのリサイズ/移動を行っているところのgifアニメです。このような操作の他、
などの操作をキーボードから行うことができます。
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日 (金)
はじめまして アルバイトとして入社1ヶ月のikedaです。
社内ブログは新人の通る道ということで今回の勉強会のレポートを書かせていただきます。
今回の勉強会では8月に行われたCEDEC2012での山本大介氏によるセッション「パズル&ドラゴンズ ~嫁と開発と私~」を読む会を行いました。
このセッションからヒットする(万人受けする)ゲームの企画を学びました。
このセッションで重要だと思う点をまとめてみました。
・メインゲームの面白さだけを追及し過度なソーシャル性などに頼らない
・ゲーム内で売りたい内容は本開発前にいくつか考えておく
・遊んでくれない理由を考える
・有料販売前提で その価格で提供する覚悟で開発を行う
・一番遊ばせたいところはサーバで管理する
・家族・友人などの普段ゲームで遊ばない人にプレイしてもらう
中でも私が一番印象に残ったのは、「嫁レビュー」と名づけられた 社員の嫁にプレイしてもらい意見を聞くというものです。さらに この嫁レビューで開発者の想定外の操作をされた事がきっかけでパズドラ特有のコンボシステムが生まれたという事も驚かされました。
私は今回の勉強会で初めてパズドラというゲームを知りました。
そしてパズドラというゲームを知ってから地下鉄に乗ってみると
予想以上に遊んでいる人が多いことに驚きました。
今回のセッションやパズル&ドラゴンズの詳細は以下をご覧ください。
2012年08月16日 (木)
今回の勉強会では技術評論者から出版されている「Mobageを支える技術」(DeNA著)を読みました。この勉強会は複数回に分けて行われる予定で、第一回目の今回はレプリケーション遅延のページを中心に読みました。
近年急成長し、横浜ベイスターズを買収するなど飛ぶ鳥を落とす勢いのDeNAですが、ソーシャルゲームの運用経験が豊富な同社が著した本ということで、その内容は私たちの期待に十分に応えるものでした。
本書を読み、レプリケーション遅延をいかに防ぐかがソーシャルゲーム運営上の重要事項と痛感させられました。中でも画面遷移を頻繁に行うヘビーユーザーはわずかなレプリケーション遅延にも気づくというくだりは驚きでした。こうしたヘビーユーザーでも不満なく遊べるような体制を構築することが、全体の顧客満足度の向上に欠かせないと感じました。
ほかにも、安全なMySQLのバージョンアップの手順や、レプリケーション遅延の防止策など、DeNAと同じくソーシャルゲームを運営する当社にとって参考になる部分が多く、実際の業務に応用できそうなものも多々ありました。
レプリケーション遅延防止策の一つとして、あえてスレーブにスペックの劣るサーバを入れることで、遅延しそうな状態を予測する手法などは非常にうまい方法だと皆感心していました。
ソーシャルゲームの運用を行う方やMySQLを用いて高負荷のサービスを運用している方はこの「Mobageを支える技術」を一読してみてはいかがでしょうか。
——————
当社ではMySQLに精通した方、高負荷のサービスを運用した経験のある方を募集しています。興味をお持ちの方は当社の求人ページをご覧ください。 → 求人ページ
2012年07月13日 (金)
こんにちは、kamuiです。今回の社内勉強会では協力会社として弊社に勤務しているスタッフの方にお話をいただき、他社では開発や運用をどのように行っているのかを勉強する会を開きました。
勉強会では、スタッフの方の所属会社における基本的な開発体制やサーバー構成の話をはじめとして、テストファーストで開発を進めているといった話や、開発部門の企画との窓口が開発のリーダーに一本化され、開発部門の人間がより開発に集中できるようになっているといった話は弊社にとって非常に参考になりました。発表が終了した後の質疑応答では、
『開発・運営にどれほどの人員を割いているか』
『テスト時のデバッグチームと開発チームの連携はどうなっているか』
『開発言語と開発に用いるフレームワークはどうしているか』、
などの質問が勉強会に参加した皆さんから次々に上がりました。その後も活発に議論が行われ、有意義な勉強会となったと思います。今回の勉強会をきっかけに他社の開発体制の良い部分を取り入れ、弊社の開発体制がより良いものになるよう努力していきたいと思います。
—————
弊社では他部門とのコミュニケーションの窓口となり、意見を開発にフィードバックできるようなエンジニアの方を募集しています。
詳細はこちらをご覧ください → 求人ページ