Hatena::ブログ(Diary)

もうカツ丼でいいよな このページをアンテナに追加 RSSフィード Twitter

2009 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 12 |
2012 | 02 | 03 | 04 | 05 | 06 | 10 | 11 | 12 |
2013 | 01 | 02 | 04 | 06 |
2014 | 06 |

2014-06-30

[]移行 21:59 移行を含むブックマーク 移行のブックマークコメント

なんかさっぱりはてダ更新しなくなってたので、気分を変えるためにはてなブログに移行してみようと思う。

もうカツ丼はいいよな

2013-06-22

[] ThinkPad X1 Carbonを修理に出した 15:08  ThinkPad X1 Carbonを修理に出したを含むブックマーク  ThinkPad X1 Carbonを修理に出したのブックマークコメント

昨年12月に購入したThinkPad X1 Carbonのディスプレイが不調で修理に出した。せっかくなので修理までの経過を綴る。

6月11日

6月に入ったあたりからディスプレイの具合が悪く、ちらつく様な症状が出ていた。それがこの日を境に色が反転した様な状態となり、まともな表示が不可能に。

「PC設定 -> 全般 -> PCをリフレッシュする」からリフレッシュをかけてみたが直らず。ちなみにこのリフレッシュ、

お使いのPCの動作が不安定な場合は、Windowsをリフレッシュしてみてください。写真、音楽、ビデオなどの個人的なファイルには影響ありません。

とか書いてあって一見安全そうに見えるが次の項目が削除される(cf. http://www.atmarkit.co.jp/ait/articles/1211/15/news103.html )。

そしてデスクトップに「削除されたアプリケーション.html」とかいうファイルが出現する。リフレッシュ中に消されたアプリはここで確認できる。

正直このリフレッシュによるダメージが一番でかかったのでもう二度とやらない。他人の言うことを安易に信じては駄目だなということを学習した。

それはともかくとして、保証書とかとっておいた記憶がないのでどうしたもんかと思っていた。が、本体に記載されているシリアル番号とマシンタイプさえあればサポートの要求は可能だった。早速サポートのWebサイト( http://support.lenovo.com/ja_JP/default.page? )にアクセスしてアカウントを作成、リクエストフォームに症状を記載して送信した。

6月12日

サポセンからメールで連絡。引き取り修理なので以下の事項をコピペしてもう一回サービスリクエストを送信してくれ云々。

聞かれたのはHDD初期化してもよいか、などよくある事項(初期化OKと記載したけど結果的にはディスプレイパネルの交換だったので初期化はされなかった)。

ついでにWebサービスアカウントを変更しても良いか、というのも聞かれた。手続き上必要らしい。結果として最初に作成したアカウントは現在は利用できなくなっている。

6月13日

メールの指示に従ってリクエストを送信。

6月14日

引き取りの日程をこっちで最短(6月15日)に設定したので、無理なら投函される不在票の番号に電話して担当ドライバーと相談して日程調整してくれというメール。

なお、梱包は不要、付属品も不要とのことだった。

6月16日

不在票の番号に電話して引き取りに来てもらった。業者は佐川だった。

保冷バッグみたいな専用の梱包容器を持参していて、その場で梱包してもらった。エアークッションがたくさん入っている、というかエアークッションで出来ているような容器で、そのまま放り投げても大丈夫そうな感じだった。

6月20日

引き取りの時と同じ容器に入って、修理の完了したThinkPadが届いた。

サポートへの連絡から修理完了まで9日(うち2日はこちらの都合で遅らせたので実質7日)で修理が終わって手元に戻ってくるとは思わなかった。しかもこちらで用意するものは保証書も含めて何一つなく、ほとんどストレスがなかった。

まとめ

何があっても「PCをリフレッシュする」は実行しない。

2013-04-14

[][] WordVBAでのマクロショートカット割り当て(Emacsキーバインド暫定版) 23:49  WordVBAでのマクロのショートカット割り当て(Emacs風キーバインド暫定版)を含むブックマーク  WordVBAでのマクロのショートカット割り当て(Emacs風キーバインド暫定版)のブックマークコメント

Wordの場合はApplication.KeyBindings.Addメソッドを使ってショートカットキーの割り当てができる。

Application.Keybindings.Add _
    KeyCategory:=wdKeyCategoryCommand, _
    Command:="Command", _
    KeyCode:="KeyCode"

あまり良く読んでないのでKeyCategory引数の意味とかしっかり理解していないが、"Command"には割り当てたいマクロの名前を文字列として、"KeyCode"には割り当てたいキーのーキーコードを数値として与える。キーコードはwdKeyAやwdKeyControlなどの名前の定数が用意されているので、それを足しあわせて作る。

割り当てたショートカットを解除するには次のようにする。

With Application.FindKey("KeyCode")
    .Disable
    .Clear
End With

解除したいショートカットキーのキーコードを"KeyCode"に指定する。

これを利用すると、Wordで比較的簡単にEmacsキーバインドを再現できる。

ちょっとだけやってみた。

'' ----- Emacsモードの有効化と無効化 ---------------------
Sub EnableEmacsMode()
    Call AddKeyBindings("ForwardChar", wdKeyControl + wdKeyF)
    Call AddKeyBindings("BackwardChar", wdKeyControl + wdKeyB)
    Call AddKeyBindings("NextLine", wdKeyControl + wdKeyN)
    Call AddKeyBindings("PreviousLine", wdKeyControl + wdKeyP)
    Call AddKeyBindings("BeginningOfLine", wdKeyControl + wdKeyA)
    Call AddKeyBindings("EndOfLine", wdKeyControl + wdKeyE)
End Sub

Sub DisableEmacsMode()
    Call DeleteKeyBindings(wdKeyControl + wdKeyF)
    Call DeleteKeyBindings(wdKeyControl + wdKeyB)
    Call DeleteKeyBindings(wdKeyControl + wdKeyN)
    Call DeleteKeyBindings(wdKeyControl + wdKeyP)
    Call DeleteKeyBindings(wdKeyControl + wdKeyA)
    Call DeleteKeyBindings(wdKeyControl + wdKeyE)
End Sub

Sub AddKeyBindings(Command As String, KeyCode As Long)
    '' キーバインド登録
    Application.KeyBindings.Add _
        KeyCategory:=wdKeyCategoryCommand, _
        Command:=Command, KeyCode:=KeyCode
End Sub

Sub DeleteKeyBindings(KeyCode As Long)
    '' キーバインド登録解除
    With Application.FindKey(KeyCode)
        .Disable: .Clear
    End With
End Sub


'' ------ キーバインドマクロ定義 ------------------------
Sub ForwardChar() '' カーソル前移動
    Selection.MoveRight unit:=wdCharacter, Count:=1
End Sub
Sub BackwardChar() '' カーソル後ろ移動
    Selection.MoveLeft unit:=wdCharacter, Count:=1
End Sub
Sub NextLine() '' カーソル下移動
    Selection.MoveDown unit:=wdLine, Count:=1
End Sub
Sub PreviousLine() '' カーソル上移動
    Selection.MoveUp unit:=wdLine, Count:=1
End Sub
Sub BeginningOfLine() '' 行頭へ
    Selection.HomeKey unit:=wdLine
End Sub
Sub EndOfLine() '' 行末へ
    Selection.EndKey unit:=wdLine
End Sub

https://gist.github.com/nozma/5383099

現在のファイルなりNormal.dotmなりにインポートしてEnableEmacsModeを実行すればEmacs風のキーバインドに(カーソル移動だけだが)なり、DisableEmacsModeを実行すれば通常の状態に戻る。

2ストロークについては ExcelでEmacsライクなキーバインドを使う - もうカツ丼でいいよなでやったようにC-xでショートカットが切り替わるようにすれば良いと思う。

とりあえず今日は眠いので残りはいずれ。もしくは誰かやっといて。

2013-02-09

[][] 7. 正規表現の世界 21:56  7. 正規表現の世界を含むブックマーク  7. 正規表現の世界のブックマークコメント

初めてのPerl 第6版メモ。

7.1 正規表現とは

  • regular expression:Perlではパターンと呼ぶことがある。文字列に対してマッチさせると成功または失敗のいずれかになる。

7.2 単純なパターンを使う

  • パターンを//で囲って指定すると、$_に対するマッチとなる。
  • パターン中では全ての逆スラッシュエスケープを利用できる。
7.2.1 Unicode属性
  • Unicode文字には属性という情報がある。
  • 正規表現では特定の文字だけでなく文字の種類にもマッチさせられる。属性名を\p{}で指定する。特定のUnicode属性をもたない文字にマッチさせることもできる。\P{}はその属性の否定となる。
    • 空白文字:Space
    • 数字:Digit
    • 16進数:AHex
7.2.2 メタキャラクタについて
  • メタキャラクタは\でエスケープできる。
  • .:改行文字を除くあらゆる1文字にマッチする。
7.2.3 単純な量指定子
  • *:直前のものに0回以上マッチする。
  • +:直前のものに1回以上マッチする。
  • ?:直前のものが0回か1回マッチする。
7.2.4 パターンをグループにまとめる
  • ()を使ってパターンをグループにまとめられる。
    • (hoge)+はhogeやhogehogeにマッチする。
  • 後方参照によってマッチしたものを再利用出来る。これをキャプチャグループと呼ぶ。
  • 後方参照では\の後ろに数字でカッコのグループを指定する。
    • (.)\1:aaやbbにマッチ。
  • 数字は開きカッコを頭から数えた時の順番に対応する。
  • Perl5.10以降では\と数値の代わりに\g{}が使える。
7.2.5 選択肢
  • |:|を挟んで左側か右側のいずれか一方の文字列にマッチする。
    • a or b|a and b:a or bかa and bにマッチ。

7.3 文字クラス

  • character class:[]の間に文字を並べたもの。いずれか1文字にマッチする。マッチは1文字だけ。
  • ハイフンを使って範囲を指定できる。
    • [a-zA-Z]:アルファベット
    • [\000-\177]:7ビットASCII文字全て。
    • [0-9]:数字
  • 文字クラスの内側ではハイフンはエスケープが必要。
  • ^は否定を表す。
    • [^a]:a以外の1文字。
7.3.1 文字クラスのショートカット
  • \d:すべての数字を表す。ASCIIの0から9まで以外の全ての言語での数字に対応する。
  • \s:全ての空白文字。\p{Space}と概ね同じ。
  • \h:水平方向空白文字(Perl5.10)
  • \v:垂直方向の空白文字(Perl5.10)
  • \R:行末(linebreak、Perl5.10)
  • \w:ワードにマッチ。
  • マッチ演算子の後ろに/a修飾子をつけるとASCIIコードのみの指定となる。
    • /[\d]+/a
7.3.2 ショートカットの否定
  • ショートカットのアルファベットを大文字にすると否定となる。
  • [\d\D]:改行文字も含めた全ての文字にマッチする。

[][] 6. ハッシュ 20:31  6. ハッシュを含むブックマーク  6. ハッシュのブックマークコメント

初めてのPerl 第6版メモ。

6.1 ハッシュとは?

  • hash:配列と同様に任意個の値を格納できるが、個々の値の指定に名前(key)を使う。
  • ハッシュのキーはどんな文字列でも使えるが、ユニークでなければならない。値は同じものがいくつあっても構わない。
  • データが一定の順番で並んでいるわけではない。
  • キーは常に文字列に変換される。

6.2 ハッシュの要素にアクセスする

  • 要素にアクセスするにはキーをブラケットで囲んで指定する。
$hash{$some_key}
  • キーには文字列になる式を用いる。
  • その他の代入やアクセスの動作は配列やスカラーの場合とほぼ同じ。
6.2.1 ハッシュ全体を扱う
  • %hash
  • ハッシュへの代入はリストコンテキストになる。
  • 代入されるリストは(キー, 値, キー, 値, ...)となる。
  • 逆に、リストコンテキストにおけるハッシュの値はキーと値のペアを並べたものになるが、その順序は保証されない。
6.2.2 ハッシュの代入
  • ハッシュをハッシュへ代入した場合ハッシュがコピーされる。
  • reverseは逆引きのハッシュを生成する。重複する値がある場合、後のものが優先されるがハッシュの順序は保証されないためどれが採用されるかは不明となる。
6.2.3 太い矢印
  • コンマが必要な場所では常にコンマを太い矢印(=>)で書き換える事ができる。別名太ったコンマ。
  • 太ったコンマの左側に置かれた値は自動的にクォートされる(左側の値がPerl演算子のように見える場合を除く)。
my %last_name (
    fred => 'flintstone',
    ...
    betty => 'rubble',
);
  • リストの最後に置かれた余分なコンマは単に無視される。
  • クォートなしの書き方を裸のワード(bareword)と呼ぶ。barewordはハッシュへのアクセス時にも使える。ただし、bareword以外のものが入っていればそれは式として解釈される。

6.3 ハッシュ関数

6.3.1 keys関数とvalues関数
  • keys:全てのキーからなるリストを返す。
  • values:全ての値からなるリストを返す。
  • keys関数とvalues関数の値の順序は保証されないが、keysとvaluesの各々の順序は互いに対応するような順序となる。ただし、keysとvaluesの間でハッシュの内容を変更した場合はこの限りではない。
  • スカラーコンテキストではこれらの関数はキー/値のペア数を返す。
6.3.2 each関数
  • キー/値のペアを2要素リストとして返す。
  • 使用する度に次のペアを返す。
while ( ($key, $value) = each %hash) {
    ...
}

6.4 ハッシュの利用例

6.4.1 exists関数
  • exists関数はkeyが存在すれば真、存在しなければ偽を返す。
6.4.2 delete関数
  • delete関数は指定されたキー及び対応する値を削除する。
6.4.3 ハッシュの要素を変数展開する
  • ハッシュ個別の要素を変数展開することはできるが、ハッシュ全体を変数展開する要素は用意されていない。

6.5 %ENVハッシュ

  • Perlプログラムは他のプログラムと同様、ある環境(environment)のもとで実効される。
  • %ENVには環境の情報が入っている。
  • %ENVにはおそらくPATHキーが存在し、パスが入っている。
  • 環境変数を外部でセットしておけば、%ENVハッシュの一部としてプログラムからアクセスできる。

[][] 5. 入出力 18:25  5. 入出力を含むブックマーク  5. 入出力のブックマークコメント

初めてのPerl 第6版メモ。

5.1 標準入力からの入力

  • <STDIN>演算子をスカラーコンテキストで評価すると次の一行を読み込んで返す。
chomp($line = <STDIN>);
  • 行入力演算子をwhileループの条件分に使用した場合、読み込んだ行は$_に代入される。forループ条件分でも同様。
while (<STDIN>) {
    print  "I saw $_";
}
  • foreachループを使っても同じようなことができるが、foreachではリストコンテキストで行入力演算子が評価されるため、ループ実行前に入力をすべて読み込むという違いがある。
foreach (<STDIN) {
    print "I saw $_";
}

5.2 ダイアモンド演算子からの入力

  • ダイアモンド演算子<>は行入力演算子の一種で、入力をユーザーが指定した場所(起動引数で指定する)から読み込む。

5.3 起動引数

  • ダイアモンド演算子は起動引数そのものではなく、配列@ARGVの内容を見る。
  • @ARGVには起動引数のリストがセットされる。プログラム内部で変更してもかまわない。
  • ダイアモンド演算子は、起動引数が空のとき標準入力ストリームを利用し、そうでなければ@ARGVに入っているファイル名リストを用いる。

5.4 標準出力への出力

  • print演算子は値のリストを受け取り、要素を標準出力に順番に送る。

5.5 printfによるフォーマット付き出力

  • Cのprintf関数のようなフォーマット出力ができる。
    • %g...General numeric conversion. 整数、浮動小数点数、指数形式を状況に応じて適当に選んで出力
    • %d...整数。フィールド幅指定で負の数を指定すると左寄せ(他の変換も)。
    • %s...文字列
    • %f...浮動小数点数
    • %%...%文字そのもの
  • printf演算子は文字列および表示すべき値のリストを受け取る。

5.6 ファイルハンドル

  • ファイルハンドル:Perlプロセスと外部の間のI/Oコネクションに対して付けられた名前。
  • Perl自身が使用するファイルハンドルとしてSTDIN, STDOUT, STDERR, DATA, ARGV, ARGVOUTがある。これらの名前は通常は使用すべきではない。

5.7 ファイルハンドルをオープンする

  • STDIN, STDOUT, STDERRのファイルハンドルは自動的にファイルやデバイスに対してオープンされている。
  • 新たなファイルハンドルが必要な場合、open演算子によってコネクションをオープンする。
    • 入力用のオープン:open HOGE, 'hoge';またはopen HOGE, '<hoge';</li>
    • 出力用のオープン(上書き):open HOGE, '>hoge';
    • 出力用のオープン(追記):open HOGE, '>>hoge';
  • Perl5.6以降では入出力のモードを引数で指定できる。さらにエンコーディグ指定も可能。
    • open HOGE, '>:encoding(UTF-8)', 'hoge';
5.7.3 ファイルハンドルをクローズする
  • close HOGE;
  • オープン済みのファイルハンドルを再びオープンするとオープン前に自動的にクローズされる。
  • プログラムが終了する際も自動的にクローズされる。

5.8 dieによって致命的エラーを発生させる

  • Unixその他多くのOSで実行されるプログラムは、成功したか否かを示す終了ステータスを返す。
    • 成功:0、失敗:0以外 である場合が普通。
  • die関数はエラーメッセージを標準エラーストリーム(STDERR)に渡してから0以外の終了ステータスでプログラムを終了させる。
  • システムが要求を拒否した場合に通知されるメッセージは変数$!に入っている。
if (! open LOG, '>>', 'logfile' ) {
    die "Cannot create logfile:$!";
}
  • メッセージの末尾に改行文字が含まれない場合、メッセージにはファイル名と行番号が含まれる。
5.8.1 warnによって警告メッセージを表示する
  • warnはdieと概ね同じ動作をするが、プログラムを終了させない。
5.8.2 自動的にdieする
  • autodieプラグマを書いておけばopen失敗時に自動的にdieする。(Perl 5.10以降)

5.9 ファイルハンドルを使う

  • 入力用にオープンしたファイルハンドルからは行入力演算子を用いてファイルの中身を読むことが出来る。
open HOGE, 'hoge';
while(<HOGE>){
    chomp;
    ...
}
  • printやprintfの出力を出力用に開いたファイルハンドルに送るには引数リストとprintの間にファイルハンドルを置く。
5.9.1 デフォルトの出力ファイルハンドルを変える
  • select演算子を使ってデフォルトの出力ファイルハンドルをSTDOUTから変えることが出来る。
    • select HOGE;
  • デフォルトでは各ファイルハンドルに対する出力はバッファリングされるが、変数$|に1をセットすると現在選択されているファイルハンドルは出力の度にフラッシュされるようになる。

5.10 標準ファイルハンドルを再オープンする

  • 新しいコネクションのオープンが成功した場合に限り、元のファイルハンドルはクローズされる。

5.11 sayを使って出力する

  • Perl5.10はPerl6からsay組み込み関数を借用してている。
  • sayはprintと似たようなものだが末尾に改行文字を付け加える。

5.12 ファイルハンドルをスカラー変数に入れる

  • Perl5.6からはファイルハンドルをスカラー変数に入れられる。
  • openで裸のワードの代わりに値を持たないスカラー変数を使うことで、ファイルハンドルはその変数にセットされる
open my $hoge_fh, '<', 'hoge.txt'
    or die "Could not open hoge.txt: $!";
print $hoge "...";
close $hoge;
  • ファイルハンドルの直後にコンマが無いことによってファイルハンドルであることが認識される。
  • ファイルハンドルとして扱うべきものを明示的に示すためにはブレースで囲む
print { $hoge }; # $_の中身を表示

2013-02-05

[][] 4. サブルーチン 23:20  4. サブルーチンを含むブックマーク  4. サブルーチンのブックマークコメント

初めてのPerl 第6版メモ。割と練習問題躓く。

  • subroutine:ユーザーが定義した関数。
  • サブルーチンの名前:Perl識別子の頭に&。省略できる場合とできない場合がある。名前空間は独立している。

4.1 サブルーチンを定義する

sub hoge {
    ...
}
  • 定義はどこにおいても構わない。
  • 後ろにあるものは前にあるものを上書きする。
  • サブルーチン本体の中では全てのグローバル変数を扱える。

4.2 サブルーチンを起動する

&hoge;
  • 起動する(invoke)ことを呼び出す(call)と呼ぶ場合が多い。

4.3 戻り値

  • サブルーチンの中で最後に評価された計算の結果は自動的に戻り値になる。
  • 計算の結果が返り値として使われず捨てられる場合、無効コンテキスト(void context)警告メッセージが出る。

4.4 引数

&hoge(fuga, piyo);
  • 引数はリストとして渡され、@_に格納される。
  • サブルーチン内部の@_はプライベートなものである。
  • 余ったパラメータは単に無視される。

4.5 サブルーチン内でプライベートな変数

  • my演算子はレキシカル変数(lexical variable)を作り出す。
  • レキシカル変数はそれを取り囲むブロックにスコープを持つ。

4.7 レキシカル変数(my変数)についての注意事項

  • レキシカル変数はあらゆるブロックの中で使える。
  • レキシカル変数の名前のスコープはそれを取り囲むもっとも小さいブロックまたはファイルに限定される。
  • my演算子は代入のコンテキストを変えない。
  • 括弧を伴わないmy演算子はレキシカル変数を1個しか宣言できない。括弧があれば複数同時に宣言できる。
  • 新しい変数はundefまたは空リストとなる。
  • 制御変数をレキシカル変数にすることもできる。
foreach my $hoge {
    ...
}

4.8 use strictプラグマ

  • pragma:コンパイラに与えるコードの扱いに関するヒント。
  • use strictプラグマは良いコーディングルールを強制する。
  • Perl 5.12以降ではプラグマでバージョン指定をするとuse strictプラグマも指定される。
  • use strictプラグマを宣言するとすべての変数はmy演算子などを使って宣言することが強制される。

4.9 return演算子

  • return演算子はサブルーチンから即座に値を返す。
4.9.1 アンパーサンドを省略する
  • 次の場合にはアンパーサンドを省略できる。
    • コンパイラがサブルーチン呼び出しの前に定義を見ている。
    • 構文からサブルーチン呼び出しであることが分かる。
      • 括弧で囲んでパラメータリストを指定した場合
  • アンパーサンドなしでサブルーチンを呼び出した場合に、同名の組み込み関数があればそちらが優先される。

4.10 スカラー以外の返り値

  • リストコンテキストで呼び出したサブルーチンは値のリストを返すこともできる。
  • 引数なしのreturnはスカラーコンテキストではundef、リストコンテキストでは空リストを返す。

4.11 永続的なプライベート変数

  • stateで宣言した変数はサブルーチンをスコープに持ち、さらに値を保持し続ける。
sub hoge {
    state $fuga = 0;
    ...
}
  • stateによる宣言文は2回目以降の呼び出しでは無視される。
  • 配列とハッシュをリストコンテキストで初期化することはできない(少なくともPerl 5.14の時点では)。