「Python」タグアーカイブ

Anyprint – いろんな言語のprint命令がPythonで使えるライブラリ

ライブラリ anyprint をインポートするだけで、Python で以下のような出力文が書けるようになります。


printf("printf %d\n", 10);

fmt.Println("hello")

cout << "Hello, C++!" << endl;

Print["Hello from Mathematica!"]

console.log("yes");

io.write("lua land")

System.out.printf("java stuff\n");

System.Console.WriteLine("C# looks awkard");

Ada.Text_IO.Put_Line("Ada is cool")

IO.puts("elixir")

現在サポートされている他言語は、go, Java, VB .NET, C(とその類似言語), ActionScript, Ada, Amiga E, ASP, B, D, PureBasic, Clipper, C++, C#, Delphi, JavaScript, Lua, Mathematica, matlab, nim, Pascal, Pike, Elixir のようです。

Objective-C の NSLog, Ruby のp はプルリクエストが出ています。Closure風 と Rust風は Python の中では難しいと作者が答えていますが、誰か解決できる人がいたら挑戦してみてはどうでしょうか。

Pythonがメインの言語でない人でも、これを入れておけば自分の慣れた方法でprintできますね。

利用者からの推薦文が載ってますが、味わい深いです。

  • 「おかしいよあんた」
  • 「馬鹿馬鹿しいし役立たずだ」
  • 「僕の推薦文を追加してよ『なんて正確な推薦文たち』」
  • 「kragniz, おかしなPythonのメタモジュールばっかり公開するのはよせよ」

via Hacker News

Pokémap – Pokemon Goのポケモン・ジム・ポケストップを可視化する勝手ツール

アメリカ人をトリコにし、任天堂の株価を倍に押し上げた位置情報ゲーム「ポケモンGo」、日本での今日のリリースが2ちゃんねる経由マクドナルドからのリークで延期になった、とかいう話も(本当かどうかわかりませんが)流れて来たりと、これから日本でも熱くなりそうなところです。

Pokémapは、Ahmed Almutawaが始めたばかりのツール開発プロジェクトで、ポケモンGo に出てくるポケモン達、アイテムを得られるポケストップ、奪いあうポケジムなどゲームを簡単に進められるようにする重要情報を、Google Mapベースの地図に表示してしまうというPython製ツールです。

pokemap-top

現在のツールはプログラマでないとセットアップがたいへんそうな作りになっていますが、こんなツールで地図が見えてしまうと、一般のユーザーとの競争はかなり簡単になってしまうのではという心配もあります。

各データは Niantec 社のサーバとの通信を見て取得しているようなので、早晩、通信方法が変更されたり、暗号化されたりするのではと思いますが、熱心なユーザー&開発者が2日間で50人近く contributor として集まったそうで、GitHub 上のプロジェクトページでは一時的にプルリクエストを受け付けませんという表示がされています。

via The Verge

プログラミング言語TrumpScript

TrumpScript は、高名なドナルド・トランプ氏を基にした新たなプログラミング言語です。現在のプログラミング言語の中に、トランプ氏の豪華な金髪バーコードヘアにも気に入られるような言語が無いことから制作されました。

https://www.flickr.com/photos/80038275@N00/17008571157/

特徴

  • 浮動小数点数無しで整数のみ。アメリカに中途半端はありません
  • 数は100万以上に限ります。それ以下の数字は取るに足らないからです
  • import はできません。すべてのコードはアメリカで作った国産でなければなりません
  • True/False(真/偽)ではなくfact/lie(事実/嘘)を使います
  • 良く知られた、トランプ氏の好きな(2000個ちょっとの)英単語のみ。立候補者の名前は変数として使えます
  • ほとんどのエラーメッセージはトランプ語録から採用されました
  • プログラムは「アメリカは偉大だ(“America is great.”)」で終了しなければなりません
  • TrumpScriptはそのままではWindowsで動きません。なぜならトランプ氏はPCを信じるような男ではないからです(註: PC=パソコン、と、PC=政治的正しさ、をかけてます)
  • 大文字小文字は完全に無視します

文法

文法の方はというと、演算や条件文についてはおおむね普通のものが用意されていて、TSの記法を覚えればすぐ書けるでしょう。

  • is や are は代入。?で終われば比較になります
  • make America great で、America に great を代入できます
  • tell や say で出力できます
  • as long as でループします
  • 不要な単語は全部無視されるので、うまく使えばかなり自然な演説文と両立させられます

トランプ氏が失敗について語りたがらないのと同様に、プログラムは多くの場合静かに失敗します。デバッグをゲーム的に楽しんでください。

実行

テストファイルがいくつかあるので、まずはこれを試してみるのがいいかもしれません。

ヒラリー・クリントン氏とのディベートを再現したスクリプトを動かすと、こうなりました。

trumpscript-hilary

元ネタがわかりません。まだ直接対決はないと思うので、コメントか何かで応酬した時のものでしょうか。

テストスクリプトには手元ではエラーになるものも多いです。

また、エラーになるのが正しいものも。not_english.txt では、スペイン語で書かれたスクリプトに対して、

trumpscript-not-english

「ここは英語で喋る国だ(“This is a country where we speak English”)」という例外が発生してます。

他にも、「トランプはそんなことは聞きたくない(“Trump doesn’t want to hear it”)」など、少ないエラーの中にもトランプ氏のきらりと光る名言があるようです。

作者

ライス大学のハッカソンでコンピューター専攻の二人の学生サム・シャドウェルさん(Sam Shadwell)とクリス・ブラウンさん(Chris Brown)らによって作られたこの新言語、初日夜の酔っぱらってのブレインストームと翌日の20時間のプログラミングで完成したそうです。

ハッカソンの優勝は逃したということですが、GitHubで公開されたコードに対して多数のバグ報告や修正提案が送られていて、日々改良されているようです。

この言語によって、「トランプ氏がアメリカを再び偉大にするように、プログラミングを再び偉大にすることを願っている」ということです。

via The Verge

懸賞ツイートをプログラムで自動リツイートさせて、1000個の賞品を獲得した話

ハンター・スコット(Hunter Scott)さんは、「ツイッターでリツイートしてくれたら抽選でプレゼントしますよ」という、いわゆるリツイート懸賞がツイッターに多数流れていることに気づき、自動でそのようなツイートをリツイートするスクリプト(ボット)を開発、走らせ続けることで1000個近い賞品に当選しました。

その経緯は“Twitter Contest Winning as a Service”(サービスとしてのツイッターコンテスト当選)というブログ記事でまとめられています。

リツイート懸賞の勝率は?

9ヶ月間走らせていたこのPythonスクリプト、結果的には165,000件の懸賞ツイートをリツイートしたそうですが、当選したのが約1000件。当選率は0.6%、165回リツイートして一つ当たるぐらいということになります。

せっせと見つけては手動で応募している人も同じような確率だとすると、さてリツイート懸賞は労力に見合うものなんでしょうかね。

スコットさんが指摘するように、この当選の中には「あなた向けにカスタマイズしたTwitter用ロゴ」や「壁紙」「電子書籍」などデジタルのものも多数含まれるので、価値の高い賞品が貰える率となるとさらに低くなることでしょう。

気になる約1000件の獲得賞品リスト

獲得賞品のリストはこちらで紹介されています。「約1000件」と書かれていますが正確な行数では984行。

ロゴなどのデジタルデータ、オンラインゲームの仮想ポイント、など以外に賞品リストに多く出て来るのが「チケット」。映画やコンサートなどのチケットですが、その多くが外国のもの等だったということで、当たっても行けていないそうです。

受け取った賞品の写真がこちら。

(credit: Hunter Scott)
(credit: Hunter Scott)

この中での一番のお気に入りは、聞いた事も無いメキシコのスターのサインが入ったカウボーイハットなんだとか。

もっとも高額なプレゼントはニューヨークでのリムジン・観劇・ペアで $100(1万1024円)0 のおこづかいを含む $400(4万4098円)0 のパックでしたが、ニューヨークの近くに住んでないことと、 $400(4万4098円)0 を収入として申告したくなかったことから、受け取らなかったそうです。

これからやる人のためのコツ

スコットさんはPythonスクリプト自体は公開していないものの、試行錯誤した経験から気をつけるべきところを教えてくれています。

  • フォローしないと応募したことにならないリツイート懸賞が多いので、リツイートするだけでなくフォローすること。
  • 他の応募者のリツイートではなく、正しいオリジナルを探させること
  • リツイートやフォローの頻度が上がるとbanされるので間隔を調整すること
  • 一般的なフォロー上限の2000を超えないように、FIFOで昔フォローしたものから外すこと
  • 当選の連絡はDM(ダイレクトメッセージ)で来ることが多いが、DMにはスパムも多数来るようになったので、当選したものを探す作業はそれなりに大変
  • 単にフォロワーを増やしたいとかで、嘘の懸賞をでっちあげるアカウントもいる。でも気にすんな!

この方針で、APIから見つけたすべてのリツイート懸賞に応募(フォロー&リツイート)することが出来たということです。

感想

日本でも「フォローしたら」「リツイートしたら」抽選に参加、というプロモーションはそれなりにやっていますが、ツイッターの認証をさせた上で個人情報を書かせたり、先方にツイートする権限を与えたりしないといけないものも多く、上のようなスクリプトで応募できてしまうものがそんなに多いかどうかは疑問です。

また、英語の利用はユーザー数も国の数も多いので、リツイート懸賞も多いだろうというのもあるでしょう。その結果、貰っても行けない賞品も多かったわけですが。

今回のこの体験談がきっかけで、単純なリツイート懸賞をやるのを再考する企業も増えるかもしれません。

ですが、スクリプトを流しておくだけなら電気代ぐらいしか掛かりませんし、たとえ今回の0.6% が0.06%になろうとも、やるだけやってみても損はしないんでしょうね。

via Hacker News

Skypeチャットの履歴を保存する

Skypeといえば、元々のコンセプトであるP2P方式から、中央サーバ型への移行が少しずつ進んでいるみたいですね。

昔はSkypeを始めた頃まで無限にチャットログを遡れたのですが、ある時点からはこちらも制限が掛かり、大昔のチャットログにはアクセスできなくなってしまいました。

さて今回、スカイプのチャットルームの過去の発言からちょっと複雑な検索をしようとして、準備として「全選択→コピー→エディタに貼り付け」しようとしたのですが、どうしても発言一個分しかコピーされてきません。昔はできたと思うので、Windows版クライアントの仕様が変わったんでしょうか。不便です。

クライアントからチャット履歴が取れないとなると、他の方法を使わないといけません。チャットログのファイルはディスク上にあり、sqlite形式のファイルみたいなので、sqliteのDBが開けるツールなら何でも使えば開くことはできます。

汎用のsqliteクライアントでもいいのですが、Skyperiousは、スカイプのチャットログに特化した、過去ログを閲覧・加工するためのツールです。

skyperious

一対一でチャットした相手や、グループチャットの一覧が出て、選択すると過去ログが表示されます。コピーも自由ですし、ファイルへの書き出しもできます。

skyperious-stats

緑のiマークを押すと、チャットの統計情報も出してくれます。グループチャットで良く発言している人の発言の数や割合、ファイルの送受信数、良く使われている単語、などが見られます。

GithubにはPythonのソースコードも公開されており、一応ツールのソースを確認することができます。(とはいえ、配布されているバイナリだけに何か入ってても責任取れないので、利用は自己責任でよろしく)

マイクロソフトがSkypeクライアントの機能を削ったのにも彼らなりの理由は何かしらあるのでしょうけど、TwitterやFacebookなどでも自分のデータは書き出せるように(いろいろなユーザーが要望したのが効いて)なっていますし、自分のチャットログは自分のものだ、というのはそんなに不思議な感覚ではないと思うんですよね。できればこういったツールに頼らなくても自由に使えるように、公式クライアントが改善されるといいのですが。

via Ask Ubuntu

自前のメールサーバーを使っていても多くのメールはGmailユーザーの友人経由でGoogleに捕捉されている、という話

自分の電子メールは自分のサーバで管理し、プライバシーを守りたいとしてきた ベンジャミン・ヒル(Benjamin Marko Hill)さんが、Gmailのサービスが開始した2004年からの10年間の自分のプライベート用メールアドレスのメールボックスを解析してみたところ、近年では1/3から半分近くのメールがGmailのサービスにも知られている、という結果が出たそうです。

ヒルさんは、ネットの検閲に反対するなどの活動で知られる電子フロンティア財団(EFF)のディレクターでもある友人のピーター・エカーズリーさんがGmailを使っていることを知って驚き、「Googleにすべてのメールデータを持たれていてもいいのか?」と尋ねたところ、エカーズリーさんが「友人が全員Gmailユーザーなら、結局自分のメールもGmailに把握されてしまっているから」と答えたことをきっかけに、自分の過去のメールがはたしてGmailを経由しているかどうかを調べる気になったということです。

メールボックス内のメールのFromやToを解析し可視化するPythonとRのコードは公開されています。

emails_gmail_over_time

毎週受け取ったメールの総数(赤)と、そのうちヘッダからGoogleのサーバーを経由していたとわかったメールの総数(青)をプロットしたものが上のグラフです。毎週の変動が多いですが、グレイでプロットされた移動平均を見ると、Googleに知られているメールの割合が年を追うごとに少しずつ増えて、最近では1/3のメールがGmailに絡んでいることがわかります。銀行やオンラインショップからの案内メール等はGmailから発信されていないことが多いだろうことを考えると、それ以外の普通のメールではGmailから発信されている割合はさらに高くなるのではということ。

また、自分が返答したメールについて、返答した元のメールの発信がGmailからであれば、返事もGmailを経由して返っていると仮定してカウントしたところ、今は半数ぐらいのメールはGmailのサーバに向けて送っている = 自分の返事したメールの半数はGoogleに読まれ得る、という数字が出たとのこと。ヒルさんがGmailを選んだのは彼の周囲でGmailユーザーが多いだろうと考えてのことで、HotmailやYahoo! Mailなど他のメールサービスでも同じような話はありますし、それらのどこからも見えていないメールの割合はだいぶ小さくなるのかもしれません。

メールがソーシャルなコミュニケーションのツールである限り、自分が自前のメールサーバーを建てたところで、友達がみんな大企業のメールサービスを使えば、自分のメールの多くも大企業の入手するところとなってしまうわけですね。以前ご紹介した、友達が多数ソーシャルネットワークに参加していると、参加していなくても自分の交友関係が把握され得る、という研究と通じるところがありますね。

自分も私用のメールではGmailを重用していますし、このような状況で手間を掛けて自前メールサーバーを構築・維持したいとも思わないので、これらの大手の業者が自分のメールの中身を万が一にも悪用しないことを期待するしかないですが。

via @HackerNews