デザインパターン入門を読み始めました。〜GoFとは〜

 

有名なやつですね。

存在はもちろん知っていましたが、
難しそうという思い込みで読んでいませんでした。

読まなくては!といういい機会をいただき読み始めました。
入門なのもあり、Javaを知らない私でも意外に読める感じでした!
(思い込みはだめですね。)

 

PHPerな方が、この本と一緒によむといいのが、
デザパタをPHPで書いてくれてるやつ → HappyDays-jQuery/GoF

 

今回は、この本の導入部分のまとめを
自分なりに書いていきたいと思います。

 

GoF(ゴフ)とは

\「GoF」ってよく聞くけど、なんですか?/
という、私の初歩的な疑問がありました。
「はじめに」部分に詳しく書いてくれてました。

開発する上でのよくあるパターンを「デザインパターン」という形で整理したのが、
GoF(ゴフ)と呼ばれた4人だそうです。※GoF = the Gang of Fourの略

もっと詳しく言うと、このGoFにより
オブジェクト指向における再利用のためのデザインパターン
という本がかかれました。
この本では、23個のデザインパターンに「名前」をつけ、
「カタログ」としてまとめられています。

 

–まとめ–
GoF(ゴフ)とは、
デザインパターンを整理してくれた4人の人たちの名称。

 

デザインパターンを学ぶ前に

デザインパターンとは、クラスやインターフェースの関係性である。

デザインパターンの目的は、プログラムを再利用可能なものにすること。
→プログラムを部品として再利用すること
→プログラムを常に、機能拡張や変更を加えていくものとして見る必要がある。

なので、デザインパターンの理解を深めるためには以下を考えると良い。
・どんな機能が拡張される可能性があるか
・その拡張が行われると、修正が必要になるクラスはどれか
・逆に、修正が不要なクラスはどれか

 

また、役割を理解する必要がある。
この本では、デザインパターンをドラマに例えて整理しています。

– 白雪姫(というドラマ) … デザインパターン
– 白雪姫(登場人物) … クラスA
– 王子様(登場人物) … クラスB

白雪姫には、りんごを食べて永遠の眠りについてしまうという役目があるように、
クラスAは役割がある。
また、王子様には、白雪姫にキスをして目覚めさせるという役目があるように、
クラスBには役割がある。
白雪姫が眠らなければ王子様も役目を果たせないように、
し役割をまっとうする必要がある。
登場人物全員が役割を果たしてドラマができあがるように、
デザインパターンもできるという感じでしょうか。

 

次は、第1章Iteratorについてまとめたいと思います!

 

達人に学ぶSQL〜CASE式〜

 
おはようございます!愛知に行ってきます!
ちびまる子ちゃんランドに行くのがたのしみです。
 

この本のサブタイトルが通り、
「初心者で終わりたくない」ので読んでます。
中級者向けですね、わたしにはちょいムズです^^;
ただ、読み込めばいけそうな気がしてます!

 

今回は、その本の最初の節である「CASE式のススメ」を自分なりにまとめます。

CASE式の種類

– 単純CASE式
– 検索CASE式
「単純CASE式」で書ける =「検索CASE式」でも書ける

-- 単純CASE式
CASE  sex
  WHEN 1 THEN '男'
  WHEN 2 THEN '女'
ELSE 'その他' END

上の単純CASE式を検索CASE式で書くと、以下になります。

-- 検索CASE式
CASE
  WHEN sex = 1 THEN '男'
  WHEN sex = 2 THEN '女'
ELSE 'その他' END

CASE式の注意点

– CASE式の評価は真になるWHEN句が見つかった時点で打ち切られる。
よって、下位のWHEN句は無視される。

– 各分岐が返すデータの型は統一させる

– 「END」を忘れないようにする。→エラーはでる。

– 「ELSE X」は省略することができる。その場合は、「ELSE NULL」になる。
明示的に「ELSE X」は書くようにした方がいい!

– 「CASE文」ではない。「CASE式」

SELECT と GROUP BY で 同じCASE式を使う

→SELECT句の「AS {別名}」をGROUP BYで流用することができる。

※PostgrSQL,  MySQLで使用可

こんなテーブル(pop_tbl)があったとして、

# SELECT * FROM pop_tbl;
 pref_name | population 
-----------+------------
 徳島      |        100
 香川      |        200
 愛媛      |        150
 高知      |        200
 福岡      |        300
 佐賀      |        100
 長崎      |        200
 東京      |        400
 群馬      |         60

[結果] ←こうしたい

 region | sum 
--------+-----
 その他 | 660
 四国   | 650
 九州   | 400

別名を流用せずに書くと、こんな感じで長いです。

SELECT
  (CASE pref_name
    WHEN '徳島' THEN '四国'
    WHEN '香川' THEN '四国'
    WHEN '愛媛' THEN '四国'
    WHEN '高知' THEN '四国'
    WHEN '佐賀' THEN '九州'
    WHEN '福岡' THEN '九州'
  ELSE 'その他' END) AS region
  ,SUM(population)
FROM pop_tbl
GROUP BY  
  (CASE pref_name
    WHEN '徳島' THEN '四国'
    WHEN '香川' THEN '四国'
    WHEN '愛媛' THEN '四国'
    WHEN '高知' THEN '四国'
    WHEN '佐賀' THEN '九州'
    WHEN '福岡' THEN '九州'
  ELSE 'その他' END);

上記のような長いSQLを以下のように短くすることができます。

SELECT
  (CASE pref_name
    WHEN '徳島' THEN '四国'
    WHEN '香川' THEN '四国'
    WHEN '愛媛' THEN '四国'
    WHEN '高知' THEN '四国'
    WHEN '佐賀' THEN '九州'
    WHEN '福岡' THEN '九州'
  ELSE 'その他' END) AS region
  ,SUM(population)
FROM pop_tbl
GROUP BY region;

 

クロス形式で表にする

こんなテーブル(manju_tbl)があったとして、

# SELECT * FROM manju_tbl;
  name  | anco_id | count 
--------+---------+-------
 太郎   |       1 |    10
 太郎   |       2 |    10
 二郎   |       1 |    10
 二郎   |       2 |     0
 小次郎 |       1 |    14
 小次郎 |       2 |     8

※anco_id = 1→「黒あん」、anco_id = 2→「白あん」のイメージです。

[結果] ←こうしたい。
各人がkuroan_count/shiroroan_countを何回ずつ食べたのか1行でみれるようにしたい。

  name  | kuroan_count | shiroroan_count 
--------+--------------+-----------------
 二郎   |           10 |               0
 小次郎 |           14 |               8
 太郎   |           10 |              10

こんな感じです。
nameごとに1行にしたいので、GROUP BY nameを忘れない!
SUMで合計するので、ELSE 0にしにしたほうが読みやすいです。

SELECT
  name
  ,SUM(CASE WHEN anco_id = 1 THEN count ELSE 0 END) AS kuroan_count
  ,SUM(CASE WHEN anco_id = 2 THEN count ELSE 0 END) AS shiroroan_count
FROM manju_tbl
GROUP BY name;

 

CHECK制約でCASE式を使う

CONSTRAINT {制約名}  CHECK ({制約内容})

とし、制約に名前がつけれます。
これにより、エラー発生時に制約名が表示されるので、
どこで引っかかったのかわかりやすくなります。
CREATE TABLEやALTER TABLEで使えます。

 

今回の例では、
「女性社員の給与は20万円以下である」
という制約をみたすためのテーブル作成時のSQLです。
※この制約のポイントは男性社員に関しては、給与の制約がないことです。

CREATE TABLE Salaries(
  name VARCHAR(50),
  sex SMALLINT,
  salary INT CONSTRAINT Salaries_salary_check CHECK (
    CASE WHEN sex = 2
         THEN CASE WHEN salary <= 200000
                   THEN 1 ELSE 0 END
    ELSE 1 END = 1
  )
);
--すでにテーブル Salariesがあり、カラムsexとカラムsalaryがある前提
ALTER TABLE Salaries ADD CONSTRAINT
  Salaries_salary_check CHECK (
    CASE WHEN sex = 2 
         THEN CASE WHEN salary <= 200000
                   THEN 1 ELSE 0 END
    ELSE 1 END = 1
 );

 

データ挿入時に、制約が走ります。

-- 以下3つの INSERT文は 正常に追加されます。
INSERT INTO salaries VALUES('太郎', 1, 220000);  
INSERT INTO salaries VALUES('二郎', 1, 190000);
INSERT INTO salaries VALUES('花子', 2, 200000);
-- 制約に違反すると
-- 以下のSQL エラー と表示されます。
-- ERROR:  new row for relation "salaries" violates check constraint "salaries_salary_check"

INSERT INTO salaries VALUES('卑弥呼', 2, 220000);

 

 

制約名は省略もできます。

・制約名を省略したパターン

CREATE TABLE Salaries2(
  name VARCHAR(50),
  sex SMALLINT,
  salary INT CHECK (
    CASE WHEN sex = 2
         THEN CASE WHEN salary <= 200000
                   THEN 1 ELSE 0 END
    ELSE 1 END = 1
  )
);
--すでにテーブル Salaries2があり、カラムsexとカラムsalaryがある前提 
ALTER TABLE Salaries4 ADD CHECK (
 CASE WHEN sex = 2 
      THEN CASE WHEN salary <= 200000
                THEN 1 ELSE 0 END
 ELSE 1 END = 1
);

・エラーの場合の表記

-- ERROR: new row for relation "salaries2" violates check constraint "salaries2_check"

制約名を省略した場合のエラー時の制約名は、

制約名(デフォルト): {テーブル名}_check

ってなってますね。

 

PostgreSQL 9.4.5文書 では、以下のように書いてますね。詳細わかりませんね。

(この方法で制約名を指定しない場合は、システムにより名前が付けられます。)

 

まとめ

CASE式は、実行時に評価されて1つの値に定まるので、

列名や定数がかける部分であれば、どこにでもかけます!

今回例を出した以外の、UPDATE文や集約関数のなかでもCASE式は使うことができてとても便利です。

家守綺譚~iemori kitan~

「家守綺譚」
(著)梨木香歩

この本は、家の近くのカレーをやってるお店に一人で行った時に店員さんがおすすめしてくれました。
その方は、見た目はR-指定っぽい感じで、
最近読書にハマってるとお話したら、
その方も本を読むと聞いて、外見に反していてびっくりしました。(失礼な話ですみません、。)
一人だったので、お話してくれて嬉しかったです。
またあのお店いってカレー食べたいです。

その方曰く、ゆうれいみたいな話だけど、怖くはないっと言っていて、すごく気になったので、
BOOK OFFに探しにいったらあったので、即買いして読みました。

各章が、「サルスベリ」や
「ドクダミ」だったりで全て植物の名前で、
農学部の私には惹かれるものがありました。

※ネタバレ 注意※

主人公は、作家の走りだてで衣食住も結構ギリギリの人。
ある日、学生時代にボート事故で亡くなった友人の実家を、
その友人両親が家を開けるので、家を守ってほしいと言われ、
タダで譲りうけて住む感じになった。

家には、湖の絵が書いてある掛け軸があって、その湖の絵から時々に友人が現れる。
最初は、少しビビっていたが、毎回のことで、主人公もなれていく。
(これが、ゆうれいっぽいのかと私は察しました)
友人と主人公の会話も普通の日常会話すぎてほんわかする。

犬のゴローを飼うことになり、ゴローがいい感じにいろいろ助けてくれたりもする。
ゴローは、カッパとカップルになって、山を守ったりと超才子。

摩訶不思議だけど、違和感なく読めるし、おもしろい。
言葉は昔っぽいけど、まだ読みやすくて、古文嫌いなわたしでも読めた!

この本はちっさくて、超薄くて荷物にならないので、持ち運びも便利。
また旅行とか移動中とかに読みたい。

表参道のセレブ犬とカバーニャ要塞の野良犬

「表参道のセレブ犬とカバーニャ要塞の野良犬」
(著)若林 正恭

キューバに行きたくなりました。
というか、一人で海外に行くって挑戦をしたくなりました。

若林さん、やっぱり面白いです。

ここからはネタバレ注意です。
ご了承ください。

キューバに一人旅行に行って、日本から現実逃避し、
陽気なキューバ人のイメージとは真逆の人見知りのキューバ人ガイド・マルチネスとの会話だったり、
エバジマとその友達と闘鶏場にいったり、革命博物館に行ったり。
ちっさい笑い話がほっこりしました。
キューバ革命とか、わたしが興味ない世界史にも興味が持てました。

キューバの社会主義と、日本の資本主義、そして新自由主義の違いのそれぞれの良さ悪さも感じることができた。
最後まで読むとキューバに来た理由がわかります。

探してるものはそう遠くはないのかもしれない

「探してるものはそう遠くはないのかもしれない」
(著)新井見枝香

クリープハイプの尾崎世界観さんが、
めざましテレビでお勧めしていて、
直感で即買いして読んだんですが思いの外面白くて、
お盆帰省中の移動で夢中になって読んでいました。(クリープハイプ聴きながらw)
本の中にも尾崎世界観がでてきて、「おっ!」ってなりました。

言葉のチョイスとか、音感とかリズム・テンポが心地よかったです。
話の内容は、作者自身の書店員という立場の話や、
趣味といった日常系っぽい感じのエッセイでした。
良い意味で変な人の日常生活を知ることが、自分は好きなんだなって気付けました。
面白い人の頭の中って見たい!知りたい!ってなります。
そして、すごくいい刺激になりました。

Googleアナリティクスでアクセス解析をしたい〜分析編〜

 

\うた紹介コーナー、第二弾/

You/雨のパレード

雨のパレードは半年前くらいにライブにいって、そこから大好きです。
色んな音がしてて、ライブ全体が1つの曲みたいで感動したのを覚えてます。
久々にCD買ったバンドです。

 

どーも! 待望のw
Googleアナリティクスでアクセス解析をしたい〜導入編〜の続編です!

 

導入編のまとめでも書いたんですが、Googleアナリティクスが見れると、

Googleアナリティクスを毎朝見るのが日課になる。成長記録みたいで楽しい。

見える化ってすばらしい^^モチベーションあがる。

って痛感します。

 

そこで、こんな見方もありますってのを書きます。

※マーケティングとか何?って感じなのでご了承ください。

 

参照元を知る

サイトの参照元(どこからきたのか)とかわかると、

結構集客のヒントがあるのかなっと思ってます。

わたしの今年の参照元はこんな感じです。

 

Googleアナリティクス > 集客 > 参照元 / メディア

Googleアナリティクス_参照元

 

わかること

・オーガニック検索が多い(Google, Yahoo, bing)

・t.co / referral → ツイッターらしい。

・fd-studio.jp さんが参照してくれている!

調べてみると、、、ここで使ってくれていました!ありがとうございます!(感動っ)

phperkaigi.jp さんの「ブログ書いたよ」投稿したので、そこからの参照と思われる。ありがとうございます。

phpcon.fukuoka.jp さんに去年書いたよリンク貼ってもらったので、そこからの参照と思われる。ありがとうございます。

 

検索ワードを知る

なんて検索したら、私のサイト表示されるんだろう?何位だろう?ってのがわかります。

Googleアナリティクス > 集客 > Search Console > 検索クエリ

Googleアナリテクス_検索クエリ

 

わかること

・「solidの原則」が多め、唯一クリックされてる。

・ほとんどが表示回数が少ないのもあり、クリック全然されてないw

・平均掲載順位高いものもあるのに、表示回数がない

→そもそもあまり検索ワードとして検索されないものにヒットしてる可能性がある・・・。

 

 

こうやってみると、サイトの汚点が見えてきますね・・・。

どうにか改善して、流入増やしたいです!

 

 

ただ、BEAR.Sundayで紹介されてからユーザー・セッション数増えてます。

嬉しいのと感謝です。\(^^)/

 

 

この本を読んでから、いろいろやってみてます。

Googleアナリティクスでアクセス解析をしたい〜導入編〜

 

この前、初めて友達の結婚式にいきました。感動しましたー。
最近の結婚式ってプロジェクションマッピングとかするんですね、時代の進化を感じました。

 

さて、本題です。
私は仕事で、Googleアナリティクスタグや、Googleタグマネージャーを調整して設置をすることはよくあるのですが、
Googleアナリティクスの画面(グラフとかあるやつ)を使ったことも見たこともないのです。

 

そこで!

このブログとこの前作った名言API使用例のサイトに
Googleアナリティクスタグ(正確に言うとGoogleタグマネージャ)を設置してみました!
その結果わかったこととかを書きます。

わかったこと(まとめ)

●Googleアナリティクスにある グローバル サイトタグ(gtag.js)と Google タグマネージャ(コンテナスニペット)は違う!

→Googleタグマネのが便利でプレビューとかもできて親切な感じ。
今回はタグマネ使う方法を書きます。

●Googleアナリティクスを毎朝見るのが日課になる。成長記録みたいで楽しい。見える化ってすばらしい^^

次回、分析した結果わかったこと書きます。今回は導入編!

 

導入手順

①トラッキングID取得

②Google タグマネージャタグ取得

③タグの設定

④プレビュー →  公開

⑤フィルター設定

 

①トラッキングID取得

UA-XXXXX-Xっていうやつです。←webサイトごとに振り当てられる一意のID。

Googleアナリティクス>管理>トラッキングコード から取得できます。

あとで使います。アナリティクス⇄タグマネを連携させるために使います。

②Google タグマネージャタグ取得

<script>は<head>内に、<noscript>は<body>直後にはる。GTM-XXXXがはいってるやつ。コンテナスニペットともいうらしい。

Googleタグマネージャ>管理>Google タグマネージャをインストール から取得できます。

 

③タグの設定

Googleタグマネージャ>新しいタグを追加>タグ設定 にて

トラッキングタイプ「ページビュー」とし、

Google アナリティクス設定「新しい変数」より、①でゲットしたトラッキングIDをいれて登録すると、アナリティクス⇄タグマネの連携できます!

トリガー「All Pages」とすると、サイト内のすべてのページのアクセスを追跡できます。

タグに名前をつけておくと便利です。

 

④プレビュー →  公開

③より、タグを保存すると、Googleタグマネージャのヘッダーに

ワークスペースでの変更数: 1」みたいな感じででるので、

その変更を確認したいのであれば、隣の「プレビュー」ボタンを押して、自分のサイトを見てみてください。

こんな感じで、検証ツールみたいなのが出てきてると思います。

Tags Fired On This Page が今発火してるタグです。ここに③でつくったタグがあれば大成功です!公開を押せば、公開されます。

Googleタグマネージャのプレビューモード

 

⑤フィルター設定

自分で閲覧した時に集計されては、正確な分析ができないので

IPでフィルターを設定します。

Googleアナリティクス>管理>すべてのフィルター より追加できます。

最後に…

今回のGoogleアナリティクス導入にあたって、読んだ本がこれです。

タグ設置したことあるけど、その先の分析の方法やどう役に立ってるのかがわからない技術系の私にとってはいい本でした!読みやすいです。

アサーション入門 ~自分も相手も大切にする自己表現法 (著)平木 典子

 

技術系ではない上司に勧められた本でした。

 

 

私自身、人と話すことは好きなんですが、頭が悪いのか伝えることと理解することが、苦手です・・・。

 

なので、頼みたいことがあって、

依頼内容が伝わらない→ちょいイライラ気味で一方的に話す→それでも伝わらない→あきらめて自分でやろーってなる

さらに、人の話が理解できない時、理解することが面倒になって聞き流すことも多いですww

こんな感じで、コミュニケーション怠ってます。

 

それを見かねたのかおすすめされました。

コミュニケーションの大事さはもちろんのこと、自分も相手も尊重して話すことができれば、すれ違いもストレスも減って、生きやすいなーって思いました。

 

アサーティブになるためのポイント

  1. 自分な素直な気持ちを曖昧でも言語化して伝える
  2. 相手の表現、気持ちも尊重して受け止める
  3. 状況や事実を相手と共有する
  4. 意見が対立しても、人にはそれぞれ価値観があるし、気持ちが変化することもあると受け入れる。
  5. 自分の感情、表現には責任を持つ。人のせいでない。
  6. 問題を解決する必要がある場合は提案する。どうしようもないと思わない。
  7. どうしてもだめなときはあきらめる。

 

こういう話ってすごい納得するし、当たり前な話っぽいんですが、

実践するのが難しいですよね!

とりあえず、自分に素直になって、人の話もちゃんと最後まで聞こうと思います。

 

 

自分も相手も大切にする自己表現、コミュニケーションについての本でした。

Steve Jobs Ⅰ・Ⅱ (著)ウォルター・アイザック(訳)井口耕二

スティーブ・ジョブズの生き方が

良い面も悪い面も客観的に書かれている本でした。

ジョブズは短期で口が悪い人だったともとれるし、その分素直で人間味があって常に完璧を求めた人だったんだなと感じました。

彼のクリエイティブさには憧れます、すごく。

 

Ⅰでは、生まれてすぐに養子に出され、電気屋の父親に引き取られ、エレキトロニックの世界に惹かれたきっかけが書かれていました。学生時代にはLSDや禅にはまり、ベジタリアンになった話などもありました。ウォズアニックとの出会いからのアップルの創立。ネクスト。

 

Ⅱでは、ピクサー。iPod,iPhone,iPad…iTunes…iCloud。ThinkDifferent。iCEO。リベラルアーツ。がんと戦い、妻の協力でなんとか生き抜いて大好きなAppleのために働いた最期。

 

デザイナーではないのに、形や素材、使いやすさを追求する姿勢は見習いたいと思うけど、とても真似できないです。自分の専門性にとらわれず、IT業界をはじめ音楽業界や映画業界、小売業などの多方面でクリエイティブさを発揮しています。一方、他の人のアイデアをいかにも自分のアイデアかのように言うこともあったというのがリアルでした(笑)実現不可能な事を実現させる、「現実歪曲フィールド」とかいう力はすごい能力ですが悪魔の魔法みたいで恐怖さえ感じました。

 

個人的に、ジョブズが禅の魅力に惹かれて、度々行っていたという京都の西芳寺(さいほうじ)に行きたい欲が積もりました。Googleマップで行った気になってます。苔が素敵でした。

 

登場人物が多いので、頭の中でイマイチ整理できてないです。

もう一回ちゃんと読みたいです。