iyuichiの私的開発ログ

渋谷で働くWebエンジニアのログ. Java, Android, iOS, Docker, GCP, AWS, ゲーム開発

Pythonであの問題を解く

ちょっとバズっていたあれです。
ほとんどのエンジニアには解けるが、下位10%のダメなエンジニアにだけ解けないパズル? - Ruby on Railsのビシバシはぁはぁ日記

ネタバレはしてません。
curlでやってる人が多かったのですがpythonでやりましたという話。

Pythonでhttpリクエストを扱うにはrequestsというライブラリが簡単です。
Requests: HTTP for Humans — Requests 2.9.1 documentation

Install

pip install requests

使ってみる

import requests
r = requests.get('http://challenge-your-limits.herokuapp.com/')
r.text

GET以外の場合は、

r = requests.post("http://httpbin.org/post", data = {"key":"value"})
r = requests.put("http://httpbin.org/put", data = {"key":"value"})
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")

はい、あとは call/me というヒントとエラーメッセージから推測していけば答えにたどり着けそうですね!

Happy hacking!

入門 Python 3

新品価格
¥3,996から
(2015/12/25 14:41時点)

楽天で年末wifiレンタルしようとしたら1/6まで在庫ないとか

上記のレンタルWiFiに関しまして、大変多くのご予約を頂いております。ご注文頂いた皆様には大変申し訳ございませんが、現在お貸し出し出来る端末が欠品しており
恐縮ではございますが、お待ち頂いている状況となっております。折角当ショップをお選び頂いたのに、お客様のご要望にお応え出来なくスタッフ一同お詫び申し上げます。
【最短発送予定日のお知らせ】
予定では1月6日東京からの発送が最短日となります。翌日お届け、または地域によっては翌々日のお届けが最短ご利用開始予定となります。ご注文頂いた皆様には大変申し訳ございませんが、現在お貸し出し出来る端末が欠品しており恐縮ではございますが、お待ち頂いている状況となっております。折角当ショップをお選び頂いたのに、お客様のご要望にお応え出来なくスタッフ一同お詫び申し上げます。
【最短発送予定日のお知らせ】
予定では1月6日東京からの発送が最短日となります。翌日お届け、または地域によっては翌々日のお届けが最短ご利用開始予定となります。

まあ、待つわけがないよね。

件名に"重要なお知らせ"とは書いてあったけど、文面は普通の注文確認メールと同じ感じだったから、しばらく見落としていた。
こういう大事な話は、結論を先に書けよと思う。
 

MNPによるキャッシュバックがなくなりそう

iphone-mania.jp

もう2年ごとに他社に乗り換えした方がお得みたいなことはなくなりそうです。
まあ普通に既存顧客を大事にしてくれるようになるといいなと思います。

月々の料金がもう少し抑えられて、新端末の購入料金が高くなる方向になるのかな?

痔の治療をしてきた話 ~ 入院してきたけど聞きたいことある? 入院生活編 その1 ~

さて、前回までに入院準備のところまで書いてきました。
時間が空いてしまったので過去記事のリンクを置いておきます。iyuichi.hatenablog.jp
iyuichi.hatenablog.jp

今回は、入院生活について書きたいと思います。
最終的には私の場合、最初に言われていた通り10日間の入院となりました。
症状によってや家が遠い方の場合にはこれより長くなったりするようです。

初日

入院初日ですが、受付で12時頃から手続きになりました。
その後、3階に行くように言われて3階へ。
ここで簡単に売店や給湯室などの設備について案内があります。
それから、持ち込む薬があるかなど問診があってから入院する部屋に案内されます。

私は保険で差額がない4〜5人の大部屋で申し込みをしました。
結果4人部屋でした。部屋はここのベッドが完全にカーテンで仕切られていて話し声などは聞こえるものの、通常は同じ部屋の方と顔を合わせることはありませんでした。

部屋に案内された後は少し時間があってから簡単な診察があります。
後で考えると本当はこの時間にご飯食べちゃいけなかったような気もしますが7Fにあるレストランでオムライスをがっつり食べてしまいましたー

診察が終わった後は翌日まで特にやることはありません。
翌日の手術の予定時間は夕方ごろに伝えられます。朝一だと8時半くらいから。

手術前日の夕飯は軽食となります。

f:id:iyuichi:20151023122503j:plain
こんな感じでスープとパンと、トマトのサラダだけでした。

後はテレビとか観ながら過ごして21時に消灯になります。
6時起床なんで早めに寝ましょう。

手術当日

入院して2日目。手術日になります。
朝起きてしばらくすると手術前に腸をキレイにしておくために下剤が渡されます。
液体のもので味がまずいので水と交互に飲んで飲み干すように言われます。
実際飲んだ印象としては、後味が苦いスポーツドリンクといった感じでした。

下剤を飲んで出し終わったら点滴をされます。
どうやら抗生物質の点滴のようです。
私はこの点滴がなかなか入らなくて点滴をしないままで手術室に向かうことになりました。
最悪、手術室で点滴入れてくれるので同じようにあったとしても安心して大丈夫です。

手術は背中から麻酔を打たれてうつ伏せの状態で行われます。
意識はあるので何かやっているのはわかりますが痛みとかは全くありませんでした。
終わった後に切り取った"あいつ”を見せてもらいました。これであの不快感からはお別れできるわけです。

下半身の感覚が全くないので手術台からストレッチャーへ移る際や、ストレッチャーから自分のベッドに移るときは看護師さんにされるがままです。
麻酔が効いている間は当然痛くないですが、あまり動いちゃいけないので何もできずにウトウトしながら時間をやり過ごしていきます。

午後になると麻酔がだいぶ切れてきて足の感覚が戻ってきます。
でもまだ立ち上がったりしちゃいけないのでゴロゴロしていないといけません。
それと下半身は大きなオムツのようなものをあてられてT字帯をつけられた状態です。
この時点では麻酔が切れてきても特に強い痛みとかは感じませんでした。

この日、一番辛かったことはおしっこの処理です。
手術の当日は起き上がってはいけないので尿瓶で用をたすことになります。
私は尿瓶初体験でした。
ベットの上で横になったままで用をたすって難しいかったです。
ハンディなエコーを看護師さんが持ってきて尿の量を測ってくれます。
「もうそろそろ出さないと管を入れて抜くことになる」と言われたりして、それは嫌だなと思いながら必死におしっこを出す作業です。お腹を押したりしながらなんとか一晩乗り切りました。

翌朝になると、初回だけ看護師さん立ち会いのもとでトイレまで歩いて行って良くなります。
前日までのトラウマでトイレに行ってもうまく出せるのか心配になりましたが、そこは普通にできました。
昨日の苦労はなんだったのか。。

ということで長くなってきたので今回は入院生活初日までにしておきます。

slackのメッセージをエクスポートしてMongoDBに入れてみる

Slackはメッセージのエクスポートができます。
できるのは、Team OwnerかAdminのユーザです。

ただ、フリープランで利用している場合には、private channelやdirect messageはエクスポートデータには含まれません。
公開されているチャンネルが対象となります。ちょっとだけ残念。

詳細はこの辺を参照
Understanding Slack data exports – Slack Help Center

では早速エクスポートをしてみます。
https://my.slack.com/services/export
f:id:iyuichi:20151201201237p:plain

start exportをするとzipファイルでデータがDLできます。
回答すると、チャンネル毎のディレクトリに日付毎に分割されたjsonファイルが入っています。

それをMongoDBに入れてローカルで検索できるようにしてみました。


slackからexportしたデータをMongoDBに取り込む

BASE_DIR はDLしたデータを置いているディレクトリです。
slack_dataというDBをMongoDB上に作ってデータを保存するようになっています。
collectionはチャンネル毎(ディレクトリ毎)に作成されます。
同じデータは取り込まないようにupsert=Trueで登録しています。
exclude_filesは、DLしてきたディレクトリ内で取り込まなくてよさそうなファイルを指定しています。
exclude_post_typeは取り込む必要がなさそうなsubtypeを記載しています。好みで変更してもらって良いかと思います。
各メッセージのデータにはユーザIDしか入っていなくてユーザ名がuser.jsonのデータと結合しないとわからないのが不便なのでロジックの中でidからユーザ名を取得するようにしています。
少し加工していたりするのでrawというキーで生データも登録しています。
単純にjsonオフジェクトをMongoに入れるだけならもう少し簡単な処理になります。。。

こんな感じで取り込んでおいたら、検索したりちょっとした分析とかできないかなあと思って作ってみました!

unicodeエスケープシーケンスを読む

pythonで簡単に人間が読める文字で表示できました。
以下のどちらでも可能。

print u'\u3088\u3046\u3053\u305d\u30e6\u30cb\u30b3\u30fc\u30c9\u306e\u4e16\u754c\u3078'

print '\u3088\u3046\u3053\u305d\u30e6\u30cb\u30b3\u30fc\u30c9\u306e\u4e16\u754c\u3078'.decode('unicode_escape', 'utf-8')

エスケープする方も。

unicode('ようこそユニコードの世界へ','utf-8')

Macなら特に何もインストールしなくてもコンソールで実行できるので、もうunicodeエスケープは怖くないですね!

MacにHomebrewで入れたpyenvでpython3.4.3をインストールする

普通に"pyenv install -v 3.4.3"ってやるとエラーが出ました。
エラーメッセージに記載されていたURLを見てみる。
Common build problems · yyuu/pyenv Wiki · GitHub

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

If you have homebrew openssl and pyenv installed, you may need to tell the compiler where the openssl package is located:

CFLAGS="-I$(brew --prefix openssl)/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.4.3

まさにこのケースでした。
homebrewでopensslとpyenvをインストールしている場合はopensslの場所を指定してあげないといけないとのこと。