TONY0922のブログ

学んだことを適当に記録していくブログです。主にRuby, Java, PHPで仕事してます。更新頻度はそんなに高くないので、ご了承下さい。

実践ハイパフォーマンスMySQL 第2版 を読んだ。

実践ハイパフォーマンスMySQL 第2版

実践ハイパフォーマンスMySQL 第2版

【所管】
MySQLに関する内容が詳しすぎ。
1/3くらいしか読めてないけど、時間を見つけてもっと読みたい。

【読書メモ】

  • MySQLはテーブルごとにトランザクションの有無を設定をすることが可能。
  • ロックはオーバーヘッドを要求するため、トランザクションを不要とするテーブルはMyISAMを選択すると良い。
  • InnoBDトランザクションの分離レベルは「REPEATABLE READ」である。
  • MySQLをUPDATEする際はディスクではなく、メモリーの値を更新する。その後、ディスクにシーケンシャルIQにて更新する。その間のクラッシュした際のデータを保証するために、ログ先行書き込みを行う。
  • トランザクションテーブルと非トランザクションテーブルを両方を一回のトランザクション内で更新すると、ロールバック時に非トランザクションだけ出来ないので注意すること。つまり、複数のエンジンを一つのトランザクションで管理はできない。
  • Nullはカラムに入らないように工夫すること。Nullが必要になるところも他の値で代用できないかを検討する。(パーフォーマンスが上がるため)
  • そのカラムにインデックスの使用を考える場合は、NotNullを検討する事。
  • 整数に「unsigned」をつけると-2^N 〜 2^N の範囲を0 〜 2^2Nの正の範囲として倍にできる。
  • INT(20)は値の有効な範囲を制限するわけではなく、対話ツールが表示目的で確保する文字列を指定する。
  • 浮動小数点型の精度はMySQLのデータ型を選択したり、値を丸めたりする。従って,精度ではなく型を選択すると良い。
  • TIMESTAMPとDATETIMEの違いは比較。TIMESTAMPを選んだほうがストレージ効率が良い。
  • 識別子IDにふさわしい方が何であるか。
    • 整数型…AUTO_INCREMENT使える。何であるか。IDにうってつけ。
    • ENUMSET…ふつーに使わない。
    • 文字列…めっちゃパフォーマンス悪い。
    • IDの型は決めたら、関連する外部キーも必ず一緒にすること。(UNSIGNも含め)

インタフェースデザインの心理学 を読んだ。(その1)

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

【所管】
人間の仕草や癖から画面にオブジェクトをどのように配置したり、
工夫すればよいか等が丁寧に書かれていて、
デザインやUIを勉強する上でかなりの良書である。

かなりこの本を勧める人多いけど、
納得の内容だった。

【読書メモ】

人はパターンで物事を識別する。
物体の配置は空白やグループ化でまとめることによって、内容の理解を促せる。

→ 説明文をあまり置けないスマホ画面ではまとまりで提示すればそれがどういった意味なのかをユーザに直感的に示すことが可能である。
行わせたい単位で機能をグループ化して、表示すると説明を省略できる部分が生まれるかも知れない。

大体の人間は物体を写生させると斜め上から書く人が多い。

スマホで使用するデザインは斜め上くらいからの角度で見る画像が良い。

重要な事柄は画面上部1/3らへんに置く。そして、端には置かない。

スマホデザインではヘッダ部分に画面の説明やできる操作を置くとユーザを誘導できる。

見ただけでその物体ができることの理解を促す = アフォーダンスを意識する。

スマホではボタンを認知できる様に影をつける等。タブレットでは操作しないと表示されないようなものは使わない。(気づかないから)

人は集中しているときに変化を簡単に見逃す。

スマホの画面の一部を変更するときは、なんらかのエフェクトを用意しないと簡単に見逃すため、なるべく、ユーザに合図を送ったほうが良い。

記憶は思い出す度に再構築される。

→ 人の記憶は思い出すごとに再構築されていく。また、その過程で人を誘導することによって、相手の記憶を改ざんすることができてしまう。

情報は少ないほどきちんと処理される。
心的な処理には難しいものと優しいものがある。

→ 情報は段階的に提示したほうがユーザに理解させやすい。一度にたくさんの情報を出すくらいなら、クリックを何回かさせた方が、面倒でもよい。また、ユーザは自分がほしい情報を得ているときは多少の面倒は気にしないものであるらしい。たしかにそうかも知れない。
また、人に負わせる負荷は認知 > 視覚 > 運動なので、一つの画面にあれこれ詰めるよりもクリックを増やした方が良いらしい。

自信がない人ほど自分の考えを主張する。
人は他人から考えを強制されることによって、考えをその強制された方向へ自分の主張を変えることがある。
また、人の信念を変えさせる一番効果的な方法はちょっとした事をやってみるように仕向けてみること。

これは自己啓発セミナー系で自信のない人に「自分はできる人間だー!」と叫ばせることで、だんだんその人が本当に自信をつけていくって話と似ているな。
どっかのブラック企業の研修でも無理やり頑張る自分を演出させて、その通りにだんだん考えを向けさせていく的な。
しかし、人の信念を変えさせる方法は子供や部下の方針を変えさせる手段としてはアリかもしれない。

人は物語を使って情報をうまく処理する。
物語は人が情報を処理するのに適した自然な形式である。
伝える情報がいかに無味乾燥でも、物語をつけると興味深く、記憶しやすいものになる。

これはプレゼンや公演でも使える手段だと思う。
アプリをリリースする際にも説明文で物語を入れるとユーザーも興味を持ってくれるかもしれない。

人は「フロー状態」に入る。
人が集中する状態をフロー状態と呼ぶ。
ゲーム系の設計などではフロー状態にユーザを誘導できれば成功する可能性が上がる

ユーザに明確な目的を持たせて、気が散るものを減らす。
達成可能であるために常にフィードバックを与えて、
それがユーザ自身がコントロールしていると思わせられるような仕組みを作る。

とりあえず、続きはその2で。

iOS Core Data徹底入門 を読んだ。

iOS Core Data徹底入門

iOS Core Data徹底入門

【対象】
中級者

【感想】
もっと早く読んでおけばよかった一冊。

データを永続化させるのにファイルから始まって、SQLite、CoreDataを進んでいって、
CoreDataに関してはUndoとかマイグレーションとか割りと深いところまで、
掘り下げて書いてくれるので、iOSで初めてデータベース使ってみたい人は
参考にしてみても良いかも。

ネットの情報とかで勉強するのもいいけど、
こっち読んだほうが数倍早い。

前半のファイル書き出しとかSQLiteのみで永続化とかの部分がかったるいと
思う人は読み飛ばして、CoreDataから見ても良し。

Effective Objective-C 2.0 を読んだ。

Effective Objective-C 2.0

Effective Objective-C 2.0

【対象】
中級者 ~ 上級者

【感想】
プライベートでiOSアプリ作成してるんだけど、
そこで色々悩んだ事柄が結構載ってて、
解決の糸口として大いに役に立った。
定数の管理方法や命名規則などこれ読んどかないと
後々苦労しそうな事も結構あって、助かった。

あと、わりとこれ読んで、
Objective-C」でメタプログラミングできるじゃん!!
って思ったので、存分に活用してみようと思う。

iPhone/iPad 開発ポケットリファレンス を読んだ。

iPhone/iPad 開発ポケットリファレンス

iPhone/iPad 開発ポケットリファレンス

【対象】
iPhone開発する人ならだれでも

【感想】
iOS関連のリファレンスなら、「iPhoneプログラミングUIKit詳解リファレンス」が有名だけど、
こっちはiOS7まで対応しているから、最新のiOSが何ができるかを知りたいかは
パーッと眺めてみると良いかも。(自分はそうした。)

電子書籍にしてタブレットで参照するのが使いやすいかもしれない。

レベルアップObjective-C を読んだ。

レベルアップ Objective-C (Software Design plus)

レベルアップ Objective-C (Software Design plus)

【対象】
初心者 ~ 中級者向け対象

【感想】
Xcodeの基本的な使い方やデバッグのやり方が
丁寧に記載されていて、知らない箇所も多くあったので、非常に有用だった。
メモリ管理やマルチスレッドに関してもわかりやすく書かれているので、
機会を作ってもう一度、見直す予定。

Titanium MobileのAlloyでControllerで作成したViewにtssの定義を適応させる。

Titanium SDK:3.2.0
Alloy:1.3.0

Controllerで作成したViewはそのままだと
tssで定義したclassを当てはめることができないので、
Dynamic Styleを使うと良い。

index.tss

// Button全てに以下の定義が適用。
"Button" : {
	backgroundColor : "black"
}
".buttonEnabled" : {
	opacity : 1.0,
	touchEnabled : true
}
".buttonSize" : {
	width : "50dp",
	height : "50dp" 
}

index.js

var button = Ti.UI.createButton();
var style = $.createStyle({
	apiName : "Button" // tssの「Button」を指定。
	classes : ["buttonEnabled", "buttonSize"] // 複数のClassを指定。
}); 

button.applyProperties(style); // tssのクラスが適用される。

【参考URL】
http://docs.appcelerator.com/titanium/3.0/#!/guide/Dynamic_Styles