BullよりElk

洋服と食をこよなく愛するWebプログラマ。

Google Cloud Platformって結構気に入った

Google Cloudで始めるDocker実践入門に参加してました。
講師は、「プログラマのためのDocker教科書」や「Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門」の著者の阿佐志保さんでした。
今回は、もう少し自分で試したいのでDockerの内容は置いといて簡単にGoogle Cloudについて紹介したいと思います。
Google Cloud Platformとは、Googleが提供しているクラウドサービスです。

リージョン

現在利用できるリージョンは、次のとおりです。AWSに比べると全然少ないですね。f:id:b1a9id:20161023220505p:plain

プロダクト 北アメリカ ヨーロッパ アジア
Cloud Storage カウンシルブラフス, バークレー郡, アトランタ サン・ギスラン(ベルギー) 彰化県(台湾)
Cloud Storage(Alpha) レノア, メイズ郡, ダラス - -
Cloud SQL バークレー - アジア
Cloud Datastore バークレー - -

ただ、なんと嬉しいことに2016年中に東京リージョンができるとのこと!その他、オレゴンも追加だそうです。

サービス

全部で48サービス提供されています。(2016年10月23日現在)
主なものをAWSのサービスと比較して紹介してみます。

サービス名 説明 AWSでは
Compute Engine Googleのインフラにホストされている仮想マシンを使った、大規模ワークロードの実行 EC2
App Engine スケーラブルなアプリケーションや、モバイルバックエンド構築のためのプラットフォーム Beanstalk
Cloud Load Balancing Google Cloud Platformのハイパフォーマンス、スケーラブルロードバランサー Elastic Load Balancer
Cloud DNS Googleの世界中のネットワークから供給される高信頼でレジリエントな、低レイテンシーDNS Route 53
Cloud Strage グローバルなエッジキャッシュを備えた、コストバランスに優れるシンプルなオブジェクトストレージ S3
Cloud SQL フルマネージドのMySQLリレーショナルデータベースを利用したデータの保存と管理 RDS
初めて使ってAWSより便利と感じたこと
  • プロジェクトという単位で管理すること

うちの会社ではAWSをつかっておりますが、お客様ごとにアカウントを分けて親アカウントからSwitch rollで目的のアカウントにログインするという運用をしております。毎回これめんどいなーって思ってるんですよね。しかし、GCPではプロジェクトという単位でサービスの管理ができるのです。システムごとにプロジェクトを作成すれば、他のシステムに影響を及ぼす心配もないです。もし、このシステムもういらないってなった場合は、プロジェクトごと削除してしまえばその中で使用していたサービスも一緒に削除できてしまうんです!

  • Cloud Shell

ざっくり言うとブラウザのマネジメントコンソール上にコンソールが起動しちゃうんです。
マネジメントコンソールの左上ヘッダメニュー赤枠のとこを選択すると
f:id:b1a9id:20161023220455p:plain
マネジメントコンソール上にコンソールが起動します。
f:id:b1a9id:20161023220505p:plain
ブラウザからコマンドラインクラウドリソースに直接アクセスできます。クラウドシェルでは、GCPAPIをたたくgcloudコマンドやよく利用すると思われるコマンドがすでにインストールされています。
また、Java、Go、Python、Node.js、PHPRubyの開発・デプロイツールがすでにインストールされているため、Cloud Shellのインスタンス上でアプリを起動してブラウザからプレビューを見ることができます。
1番感動したのは、Cloud Shellを終了してもコマンド履歴やファイルが残っていることです。Cloud Shellでは、Cloud Shellインスタンス上のホームディレクトリに5GBの永続ディスクがマウントされています。永続化されるのは、ホームディレクトリ配下のみみたいです。.bashrcや.vimrcも対象です!


こんな感じでけっこうおもしろそうなのでいろいろ試してみたいと思います。(AWSは12ヶ月の無料枠だが、GCPは60日の無料枠ていうのが残念)

サイ本を読んで~JavaScriptの変数スコープ~

JavaScriptの変数スコープがJavaと結構違って厄介。。
また、備忘録として!
まず、JavaScriptにはブロックレベルのスコープがありません。つまり、ある関数で宣言された変数は、どのブロックで宣言されたにかかわらず関数全体で有効になる。
言葉ではわかりにくいと思うので早速コードで確認!

var scope = "global";
    function f() {
        alert(scope);
        var scope = "local";
        alert(scope);
    }
f();

最初のalertは、「global」と表示されると思いませんか?(JavaとかC使いの人に向けての問いかけ)
上で説明したように関数で宣言した変数は関数全体で有効なので「undefined」と表示されるのです。
もちろん2回目のalertは、「local」と表示されます。
つまり、次のように書いたのと同じ意味になります。

function f() {
    var scope;
    alert(scope);
    var scope = "local";
    alert(scope);
}
f();

変数が後に宣言してあること認識してるなら初期化してくれればいいのにな〜って思った今日この頃。
ま、そうしちゃうとどこで変数宣言したかわからないから探すの大変になっちゃいますけど。。。

言いたいことは、ちゃんと頭で変数宣言したほうがよいよってこと!

サイ本読んで~Part1~

サイ本はJavaScriptの本では一番有名でしょう。ま、どんな本かは調べてもらうとして今回備忘録としてまとめて起きたい項目はちょいちょい記事として書いていこうかと。
Part1は、オブジェクトリテラル
JSではオブジェクトリテラルを利用できる。(あるオブジェクト生成し、そのオブジェクトのプロパティをあらかじめ定義しておくことができる。)
次の形式で定義します。
[プロパティ名:値, プロパティ名:値, ...]
具体的に書くと次のようになります。

var taro = {name: "taro", age:20};
オブジェクトを入れ子にすることも可能。
var myteam = {
    taro: {name: "taro", age: 20},
    hanako: {name: "hanako", age: 18}
};

bedsidedramaとsneeuwとmitake

夏が終わって秋が深まってきてますね!
ちょっと早いかもですが、秋冬物を買いにいってきました〜

今年のAWは、けっこうかわいいものだらけでお金が足りません。。。笑
では、早速!!!

1.bedsidedrama ビックタックウィッチコート
安定のbedsidedrama!今年こそはコートをと思い春から目をつけていた品。
後ろのタックがかっこかわいすぎる!!!あと大好きな獣ボタン(笑)
f:id:b1a9id:20161001111039j:plain
f:id:b1a9id:20161001111055j:plain

2.sneeuw モザイクJQルーズパンツ
こちらもかわいい。形も柄も良すぎますよね。
雪浦さんのテキスタイル好きなんですよね〜♪
f:id:b1a9id:20161001111304j:plain
f:id:b1a9id:20161001111309j:plain

3.mitake キャスケット
キャスケットとか全く買うつもりなかったんですけど。。。。
コート試着してるときに軽い気持ちでかぶってみたらかわいすぎることに気づいた←
360度どこからみても形がすばらしくて前後逆にかぶっても潰れなくて素敵なんです!
そして生地はETHOSENSのものだなんて!
f:id:b1a9id:20161001111522j:plain
f:id:b1a9id:20161001111528j:plain

とりあえずAWのお買い物は終了。大満足!!!

ThymeleafでformのList<Object>フィールドに値をいれるのにはまった話

仕事しててすごくハマった話。
type="hidden"でListの指定したインデックス番号のidに値をつっこもうと思ったとき、以下のようにするとうまくpostできました。

BookForm.java
@Getter
@Setter
public class BookForm implements Serializable {

	private List<Detail> details;

	@Getter
	@Setter
	public static class Detail implements Serializable {

		private Long id;

		private String name;

		private String passage;
	}
}
index.html
<form class="form-horizontal case-entry" role="form" method="post" th:action="@{/requests/category(step=book-detail)}" th:object="${createForm}">
    <div class="row">
        <div class="col-md-12">
            <fieldset>
                <th:block th:each="selectedBook: ${selectedBooks}">
                    <legend th:text="${selectedBook.name}"></legend>
                        <table>
                            <tr class="col-md-12">
                                <td>
                                     <div class="form-group" th:classappend="${#fields.hasErrors('all')}? has-error">
				         <input type="hidden" th:attr="name='details[' + __${selectedBookStat.index}__ + '].id'" th:value="${selectedBook.id}" />
                                         <div class="col-md-6">
                                             <input type="text" th:field="*{details[__${selectedBookStat.index}__].name}" class="form-control" />
                                         </div>
                                         <div class="col-md-6">
                                             <input type="text" th:field="*{details[__${selectedBookStat.index}__].passage}" class="form-control"  />
                                         </div>
                                     </div>
                                </td>
                            </tr>
                       </table>
                </th:block>
            </fieldset>
        </div>
    </div>
</form>

重要なのはth:attr="name='details[' + __${selectedBookStat.index}__ + '].id'"ですね!!!
th:attrは、任意の属性に値を設定する際に使います!
ちなみに、__は、プリプロセッシングといって通常の式よりも先に評価されます。

スープカレーといえば、、、?そう、下北沢!

昨日下北沢に遊びに行きました。
遊んだ内容は省略して、、、
夜ご飯は、ポニピリカさんで(下北沢 スープカレー - SOUP CURRY ポニピリカスープカレーを食べました。
f:id:b1a9id:20160919161745j:plain
お店の雰囲気は、インド!って感じでしたね(笑)
メニューの取り方は配られた紙に丸をつけて渡す制度。

まず、ベースのカレーをチョイス!私は野菜がたっぷり入ったカレーにしました。
入ってた野菜は、レンコン、かぼちゃ、ひよこ豆、ヤングコーン、ミニトマト、ピーマン、焦がしブロッコリー、ナス、ごぼう、山芋、じゃがいも、いんげんなどです。
次にスープ、トマトと和風とエビがあって和風をチョイス!
そして、辛さは2をチョイス!
スープカレーというものを初めて食べましたけどストレートにいってすごくおいしかったです。
ブロッコリーはあまり得意ではないないんですが、これはぺろっと食べれちゃいました。トマトも甘すぎてびっくりでした!
ごはんはお替り自由ということでとてもお得かと思います♪
f:id:b1a9id:20160919162444j:plain

Portaiile漬けの週末

ブログのテーマが「ITと服と食と」なのにITに関連することしか書いてなかった〜
てことで今回はお洋服のこと!
土日は大好きなシューズブランドのPortaille漬けの2日間でした。
【土曜】
Portailleの2017S/S展示会がありました。
土曜が唯一のフレンドデーだったので行かねばと1ヶ月ほど前から張り切っていました。
行ってみたら、どの靴もかわいくてにやにやが止まりませんでした。
デザイナーの方はとても気さくな方で、レザーや靴のことについてとても詳しく話してくださいました。
前々から気になっていた靴が行きつけのショップに入荷しないとのことでしたので、早速オーダーしちゃいました。笑
12月上旬に手元にやってくるので今からとてもワクワクしております!!!笑
【日曜日】
デザイナーの方が行きつけのショップに遊びにいくとのことでしたのでもっと話ききたいなーと思い、私もお邪魔しました。
専門家同士の深い話は大半ついていけませんでしたけど、とても有意義な時間でした。
あと、2日連続で買っちゃいましたよね(笑)
このレザーもう入らない可能性もあるとのことだったので。
そんなレアもの手に入れないわけにはいかないと思い!しかも運命なのか最後の1点がちょうど私にぴったりのサイズ(笑)
あと、Yarn & Copperのニットソーかわいすぎて、サイズ感も求めていたものドンピシャすぎて買っちゃいました!
散財したけど、心がとても満たされたから関係ない!!!(半年かけて取り戻そうと思う)
f:id:b1a9id:20160919160522j:plainf:id:b1a9id:20160919160518j:plain