サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
cflat-inc.hatenablog.com
まず最初に、ありがちな次のようなものを作ってみました。 HTMLはだいたいこんな感じ。 <!doctype html> <html> <head> <meta charset="UTF-8" /> <title>HTML+CSS3で作る×ボタン</title> <style> .popup { background-color: white; color: #888; border: solid 1px; border-radius: 10px; position: absolute; top: 5em; left: 5em; width: 8em; height: 10em; } .popup > .content { position: absolute; top: 0.5em ; bottom: 0.5em ; left: 0.5em ; right: 0.5em ; color:
セルフインスパイアな記事。先日Pythonによる散布図アニメーションを取り上げました。 pythonで散布図アニメーションを試してみた - 株式会社CFlatの明後日スタイルのブログ これと同じようなことをiPhoneでやってみました。 事前準備 アニメーションに使う動画を適当に入手し、フレームを画像にして出力しておきます。 $ ffmpeg -i input.mp4 -f image2 frame%03d.jpg 開発環境 iOS開発なのでXcodeを使います。XcodeでSingle View Applicationあたりで新規プロジェクトを作ります。 また、オープンソースのライブラリも必要となります。 CocoaPodsを導入し(CocoaPods.org - The Dependency Manager for Objective C.)、 依存するライブラリを$ pod inst
※下記の内容はVisual Studio2010でコンパイルしました。gcc 4.8.2でコンパイルすると結果が異なります。詳しくはコメント欄をご確認下さい。 便利なboost::multi_array 多次元配列を実装するときに便利なboost::multi_arrayですが、ランダムアクセスが遅いので注意が必要です。 この件について意外と情報が少なかったのでまとめてみました。 サンプルプログラム #include "stdafx.h" #include <iostream> #include <boost/timer.hpp> #include <boost/multi_array.hpp> int _tmain(int argc, _TCHAR* argv[]) { boost::multi_array<int, 3> multiArray( boost::extents[500][
もはやiOS開発に欠かせない存在になったCocoaPods。先日弊社からリリースしたアプリでも、複雑なUIやありがちな機能を簡単に実装するものから実装を少しラクにするようなものまで、いろいろなものを使っています。 スポーツ動画アプリ全10種類 | 株式会社CFlat iPhoneで気軽にスポーツ動画を楽しめるアプリケーションをリリースしました。AppStoreにて配信中です。 このアプリではスポーツのハイライトや試合結果、最新ニュースなどの動画を検索することなく閲覧することができます。スポーツが好きな方、スキマ時間を有効に使いたい方に最適な動画アプリです。 UI/コントロール系 MNMBottomPullToRefresh MNMBottomPullToRefresh for iOS - Cocoa Controls 「上に引っ張ったら更新する」機能を実現するものです。 iOS標準では下に
先日弊社からiPhoneアプリをリリースしました。 スポーツ動画アプリ全10種類 | 株式会社CFlat iPhoneで気軽にスポーツ動画を楽しめるアプリケーションをリリースしました。AppStoreにて配信中です。 このアプリではスポーツのハイライトや試合結果、最新ニュースなどの動画を検索することなく閲覧することができます。スポーツが好きな方、スキマ時間を有効に使いたい方に最適な動画アプリです。 このアプリはあるスポーツについての最新の試合結果などを検索せずに見ることができるというものです。アプリはスポーツ毎に分かれているので、サッカーを見たい人はサッカー動画用のアプリ、野球を見たい人は野球用のアプリを使うことになります。 ここまで言うと大体お分かりいただけると思うのですが、アプリの基本部分の作りはどのアプリにも共通したものになっています。つまりソースコードが共有されているわけです。アプ
こちらの記事もご確認下さい。 CUDA6.0用にCPUとGPUの速度比較コードを修正 - 株式会社CFlatの明後日スタイルのブログ GPUとCPUの速度比較をしたい 以前CUDAでのプログラミングが完成した際に、CPUとの速度比較を行いたいという当たり前の要望が上がりました。 そこでGPUとCPUを切り替えるコードを作成したのですが、どうせなら最初から作っておくべきだったと反省しました。 今回はその際に作成したGPUとCPUの速度比較コードを公開します。 OpenMPの設定 GPUとCPUの速度比較をする際にCPUの方も並列化しないと不公平です。CPUの並列化には設定が簡単なOpenMPを使います。 CUDAプロジェクトでOpenMPを使用できるようにするには、プロジェクトのプロパティを開き、構成プロパティ/CUDA C/C++/Command Lineの追加オプションに-Xcompil
前回は、Last-ModifiedとIf-Modified-Sinceを用いてファイル更新の有無を確認しましたが、同じURLが状態に応じて別のファイルを表示する事がある場合には、上手くゆかない場合があります。例えば、ユーザーログイン時には指定した画像、そうでなければ別の画像を表示する、という場合、最終更新日のみを見る場合は新しい方だけが使われる事になります。 この問題を解決するため、今度はETagとIf-None-Matchを利用して目的を果たしてみました。ファイルの同一性確認のためには、対衝突性の高いSHA-256によるハッシュ値を使うことにします。 なお、ETag/If-None-Matchの方が汎用性は高いので、タグ文字列さえ適切に設定できるのであれば、Last-Modified/If-Modified-Sinceよりも汎用性が高いです。実際には、両方使うのが好ましいようですが。 <
普段なら、Apacheがファイル更新日を確認して適切にクライアントに返してくれるはずの304 Not Modified。これを「PHPを介してファイル内容を表示しよう」と思った瞬間*1、単純に実装するとリクエストの度にファイルコンテンツを全て送る事になって、特に画像やら動画では転送量が大変なことになりがちです(ならないよ、って方にはこの記事は必要ないはずですので、次の次の記事にでも進んで下さい)。 これは、PHPは自動的にはLast-ModifiedやIf-Modified-Since*2の情報を利用しないため、自前でこれらを処理してやらねばならないためです。 そこで試しに、Last-Modified/If-Modified-Sinceへの対応や、各種HTTPレスポンスヘッダーの追加処理と共にreadfile()を行なう、respondcontents()関数を作ってみました。 なおres
弊社の神経衰弱アプリシリーズではPush通知にMBaaSで有名なParseを使っています。Parseを使うと超簡単にモバイルアプリの通知を発行することができます。 神経衰弱アプリ三部作 | 株式会社CFlat まだ使ったことはありませんが、モバイルアプリやWebアプリのデータ置き場として使ったりバックグラウンドジョブを走らせたりすることができるようです。自前でサーバーを運用する際のサーバーコストやメンテナンスコストが要らなくなる上に、システム的にも信頼できるので使わない手はなさそうです。 また、Parseにはとてもわかりやすいクイックスタートガイドが付いています。このドキュメントに従ってセットアップを行えば簡単に使いはじめることができます! と言いたいところなのですが、やはり躓くポイントがいくつかありました。ドキュメントが英語なので大事なところを読み飛ばしてしまったり。 そういうわけで、プ
最近pythonを触り始めたのですが、散布図をアニメーションさせる方法が分からなかったので調べてみました。 散布図はmatplotlib.plt.scatter(x,y)で作成する事が出来ます。 また、アニメーションをさせる方法は二通りのやり方があるようです。 animation.ArtistAnimation 事前に用意してあるデータを描画 animation.FuncAnimation 随時データを更新する そこで円周上の点を一度ずつ移動させるというアニメーションをArtistAnimationとFuncAnimationの2つの方法で試してみました。 実行結果はどちらも次のようなものになります。 animation.ArtistAnimationの場合 事前にplt.scatterの戻り値をlistに保存しておき、animation.ArtistAnimationの第二引数に渡すと
数値計算用ライブラリで有名なLAPACKですが、iOSではSDKのフレームワークをリンクするだけで使えるようになります。個人的には数値計算はまったくのノーマークだったので驚きました。 準備 プロジェクトにAccelerate.frameworkを追加。 で、インポート。 #import <Accelerate/Accelerate.h> 準備終わりです。 最小二乗問題を解く 動くことを確認するために適当な場所にLAPACKを呼び出すコードを書いてみましょう。ここでは例として3点(1,1)(2,4)(3,7)についての最小二乗問題を問いています。結果は当然y = 3 x - 2となるので、a = 3 b = -2となるはずです。 - (void)leastSquare { const int M = 3; const int N = 2; __CLPK_complex A[M*N], b[M
シングルトンパターンは、デザインパターンがさっぱりわからないプログラマーでも聞いた事があるかもしれないくらい有名であるにもかかわらず、真面目に実装しようと思うと様々な問題が発生してしまいます。 具体的には、 static変数の初期化順序が未定義であるために、予期せぬ値を参照してしまう。 複数のスレッドから同時に初期化処理を行なった際、適切な同期を行なえない。 シングルトンクラスのコンストラクタでシングルトンを参照した際、無限ループが発生する。 このうち最後だけはどうにもなりませんので何とか気をつけることとして、他の2つはできれば「シングルトン基底クラス」的なクラスを継承すれば自動的にどうにかしてくれる……というのが理想的です。 なので作ってみました。 #include <memory> template <class T> class Singleton { public : static
iOSで音声を録音するのはもちろんできますが、FFTのライブラリも標準で組み込まれていて手軽に使えます。今日は録音した音声ファイルを解析して周波数特性(パワースペクトル)を得るところまでを紹介します。意外とそのものずばりの方法はなかなか見つからないので。 なお、サンプルコードはエラー処理を省いているので必要であれば適宜追加する必要有りです。 フレームワークを追加する フレームワークを3つ追加します。 AVFoundation ← 録音 AudioToolBox ← ExtAudioFileのため Accelerate ← FFTのため 音声を録音するまで まずAudioSessionの初期化が必要です。これをやっておかないと録音できません。このコードは起動時に実行されれば良いのでAppDelegateのdidFinishLaunchingWithOptionsあたりで呼んでおけばOKです。
Dictionary で外付けプロパティを ある程度C#を使っていれば必ず使うことになる、System.Collections.Generic.Dictionary 。C++で言うところの std::map コンテナに対応するコレクションです。 キーと値の対応付けが簡単に作れるので、既存のオブジェクトへの外付けプロパティ的な使い方をしたくなるのは当然と言えるでしょう。 こんな感じですね: var prop = new Dictionary<ICollection<object>, int>(); var hoge = new HashSet<int>(); var piyo = new List<int>(); prop[hoge] = 10; prop[piyo] = 20; Console.WriteLine(prop[hoge] + prop[piyo]); // 30 こんなの、ク
2014年2月5日に37signalsがBasecampに社名変更しました。そのBasecamp社が37signals時代に出した本の中で一番新しい「強いチームはオフィスを捨てる: 37シグナルズが考える」を読み終えました。私達CFlatではリモートワークをしてもいいことになっているので参考になることがとてもたくさんありました。 本の中ではリモートワークをするにあたってしておくべきセキュリティ対策についても言及されていましたのでそれらを紹介します。これらの対策はBasecampでは義務付けられているそう。 1. HDDの暗号化 Mac OS Xに標準で付いている「FileVault」を使ってHDDを暗号化しておけということだそう。暗号化していないマシンをなくすと重要なパスワード漏れたりして大騒ぎになるが、暗号化しておけば当人が少し困るぐらいで済むからということです。 2. 自動ログインを使
……とか言いながら、全然「だけ」に留まらない分量になってるのは仕様(C++の)。 なお本記事は、operator new/deleteの概念はある程度理解し、その気になればメモリリークしない程度のoperator new/deleteを実装できるC++erに向けて書かれたものです。operator new/deleteの中身(new_handlerの呼び出しとか)についての説明は行ないませんので悪しからず。 本記事で「規格書」と言った場合、正式なC++11の規格書ではなくhttp://d.hatena.ne.jp/heisseswasser/20121225/1356462583:N3337を指しています。 また、特に明記のない限り、本記事でoperator new、operator deleteと言った場合、配列版のoperator new[ ]、operator delete[ ]につ
boost::shared_ptrやstd::shared_ptrの便利さは、boostやC++11に慣れた方であれば当然ご存知かと思います(もちろん、循環参照の危険性や、それを回避するためのweak_ptrの使い方まで含めて)。 しかし世の中というものはさらに便利にできていて、この便利なshared_ptrをさらに便利に扱うためにmake_sharedという関数が用意されています! make_sharedは何が素晴らしいのか C++に限らず、メモリ確保というのは一般に極めて重い処理になります。よって、newの回数をなるべく少なくするようにプログラムを書くのが高速化のカギになります。 さてそこで、試しに次のようなコードを書いてみましょう。 #include <stdlib.h> #include <memory> #include <iostream> static const char
概要 斜めの方向から撮影してしまったけど、後から正面から撮った画像が欲しくなった事はありませんか? 例えば、以下の写真ような場合です。 実はこれを正面から撮ったように画像を変形する事が出来ます。 そう。ホモグラフィならね。 こんな感じに出来ます。 ホモグラフィとは射影変換を用いてある平面から別の平面と射影する変換です。 似たものにアフィン変換がありますが、こちらは平行なものは平行(長方形は長方形)に変換されます。 ホモグラフィでは平行性は保存されないので、台形から長方形へと変換する事が出来ます。 画像処理向けライブラリのopencvを使えば、iPhoneで簡単に実装出来ます。 早速実装してみましょう。 環境 mac marverics xcode 5.02 opencv 2.4.6 プロジェクトの作成 プロジェクトの新規作成からSingle View Applicatioを選択し、プロジェ
iOSのアプリケーションではモデル周りのテストと同じぐらいUI周りのテストが重要な気がするのですが、画面のテストってちょっと面倒ですよね。その上Xcode標準のテストフレームワークでは画面遷移などのテストができません。そこで、統合テスト用のテストフレームワークを使う必要がでてきます。 選択肢はいくつかありますが、使い方がシンプルで導入も容易なKIF Frameworkを紹介します。 KIF Framework GitHub - kif-framework/KIF: Keep It Functional - An iOS Functional Testing Framework KIFは決済サービスSquareが自社アプリケーションの統合テストのために開発したフレームワークだそうです。KIFを使ったテストではボタンをタップして画面遷移したり、画面遷移した先のUIの存在を確認したりといったこと
jQuery.ajax() のレスポンスを指定した文字コードで取得する系の話はその辺にごろごろ転がっていますが、逆にリクエストを指定した文字コードで行う系の話がほとんど見つからなかったので、ライブラリを作成しました。 考え方としては、通常は UTF-8 で行われるリクエストパラメータの URI エンコード処理を、ShiftJIS や EUC-JP で行ってやればよいだけです。……とはいえ、文字列を ShiftJIS や EUC-JP に変換する部分は大変なので、ライブラリ任せにしてしまっています。 UTF-8 から他の文字コードへの変換処理には、http://polygon-planet-log.blogspot.jp/2012/04/javascript.html の encoder.js を使用しています。下記コードの利用には、encoder.js(https://raw.github
先日、弊社アプリ『音感検定 - 音の神経衰弱 -』がテレビ東京番組『オードリーの神アプリ』で紹介されました。 放送内容はこちらから見ていただけます。 今回は、CFlatがアプリをリリースする際に行ったプロモーションに関して、記事にしたいと思います。 大きくは4つのプロモーションを行いました。 1. レビューサイトへの記載依頼 有料のサイトもありますが、一般的に記載依頼は無料です。 レビューサイトへの依頼方法に関しては、いろんな記事が出回っておりますので、ここでは割愛します。 レビューサイトは国内だけでも相当の数があります。 CFlatは、下記のまとめサイトから、依頼できるだけ依頼しました。 こんなにあった! iPhone/Androidアプリを出す時にリリースを送りたい媒体53個総まとめ iPhoneアプリのレビュー媒体一覧 リリース後しばらくしてからということもあったと思いますが、最も効
今回は高機能フリーViewerであるParaViewを使ってボリュームデータを可視化する方法をご紹介します。 ParaViewをインストール まずはここからParaViewをインストールして下さい。 ParaViewの基本的な使い方はチュートリアルで学べます。ここに日本語のチュートリアルが"Japanese Translation of the ParaView Tutorial for version 3.6"という名前で置いてあるので、この記事を読んで興味を持った方はご覧下さい。ParaViewがフリーソフトとは思えないほど高機能なことを実感できると思います。 ボリュームデータをVTKフォーマットで出力 ParaViewは色んな形式のファイルをインポートできますが、今回はVTKフォーマットにしてボリュームデータを作成します。 VTKファイルの出力コードは下記のようになります。 #inc
アジャイルなプロジェクト管理ツールの定番はPivotal Trackerと言っていいでしょう。Pivotal Trackerではユーザーストーリー(フィーチャ)やベロシティといったアジャイル開発の概念をそのままの形で表してくれるのですんなり入り易いです。 なお、Pivotal Trackerについての詳しいことはこっちに任せます。→ユカイ、ツーカイ、カイハツ環境!(27):いまアツいアジャイルプロジェクト管理ツール9選+Pivotal Tracker入門 (1/3) - @IT このPivotal Tracker、筆者もあるプロジェクトで使用しています。 Redmineよりも機動力が高く少人数(2人とか!)のプロジェクトではPivotal Trackerのほうが使い勝手がいいという印象でした。本格的にアジャイルしない場合でも気軽に使えるのがいいですね。 Redmineはややオーバースペック
早速ですが問題です。次のような場合、一体どうすればよいでしょうか? template <class T...> class Hoge { private : // TODO: T...のうち、N番目の引数の型を取得したい! } ; 何のためにそんなのが欲しくなるのかはいまいち謎ですが、まあ、やるとしたらこんな感じになります。 // N≠0なら、先頭を削ってNをデクリメント template <size_t N, class T0, class ... T> struct type_at : public type_at<N - 1, T ...> {} ; // N=0なら、先頭の型が求めるべき型 template <class T0, class ... T> struct type_at<0, T0, T...> { typedef T0 type ; } ; template <cl
前回『巨大数の計算』では、次のように書きました。 本当は不要な部分は元の値を参照した方が(特にBigIntを使う場合に)都合がよいのでしょうが、今回は割愛します。 が、折角ですのでもうちょっと頑張ってみます。人類の技術が発展したら、マイクロワームホールの先に作った別宇宙を使ってgoogolplex*1程度の整数までなら表現できるようになるかもしれませんし、その時に宇宙を丸々コピーする羽目になるのもよろしくありません。 #include <iostream> #include <map> #include <vector> #include <memory> #include <initializer_list> #include <algorithm> template <class T> T hyper(const T& a, const T& n, const T& b) { if (
早速ですが、本ブログ開設1周年を記念して、C++で、巨大数の計算を行なってみたいと思います。 といっても今回は、多倍長整数、いわゆるBigIntとかそういう話ではなく、巨大数を表現するための表記……具体的には「コーンウェイのチェーン表記」の話です。 ちなみに、ちょっとした式を計算しようと思っただけでもBigIntはおろか、全宇宙の素粒子を使っても到底表現できないほどの値になりますので、実用性は皆無。 コーンウェイのチェーン表記とは まず、コーンウェイのチェーン表記とは何か、Wikipediaを見てみましょう。 タワー表記の拡張による。まず、3つ組の場合を定義する。0でない自然数 a, b, c について 次に、2つ組の場合を定義する。2つ組の場合は次のように単純な累乗と定めるものとする。 4つ以上の0でない自然数を連ねて書いたときは、以下の規則によって変形できるものとする。 チェーンの数の
CUDAを利用したGPU側の処理をデバッグしようと思ったのですが、古い環境での記事しか見つからなかったのでメモしておきます。 と言っても私の環境も最新ではなく、window7, Visual Studio 2010, CUDA Toolkit v5.0, Nsight Visual Studio Edition 3.1で実行しました。 CUDAが利用できるグラフィックボードかどうかチェック まずはここからCUDAを利用できるグラフィックボードかどうかチェックして下さい。 グラフィックボードの確認はコンピューターのプロパティからデバイスマネージャーを開き、ディスプレイアダプタで確認して下さい。 CUDA Toolkitをインストール CUDA Toolkitをここからダウンロードしてインストールして下さい。 古いバージョンはこっちにあります。 Nsight Visual Studio Edi
Blenderシリーズ第3段はカオス的挙動に挑戦してみました。 カオス的挙動 Blenderでは簡単に力場を設定できるので、もしかしたら簡単にカオス的挙動が作れるのではと思い実際にやってみました。 結果は最後に動画を載せておきますが、それっぽい動きをしてくれました。 序盤でポテンシャルの谷に捕まったかと思いきや、抜け出して全く違う方向に進むのが良い感じです。 結果が面白かったので力場の値を強くしましたが、動きが速すぎるのがちょっと残念でした。 もちろん力場の値を弱くしてもそれっぽい動きはしてくれます。 5つ設定した力場の内、真ん中が斥力、他の4つが引力に設定されています。 pythonスクリプト 下記が実際に使用したpythonスクリプトです。 玉と球形の土台を用意して、5つの力場を設定するだけです。 力場を設定するときになぜかbpy.ops.object.forcefield_toggl
今回は2次元の形状からカメラ位置や3次元形状を特定する手法である、SfM(Structure from Motion)を試してみます。 SfMを手軽に実行出来るツールとして、 Bundler VisualSFM 等があります。 Bundlerはオープンソースですがソースの中身が整理されておらず、VisualSFMはオープンソース化されておりません。 そんな中最近OpenMVG(open Multiple View Geometry)というライブラリが出来た様です。 こちらはソースコードがかなり綺麗にメンテナンスされ、ユニットテストもきちんと書かれています。 ただ、ネット上で検索したところ日本語の情報が殆ど見つからなかったので、このソースコードを使って実際にSfMを実行してみたいと思います。 必要なもの OpenMVG(今回はmac上でビルド、windowsでも可) PMVS(windows
次のページ
このページを最初にブックマークしてみませんか?
『株式会社CFlatの明後日スタイルのブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く