SQLite3 を少し使ってみる

接続

1ファイル1DB なので,ファイル名を指定して起動する.

$ sqlite3 DBFILENAME
テーブルリスト,カラムリスト

覚えるしかないか.

テーブルリスト

> .table;

カラムリスト

> pragma table_info(TABLENAME);

カラムリストの要素は順に,

cid         Integer  インデックス
name        Text     カラム名
type        Text     そのカラムの型
notnull     Integer  not null なら 1
dflt_value  Text     DEFAULT value
pk          Integer  プライマリキーなら 1
NULL, INTEGER, REAL, TEXT, BLOB (バイナリーオブジェクト)
日付の取扱

日付関数で文字列か数値に変換して保存する.

例: データが python の datedata=datetime(2004, 10, 1, 13, 20, 15) の時

文字列で保存する例,エポックで保存する例

datestring=datedata.strftime('%Y-%m-%d %H:%M:%S')
connection=sqlite3.connect('filename')
cursor=connection.cursor()
cursor.execute('create table tablename ( str_date text, int_date integer );')
cursor.execute('insert into tablename values (\'%s\', strftime(\'%%s\',\'%s\'));'%(datestring, datestring))
cursor.commit()

格納状態

[(u'2004-10-01 13:20:15', 1096636815)]

値の取り出し方:
以下の取り出し関数を通して取り出す

  • date -- 日付
  • datetime -- 日時
  • time -- 時刻
  • julianday -- ユリウス日
  • strftime -- その他
cursor.execute('select time(str_date),date(int_date,\'unixepoch\') from tablename')

取得結果

[(u'13:20:15', u'2004-10-01')]

ubuntu でバイナリを実行しようとすると no such file or directory が返る

ls では確かにファイルはあるのに,実行しようとすると no such file or directory が返ったら,バイナリがどのアーキテクチャ (ARCH と言うらしい) を想定しているかを確かめるのが良いらしい.
参考:Man page of ARCH
で,要は x64 環境で x86 用のバイナリを走らせようとすると,no such file or directory が返るので,アーキテクチャをチェックしろということ.

$ file binaryfile

これでチェックすれば良い.

参考にした記事:Ubuntu日本語フォーラム / PandaBoard上のUbuntu12.04で実行ファイル実行時に、No such file or directory

linux サーバをいくつも越えて

直接接続できないリモートホストにsshとかscpとかする話.
基本的には,SSH力をつけよう - SlideShare なんだけど,いくつかできない点があったのでメモ.

ログインできないけど socks proxy として動作する linux を通過

Host HOSTA
    User         [A_USER]
    HostName     [A_HOST_FROM_SOCKSHOST]
    Port         [A_PORT]
    ProxyCommand nc -x [SOCKSHOST]:[SOCKSPORT] %h %p

ブラケット内を変更する.A_* は A の,って意味.FROM_* は,* から見て,という意味.
netcat は netcat-traditional では -x オプションが使えないので,netcat-openbsd にしないとだめポ

socks でアクセスできる host からなら届く linux

Host HOSTB
    User         [B_USER]
    HostName     [B_HOST_FROM_A]
    Port         [B_PORT_FROM_A]
    ProxyCommand ssh -W %h:%p HOSTA

多分,nc でも同じことできるけど,ssh のオプションでトンネル.

これを Windows (WinSCP) でやる

socks の設定は「プロキシ」へ,踏み台の設定は「トンネル」へ.
多分,putty も似たような設定すればいいけど,私の環境だと wakeonlan とかの関係で一度 HOSTA に入るので,そんな設定は使うことがなく,よく知らない.

Rlogin という名前の ssh クライアント

作者のページはここ → rlogin/telnet/ssh(クライアント)ターミナルソフト
タブ型sshクライアントとして使っていて,画面分割してターミナルを表示できるのが便利かなと思って入れてみた.
結局,接続先が1つの場合は使い勝手がtmux には及ばず,かつ tmux のコマンドが使用不能となってしまったため,使用を断念した.

不満点

  • tmux ではペーンの移動を上下左右に自由にできるが,Rlogin では順に送ることしかできない
  • 送りコマンドもTabや↑を要するなど,アルファベットキーの範囲内で操作できない
  • 窓内で tmux を使おうにも,窓のサイズ変更に割り当てている Ctrl-t,Ctrl-h のコンビネーションが効かない

puttyのいけてないところは,公開鍵が独自フォーマットなところなのだが,設定の手間さえかければ,それ以降は気にせず使えるので,どちらかというと putty に軍配があがった.

debian でファームウェアインストール

-- 追記(8/27)
やっぱ直ってなかった。

症状

  • sshしてると10秒~5分の間で、なんかセッションが切断される。
  • 切断された時は、新しくsshのセッションを開こうとしても接続に失敗する。
  • winscpを使っている分には、切断を挟んでいても気付かない。
  • サーバ側のログにはクライアントがタイムアウトしたと出ている。
  • クライアント側では、「Network Error: Software caused connection abort」とログが出る。
    (↑このエラーは、Windowsが吐く一般的なNWエラーらしく、あんまり手掛かりにならなさそう?)
    参照:10.14 ‘Network error: Software caused connection abort’
  • ブログアクセスなど負荷のかかる動作をさせると高確率で切れる。

やったこと

直感的に、ログ出力の変更とか関係ない気もするが、不思議とmysqlのログを追加することでblogアクセスによる切断が生じなくなったので、因果はともかくとしてメモっておく。

  • とにかく/var/logに出ているエラーを消す。
    • bind9のv6を動作させなくする。
      /etc/bind/named.conf.optionslisten-on-v6 {none;}; では不十分で、/etc/default/bind9 を書き換え。

      - OPTIONS="-u bind"
      + OPTIONS="-u bind -4"
      
    • sambaのprinter_cups関連の設定を無効化。
      + load printers = no
      + printing = bsd
      + printcap name = /dev/null
      

      どれが欠けてもエラーは継続。

  • sshまわりの設定修正
    • sshdの設定を多少変更 (ClientAliveInterval を少し伸ばした)
    • sshクライアントからkeepaliveを発出
    • ログを単独出力
      - SyslogFacility AUTH
      + SyslogFacility LOCAL5
      
      - auth,authpriv.*;(hogehoge)                      /var/log/auth.log
      + auth,authpriv.*;(hogehoge);local5.*             /var/log/auth.log
      + local5.*                                        /var/log/sshd.log
      
  • mysqlまわりの設定修正
    • slowlog の出力

-- 追記ここまで

自宅の debian マシンのネットワーク接続が、突然不安定になった。
syslog や、他のログを見ていても原因はよく分からなかったが、dmesg などで NIC の firmware が見付からないというエラーが出ていた。
r8169 0000:03:00.0: firmware: agent aborted loading rtl_nic/rtl8168e-2.fw (not found?)
みたいな感じ。

ファームウェアの名前からベンダを調べて、上記の場合は Realtek なので、

# aptitude search firmware # ← firmware のパッケージを探す
# aptitude install firmware-realtek

と単純に実行するだけで、なんとなく解決したっぽいので良しとする。

windows8.1 でインターネットオプションをスタート画面にピン留め

exe ファイルなどの場合,右クリックすることでスタート画面にピン留めするというメニューが現れる.
これを行なうと,スタートボタンを押して出てくるパネルに,その実行ファイルが登録される.
しかし,コントロールパネルの要素は cpl ファイルというものであって,右クリックしてもピン留めができない.
コントロールパネルのパーツの場合,control.exe の引数として呼び出すショートカットを作成してやることで,そのショートカットを右クリックしピン留めすることができる.

インターネットオプションを登録する場合は,

control.exe inetcpl.cpl

というショートカットを作成してやれば良い.

python で実行時間計測

何度も繰り返す必要のある短いコードの測定

import timeit
t=timeit.Timer("""script""",'import clause')
print t.timeit()

1回の実行に長時間を要するため,1度で評価したい場合など.

import time
def tm(t0=None):
    if isinstance(t0,float): return time.time()-t0
    else: return time.time()

time を使うべきか datetime を使うべきか

import datetime
def tm(t0=None):
    if isinstance(t0,datetime.datetime): return datetime.datetime.today()-t0
    else: return datetime.datetime.today()
import timeit
t=timeit.Timer("""t0=tm.tm()
t1=tm.tm(t0)""",'import tm')
print t.timeit()
t=timeit.Timer("""t0=tm2.tm()
t1=tm2.tm(t0)""",'import tm2')
print t.timeit()

結果は,
0.602358818054
7.44828104973
圧倒的に time

MVNO+docomo スマホで USB tether

ICS になって APN 設定をアプリから変更できなくなったらしく,GB で使っていた FixAPN というアプリが使えなくなった.
で,FoxFi と PdaNet で実現することになった.

  • FoxFi (WiFi Tether w/o Root) を google play から tethering router となるスマホに導入.(無料版の無印で良い)
  • PdaNet+ -- Internet Sharing for Android を PC に導入.
  • スマホの開発者オプションから USB debug を on にしてから,FoxFi の Activate USB Mode をオン
  • PC からPdaNet を起動して USB で接続する.

Greasemonkey で Google Track Link を削除

基本的にはGoogle Remove Junk Liteを入れれば良いが、私の環境では以下の2点の手を加えないと使えなかった。

  1. 実行ページに http://*.google.*/search*https://*.google.*/search*を加える.
  2. QUERY_STRING の順番が異なる場合も動作するように修正する.例えば,
    else if(a.href.match(/\/url\?.*&url=/)){
      var url = this.qs('url',a.href);
      a.href = decodeURIComponent(url.replace(/\+/g, '%20'));
    }
    

    を条件判定の最後に追加するなど.

Disable Excel Add-in Send-to-Bluetooth

Excel のアドインで「Bluetooth送信」なる機能をリボンに表示するものが,色々なアドインの動作を狂わせることがある.
こいつは消そうと思ってもなかなか消せないが,レジストリの書き換えで対処できることが分かった.

レジストリキーの場所
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel\Addins\XXXOfficeAddin.ExcelAddin
ここで,XXXの部分は,web で検索すると Bt などとなっているが,(参照→Office programs may crash with the SendToBluetooth add-in installed)
私の環境では Rtk であった.Realtek の bluetooth ドライバを入れると勝手に追加されるものだと思う.
ともかく,Excel を落として,当該キーの配下の DWORD 値の LoadBehavior を 0 とし,Excel を再起動すれば,これが原因の問題は解決しているはず.