サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
cflat-inc.hatenablog.com
AWSやMicrosoft Azureの両者共に言えることなんですがWebの管理画面の使い勝手がそれほど良くはありません。例えばストレージやキューにデータを手動で置いたり削除したりするのはとても面倒です。Azureのキューに至ってはデータを閲覧できません。 Microsoft Azureを使っていてWindowsを持っているなら、Visual Studioが管理ツールとして使えます。例えばファイルストレージならこんなふうに見たりアップロードしたりできるわけです。 (Browsing and Managing Storage Resources with Server Explorerより) というわけで早速私も実践してみました あらかじめインストールしておいたVisual Studio 2013を起動し、サーバーエクスプローラを開きます。すると、、、 ない!! ストレージも仮想マシンも「A
お金を払ってProライセンスを使っている人に朗報です。Unityがベータ版として提供する Unity - Cloud Build を使えば、いわゆる継続的インテグレーション(CI)が簡単に行えます。 弊社では「レポジトリの特定のブランチを監視させ、変更があったらiOS版とAndroid版をビルドして配布」という用途のために使用してします。 そうです、TestFlightのような配布機能まで備えており大変便利です。ProユーザーはJenkinsやTestFlightを個別にセットアップする必要がなくなります。 下準備 iOS用ビルドやAndroid用ビルドをするためにはいくつか下準備が必要となります。 identifierの用意 Bundle ID的なものを用意しておく必要があります。iOS Developer CenterでApp IDを作ったりしてiOS向け、Android向けの設定を終
Unityが出力したiOS用プロジェクトの手動編集をなんとかしたいと考えていたら、同じような人がやはり多いようでいろいろな方法がブログエントリで紹介されていました。 UnityでXcodeのプロジェクト設定を自動化したい(c#でPostProcessBuildを書く場合) - Qiita A-Liaison BLOG: Unity の PostprocessBuildPlayer を使って Weak Framework を追加する方法 調べた感じではCodeEditor-for-UnityやxcodeprojというRubyのgemを使う方法が多くみられました。前者のライブラリは最近はメンテされていないようですし、後者の場合Rubyが必要になるということで広く導入しにくい(関係者全員にxcodeproj gem入れろとはいえない)ので別の方法がない限りできないかなーと思っていたら、なんとBi
Railsで定時処理をやろうと思って色々トライしました。Sidekiq+Sidetiqを使ってHerokuの無料分で動作させることができたのでその手順を紹介します。 Railsでの非同期処理 古いものから新しいものまでいろいろ選択肢があります。 collectiveidea/delayed_job resque/resque mperham/sidekiq そしてRails4.2で実装される(された)ActiveJobというアダプタのような仕組みがあります。 以前開発したのアプリケーションではResqueを使っていたことと、3つのgemのなかではSidekiqが一番新しいということでSidekiqを使いました。 Sidekiqでの定時処理 本来Sidekiqは非同期処理のためのgemなので、Sidekiq単体では定期的に処理を実行するような仕組みはありません。X時間後に実行とかはありますが
今回は、jQuery を使って$('#hoge').hoge()とした時に、元のhogeの機能に加えて追加のコードが走るようにしたいですね、というお話です。 普通の JavaScript で関数をオーバーライドする方法 こちらは JSer なら常識ですね。 var orgHoge = window.hoge; window.hoge = function() { // TODO: 事前の追加のコード var result = orgHoge.apply(this, arguments); // TODO: 事後の追加のコード return result; }; なお、このコードを見て「処理が足りてないじゃないか」と言える方は、以降の話は全く必要ないかと思います。 jQuery の関数をオーバーライドする方法 では、jQuery で$('#hoge').hoge()とした時のhogeはどこで
UnityのTransform.Translate関数には、じつはちょっと注意が必要です。 簡単に言うと、transform.Translate(Vector3.right)とtransform.position += Vector3.rightは異なるというお話です。 手順1 まず、原点に球体を用意します。 手順2 次にInspector上でPositionをX方向に+2移動させると、当然赤い球体のようになります。 手順3 Inspector上でRotationをY軸中心に90度回転させると、向きは変われど、位置は変わりません。 これは、手順2と手順3を入れ替えても同じ結果になります。 手順4 さて、ここでもう一つ緑の球体を用意させます。 Inspector上でRotationをY軸中心に90度回転させます。 手順5 さあ、ここでソース上で下記のようにTranslateさせてみましょう。
Unityで画像処理と言うと、まだあまり需要がなさそうですが、Oculus Riftの流れ的にも、これからニーズが増えそうですなあ。 さて、弊社でもUnityでOpenCVを利用したくなったわけですが、現在パーフェクトな環境はまだなさそうです。 そこそこ調べたので、まとめておきます。 OpenCVSharp かなーり苦労されている様子がわかりますが、Unity Editor上で使っている人は下記にいるようです↓ https://warapuri.com/post/70283352060/unity%E3%81%A7opencv%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%E4%B8%BB%E3%81%ABmac%E5%AF%BE%E5%BF%9C 調べた感じ、iOS, androidで試して
……という提案を、試しにちょっとしてみます。 ポインタ型とconst C++er の皆さん、次のコードを正しく説明できるでしょうか? int hoge = 42; const int * p1 = &hoge; int const * p2 = &hoge; int * const p3 = &hoge; もちろん答えはこうなります: int hoge = 42; const int * p1 = &hoge; // p1の指示先を書き換える事はできないが、p1の指示先自体は変更可能 int const * p2 = &hoge; // p1と同じ int * const p3 = &hoge; // p3の指示先を書き換える事はできるが、p3の指示先自体は変更不能 つまり、constが*の前後どちらにあるかで意味が変わってくるわけですね。 この仕様は、知っている人にとっては不思議でも何で
問.Cでオブジェクト指向プログラミングを行なえ。ただし「オブジェクト指向プログラミング」とは、次のような特徴を持つプログラミング技法であるものとする: オブジェクトの実装はオブジェクトのユーザーからは隠蔽される(カプセル化/隠蔽) 同一型のオブジェクトと同一メソッドを与えた時、実際のメソッドの動作はオブジェクトの内容により変化する(ポリモーフィズム/多態性) なお、ユーザーが既存のオブジェクトをカスタマイズして新たなオブジェクトを作成する機能は、必要ないものとする。 この問いの狙い よく、「オブジェクト指向プログラミング」と「オブジェクト指向言語」は混同されます。が、前者はプログラムを設計する上での考え方で、後者はその考え方を容易にソースコードに書けるような仕様になっている言語の事で、全く違うものを指しています。 その証拠を示すため、「非オブジェクト指向言語」たるC言語で「オブジェクト指向
Swift使っていますか?弊社ではまだほとんど使っていません。今日もObjective-Cの話題です。 iOSアプリを作るとき、すでにWeb版で実装されている機能をiOSでもそのまま使いたいがためにUIWebViewを使うということがあると思います(あると言ったらある)。そしてアプリケーションが複雑になってくるとそのUIWebViewとデータのやりとりをしたくなってくることがあるわけです。iOSからWebViewにデータを渡すのは比較的簡単で、シンプルな場合はURLにパラメータをつけてGETリクエストを投げてあげれば目的は達成できます。 逆にWebViewからデータをiOS側に戻すときが少々ややこしくなります。WebViewからiOSにPUSH的にデータを渡すことはほぼできないと思われるので、このケースではiOS側からデータを取りにいかなければいけません。 幸い、WebViewには読み込み
概要 動画からフレームを抜き出してOpenCVで加工する環境をopenFrameworksで準備してみました。 日本語パス周りで少しハマったのでメモ代わりにブログに残しておきます。 動作環境 Windwos7 64bit openFrameworks0.8.4 visual studio 2012 professional opencv 2.4.9 完成図 日本語の動画ファイルを読み込み、各フレームを反転して表示する キーフレームの戻る、進むをキーボードから操作する 作成手順 1. openframeworksをダウンロード windows download openFrameworks for visual studioからダウンロード。 まずはopenFrameworksLibのコンパイルが必要です。 詳細はこちらのリンク先 を参照して下さい。 libs\openFrameworksC
今週はUnity開発時のTipsをいくつか。 取り込んだ画像の画質が悪い Aniso Levelの引き上げることで、急な角度でテクスチャを見る場合にテクスチャの品質を向上させる。 ついでにpng等透過画像の場合はAlpha is TransparencyのチェックをONにする。 この項目をチェックすると透過付きのテクスチャの透過と非透過部分との境界に発生するノイズが低減される。 NGUIのレイアウト NGUIはバージョンアップ毎に仕様が変わって大変ですが。 最初はFlexibleになってたはず。 これをConstrainedに変更しておけば、多少画面サイズが変わってもある程度いい感じにスケーリングされる。 http://www.tasharen.com/forum/index.php?topic=6710.0 GoogleAnalytics連携 ここ記事を参考にunity3d-google
以前もご紹介した GreaseMonkey にて、GM_setValue() 関数がどこに値を保存するか、纏めてみました(Firefox のみ)。 以下、[@namespace]は GreaseMonkey スクリプトのメタタグ@namespaceに設定した値、[@name]は同じく@nameに設定した値、[設定項目]はGM_setValue("XXX", "YYY")のXXXの部分、の意。 なお、これらの情報は今後の FireFox や GreaseMonkey のバージョンアップにより古くなる可能性があります。 GreaseMonkey ~1.12 試しに情報を調べようとすると、いまだに出てくるのがこれ。 現行バージョン(ver 2.2 現在)では使われていません。 ロケーションバーに about:config を入力。警告が出ても華麗にスルーして設定一覧を表示。 greasemonk
皆さん大好き*1unsafeコード。 滅多にない事ですが、P/Invoke を使ってなんかいろいろと変な事をしていると、こんなコードを書きたくなってくる事があります: class Hoge { private byte[] m_ptr; public unsafe byte* GetPointer() { // &(m_ptr[0])を取得したい! } } 今回は、こんな時にどうするか、というお話。 やっちゃいけないパターン まず第一に思いつくのが、こんなコードです: public unsafe byte* GetPointer() { fixed (byte* ptr = m_ptr) { return ptr; } } もちろん、こんな危険なコードを書いてはいけません。 MSDN には、次のように書かれています: ステートメントのコードを実行すると、固定された変数の固定が解除され、ガベ
Blender2.67から利用できるようになったFreestyleレンダリングが面白そうだったので、以前作ってみた動画で試してみました。 以前作った動画 今までにBlenderとpythonを使って下記のような記事と動画を作りました。 Blenderの物理シミュレーションをpythonスクリプトで作成 - 株式会社CFlatの明後日スタイルのブログ ミルククラウンをBlenderのpythonスクリプトで作成 - 株式会社CFlatの明後日スタイルのブログ カオス的挙動をBlenderのpythonスクリプトで作成 - 株式会社CFlatの明後日スタイルのブログ Freestyleでレンダリング FreestyleでレンダリングするにはBlenderのバージョンを2.67以降に上げて、動画作成前に下記のコードを挿入するだけです。 bpy.data.scenes["Scene"].rende
先日弊社Webサイト、http://www.cflat-inc.com のサーバーをAWSからさくらVPSに移行しました。元々t1.microを使っていたのですが、さすがに非力すぎて時折アクセスできないこともありました。かといってsmallを使うとスペックの割にコストがかかると考えさくらVPSを採用しました。 サーバーが決まったら次は環境の移行を行いますが、失敗することなく同一の環境を構築するためにまずはVirtualBoxの仮想マシンで動作を検証し、問題がなければさくらVPSでセットアップを行うという流れを取ることにしました。つまり2度セットアップを行うことになります。 2度同じセットアップを行うのはミスが入り込む余地だらけですし、そもそも面倒なのでいわゆるプロビジョニングツールを使うことにしました。PuppetとかChefに代表されるアレですね。今回はその中でも(機能的に)軽量であると
以前の記事でCUDAプログラミングする際に、CPUとGPUを切り替える方法を書いたのですが、 その2日後にCUDA6.0が正式リリースされ、Unified Memoryという 新しいメモリ確保の仕組みが提供されました。 メモリ確保が簡単に CUDA5.5まではCPUとGPUの両方にメモリ領域を確保して、それぞれのメモリからメモリへデータを転送するという作業をユーザーがする必要がありました。 CUDA6.0からはCPUとGPUで使用するメモリを1変数で管理できるようになりました。当然データを転送する関数をユーザーが呼ぶ必要もありません。 やるべきことはGPUで使用する変数を用意してcudaMallocManaged()で領域を確保し、使い終わったらcudaFree()で解放するだけです。 メモリ管理が簡単になったので、今回は下記のようなコンストラクタとデストラクタでメモリの確保と解放を行うC
早速ですが、以下のHTMLを見て下さい……。 <!doctype html> <html> <head> <meta charset="UTF-8"> <title>サンプル1</title> <style> #counter { font-size: 3em; font-family: monospace; color: blue; } </style> <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script> <script type="text/javascript"> (function(){ $(document).ready(function() { $('#start').on('click', function(){ var counter = 0; $
こういうエラーが起きました。 「Could not insert new outlet connection: Could not find any information for the class named」というエラー。 第一手:IDEIndexDisableという犯人 スタックオーバーフローさん等でいろいろ解決方法が載っており、それらを片っ端から実行していったのですが、ダメ。 XCodeをアップデートしてもダメ。 そんな時この記事で一つ見逃していた箇所を発見。 ios6 - Could not insert new outlet connection - Stack Overflow I recently came across this problem. I soon realized that the cause had been my own doing. I had pr
XCodeでフォルダ内のファイルを全てプロジェクトに追加する方法には、二種類あります。 一つは「Create groups for any added folders」、もう一つは「Create folder references for any added folders」です。フォルダの色が黄色か青色か、という区別の仕方もアリ。 この二つの違いは以下の通りです: Create groups ...(黄色) 指定したフォルダと同様にグループ階層を作成し、その中に個別のファイルを追加します。 フォルダ内に新たにファイルを追加しても、プロジェクトには一切影響がありません。 リソースにこの方法でファイルを追加した場合、使用時にはフォルダ名を含まずファイル名のみで指定します。 Create folder references ...(青色) 指定したフォルダそのものをプロジェクトに追加します。
複数のアプリに対してParse.comを介してPush通知を送りたい場合、Webインターフェースでポチポチやるのは効率が悪く、とても辛い作業になってしまいます。Parse.comのサイトはレスポンスが少し遅いなと感じる程度である上に、1回1回が退屈な作業を何度も繰り返すことになるのでミスも入り込み易いのです。当然ですが、自動化・半自動化をするのが望ましいでしょう。 複数種類のiPhoneアプリを同時開発するときのTips - 株式会社CFlatの明後日スタイルのブログ REST API用のKEY REST APIを使うためには、アプリケーションIDとREST API用のアプリケーションキーが必要です。これらのキーを自動化スクリプトなり、専用のファイルなり、どこかに転載しておきます。 なお、iOS用のアプリケーションキーとREST API用のアプリケーションキーは異なります。 Rubyクライ
さて、Unityで忍者アプリを作ってみました。 短期開発ですが、今回は欧米狙いの色が強いアプリに仕上げています。 https://itunes.apple.com/app/id891186517?at=10l8JW&ct=hatenablog Android版はこちら↓ https://play.google.com/store/apps/details?id=com.cflat.ninja フィールドはアセットを購入して、組み立てました。 同様に忍者も購入。 今回はNGUIも購入しました。 今回NGUIで使ったのはボタン程度ですが、基本的に使いやすいですね。 一つ困ったのは、画面サイズに合わせたボタンレイアウトの調整ですが、 [Unity]NGUIで画面サイズに合わせる(NGUI2.3.0対応版) の神記事に助けてもらいました。 よりデザインにこだわろうとすると、もちろんこれだけでは厳し
JNI(Java Native Interface)はJavaとCの連携技術です。Javaアプリケーションの一部ロジックをCで書いたり、さらにその中からJavaのメソッドを呼び出したりする事で、アプリケーションの実行環境が制限される代わりに高速化、あるいは非Javaプラットフォームのコードとの共通化が行なえる、という寸法です。 JavaからC++の関数を呼び出す場合 JNIを用いてJavaからC++の関数を呼ぶ場合、こんな感じになります: // Java package com.cflat; public class Hoge { static { System.loadLibrary("hoge"); } public static native boolean printNative(String s, int x); public static boolean printJava(S
前回のオマケ的な何か。 前回記事の最後で、私は次のように書きました: ともあれ、上記の結果から、原則としてfor版を使いつつ、for版が使えない時にだけ非for版を使ってやればよさそうだとわかります。 実はこの部分にもこっそりと妙な罠が潜んでいるのですが、これについてはまた別の記事にて。 というわけでその「別の記事」が今回です。 cocos2d::CCGLProgramのおかしな仕様 まず、次のコードを、適当なところに書いてみます。さて、どのようになるでしょうか? コードは Cocos2d-x 2系ですが、3系でも同様の事が起こるので試してみて下さい。 CCGLProgram *prog = new CCGLProgram(); bool result = prog->initWithVertexShaderByteArray("a invalid vertex shader.", "a
AppStoreの審査が開幕のブラジル戦に間に合うのかどうか、これが一番の懸案でしたが、1回リジェクトくらったため間に合いませんでした。コートジボワール戦にも間に合わず、何とかギリシャ戦には間に合ったという惨状です。 さて、会社でUnity Proも購入したし、まずは一つリリースしてみようということで、サッカーゲームを作ってみました。 開発期間はかなり短期間です。 https://itunes.apple.com/app/id885300966?at=10l8JW&ct=hatenablog Android版はこちら↓ https://play.google.com/store/apps/details?id=com.cflat.ClassicDrivingShot スタジアムとキーパーはアセットを購入しました。 購入するまで、アニメーションがわからないアセットがあるので、この点ストアを改
この度、弊社よりパズルゲーム『Fuse 〜 導火線パズルドカーン! 〜』(以下『Fuse』)がリリースされました。 Fuse(iPhone版) Fuse(Android版) 開発はCocos2d-x 2.2.2で行ないました(今までちょこちょことCocos2d-x関連の記事があったのは、これのための研究のせい*1)。 本当は3.0系を使おうと思ったのですが、その時はまだalpha版だったのでやめておきました……C++11で多少使い易くなっただけで、本質的な機能改善はあんまりなさそうでしたし。 さて、Fuseの話に戻りましょう。 ルールは簡単、画面の上の方に並んでいる導火線パネルを下に置いて、爆弾と爆弾の間を導火線パネルで繋いで爆破するだけ! ステージ数は全60+隠し1。クリア時にTwitter・Facebook・LINE等に投稿できる仕組みを備えています。 この辺りの仕組みを、iOSでもA
以前の記事に引き続き。 以前、「輪郭線が iOS と Android にしか対応していなくて云々」というような理由で GLSL を用いた輪郭線表示を行なうようにしましたが、これを Android で実行してみると機種によってはこうなります。 error C5013: profile does not support "for" statements and "for" could not be unrolled. つまり、GPU だかドライバだかが GLSL のforループ(もちろんwhileと、ついでにswitchにも)には対応していない、というエラーです。はて困りました。 こんな時、どうすればいいかは簡単です。 forループが使えないなら、 ループを展開した GLSL を動的生成しちゃえばいいじゃない 。 というわけでループを展開してみた……ところ 以前の記事でループを使っていた部分は
メンバー変数の初期化 例えば、こんなコードがあったとします。 template <class T> struct Hoge { Hoge(const T &v) : value(v) {} T value; }; template <class T> Hoge<T> make_hoge(const T &v) { return Hoge<T>(v); } #include <iostream> #include <cxxabi.h> #include <cstdlib> #include <memory> template <class T> std::ostream &print(std::ostream &os, const T &value) { int status; std::unique_ptr<char, decltype(&std::free)> demangled(abi
今日は小ネタです。 三角形ABCの各頂点の座標が、a, b, c であるものとします。 この三角形ABCのうち、外から渡した座標 d, e のいずれでもない、最後の頂点を求めて下さい。ただし d, e は、必ず a, b, c のうちのいずれかと一致し、また d≠e であるものとします。 答え:a + b + c - d - e 案外、思いつかないものです。 ちなみにこの方法は、a〜e が頂点座標ではなく、頂点配列のインデックスの場合にも利用できます。 似たようなテクニックに、「3つの数字のうち、真ん中の値を求める」のがあります。 template <class T> T middle(const T& a, const T& b, const T& c) { return a + b + c - std::min(a, std::min(b, c)) - std::max(a, std:
次のページ
このページを最初にブックマークしてみませんか?
『株式会社CFlatの明後日スタイルのブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く