memomemo

asしかやった事ない私がつまずいたとこメモです。なんか間違ってたらコメントください。

実行中かどうか知りたい!

ps aux | grep [検索したいやつ]

  • ps : 実行中のプロセスを表示する
  • a : 自分以外のユーザーのプロセスも表示する
  • u : ユーザー名と開始時刻を表示する
  • x : 制御端末のないプロセスの情報も表示する
  • | : 左側の結果に対して、右側を実行する
  • grep [引数] : 引数の文字列を検索する

psのオプションは他にもいろいろ
Linuxコマンド集 - 【 ps 】 実行中のプロセスを表示する:ITpro

AIRのlogみる

  1. /Library/Application Support/Macromedia/mm.cfgにmm.cfgをつくる
  2. mm.cfgに ErrorReportingEnable=1 TraceOutputFileEnable=1 書く

Debugging Flex applications with mm.cfg and flashlog.txt | Flex Examples


そしたら 立ち上げたら
/Users/username/Library/Preferences/Macromedia/Flash Player/Logs/flashlog.txt
flashlog.textができてここにログがではずなんだけどなーーーー



でない。



原因...
DebugPlayerじゃないから。
でもどーやってAIRをDebugPlayerでたちあげるのだ???


インストールされてるappの中に debug ってのつくってあげると
でたーーーーーーーーーーーーーーーーーーー!!!!

touch /Applications/hoge.app/Contents/Resources/META-INF/AIR/debug

air起動しなおしてね)

AIR から.shを実行

やーー asもまだまだやった事ないものあるなーー
今回色々はまったので めもめも。

function init()
{
	var file:File = File.applicationDirectory.resolvePath("hoge.sh");
	var processArgs:Vector.<String> = new Vector.<String>; 

	processArgs.push('chmod -x "'+file2.nativePath+'"');
			
	var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
	nativeProcessStartupInfo.arguments = processArgs;
	nativeProcessStartupInfo.executable = file2;
	nativeProcessStartupInfo.workingDirectory = File.userDirectory;
					
	_process = new NativeProcess();
	_process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,onError);
	_process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, outputHandler);
	_process.addEventListener(ProgressEvent.STANDARD_INPUT_PROGRESS, progressHandler);
	_process.start(nativeProcessStartupInfo); 
}

それぞれのハンドラー書いてあげる

そしてエラー
Error: Error #3219: The NativeProcess could not be started. 'Not supported in current profile.'

これは app.xml に

<supportedProfiles>extendedDesktop desktop</supportedProfiles>

追加しろと

で、この.shを一緒にパッケージ化したいのにされなかった。。
(´;ω;`)ブワ

原因はプロパティのこやつ!!
f:id:knuckle32:20140912182524j:plain
非埋め込みファイルを出力フォルダーにコピー
したら、でたーーーーーーーーーー!!!
f:id:knuckle32:20140912182530j:plain


flash builderからだと実行されるのに、AIRコンパイルしたら実行されないとううううううううぅぅぅううぅ


logの出し方もわからず、
やってもらったのでそれもブログにまとめましたがー

AIRのlogみる - memomemo


で結局
Error: Error #3219: The NativeProcess could not be started. 'Not supported in current profile.'
って前と同じエラーがでてましてーー
なんでだー とぐぐりましたら

書き出しが 
証明済みAIRパッケージ ではなく×
証明済みネイティブインストラー にすればいいと○

こやつです↓
f:id:knuckle32:20140912185505j:plain


ε=( ̄。 ̄;)フゥ

イテレータ

C++数値の3桁区切り - memomemo
のなかのイテレータ部分ですー

                            • -

std::vector::reverse_iterator
リバースイテレータなるもの。
まず イテレーターって? こちらから引用

  • 配列やリストのようにデータがいくつか連なっているもの(格納庫)に対して、どの格納庫に対してもすべて同じ方法で、順番にアクセスする方法
  • イテレータはポインタのように扱えるように設計されてる

"reverse_iterator" はreverseだからi++で逆順にアクセスできる。
iteratorの種類↓

input_iterator 前方に移動しながら値を読むことができるイテレータ。インクリメント(ポインタを前方に進める)、比較、参照はずしができる
output_iterator 前方に移動しながら値を書き込むことができるイテレータ。インクリメントと参照はずしができる
forward_iterator 前方に移動しながら値の読み書きができる。これはinput_iteratorとoutput_iteratorを合体させ、値書き込み機能を追加したものである
bidirectional_iterator 前方、後方への移動、値の読み書きができるイテレータ。これはforward_iteratorに似ているが、さらにデクリメント(ポインタを後方に進める)ようにしたものである
random_iterator 値の読み書きとランダムアクセスが可能なポインタ。一番強力なポインタである。これはbidirectional_iteratorにポインタ演算機能とポインタ比較機能を追加したものである
reverse_iterator random_iteratorやbidirectional_iteratorのような、後方に進むことができるイテレータである


配列.rbegin()
配列.rend()

配列のイテレーターを取得するやつ

  • 逆順の先頭を取得する→ rbegin
  • 逆順の末尾(逆順で見たときの最後の要素の次)を取得する→ rend
  • 先頭の取得する→ begin
  • 最後の要素を取得する→ end


ふむふむ

C++数値の3桁区切り

三桁で区切って 1,000,000 って表示したい!
ってことでググりました。

こちら↓の方のものを使わせてもらったんですが
とあるソフトウェアエンジニアのブログ

std::string formatNumber(int num)
{
    std::vector<int>    sepnum;
    int                 number = abs(num);
    int                 sgn = num >= 0 ? 1 : -1;

    while ( number / 1000 ) {
        sepnum.push_back(number % 1000);
        number /= 1000;
    }

    std::stringstream  ss;
    ss << number * sgn;
    for ( std::vector<int>::reverse_iterator i = sepnum.rbegin();
                                        i < sepnum.rend(); i++ ) {
        ss << "," << std::setfill('0') << std::setw(3) << *i;
    }
    return std::string(ss.str());
}

知らないものが沢山Σ(゚Д゚ ;)
ってことで調べました。


std::stringstream
そのまま文字列ストリームなんだが、
"<<" で色々な型を文字列化してくれる。
中はこんな感じでいろんな方を受け取れるようになってる

ostream& operator<< (bool& val );
...
ostream& operator<< (ostream& out, char c );


イテレーターは長いので別記事でー



std::setfill('0') << std::setw(3)
std::stringstreamに << して何かごちゃごちゃしてるんだか。そもそもこれらは↓

  • 入出力マニピュテータという特殊な関数
  • マニピュレータとは、iostream に挿入したり、iostream から抽出したりする値で特別な効果を持つもの

で結構種類がある。

std::cout << "aaa" << std::endl;

の endlもそーなのねー
他の種類はこちら

std::setfill('0')
は引数で指定した文字列で埋める
std::setw(3)
は3つの幅とれよー

ってことで
000 が確保されるんだと。
そこに << 2 とかやると
002になる!


理解!!

asで配置されてるDisplayObjectのシンボルidとる方法

loadしたバイナリーからしか見れないという。。。
まだやってないけど、やるかもだからメモ。

claus/as3swf · GitHub
↑これでloaderInfoのbytesをパースして、
as3swf/TagPlaceObject.as at master · claus/as3swf · GitHub
↑ここの中からいろんな情報がとれるとな!
characterIdがそれっぽい


色々試してみたもの

  • getQualifiedClassName(A) → MovieClip
  • Object(A).constructor → MovieClip
  • describetype(A) → MovieClip

全部 MovieClip としかかえってこなかった.. orz

Union

Union 共同体 名前かっこいい。

//hpp
union
{
    ui::label* label;
    graphics::sprite* sprite;
} content;

//cpp
content.label = label_

みたいな感じで、書く。
メモリの領域を共同でつかう共同体なんだと。
便利。

初期化は最初のメンバの型の値でしかできないので注意!