FreeBSDのディスク追加メモ

📅 2014/05/05

FreeBSD
# camcontrol identify ada2
# gpart create -s GPT ada2
# gpart show ada2
=>        34  5860533101  ada2  GPT  (2.7T)
          34  5860533101        - free -  (2.7T)
# gpart add -b 40 -t freebsd-ufs ada2
# newfs -S 4096 /dev/ada2p1

-b 40は以下を参照

http://d.hatena.ne.jp/epy0n/20110709/1310231619

Fragment Lifecycle

📅 2013/11/25

Android

FrameLayoutでCanvasを弄る

📅 2013/07/02

Android

Viewが持っているCanvasのdrawBitmapを使ってスタンプもどきの実装をしていて詰んだのでメモ。 ViewにBitmapを貼ったり線を引きたい場合はonDrawをOverrideして貼り付けてやればいい。


    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLUE);
        canvas.drawBitmap(mStampBitmap, onTouchCurrent.x, onTouchCurrent.y, null);
    }

FrameLayoutも同様にonDrawでいけるかなと思ってやってみたが最初の1度だけでonTouchListener内でinvalidate()を呼んでもだめだった。 他にdraw(Canvas canvas)という関数もあったがこれもだめであった。 dispatchDraw(Canvas canvas)はinvalidate()後に実行されるようなのでこちらで描画処理をすることにした。

    @Override
    protected void dispatchDraw(Canvas canvas) {
        // move 10pixel
        canvas.translate(10,10);
        super.dispatchDraw(canvas);
    }

ndk-buildでドハマリ

📅 2013/05/27

Android NDK

すごくしょうもないことで時間を消費してしまった。 こんなエラー。

05-27 23:11:16.316  17783-17783/com.epy0n0ff.gles4image.sample E/AndroidRuntime: FATAL EXCEPTION: main
        java.lang.ExceptionInInitializerError
        at java.lang.Class.newInstanceImpl(Native Method)
        at java.lang.Class.newInstance(Class.java:1319)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1026)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
        at android.app.ActivityThread.access$600(ActivityThread.java:127)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4511)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:743)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libgles4image: findLibrary returned null
        at java.lang.Runtime.loadLibrary(Runtime.java:365)
        at java.lang.System.loadLibrary(System.java:535)
        at com.epy0n0ff.gles4image.sample.MainActivity.<clinit>(MainActivity.java:17)

libgles4imageがね~ぞというエラーだけどndk-buildは成功してlibsにアーキテクチャ別のlibgles4imageが入っているので 間違いないはず…。生成物のapkを念の為にzipinfoで調べてみた。

$ zipinfo OpenGLES4ImageSample.apk
-rw----     2.0 fat      552 bl defN 27-May-13 23:11 res/layout/main.xml
-rw----     2.0 fat     1648 bl defN 27-May-13 23:11 AndroidManifest.xml
-rw----     1.0 fat     1292 b- stor 27-May-13 01:31 resources.arsc
-rw----     1.0 fat     9193 b- stor 26-May-13 16:52 res/drawable-hdpi/ic_launcher.png
-rw----     1.0 fat     2658 b- stor 26-May-13 16:52 res/drawable-ldpi/ic_launcher.png
-rw----     1.0 fat     5057 b- stor 26-May-13 16:52 res/drawable-mdpi/ic_launcher.png
-rw----     1.0 fat    14068 b- stor 26-May-13 16:52 res/drawable-xhdpi/ic_launcher.png
-rw----     2.0 fat   319884 bl defN 27-May-13 23:11 classes.dex
-rw----     2.0 fat    13432 bl defN 27-May-13 22:46 lib/armeabi/libgles4image.so
-rw----     2.0 fat    13436 bl defN 27-May-13 22:46 lib/armeabi-v7a/libgles4image.so
-rw----     2.0 fat     5312 bl defN 27-May-13 22:46 lib/mips/libgles4image.so
-rw----     2.0 fat     5208 bl defN 27-May-13 22:46 lib/x86/libgles4image.so
-rw----     2.0 fat     1070 bl defN 27-May-13 23:11 META-INF/MANIFEST.MF
-rw----     2.0 fat     1123 bl defN 27-May-13 23:11 META-INF/CERT.SF
-rw----     2.0 fat      776 bl defN 27-May-13 23:11 META-INF/CERT.RSA
16 files, 395225 bytes uncompressed, 181134 bytes compressed:  54.2%

確かにlibgles4image.soが存在している。俺に間違いはない。 はずだった…。 Android.mkファイルを見てみよう。

$ cat Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := gles4image
...

そう、loadLibraryの引数はLOCAL_MODULEで与えたstringを指定してやらないとだめなんだ…。

static {
    System.loadLibrary("libgles4image");
}

な記述を

static {
    System.loadLibrary("gles4image");
}

に修正してやるとExceptionは発生しなくなった。 こういうつまらないミスを減らすためにもbuild scriptでサクッとチェックいれる体制を 作っていかねばならんなーと痛感した一日であった。

git flow hotfix の利用

📅 2013/05/17

git git flow

git flow hotfixがしっくりこなかったのでダミーリポジトリで調査してみた。

git flow hotfixではstartの後に指定したものがそのままタグ名になり branchにはデフォルトのままだとhotfixのprefixが付与される。 (自分は勝手につくと思い込んでた)

initしてみる

$ git flow init

Which branch should be used for bringing forth production releases?
   - master
Branch name for production releases: [master] 
Branch name for "next release" development: [develop] 

How to name your supporting branch prefixes?
Feature branches? [feature/] 
Release branches? [release/] 
Hotfix branches? [hotfix/] 
Support branches? [support/] 
Version tag prefix? [] release/

branch確認

$ git branch
  develop
* hotfix/fix_nullpo
  master

fix完了

$ git flow hotfix finish fix_nullpo                                                                                                                       
error: Cannot delete the branch 'hotfix/fix_nullpo' which you are currently on.

Summary of actions:
- Latest objects have been fetched from 'origin'
- Hotfix branch has been merged into 'master'
- The hotfix was tagged 'release/fix_nullpo'
- Hotfix branch has been back-merged into 'develop'
- Hotfix branch 'hotfix/fix_nullpo' has been deleted

branch確認

$ git branch
  develop
* hotfix/fix_nullpo
  master

tag確認

git tag
release/fix_nullpo

hotfixのものにreleaseで指定したprefixがつくということはrelease=hotfixという認識で問題なさそうだ。

Git flowの活用事例の利用例で

上司「不具合の発生数を集計してください」

grep tag | grep "fix/" | wc -l

と出ているがreleaseのprefixにreleaseとか入れちゃうとちょっと紛らわしくなるので 何も入れずにgit flow hotfix startの時にfix/を入れてみようと思う。

余談だけどタグはcpみたいな扱いしかできずfix/のprefixつけ忘れたものの付け替えはセルフサービスになるのね。

$ git tag fix/gatsu gatsu
$ git tag -d gatsu

Jenkins + git + ant

📅 2013/05/17

Jenkins git

FacebookSDKをlibrary projectとして使っていて そのプロジェクトをJenkinsでビルドしようとしてドはまりしたのでメモ。

最初はsubmoduleとしてビルドしようと思ったがディレクトリ構造いじることになるので却下。 最終的にfacebook-android-sdkはシェルのほうでgit cloneすることになった。

Jenkinsで既存のフォルダ構造を維持したまま指定したサブディレクトリへチェックアウトするには Local subdirectory for repo (optional)のオプションを指定してやればよさそう。

ついでにシェルでgit cloneするfacebook-android-sdkはこんな感じで同じくサブディレクトリへ出力。

$ git clone https://github.com/facebook/facebook-android-sdk.git library/facebook-android-sdk

上記の手順を行った結果のディレクトリ構造は以下のとおり。

.
├── xxxxx_xxxxx
│   ├── AndroidManifest.xml
│   ├── assets
│   ├── bin
│   ├── build.xml
│   ├── default.properties
│   ├── libs
│   ├── proguard-project.txt
│   ├── project.properties
│   └── src
│ 
└── library
    └── facebook-android-sdk
        ├── CONTRIBUTING.mdown
        ├── facebook
        ├── lib
        └── libs

project.propertiesはローカル環境のままなのでrmしてやってproject.propertiesを更新する。

$ android update project -p ./xxxxx_xxxxx -l ../library/facebook-android-sdk/facebook

Android Studio触ってみる

📅 2013/05/16

Android Android Studio

標準でgitとgithub入ってるみたい。

VCSからインポートでプロジェクト作るとうまくいくんだけど New Projectからいくとこの状態で止まってしまう。

中身はIntelliJそのものなんで安定したらこっちで開発進めて行きたい。

git flow はじめました(メモ)

📅 2013/05/15

git git flow

新機能開発開始

$ git flow feature start new_function

新機能開発終了

$ git flow feature finish new_function
$ git push origin develop

新機能開発やっぱやめ

$ git branch
* develop
  feature/new_function
  master
$ git branch -d feature/new_function

新機能をリモートへpush

$ git push origin develop

Jenkins + git plugin

📅 2013/05/14

Jenkins git

git pluginをJenkinsさんの言われるがままにインストールするとNullPointerExceptionと500エラー。 ダウングレードすれば動くらしいので以下のURLから1.1.26を落としてきて [プラグイン管理] -> [高度な設定]からgit.hpiをアップロードする。

http://updates.jenkins-ci.org/download/plugins/git/

リストには表示されないのでJenkinsを再起動後[インストール済み]を確認すると表示されるので チェックを入れて再度再起動する。

git@なリポジトリを入力して赤文字のエラーが出るがコンソールでgit clone成功していれば問題ないです。