2015 | 忘れたらググればいい

2015年5月9日土曜日

Pythonで一定長のリスト初期化にかかる時間の比較

元ネタ

あなたのPythonを爆速にする7つの方法

あと時間計測ならば1回だけじゃなくて,何回か実行した平均を取った方がいい.

条件を揃えてやってみた

全要素が0のリストの生成

  • 空の配列に1つずつ0をappend (list_0_append)
  • リスト内包表記 (list_0_comp)
  • 乗算 (list_0_multi)
  • array (list_0_array)
  • rangeで作ったリストに0を代入 (list_0_range)

要素が[0, 1, ..., n-1]のリストの生成

  • 空の配列に1つずつ数値をappend (list_i_append)
  • リスト内包表記 (list_i_comp)
  • 全0のリストを作ったあとに代入 (list_i_multi)
  • array (list_i_array)
  • range (list_i_range)

実証スクリプト

結果

% python bench.py -n 1000000
--Python version--
2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]

--list_0--
list_0_append(1000000) in 0.229992(s)
list_0_comp(1000000) in 0.087843(s)
list_0_multi(1000000) in 0.016838(s)
list_0_array(1000000) in 0.212526(s)
list_0_range(1000000) in 0.175999(s)

--list_i--
list_i_append(1000000) in 0.241931(s)
list_i_comp(1000000) in 0.112636(s)
list_i_multi(1000000) in 0.155012(s)
list_i_array(1000000) in 0.237255(s)
list_i_range(1000000) in 0.050963(s)

全要素0であっても乗算が一番速かった. [0, 1,...,n-1]の場合は,乗算よりリスト内包表記の方が速い.が,range(n)の方がもっと速かった.

pypyでもやってみた

pypy bench.py -n 1000000
--Python version--
2.7.9 (9c4588d731b7, Mar 23 2015, 16:20:40)
[PyPy 2.5.1 with GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]

--list_0--
list_0_append(1000000) in 0.152410(s)
list_0_comp(1000000) in 0.014103(s)
list_0_multi(1000000) in 0.010896(s)
list_0_array(1000000) in 0.022531(s)
list_0_range(1000000) in 0.022315(s)

--list_i--
list_i_append(1000000) in 0.143897(s)
list_i_comp(1000000) in 0.014448(s)
list_i_multi(1000000) in 0.016995(s)
list_i_array(1000000) in 0.023090(s)
list_i_range(1000000) in 0.000005(s)

CPythonよりだいぶ速い.list_i_rangeは異常 (笑).

結論

全要素同じの場合は乗算,[0, 1,...,n-1]ならばrangeが速い. そしてpypy超速い (もちろんメモリやCPUの使い方まで比較してないので一概にpypyがいいとは言えない).

2015年2月4日水曜日

twitterスパムアプリを集めるbotを作ってみた.が,やめるかも.

とにかく連携アプリを認証しまくるbot

スパム収集bot (フォロー禁止)(@__spamcollect__)さん | Twitter

仕様

  1. ツイートを検索.含まれるURLをとにかく開く.
  2. リダイレクトやリンクを辿って,連携アプリの認証ページに行きついたら,認証.
  3. 以上を30分ごとに繰り返し

スパムアプリの増やし方

以前書いた記事のとおり, 最近のスパムアプリは別のユーザの広告ツイートをRTさせたり, スパムアプリへのリンクを含むツイートを書かせたりする.

twitterスパムは意外に賢い | 忘れたらググればいい

したがって,適当にスパムアプリをいくつか見つけて認証すれば, 自分のTLに自動的に新たなスパムアプリへのリンクがやってくる. これを認証すると,さらに新たなスパムアプリがTLにやってくる...を繰り返すだけで, 面白いぐらいスパムアプリを収集できる.

ある程度増やすと,スパムアプリの認証ページへのリンクは,他ではあまり見かけない短縮URLやドメインを使っているのに気づく. そこで,これらのドメインで検索するとさらにたくさんのスパムアプリを効率良く見つけることができる. ちなみにこれらの短縮URLはほとんど広告かスパムアプリへのリンクにしか使われていないのが多いので,広告側が運営しているサービスと思われる.

この数日で集めたドメインはこんな感じ.153.127.25x.*はかなり広範囲に見られるので,それなりの規模でスパムアプリを運営していると思われる. [broccoli.deca.jp, biy.us, k4wu.com, justsv.com, puq.pw, p8q.pw, info.48s.jp, urx2.nu, twdb.sakura.ne.jp, asparagus.vivian.jp, 73n2u.info, mit2ep.com, rro.sakura.ne.jp, twipo.sakura.ne.jp, 153.127.247, 153.127.248, 153.127.249, 153.127.250, 153.127.251, 153.127.253, 153.127.254, 153.127.255]

結果として純度の高いスパムアカウントができてしまった

スパムアプリを狙って認証してるから当たり前だけど, 広告とスパムアプリへのリンクしかツイートしない純度の高いスパムアカウントができてしまった. 作って1週間経ってないけど,すでに8000ツイート(RT含む)超えている. 結構早い段階で凍結されてしまうかもしれない.

スパムアカウントが一発で分かる

このbotはスパムアプリ収集以外に何も操作を加えていないので, このbotがフォローしているアカウントはスパムアプリに勝手にフォローさせられたアカウントであり, 普通のアカウントではないことが一発で分かるという副産物も得られた. 中には,一見害のないように見えるbotが,実はスパムアプリへのリンクをちょいちょい入れたりしているのも分かった. ちょっと恐い.

また,スパムとして純度が高いので,普通の人間はこんなアカウントをフォローしたりはしない. なので,フォローしてきているのは余程の物好きか,スパムアカウントしかない. 少なくとも人間ではない.

今後の改善

早めに凍結されてしまう可能性もあるので,もっと効率よく,広く集めたい. TLの内容を学習してスパムアプリに特徴的な検索ワードを自動で選んだり,単位時間内の処理数を上げるための高速化もやりたい. あと,凍結対策として,ツイートを消したりRT取り消す処理も必要になるかもしれない.

とにかく連携アプリを認証しまくるbotが認証したアプリをツイートしまくるbotも作ってみた

認証したアプリの情報とこれまで収集したアプリの数をツイートする. アプリ数が増えるとbotの成長が感じられてちょっと楽しみになってきた.

スパム以外に誹謗中傷,殺害予告にも使われている

ここまで書き終わってから,botのツイートをチェックしてたら,リンクなしでmention飛ばしてるのがあった.

ちょっと調べてみると同じ内容のツイートがいろんなアカウントから,かなりの勢いで投げられまくっている. もちろん全ての投稿はスパムアプリから.

こうなってくると,単なる遊びで続けるのは難しいかもな... とりあえずmetion飛ばしたアプリは連携を外しておいた.確認できたのは以下.

  • 【ラッスンゴレライ】オリラジが完コピwww
  • ワンピース最大の謎である「D」がついに解明。。。?!
  • 【ドラゴンボール】悟飯は悟空の息子ではなかった事が判明した!!
  • 【心理テスト】直感で3つの色を選んで下さい
  • 【爆笑】柳沢慎吾の始球式で「ひとり甲子園」が始まるwwww
  • 【唖然】SEKAI NO OWARI深瀬さんのアピールが痛いww

2015年1月1日木曜日

年賀状メーカー2015

今年も

去年作ったやつを更新.

ここに年賀状のプレビューが表示されます.