SynergyでShiftキーが使えない

愛用しているソフトの「Synergy」に不具合がありました。
Synergyは複数のPCを一つのマウス・キーボードで操作できるソフトで
最近、いきなりShiftキーが使えない状態になっていました。
Shiftキーが使えないと、ローマ字の大文字にしたり
記号が使えなかったりと、プログラミングする際に超不便なので、
面倒くさかったのですが意を決して調べてみました。
結果、単なるソフトのバグらしいです。
簡単に原因はわかりましたが、問題はまだ対応しているバージョンが出ていないことです。

↓に内容が記載されています。
http://synergy-project.org/spit/issues/details/4125/

新しいバージョンで対応すると書いているのですが、
このままShiftキーが使えないのはストレスが溜まりまくるので
代替案として書かれている暫定対応を試してみました。
解決策はWindowsUpdateのKB2982791とKB2993651をアンインストールすることのようです。
この二つセキュリティパッチなので、セキュリティレベルを落とすことになるわけですが、
ま、もちろんセキュリティよりも仕事の方が優先なので
速攻でアンインストールしてやりました。
やはりセキュリティよりも便利さを求めてしまいますね。
Shiftキーが使えるようになって凄くうれしいです。

まあでも何が起きるかわかりませんので、
今回の例外以外は最新のパッチを適用するといった
セキュリティ対応の基本は徹底しておいた方がいいと思います。

以上

Pyhton Apacheアクセスログを取り込んでグラフで表示する

前回ApacheアクセスログをCSVファイルに変換したので
グラフに表示してみます。

%pylab
import pandas as pd

# CSVファイルの取り込む。
df = pd.read_csv('test.csv', header=None, names=['ip', 'identd', 'user', 'datetime', 'method', 'request', 'status', 'size', 'referer', 'agent', 'other'])

# データが欠けているところを削除する。
df = df.dropna(subset=['datetime'])

# 時間でindex化する。
df.index = pd.to_datetime(df['datetime'], format='%d/%b/%Y:%H:%M:%S +0900')

# requestをカウントする。
request_counts = pd.value_counts(df['request'])

# 上位10件を横棒グラフにしてみる
request_counts[:10].plot(kind='barh', rot=0)

# iptをカウントして横棒グラフで表示する
ip_counts = pd.value_counts(df['ip'])
ip_counts[:10].plot(kind='barh', rot=0)

# アクセスログを1分ごとにカウントしてグラフで表示する
dfm = df.ip.resample('T', how='count')
dfm.plot()

# グラフを消す
plt.close()

# 不要なカラムの消し方
del df["identd"],df["user"],df["datetime"],df["method"],df["request"],df["status"],df["size"],df["referer"],df["agent"],df["other"]

↓アクセスログを1分ごとにカウントしたグラフ
figure_1

resampleの引数は’T’を指定していますが
以下のようにいろいろとあります。

==================================================================
B = business day frequency
C = custom business day frequency (experimental)
D = calendar day frequency
W = weekly frequency
M = month end frequency
BM = business month end frequency
MS = month start frequency
BMS = business month start frequency
Q = quarter end frequency
BQ = business quarter endfrequency
QS = quarter start frequency
BQS = business quarter start frequency
A = year end frequency
BA = business year end frequency
AS = year start frequency
BAS = business year start frequency
H = hourly frequency
T = minutely frequency
S = secondly frequency
L = milliseonds
U = microseconds
==================================================================

※参考
pandas.DataFrame.dropna
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html

pandas.DataFrame.resample
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html

以上

PythonでApacheアクセスログをCSVファイルへ変換する方法

test.logというApacheのアクセスログをCSVファイルに変換する方法です。
ここを参考にしています。
http://www.atmarkit.co.jp/ait/articles/1307/11/news009_3.html

変換後のファイルはtest.csvにします。
test.logの内容

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

デフォルトのアクセスログですね。

import re
fr = open('test.log')
fw = open('test.csv', 'w')
line = fr.readline()
while line:
    fline = re.sub(r'^(\S+) (\S+) (\S+) \[([^\]]+)\] "([A-Z]+) ([^ "]+)? HTTP/[0-9.]+" ([0-9]{3}) ([0-9]+|-)', r'\1,\2,\3,\4,\5,\6,\7,\8', line)
    fw.write(fline)
    line = fr.readline()
fr.close()
fw.close()

ファイルのデータを一行ずつ読み込んで正規表現のsub関数を使ってログを
8つのパートに分割しcsv形式で書き込んでいます。

正規表現の部分がなかなか慣れていないので悩むところです。
ログの項目を増やした時のメモ。

■sample accesslog
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
↓↓↓
fline = re.sub(r'^(\S+) (\S+) (\S+) \[([^\]]+)\] "([A-Z]+) ([^ "]+)? HTTP/[0-9.]+" ([0-9]{3}) ([0-9]+|-)', r'\1,\2,\3,\4,\5,\6,\7,\8', line)

■refererとuser agentを追加したとき
222.31.3.3 - frank [10/Oct/2000:13:55:36 -0700] "GET /index.html HTTP/1.0" 200 2326 "http://jbclub.xii.jp/" "Mozilla/5.0 (Linux; U; Android 4.2.2; ja-jp; SO-04E Build/10.3.1.B.0.256) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"
↓↓↓
fline = re.sub(r'^(\S+) (\S+) (\S+) \[([^\]]+)\] "([A-Z]+) ([^ "]+)? HTTP/[0-9.]+" ([0-9]{3}) ([0-9]+|-) "([^\"]*)" "([^\"]*)"', r'\1,\2,\3,\4,\5,\6,\7,\8,\9,\10', line)

refererとuser agentを追加したときは”([^\"]*)”を単純に2個追加しました。
これで一旦はできました。

以上

return top