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/

    2013年3月15日金曜日

    『北村、会社やめたってよ』

    2012年12月末を持って退職しました。 8年8ヶ月の勤務期間でした。

    退職する前は何してたの?


     新卒入社したSIerで主に設計と実装をやってました。
    あとは要件定義やら顧客との仕様詰めやらプロジェクト管理やら。

    企業の社内システムの開発が多かったので、
    新し目の技術や方法はあまり使ってなかったです。
    ScalaはJava使いの多いSIerが次に選ぶ言語として良いと思うんですけどね・・・。

    言語面では、Java/Webが一番多かったですねー。あとは.Net。
    (VB6は3年ぐらい書いてましたが。 )

    DBはOracleが多くて、本番環境にインストールしたりPL/SQLを書いたり。
    あとはPostgreSQLやMySQLとか。


    自分は大学は文系で、情報処理の経験もなかったのに色々と育ててくださったので前職の皆様には感謝感謝。
    支えてくださった皆様にも感謝。

    なんで会社やめたの?

     書きやすいことだけを書くと、
    • 2011年3月11日を経て、いつか突然死ぬこともあるんだよなー、このまま死んだら悔いが残るなー、とか。
    • そして原発事故があって、何かあった時にまずは安全のために逃げ出して、リモートで生きる糧を稼げるような働き方をしたいなー。
    • Excel方眼紙はもういいやー。
    • もっと良いスペックの開発マシンを使いたいなー。
    • 新しいことをやるための障壁が高すぎるなー。



    などなど。
    まぁ生々しい話が聴きたい方はオフラインででも。


    会社やめてどうするの?

     自分にとって「これがあると便利!」と思っているWebのサービスを作りたい、
    そしてそれでお金を稼ぎたい!
    と思って邁進しております。
      
    有り体に言うと今は無職です!無職ステータスは思ったより心身に良いです。

    その他


    本投稿のタイトルは、
    個人的2012年ベスト映画、かつ、自分人生に残る傑作『桐島、部活やめるってよ』の
    BD/DVDが発売されて、
    かつ、
    日本アカデミー賞優秀作品賞、優秀監督賞、優秀編集賞、新人俳優賞を受賞したので、
    それにちなんで。
    まじオススメの映画やで!


    2013年2月11日月曜日

    ScalaMock 3では、引数ありのコンストラクタのモックは作成できない

    背景


    Scalaでモックを作るには何がいいのかな~ってところで
    ScalaMock を使い始めました。

    困ったこと


    引数ありのコンストラクタのモックを作ろうとしても
    error: not enough arguments for constructor XXX.
    というエラーメッセージが出てコンパイルできません。

    引数ありコンストラクタを持つクラスはモックを作れないことが判明


    http://stackoverflow.com/questions/14274020/scalamock-mock-a-class-that-takes-arguments

    にて
    Right now, ScalaMock3 can only mock traits and no-args classes.

    今のところ、ScalaMock3ではトレイトと引数なしのクラスのみモックできるよ。

     てことで、少なくとも現時点では、引数ありのコンストラクタを持ったクラスのモックは作成できない模様。
    テスト対象のクラスを引数なしのコンストラクタにして、引数に渡したかったものはsetter使って渡す形ですかねー。
    Traitで定義しておいたほうが楽ですね。
    ※まぁscalamockのオフィシャルページにも似たようなことが書いてあったのでやっぱりかー、というところ。

    2013年2月4日月曜日

    Play ScalaでのカスタムPathBindableの作成方法(へのリンク)

    メモ。

    Play Frameworkで独自に作成したクラスなどを
    URLパスに指定したい場合、PathBindableを実装する必要があります。

    そのやり方を説明してくれているサイトを発見したので備忘録的に書いておきます。

    www.soutier.de/blog/2012/12/11/playframework-routes-part-2-advanced/

    implicit objectという手があるのかー、
    と自分のScala力の低さに悶々としてます。

    2013年2月3日日曜日

    sbtでscalacにコンパイルオプションを渡す方法。

    背景

    sbtでコンパイルを走らせた際にwarningが出で「-xxxっていうコンパイルオプションをつけてもう一度やってね」って言われるものの、
    そのコンパイルオプションの付け方がわからん!


    ということが起こった時にググって解決したものの、それを忘れていたせいで今日困ったので
    メモしておきます。

    設定の仕方

    sbtを起動したら、

    set scalacOptions += "-xxx"

    を実行。
    あとは普通にコンパイルするだけです。

    他のやり方は?

    build.sbtなどに設定する方法はあるのですが、
    ファイルを書き換えるのは手間なので、上記のやり方でやってます。


    2013年1月10日木曜日

    TypeScriptのtsc -wでコンパイルされない件。(TypeScript tsc --watch never compile)

    問題

    TypeScriptのtscコマンドにおける-w(--watch:ソースファイルの変更を検知して自動的にコンパイルしてくれるオプション)が、どうも効いていない。
    変更を検知するが、jsファイルを出力してくれない。

    ※環境
    • OS:Ubuntu 12.10 64bit
    • npm:1.1.69
    • TypeScript:0.8.1?

    実行すると

    $ tsc form.ts -w
    Recompiling(Thu Jan 10 2013 00:46:49 GMT+0900 (JST)): /usr/lib/node_modules/typescript/bin/lib.d.ts,/path/form.ts

    のような表示はされるが、form.jsファイルが出力されず。

    ソースを変更すると上記の"Recompiling xxx"というのは表示されるものの、やっぱりjsファイルは出力されず。

    回避方法

    どうもバグのようですが、2013/1現在、修正されていない模様。

    てことで
    Typescript watch compiler
    を使います。
    これは、tscコマンドのwatchを常に行うようにしたものです。
    インストールは以下の通り。
    sudo npm install -g tscw

     

    実行すると

    $ tscw form.ts
    TSCW is watching for changes, initializing first recompile.
      -> recompiling... done.
    となり、ディレクトリを確認すると無事form.jsファイルが作成されていました。
    ※tscw -w form.ts ではない点に注意。

    また、ソースを修正すると
    $ tscw form.ts
    TSCW is watching for changes, initializing first recompile.
      -> recompiling... done.

    [1:10:11]: change detected in file form.ts
      -> recompiling... done.
     となり、変更を検知してコンパイルされていました。

    tscwコマンドは、tscコマンドのオプションすべてが使えるようです。