まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

2016年12月

この記事の続きです:
2016 マンホーラー実態調査

2016年にマンホールマップでもっとも人気のあったマンホール蓋をベスト10形式で紹介します。また今年新たに投稿された蓋の中で最も人気があった「新人賞」と、今年最も多くの蓋画像を投稿いただいた方「最多投稿賞」を紹介します。

集計のルールとしては 2016/Jan/01 から 2016/Dec/20 までの間に、PC およびスマホのブラウザから単独ページとしてのアクセス数を集計しています。ページビューとしての集計なので、例えば同じページの画面をリロードした場合は1回とだけカウントされます。

過去2回の結果はこちらを参照ください:
2014 マンホールマップ年間アクセス数ランキング
2015 マンホールマップ年間アクセス数ランキング


2016 最多投稿賞

今年マンホールマップに最も多くの画像を投稿いただいたユーザーに与えられる賞です。実は今年のマンホールマップに投稿された全 836 画像のうちの半分以上はなんと2名のユーザーによって提供されたものでした。感謝の限りでございます。 m(__)m

さて、そのデッドヒートを制した最多投稿賞は・・・ 42ER03 様でした。歴史的な蓋から海外蓋まで幅広く投稿いただきました。ちなみにマンホールマップ全体で現在使っているハードディスク使用量の約 5% は 42ER03 様の投稿データだったりします(笑)。

そして例年であれば1位になるレベルの投稿をいただきながら2位となったしこれんminamu4545)様。マンホールナイト8でも発表いただいた展示蓋を中心に多くの投稿をいただきました。展示蓋という新ジャンルを確立されたといってもいいと感じました。


#どうでもいいことですが、私自身はお二人に大きく離されての4位でした。来年もがんばります。


2016 新人賞

今年マンホールマップに投稿された蓋の中で、最も多くのアクセス数を記録したのは、この蓋画像でした:
市区町村投稿者画像
朝鮮民主主義人民共和国42ER03


今年の新人賞はなんとピョンヤンの蓋!撮ってよかったのか!?という疑問は置いといて、最多投稿賞も受賞された 42ER03 さんの投稿でした。 42ER03 さんは昨年のモンゴル蓋に続いて「2年連続新人賞」(!?)という偉業を達成されました。最多投稿と合わせて2冠ですね、素晴らしい! 改めておめでとうございます。


2016 年総合ランキングベスト10

さて、今年のマンホールマップアクセスランキングには大きな特徴がありました。それは「今年投稿された蓋画像のアクセス数が多かった」ことです。 例年は「その年に投稿された蓋(以下「新人蓋」)画像のアクセス数」は「以前に投稿された人気画像のアクセス数」と比べて明確に劣るという特徴があり、そのため「新人賞」という別枠を作っていたという背景もありました。投稿されたのが年の後半になるほど総アクセス数を稼ぐのが不利になるのも事実であり、現実問題として過去に新人蓋がベスト10に入ったことはありませんでした。

ところが今年はベスト10の中に3つベスト11~20の中に5つも新人蓋が入るという異常事態が起こってしまいました。来年以降の「新人賞」という枠の存在意義がなくなってしまいかねない状況です。びっくり。

そしてこの総合ランキングトップとなる MVM(Most Variable Manhole) には、上記 42ER03 様の三冠、昨年&一昨年を制したやなぽん様の三連覇もかかっています。ドキドキなランキング、まずは10位から4位まで:


順位昨年順位市区町村投稿者画像
105石川県河北郡内灘町keymoyaking


↑10位はマンホールマップでの最多「ナイスマンホ!」記録を現在も持つ石川県河北郡内灘町のかもめマンホールでした。このマンホールは唯一三年連続ベスト10入りした蓋となりました。常に安定した人気を誇る、マンホールマップを代表する蓋でもあります。


順位昨年順位市区町村投稿者画像
9-山梨県甲斐市minamu4545


↑9位は山梨県甲斐市のマスコットキャラクター「やはたいぬ」がデザインされたマンホールでした。マンホールカードのデザインとしても採用されています。アクセス数にはカードの影響もあるでしょうね。ちなみにこの蓋は新人蓋です。


順位昨年順位市区町村投稿者画像
8-大阪府吹田市mnakam2003


↑8位は大阪府吹田市の吹田サッカースタジアム周辺にあるガンバ大阪マンホールでした。吹田市といえば「太陽の塔」マンホールが有名ですが、新しい名物マンホールになりえるマンホールです。


順位昨年順位市区町村投稿者画像
7-岐阜県美濃加茂市SatoMachiya


↑7位は岐阜県美濃加茂市稲辺地区の紫陽花&カエルマンホール。紫陽花は市の花だそうで、カエルは汚水をきれいな水に「変える」意味でデザインされているとのことです。


順位昨年順位市区町村投稿者画像
62群馬県高崎市TMW_papa


↑6位は昨年2位だった群馬県高崎市の「ぐんまちゃん」マンホールでした。2年連続のベスト10入りとなり、根強い人気を感じます。存じ上げなかったのですがサッカーに力入れてるんでしょうかね??


順位昨年順位市区町村投稿者画像
5-兵庫県明石市42ER03


↑5位は兵庫県明石市に子午線マンホール。実はマンホール画像ではなくスタンプの画像なのですが・・・ まあアクセス数が多かったのは事実なのでいいとしましょうw これも新人蓋でした。


順位昨年順位市区町村投稿者画像
4-朝鮮民主主義人民共和国42ER03


↑4位は新人賞をとったピョンヤンの風景と蓋の画像でした。当たり前といえば当たり前ですが、(日本でも下水が普及していないと見つかりにくい地域がある中で)ピョンヤンにもマンホールは存在してるんですね。。その証拠とも言える貴重な画像だと思います。マンホールマップなんかで公開してていいのだろうか・・・


ではランキングトップ3の発表です。

第3位

順位昨年順位市区町村投稿者画像
31北海道岩見沢市yanapong


↑昨年の MVM だった、北海道岩見沢市(旧栗沢町)、やなぽんさん提供の「リスのクリちゃん」マンホールでした。今年は3位でしたが、2年連続トップ3を記録したのは初めてだったりします。隠れた人気蓋ですが、栗沢町が岩見沢市との統合でなくなってしまったこともあり、現在では新設されることのない、貴重なマンホールとなっています。

第2位

順位昨年順位市区町村投稿者画像
26茨城県つくば市kenitirokikuti


↑昨年も6位と人気のあった茨城県つくば市のスペースシャトルマンホールでした。コンスタントに人気の高い蓋です。背景にはつくばのシンボルでもある筑波山がそびえ、土星のようなよくわからない星(?)が描かれたマンホールです。ブラジルっぽい色合いも特徴的で、これもマンホールカード化されています。


今年のベスト10蓋は例年以上にカラー蓋が多くランキング入りしています。マンホールカードの影響もあると思いますが、マンホール観賞がより一般的に広まってきた証拠かもしれません。嬉しいことです。

そんな今年の栄えある MVM は!? 42ER03 さんの三冠と、やなぽんさんの個人3連覇の行方は果たして!!??


第1位






































順位昨年順位市区町村投稿者画像
1-東京都港区dotnsf


・・・僕が投稿したやつだ。。 (O.O;

カラー蓋でもないし、マンホールカードにも採用されてないし、デザインもアレだし、、、ちなみに知り合いの家の近くで撮影した、エバタ株式会社のインバート蓋です。なんか見たことなかったので。。

いや、あの・・・ 僕が試験的に負荷をかけたとか、そんなことはないんですが・・・ とりあえず、ごめんなさい。。。


この蓋は特別アクセスが多かった日があったわけではないのですが、夏頃に連続して何度か参照されたことが積み重なってアクセスが記録されていました:
2016122101


加えて、参照されたページを調べてみると、この蓋はスマホ版のスライドパズルでのアクセスが 47%(図の青)もありました:
2016122102


たしかにスライドパズルでは比較的難易度の高い蓋だと思いますが、誰か愛好者がいたんですかね。。:
2016122103


実は昨年の MVM もスライドパズルでアクセス数をかせいでの1位でした。スライドパズル機能は作者である僕が考えている以上に使われている機能なのかもしれません。。。ただ、それにしてもなんでこの蓋を・・・ 奥深い何かが潜んでいるのかもしれません(マンホールだけに)。


最後になりましたが、今年はマンホールカードの配布など、マンホールの認知度を広めるという意味では大きな節目となった1年であったと思います。マンホールマップのアクセス数も大きく増え、内部の話をするとサーバーにかかる負荷も大きくなっております。嬉しい悲鳴です。

来年も皆様に安心してマンホールマップを使っていただけるよう、新機能だけでなく、安定運用にも注力していこうと思っています。引き続きマンホールマップをよろしくお願いします。

そして MVM 、中の人が取っちゃってごめんなさい!でも本当はすごく嬉しいですっ!!

今年もマンホーラー実態調査の結果発表の季節がやってまいりました! 2016/Jan/01 から 2016/Dec/19 までのマンホールマップと連携した Google Analytics とアクセスログ、そして実データを使って、2016 年のマンホーラー(注 マンホールが好きな人)の実態と傾向を浮き彫りにする、というビッグデータ解析企画です。ちなみに昨年と一昨年の結果はこちらから参照ください:
 2014 マンホーラー実態調査
 2015 マンホーラー実態調査


2016 マンホールマップ利用動向

2016122002

1回のセッションでの平均ページ数は 4.69、直帰率は 53.53% 、平均セッション時間は 4 分 43 秒でした。昨年は 4.65 と 56.77%、4分22秒だったので全ての数字が改善の方向で推移しています。昨年と比較して、マンホールマップを訪れたユーザーが、より多くのページに移動して長く楽しんでいただいている、ということになります。直帰率 50% 切りも視野に入ってきました。

なお、アクセス数は非公開ですが、昨年比で倍近いページビュー数があった、ということを報告しておきます。


利用者の国、言語

今年は 62 の国/地域からマンホールマップをご利用いただきました(昨年は 65):
2016122012


国別のアクセス数1位はダントツで日本ですが、2位以下は毎年変化しています。さて 2016 年はというと・・・
2016122003


2位は UK(イギリス)からのアクセスでした。なんでだろう?ポンド安でみんな旅行してた?3位アメリカ、4位ロシアあたりは上位の常連国です。 今年目立って高かったのは8位イラク、11位タイ、14位ミャンマーあたりでしょうか。水道関係者やインフラ整備で派遣されている皆様がこれらの国々で活躍されている姿が目に浮かんできます。。



日本国内の市区町村別アクセスランキング

では日本国内の市区町村別ではどのようなランキングだったかを調べてみました:
2016122004


見やすいように日本語で表にして、昨年からの順位推移を含めてみました:
1大阪市
2横浜市
3加古川市
4港区
5新宿区
6名古屋市
7(取得不可) -
8さいたま市
9札幌市
10市川市
11(東京都)中央区
12京都市
13新潟市
14千葉市
15福岡市
16世田谷区
17渋谷区
18神戸市
19船橋市
20江東区


アクセス記録一位は大阪市の2連覇。関西マンホールサミットの影響なのでしょうか?そしていわゆる「大都市」が軒並みランクを下げる中で加古川市や船橋市、市川市といった衛星都市が順位を挙げています。マンホール界では地方分権が進んでいるようです。


利用環境

利用しているブラウザ環境を同様の表にまとめてみるとこんな感じです:
1Chrome34.26%
2Internet Explorer23.34%
3Safari17.13%
4モバイル Safari11.47%
5Edge6.18%
6FireFox4.20%
7モバイル Chrome2.74%
8(クローラーボット)0.24% -
9Opera 0.17%
10Mozilla 互換0.09%


1位は推奨環境でもある PC の Chrome、非推奨環境と明確に言っているにも関わらず2位が IE、3位は Safari、ここまでは昨年と同順位です。変わったのはその下でモバイル Safari が伸びているのは iPhone 利用者が増えていることを意味しています(逆にモバイル Chrome が落ちているので Android 利用者は減っている)。このあたりはグローバルスタンダードを逆行しています(苦笑)。また昨年は 0.55% だった Edge が FireFox を抜いている点も見逃せません。。

なお、10位の "Mozilla 互換" というのは、ネットテレビだったり、ゲーム機だったりが考えられます。まだまだ少ないのですが、いずれこういう環境も増えていくのでしょうか?テレビだと画面が広くて便利そうではありますよね。



まとめ

以上の内容から 2016 年のマンホーラーの実態は以下のようなものであったと推測されます:
・イギリスが EU から分離して、ポンド安に笑いが止まらない人がいる
・マンホーラーは昨年以上に世界中に広まっている。そして日本では地方分権が進んでいる
・マンホーラーは iPhone 派
・大阪熱い!
・Internet Explorer は不滅



さて、次回のブログでは 2016 年マンホールマップ蓋別アクセスランキングを発表します。2016年の MVM(Most Variable Manhole) の行方は!? やなぽんさん、3連覇なるか!? お楽しみに。


前回の続きです:
ラズパイに Kali Linux をインストールする

ラズベリーパイに Kali Linux のイメージを導入して起動する、という所までを紹介しました。これで OS としては動きますが、このままの状態では以下の2点の問題があります:
(1) (Kali Linux の真髄でもある)ペネトレーションテスト用ツールがまだ足りない
(2) ウェブブラウザなどで日本語表示ができない

この2つの問題を解決するためのセットアップを行います。

まずは (1) の問題、これは最新版のリポジトリを使って、モジュールを最新版に更新すれば解決します:
# apt-get update
# apt-get upgrade

特に2番目のコマンドの実行にはかなり時間がかかりますが、一晩かけるつもりで寝る前に実行するなどしてください。

次に (2) の問題、こちらは日本語フォントが含まれていないのでデフォルト状態ではブラウザで日本語ページを見たりしても文字化けしてしまうのでした。これは適当な日本語フォントを導入することで解決できます:
# apt-get install fonts-vlgothic


ここまで行うことでペネトレーションテスト用ツールがアプリケーションメニューからも利用できるようになります。またブラウザで日本語ページを見ても文字化けせずに表示できるようになります:
kali


 

僕のブログの全エントリの中でも指折りの人気ページの1つが Kali Linux ネタです:
http://dotnsf.blog.jp/tag/kali

ペネトレーションテスト用に開発された Kali Linux は本来の目的で使われることはもちろん、Debian ベースで apt-get コマンドを使ったカスタマイズもでき、何よりもカッコいいデスクトップ環境(大事!)もあって、最近人気が上がっているディストリビューションの1つだと思っています。

そんな Kali Linux は組み込み用環境向けにもイメージが提供されています。今回はそんな中から Raspberry Pi(以下、「ラズパイ」)用イメージを使って、ラズパイに Kali Linux 環境を構築する手順を紹介します。なお、以下の手順はラズパイ3で試していますが、2でも同様に可能なはずです。

まず用意するのは 8GB の MicroSD カード。ここにほぼ同じ大きさの Kali Linux イメージを書き込んで使います。

ラズパイ用の Kali Linux はこちらからダウンロードします:
https://www.offensive-security.com/kali-linux-arm-images/

2016121501


このサイトの中ほどにラズパイ用のセクションがあり、その中から環境にあったイメージ("RaspberryPi 2/3")を選んでダウンロードします。ダウンロードファイルは .xz という拡張子をもったフォーマットで圧縮されています。

ダウンロード後、このファイルを展開します。Windows であれば 7zip で、Linux であれば tar の Jxf オプションを使うなどして圧縮を展開し、約 8GB のイメージファイルを取り出してください。

取り出したイメージファイルを MicroSD カードにダンプで書き込みします。Windows であれば DD for Windows 、Linux であれば dd コマンドを使ってイメージをそのまま書き込んでください。これで Kali Linux が導入されたラズパイ用の MicroSD カードが用意できました。

ここまでできれば後は普通のラズパイ同様に、HDMI ケーブル/キーボード/マウス/有線LANケーブル などを必要に応じて繋いで使って起動してください:
IMG_0055


↑普通に起動できました。




IBM Bluemix からも提供されている、オープンソースのイベント駆動型サービス OpenWhisk が正式版としてリリースされました:
2016121401


この OpenWhisk は最近流行りの "Function as a Service" をオープンソースで実装したものです。Bluemix の機能の1つとしても提供されていますが、オープンソース版をこちらから入手して利用することもできます:
https://github.com/openwhisk/openwhisk


OpenWhisk ではイベント等のきっかけ(Trigger)に対する個別の処理が、アクション(Action)として紐付け(Rule)られています。この Trigger - Action - Rule の組み合わせでアプリケーションを実装し、その処理が実行されるタイミングで必要なだけのマシンリソースが必要なだけ割り当てられて実行されます。そしてその際に利用したリソース(CPU 時間やメモリ量)に応じて料金が発生します。すなわち CPU を使わない待ち時間などには料金が発生しないことになるので、その意味でもリーズナブルな料金体系になっていると言えます。

なお 2016/Dec/14 時点での料金表はこちらです:

https://console.ng.bluemix.net/openwhisk/learn/pricing
2016121402


↑128MB メモリを使って、0.5 秒実行するようなアクションを月 5,000,000 回実行するまでであれば無料枠内で収まる、ということになります。ある程度は無料でも使えそうです。 また上の表をみてもわかりますが、時間のかかるアクションや多くのメモリを必要とするアクションは(比例的とは言えないくらいに)割高になります。個々のアクションを小さく分割して実行した方が割安な運用ができそうです。


さて、このアクションですが、2016/Dec/14 現在の OpenWhisk では初めからシステムで用意されているアクション以外に以下のプログラミング言語を使って実装することが可能です:
  • JavaScript
  • Python
  • Swift
  • Java

このうち最も新しいのが Java です。他の比較的新しめの言語は苦手というエンジニアもいらっしゃると思いますが、最近になって Java でも OpenWhisk のアクション実装が可能になりました。以下にその手順を紹介します。

まず前提の準備として OpenWhisk のコマンドラインインターフェースである wsk コマンドをセットアップします。Bluemix ダッシュボードからの指示にしたがって、以下から自分の環境にあった wsk コマンドをダウンロードし、インストールします(UNIX 系システムでは wsk バイナリをダウンロードして、パスを通して、実行権限を付けます):
https://openwhisk.ng.bluemix.net/cli/go/download/
2016121404


そして名前空間と許可キーの初期セットアップを行います。具体的には以下のサイトの 2. の中にあるコマンドを「コピー」し、wsk をインストールしたシステムのコマンドラインにペーストして実行するだけです:

https://console.ng.bluemix.net/openwhisk/learn/cli
2016121405


これで wsk コマンドの設定は完了です。

更に今回は Java を使ってアクションを実装/実行します。Java で OpenWhisk のアクションを実装するには JDK 1.8 が必要です。またコンパイル時に Google GSON ライブラリが必要になります。以下のサイトからソースを入手してビルドするなどして gson-2-X-X.jar ファイルを入手し、CLASSPATH に登録しておきます:
https://github.com/google/gson


改めて、実際に処理を行うアクションを Java で記述します。サンプルとして以下を用意しました(JavaHello.java)。必要に応じて処理内容を変更してください。最後に実行結果をcom.google.gson.JsonObject 型の JSON オブジェクトで返すような内容にしてください:
import com.google.gson.JsonObject;

public class JavaHello{
  public static JsonObject main( JsonObject args ){
    String name = "World";
    if( args.has( "name" ) ){
      name = ( String )args.getAsJsonPrimitive( "name" ).getAsString();
    }
    JsonObject obj = new JsonObject();
    obj.addProperty( "greeting", "Hello " + name + "!" );
    return obj;
  }
}

↑ちなみにこのサンプルを実行すると { "greeting": "Hello XXXX!" } という JSON を返します。XXXX 部分には実行時の name パラメータで与えた文字列が入ります(デフォルトは World)。

このアクションソースファイルを JDK 1.8 でコンパイルして JAR アーカイブします:
$ javac JavaHello.java
$ jar cvf JavaHello.jar JavaHello.class

OpenWhisk アクションとして(JavaHello という名前で)登録します:
$ wsk action create JavaHello JavaHello.jar --main JavaHello

OpenWhisk アクションとして実行してみます(青字は実行結果):
$ wsk action invoke --blocking --result JavaHello  (パラメータなし)
{
  "greeting": "Hello World!"
}

$ wsk action invoke --blocking --result JavaHello --param name DOTNSF  (パラメータ指定)
{
  "greeting": "Hello DOTNSF!"
}

動きました! これで Java でも OpenWhisk のアクションを実装できることが確認できました。



(参考)
https://github.com/openwhisk/openwhisk/blob/master/docs/actions.md
 

このページのトップヘ