2013年7月27日土曜日

トーストの使用方法(Toastクラス)

Toast(トースト)の使用方法です。
デバッグ用に、ちょいと挿入して確認するにも便利です。

     Toast.makeText(this, "hello", Toast.LENGTH_LONG).show();


短く表示は、Toast.LENGTH_SHORT)です。


例えばボタンをクリックしたのを確認なら以下。
    public void clicktest( View view) {
    Toast.makeText(this, "hello", Toast.LENGTH_SHORT).show();
    }

importで以下も必要。
 import android.widget.Toast;

よって、importの記載も省略なら以下です。

     android.widget.Toast.makeText(this, "hello", android.widget.Toast.LENGTH_SHORT).show();


べんりですね。

2013年7月25日木曜日

Windows7からWindowsXPの共有ファイルにアクセスできない場合の対処

Windows7からWindowsXPの共有ファイルにアクセスできない場合の対処方法です。


古いNASやWindows2000, Windows2003Serverも該当する場合があります。
アクセスする側のWindows7のパソコンの設定を変更します。

この問題が解消するケースは、共有ファイルにアクセスしようとしたときに
IDパスワードを聞いてきて、正しく入力したにもかかわらずログインできず
「ログオン失敗:ユーザー名を認識できないか、またはパスワードが間違っています。」
と表示される場合です。



○コマンドラインより gpedit.msc 実行
 「ローカルグループポリシエディター」を起動して

左ペインより以下の通り開いていきます。
「ローカルコンピューターポリシー」
  「コンピュータの構成」
     「Windowsの設定」
       「セキュリティの設定」
         「ローカルポリシー」
            「セキュリティオプション」

右ペインの真ん中辺りにある項目
「ネットワークセキュリティ:LAN Manager認証レベル」のプロパティを開く
 デフォルトは「未定義」に設定されているが
 例えば「LMとNTLM応答を送信する」を選ぶ。






古いWindowsXP側のNTLMv2に不具合があるのか?LM & NTLMであれば問題ない。
一般家庭などでは実際は気にしなくていいと判断できる場合が多いと思いますが、
セキュリティを気にする場合は要注意の変更項目です。
古いPCが混じっていると、うーんって事がありますが、仕方ないですねえ。
メーカーとしては新しいOSで直しています。当時はこれで問題無く後から出たWindows7との対応で。という事ですものね。
tipsとしてメモしていくしかないですねぇ。

2013年7月19日金曜日

DB2のメモリ設定方法

DB2のメモリ設定方法です。

update dbm cfg using instance_memory 1024 immediate;


ページ数を入れる。
ページ数1024に1ページ4kbをかけると使用するメモリ容量になる。

メモリ容量を1GBとして 1024 * 1024 * 1024 = 1073741824バイト = 1GB
1ページ当たりのバイト数は 4 * 1024 = 4096
計算は 1073741824 / 4096 = 262144

よって、262144と書けば、メモリ1GBです。

ただ、起動時から全部使われるわけではありませんでした。

1ページ4kbも設定によって違うのかな。要確認です。

2013年7月17日水曜日

Windows7起動直後にネットワークが有効になっていない問題

Windows7起動のログオン直後にネットワークが有効になっていないために
ネットワーク関連のプログラムがエラーを出してしまう場合の対応方法。

gpedit.msc起動
左ペイン
 「ローカルコンピュータポリシー」
  「コンピュータの構成」
   「管理用テンプレート」
    「システム」
     「ログオン」
右ペイン
 「コンピュータの起動およびログオンで常にネットワークを待つ」
  →「未構成」から「有効」に変更する。

自動ログオンの場合に発生する。
ネットワークデバイスの認識とログオン後の処理のタイミングによって表面化する。
この設定をすると、ネットワークが有効になったのを待ってから自動ログオン処理が走る。
しかし要確認(ネットワークデバイスの認識?それでも対応できない場合があった?)
ところで、これって、アプリケーションの問題だと思います。
言い換えるならアプリケーションで回避、対処していくべき問題。
これをアプリケーションに手を入れなければと思わない時点で末期だとも思いますがケースバイケースですね。
でも技術者としてどうなんだろうと自問が続きます。

2013年7月16日火曜日

Serviceの使い方

呼ばれる側
・public class MainService extends Service {で、Serviceを継承する。
・開始時はonStartCommand()が呼ばれる。
・終了時はonDestroy()が呼ばれる

呼ぶ側
・開始方法
 Intent intent = new Intent(MainActivity.this, MainService.class);
 startService(intent);
 Intentの引数で、自分のインスタンス、呼びたいクラスを書いてstartServiceを呼ぶ。
・終了方法
 Intent intent = new Intent(MainActivity.this, MainService.class);
 stopService(intent);
 同じようにstopServiceを呼ぶ。intentは同じインスタンスでなくてよいらしい。
 (少しなぜだろうと思います)




Activityでのアプリケーションではタスクを落とされちゃうからServiceを使うのです。
タスクは落とされなくていいと思うのですが、なんでこういうしようなのかと
コーディングするといつも思います。
リソースの少ないスマホだからとはいってもベースとなるlinuxが開発された当初のパソコンは
もっともっとリソースが少ないと思うのです。
なんてことをいつも思いつつ、OSには従うのです。はい。

2013年7月15日月曜日

画面を消灯、スリープさせない

○消灯させない
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

○解除する
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


簡単でした。
そのアプリケーションが表示されているときだけ有効です。
裏に隠れているときは制御されませんでした。


ちなみに、android.permission.WAKE_LOCKは必要ありません。
このpermissionは、また違う方法の様です。
裏に隠れていても、制御が効く方法があるような、ver4で推奨されなくなったような。
調査中です。でもそもそもアプリが積極的にコントロールするべきでないかなと
思ったところから、このFLAG_KEEP_SCREEN_ONでokでした。
現在の状態を確認する必要は無く、add,addとか、add無くclearもokの様です。

2013年7月14日日曜日

リングトーンの基本パターン

リングトーン、アラームの基本的な使い方です。


○インスタンスの生成
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
Ringtone tone = RingtoneManager.getRingtone(context.getApplicationContext(), uri);

○リングトーンを動かす
tone.play();

○リングトーンを止める
tone.stop();



プログラム作り途中に、ちょっと間違えると鳴りっぱなしになっちゃってちょっと大変でした。
これもまた簡単ですね。
Ringtoneの名前の通り、電話の着信音ですね。
androidのOS側の設定で、ボリュームが、音楽、着信音、アラームに別れているので、
追ってその関係を確認してまとめます。


2013年7月13日土曜日

バイブレーターの基本パターン

バイブレーターの基本的な使い方です。

○インスタンスの生成
Vibrator vibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);

○バイブレーターを動かす
long pattern[] = {200, 800};
vibrator.vibrate(pattern,0);                  

○バイブレーターを止める
vibrator.cancel();


patternは、止める、動かすのミリ秒です。
疑似音階も作れるかもと思いました。

なっている間、インスタンスは保持して、そのインスタンスにcancelする必要があります。
物理的なバイブレーターはひとつなのでシングルトンでもいい様な気がしますがそうではないです。
それにしても簡単に扱えて便利なものです。

2013年7月12日金曜日

javaの日付、時間、ミリ秒の扱い

例)
Calendar calender = Calendar.getInstance();

    int year = calender.get(Calendar.YEAR);
    int month = calender.get(Calendar.MONTH) + 1; //0始まり
    int day = calender.get(Calendar.DATE);
    int hour = calender.get(Calendar.HOUR_OF_DAY);
    int minute = calender.get(Calendar.MINUTE);
    int second = calender.get(Calendar.SECOND);
    int millisecond = calender.get(Calendar.MILLISECOND);
 
Toast.makeText(this, "["+ Long.valueOf(year)+"]["+ Long.valueOf(month)+"]["+ Long.valueOf(day)+"]["+ Long.valueOf(hour)+"]["+ Long.valueOf(minute)+"]["+ Long.valueOf(second)+"]["+ Long.valueOf(millisecond)+"]", Toast.LENGTH_LONG).show();


ちなみに。メモです。
3600 = 1時間
3600 * 24 = 86400 = 24時間 = 1日
86400 * 365 = 1年 = 31536000
31536000 * 3000 = 3000年 = 94608000000 = 94608000000
94608000000 * 1000 =  94608000000000ミリ秒含む
94608000000000
9223372036854775807 long最大
-9223372036854775808 long最小

らくちんな世の中になったものです(^_^)

2013年7月11日木曜日

Samsung SSD 840 PROベンチマーク


-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]
           Sequential Read :   272.996 MB/s
          Sequential Write :    28.391 MB/s
         Random Read 512KB :   246.046 MB/s
        Random Write 512KB :    51.092 MB/s
    Random Read 4KB (QD=1) :    31.857 MB/s [  7777.6 IOPS]
   Random Write 4KB (QD=1) :     2.161 MB/s [   527.7 IOPS]
   Random Read 4KB (QD=32) :   214.346 MB/s [ 52330.7 IOPS]
  Random Write 4KB (QD=32) :    11.455 MB/s [  2796.6 IOPS]
  Test : 1000 MB [C: 61.8% (146.7/237.4 GB)] (x5) <0Fill>
  Date : 2013/07/09 11:49:02
    OS : Windows Server 2008 R2 Server Standard Edition (full installation) SP1 [6.1 Build 7601] (x64)
SamsungのSSD「840 PRO 256GB」を飼ったのでベンチマークを取ってみました。
PC本体はオンボードでRAIDが載っています。「LSI Embedded MegaRAID」です。
他のサイトで評価されている数値よりかなり低いです。遅いですね。
もう少し期待していたのですが、少しこまったものです。
もしかしてと思いHDDのベンチマークを取ってみたらもっと遅かったです。
SSD自体は速いと言うことですね。
上の測定結果は0Fillですが、他のもおおよそ変わりませんでした。

2013年7月10日水曜日

javaの文字列

型はString

先頭のSは大文字です。

if文などでの比較


String val = ~
if ( val.equals( "~") == true) {


少し分かりづらいです。
val == "~"と書きたいところですが
だめなものはだめですね。
でもせめてコンパイルエラーは出て欲しいところですが
エラーも出ないようです。
うむ。




boolean は先頭、小文字のb。boolでもありません。

もう少し話はそれてC#の予約語はbool。System.Booleanは別名
stringが予約語で、System.Stringが別名
==で比較できます。
ちょっとややこしいです。

2013年7月9日火曜日

リソースの文字列をjavaのコーディングの中で使用する。


例)
getString(R.string.hour)


getString()メソッドを使う。

定義は「String android.content.Context.getString(int resId)」です。

その引数でR.string.~ を指定すればよい。

android開発の入門書を読むとlayoutにstring resourceを使う事は必ずといっていいほど
載っているのに、javaのコーディング中で多言語対応する方法が見つかりませんでした。
見つけてしまえば簡単な方法です。
androidでアプリケーションを作るなら多言語対応は必須にしたいです。
そしてその方法がとても楽です。

2013年7月8日月曜日

String.formatの使い方



この例では%02dで、数字を0埋め2桁の文字列に変換しています。


http://www.ne.jp/asahi/hishidama/home/tech/java/formatter.html
  1. String[] itemList = new String[60];
  2. for ( int num = 0 ; num < 60; num++) {
  3.     itemList[num] = String.format("%02d",num);
  4. }

昔ながらのC言語のライブラリと同じです。
昔とは、10年前ではなく、30年?50年?歴史です。
すごいことです。K&Rです。
読みました。2冊持っていました。3冊かも?
今どこにあるんだろう。歴史、いいですね。

2013年7月7日日曜日

diskpartの使い方

diskpartの使い方です。

コマンドラインよりdiskpart実行

list disk
・「サイズ」で該当のディスクを探す。
・「ディスクの管理」画面の右下ペインの「ディスクx」のx数字と合っている。

select disk 5
・5にディスク番号を入れる。
・もう一度list diskで選択したディスクの先頭に*が付いていることを確認する。

list partition
・選択したディスクのパーティ書であることを確認する。
・「ディスクの管理」画面の右下ペインの「ディスクx」のx数字と合っている。

select partition 1
・もう一度list partitionで選択したディスクの先頭に*が付いていることを確認する。

active
・選択したパーティションをアクティブとしてマークするコマンド


ーー
diskpartの使い方ですが、他のサイトでも多く紹介されていますが
コマンドラインで確認わかりにくく、間違えるとデータが消えてしまうので
確認方法も含めたメモです。

2013年7月6日土曜日

C#のテキストファイルの読み込み、書き込み


 StreamWriter writer = new StreamWriter(@"~_in.txt", false, System.Text.Encoding.GetEncoding("shift_jis"));
 StreamReader reader = new StreamReader(@"~_out.txt", System.Text.Encoding.GetEncoding("shift_jis"));
 while (reader.EndOfStream == false)
 {
     string line = reader.ReadLine();
     string outLine = "";
     for (int num = 0; num < line.Length; )
     {
         outLine = outLine + line.Substring(num, 1);
         num++;
     }
     writer.WriteLine(outLine);
 }
 reader.Close();
 writer.Close();

C#でテキストファイルの読み込みと書き込みの基本パターンです。
いつも使うのでメモメモ。
javaとC#がいつもふと、あれ、と思うことがあります。

ついでに、文字列の一部分を取り出すのはC#の場合Substring()です。
midだったりいろいろありますね。

2013年7月5日金曜日

AlertDialogの使い方

  1. public void onClickSS(View view) {
  2.     String[] itemList = {"0","1","2","3","4","5","6","7","8","9"};
  3.     AlertDialog.Builder dialog = new AlertDialog.Builder(this);
  4.     dialog.setTitle("選択タイトル");
  5.     dialog.setItems(itemList,new DialogInterface.OnClickListener(){
  6.         public void onClick(DialogInterface dialog, int which) {
  7.             Button button = (Button)findViewById(R.id.text_ss);
  8.             button.setText(String.valueOf(which));
  9.         }
  10.     });
  11.     dialog.create();
  12.     dialog.show(); 
  13. }

基本の例です。
リストを文字列の配列で用意する。
AlertDialog.Builderを使う。
setTitleでリストのタイトルの文字列
setItemsで文字列を指定。
それとonClick時のイベントを記載する。
show()で表示

create()は無くてもよい。showでよいらしい。

onClick時の処理
whichに番号が入るのでそれをキーにして処理をする。
例ではボタンの文字列を変えています。

この場合、戻るボタンが有効ですが、無効にするにはsetCancelable(false);をいれればよい。

ダイアログの使い方ひとつずつ、メソッドを一通り読むしかないですね。

2013年7月4日木曜日

設定値の保存

SharedPreferencesクラスを使う。
キーと値の対で読み書きを行う。
値はstring,boolean,longなどの型が必要


・書き込み
  String arg = ~
  String val;

  Editor editor = preferences.edit();
  editor.putString(arg, val);
  editor.commit();

 editで開けて、commitで閉じる。
 文字列なのでputStringを使う。

・読み込み
String arg = ~
  String val = preferences.getString(arg, ""); //デフォルトnull決め

 読み出しはオープン、クローズは必要ない。
 文字列はgetStringで読み込む。
 デフォルトの値を引数に渡す。


ラッパークラスを作って使いやすくしてます。
単純なキーと値の対は使いやすくて便利です。
複数文字列などを扱う場合はちょっとメソッドを作り込んでですね。

2013年7月3日水曜日

SQL Server Agentのjob修正方法

少しマイナーなコマンドかもしれないのでメモします。
例)
EXEC dbo.sp_update_jobstep
 @job_name = N'jobtask',
 @step_id = 1,
 @output_file_name = '',
 @flags = 0;
jobtaskというジョブの1番目のstepのオプション、ログの出力を止める変更です。

このログの出力されたファイルが2GBを超えると、jobが動かなくなるようです。
定期的に消すオプションもないようですし、困ったものです。
マイクロソフトやほかの企業含め、永続的に使っていないんじゃないかと勘ぐります。
マイナーソフトだったり機能だったりはこういう面で不利ですね。
メジャーな物を使っている。という事だけでこういったことは回避できるのかもしれません。
そうはいっても何事も最終的には自身で確認していく必要はあるのですが
その母数の違いはあるかなと思います。
windowsのtask使うのと余り変わらないように思いますし。

2013年7月2日火曜日

RelativeLayoutの指定方法

縦横の組でまとめました。


○基準
 ※Parentが付いている

基準を左上に作る
 android:layout_alignParentLeft="true"
 android:layout_alignParentTop="true"

基準を左下に作る
 android:layout_alignParentBottom="true"
 android:layout_alignParentLeft="true"


○従属

左をそろえて、下に置く
 android:layout_alignLeft="@+id/rootLabel"
 android:layout_below="@+id/rootLabel"

上をそろえて、右に置く
 android:layout_alignTop="@id/rootLabel"
 android:layout_toRightOf="@id/rootLabel"


いろいろなオプションが自由自在にありますが、基本的な構成はこれだけで十分表現できると思います。
レイアウトもRelativeLayoutのみで十分だと思います。


2013年7月1日月曜日

SQL Serverのインデックス再作成

SQL Serverのインデックス再作成ですが、データベースに存在するテーブル名を全て指定する必要はありません。

sp_MSForeachtable "dbcc dbreindex('?')"




便利です。
これを実行する際は、他のクライアントとは排他アクセスになるらしい。
メンテナンス時間を作って作業ですね。
しかし、これをやっても余り速くならないような、ごくごく若干のみ速くなるような。
私が扱っているテーブルでは効果が薄いようです。
クラスターキーを設定しているせいかなとも思います。
テーブルの設計が正しいと言うことでしょうか。
しかし桁の違うデータ量、レコード数を扱っているオンラインシステムはどの様な設計をしているのか
そもそも発想が違うのか。単なるハードウェア増強の力任せで、パフォーマンス本当に上がっているのか。
興味あります。