でらうま倶楽部

バカってゆうか、ゲームを作る事しか能の無いプログラマの、面白おかしな日々を綴ってみる実験。

El CapitanにRictyを導入してみたメモ

コード書いとる??

MacBook Pro Retina 13inchを買って一ヶ月くらいです。RetinaかわいいよRetina。
拙作フレームワークはちゃんと動きませんが。

これまでemacsの文字フォント設定はMenlo+Rictyでした。

22
 
それで問題なかったのですが...よっくみると行間のスペースが若干違っててズレる!!

40

画像で見ても全くわからんw でも、2ピクセルくらい、行の高さが違うんよ。

気にするレベルではないのですが、モードラインが微妙にガタつくのが気になって気になって仕方がない...!! もう無理!!

以下「Rictyも新しくなってるし、もっかい生成してみるかね...」というメモ。

Rictyの配布サイトはGitHubからこちらへ移動してました。
ここの説明を読んで手順通り進めればまずRictyが手に入ります。OSXならね!!
  1. 所定のフォントをインストール
  2. homebrew経由でコマンドライン版Fontforgeを導入
  3. Ricty生成スクリプトを走らせる
作業時間15分くらい。楽!!

emacsでのフォント設定は以下のようにした。楽!!
 
(set-face-attribute 'default nil
                    :family "Ricty"
                    :height 180)

org-modeとかで表示がズレないし、本当にいい時代になったものですなぁ。
 
16

さっそくXcodeとかターミナルのフォント設定も変更してみた。
31
溢れる統一感。

ではまた次回!!

MacBook 買い替え記

photo

コード書いとる??

MacBook Air 13inchからMacBook Pro 13inch(Retina)に買い換えました。
Retina快適!!

という訳で乗り換え記です。

普段からTimeMachineでバックアップを取っていたので、初回起動時にデータ移行をおこないました。これがスッゲー楽!! 待つだけです。

で、その他設定を進めてオッケーと思いつつファイルをチェックしていたら幾つか移行できていないファイルがある...?? 調べてみたら、まさかのバックアップ漏れ!!


原因は不明なのですが、幾つかのファイルとフォルダに「バックアップから除外」属性が付与されていました。 主にCMakeで作った一時フォルダなのですが...この仕様は微妙に困るな...

で、先のサイトで紹介されていた手順に倣い、「バックアップから除外」属性を外して再バックアップ→移行アシスタントで無事、データはすべて移行できました。

あとはすべてのアプリケーションの動作を確認して... でiTunesが起動しないw

データが格納されているフォルダのオーナーが502という値になっているのが原因。ファイルのオーナーをログインアカウント名にしたら無事に解決しました。他にも Homebrew でファイルのアクセス権が原因での警告が大量に発生したのでこちらも修正。

Xcodeはコマンドラインツールの再インストールが必要でした。

さらに、MacBook Airから設定を引き継いだのでLaunchpadで表示されるアイコンが超大きい状態になってしまったw

これは以下のサイトを参考にしてちょうど良い感じに変更。


あと、トラックパッドの設定や通知の設定など一部の設定が初期化されてしまっていたので、チマチマと再設定...。

さて使い始めてみるとMacBook Airと色々違うところがあって戸惑いつつ新しい環境を楽しんでます。
  • 仕事柄HDMI経由で外部ディスプレイに画面を映す事が多く、HDMIを直接刺せるのは良い
  • 外部モニタに繋いだ時は、MacBook Pro側は外部ディスプレイの解像度のRetina解像度になって素敵
  • キー配列は同じなのに、若干押し込みが浅いためかtypoが多い
  • ディスプレイの解像度を「スペースを拡大」に変更して超広々!!
  • MacBook Proの方がMacBook Airより一回り小さい事が判明

ではまた次回。

本格的にCinder 0.9.0を触り始めた話

18
コード書いとる??

ひょんな事から知り合った東ゲ部第一回もくもく会に参加してきました。ゲーム作りたい欲の塊のような連中に混じってもくもくもくもくと作業するのはとても楽しいですし、創作意欲を刺激されますね。

さっそく第二回目も予定されとるので、暇しとる人は一緒にもくもくしよまい(この記事を書いてる時点で残りあと2枠)


さて。Cinderは拙者の「OSXでもiOSでもWindowsでも動作するアプリをC++とOpenGLで書きたい!!」欲を叶えてくれる数少ないフレームワークの一つです。

その最新バージョンである0.9.0を試してみたメモ書き。

Cinderで扱っている機能は以下のような感じ。
  • 描画周り
  • サウンド周り
  • 入力(マルチタッチとかも)
  • ベクトル・行列
  • イージング
  • JSON読み書き
  • AABBとRayの交差などの簡単な交差判定
できる限り最低限の機能だけに絞ってて好感的。もちろんソースコードは公開されているので、リファレンスで足りない情報はコードから補えます。

プログラミングの勉強にはうってつけじゃないでしょうか。

描画周りもガッツリ隠蔽されているわけではないので、足りない分は直接OpenGLのAPIを使って書けます。実際Cinder0.8.6を使った拙アプリを昨年公開してます。安心してください。アプリ作れますよ!!

最新バージョン0.9.0ですがかなりテクニカル方面に振り切った仕様変更がなされています。
  • OpenGLの新しい仕様をガッツリ盛り込む
  • 固定シェーダーの切り捨て
    ベースライン:OpenGL 3.2 Core Profile & OpenGL ES 2.0
  • ベクトル・行列を扱うライブラリglmを導入
ベクトル・行列周りは思いっきり変更になってるので、これまでのコードはビルドできません。まずはサンプルコード群を眺めてAPIを把握してからコードを書き始めるのが吉。公式リファレンスにはAPIの説明だけでなく、導入ガイドも用意されています。2、3日試行錯誤すれば自然と体が慣れてくるよ!!

Cinder0.9.0導入にあたっては、自分の開発環境向けに幾つかビルド設定を変更して再ビルドしました。
  • boost最新版(1.61.0)を導入
  • VisualStudio2015向けに再ビルド
    プリプロセッサに _ITERATOR_DEBUG_LEVEL=0 を追加
    src/AntTweakBar/TwMgr.cpp にあるVisualStudio2010向けのワークアラウンドを削除
  • iOS版はプリプロセッサに CINDER_GL_ES_3 を指定して再ビルド
    OpenGL ES 3.0 なら、OpenGL 3.2 とシェーダーの差異が少ない
  • 公式リファレンスを参考に、ドキュメントをdoxygenで作成
Cinderはフレームワークの再ビルドが簡単なのでありがたい。

新しいCinderで作り始めたコードはコレ。自分の勉強用なので内容は雑ですが、Cinderを始めるきっかけになれば!!

ではまた次回!!

assimp 3.2 を試す

dragonsplash
コード書いとる??

assimp(Open Asset Importer)は様々な形式のモデルデータをC/C++で扱えるようにするライブラリです。
スケルタルアニメーションの勉強ついでに最新バージョンを触ってみたのでメモ。

assimpはWindows・OSX(iOS)・Linuxの環境でビルドして使えます。
扱える形式は以下の通り。
  • 3DS
  • BLEND (Blender)
  • DAE/Collada
  • FBX
  • IFC-STEP 
  • ASE
  • DXF
  • HMP
  • MD2
  • MD3 
  • MD5
  • MDC
  • MDL
  • NFF
  • PLY
  • STL
  • OBJ
  • OpenGEX
  • SMD
  • LWO 
  • LXO 
  • LWS  
  • TER 
  • AC3D 
  • MS3D 
  • COB
  • Q3BSP
  • XGL
  • CSM
  • BVH
  • B3D
  • NDO
  • Ogre Binary
  • Ogre XML
  • Q3D
  • ASSBIN (Assimp custom format)
たくさん!!!


  1. ビルド
    CMakeを使いましょう。GUI版なら必要なファイル形式のみビルド設定も手軽にできます。

    26

    assimpはboostに依存しています。手持ちのboostを使いたい場合は
    ASSIMP_ENABLE_BOOST_WORKAROUND
    をオフにして、boostライブラリへのパスを指定すればオッケー。

    iOS版のライブラリも作れます。Xcodeでターゲットを複製して、必要な設定を追加すればオッケー。
    Android版はよくわからん。
  2. マニュアル
    同梱されているリファレンス(html形式)にはなぜか一部のクラスのドキュメントが欠けています。
    そこでdoxygenを使って生成。
    そのままの設定だとスタイルシートのファイル設定が微妙だったので、Doxyfile 内のHTML_STYLESHEET 設定を空にしてから生成。いい感じ。

    16

    HTML形式でも充分良いですが、Windowsで良く使うCHM形式にするとより便利!!
    表示はOSXのCHM Viewというアプリがいい感じ。

    doxygenが生成に必要なファイルを書き出してくれているので、HTML Help Workshopのコマンドライン版でサクッと生成できます。 ⇒導入と使い方
で、いろいろ思い出しつつCinder上でモデルデータを読み込んでリジッドボディアニメーションを再生するコードを書く。ここまでで約1日。
 
23

データ構造が把握できればあとは早い。

assimpは対応フォーマットは多いけど思った通りに読めるのは少ない。。。マテリアルやアニメーション情報が欠落する状況に多々遭遇。あとでissue投げておこう。

で、assimpのプレビュワーのコードを参考にしつつスケルタルアニメーションを再生するコードを書いた。
 
59

これも大体1日w
リリースビルドなら12万頂点のアニメーションがiPhone6でも60fps!! 笑

blenderでMMDデータを扱えるアドオンを見つけたのでデータ変換してはプレビュー。データ変換してはプレビュー。してます。このアドオンを作ってくれた方に多謝!!

49

動作検証だいじ。

今回書いたコードはGitHubで公開しとるので興味のある人は覗いてみてちょーだい。

ではまた次回。

JNetHack を OSX で遊ぶ

05

コード書いとる??

NetHackが12年ぶりのバージョンアップです。
NetHackが12年ぶりのバージョンアップなのです。


そしてなんと、日本語版(JNetHack)もバージョンアップしとる!!

すごいなぁ。12年前のコードなんて、手元に残っていませんよ。

拙者はNetHack未体験なので、これを機会に遊んでみようと思いました。
というわけで、JNetHackをOSXで動かそうとして四苦八苦したメモ。


OSX版は日本語パッチを当ててビルド。。。できません!!
cp932なソースコードをclangが受け付けませんw

なので、以下の手順でビルドしてみました。

  1. homebrewを導入
    公式サイトに導入法が書いてある
  2. homebrew経由でgccを導入
    brew install gcc
  3. 本家からソースコード一式をダウンロード
  4. 日本語版公式からパッチ一式をダウンロード
  5. 本家のソースコード一式を解凍してパッチを当てる
    patch -p1 < ../jnethack-3.6.0-0.5.diff
  6. sys/unix/hints/macosx10.10 を修正
    CC=gcc-5
    CFLAGSに-finput-charset=CP932 -fexec-charset=CP932をつけたす
  7. ビルド設定を生成
    sh sys/unix/setup.sh sys/unix/hints/macosx10.10
  8. ビルドしてインストール
    make install
  9. ~/nethackdir へインストールされている!!
  10. そのまま動かすと文字化けするのでターミナルのテキストエンコーディングをShift JISにする
  11. 起動
    ./jnethack
  12. Enjoy it!!

homebrew経由でcocotを導入すると
 
cocot -t UTF-8 -p cp932 -- ~/nethackdir/jnethack

でUTF-8なターミナルで日本語が表示される。べんり。 


ではまた次回!!

Blenderのアドオン C header exporter がありがたい

blender_logo_socket
コード書いとる??

プログラマたるもの一回はOpenGLに手を出すべき。
プログラマたるもの一回はOpenGLに手を出すべきじゃ!!

でもOpenGLを始めとする3D表現は、プログラムの難易度よりテストデータの調達の難易度が高いと思うのよね。オロロン。

それをどうやって解決するかの実例です。

統合GCソフトCheetah3Dは各種書き出し形式に「C言語のヘッダ」てのがあって、それを使えばサクッとOpenGLでモデルデータを表示できます。

例えば立方体は以下のように書き出されます。
 
// Headerfile *.h (generated by Cheetah3D)
//
// There are the following name conventions:
// 	NAME			=name of the object in Cheetah3D. Caution!! Avoid giving two objects the same name
// 	NAME_vertex		=float array which contains the vertex,normal and uvcoord data 
// 	NAME_index		=int array which contains the polygon index data
// 	NAME_vertexcount	=number of vertices
// 	NAME_polygoncount	=number of triangles
//
// The vertex data is saved in the following format:
// 	u0,v0,normalx0,normaly0,normalz0,x0,y0,z0
// 	u1,v1,normalx1,normaly1,normalz1,x1,y1,z1
// 	u2,v2,normalx2,normaly2,normalz2,x2,y2,z2
// 	...
// You can draw the mesh the following way:
// 	glEnableClientState(GL_INDEX_ARRAY);
// 	glEnableClientState(GL_NORMAL_ARRAY);
// 	glEnableClientState(GL_VERTEX_ARRAY);
// 	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
// 	glInterleavedArrays(GL_T2F_N3F_V3F,0,NAME_vertex);
// 	glDrawElements(GL_TRIANGLES,NAME_polygoncount*3,GL_UNSIGNED_INT,NAME_index);
//

#define cube_vertexcount 	24
#define cube_polygoncount 	12


float cube_vertex[cube_vertexcount][8]={
  {0.00000, 1.00000, 0.00000, 0.00000, 1.00000, -0.50000, -0.50000, 0.50000},
  {0.00000, 0.00000, 0.00000, 0.00000, 1.00000, -0.50000, 0.50000, 0.50000},
  {1.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.50000, 0.50000, 0.50000},
  {1.00000, 1.00000, 0.00000, 0.00000, 1.00000, 0.50000, -0.50000, 0.50000},
  {0.00000, 1.00000, 0.00000, 0.00000, -1.00000, 0.50000, -0.50000, -0.50000},
  {0.00000, 0.00000, 0.00000, 0.00000, -1.00000, 0.50000, 0.50000, -0.50000},
  {1.00000, 0.00000, 0.00000, 0.00000, -1.00000, -0.50000, 0.50000, -0.50000},
  {1.00000, 1.00000, 0.00000, 0.00000, -1.00000, -0.50000, -0.50000, -0.50000},
  {0.00000, 1.00000, -1.00000, 0.00000, 0.00000, -0.50000, -0.50000, -0.50000},
  {0.00000, 0.00000, -1.00000, 0.00000, 0.00000, -0.50000, 0.50000, -0.50000},
  {1.00000, 0.00000, -1.00000, 0.00000, 0.00000, -0.50000, 0.50000, 0.50000},
  {1.00000, 1.00000, -1.00000, 0.00000, 0.00000, -0.50000, -0.50000, 0.50000},
  {0.00000, 1.00000, 1.00000, 0.00000, 0.00000, 0.50000, -0.50000, 0.50000},
  {0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.50000, 0.50000, 0.50000},
  {1.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.50000, 0.50000, -0.50000},
  {1.00000, 1.00000, 1.00000, 0.00000, 0.00000, 0.50000, -0.50000, -0.50000},
  {0.00000, 1.00000, 0.00000, 1.00000, 0.00000, -0.50000, 0.50000, 0.50000},
  {0.00000, 0.00000, 0.00000, 1.00000, 0.00000, -0.50000, 0.50000, -0.50000},
  {1.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.50000, 0.50000, -0.50000},
  {1.00000, 1.00000, 0.00000, 1.00000, 0.00000, 0.50000, 0.50000, 0.50000},
  {0.00000, 1.00000, 0.00000, -1.00000, 0.00000, -0.50000, -0.50000, -0.50000},
  {0.00000, 0.00000, 0.00000, -1.00000, 0.00000, -0.50000, -0.50000, 0.50000},
  {1.00000, 0.00000, 0.00000, -1.00000, 0.00000, 0.50000, -0.50000, 0.50000},
  {1.00000, 1.00000, 0.00000, -1.00000, 0.00000, 0.50000, -0.50000, -0.50000},
};


int cube_index[cube_polygoncount][3]={
  {0, 1, 2},
  {2, 3, 0},
  {4, 5, 6},
  {6, 7, 4},
  {8, 9, 10},
  {10, 11, 8},
  {12, 13, 14},
  {14, 15, 12},
  {16, 17, 18},
  {18, 19, 16},
  {20, 21, 22},
  {22, 23, 20},
};

コメント部に表示手順が書いてあるという親切ぶりw

さすがにマテリアルや親子関係までは考慮してくれませんがそれでも充分ありがたい。OBJ形式を自分で読み込む手間を考えたら「とりあえず表示させたい」需要に応えてくれてて本当ありがたい。

で、Cheetah3DはOSX専用。Windowsの人はどうすれば?? と思って調べてみたら、Blenderのアドオンにありました。


Blenderのアドオンの導入の仕方は各自調べてくださいw

これで立方体を出力するとこんな感じ。
 
#ifndef _BLENDER_EXPORT_H_
#define _BLENDER_EXPORT_H_

#define OBJECTS_COUNT 1
#define CUBE 0
/***************************************
 *          local transformations
 ***************************************/

float transformations[][16]={
	{
    1.000000f, 0.000000f, 0.000000f, 0.000000f,
    0.000000f, 1.000000f, 0.000000f, 0.000000f,
    0.000000f, 0.000000f, 1.000000f, 0.000000f,
    0.000000f, 0.000000f, 0.000000f, 1.000000f
  },
};
/***************************************
 *	faces count for each mesh 
 ***************************************/
unsigned int faces_count[]={12};

/***************************************
 *	vertices count for each mesh 
 ***************************************/
unsigned int vertex_count[]={24};

/***************************************
 *	offset tables for each mesh  
 ***************************************/
unsigned int vertex_offset_table []={
	0, 
};
unsigned int indices_offset_table []={
	0, 
};
/***************************************
 *	vertices definition
 ***************************************/

struct vertex_struct {
	float x,y,z;
	float nx,ny,nz;
	float u,v;
};
struct vertex_struct vertices[]={
	/* CUBE: 24 vertices */
	{1.000000f, 1.000000f, -1.000000f, 0.000000f, 0.000000f, -1.000000f, 0.000000f, 0.000000f},
	{1.000000f, -1.000000f, -1.000000f, 0.000000f, 0.000000f, -1.000000f, 0.000000f, 0.000000f},
	{-1.000000f, -1.000000f, -1.000000f, 0.000000f, 0.000000f, -1.000000f, 0.000000f, 0.000000f},
	{-1.000000f, 1.000000f, -1.000000f, 0.000000f, 0.000000f, -1.000000f, 0.000000f, 0.000000f},
	{1.000000f, 0.999999f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 0.000000f, 0.000000f},
	{-1.000000f, 1.000000f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 0.000000f, 0.000000f},
	{-1.000000f, -1.000000f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 0.000000f, 0.000000f},
	{0.999999f, -1.000001f, 1.000000f, 0.000000f, -0.000000f, 1.000000f, 0.000000f, 0.000000f},
	{1.000000f, 1.000000f, -1.000000f, 1.000000f, -0.000000f, 0.000000f, 0.000000f, 0.000000f},
	{1.000000f, 0.999999f, 1.000000f, 1.000000f, -0.000000f, 0.000000f, 0.000000f, 0.000000f},
	{0.999999f, -1.000001f, 1.000000f, 1.000000f, -0.000000f, 0.000000f, 0.000000f, 0.000000f},
	{1.000000f, -1.000000f, -1.000000f, 1.000000f, -0.000000f, 0.000000f, 0.000000f, 0.000000f},
	{1.000000f, -1.000000f, -1.000000f, -0.000000f, -1.000000f, -0.000000f, 0.000000f, 0.000000f},
	{0.999999f, -1.000001f, 1.000000f, -0.000000f, -1.000000f, -0.000000f, 0.000000f, 0.000000f},
	{-1.000000f, -1.000000f, 1.000000f, -0.000000f, -1.000000f, -0.000000f, 0.000000f, 0.000000f},
	{-1.000000f, -1.000000f, -1.000000f, -0.000000f, -1.000000f, -0.000000f, 0.000000f, 0.000000f},
	{-1.000000f, -1.000000f, -1.000000f, -1.000000f, 0.000000f, -0.000000f, 0.000000f, 0.000000f},
	{-1.000000f, -1.000000f, 1.000000f, -1.000000f, 0.000000f, -0.000000f, 0.000000f, 0.000000f},
	{-1.000000f, 1.000000f, 1.000000f, -1.000000f, 0.000000f, -0.000000f, 0.000000f, 0.000000f},
	{-1.000000f, 1.000000f, -1.000000f, -1.000000f, 0.000000f, -0.000000f, 0.000000f, 0.000000f},
	{1.000000f, 0.999999f, 1.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f},
	{1.000000f, 1.000000f, -1.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f},
	{-1.000000f, 1.000000f, -1.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f},
	{-1.000000f, 1.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f},
};

#define INX_TYPE GL_UNSIGNED_SHORT
unsigned short indexes[]={
/* CUBE 12 faces */
  0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23, 
};
#endif

おー。いいね!! オブジェクトの行列が別途書き出されているのが素晴らしい。

結局はOBJ形式とかを読み込む処理を自分で書くことになるのだが、そこに辿り着く前に、こうして正しさが確保されているデータの存在はありがたい。


ではまた次回!!

stbライブラリが便利すぎる!!

コード書いとる??

GitHubで見かけたstbライブラリがお手軽そうだったので試してみたメモ。


OpenGLのAPIを直接叩くのは楽しいですね。

楽しいのですが一つだけ困るのがテクスチャの取り扱い。

OpenGLではテクスチャを構成するピクセルデータの形式にしか言及していないので、PNG形式とかBMP形式とかJPEG形式から自分でピクセルデータを取り出さないといけない。

これが結構しんどい。自分だけ使うのなら「PNG形式(RGBA)一択で!!」で構わないのですが専門学校で配る教材だとそうもいかない。これまではlibpngを使っていたのですが、バージョンアップのたびにWindows、OSX、iOS用とビルドするのがしんどくなってきた。そこで代替ライブラリを探して見つけたのがstbライブラリ

これはCで書かれた画像やフォントなどを扱うヘッダオンリーのライブラリ群です。ヘッダオンリー!! お手軽!!

画像の読み込みはこんな感じに書くだけ。
// 画像読み込みライブラリを利用
//   以下のマクロで実装も定義される
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

void f() {
  unsigned char* pixels;
  int width;
  int height;
  int bpp;

  // ファイルを読み込み、画像データを取り出す
  //   最後の引数でピクセルあたりのバイト数を強制できる
  pixels = stbi_load("hoge.png", &width, &height, &bpp, 0);


  // メモリ上の画像データを破棄
  stbi_image_free(pixels);
}

楽!!

対応形式はヘッダに書いてありますが、JPEG、PNG、TGA、BMP、GIF、HDR などなどかなり幅広い。素晴らしい!!

他にもフォントやogg vorbisを扱うのもあって素敵!! これは使わない理由がない。


ではまた次回。

El CaptianのQuick Lookで不具合に遭遇

コード書いとる??

El Capitan(OSX 10.11.4)のQuick Lookで謎の現象に遭遇したのでメモ。

モデルデータ(Collada形式とかWavefront OBJ形式とか)をQuick Lookしてて、他のファイルをプレビューしようとしてファイルを直接クリックすると、Quick Lookがありえないくらい劇重になる!!
photo

ありえへんくらい劇重になって操作も受け付けなるくらいなので良い子は真似しない方がいいと思います。

マジで真似しない方がいいと思います。 真似するなよ!!←

Apple サポートコミュニティで問い合わせようとしたら、なんかエラーが出て投稿できなかったのでとりあえずブログに書いときます。

photo2
見知らぬエラー... GWと何か関係が?! (たぶん違う)


ではまた次回!!

Emacs 25.1が待ち遠しい

53

コード書いとる??

Emacs25.1のリリースがじわじわと迫っているようです。

待ち遠しいですな!!

個人的には
  • C++11以降の構文のサポート
がどうなっているのか気がかりです。C++11で追加されたラムダ式とかnoexcept指定とかでインデントが乱れがちなのですよ。

インデントの乱れはコードの乱れ!!

そこで、公開されているpretest版(現時点で25.0.93)を手持ちの環境(OSX 10.11.4)で試してみたメモ。


ビルドに際して、emacs-25.0.93 をとにかく使う(OSX)がとても参考になりました。

まずはEmacsのビルドに必要なautocontとautomakeをインストール。 拙者はbrew経由でインストール。

あとは前出のサイトと同様にビルド。あっさりビルド完了。

日本語入力がインライン対応してて良い。ただ、文字入力時に微妙にチラつきますね。
ライブ変換をOFFにしてみても結果は変わらず。ライブ変換べんり!!

C++11対応は素晴らしいの一言です。
enum classやnoexceptなどがちゃんと色分けされるしインデントも崩れない!!
14


フォントサイズの問題なのか、ウインドウが微妙に全画面にならず。微妙に端が見切れてて気になる!! これは多分設定でなんとかなるでしょう。

正式版がますます待ち遠しいですな。


ではまた次回!!

[El Capitan]外付けHDDの接続がスリープ時に切れてしまう問題が解決してる

151001elcapitanthings

コード書いとる??

Appleさんありがとう!!
OSX 10.11.4 にて悩ましい問題がまたひとつ解決しています!!!!

外付けHDD(USB3.0)を繋いだままスリープさせると、復帰時に「接続が切れました」というダイアログがいくつも表示されてるという問題です。

ワシの動作環境は MacBook Air Mid 2012 なのだが、この問題あちこちで起こっていた模様。
Appleサポートコミュニティにも投稿があります。

Time Machineでのバックアップも途中で終わってたりしてて本当に悩ましかった...

でももう外付けHDD繋いだままMacをスリープさせてワシも熟睡できるぜ!! スリープだけに!!!!

すっきり!!

ではまた次回。

ようやくbs-showが思った通りの挙動になった

photo
コード書いとる??

Emacs25のリリースが待ち遠しい日々です。

bs-showでのバッファの並びが自分的にそうして欲しい感じではなくて、過去に自作していました。
でもまだ気に入らなくてずっとモヤモヤしていたので思い切って実装し直したメモ。


自分的には「モード名」「拡張子」「拡張子を除いたパス」の3つでソートされてて欲しい。
調べてみれば、Emacsにはパスから拡張子だけ取り出したり、パスから拡張子を除いたりが簡単にできるじゃないですか!! Emacsできる子!!!!

ので、こんな感じにサクッと実装できてしまった。


あとは、my-bs-sort-by-filename2 を bs-sort-functions に追加すれば良い。
これはEmacsのカスタマイズ機能を使うのが一番確実で楽。

photo


スッキリ!!

ではまた次回。

スクロールバー表示の問題がOSX10.11.4で解決

コード書いとる??

Appleさんありがとう!!
先日MacBookAirをOSX10.11.4に更新したら、微妙に厄介な問題が解決してたのでメモ

その不具合とは
PCがスリープから復帰するとスクロールバーが常に表示される
です。

Apple サポートコミュニティにも投稿があります。

Finderだけでなく、ほぼすべてのアプリに影響が出ます。
一旦この不具合が発生すると、「システム環境設定→一般」でスクロールバーの表示設定を変更しても元に戻りませんT^T
photo

対症療法として再起動するしかなくて困ってたんですが、今回のOSXの更新で修正されていました。

スッキリ!!

多分もう一個、微妙に厄介な問題が解決されているっぽいので、検証次第メモる。

ではまた次回。

いろいろライブラリを更新

photo

コード書いとる??

2015年度の講師業が一区切りつきました。

これから一ヶ月くらいは花見とかで呑んだくれる生活ですよ!!
今年度は土曜日も仕事入ってたから許してくれるよね!!!!
次年度の準備があるので無理ですが。


さて今年度の授業で使っているライブラリをチェックしてみたら、まぁ軒並みバージョンアップしとるわけです。

GLFW 3.1→3.2
FreeType 2.5.3→2.6.3
Eigen 3.2.4→3.2.8
libpng 1.6.?→1.6.21

というわけでせっせと更新作業。ついでに授業で使ってる拙作フレームワークも手直し。

Eigenはヘッダファイルをコピーするだけ〜

その他ライブラリはCMakeでプロジェクトを生成してビルド...てかそのCMakeもバージョンアップしとるw


GLFWはビルドオプションで指定していた GLFW_USE_DWM_SWAP_INTERVAL が廃止されてる。

これはWindows Vistaから導入された描画システム向けの設定なのだが、GLFWのビルド時に正しく指定できてないとフレームバッファ更新とモニタの更新が同期しなくなってしまうという恐ろしい状況になってしまうのだ!! (全速力で画面が更新される事態になる)

これ毎回ビルドするたびに「あれ?? ONだっけOFFだっけ????」ってなってたので、実行時に自動的に解決してくれるようになって有難い限り。
glfwSwapInterval呼び出し時に、よきに計らってくれるらしいよ(未確認)

そしてdoxygenが使える環境ならライブラリのフルビルドでリファレンスマニュアルも生成してくれますw

OSX版のGLFWは描画ウインドウが他のウインドウに全て覆い隠されたりすると全速力で更新されるという困ったちゃんなのだが、これは以下のようにウインドウのフォーカスを自前で把握するようにして回避できることが判明。

//
// サンプルコードとして必要最低限の内容です
// 悪しからず
// 

#include <GLFW/glfw3.h>

// Windowのフォーカスを自分で把握できるようにする bool is_focus = false; void focusCallback(GLFWwindow*, int value) { is_focus = value ? true : false; } int main() { glfwInit(); GLFWwindow* window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); glfwMakeContextCurrent(window); // Windowのフォーカスが変更になった時のコールバックを指定 glfwSetWindowFocusCallback(window, focusCallback); while (!glfwWindowShouldClose(window)) { /* Render here */ /* Swap front and back buffers */ glfwSwapBuffers(window); if (!is_focus) { // フォーカスがない時は何がしかイベントを待つ glfwWaitEvents(); } glfwPollEvents(); } glfwTerminate(); }

うむ。


FreeTypeは以前書いた手順で再ビルド。インクルードファイルの構成やフォルダ名が変更になっていたので、使っているプロジェクト側でも対応作業が必要だった。インクルードパスの設定から include/freetype2 の指定を無くせてスッキリ。


みたいな感じで滞りなく終了!!
手元にVisualStudioが無いのでWindows版のライブラリ更新は後日改めて。

ではまた次回!!

年始の嬉しい出来事

photo

コード書いとる??

明けましておめでとうございます。拙者は年末年始を実家で過ごしてました。

実家からトコトコ歩いて15分くらいのところにある農業用ため池から眺める初日の出はとても清々しく、気持ちが引き締まる思いでした。何気に人生初初日の出!! 子供の頃は爆睡してたし、社会人になってからは大抵お仕t(ry

お餅は3つ食べました。 

さてそろそろ BRICK&TRIPビルドできました!! これ改造して公開してもいいですよね!! 笑 報告があっても良さそうなのですが...みんな奥ゆかしい方ばかりですよね。

さてさて。まさかのIGDA日本のサイトにてBRICK&TRIPをご紹介いただきました。
とても光栄です!!

当日は専門学校の授業が入ってて、新年会に行けそうになくてすいません...

ではまた次回!! 

2015年を振り返る

amiagatta
コード書いとる??

気づけば2015年も暮れれつつありますね。みなさんにとって、2015年はどんな一年でしたか??

ワシは今年一年のスケジュール帳から紐解いてみるよ。
  • 1月
    知人宅で飲んだり公民館の音楽室でセッションしたり縄文土器を拝見したり
  • 2月
    2014年度の授業収めだったり学生作品の発表を見たり知人の舞台を拝見したり友人らとお肉をたらふく食べたり
  • 3月
    専門学校で補講したり体験授業引き受けたり卒業学生らの飲み会に参加したり
  • 4月
    専門学校新年度始まりだったり春のビール祭りだったり飴細工体験したり
  • 5月
    友人主催のドラム練習会に参加したり西武ドームで野球観たりボードゲーム会に参加したり
  • 6月
    うなぎ食べたり専門学校の審査会だったり東京おもちゃショウ見に行きそびれたり
  • 7月
    業界飲み会だったり念願の知人のライブを観たりBBQで飲んだり
  • 8月
    夏休み中ほぼ引きこもったりレイトレ合宿参加したり友人の結婚をお祝いしたり
  • 9月
    TGS観にいったり羊肉食ったり久々に友人と会ったり
  • 10月
    友人宅で結婚祝いを催したりお世話になっている先生のライブを観にいったり友人の一夜限りのバーへ行ったり
  • 11月
    雷おこし作ったり久々の知人らと飲んだりCGプログラマ飲み会に参加したりゲームマーケットに行きそびれたり
  • 12月
    友人の舞台を観たり2年振りとなるアプリ BRICK&TRIP を発表したりまさかのソースコード公開だったり
今年度は受け持ちクラスが増えたので、専門学校は月〜土までみっちり授業でした。朝9:20から始まって、夜は8:20までという日もあったので、日曜日には結構くたびれてたよ。

その状況でコツコツとアプリ制作を進め、そして完成まで漕ぎ着けたのは大きな収穫でした。今後の自信にも繋がりそうですね。というか学生へのワシもやってますよアピールですな:F

趣味のギターはやや横ばい状態。練習時間が減ったしまったので、やや機材収集に傾倒してしまった感があります。まあ趣味だからいいよね!!

来年はどんな一年が待っているんでしょうかね。ワクワク!!


ではみなさん、よいお年を!!

アプリ配信まもなくソースコード一式を公開した話

github-logo
コード書いとる??

メリークリスマス!!

拙作 BRICK&TRIPソースコードを公開しました。
拙作 BRICK&TRIPソースコードを公開しています。

自分がこれまで本当にお世話になっている業界に貢献するにはどうしたらいいのか自分なりに考えた結論です。

今回の作品も、CinderboostFreeTypeを始めとするOpen Source Softwareや、諸先輩がたの経験や知見がなければ、決して生まれませんでした。

そしてこの経験を未来の後輩たちへ繋いでいかなくては...と思い、アプリ配信間もないこのタイミングでの公開に踏み切ったのです。

拙いコードの寄せ集めですが、みなさんが手掛けるソフトウェア開発の一助になれれば光栄です。

55
GitHubのContribution activityは過去に遡ってくれるんやね。
これはいい仕様。

push直後、いい感じに緑色づいたよ。

ではまた次回!!

iMovie「アプリケーションプレビュー」での挙動が最高すぎる

30

コード書いとる??

拙作BRICK&TRIP好評配信中!!

アプリの紹介動画はこうして作りました。
  1. OSXのQuickTimeでiPhoneの画面と音をキャプチャ
  2. iMovieで編集
  3. 書き出し
  4. 完成!!
iMovieでの編集が想像以上に簡単で驚きました。
動作も軽く、チョイチョイチョーイ!!っと編集できてしまいました。
書き出しも数秒だぜ!!
iMovieすげぇよ...!!

さてこの動画、縦長画面です。これ、iMovieに追加された機能なんだけど、制作過程で仕様なのかバグなのかわからないんだけどとにかくアップルの技術者ナイス!!と思ったことがあったので書きます。

縦長の動画を作る場合、「新規アプリケーションプレビュー」というのでプロジェクトを作成します。
この雛形は、動画の解像度を変えることなく書き出しができる超素敵仕様!!
photo2

で、手持ちのiPhone5を使って収録した動画を編集して書き出し。

ここまでは良かったのですが...AppStoreではiPhone5とiPhone6とiPhone6 plusの3つで異なる解像度の動画を用意する必要があります。
 
これは困った。iMovieの書き出しでは解像度の変更ができません。

で、ネットで調べた調べた。

そしたら、動画の前に所定の解像度の静止画を入れると、その解像度で書き出してくれるということが判った。

試しにiPhone6の解像度750×1334の画像を動画の先頭に入れてから書き出し。
09

photo3

おおお...!! iPhone5で収録した動画の解像度が750×1334になってる!!!!

でもこれ、静止画が邪魔...と思って静止画を削除してから書き出しをしても、なんと解像度が元に戻らない!!! うおおおおグッジョブ!!!!!! これ狙って作った仕様だったとしたらすんげぇよ!!!!!!!!!!

10

解像度は、タイムライン上の素材を全部削除すると戻るみたいだね。お願いですからこの仕様はこのままにしておいてください!!!!

おかげさまで、iPhone5で収録した動画からiPhone6、iPhone6 plus、iPad、iPad retiaの4つの動画が無事書き出せましたとさ。


ではまた次回!!

とても丁寧なレビュー記事に励まされています!!

icon
コード書いとる??

様々な媒体が拙作BRICK&TRIPを取り上げてくださり、とても励みになっています!!
BRICKが目指す世界の果てには...何か...あるのでしょう。

テクジョ
キッズアプリ.COM
ファミ通App
ではまた次回!!

キミはもう手にとってくれたかな?? 爽快フリックアクションゲーム BRICK&TRIP

icon
コード書いとる??

拙作BRICK&TRIPを取り上げてくださり感謝!!

出会い頭に強烈なフックをお見舞いされたような見出しにKOされました!!
ドキドキハラハラなプレイ体験をイチオシするレビュー記事に、胸が熱くなります。

アプリ開発者自らが新作を紹介するコーナーにて、取り上げていただきました。
自分で自分のアプリを紹介...まだまだ不慣れです(汗)

ではまた次回!!

拙作「BRICK & TRIP」を取り上げてくださり感謝!!

icon
コード書いとる??

拙作『BRICK & TRIP』、みんなはもう遊んでくれたかな??
アプリ紹介サイトが、さっそく取り上げてくださりました。感謝!!

iをありがとう

iPhoroid

暗黒社

ゲームキャスト iPhone

私のつたないプレスリリース文からゲームの特徴や面白みを拾っていただき、嬉しい限り。
今後の開発の励みになります。

ではまた次回!!
記事検索
このブログを書いとる人
電子書籍発売中

「チュートリアル形式で始めるOpenAL」
サウンド怖くない。C++による8つのチュートリアルで始めるOpenALプログラミング。さああなたも、自作アプリに魅力的な音効を添えてみませんか??
⇒Kindle版 ⇒iBooks版


「iPhoneアプリ『ういろう』のレシピ」
ゲームってどうやって作ってるの?? 拙アプリ『ういろう』の製作過程を本にまとめました。もちろんソースコードつき
⇒Kindle版 ⇒iBooks版


『チュートリアル形式で始めるOpenGL[2D編]』
OpenGL怖くない。C++による16のチュートリアルで始めるOpenGLプログラミング[2D編]。さああなたも、ゲーム作りを始めてみませんか?
⇒Kindle版 ⇒iBooks版
自作ゲーム配信中

『BRICK & TRIP』
咄嗟の判断に、あなたの指先はついてこれるか?! 爽快フリックアクション!! 様々な難関をくぐり抜けて旅の終着点を目指そう!!
⇒AppStore


『ういろう』
名古屋土産ういろうがiPhoneで大活躍?! 白ういろうを守れるのはあなただけ。ひゅーん、ぼよよーん!!
⇒AppStore ⇒LITE版


『こなへん』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒AppStore ⇒LITE版


『GEOSPOT』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒Windows ⇒Mac


『TieGunner』
マウス片手に大宇宙へ飛び立とう!『しっぽシューティング』というジャンルを作って頂きました^^; WinでもMacでも動きます。ソースもあるでよw
⇒Windows ⇒Mac
監修を担当しました

QRコード
QRコード
  • ライブドアブログ