Monthly Archives: 6月 2014

[Python] 二つのタイムスタンプの差分を計算するには

Pocket

datetimeを使うのが教科書的な回答になるわけだが、ただタイムスタンプってえのは大抵2014/06/20 23:03:58.455118というような書式になっていて、これをどう扱うかがキモ。

そうそう、二つのタイムスタンプの差、というと何かのターンアラウンドタイムとか、もっというと先方からの応答を測るためですね。
諸賢には自明のことであろー。

結論: datetime.strptime()を使う。

datetime.strptimeは与えられたフォーマットにしたがって時刻を構文解析し、datetime型に変換してくれる。
さらにdatetime型どうしで減算すると、timedelta型のオブジェクトが返る。
timedeltaオブジェクトから読み出し専用のインスタンスで日、秒、マイクロセコンドを取り出せばよい(なお時間(Hour)はない)。

 

スクリプト例

お目汚しではありますが例を示す。
Python2.7な。

 

実行結果

上記のスクリプトを実行すると以下のように。

以上。

[FreeBSD] あるマシンのpkgをごっそり他のマシンに持っていくには

Pocket

インターネットに接続されていないなどの理由で、公式のpkgレポジトリからpkgをダウンロードできないマシンのpkgをどのように世話するか。

インターネットに接続できるマシンでpkgをインストールしておき、そのマシンからpkgを取得する。

手順

・ターゲットとなるマシン(以下、ターゲット)と同じ構成でVM(以下、コピーマシン)を作る。
・コピーマシンに必要なpkgをインストールする。
・コピーマシン上のどこかでインストール済みpkgを作る。
・同じ場所にrepoカタログを作成する。
・ターゲットと同じLANに繋ぎかえる。
・pkgのあるディレクトリをwebサーバで公開し、pkgをインストールする。

以下、詳細手順

ターゲットと同じ構成でVMを作る

RELEASEバージョンを合わせておけばよいでしょう。
割愛。

コピーマシンに必要なpkgをインストールする

タイトルの通り。
なにもわざわざインストールしなくても、という意見もあるだろうが、動作確認も必要だし。
割愛。

pkgを作る

適当な場所にディレクトリを掘り、以下のコマンドを叩く。

-aは、インストール済みのすべてのpkgを指定、という意味。all。
-fは、圧縮フォーマットの指定。右から左へ移すだけだからtgzでよい。tbzだと時間がかかる。
-o ./は、作成したpkgを置く場所。
-nは、作成済みのpkgを作らない、という意味。付けると処理のスピードアップが望めるが、逆に更新のあったpkgを作り忘れる、という危険性もあるかも。
以下の例では-nを使っていない。

repoカタログを作成する

pkg repoにディレクトリを指定すればよい。

そうすると以下の二つのファイルができる。

つまり今回の例でいえば、/usr/home/vanilla/pkgrepo/に作成したpkgと二つのファイルが格納されているわけ。

以上でコピーマシンでの作業は完了。

ターゲットでの準備

ターゲットにpkg一式をコピーし、webサーバを立ち上げる。
そのまえに、ターゲットでレポジトリの設定ファイルを修正しておくこと。
具体的には、①公式のpkgレポジトリを無効にし、②自前のpkgレポジトリの設定を加えることである。

①公式pkgレポジトリの無効化

/etc/pkg/pkg/FreeBSD.confでenabledをnoにする。

②自前レポジトリの設定
/usr/local/etc/pkg/repos/localpkg.confとして以下のようなファイルを作る。
urlは、後ほど設定するwebサーバと合わせる事。

pkg -vvとしてみる。
repo FreeBSDのenabledがno, repo localpkgのenabledがyesになっていることを確認。

 

webサーバでpkgを公開、インストールする。

rsyncでもなんでも使って、ターゲットにpkg一式をコピーする。
/home/vanilla/10.0/pkgにコピーしたとして、webサーバでこのディレクトリを公開すればよい。
ここでは手早くpythonで公開する。
以下のようにするとカレントディレクトリをルートとするwebサーバが立ちあがる。ポートは8000である。

同じくターゲットでpkg udpate。
pkg repoで作成したdigests.txz, packagesite.txzを参照できていることを確認したら、pkg upgradeすればよい。

以上です。

[メモ][Windows] コマンドラインでIPアドレスを変更する

Pocket

Windowsを複数ネットワークに繋ぎかえるとき、しかも片方がDHCPでの自動割り振りで、もう片方が固定でIPアドレスを指定しないいけない場合。
いちいちネットワークインターフェースのプロパティからIPアドレスを変更するのは大変に面倒な作業である。

調べてみたらコマンドラインでも変更はできるとか。

netshコマンドでTCP/IPのパラメータを設定する

ならばバッチファイルで手軽に変えられる。
その経緯を示す。
対象OSはWindows 7。xpだと動かないかも。

結論

バッチファイル例を示す。
拡張子.batの適当な名前で保存し、必要なときに実行すればよい。

固定IPアドレスを設定するとき

IPアドレスを固定で指定したい場合。
インターフェース名: “ローカル エリア接続”
IPアドレス: 192.168.0.100
ネットマスク: 255.255.255.0
デフォルトゲートウェイ: 192.168.0.1
DNS: 192.168.0.1

 

DHCPで設定するとき。

インターフェース名: “ローカル エリア接続”

 

書式

netsh interface ip setで設定する。
オプションは以下の通り、netsh interface ip setだけで実行すればずらずらと表示される。

このうち、よく使うのはaddress, dnsserverだろう。
なおdnsserverはdnsでも大丈夫のようだ。

address設定方法については;

以上

[メモ]WindowsにVagrantを入れてみた

Pocket

タイトルの通り。
たかがインストールして使える状態にするまでだけで苦労したからだよ!
インストールした後はVagrantの使い方はこのあたり見たらいいわけですよ。

Vagrant超入門:Vagrant初心者向けの解説だよ!
https://github.com/tmknom/study-vagrant

インストール

手順はここ http://docs.vagrantup.com/v2/getting-started/index.html 参照。
http://www.vagrantup.com/ からインストーラをダウンロードしてとっととインストール
2014/6/7現在、ヴァージョンは1.6.3。

初期設定

コマンドプロンプトを起動してinit。

そして起動…だが。

bsdtarがpathに入ってないとか文句を言うわけですよ。

解決法..再インストール

なんと解決法は再インストールだそうです。
嘘だろと思ったら本当に解決した。

このとき、Virtualboxに勝手に登録される。
vagrantvbox01

さっそく繋いでみよう。

ssh接続…ダメ。

vagrant sshで動かしたマシンにログインできるはずだが。

sshがないからダメ。
だから適当なsshクライアントで繋ぐ。
上記のメッセージの通り、IPアドレスは127.0.0.1, ポートは2222。

繋げましたな。
あとは消して終了。

 

[メモ] MacにhomebrewでPythonをインストール(virtualenvまで)

Pocket

brewでpythonをインストールする
10.9.3にはPython 2.7.5が入っている。
brewでこれを新しいものに。
またvirtualenvも入れてしまう。

brewでインストール

すっ飛ばした途中にいろいろと重要なことが表示されている。
すなわち、Pythonのインストールに必要なソフトウェアはOS Xにもあるけど、いろいろと問題もあるから新しいの入れとくわなどなど。
また、pipとsetuptoolsもインストールされている。

いずれにせよpythonのインストールはできた。
ターミナルで調べてみると2.7.6に変化していますね。

そのままvirtualenvなどのツールをインストール。

virtualenvのインストール

pipでインストールするだけ。