XcodeのAssistant Editorが関係ないファイルを勝手に開いた時の対処法
Xcodeを使うときはAssistant Editorを表示させて使う派で、 メインの方に実装ファイル、アシスタント側にヘッダファイルを表示させるのがいつもの構成。
しかし、たまによくAssistant Editorが関係ないファイルを開いてくれて地味にイライラする。 ストレスが限界に達して調べてみたら、リセットすれば良かったらしい(対症療法だけど)。
[View] -> [Assistant Editor] -> [Reset Editor]
(⌘ + ⌥ + shift + z)
参考
Cocos2d-x(iOS)でRxCppを使うときにハマったメモ
v2.1.0を落としてきて、適当なパスにRxCppを置いて、Header Search Pathにそこを指定した。 その後、普通にビルドしたら通ると思ったけども次のエラーが出てダメだった。
thread-local storage is not supported for the current target
なにやら使えない機能を使おうとしているらしい。
ちょっと検索したら、RxCppのissueにそれっぽいのがあった。 https://github.com/Reactive-Extensions/RxCpp/issues/19
で、masterにはこの変更が入っているけど、releasesの最新であるv2.1.0には入っていなかったからコケていたらしい。 なので、ひとまずはmasterを使うと良さげ。
日付っぽい文字列をアレしたりepochをアレしたりするやつ
Pythonのリハビリがてら車輪の再発明をしてこんなのを書いた。 たまによく、変換するためにわざわざネットでやっていたから再発明した。
$ ./dt.py '2015-02-18 12:34:56' 1424230496 $ ./dt.py '2015-02-18' 1424185200 $ ./dt.py 1424230496 2015-02-18 12:34:56 $ echo "2015-02-18 12:34:56\n2001-07-04 16:07\nhoge\n2072-09-18" | ./dt.py 1424230496 994230420 3241350000 $ echo "1424230496\n994230422\n3241415231" | ./dt.py 2015-02-18 12:34:56 2001-07-04 16:07:02 2072-09-18 18:07:11
そーす
#!/usr/bin/env python """ Convert between epoch and datetime string usage: dt.py dt.py <epoch_or_datetime> dt.py -h | --help options: -h, --help show this help message and exit """ import re from sys import stdin from time import localtime, mktime from datetime import datetime from docopt import docopt def epoch2datetime(epoch): return datetime(*localtime(epoch)[:6]) def datetime2epoch(match): dtstr, space = match.group(0), match.group(1) dt = datetime.strptime(dtstr, _parse_format(dtstr, space)) return int( mktime(dt.timetuple()) ) def _parse_format(dtstr, space): length = len(dtstr) if length < 13: return '%Y-%m-%d' if length < 16: return '%Y-%m-%d' + space + '%H' if length < 19: return '%Y-%m-%d' + space + '%H:%M' return '%Y-%m-%d' + space + '%H:%M:%S' def process_line(line): match = re.match(r'^\d{4}-\d{2}-\d{2}(?:([T ])\d{2}(?::\d{2}(?::\d{2})?)?)?$', line) if match: print datetime2epoch(match) elif re.match(r'^\d+$', line): print epoch2datetime(int(line)) else: print if __name__ == '__main__': args = docopt(__doc__) if args['<epoch_or_datetime>']: process_line(args['<epoch_or_datetime>']) else: for line in stdin.readlines(): process_line(line)
やったこと
docopt
を使ってみた- 日付っぽい文字列を自分が使いそうなパターンで定義した
- 標準入力から流せるようにした
- 複数行に対応した
_parse_format
を1文で書こうと思ったけど失敗
感想
CPANにモジュールを上げてみた
WebService::Slack::WebApiというモジュールをCPANに公開して、ついにCPAN Authorになった。
モジュールについて
アレな理由によりhubotのintegrationが使えず、(incomming webhooksもあるけど)せっかくだから生のAPIの方を弄ることに。 実態としては、APIの呼び出しをラッピングしているだけな、かなり適当なライブラリになった。
最初は各APIを1行目の感じで呼び出せるようにしようと思っていたけども、なんとなく、名前空間的な感じで分けたかったから2行目の感じにした。
my $result = $slack->chat_post_message('hoge'); my $result = $slack->chat->post_message('hoge');
最終的に、validationルールを記述するだけのモジュールが大量発生してしまい、冗長かなぁと思いつつもそのままにした。
モジュールを作る段階で学んだ点
あとで別の記事として書く予定。
先週の土日に実装を、インフルにかかってからドキュメントとほぼ実態のないテストを整備した。 TravisもCoverallsも利用するのがすごく簡単なうえに、なんとも言えない楽しさを与えてくれることに気づいた。
ドキュメントに書いたのはクソみたいな拙い英語だけど、良い機会になった。 やはり書く練習をしないといつまでたってもダメだな、と思った(粉みかん)。
今後
この2つくらいはやる。
- access tokenを取得する処理が欲しい
- post_messageのattachmentsを良い感じにしたい
その後は、Real Time Messaging APIを扱う奴も書く予定。 Pythonで書き直してPythonリハビリもしたい…
cocos環境構築メモ
cocos自体のインストール
まずは本体を公式からダウンロード。
現時点で最新版のv3.3
にした。
$ mkdir ~/lib $ mv /path/to/cocos2d-x ~/lib/cocos2d-x $ cd ~/lib/cocos2d-x $ ./setup.py
こいつらは現状インストールしていないから全部スキップした。
Please enter the path of NDK_ROOT (or press Enter to skip): Please enter the path of ANDROID_SDK_ROOT (or press Enter to skip): Please enter the path of ANT_ROOT (or press Enter to skip):
下記の内容が(zshを使っていれば)~/.zshrc
に書き込まれる。
# Add environment variable COCOS_CONSOLE_ROOT for cocos2d-x export COCOS_CONSOLE_ROOT=/Users/mihyaeru/lib/cocos2d-x/tools/cocos2d-console/bin export PATH=$COCOS_CONSOLE_ROOT:$PATH # Add environment variable COCOS_X_ROOT for cocos2d-x export COCOS_X_ROOT=/Users/mihyaeru/lib/cocos2d-x export PATH=$COCOS_X_ROOT:$PATH # Add environment variable COCOS_TEMPLATES_ROOT for cocos2d-x export COCOS_TEMPLATES_ROOT=/Users/mihyaeru/lib/cocos2d-x/templates export PATH=$COCOS_TEMPLATES_ROOT:$PATH
cocosコマンドが使えるようになる。
$ source ~/.zshrc
$ which cocos
/Users/mihyaeru/lib/cocos2d-x/tools/cocos2d-console/bin/cocos
お試しプロジェクト
新規プロジェクトを作成してみる。
$ cd ~/pj/cocos $ cocos new FirstSample -p com.mihyaeru.first_sample -l cpp Running command: new > Copy template into /Users/mihyaeru/pj/cocos/FirstSample > Copying cocos2d-x files... > Rename project name from 'HelloCpp' to 'FirstSample' > Replace the project name from 'HelloCpp' to 'FirstSample' > Replace the project package name from 'org.cocos2dx.hellocpp' to 'com.mihyaeru.first_sample' > Replace the mac bundle id from 'org.cocos2dx.hellocpp' to 'com.mihyaeru.first_sample' > Replace the ios bundle id from 'org.cocos2dx.hellocpp' to 'com.mihyaeru.first_sample'
こんな構造(1階層目だけ)になっている。
FirstSample ├── CMakeLists.txt ├── Classes ├── Resources ├── cocos2d ├── proj.android ├── proj.ios_mac ├── proj.linux ├── proj.win32 ├── proj.win8.1-universal └── proj.wp8-xaml
このコマンドで(ビルドしつつ)起動できる。
cocos run -p ios
ここまでで、README.md
に書かれている内容の自分向けメモが終わり。
ソースを弄ってみる
Classes/HelloWorldScene.cpp
内のHelloWorld::init()
に次のコードを追加してみる。
ボタンを押すとHelloWorld
のラベルがhoge
に変わるだけのサンプル。
auto buttonItem = MenuItemImage::create("CloseNormal.png", "CloseSelected.png", [label](Ref *sender) { label->setString("hoge"); }); buttonItem->setPosition(Vec2(200, 200)); auto buttonMenu = Menu::create(buttonItem, NULL); buttonMenu->setPosition(Vec2::ZERO); this->addChild(buttonMenu, 2);
とりあえず動かせたのでこの記事は終了。 Android版については今回は使用しないから割愛。
以降は...
昔のCocos2dの記憶を思い出しつつ、C++を頑張るぞい。