でらうま倶楽部

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

spacemacsのmagitにてauto-revert-modeを有効にする

photo

コード書いとる?

spacemacsにはmagitが組み込まれてて、これがすこぶる便利。addとcheckoutとcommit時々tagくらいなんですけどね!!

ところでcheckoutした時にバッファの内容が更新されない...不便だ... ってなってたんですがそれは単に設定をミスってただけでした!! ...っていうお話です。

dotspacemacs/user-config で

(global-auto-revert-mode 1)

としときます。これはemacs外でファイルが更新された時に自動的にemacsのバッファを更新する機能です。

でその後で
 
(setq magit-auto-revert-mode t)

とします。これでmagit側のauto-revert-modeが有効になります。

この機能、自分的にはありがたいのですが「うっかりcheckoutした時にバッファの内容が消えちゃってイヤ〜ん」っていう人も多くて、初期状態では有効になっていません。自分はcheckoutでbranchを切り替えた時にバッファの内容が古いまんまなのがつらかったので、思った通りの挙動になって満足です。

ではまた次回。

Keynoteに貼り付けたコードを色分けする

コード書いとる??

 プレゼン資料書いてる時に「ああああ!! コードは色分けして、等幅フォントで貼り付けたいんじゃあ!! Xcodeでみたまんまを貼り付けたいんじゃあ!!」って思ってたんですけど... できました!


1. Xcodeのテキストエディタで選択してコピー
スクリーンショット 2018-11-15 22.31.53
何も考えずにクリップボードへコピー。

2. Keynoteで貼り付け
スクリーンショット 2018-11-15 22.33.02
まんま貼り付けられた...フォントもおんなじやで。これまで難しく考えすぎてたんだ!!

ではまた次回。 

iOSアプリ提出のつまづきポイント[2018年版]

スクリーンショット 2018-11-03 11.16.16

コード書いとる??

拙作アプリ開発もいよいよ佳境です。

約3年ぶりというのも手伝って提出作業準備に四苦八苦しとりますが、その中から厳選して引っかかった事を三点ほどメモ書きしときます。

1. Distributionビルドでリンク時に「bitcodeを含めてよ」と言われる

Cinderライブラリのビルドはコマンドラインから実行しますが、この時bitcodeを含める指定が足りないのが原因です。Xcode上の設定だとONになってるので見落としがちなんですよね...

xcrun xcodebuild -project ${CINDER_XCODEPROJ} -target cinder_iphone -configuration Release -sdk iphoneos OTHER_CFLAGS="-fembed-bitcode" $@

2. DestributionのValidationで「LaunchScreen.storyboadを指定しないとダメですよ」と怒られる

LaunchScreen.xibあるのに怒られるんですよねー。で、ダメ元で Launch Screen File の指定から拡張子を取ったらValidation通過しました。マジかよ...w

スクリーンショット 2018-11-03 16.55.35


3. iPad向けAppプレビュー動画もiMovieから書き出しできる

iMovieのメニューから「新規アプリケーションプレビュー」でプロジェクトを作ってからiPadでキャプチャーした動画を放り込めば大丈夫だった... やるなぁ!!

スクリーンショット 2018-11-03 16.57.04


ではまた次回!!

C++ラムダ式のキャプチャを使って多態性を表現する

コード書いとる??

スクリーンショット 2018-10-25 11.17.44

拙作アプリ開発も終盤に差し掛かってきました。本作は C++14で追加された機能を 積極的に使おうとしてなかなかに苦戦しております。

使ったのは...「2進数リテラル」「std::make_unique」「std::random_shuffle()が非推奨になったので代わりにstd::shuffle()を使う」... 少な!!

習うより慣れろです!! ...歩みは遅いですが...

そんな中C++11から追加されたラムダ式が大活躍です。コールバック用の関数を別途用意する必要がなく、その場で書けて楽チンです。

void callback() { /* do something */ }

int main()
{
  Widget obj;

  // 従来の書き方
  obj.setCallBack(callback);

  // ラムダ式だとその場で処理を書ける
  obj.setCallBack([](){ /* do something */});
}

ラムダ式が強いのはキャプチャでローカル変数を取り込めること。これを従来の方法で実現しようとするとなかなかに難しい!!

int main()
{
  Widget obj;

  int a = 0;
  obj.setCallBack([a](){ /* キャプチャしたaの値を使える */});
}

さらにこうすると...

int main()
{
  std::function<void ()> func_list[2];

  int a = 0;
  func_list[0] = [a](){ /* do something */ };

  int b = 5;
  int c = 10;
  func_list[1] = [b, c](){ /* do something */ };

  for (auto& f : func_list)
  {
    f();
  }
}

おお!! なんかキャプチャが構造体定義の代わりになってるんじゃね?? 継承使わなくても多態性を表現できるっぽい??

と思って盛り上がったのですが... ラムダ式を乱用するとソースコード上で処理の検索性が異様に悪くなるので...一長一短ですな。


ではまた次回。

C++ でだってローカライズできた!!

コード書いとる?

iOSアプリmacOSアプリ共々ローカライズ対応がめっちゃ楽だったのでメモ。
同じ手法でローカライズできるとは思ってませんでしたw

ローカライズ対象を文字列に絞った内容ですがご容赦を。

1. ファイルの準備
Localizable.strings というテキストファイルを作成して、Xcodeのプロジェクトに加える
このファイルはローカライズ用に自動的に読み込まれる。文字コードはUTF-16である事

スクリーンショット 2018-08-02 8.39.22
 
内容はとりあえずこんな感じにしておく

"Hoge" = "Fuga";

2. ファイルのインスペクタにある「Localize」ボタンを押す
 
スクリーンショット 2018-08-02 8.40.02
 
3. どの言語で使うか聞いてくるのでとりあえず英語を選んどく

スクリーンショット 2018-08-02 8.41.41

4. 続いて対応言語にチェックを入れる

スクリーンショット 2018-08-02 8.41.59

5. プロジェクトナビゲーター上だとこんな感じに、対応言語ごとにファイルが選べるようになっている

スクリーンショット 2018-08-02 8.42.15

6. 試しに日本語対応のファイルの内容を

"Hoge" = "ふが";

にしとく

7. ローカライズ対象の文字列を変換するコードを用意

#include <Foundation/Foundation.h>
#include <string>

std::string Localize(const std::string& key)
{
  NSString* key_text = [NSString stringWithUTF8String:key.c_str()];

  NSString* text = NSLocalizedString(key_text, nil);
  return [text UTF8String];
}

すると

auto text = Localize("Hoge");

とした時の text の内容が、英語圏では "Fuga"、日本語圏では "ふが" となる

アプリ起動時の言語設定は、スキーム内の設定で変更できる

スクリーンショット 2018-08-02 8.51.02

うおおおお!! 便利すぎる!!!


ではまた次回!!

Emacs 26.1 が出た!

スクリーンショット 2018-05-29 18.17.57

コード書いとる?

ついにEmacs 26.1がリリースされましたね。
とりあえずmacOSへの導入メモ。

・gnutlsが必要なので

brew install gnutls

とかして導入しとく

公式からソースをダウンロード
パッチをダウンロード

spacemaceを使っているので、特に変化を感じませんw
起動時間はかなり短縮され、4秒を切るようになりました

念のため .emacs.d/elpa 以下のスクリプトを再コンパイルしたい場合は ~/.emacs.d/elpa で
 
find . -name '*.elc' | xargs rm

としてからspacemacsを起動して
 
SPC u 0 SPC SPC byte-recompile-directory

で ~/.emacs.d/elpa を選ぶと、まとめてbyte-compile してくれます。
(起動時に .elc が無い時は自動でbyte-compileするとかありそう)

ではまた次回!!

Oculus Go の開発を macOS Unity で始める

スクリーンショット 2018-05-16 17.29.16

コード書いとる?

Oculus Goが手元に届いてゴニョゴニョ始めたので、macOS向け環境導入メモを残しておきます。

・Xcode Command Line Toolsをインストール

Unity 2018.1.0f2 をインストール。

Java Development Kitをインストール
 ・Java SE Development Kit 8u172をダウンロードしてインストール

・Android Studioは要らんので、Command line toolsをダウンロードして解凍。

・tools というフォルダを適当な場所へ移動。 拙者は ~/Library/Android/ に置いた。

こちらのサイトを参考に、環境変数 JAVA_HOME を設定。

・ターミナルを開き sdkmanager のあるフォルダへ移動

・sdkmanagerを使って必要なファイルをダウンロード。 toolsと同じ階層にインストールされる
tools/bin/sdkmanager "platform-tools"
tools/bin/sdkmanager "build-tools;27.0.3"
tools/bin/sdkmanager "platforms;android-25"

・tools/bin/avdmanager をテキストエディタで開き、3行目くらいに以下を追加

JAVA_HOME=`/usr/libexec/java_home -v 1.8`

 ・これでUnity EditorでBuildした時のエラーが解消できる。

Oculus公式サイトで開発用にアカウントを作る

・アプリを実機で動かすのに必要になるので、ここで何か団体を登録しておく

・アプリを実機で動かすためにOculus Signature Fileを作っておく。
 ・サイトにファイルの置き場所も書いてあるので確認しておく。

公式サイトからOculus Utilities for Unityをダウンロードしとく
 ・後で自分のプロジェクトに手動でインポートする

・Unity Editorにて環境設定を開き External Tools 内 AndroidのSDKとJDKのパスを適切に設定

・PlatformをAndroidに変更

・Playerの設定を開き Other Settings内Target API LevelをAndroid7.1に変更

・XR Settings 内 Vertual Reality Supported のチェックボックスを入れ、Virtual Reality SDKs に Oculus を追加

スクリーンショット 2018-05-16 17.30.30

・プロジェクトにOculus Utilities for Unityをインポートしとく

・実機の開発者モードをONにしとく

・実機をUSBケーブルでMacに繋ぐと、開発者モードで繋ぐ?と実機側で表示されるので必ずOKしとく

・サンプルシーンをビルドして実機で動けば成功!

これで実機で動作します。たぶん。
 
ただEditor上ではライブラリが見つからずにエラーとなってしまいますのでなんとかしたいです!

ここに至るまでにかなり難儀をしたので誰かビールを奢ってくださいw

ではまた次回!!

spacemacs のキーバインドを解除する

photo

コード書いとる?

spacemacs だとキーバインドの解除はどうすんの? って思ってたんですが、これでよかったんですね。

(spacemacs/set-leader-keys "ap" nil)
 
ではまた次回! 

Cinder で色々値を調整するci::params::InterfaceGlをちょこっと使い易くする

コード書いとる?

Cinderに搭載されている ci::params::InterfaceGl を使うとリアルタイムに値の調整ができてとても便利です。
内部では AntTweakBar を使っているようですね。

で、普段は邪魔になるので隠したいじゃないですか。

これは ci::params::InterfaceGl::show で実現できるのですが、実現できるのですが、これが邪魔やねん! この左下のが!!
photo1

イラっときて調べてみたら、こんな議論を見つけました。

早速試してみる。
extern "C" {
  int TwDefine(const char *def);
}

TwDefine("TW_HELP visible=false");

photo2

ウム!スッキリ!!

ではまた次回。

Cinder0.9.1 メモ

18

コード書いとる?

最近よく使っているFrameworkのCinderで若干気になる事があるのでメモ書き。
  • iOS版はOpenGL ES3.0ベース。ES2.0対応にしたい場合はプリプロセッサにCINDER_GL_ES_2を定義して再ビルド
  • 文字のレンダリングにFreetype2を使っている??
    →Android版のみが利用(まだ非公式)
  • macOS・iOS版はリンカーの設定で、「prelink」が有効になっているのだが、これが原因でリンクに時間が掛かる
    →設定を外して、プロジェクトごとにリンクするライブラリを指定するようにした方が良さげ
  • iOS版にてサウンド再生を使う場合は自前でイヤフォンの抜き差しに対応する必要がある
    →AudioSessionを使う
  • iOS版はGLKitを使っていないのでXcodeにてCPUの占有時間が正しく測れないw
これくらいかな?
 
ではまた次回!! 

iOSアプリを「OpenGL ES3.0」必須にする

コード書いとる??

年明けから絶賛製作中のアプリですが、絶賛製作中です。

利用しているFramework Cinder 0.9.1 がOpenGL ES3.0必須なので、「それどうやってXcodeで設定するんだ?」と思って色々調べた結果をメモ書き。

UnityとかUE4とか使ってる人には多分関係ない。


GameCenter対応とかiCloud対応ならXcodeのCapabilitiesにて設定できますが、そこに「OpenGL ES3.0必須」という項目が無い。

39


そこでAppleのドキュメントを調べてみたらここに書いてありました。公式ドキュメント大事。

Info.plistにRequired device capabilitiesを追加、さらに子供の要素で文字列 opengles-3 を追加すれば良い。

08


これで手持ちのiPhone5ではアプリを起動できなくなりましたw

26


ではまた次回!!

spacemacs だと Flycheck の導入が一瞬で終わるのだ

photo

コード書いとる??

spacemacsのlayerにあるsyntax-checkingがめっちゃ便利なので導入方法のメモ。
とくにJSONにて!!

emacsにはプログラムの書き間違いをその場で指摘してくれるパッケージFlycheckがあります。
対応言語はなんと40種類!! アホか!!(褒め言葉)

んで、spacemacsにはそのFlaycheckをサクッと導入するためのLayerが用意されていて、init.el内のdotspacemacs-configuration-layersに書き足すだけで使えるようになる。神か!!

んで、ワシが使いたいのはJSON編集時!! もーカンマの書き間違いが多くって、困っちゃってたのだ。これがFlycheckを使えばその場でミスが見つかるという寸法。

init.elでは以下のように設定を書き足した。

(setq-default dotspacemacs-configuration-layers
              '(
                (syntax-checking :variables syntax-checking-enable-by-default nil)
                ))

(defun dotspacemacs/user-config ()
  (defun json-mode-hooks ()
    (flycheck-mode))
  (add-hook 'json-mode-hook 'json-mode-hooks)
  )

こんな感じにエラー個所がわかります。

53

これでもうカンマを忘れたり、余計なカンマをつけたままにしたりしない!!

スッキリ。

emacs の which-key に便利すぎる機能が追加されていた件。

photo

コード書いとる??

先日which-keyを更新したら「SPCキー押し下げで表示されるpopupがエラーで出なくなる」という不具合に遭遇しました。
不具合はコミュニティーの力であっちゅーまに解決されたのですが、ついでにwhich-keyの更新履歴を眺めていたら、なんと便利な機能が追加されていたのでメモ書き。

変数 which-key-enable-extended-define-key をnil以外にすると、ショートカットキー登録時に説明文を一緒に登録できるという機能です。

(define-key some-map "f" '("foo" . long-name-for-command-foo))

いやこれめっちゃ欲しかった!! which-key-replacement-alist にゴニョゴニョ追加するのがしんどかったので、この対応は素晴らしい!!

spacemacs だとこんな感じに登録できます。

(spacemacs/set-leader-keys "f" '("foo" . long-name-for-command-foo))

emacs lisp最高!!

ではまた次回。

spacemacs で自動的にモード(evil-state)を切り替える

photo

コード書いとる?

気づけば2018年ももう一週間ほど過ぎていますね。みなさんどんな年末年始をお過ごしでしたか?
私は「年初めひとりゲームジャム」と称して試作版ゲームを作っておりました。

さて spacemacs を使っていて気になっていた事がひとつありまして。

emacs純正のcalculatorは手軽で16進数の計算もサクッとできるしで愛用しています。spacemacsではこんな感じにキーを割り当てていました。

(spacemacs/set-leader-keys "ac" 'calculator)

ところがこれだと電卓起動時はnormal-stateなので、いざ計算しようと思ったらinsert-stateかemacs-stateにしないといけません。めんどい!!

マジか…他のはどうしてるんだ?!と思ってネットを調べてみたら…見つかりました!!

モード起動時にevilのstateを切り替える変数がありました。さすがだ。
  • evil-emacs-state-modes
    モード起動時にemacs-stateにする
  • evil-normal-state-modes
    モード起動時にnormal-stateにする
  • evil-insert-state-modes
    モード起動時にinsert-stateにする
結果これで丸く収まりました。
(spacemacs/set-leader-keys "ac" 'calculator)
(add-to-list 'evil-insert-state-modes 'calculator-mode)

スッキリ!!

emacs でのマウス操作を封印する

photo

コード書いとる?

emacs でのマウス操作を封印するパッケージ disable-mouse が少し新しくなりました。

「や、マウスホイールの操作は残しておきたいんですよね…」
とIssueを投げたら速攻で対応していただきました。

設定時にこんな感じにしておきます。

  (setq disable-mouse-wheel-events nil)
  (global-disable-mouse-mode)

ではまた次回!! 

Invalid function:helm-build-sync-source で困ったら

photo

コード書いとる?

spacemacs最高ですね。

先日パッケージを更新したらちょいちょいこんなエラーが出るように…

Invalid function:helm-build-sync-source

結果helmでの検索一覧から何かしらアクションを起動できなくてつらい…

helmの過去のIssueをみるに「helmを再インストール(再コンパイル)すれば治るよ!」との事ですが、どうやらそれだけではダメっぽい。

結局「spacemacs終了→ .emacs.d/elpa削除 → spacemacs起動 → 全パッケージ再インストール」で治りました。

スッキ…リ?

emacs から SuperCollider を直接起動する

15
コード書いとる?


いちいちSuperColliderを起動して SuperDart.start とかするのが面倒なので、自動化しました。

1. emacs のマクロを導入
 
2. 以下の内容のテキストファイル startup.scd を用意

SuperDirt.start

3. init.el に追加

(with-eval-after-load "tidal"
  (require 'sclang)
  ;; sclangへのパス(必要であれば) 
  ;;(setq sclang-command "hoge/sclang")
  ;; sclang起動時に読み込んで実行する startup.scd ファイルのパス
  (setq sclang-command-arguments "hoge/startup.scd")
  (define-key tidal-mode-map (kbd "C-c s s") 'sclang-start)
  (define-key tidal-mode-map (kbd "C-c s q") 'sclang-quit))

4. emacsにて適当にTidalCyclesのファイルを作成(hoge.tidal)
 
12

5. sclang-start (C-c s s)を実行

39


6. tidal-start (C-c C-s)を実行

50


7. Enjoy it!!

ではまた次回!!

TidalCycles と spacemacs とライブコーディング

15

コード書いとる?

何かで見かけた「ライブコーディング」の記事が妙に引っかかってて、ちょっと調べてみたら TidalCycles に行き当たって、早速 spacemace で扱えるようにした導入メモ。

導入にはここが大変参考になりました! 多謝。

ちなみに macOS での導入方法です。 それ以外のOSの人、申し訳ない!!

1. Homebrew を導入
2. 
Haskellのビルド、パッケージ管理を担うstackを導入
ターミナルからコマンドを呼び出す 
brew install haskell-stack
stack setup 

~/.stack/global-project/stack.yml のresolverを以下のように変更
resolver: nightly-2017-07-31

3. 色々導入 
ターミナルからあれこれ動かす。 
stack setup
stack install apply-refact hlint stylish-haskell hasktags hoogle
stack install tidal
brew cask install supercollider 

4. SuperColliderを起動
左カラムのテキストエディタに以下をコピペ
include("SuperDirt")

Command + Enter をキーボードから入力しコード実行。
しばらく待ち、右下のコンソールにSuperDirt installedと表示されれば完了

5. spacemacsでの設定

dotspacemacs-configuration-layers に haskell を追加
dotspacemacs-additional-packages に tidal を追加
dotspacemacs/user-config に以下を追加
(setq tidal-interpreter "/usr/local/bin/stack")
(setq tidal-interpreter-arguments
      (list "repl"
            "--ghci-options=-XOverloadedStrings"
            ))

spacemacsを再起動。自動的にhaskellとtidalのパッケージのダウンロードが始まる。

6. SuperColliderを起動
テキストエリアに以下を貼り付け
SuperDirt.start

Command + Enter をキーボードから入力しコード実行。
 
アプリ右下のServerラベル右のエリアの文字が緑色になっていることを確認する

7. 試しに音を鳴らす
spacemacsにて test.tial などと適当にバッファを作る。 設定がうまくできてれば Haskell Tidal mode になっている。
 
C-c C-s で Haskellを起動

バッファに
d1 $ sound "bd bd bd bd" 

と入力して C-c C-c で演奏開始!!

Happy TidalCycles time!!

macOS はキーボードショートカットがかなり自由だった話。

コード書いとる??

長らく使っているmacOSでようやく使い方を心得た機能のメモ書き。

キーボードショートカットの割り当てですが、なんとシステム環境設定内の「キーボード」で変更できるんですね。

Mission Controlのキー設定は以前から変更していたのですが、まさかアプリケーションごとに細かく変更可能できるなんて!!

photo1


アプリケーション固有のキーボードショートカットを追加するには「+」ボタンを押す。

photo2


設定ダイアログが出てくる。

photo3


ショートカットを追加するアプリケーションを選び、メニュー表記とキーボードショートカットを順次入力。

photo4


おおおお!

photo5


もちろん既存のキーボードショートカットの置き換えもできます。便利!

「このアプリはキーボードショートカットの変更ができなくて不便だ…」て思っててすいません。OSでサポートしてるんならアプリでの実装は必要ないよね…

ではまた次回!!

spacemacs が起動しなくなった場合の回避策

photo

コード書いとる?

朝寒くておきづらい…と思っていたら12月ですよ。師走ですよ師走。
「走って授業しなさい」とでもいうのでしょうか。

さて大のお気に入りの spacemacs ですが、最新のパッケージにすると起動しないという不具合が発生しています。

これは各種パッケージのstable版を使うよう設定ファイルで指定すれば解決します。

(defun dotspacemacs/user-init ()
  ;; 新しいリリースまでパッケージはstableを使う
  (push '("melpa-stable" . "stable.melpa.org/packages/") configuration-layer--elpa-archives)
  (push '(use-package . "melpa-stable") package-pinned-packages) 

  ;; 以下設定が続く
  )

うっかり最新版のパッケージを導入してにっちもさっちもいかなくなってしまった場合は、設定ファイルに前述のコードを追加したのち、一旦 .emacs.d を削除。spacemacsを再導入してみてください。

ではまた次回!!
記事検索
電子書籍発売中

「チュートリアル形式で始める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コード
  • ライブドアブログ