意味悲鳴

PythonとかUnityとか.技術ブログでしたが,研究ブログにシフトしました.

python3でbcryptを使ってパスワード認証をつくる

タイトルの通りです.試したら上手くいったやーつなのであまり当てにしないこと.参考文献は一番下にまとめて載っけています.

bcryptを使って.htpasswdファイルを生成してBASIC認証実装している日本人はビックリするほど存在していないようで.役に立つ人もいるかも,と思い投稿します.ひょっとしたらBASIC認証自体が弱いからわざわざこういうことしないってことなのかな.偉い人教えてください.

.htpasswdの生成

以下のコマンドでファイルを生成します.

htpasswd -Bcb .htpasswd user passwd

詳細について全部は説明しませんが,大文字のBがbcryptを使った暗号化を指定するオプションです.

\(๑╹◡╹)ノ>>>htpasswd                                                                      
Usage:
    htpasswd [-cimBdpsDv] [-C cost] passwordfile username
    htpasswd -b[cmBdpsDv] [-C cost] passwordfile username password

    htpasswd -n[imBdps] [-C cost] username
    htpasswd -nb[mBdps] [-C cost] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -b  Use the password from the command line rather than prompting for it.
 -i  Read password from stdin without verification (for script usage).
 -m  Force MD5 encryption of the password (default).
 -B  Force bcrypt encryption of the password (very secure).
 -C  Set the computing time used for the bcrypt algorithm
     (higher is more secure but slower, default: 5, valid: 4 to 31).
 -d  Force CRYPT encryption of the password (8 chars max, insecure).
 -s  Force SHA encryption of the password (insecure).
 -p  Do not encrypt the password (plaintext, insecure).
 -D  Delete the specified user.
 -v  Verify password for the specified user.
On other systems than Windows and NetWare the '-p' flag will probably not work.
The SHA algorithm does not use a salt and is less secure than the MD5 algorithm.

上記のマニュアルを見れば分かる通り,他の暗号化オプションはだいたいinsecureと記載されているので,みんなbcryptを使おうなというお話のようです.調べた限りでは,実際他よりも安全らしい.

Python上での実装

生で実装とか無謀なので,ライブラリ使います.

pip install bcrypt

あとはライブラリに実装されている関数を使う.が,その前に.htpasswdそのものの中身を開かないといけない.

import bcrypt
def basic_check(user, password):
    passwd_file = open(root_path + "/../config/.htpasswd", mode="r")
    hashed_line = passwd_file.readline()
    passwd_file.close()
    hashed_user, hashed_passwd = hashed_line.strip().split(":")

strip()でファイルに含まれる改行を取り除いて,split()でユーザ名とパスワードをわけて代入するところがミソ.↑の関数内に以下のような一文を加えて判定する.

return bcrypt.hashpw(password.encode("utf-8"), hashed_passwd.encode("utf-8")) == hashed_passwd.encode("utf-8") \
       and user == hashed_user

bytesにしないといけないので忘れてはいけない.あとはこれをWebアプリなりなんなりに実装する.

以下参考文献.

pythonでbottleで暗号化パスワード(.htpasswd)でのBasic認証 - Qiita

Salt and pepper - How to encrypt database passwords

CRYPT_BLOWFISHのアルゴリズム$2a$, $2x$, $2y$について英語のドキュメントを読んでみた | kanonjiのブログ

python - Why can bcrypt.hashpw be used both for hashing and verifying passwords? - Stack Overflow

python - How to store and compare password in db using py-bcrypt - Stack Overflow

ブロガーが承認欲求を満たすための自動化レシピ2つ(そのうち増やす)

こんばんは.

ブロガーペーペーの自分でも,GoogleAnalyticsのセッション数とかページビュー数が増えると「やっほい」となります.なりますよね.でもいちいちGoogleAnalyticsを見るなんて面倒臭すぎて死んでしまいます.

他にも,Twitterで自分のブログの記事が言及されると元気になりますよね.なりませんか.私はすごくなります.

 

これら二つを適当に自動で自分のSlackに流すようなものを作ったので,その記録用に書いています.ぶっちゃけ前者(GAのセッション数,PV数確認)については私は新しいことを一切していないのですが,まぁ一応,まとめておこうってことで書いておきます.

 

GAのセッション数,PV数 → Slackへ自動投稿

f:id:zyusou:20170315211517p:plain

こんな感じ.良い感じですね.うちのSlackにまた新しい玉藻の前が増えました.でどうやるんですかって話になると思いますが,この記事みてやってください.以上.というぐらいこの記事が有益です.

 

engineer.crowdworks.jp

 

GoogleAppScriptのソースから何から全て書いてあります.

ひとつだけ注意点を挙げるとするならば,この方法は画像を添付してPostする必要があるので,新規にBotを追加する必要があります.俗に言う個人開発のBotは多分Slackでいう「App」に該当するので,そちらを経由してこの方法を使おうとすると私のように小一時間ハマります.おそらく別の手法で行えるとは思いますが,少なくともこの方法では出来ません.

 

Slackのこのあたり,よくわからなかったけど,FAQに質問そのものがあったので,そのうち日本語にして記事にするかも.「How are incoming webhooks, slash commands, and bot users different?」のあたりです.

api.slack.com

 

 

Twitterでブログ記事に関する言及をSlackに通知してもらう

これについては想像している人もいるかもしれませんが,IFTTTでレシピ作ればいいだけです.一発です.

 

 

残念なことに2016年11月のアップデートでIFTTTはユーザが作成したレシピの公開ができなくなりました.ので,私が作成したレシピを公開できません.仕方がないのでレシピの作成方法を共有しておきます.とはいえ,IFTTTに慣れている人からすると,そんなに難しいことはありません.

 

f:id:zyusou:20170315211913p:plain

 

まずトリガーとしてTwitterを選択.

 

f:id:zyusou:20170315211933p:plain

 

で,「New tweet from search」を選択(したの方にあります).要するに,ブログ記事のURLで検索して新しいツイートが見つかったらそれがSlackに流れてくるという戦法です.自前で実装しようとするとAPIの上限に引っかかるとかでいろいろ面倒なことになりますが,こちらならそんなこと気にする必要ありません.便利ですね.

 

f:id:zyusou:20170315212034p:plain

 

で,実際に入力する内容ですが,わたしは「siganaitohoho.hatenablog.jp OR mobile-games.hateblo.jp OR prpr.hatenablog.jp」と設定しています.要するにブログのドメインを指定してあげればOKです.大文字で「OR」を使って繋げると複数一気に検索することができるので,ブログを複数運営している人は便利かと思います.

 

f:id:zyusou:20170315212439p:plain

 

でそのあとSlackを詮索してPost to channelを選択.この後は自分の通知したいSlackのチャンネルを選択して終了.特に弄る必要はありません.

 

以上です.

 

まだ2つしかありませんが,ゆくゆくは増やしていきたい所存.とはいえ,現状の2つだけで僕の承認欲求は既に満たされている気がするので,満たされなくなったらまたなんか通知を自動化します.以上です.

 

 

できる逆引き Googleアナリティクス Web解析の現場で使える実践ワザ240 ユニバーサルアナリティクス&Googleタグマネージャ対応
 

 

IFTTTレシピブック (I・O BOOKS)

IFTTTレシピブック (I・O BOOKS)

 

 

(IFTTTの本売ってるんだ…….)

ゼロから作るDeepLearning 3日目(ぐらい) 3章途中〜5章途中

 

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

 相変わらず,Mac上のJupyter Notebookを使って本を読み進めています.

 

ここ1週間ほどちまちま進めてはいたのですが,記事に書くほどガッツリ進めてはいなかったので放置していました.完全に記事書く方のが面倒くさくなってきているやつです.

内容自体は,実際にニューラルネットを実装してみたり(3章),ニューラルネットの重みを更新してみたり(4章),誤差逆伝播法を勉強してみたり(5章)と,ちゃんとディープラーニングしている気がしてきて楽しくなってきました.良い.

 

本書の途中でReLUレイヤに関する説明が出てくるんですけど,最初「なんでこんなレイヤ噛ませるんですかねぇ」と思っていたら,微分した時に「!」ってなりました.いや,そりゃそうなんだけど,言われるまで気づけないあたり数学力がお察しだなぁと.

 

機械学習強者になるためにもっと勉強したいですね.今年中に以前ブログ経由でいただいたはじパタと緑本は完璧に理解したいところです.頑張る.頑張れる.多分.

内と外からの圧

今日,M2の先輩に「はやく就活切り上げて研究したら」という圧がある発言をされました.とは言え,本人はめっちゃ優しい人なので,そんなストレートじゃないし,何重にもオブラートに包んで言ってくれました.優しい.

 

うん.そう.知ってるんだ.自分でも分かっているんだよなぁこれが.正直ここ数ヶ月,本当に進捗と呼べるようなものが全然出ていないので(研究そのものをまとめる作業はメンターさんとなんとか終わらせたものの,それをすすめるみたいな事はぜーんぜんやっていない,不味さしか無い),自分も正直ドン引きしている.

 

先輩に外から圧をかけられたけど,それ以上に自分でも内側から圧を感じているんですよ.焦燥感をひたすらに感じている.修士学生なんだから,就職活動なんてさっさと切り上げて研究しろよというのは本当にその通り.天才的な能力があるわけでもない私は継続して研究し続けないと確実に成果も出せないし.勉強しないといけないことをくさるほどあるし,読まなきゃいけない論文もたくさんあるし.

 

とは言え,ファーストキャリアとして何を選ぶか,どの会社を選ぶかと言うのを研究のために投げ出せるほど私は研究にぞっこんというわけでもないので(実はこれがマズい気もするが),そちらに専念してさっさと結論を出すのも正解のような気もする.

 

というか,冷静に考えると,世間の就活生は3月~10月で内定獲得まで行くんだし,私12月からはじめて3ヶ月程度で就活終盤になっているだけでもマシなんじゃないの.そうなんじゃないの.それでもまだ早く終わらせるべきなの.ぐぬぬぬぬ.

 

でもまぁ,その間研究しないのもバカですね…….頑張ってちょっとずつでも研究しないと…….する…….

ゼロから作るDeepLearning 2日目 OSX上での環境構築~3章途中

はい.

今日の目的は持ち運んでいるMac上に環境を構築して,そこから続きをやるみたいなやーつです.


anacondaのインストール

Download Anaconda Now! | Continuum

ここからGUI版をダウンロードしてインストールする.

環境変数の書き換え

zshを使っている人がほとんどだと思う.インストーラ.bash_profileの書き換えをしてくれるけどzsh側はやってくれないので自分で書きます.

export PATH="/Users/「ここにユーザー名」/anaconda/bin:$PATH"

jupyter notebook themeの変更

初日のやーつをそのままやればOK

[http://prpr.hatenablog.jp/entry/2017/02/17/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeepLearning%E5%88%9D%E6%97%A5%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%EF%BD%9E2%E7%AB%A0:title]

あとはゆるゆる続きを解いているんですが,行列普通の演算だと思って解いていると地味にハマるというか,np.array()に1次元のlistを入れたときの挙動が代わってくるのが,ほへぇという感じ.だから書面でも1次元配列と言って,行列と言っていないんでしょうけど.

確かに[[1], [2], [3]]とか書いて3行1列の行列を示すのは馬鹿らしいとは思うし,オプションで縦か横か示すのも馬鹿らしい気もするので,まぁわかるには分かるんだけど,分からないみたいな.なんなんでしょうねこれ.


有名な手書き文字認識のMNISTデータセットを処理するところまで入ったので今日はここまで.jupyterの適当に書いても動く感じ(import途中で書いてもいいとか(本当は良くないだろうけども))とか,その場でメモ取れるのとかがだいぶ楽しくなってきた.今後は全面的にjupyterに移ってもいいかもしれないですね.問題はこれを制作物として認めてくれそうな企業が無さそうって話でしょうか.しょんぼりですね.はい.

ゼロから作るDeepLearning 初日 環境構築~2章

というわけでね.始めますよ.

 

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

 

研究室にいて今までディープラーニングに触れずに生きてこられたのっておそらく私だけだと思うんですけど(研究分野的にズレていて,分からなくても生きていけた感じがあった),さすがにこのままでいるのは恥ずかしいと思うので今月中にこれを終わらせたい.

というわけでやり始めました.

 

github.com

 

ついでにいい機会だし,JupyterNotebookも使い始めました.とりあえず背景が黒くないとプログラミングできないマンなので,これを使ってcustom.cssを編集します.

 

github.com

 

ついでにこのテーマで使えて良さげなフォントをインストールします.

 

github.com

 

f:id:zyusou:20170217220116p:plain

 

色合いがクール.その代わりグラフのメモリが黒くなって悲しい感じ.matplotlibのオプションをいじるとか,そもそもseaborn使えばいいとか色々思うところはあるので,そのうちなんとかします.

 

ショートカットはこの辺を見ると参考になる.

www.cheatography.com

 

けど,それ以上にコマンドモードのときにhって打つとヘルプが出てくるので別にそれで良い感じがしてきます.

 

本の内容については,単純にパーセプトロンの構造の話が出てきて終わりという感じ.NANDゲートを使うあたりで「別にNOT用意して噛ませれば良いのでは」とか思ってしまったが,重みを考慮してほげほげすることを考えるとこっちのほうが良いんですかね.

で,肝心のニューラルネットワークはまだ出てこないので全然.まぁ,まだ2章だからね.これからも継続して頑張ります.

 

あと,並行して流しているdアニメのカードキャプターさくらが最高すぎて最高です.

 

 

早くクリアカード編読みたいからコミックス全巻買おうかとも思ったんですが,やはりアニメで丹下桜さんのボイスを堪能したいと思い,でも時間は無いし,ということでパラレルにやっています.バグがあっても深夜に一人で「ほえぇ~!」って言うと何とかなりそうな気がする.絶対,大丈夫だよ!

うっせー研究させろ

タイトルはここ2習慣ほど就活を完全に断って研究していて,ガッツリメンターさんにプレゼン資料についてザクザク刺してもらった感想です.いや,メンターさんに莫大な負担をかけた点については本当に申し訳なかったと思っているんですけど,それ以上に「はやく自分の研究をちゃんと進めたい」という気分になっており,さっさと勉強させろという感じです.時間寄越せ内定寄越せ研究させろ.