タグ: 車輪の再発明

Anacondaもpyenv|venvも使わずにPythonのデータ分析環境を構築する (macOS)

最近、データ分析の関係で少しPythonを使うようになったので、改めて環境構築について考えてみた。

ネット上の情報を漁ってみると概ねAnaconda一択というのが最近のトレンドの様子。確かにWindowsならAnaconda一択だろうし、自分自身、色々と説明するのが面倒だから、初心者に教えるときはとりあえずAnaconda入れておけと言ってしまう。

とはいえ、モジュールのインストールにはpipがあるし、仮想環境を使いたいならvenvを使ってしまえばいい。そもそも、今どき開発目的であればdockerなりvagrantなりを使って丸ごと分離してしまう方が筋が良く、データ分析用途であれば手元に最新のPython3環境があれば事足りる。MacでAnacondaを入れようとするとシステムPythonやHomebrew Pythonとの衝突を気にする必要があって、その解決のためにpyenvを入れてみたりと、物事を余計に複雑にしているような気がしないでもない。

ということで、生Pythonを使ってnumpy、pandas、Jupyterのような基本的なデータ分析環境をmacOS上に構築してみた。生Pythonとは言ってもシステムPythonは触りたくないし、グローバル環境もみだりにいじりたくはない。そういった条件で環境を構築したときに、現代的にはどの程度作業をsimplifyできるだろうか、というのがこの記事のモチベーション。

続きを読む

スポンサーサイト

OpenSSLでオレオレ認証局(CA)とオレオレ証明書を作る

OpenSSLを使って久しぶりにオレオレ認証局(CA)を立ち上げようと思ったら方法を完全に忘れていて苦労したので、整理してメモ。方法を検索すると、CA.plを使ったり使わなかったり、CA.shを使ってみたり、openssl.cnfを編集したりしなかったりと、いろいろ流儀があるようなので、その辺も含めて整理する。なお、環境はMac、OpenSSLは0.9.8系。

公開鍵証明書発行の手順

まずはおさらい。公開鍵証明書を発行する手順は次のようになる。

  1. 証明書のユーザーは、秘密鍵を生成する。コマンドで言えば、openssl genrsa -aes128 -out newkey.pem 2048など。
  2. 証明書のユーザーは、生成した秘密鍵を使って証明書署名要求(CSR; certificate signing request)を生成する。コマンドで言えば、openssl req -new -key newkey.pem -out newreq.pemなど。
  3. 証明書のユーザーは、生成した証明書署名要求を認証局(CA; Certificate Authority)へ送信する。
  4. 認証局は、受信した証明書署名要求に自らの秘密鍵で署名し、公開鍵証明書を生成する。コマンドで言えば、openssl x509 -req -CA ca.pem -in newreq.pem -out newcert.pemopenssl ca ...など(詳細は後述)。
  5. 認証局は、生成した公開鍵証明書を証明書のユーザーに送信する。

「なぜこんなに面倒なのか。CAが秘密鍵と公開鍵証明書のペアを生成してユーザーに送ればいいじゃないか。」と言いたくなるが、これは鍵配送問題に対処するため。秘密鍵を送るためには暗号化通信が必要で、そのためには秘密鍵が必要で、その秘密鍵を送るためには(以下略)となってしまうため、秘密情報であるユーザー・認証局それぞれの秘密鍵はそれぞれのマシンの外に出ない仕組みになっている。ユーザーと認証局の間の通信経路がたとえ傍受されていても秘密鍵は流出しない。

もちろん、認証局を使わずに自己署名のオレオレ証明書を生成するだけだったら、openssl req -new -x509 -keyout newkey.pem -out newcert.pemなどのコマンドで簡単にできる。今回はオレオレ認証局を立てたうえで、その認証局で署名したオレオレ証明書を濫発することが目的なので、面倒だけど認証局を立ち上げる。

続きを読む

zshでGitのブランチ名をプロンプトに表示する

zshのプロンプトに、Gitのブランチ名を表示させたくなった。

ちょうど、↓の図のような感じに。

Screenshot of terminal

bashではgit-completion.bashで定義される__git_ps1を使って、例えば↓のような感じで書いていたけど、

# Show git branch name
if [ -n "$(type -t __git_ps1)" ]; then
    PS1='\u@\h \w$(__git_ps1)\n\$ '
fi

zshではvcs_infoという関数を使って実現するらしい。

vcs_infoはGitに限らず、各種のVCS (Version Control System)に対応しているようなので、一度設定しておけばCVSやSubversion、Mercurialなんかにも対応できるようだ。

詳細は続きで。

続きを読む

コマンドを起動して一定時間後にタイムアウト終了させるコマンドを作りました

コマンドを起動して一定時間内に終了しなかった場合に強制的にkillするコマンドラインプログラムを作りました。

Linuxではulimitを使えば似たような機能が実現できるし、それがなくてもバックグラウンド起動した後に一定時間sleepしてkill $!すればいいだけなんだけど、Windowsだとあまり単純ではなさそうだったので。

Haskellで書いた単純なプログラムなので、GHCでビルドしてあげればWindowsやLinuxで使うことができます。

詳細は続きで。

続きを読む

neocomplcache.vimを改良しようとしたら既にされてた件

ちょっと前に、Vimの自動補完プラグインをAutoComplPopからneocomplcacheに乗り換えた。

何で乗り換えたのかは忘れた。確かAutoComplPopはUbuntuのscim+gvim環境と相性がよくなかったからだったと思うけど、実際のところUbuntuではgvim使ってないからあまり意味ない。ついでに言うと、neocomplcacheはキーワード補完にちょっと癖があってまだ慣れてない。

ただ、neocomplcacheは機能追加が著しいから、将来の可能性を信じて使ってる。

で、今日はneocomplcacheの補完開始時のカーソル位置が気に食わなかったので、AutoComplPopのスタイルに改造してみましたという話。

結論から言うと、マニュアル読んだりソース読んだりしてがんばってやってみたけど、本家の最新ソースコードを読んだら既にその機能が実装されていて、ちょっと切なかったという話。詳細は続きで。

続きを読む

[MyMiniCity] 街の状況に応じて自動的にアクセスを振り分けるPHPスクリプト

MyMiniCityで、街の状況に応じて自動的に必要なURLにリダイレクトするPHPスクリプトを書いてみた。既に同じことはいろんな人がやってるけど。

http://lab.liosk.net/MyMiniCity.php?city=liosk

?city=lioskの部分を書き換えれば別の都市にアクセスできます。

続きを読む