せてぃーずノート

Javaのイベント参加レポートとかを書いたりします。

UpdateもDeleteを使わないテーブル設計

今日読んでた本で出てきたのでメモメモ。
Insertで履歴を持つまではわかるけど、削除テーブルというのがイマイチピンと来ない。
毎回Joinしちゃうの?
ググってもあまり情報が出てこない。

で、ようやく見つけたのがこれ。

PostgreSQLでINSERTのみ使用してレコードの更新履歴を残すテーブル構造を実装する - mikage014の日記

  • 通常のテーブルはINSERTのみ
  • UPDATEしたい時は通常テーブルにレコードを追加し、削除テーブルにもINSERTする。
    削除テーブルにINSERTするのは更新前のレコード
  • 削除は削除テーブルにINSERT
  • Viewは通常テーブルに対して削除テーブルを消しこんだもの。

こうすれば確かにINSERTだけで回りそう。
JPA使うときとかこういう設計のほうがいいかも。

Apache Camel+Groovyで簡単システム統合ハンズオンに行ってきた

JGGUGのハンズオンセミナーで出てきたサイトのメモ。

簡単にメモ

  • Camelとは?
     ・汎用的なシステム統合フレームワーク
     ・エンタープライズインテグレーションパターン(EIP)を実現
     ・軽量&DSL

  • 結合可能なComponentは200以上!
    TwitterからHBaseまで有名どころは大体揃ってる感じ。

  • ApacheCamelは敷居が高いので下げることがハンズオンの目標

  • EIP本がベースになっている。
    システム統合の基本は非同期でメッセージングベース。

ちなみに本はこちら。700ページオーバーらしい。

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions: Gregor Hohpe, Bobby Woolf: 0785342200683: Amazon.com: Books

  • CamelはJarで提供。最近のライブラリにしては不親切かも。

  • 基本的にメッセージング。Camelが落ちたらデータは揮発しちゃう。
    データのライフサイクルは以下の2つがある。

  • SEDA→Staging Event Driven Architecture
    Camelコンテキスト内で有効

  • VMVM内で有効

資料とかリンクとか

モジュール

ハンズオンで作成したモジュール。

nobusue/camel-groovy · GitHub

スライドシェア

Gws 20140418 camel_groovy

ApacheCamel本家

Apache Camel: Index

感想

軽く触ってだけでも凄くイケてるし可能性の秘めてるライブラリだと思う。
下手にGUIやツール化していないので、ケースに合わせて柔軟に対応できる。
Groovyを利用することで、個々のComponentを綺麗につなぐことが可能になる。

惜しむらくは日本語の情報の少なさか・・・。

JvmCasualNightへ行ってきた!

LL言語な人たちの参加がほとんどだったせいか、スーツ率5%未満という素敵な会場。
多分、数少ないJavaでアプリ作ってる側での参加者だったと思います。

SlideShareリンク

不足分は後ほど追加ということで・・・。

NorikraのJVMチューンで苦労している話

運用に効く!JVMオプション三選

Jvm operation casual talks

感想

JVMの話も面白かったのですが、違う世界を垣間見れたのが一番の収穫かも。

  • JVMを使う理由は、必要なミドルウェアを使用するためにJVMが必要だから。
    Lucene、Cassandra、HBaseとか。

  • JVMをライブラリの前提で使ってる人は、JVMの利点をあまり感じていない?
    強いて挙げられた感のある利点としては、「スレッドが軽量で実用性がある」「高負荷に耐える」「型がある言語」というところくらい?

  • プロセスに考え方がそもそも違う
    こちとらJavaメインなので、プロセスダウンしないようにチューニングしたりする。 でもLL言語の人たちにとってのプロセスは、ダメになった殺せばいいじゃんっていう考え方(だとお思う)
    帰りのエレベーターの中でも「FullGCで止まる前にプロセスを殺せないかなぁ」という話が聞けたり。
    確かにすぐに殺しちゃえっていう人からすると起動が遅いって致命的だよね・・・。

同じJVMに関わる立場でも、異なる視点や使い方の人の考えや意見を聞けたのはとてもいい経験に慣れたと思います。

Windowsでvagrantを試してみる

参考にするのはこのページ

仮想環境構築ツール「Vagrant」で開発環境を仮想マシン上に自動作成する - さくらのナレッジ

本当はdockerを試そうと思っていました。
でもdockerのチュートリアルをやろうとしたら、最初にvagrantを入れろって言うので仕方なく入れます。

って思っていたのですが、vagrantもすげー面白い!
むしろこれ極めればdockerいらないんじゃない?とか思っちゃうかも

vagrantのインストール

vagrantにはWindows向けのインストーラーがちゃんとあります。
プログラムファイルには出てきませんが、パスも通してくれるのでインストールすればすぐに使えます。
再起動は必要ですけどね。

最初の仮想マシン作成

で、早速initしてみる。

d:\vm>vagrant init centos-6-x64 http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210.box
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

【てきとーな訳】
Vagrantfileがこのディレクトリが完成した
ただちにvagrant upで最初のVM環境を作ってみたまえ!

VagrantfileにはインストールするOSの種類や仮想マシンの環境とかを定義します。
詳しいことはここを読むといいっぽい。

Vagrantfile - Vagrant Documentation

言われたとおりにvagrant upを実行すると、OSダウンロードして仮想マシンを作成。 その後起動までしてくれます。
OSのダウンロードは最初の1回だけでいいそうです。

d:\vm>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Box 'centos-6-x64' was not found. Fetching box from specified URL for
the provider 'virtualbox'. Note that if the URL does not have
a box for this provider, you should interrupt Vagrant now and add
the box yourself. Otherwise Vagrant will attempt to download the
full box prior to discovering this error.
Downloading box from URL: http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x
64-vbox4210.box
Extracting box...ate: 2300k/s, Estimated time remaining: --:--:--)
Successfully added box 'centos-6-x64' with provider 'virtualbox'!
[default] Importing base box 'centos-6-x64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
DL is deprecated, please use Fiddle
[default] Machine booted and ready!
[default] The guest additions on this VM do not match the installed version of
VirtualBox! In most cases this is fine, but in rare cases it can
prevent things such as shared folders from working properly. If you see
shared folder errors, please make sure the guest additions within the
virtual machine match the version of VirtualBox you have installed on
your host and reload your VM.

Guest Additions Version: 4.2.10
VirtualBox Version: 4.3
[default] Mounting shared folders...
[default] -- /vagrant

VirtualBoxを開いてみると仮想マシンが作成されて動いています。やったね。

今日のまとめ

ここまでの所要時間DL時間含めて5分かからずです。
これが自分で作った場合、isoを落としてVMにOS入れて初期設定して・・・と倍の時間はかかるでしょう。
目的にもよりますが、テスト環境を構築したいときなんかvagrantのほうが断然おすすめと思われます。

BBASもどきを作ってます

ボーダーブレイクネタです。
自分の勉強も兼ねて、BBASもどきを開発してます。

おりじなるは以下のURL。

http://daxs.info/bbas/

とりあえず、データ集計部分は今週くらいでできそうです。
こーんなな感じで使っているアセンとか武器を収集してます。

Assenble{headParts='セイバーI型', handParts='B.U.Z.-α', bodyParts='ヘヴィガードIV型', footParts='E.D.G.-θ', assultWepon=Wepon{main='電磁加速砲・速式', sub='MSL-ナイダス', hozyo='マーシャルソード', special='AC-ディスタンス'}, heavyWepon=Wepon{main='ウィーゼル機関銃', sub='サワード・バラージ', hozyo='改良型ECMグレネード', special='バリアユニットγ'}, sniperWepon=Wepon{main='炸薬狙撃銃・絶火', sub='スティッキーボム', hozyo='セントリーガンLZ', special='光学迷彩・耐久型'}, supportWepon=Wepon{main='レイジスマック', sub='リムペットボムV', hozyo='自律型弾薬BOX', special='リペアフィールド'}, callWepon='BA:オートガン', tipList=[ExceedTip{name='タックル', cost=0}, ExceedTip{name='投てき適性', cost=0}, ExceedTip{name='爆発範囲拡大II', cost=0}]}

オリジナルにない要素として

  • MAP別の人数とポイトン
  • 地域別のポイトン

とか盛り込んでみようかと考え中です。

たぶんオープンソースカンファレンスに行ってきた

多分っていうのは、なんか萌えキャラとゆるキャラが多すぎてそっちの印象しか残ってないから。
別にいいんですけど、そういうの受け入れない層もあるわけで、もうちょっと抑えてもいいかなぁと思ったり。

Hadoopの話

Hadoop1系と2系の違いのお話。
会場にいた人の半分以上がHadoopを知らないという予想外の展開。
消化できるのか!?

Hadoop1系と2系の違いは

  • Java7に対応した!8はまだ・・・?
  • MapReduce以外も出来るようになる
  • HDFSのSnapshotがとれたりとか色々改良
  • みんな大好き象さんは続投
  • 何を使うにせよ、データを蓄えることが大切!

1系は今後どうなるかよくわからないとのこと。
HDFSの代わりにインメモリを利用するApacheSparkを使うのはそのうち試してみたい。

TOPPERSの話

組み込み系のOSです。
全く縁のない組み込み系ですが、なんとなく聞いてみました。

  • 産官学一体のプロジェクトなのはいいけど、足かせがありそうな感じ。
    せっかく工夫して作ったものも「公式認定」が必要とかもったいない
  • 子供向け教育セットみたいなものを出すみたいだけど2万円は微妙な気がする。。。
    RegoとかRaspberry Piが競合製品になりそうだけど勝てるのか?
  • OSを作る人達の集まりなので、使う人達のことをあまり考えていない。

多分、日本でも優秀な技術者を投入していると思うんです。
成果物も色々ありそうなんですけど、敷居高くてユーザが増えにくい気がします。

雨と開催地が遠くても熱気に溢れたイベントでした。
まりんかさん可愛かったし。

JJUG ナイトセミナ「3大IDE頂上決戦」に行ってきた

「それ○○でも出来るよ」というツイートが裏で飛び交う、熱く激しいバトルでした。

イベント告知ページ

【東京】JJUG ナイトセミナ 「2.19 Eclipse、NetBeans、IntelliJ IDEA 3大IDE頂上決戦 」 - 日本Javaユーザーグループ | Doorkeeper

Togetterまとめ

JJUG ナイトセミナ 「2.19 Eclipse、NetBeans、IntelliJ IDEA 3大IDE頂上決戦 」 #jjug #idewars - Togetterまとめ

それぞれ印象に残った点を簡単にまとめ

NetBeans

IntelliJ IDEA

Eclipse

  • ユーザ数はナンバーワン!
  • CTRL+1で何とかしてくれる
  • みんな意外と使いこなせてない?

感想

  • まずはどれでもいいのでIDEを使いこなせるようになろう
    重いテキストエディタ化している人はもったいない どれか一つマスターしてから次のIDEに行っても遅くはない
  • どれも素晴らしいけど最初に触るのはNetBeansがいいと思う 特にSI屋の新人教育担当の人! Eclipseのセットアップで時間を潰すくらいなら、オールインワンNetBeansで実装を学ぶ時間を増やすほうがいいと思いますよ

印象に残った言葉

  • 思考を止めずに実装しよう
    これすごく重要だと思う。
    そのためにIDEだし。
  • メソッド名なんて後で変えたくなるから最初は適当に
    まずはxxxxxxxxとかにして、メソッド名を考えることで実装のリズムを止めない。
    思い返してみると名前で悩んでしまうことはおおいので、これから実践してみようと思う。
  • 出来るエンジニアはブランチを切る(キリッ