読者です 読者をやめる 読者になる 読者になる

確率

ラプラスの定義

  • 実験の基本的結果がNとおり。さらにAの起こり方がnとおり。かつN通りの結果が全て同等に確からしいとするとき、P(A) = n / N
    • 実験
    • 試行
    • 可能な結果(根元事象)
    • 標本空間
      • すべての根元事象ωの集合
      • Ω = {ω1, ω2, ω3, ... , ωN}
    • 事象
      • Ωの部分集合(A⊂Ω)
      • A = {2, 4, 6}(偶数) など

コルモゴロフの公理的定義

  • すべての基本的結果の数え上げが困難である(例: 身長)ことや、同等に確からしいことの正当性確認が難しいため、ラプラスの定義は完全ではない。
  • 上記を解決すべく、公理から構築される幾何学のように、確率を定義する方法。

トランザクション分離レベル

ググッた結果をペタリ。

トランザクション分離レベルについて極力分かりやすく解説してみた[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)と矛盾する。

    ダーティーリードを禁止することは比較的容易に実現できるが、多くの場合、禁止を実行するとオーバーヘッドを生じさせてしまうことになり、アプリケーションの実行速度を低下させてしまう。同様に、システムの平行性を低下させてしまうことも多い。

    ダーティーリードとは (dirty read): - IT用語辞典バイナリ

オプション用語メモ

  • ヨーロピアン・オプション (2014/4/7追記)
    • 対象期間の期末でのみ、権利行使可能なオプションのこと。
  • アメリカン・オプション (2014/4/7追記)
    • 対象期間のいつでも、権利行使可能なオプションのこと。
  • エキゾチック・オプション (2014/4/7追記)
    • 以下の様な特殊なオプションのこと。
      • ノックアウト・オプション
        • 期間中、原資産価格が指定値にヒットした場合に権利が消滅
      • ノックイン・オプション
        • 期間中、原資産価格が指定値にヒットした場合に権利が発生
      • ルックバック・オプション
        • 期間中、権利行使者に最も有利なレートで権利行使可能
      • エイジアン・オプション
        • 期間中の原資産価格の平均値と、権利行使価格を比較して損益を決定

Javaメモ

デザインパターン

構文

クラスにはstatic初期化子(staticイニシャライザ),インスタンス初期化子(インスタンスイニシャライザ),コンストラクタが定義できます.それらはインスタンス生成時に行いたい処理を記述することができますが,実行するタイミングが違うため注意が必要です.それらの実行のタイミングは次の通りです.

コード 実行のタイミング
static初期化子 クラスのロード時
インスタンス初期化子 インスタンス生成前
コンストラクタ インスタンス生成後

static初期化子,インスタンス初期化子,コンストラクタの実行順序 - 発熱するマイナ魂

  • ダイヤモンド・オペレータ (2014/4/7追記)
    • Java7で追加。

ジェネリックな変数にnewでインスタンスを生成して代入するというケースでの冗長表記を簡素化出来る機能です。

// Java6までの書き方
List list = new ArrayList();
// Java7でのダイアモンド・オペレータ
List list = new ArrayList<>();

Java7 ジェネリクスのダイアモンド・オペレータ - プログラマーの脳みそ

フレームワーク

その他メモ

  • ソースは削除したが、クラスパスにクラスファイルが残っているような場合、アプリが起動しないことがあるので、ソース削除したらクラスパスも綺麗にすること

Tomcatメモ

Tomcat関連知識を整理して追記していく。

Tomcat の前にサーブレット

起動

catalina.sh run な感じ。

インスタンス指定方法

run の前に、環境変数CATALINA_BASEインスタンスのディレクトリを代入しておく。 CATALINA_BASEを使ってTomcatの管理を楽にする | 雲の上であれこれつぶやく、エイジアパーク

  • CATALINA_HOME
    • Tomcatバイナリのディレクトリ。(エンジン部分)
  • CATALINA_BASE

起動時に何をしているか

catalina.sh runとやると、org.apache.catalina.startup.Bootstrap "$@" startが実行される。

ソースを読む。

http://tomcat.apache.org/tomcat-7.0-doc/architecture/startup/serverStartup.pdf

コードリーディング Tomcatのソースを読んでみよう 起動編 BlueWell2

  1. クラスローダーの初期化とセット
  2. server.xmlの読み込みと主要コンポーネントの組み立て
  3. サーバーの初期化
  4. サーバーの開始

@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

    • paste -s -d " " $HOGE_CONF
      • HOGE_CONF の各行を1行にマージ。区切り文字を" "にする。デフォルトはタブ。
      • HOGE_CONF_2, 3... をさらに引数に加えれば、複数ファイルからの入力となる。
      • s(serial) オプションは、各入力ファイルごとに行をマージする。デフォルトは、同一行ごとにマージする。
  • 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追記)

    • cat hoge | grep -Cnum fuga
      • hoge から fuga を含む行の前後num行を取得する
    • echo "1"$'\n'"2"$'\n'"3"$'\n'"4"$'\n'"5"$'\n'"6" | grep -C1 "4"
      • -> 3 4 5
    • grep でも知らんオプションが有る!
  • tree (2014/3/4追記)

    • ディレクトリの階層構造を標準出力する
  • expr (2014/3/4追記)

    • expr "abcdefghogeijkl" : ".*\(h\)oge.*"
      • -> h
      • .*\(h\)oge.*abcdefghogeijkl に文字列として一致するか正規表現検索し、マッチすれば()内を標準出力
  • sha1sum (2014/3/5追記)

    • sha1sum -b ${FILENAME} > ${FILENAME}.sha1sum
      • ${FILENAME} をバイナリモードで読み込み、${FILENAME}.sha1sum に sha1 チェックサムを出力

syntax - 構文

  • バッククオートによる、`コマンド`は古い書式だし、可読性が低い。

    • $(コマンド)を使おう
  • ドット. で外部ファイル読込

    • 例) . $HOGE_CONF
  • 比較(test)

    • 文字列
      • -z : 文字列の長さが 0 なら true (2014/3/4追記)
    • ファイル属性確認
      • -r : 読み取り可能ファイルなら真(2014/3/31追記)
  • ifの謎構文 (2014/3/5追記)

    • if sha1sum -b ${FILENAME} > ${FILENAME}.sha1sum ; then.....みたいな書き方
      • sha1チェックサム生成が正常終了したかどうかで分岐させようとしている気がするが、こんな構文知らんぞ・・・
  • 変数の文字列処理 (2014/3/14追記)

    • 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ハイブリッドアプリ開発[実践]入門~』聞いてきた

イベント詳細

講師

  • アシアル久保田さん
    • HTML5 でハイブリッドアプリ作ってる

今日の流れ

  1. HTMLハイブリッドアプリとはなんぞや
  2. 開発方法
  3. ノウハウ
    • 「執筆本からかいつまんで」

HTML5 ハイブリッドアプリとはなんぞや

  • ネイティブ
  • HTML5
  • ハイブリッド

どちらを使うか

  • ネイティブ
    • 高速、ハイパフォ
  • HTML5
    • 環境依存の低さ、最新性

ハイブリッドの利点

  • 「いいとこどり」らしいよ
  • ストアから配信できるよ
  • クロスプラットフォームによる生産性向上狙えるよ
  • ガワは同じ
  • ウェブ技術を持ち込める
  • ウェブのエコシステムを持ち込める
    • 遺産がいっぱい。ライブラリいっぱい。開発者いっぱい。→エコシステム

しくみ

  • WebView
    • アプリ内に WebView を設定。HTNL5からWebViewを参照

開発方法

フレームワークを利用

  • Apache Cordova
    • PhoneGap(Adobe カスタマイズ)
  • Triaina
  • Trigger.io

フレームワークとは

  • 低レイヤーのOSコードを隠蔽
  • HTML5 を包み込んで、OS とアプリを連携
    • 各ハードウェアのデータ取るには OS 経由しなきゃダメなんだよね

Cordova API

  • 大抵のものはあるよ
  • プラグインできるから好きに拡張もできる

フレームワーク利用のメリット

  • HTML5 だけでできちゃう
  • OSコールが簡単

フレームワークを使わない選択もあるよ

  • 自前で WebView 作り込み
  • 既存の非 HTML5 アプリの一部だけ HTML5 ・・・とか

開発環境の構築

Monaca について

  • セットアップ結構めんどいっしょ?
殺伐としたスレに救世主が!!
   .__
  ヽ|・∀・|ノ
  |__|
    | |
  • ブラウザ上で開発が完結する
  • iOS アプリでも実機確認無料だよ

よくある問題

  • 重い
    • ハードウェアスペックの問題
    • HTML5 自体が重い
  • アプリっぽくならない

 

  • 前者にスポット当てます

クリックイベントを使わない

  • × clickイベント
  • × a要素
  • ○ touchイベント
  • a要素, clickイベントは遅延(300ms)
    • ダブルタップの判定するため
  • tappable や faskclick を使う

CSS アニメーションを使う

  • アニメーションにCSS Transitionを使う
  • Javascriptよりも早い
    • setInterval でやってるのを置き換える

jQuery じゃなくて Zepto.js を使う

  • モバイルに最適化されてないから
  • Zepto.js はモバイルに最適化されている。無駄なコードがない。

動作確認は遅いほうに合わせる

  • WebvView は iOS のほうが圧倒的に早い
  • 動確ベースは遅い方にする。あとから遅いものをチューニングして早くするのは難しい。

なるべくリフローを起こさない

  • DOM ツリーのレイアウト再計算
  • リフローごとに画面全体のレイアウト再計算が走る

何がリフローを引き起こすか

  • 内部テキストの変更、input 要素への入力
  • DOM ツリーの操作
  • width, height, margin, padding, border....などなど

リフローのコストを抑える

  • width, height fix
  • フローベースのレイアウトを避ける
    • position: absolute, fixed を積極的に使う
  • 要素位置や大きさを変えるには transform を使う
    • リフロー起きない

リフローを伴うアニメーションをさせない

  • CSS アニメーションでもリフローはダメ

DOMDocumentFragments を使う

  • for 文で回して DOM ツリーに逐次要素埋めてく・・はまずい
  • DOM フラグメントに要素詰め込んでから、一度だけDOMツリーにはめ込む

自分のまとめ

  • Monaca いいね Monaca
    • ブラウザ上の IDE で開発して、ビルドして、そのままマーケットにアップロードできる。すごすぎる。
    • スマホにデバッガをインストールして、実機確認が出来る体。
      • すごい。
    • その場でアカウント作って、モック作った。
  • まだ HTML5 で書いてないので、もろもろのチューニングノウハウはまだ、生きなそうかな。