2013/06/30

2013/06/29

java db ij script

Windows:

d:
cd D:\Java\jdk1.7.0_11\db\bin
ij < E:\workspace\automic\sql\initData.sql
pause

2013/06/28

sed 上書き 正規表現

sed

基本的には行単位の処理ね。

-i 上書き
-e pattern
-f pattern file



$ sed -e "s/oldtext/newtext/g"        #文字列の変換
$ sed -e "s/text//"                   #文字列の削除
$ sed -e "s/^text//"                  #行頭にtextがあった場合削除
$ sed -e "s/text\$//"                 #行末にtextがあった場合削除
$ sed -e "s/abc/abcxyz/g"             #abcの後に文字列を追加
$ sed -e "s/^/text/"                  #行頭に文字列を追加
$ sed -e "s/\$text/"                  #行末に文字列を追加
$ sed -e "s/.*/abc/"                  #.*は全ての文字列を表す
$ sed -e 's/<tab>/<space>/g'          #タブをスペースに変換
$ sed -e 's/<space><space>*/<space>/g' #複数のスペースを1つのスペースに変換
$ sed -e 's/[<space><tab>][<space><tab>]*/<space>/g'# ホワイトスペースを1つのスペースに変換$ sed -e 's/^[<space><tab>]*//'       #行頭のホワイトスペースを削除
$ sed -e 's/[<space><tab>]*$//'       #行末のホワイトスペースを削除
$ sed -e "/text/d"                    #textを含んだ行を削除
$ sed -e '/^$/d'                      #空白行を削除
$ sed -e "5,20s/oldtext/newtext/g"    #5行目から20行目を変換
$ sed -e '1d'                         #1行目を削除
$ sed -n '1p'                         #1行目を表示

rsync オプション

相違部分だけを転送する
rsync [オプション] コピー元 コピー先
-a アーカイブ、パーミッションなどを保持する、copy -p
-v
-e シェルを指定する
-r
-u update、追加された物だけコピーする <> --existing
-z 圧縮
--delete
--exclude <> include
--exclude-from <> include from
--stats

2013/06/27

memcached

#memcachedの特徴
・シンプルなプロトコル(バイナリプロトコル)
 よくわからない。
・libeventによるイベントハンドリング
 an event notification library.??
 http://libevent.org/
・内蔵のオンメモリストレージ
・memcached同士での通信は行わない分散方式

#起動オプション
-p 利用するTCPのポート。デフォルトは11211
-m 最大のメモリーサイズ。デフォルトは64MB
-vv very verboseモードで起動してデバックメッセージやエラーをコンソールへ出力
-d memcachedをデーモンとしてバックグラウンドで起動

#memcachedを利用するためのクライアントライブラリー
クライアントライブラリーよりmemcachedの分散を実現する
キーごとに異なるサーバへ保存することでmemcachedの分散は実現される
分散方法:
・剰余分散:
 Cache::Memcached:キーの整数のハッシュ値(CRC)を求め,
 その数値をサーバの台数で割った余りでサーバを決定する。
 memcachedサーバの追加や削除を行ったときのキャッシュの組み替えのコストが非常に大きい
・Consistent Hashing:http://www.hyuki.com/yukiwiki/wiki.cgi?ConsistentHashing
 memcachedのサーバ(ノード)のハッシュ値を求め,0から232までの円(continuum)の中に配置する。
 そして格納するデータのキーも同じようにハッシュ値を求め,円の上にマッピングする。
 データはマッピングされた地点から時計回りで最初に見つかるサーバに保存される


#メモリー管理策:
・memcachedはデフォルトでSlab Allocatorというメカニズムを使ってメモリの確保・管理を行う
Slab Allocatorの基本は確保したメモリをあらかじめ決められたクラスサイズに応じた固定長の固まりに分けて,
フラグメンテーション問題を完全に克服する
・memcachedは受けとったデータのサイズを参照し,データサイズにもっとも適したslabを選ぶ
memcachedはslab内の使用可能なchunkのフリーリストを保持しているので,
このリストを基にchunkを選び,そこにキャッシュする
・固定長なメモリ確保のアプローチにより,確保したメモリを有効活用できない。
The most efficient way to reduce the waste is to
 use a list of size classes that closely matches (if that's at all possible) common sizes of objects
 that the clients of this particular installation of memcached are likely to store.
=>ある程度の見通しが必要
・Growth Factorを使ったチューニング
memcached -f 2 -vv
slab class   1: chunk size    128 perslab  8192
slab class   2: chunk size    256 perslab  4096
slab class   3: chunk size    512 perslab  2048
slab class   4: chunk size   1024 perslab  1024
slab class   5: chunk size   2048 perslab   512
slab class   6: chunk size   4096 perslab   256
slab class   7: chunk size   8192 perslab   128
slab class   8: chunk size  16384 perslab    64
slab class   9: chunk size  32768 perslab    32
slab class  10: chunk size  65536 perslab    16
slab class  11: chunk size 131072 perslab     8
slab class  12: chunk size 262144 perslab     4
slab class  13: chunk size 524288 perslab     2
浪費が大きいので、f = 1.25に設定する
slab class   1: chunk size     88 perslab 11915
slab class   2: chunk size    112 perslab  9362
slab class   3: chunk size    144 perslab  7281
slab class   4: chunk size    184 perslab  5698
slab class   5: chunk size    232 perslab  4519
slab class   6: chunk size    296 perslab  3542
slab class   7: chunk size    376 perslab  2788
slab class   8: chunk size    472 perslab  2221
slab class   9: chunk size    592 perslab  1771
slab class  10: chunk size    744 perslab  1409

・memcachedの生みの親であるBradが書いたmemcached-toolというPerlスクリプトを使うと,slabたちの使用状況を簡単に把握することが可能


・memcachedは内部的にレコードがexpireしたかの監視を行わない。
替わりにgetする際にレコードのtimestampを見ることで,そのレコードがexpireしたかをチェックする。
このテクニックをlazy(なまけた)expirationと呼ぶ。
したがって,memcachedはexpireの監視にCPUタイムを消費しない
Least Recently Used(LRU)という仕組みを使う

・外部エンジン対応

・運用
200台規模のmemcachedのサーバを1つのpoolとして扱う。
1サーバあたり3GBの容量で,全体として600GB近いサイズの巨大なメモリデータベースになる


・プログラミング
get:
function get_foo (int userid) {
    result = memcached_fetch("userrow:" + userid);
    if (!result) {
        result = db_select("SELECT * FROM users WHERE userid = ?", userid);
        ●●memcached_add("userrow:" + userid, result);
    }
    return result;
}
set:
function update_foo(int userid, string dbUpdateString) {
    result = db_execute(dbUpdateString);
    if (result) {
        data = createUserDataFromDBString(dbUpdateString);
        ●●memcached_set("userrow:" + userid, data);
    }
}


What's memcached's maximum key expiration time?
If I don't provide an expiration time and the cache gets full, what happens?

ー>If you don't provide expiration and cache gets full then the oldest key-values are expired first.

mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’: Unknown system variable ‘GTID_MODE’ (1193)

mysqldump: Couldn't execute 'SELECT @@GTID_MODE': Unknown system variable 'GTID_MODE' (1193)
# This error is in part due to the introduction of Global Transaction Identifiers (GTIDs) in MySQL 5.6. GTIDs make it simple to # track and compare replication across a master-slave topology.
# mysqldump tries to query this system variable, which doesn’t exist in earlier versions, and then fails. The solution is to add # –set-gtid-purged=OFF in the mysqldump command. It should look something like
mysqldump -h dbHost -u dbuser dbName --set-gtid-purged=OFF

2013/06/26

SVN Could not execute PROPPATCH

  • 原因:TortoiseSVNの1.6.1のバグの模様
  • 対策:以下のいずれか
    • ログの最後に半角スペースをつける
    • ログをつけない

2013/06/25

linux 複数 一括 検索置換

#一括検索
find ./path/to/file -type f -print | xargs grep 'hoge'

#一括置換
find ./path/to/file -type f | xargs sed -i "s/hoge/hage/g"

mysql dump restore 高速化

*DB、テーブルサイズを確認する

*dumpでオプションを付ける
-show variables like '%max_allowed_packet%';
-show variables like '%net_buffer_length%';
-mysqldump --max_allowed_packet=? --net_buffer_length=? --opt --no-autocommit --skip-comments 

MySQL 5.1以降、--optが表すオプションは全てデフォルトで有効化されています。これは、--optがデフォルトで有効なためです。 

--quote-names, -Q
`’文字でデータベース、テーブル、そしてカラム名をクオートします。ANSI_QUOTESSQLモードが有効化されている場合、名前は‘"’キャラクタでクオートされます。

*ダンプしながら圧縮する
-mysqldump database table1 table2 | gzip >...sql.gz
gunzip < outputfile.sql.gz | mysql < mysql options>
As for speeding up gzip, you could try pigz, which uses multiple processors/cores.

*作業ディレクトリをNFSを使わず、ioDriveを使う
-df -h

*リストアの高速化設定
-general_log = 0
-sql_log_bin = 0
-innodb_doublewrite = 0
-autocommit = 0
-unique_checks = 0
-foreign_key_checks = 0

すでにあった。
These aren't really comments even though they look that way. They are conditional-execution tokens.
Take this line:
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */

*テーブルを分けて移行する
-特定なテーブルだけ:mysqldump database table1 table2
-特定なテーブル除外:mysqldump database --ignore-table=database.table1 --ignore-table=database.table2


#!/bin/bash
echo "SET unique_checks=0;
SET foreign_key_checks=0;" > backup.sql
mysqldump -u myuser --password=mypassword mydatabase >> backup.sql
echo "COMMIT;" >> backup.sql

mysqldump --skip-comments commentを出力しない。はやくなる?

mysql --max_allowed_packet=1G
★最大1Gである。
★設定ファイルを修正する必要がない。 




==>★
echo 'SET sql_log_bin=0;' > **.sql"

mysqldump -u ** --password=** --socket=*.sock --max_allowed_packet=1G --net_buffer_length=16384 --no-autocommit ** >> **.sql"

tail -2  ${REMOTE_BACK_UP_DIR}$3.sql
=>ファイルの最後を確認する、dump completed....

★リストアする

設定ファイルでdouble-write=0を設定する
mysql -u **  --password=** --max_allowed_packet=1G  **  < **.sql



★サイズの変化
DB物理ファイルサイズー>DUMPファイル(*.sql) 3.8倍大きくなる
DUMPファイル(*.sql)ー>圧縮してgzファイル(*.sql.gz) 
  gzip -c a.txt > a.gz
  239G->19G 十分の一ぐらいね。。 

総合的に考えると、gzを使う場合、物理ファイルの30%ぐらいになるね。

gunzip -c mydb.sql.gz | mysql -u root -p mydb
gzip -c mydb.sql | ssh mysql_server 'cat > *.sql.gz'

2013/06/24

mysql database size データベースのサイズを確認する

#all DB
select table_schema, sum(data_length+index_length) /1024 /1024/1024 as GB from information_schema.tables  group by table_schema order by sum(data_length+index_length) desc;


#some DB
select table_schema, sum(data_length+index_length) /1024 /1024 as MB from information_schema.tables where table_schema = 'databaseName';


#table
use databaseName;
select 
table_name, engine, table_rows as tbl_rows, avg_row_length as rlen, 
floor((data_length+index_length)/1024/1024) as allMB,  #総容量
floor((data_length)/1024/1024) as dMB,  #データ容量
floor((index_length)/1024/1024) as iMB   #インデックス容量
from information_schema.tables 
where table_schema=database() 
order by (data_length+index_length) desc;

2013/06/22

hibernate.hbm2ddl.auto

create-drop・・・テーブルがcreateされるのでレコードのデータは全部消える。
update・・・データは消さずに更新(alterする感じ)。追加カラムにはnullが入る。
none・・・エンティティの変更をテーブルに反映しない。

2013/06/21

JPA Persistence 属性 優先順位

属性の方はpersistence.xmlより優先である!
下記は説明:

public static EntityManagerFactory createEntityManagerFactory(java.lang.String persistenceUnitName,
                                                             java.util.Map properties)Create and return an EntityManagerFactory for the named persistence unit using the given properties.
                                                            
Parameters:
persistenceUnitName - the name of the persistence unit
properties - Additional properties to use when creating the factory. The values of these properties override any values that may have been configured elsewhere.

mysql PRIVILEGES 権限設定 効がない

1.GRANT ALL PRIVILEGES ON ● TO 大範囲 WITH GRANT OPTION;
2.GRANT ALL PRIVILEGES ON ● TO 小範囲 WITH GRANT OPTION;

1と2があり、1の影響で、
2の修正は効かなくなる。。
酷かった。。
FLUSH PRIVILEGES;
も忘れないて。。

罠いろいろ

2013/06/20

phython ruby メリット

何のために作ったのか?
何のメリットがある?
=>簡単で、他のソフト(ライブラリー)を使えになる(呼び出し)こと?
それは次のIT世代のあり方でもある。
=>読みやすい、書きやすい、自然言語に近い

ruby:
・インタプリタ
Rubyはインタプリタ言語ですので プログラムを実行するためにコンパイルする必要ない

・ユーザのメモリ管理が不要
Rubyはメモリ管理を自動的に行う。 どこからもアクセスされなくなったオブジェクトはインタプリタに組み込みのガーベージコレクタによって回収される
・Mix-in
多重継承は複雑さの源であるという見地から、 意図的に多重継承を持たなく、
モジュールを使ってクラス階層を横断して実装を共有し、この機能を"Mix-in"と呼ぶ

・OSへの直接アクセス
Rubyは(UNIXの)ほとんどのシステムコールの呼び出し機能を持つ、 Rubyだけでシステムプログラミングも可能。

libbonobo

Bonobo is a library that provides the necessary framework for GNOME applications to deal with compound documents。
あのフリーソフト組織GNUのUI用libraryの一つ

Polkitパッケージ

権限情報を定義し操作するためのツールキットです。 非特権 (unprivileged) プロセス から特権 (privileged) プロセスへのアクセスを行う際に利用されます。

tuned - A dynamic adaptive system tuning daemon

Description:The tuned package contains a daemon that tunes system settings dynamically.
It does so by monitoring the usage of several system components periodically.
Based on that information components will then be put into lower or higher
power saving modes to adapt to the current usage. Currently only ethernet
network and ATA harddisk devices are implemented.

Website:
https://fedorahosted.org/tuned/
License:GPLv2+
Vendor:Scientific Linux CERN, http://cern.ch/linux

tomcat 配置 デプロイ deploy

・webappの下で
・5からは変わった。
=>$CATALINA_HOME\conf\[engine name]\[host name]ディレクトリ配下にコンテキスト名.xml

税 時効

5年だね。。。いろいろ5年である。
覚えましょう。

個人事業主 教習代の会計処理

事業を営む者又はその使用人
が当該業務の遂行に直接必要な技能又は知識の習得又は研修等を受けるために要する費用の額は、
当該習得又は研修等のために通常必要とされるものに限り、必要経費に算入する
関連性が。。

個人事業主 ポイントの会計処理

明確な規定はないようなので、
「値引」と考えるのか、「収入」と考えるのか
 「自分で判断するしかない」という結論になる。

  店の方から、全額の領収書をいただければ大変嬉しいね。
 そんな店は少ない。。
 問合せしよう。

2013/06/19

sudo vi 色付け

sudo vi ではなく
sudo vim ...を使う、
環境変数の設定あたりね。

sudoでリダイレクト

sudoでリダイレクトをしたいとき
teeの前にsudoも追加する
sudo 。。 | sudo tee 。。.log

tomcat - CATALINA_BASE and CATALINA_HOME variables

catalina.shでpwdで設定したね。
ーーー
# Only set CATALINA_HOME if not already set
[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
# Copy CATALINA_BASE from CATALINA_HOME if not already set
[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
ーーー

使い分け:
ーーーー
#   CATALINA_HOME   May point at your Catalina "build" directory.
#
#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
#                   of a Catalina installation.  If not present, resolves to
#                   the same directory that CATALINA_HOME points to.

こんなの感じ
  ・  CATALINA_HOME
         -  /some/where/apache-tomcat-7.0.11/
         ※ apache-tomcat-7.0.11.tar.gz を展開したもの。

  ・  CATALINA_BASE (ホントに最低限の構成例)
         -  /some/where/my-instance/conf/server.xml
         -  /some/where/my-instance/lib/
         -  /some/where/my-instance/logs/
         -  /some/where/my-instance/temp/
         -  /some/where/my-instance/webapps/my-app.war
         -  /some/where/my-instance/work/

2013/06/18

apacheとtomcatの連携

★apache側の設定:
httpd.conf
-------------
Listen 80
ServerName 名前
Include conf.d/*.conf==>別の設定ファイルを使う、httpdから相対パス
#連携用のモジュール
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule jk_module modules/mod_jk.so
#location アクセス制限、ここが注意!
AllowとDenyの優先順位で、最終の判断で決める
Order deny,allow=>すべて許可
Order allow,deny=>すべて拒否
<Location /path/ >
    Order Deny,Allow
    Deny from all
    Allow from IPs
</Location>
#ここだ。。。。。mappingの設定
<IfModule mod_jk.c>
  JkWorkersFile conf.d/worker.properties
  ここも注意!「/パス」と「/パス/*」は違う物。。。
  JkMount /パス  tomcatN
  JkMount /パス/*  tomcatN
  JkLogFile "|/usr/sbin/rotatelogs  /var/log/httpd/jk_log.%Y-%m-%d 86400 540"
</IfModule>
worker.list=tomcatN
worker.tomcatN.port=
worker.tomcatN.host=
worker.tomcatN.type=ajp13
-------------

★tomcat側の設定
server.xml
-----------
<Connector port="8009"
               protocol="AJP/1.3" ここ、本来はHTTP/1.1だったが、AJPに修正する
               redirectPort="8443"
               useBodyEncodingForURI="true" />
-----------

2013/06/17

eclipseを高速化にする 落ちる対応

eclipse.iniを編集する:

--launcher.XXMaxPermSize Xmxが未設定の場合、それを使う
?M
-Xms?m  初期値
-Xmx?g 最大値 - Xmx ・・・ ヒープ全体(New+Old)の最大値

とりあえず、大幅にUPする。
やりすぎると、起動できなくなる。
それはOSのHeapSizeの制約である。
その場合、下げて調整しましょう。。

コマンドライン上からelcipse.exeにパスが通った状態で
elcipse -clean

「eclipsec -console」とした後、「osgi>」プロンプトに「ss」と入力すると、Eclipse上で動いているプラグインの稼動状況の一覧を見ることができ


落ちる時の対応:


案1.「ログ確認」&「ネット調査」
※ログ保存場所
▼/ワークスペースフォルダ./.metadata/.log

案2.クリーンオプションで起動
・「eclipse.exe」と同じフォルダにある「eclipse.exe -clean.cmd」クリック

案3.「.metadata」削除
・ワークスペースにある「.metadata」フォルダを削除後、起動
・これで「eclipse」は100%立ち上がるようになる(少なくとも自分の場合は)
※「.metadata」削除は最後の手段。設定やり直しになるので極力避けたほうが良い
※「.metadata」リネームも危険。極力避けたほうが良い

EclipseのworkSpaceのCopy

難しいと思ったが、
意外に簡単である。

workSpaceのfolderをコピーし、そのに切り替え、暗くなったprojectを削除して
OK!

linuxのシステムログ

/var/log/messeges :
----------------
Apr 20 02:49:38 localhost kernel: Kernel logging (proc) stopped.
Apr 20 02:49:38 localhost kernel: Kernel log daemon terminating.
Apr 20 02:49:39 localhost exiting on signal 15
Apr 20 02:52:11 localhost syslogd 1.4.1: restart.
Apr 20 02:52:11 localhost kernel: klogd 1.4.1, log source = /proc/kmsg started.
Apr 20 02:52:11 localhost kernel: Linux version 2.6.18-164.el5 (mockbuild@builder16.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Thu Sep 3 03:33:56 EDT 2009

mountのトラブル

マウントするところ、下記のエラー:
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified

解決:
rpcbindを先に起動する
nfsを再起動する
rpcbindを先に起動しないと、怒られる
ーー
NFS デーモンを終了中:                                      [失敗]
NFS mountd を終了中:                                       [失敗]
NFS quotas を終了中:                                       [失敗]
NFS サービスを起動中:                                      [  OK  ]
NFS クォータを起動中: サービスを登録できません: RPC: 受け取れません; errno = 接続を拒否されました
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
                                                           [失敗]
NFS mountd を起動中:                                       [失敗]
NFS デーモンを起動中: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
                                                           [失敗]
ーー

更に、
rpcbind,nfsのServiceを自動起動にする
chkconfig --listで確認
また、
マウントを自動にするには
/etc/fstabに記入

例:
192.168.0.7:/home/project     /project      nfs    defaults        0 0

mount -aで確認

更に、下記のエラー:
※NFS クォータを起動中: サービスを登録できません: RPC: 認証エラー; why = クライアントの信任が弱すぎます
=>
tcpwrapperを設定しているのが原因。
/etc/hosts.allowに
ALL : 127.0.0.1
を追記して解決。