LibrePDMの日記 このページをアンテナに追加 RSSフィード

2012年09月14日 Javaのイテレータは遅い? #wdpress このエントリーを含むブックマーク

Web+DB Press の Vol.70 に、「Javaの底力 ── 火消しエンジニアが明かすテクニック【第2回】Javaでナノチューニング! …… パフォーマンスを最大限に引き出す書き方」として、このような記事が載っていました。批評のために引用します。


f:id:LibrePDM:20120914082055p:image

f:id:LibrePDM:20120914082056p:image

f:id:LibrePDM:20120914082057p:image

f:id:LibrePDM:20120914082058p:image


これは、このテスト条件下ではもちろん正しいですが、一般化するには危険な記事だと思います。

まず、Iterator が高価(遅い)と書いてありますが、Iteratorインタフェースなので、それが遅いか早いかは、当然その実装クラスに依ります。この記事は、Java6 で、実装クラスは ArrayList を使用しているので、(たまたま)遅いという結果が出ただけです。


Java7 では拡張for文を使っても、遅くなることはないという報告があります。

今更ながら拡張for文について - 草木のにをいに誘われた


Java5/6でも、LinkedList だと(データ構造上当然ですが)大幅にイテレータ(拡張for文)のほうが早いです。

Yoshioriの日記: JavaはIteratorを使うべき理由


拡張for文のほうが、Set や配列にしてもロジックを変えなくて良いし、なにより可読性が高いので、よっぽどのことがない限り拡張for文を使うべきだと思います。

この記事を鵜呑みにして、安易に『拡張for文は使用禁止』などというコーディング規約が作成されないことを祈ります。

2012年06月09日 Bonanzaのライセンスについて このエントリーを含むブックマーク

コンピュータ将棋ソフト界に革命を起こした Bonanza というソフトウェアがあります。*1

このソフトウェアライセンスは、

プログラムを無断で営利目的に利用することは禁止します.また,本プログラムを使用した上で生じたいかなる損害についても作者は責任を負いません.自己の責任において使用してください.

というものです。*2

これは、OSI の認めるオープンソースソフトウェアライセンスには該当しません*3。しかし、このソフトウェアオープンソースソフトウェアと同様に、ソースコードが公開されているのでいろんな人による研究がされ、派生ソフトウェアが数多く作られて、肥沃な成果をコンピュータ将棋界に生み出しています。*4

また、あくまで「無断で」営利目的に利用することを禁止しているだけなので、許諾を得て商用版が販売されています*5Bonanza の作者の保木邦仁さんが許諾を出す際に、何らかの金銭のやりとりがあったかどうかは不明ですし詮索するつもりもありませんが、やろうと思えば作者が利益を得ることは可能なライセンスだと言うことはできるでしょう。

つまり、Bonanzaライセンスは、知識の共有(コモンズの形成)と、作者への還元を両立できるものと言えます。こういうライセンスが、もっとあってもいいのに。と思います。CC BY-NC はこれに近いですが、Creative Commons をソフトウェアに適用することは CC0 を除き推奨されていません*6

勝手ライセンスでなく、ある程度きちんとした形での、ソフトウェアに適用できる非営利条件付きのライセンスはないものでしょうか?

*1http://www.geocities.jp/bonanza_shogi

*2:bonanza_v6.0.zip に同梱されている readme.txt より引用

*3オープンソースソフトウェアには、非営利という条件を付してはいけないんです。

*4Bonanza - Wikipedia に一部の例が載っています。

*5Amazon.co.jp:Bonanza 5.1 Commercial Edition [ダウンロード]_ダウンロード_ アマゾン ゲーム

*6 Frequently Asked Questions - Creative Commons

2012年06月05日 Maker はオープンソースの枠を超えてもいいのでは このエントリーを含むブックマーク

no title

no title

Maker Conference Tokyo 2012 #mct2012 - Togetterまとめ

裏 mct2012 オープンソースハードウェアの現状 - Togetterまとめ


あたりを見て思ったこと。

クローンで商売をするとかフリーライドの問題については、「オープンソース」である以上は当然のことと私は思っています。知的財産権による独占権が得られない以上、完全競争に近づいて、価格も生産の限界費用ソフトウェアならゼロ、ハードウェアなら製造原価)に近づくというのは、自然の原理としてごく当然のことだと思っています。現代において、オープンソースソフトウェアそのものをお金を払って買う人はほとんどいないですよね。*1

Maker が製品そのものから適正な利潤を得ることが大切だ、と考えるのであれば、何もオープンソースハードウェア(OSHW)の定義*2にこだわる必要はないと思います。非OSHWライセンスでも、ソース(設計)をオープンにできて派生作品を許容するライセンスはあります。例えば、Creative Commons の BY-NC(表示―非営利*3はどうでしょう?

原著作者である Maker の人がこの BY-NC(表示―非営利ライセンスを適用して設計を公開したならば、

となります。このような価値観を持つ人にとっては、これは結構、理想に近い形のひとつではないかと思います。

ご意見ご感想お待ちしております。


*1:サポートとかの補完品・サービスや、デュアルライセンスビジネスモデルプロプライエタリの方のライセンスにお金を払う人はもちろんたくさんいて、それで生計が成り立っている人も、もちろんたくさんいます。

*2http://freedomdefined.org/OSHW/translations/ja

*3http://creativecommons.org/licenses/by-nc/2.1/jp/

*4:できなくなると勘違いをする方も多いようです。詳しくは http://creativecommons.jp/faq?a=18#18 を参照ください。

*5:デュアルライセンス的な考え方ですね。詳しくは http://creativecommons.jp/faq?a=33#33 を参照ください。

2012年05月13日 本当にスマートフォン戦争の勝敗はついたのか? このエントリーを含むブックマーク

スマートフォン戦争の勝敗はついたのか - My Life After MIT Sloan

について。

まず、ここには Google の利益は載っていません。PC業界の利益を分析するのに、MSIntel の利益を無視して、PC製品メーカーだけを分析するのは正しくないでしょう。その意味で、垂直統合戦略をとる Apple を過大評価している可能性があります。

ただ、仮に Google の利益を考慮したとしても、やはり Apple の利益のほうが Google の利益よりも大きいです。また、Android がそのままでは使い物にならない品質であるとか、Android 陣営は利益率を犠牲にして、市場シェアを取っているというのも概ね正しいと思います。

しかしながら、それでも Android は急速にシェアを伸ばしています。

http://upload.wikimedia.org/wikipedia/commons/a/ae/World-Wide-Smartphone-Market-Share.png

Google は制限なく Android OS を公開し、端末メーカーに完全競争に近いレッドオーシャンでの競争をさせるのが戦略であると考えられます*1Android 陣営の利益の総額が少なくなるのは、Google の狙い通りで戦略が上手くいっている証拠であるとも言えます。

では、Google はなぜ無料で Android OS を公開するのか? 欲しいのは、Androidインストールドベースでしょう。Google Play Store*2 での収益や、他サービスとの相乗効果(範囲の経済)はインストールドベースからもたらされます。端末メーカーは基本的には端末販売時にだけ利益を計上できますが、インストールドベースはその積み重ね(積分値)です。

GoogleApple を(利益で)逆転できるかどうかは、Google が獲得しつつある巨大なインストールドベース*3を今後いかに活用できるか? にかかっていると思われます。まだ勝負はこれからで、これからが面白いところではないでしょうか?


*1MSIntel の戦略と類似していると思います。

*2:旧Android Market

*3:ただし、先進国では相対的に iPhone が強く、途上国では相対的に Android が強い(一例)ので、インストールドベースの数では Google だが、質では Apple が勝る、という見方もあると思います。もしくは、Android はローエンド破壊型イノベーションの条件を満たしている、という見方もできると思います。

2011年12月08日 収入の少ない人ほど、松井候補に投票? このエントリーを含むブックマーク

2011年大阪府知事選挙で、「大阪維新の会」の松井一郎候補が当選しましたが、松井候補の市町村別の得票率と平均所得は逆相関、つまり所得の低い市町村ほど松井候補の得票率が高かったことが、わかりました。

「収入の少ない人ほど、松井候補に投票」:2011大阪府知事選の検証 - 進化する大人たちへ

という分析がありました。これを、もう少し別の角度から分析をしてみたいと思います。


知事選各候補の市町村毎の得票率を計算して見ていたら、ある事に気づきました。松井候補は主に南部で得票率が高く、北部で得票率が高くないように見える、ということです。どうやら、得票率と地域性に関係があるように見えます。

大阪では、「豊中箕面吹田といった北部は所得が多く、逆に泉佐野貝塚のような南部では所得が低い」というイメージがあります。となると、松井候補の得票率と、市町村毎の平均所得との間に、関係があるかもしれません。そこで、検証してみる事にしました。

「収入の少ない人ほど、松井候補に投票」:2011大阪府知事選の検証 - 進化する大人たちへ

所得と得票率の相関は、R^2 = 0.1578 で、t検定は1%有意ですから、関係はあるといえるでしょう。ただし、そもそも地域性それ自体が最も重要である可能性が高い気もします。なぜなら、松井候補の地元の八尾市は松井候補の得票率が2位、逆に倉田候補の地元の池田市では松井候補の得票率がワースト2位だからです。要するに、候補者の地元が有利であったということです。

f:id:LibrePDM:20111208171637p:image:w240

そこで、各自治体市町村役場の場所から、(池田市役所からの距離)−(八尾市役所からの距離)を求めて*1、それと松井候補の得票率の相関を見てみました。その結果、R^2 = 0.3538 で、t検定は0.1%有意となりました。つまり、所得より自治体の位置のほうが得票率との相関が強いことがわかります。

f:id:LibrePDM:20111208171636p:image:w240

よって、「収入の少ない人ほど、松井候補に投票」しているように見えるのは、

から導き出された「擬似相関」であり、「収入の少ない人ほど、松井候補に投票」ということ自体には因果関係は薄いと見るのが妥当ではないかと思われます。


Rで計算した結果を以下に載せます。


R version 2.13.0 (2011-04-13)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-pc-mingw32/x64 (64-bit)

Rは、自由なソフトウェアであり、「完全に無保証」です。 
一定の条件に従えば、自由にこれを再配布することができます。 
配布条件の詳細に関しては、'license()'あるいは'licence()'と入力してください。 

Rは多くの貢献者による共同プロジェクトです。 
詳しくは'contributors()'と入力してください。 
また、RやRのパッケージを出版物で引用する際の形式については 
'citation()'と入力してください。 

'demo()'と入力すればデモをみることができます。 
'help()'とすればオンラインヘルプが出ます。 
'help.start()'でHTMLブラウザによるヘルプがみられます。 
'q()'と入力すればRを終了します。 

> matsuivoting<-c(64.1,61.2,61,60.9,60.5,60.4,60.1,60,59.7,59.3,59.2,59.1,58.7,58.7,58.7,58.7,58.6,58.5,58.5,57,56.8,56.6,56.4,56,56,55.6,55.6,55.3,55.1,55,54.8,54.6,53.6,53,52.8,52.5,51.9,51.9,51.3,51.2,49.8,35.6,33.5)
> income<-c(320,350,332,349,340,335,325,364,347,349,359,318,332,321,333,387,323,311,364,332,398,323,373,384,335,380,359,369,351,332,372,358,389,373,380,339,421,420,356,464,418,403,332)
> summary(lm(matsuivoting~income))

Call:
lm(formula = matsuivoting ~ income)

Residuals:
     Min       1Q   Median       3Q      Max 
-24.0829  -1.1936   0.4059   3.0643   5.6962 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 80.29594    8.88834   9.034 2.65e-11 ***
income      -0.06841    0.02468  -2.772  0.00834 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 5.343 on 41 degrees of freedom
Multiple R-squared: 0.1578,     Adjusted R-squared: 0.1373 
F-statistic: 7.683 on 1 and 41 DF,  p-value: 0.008345 

> northlat<-c(34.406847,34.626863,34.437662,34.359582,34.504279,34.366004,34.737695,34.520717,34.579305,34.73994,34.483526,34.487092,34.67933,34.316977,34.460634,34.458084,34.712015,34.73915,34.401282,34.577879,34.503795,34.777356,34.81434,34.518681,34.766092,34.816338,34.566226,34.491636,34.558034,34.393774,34.574277,34.846158,34.787943,34.883924,34.499527,34.657518,34.759452,34.781265,34.464587,34.82693,34.937174,34.821705,34.97255)
> eastlon<-c(135.327337,135.600978,135.358452,135.23967,135.410464,135.273339,135.563904,135.442452,135.628642,135.639533,135.423557,135.401323,135.601012,135.142139,135.370829,135.564226,135.623659,135.586893,135.355785,135.55185,135.555693,135.561817,135.650658,135.647661,135.6281,135.568505,135.482556,135.629699,135.606212,135.291174,135.597474,135.617272,135.679953,135.66297,135.597128,135.497547,135.51686,135.469739,135.622537,135.470463,135.450524,135.428444,135.414274)
> distance<-sqrt((northlat-34.821705)^2+(eastlon-135.428444)^2)-sqrt((northlat-34.626863)^2+(eastlon-135.600978)^2)
> summary(lm(matsuivoting~distance))

Call:
lm(formula = matsuivoting ~ distance)

Residuals:
    Min      1Q  Median      3Q     Max 
-14.486  -2.043   1.339   2.937   8.312 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  53.9217     0.8126  66.356  < 2e-16 ***
distance     24.5910     5.1905   4.738  2.6e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 4.68 on 41 degrees of freedom
Multiple R-squared: 0.3538,     Adjusted R-squared: 0.338 
F-statistic: 22.45 on 1 and 41 DF,  p-value: 2.597e-05 

> summary(lm(income~distance))

Call:
lm(formula = income ~ distance)

Residuals:
    Min      1Q  Median      3Q     Max 
-51.795 -24.821   3.204  20.957  83.777 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  364.568      5.537  65.838   <2e-16 ***
distance     -79.657     35.370  -2.252   0.0297 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 31.89 on 41 degrees of freedom
Multiple R-squared: 0.1101,     Adjusted R-squared: 0.08838 
F-statistic: 5.072 on 1 and 41 DF,  p-value: 0.02973 

*1http://www.geocoding.jp/で各市役所の緯度・経度を調べ、距離を得ています。緯度または経度が1離れている距離を1としています。池田市役所と八尾市役所の中点は0、そこから池田市役所に近づくにつれマイナスに、八尾市役所に近づくにつれプラスになります。

*2:距離と所得の相関を見てみると、R^2 = 0.1101 で、t検定は5%有意