日本語設定では見ることができない本当のAndroidバージョン別のシェア率

Android のバージョン別の利用割合をみるとき,

みますよね, ここ.

ダッシュボード | Android Developers

%e3%82%bf%e3%82%99%e3%83%83%e3%82%b7%e3%83%a5%e3%83%9b%e3%82%99%e3%83%bc%e3%83%88%e3%82%99___android_developers

ところが, ここにアクセスすると,

Dashboards | Android Developers

dashboards___android_developers

当然数字も違いますよね.

URLを見てみると, 微妙に違ったりします.

../dashboards/index.html?hl=ja

../dashboards/index.html?hl=en

パラメータだけでなく, 他の何かも影響してる雰囲気.

../dashboards/index.html

画面の下にあるプルダウンから言語変えてみるのもいいみたいです.

%e3%82%bf%e3%82%99%e3%83%83%e3%82%b7%e3%83%a5%e3%83%9b%e3%82%99%e3%83%bc%e3%83%88%e3%82%99___android_developers

なんだか気持ち悪いので, スクリプトにしておきますね.

version_android

Android バージョンやコードネームなどからのシェアの一覧取得


Android バージョンやコードネームなどからのシェアの一覧取得

Android のバージョンを表す場合,

相手によって言い方を変えなければなりません.

「Android 4.4 はー」

「ロリポップってー」

「minSdk は 19 でー」

「Android M はー」

特に,

会議などでバージョン別のユーザの割合を話しているときには,

営業からプログラマまで言い方がバラバラでいきなり

「ジンジャーブレッドまではもう切り捨ててもいいんじゃね?」

といわれてもすぐにピンとこなかったりします.

いくつかオフィシャルに公開されている一般的な名称の一覧があります.

codenames__tags__and_build_numbers___android_open_source_project

Codenames, Tags, and Build Numbers | Android Open Source Project

%e3%82%bf%e3%82%99%e3%83%83%e3%82%b7%e3%83%a5%e3%83%9b%e3%82%99%e3%83%bc%e3%83%88%e3%82%99___android_developers

ダッシュボード | Android Developers

また, システムの内部的には, Build.VERSION_CODES とよばれる名称が, APIレベルという整数を表します.

build_version_codes___android_developers

Build.VERSION_CODES | Android Developers

android_os_%e3%83%8f%e3%82%99%e3%83%bc%e3%82%b7%e3%82%99%e3%83%a7%e3%83%b3%e3%81%ae%e3%82%b3%e3%83%bc%e3%83%88%e3%82%99%e3%83%8d%e3%83%bc%e3%83%a0%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b

Android OS バージョンのコードネームを取得する

いちいちめんどくさいのでスクリプトにしておきます.


#!/usr/local/bin/php
<?php
$versions = '
LV VERSION_CODE           VERSION       CODE_NAME 
 1 BASE                   1             (no code name)
 2 BASE_1_1               1.1           (no code name)
 3 CUPCAKE                1.5           Cupcake
 4 DONUT                  1.6           Donut
 5 ECLAIR                 2             Eclair
 6 ECLAIR_0_1             2.0.1         Eclair
 7 ECLAIR_MR1             2.1           Eclair
 8 FROYO                  2.2.x         Froyo
 9 GINGERBREAD            2.3 - 2.3.2   Gingerbread
10 GINGERBREAD_MR1        2.3.3 - 2.3.7 Gingerbread
11 HONEYCOMB              3             Honeycomb
12 HONEYCOMB_MR1          3.1           Honeycomb
13 HONEYCOMB_MR2          3.2.x         Honeycomb
14 ICE_CREAM_SANDWICH     4.0.1 - 4.0.2 Ice Cream Sandwich
15 ICE_CREAM_SANDWICH_MR1 4.0.3 - 4.0.4 Ice Cream Sandwich
16 JELLY_BEAN             4.1.x         Jelly Bean
17 JELLY_BEAN_MR1         4.2.x         Jelly Bean
18 JELLY_BEAN_MR2         4.3.x         Jelly Bean
19 KITKAT                 4.4 - 4.4.4   KitKat
20 KITKAT_WATCH           4.4W          KitKat Watch
21 LOLLIPOP               5             Lollipop
22 LOLLIPOP_MR1           5.1           Lollipop
23 M                      6             Marshmallow
24 N                      7             Nougat
25 N_MR1                  7.1           Nougat
';

$url = 'https://developer.android.com/about/dashboards/index.html';
$versions = explode("\n", trim($versions));

$html  = file_get_contents($url);
preg_match_all('/var VERSION_DATA =(.*?)var VERSION_NAMES =/si',
               $html, $matches);
$json = json_decode(trim($matches[1][0], " \t\n\r\0\x0B[];"), true);

$sum = 100;
foreach ($json['data'] as $data) {
    printf("%5s %5s %s\n", 
           $data['perc'], sprintf('%03.1f', $sum), $versions[$data['api']]);
    $sum -= $data['perc'];
}

ユーザのシェアの数字は月一で更新される公式ページから実行時に取得します.

左から,

「ユーザ割合」
「そのバージョンをminSdkにしたときのカバー率」
「API レベル」
「バージョンコード」
「OSバージョン」
「コードネーム」

としています.


  0.1 100.0  8 FROYO                  2.2.x         Froyo
  1.3  99.9 10 GINGERBREAD_MR1        2.3.3 - 2.3.7 Gingerbread
  1.3  98.6 15 ICE_CREAM_SANDWICH_MR1 4.0.3 - 4.0.4 Ice Cream Sandwich
  4.9  97.3 16 JELLY_BEAN             4.1.x         Jelly Bean
  6.8  92.4 17 JELLY_BEAN_MR1         4.2.x         Jelly Bean
  2.0  85.6 18 JELLY_BEAN_MR2         4.3.x         Jelly Bean
 25.2  83.6 19 KITKAT                 4.4 - 4.4.4   KitKat
 11.3  58.4 21 LOLLIPOP               5             Lollipop
 22.8  47.1 22 LOLLIPOP_MR1           5.1           Lollipop
 24.0  24.3 23 M                      6             Marshmallow
  0.3   0.3 24 N                      7             Nougat

おおまかですが, すばやく一覧で確認できます.

Jelly Bean (Android 4.3) までを切り捨てた場合, minSdk=19 となり, 利用できるのは Android 4.4 以降の kitKat ユーザー で, 全体の 83.6% 程度なのかっ!


【Git】私が書き出した40個の英語頻出コミットメッセージ

git commit 時のメッセージて素早く書きたいものですね!

すばらしい記事を見つけましたよ!

GitHubで使われている実用英語コメント集 - Qiita

実際, 入力するときには悩むメッセージも, 私でもわかりそうになる意外とシンプルな単語たちで構成されていることがわかります.

_

勉強中のPHPで書き出してみました.


<?php
$data_idiom = <<<I
Fix A in B	Bの箇所のAを修正
Fix for A	Aに対する修正
Fix A to B	BへのAを修正
Fix A of B	BのAを修正
Add A to B	BにAを追加
Add A for B	B用にAを追加
Remove A from B	BからAを除去
Remove A in B	Bの箇所のAを除去
Remove unused A	不必要なAを除去
Use A insted of B	Bの代わりにAを用いる
Use A in B	Bの箇所のAを用いる
Use A for B	BのためにAを用いる
Remove use of B	Bを用いるのを除去
Update to A	Aにアップデート
Update A to B	AをBにアップデート
Update A for B	Bに対してAをアップデート
Add A support	Aサポートを追加
Add support for A	Aに対するサポートを追加
Make use of A	Aを使用する
Make it A	よりAにする
Make sure that A	必ずAするようにする
Move A from B	BからAを移動させる
Move A to B	AをBに移動させる
Move A in B	B内のAを移動させる
Don't use A	Aを用いない
Check for A	Aに対するチェック
Check A in B	B内のAをチェック
Fix A check	Aチェックを修正
Add A check	Aチェックを追加
Remove A check	Aチェックを除去
Change A to B	AをBに変更
Change A for B	Bに対してAを変更
Change A in B	B中のAを変更
Allow A to B	AがBするのを許す
Set A to B	AをBにセット
Set A for B	Bに対してAをセット
Convert A to B	AをBに変換
Rename A to B	AをBにリネーム
Avoid A to B	BするためにAを避ける
I;

$data_adj = <<<J
new	新しい
unused	使用されていない
static	静的な
empty	空の
old	古い
small	小さな
initial	最初の
local	ローカルの
wrong	間違った
common	共通の
other	他の
dead	死んだ
get rid of	取り除く
possible	可能性のある
unneeded	不必要な
same	同じ
global	グローバルの
invalid	不正な
specific	特定の
extra	余分な
J;

$data_noun = <<<N
test	テスト
tests	テスト
code	コード
error	エラー
function	ファンクション
functions	ファンクション
driver	ドライバー
version	バージョン
typo	タイポ
docs	ドキュメント
bug	バグ
return	リターン
tag	タグ
default	デフォルト
device	デバイス
handling	ハンドリング
files	ファイル
type	タイプ
auto	オート
name	名前
data	データ
warning	警告
N;

// parse data
$idioms = array();
foreach (explode("\n", $data_idiom) as $line) {
  array_push($idioms, explode("\t", lcfirst($line)));
}

$adjs = array();
foreach (explode("\n", $data_adj) as $line) {
  array_push($adjs, explode("\t", $line));
}

$nouns = array();
foreach (explode("\n", $data_noun) as $line) {
  array_push($nouns, explode("\t", $line));
}

// build titles
foreach ($idioms as $idiom) {

  shuffle($adjs);
  shuffle($nouns);

  $title_en = str_replace(
      array('A', 'B'), 
      array($adjs[0][0] . " " . $nouns[0][0], $adjs[1][0] . " " .  $nouns[1][0]), 
      $idiom[0]);

  $title_ja = str_replace(
      array('A', 'B'), 
      array($adjs[0][1] . $nouns[0][1], $adjs[1][1] . $nouns[1][1]), 
      $idiom[1]);

  printf("%s\n%s\n\n", ucfirst($title_en), $title_ja);

}

Fix common version in new docs
新しいドキュメントの箇所の共通のバージョンを修正

Fix for dead version
死んだバージョンに対する修正

Fix new data to small code
小さなコードへの新しいデータを修正

Fix unneeded handling of local tests
ローカルのテストの不必要なハンドリングを修正

Add common device to extra functions
余分なファンクションに共通のデバイスを追加

Add unused code for specific files
特定のファイル用に使用されていないコードを追加

Remove common tests from same function
同じファンクションから共通のテストを除去

Remove unneeded default in other type
他のタイプの箇所の不必要なデフォルトを除去

Remove unused wrong bug
不必要な間違ったバグを除去

Use static docs instead of wrong tests
間違ったテストの代わりに静的なドキュメントを用いる

Use small return in unneeded code
不必要なコードの箇所の小さなリターンを用いる

Use old error for extra test
余分なテストのために古いエラーを用いる

Remove use of new files
新しいファイルを用いるのを除去

Update to small code
小さなコードにアップデート

Update empty code to unneeded test
空のコードを不必要なテストにアップデート

Update empty test for static device
静的なデバイスに対して空のテストをアップデート

Add static bug support
静的なバグサポートを追加

Add support for small default
小さなデフォルトに対するサポートを追加

Make use of other warning
他の警告を使用する

Make it extra auto
より余分なオートにする

Make sure that small typo
必ず小さなタイポするようにする

Move get rid of device from new version
新しいバージョンから取り除くデバイスを移動させる

Move old data to static files
古いデータを静的なファイルに移動させる

Move small return in other tag
他のタグ内の小さなリターンを移動させる

Don't use local function
ローカルのファンクションを用いない

Check for specific data
特定のデータに対するチェック

Check other default in initial version
最初のバージョン内の他のデフォルトをチェック

Fix common tag check
共通のタグチェックを修正

Add specific auto check
特定のオートチェックを追加

Remove same data check
同じデータチェックを除去

Change unused test to global error
使用されていないテストをグローバルのエラーに変更

Change extra type for invalid driver
不正なドライバーに対して余分なタイプを変更

Change other data in get rid of return
取り除くリターン中の他のデータを変更

Allow unneeded device to dead default
不必要なデバイスが死んだデフォルトするのを許す

Set empty bug to dead auto
空のバグを死んだオートにセット

Set unneeded functions for empty device
空のデバイスに対して不必要なファンクションをセット

Convert specific driver to invalid functions
特定のドライバーを不正なファンクションに変換

Rename specific files to local test
特定のファイルをローカルのテストにリネーム

Avoid small typo to initial name
最初の名前するために小さなタイポを避ける

微妙な結果ですね!

まとめ

「イディオム」てやつを覚えるといいのかもしれませんね!!

Gitのコミットメッセージの書き方 | プログラミング | POSTD