Project Eulerの日本語訳へのリンクを張るuser script(2015/4/30時点)

Project Eulerの日本語訳へのリンクを張るuser scriptを更新しました。

Chrome 42.0.2311.90 m
Tampermonkey 3.10.84
で動作確認してます。


// ==UserScript==
// @name         ScriptEuler
// @namespace    http://d.hatena.ne.jp/yatt/
// @description  link euler project problem to http://odz.sakura.ne.jp/
// @include      https://projecteuler.net/archives*
// ==/UserScript==

(function(){
  var lst = document.getElementsByClassName('id_column')
  var prefix = 'http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%20'
  
  for (var i = 1 ; i < lst.length; i++)
  {
      var no = lst[i].innerHTML
      var a = document.createElement('a')
      a.href = prefix + no
      a.innerText = no
      
      lst[i].innerText = ''
      lst[i].appendChild(a)
  }
})()


関連

pythonのrequestsライブラリの更新に追従

http://d.hatena.ne.jp/yatt/20121017/1350480131

requestsについて書いた記事ですが、既にAPIが変わってしまっていたので、
同じ動作をするコードを書きました。
対象はrequests 2.6.0です。

はてなダイアリーにログイン

変わりません。

#! /usr/bin/python2.7

import requests

s = requests.session()

params = {
    'name': 'your account name',
    'password': 'your password',
}
r =  s.post('https://www.hatena.ne.jp/login', params=params)

print r.text

OAuth認証

OAuthの処理が、requests_oauthlibという別ライブラリに切り出されました。

requestsとは別途、インストールしておきましょう。

$ pip install requests_oauthlib

また、レスポンス文字列をjsonにデシリアライズする処理が
プロパティ.jsonからメソッド.json()に変わりました。
http://docs.python-requests.org/en/latest/api/?highlight=response#requests.Response.json

#! /usr/bin/python2.7

import requests
from requests_oauthlib import OAuth1

auth = OAuth1(
'consumer key',
'consumer secret',
'access token',
'access secret',
)

url = 'https://api.twitter.com/1.1/statuses/home_timeline.json'
r = requests.get(url, auth=auth)
print r.json()

OAuth認証してストリーム処理

UserStreamなどのストリームを扱う場合の引数の渡し方が変わりました。prefech=Falseからstream=Trueになっています。
http://docs.python-requests.org/en/latest/user/advanced/?highlight=stream#body-content-workflow

#! /usr/bin/python2.7

import requests
from requests_oauthlib import OAuth1

auth = OAuth1(
'consumer key',
'consumer secret',
'access token',
'access secret',
)

import json
url = 'https://userstream.twitter.com/2/user.json'
r = requests.get(url, auth=auth, stream=True)
for line in r.iter_lines():
    if line == '':
        continue
    print json.loads(line)


grequestsも変わらず使えるようです。なんかちょっと遅い気はしますけど。

ANAのシーズンチャート2015国内線

シーズンチャート
http://www.ana.co.jp/amc/reference/tukau/kokunai_6.html#a01


ANAのシーズンチャート、期間がテキストでしか示されなくてよく分からない・・・。

年間カレンダー的なものを探しても見つけられなかったので自分でカレンダーを作って整理しました。

元の情報(2015/3/21時点)


作ったカレンダー


カレンダーを作るのに以下のライブラリを使いました。
http://shanabrian.com/web/javascript/date04.php

続きを読む

Python2.7でGMailから日本語メールを送信する

以前使っていたスクリプトを紛失してしまったので、ざっと書き直してこっちにもメモ。

gist

#! /usr/bin/python2.7
# coding: utf-8
 
"""
stdinの内容をGMailで
自分自身に送る
"""
 
import smtplib
 
host, port = 'smtp.gmail.com', 465
username, password = 'XXXXXXXXXXXXXXXXXXXXX@gmail.com', 'YYYYYYYYYYYYYYYYYYYYY'
 
import sys
import os
 
content = sys.stdin.read()
 
 
# unicodization
for enc in ['utf-8', 'cp932', 'euc-jp']:
    try:
        content = unicode(content, enc)
    except: pass
 
subject = content.splitlines()[0].strip()
body = content
 
# build mail message
message = u"""From: %s
To: %s
Subject: %s

%s
""" % (username, username, subject, body)
 
# normalize newline character to CRLF
message = message.replace('\r\n', '\n')
message = message.replace('\r', '\n')
message = message.replace('\n', '\r\n')
 
message = message.encode('utf-8')
 
smtp = smtplib.SMTP_SSL(host, port)
smtp.ehlo()
smtp.login(username, password)
smtp.sendmail(username, username, message)
smtp.quit()
 

Jsoupでプロキシを使えるようにする

Androidをいじっています。

開発用端末がしているSSL通信を見るために、fiddler2 *1という
キャプチャソフトのプロキシを経由させようとして手間取ったしたので記録。

ルート証明書をインストールして*2、開発用端末のWiFi設定でプロキシを設定して
動作確認したところ、プロキシを経由していないのか、通信がキャプチャされませんでした。

続きを読む

Pythonのdict内包表記でキー衝突が起きたらどうなるか

  • 後勝ち?
  • 不定
  • 重複した値はリストになる?

検証

# 1. 重複しないケース
print {i:i for i in range(10)}
#   => {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}

# 2. 重複するケース。昇順
print {i+(10-i):i for i in range(10)}
#   => {10: 9}

# 3. 重複するケース。降順
print {i+(10-i):i for i in range(10,-1,-1)}
#   => {10: 0}

結論

後勝ちっぽい


/trunk/Python/compile.c の関数、 compiler_dictcomp あたりを読み込めば
分かりそう。