String StringBuffer StringBuilder の使い分け

String StringBuffer StringBuilder の使い分け
Stringは、固定長文字列
StringBufferとStringBuilderは
可変長文字列
Stringでは
+演算子で簡単に文字列連結できるけど
そのたびに新しいインスタンスがメモリ上に作成される
これに対して
可変長文字列の
StringBuffer
StringBuilder
で、append()で文字列を結合した場合は
インスタンスが新しく作成されないため
こちれの方がメモリ効率はよくなる
Stringクラスは、使い方がわかりやすいけど
データ量が多かったり、
連結する回数が多かったりすると
実行時間、消費メモリ効率では
Stringクラスでは不利になる
StringBufferクラスと
StringBuilderクラスを比べると
StringBuilderクラスのほうが実行にかかる時間が少ない

ローカルPCの変更の自動的反映

ローカルPCの変更の自動的反映
rsync はファイルの変更差分だけデータ同期できる
差分だけ転送するから
ネットワーク経由のバックアップも可能
lsyncd は、Linuxカーネルの
inotifyというファイル変更のイベント通知機能を使い
ファイル更新を検出する
lsyncd から rsync を起動すれば
バックアップ用のミラーリングサーバー構築ができる
まず、
バックアップ用サーバーの設定
同期用ディレクトリの作成
sudo mkdir /data/
/dataを同期先ディレクトリへ設定するには
rsyncの設定ファイル
/erc/rsyncd.conf

source=””の設定をフルパスで指定
source=”/home/snowpool/data/”
というようにする
次に、
rsyncがデフォルトデーモン、つまり常駐プロセスとして起動するように
設定
これは、
/etc/default/rsync
の中を
RSYNC_ENABLE=trueにする
そして、サービス起動
sudo /etc/init.d/rsync start
ここまでできたら、次はクライアントの設定をする
バックアップ元ディレクトリの作成
sudo mkdir ~/data
そしてlsyncdをインストール
sudo apt-get install lsyncd
lsyncdのサンプルファイルを元に設定ファイルの作成
sudo mkdir /erc/lsyncd
sudo cp /usr/share/doc/lsyncd/examples/lsyncd.1ua /erc/lsyncd/lsyncd.conf.1ua
コピーできたら設定ファイルの編集
hosts allow =
へアクセス可能にするpc のIPアドレスを記述
例えば
hosts allow = localhost 192.168.10.248
また、exclude =
へ同期対象にしない拡張子を記述
もし、subversionとかgitを非対象にするなら
exclude = .git .svn
ここまで設定ファイルできたら
クライアントマシンの
lsyncdを起動
sudo /etc/init.d/lsyncd start
ここまでできたら
適当に自動的反映できるディレクトリへ
ファイル作成
echo abcd > ~/data/abcd
これで、サーバー側にもデータ同期されているなら成功

ArrayListは、じぇねりくす

ArrayListは、じぇねりくす
これは色々な要素を格納できる
ArrayListにといように
<>で囲んでクラスを指定することで
Stringクラスだけが入るように限定できる
このジェネリクスを使うことで
想定外のデータが入ることを避けることができる
また、<>でクラス指定していないと
値を取り出すときに
キャストという型変換が必要になるので
面倒になる

から送られてきた高速メモ帳

makeコマンドで自動コンパイル 

makeコマンドで自動コンパイル 
普通、ソースコードは複数ファイルに
なっているので
自動的に全ソースファイルをコンパイルし
最終的な実行ファイルを生成する
makeコマンドを利用する
コンパイルから最終的な実行ファイル生成までの工程を 
ビルド
という
makeコマンドは
Makefile
に記述された内容に従ってビルドする
このMakefileは、
configureスクリプトで生成する
このconfigureでは
カーネル
CPUの種類
リンクするライブラリーの有無など
をチェックし
最適なビルドができるように設定した
Makefileを作る
最終的なインストールは
make install
で実行する
この make install を実行すると
生成された実行ファイル
設定ファイルなどの関連ファイルを
Makefileで指定したディレクトリへコピーし
アクセス権限なども設定してくれる
ビルドは、一般ユーザーでもできるけど
インストールするにはroot権限が必要
また
makeコマンドは
ソースファイルとバイナリーの
タイムスタンブを比較して
ソースファイルが新しいときだけコンパイルする事もできる
これにより
ソースにパッチをあてて
更新したファイルのみコンパイルして
最低限の処理だけでビルドし直すという
便利な使い方ができる

ソースコードからのコンパイル、ビルド

ソースコードからのコンパイル、ビルド
Linuxで使われるコンパイラはGCC
コンパイルしたバイナリーが動作するには
外部ライブラリとリンクする必要がある
Linuxで動くソフトウェアのほとんどが
実行時にリンクする動的リンク
動的リンクで参照される共有ライブラリーは
/lib/以下にある
.so拡張子のファイルになる
動的リンクの場合は
ソースコードをコンパイルするときに
共有ライブラリー情報が必要になる
この情報を提供するのがヘッダーファイルになる
これがないと
コンパイルエラーとなり
バイナリーオブジェクトが生成できない
ヘッダーファイルは
-devel
という名前のついたパッケージを導入すれば用意できる
主なライブラリーはパッケージを使って準備し
最終的に使いたいソフトウェアのソースコードだけコンパイルするのが
簡単で一般的な手法になる

から送られてきた高速メモ帳

仮想マシン用ドライバのインストール

仮想マシン用ドライバのインストール
仮想マシンは、通常の物理マシンとは異なり
ソフトウェア的に実行しているので
動作速度に制約がある
この制約を取り払い高速化したり
使い勝手を高めるためのドライバが
VMware Tools
Guest Additions
これらは、使用中のカーネルのバージョンに大きく依存する
また、モジュールを
カーネルのバージョンごとに用意する必要がある
/lib/modules/
の下に
インストールされているカーネルのバージョンごとにディレクトリが作成され
その中に配置されている
確認するには
rpm -q kernel
ls /lib/modules/
の結果から
インストールされているカーネルと
モジュールの確認ができる
モジュールとカーネルは
依存関係にあるため
カーネルをバージョンアップしたら
モジュールま再度導入する
VirtualBox の場合
Guest Additionsをインストールするけど
これは
インストール時に使っているカーネルに合わせ
モジュールをビルドしなおすため
開発ツール一式をインストールしておく
yum groupinstall”Development tools”
これで一度で開発ツールがインストールできる
インストーラーは
カーネルのバージョンに対応したファイルを要求する
ヘッダーファイルは
kernel-develパッケージに含まれるけど
yum install でやろうとしても
最新版のみ対応なため
カーネルバージョンを指定してインストールしないとダメ
カーネルバージョンを調べるには
uname -r
で調べることができる
この結果をコピペでもいいけど
バッククォート、“で囲めば
実行結果の内容をコマンドラインで使えるので
yum install kernel-devel-`uname -r`
とすれば、簡単にインストールできるし
コピペしなくてもよくなる
ここまでできたら
あとは、Guest Additionsをインストールするだけ

外部リポジトリの設定

外部リポジトリの設定
外部リポジトリの設定に必要な
.repoファイルは
リポジトリごとのrpmパッケージとして配布されている
設定用のrpmパッケージは
rpmコマンドで導入
やり方は、rpmパッケージをURLで指定する
RepoForgeの設定用rpmパッケージを
64bit CentOS 6 へ導入するなら
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
となる
EPELの設定用rpmパッケージの場合
PGP鍵という
復号のための公開キーがインストールされていないと
警告がでてしまうため、先に
rpm –import コマンドで
PGP鍵をインストールしておく
rpm –import http://ftp.riken.jp/linux/fedora/epel/RPM-GPG-KEY-EPEL-6
そして、EPELの設定用rpmパッケージのインストール
rpm -ivh http://ftp.riken.jp/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
となる
Remiの場合、Linuxサーバーの典型セットであるLAMPに特化しているため
その他パッケージはEPELリポジトリを使っているため
あらかじめEPELの設定をしておかないとダメ
これができたら、Remiの設定用rpmパッケージをインストール
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
で導入できる
導入後
RepoForge
EPEL
は標準で有効になっているので
デフォルトでは無効にしておき
必要に応じて
yum コマンドで有効にするようにする
有効、無効の設定は
.repoファイルの
enabledで設定する
epel.repo
rpmforge.repo
のenabledの設定を
1 から 0 に変更しておく
リポジトリの切り替えは
yumコマンドの
–enablerepo
–disablerepo
で行う
外部リポジトリを有効にして
phpを入れるとバージョンが違う
yum install –enablerepo=rpmforge,epel,remi php
これを実行すると
–enablerepo=rpmforge,epel,remi
により
remi
epel
rpmforge
の外部リポジトリが有効にした状態での
php がインストールされる

CentOS用外部リポジトリ

CentOS用外部リポジトリ
CentOSで使える外部リポジトリは3つ
RepoForge
以前から非公式なrpmパッケージを提供しているリポジトリ
EPEL
Fedora Projectで開発されたパッケージを
Red Hat Enterprise Linux
で使用できるようにしたリポジトリ
Remi
LAMP環境を構築するためのリポジトリ
となる
yum では
/etc/yum.repos.d/

.repo拡張子の設定ファイルを配置することで自動的に読み込まれる 

パッケージの依存関係の確認

パッケージの依存関係の確認
インストールしたパッケージの依存関係は2つあり
rpm -qR パッケージ名

指定したパッケージ名が依存しているファイルなどを表示
rpm -q –whatrequires パッケージ名

指定したパッケージ名に依存されているRPMパッケージを表示する
となる
例えば
yum install bind-chroot

DNSサーバーのBINDをインストールしたばあい
bind-chrootの依存関係を見るなら
rpm -qR bind-chroot
とする
この結果から
bindパッケージに依存していること
/bin/sh
grep
が必要なことがわかる
次に、
bind-chroot
bind
のパッケージが他から依存しているかを
–whatrequires オプションで確認
rpm -q –whatrequires bind-chroot
rpm -q –whatrequires bind
この結果から
bindが bind-chrootから依存されているのがわかる
依存するパッケージがある場合
削除するには
両方のパッケージを同時削除するか
依存されていない順に削除していく
bindは bind-chrootに必要なので
rpm -e bind
としても削除できないけど
rpm -e bind-chroot
rpm -e bind
と順番に削除することはできる
後、たまにあるけど
パッケージ更新したらバグがあるから
古いバージョンに戻したいときの対処
こんなときには
–oldpackage オプションをつけて
ダウングレードインストールする
書式にすると
rpm -Uvh –oldpackage パッケージ名
例えば
最新版のbind関連パッケージを
インストールメディアに入っていたrpmパッケージに
ダウングレードインストールするなら
rpm -qa | grep ^bind
で調べて
rpm -Uvh –oldpackage bind関連のパッケージ名

ダウングレードインストールして
再度
rpm -qa | grep ^bind
で調べると、バージョンがダウングレードされたのが確認できる

Androidの音声認識のオプション

Androidの音声認識のオプション
EXTRA_LANGUAGE_MODEL
言語モデル
LANGUAGE_MODEL_FREE_FORM
会話中の認識向け
LANGUAGE_MODEL_WEB_SEARCH
Web検索向け
EXTRA_LANGUAGE(locale)
言語の設定で、
localeが
Locale.USなら英語
Locale.JAPANなら日本語
Locale.FRANCEならフランス語
になる
EXTRA_PROMPT
プロンプト文字列
EXTRA_MAX_RESULTS
候補の数