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}