Sunday, August 30, 2015

50の大台

この8月で50の大台になりました。特に感慨はないなあ。あらら〜、という感じ。

水泳続けています。少し時間が伸びて、40分から50分泳ぎます。前は30分でやめてました。

運転免許の書き換えの案内が来ています。でももう全然乗らないので放棄しようかと検討中です。

持ってるのはガラケー、PHS。iPod touchを持っていましたが、眼がちらちらするので子供にあげちゃいました。同じ年代の人はみんな似たようなこと言ってますね。眼が、、、と。持ってなくても特に問題ないです。地図がないので道に迷う可能性がありますけどね。ポットキャストは家のパソコンで聞いています。カメラは必要があればコンパクトデジカメを持って歩きます。食事の写真を撮る趣味はないので、特に不便はないです。

眼科で検診。前に眼科に行ったのは4年位前らしいです。お久しぶりです、と言われちゃいました。別に自覚症状があるわけではなく、メガネの処方と眼底の検査をお願いしました。メガネは、子供がメガネを作ったのを見て、自分も新調したくなっただけ。眼底検査は前回もやったのでついでに。視力は特に悪くなってはおらず、現状維持。眼底も特に問題はなしです。もういい年なんだから、年に一回くらいは診察を受けなさいと言われました。

今年は梅干しを漬けるところまでは普通にやったのでしたが、梅雨あけあまりに暑くて何もする気が起きず、暑さが収まったら湿気と雨が続いたので干すタイミングを逃してしまいました。そのまま瓶詰めの梅漬けになりました。

Sunday, August 23, 2015

最近の夏は暑いという話

野辺山も最近では温暖化していて、夏の夜に窓を開けて寝ることがある、という話を聞きました。野辺山あたりは高い場所なのでその程度だがもう少し高度が低いところではクーラを入れているところすらある、という話でした。

以下、気象庁の過去データからダウンロードした旬ごとの平均気温です。旬は月を3つに分けたもの。1978年11月からのデータがありました。これを見ると、8月ごろの暑い盛りの気温は微妙ですが1から2度くらい上がっているように見えます。例えば最近5年を見ると、21.2度の線を超える勢いであるのに対して、左端の5年ではそれより1割程度、つまり2度ほど低く見えます。

(本題と関係ないけれど、Googleスプレッドシートを使いました。縦軸を21.2とか10.6とか半端にするのってどういうことなのよ、と思いますね)

同じことを東京でやってみたのが次のグラフ。1990年頃までは27度程度だったものが、2010年頃からは30度です。

これ、わかりやすい指標を見つけるのが厄介なんです。最高気温をプロットしてもはっきりわかりませんでした。暑い日は暑いということなのでしょう。
あと、MacOSXのNumbersを使って集計しようとしましたが、データ量が多いと固まりますね。エクセルでもそうなりますが、メモリが足りなくなってるのだと思われます。今回はGoogle先生にお願いしました。

そういえば似たようなことを以前もやったことがありました。





Saturday, August 01, 2015

我が家のwifi

Bフレッツに入っているのですが、ある日突然繋がらなくなりました。BフレッツからAirmacを外してLANに直結してもネットに繋がらないわけです。こんなときの為に(というのはウソだけど)うちにはWIMAXがあるのでした。インターネットでBフレッツの窓口を見つけて状況を入力。翌日電話があって、その日の夕方には故障が疑われたVDSLアダプタ?DSLモデム?という黒い箱の新品が貰えました。すごい。でもWIMAXがなかったらどうなったのだろうか。うちは誰もスマフォを持ってないので。

ところで新しいDSLモデムに繋いでも、Airmacが復活しなかったので、これも新しいものを注文しました。今度のはAirmac Expressです。これが届くのを待っている間にDSLモデムとMacを直結して試しました。なんかいろいろ設定が必要だったなあ。

ともかく全て復旧したわけですが、なんか変だよね。故障していたのはモデムとAirmacのどちらか片方だったのではあるまいか、という疑惑があるのだ。いや、もう過ぎたことなので分からないし分かろうとしないわけです。前のモデムは送り返してしまったし。

Monday, July 20, 2015

CourseraのMachine Learning

CourseraのAndrew Ng先生のMachine Learningのコースを終えました。

11週間の内容で、まず毎週ビデオで解説があったあとに、演習問題があります。演習はMATLABもしくはOctaveで解くようになっていて、基本的に大体の部分が与えられていて、いくつかの関数を実装します。出来たところで答えをsubmitするとスコアが与えられます。MATLABはアカデミックライセンスのキーが貰えました。

例題はOCRがあったり、画像の認識があったり。このコースは理論より使えること重視ですね。

項目は以下のものでした。

Supervised learning
Linear regression
Feature normalization, Gradient decent

Logistic regression
Regularlized logistic regression

Multi-class classification
One-vs-all classification

Neural networks
Backpropagation

Bias vs variance
Polynomial regression

Support vector machines
SVM with gaussian kernels Spam classification

Un-supervised learning
K-means clustering
Principal component analysis (PCA)
Dimensionality reduction
Image compression with K-means

Anomaly detection and recomennder systems

Advice on building machined learning system
Stocastic gradient descent
Mini-batch gradient descent
Online learning
Map Reduce

Pipe lined machine learning
Ceiling analysis

---
ところで、MATLABを立ち上げておくと、MacOSXがリブートしてることがあるように思うんですよね。見ているときにはリブートしないので、確かめたわけではないのだけど。それでOctaveを使うようになりました。その後はリブートしたことありません。


Wednesday, July 15, 2015

freebsd

freebsdをmacのvirtualboxに入れた。

0. freebsdのサイトからboot-onlyのメディアをダウンロード。
1. virtualboxのネットワークの設定>アダプター2>ホストオンリーアダプタ を設定
2. freebsdでem1の設定を/etc/rc.confに入れる。
3. /etc/resolv.confにmacの設定と同じものを入れる。

これでpkgコマンドまで動いたと思う。この簡素な感じがfreebsdだなあ。

Monday, July 13, 2015

パラメータN

実際の数字にのっとらず、議論が観念的になることってあるよなあと思うことがあります。

知り合いの数って、1000人のオーダだろうと思うんですね。いろいろレベルはあるとしても。知り合いの知り合いまで含めると、その二乗で100万人になります。ダブりは無視しましょう。100万人オーダーの国と、10倍か100倍の国ではいろんなことが違うんじゃないかと思うのだけど、どうなのだろう。とある北欧の国の知り合いと、日本の近くのアジアの国の知り合い、それぞれ兵役があったのですが、北欧の人は兵役で良い経験をした、と言い、アジアの隣国の人は最悪だったと言っていた。サンプル数それぞれ1の危うい比較ですが。その北欧の国は小さいんです。500万人くらい。アジアの国はその10倍くらい。私の仮説は、小さい国、つまり100万人オーダーの国でないと兵役は上手く行かず、社会的緊張を高める、というものです。だって、大きな国になるとそれが「システム」になるじゃないっですか。兵役という税金以上の奴隷的作業をしているわけですから、国民が政治を見る目は非常に厳しいだろう、ということを社会的緊張と呼んでおります。

中東の某国で、兵役についた経験のある知り合いがいます。そこも500万くらいの国ですね。今の話は全部現地のネイティブの人ね、日本人はもちろん一人もいない。彼もそのことを悪く言ってなかったなあ、というのが私の仮説を強化しています。

兵役の話は以上。
和をもって貴しとなす、おまえら喧嘩するな、というのは何人まで可能なのでしょう。
民主主義は何人の集団までで可能なのでしょうか。100億人いても可能なのでしょうか。まず人数だけではなく、どれだけ多様性があるかということも問題だと思いますが。


栄枯盛衰ということがありますが、我がIT業界も私が学生だった頃は花形でしたが、今はどうでしょう。昔はとにかくキレイなイメージのある業界でした。後に実情がバレて新3K(きつい、かえれない、給料安い)と言われるようになりましたが、私と同じ年代以上のおじさんたちは気がついていないし、聞いたことがあっても忘れています。最近の学生さんの人気学科はどこなんでしょうね。情報系は不人気だと聞きます。

そこで少し気になっているのが、オープンソース。オープンソースといえば、「コミュニティ」に頼んでおけばなんとかしてくれるもの、とオジさんたちは信じているのです。そのオープンソースって、人材が無限大に供給されることを想定していません?最近でもCでプログラム書く若者っているのかなあ。日本だけの話ではないけど。減っているとすると、Linuxカーネルみたいに、20年前はみな若者だった世界はどうなって行くんだろう。若い人をリクルートできているのかなあ。だってみんな老眼になるよ?

後半の話はちょっと実数との関係は分かりずらかったかもしれないが、人数や年齢という数字を踏まえないと危ういよ、と言うつもり。




Saturday, June 27, 2015

Apache Sparkメモ#2

spark-shellからコマンドを叩いている段階から、プログラムを書く段階にすすみたい。プログラムをsparkに食わせるのをsubmitと呼んでいる。ここを読んだ。 https://spark.apache.org/docs/1.4.0/submitting-applications.html 
サンプルプログラムをsubmitするには以下のようにする。以下の例ではモンテカルロ法で円周率を計算している。

$ ./bin/spark-submit   --class org.apache.spark.examples.SparkPi   --master local[8] lib/spark-examples-1.4.0-hadoop2.6.0.jar 10
Pi is roughly 3.14154
同じことをpythonで実行する。

$ ./bin/spark-submit   --master local[*]   examples/src/main/python/pi.py   10 
Pi is roughly 3.141452
では自分で作ったファイルをコンパイルするにはどうするか。

ここのSimple Projectの例題をやってみよう。ファイルの中のaとかbの数を数えるってやつ。

http://spark.apache.org/docs/1.4.0/quick-start.html#self-contained-applications 
よくわからないのだが、上記のようにsbtを使って定義し、ビルドするらしい。sbtは以下からダウンロードした。
http://www.scala-sbt.org 
sparkのページの例題の以下のバージョンだが、私の手元のscalaはもっと古い番号なのだが、気にせず例題通りにやってみた。

scalaVersion := "2.10.4"
setはset packageで、手元にあるsbtファイルを実行してくれる。ファイルが2つある場合はどちらを取るのだろう。 とにかく、set packageを実行すると、なんやらmavenや圧縮のライブラリなど含めていろいろダウンロードが始まる。これってまともなことなのだろうか。依存関係は先に解決してくれればいいのに。すごく時間かかる。2度目からは時間かからないんだろうな。 これができていたファイル。

./target/scala-2.10/classes/SimpleApp.class
./target/scala-2.10/simple-project_2.10-1.0.jar
sbtファイルには name := "Simple Project" と書いていたのだが、できるjarファイルは小文字なんだなあ。しかも横棒が入っているし。油断も隙もない。。。
私Javaで開発やらないんで、どうもこういうJava周りの風習について行けないんだよなあ。mavenて何なのよ。

文句はともかくsubmitしてみよう。

$ ./bin/spark-submit   --class "SimpleApp"   --master local[4]   target/scala-2.10/simple-project_2.10-1.0.jar
Lines with a: 60, Lines with b: 29


spark 1.4.0からR対応が入った。例題が付いているけれど、dataframe.Rを読めばRの言葉で書いてあるので理解できる。本日一番親しみを感じるのがRという結論。実行結果は正しそうだ。

$ ./bin/spark-submit examples/src/main/r/dataframe.R
root
 |-- name: string (nullable = true)
 |-- age: double (nullable = true)
root
 |-- age: long (nullable = true)
 |-- name: string (nullable = true)
    name
1 Justin


おしまい。

Saturday, June 20, 2015

Apache Sparkメモ

Apache Sparkでローカルのファイルを読んで、必要なフィールドを抜き出すまでに引っかかったことをメモっておく。 つまりはawkやpythonならあっさりできること。 spark-shellを立ち上げると、ポート4040でjettyくんが立ち上がり、sparkの動作状況がわかるのでブラウザでみてみると良い。 Javaではファイル名に”:”が入っているのを許さないらしく、それがファイルにアクセスした時に判明する。 以下は人工的な例だが、dateを元にしてで作ったようなファイル名の場合に問題になるでしょう。

scala> val f = sc.textFile("tmp/w:1:2.csv")
その時の怒られようが以下のように相対パスがどうのこうのと意味不明なので、ちょっと覚えておこう。

scala> f.first
java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: w:1:2.csv

scala> val f = sc.textFile("tmp/w.csv")
てきとーなcsvファイルだが、カンマ区切りとして読み込むには以下のようにsplitする。pythonみたいにcsvモジュールはないってことだろうか。firstで、最初の一行を表示しているところ。

scala> f.map(line => line.split(",")).first
res2: Array[String] = Array(8, 1, 66.3)
最初のフィールドには興味がないという場合、0番目は飛ばして、1、2を タプルで保持する。

scala> f.map(line => line.split(",")).map(x => (x(1),x(2))).first
res3: (String, String) = (1,66.3)
そして、2番めのフィールドの値でフィルタする処理。

scala> f.map(line => line.split(",")).filter(x => x(2).toDouble > 67.0).map(x => (x(1),x(2))).first
res6: (String, String) = (2,67.1)
map, reduceをやろうとしている時にcsvに値の欠損があって、そこで処理が失敗するんですね。一旦csvを直して出直しました。 ペアの場合は左がキーで、valueを集計するには、単に_+_と言えば良い。scalaのアンダースコアは謎だけれど、この場合、二項演算子だということを言ってるらしい。キーが同じものを集計して出力してるところ。最初の3つを表示している。

scala> f.map(line => line.split(",")).map(x=>(x(2),1)).reduceByKey(_+_).take(3)
res5: Array[(String, Int)] = Array((65.7,1), (65.5,2), (66.1,3))
集計した値でソート。”_._2”と言っている後半の”_2”は、配列の2番目の要素の意味。scalaではなぜか

scala> (1,2,3)._2
res10: Int = 2
のように._2のように要素を指定する。ようするに[2]のこと。これって 1始まりの配列なのね。 最初の”_”は任意のものにマッチするアンダースコア。

scala> f.map(line => line.split(",")).map(x=>(x(2),1)).reduceByKey(_+_).sortBy(_._2).take(3)
res6: Array[(String, Int)] = Array((65.7,1), (66.9,1), (67.1,1))
これだと面白くないので、逆順にする。 reverseするにはsortByの第二引数でfalseというだけ。これはscalaではなく、RDDの仕様。

scala> f.map(line => line.split(",")).map(x=>(x(2),1)).reduceByKey(_+_).sortBy(_._2, false).take(3)
res7: Array[(String, Int)] = Array((63.9,17), (64.5,14), (64.2,13))
おしまい。 今回はカンマ区切りだったのでline.split(“,”)としたが、空白で切る場合はsplit(“\\s+”)とする。これはJavaの規則だそうだ。

Saturday, June 06, 2015

iTunesでのNHK語学CDのダウンロード

結論からいうと、
iTunes Storeではオーディオブック、着信音、通知音は再ダウンロードできない
ということだそうです。つまり買ったデバイスでしか聞けないということです。

それと、NHKの語学の教材のCDはオーディオブックです。

この顛末は以下の通りです。
iCloudの機能でファミリー共有ということができます。iTunesで買ったものがファミリー設定した家族と共有できるのです。この機能を使って、中学生の子供にNHKの基礎英語のCDを買って、子供のiPodで聴けるようにしようとおもいました。ところが買ったパソコンのiTunesの中でこのCDの内容を見つけるのが一苦労、さらにiPodからは全く見えない、という症状になりました。

結局、ここからhttp://www.apple.com/jp/support/itunes/contact/  電話で相談して、冒頭のことを教えてもらった次第です。再ダウンロードできないので、ちゃんとバックアップしてくださいとのことだそうです。それだと根本の問題の解決まで先が長いので、買ったコンテンツの分は返金してもらい、改めて子供のiPodから購入することにしました。

NHKの語学番組は一週間遅れですがストリーミング配信しているので、そもそもCDを買う理由はそれほどないんですけどね。