[Android]画面遷移する

超基本的だけどメモ。

まずは、レイアウトとそれ用のクラスを作る。
内容はとりあえずなんで「Hello World!」

新しく作った画面のクラスが「next」。
コードはこれだけでOKでした。

Intent intent = new Intent(this, next.class);
startActivity(intent);

これでなぜか動かなく、調べたところ、「AndroidManifest.xml」に
新しく作ったクラスファイルが追加されてませんでした。

[Windows]デバイスマネージャをコマンドで起動

別ユーザとしてコマンドプロンプトから起動

runas /user:(ユーザ名) "mmc.exe devmgmt.msc"

[Android]Seekbarを使ってみる

最近Androidの勉強もし始めたのでメモ。

Seekbarを使ってみたのでコードをメモ。
ただ設置するだけじゃ簡単なので、画像の透過度を変えてみる。

public class test extends Activity {

    private ImageView img = null;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        // 画像を取得
        img = (ImageView) findViewById(R.id.imageView1);

        SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar1);
        seekBar.setMax(255);
        seekBar.setProgress(255);
        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            // トラッキング開始時に呼び出されます
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                Log.v("onStartTrackingTouch()",
                    String.valueOf(seekBar.getProgress()));
                	img.setAlpha(seekBar.getProgress());
            }
            // トラッキング中に呼び出されます
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
                Log.v("onProgressChanged()",
                    String.valueOf(progress) + ", " + String.valueOf(fromTouch));
                img.setAlpha(progress);
            }
            // トラッキング終了時に呼び出されます
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                Log.v("onStopTrackingTouch()",
                    String.valueOf(seekBar.getProgress()));
                img.setAlpha(seekBar.getProgress());
            }
        });
    }
}

[JavaScript]HTMLコメントの取得

JSでHTMLのコメントを取得できるってしらなかった。。。

ちゃんとコメントもオブジェクトとして扱われているのですね。
目からウロコです。

忘れないようにサンプルコードをメモ。

// すべてのNodeを取得
var d = document.getElementsByTagName("body")[0].childNodes;
// Nodeごとにループ
for (i=0;i<d.length;i++){
  // NodeType=8(Comment Node)の場合
  if(d[i].nodeType == 8){
    // 「.date」でデータを取得
    alert(d[i].data);
  }
}

[Ruby/MySQL]handlersocketライブラリを使ってみる

前回、MySQLのプラグイン「HandlerSocket」のインストールをしたので実際に使ってみる。

前回の最後にRubyのライブラリを入れたので、実際に使ってみるとします。

事前に用意したテーブルは以下のとおり。

CREATE TABLE `user` (
	`user_id` INT(10) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(255) NULL DEFAULT NULL,
	`birthday` DATE NULL DEFAULT NULL,
	`memo` VARCHAR(255) NULL DEFAULT NULL,
	PRIMARY KEY (`user_id`)
)

まずは、Select。

require 'handlersocket'

hs = HandlerSocket.new('localhost', 9999)
hs.open_index(1, 'test', 'user', 'PRIMARY', 'user_id,name,birthday,memo');

# IDが1のものをSelect
p hs.execute_single(1, '=', [1]);
#=>[0, "1", "name", "2011-10-01", "memo"]

# IDが1より大きいのものをlimit=2でSelect
p hs.execute_single(1, '>=', [1], 2);
#=>[0, "1", "name", "2011-10-01", "memo", "2", "name2", "2011-10-28", "memo2"]

hs.close

結果が配列で返ってきます。
複数Selectしたときは、そのまま1つの配列に入って返ってくるので少し使いづらい気も。

一番最初の「0」ってのはリターンコード?っぽい。

続いてmultiなSelect。

require 'handlersocket'

hs = HandlerSocket.new('localhost', 9999)
hs.open_index(1, 'test', 'user', 'PRIMARY', 'user_id,name,birthday,memo');

# クエリ用の配列を用意して、条件を突っ込む
query = []
query << [1, '=', [1], 1, 0]
query << [1, '=', [2], 1, 0]

p hs.execute_multi(query)
#=>[[0, "1", "name", "2011-10-01", "memo"], [0, "2", "name2", "2011-10-28", "memo2"]]

hs.close

こっちのほうがsingleより速いらしい。

続いてInsert

require 'handlersocket'

hs = HandlerSocket.new('localhost', 9999)
hs.open_index(1, 'test', 'user', 'PRIMARY', 'user_id,name,birthday,memo');

p hs.execute_insert(1, [3,"name3","2001-01-01","memo3"])
#=>[0, "0"]

hs.close

Insert時のリターンとしてエラーコードとエラー内容が配列で返ってくる。
試しに一意制約にひっかかるようにしたら、[1, "121"]って返って来ました。

個別に、hs.get_error, hs.get_error_codeでも取得可

UPDATE,DELETEも同じような感じでできる。

注意点としては、トランザクションがないのでAUTO INCREMENTが効かないってところですかね。