Wandboxの2015年のデータを分析してみた。
対象データはSQLiteに永続化されたコード、つまりpermlinkの対象になってるコードだけ。 コードの実行回数ではないので注意(実行する方も一応ログ取ってるけど分析がめんどい)。
対象期間は2015年1月1日〜2015年12月31日。
14307回。1日平均約39回
SELECT
COUNT(*)
FROM
code
WHERE
created_at >= '2015-01-01 00:00:00' AND created_at <= '2015-12-31 23:59:59'
月 | 保存回数 |
---|---|
01 | 846 |
02 | 825 |
03 | 846 |
04 | 738 |
05 | 875 |
06 | 1266 |
07 | 1350 |
08 | 1182 |
09 | 1346 |
10 | 1657 |
11 | 1768 |
12 | 1608 |
なんか6月に前月比で約1.45倍とかなり増えてる。 10月にも前月比で約1.23倍とそこそこ増えてる。
SELECT
strftime('%m', created_at) AS m,
COUNT(*)
FROM
code
WHERE
created_at >= '2015-01-01 00:00:00' AND created_at <= '2015-12-31 23:59:59'
GROUP BY
m
ORDER BY
m
コンパイラ | 保存回数 |
---|---|
gcc-head | 4924 |
clang-head | 3083 |
gcc-4.8.2-c | 778 |
gcc-4.9.2 | 717 |
gcc-5.2.0 | 697 |
clang-3.6 | 362 |
gcc-5.1.0 | 361 |
gcc-4.8.2 | 262 |
mcs-head | 239 |
php-5.5.6 | 225 |
gcc-4.9.1 | 222 |
clang-3.7 | 166 |
clang-3.5 | 144 |
ruby-head | 138 |
java7-openjdk | 134 |
python-3.3.2 | 127 |
clang-3.3-c | 117 |
gcc-4.7.3 | 110 |
gdc-head | 110 |
python-head | 107 |
scala-2.12.x | 103 |
gcc-4.8.1 | 91 |
gcc-4.4.7 | 82 |
ghc-7.8.3 | 74 |
gcc-4.9.0 | 60 |
ghc-head | 56 |
python-2.7.3 | 56 |
ruby-2.0.0-p247 | 55 |
gcc-4.3.6 | 53 |
mcs-2.6.7 | 53 |
clang-3.4 | 51 |
bash | 45 |
php-head | 45 |
gcc-4.6.4 | 40 |
python-3.5.0 | 40 |
clisp-2.49.0 | 26 |
elixir-head | 26 |
node-head | 24 |
vim-7.4.729 | 22 |
mcs-3.2.0 | 20 |
python-2.7-head | 20 |
clang-3.3 | 19 |
clang-3.0 | 17 |
gcc-4.5.4 | 16 |
groovy-2.2.1 | 15 |
python-3.4.3 | 15 |
gcc-4.8.2-pp | 14 |
rust-head | 14 |
clang-3.1 | 13 |
perl-5.18.0 | 12 |
lua-5.3.0 | 11 |
node-0.10.24 | 11 |
ruby-1.9.3-p0 | 11 |
rust-1.0.0 | 9 |
scala-2.11.x | 9 |
clang-3.2 | 8 |
sqlite-head | 8 |
mozjs-24.2.0 | 6 |
lua-5.2.2 | 5 |
scala-2.11.2 | 5 |
mruby-head | 3 |
perl-head | 3 |
rill-head | 3 |
swift-2.2 | 3 |
coffee-script-1.7.1 | 2 |
pypy-2.1 | 2 |
sqlite-3.8.1 | 2 |
coffee-script-head | 1 |
fpc-2.6.2 | 1 |
ghc-7.6.3 | 1 |
java8-openjdk | 1 |
perl-5.19.2 | 1 |
python-3.5.1 | 1 |
gcc-head, clang-head だけで全体の約56%を占めてて面白い。
C#とPHPの保存回数が他と比べて多いのが気になるけど、個別に見るのも面倒なので気にしない。
SELECT
compiler,
COUNT(*) AS cnt
FROM
code
WHERE
created_at >= '2015-01-01 00:00:00' AND created_at <= '2015-12-31 23:59:59'
GROUP BY
compiler
ORDER BY
cnt DESC
Wandboxが複数ファイルに対応したのが4月17日なので、それ以降の記録になる。
ファイル数 | 保存回数 |
---|---|
1 | 9632 |
2 | 1372 |
3 | 166 |
4 | 73 |
5 | 71 |
6 | 8 |
7 | 13 |
9 | 1 |
10 | 6 |
11 | 2 |
12 | 3 |
13 | 4 |
15 | 1 |
17 | 22 |
18 | 1 |
29 | 1 |
34 | 9 |
47 | 1 |
182 | 29 |
約15%は2ファイル以上で保存しているらしい。 死に機能になってると思ってたけど、意外と使われてて驚き。
あと182ファイル…一体どこの Boost.Hana なんだ…。
SELECT
cnt + 1,
COUNT(*)
FROM (
SELECT
code.id,
COUNT(codes.code_id) AS cnt
FROM
code
LEFT JOIN
codes
ON
code.id = codes.code_id
WHERE
created_at >= '2015-04-17 00:00:00' AND created_at <= '2015-12-31 23:59:59'
GROUP BY
code.id
)
GROUP BY
cnt
ORDER BY
cnt
終了コード | 保存回数 |
---|---|
0 | 10355 |
1 | 3217 |
2 | 13 |
3 | 14 |
4 | 10 |
5 | 6 |
6 | 1 |
7 | 2 |
8 | 5 |
10 | 3 |
11 | 2 |
14 | 1 |
20 | 1 |
22 | 1 |
24 | 7 |
30 | 1 |
34 | 1 |
35 | 1 |
40 | 1 |
42 | 5 |
43 | 2 |
46 | 5 |
50 | 2 |
55 | 2 |
72 | 4 |
73 | 1 |
79 | 1 |
84 | 1 |
101 | 10 |
120 | 1 |
123 | 1 |
124 | 1 |
125 | 1 |
127 | 1 |
134 | 1 |
139 | 1 |
168 | 1 |
201 | 4 |
223 | 1 |
254 | 22 |
255 | 55 |
終了コードは0か1で約99.6%を占めてる。
成功率(0の割合)は約75%。
終了コードは0〜255までの256種類あるんだけど、これだけ保存されてて256種類中50種類しかコンプリートできていないのが面白い。
SELECT
ec,
COUNT(*)
FROM (
SELECT
code.id,
MIN(CAST(link_output.output AS INTEGER)) AS ec
FROM
code, link, link_output
WHERE
created_at >= '2015-00-00 00:00:00' AND created_at <= '2015-12-31 23:59:59' AND
code.id = link.code_id AND
link.code_id = link_output.link_id AND
link_output.type = 'ExitCode'
GROUP BY
code.id
)
GROUP BY
ec
ORDER BY
ec
コンパイル時の標準出力:
文字数 | 保存回数 |
---|---|
10〜99 | 183 |
100〜999 | 8 |
1,000〜9,999 | 4 |
10,000〜99,999 | 5 |
コンパイル時の標準エラー:
文字数 | 保存回数 |
---|---|
1〜9 | 3 |
10〜99 | 202 |
100〜999 | 3354 |
1,000〜9,999 | 826 |
10,000〜9,999 | 173 |
100,000〜999,999 | 19 |
実行時の標準出力:
文字数 | 保存回数 |
---|---|
0 | 4 |
1 | 2370 |
10 | 4195 |
100 | 1480 |
1,000 | 220 |
10,000 | 98 |
100,000 | 53 |
実行時の標準エラー:
文字数 | 保存回数 |
---|---|
1 | 15 |
10 | 225 |
100 | 213 |
1000 | 21 |
10,000 | 14 |
実行時の標準出力は99文字以下が約78%なのに、コンパイル時の標準エラーは100〜999文字だけで約73%を占めてる。 やはりコンパイル時のエラー出力は多い(あるいは多いからこそ保存して共有する)。
SELECT
type,
cases,
COUNT(*)
FROM (
SELECT
code.id,
link_output.type AS type,
SUM(LENGTH(output)) AS len,
CASE
WHEN SUM(LENGTH(output)) >= 1000000 THEN 1000000
WHEN SUM(LENGTH(output)) >= 100000 THEN 100000
WHEN SUM(LENGTH(output)) >= 10000 THEN 10000
WHEN SUM(LENGTH(output)) >= 1000 THEN 1000
WHEN SUM(LENGTH(output)) >= 100 THEN 100
WHEN SUM(LENGTH(output)) >= 10 THEN 10
WHEN SUM(LENGTH(output)) >= 1 THEN 1
ELSE 0
END AS cases
FROM
code, link, link_output
WHERE
created_at >= '2015-00-00 00:00:00' AND created_at <= '2015-12-31 23:59:59' AND
code.id = link.code_id AND
link.id = link_output.link_id AND
link_output.type IN('CompilerMessageS', 'CompilerMessageE', 'StdOut', 'StdErr')
GROUP BY
code.id, link_output.type
)
GROUP BY
type, cases
ORDER BY
type, cases
TODO