2014-12-30

Raspberry PI B+ のCPU性能

RPI B+ を購入したのだが, CPUのスピードがどの程度なのかよくわからない. 円周率を計算して, Intel Core i7 と比較してみた.
Intel Core i7 3.40GHz0.52s
Raspberry PI B+37.00s
というわけで, Core i7 換算で 48MHz 相当.

エネルギー効率を比較してみた. 後述のスクリプトを1回実行するのにかかるエネルギー (電力 x 時間) を計算. 電力は, スペック表から, 1コア当たり 77W/8=9.6W, 1W を使用.

Intel Core i7 3.40GHz4.8J
Raspberry PI B+37J
処理当たりのエネルギーは RPI が 8 倍程度.

実行条件は以下の通り.

$ cat pi.py
#!/usr/bin/env python

def f(x):
        return 4 / ( 1.0 + x**2 )

n = 1000000
sum = 0
step = 1.0 / n

for i in range(0, n):
        x = ( i + 0.5 ) * step
        sum += f(x)

pi = sum * step

print pi
$ time python pi.py
3.14159265359

real    0m37.005s
user    0m27.950s
sys     0m0.170s
$ cat /proc/cpuinfo 
processor       : 0
model name      : ARMv6-compatible processor rev 7 (v6l)
Features        : swp half thumb fastmult vfp edsp java tls 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2708
Revision        : 0010
Serial          : 000000004f7ee6b3
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 
700000
scaling_cur_freqが実際の周波数と思われるが, 何の値なのかわからない.

NTT西日本NGNのネームサーバはpingに応じない

NTT西日本のフレッツを使っていると, IPv6のRAで,
nameserver 2001:a7ff:5f01::a
nameserver 2001:a7ff:5f01:1::a
というネームサーバが通知される.

このサーバ, PINGを送っても, 帰ってこない.

$ ping6 2001:a7ff:5f01::a
PING 2001:a7ff:5f01::a(2001:a7ff:5f01::a) 56 data bytes
--- 2001:a7ff:5f01::a ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 24999ms
あれれ? と思ったのだが, ただPINGに応答しないだけだった. 名前解決の問い合わせには応えてくれる.
$ nslookup blogspot.jp 2001:a7ff:5f01::a
Server:  2001:a7ff:5f01::a
Address: 2001:a7ff:5f01::a#53

Non-authoritative answer:
Name: blogspot.jp
Address: 74.125.204.191

プロバイダを変更してみた

これまでぷららをつかっていたけれど, いわゆる IPoE 接続で IPv6 を使いたくて, 21-domain に乗り換えた.

品質は, そこそこだと思う.

一部のサイトとの通信が遅いかも.

2014-12-24

Logwatch のスクリプトの書き換え

Logwatch は, 毎日, ログをサマライズして送ってくれるツールである. Logwatch が行う処理を少し変更したい場合がある. この方法を示す.

RHEL では, /usr/share/logwatch/scripts/services の下に, サービス毎 (Postfix, sshd など) のログ処理スクリプトが格納されている.
このファイルをそのまま編集するのではなく, このファイルを /etc/logwatch/scripts/services にコピーして編集すると良いらしい.

たとえば,

 User root from xx.xx.xx.xx not allowed because not listed in AllowUsers : 3 time(s)
 reverse mapping checking getaddrinfo for example.com failed - POSSIBLE BREAK-IN ATTEMPT! : 1 time(s)
というログが大量に報告されて鬱陶しい. この場合, 以下のようにする.
sudo cp -i /usr/share/logwatch/scripts/services/sshd /etc/logwatch/scripts/services/
sudoedit /etc/logwatch/scripts/services/sshd
以下のように, Ignore these に入る条件に追記する.
$ diff -u /usr/share/logwatch/scripts/services/sshd ./sshd
--- /usr/share/logwatch/scripts/services/sshd 2012-08-29 20:28:55.000000000 +0900
+++ ./sshd 2014-12-24 15:54:16.000000000 +0900
@@ -211,7 +211,9 @@
        # failed login entry...
        ($ThisLine =~ /^input_userauth_request: (illegal|invalid) user (.*)$/ ) or
        ($ThisLine =~ m/^(Illegal|Invalid) user (.*) from ([^ ]+)/ ) or
-       ($ThisLine =~ /pam_krb5: authentication succeeds for `([^ ]*)'/)
+       ($ThisLine =~ /pam_krb5: authentication succeeds for `([^ ]*)'/) or
+       ($ThisLine =~ /User .* from .* not allowed because not listed in AllowUsers/) or
+       ($ThisLine =~ /reverse mapping checking getaddrinfo for .* failed - POSSIBLE BREAK-IN ATTEMPT/)
    ) {
       # Ignore these
    } elsif ( my ($Method,$User,$Host,$Port) = ($ThisLine =~ /^Accepted (\S+) for (\S+) from ([\d\.:a-f]+) port (\d+)/) ) {

2014-12-22

Bit.ly と amzn.to

Bitly でリンクを圧縮すると, bit.ly のURLができる. ここにAmazonのリンクを入れると, amzn.to ドメインのURLができる. たとえば, http://www.amazon.co.jp は http://amzn.to/1kt8g2S になる.
ここまでは, よく聞く.

この amzn.to は bit.ly と書いてもOKらしい.
たとえば, http://amzn.to/1kt8g2Shttp://bit.ly/1kt8g2S と書き換えられる. 逆を試してみたが, このブログのホームへのリンク http://bit.ly/1AO4R8rhttp://amzn.to/1AO4R8r と書くのはNGらしい.

2014-12-17

DLL呼び出しの調査

Windows のアプリケーションについて, どのような振舞をするのか解析したいということがある. そのとき, DLL呼び出しをログにとることができると便利である.

中間者攻撃DLLの作成

攻撃対象のDLL名 x.dll とし, エクスポートしているAPIが既知であるとする. まず, 以下のようなソース mitm.c を書く.
#include "windows.h"
#include "stdio.h"
#include "stdlib.h"

#define ACTUAL "x-actual.dll"

static int state = 0;
static FILE *fp = NULL;

static int (*f1)(int) = NULL;

static void fin()
{
    if(fp) {
        fclose(fp);
    }
    fp = 0;
}

static void init()
{
    HANDLE h = LoadLibrary(ACTUAL);
    if(h) {
        f1 = (int(*)(int))GetProcAddress(h, "func1");
        // do not call FreeLibrary(h);
    }

    fp = fopen("evadll-mitm.log", "w");
    state = 1;
    atexit(fin);
}

#define log(fmt, ...) if(fp) { fprintf(fp, fmt, __VA_ARGS__); fflush(fp); }

int WINAPI func1(int value)
{
    if(!state) init();
    int ret = f1 ? f1(value) : 0;
    log("func1(%d)=%d\n", value, ret);
    return ret;
}
攻撃対象のDLLをx-actual.dllにリネームする. 以下のコマンドで, コンパイルする.
i686-w64-mingw32-gcc  -shared -o x.dll mitm.c -Wl,-k

TODO

LDPRELOADのような機能を使えば, もっと色々できるかもしれない.

Tips

GCCでは, エクスポートする関数名に@がついてしまうのだが, この記事によると, -Wl,-kをつけると@以降が消えると教えてくれた.

LoadLibrary などの使用方法はこのページを参考にした.

mingw: 依存するDLLを列挙

Linux では, ldd というコマンドで, リンクする共有オブジェクトを調べることができる.

Windowsの実行ファイルに関しても, どのDLLをリンクしようとしているのか知りたいことがある. こんな場合, obdjump で調査することができる.

$ LANG=C objdump -p hoge.exe | grep 'DLL Name:'

2014-12-16

Windows ネットワーク接続の切断

Windows では, 一度遠隔コンピュータのネットワークにログオンすると, ローカルでログオフするまでネットワーク接続からログオフできない. 共有のコンピュータの場合など, ログオフせずにユーザを切り替えたい場合に困る.

GUIではログオフの操作が出来ないが, コマンドからはログオフできる.

  1. まず, コマンドプロンプトを開く.
    スタートメニューの「プログラムとファイルの検索」に「cmd」と入力する.
  2. net use で接続の一覧を表示し, リモート名を確認する.
  3. net use /delete リモート名 にて, 削除 (ログオフ) できる.

2014-12-04

/usr/lib/libtermcap.so.2: file too short

RHEL7では libtermcap.so から libtinfo.so に統合されている. libtermcap.so を使おうとすると, 以下のようにエラーになる.
error while loading shared libraries: /usr/lib/libtermcap.so.2: file too short
以下のように tinfo を使うよう指示されている.
$ cat /usr/lib/libtermcap.so.2
INPUT(-ltinfo)
したがって, libtinfo.so にリンクをはる.
$ sudo ln -s libtinfo.so /usr/lib/libtermcap.so.2

2014-11-26

rbash

この記事にて rbash を使ったユーザのコマンド制限方法が紹介されている.
以下のように .bash_profile を設定する.
# cd /home/foo
# chown root:root .bash_profile
# chmod 755 .bash_profile 
この部分なのだが, たとえ所有者をrootにしても, ディレクトリの所有者がrootでないと, このファイルの削除や移動は可能. 従って, FTPやrsync (over SSH) でアクセス可能であれば上書き可能.

.bash_profile を上書き

remote $ rsync .bash_profile foo@host1.example.net:
Rsyncなどのサブシステムを使用不可能にしておく, ホームディレクトリの書き込み権限も取っておくなどすると, この攻撃はできなくなる.

2014-11-19

ホスティングサービス Coreserver のアカウントを作ってみた

そろそろ自宅のサーバとかを何とかしようとおもって, ホスティングサーバのアカウントを作った. 比較的安く, データベースもいくつか使えて, CronやSSHログインもできるところというわけで, Coreserver にした.

Valueserver が出て Coreserver を使う価値はないという人もいるけれど, いくつかのウェブサイトを1アカウントで運営したい場合, Coreserver の方が良いかも.

どのサーバを契約したかまでは公開できないが, 主なスペックを以下にあげておく.

CPUXeon E5-2670
メモリ8GB
DistributionSUSE LINUX 10.0 (i586)
OSLinux version 2.6.32.61-smp

Pythonのライブラリがあまり整っていなくて, MySQL や PostgreSQL にアクセスできない. もちろん, PHP からは MySQL も PostgreSQL も使用可能.

それから, ls をうつと,

rbash: /bin/ls: restricted: cannot specify `/' in command names
と出てくる. ログインシェルを rbash にするなら, これくらいはなんとかしておいてほしい. 以下のように, unaliasしておくと良い.
unalias ls
getent passwdしてみると, どうやらほとんどのユーザはログインシェルをbashに変更済みのようだ.

Cronが不安定

しばらく使っていたが, ときどき, cron のジョブが実行されていないと思われる状況がある. 失敗した時は標準出力へ出しているので, メールが届くはずなのだが, それも来ない.

RPMのスペックファイルを自動修正

あるサーバでは, httpd の SUEXEC_UID_MIN を 500 より小さく設定しなければならず, httpd が更新されるたびに RPM をビルドしなおしている. 修正するスクリプトを作ってみた.
#! /bin/bash

date="$(LANG=C date +'%a %b %d %Y')"

sed -i.suexec \
 -e 's/^Release: \(.*\)/Release: \1o/' \
 -e 's/--with-suexec-uidmin=500/--with-suexec-uidmin=499/' \
 -e '/^%changelog/a\'"* $date Our Auto Patch Script \n- change SUEXEC_UID_MIN 500 -> 499\n" httpd.spec

2014-11-13

F-05D を Linuxマシンに接続しMTPでファイルをやりとりする

Fedora にて, 携帯電話とMTPでファイルのやり取りをする方法をメモする.

まずは simple-mtpfsをインストールし, UDEVの設定をする.

  1. $ sudo yum install simple-mtpfs
  2. lsusb で, VIDとPIDを調べておく.
  3. /usr/lib/udev/rules.d/51-android.rulesに以下の1行を書く.
    SUBSYSTEM=="usb", ATTR{idVendor}=="04c5", ATTR{idProduct}=="1335", MODE="0666"
  4. udevadm control --reload
  5. 携帯電話を一度抜き, もう一度さす. これで, 新しいルールでディバイスファイルが設定される.
マウントする.
$ mkdir mtp.d
$ simple-mtpfs mtp.d

参考にしたページ

  • MTP - Arch Linux
  • 2014-11-06

    Python: 正規表現でUTFの韓国語を検索

    UTF-8で, 韓国語が含まれるかどうかを検索する場合, Python では, 以下の正規表現を使えば良い.
     u"[\uac00-\ud7af\u3200-\u321f\u3260-\u327f\u1100-\u11ff\u3130-\u318f\uffa0-\uffdf\ua960-\ua97f\ud7b0-\ud7ff]"
    
    Unicode Character Name Index から作った.

    日本語・韓国語まじりのUnicode文字列から, 韓国語だけを除去する場合, 以下のようにすればよいだろう.

    >>> s_with_korean = u'こんにちは。안녕하세요. Hello.'
    >>> r = re.compile(u"[\uac00-\ud7af\u3200-\u321f\u3260-\u327f\u1100-\u11ff\u3130-\u318f\uffa0-\uffdf\ua960-\ua97f\ud7b0-\ud7ff]+[\\s\.,]*")
    >>> s_without_korean = re.sub(r, u'', s_with_korean)
    >>> print (s_without_korean)
    こんにちは。Hello.
    
    Python 2.7 と 3.3 で確認した.

    2014-10-27

    図表や参考文献番号をリンクにする

    LaTeXで論文などのPDFを作成する時, 図表や参考文献番号をリンクにしておくと, 読者に対して親切である.

    私は, 以前に紹介したように, dvipdfmxを使ってPDFを作成している. この場合, 以下の1行をプリアンブルに書いておくとよいと先輩から教えてもらった.

    \usepackage[hidelinks,breaklinks,dvipdfmx]{hyperref}
    リンクでジャンプする先が図表本体ではなくキャプションであることが難点だが, ないよりはましだろう.

    2014-10-25

    CUPSにてユーザごとにデフォルトプリンタを設定

    CUPSでは, lpoptionsというコマンドを使うと, ユーザごとにデフォルトプリンタを設定することができる.
    $ lpoptions -d printer
    なお, このコマンドにより, ~/.cups/lpoptionsというファイルがつくられ, 設定が書き込まれる.

    bzr にてSSH秘密鍵を設定しLaunchpadからチェックアウトする

    1. Linux にて鍵を生成.
      $ ssh-keygen ...
      ここでは, id_rsa_win と名付ける.
    2. id_rsa_winC:\users\user_name\.ssh\id_rsaにコピーする. (WinSCPなどを使う)
    3. Launchpadに公開鍵を登録する.
    4. Bazaarをインストール.
    5. Launchpadのアカウントを設定し, チェックアウトなど.
      bzr launchpad-login username
      bzr checkout ...
      

    2014-10-22

    PQI Air カードのシリアルポート部分に穴を開けた

    以前に購入したPQI Air カードのシリアルポートのランドにアクセスしようと, 筐体に穴を開けた. 参考にしたのは, oto asobi - オトアソビ - 一回目で, 分解写真が載っている.
    私は, カッターナイフでシリアルポートの部分だけを削りとった.

    テスターでVSSとの抵抗を測ると, TX, RXともに1MΩ程度だったので, 断線はしていないと思う.

    2014-10-08

    GNUplotにおいて複数のプロットを上下・左右に並べる

    GNUplotでは, multiplot という機能があり, 上下・左右に複数の図を並べてプロットすることができる.

    参考

    参考となるページをいくつか挙げておく.

    使用例

    以下に使用例を示す.
    #! /usr/bin/gnuplot
    
    set terminal postscript enhanced
    #set size 0.7,0.6
    set output 'hoge.eps'
    set multiplot layout 3,1
    set lmargin 10
    set rmargin 1
    
    set xlabel 'Time [s]'
    set ylabel 'Voltage [V]'
    plot \
    'data1.dat' u 1:5 w d t 'V_a'
    set key right top
    
    plot \
    'data1.dat' u 1:2 w d t 'V_b' ,\
    'data1.dat' u 1:3 w d t 'V_c'
    
    set ylabel 'Frequency [Hz]'
    plot \
    'data2.dat' u 1:2 w d t 'f_d'
    
    つづけて他のプロットをするときには, set nomultiplotを行う.

    2014-10-07

    systemctl と chkconfig

    EL7になって, サービス関連の操作が systemd になり, これまでとコマンドが変わってしまった. (互換性のため, service, chkconfig をつかってもフォワードしてくれる)
    EL6までEL7
    サービスの開始 service name start systemctl start name
    サービスの停止 service name stop systemctl stop name
    サービスを起動時に開始する chkconfig name on systemctl enable name
    サービスを起動時に開始しない chkconfig name off systemctl disable name
    サービス一覧 chkconfig --list systemctl list-unit-files
    サービスの状態の表示 service name status
    chkconfig --list name
    systemctl status name

    2014-10-03

    Agilent USB SMU U2722A ドライバのインストール

    Keysight のウェブサイトでは, U272X USB Modular Source Measure Unit IVI Instrument Drivers というドライバが提供されているが, これをインストールするとダメ.
    「U2781A, U2300A/U2500A/U2600A Series 64/32-bit Driver」というものをインストールすると良い.

    2014-10-02

    sort: 最初のカラム以外でソートする方法

    Coreutilssortは, 行ごとにデータをソートするプログラムで, テキストデータの処理に重宝する. 意外と高機能で, 列を認識し, 2列目以降によってソートさせるなどの機能も付いている.

    2014-09-30

    GNUplotにて最初の数行をスキップする方法

    GNUplotは, 数式・データをプロットするソフトで, 各種測定・シミュレーション結果を可視化するときに便利なツールである.

    GNUplotでプロットするデータを作成するとき, ツールによっては, 最初の数行にツールのバージョンや測定条件などを記載するものがある. こういうとき, 最初の数行をコメントアウトするなど変更を加えるのは面倒である.

    調べてみると, そういうことをplotコマンドでできるということが分かった.

    このページによると, 以下のようにevery ::nと書くことでn行スキップすることができるらしい.

    plot "foo.dat" every ::1 using 1:2 with lines
    

    他にも方法があって, 以下のように tailコマンドを呼び出すこともできる.

    plot "< tail -n +2 foo.dat" using 1:2 with lines
    

    2014-09-27

    PQI Air カードを買ってみた

    PQI Air Cardという 無線LAN付のSDカード (アダプタ) が売られており, 玄人向けに面白そうな機能がついている.
    • autorun.shというファイルを置いておくと, 自動実行される.
    • telnetで接続できる.
    • WiFiアクセスポイントに接続でき, 接続先情報を3点保存できる.

    まず初期設定

    • MicroSDHCカードをPQI Air カードに装着し, ディジタルカメラに装着し, 電源をいれ, 30秒ほど待つ.
      SDHCでなく2GB以下のSDカードを使うと正常動作しないようだ.
    • ノートPCや携帯電話から PQI Air card というアクセスポイントに接続する.
    • http://192.168.1.1/に接続し, ホットスポットの設定を行う.
    • 一度 MicroSDHCカードを取り出し, PCなどから, autorun.sh を入れる. 内容は以下のように書く[このページを参考にした].
      #! /bin/sh
      sleep 5
      ifconfig mlan0 down
      /usr/bin/w2
      kcard_cmd -s 0
      
    • もう一度カメラに装着し, 30秒ほど待つ.
    • これで, ホットスポットとして設定した既存のアクセスポイントへ接続される.

    カメラ以外につけると...

    PCにPQI Air カードを接続すると, 一瞬ホットスポットにつながるのだが, 数秒で切れてしまう.
    PCのカードリーダは使えるものと使えないものがあるらしい. パワーマネージメントあたりが原因かも...
    こういうものを作って電源だけ取ろうとしたが, テスタで測って見ると, カード挿入直後は3.3Vが出るのだが, 数秒で0.0Vになった.
    今度, 3.3Vのレギュレータを用意して自作しようか... カードリーダを買うよりは電源を自作したほうが安い.

    UART

    分解写真も見つけた[極小 Linux マシン, TETRASTYLE-dev-BLOG].
    シリアルポートが付いていて, /dev/ttyS0を通してアクセスでき, 38400bps, 8bit, パリティなし, ストップビット1 で通信できるらしい.

    アンテナは下端についている.
    裏側, 1/2番端子の下へ10mmくらいの所 (MicroSDスロットのすぐ上) に穴を空けると, シリアルポート端子にアクセスできそうだ. パッケージを開けてしまうと使いにくくなりそうなので, この場所だけに穴を開けてみようと思う.

    2014-09-25

    薄型モジュラ電源 N6701A をGPIBで操作

    Keysight (旧 Agilent) の薄型モジュラ電源システム N6701A を GPIB経由で設定するときの例を書いておく.
    以下のように, 電圧, 電流, それぞれのレンジ, 電圧のスルー, 測定レンジを設定する.
    注意するべきなのは, N6762Aなどの低機能なものは, 測定レンジが自動にできないということ. ソースのレンジを小さくしても, 測定のレンジは大きいままなので, 必要に応じて設定する必要がある.
    *cls
    outp off, (@1,2,3,4)
    current:range 3A, (@1)
    current:range 100mA, (@2,3,4)
    volt:range 5.5, (@1,2,3,4)
    
    current 2.0, (@1)
    current 0.025, (@2,4)
    current 0.090, (@3)
    
    voltage:slew 100, (@1)
    voltage:slew 10, (@2,3,4)
    voltage 5.0, (@1)
    voltage 1.2, (@2)
    voltage 1.2, (@3)
    voltage 1.2, (@4)
    sens:swe:tint 9.765625E-5, (@1,2,3,4)
    sens:current:dc:range 3, (@1)
    sens:current:dc:range 0.1, (@2,3,4)
    
    このあと, 以下のように各チャネルをオンにする. チャネル一覧に複数チャネルを指定すると, 同時に操作できるらしい.
    outp on, (@1)
    outp on, (@2,3,4)
    
    電流を測定する時には, 以下のコマンドを送る.
    meas:curr? (@3,4)
    

    Agilent MSO6104A ミクスドシグナルオシロスコープのディジタルチャネルプローブを自作

    Agilent MSO6104Aのディジタルプローブを自作してみた. 目的は, あるマイコンのプログラムのデバッグのため. プローブはあるのだけれど, 1個づつクリップで接続するのが面倒な上に, 何チャネルか断線している疑いが出てきた.

    テスタなどで調べた所, プローブの入力抵抗は100kΩ, プローブ内に直列抵抗90kΩが付いていて, オシロスコープ端子の入力抵抗は10kΩになっている模様.
    オシロスコープ端子のピンアサインは以下の通り. (プローブ側のコネクタを見た図で, 右下が1番ピン)

            NC Gn Gn Gn Gn Gn Gn Gn Gn Gn Gn Gn Gn Gn Gn Gn Gn Gn Gn NC
            NC 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 NC NC NC
            ---------------------------_____---------------------------
    
    PC内で使われていたIDEやSCSI, FDDのコネクタと同じものと思われる. RSコンポーネンツのこれが合致するだろう.

    この40ピンのコネクタをフラットケーブルの片側に圧着し, もう片側は16ピンの同種のコネクタに圧着した. マイコンの基板側に91kΩの抵抗を実装し, マイコンのGPIOポートとピンヘッダへ接続した.

    2014-09-23

    みみせん

    飛行機や夜行バスに乗るとき, 私にとってはみみせんが必需品.
    飛行機の中では, 飛行中ずっと轟音が響いていて, なによりも耳にわるそうだ.

    私の知る限りでは, MOLDEXのカモフラ迷彩色 6608 が, NRR 33dBと最も遮音性能が良い.

    Sony MDR-EX500SL

    5年位前にソニーのMDR-EX500SLを買って, 今でも使っている.
    音質は良いと思うのだけれど, 遮音性は良くないので, イヤフォンをつけていても外の音が聞こえる. 歩いていると, コードがこすれる音が聞こえる.

    遮音性を上げたいときには, イヤーマフを一緒に使っている.

    最近になって遮音性の良いイヤフォンを探していたら, こういうページが見つかった: 遮音性能のいいカナルイヤホン・ヘッドホン

    2014-09-19

    WZR-1750DHP2 をブリッジモードに設定

    最近, Buffalo の WZR-1750DHP2 に買い換えた. ブリッジモードに関するマニュアルが全然ととのっていなくて色々試行錯誤した.

    ブリッジモードへの切り替え

    本体についている MODE ボタンを押すと, AUTOモード -> ルータモード -> ブリッジモードと切り替わる. (ここまではマニュアルどおり)

    実際に押してみると, 切り替わらない.

    起動後, 2分くらいは待たないと, ボタンが反応しないようだ.
    さらに, ボタンを押す時, 1秒から2秒くらい押し続けてから離すと切り替わった.

    ブリッジモードにした場合の設定ページ

    ブリッジモードに切り替えると, IPアドレスは 192.168.11.100/24 に固定設定される. PCなどのIPアドレスを192.168.11.0/24 のネットワークに設定し, 192.168.11.100にアクセスすると, 設定ページが表示される.
    $ sudo ifconfig eth0:1 192.168.11.254
    $ firefox 192.168.11.100
    
    設定ページにアクセスできると, DHCPでIPアドレスを取得するように設定変更が可能.

    その他

    • Linuxマシンやandroidを無線接続して使っているが, とくに問題はないようだ.
    • LAN 上のマシンとの ping は速い時で3msくらい, ダウンロードは 3MB/s くらいになった. 良い方だと思う.
    • WPA2-PSK ではなく WPA/WPA2-PSK にすると, android から接続できなくなるようなきがする.

    2014-09-17

    WiFiつきSDカードのroot取得

    EyeFi や Flashair のような WiFiつきSDカードのファームウェアを書き換えたりできると面白いとおもって調べていたら, やった人の記事を見つけた. こういうことが出来ると, 自作や小ロット生産の組込機器に無線LAN機能をもたせることが簡単にできるようになる. とくに, 後述のPQI Air カードのように, もともとスクリプトを自動実行するような機能がついていれば電波法上も問題ないだろう.

    Transcend WiFi SDカード

    Hacking Transcend WiFi SD Cards
    Transcend の Wi-Fi SDカードの root を取得したという記事. 具体的にどの型の製品で成功したのかは書かれていない. ..とかをつかってシステムのデータを読み出し, コマンドインジェクションでデータを書き換えるという初歩的な方法.

    PQI Air カード

    もともと, telnet で接続できる仕様らしい. autorun.shというファイルを置いておくと自動実行されるという機能もあり.

    2014-09-15

    Android gmail アプリのアイコンの意味

    最近, gmail アプリのデザインが新しくなって, 上部にアイコンがいくつか出るようになった. これを操作しないと, メールの削除・アーカイブ・作成などができないのだけれど, その意味がわかりにくい.
    最近きづいたのだが, 長くタップするとアイコンの意味が出てくる.

    2014-09-12

    Sandisk Cruzer Fit 32GB

    Sandisk Cruzer Fit 32GB を買った. 音楽を入れるためなので, 書き込み速度は重視しなかったが, 測ってみた.
    以下は書き込み中の df と iostat の結果.
    $ df -h .
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdg1        30G  1.5G   29G   5% /mnt/sdg1
    $ iostat -k /dev/sdg1 8
    ...
    Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
    sdg1             71.12         0.00      8482.88          0      67863
    
    空き容量が減った時にどうなるか, もう一度測ってみる予定.

    2014-09-11

    楽天の評判

    ブログに楽天の広告を乗せてみるのはどうだろうかと思って, 評判を調べてみた.

    2014-09-02

    fatal: Reference has invalid format: 'refs/heads/master~'

    あるとき突然, Git が以下のエラーを出すようになった.
    fatal: Reference has invalid format: 'refs/heads/master~'
    
    結果としては, .git/packed-refs にある refs/heads/master~ が含まれる行を削除すればよかった.

    推測するに, 以下の手順でこの問題が起こったようだ:

    1. 何らかの理由で .git/refs/heads/master をVimで編集. master~がバックアップとして生成された.
    2. git gcを実行して, 圧縮した.

    2014-08-27

    Docomoパケ・ホーダイを解約しようかな...

    このごろ, ドコモのパケ・ホーダイを解約して, データ通信はOCNとかのMVNOに切り替えようかと考えている.
    HT-03ADocomo SIM電話用, WiFiでデータ通信が可能
    F-05DMVNO SIMデータ通信用.
    分かってきた犠牲や注意事項を挙げておく:
  • WiFi永年無料キャンペーンの条件から外れる.
    「永年」というのが引っかかるが, いずれにしても, 安くなるなら良いだろう.
    ほとんどドコモWiFiは使わない. テザリングの方が品質が良いこともある.
  • SPモードを解約すると...
    最近は携帯電話のメールアドレスでないと使用できないサービスはほとんどなくなってきたので, 必要ないだろう.
    SPモードは維持しつつ, IMAPでメールを受けることもできる.
  • いま使っている端末 (F-05D) でMVNOにてテザリングに対応しているのか?
    この端末, テザリング時にSPモードのアクセスポイントに強制切り替えする.
  • MVNOでは国際ローミングに対応してなさそう.
  • 2014-08-26

    PDF末尾に注意を記載する

    PDFtk を使用すると, 全てのページにスタンプを押すことができる. PDF末尾に注意事項を記載する場合の方法を紹介する.
    1. スタンプのPDFを作成する. 以下のようなpLaTeXのファイル notice.tex を作成し, PDFを作成する.
      \documentclass[a4j,10pt]{jarticle}
      
      \setlength{\topmargin}{243mm}
      \setlength{\textheight}{10mm}
      
      \begin{document}
      \footnotesize
      本著作物の著作権は情報__学会に帰属します.
      本著作物は著作権者である情報__学会の許可のもとに掲載するものです.
      ご利用に当たっては「著作権法」ならびに「情報__学会倫理綱領」に従うことをお願いいたします.
      \end{document}
      
    2. PDFtkを使用して, paper.pdf にスタンプを押し, web.pdf を作成する.
      $ pdftk paper.pdf stamp notice.pdf output web.pdf

    2014-08-18

    スキャンディスクが終了しないとき

    Windows Vista や 7 では, 起動時にシステムディスクのチェックを行う機能がある. しかし, チェック中にフリーズして, システムが起動しなくなるという問題が発生する場合がある. セーフモードできどうしても, なぜかcrcdisk.sysの後でフリーズしてしまう.
    このときの対処方法を簡単に説明する.

    主な手順は以下の通り:

    1. 起動ディスクなどで起動する.
    2. レジストリエディタにより HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute にある autocheck autochk * /r\DosDevice\C: という記述を消す. autocheck autochk *はそのままで良い [参考ページ].

    もし起動ディスクからレジストリエディタを使用できないような場合, レジストリのデータが書かれたファイル (ハイブファイル) を取り出し, 別のマシンで書き換えることもできる [参考ページ].

    1. %SystemRoot%\system32\config\SYSTEM* を取り出し, 正常なマシンにコピーする.
      拡張子無しのファイルとLOG, LOG1, ... と拡張子のついたファイルすべてを取り出す.
    2. ハイブをロードする:
      レジストリエディタを起動し, HKEY_LOCAL_MACHINEを選択, メニューのFile/Load Hive...を選択する. ファイル名と適当なキー名を入力すると, ハイブファイルを編集できるようになる.
    3. CurrentControlSetの代わりにControlSet001などのキー名になっているが, BootExecuteを探し, 該当する箇所を編集する.
    4. ハイブをアンロードする.
    5. 問題のマシンにファイル一式をコピーする.

    レスキュー用の起動システムには, Fedora Liveメディアもおすすめ. USBフラッシュメモリに書き込んでも起動できる.


    Error in queuecommand_lck

    TranscendのUSBフラッシュメモリにddでデータを書き込んでいたら, 以下のエラーがdmesgに出て, 書き込みが止まっていた. bs を指定しなかった (512になっていた) ことが問題だったのだろうか. bs=65536をつけてもう一度やり直したら, 問題なさそう...
    usb-storage: Error in queuecommand_lck: us->srb = ffff880157ab4180
    usb-storage: Error in queuecommand_lck: us->srb = ffff880157ab4180
    

    2014-08-16

    RHEL7にてNFS上にホームディレクトリをおくときの設定

    RHEL7のクローンであるSL7では, ホームディレクトリをNFS上においていると, SSHでログインする際に公開鍵暗号による認証が使用できない. 以下の設定で, 回避する.
    $ sudo setsebool -P use_nfs_home_dirs on
    

    Linux PCをBluetooth接続のヘッドセット (A2DP) として使う

    音楽を聞きながら家に帰り, 続きをPCに接続したスピーカで聞けると便利である. A2DPにて, Linuxマシンへ転送することができると, Androidで音楽を再生しPCを経由してスピーカへ送ることができる.
    ひとまず, Fedora 20 で設定を試してみた. うまくいったので, こんど SL6 でやってみるつもり. 簡単に設定をまとめておく.
  • /etc/pulse/default.paに以下の行を書き足す.
    .ifexists module-bluetooth-discover.so
    load-module module-bluetooth-discover
    .endif
    
    daemon.confに以下の行を書く.
    resample-method = trivial
    
  • pulseaudioを再起動する.
    Bluetoothのサービスは再起動する必要ない. module-bluetooth-discoverが自動的にbluetoothdへ登録する.

    あとは, bluetoothctlpactl でいろいろする.
    bluetoothctlにてconnectする.

    $ bluetoothctl
    [bluetooth]# connect xx:xx:xx:xx:xx:xx
    Attempting to connect to xx:xx:xx:xx:xx:xx
    [CHG] Device xx:xx:xx:xx:xx:xx Connected: yes
    Connection successful
    

    pactlmodule-loopbackをロードする.
    pactl load-module module-loopback sink=alsa_output.usb-Burr-Brown_from_TI_USB_Audio_DAC-00-DAC.analog-stereo  source=bluez_source.xx_xx_xx_xx_xx_xx
    
    この操作は自動にならないのかな???
  • 2014-08-15

    Cadence Virtuoso on SL7

    RHEL7のクローンであるSL7にて, Cadence Virtuoso 6.1.5 を動作させた. Virtuoso の起動時, sysnameというシェルスクリプトがKernelのバージョンからOSの種類を判定しているのだが, 3.10は対応していなかった. 以下のように書き換えることで, SL7でも起動するようになった.
    --- IC06.15.171-615_lnx86.Hotfix/oa_v22.41.033/bin/sysname 2013-03-27 09:19:10.000000000 +0900
    +++ IC06.15.171-615_lnx86.Hotfix/oa_v22.41.033/bin/sysname 2014-08-15 14:49:14.259021502 +0900
    @@ -199,7 +199,7 @@
          case $version in
              2.4*) compiler="_gcc411"
             sysname="linux_rhel30$compiler"; sysnames="$sysname linux$compiler";;
    -         2.6*|3.0*) compiler="_gcc44x"
    +         2.6*|3.0*|3.10.*) compiler="_gcc44x"
                           sysname="linux_rhel40$compiler"; sysnames="$sysname linux$compiler";;
              *)    check_global;;
          esac;;
    
    
    バージョン番号がハードコードされており, 2.6 または 3.0 の場合には gcc-4.4, 2.4 の場合には, gcc-4.1.1 を使用すると書かれているようだ. ここに, 3.10 を追加した.

    ところで, -64オプションを付けておくと, 64ビット版で動作することが分かった. これまで, 32ビットのライブラリをいちいちインストールしていたのだが, その必要はなかったようだ.

    2014-08-14

    Fetchmail にて SSL 証明書を確認する

    Fetchmail でも, SSL を使用して通信を暗号化できる. 注意しなければいけないのは, 設定ファイルに sslcertck を書いておく事. これをしていないと, 中間者攻撃に脆弱になってしまう. 証明書の検査に関して, fetchmailの振舞いを試してみた. (証明書のチェックで失敗させるため, CommonName を不一致にさせて実験した.) 以下が使用した .fetchmailrc
    set postmaster hoge
    set nobouncemail
    
    poll imap.example.com
    protocol imap
    user hoge
    password 1234
    ssl sslcertck
    flush
    no mimedecode
    smtphost localhost
    is hoge@example.org
    

    sslcertck を書いておいた場合. 証明書のチェックで問題があると, 以下のようにエラーになって止まる.

    $ fetchmail -v 
    fetchmail: 6.3.17 は example.com とプロトコル IMAP を用いて 2014年08月14日 xx時xx分xx秒 に交信しています。交信が開始されました。
    xx.xx.xx.xx/993 へ接続しようとしています...接続しました。
    fetchmail: サーバ証明書:
    fetchmail: 発行元の組織: HogeSign, Inc.
    fetchmail: 発行元の CommonName: HogeSign Class 3 International Server CA - G3
    fetchmail: Subject CommonName: imap.example.com
    fetchmail: サブジェクトの別名: imap.example.com
    fetchmail: サーバの CommonName が一致しません : imap.example.com != example.com
    fetchmail: xx.xx.xx.xx の key fingerprint は次の通りです。: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 
    140276599748424:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1170:
    fetchmail: SSL による接続に失敗しました。
    fetchmail: socketエラーが hoge@example.com よりメールを受信している最中に発生しました。
    fetchmail: 6.3.17 は xx.xx.xx.xx とプロトコル IMAP を用いて 2014年08月14日 xx時xx分xx秒 に交信しています。交信が終了しました。
    fetchmail: Query status=2 (SOCKET)
    fetchmail: 通常の終了です。status 2
    

    sslcertck を書いていない場合, 証明書に問題があっても, そのまま通信を行なってしまう. (従って, ユーザ名やパスワードが漏れてしまう.)

    fetchmail: 6.3.17 は example.com とプロトコル IMAP を用いて 2014年08月14日 xx時xx分xx秒 に交信しています。交信が開始されました。
    xx.xx.xx.xx/993 へ接続しようとしています...接続しました。
    fetchmail: サーバ証明書:
    fetchmail: 発行元の組織: HogeSign, Inc.
    fetchmail: 発行元の CommonName: HogeSign Class 3 International Server CA - G3
    fetchmail: Subject CommonName: imap.example.com
    fetchmail: サブジェクトの別名: imap.example.com
    fetchmail: サーバの CommonName が一致しません : imap.example.com != example.com
    fetchmail: example.com の key fingerprint は次の通りです。: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 
    fetchmail: 警告:接続は保護されていません、続けます。(--sslcertckの使用をお勧めします!)
    fetchmail: IMAP< * OK .
    fetchmail: IMAP> A0001 CAPABILITY
    fetchmail: IMAP< * CAPABILITY IMAP4rev1 NAMESPACE IDLE LITERAL+ UIDPLUS QUOTA AUTH=LOGIN
    fetchmail: IMAP< A0001 OK .
    fetchmail: IMAP> A0002 LOGIN "hoge" *
    ...
    

    正常な通信の場合.

    fetchmail: 6.3.17 は imap.example.com とプロトコル IMAP を用いて 2014年08月14日 xx時xx分xx秒 に交信しています。交信が開始されました。
    49.102.153.235/993 へ接続しようとしています...接続しました。
    fetchmail: サーバ証明書:
    fetchmail: 発行元の組織: HogeSign, Inc.
    fetchmail: 発行元の CommonName: HogeSign Class 3 International Server CA - G3
    fetchmail: Subject CommonName: imap.example.com
    fetchmail: サブジェクトの別名: imap.example.com
    fetchmail: imap.example.com の key fingerprint は次の通りです。: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 
    fetchmail: IMAP< * OK .
    fetchmail: IMAP> A0001 CAPABILITY
    fetchmail: IMAP< * CAPABILITY IMAP4rev1 NAMESPACE IDLE LITERAL+ UIDPLUS QUOTA AUTH=LOGIN
    fetchmail: IMAP< A0001 OK .
    fetchmail: IMAP> A0002 LOGIN "hoge" *
    fetchmail: IMAP< A0002 OK .
    ...
    

    2014-08-07

    docomoのメール

    いつのまにやら, IMAPでドコモのメールを取得できるようになったらしい. 操作手順を見てみると, どうやらメールアプリから設定が必要らしい. メールアプリは, 携帯電話の設定を初期化した頃から使用できなくなってしまっている...

    「ドコモメール (ブラウザ版)」というのでなんとかならないかと思ったが, こんなメッセージがでた: spモードメールをご利用中のため、ドコモメールをご利用いただけません。(1301_lwprap26)

    長い間, ドコモのメールは見れない状態が続いている. 誰にもアドレスを教えていないから, 特に問題はないはずだ.

    android の soff など

    Android にて root を取得したあとよく使う機能に, いわゆる soff というものがある. なにをしているかというと, lsm_disabler.ko というカーネルモジュールをロードしている. このあと, /system を RW モードでリマウントする場合, soff を使わず, 以下のように書くこともできる.
    insmod /sdcard/external_sd/lsm_disabler.ko
    mount -o remount,rw /system
    
    システムへの変更は最小限にとどめておきたいので, soff はインストールせず, もともと入っているコマンドだけを使うようにしている... というのは建前で, soff とか busybox とかを用意するのが面倒なだけ.

    2014-08-06

    Mutt 設定にメール誤送信防止を実装

    最近はやりの, メール誤送信防止機能: 単に, 送信手続き後にメール配送を取り消すだけだが, 役に立つことが時々ある.
    これを, 普段メインで使っている Mutt でもできたらいいなと思って, 設定してみた.

    送信時に, 自前で用意したスクリプトを呼び出し, その中で, 30秒の遅延をいれる. 30秒以内にそのスクリプトを殺せば, 配送をキャンセルできる.
    まず, 以下のスクリプト .mutt/delay.sendmail を用意する. (hoge@* のところで, 自分あてかどうかを判別する. 自分あてならすぐに配送する.)

    #! /bin/bash
    
    tmp=$(mktemp)
    recpt_d=()
    recpt_m=()
    flags=()
    rrr=''
    
    cat >$tmp
    
    while (($# > 0)); do
        case "$1$rrr" in
            -f)
                flags=("${flags[@]}" "$1" "$2")
                shift 2
                ;;
            --)
                rrr='--'
                shift
                ;;
            *)
                case "$1" in
                    hoge@*)
                        recpt_m=("${recpt_m[@]}" "$1")
                        ;;
                    *)
                        recpt_d=("${recpt_d[@]}" "$1")
                        ;;
                esac
                shift
                ;;
        esac
    done
    
    if (( ${#recpt_m[@]} > 0)); then
        /usr/sbin/sendmail "${flags[@]}" "${recpt_m[@]}" <$tmp
    fi
    if (( ${#recpt_d[@]} > 0)); then
        (sleep 30 && /usr/sbin/sendmail "${flags[@]}" "${recpt_d[@]}" <$tmp ; rm $tmp) &
    else
        rm $tmp
    fi
    
    
    そして, .muttrc に以下の設定を書く.
    set sendmail="$HOME/.mutt/delay.sendmail"
    

    送信を取り消したいときは, 以下のコマンドを30秒以内に.

    killall delay.sendmail
    

    2014-08-02

    Virtuoso のライセンスと nscd

    なぜか, nscd が止まっていると Virtuoso のライセンスを取得できない...
    $ strmin 
    *WARNING* voInit failed to find the passwd entry for (null), using '/tmp' for a home directory.
    The most likely cause of this problem is the failure of NIS lookups.
    Please contact your system administrator.
    *WARNING* voInit failed to get the current user's login name, setting user to unknown.
    *ERROR* License "111" could not be checked out.
    ...
    
    nscd を起動したら, このエラーが解決された. なぜだろう...

    2014-08-01

    Loop exceeded maximum iteration limit.

    Synopsys Design Compiler にで RTLを合成する時, 非常に広いバス配線などをループで記述すると以下のエラーが出る.
    Error:  mod1.v:13: Loop exceeded maximum iteration limit. (ELAB-900)
    
    このような場合, hdlin_while_loop_iterationsを設定しなおせば良いらしい.
    set hdlin_while_loop_iterations 8191
    
    このエラーが出る時, たいていの場合は, 合成できない記述になっていると考える方が良いのかもしれないが...

    ICC上で特定のネットだけ再配線させる

    Synopsys IC Compiler で配線すると, なぜか大きく迂回した配線ができてしまうことがある. このネットがアンテナ違反を起こした...

    しかたないので, 以下のように一度その配線を消し, もう一度配線しなおした.

    remove_net_shape [ get_net_shapes -of_objects {net1} ]
    route_zrt_group -nets {net1}
    

    2014-07-30

    ICCにて相対配置 (relative placement) を使用する例

    Synopsys IC Compiler にて, 複数のセルを並べて配置する場合, relative placement を使用する. 予め, RP-group を作成しておき, それにセルを追加していく.
    set rp1 [create_rp_group {rp1} -columns 2]
    add_to_rp_group $rp1 -leaf core/cell1 -column 0
    add_to_rp_group $rp1 -leaf core/cell2 -column 1
    

    2014-07-29

    FFmpeg にて HPF を使用する

    ある音源を聞いていたら電源のノイズが音にのっているように感じたので, HPF (ハイパスフィルタ) を使用してみた.
    ffmpeg -i input.mp3 -filter_complex highpass=f=500 output.mp3
    
    FFmpeg のフィルタには, LPF (ローパスフィルタ) や BPF (バンドパスフィルタ) もあるようだ.

    ICC エラー: could not open script file

    Synopsys の IC Compiler は, ディジタル回路の物理レイアウト設計のデファクトスタンダードのツールである. このシェルで, source を実行すると, 以下のようにエラーが出ることがある.
    icc_shell> source tcl/procs.tcl
    Error: could not open script file "tcl/procs.tcl" (CMD-015)
    
    ソースするときの検索パスは, search_path という変数に書かれているため, これを変更すると, 見つけることができなくなってしまうことがある. lappend search_path "." で検索パスに.を追加するか, 以下のように書けば良い.
    icc_shell> source ./tcl/procs.tcl
    

    2014-07-18

    EL6をインストールした後, 削除しておきたいパッケージ

    EL6 (RHEL6, CentOS6, Scientific Linux 6など) をインストールしたとき, 削除を考慮するべきパッケージを挙げておく. 最小構成などではインストールされないものもあるが, フル構成でインストールされる. 用途やポリシーによってはインストールしておいても良いが, たまにトラブルの原因になることもある.
    • mlocate - 名前でファイルを検索するツール
      毎日ファイルシステムを検索してデータベースを更新するので, 負荷がかかることがある.
    • prelink - ELFを事前にリンクするツール
      ELFバイナリをリンク済みのものに置き換えてしまう.

    2014-07-17

    ICC ZRoute にてシールド付配線を行う

    ICC ZRoute では, シールド付の信号配線がサポートされている. もちろん, Classical Router でもサポートされていた.

    グローバル配線・ディテイル配線の前に, シールドを付けたい配線だけ先に配線を行なう. 具体的な手順を以下に示す.

    1. 特定の信号だけ先に配線を行う.
      route_zrt_group -nets [get_nets important_net*]
    2. シールドを作成する.
      create_zrt_shield -nets [get_nets important_net*] -with_ground VSS -coaxial_above true -coaxial_below true

    シールドの作成だけなら, route_zrt_auto後でも良いのだが, 他の配線が近くにできてしまうと, シールドを作ることができなくなる.

    GCCにてプログラムセグメントのアドレスを取得

    GCCでは, プログラムセグメントの番地を取得するシンボルが用意されている. etext, edata, end というグローバル変数を extern 属性を付けて宣言すれば良いらしい. 以下に, マニュアルからとってきた例を示す.
           #include 
           #include 
    
           extern char etext, edata, end; /* The symbols must have some type,
                                              or "gcc -Wall" complains */
    
           int
           main(int argc, char *argv[])
           {
               printf("First address past:\n");
               printf("    program text (etext)      %10p\n", &etext);
               printf("    initialized data (edata)  %10p\n", &edata);
               printf("    uninitialized data (end)  %10p\n", &end);
    
               exit(EXIT_SUCCESS);
           }
    

    具体的な使い道が思い浮かばない...

    2014-07-16

    USB接続RS232Cポート

    パソコンと実験用のFPGAボードを接続するのに, USB接続のRS232Cポートを使用していたのだけれど, 具合が悪かった. はじめ, FPGAの実装が悪いのかと思っていたのだけれど, RS232Cポートを別のものに変えたら, 好調になった.
    以前使用していた 変換名人のUSB-RS232は, 色々と悪い評判が出ていたことがわかった.
    今回使用したエムサーブのHL-340は問題ない. 価格も700円と安い.

    Windows 7 にてログオン時にVPNへ自動接続する方法

    ログオンすると自動的にVPNにつながると, 便利なことがある. その設定方法を説明する.

    1. ネットワーク接続を開く. (ネットワークと共有センターを開き, アダプター設定の変更をクリックする.)
    2. 自動接続したいVPNを右クリックし, ショートカットの作成をクリックする.
    3. デスクトップにショートカットを作成した後, スタートアップに移動する.
    4. VPNのプロパティを開き, 名前、パスワード、証明書などの入力を求めるのチェックを外す.
      (これにより, パスワード入力のダイアログをスキップして, 接続される.)

    以下に参考にしたページへのリンクを, 感謝を込めて, 挙げておく.

  • 教えてgoo; スタートアップに登録すれば簡単という説明. この方法だけでは, パスワード入力のダイアログで止まって自動接続できなかった.
  • Windows7で自動ダイヤルアップする(VPN); ダイアログを表示させない方法.
  • 2014-07-10

    ICCのサンプルスクリプト

    ICCのスクリプトのリポジトリをみつけた. 何かの役にたつかもしれない. icc-par

    2014-07-02

    FATのパーティションタイプを設定

    あるオシロスコープにて, あるUSBフラッシュメモリを使用できないなと思っていたら, パーティションタイプがLinuxになっていた.
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdf1               1        1015       63924   83  Linux
    

    このページによると, 修了シリンダが1023以下の場合は 0x0B (FAT32), 修了シリンダが1023を越える場合は 0x0C (FAT32 (LBA)) に設定するべきらしい 以下のように設定した.

    Command (m for help): t
    Selected partition 1
    Hex code (type L to list codes): b
    Changed system type of partition 1 to b (W95 FAT32)
    
    設定後のパーティション一覧は以下の通り:
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdf1               1        1015       63924    b  W95 FAT32
    

    Linux では, パーティションタイプが何になっていてもマウントできるので, オシロスコープでなぜそのメモリだけ使用できないのかわからず, なかなか原因がわからなかった. きっと Linux では, パーティション内のデータから判断しているのだろう.


    2014-06-24

    SOCKSを通した遠隔マシンからのアクセス

    ウェブサイトによっては, アクセス元を制限していることがある. このような場合, OpenSSH の「動的アプリケーションレベルポートフォワーディング」を使用すると簡単に対処できる.

    以下に例を示す.

    $ ssh -NfD 1080 host.example.com
    $ google-chrome --proxy-server=socks4://localhost:1080
    
    ssh にて1080番ポートのフォワーディングを行い, google-chrome を1080をプロキシとして起動する.
    なお, socks4 のかわりに socks5 でもよい.

    SOCKS5 では, ドメイン名にて接続先のホストを指定することができる. 使用するクライアントの実装に依存するが, google-chromeでは SOCKS5ではサーバ側で名前解決が行われるようだ.

    2014-06-21

    LaTeX での文字サイズ

    LaTeX にて \tiny により小さい文字にできるが, 縦横比が変わり, 上下にへしゃげた文字になる. そのままの縦横比で小さくするには, \scalebox の方がよさそうだ. 図表の中の文字サイズを変えるときに便利.

    2014-06-19

    Windows7におけるシリアルポートへのアクセス

    Windows 7 にて, シリアルポートにアクセスしようとすると, CreateFile が失敗し, GetLastError が 2 を返す. ERROR_FILE_NOT_FOUND, 「指定されたファイルが見つかりません。」というエラーらしい.

    このサイトによると権限が無いときにこのエラーになるらしい. プログラムを実行するときに, 右クリックし, 「管理者として実行(A)」をしたら, シリアルポートにアクセスできるようになった.

    本来は, ユーザ権限で動作するプロセスにシリアルポートへのアクセスを許すような権限の変更を行うべきなのだろうが...

    なお, C言語でのコードは以下の通り.

    char s[] = "\\\\.\\COM1";
    handle = CreateFile(s, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    
    バックスラッシュがたくさんあるが, C言語におけるエスケープが行われた後, \\.\COM1になる.


    • iBuffalo BSUSRC0610BS は, FTDI のチップが入っていて, 好評らしい.
    • エムサーブ HL-340 は, 変換名人のものと色が似ているが, 好評.
    • 一方で変換名人の USB-RS232 は悪評. PID/VID は PL2303 だが載っているチップは別物との情報も!

    2014-05-13

    zsh にて ESC-k の動作を bash と同じにする

    Viモードのbashにて ESC-k を押すと, 一つ前の履歴に戻り, カーソルが行頭にゆく. zshでも同様に一つ前の履歴に戻るが, カーソルが行末に行く. この振舞の違いでzshを使うことをためらっていたのだけれど, 変更できないかと調べてみた.

    以下の2行を~/.zshrcに記述すれば良いことが分かった.

    function up-history-first { zle up-history ; zle vi-first-non-blank }
    zle -N up-history-first
    bindkey -a 'k' up-history-first
    
    1行目で「一つ前の履歴に戻り, カーソルを行頭に移動する」関数を定義する. 2行目で, その関数をZLE (Zsh Line Editor) のウィジットとして登録する. 3行目で, Viコマンドモードでのキー「k」を先ほど登録したウィジットに割り当てる.

    .zshrcはzshが対話モードで起動した場合に読み込まれる. 対話モードでないときには読み込まれないのでちょうど良い.

    2014-04-04

    CMOS VLSI Design 4th edition の PDF

    ある大学のウェブサイトからCMOS VLSI Design (4th edition) がダウンロード出来るようになっている.

    日本語訳が出ているらしい:


    2014-04-01

    Oracle_VM_VirtualBox_Extension_Pack を展開

    Extension Pack をわざわざ root で Virtualbox を起動してインストールするのは面倒である. 以下のようにして展開すれば良いかもしれない.
    $ sudo mkdir /usr/lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack
    $ cd /usr/lib/virtualbox/ExtensionPacks/Oracle_VM_VirtualBox_Extension_Pack
    $ sudo tar xz <~/downloads/Oracle_VM_VirtualBox_Extension_Pack-4.3.10-93012.vbox-extpack
    

    2014-03-28

    lha の RPM を作成

    以前は sawaa から LHA のバイナリが配布されていたのだけれど, いつのまにかレポジトリごとなくなっていた. RPMを作成したので, specファイルを以下に書いておく.
    Name:  lha
    Version: 1.14i
    Release: ac20050924p1.1%{?dist}
    Summary: LHa for UNIX
    
    Group:  Applications/Archiving
    License: Other
    URL:  http://lha.sourceforge.jp/
    Source0: http://sourceforge.jp/projects/lha/downloads/22231/%{name}-1.14i-ac20050924p1.tar.gz
    
    %description
    LHA is an archiving and compression utility for LHarc/lha/lzh format archives.
    
    %prep
    %setup -q -n %{name}-1.14i-ac20050924p1
    
    %build
    %configure
    make %{?_smp_mflags}
    
    %install
    make install DESTDIR=%{buildroot}
    
    %files
    %doc
    %{_bindir}/lha
    %{_mandir}/mann/*
    
    %changelog
    * Fri Mar 28 2014  <hoge@example.com> - 1.14i-ac20050924p1
    - Initial RPM release.
    
    ビルドするときは, 上記ファイルを ~/rpmbuild/SPEC/lha.spec という名前で作成, ソースを ~/rpmbuild/SOURCES に保存し, 以下のコマンドを実行する.
    rpmbuild -ba lha.spec
    

    以下のように, LHAの自己解凍形式のexeでもUnix上で展開することができるので, 便利である. わざわざ wine を使わなくても良い.

    $ file wzrampg300nh-151.exe
    wzrampg300nh-151.exe: PE32 executable (GUI) Intel 80386, for MS Windows, LHa self-extracting archive
    $ lha wzrampg300nh-151.exe 
    PERMISSION  UID  GID      SIZE  RATIO     STAMP           NAME
    ---------- ----------- ------- ------ ------------ --------------------
    [MS-DOS]                  6855  45.1% Jun  8  2009 wzrampg300nh_151/howto_update_ap.htm
    [MS-DOS]                     0 ****** Jun  8  2009 wzrampg300nh_151/images/
    [MS-DOS]                 23369  96.9% Jan 25  2008 wzrampg300nh_151/images/wzr_fwup.png
    [MS-DOS]                 33772  93.3% Jan 25  2008 wzrampg300nh_151/images/wzr_fwup_success.png
    [MS-DOS]                  3416  97.2% Nov 29  2006 wzrampg300nh_151/images/wzr_system.png
    [MS-DOS]                 61631  98.8% Jan 25  2008 wzrampg300nh_151/images/wzr_top.png
    [MS-DOS]                  1152  38.5% Jun  8  2009 wzrampg300nh_151/Readme.txt
    [MS-DOS]               5967972 100.0% May 22  2009 wzrampg300nh_151/wzrampg300nh_151
    ---------- ----------- ------- ------ ------------ --------------------
     Total         8 files 6098167  99.9% Mar 28 15:32
    

    2014-03-27

    dvipdfmx が埋め込む eps のフォント

    LaTeX をコンパイルした DVI から PDF へ変換するには, dvipdf, dvipdfm, dvipdfmx など様々なツールがある.
    そのひとつである dvipdfmx は, 内部で gs を呼び出して eps を pdf に変換する. eps のフォントを埋め込むなどの設定を変えるためには, dvipdfmx.cfg に変更を加えれば良い.
    1. dvipdfmx.cfg を探す.
      $ kpsewhich --progname=dvipdfmx --format=othertext dvipdfmx.cfg
    2. dvipdfmx.cfg をコピーし, ls-Rをアップデートする. (あるいは, ls-Rを作らない)
      $ cp /usr/local/texlive/2012/texmf/dvipdfmx/dvipdfmx.cfg ~/texmf/dvipdfmx/
      $ mktexlsr ~/texmf
      
    3. D "rungs -q -dNOPAUSE -dBATCH ..." という行に, -dPDFSETTINGS=/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=trueを追加する.

    参考までに, 以下に私の dvipdfmx.cfgを示す.

    $ grep -v '\(^%\|^$\)' ~/texmf/dvipdfmx/dvipdfmx.cfg
    V  5
    p  a4
    O  0
    K  40
    P  0x003C
    D  "rungs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -dCompatibilityLevel=%v -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -sOutputFile='%o' '%i' -c quit"
    f  pdftex.map
    f kanjix.map
    f ckx.map
    f ipaex.map
    

    2014-03-26

    OpenLPを新改訳聖書に対応させるパッチ

    OpenLPは教会向けの聖書・歌詞プロジェクションソフトで, Launchpad 上で開発され, 無償で配布されている. BiblegatewayやCrosswalkなどから聖書本文を取得する機能が実装されており, 英語やフランス語, 中国語訳には対応しているが, 日本語訳にはまだ対応していない. そこで, 日本語の新改訳聖書を富山国際大学の高尾先生の検索エンジンより取得するためのパッチを書いてみた.
    === modified file 'openlp/plugins/bibles/forms/bibleimportform.py'
    --- openlp/plugins/bibles/forms/bibleimportform.py
    +++ openlp/plugins/bibles/forms/bibleimportform.py
    @@ -52,8 +52,9 @@
         Crosswalk = 0
         BibleGateway = 1
         Bibleserver = 2
    +    TUINSTakao = 3
     
    -    Names = ['Crosswalk', 'BibleGateway', 'Bibleserver']
    +    Names = ['Crosswalk', 'BibleGateway', 'Bibleserver', 'TUINSTakao']
     
     
     class BibleImportForm(OpenLPWizard):
    @@ -212,7 +213,7 @@
             self.webBibleLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.webSourceLabel)
             self.webSourceComboBox = QtGui.QComboBox(self.webBibleTab)
             self.webSourceComboBox.setObjectName('WebSourceComboBox')
    -        self.webSourceComboBox.addItems(['', '', ''])
    +        self.webSourceComboBox.addItems(['', '', '', ''])
             self.webBibleLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.webSourceComboBox)
             self.webTranslationLabel = QtGui.QLabel(self.webBibleTab)
             self.webTranslationLabel.setObjectName('webTranslationLabel')
    @@ -305,6 +306,8 @@
                 translate('BiblesPlugin.ImportWizardForm', 'BibleGateway'))
             self.webSourceComboBox.setItemText(WebDownload.Bibleserver,
                 translate('BiblesPlugin.ImportWizardForm', 'Bibleserver'))
    +        self.webSourceComboBox.setItemText(WebDownload.TUINSTakao,
    +            translate('BiblesPlugin.ImportWizardForm', 'TUINSTakao'))
             self.webTranslationLabel.setText(translate('BiblesPlugin.ImportWizardForm', 'Bible:'))
             self.webTabWidget.setTabText(self.webTabWidget.indexOf(self.webBibleTab),
                 translate('BiblesPlugin.ImportWizardForm', 'Download Options'))
    @@ -484,7 +487,7 @@
     
         def loadWebBibles(self):
             """
    -        Load the lists of Crosswalk, BibleGateway and Bibleserver bibles.
    +        Load the lists of Crosswalk, BibleGateway, Bibleserver and TUINSTakao bibles.
             """
             # Load Crosswalk Bibles.
             self.loadBibleResource(WebDownload.Crosswalk)
    @@ -492,6 +495,8 @@
             self.loadBibleResource(WebDownload.BibleGateway)
             # Load and Bibleserver Bibles.
             self.loadBibleResource(WebDownload.Bibleserver)
    +        # Load and TUINSTakao Bibles.
    +        self.loadBibleResource(WebDownload.TUINSTakao)
     
         def loadBibleResource(self, download_type):
             """
    
    === modified file 'openlp/plugins/bibles/lib/http.py'
    --- openlp/plugins/bibles/lib/http.py
    +++ openlp/plugins/bibles/lib/http.py
    @@ -59,7 +59,6 @@
     
     log = logging.getLogger(__name__)
     
    -
     class BGExtract(RegistryProperties):
         """
         Extract verses from BibleGateway
    @@ -429,6 +428,153 @@
             return books
     
     
    +class TTExtract(RegistryProperties):
    +    """
    +    Extract verses from Dr. Takao webpage on TUINS
    +    """
    +    _tt_bw = [
    +            (u'創世記', 'Gen'),
    +            (u'出エジプト記', 'Exod'),
    +            (u'レビ記', 'Lev'),
    +            (u'民数記', 'Num'),
    +            (u'申命記', 'Deut'),
    +            (u'ヨシュア記', 'Josh'),
    +            (u'士師記', 'Judg'),
    +            (u'ルツ記', 'Ruth'),
    +            (u'サムエル記第1', '1Sam'),
    +            (u'サムエル記第2', '2Sam'),
    +            (u'列王記第1', '1Kgs'),
    +            (u'列王記第2', '2Kgs'),
    +            (u'歴代誌第1', '1Chron'),
    +            (u'歴代誌第2', '2Chron'),
    +            (u'エズラ記', 'Ezra'),
    +            (u'ネヘミヤ記', 'Neh'),
    +            (u'エステル記', 'Esther'),
    +            (u'ヨブ記', 'Job'),
    +            (u'詩篇', 'Ps'),
    +            (u'箴言', 'Prov'),
    +            (u'伝道者の書', 'Eccles'),
    +            (u'雅歌', 'S_of_S'),
    +            (u'イザヤ書', 'Isa'),
    +            (u'エレミヤ書', 'Jer'),
    +            (u'哀歌', 'Lam'),
    +            (u'エゼキエル書', 'Ezek'),
    +            (u'ダニエル書', 'Dan'),
    +            (u'ホセア書', 'Hos'),
    +            (u'ヨエル書', 'Joel'),
    +            (u'アモス書', 'Amos'),
    +            (u'オバデヤ書', 'Obad'),
    +            (u'ヨナ書', 'Jonah'),
    +            (u'ミカ書', 'Micah'),
    +            (u'ナホム書', 'Nahum'),
    +            (u'ハバクク書', 'Hab'),
    +            (u'ゼパニヤ書', 'Zeph'),
    +            (u'ハガイ書', 'Hag'),
    +            (u'ゼカリヤ書', 'Zech'),
    +            (u'マラキ書', 'Mal'),
    +            #
    +            (u'マタイの福音書', 'Matt'),
    +            (u'マルコの福音書', 'Mark'),
    +            (u'ルカの福音書', 'Luke'),
    +            (u'ヨハネの福音書', 'John'),
    +            (u'使徒の働き', 'Acts'),
    +            (u'ローマ人への手紙', 'Rom'),
    +            (u'コリント人への手紙第1', '1Cor'),
    +            (u'コリント人への手紙第2', '2Cor'),
    +            (u'ガラテヤ人への手紙', 'Gal'),
    +            (u'エペソ人への手紙', 'Eph'),
    +            (u'ピリピ人への手紙', 'Phil'),
    +            (u'コロサイ人への手紙', 'Col'),
    +            (u'テサロニケ人への手紙第1', '1Thess'),
    +            (u'テサロニケ人への手紙第2', '2Thess'),
    +            (u'テモテへの手紙第1', '1Tim'),
    +            (u'テモテへの手紙第2', '2Tim'),
    +            (u'テトスへの手紙', 'Tit'),
    +            (u'ピレモンへの手紙', 'Philem'),
    +            (u'ヘブル人への手紙', 'Heb'),
    +            (u'ヤコブの手紙', 'Jas'),
    +            (u'ペテロの手紙第1', '1Pet'),
    +            (u'ペテロの手紙第2', '2Pet'),
    +            (u'ヨハネの手紙第1', '1John'),
    +            (u'ヨハネの手紙第2', '2John'),
    +            (u'ヨハネの手紙第3', '3John'),
    +            (u'ユダの手紙', 'Jude'),
    +            (u'ヨハネの黙示録', 'Rev'),
    +            ]
    +    _tt_verse_split = re.compile(r'^([a-z0-9_]*) *([0-9]*):? *([0-9]*)')
    +    def __init__(self, proxy_url=None):
    +        log.debug('TTExtract.init("%s")', proxy_url)
    +        self.proxy_url = proxy_url
    +        socket.setdefaulttimeout(30)
    +        self._tt_b2w = {}
    +        for k,v in self._tt_bw:
    +            self._tt_b2w[k] = v
    +    def get_bible_chapter(self, version, book_name, chapter):
    +        """
    +        Access and decode bibles via TUINS search cgi
    +
    +        :param version: The version of the bible like NIV for New International Version
    +        :param book_name: Text name of bible book e.g. Genesis, 1. John, 1John or Offenbarung
    +        :param chapter: Chapter number
    +        """
    +        log.debug('TTExtract.get_bible_chapter("%s", "%s", "%s")', version, book_name, chapter)
    +        verse = 1
    +        no_chapter = False
    +        verses = {}
    +        while True:
    +            book_en = self._tt_b2w[book_name].lower()
    +            if no_chapter:
    +                word = '%s %d-'%(book_en, verse)
    +            else:
    +                word = '%s %d:%d-'%(book_en, chapter, verse)
    +            word = urllib.parse.quote(word.encode("utf-8"))
    +            chapter_url = 'http://www.tuins.ac.jp/~takao/cgi-bin/biblesearch.cgi?key=&word=%s'%word
    +            header = ('Accept-Language', 'ja')
    +            soup = get_soup_for_bible_ref(chapter_url, header)
    +            if not soup:
    +                return None
    +            self.application.process_events()
    +            dl = soup.find('dl')
    +            count = 0
    +            (dt_book_name, dt_chapter_number, dt_verse_number) = (0, 0, 0)
    +            for d in dl:
    +                log.debug('TTExtract d="%s"', str(d))
    +                if d.name=='dt':
    +                    vv = re.split(self._tt_verse_split, d.text)
    +                    log.debug('TTExtract vv="%s"', str(vv))
    +                    if len(vv[3]):
    +                        dt_book_name = vv[1]
    +                        dt_chapter_number = int(vv[2])
    +                        dt_verse_number = int(vv[3])
    +                    else:
    +                        dt_book_name = vv[1]
    +                        dt_chapter_number = 1
    +                        dt_verse_number = int(vv[2])
    +                        no_chapter = True
    +                    log.debug('TTExtract "%s" %d:%d', dt_book_name, dt_chapter_number, dt_verse_number)
    +                elif d.name=='dd':
    +                    if dt_book_name.lower() == book_en and dt_chapter_number == chapter:
    +                        verses[dt_verse_number] = d.text.strip()
    +                        count += 1
    +            if count<10:
    +                break
    +            verse += 10
    +        if not verses:
    +            log.error('No verses found in the TUINS response.')
    +            send_error_message('parse')
    +            return None
    +        return SearchResults(book_name, chapter, verses)
    +
    +    def get_books_from_http(self, version):
    +        """
    +        Return a list of all books
    +
    +        :param version: The version of the Bible like NIV for New International Version
    +        """
    +        log.debug('TTExtract.get_books_from_http("%s")', version)
    +        return [book for book, data in self._tt_bw]
    +
    +
     class HTTPBible(BibleDB, RegistryProperties):
         log.info('%s HTTPBible loaded', __name__)
     
    @@ -481,6 +627,8 @@
                 handler = BGExtract(self.proxy_server)
             elif self.download_source.lower() == 'bibleserver':
                 handler = BSExtract(self.proxy_server)
    +        elif self.download_source.lower() == 'tuinstakao':
    +            handler = TTExtract(self.proxy_server)
             books = handler.get_books_from_http(self.download_name)
             if not books:
                 log.error('Importing books from %s - download name: "%s" failed' %
    @@ -576,6 +724,8 @@
                 handler = BGExtract(self.proxy_server)
             elif self.download_source.lower() == 'bibleserver':
                 handler = BSExtract(self.proxy_server)
    +        elif self.download_source.lower() == 'tuinstakao':
    +            handler = TTExtract(self.proxy_server)
             return handler.get_bible_chapter(self.download_name, book, chapter)
     
         def get_books(self):
    
    
    bibles_resources.sqlite の変更は, 以下のように行った.
    $ sqlite3 openlp/plugins/bibles/resources/bibles_resources.sqlite
    insert into download_source values (4,'tuinstakao');
    insert into webbibles (name, abbreviation, language_id, download_source_id) values ("新改訳聖書", "ja2003", 57, 4);
    

    2014-03-20

    Python3 のインストールなど

    RHEL6にPython3のインストール, その他のツールキットのインストールを行う手順を説明する.

    インストール先は, /usr/local/python3とし, 他のパッケージと干渉しないように配慮する.

    1. python-3.4 をダウンロード, インストール.
      ここから現在最新のPython-3.4.0.tgzをダウンロード.
      $ tar xzf Python-3.4.0.tgz
      $ cd Python-3.4.0
      $ ./configure --prefix=/usr/local/python3
      $ make
      $ sudo make install
      
    2. setuptools のインストール
      $ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
      $ sudo /usr/local/python3/bin/python3 ez_setup.py
    3. SIPをダウンロードし, インストール.
      $ tar xzf sip-4.15.5.tar.gz
      $ cd sip-4.15.5
      $ /usr/local/python3/bin/python3 configure.py
      $ make
      $ sudo make install
      
      $ cd PyQt-x11-gpl-4.10.4 $ /usr/local/python3/bin/python3 configure-ng.py --qmake /usr/bin/qmake-qt4 --consolidate --confirm-license $ make
    4. pipとその他のライブラリ
      $ sudo /usr/local/python3/bin/easy_install pip
      $ sudo /usr/local/python3/bin/pip install lxml
      $ sudo /usr/local/python3/bin/pip install beautifulsoup4
      $ sudo /usr/local/python3/bin/pip install sqlalchemy
      $ sudo /usr/local/python3/bin/pip install alembic
      $ sudo /usr/local/python3/bin/pip install sqlite
      $ sudo /usr/local/python3/bin/pip install chardet
      
      
    qt-devel
    qtwebkit-develepel
    openssl-devel
    libxslt-devel
    sqlite-devel
    libuuid-devel

    以下のコードでセグメンテーション違反...

    from PyQt4 import QtCore, QtGui
    import uuid
    print('4 uuid1=%s'%str(uuid.uuid1()))
    

    Linuxの端末でのコントロール操作

    Ctrl+CSIGINT割り込み
    Ctrl+DEOF
    Ctrl+SSIGSTOP一時停止
    Ctrl+QSIGCONT再開
    Ctrl+\SIGQUIT終了

    2014-03-19

    SL6 のインストールから samba サーバの構築まで

    SL6をインストールし, sambaサーバを構築する方法をメモしようと思ったが, まだ途中.
    1. Scientific Linux 6 のインストール
      1. このページの「Latest Supported Releases」からインストール用メディアをダウンロードし, CDまたはDVDに書き込む. i386かx86_64かの選択は, マシンのCPUによる. 32bit (Jonah以前) ならi386, 64bit (Merom以降) ならx86_64を選ぶ. 初めての場合, *-Install-DVD.iso がおすすめ. *-boot.iso でも良いが, 設定項目が多い.
      2. インストールを行う.
      3. パーティションは, /homeをできるかぎり大きめに, /は4GBから8GB程度で良い.
      4. 構成は, Minimum.
    2. rootでログインし, 管理者用アカウントを追加.
      1. 以下のように表示されたら, ユーザ名「root」とインストール時に設定したパスワードを入力する.
        Scientific Linux release 6.5 (Carbon)
        Kernel 2.6.32-431.el6.i686 on an i686
        Login:
        
      2. ユーザを追加 (ここではtaroとしたが, 何でも良い. 通常は管理者の名前にする.)
        # adduser taro
        # passwd taro
        New password: 
        Retype new password: 
        
        (#以降の部分を入力する)
      3. taro を sudoers に追加する.
        # visudo
        エディタ (vi) が起動するので, 以下の1行を書き加える.
        taro ALL=(ALL) ALL
        viの使い方を簡単に述べる: G (shfitを押しながら) を押して最下行に移動, oを押して入力モードを開始, 上記1行を入力し, ESCを押してコマンドモードに戻る. 「:wq」と入力して保存・終了. コマンドモード中は, jk で上下移動, hlで左右移動である.
      4. 一度ログアウト
        # logout
        (Ctrl+Dを押しても良い)
      5. 追加したユーザでログインし, 以下の作業を行う.
      これ以降の操作は, SSHでログインし, 他のマシンからでも可能. Windows用のSSHクライアントもある.
    3. まずはアップデート
    4. $ sudo yum update
      $ sudo shutdown -r now
      アップデートをすべて反映させるため, 再起動する. (たいていのアップデートには再起動は不要だが, kernel などのアップデートには再起動が必要.)
    5. 必要なパッケージをインストール
    6. $ sudo yum install ntp samba man
    7. NTPの起動
    8. $ sudo chkconfig ntpd on
      $ sudo service ntpd start
      (1行目は, システム起動時にNTPDが起動するように設定. 2行目は, NTPDを (すぐに) 起動.
    9. sambaの起動
    10. $ sudo chkconfig smb on
      $ sudo service smb start
      
    11. sambaでアクセスする際のアカウントを作成 (この例ではkyoto)
    12. $ sudo adduser kyoto
      $ sudo smbpasswd -a kyoto
      
      複数のアカウントを作成する場合, 上記2コマンドを繰り返す.
    13. SElinuxの設定
    14. $ sudo setsebool -P samba_enable_home_dirs 1
    15. ファイアウォールの設定
      $ sudoedit /etc/sysconfig/iptables
      以下の太字の部分を書き足す.
      *filter
      :INPUT ACCEPT [0:0]
      :FORWARD ACCEPT [0:0]
      :OUTPUT ACCEPT [0:0]
      -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
      -A INPUT -p icmp -j ACCEPT
      -A INPUT -i lo -j ACCEPT
      -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
      -A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 139,445 -j ACCEPT
      -A INPUT -j REJECT --reject-with icmp-host-prohibited
      -A FORWARD -j REJECT --reject-with icmp-host-prohibited
      COMMIT
      
      $ sudo service iptables reload
    16. IPアドレスの設定など
    17. 固定IPアドレスを設定を /etc/sysconfig/network-scripts/ifcfg-eth0 に記述する. HWADDR などはそのままにする.
      DEVICE="eth0"
      BOOTPROTO="static"
      HWADDR="xx:xx:xx:xx:xx:xx"
      NM_CONTROLLED="no"
      ONBOOT="yes"
      TYPE="Ethernet"
      BROADCAST="192.168.0.255"
      DNS1="192.168.0.1"
      DNS2="8.8.4.4"
      IPADDR="192.168.0.11"
      NETMASK="255.255.255.0"
      
    18. ホスト名とデフォルトゲートウェイを /etc/sysconfig/network に記述する.
      NETWORKING=yes
      HOSTNAME=host1.example.com
      GATEWAY=192.168.0.1
      

    2014-03-18

    NTT docomoのメールをIMAPで受信

    いつのまにか, docomo のメールをIMAPで取得, SMTPで送信できるようになっていた. このサイトに解説がある. この解説はなくなっていた.
    報道資料からの引用: 株式会社NTTドコモ(以下、ドコモ)は、spモードメール®をクラウドに対応させた「ドコモメールTM」をパソコン等のWEBブラウザやIMAP4対応のメールソフトからでも同一のメールアドレス(xxxx@docomo.ne.jp)で利用できるように、2013年12月17日(火曜)に機能拡充します...

    やってみようと思ったけれど, アプリ「SPモードメール」の設定で「docomo ID利用設定を有効」にする必要があり, SPモードメールをインストールしようとしたけれど「サーバーとの通信にエラー」でインストールに失敗した. 日を改めて, もう一度やってみようと思う.

    2014-03-13

    IEEE/IEICE/IPSJ論文の個人ウェブサイト掲載

    IEEE, IEICE ともに, 個人のウェブサイトに論文のコピーを掲載することを許可している. しかし, 条件などが異なっている.
    IEEEIEICE
    掲載可能なデータ 投稿論文 (IEEExploreのPDFは不可)
    ... only the accepted version...
    出版社版PDF (著者最終版は不可)
    出版社版と著者最終版との違いによる混同を防ぐためらしい

    IPSJ は, 掲載媒体に関して特に具体的な条件はなく, 申告不要で「著作者個人の」ウェブサイトに掲載して良い. しかし, 利用上の注意事項を明記する必要がある.

    参考

  • Top 10 FAQ on IEEE Publishing Policies and Tools for Authors
  • IEICEの利用申請基準
  • IPSJの著作権規程, FAQ
  • 2014-03-12

    HSPICE: .NODESET で全てのサブサーキットのノード電圧を設定

    HSPICEでディジタル回路の過渡解析を行う時, 初期条件の収束に時間がかかることがある. FFなどに含まれるループでの状態が確定しないことが一因であることがある.

    このような場合, .nodeset を使用して初期電圧を与えると改善するらしい. 以下に例を示す.

    .nodeset V(in)=0.0 subckt=my_dff
    

    2014-03-11

    不審なEメールのReceivedヘッダ

    届いたメールが疑わしい場合 (送信元の偽装などが疑われる場合), ヘッダを確認するべきである. 上の方にある Received をみると, どのホストからメールが届いたのかがわかる.
    Received: from 209.203.76.xx.cybertimebroadband.com (unknown [209.203.76.xx])
            by myhost.example.com (Postfix) with ESMTP id xxxxxxxxxx
            for ; Tue, 11 Mar 2014 08:04:07 +0900 (JST)
    From: hoge@example.net
    
    このfromの括弧内が, メールを送信したホストのIPアドレス. unknown の部分は送信元が自称するホスト名. カッコの左側はIPアドレスの逆引き結果である.

    Received: from... の部分と From: で書かれたメールアドレスのドメイン部分とに関連がない場合, 送信元偽装が考えられる.

    さらに詳しく調べたい場合, From のメールアドレスのドメインの TXT レコードを調べると良い. 上記の例の場合, ドメインは example.net なので,

    dig example.com txt
    
    で TXT レコードを調べる. v=spf で始まるレコードが出てくるので, SPFの文法に従って, 確認すればよい.

    2014-02-26

    HSPICE過渡解析: 途中経過をみる

    .option wave_pop=val
    
    valに0.001から1の範囲の値を設定することで, 出力バッファをフラッシュする.

    同様のオプションが HSIM にもあったが, 名前は忘れた.

    2014-02-24

    set_preroute_advanced_via_rule の設定を解除

    set_preroute_advanced_via_rule で電源配線などのビアを設定できるが, 間違えて設定した場合に元に戻す明示的なコマンドはない.

    report_preroute_advanced_via_rule が出力する結果を見ながら, どのようにすると元に戻るか調べてみた.

    その結果, どうやら -cut_layerオプションだけを付けて実行すると, デフォルトのルールに設定が上書きされるらしいという事がわかった.

    1. V6にルールを設定.
      icc_shell> set_preroute_advanced_via_rule -contact_codes ZZZV6HV -move_via_to_center -size_by_array_dimensions {2 1} -rotation_mode off
      icc_shell> report_preroute_advanced_via_rule
      Default set:
      ----------------
         Size:         an area (x-size X y-size) 0.000 X 0.000
         Contact code: to be selected automatically
         Rotation:     Enable
      ...
      ----------------
      Rule for cut-layer "V6":
         Size:         via-array (nx X ny) 2 X 1
         Contact code: "ZZZV6HV" 
         Rotation:     Disable
      ----------------
      Rule for cut-layer "V7":
         Same as default
      
      V6ルールにサイズ・コンタクトコード・回転可否の条件が設定された.
    2. icc_shell> set_preroute_advanced_via_rule -cut_layer V6
      icc_shell> report_preroute_advanced_via_rule
      Default set:
      ----------------
         Size:         an area (x-size X y-size) 0.000 X 0.000
         Contact code: to be selected automatically
         Rotation:     Enable
      ...
      ----------------
      Rule for cut-layer "V6":
         Size:         an area (x-size X y-size) 0.000 X 0.000
         Contact code: to be selected automatically
         Rotation:     Enable
      ...
      
      V6ルールに Default set の値がコピーされた. これでデフォルトのルールに戻ったようだ.

    2014-02-23

    ICC: セルの配置時にエラー

    ICCが place_opt, legalize_placement で以下のようなエラーを出した.
    Error: Cell xx/xx/xx unplaceable! - cannot satisfy placement constraints. (PSYN-1106)
    
    Error: lib cell 'xxxx' of cell xx/xx/xx is illegal for all sites in the block. (PSYN-061)
    Error: Could not find a legal placement.
    
    このセルは triple height なのだけど, 他の triple height のセルでは問題ない. セルライブラリを Milkyway で作成した時に, 以下のように triple height にしたという警告がでるのだけれど, 他のセルがここに紛れ込んでいた.
    Information: Set cell  as triple height. (MWLIBP-122)
    
    原因は, 別のセルで Boundary Layer を書き忘れていたことだった.

    2014-02-17

    EDAツールのライセンス設定をベンダ毎に記述

    Cadence, Mentor, Synopsys のツールのライセンスは, 環境変数で指定する. 多くの人は LM_LICENSE_FILE にて各ライセンスサーバを指定するが, ツール毎に別々のライセンスサーバを立てている場合は, ライセンス取得までに時間がかかる場合がある. 別のベンダーのライセンスサーバにアクセスし, 取得に失敗するためである.

    あまり知られていないが, ベンダー毎にライセンスサーバを別々に設定することができる. こうすることで, 別のベンダーのライセンスサーバにアクセスすることがなくなり, ライセンス取得までの時間を短縮できる.

    Cadenceのライセンス設定

    export CDS_LIC_FILE=port@server1-cadence:port@server2-cadence
    export CDS_LIC_ONLY=1
    
    環境変数CDS_LIC_ONLY1に設定しておくと, LM_LICENSE_FILEではなくCDS_LIC_FILEからライセンスサーバの情報を取得する.

    Mentorのライセンス設定

    export MGLS_LICENSE_FILE=port@server1-mentor,port@server2-mentor
    環境変数MGLS_LICENSE_FILEに, コンマ区切でライセンスサーバの情報を書いておく. MGLS_LICENSE_FILEが空または設定されていないと, LM_LICENSE_FILEからライセンスサーバ情報を取得するようだ.

    Synopsysのライセンス設定

    export SNPSLMD_LICENSE_FILE=port@server1-synopsys:port@server2-synopsys
    環境変数SNPSLMD_LICENSE_FILEにコロン区切でライセンスサーバの情報を書いておく.

    2014-02-14

    SPICEのAC解析による容量の評価

    HSPICEのAC解析によって, 容量を導出する方法を紹介する.

    MOSFETのゲート-ソース間容量など, バイアス条件や他の端子の状態によって刻々と変化するような場合でも, 容量を導出することができる.

    .param vbias=0.6
    V1  1 0  DC 'vbias' AC .1591549430918953 0
    * 以下に理想的な容量素子を例に書いておく. この値と比較する.
    .param C1=1p
    E1  n1 0 1 0 1
    C1  n1 0  'C1'
    
    * 評価したい素子 (この例ではMOSCAPという名前のサブサーキット)
    E2  n2 0 1 0 1
    x1  n2 VDD VSS MOSCAP
    VVDD VDD 0  1.5
    VVSS VSS 0  0.0
    .measure AC C_MOSCAP avg par('Ii(E2)/Ii(E1)*C1') from=10k to=100meg
    
    * パラメータ vbias を振って解析する
    .ac dec 10 1k 1g sweep vbias 0.0 1.5 0.05
    

    2014-02-12

    GNUplotによるヒストグラム描画

    GNUplotでヒストグラムをプロットする方法をメモする.
    bin(x,y)=floor((x+y*0.5)/y)*y
    set yrange [0:]
    set boxwidth 10
    plot 'tmp.dat' u (bin($2*1e3, 10)):(1) smooth freq with boxes t ''
    
  • bin(x,y)で, yの大きさのビンに切り分ける.
  • set yrange [0:]で, 縦軸の下端を0にする.
  • smooth freqで, 個数を積算する.
  • 2014-02-06

    CSSでHTMLの見出しに番号をつける

    CSSに, 以下のように記述する. これで, H1タグをつけた見出しに番号がつく.
    body { counter-reset: section; }
    h1:before { 
      counter-increment: section;
      content: counter(section) ". ";
      display: inline;
    }
    

    2014-02-03

    find と xargs

    ある条件に合致するファイルに対して, ある操作を加えるという場合, findxargs を使用することが多い. しかし, とくにオプションを使用しないと, ファイル名にスペースが含まれている場合に問題が生じる. findは改行を区切り文字とし, xargsはスペース (改行を含む) を区切り文字としているためである.
    以下のように, 区切り文字を NUL (\0) とするオプションを使用することで, このような問題を回避できる.
    find ... -print0 | xargs -0 ...
    
    いつもこのオプションを付けておくようにしたい.

    よく使用する例

  • ジェネラルなファイル (ディレクトリでない) に対して, 実行権を除く.
     find -type f -print0 | xargs -0 chmod -x 
    Windowsユーザの典型的な特徴として, ZIPで圧縮する, 空白をファイル名に使用するという点がある. ZIPで圧縮されたファイルを展開するとすべてに実行権がついてしまう (ことがある) ので, 上記のコマンドを打つ.
  • 2014-01-31

    tcpudump の使い方メモ

    tcpdump は, コマンドラインでネットワークトラフィックをモニタするツールである. パケットをキャプチャして保存し, あとから Wireshark などで開くこともできる. 簡単なメモを残す.

    コマンド

    tpcdump -w 保存するファイル -i デバイス フィルタ
    オプション-wで, ファイルに保存するよう指定できる. フィルタで条件を指定できる.

    フィルタ

    いくつか例をあげる.
  • TCPの80番と8080番のみを保存.
    tcpdump -w web.pcap -i eth0 'tcp port 80 or tcp port 8080'
    
  • IPv4 HTTP パケットで, 80番ポートだけを表示.
    tcpdump -i eth0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
  • 2014-01-25

    yum の 「Is this ok [y/d/N]」

    最近の yum になって, ダウロード・インストールを行う前に
    Is this ok [y/d/N]:
    
    ときかれるようになった. この「d」はダウンロードのみする (--downloadonly) という意味だ. 「d」を選ぶと, 以下のようにダウンロードだけして終了する.
    Is this ok [y/d/N]: d
    Background downloading packages, then exiting:
    updates/20/x86_64/prestodelta                                                 | 1.3 MB  00:00:00     
    Delta RPMs reduced 14 M of updates to 3.7 M (73% saved)
    (1/24): clamav-0.98-2.fc20_0.98.1-1.fc20.x86_64.drpm                          | 346 kB  00:00:00     
    ...
    (24/24): qpdf-5.1.1-1.fc20.x86_64.rpm                                         |  45 kB  00:00:00     
    Finishing delta rebuilds of 17 package(s) (13 M)
    -----------------------------------------------------------------------------------------------------
    Total                                                                254 kB/s | 4.0 MB  00:00:16     
    exiting because "Download Only" specified
    
  • yum question "Is this ok [y/d/N]:"
  • ドラッグ中にウィンドウの内容を表示 @ Windows 7, Server 2008 R2

    Windows 7 や Windows Server 2008 R2 にて, ドラッグ中にウィンドウの中身を表示する設定方法.
    1. コントロールパネルを開く
    2. システムとセキュリティにあるシステムを開く
    3. システムの詳細設定を開く
    4. パフォーマンスグループ中の設定 (S)...をクリック
    5. 下から7番目あたりにあるドラッグ中にウィンドウの内容を表示するにチェックを入れる
    なぜかこの設定, 管理者の認証が要求される. それにも関わらず, ユーザごとに設定が保存されるようだ.
    システムの設定とユーザの設定が混在しているところがWindowsらしい.

    2014-01-24

    Fedora 19から20へアップグレード

    Fedora 19 から 20 へアップグレード. yum で2556個のパッケージをダウンロード, アップデートが行われることになったが, 3時間以上かかった. 依存関係の問題などは発生しなかった.
    アップグレードの操作は簡単.
    $ sudo rpm --import https://fedoraproject.org/static/246110C1.txt
    $ sudo yum update yum
    $ sudo yum clean all
    $ sudo yum --releasever=20 distro-sync
    

    フリーのPPTPサーバ

    最近, フリーのPPTPサーバが乱立しているようだ.
  • ユーザID・パスワードは1個だけで, ウェブページ上に掲載.
  • ときどき認証情報を変更することで, ウェブページのアクセス数を伸ばす.
  • 広告収入を見込んでいるらしい.
  • PPTPVPN
  • Free VPN
  • Toy VPN
  • Finch VPN
  • 2014-01-14

    Androidアプリの権限を個別に削除

    Androidアプリの権限を削除するアプリをみつけた. カカオトークのように, 勝手に電話帳の内容をサーバに転送するアプリの対策に役立つだろう. 今度試してみようと思う.
  • Permission Remover
  • 2014-01-08

    ドコモSPモードでのテザリング時のping

    SPモードを使用していると, 非常に応答が遅く感じる. どうやらウェブサイトの画像ダウンロード中など, 通信量が増えた際に遅くなる気がしたので, ping で確かめてみた.

    ウェブサイトの表示中には, ping の応答が, 10秒程度になることさえあった. 下の図に, 通信量 (赤) と ping の応答時間 (緑) を示す. 左半分では頻繁にウェブブラウジングをしており, 右半分ではあまり操作していない.

    通信量とping応答時間に相関があるように見える. もしかすると, 通信量に応じて応答時間を遅らせるなどの制御が入っているのかもしれない.

    以前別の端末を使用していたときはこれほど遅いことが無かったが, その時の違いを表にまとめる.

    以前現在
    端末HT-03AF-05D
    APNmoperaspmode
    無線3GLTE
    LTEになってトラフィック量の制御が嚴しくなったのか, spmodeでは厳しいのか...
    F-05Dでは, テザリング時に強制的にspmodeに切り替わる. 私はmoperaの契約もしているが使えない.

    2014-01-04

    FFplayで出力ディバイスをALSAに設定

    2個の環境変数を以下のように設定する. (hw:1の部分にサウンドカードの番号をいれる. alsamixer上でF6キーを押すと一覧がでる.)
    export SDL_AUDIODRIVER=alsa
    export AUDIODEV=hw:1
    
    FFplayではSDLを使用して音声を出力するので, 環境変数にてSDLに出力ディバイスを設定する.

    例えば, 以下のようにffplayを実行する.

    env SDL_AUDIODRIVER=alsa AUDIODEV=hw:1 ffplay ...
    

    参考

  • ALSA flags in ffplay