SurfacePro(Gen5)の日米売価比較

第5世代SurfaceProの評判が良いので購入を検討している。 日本とアメリカのどちらで買うほうがお得かを調べてみた。

結論から言うと、今の為替であればアメリカの方が総じて安い。

CPU メモリ SSD 日本定価(税込) 米国定価 ドル円換算(税込) 差額
Core m3 4GB 128GB ¥114,264 $799.00 ¥94,207 ¥20,057.41
Core i5 4GB 128GB ¥136,944 $999.00 ¥117,788 ¥19,156.28
Core i5 8GB 256GB ¥158,544 $1,299.00 ¥153,159 ¥5,384.59
Core i7 8GB 256GB ¥206,064 $1,599.00 ¥188,531 ¥17,532.91
Core i7 16GB 512GB ¥280,584 $2,199.00 ¥259,274 ¥21,309.53
Core i7 16GB 1TB ¥341,064 $2,699.00 ¥318,227 ¥22,836.72

計算条件は、

  • 為替: 110.97円/ドル
  • 米国消費税: 6.5% (TX州)

とした。 テキサス州の税額なのは、私が今度行くのがテキサスだから。

グラフにすると下記の通り。

f:id:tomo-ono:20170530125635p:plain

i5 8GBメモリ- 256GB のモデルが、何故か日米差額が極端に小さいので、 日本で買うならこのモデルがいいかもしれない。

私はi7 8GBメモリー 256GBをアメリカにてポチろうかと思っている。

poorな環境でのスクレイピングのやり方(あるいはshell script mechanize)

wgetぐらいしか無いようなpoorな場所で、WebページスクレイピングをShell Scriptで書いてみる。

キモはwgetのオプション。 重要なのは下記の3つを付与すること。

  • --save-cookies=<Cookieファイル名> <cookieファイル名>にCookieを保存してくれる。
  • --load-cookies=<Cookieファイル名> <cookieファイル名>があればCookieを読んで、リクエスト時に送信してくれる。
  • --keep-session-cookies TTLがSessionのCookieも保存してくれる。

shで書くときには下記のようにaliasを切って使う事が多い。

alias mywget="wget -q -O - --save-cookies=${cookie_file} --load-cookies=${cookie_file} --keep-session-cookies"

あとは

# login 時のPOST
mywget --post-data "user_id=${user_id}&password=${password}" http://www.example.com/login > /dev/null

# データのGET
mywget http://www.example.com/some/list.csv > my_list.csv

のようにリクエストを五月雨で打っていけば、大抵のWebサイトなら読み書き出来る。

JSONで返ってくるような場合はjqを、XMLで返ってくるような場合はxmllintでゴニョゴニョやるのが良さそう。 特にjqはバイナリ一本で動くのでポータブルでよろしい。

Ruby mechanizeのtextareaの扱いでハマった

textareaを含む編集フォームで、何もいじっていないのに勝手に行頭に改行が追加されていく現象が発生したので調べてみた。

原因としては、

<textarea>
hoge
</textarea>

みたいなHTMLが帰ってきた場合に、Mechanize::Form::Textarea#value が返す値として期待していたのは、"hoge"なんだけど、実際には"\r\nhoge\r\n"が返ってきたよという話。タチが悪いことにこのままPOSTしたりすると、先頭に改行の入るデータがPOSTされてしまうという。。。

今回は対象HTMLが皆上記のようなtextareaの書き方だったので、下記の様なモンキーパッチあてて対応した。 混在している場合はどうするのが正解なのかわからない。。。Webブラウザの挙動を見る限り、"タグ直後の改行は無視する"のが鉄板のようなので、下記のコードでいいっぽいけど。

class Mechanize::Form::Textarea < Mechanize::Form::Field
  def initialize node, value = node['value']
    super
    @value.gsub!(/\r\n/, "\n")
    if @value[0] && @value[0] == "\n"
      @value.slice!(0, 1)
    end
  end
end

APIが無いWebアプリをゴニョゴニョするのは辛いねぇ。。。

AWS Lambdaで任意のURLからファイルダウンロードしてS3に格納する

PythonAWSの勉強がてら、タイトル通りのスクリプトを書いてみた。

IAMの画面から AmazonS3FullAccess のポリシーをアタッチしたロールを作ってやって、Lamdaファンクションに指定してやれば動く。

使い方

下記3つを実行時のPayloadにJSONで指定して実行する。

  • bucket_name 格納先バケット名。存在しないバケットが指定された場合は、バケットをap-northeast-1に作成する。
  • url ダウンロード対象のURL
  • file_name 格納ファイル名

コード

import pycurl
import urllib
import boto3
from io import BytesIO

def lambda_handler(event, context):
    location = 'ap-northeast-1'
    s3client = boto3.client('s3')
    buckets = s3client.list_buckets()
    bucket_name = event["bucket_name"]
    if bucket_name not in buckets:
        bucket = s3client.create_bucket(Bucket=bucket_name,  CreateBucketConfiguration={
    'LocationConstraint': location})
    buffer = BytesIO()
    c = pycurl.Curl()
    c.setopt(pycurl.URL, str(event["url"]))
    c.setopt(pycurl.WRITEFUNCTION, buffer.write)
    c.perform()
    c.close()
    s3client.upload_fileobj(BytesIO(buffer.getvalue()), bucket_name, event["file_name"])

実行時のPayload例

{
  "url":"http://www.google.com/",
  "bucket_name":"mytestbucket",
  "file_name":"google.html"
}

留意点

  • ダウンロードしたデータをメモリに展開するので、大きなファイルのDLは出来ない。
  • もっとおしゃれな書き方は無いものか。

GeekBuyingで買ったGPD Winのライセンス認証が何とかなった

 話題になってるところでは話題のGPD Winですが、この度GeekBuyingにて注文していた機体がようやく到着しました。

 

初めは外観上の問題もなかったので安心してましたがそこは中華クオリティーということで、お約束の不具合がありました。

f:id:tomo-ono:20161208010728p:image

はい、Windowsのアクティベートが出来ません。噂には聞いていたので「当たったかー」ぐらいの感じ。

 

 ともかくGeekBuyingのアフターセールサポート窓口(support_aftersale@geekbuying.com)に、上記のSSを添えて下記のようなメールをしました。

Dear customer service representative,

I've bought GPD Win from GeekBuying.
The order number is #xxxxxxx.

I'm having problem regarding to activation of Windows 10.

I've inputted the Win 10 key which is printed on the silver sticker on the keyboard.
However, Windows couldn't activate with this key.

The error message I got is on the attached screen shot.

Could you send me another key that can activate my Windows?

中学生レベルの英語だ.... 

ともあれ上記で通じたようで、1日ぐらいで新しいシリアルをメールしてくれました。向こうでも認識済みの問題なのでしょうね。

新しいシリアルでは認証もすんなりと通りました。

 

初期不良も落ち着いたところで、ガンガン使い込んでいこうと思います。

f:id:tomo-ono:20161208010544j:image

布団乾燥機を買いました。

  • 冬に布団に入った時の寒さがどうにも辛い
  • 住居環境的な問題で布団が干せない

という問題があり、前々から布団乾燥機を買おうとは思っていたのですが、イマイチピンとくる商品が無いので先送りになっていたところ、

ういにゃんさんの、【2016年】ことし買ってよかったもの 13選【フリーランス編】 にて "日立 布団乾燥機 アッとドライ" が紹介されており、なかなか良さそうだったのでAmazonでポチった。

使ってみた

布団乾燥機の吹き出し口は足元の方にあるので、足元が多少暖かくなる程度かなと思っていたのですが、潜り込んだ瞬間に思わず声を上げるほどの暖かさ。 布団の中全体がホカホカになっている。 これはあれだ。コタツだ。 コタツで寝ると足の方に血栓ができやすくなり、最悪死ぬ場合もあるというからコタツで寝ることは全く推奨されないのに対して、こちらは布団なのだからむしろ寝ることが推奨されるのだ。何たる僥倖。

布団自体の性能も乾燥により回復したようで、朝の暖かさも一味違う状態になっており最高。

また、こいつはシートとかを布団内で広げる必要がなく、写真のようなノズルを掛け布団と敷布団の間に置くだけなので超絶お手軽。ズボラな私でも毎晩利用できる。 f:id:tomo-ono:20161206002426j:plain

ホース、ノズルをまるっと本体にしまえるのもポイントが高い。

というわけで本日も布団で無限に練をしまつ。