.rute1/

キャリア/心理学/読書/Pythonなどなど

【Python】responder でHello, World ! 0.0.0.0をhostに指定する方法

responder でHello World! 0.0.0.0をhostに指定する方法

人間のためのイケてるPython WebFramework「responder」、そして作者のKenneth Reitzについて - フリーランチ食べたい

こちらの記事で話題になっているresponderを早速試して見ました。
Hello World ! するまでに2つひっかかったポイントがあったので、共有します。
ちなみにresponderどころかDjangoもFlaskも使ったことのない初心者なので、おかしな内容になっているかもしれません。ご容赦ください。
※2018年12月2日時点での情報です。

環境 * AWS EC2 Ubuntu Server 18.04 LTS (HVM), SSD Volume Type * Python 3.6.5

ModuleNotFoundError: No module named 'starlette.lifespan'

とりあえずこちらのクイックスタート通りにHello World ! を書いてみました。   Quick Start! — responder 1.1.2 documentation

import responder
api = responder.API()
@api.route("/")
def hello_world(req, resp):
    resp.text = "hello, world!"
api.run()

実行したところModuleNotFoundError: No module named 'starlette.lifespan’というエラーが出てしまいました。
これはgithubのissueにもあげられていました。
ModuleNotFoundError: No module named ‘starlette.lifespan’ · Issue #255 · kennethreitz/responder · GitHub.

problem solved by using starlette 0.8 version

とりあえず今のところはstarletteのバージョン0.8を使えば解決するようです。
pip install starlette==0.8

hostに0.0.0.0を指定したい

ubuntu@ip-172-31-43-88:~/dev/test$ python hello.py
INFO: Started server process [17400]
INFO: Waiting for application startup.
INFO: Uvicorn running on http://127.0.0.1:5042 (Press CTRL+C to quit)

これはEC2を開発環境にしていると毎回困ることなのですが、localhost127.0.0.1にアクセスするのが困難です。
0.0.0.0を開くようにしないとローカルのブラウザから確認できません。

Responderのコードを読むと、どうやら環境変数として”PORT”が設定されている場合は0.0.0.0:PORTが開かれ、それでない場合は127.0.0.1:5042になるようです。

if "PORT" in os.environ:
    if address is None:
        address = "0.0.0.0"
        port = int(os.environ["PORT"])

if address is None:
    address = "127.0.0.1"
if port is None:
    port = 5042

ということで適用にわかりやすいPORTを設定して、

ubuntu@ip-172-31-43-88:~/dev/test$ export "PORT"=10001

EC2のセキュリティグループも変更します。 f:id:rutei:20181202020216p:plain

そしてブラウザからアクセスすると、 f:id:rutei:20181202020213p:plain

Hello World ! が無事表示されました 。

ubuntu@ip-172-31-43-88:~/dev/test$ python hello.py
INFO: Started server process [17405]
INFO: Waiting for application startup.
INFO: Uvicorn running on http://0.0.0.0:10001 (Press CTRL+C to quit)
INFO: ('m.y.i.p', 53094) - "GET / HTTP/1.1" 200

追記: api.run()の引数にaddressとportを与えても同様のことができるようです。

api.run(address='0.0.0.0',port=10001)

【Python】requestsでボタンを擬似クリック

requestsでボタンを擬似クリック

Beautiful Soupでhrefが取得できないボタン等のクリック動作をrequestsで再現する方法を調べたので、まとめます。

hrefが取得できないボタン

例えばこのページの「CSVダウンロード」ボタン部分などはBeatiful Soupでもhrefが取得しにくいためにrequestsでのスクレイピングが困難です。
CSVダウンロード f:id:rutei:20181130205349p:plain

csvダウンロード」ボタンのソースコードはこのようになっています。

<input class="btn btn-primary" type="submit" value="CSVダウンロード">

おそらくこのボタンを押すとなんらかのscriptが動いてダウンロードが始まるものと思います。
requestsでこのボタンをクリックするという動作を再現することはできないので、seleniumを使うといった選択肢をとることが多いかもしれませんが、場合によってはrequestsだけでボタンをクリックしたのと同等の通信を再現することができます。
以下がその方法です。

crhomeデベロッパーツールでnetworkを見てみる

f:id:rutei:20181130205413p:plain

デベロッパーツールを表示した状態でボタンをクリックすると、networkタブでどのような通信が行われているか確認することができます。
今回のダウンロードもバッチリURLを確認することができました。
URLはhttps://www.itdashboard.go.jp/Csv/downloadで、ここにPOSTでdataを送れば良さそうです。
cookieなどはrequestsのsession()を使えば処理してもらえます。
POSTで送るdataもデベレッパーツールから確認できます。
f:id:rutei:20181130205424p:plain

最終的なコードはこのようになりました。

import requests

# ページにアクセス
session = requests.Session()
res = session.get('https://www.itdashboard.go.jp/DataFeeds/csv')
res.raise_for_status() # エラーならここで例外を発生させる

# dataに項目をセット
data = {
    "_method": "POST",
    "year": "",
    "modelname": "BasicInformationAll"
}

# クリック時の通信
res = session.post('https://www.itdashboard.go.jp/Csv/download', data=data)
res.raise_for_status() # エラーならここで例外を発生させる

# レスポンスで返ってきたコンテンツをcsvとして保存
contentType = res.headers['Content-Type']
contentDisposition = res.headers['Content-Disposition']
ATTRIBUTE = 'filename='
fileName = contentDisposition[contentDisposition.find(ATTRIBUTE) + len(ATTRIBUTE):]

with open(fileName, 'wb') as saveFile:
        saveFile.write(res.content)

ファイルを保存する部分はこちらの記事を参考にしました。
Pythonのrequestsを利用してファイルダウンロードする方法 - Qiita

【GitHub】commit履歴にアイコンや名前が正しく表示されなくなった時の対処法

GitHubのアイコンが表示されない

最近、GitHubのcommit履歴で、自分のアイコンや名前が正しく表示されなくなりました。

以下のコミットは全て私のものなのですが、アイコンが表示されている時と表示されていない時があります。

commit履歴のアイコンが正しく表示されず、デフォルトの表示になっている。マウスオーバーしても、ユーザーネームが表示されない。
アイコンがデフォルト表示になっている

調べて見るとどうやらgit configを正しく設定していないことが原因だとわかりました。

私はMac OSAWSのEC2でgitを操作していたのですが、Mac OSではgit configを設定できていたのでアイコンや名前が表示されていて、EC2ではgit configを設定していないためにアイコンや名前が表示されなかったようです。

git configの設定を行うと、正常にアイコンが表示されるようになりました。 ギットコンフィグを正しく設定したら、正常にアイコンが表示されるようになった。

 

git configコマンドによる設定

私が設定したgit configのコマンドは以下の通りです。

$ git config --global user.name "Tanaka Tarou" #GitHubに登録したユーザーネーム
$ git config --global user.email Taro@example.com #GitHubに登録したメールアドレス

ちなみに現在どう設定されているかは

$ git config user.name
$ git config user.email

で確認することができます。 上記のコマンドを打っても何も返ってこなければgit configの設定がされていないことになります。

git configは奥が深いらしく設定ファイルの置き場所や設定項目は他にも色々あるようです。 詳しくは以下のサイトが参考になります。

参考にしたサイト:Gitの設定をgit configで確認・変更 | note.nkmk.me

 

MacBook Pro のキーボードの隙間にホコリが入る問題を解決した Maxkuキーボードカバー

今年の4月に MacBook Pro 13 inch (2017年モデル)を購入して仕事で使用しています。

機能的にはとても満足しているのですが一つだけかなり気がかりな点がありました。

キーボードの隙間に細かいホコリが入り込んでしまうことです。

こういった小さい埃の入り込みによってキーボードが押せなくなったり、あるいは二度と入力することができなくなったりする不具合も発生するようです。ただでさえMacbook Proはキーボードの不具合が公式に認められているので、神経質になってしまいます。

 

MacBook および MacBook Pro キーボード修理プログラム - Apple サポート

 

 

公式がサポートしてくれるのはまあ良いことなのですが毎日仕事で使用しているので数日使えなくなるような状況になるのも困ります。

そこでキーボードの隙間へのホコリの入り込みそのものの防止するような解決策はないか探しました。

その結果こんなものが見つかったので購入してみました。

 

 

 

 

これはシリコン製のカバーで、キーボードの上に乗っけて使います。

特に何かで固定するわけではないのですが、薄くキーボードの凹凸に沿って忠実に作られているので意図的に剥がそうとしない限りは外れてしまうことは滅多にないと思います。

これを常に貼り付けて PC を使用すればほこりが入ることもなくなるし、またうっかり飲み物などをこぼしてしまった時にもキーボードが浸水する恐れはありません。

気になるタイピングの感触の変化ですが、最初の数回は若干の違和感を感じることはあったものの慣れてしまえばほとんど日常の仕事には影響はない程度でした。またカバーの厚みも数ミリ程度なのでつけたまま PC を閉じることができます。

 

アマゾンのレビューによると数ヶ月間使用するとシリコンの形状が変化しキーボードから浮き上がってしまうこともあるようです。私は今のところ2ヶ月弱使用していますが確かに一部のキーが浮き上がってしまっている箇所もあります。

とはいえ、1000円弱の値段で購入することができたので私はそこまで 気にしていません。むしろ製品自体は気に入っているので買い替えに備えてもう一つ同じ商品を購入しました。

これである程度キーボードへのホコリ侵入問題は解決できたかなと思います。

 

 

f:id:rutei:20180629012135j:plain

色にこだわりはなく青のグラデーションカラーを選んだのは単に最も安かったからという理由だけなのですが、実際に使ってみると意外にも評判が良く褒められることが多いので気に入りました。

2016モデル向けの商品ですが、2017モデルでも問題なく使用できます。

本屋での立ち読みは最も生産性の高い読書法である3の理由

 

お久しぶりです。 4月から就職して晴れて(?)社会人になることができました。

社会人にになると、大学生の頃とは違い自由な時間が少なくなってしまいます。特に困っているのが読書の時間です。動画を見たり音楽を聞いたりするのならまだしも、頭を使う読書は疲れて帰ってきてからではなかなか難しいのです。そのため、最近家で本を読むことよりも最寄りの書店で立ち読みをすることの方が多くなってきました。

そこで気づいたことがあります。立ち読みはかなり生産性の高い読書法だ、ということです。今回はその理由について紹介していきたいと思います。

 

1.タイムド・リーディングである

 

タイムドリーディングという読書手法があります。これは読書に制限時間を設けることで、意識的に読書を習慣化する試みです。

例えば時間を30分と決めたら、必ず30分で読まなければなりません。逆に言えば、30分で吸収できるような情報で、なおかつその本の中で最も必要な部分に注目して読むことになります。

書店で立ち読みする時は長々と内容をじっくり読むようなことは難しいので、自然とこのタイムドリーディング方式になるのです。

 

2.ザッピング読みになる

 

ザッピング読みは速読の基本です。
本を最初から最後まで読むのではなく、目次から、必要な情報を考えてその部分を集中的に読む読書法です。
書店で立ち読みする状況だと、自然とこのザッピング読みができるようになります。
なぜなら、立ち読みしているときは「買おうかどうか迷っている」時だからです。そのため、その本に買う価値があるのか判断するために、欲しい情報が載っているかざっと確認するように読む習慣が勝手に身について行きます。

 

3.立ったまま読む

立ったまま読むことが、なぜ生産性に繋がるのか?
それは集中力が鍵を握っています。実は人間は座っている時よりも立っている時の方が集中できることが、科学的に証明されているのです。

forbesjapan.com

 

最近ではスタンディングデスクという、たったまま作業する用のデスクも開発され、商品化されています。
私も職場で試したことがあるのですが、立ったまま姿勢を維持しなければならないというほどよい緊張感のおかげで、普段よりも長いあいだ集中できているように感じます。

 

これら3つの要因のおかげで、立ち読み読書は家やカフェで読むよりもかなり効率よく読むことができていると考えています。

 

「読む」技術?速読・精読・味読の力をつける? (光文社新書)

「読む」技術?速読・精読・味読の力をつける? (光文社新書)

 

 

 

『やがて君になる』を読んでみた感想【ネタバレなし】

中高生の頃は恋愛に対してやたら正しさとか誠実さのようなものを求めていて、「正しい恋ってなんだろう」とか「この感情は本当に”好き”なのだろうか」みたいなことを延々と考えているようなめんどくさい子供でした。


大人になるに従って、そういう問いに意味がなく(少なくとも多くの人はそう思っている)て、そしてそもそも答えるのが難しく多くの大人はとっくに考えるのを諦めているということを知り、自分もいつの間にかそういうことを考えなくなっていきました。

 

でも、そういう「恋の正しさ」とか「本当の好き」みたいなものは確かに日常生活では役に立たないけども、完全に無駄というわけではないと思うんです。
「なぜ生きるのか」という考えてもきりがないことを考え続ける哲学のように、「本当の好きとはなにか」ということについて考え続けることも一つの哲学・美学として尊重されていいと思います。

”好き”にならない恋愛マンガ

どうしていきなりこんな話題について書いているかというと、今回『やがて君になる』を読んで、このテーマについて再び考えざるを得なくなったからです。

主人公は未だに誰に対しても「好き」という気持ちになったことがない、という女の子です。少女マンガのように簡単に恋に落ちたりせず「”好き”とはなんなのか」「これは本当に”好き”なのか」ということについてとことんこだわり、少しずつ手探りで自分の気持ちを確かめていく過程を読むことができます。恋愛マンガとしては異色かもしれませんが、私はとても真面目で誠実な態度だと感じました。


そして彼女の恋の相手も少しねじれていて、そんな彼女の「誰も好きになったことがないところ」が”好き”ということらしいのです。
そんな2人のデートのような奇妙な交流を通して、私まで「”好き”とはなんなのか」ということについて考えさせられました。

 

ちなみにこのブログの一番最初の記事もこのテーマについてだったりします。

好き/嫌い - こころに騙されないために

(このころはまだ「だ、である調」で書いていたのでなんか恥ずかしいです)

 

さらに最新4巻では、人間のもっと深い部分「自分とはなんなのか」という問いかけにまで話が及ぶ展開になってきつつあり、今後も目が話せません。
個人的には、『やがて君になる』というタイトルがどのように回収されていくことになるのか気になります。

 

 

 

 

 

 

 


お嫁においで 2015 / 加山雄三 feat. PUNPEE

 

例えば著名で有名な哲学者達も
名言をたくさん残したけど
これに関してはあまり良い言葉を
不思議と残していないな
多分あいつらも自分の趣味に
恋いこがれちまったんだろう 結局
偉いヤツもここじゃおこちゃま
ナポレオンとレッドぶるウォッカで乾杯(泣)

あまり関係ないですがなんとなくこれを思い出しました。

多分、恋愛に関する哲学分野もあるにはあるんだろうけれど、あまり需要がなくて目立たないのかなと思います。

自動車学校(教習所)を期限ギリギリまでサボるとどうなるのかやってみた(やってしまった)

意識高いようで低いブログを目指す当ブログですが、今回は意識他界記事です。

 

目次

 

スーパー言い訳タイム

まず、自動車学校をサボるまでに至った経緯について説明します。(興味のない方は次に飛ばしてください。)

そもそも、自動車に乗れるようになることに対してそんなにメリットや興味を感じませんでした。もちろん、たまに友達とドライブしにいったりするときは運転できるってすげー、と思っていました。ただ、そうはいっても普段のインドア生活では自動車の必要性を感じなかったんです。特に今後10年くらいは東京で生きていく予定なので、車がなくても問題なく日常生活は送れると考えていました。
そんな私がなぜ免許を取ろうと思ったのかというと、田舎の両親の説得です。地方に住んでいる両親にとっては、車はスマホ以上にないと生きていけないもの、という考え方なので「車くらい乗れなくてどうする!!」と怒られることになりました。それで、渋々教習所に通うことになります。

しかし、教官の方に怒鳴られたり雑に注意されてうんざりするなかでやる気を失い、いつものサボりグセを発揮し自動車学校に行かなくなってしまいました。


教官の方の指導方法や教え方が雑という問題は全国どこの教習所でも頻発しているようで、免許を取るには乗り越えなければいけない壁のようです。


具体的にどのような問題があったかというと、前の時間の教官のミスのせいで次の時間の教官に私が怒られたり、教官が時間中隣の席から手をだしてハンドル操作を直してきてまともに練習にならなかったりということは何回かありました。また、教官によって教え方が違うので同じ項目でも違うことを言われ続けて身につかない、などは多くの人が経験しているらしいです。
もちろんいい人もいるので一概には言えませんが、やりにくい教官もいるのは確かです。
優しく指導してくれる人と怒鳴りながら指導する人では私の調子も変わってくるので、検定試験の時などは優しい教官にあたるように祈っていました。

 

期限ギリギリまでサボるとどうなるのか

教習所の教習期限は9ヶ月間というところが多いようです。
私は1段階のみきわめ(効果測定)前のところでサボり始めてしまい、期限の1ヶ月前になってから「そろそろやばいぞ……」ということで教習所に顔を出したのですが、さすがにもうあと1ヶ月で免許をとるのは無理だと言われてしまいました(ブランクがあったので、みきわめの前に練習する必要もあった)。

そこで窓口の方に提案されたのが、「仮免許入校(仮免許入所)」です。
一旦1段階まで修了して仮免許までとってしまえば、仮免許所持者としてまた入校し直せる(期限をリセットできる)ということでした。ただし、教習期限は9ヶ月なのですが仮免許の期限が6ヶ月なので、次は6ヶ月以内に卒業する必要があります。事務のおばちゃんによると、もし6ヶ月以内に卒業できなかった場合、難易度が相当高いと言われる試験場での一発試験しか方法がなくなるらしいです。

その提案で発破をかけられた私は、なんとか残された1ヶ月で仮免許を取って入校し直し、2段階も無事修了して卒業することができました。

ただし、仮免許入校はあくまでも1から入校し直すので、入校の手続きや支払いもやり直しになってしまうことに注意してください。

 

意外と教えてくれない教習所の落とし穴(?)

2段階はスムーズに取れたかのような書き方をしましたが、実は2段階もギリギリになってなんとか卒業しました。
そこで、同じように教習所1・2段階でギリギリ、という人のためにアドバイス・注意点を書いておこうかと思います。

 

修了検定卒業検定の日程を確認
例えば8月31日が教習期限(仮免許の期限)でも、ちょうど8月31日に検定試験が行われるとは限りません。もしかしたら8月25日あたりが期限内で最後の検定試験の日かもしれません。確認しておかないと、検定試験が受けられずに期限切れになる可能性もあります。

 

学科を先に受ける
特に2段階で多いですが、技能教習で学科〇〇番を受けた後でないと受けれないという決まりになっているものが結構あります。そういうのがあるとそこで予約がストップして計画がずれてしまい、危険です。早めに学科は終わらせておいた方が良いと思います。私はこれでだいぶ計画が遅れてしまいました。

 

というかそもそも最初から

合宿免許にしとけばこんなことで悩まずにすんだかもしれないんですけどね……。

 

激安合宿免許のユーアイ免許

 

マンガで一発!普通免許を早くとる本 実技編

マンガで一発!普通免許を早くとる本 実技編