サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
momijiame.tumblr.com
SQLAlchemy は pip でインストールしておく。 $ pip install SQLAlchemy 今回例にしたのはユーザとメールアドレスの関係。 One to Many (1 : 多) from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.schema import Column, ForeignKey from sqlalchemy.types import Integer, String from sqlalchemy.orm import relation from sqlalchemy.engine import create_engine from sqlalchemy.orm.session import sessionmaker Base = declarative_base
前回は ipvsadm コマンドを直接使って LVS を冗長化せずに使ってみた。 今回は keepalived を通して LVS を冗長化して使ってみる。 構成は前回と同様、方式は DSR でバランスアルゴリズムは rr を使う。 ただし LVS の IP アドレスは 192.168.33.{11,12} で Web サーバの IP アドレスは 192.168.33.{101,102} に変更している。 LVS 用のホストをセットアップする x2 まずは必要なパッケージをインストールする。 $ sudo yum -y install keepalived ipvsadm インストールできたら keepalived のコンフィグを編集する。 keepalived は LVS をラップする機能がデフォルトで組み込まれているので、コンフィグを変更するだけで動作する。 $ sudo cp /etc
今回は実践機械学習システムの第七章を参考にして、線形回帰分析について学んでみる。 使用する Boston データセットというのは、ボストンの物件の価格にその物件の人口統計に関する情報が付随したものだ。 つまり、ある物件の人口統計に関する情報を元に、その物件の価格を予測することになる。 線形回帰というのは説明変数を元に応答が一次関数で表されると仮定したモデルを回帰に使用するものだ。 ようするに、例えば部屋の数が多い住宅はその分価格も高いのではないか、という感じで説明変数が目的変数といい感じに比例する関係にあるんじゃねと考える。 今回は線形回帰分析に scipy と scikit-learn を、グラフ描画に matplotlib を使う。 $ pip install scipy scikit-learn matplotlib まずは、一つの説明変数を元にした (一次元の) 回帰から取り掛かる
Vagrant の VM にハードディスクを追加したい場合、VirtualBox の GUI を使って手動でハードディスクを追加して、その VM を元に Box ファイルを作るというやり方がまず考えられると思うけど、面倒なのでぶっちゃけやりたくない。 できれば Vagrantfile の設定から追加できると良いなと思い、探してみたところ以下の Gist が見つかった。 https://gist.github.com/leifg/4713995 早速、上記の内容を元に Vagrantfile API v2 っぽく書きなおしてみた。 $ vagrant --version Vagrant 1.3.5 $ cat Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.c
Python で CLI のコマンドを実行したいときは subprocess モジュールを使う。 subprocess モジュールを使う以外にもやり方はあるみたいだけど、それらは obsolete らしい。 本題だけど subprocess モジュールを使ってコマンドを実行したときに、返り値を見ながら標準出力、標準エラー出力の内容も得る方法が意外と見つからなかった。 subprocess.check_call() 関数を使えば返り値が見られるけど標準出力、標準エラー出力が得られなさげ。 subprocess.Popen クラスを使うと標準出力、標準エラー出力は得られるけど返り値はどう得られるんだろう? ドキュメントを読んだりソースコードを見ていった結論が以下。 #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '__m
仮想マシンの上で更に仮想マシンを動かすことを Nested Virtualization とか Nested VM と呼ぶみたい。ようするに仮想マシンのマトリョーシカ状態。これができるとテストがはかどったりする場面もあったりなかったりするわけです。 今回はホスト OS の Mac 上でゲスト OS として Linux を動かして、更にその Linux 上で KVM を使って Linux を動作させることを目指してみる。つまりこういうこと → Linux / (KVM) / Linux / (Hypervisor) / OSX 前提として OSX が動作している Mac の CPU が Intel-VT/EPT もしくは AMD-V/RVI に対応している必要がある。更に、ゲスト OS 上で KVM が動作するには Intel-VT もしくは AMD-V が有効になっている必要がある。 ゲス
いつも忘れてググることになるからメモっておく。 動作は OS X 10.9.1 (Mavericks) で確認した。 まず sysctl コマンドを使えば CPU 関連の情報が色々と取れる。 $ sysctl -a | grep cpu その中の一つに型番に関する情報が載っている。 $ sysctl machdep.cpu.brand_string machdep.cpu.brand_string: Intel(R) Core(TM) i7-3667U CPU @ 2.00GHz いじょう。
Python インタプリタの -m オプションを使うと、インストールされているモジュールをスクリプトとして実行できる。 $ python -h | grep '\-m' usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ... -m mod : run library module as a script (terminates option list) 例えば標準ライブラリの json.tool を使うと JSON の整形ができる。 $ echo '{"foo": ["bar"]}' | python -m json.tool { "foo": [ "bar" ] } その他では SimpleHTTPServer を使えば、カレントディレクトリの内容を HTTP サーバで公開できる。 $ python -m Sim
今回は手軽に OpenFlow が試せるネットワークエミュレータというかツールキットの Mininet のネットワーク周りがどう作られているかについて書いてみる。 結論から先に言ってしまうと中身は Network Namespace と Virtual Ethernet Device で出来ている。 ようするに Docker なんかと同じ。 説明に入る前に、ひとまず Mininet をインストールしておこう。 使う環境は Ubuntu 14.04 LTS にした。 $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS" Git からソースコードをチェックアウトして最新のタグに切り替える。 $ su
Vagrant の VM は大抵 CUI で操作するけど、たまに GUI のアプリケーションをどーしても使いたくなることってあると思う。 今回は SSH の X11 転送を使って Vagrant の VM 上で動く X を使ったアプリケーションを操作できるようにしてみる。 まず Vagrant を動かすホストには X Server が必要なのでインストールする。 OS X の場合 10.8 (Mountain Lion) 以降 X Server はバンドルされなくなってしまったので、別途 XQuartz を入れる。 http://xquartz.macosforge.org/ さて、以下が肝心の Vagrantfile だけど、ポイントは config.ssh.forward_x11 を true にすることだけ。 $ cat Vagrantfile # -*- mode: ruby -*
自力で Python2 のコードを Python3 にも対応させようとすると、なかなか泥臭いコードを書くことになる。 例えば、文字列一つとっても Python2 には str, unicode があって、それらは basestring を継承していたのに対し Python3 では unicode, basestring が廃止されて str の実装が unicode になっている。 つまり、対象が文字列か判別するためのクラスを取り出すにしても、両対応するためには以下のようなコードを書く必要に迫られる。 >>> import sys >>> basestring if sys.version_info < (3, 0, 0) else str こんなコードがそこかしこに登場するとしたら辟易するけど Six にはバージョン間の差異を埋めるための変数がある。 まずは Six を PyPI からイ
表題の通りなんだけど CentOS 6 の yum から入る python-setuptools を使っていると、最新の pip が動かなくなった。 $ sudo yum -y install python-setuptools $ sudo easy_install pip $ sudo pip install virtualenv Wheel installs require setuptools >= 0.8 for dist-info support. pip's wheel support requires setuptools >= 0.8 for dist-info support. Storing debug log for failure in /root/.pip/pip.log setuptools のバージョン 0.8 以上を使えよ!ってことらしい。 確認してみると
OpenFlow の動作確認に便利な Mininet というツールがある。 今回は Mininet のごく簡単な紹介と、それを OpenFlow 1.3 で使う方法について書く。 Mininet の公式サイトは以下。 http://mininet.org/ Mininet は OpenFlow コントローラや OpenFlow スイッチを組み合わせて箱庭ネットワークを作り、そこにトラフィックを流して動作確認が行えるという代物だ。 Mininet 本体は Python で書かれていて、幾つかの組み込みの OpenFlow コントローラや OpenFlow スイッチなどをオプションでインストールして使うことができる。 Mininet の提供形態は二通りある。一つ目が、あらかじめ諸々がインストールされた VM テンプレートを使うやり方で、二つ目が自分で OS にインストールするやり方だ。 今回は
世代管理したり一般に公開したいものは GitHub に上げたりするけど、別にそこまでやるほどじゃないなーってときは結構ある気がする。 ちょっとめどい作業の履歴をステップごとに残しておきたい、みたいな。 そんな折 Git だと別にサーバとかアプリケーションを用意せずに、ローカルマシンだけでサクっとリポジトリを作って世代管理できることを知った。 まずはリポジトリを作る。 $ mkdir testrepo $ cd testrepo/ $ git --bare init --shared $ ls HEAD config hooks objects branches description info refs $ pwd /Users/amedama/Repos/git/testrepo リポジトリは SSH 経由でチェックイン・アウトするので、作ったマシンには SSH でリモートログインできる
MySQL/MariaDB の冗長化について調べていたところ Galera Replication という機能が面白そうだったので試してみる。 MySQL/MariaDB を従来通り冗長化しようとすると Asynchronous Replication ないし Semisynchronous Replication を使って MASTER/SLAVE 構成を取る場合が多いみたいだけど、結構面倒くさそう。 参照系のクエリを実行できる SLAVE は複数作れるけど、更新系のクエリを実行できる MASTER は 1 台しか作ることができない。 それに MASTER/SLAVE が落ちたときのフェイルオーバーについては、ある程度自分で作りこむ必要がある。 Galera Replication の場合は、クラスタに参加するノード全てが MASTER として動作する。 そして、ノードがダウンした場合も
Vagrant の public_network はデフォルトだと DHCP で IP アドレスが付与される。 でも、実際にはブリッジさせるネットワークだと静的に IP アドレスを振りたいことの方が多いんじゃないだろうか。 ドキュメントにはやり方が載ってないものの、このプルリクエストを見ると、どうやら今のバージョンならできそうな感じ。 具体的には Vagrantfile の config.vm.network :public_network の部分を以下のように編集する。 :bridge を指定しているのは VM の起動時に毎回ブリッジする NIC を聞かないようにするため。 $ cat Vagrantfile | grep public_network config.vm.network :public_network, :ip => "172.16.100.1", :netmask =
たくさんの VM を使って検証するとき、Vagrant を使って楽をするにしても、マシン毎にディレクトリを作って移動するのはいかにも面倒くさい。 そういうものなのかなとも考えていたけど、どうやら一つの Vagrantfile で複数の VM を管理できるようだ。 例えば、以下に web, app, db と三台の VM を管理する Vagrantfile を示す。 # -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm
veth がいっぱいあってデフォルトから名前が変えてあったりすると、どこに繋がっているか分からなくなる。作った後でピアを確認するにはどうしたらいいのか。 $ sudo ip link add foo-veth type veth peer name bar-veth $ sudo ifconfig foo-veth up $ sudo ifconfig bar-veth up $ ifconfig | grep veth bar-veth Link encap:Ethernet HWaddr F2:6A:63:12:3C:3F foo-veth Link encap:Ethernet HWaddr 36:25:0D:D4:E0:3C どうやら ethtool を使えばいいらしい。-S オプションに veth を渡すとピアの ifindex が得られる。 $ sudo ethtool -S
Python には Java なんかにあるようなインターフェースや抽象クラスといった概念が言語自体には組み込まれていない。 ただ、全くないわけではなくて Python 2.6 から ABC (Abstract Base Class) モジュールとして用意されたみたいだ。 早速サンプルで抽象クラスを作ってそれを実装してみる。 抽象クラスは ABCMeta クラスをメタクラスとして使う。 そして、抽象メソッドは @abstractmethod デコレータで修飾する。 #!/usr/bin/env python # -*- coding: utf-8 -*- from abc import ABCMeta, abstractmethod # 抽象クラス class AbstractBaseSampleClass(object): __metaclass__ = ABCMeta # 抽象メソッド
Fabric 単体でデプロイするやり方については以前扱った。 どうやら Fabric をより便利に使うためのライブラリに Cuisine というものがあるらしい。 Fabric は比較的低レイヤで SSH を使ったコマンド実行やファイルのコピーなどプリミティブな操作を提供している。 それに対し Cuisine は Fabric のレイヤ上でパッケージ管理システムやファイル・ディレクトリ操作といった比較的高レイヤな操作を提供するためのライブラリのようだ。 今回は、試しにこの Cuisine を使って Open vSwitch のインストールを自動化してみた。 インストールは PyPI から。 $ sudo pip install fabric cuisine 以前もやったように VM にログインするための準備をする。 $ vagrant init centos64 $ vagrant up
Python には特定の範囲の数値を含むリストを作るための組み込み関数として range がある。 よく for ループと共に供されるやつだ。 >>> range(1, 3) [1, 2] この range 関数で作られるものはリストなので、メモリは即時確保される。 とんでもなく大きな範囲を指定するとメモリもその分食うことになりそう。 そんなときのために xrange 関数がある。 この関数はシーケンス型の xrange オブジェクトを返す。 >>> xrange(1, 3) xrange(1, 3) 使い勝手は range と全く同じ。 >>> [i for i in xrange(1, 3)] [1, 2] 決定的に異なるのは、値が遅延評価されるために必要なメモリの量が少ない点らしい。 大きな範囲を指定する場合や、内容を全て使わない場合が多い (リストをなめるループがよく break
socat っていうツールを使ってみたところソケット関連のちょっとした操作をこなすのにすこぶる使い勝手が良かった。 インストール Mac OS X なら Homebrew でインストールできる。 $ brew install socat $ which socat /usr/local/bin/socat Echo サーバを立てる socat コマンドにはソケットの入力と出力を指定する。 以下のようにすると TCP 8080 ポートで接続を待ち受けて出力は入力をそのまま cat することで TCP の Echo サーバになる。 v オプションで通信内容を表示する。 $ socat -v tcp-listen:8080 system:cat 別のターミナルから telnet コマンドで接続してみる。 $ telnet localhost 8080 Trying ::1... telnet:
前回 OpenFlow コントローラのベンチマークを取るツールとして CBench について書いた。 せっかくなので、主要な OpenFlow コントローラのベンチマークを取ってスループットを比較してみることにする。 ベンチマークを取ったコントローラは以下の通り。 Ryu 3.3 (CPython 2.7.4) Ryu 3.3 (PyPy 2.1) Trema 0.4.4 (Ruby 1.9.3p194) Floodlight 0.90 (OpenJDK 1.7.0_25) ベンチマークを取るには VirtualBox の VM を使った。 CBench を動かす VM とコントローラを動かす VM は分けて、両者の通信は VirtualBox の private network を経由して行う。 CBench を動かす VM OS: CentOS 6.4 CPU: 2 Core RAM:
まだ全然理解してないけど、自分で書いた Python のコードを配布できる形にするには setup.py を書けばいいみたい。 サンプルは helloworld ライブラリをインストールすると共に greet コマンドを使えるようにするというもの。 ディレクトリ構成は以下。 . ./helloworld ./helloworld/__init__.py ./helloworld/hello.py ./setup.py hello.py #!/usr/bin/env python # -*- coding: utf-8 -*- def greet(): print 'Hello, world!' def main(): greet() if __name__ == '__main__': main() setup.py from setuptools import setup, find_p
Bottle のレスポンスを JSON でシリアライズするにはどうすれば良いのかな?と思って調べた。どうやら response.content_type に Content-Type を指定すれば良いらしい。 #!/usr/bin/env python # -*- coding: utf-8 -*- from bottle import route, response, run @route('/<name>') def hello(name): response.content_type = 'application/json' return {'message': 'Hello, %s!' % name} if __name__ == '__main__': run(host='localhost', port=8080) 上記のコードで上手くいった。けど、もしかして指定しなくても辞書
これまで公開鍵ってディレクトリを作って scp してパーミッションを変えてーみたいにかなり面倒くさいことをしてたけど ssh-copy-id コマンドを使うと楽できるみたい。 Linux ディストリビューションなら最初から入ってるものも多そうだけど Mac OS X には入ってなかったので Homebrew から入れる。 $ brew install ssh-copy-id 何はともあれ公開鍵ペアを作る。 $ ssh-keygen -t rsa 作った公開鍵を、目的のホストに設置する。 以下のコマンドを叩くとパスワードでログインを促される。 $ ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<host> 上手くいけば公開鍵を使ってログインできるようになっているはず。 $ ssh <username>@<host> めでたしめでたし。
以前 Mac の VMware Fusion 4 を使って仮想マシンを入れ子 (Nested Virtualization, Nested VM) する方法について書いた。ただ、VMware Fusion 4 の頃は、設定ファイルをエディタで編集しないとゲスト OS で Intel-VT が有効にならなかった。それに対して VMware Fusion 5 では GUI から設定が可能になってる。 まず、仮想マシンの設定画面で「プロセッサとメモリ」を選択する。 次に、詳細オプションを開いて「この仮想マシンのハイパーバイザー アプリケーションを有効にする」にチェックを入れる。 あとは仮想マシンを起動するだけ。 CentOS6.3 で確認したところ /proc/cpuinfo に vmx フラグが立っていることが確認できた。 あとはゲスト OS に Intel-VT を使うハイパーバイザ (KV
Linux ディストリビューションでは比較的 CentOS を使うことが多いんだけど、残念なことにバージョン 6.4 ではまだ Linux Network Namespace (netns) が使えない。 どうやら Linux カーネルと iproute2 のバージョンが足りてないらしい。 $ ip netns list Object "netns" is unknown, try "ip help". $ uname -r 2.6.32-358.14.1.el6.x86_64 $ rpm -qf `which ip` iproute-2.6.32-23.el6.x86_64 じゃあどうするかっていうと RedHat が出している OpenStack ディストリビューションの RDO を使う。 OpenStack では netns をガンガン使ってるので RDO はそれに対応するために専用
次のページ
このページを最初にブックマークしてみませんか?
『CUBE SUGAR STORAGE』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く