トランザクション分離レベル
ググッた結果をペタリ。
トランザクション分離レベルについて極力分かりやすく解説してみた[SQL] - 明日になったら本気出せる
概要
「パフォーマンスを上げるためにある程度の読み込み不都合を妥協するか、パフォーマンスを落としてもいいから不都合を発生しないようにするか」 という設定のレベルのこと
読み込みの不都合
ダーティリード
別のトランザクションでコミットされてないデータが読み取れる現象。
トランザクションAでレコードを①から②にUPDATE(未コミット)
トランザクションBでレコードをSELECTする
トランザクションAをロールバックする
トランザクションBで取得したデータは②となっている。一番低いレベルでないと発生しない。
これを許容するシステムをまだ見たことがない・・・ファジーリード(非再現リード,ノンリピータブルリード)
別のトランザクションで更新後データを読むことにより、一貫性がなくなる現象。
トランザクションAでレコードをSELECTする。①となっている。
トランザクションBでレコードを①から②にUPDATEし、COMMITする。
トランザクションAで同じレコードを再度SELECTする。②となっている。
最初RDBMSを触った時これの何がおかしいの?とか思ってた。そういうもんじゃんとか納得してたんだけどよく考えると隔離性としてはおかしいんだよね。ファントムリード
別のトランザクションで挿入されたデータが見えることにより、一貫性がなくなる現象。
トランザクションAでレコードをSELECTする。該当レコードがない。
トランザクションBでレコードをINSERTし、COMMITする。
トランザクションAでレコードをSELECTする。2でINSERTとしたレコードが取得できる。
ファジーリードとよく似ているがINSERTとUPDATEという点が違う。また、以下もファントムリードとなる。
トランザクションAでレコードをCOUNTする。X件取得できた。
トランザクションBでレコードをINSERTし、COMMITする。
トランザクションAでレコードをCOUNTする。X+1件取得できた。トランザクション分離レベルと読み込みの不都合の関係
ダーティリード ファジーリード ファントムリード READ UNCOMMITTED 発生する 発生する 発生する READ COMMITTED 発生しない 発生する 発生する REPEATABLE READ 発生しない 発生しない 発生する SERIALIZABLE 発生しない 発生しない 発生しない
- ダーティリード
ダーティーリードとは、トランザクション処理において、あるトランザクションが更新されている最中に、他のトランザクションからデータを読み出すことができてしまう現象のことである。
トランザクション処理においては、本来ならば更新されるデータは更新が完了しなくてはデータを見ることができない。これはトランザクション処理における機能の条件である「ACID特性」のうち「C」の文字で表されている「一貫性」(Consistency)と矛盾する。
ダーティーリードを禁止することは比較的容易に実現できるが、多くの場合、禁止を実行するとオーバーヘッドを生じさせてしまうことになり、アプリケーションの実行速度を低下させてしまう。同様に、システムの平行性を低下させてしまうことも多い。
オプション用語メモ
- ヨーロピアン・オプション (2014/4/7追記)
- 対象期間の期末でのみ、権利行使可能なオプションのこと。
- アメリカン・オプション (2014/4/7追記)
- 対象期間のいつでも、権利行使可能なオプションのこと。
- エキゾチック・オプション (2014/4/7追記)
- 以下の様な特殊なオプションのこと。
- ノックアウト・オプション
- 期間中、原資産価格が指定値にヒットした場合に権利が消滅
- ノックイン・オプション
- 期間中、原資産価格が指定値にヒットした場合に権利が発生
- ルックバック・オプション
- 期間中、権利行使者に最も有利なレートで権利行使可能
- エイジアン・オプション
- 期間中の原資産価格の平均値と、権利行使価格を比較して損益を決定
- ノックアウト・オプション
- 以下の様な特殊なオプションのこと。
Javaメモ
デザインパターン
Template Method パターン
Strategy パターン
構文
- static 初期化子 : static {}
- インスタンス初期化子 : {}
クラスにはstatic初期化子(staticイニシャライザ),インスタンス初期化子(インスタンスイニシャライザ),コンストラクタが定義できます.それらはインスタンス生成時に行いたい処理を記述することができますが,実行するタイミングが違うため注意が必要です.それらの実行のタイミングは次の通りです.
コード 実行のタイミング static初期化子 クラスのロード時 インスタンス初期化子 インスタンス生成前 コンストラクタ インスタンス生成後
- ダイヤモンド・オペレータ (2014/4/7追記)
- Java7で追加。
ジェネリックな変数にnewでインスタンスを生成して代入するというケースでの冗長表記を簡素化出来る機能です。
// Java6までの書き方 Listlist = new ArrayList (); // Java7でのダイアモンド・オペレータ List list = new ArrayList<>();
フレームワーク
その他メモ
- ソースは削除したが、クラスパスにクラスファイルが残っているような場合、アプリが起動しないことがあるので、ソース削除したらクラスパスも綺麗にすること
Tomcatメモ
Tomcat関連知識を整理して追記していく。
Tomcat の前にサーブレット
起動
catalina.sh run
な感じ。
インスタンス指定方法
run の前に、環境変数CATALINA_BASE
にインスタンスのディレクトリを代入しておく。
CATALINA_BASEを使ってTomcatの管理を楽にする | 雲の上であれこれつぶやく、エイジアパーク
起動時に何をしているか
catalina.sh run
とやると、org.apache.catalina.startup.Bootstrap "$@" start
が実行される。
ソースを読む。
http://tomcat.apache.org/tomcat-7.0-doc/architecture/startup/serverStartup.pdf
コードリーディング Tomcatのソースを読んでみよう 起動編 BlueWell2
@IT:Java TIPS -- クラスローダの仕組みを知る
web.xmlの役割
今から5分で,Tomcatの使い方を身に付けよう (Servlet・JSPアプリが動く仕組みを理解) - 主に言語とシステム開発に関して
TomcatとかJavaの世界に片足を突っ込んでみて気になったところ - kanonjiの日記
今から5分で,Tomcatの使い方を身に付けよう (Servlet・JSPアプリが動く仕組みを理解) - 主に言語とシステム開発に関して
シェルスクリプトメモ
なにこれ?
- ググったり調べたりしたコマンドや構文の一覧。
- 現時点で知っているコマンドや構文は出てこない。どこかで追記できればいいが・・・。
- シェルは基本的に bash 。
目的
- 自分が把握できているコマンドや構文を整理する。
command - コマンド
cut
sh cut -f 1 -d "=" $HOGE_CONF
- HOGE_CONF の各行を "=" でsplitして、各行の第1要素を取得。インデックスは1から。)
- d(delimiter) オプション - デリミタ(区切り)を指定
- f オプション - 何番目の要素を抽出するかを指定
- c オプション - 指定した文字数の文字を取り出す
- 文字数の指定には「開始位置-終了位置」のように範囲で指定できる
eval
$ val="1234"; test="val"; x=\$${test}; echo $y
- ->
1234
- ->
- bash は一度に変数を複数展開できない。一気に展開したいときに使う。この例では $y が一気に展開されている。
paste
pdsh
psdh -R ssh -f $PARA_NUM -l $DST_USER -w $SERVER "コマンド"
- f オプション - 並行稼動リモートコマンド数
- l オプション - リモートサーバでコマンドを実行するユーザを指定
- w オプション - ターゲットサーバ
rsh
との差異 -> パラレルが可能。rsh
はシングルのみ。
tr
tr [A-Z] [a-z] $FILE
- FILE の大文字を小文字に変換
echo "test,,,test" | tr -s ',' ' '
- ->
test test
- s(squeeze-repeats) オプションは、
同じ文字の繰り返しを 1 文字に置き換える。この操作は変換や削除のあとに行われる。 SET1 にある文字の繰り返をし、その文字 1 文字に置き換える。
- ->
sort (2014/3/3追記)
cat hoge | sort -gk1 -gk2 -gk3
- hoge の 第1カラム -> 第1カラム -> 第1カラム の順に、各カラムを数字として行をソートする
- k オプション(-k POS1 [POS2]) - POS1 以降 POS2 までをほキーとしてソートする
- g オプション - 数字としてソートする
grep (2014/3/3追記)
tree (2014/3/4追記)
- ディレクトリの階層構造を標準出力する
expr (2014/3/4追記)
expr "abcdefghogeijkl" : ".*\(h\)oge.*"
- ->
h
.*\(h\)oge.*
がabcdefghogeijkl
に文字列として一致するか正規表現検索し、マッチすれば()内を標準出力
- ->
sha1sum (2014/3/5追記)
syntax - 構文
バッククオートによる、
`コマンド`
は古い書式だし、可読性が低い。$(コマンド)
を使おう
ドット
.
で外部ファイル読込- 例)
. $HOGE_CONF
- 例)
比較(test)
- 文字列
- -z : 文字列の長さが 0 なら true (2014/3/4追記)
- ファイル属性確認
- -r : 読み取り可能ファイルなら真(2014/3/31追記)
- 文字列
ifの謎構文 (2014/3/5追記)
変数の文字列処理 (2014/3/14追記)
- shとbashでの変数内の文字列置換など - ろば電子が詰まっている
- ${変数名#パターン} → 前方一致でのマッチ部分削除(最短マッチ)
- ${変数名##パターン} → 前方一致でのマッチ部分削除(最長マッチ)
- ${変数名%パターン} → 後方一致でのマッチ部分削除(最短マッチ)
- ${変数名%%パターン} → 後方一致でのマッチ部分削除(最長マッチ)
- ${変数名/置換前文字列/置換後文字列} → 文字列置換(最初にマッチしたもののみ)
- ${変数名//置換前文字列/置換後文字列} → 文字列置換(マッチしたものすべて)
- shとbashでの変数内の文字列置換など - ろば電子が詰まっている
オプション解析 (2014/3/14追記)
番外編 - 特殊パーミッション
- suid(Set User ID)
- 実行ファイルに設定される属性
- 実行ファイルの所有者の権限で動作する
- 例) /usr/bin/passwd
- sgid(Set Group ID)
- 実行ファイル、もしくはディレクトリに設定される属性
- 実行ファイルにSGIDが設定された場合
- SUIDと同じく、実行ファイルは所有グループの権限で動作
- ディレクトリにSGIDが設定された場合
- そのディレクトリ以下で作成したファイルおよびディレクトリの所有グループは、自動的に親ディレクトリと同じになる
- 例) /usr/bin/wall
- sticy(Sticky bit)
- ディレクトリに設定される属性
- 実際のパーミッションに関係なく、ファイルもしくはディレクトリの所有者と、rootユーザーのみが名前の変更と削除を行える
- 例) /tmp
UNIX処方箋:SUIDとは - ITmedia エンタープライズ
Linuxの特殊なパーミッション – No:227 – Linuxで自宅サーバ構築(新森からの雑記)
『【ヒカ☆ラボ】ウェブ技術でiOS/Androidアプリ開発!!~HTML5ハイブリッドアプリ開発[実践]入門~』聞いてきた
イベント詳細
- 【ヒカ☆ラボ】ウェブ技術でiOS/Androidアプリ開発!!~HTML5ハイブリッドアプリ開発[実践]入門~
- 2014/02/13(木)19:30~21:30 @ ヒカリエ17F(レバレジーズ株式会社)
- 派遣会社さん主催のイベントでした。こういうのよくあるんだってね(無知)
- こういうイベントで仕事探すというか登録する人が、そこそこいるってことなんかなー?
講師
- アシアル久保田さん
- HTML5 でハイブリッドアプリ作ってる
今日の流れ
- HTMLハイブリッドアプリとはなんぞや
- 開発方法
- ノウハウ
- 「執筆本からかいつまんで」
HTML5 ハイブリッドアプリとはなんぞや
- ネイティブ
- HTML5
- ハイブリッド
どちらを使うか
- ネイティブ
- 高速、ハイパフォ
- HTML5
- 環境依存の低さ、最新性
ハイブリッドの利点
- 「いいとこどり」らしいよ
- ストアから配信できるよ
- クロスプラットフォームによる生産性向上狙えるよ
- ガワは同じ
- HTLで書くか、JAVA, Objective-Cで書くか
- ウェブ技術を持ち込める
- ウェブのエコシステムを持ち込める
- 遺産がいっぱい。ライブラリいっぱい。開発者いっぱい。→エコシステム
しくみ
- WebView
- アプリ内に WebView を設定。HTNL5からWebViewを参照
開発方法
フレームワークを利用
フレームワークとは
- 低レイヤーのOSコードを隠蔽
- HTML5 を包み込んで、OS とアプリを連携
- 各ハードウェアのデータ取るには OS 経由しなきゃダメなんだよね
Cordova API
- 大抵のものはあるよ
- プラグインできるから好きに拡張もできる
フレームワーク利用のメリット
- HTML5 だけでできちゃう
- OSコールが簡単
フレームワークを使わない選択もあるよ
開発環境の構築
Monaca について
- セットアップ結構めんどいっしょ?
殺伐としたスレに救世主が!! .__ ヽ|・∀・|ノ |__| | |
- ブラウザ上で開発が完結する
- iOS アプリでも実機確認無料だよ
よくある問題
- 重い
- ハードウェアスペックの問題
- HTML5 自体が重い
- アプリっぽくならない
- 前者にスポット当てます
クリックイベントを使わない
- × clickイベント
- × a要素
- ○ touchイベント
- a要素, clickイベントは遅延(300ms)
- ダブルタップの判定するため
- tappable や faskclick を使う
CSS アニメーションを使う
- アニメーションにCSS Transitionを使う
- Javascriptよりも早い
- setInterval でやってるのを置き換える
jQuery じゃなくて Zepto.js を使う
- モバイルに最適化されてないから
- Zepto.js はモバイルに最適化されている。無駄なコードがない。
- jQuery 互換
動作確認は遅いほうに合わせる
- WebvView は iOS のほうが圧倒的に早い
- 動確ベースは遅い方にする。あとから遅いものをチューニングして早くするのは難しい。
なるべくリフローを起こさない
- DOM ツリーのレイアウト再計算
- リフローごとに画面全体のレイアウト再計算が走る
何がリフローを引き起こすか
- 内部テキストの変更、input 要素への入力
- DOM ツリーの操作
- width, height, margin, padding, border....などなど
リフローのコストを抑える
- width, height fix
- フローベースのレイアウトを避ける
- position: absolute, fixed を積極的に使う
- 要素位置や大きさを変えるには transform を使う
- リフロー起きない
リフローを伴うアニメーションをさせない
- CSS アニメーションでもリフローはダメ
DOMDocumentFragments を使う
- for 文で回して DOM ツリーに逐次要素埋めてく・・はまずい
- DOM フラグメントに要素詰め込んでから、一度だけDOMツリーにはめ込む