タグ

ブックマーク / www.klab.com (16)

  • WebGLで暴力的な並列ソートに挑戦する

    日照時間足りてますか?やまだです。 KLab Advent Calender 11日目の記事です。 最近WebGLで実装できるちょっと強そうなソートアルゴリズムを知ったので書いてみました。 WebGLよくわかんないやーって人も雰囲気だけでも伝われば幸いです。 強さの秘訣 WebGLは3Dを描くAPIとして著名ですが、2Dはもちろん、工夫次第で汎用計算(GPGPU)にも応用できます。 WebGLでの演算は通常のJavaScript演算とは違い、GPUを使った並列な浮動小数点演算を可能とします。 そして、ソートアルゴリズムの中には計算量こそ地味なものの、並列処理が可能なものがあります。 そのうちの一つがバイトニックソートです。 GPUを使い、物量で計算する暴力的な並列ソートをやっていきましょう。 バイトニックソートとは 前述のとおり、並列処理が可能なソートアルゴリズムです。 配列を小さい領域に

    WebGLで暴力的な並列ソートに挑戦する
  • 型推論のしくみ

    このエントリーは、KLab Advent Calendar 2015 の15日めの記事です。 こんにちは、めっきり Jenkins の介護士となった @kakkun61 です。 趣味では Haskell を書いているのですが、そこでお世話になっている「型推論」のしくみを少し知ることができたのでみなさんに紹介したいと思います。 初めにお断わりしておくと、これから紹介する内容は『型システム入門』に全て書かれてあることです。KLab では『型システム入門』輪講をしているのですが、一緒に勉強している同僚と社外から先生として来ていただいている方にこの場を借りて感謝の意を表します。ひとりだとここまで読めなかったと思います。 『型システム入門』 型推論の解説に入る前に少し『型システム入門』について書こうと思います。 『型システム入門』は原著名 “Types and Programming Languag

    型推論のしくみ
  • EmscriptenからSSEとかpthreadを使って爆速にする

    Webでとにかく高速に計算したい やまだです。Webでとにかく高速な計算を行うために人生の何%かを使っています。 前回はJavaScriptから直接SIMD.jsを呼びましたが今回はEmscriptenを使用し、C言語からSIMD命令を呼び出してみます。 題材としては定番ですがマンデルブロ集合を使用します。 マンデルブロ集合は以下の漸化式で計算が可能でしばしば並列演算の課題としてとりあげられます。 z は複素数なので実部と虚部をXY平面に表すと以下のようになります。 Emscriptenを使う 今回はWebでということでC言語のコードをJavaScriptコードにコンパイルするEmscriptenを使用します。 Emscriptenを使用するとasm.jsを利用した最適化をかけることができるため単純にJavaScriptで実装した時よりも高速になることがあります。 Emscriptenでは

    EmscriptenからSSEとかpthreadを使って爆速にする
  • Agda ハンズオン活動報告

    こんにちは、@trigottです。この記事では、社内で行っている Agda ハンズオンの紹介をします。 はじめに Agda とは、依存型の使える関数型プログラミング言語、あるいは定理証明支援系です。Coq などとは違いタクティックは使わず証明項を直接記述するスタイルですが、Emacs 上で対話的に証明を進めるためのインタフェースが用意されているため、効率的に証明を進めることができます。Agda で n * 2 と n + n が等しいことを証明する動画を撮影してみました。雰囲気がつかめれば幸いです。 KLab では月に1回 ALM(All Layers Meeting)という社内勉強会を開催しています。学生のころから Agda が好きで触っていたこともあって、Agda に関する発表をしたところ、先輩からハンズオンを開いてほしいということを言われました。ハンズオンとかやったことないし、Agd

    Agda ハンズオン活動報告
  • 新規アプリ開発プロジェクトでの制作物納品フロー

    エンジニア不要で納品をまわす仕組み〜 このエントリーは、KLab Advent Calendar 2016 の12/24の記事です。 KLabのとある新規アプリ開発プロジェクトでは、アプリ内で使用する制作物の納品フローを工夫して、エンジニアの手がどんどん不要になってきています。 現在稼働しているワークフローを紹介します。 納品フローに関わるプロジェクトチームは大きく5つの班に別れています。 ゲーム内の各種パラメータを入力する「企画班」 UIパーツを作成する「UI班」 演出を作成する「演出班」 サウンドを作成する「サウンド班」 プログラム作成の全般を担う「開発班」 以上の各班の作業内容がプロジェクトの最終成果物としてのipaやapkファイルに取り込まれるまでの流れです。 以下では単に「バイナリ」と書いた場合ipa、apkファイルのことを指します。 また、プロジェクトで使用しているGitレポ

    新規アプリ開発プロジェクトでの制作物納品フロー
  • 今夜勝ちたい CODE VS for STUDENT 攻略

    稿はKLab Advent Calendar 2016 の9日目の記事になります) こんにちは, @mecha_g3 です. ISUCON6 の優勝賞金で新型の MacBookPro を購入しました. キーボードの打ち心地にどうも慣れられなかったり, USB-C の周辺機器がたくさん増えたりしていますが, 概ね満足しています. 格ゲーの攻略記事のようなタイトルですが, この1ヶ月ほど CODE VS for STUDENT というプログラミングコンテストに注力していたので, 今日はそれについて書きたいと思います. CODE VS とは CODE VS とは, お題となるゲームの, 最強のAIを開発するプログラミングコンテストです. CODE VS for STUDENT 公式サイト https://student.codevs.jp 主催はチームラボさんとキャリフルさんで, KLabは

    今夜勝ちたい CODE VS for STUDENT 攻略
  • PlayCanvas で遊んでみる

    KLab Advent Calendar 8日目の記事です。 こんにちは knsh14 です。 KLabではUnityを使って iOS、Android の端末で遊べるようなゲームを開発し、提供しています。 その一方で、それら以外の環境でも遊べるゲームが作れないかということで常に技術検証を行っています。 最近では 「ユニティちゃんのホームランスタジアム」 を Apple TV で提供したりしています。(紹介記事) その活動の一環として、今回はブラウザで快適に動作する 3D のゲームを作るべく、Unity ではないゲームエンジンを使って開発したのでその紹介をしようと思います。 なぜUnityを使わなかったのか? ブラウザ動作するためのゲームを開発するにあたって、幾つかの制約がありました。 モバイル、PC のブラウザで動作すること 容量が小さい(理想は 3MB 以下におさまる)こと 僕らが普段使

    PlayCanvas で遊んでみる
  • GraphDBと不老不死

    LevelDBはバイト列の前方一致による検索が可能なので、これで、 ノードの全検索 ノードのタイプによる検索 ノードのタイプとIDによる検索 エッジの全検索 エッジの始点IDでの検索 始点IDと方向での検索 始点IDと方向とタイプでの検索 始点IDと方向とタイプと終点IDでの検索 ができます。 一方で、このキー構造だと、終点から始点への検索ができないので、エッジを格納するときは、始点から終点までの前向きエッジと終点から始点までの後ろ向きエッジを同時に格納することで解決しました。 こちらが、実際に作ってみたリポジトリです。 以下にノードとエッジのコードを提示します。 node.go edge.go また、DBのOpenや検索等のためのコードが以下になります。 graphdb.go 公開されている多くのGraphDBには、ロックやトランザクションや各種制約、クエリ言語やサーバーとして動かすため

    GraphDBと不老不死
  • SEのための前払式支払手段の会計処理

    はじめに オンラインゲームでは、金貨やコインといった ゲーム内で通貨のように利用可能なアイテム が必ずといって良いほど登場しますよね。 先日もこのTech Blogにて、ゲーム内で発行する仮想通貨データ分析業務についての記事が掲載されましたが、ゲーム内通貨の運用は各種法令等も絡むことからKLabでも特に注意して取り扱いを行っている業務の一つです。 そこで今日はゲーム内通貨の運用に関する業務やKLabとしての考え方を、会計上の観点からもう少し掘り下げてご紹介します。 法令におけるゲーム内の金貨等の位置づけ オンラインゲーム内でアイテムの購入に利用できる金貨やコインといったトークン、上記ではゲーム内通貨と言いましたが、これは資金決済に関する法律(以下資金決済法、とします)で各種の規定がされています。そして上記のようなゲーム内の概念は、この法律の中では前払式支払手段という名前で定義付けがされて

    SEのための前払式支払手段の会計処理
  • PHPにおけるシンボリックリンクを使ったデプロイの危険性について(「realpath_cache」和訳)

    2016/10/31 PHPにおけるシンボリックリンクを使ったデプロイの危険性について(「realpath_cache」和訳) PHP サーバーサイド この文書は@julienPauliさんによる記事「realpath_cache」の日語翻訳です。元々は@gilbiteさんがKLab社内向けに翻訳したものでしたが、日語では見たことがない指摘を含んでおり今でも有用だと考えたため、@julienPauliさんの了解を取った上で@hnwが修正・追記して公開するものです。 はじめに PHP に realpath_cache_get(), realpath_cache_size() という関数があることをご存じでしょうか? また、php.ini に realpath_cache から始まる設定項目があることは? realpath cache は知っておきたい極めて重要な概念です。 特に、コードの

    PHPにおけるシンボリックリンクを使ったデプロイの危険性について(「realpath_cache」和訳)
  • 新卒研修でGo研修を担当しました

    @tenntennです。 今年度の新卒研修でGo研修を担当しました。 スライドで100ページを超えるボリュームの資料を14時間かけて、じっくり網羅的に講義を行いました。 内容は今まで私が外部で発表したスライドをまとめて補足を足していった形になってます。 資料はSlide Shareに公開してあるので、ぜひチェックしてみてください。 また、資料中に扱っているソースコードもGithubで公開していますので、そちらも参考にしてください。 資料 ソースコード 研修をやってみて 新卒の反応は、普段触れない言語に触れて新鮮だったという反応やゴールーチンとチャネルが難しいなどさまざまでした。 スパルタ気味で進め方が少し早かったせいか、ついていくのが大変だったみたいです。 それでも、自主的にpingコマンドを作ってくる強者もいたり、いい刺激になったんじゃないかと思います。 裏話 実は最初はGoで簡易ゲーム

    新卒研修でGo研修を担当しました
  • 後悔しない! モバイルオンラインゲームの仮想通貨管理

    分析基盤チームの高田です。 私のチームでは、各種ゲームのデータを集積するデータ分析システムの開発・運用を行なっています。 この記事では、モバイルオンラインゲームのクリティカルなポイントのひとつである仮想通貨の管理について、開発・運用という立場から気をつけていることを紹介したいと思います。 仮想通貨の扱いは、最終的には、法律・会計上の要請から決まってくるものだったりします。このため、開発者が単独で決められることは決して多くないです。しかし、ゲームの運用チームと会計部門の間に入ってルール作りを進めていくのは、経験上開発チーム主導で行なう方がうまくいくように思います。 重要なのは、「さまざまなユースケースを先に想定し、ルールを決めさせる」「システムの都合と、各部門の要件を整理する」というあたりです。要するに、「こういうケースがありえるんですが、この場合会計部門としてはどういうデータが必要ですか?

    後悔しない! モバイルオンラインゲームの仮想通貨管理
  • Google Play Games Services Real-time Multiplayer の通信時間計測レポート

    2015/11/11 Google Play Games Services Real-time Multiplayer の通信時間計測レポート Android ネットワーク 皆さんは Google Play Games Services (GPGS) を使っていますか? おそらくスマートフォンゲームを制作している企業の開発者の方々は基的な機能への対応を済ませていることと思います。 今回は、GPGS の Real-time Multiplayer という機能のリアルタイム性を検証すべく、2 端末間でメッセージを往復させた時にかかる時間について調べました。 まず、GPGS がどういうものか概要を見ていきましょう。 Google Play Games Services とは Google Play Games Services では Google+ ログインによりプレーヤーを認証することで以下

    Google Play Games Services Real-time Multiplayer の通信時間計測レポート
  • 食わず嫌いは良くない!?使ってみればわかった男前エディタVim!!

    皆様は、メンターにマウスを禁止されたことはありますか!? 新卒入社1年目のshotaです! 私は恥ずかしながら最近までvimの存在を知らなかったのですが、とあるきっかけがあり3ヶ月程前にVimを触り始めてみました!その期間で、どのようにvimに歩み寄ったかを紹介します。 今までvimに触れたことが無く、これからvimを触りたい!と考えてる方の助けになればと思います。 第一印象 入社した当時はvimというエディタの存在を知りもしませんでした。 というのも学生時代はDirectXやOpenGLといったグラフィックAPIをVisualStudio等の統合開発環境で主に作業をしていたため、CLIに触れる機会も無くエディタに対して何一つ不自由を感じたことがなかったからです。 そんな自分が初めてvimを触れたのは入社後の研修中のことでした。その時の印象を箇条書きで書きますと なんでマウス使わないの?

    食わず嫌いは良くない!?使ってみればわかった男前エディタVim!!
    manabou
    manabou 2015/11/06
  • Docker を使った開発環境構築事例

    皆さん Docker 使ってますか? なんだかよくわかんないからいいや・・・ そんなふうに考えていた時期が俺にもありました。 ということで今回は身近な例として、ローカルマシン上で Docker を使って開発環境を構築した事例を紹介します。 どちらかというと、ぶっちぎってサーバサイド寄りの話でしかも管理寄りの話だったりもしますが、その他の方々にも何かお役に立てれば幸いです。 問題 KLab にはたくさんの案件が有りますが、その中には WEBサーバやDBサーバなどが全部詰まった VM イメージを配布する、という方法でローカルの開発環境を提供している案件も有ります。 それらの案件も息が長くなり、下記のような状況が散見されるようになってきました。 配布した VM を個人好みに育ててしまって、アップデートの心理的障壁となっている 追加のミドルウェアを導入したが、環境のアップデートの伝播が行いにくい等

    Docker を使った開発環境構築事例
  • GoだけでAndroidアプリを作る その1 〜インストール編〜

    連載目次 その1 〜インストール編〜 その2 〜画像の表示とイベント〜 その3 〜タッチイベントとライフサイクル〜 その4 〜音の再生とセンサー〜(予定) その5 〜簡単なゲームをつくってGoogle Play Storeに公開しよう〜(予定) はじめに @tenntennです。 もうすぐGoのバージョン1.5がリリースされる予定ですが, みなさまはどの機能に注目しているでしょうか? コンカレントGCだったりshared libraryが作れるようになったりと,Go 1.5は非常に楽しみです。 その中でも私は,Go 1.4で入ったGo Mobileのアップデートに注目しています。 Go Mobileは,Goを使ってモバイルアプリを書くためのツール類を提供するプロジェクトです。 Go 1.5では,iOS向けのアプリがビルドできるようになったり,Androidのサポートが強化されるようです。

    GoだけでAndroidアプリを作る その1 〜インストール編〜
  • 1