2013年12月10日火曜日

python の apiclient.discovery.build() が遅い

google-api-python-client で、Resource オブジェクトを取得するのに
毎度 discovery.py:build() を呼ぶと、毎度 https 通信が発生し動作が遅
くなってしまう。Web アプリの場合なんかは、アクセス毎にこれが発生
するのは問題。

なんで https 通信が発生するのかは、Discovery Document なる、Google
API を利用する際に必要な情報が記された JSON 形式のデータを毎度とり
に行っているから。discovery.py の以下の部分。

    190   logger.info('URL being requested: %s' % requested_url)
    191
    192   resp, content = http.request(requested_url)
    193  
    194   if resp.status == 404:
    195     raise UnknownApiNameOrVersion("name: %s  version: %s" % (serviceName,
    196                                                             version))
    197   if resp.status >= 400:
    198     raise HttpError(resp, content, uri=requested_url)
    199 
ただ、この JSON のデータは毎度取りに行く必要もないようで、一度とっ
たらキャッシュしてしまって、build() でなく build_from_document() を
使うのが良い。
キャッシュの仕方なんだけど、今のところ build() 関数にベタに
print content などとしてしまって、吐出されたやつをファイルに保存
しているが、もっと良い方法あるんだろう。

調べてわかったらまたメモります。

2013年11月13日水曜日

Locust なる load testing tool

軽量な Web アプリのロードテストツールを探してたところ、Locust なる
Powered by Python なプログラムを発見。これ結構使える。
動作は Python コードで書くので柔軟性がある。

インストールは pip で一発だが、CentOS6 で可能な限り rpm で入れたいので
以下のように。そのうち自分で spec 作るか。

mater ブランチ持ってきてもいいけど、一応タグ打ってある版をここから
持ってきた。

# yum install python-devel python-zmq libevent-devel
# wget https://github.com/locustio/locust/archive/v0.6.2.tar.gz  -O locust-0.6.2.tar.gz
# tar xvzf locust-0.6.2.tar.gz
# cd locust-0.6.2
# python setup.py install

インストールが終わったら、適当に使ってみる。今回はユーザ毎にパラメータ
を変更した GET リクエストをたくさん投げる負荷テストをしてみたかったので
以下のような簡単なソースに。

テスト対象の動作の定義は、TaskSet クラスを継承したクラス(ここでは
MyFirstTasks) に適当な名前のメソッドを作り、その中でリクエストの URL
とパラメータを self.client.get() に指定すればいいだけ。複数メソッドを定義
した場合はランダムにそれを実行してくれる模様。@task(n) の n は、そのメソッ
ドの実行割合らしい。

実行順を定義したかったらクラスの定義をネストすれば良いらしい(私はまだやっ
たことがないが)。

Locust クラスを継承したクラス(ここでは MyFirstUser)は、操作するユーザ
を模したクラスらしい。この中の task_set という attribute に、上記した TaskSet
のクラス名を定義する。min_wait と max_wait はようわからんのだが、ユー
ザインスタンス間の実行間隔を定義しているらしい。
from locust import Locust, TaskSet, task
import random

class MyFirstTasks(TaskSet):
    @task(1)
    def myfunc(self):
        teststr = "teststr-" + "%04d" % random.randint(1,100)
        self.client.get("/mytest/?teststr=%s" % teststr)
class MyFirstUser(Locust):
    task_set = MyFirstTasks
    min_wait = 500
    max_wait = 1500

上記ファイル名を myfirsttest.py としたとして、下記のように実行する。

    locust -f myfirsttest.py -H http://www.fastriver.net

-H はリクエストを送るホストを定義する。

すると、http://localhost:8089 に管理画面が表れ、ここでスタート/ストップが
できたり、実行結果がわかったりする。

とまぁ超簡単な動作はこんな感じでできるが、複雑なもテストも動作を Python で
書けるので、Form に送る値を csv ファイル等に定義しておいて、ランダムにそれ
を送出するようなテストもできそう。

あと、master/slave 構成にもできるようなので、テストクライアント自体の
負荷分散も可能でかなり多くのリクエストを同時に送ることができそう。

また時間があったら詳しい使い方なんかを書いてみようと思う...書けたらいいな。。




2013年11月7日木曜日

Google の Service Account の p12 ファイルのパスフレーズ

Google Cloud Console または Google APIs Console において、
service account 用の pkcs#12 ファイルのパスフレーズっていったい何?
と思って調べたところ、Python の API のソースにその答えがあった。

notasecret だそうで。client.py:

    908         private_key,
    909         scope,
    910         private_key_password='notasecret',
    911         user_agent=None,
    912         token_uri=GOOGLE_TOKEN_URI,

実際の環境で使う場合は結び直した方が良さげ。

SignedJwtAssertionCredentials のコンストラクタ第4引数で指定する。

2013年11月6日水曜日

Google Cloud Console のエラー

Google Cloud Console でプロジェクトを作ろうとして以下のエラー

Cloud Console has not been activated for your account. Your account may be suspended or disabled. If you are a Google Apps user, ask your domain administrator to enable Apphosting Admin on your account.

Google Apps なユーザでかつ管理者なんだけど。。。Web 調べても情報が皆無。
試行錯誤したところ、Google Apps のコンパネのトップで「その他の設定」→
「他のGoogleサービス」→「Google App Engine 管理コンソール」が無効になって
いたせいだったらしい。
これを有効にしたところ、プロジェクトの作成成功。

2013年11月5日火曜日

DBus のバス名一覧の取得


dbus-send --session           \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames


dbus-send --system            \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames

2013年11月1日金曜日

openldap で bdb のトラザクションログが消えない

set_flags DB_LOG_AUTOREMOVE してるのに消えない。
これを設定すると checkpoint の際に消してくれるらしいが、
man slapd-bdb によると、slapd.conf に checkpoint の設定
が無い場合チェックポイントが発生しないらしい。
なので checkpoint 512 5 などと設定してみた。すると消える
ようになった。

デフォルト checkpoint が発生しないというのが解せないが…
じゃぁいつ flush してるのかと。

2013年9月25日水曜日

いとしい

Jasper Soft ってところから DM が来たんだけど、英語直訳で
冒頭が「いとしい Ryo」となっていて気持ち悪かったw

2013年9月3日火曜日

tex に埋め込んだ eps2 ファイルが pdf で見えない

platex でコンパイルして dvipdfmx で dvi を pdf に変換してるんだけど、
なんだか埋め込んだ eps2 が pdf で表示されない。

Web 等々で調べて、以下で解決。

\usepackage[dvipdfmx]{graphicx}

2013年8月29日木曜日

Fedora19 で shift-alt が US と JP のキーボード切り替えになっちゃってる件

Fedora19 を入れて emacs 使ってたらなんだか M-> とかが効かない。
Meta キーは Alt 。

end-of-buffer したくて Alt-Shift-> とかやっちゃうと、どうも Xorg が
Shift-Alt を奪ってしまうらしく、なんだか変な動きに。どうやら日本語
キーボード配列になっちゃったようだ。

最初は ibus を疑って、mozc を疑って、その次は fluxbox を疑って、そ
の後 emacs を疑って、ちょうど tex の編集してたから yatex まで疑って、、、
2 時間くらい格闘したか… xev まで出動させて疲れた…

みんなごめん、悪いのは Fedora 19 の Xorg の設定だった。こんなのあり
ました。↓ /etc/X11/xorg.conf.d/00-keyboard.conf

Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "us,jp"
        Option "XkbVariant" ","
        Option "XkbOptions" "grp:alt_shift_toggle"
EndSection

インストールが日本語環境だったからなのか勝手に jp キーボードの設定
が入っていて、alt_shift_toggle なんつーのまで。これが原因と思われ。

ったくざけんなよ。時間返せ。

2013年8月28日水曜日

alsaunmute

Fedora19 を X1 Carbon にインストールしたんだけど音がならない。
alsamixer もハードウェアのボリュームも大きくしたんだけどダメ。

alsaunmute なるコマンドがあったので実行したら音が鳴った。

2013年8月5日月曜日

AMQP

MSMQ は System V の Message Queue より高機能だけど、Windows
でしか使えない。AMQP の実装 RabbitMQ なるものがあり、OSS だと
これ使うのが良さげ?

2013年7月4日木曜日

2013年6月27日木曜日

OpenLDAP で slapd.conf を使いたい時

RHEL や CentOS の OpenLDAP で、OLC の slapd.d/ じゃなくて slapd.conf
を使いたい時、slapd.d 消すのはある意味邪道ではと思われ。
rpm の --scripts 見る限り、パッケージアップデート時に slapd.d が無いと
slapd.conf から slapd.d を作ってコンバートしちゃうんじゃないかと。

RHEL や CentOS の作法としては /etc/sysconfig/ldap に以下を設定するのが
良いのでは。

  SLAPD_OPTIONS=" -f /etc/openldap/slapd.conf"

# でも OLC って使ってみると結構イイ感じですね。

2013年5月22日水曜日

libvirt から dnsmasq に --enable-ra パラメータを付与するのはどうしたらいいんじゃ…

2013年3月30日土曜日

systemctl で wpa_supplicant と network の起動順がうまく解決できない

Fedora なんだけど、どうも wpa_supplicant と network の起動順がうまく制御
できない。systemctl でこのあたりどうしたらいいのか。

/usr/lib/systemd/system/wpa_supplicant.service は、 ディストリデフォルト
で以下のように network.tar.get の前に起動するようになっている。

[Unit]
Description=WPA Supplicant daemon
Before=network.target
After=syslog.targe

手元の無線 LAN のインタフェースは wlan0 で、/etc/sysconfig/network-scripts/ifcfg-wlan0
では、ちゃんと BOOTPROTO=dhcp になっているが、OS 起動後に dhclient の
プロセスがない。

/usr/lib/systemd/system/network.target に以下のように無理くり Requires
と After を入れてみたがダメ。

[Unit]
Description=Network
Documentation=man:systemd.special(7)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
Requires=wpa_supplicant.service
After=wpa_supplicant.service

うーーん、network.target から dhclient を分離すべきなんじゃ、と思ってしまう。

とりあえずこんなことに時間をとられたくないので、rc.local に dhclientの
起動を書いてごまかすか。rc.local は systemctl の rc-local.service で使えるみたいだ。

2013年3月26日火曜日

SFDC OAuth2 で勘違いしてた

今まで FDC の OAuth2 で Authorization Code を取得するところで
一処理余分なことをやってたっぽい。以下のような感じ。

  1. クライアントが SP(https://login.salesforce.com/services/oauth2/authorize)
    に POST で以下の内容を送る。
    response_type=code&client_id=<clientid>&client_secret=<secret>&redirect_uri=https://example.com/hoge
  2. するとクライアントは以下のリダイレクト用 URL を受け
    取るので、これをLocationヘッダとしてユーザに送り返す。

    https://login.salesforce.com/setup/secur/RemoteAccessAuthorizationPage.apexp?source=xxxxxxxxxxxxxxxxxxxxx
  3. ユーザのブラウザはこれを受け取り SP にリダイレクトする。
    するとユーザがログインしていない場合はログイン画面が表示
    されログイン処理を行い、その後は自動的にクライアントにリ
    ダイレクト。この際 GET パラメータには Authorization code
    が含まれている。
  4. クライアントは受け取った Authorization code を SP に送信
    して Access Token を取得。
と思ってたんだけど、どうも 1 の部分の SP とのやりとりは不要で
2 から始められるようだ。この際の Location ヘッダにセットする
URL は以下のような感じで client_secret は不要。


https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=
3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA
9GE&redirect_uri=https%3A%2F%2Fwww.mysite.com%2Fcode_callback.jsp&state=mystate

1と同じ response_type=code というパラメータを渡してる。

まぁ、勘違いというわけでもなく今まで覚えていた方法でも良いの
だろうが、どこからこの情報を得たのかがもうわからなくなってい
て、、、うーーんという感じ。




2013年3月21日木曜日

urxvt で動的フォントサイズ変更

これもずっとわからんで放置してたんだけど、イーカゲン画面を他人に
見せてる状態で urxvt を起動したら文字が小さくて見えんというのを
なんとかしたいと思い調べた。

下記 URL によれば、man 7 urxvt に説明があるらしい。

https://bbs.archlinux.org/viewtopic.php?id=44121

printf '\33]50;%s\007' "xft:Terminus:pixelsize=20" で行けるらしい。
で、上記の最後の人を真似てスクリプトを作成。
 cat ~/bin/urxvt-font
 #!/bin/sh
 printf '\33]50;%s\007' "xft:Terminus:pixelsize=$1"

2013年3月19日火曜日

java md4

java で ntlm ハッシュを作らなくちゃならなくて、
http://www.monyo.com/technical/samba/translation/ntlm.html
を参考にソース書いてるんだけど、どうもこの中の MessageDigest.getInstance("md4")
のところで以下の Exception が発生してしまう。

  java.security.NoSuchAlgorithmException: md4 MessageDigest not available

sun.security.provider.MD4 のソースを見ると以下のコメントあり。
 
 37  * <p>The MD4 algorithm is very weak and should not be used unless it is
 38  * unavoidable. Therefore, it is not registered in our standard providers. To
 39  * obtain an implementation, call the static getInstance() method in this
 40  * class.

結局 MD4.getInstance() することで解決。
 

2013年3月15日金曜日

トラブルの時だけ顔出し屋

トラブルのときだけ顔出して、テキトーなことだけアドバイス
したつもりになって、作業は誰かにやらせる。

これが一番会社で評価されますw

2013年3月12日火曜日

公開鍵が見つからん

Shibboleth のバイナリを shibboleth.net からダウンロードして、
gpg で verify したいんだけど、署名した人の公開鍵が見つからない。

D2B37353 っつー GPG ID なんだけど、pgp.nic.ad.jp には存在
しない。ぐぐったら pgp.rediris.es というサーバにはあったので
--recv-keys したんだけど、このサーバ大丈夫かな?

どうも pgp のキーサーバー達ってうまく同期がとれていないよう
に思う。

古い資料だけど、以下は各鍵サーバの鍵数の違いについて触れられ
ていた。

http://www.ipa.go.jp/security/fy14/development/openpksd/report.pdf

このあたり、gpg いや pgp が普及しない要因でもあるのかな?


2013年3月7日木曜日

tsocks すごいや

今まで知らなかったのがもったいないというか恥ずかしいというか、、、

「このコマンド SOCKS 対応してないじゃん」なんてもう言わせない→ tsocks
こりゃすごい。

 TSOCKS_CONF_FILE 環境変数にテキトーなファイルを指定。

    TSOCKS_CONF_FILE=$HOME/.tsocks
    export TSOCKS_CONF_FILE

$HOME/.tsocks を編集。手元の localhost に 10011 ポートで SOCKS を
開けた時の例。私は通常 ssh の -D 使ってる。

  server = 127.0.0.1
  server_port = 10011

んで、SOCKS Proxy を通したいアプリを tsocks コマンド経由で起動。

  tsocks wget http://www.fastriver.net/

なんて感じで。もう何でもありです。ありがとう tsocks!

実はこれも TSOCKS で firefox 起動して書いてます
(firefox はもともと SOCKS 対応してるじゃんw)

 

2013年3月1日金曜日

.gitattributes で * ident すると autocrlf が効かない

.gitattributes に以下を記述したまま git clone すると、
git config で core.autocrlf=true にしても改行が LF
のまま。

  *   ident

原因はまだわからん…

仕方ないので

git rm .gitattributes
git commit -m "remove .gitattributes"
# git が管理しているファイルを全部削除して以下実行
git reset --hard

これで復活

2013年1月17日木曜日

aes とか cbc とか

openssl enc であまり何も考えず -aes-128-cbc とか指定して
たんだけど、ちょっと意味を調べてみたらいいページがあったので
URL メモ。

http://sehermitage.web.fc2.com/crypto/sec_cipher.html

2013年1月11日金曜日

Sandcastle Help File Builder

また Windows プログラミングのメモ...

C# の doxygen  みたいのを探しているのだが、.NET 付属のものだと
XML の作成まで。これだけだと人間からの可読性が悪いので、整形ツー
ルは nDoc とか -Sandcastle とかあるみたいだがどちらもメンテナンス
されてないぽい。

Sandcastleからの派生でこれが一番あたらしいぽい。
Sandcastle Help File Builder