いろいろ備忘録

雑記です。

Android雑記

@VisibleForTesting

テストのために、必要以上にスコープを広げていることを示すアノテーション

・MVPではActivityがプレゼンタを生成する

・IntentFilterとは受信したブロードキャストをタグ(アクションと言う)でフィルタリングするもの

テックノート – Junitライブラリ「Mockito」の@Mockと@InjectMocksの使い方

・onCreateとonDestroy、onStartとonStop、onResumeとonPauseで対になる

・onSaveInstanc()はバックキーでは呼ばれない

・永続化したいときはonPause()でBundleに保存

・カスタムビューのXMLとその親のViewGroupのレイアウトの重複を避けるため、XMLの親にmergeを指定する

・カスタムビューを作成するためにはattrs.xmlをいじる

・layoutのXMLをViewGroupに設定するためにはinflateする

・R.styleableはカスタムビューで使用する

・TypedArrayはXMLから値を取得できる、使い終わったらrecycle()

・引数のAttributeSetはXMLの値が入っている

XML → attrs → TypedArray

・Fragmentには引数なしコンストラクタを宣言しておく←リフレクションされるため

・Fragmentを作成する手順の一つは

①Fragmentを継承したクラス宣言

②Fragment用のレイアウトXMLを作成

③ActivityにFragmentを貼り付ける

・ActivityとFragmentが紐付く→onAttach()  解かれる→onDetach()

・Activityと違ってFragmentにはonRestoreInstanceState()はない、つまりスリープからの復帰は単純にはできないが、onCreate~onActivityCreateの引数にBundleがあるのでそこで状態を読み込む

・今存在するフラグメントの取得、新たにフラグメントの作成はFragmentManagerで行う

・Fragmentを生成したとき、その親のActivityのonCreate()も呼び出される。処理を重複して行わないよう注意。

・Fragment.setArguments()でBundleを保持でき、保持したBundleにはFragment.getArguments()でアクセスできる

・addToBackStack()の引数に文字列を指定しておくと、以降にいくらスタックに積まれても、前述のキーを指定すれば一気にそこまで戻れる。普通はnull。

・画面を持たないフラグメントをヘッドレスFragmentという

・ヘッドレスFragmentは回転で再生成する必要はないのでsetRetainInstance(true)する

・しかしActivityは毎回再生成されるのでfindFragmentByTagなど、フラグメントが存在しないことを事前に確認してからヘッドレスFragmentを生成する

・接続状況はConnectivityManagerで取得

・receiverで接続/切断などのイベントが受け取れる

CakePHPのconnect()のアスタリスクの個数

貧欲なスター (greedy star) /* に加えて、 /** 流れ星 (trailing star) 構文が あります。2つのアスタリスクをつなげると、URL の残りを1つの引数として取り込みます。 これは、 / を含む引数を使用したい時に便利です。

$routes->connect(
    '/pages/**',
    ['controller' => 'Pages', 'action' => 'show']
);

 

ルーティング

 配列で取得するか、文字列で取得するかの違いです

JenkinsにてERROR: file not found:

Windowsです。

Jenkinsにてテキストファイルに出力するブツを実行するとビルドが失敗する。

まずそもそもshコマンドが通っていなかった。

Gitによって既にインストールされているのでwhere git してGit\binにPathを通した。

次にERROR: file not found: {区切り文字がなくなったファイルパス} が出力された。

shで実行しているのでWindowsの区切り文字ではなくLinuxの区切り文字に変更した。

するとやっとビルドが成功した。

漢字のcharを理解する

int main(int argc, char **argv) {
char c[] = "大";

char *word = "大同小異";

//sizeofで変数のバイト数を求める
//終端文字が入るので1引く
int byteLen = sizeof( c ) - 1;

//char型には1バイト入る。つまり
//UTF-8の場合、漢字は3バイトなので3
//S_JISの場合、漢字は2バイトなので2が表示される
printf("漢字一文字のバイト数は%d \n",byteLen);


int y;
for (y = 0; y < byteLen; y++) {
//先頭アドレスから1バイトずつ出力する
//繰り返してやっと一つの文字になる
//つまり途中でbreakすると文字化けする
printf("%c", *(word + y));
}
printf("\n");
return 0;
}

 

C言語のアドレス関連

・CLionのデバッグ実行でGDBというデバッガが使える。

p &{変数もしくはメソッド名} でアドレスを表示などが可能。

gdb の使い方・デバッグ方法まとめ

 

・printf("%p",&{変数名});で変数のアドレスが出力出来る。

 

・環境でポインタのサイズは異なる。

32bitでのポインタのバイト数は4バイト (=32bit)
64bitでのバイト数は8バイト (=64bit)

そもそも32bit、64bitとはメモリのアドレスの総組合せ数。

そしてポインタとはメモリのアドレスを示すものであるため、
2^32通りを表すために4バイト、2^64通りのために8バイトが必要。

itpro.nikkeibp.co.jp

そのためポインタのサイズはintでもcharでもfloatでも何でも同じ。
「それなら全部型同じで良くない?」と思ってはいけない。
インクリメントする時にスキップする数が違うため、分ける必要がある。

C言語におけるポインタの勘違い | jikkenjo.net

CLionのインストールでエラー

MinGWをインストールしてCLionで選択すると

cmake error at CMakeTestCCompiler.cmake 51 などとエラーが出た。

 

やったこと一覧

まず、MinGWを再インストールした。

必要なコンポーネントがインストールされていることを確認した。

うまくいかなかったので下記URLに従ってcygwinをインストールした。

Beginners Guide to Installing JetBrain’s CLion on Windows for C++/C

cygwinもやはりcmake errorが出た。

公式にTDM-GCCをインストールすると良いよと書いてあったのでインストールした

CLionの良くある質問と答え | JetBrains ブログ

やはりうまくいかず、気まぐれにcygwinを選択すると何故かうまくいった。

何が問題だったかは分かりません。誰か教えてください