ラベル 初心者 の投稿を表示しています。 すべての投稿を表示
ラベル 初心者 の投稿を表示しています。 すべての投稿を表示

2016年3月14日月曜日

開発初心者がこれだけは知っておいた方が良いこと④

こんにちは!Sです。

今回はデータベースのロックについて書きたいと思います。

DBで行う主な操作としては
①新規登録 ②更新 ③削除 ④参照
だと思いますが、同じテーブルに対して複数の人が同時に様々な操作を行うとデータの整合性がとれません。

そんなことにならないようにDBにはロックという機能が存在します。

ロックの粒度(行に対してのロックなのか、テーブルに対してのロックなのかなど)やルールは
使っているDBによって多少違うようですが、ここからはわたしが使っているSQL Serverについて書きます♪

◆ロックの種類
ロックには共有ロック、排他ロック、更新ロック、インテントロックなどがありますが、
難しいので詳細の説明は省きます。
初心者の方にまず覚えて頂きたいのは

①データの参照中は共有ロックがかかり、その間他の人が更新などできない
②削除などデータの書き換え中は排他ロックがかかり、他の人が何もできない
ということです。
(詳しく知りたい人はこちらこちらを!)

バッチのスケジュールを組む際にはこれらのことを考慮しないといけないですね。

ちなみに排他ロックをどの粒度でかけるかは、SQL Serverが決めてくれます。
https://technet.microsoft.com/ja-jp/library/ms189286(v=sql.105).aspx

◆安全なおまじない
DBで行う操作の中で更新や削除はとても怖いですよね。。。
出来ればやりたくないですが、避けることはできません。
そんなとき上記のロックを利用して安全に操作を行うことができる魔法の呪文を教えてもらったので紹介します♪

1.まずはこれを書く
begin transaction

2.やりたいことをやる
update文 や delete文など

3.select文で思い通りの結果になっているか確認

4-A.やばい!思った通りの動きじゃない!というときは
ROLLBACK TRANSACTION
→これで元通り。なんの心配もいりません!

4-B.意図通り!成功!というとき
COMMIT TRANSACTION
→これを忘れずに!忘れると反映されません。


...余談ですが、わたしは今朝通勤途中に電車にすべての荷物を忘れてきました。
 (別に寝ぼけていたわけでもないのに。。。)

電車を降りるところからROLLBACKしたいです。。。




2016年2月26日金曜日

開発初心者がこれだけは知っておいた方が良いこと③

こんにちは開発者のSです!

今日はデータ分析について書こうと思います。
せっかくページを作ったらその反響も知りたいですよね♪

まずは分析に用いる指標について

■View数
ページが見られた回数。1人の人が10回見たらView数は10

■訪問数
何回訪問されたか。
1回の訪問で10ページ見られたとしたら、View数は10だけれど訪問数は1

■UU数
ユニークユーザー数。
何人の人が見たか。1人が何ページ見ても、何回訪問してもユニークユーザは1

■CVR
コンバージョンレート。
View数またはユニークユーザーの内、コンバージョン(商品購入や資料請求などの最終成果)に至った割合。
何をコンバージョンとするかはその人次第。

■回遊率
1人のユーザーがサイト内のページを何回閲覧したか

■離脱率/遷移率
ページに流入した人の内、どれだけ離脱したかが離脱率。
反対に離脱せず、他のページに遷移した割合が遷移率。

■直帰率
サイトに訪れたユーザーの内、最初の1ページだけ見てサイトから離れた人の割合。
一般的に40%前後なら良いとされている。



サイカタやGA(Google Analytics)を使えば、更に各デバイスのシェア率や流入、ユーザーの特徴なども見ることができます。
自分が作ったページについて、ぜひその反響を見てみてください!!

2016年2月16日火曜日

開発初心者がこれだけは知っておいた方が良いこと②

こんにちは!Sです。
前回に引き続き「開発初心者がこれだけは知っておいた方が良いこと」について書いていきます。

今回のテーマは「おかしいところの見つけ方について」です。

ネットで調べて見よう見まねで書いてみたけれど上手く動かない。。。という時に
早くどこがおかしいのかを見つける方法について書いていきます。


<エラー画面が表示されている場合>

①ログを見る
 新規作成の場合は自分でログをはくように設定しないといけませんが、
 既存のファイルの修正であればおそらく既にエラーが起きた際にエラーログを出力するように
 設定されているはずです。
 なのでまずはソースからログの出力先を調べて、ログを見に行きましょう!


<エラー画面は表示されていないが、やりたいことが出来ていない場合>

①デバッグする
 ここがおかしいのかも。という怪しい場所付近にブレークポイントを設けて、
 デバッグして下さい。きっとヒントになるはずです。
 ▼最初にマスターしたいVisual Studioのデバッグ機能 -基本編-
 http://news.mynavi.jp/articles/2008/08/18/debug/

②Response.Writeを使う
複数の処理を連続して行っており、それらのどれが原因かを調べるのに便利です。
例えば...
aに対して処理B、C、Dを連続して行うのであれば一旦それらを分けてみましょう!

Response.Write(a);
Response.Write(b);  //bはaにBの処理をしたもの
Response.Write(c);  //cはbにCの処理をしたもの
Response.Write(d);  //dはcにDの処理をしたもの

これでブラウザにa,b,c,dが表示されるので、処理のどの段階でおかしなことになっているのかが一目瞭然です。


2015年10月7日水曜日

Java初心者がはまったこと2(ラッパークラス)

こんにちは。Java初心者のWebエンジニアKです。
PHPのノリでJavaを書いていたらはまったこと第二弾として、今回はラッパークラスについて書きたいと思います。

■intとIntegerではまる

Javaのソースコードを見ていると、例えば数値を扱う変数を作るとき、以下の2通りの宣言があることに気付きました。
int num = 100;
Integer num2 = 100;
両者の違いを正しく理解せずに、その日の気分で使い分けていたら見事にはまりました。

■intとIntegerの違い

intはプリミティブ型のひとつで、値(intの場合は特に数値)のみを扱うための型です。 初期値は0です。
一方Integerはラッパークラスと呼ばれる参照型のひとつで、intを値だけでなく「振る舞い」も合わせて扱えるように定義した型となります。
「振る舞い」は平たく言うとクラスメソッド(toStringやvalueOf)のことですね。

また、Integer型は参照型のため値にnullを取ることができ、初期値も0ではなくnullになります。
ここが個人的なはまりポイントでした。
両者の違いをまとめてみると、
  • Integerは値にnullもとれる
  • Integerの初期値はnull、intは0
  • IntegerにはtoStringやvalueOfなどのメソッドが実装されている
javaのラッパークラスはint:Integer以外にもboolean:Booleanなど8種類あります。
両者の違いを理解して、要件にあった使い分けをすることが重要ですね。
参考サイト

Java初心者がはまったこと(文字列比較)

はじめまして。WebエンジニアのKと申します。
これまでサーバサイドはほぼPHPで実装してきましたが、最近ではJavaへの挑戦も始めました。
慣れたPHPの感覚でJavaを書き始めると、思わぬところではまってしまうことがあり、
ここでは自戒の念を込めてはまったポイントを記しておこうと思います。

■文字列比較ではまる

こんなif文を書いて、判定がtrueとならず、頭を悩ませていました。
※str = “hoge”だと、この単純な例の場合たまたま判定がtrueになってしまうので、わかりにくいですが”hog”と”e”にわけて宣言しています。【参考
String str = "hog";
str += "e";
if (str == "hoge") { // false...
    // do something
}
PHPだと文字列はプリミティブ型なので、上記のような文字列が格納された変数(str)と文字列リテラル(“hoge”)の比較でうまくいくのですが、
Javaの場合だと文字列は参照型で、文字列リテラルも一見プリミティブのように見えますが、内部ではString型のオブジェクトとして扱われます。
イメージとしては以下のようにStringクラスをnewしている形ですね。
String str = new String("hoge");
※ただ、これはあくまでイメージで、本当にこの書き方をすると文字列リテラルから変換されたString型オブジェクトを、さらにStringクラスのコンストラクタに渡していることになるので、二度手間となってしまいます。

“hoge”がString型のオブジェクトだとわかれば、比較演算子(==)でtrueとならないことを受け入れることができました。

■結局

で、結局どうすればよかったというと、Stringクラスに実装されている文字列比較用のメソッド”equals”を使いましょうというお話でした。
String str = "hog";
str += "e";
if (str.equals("hoge")) { // true!
    // do something
}
なんとなく見よう見まねで書けても、きちんと入門書などで言語仕様を把握しておくことが重要だと痛感した一日でした。