谷本 心 in せろ部屋 このページをアンテナに追加 RSSフィード

2015-11-02

[]アメリカプリペイドSIM事情 2015年

JavaOne参加レポートを書かずに、SIMレポートを書く @ です。

参加レポートは会社ブログの方に書くと思うので、そちらを待っててくださいね!


ということで日本から持ち込んだSIMフリー端末をアメリカで使う場合、

どうするのが良いねんっていう話です。


AT&T or T-Mobile

SIMフリースマホアメリカで使う場合、AT&TT-MobileSIMを買うことになります。

過去にJavaOneの会場で入りやすかったという経験から、今回もT-Mobileを選びました。


一緒に行った後輩はAT&Tをチョイスしていましたが、大きな差は見られず、

どちらもホテル、町中、JavaOne会場問わず利用できている感じでした。

またJavaOne会場はWi-Fiがかなり強化されていたおかげで、

人数が集まるキーノートセッション含め、スマホテザリング)に頼る必要は全くありませんでした。


ただ標準的なプランがT-Mobileは$40で、AT&Tが$45だったので

ちょっとだけT-Mobileの方がお得でした。


T-Mobileのどのプランがいいの?

T-Mobileにはプリペイドプランがいくつかあって、

(1) $40/月で通話/SMSし放題、データは1GBまで(超えると128kbpsに制限)

(2) $50/月で通話/SMSし放題、データは3GBまで(超えると128kbpsに制限)

(3) $60/月で通話/SMSし放題、データは7GBまで(超えると128kbpsに制限)

(4) $3/月で通話/SMSは10セント、データは別途$10/週で1GBまで(超えると通信不可)

この4つです。


(1)〜(3)は似たようなプランで、

通話もSMSも発着信ともし放題、データ通信は規定量までが高速、

それを超えると128kbpsに制限されます。


いまの時代、通話やSMSなんか使わないんじゃないかと思うんですが

日本みたいにLINEでヨロとか言えませんし、Uberの登録にもSMSが必要です。

アメリカでは電話やSMSを受ける側もお金が必要になります)

なので意外と発着信がフリーなのは助かったりします。


ただしデータ通信が規定量を超えた時が大変で、お金を払っても追加することができません。

プラン変更も30日経過するまではできません。つまり低速回線から逃れられなくなります。

(今回はそれを踏んでしまったので大変でした)


データ通信量が読めない場合に使いやすいのが (4) のPay As You Goプランです。

データ通信は1GBごとに$10を払えば良いので、足りなくなった時に追加すれば済みます。

ただし電話やSMSを受けるには、少し残高に入れてく必要がありますが(入金は最低$10)


一週間の滞在で言えば、

月額($3)+データ通信1GB($10)+入金($10)でも

$23なので、$40のプランよりはお得になる計算です。

本当にこれで済むのかは微妙なところかも知れませんが。


以降では、今回の経験などメモしておきます。


1GBでは1週間もちませんでした

今回は10日間の滞在なので、$40のプランを選択しました。

店頭で支払った額は$40ちょうど。特に手数料など掛かりませんでした。


ただとても残念なことに、通信が1週間弱で1GBを超えてしまい、速度制限を受けました。

ちょいちょテザリングしたり、短時間とは言えリモートデスクトップもしたので

1GBを削るには十分すぎるデータ通信をしてしまったようです。


128kbps制限を受けると、もちろん使えなくはないものの、

画像がロードされなかったり、リモートデスクトップが絶望的になったり

インターネットマンにはちょっと辛い状況でした。


先に書いたように、この状態になるとお金を追加してもどうにもならないので、

もう一枚、SIMを買い足さざるを得なくなりました。

($10で1GBを追加できるもんだと思い込んでたんですよね・・・)


追加で買ったPay As You Go

それで次に購入したのがPay As You GoプランのSIM

なぜか契約手数料が発生して、$10(本当は$15だけどキャンペーンで安く)追加で掛かりました。


お店の人の説明では、$40のプランなどにも手数料は掛かるようだったので

最初に$40のプランを$40だけで購入できたのは、

JavaOne前の特別キャンペーンだったのかも知れません。


そんなわけで、店頭で払ったのは

月額($3)+データ通信($10)+手数料($10)+税で、$24ほど。


残高を入れないとSMSを受信できないのですが

通話やSMSは、必要な時だけ日本から持ってきたケータイを使えば良いや、

という強い気持ちを持って、残高を追加するのはやめておきました。


どうすれば良かったんだろうね?

結果論的には、$50のプランが正解だったと思います。

日本ではだいたい月に5GB、時には7GB近く使っていることを考えれば

10日間で2GB前後になることは推測できたはずです。

今回は、後から追加できないと知らなかったので、選択をミスってしまいました。


利用量を読めないなら、使った分に応じて追加購入できる

Pay As You Goの方が良いと思います。

ただ、残高やら何やらを追加するのって面倒だったりしますし、

想定外に残高が吹っ飛んで残念な目に遭うこともあるので、

その手間を考えると、通常の月額プランの方が良いんじゃないかなと思います。


そんなわけで、次も機会があるなら、3GBのプランにするかなーと思った次第です。

いや、ソフトバンクアメリカ放題を使えば、こんなことに悩まなくて済むんですけどね!

2013-10-06

[] JavaOne参加者はセッション資料がダウンロードできるようになったみたい。

ログインしてSchedule Builderからセッションを見ると、資料がダウンロードできる。

ログインしないで見られるContent Catalogでは資料がダウンロードできない。


そんなわけで、参加者の皆さんは資料をダウンロードして

きちんとレポートを書きましょう(笑)

2013-10-02

[]俺様とJavaOne 2013(後編)

いよいよJavaOne最終日です。

最終日はCommunity Keynoteと、いくつかのセッションを行なうだけで

夕方ぐらいには閉幕してしまいます。


Day 5 : 子供のプログラミング、どうしていますか?

Community Keynote

最終日、最初のセッションはコミュニティキーノート、

かつては、Gosling's Toy Showなどが行なわれていたイベントですね。

このキーノートで日本の皆さんにお伝えしたい事は、ただ一つ。


#てらだよしお が、Tシャツを投げていました!


あぁ、写真とか撮ってないです、すみません。

たぶん誰か撮ってます、そっちに期待してください。


私の席からは見えませんでしたが、James GoslingもTシャツを投げていたそうなので

この瞬間、てらだよしおはJames Goslingに匹敵するエンジニアだった、ということですね!


それはさておき、

このコミュニティキーノートで一番印象に残ったのは、教育の話です。

10〜14歳の子供を対象にしたDevoxx 4 kidsというイベントの様子が紹介され、

子供が「やった、動いた!」などと言いながら、プログラミングを楽しんでいました。


また、会場にはArun Guptaの10歳の息子、Aditya Guptaが登場して、

Minecraftというゲームをハックした時の考え方などを紹介しました。

「これはEclipseという開発環境で」「左側のソースファイルの一覧があって」などと

10歳の子供が説明するだけで会場は大盛り上がりなのですが、

恐らく、彼自身はなぜ会場が盛り上がっているのか分からなかったに違いありませんw


10歳の子供が、数千人(?)の大人を相手に、

大して緊張する様子もなく、声を震わすこともなく、説明しきった様子は圧巻でした。

会場のスタンディングオベーションも、決して過大評価ではなかったと思います。

本当に素晴らしかったです。


Devoxx 4 kidsの動画や、Aditya Guptaの発表を見るにつけ、

同世代の子供を持つ親としては、そろそろ子供に楽しいプログラミングを

教えてもいいかな、という気持ちになってきましたね。


私自身、プログラミングを始めたのは、この年代だったと記憶しています。

一つの素養として身につけるには、決して早くない時期でしょう。


今度、科学未来館に行って、プログラミングできるおもちゃを買ってくるかな。


[CON4695] Java Memory Hogs

OracleのNathan Reynoldsによるセッション

Keynoteが終われば帰る人も多い中、部屋は満席で立ち見が出るほどでした。

やっぱりメモリ系やGC系セッションは人気があります。


本当はこの前にいくつかのセッションを入れていたのですが、

Community Keynoteの後にJames Goslingとの記念写真撮影に並んでいるうちに

予約していたセッションが満席になってしまったり、

ランチで少し遠目に出ているうちに逃してしまったりなどして、

最終日のセッションはこれ一本になりました。てへぺろ。


さて、

このセッションのテーマはJOverflowを使ったヒープメモリの診断です。

というかJOverflowって、ただのヒープダンプを解析できるだけではなくて、

無駄なヒープの使い方を指摘する機能まであるんですね。いいですねこれ。


このセッションでは、実際のJavaEEアプリケーションのヒープダンプを取り、

それをJOverflowで診断して検出した問題について、改善方法や結果が示されました。


たとえば英数字しか入らないStringをcharではなくbyteで保持したら

7%ぐらいメモリ効率が上がったとか

同じ文字列のStringがたくさん重複していたからString.intern()で改善したとか

空の配列やCollectionがたくさんあったからLazy初期化するようにしたとか

そういう話です。


このセッションを通して感じたことは

「JOverflowは、ヒープダンプのFindBugs」だということですね。


たとえば空のCollectionがたくさんあるとか、

同じ文字列のStringの重複がたくさんあることなどは、

理論上は「減らせば良い」わけですが、Lazy初期化やinternを使った処理を書くとなると

パフォーマンスへの影響や、可読性の低下(処理の複雑化)は多少なりあるため

なかなか全ての場所で、理論通りにコーディングするわけにもいかないと思います。


その点、JOverflowを使い、実際に動かしたアプリケーションのヒープダンプを解析することで

「本当に問題になるところ」が分かるため、実際的に改善すべきポイントを掴めるわけです。

このアプローチ、まさにENdoSnipeと同じですね!(←これが言いたかったの?)


大事なことなのでもう一度言いますが、

「JOverflowは、ヒープダンプのFindBugs」です。

ぜひ試してみましょう。


JavaOne 2013最後のセッションでしたが、かなり面白い内容でした。


JavaOneを終えて、最後に。

そんなわけで、これでJavaOne 2013は終わりです。


今年のJavaOneで一番印象的だったことは、

もちろん私自身が初めてスピーカーを務めたことですが、それを除けば、

子供へのプログラミング教育の話でした。


同世代の子を持つ私としては、

Devoxx 4 kidや、10歳のAditya GuptaによるCommunity Keynote発表などは

非常に印象的でワクワクすると同時に、負けていられないという気持ちになりました。


一方で、Javaも転換期に来たのかな、という印象もありました。


少し話はそれますが、

先日、「教育」に関する有名ブロガーのつぶやきが話題になりました。

人が教育の話をしはじめるのは、自分の成長に限界が見えた時、

要するに「自分の成長よりも、後進の成長のほうが価値がある」と考えるようになった時だ、

というアレです。


この話も踏まえると、このJavaOneで「子供の教育」の話がなされるというのは

多くのJavaの開発者たちが、あるいは、Javaそのものが転換期に来た、

悪く言えば「焼きが回った」ところにさしかかったのかな、という印象になったわけです。

いや、たぶんに感覚的な話なんですけどね。


また、今回は新しい情報がほとんどないJavaOneでしたが、

個人的に(弊社的に)言えば、Flight RecorderやMission Controlの

裏側の仕組みや、今後目指すところを聞いたことで、

ENdoSnipeの開発も改めて頑張ろうという気になりました。


ENdoSnipeを、Duke's Choice Awardをとれるぐらいの秀逸なプロダクトにしたいなと、

そんな大きな野望を持ちながら帰国の途につきました。


よし、頑張ろう!

2013-09-30

[]俺様とJavaOne 2013(中編)

JavaOne 3日目、自分のセッション当日は

やっぱり直前まで資料準備&練習でバタバタしていました。

この性格、死ぬまで治らない予感!


Day 3 : 解析ツールのセッションは人気

3日目、僕のセッションは夜7時半からなので、

朝イチにあった面白そうなセッションに参加していました。


[CON5092] Diagnosing Your Application on the JVM

元BEAのStaffan Larsenのセッション

朝イチにも関わらず、満席になる人気セッションでした。


内容は、診断・解析ツールについて、デモを交えて次々と紹介するセッション

主に7u40から使えるようになった(7u4から使えてたものもあるけど)

「jcmd」(旧jrcmd)を中心に紹介されていました。


ちょっと列挙しますと・・・

jps : Javaプロセスの一覧を列挙する

jcmd : 引数なしならjpsと同じ

jcmd <pid> VM.uptime : Javaプロセスの起動後の経過時間

jcmd <pid> Thread.print : スレッドダンプ。jstackと同じ。

jcmd <pid> GC.heap_dump : ヒープダンプ。jmapと同じ。

jcmd -gcnew <pid> 1s : 毎秒のGC領域のサイズを見る

jcmd <pid> PerfCounter.print : JVM内部で保持している様々なカウンタを取得

などなど。


自分的に衝撃だった事と言えば、jcmdコマンドの引数で pid に 0 を指定すると

全てのJavaプロセスの情報をまとめて取れる、というところ。

実際に使う機会があるかどうかは分かりませんが、良い事を知った感がありますね(笑


またセッション後半は、このような解析ツールをリモートから実行するために、

jstatdやJMX Remoteを利用するという話や、その裏側の仕組みが説明されました。


正直、他の作業をしながら聞いていたので、かなり聞き逃してしまったのですが

リモートから診断・解析をする時に、何ができるか・できないかを判断するための

背景となる知識が得られる良い内容でした。まさにJavaOneらしい内容だったと言えます。


特に解析する機会が多いとか、開発ツールを作る立場であるとか、

そういう人は、このセッションの資料をきちんと読むべきだと思いますね、

っていうか、私も、きちんと読み直します!


ところで、セッションの後に

こんな風にスピーカーのStaffanさんに、お礼なのか挑発なのか分からないツイートをして

私のセッションに来て頂きました。我ながら、強引なことをしたもんです。


そんなわけで、夜には自分のセッションがあったわけですが

それについては、前後の話も含めて、またきちんと別エントリとして投稿します。


Day 4 - Lambda、Lambda、JFR

おはよう世界。

自分のセッションが終わった開放感からか、倒れ込むように寝てしまい

これは昼まで寝るかなと思ったら、意外と5時間睡眠ぐらいで目が覚めてしまい

時差ボケの威力を実感した早朝でした。


そんなわけで、朝から元気にセッションに参加します。

そう、僕のJavaOne参加はここから始まったわけです。


[CON2055] Programming with Lambda Expressions in Java

Agile Developer, Inc.の社長、Venkat Subramaniamによる

軽妙でウィットに溢れたLambdaのセッションでした。


内容的には、外部イテレーターから内部イテレーターの書き方の移り変わり、

Lambdaの文法やstreamの使い方や効果などを紹介するという

比較的、初級者向けのセッションなのですが、その語り口調が面白すぎて

本当に笑いの絶えないセッションでした。


直接的な表現よりも、間接的な表現を軽妙に語る事で面白さを増す感じでしたね、たとえば

  • 汚い → とても子供に見せられない。しっ見ちゃいけません!
  • 危険 → 何をやろうとしているんだ、家に帰って考え直せ!
  • 素敵 → これは食欲をそそる!

などなど。

って私はJavaOneに来て何を学んでるんですかね。


もう少し実用的なところをフィードバックすると、

やはりLambda時代にはAPIデザインが少し変わるということでしょうか。


たとえば自分で比較するユーティリティメソッドを書く際には、

isPriceLessThan(500, value) と書けるようなAPIを提供するのではなく、

isPriceLessThan(500).test(value) と書けるようなAPIを提供することで

Lambda式として利用できるようにしていました。


ちょっとこの辺り、自分でも消化しきれていないので

日本に帰ったら資料を見ながら復習しようと思います。


ってよく考えたら、このセッション

テキストエディタだけで話してたから、資料ないんだった (^^;;


[CON7942] Java 8 Streams: Lambda in Top Gear

続けてのLambdaセッション

Paul Sandozと、Lambdaの神Brian Goetzのセッションです。


streamのAPIは、集計処理などにおいて、

うまくparallel化ができるもの、できないものがあったり、

処理を途中で中断しても良いもの、全ての要素を走査するものがあるなど、

APIは、いくつかのカテゴリで「分類」することができます。


この分類次第で、parallel化した時のパフォーマンスなども変わってくるため

streamを使う際には、この分類をきちんと押さえておかなければいけない、

ということが説明されていました。ちょっと自分にはなかった視点でした。


この辺りは、資料をダウンロードして学び直す必要があるので、

ボロが出ないうちに、説明をこの辺で切り上げましょう (^^;


[CON5091] Java Flight Recorder Behind the Scenes

3日の朝イチに解析ツールの紹介していた、Staffan Larsenのセッション

前半こそFlight Recorderの紹介だったのですが、

後半はFlight Recorderの設計の話が展開され、かなり興味深かったですね。

そんな後半の話だけピックアップして紹介します。


1. Thread buffers

Flight Recorderが取得した情報は、スレッドローカルのThread buffersに貯めてから、

共有のGlobal buffersに書き出します。

こうすることで、Global buffersへの書き込みが衝突することを抑えています。

この辺りは、Flight Recorderがメイン処理に影響を与えないようにするために

欠かせない、いわば当たり前の設計でしょう。


2. Flight Recorderは永久には情報を取り続けない。

メモリリークへの対策として、情報は一定期間かサイズごとに消すか上書きしています。

これも当たり前のことですが、私は過去にちょっとやらかした事があります (^^;


3. Flight Recorderは、アプリケーションのクラスやオブジェクトへの参照を持たない。

これも、メモリリークを防ぐうえで不可欠のポリシーです。


4. クラス名はIDに変換する。

クラス名(文字列)を、int程度の数値に変換することで、

ファイルやメモリの空間効率を向上させます。

また、そのクラス名と数値のマップをFlight Recorderの出力ファイルに

持たせておくことで、互換性や移植性にも配慮しています。

こういう細かいところも、きちんと工夫しているんですね。


5. クラス一覧自体も定期的にリセットする。

クラス一覧がメモリリークの原因にならないよう、

一定期間ごとにファイルに出力して、クラス一覧をクリアしてしまいます。

(このタイミングを「チェックポイント」と読んでいました)

最後にクラス一覧をマージするかどうかは、ちょっと分かりませんでした。

マージしないと重複が出てしまって、ファイル効率がよくない気がします。


6. スタックトレースのpoolを作る。

同じスタックトレースが何度も表れることが多いため、

スタックトレースのプールを作っておいて、(全く)同じスタックトレースが

発生した場合には、前のスタックトレースへの参照を使うだけにします。

なるほど、勉強になります。


というような、ENdoSnipeの開発者的にありがたい情報がたくさんありました。

もちろんアプリケーション開発をするうえでも、このようなメモリやデータの

効率化の仕組みを「発想」することは、とても大切だと思います。

まだまだやるべき事があるのだなと、改めて思い知らされた感じです。


[CON2959] Modular JavaScript

Luminis Technologies社のSander Mak、Paul Bakkerのセッション

なんかJavaとの連携もありそうな感じのアジェンダが提示されていたんですが

実際には、JavaScriptのライブラリやフレームワークを使ったときの

packageやclassの可視性なんかを、延々延々とJavaScriptのソースで説明するセッションで、

Javaコードは全く出てきませんでした。


ここJavaOneやぞ!


4日目終わり

この後の時間帯に、kotlinのセッションがあったり、

あの #てらだよしお さんのJavaEEのセッションがあったのですが、

どうしても眠かったため、ホテルに戻って休んでいました。


聞くところによると、kotlinのセッションは10人いなかったそうです。

kotlinの過疎感ハンパない!(><)


そして寺田さんのセッションは「質問はTwitterでお願い」と言っていたにも関わらず、

バンバン質問が出て、大変だったそうです(そして、きちんと回答したそうです!)

そりゃOracleのエンジニアがJavaEEについて話したら、質問出るって!


ちなみに4日目の夜には、トレジャーアイランドで

Maroon5というバンドのライブなどあったのですが、

上にも書いた通り、ホテルに戻ってお休みしていました。


Folder5が来るんだったら、無理してでも行ったと思うんですけどね。

#行かねーよ。


そんなわけで、JavaOneも後半戦に差し掛かってきました。

2013-09-28

[]俺様とJavaOne 2013(前編)

さて、いよいよ本題のセッションレポートに入りましょう。

Day 1 : 新情報のないKeynote

今年のJavaOneの目玉は、何と言っても、KeynoteがMoscone Centerで開催されることです。

Moscone Centerで開催されるのは、実に2009年以来の4年ぶり。

Open Worldとの併設となったことで、Hilton Hotelに追いやられていた

JavaOne参加者にとっては、少し感慨深い開幕となりました。


逆に言えば、目玉はそれだけです。

驚くほど、何も新しい情報はありませんでした。


Java SE/EE/ME/FXについての新しい情報は何もなし。

それよりも、デモや芝居に力を入れている様子でした。

Avatar goes open source!

その中で、Project Avatarのオープンソース化が発表されましたが、

Project Avatar自体の言及はほとんどなく、

オープンソース化して今後もコミットし続けて行くつもりなのか、

そもそも捨てるためにオープンソース化したのかも分かりません。


正直に言えば、僕が受けた印象は後者です。


Project Avatar自体は面白い試みだと思いますし、

こういうエンジンが欲しいなという想いもあって注目していたのですが

あまりに扱いが酷いというか、存在が消えかかっている印象です。

キーノート以外のGeneral Sessionでは、全く登場しませんでした。


まぁ敢えて言えば、Avatarのようなプロダクトは、

別にOracleが作らなくても良いのかなとは思います。

これまでの、Struts、Hibernate、Spring、Vert.xなどと同様に

ユーザが作り、ユーザが育てて行く軽量プロダクトになったほうが、

動きが早くなって、結果的に良いプロダクトになるかも知れません。


総じて言うと、Avatarは「好きなんだけど、期待薄」なんかそんな感じです。

新情報がないのが何とも。

あと、期待していたJava SE 9の情報も全くなし。


Java7、Java8では、あれこれ入れると言っていたものが

入らなかったり遅れたりして出る出る詐欺みたいになってしまった経緯もあって

できるだけ決まっていない情報は出さないようにしたのかなと推測しています。


技術者のお祭りなのだから、

もうちょっと話してくれても良いと思うんですけどねー。


まぁ将来の話は、アンオフィシャルなBoFで話しましょう、という事なんでしょうかね。

英語できないから、BoFとかついて行かれへんねん!(><)


などと嘆くBoFスピーカーで、すみません。


Day 2 Mission Control 6.0では、Flight Recorderの自動解析が導入される

1日目はKeynoteのみ、2日目は1セッションのみという感じで、

ほとんどセッションに参加せずに、資料準備などしています。


いや、準備せずにblog書いてたりするんですけどね! アハハハハハハ!

原稿をしろ>俺


[CON5113]Production-Time Profiling Out of the Box

そんなわけで2日目に唯一参加したのがこれ、

JRockitの開発者Marcus Hirtのセッションです。


3年前のJavaOneで話していた「HotSpot + JRockit = HotRockit」の統合JVMが、

ようやく先日のJava SE 7 update40という形できちんと公開され、

そこで使えるJava Mission Controlや、Java Flight Recorderなどが紹介されました。

(7u4で少し使えていましたが、本格的に使えるようになったのは、7u40からです)


詳しい情報は、Marcus Hirtのblog ( http://hirt.se/blog/ ) の

最近のエントリーを読むのが良いと思います。

画面キャプチャつきでたくさん紹介されています。


個人的に一番衝撃的だったのが、ロードマップ。

将来のJava Mission Control 6.0にて「Flight Recorderの結果を自動診断する機能」が

計画されていて、これは僕も開発に携わっているENdoSnipeとガチンコになります。

これについては、色々上手くやる方法(?)を考えたいなと思っています。


ちなみにセッション中に、

JOverflowというヒープダンプ解析ツール(Mission Controlのプラグイン)を

少し試してみたら、思いのほか使いやすかったです。


「ヒープダンプのFindBugs」みたいな診断機能もついていますし、

HashMapのEntry、Entry[]、HashMap本体をまとめて { HashMap } とサマリする頭の良さとか、

間違いなく、VisualVMのヒープダンプ解析機能の上を行っています。


思わず、自分のセッション資料にJOverflowの紹介を追加しちゃいました (^^;


という感じで前半戦はおしまいです。

いやー、全然セッション出てないですね!!