(O+P)ut

頭の整理のために、Slerで働く若手インフラエンジニアが、【 (O+P)ut = OutPut 】していく場です。

【R言語】二次元配列の可視化手順

2次元配列(行列)を可視化する場合に使えるimage関数を実例を示しながら紹介します。

まず、元となる2次元配列ですが
R言語にてデフォルトで入っているサンプルデータAirPassengersを用います。アメリカの航空会社から提供されたデータで、1949年から12年間の国際線旅客数の毎月の合計が入っています。

> str(AirPassengers)
 Time-Series [1:144] from 1949 to 1961: 112 118 132 129 121 ...

といった具合の、12年x12月の計144つの値の可視化を順を追って説明していきます。コードのコピペで動作させることも可能です。

まず、こちらを2次元配列に格納します。

> airpass <- AirPassengers
> m_airpass <- matrix(airpass,ncol=12)

行列m_airpassの値の入り方は以下のようになります。行と列の入り方を逆にする場合は byrowオプションを使いますが、今回はこのままでいきます。
f:id:mtiit:20170920230958p:plain

これをそのままimage関数にて可視化したものがこちらです。
f:id:mtiit:20170920232527p:plain


少し見にくいですよね。その理由として、下記の2点があるかと思います。
・image関数のデフォルトでは、値が小さいものほど色が濃くなっている
・x軸、y軸の値が入っていない。

この2点の修正と修正結果は以下となります。

> image(1:12,1949:1961,max(m_airpass)-m_airpass,xlab="",ylab="",axes=FALSE)
> axis(1,1:12)
> axis(2,1949:1961)

f:id:mtiit:20170920232823p:plain
max(m_airpass)から値を引くことによって強制的に値を反転させています。そして、軸の表示をimage関数と分けて行うことで、表示したい値を画像に追記することができます。

image関数による可視化は以上です。ご参考ください。


【街コン】卓球コンに行ってきた話する?【感想】

先日、初めての街コン(卓球コン)に行ってきました。

f:id:mtiit:20100823192117j:plain

開催場所は、東京都区内ですが、最寄り駅としては乗降人数2万人/日くらいの少しこじんまりしたスポーツセンターのようなところです。*1

まずは、男女比ですが、男性が8人、女性が4人でした。

この時点で あれ? と思ってました。

なぜなら、案内のところには 男女比1:1 と明記されていたからです。

司会進行のお姉さんが、「女性陣は到着が遅れているので、先に始めちゃいましょう」といって街コン自体が始まり、最後まで現れなかったです。
勘を働かせれば、「最初からこの人数で全員だが、あたかも遅刻という体裁をとってるのかな?」とか思えちゃいますが、その辺の真相はわからないですね。この手の運営スタッフの方がこの記事を見ていたら教えてほしいレベルです(笑)

全体の流れとして、

  • 自己紹介タイム
  • 卓球タイム
  • 連絡先交換タイム

です。

自己紹介タイムですが、区切りも何もないところで順番に男女で事前に記入した自己紹介カードを交換しながらお話しする感じですが、なにせ男女比がおかしいので半分の男性はぼーっとしていました。やっぱり男女比をそろえるってのは、街コンだとかなり重要な気がしました。

f:id:mtiit:20170826160007p:plain
(待ってる間は暇というか、苦痛でした。。。)
(私が司会なら、うまいこと男性同士でも話す場を作りますね。)

 

卓球タイムでは、2グループに分かれて進め方も本当に自由に丸投げされました。経験者の割合によっておそらく異なるんでしょうが、1グループは本気で試合をしていて、もう一つのグループではしりとりをしながらラリーを続ける、といった具合です。こういう時に、参加者の雰囲気を感じ取って、こういう風にして遊ぼう~って決めれるリーダーがいるといいですよね。ちなみに、男性8人のうち経験者は6人、女性4人のうち経験者は3人でした。割と多くて意外でした。

そして最後の、連絡先交換タイムではLINE等々を交換する時間です。趣味コンのいいところかもしれないですが、同性とも仲良くなれて、むしろそっちの方が収穫だった気がします。一応、気になった人に連絡先を渡すための用紙は用意されてましたが、皆さんスマホを片手に自由にやっていました。少人数ならではって感じがしました。

 

さて、個人的な総論ですが、、、

次はもう少し人が集まりそうな場所での開催地に行きたい です。

やっぱり少人数すぎると、異性でタイプの人がなかなか見つからないですよね。街コンのいいところは、直接連絡先をぐいぐい聞きに行かなくてもスタッフを通して後でこっそりってのができるところだと思うので、まずはそういう人が現れるためにも分母は必要だと思っちゃいました。男女ともに、20代が半数、30代が半数といったところで、個人的には非日常な集まりに楽しめました。解散した後も、ごはんを食べに行ったりして本当に新しい友人ができたような気持ちです。

 

ただ、男女比問題があったので、次回からはこの運営会社さんのは避けてみようかな?と思ってます。別に発表してもいいんですが、一度の出来事で批判めいたことを書くのもどうかと思うので今回は伏せておきます(笑)

 

街コンへの参加を検討している方は、ご参考ください!

 




 

 

*1:例えば、新宿は80万人/日くらいで、宇都宮駅が4万人/日くらいです。

【宇宙兄弟】×【プラネタリウム】 ”南波六太がやってきた”を見てきた感想(※ネタバレあり)

2017年8月17日、池袋のコニカミノルタプラネタリウム“満天”in Sunshine Cityに 「Space Dreamers 〜宇宙兄弟 南波六太がやってきた!〜」を見に行ってきました。

f:id:mtiit:20170817154213p:plain

私は、宇宙兄弟の原作は読んでないですが、アニメ99話+映画エピソード#0 はがっつり見た、といったところで、宇宙兄弟プラネタリウムとコラボするということでかなり楽しみにしていました。

 

あらすじは、以下です。

ムッタが宇宙飛行士として月へ向かう、少し前―――。
月を眺めながら物思いにふけるムッタの元に、いつも聞いているラジオ番組「モーニングレディオ」から、なんと公開収録の依頼が。ISSとの中継コーナーではせりかとも話せるとあって、快くその依頼を引き受けたムッタを待っていたのは、かなり見覚えのある顔をした、自称“DJパープル”。公開収録に集まった人々の「どこからが宇宙なの?」「宇宙人はいるの?」といった宇宙に関する素朴な疑問に、ムッタが宇宙飛行士ならではの視点で答えてくれる。

 

アニメ版ではムッタはバックアップクルーで月行きは決定しておらず、せりかさんもまだISSには行っていません。そういう意味では、アニメの最終話よりかは、後の設定ということですね。では、以下が所感です。

ネタバレ要素もありますので、閲覧する際はご注意お願いします。

 

 

 

 

電話で、ムッタにラジオのオファーがあるところから始まります。

ここは、アニメを見た人ならピンとくる声です。私は、「あれ?同じ声優さんなのかな?」くらいにしか思ってなかったのですが、電話の主(DJ)とムッタが対面すると、ムッタも気づきます。そうです、紫三世 がDJ役でした。ムッタとせりかから 紫さんですよね? ってつっこみが入りまくりますが、あくまで知らんぷりを続ける流れはおもしろかったです。

 

DJ紫の進行のもと、ムッタは子供たちからの質問に答えていきます。

最初に、いろんな子供たちにフォーカスがあたる中で、ある一人の女の子に少し違和感を感じました。なぜなら、その女の子に飲み物を与える父親が、わざわざ口元まで持っていってあげていたからです。その時は「過保護な親っていう設定なのかな?」くらいしか思いませんでしたが、この前フリは後半にて回収されることになります。

 

質問するそれぞれの子供は、わざわざラジオの現場に行くくらいに宇宙が大好きのようで、興味深い質問も多く、それに対してムッタも真剣に回答します。ISSが400km上空を飛んでいる、なども視覚的にわかりやすいようにCGを駆使した演出になっており、見ていて爽快感がありました。

質問の途中に、ISSにいるせりかさんと中継がつながり、せりかさんは原作通り「ALS( 筋萎縮性側索硬化症)に効く新薬を作成するために、日々取り組んでいます。」というメッセージを聴衆に伝えます。それを聞いて、さっきの親子にまたフォーカスがあたります。

ラジオイベントは終わり、最後にエンディングが流れます。そのエンディングの中で、せりかさんがALSに効く新薬の発見が進んだことが触れられたり、質問した少年・少女の その後 が 一枚絵 にしてぱらぱらと流れます。その中で、「ALSに効く新薬の発見のニュースを聞いて涙を流す夫婦」という一枚絵が挟まれました。

 

なるほど。

お父さんとラジオイベントに来ていた少女はALSという設定だったようです。

 

スクリーンには最後に、「これは架空の話だが、宇宙に興味を持ってくれれば増えるほどこの話が実現するのも近くなります」といった趣旨のメッセージが表示されました。誰かの役に立ちたくなる話です...

  

全体的な感想ですが、とても満足でした。一応、宇宙兄弟のストーリーを最初に解説しているので、まったく知らない方がいってもそこそこは楽しめるとは思います。ただ、紫さんや、せりかさんの強い思いなどを知ってると、より入り込めると思います。

原作が好きな方は、行って間違いなし、そう思えたプラネタリウムでした。

【雑学】地球はビリヤードボールになれるのか

f:id:mtiit:20170817171732j:plain

何事にもルールや規格というものがありますが、サッカーボールや野球ボールにももちろんルールがあります。

例えばサッカーボールの公式規格は

  • 球形である。
  • 外周は68-70cmとする
  • 重さは410-450gとする
  • 空気圧は0.6-1.1気圧とする
  • 革皮または適切な材質である
とあります。「球形である」って...
なかなか曖昧で笑えます。
ちなみに、サッカー競技規則を見にいってもこれ以上詳しい記述がない。

f:id:mtiit:20170817171443p:plain

そんな中で、ミリ単位の誤差が勝負を左右する ビリヤード の球には、「球である」以上にしっかりした規則があります。以下は、ビリヤードの中のスヌーカー*1用ボールに関する規格です。
 
直径52.5ミリメートルの大きさに規格化されており、0.05ミリメートルの誤差が許されている。
いいですよね。厳密で、こういう記述は好きです。
 
さて、ここからが本題ですが、「地球の球のなめらかさは、ビリヤード球の規格にも通るほどである」といった文章を昔どこかで読んだ記憶があります。それを、ここで検証してみよう、というのが本記事となります。
 
まず、地球は完全な球体ではないです。
なぜなら、地球はくるくると回っているため、赤道部分が遠心力で少しふくらんでいます。よく、ミカン型と例えられたりしますね。
f:id:mtiit:20170817173121g:plain
ざっくり、球の円周?は40000キロと言われますが、
 
赤道の全周:40070.368キロメートル
子午線の全周:40003.423キロメートル
 
というのが現在の観測値です。
 
今回は、この値を元に検証を進めます。
 
上記二つの全周ℓを持つ球体がいると仮定すると、半径rは r = ℓ/2π  となりますよね。円周と半径の関係、懐かしい公式です。
 
この公式を元に 半径 r を出すと、
 
赤道の全周を元にした球の半径:6377.398キロメートル
子午線の全周を元にした球の半径:6366.743キロメートル
 
となります。
 
この半径の誤差をパーセントで表すと、
(6377.398-6366.743)/ 6366.743 → 0.167%
 
となります。
 
ビリヤード球は、52.500mmに対して0.05mmの誤差が許されているので、その誤差をパーセントで表すと、
0.05 / 52.5 → 0.095%...
 
中心から表面への誤差は許容外に見えます、、、
 
なんて、ここまで計算していて気づいているのですが、おそらく前提として、地球は 完全な球体 であり、ヒマラヤ山脈の頂点 と マリヤナ海溝 の凸凹 を考慮した場合、ビリヤード球の規格にも合致する、ってことがその本では言いたかったのかもしれないですね。
 
上記の考え方で、指摘等あればお知らせください。何か間違えてる気がしないでもないので・・・
 
以上、地球がビリヤード球の規格に通るくらい球体なのか論争、でした。
 
 

*1:15個ある赤球とカラーボールを交互にポケットに落としていく、といったものでイギリスでは大変人気があるようです。

【Linux】指定した列を特定の単語で検索し、表示する【awk】

タイトルの通りで、grepコマンドを用いると行全体で検索がかかってしまう、それを避けたい時に使うワンライナーが以下となります。

cat ファイル名.csv | awk 'BEGIN{FS=","} $3 ~ /hoge/ {print $0}'

上の場合、csvファイル、つまり区切り文字が カンマ(,) なので field separator を "," としています。カンマ区切りされた行の3列目に hoge という文字列が含まれていれば 行全体を表示することができます。$0 は行全体という意味なので、任意のX列目が欲しければ $X としてください。

以上、かなり短い かつ とても簡単 ではありますが、Google検索で探そうとするとなかなかヒットしなかったので、キーワードをちりばめながら備忘録程度に書いてみました。

【超絶入門】データベースとインスタンスの違い

データベースとインスタンス、二つのキーワードの関わりについて簡単に説明してみます。

よく見る全体像の図は以下のようなものだと思います。(以下、図①)

Oracleのアーキテクチャより抜粋
これをもう一段階簡略化し、ユーザーを入れ込んだ図がこちらになります。(以下、図②)
f:id:mtiit:20170723180955j:plain

では、こちらの図②を軸に説明してみます。

1)インスタンスとは

インスタンスは、データベースとユーザーの中間に位置しており、ユーザーはデータベースを直接操作する代わりにインスタンスを介して操作することになります。インスタンスの中身に関しては、図①にあるように SGA(=メモリ構造) と プロセス群 で構成されています。
細かいことは置いておきますが、インスタンスを介して操作を行うことは、データの安全性やパフォ-マンスの向上につながります。インスタンスは、サーバーにいます。

一つのデータベースには、基本的に一つのインスタンスです。

2)データベースとは

こちらはイメージがしやすいかもしれません。いわゆる、データファイルをはじめとする物理ファイルです。図①にもその他とありますが、データベースに対する変更情報を管理するファイル等々があります。データベースはストレージにいます。

以上が超絶入門です。


以下はおまけです。データベースとインスタンスが1:1ではない例とメリットです。

f:id:mtiit:20170723223913j:plain

これのメリットは、複数のデータベースをより少ないメモリで管理できることにあります。
逆にデメリットとしては、インスタンスの障害がそれに紐づくすべてのデータベースに影響を与えてしまいます。


f:id:mtiit:20170723223923j:plain
これのメリットは、インスタンスの停止等の障害にも対応することができる点にあります。
逆にデメリットとしては、メモリやプロセス等の多くの資源が必要となります。

もちろん、この二つを組み合わせた複数インスタンス→複数データベースもあります。もっと細かい話に関しては、別の記事をご参考ください。

以上です。

【Java】複数画像を元にGIF画像生成

f:id:mtiit:20170909134236j:plain
Twitterの話題ワードがどのように遷移しているかをGIFで可視化するという記事ですが、
【R言語】Twitterより取得した話題ワードの遷移可視化 - (O+P)ut
上の記事は文字列から一意の座標を生成するところにフォーカスをあてていました。

今回は、Javaを用いて大量のJPEG画像からGIF画像を生成する手法について紹介します。
というのも、実は海外の方*1が書いたソースコードがネットに転がっていました。
http://elliot.kroo.net/software/java/GifSequenceWriter/GifSequenceWriter.java
特別なライブラリも必要なく、コメントもしっかりと記述されているのでとても参考になります。

ソースコードを見てみると、

ImageOutputStream output = 
new FileImageOutputStream(new File(args[args.length - 1]));

となっています。つまり、引数argsの末端が出力GIFのパス、それ以外は入力画像のパスという仕組みです。
今回はディレクトリ直下の画像のパスを取得し、pathlistという新たな配列を用意してargs代わりに使いました。*2

String path = "hoge"; //画像が置いてあるディレクトリ
File dir = new File(path);
File[] files = dir.listFiles();
String[] pathlist = new String[files.length];
for (int i = 0; i < files.length; i++) {
 pathlist[i] = files[i].toString();
}

あとは、args部分をpathlistに置き換えて実行すれば問題なく稼働します。

timeBetweenFramesMS

という変数で、フレームの切り替わりの時間を管理しているので、そこは適宜変更してみてください。ループするか否か等も変更可能です。

私がGIFを作る時は、"サブリーン"というウェブサイトの"パラパラマンガ"機能をよく使いますが、
プログラムとしてGIFが生成できるというのも、自動化等を考えた際には有効だと思います。
ご参考ください。

*1:Elliot Kroo氏作

*2:dir.listは、取得順序が不明なようです。本来は、きちんと名前順でソート等も必要ですが今回は目視して名前順になっていたのでソートしてないです。