2014年7月11日金曜日

Dockerの用語とか

Docker使い始めて、悩むことがあったのでメモ。

用語とか


docker image?


read-onlyなテンプレート。docker containerを作る元になる。
dockerのbuild component。


docker registry?


docker imageを保持している場所。一番有名なpublicなdocker registryがDocker Hub
dockerのdistribution component。


docker container?


ディレクトリのようなもの。docker containerはアプリケーションを走らせるために必要なすべてを持つ。
コンテナはイメージから作られる。
それぞれのコンテナは隔離されてセキュアなアプリケーションプラットフォーム。
dockerのrun component。


参考


Understanding Docker

2013年6月2日日曜日

AWSのVPC内に踏み台サーバーを作ってVPC内のRDSインスタンスのメンテナンスをする。

いやもうこちらのクラスメソッドさんの記事に自分がはまったところだけを追記するという便乗記事なのですが。

Amazon VPC環境にメンテナンス用の踏み台サーバを構築する

背景

AWSのRDSでMySQLサーバーを立てたものの、MySQL WorkbenchのようなGUIツールでデータを見たり編集したりしたい!
でもインスタンスを"Publicly Accessible"にするのは怖い!

ということで、VPC内に踏み台サーバーを作って、そこ経由でRDSインスタンスに接続します。


実現方法の詳細

詳細は冒頭のクラスメソッドさんの記事を参照して頂くとして、
ちょっとはまった点を記述します。


Security groupの適用ではdefaultも忘れずに。

Webサーバであれば、webとdefaultを両方適用しましょう。 
とあるのですが、最初はdefaultのsecurity groupの適用を忘れており、
踏み台サーバー経由のssh接続ができずに悩んでました。

defaultのsecurity groupの設定は、

デフォルトセキュリティグループ

AWS アカウントには自動的に、Amazon EC2 インスタンスのデフォルトセキュリティグループが適用されます。インスタンスの起動時に別のセキュリティグループを指定しなかった場合、インスタンスは自動的にこのデフォルトグループで起動されます。以下は、このグループの初期設定です:
  • 着信トラフィックを許可しない
  • すべての発信トラフィックを許可する
  • グループ内のインスタンスの相互通話を許可する
となっており、最後の「グループ内のインスタンスの相互通話を許可する」が適用されないと、
Webサーバーのインスタンスが、踏み台サーバーからのアクセスを拒否しちゃう訳ですね。
これはRDSのsecurity groupを設定する際も忘れないように注意。





2013年5月18日土曜日

【追記あり】MyBatis Migrationsを触ってはまった。(複数のSQLを実行しようとするとSyntaxErrorException)

※2013/05/18 20:30頃追記1を追加。

DB Migration 入門 vol.1に参加して、MyBatis Migrationsを触ってみた。

はまった点


MySQLを対象にup/downにて、複数文を記述すると

ERROR: Error executing command.  Cause: org.apache.ibatis.jdbc.RuntimeSqlException: Error executing: --  add_data
-- Migration SQL that makes the change goes here.

insert into second_t values (1, 1000);

insert into second_t values (2, 2000);


.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insert into second_t values (2, 2000)' at line 7
のようなエラーが。

原因


{repository_root}/environments/development.properties
を見ると、

# This ignores the line delimiters and
# simply sends the entire script at once.
# Use with JDBC drivers that can accept large
# blocks of delimited text at once.
send_full_script=true
との記述。
send_full_scriptがtrueの場合、スクリプトをまるっと投げちゃうと。
JDBCドライバが対応していれば、それをデリミタ毎に分割して実行してくれるようですが、
今回使用したMySQLのドライバはそういうのに対応していないみたいで、
デリミタで区切られた複数の文も1つの文として 実行しようとするみたい。

解決策


上記のsend_full_scriptをfalseにしてやればok。エラーなく複数の文を実行できるようになりました。

勉強会に参加してみて


DB Migrationツールってたくさんあるんですね!
(Playだとevolutionsもありますが。 )
生SQLを都度実行するのは間違いが起こったり、どこまで適用したかわからなかったりするので、
今後とも積極的に使いたいです。

チームでの開発効率向上と、本番環境でのマイグレーションのオペミス削減に役立ちそう。


講師のきょんさん、参加者の皆さんありがとうございました!


追記1


MySQLの複数文実行について


MySQLはもともと複数文の実行に非対応だと教えて頂きました。


@lilyfanjpさんありがとうございます!


きょんさんの発表資料について


こちらにアップされてます。ツールの位置づけの図はあとでアップされるようです
http://kyon-mm.bitbucket.org/_static/slides/cdstudy-mybatis-migration/index.html

使っている言語やスタイルに応じてお好きなものをお使いください。


2013年4月3日水曜日

Scala SlickでIN演算子を実現するには?


Slickというか、ScalaQuery時代の記法のようですが、
Slick 1.0.0でも使えました。

書き方:

val ids = 1 :: 2 :: 3 :: Nil
for(u <- Users if u.id inSet ids) yield u.name
引用元: IN operator in WHERE clause 

※IN、ってググらビリティが低いので悩みました。

2013年3月26日火曜日

Tumblrってどうやってマネタイズしているの?

Tumblrってどうやってマネタイズしてるのかなーと検索して、下記の記事を発見。
2012年11月14日の投稿なので、内容的にはちょっと古いかも。



広告売上の大部分は以下の3点だとか。
  1. Tumblr Spotlight
  2. Tumblr Radar
  3. ポストへのピン付け ※多分2013年3月現在やっていないと思われる。

Tumblr Spotlight

Tumblr Spotlight
こういう画面。Web版でdashboardしか見ていないとあまり気づかないかも。

Tumblr Radar

Dashboardの右側に出てくる赤枠の画像のところ。

















 


広告以外の売上もありそうだけどなー。

2013年3月25日月曜日

『桐島、部活やめるってよ』鑑賞会@名古屋に参加しました。

3/21開催の『桐島、部活やめるってよ』を鑑賞する会に参加しました。

開催の流れ

  1. 大江戸Ruby会議03にてauthorNariさんが『桐島、Rubyやめるってよ』という発表をされた。http://d.hatena.ne.jp/authorNari/20130317/1363476355
  2. なんか名古屋界隈で「桐島、見てみたい」という流れになる。
  3. 名古屋のスタートアップ、スタンドファームさんにお邪魔して鑑賞会。 
※スタンドファームさん、ピザと映像と場所のご提供ありがとうございました!
あと某氏(名前出していいのやら?)飲み物ご提供ありがとうございました!

    感想とか

    自分は劇場で3回、BDで1回見て、今回が5回目の鑑賞になる訳ですが、
    初鑑賞の皆さんの感想が、また自分にはなかった視点で「ああ、そういう見方もあるのか!」と新鮮でした。
    ※個々人の感想はここでは引用しませんが。

    野球部キャプテンは、リアルにいたらアレかもしれない、というのは確かにあるかもなぁ。

    皆さんに一定以上の評価はしてもらえたようで、開催できて良かったなぁと。

    『桐島、部活やめるってよ』で描かれることについて

    群像劇だし色々な出来事が描かれるので、
    「『桐島、部活やめるってよ』は一言で言うとこういう話!」と表現しづらい。
    ネタバレにならない程度にぼかして、自分の考えるテーマ、と言うか軸を羅列してみる。
    • 「勝ち・負け」「将来につながる・つながらない」という軸と、「そうではない」軸
    • 同調圧力
    • 持つ者・持たざる者、スクールカースト
      • (スクールカーストの上にいる人達が必ずしも・・・?)
    • 分かり合えなさ感
    見る人によって他にも色々あるんだろうなぁ。

    次回?

    桐島に興味のある人がTL上にはみえるようなので、
    5月に今池のキノシタホールで上映されるので、お暇な人は行きましょう。
    ※個人的には、泣きのシーンで存分に泣きたいので、知り合いとは席を離しておきたいですが。

    未見の人向けアドバイス

    未見の人は、予告編を見ないようにおすすめします。
    あと桐島自身は基本出てこないです。
    あとポスターにてカメラ構えている人は桐島ではありません。

    2013年3月21日木曜日

    jacoco4sbtのバージョン2.0.0はPlay 2.1では動かない?

    背景

    Play 2.1でテストコードを書きながら、コードカバレッジを把握したいなーと思って調べていたところ、
    jacoco4sbtなるものを発見しまして。

    https://bitbucket.org/jmhofer/jacoco4sbt

    問題

    で最新が2.0.0ということで色々設定をした後、playコマンドでsbt起動後に
    jacoco:cover
     としてみると下記のエラーが。
    java.lang.IncompatibleClassChangeError: class org.jacoco.core.internal.flow.ClassProbesVisitor has interface org.objectweb.asm.ClassVisitor as super class

    で、どうも同じ症状が出ている人は世の中にいるらしく。
    https://bitbucket.org/jmhofer/jacoco4sbt/issue/18/the-conflict-about-asm-library-in-play

     上のリンクの方の推測によると、
    Playで使っているASMのバージョンと、Jacocoで使っているASMのバージョンが違うんじゃない?
    とのこと。

    回避策

    jacoco4sbtの1.2.4を使えばいいよ!とのことでした。

    pkugin.sbtはこんな感じ。
    //Jacoco
    libraryDependencies ++= Seq(
      "org.jacoco" % "org.jacoco.core" % "0.5.9.201207300726" artifacts(Artifact("org.jacoco.core", "jar", "jar")),
      "org.jacoco" % "org.jacoco.report" % "0.5.9.201207300726" artifacts(Artifact("org.jacoco.report", "jar", "jar")))
    
    addSbtPlugin("de.johoop" % "jacoco4sbt" % "1.2.4")
    


    その他

    ASMって初めて知ったのですが、Javaのbytecodeを操作したり分析したりするフレームワークだそうな。
    http://asm.ow2.org/