ポメラ DM200 のカレンダーをメモとして使うと捗る

ポメラ DM200 のカレンダー機能をメモスペースとして使うと役に立つよという話。三例ほど取り上げてみる。

活用例(1): 編集中のファイルを開いたままでメモ

DM200 で惜しいのは 「編集中のファイルを開いたままで、ちょろっとどこかにメモを残す」ができない ことだ。

カレンダー機能なら出来る。カレンダーを開くと、今日の日付にフォーカスが当たっているから、そこにメモを書き込むだけでいい。カレンダーにショートカットキーで割り当てておけば、ショートカット → Enter の二ステップで素早くメモを書ける。

ここで疑問に思われる方がいるかもしれない。

  • Q: 編集中のファイルを閉じて、メモ用のファイルを開いてそこにメモすればよくない?

と。それでストレスが無いなら構わないと思う。でも私はそれだとストレスが溜まる。DM200 は、以前開いていたファイルの位置(行数)までは記憶してくれないわけで、開き直してから当該位置まで移動するコストが発生する。小説など長文テキストだとこの手間がバカにならない。

活用例(2): 作中の時系列を整理するメモとして

僕はカレンダーに自作小説のイベントを書き込んでいる。こうすると作中のイベントを時系列に(しかも休日や曜日も把握した上で)整理・俯瞰できるから便利。

活用例(3): 主要な学園イベントのリファレンスとして

(これも創作の話だが)今はしていないが、かつて私がしていたのは、高校のウェブサイトから入手した年間行事予定をカレンダーに書いておく ということだ。

こうすればいつ、どんなイベントがあるのかをいつでも DM200 上で見返せるようになり、学園モノを書く時には結構助かる。

おわりに

創作ネタばかりだが、カレンダーはメモスペースとして地味に役立つ。

指定フォルダ配下の Git ローカルリポジトリ全てに対して Commit 済かどうか、Push 済どうかを表示する

背景

複数の PC から GitHub を使っているので、Commit や Push のし忘れがあると萎える(例: 「あー外出先の MBA で書いた内容、Push されてないやん……」)。

これを防止するために、以下の運用を考えた。

  • 「Commit/Push の状況を一覧表示するバッチファイル」を作る ……★1
  • タスク管理ツールに「コミット状況確認バッチを叩け!」という定期タスクを追加する
  • この定期タスクを、PC を使い終える直前のタイミングで実行するよう配置する

私はタスク管理ツールに従って動いているので、こうすれば忘れることはない。

今回やりたいのは、この ★1 部分を実現するバッチファイルを作る、ということ。

前提

(1)Windows で msysgit を使っていること。

$ git --version
git version 1.8.5.2.msysgit.0

(2)以下のようなフォルダ構造で運用していること。

$ cd
D:\work\github\stakiran

$ dir /b
100q       ← git clone 100q で clone した
2to3       ← git clone 2to3 で clone した
batchat
bin
bodyclock
booklog
...        ★こんな感じで一フォルダ内にローカルリポジトリを集めている

バッチファイル中身

@echo off
setlocal
set TERM=msys
for /F "usebackq" %%i in (`dir %~dp0 /b /ad`) do (
    if exist %~dp0%%i\.git (
        pushd %~dp0%%i
        echo [%%i]
        git status --short
        git diff origin/master --name-status
        popd
    )
)
pause

使い方

  • 上記バッチファイルを適当な名前(例: status_all.bat)で保存
  • ローカルリポジトリが集まってるフォルダに上記バッチファイルを置く
  • バッチファイルを叩く
    • 必要ならランチャ等から素早く呼べるようにしておく

実行結果

[100q]
[2to3]
[batchat]
 M README.md            ← まだCommitしてない
M       README.md       ← まだPushしてない
[bin]
[bodyclock]
[booklog]
M       201710.md       ← まだPushしてない
M       index.md        ← まだPushしてない
...
続行するには何かキーを押してください . . .

実装のはなし

使った Git コマンド

  • git status --short

Commitしてないファイルは(まだバージョン管理されてないファイルも含めて)これでわかる。

  • git diff origin/master --name-status

これはリモート側とコミットが一致してない時に差分(のStatus)を表示するコマンド。このコマンドの結果が出た=Pushがまだだよ、を意味する。Commit したけど Push してない せいで萎えたことは一度や二度じゃないので、このコマンドは重要。

※ちなみに origin/master 固定なのはオレオレ運用。ぼっち GitHub だと master だけで十分なのです。

バッチファイル詳細

setlocal
set TERM=msys

これは msysgit で標準出力のワーニング(WARNING: terminal is not fully functional)が出るのを抑止するおまじない。

for /F "usebackq" %%i in (`dir %~dp0 /b /ad`) do (

これは dir ... の部分で列挙されたファイル名の一つ一つが %%i に渡りますよ、というおまじない。dir /b /ad は「ディレクトリだけ列挙してね」「余分な情報はいいからディレクトリ名だけ列挙してね」という指定。

 if exist %~dp0%%i\.git (
        pushd %~dp0%%i
        echo [%%i]
        git status --short
        git diff origin/master --name-status
        popd
    )

やってることは if exist で .git フォルダの存在を確認して、存在しているならローカルリポジトリとみなして、status と diff を確認する……という感じ。あと、カレントディレクトリを(ローカルリポジトリの中に)移さないと git コマンドが動かないので、pushd/popd で移っている。

おわりに

これで Commit と Push をし忘れることがなくなった。また一つストレスを減らせた。

Windows が重たい時に試すこと

基本的な流れ

  • 「何か処理が重たいなぁ……」と気付く
  • CPU 使用率をたくさん使ってるプロセスを調べる
  • 当該プロセスについて情報収集
  • 必要なら対処(殺す、無効にする等)

プロセスの調べ方

Process Explorer を使う。

特徴:

  • 親子関係をツリー表示
  • 多彩なカラムとソート表示切り替え
  • 指定したプロセスやスレッドをサクッと殺す
  • 各プロセスの詳細情報(リソース消費量とかスレッド毎の情報とか)表示

Process Explorer 自体も結構 CPU を食うが、Windows が重たい時はもっと食ってるヤツがいるので大した問題ではない。

もし Process Explorer をインストールできない状況ならタスクマネージャを使う。起動は Ctrl + Shift + Esc キーが速い。あるいはコマンドプロンプトでコマンドで頑張りたいなら tasklist コマンド。

当該プロセスについて情報収集

ググる

大体「Windows にデフォで入っているプロセスで、XXXXX の目的で存在しています。殺してはいけません。待ちましょう」とか「使ってないので無効化した方がいい。無効化方法は……」みたいな情報にヒットする。

対処1: 殺す

Process Explorer から Kill する。

なおプロセスだけでなくスレッドを Kill することも可。

対処2: 無効にする

Windows では「要らない機能のくせに CPU 食いやがって」的な機能が多数ある。こういった機能を無効化するために頑張ることが結構ある。

  • 設定を有効から無効にする(コントロールパネルやレジストリをいじる)
  • 自動実行 or スケジュール実行を無効にする(service.msc、タスクスケジューラー、スタートアップあたりをいじる)

上記あたりをいじるのに慣れておくとあたりを付けやすくなる。

おまけ: 「微妙に重たい」「恒常的に少しだけ重い」を減らすために

本筋とは逸れるが「恒常的になんか少しだけ重たいんだよなぁ」を減らすための TIPS も簡単に書いておく。

  • コントロールパネルは一通り眺めておいて、不要そうな機能は全部オフに
  • システムのプロパティ > パフォーマンスを優先する
  • 常駐ソフト(使ってないものは常駐させない&たまにしか使わないものは使う時だけ起動する)
    • CPU使用率が 0.01% を超えるものは一通り調べた方がいいかも

SNS におけるフォローをブックマークとして使う FaaS(Follow as a Bookmark) について

FaaS とは

Follow as a Bookmark とは フォロー機能を個人的なブックマーク機能として使うこと を指す。

TwitterGitHub など主に SNS のフォロー機能を指すことが多い。

FaaS 反対派

FaaS を問題アリと考えるユーザーも存在する。

反対派の二代意見:

  • 知らない人からフォローされるとビックリする(サドンデンジャー
  • 多かれ少なかれ面識が無いとダメでしょ(距離感死んでるの?)
    • 宗教論争なので詳細は取り上げない

サドンデンジャー(Sudden Danger)

サドンデンジャーとは、「本来誰からも注目されるはずがない」と自己評価している者が突如注目を受けることで「もしかして狙われている?」と身の危険を感じる心理あるいはそのような状態を指す。

サドンデンジャーに陥りやすい条件:

  • 特定の友人だけで細々と SNS を楽しんでいる(他者にも見えているという自覚がない等)
  • 平凡である(注目されるような事柄を持ち合わせていないと自覚している等)
  • 女性である(自らの性的魅力と男性の性欲の強さを自覚してない等)

FF比率

FF 比率(Follower/Following比率)とは 自分のフォローがどれだけリフォローされているか を示す割合である。たとえば自分が100人にフォローしていて、自分が13人にフォローされていれば、FF比率は 13% である。

FF 比率は低ければ低いほど見栄えが悪い(例:0.1% だと業者アカウントに見える)が、FaaS を用いると FF 比率は低下しやすいため注意が必要である。

有名人への FaaS

フォロワーを多数抱える有名人については、FaaS は認められる傾向にある。

本人もいちいちフォローされたことに対して何か思うことはない。せいぜいフォロワー数を確認して顕示に浸る程度である。

ペイントで絵や図を素早く描き始める&管理する仕組みをバッチファイルで整えた

背景

ちょっとした絵や図を描くのに私はペイント(mspaint.exe)を使うのだが、何の仕組みも整えてないと、

  • mspaint.exe を開く
  • キャンバスのサイズを調整する
  • 描く
  • 保存する
    • ファイル名を考える
    • 保存場所を考える

ただ描きたいだけなのにこれだけの作業が発生する。しんどい。もっと効率化できないか。

解決策

Canvasp というシステム(というかバッチファイル)を作った。

new.bat を起動して「利用したいキャンバスサイズ」と「タイトル」を入力するだけで、そのサイズで初期化された白紙キャンバスがペイントで開かれる……というもの。

ファイル名は (生成日時)_(タイトル).jpg で保存するため、保存時の名前や場所を考える必要はない。その上、ファイル名でソートすれば時系列に並ぶため、後から見返しやすい。

実装の話

以下細かい実装の話。

キャンバスのつくりかた

指定サイズの白紙画像をあらかじめ用意しておいて、それを複製するというアプローチを取ってみた。

たとえば 1024x768の白紙画像はこんな感じ で、あらかじめ用意しておく。

「1024x768の白紙画像で描きたい!」という時は、これをコピーしたものをペイントで開けばいいわけだ。

new.bat の中身について

set cnt=0
for /F "usebackq" %%i in (`dir /b 0_*.jpg ^| sort`) do (
    set /a cnt=!cnt!+1
    echo !cnt!: %%i
)

あらかじめ用意してる白紙画像(名前が 0_ から始まる jpg ファイル)を dir /b 0_*.jpg でリストアップし、それを sort に食わせて昇順に並べている。並べたファイル名一つ一つについて、選択肢の番号を印字してユーザーに見せている。それを、

:select_retrying
set /p input_num="Input the number you want to use>>>";

set cnt=0
set targetfilename=NOT_FOUND
for /F "usebackq" %%i in (`dir /b 0_*.jpg ^| sort`) do (
    set /a cnt=!cnt!+1
    if "%input_num%"=="!cnt!" (
        set targetfilename=%%i
        break
    )
)

set /p でプロンプトを出してユーザーに選ばせ、入力された番号に該当するファイルをもう一度同じループで回して探すことで取り出す。

echo Target is %targetfilename%
if "%targetfilename%"=="NOT_FOUND" (
    goto :select_retrying
)

入力した番号がおかしかったらやり直し。

set /p yourcomment="Input the comment>>>";
set datebase=%date%
set timebase=%time%
set shortdate=%datebase:/=%
set shortdate=%shortdate:~2,6%
set shorttime=%timebase::=%
set shorttime=%shorttime:~0,6%
set shortdatetime=%shortdate%_%shorttime%
set filename=%shortdatetime%_%yourcomment%.jpg

続いて set /p で今度はコメントを入力してもらい、入力後はファイル名の文字列を作っている。長々と書いているけど大半は日付時刻文字列をつくるおまじない。

copy %targetfilename% %filename%
start "" mspaint.exe "%filename%"

で、最後に、選ばれた白紙画像を、作ったファイル名でコピーして、そいつをペイントで開いてやる。start "" を使っているのは、こうしないとバッチファイル自体がブロッキングしちゃうから。

おわりに

バッチファイルだけでも工夫すれば結構省力化できるんだなあと勉強になった。

Alt + Tab を卒業したくて Win + カーソルキーで隣のウィンドウに切り替えるツール for Windows をつくってみた

Alt + Tab よりもっと直感的に素早くウィンドウを切り替えたい、とは常々思っていた。まだまだ荒削りだけど一応形になったので取り上げる。

(2018/02/16 追記) Qiita にもう少し詳しく解説した記事を書いてみた → Alt + Tab が使いづらいのでカーソルキーで隣のウィンドウに切り替えるツールを Python + cx_Freeze でつくってみた - Qiita

つくったもの

winhop というツール。

Win + カーソルキーで隣のウィンドウをアクティブにするよ、的なツール。

デモ

Win + カーソルキーでメモ帳を切り替えてるデモ。

winhop_demo

成果物

GitHub に置いた。

現時点での想定ユーザー

UI やドキュメントが手抜きなので玄人向け。

  • AutoHotkey を使える技量がある
  • ウィンドウハンドルやクラス名を調べる技量がある

現時点での使い心地

  • 非常駐ツールなので AutoHotkey 等から起動してください
  • README は知った気に書いたオレオレ英語だけです(日本語版はそのうち書く)
  • (特にWin10では)要らんウィンドウが切り替え対象になってしまうのがジャマなので、オプションを駆使して頑張って省いてください
  • 作者環境ではちゃんと動いてます(誤動作なくサクサク切り替えできている)が、他環境ではわかりません
    • この手のソフト(ウィンドウを扱う系のソフト)は結構環境次第で動いたり動かなかったりする修羅の道なのですが、果たしてどうなることやら
  • (2018/02/17追記) 最小化されたウィンドウは切り替え対象になりません。コンセプトは「表示されているウィンドウの中で素早く切り替える」です。切り替え対象にしたければ最小化を解除する必要があります。

技術的なはなし

どうやって切り替えている?

過去記事 ウィンドウを確実にアクティブにする方法 - stamemo で取り上げたアルゴリズムを使用。

簡単に書くと、AttachThreadInput → BringWindowToTop をした後に 当該ウィンドウの左上をクリックする

クリック……邪道だが致し方ない。他に方法見つからなかった。

切り替え対象ウィンドウはどうやって列挙している?

ソースでいえば libwindow.pyの50行目 あたり.

  • FindWindowEx でズラズラ列挙する
  • IsWindowVisible で不可視ウィンドウは除外する

ただ、これだけだと(特にWin10で)列挙されてほしくないゴミウィンドウがちらほら列挙されやがるので、利用者に指定して除外してもらうことにした。winhop.pyの19行目 あたり。

  • 指定した文字列をタイトル or クラス名に含むウィンドウを除外する
  • 指定した面積(ウィンドウ縦サイズと横サイズの積)よりも小さい面積のウィンドウを除外する

(おまけ)ゴミウィンドウ

私の Win10 環境だと、以下ウィンドウあたりが邪魔者だった。

$ winlist --visible --area-over 25000 --format "'$caption' '$classname' $pos $size"
'Cortana' 'Windows.UI.Core.CoreWindow' (0,458) (392x582)
'タスク スケジューラ のジャンプ リスト' 'Windows.UI.Core.CoreWindow' (443,928) (256x112)
'スタート' 'Windows.UI.Core.CoreWindow' (0,458) (256x582)
'Windows シェル エクスペリエンス ホスト' 'Windows.UI.Core.CoreWindow' (0,0) (1920x1080)
'Microsoft Visual C++ Runtime Library' '#32770' (719,407) (496x290)
'' 'Shell_TrayWnd' (0,1040) (1920x40)
'' 'ApplicationFrameWindow' (1920,0) (1280x1024)
'' 'ApplicationFrameWindow' (0,0) (1920x1040)

Win7 ではそうでもなかったのに、Win10 になってから要らんウィンドウが多すぎる……。

※winlist はウィンドウ情報を調べるオレオレツール。気が向いたら公開したい。

「隣のウィンドウ」はどうやって判定している?

一番苦労したところ。

winhop.pyの107行目 あたり。詳しくはソースを見てもらうとして、まあぶっちゃけ泥臭く頑張っている。

今はとりあえず「各ウィンドウの左上座標」を基準にして計算している。シンプルな考え方だが、その分意図しないウィンドウが隣として扱われてしまうこともちらほら。そのうちもっと賢いアルゴリズムを考えたい。

おわりに

早速私の Windows に設定した。しばらく運用してみる。果たして Alt + Tab から解放されるのか。わくわく。乞うご期待。

Excel 2013 でシンプルなガントチャートを一から作る時にやること

Excel をガッツリ使ったので備忘録として手順をメモっておく。ガントチャートネタだが、「ガントチャートをつくるのに使いそうな Excel 設定についてのメモ」と書いた方が正しいかもしれない。

セル幅を小さくする

  • セルエリア左上をクリック(全セルが選択されるはず)
  • 適当な列を右クリック > 列の幅
    • 値は 2.0 くらい

日付時刻エリアをつくる

以下のように1列1日で、日付時刻を並べていく。

        <-><-><->    <-><-><->
Month   2  2  2  ... 2  3  3  ...
  Day   1  2  3      28 1  2  ...


※ ここでは 2/1、2/2、2/3……2/28、3/1、3/2 を表している
※ <-> 一つが一列分を表している、と読んで下さい

続いて背景を着色する。

  • 土曜日の Day セルには青色を、日曜日および祝日の Day セルには赤色を設定
  • 手順
    • Ctrl + クリックでセルを複数選択
    • Ctrl + 1 でセル設定ダイアログを開く
    • 塗りつぶしタブ から色を選んで OK

タスクリストエリアをつくる

A列を「タスクを並べる領域」にする。

適当な列幅を設定(とりあえず 30 とか 40 くらい)し、適当な文字列で埋めておく。

ウィンドウ枠を固定する

ウィンドウ枠の固定とは スクロールしてもずれない領域を設ける 機能。

以下ガントチャートの「***」セル(B列のTask1のところ)に移動してから、

   A    B  C  D ...

       <-><-><->    <-><-><->
 Month|2  2  2  ... 2  3  3  ...
   Day|1  2  3      28 1  2  ...
------+---------------------------
 Task1|***
 Task2|
 Task3|
   ...|

ホーム > 表示 > ウィンドウ枠の固定 > ウィンドウ枠の固定 を選ぶ。すると固定されるはず。

チャート(各タスクの実行範囲)を色付けする

チャートの入力はスピーディーに行いたい。 スペースを入力すると背景に色がつく ようにする。

  • 設定したいセルを範囲選択(範囲については下記)
  • ホーム > 条件付き書式 > セルの強調表示ルール > 指定した値に等しい

実行後、スペースを入れたら背景に色が付くことを確認する。

Q: 設定したいセルってどこ?

下記例(2/1-2/28、タスクN個のガントチャート)で言えば B3:AC7 の範囲。

   A    B  C  D ...  AC

        <-><-><->    <->
1 Month|2  2  2  ... 2  
2   Day|1  2  3      28 
 ------+---------------
3 Task1|
4 Task2|
5 Task3|
6 Task4|
7 Task5|

境界を設ける

Ctrl + Cursor でガントチャート内をサクサク移動できるようにする。

  • チャート範囲(下記参照)の一つ外側に適当な文字を埋めておく

下記例(2/1-2/28、タスクN個のガントチャート)で言えば * で囲ったところ。

    A    B  C  D ... AC

        <-><-><->    <->
1 Month| 2  2  2 ...  2  
2   Day| 1  2  3      28 
 ------+---------------
3 Task1|                *
4 Task2|                *
5 Task3|                *
6 Task4|                *
7 Task5|                *
        *****************

こうすれば Ctrl + Cursor で飛んだ時に、* のところで止まってくれる。このストッパーが無いと 1048576 行とか XFD 列とかに飛んじゃって使いづらい。

課題

タスクを編集しづらい

エクセル上だと行を並び替えるのが超面倒くさい

単なるテキストだとテキストエディタ上で行選択、切り取り、貼り付けのコンボでサクサク並び替えることができるが、エクセル上だとそうはいかない。私は手を動かしながら検討するタイプなので、サクサク並び替えられる操作感が無いと辛い。

  • Q: じゃあどうするの?

ガントチャートにタスクを書く際は 先にタスクリストだけを FIX させ、それを貼り付ける のが良いのだと思う。言い換えると、ガントチャート上でタスクの並び替え作業を行わないようにするということ。

Q&A

Q: ネットに公開されてるガントチャートエクセルを使わない理由は?

Ans: 煩雑すぎて使い方がわからないから。

今回は内輪向けに各タスクの進捗具合を可視化したかっただけだから、もっとシンプルなもので良い。他縦軸にタスク、横軸に日を並べて、このタスクはこの日からこの日の間に実施するってことが見えればそれでよかった。それ以上の機能は要らない。

というわけで今回は自作することにした。

Q: ガントチャートを実現するツールやサービスは使わないの?

Ans: 使わないというより使えない

主に大人の事情で。しくしく。

インクリメンタルサーチで探せるブックマークツールを HTML/CSS/jQuery でつくった

どんなブツ?

三行で:

  • Markdown のリスト表記で一行一ブックマークを書く
  • ビルドする
  • インクリメンタルサーチで探せる html ファイルが生成されるので、これをブクマなりして使う

成果物:

動機

社内サイトはえてして IE しかサポートしておらず、愛用の Firefox で閲覧できない。

Firefox であれば優秀なブックマーク管理があるので何のツールも要らない。が、IE はブックマーク管理が貧弱すぎて、デフォのお気に入り機能を使ってるとストレスで死ぬ。

というわけで別途ブックマークツールを作ることにした。

使い方

(0)Python 3.x が必要なので無かったらインストールする。

インストール方法など詳細手順は割愛。

(1)linklist.md に Markdown でブックマークを書く。

ブックマークとは URL とタイトルとキーワードのこと。キーワードはインクリメンタルサーチで引っ掛けるために書くもので、特になければ空欄でいい。

(2)build.bat を実行する。

すると内部で builder.py が動いて、index.html が生成される

(3)IE で index.html を開く。

インクリメンタルサーチの働くリンク集が使えるはず。

実装のはなし

Q&A形式でまとめる。

Q: なぜ Python で完結させなかった?(HTML/CSS/Javascriptを使った?)

Ans: 必然的にそうなった

私は普段は Firefox を使っており、URL の関連付けも Firefox になっているため、プログラムランチャのようなツール形態だと IE で開けない。

この前提で考えると、IE から利用するとは? → IE 上でハイパーリンクをクリックすることでブックマークを開く のが一番使いやすい → この場合、ブックマークツールとは HTML で表示したリンク集である&そのリンク集をいかにして簡単にメンテできるようにするかが肝なのでは?、……という結論に至るのではないかと思う。

以下のような構想になった。

<なんか編集しやすいデータファイル> ← ブックマークのメンテはこっちをいじる
  
   ↓ ビルドする

<リンク集.html> ← IE ではこれを開く

問題は「編集しやすいデータファイルとはなんぞや」って話だけど、私が普段から使い倒している Markdown でいいのでは?と考えた。

最終的には以下のようになった。

<linklist.md> ← ブックマークのメンテはこれをいじる
  
   ↓ builder.py でビルド

<index.html> ← IE ではこれを開く

Q: どうやってインクリメンタルサーチを実現している?

Ans: jQuery を使って keyup イベント毎に :contains で判定して画面更新している

当該部分のコードはこんな感じ。

    $('#searchbox').keyup(function(){
        console.log($('#search_target_area li'));
        if (!$(this).val()) {
            var count = get_all_count();
        } else {
            $('#search_target_area li').hide();
            var count = $('#search_target_area .bookmark-entry:contains(' + this.value + ')').show().length;
        }
        $('strong').text(count);
    });

Q: どうやって Markdown から HTML に変換している?

Ans: Python で泥臭く書いている

こんな感じ。

  • Markdown ファイルを行単位でパースして HTML タグに変換する
  • それを、template.html として定義しているテンプレートに差し込む
  • 差し込んだ後の内容を index.html として保存

おわりに

良かったこと:

  • これで IE のブックマーク管理のストレスから解放された
  • HTML/CSS/JS は苦手だが、この程度のブツなら頑張れば作れることがわかった。道具の幅が広がったように思う

Windows のクライアント PC をバックアップするための覚え書き(実践編)

前編では理論編について書いた

後編では実践的な内容として「具体的に何をどのようにバックアップするか」について書く。

環境設定(コンパネ等)

エクスポートできないので以下のように設定内容だけメモしておき、リストア時は手作業で復旧。だるい。

コントロールパネル

  • フォルダオプション
    • 拡張子表示 on
    • 隠しファイル表示 on
  • UNC を無効にする
  • システムのプロパティ > パフォーマンスを優先する
  • コンピュータの簡単操作センター
    • キーボードを使いやすくします > 固定キー off
    • マウスを使いやすくします > Aeroスナップ off
    • コンピュータの作業に集中しやすくします > ウィンドウが画面の端に… on
  • (必要なら) インターネットオプション > プロキシ設定
    • 設定を自動的に検出する off
    • 自動構成スクリプトを使用する on
  • ユーザアカウント
    • メンテナンス用に管理者ユーザを一つ追加しておく
  • マウス
  • キーボード
    • 表示までの待ち時間: 短め
    • 表示の間隔: MAX
    • カーソルの点滅速度: 速め
  • ネットワーク
    • 使用する機器とネットワーク環境に応じて実施

タスクバー

  • タスクバー > プロパティ
    • 小さいアイコンを使う on
    • 結合しない

システム設定(Win10)

Win10 では「コントロールパネル」よりも「システム設定」にシステム設定が集中しているので、コンパネに該当設定が見当たらなかったらこっちを探す。

基本的には 一通り眺めつつ余計な機能は全部オフにする(どこをどう設定したかメモするのはだるいのでやめた)。

環境・アプリ設定(丸ごとバックアップできない、設定はコマンドでファイル化できる、ファイルサイズ小)

ファイルサイズファイル数がでかすぎて丸ごとは非現実的。だが設定はコマンドでファイル化できて、かつそれらファイルサイズが小さいもの。

バッチファイルを作っておくと楽。

  • 環境変数一式
    • set > set.txt
  • ネットワーク設定
    • ifconfig /all > ifconfig_all.txt
    • route print > route_print.txt
  • 環境バージョン
    • python --version 2> python_version.txt
    • git --version > git_version.txt
  • パッケージ一覧
    • pip freeze > requirements.txt
  • %appdata% 配下のよく使うアプリの分を決め打ちで.
  • %userprofile%\.* いわゆる dotfiles 系
  • C:\Program files and C:\Program files(x86) 配下のよく使うアプリの分を決め打ちで.
  • レジストリ / reg query (KEY) /s > (FILENAME).regquery でエクスポートしておく(リストアはしない参照用として)
    • アプリ一覧 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
    • WindowsUpdate設定 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
  • レジストリ / レジストリエディタから .reg ファイルにエクスポートしとく(リストア時はインポートで復元可)
    • レジストリエディタお気に入り HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Favorites
    • シェル拡張 HKEY_CLASSES_ROOT\(FileType)\shell\(KeyName)\open
      • フォルダ背景右クリメニュー HKEY_CLASSES_ROOT\Directory\Background\shell\
      • Excelで「常に新しいウィンドウで開く」系 HKEY_CLASSES_ROOT\Excel.Sheet.(Version)\shell\

アプリ設定(丸ごとバックアップできない、設定はコマンドでファイル化できる、ファイルサイズ大)

要するに Mozilla 系。

  • Firefox
    • %appdata%\Mozilla\Firefox\Profiles\(プロファイル名)
  • Thunderbird
    • %appdata%\Thunderbird\Profiles\(プロファイル名)

(プロファイル名) フォルダを丸ごとバックアップする。

アプリ設定(丸ごとバックアップできない、設定はコマンドでファイル化できない)

丸ごとバックアップも非現実的で、設定のバックアップもバッチファイルでファイル化やらコピーやらで自動化できないやつら。こいつらの設定をバックアップするには、各アプリから エクスポートに相当する機能を手作業で呼び出して エクスポートするしかない。だるい。

  • Google日本語入力
    • 辞書データ …… ツールバー > スパナーアイコン > 辞書ツール > 管理 > 選択した辞書をエクスポート
  • 秀丸エディタ
    • エディタ設定 …… その他 > 設定内容の保存/復元
  • Outlook
    • アドレス帳 …… ファイル > オプション > 詳細設定 > エクスポート > ファイルにエクスポート, windows カンマ区切り, 連絡先/連絡先候補
    • 仕分けルール …… 仕分けルールの設定ウィンドウの オプション > エクスポート

アプリ設定(解凍系アプリ)

アプリのうち、インストール不要(解凍するだけで使える)で使えて、概ねファイルサイズが小さい(under30MB)もの。

D:\bin 配下などにまとめて配置しておき、bin フォルダ丸ごとバックアップすればよい。

データファイル

一番悩ましいところ。「全データを毎日バックアップ」は非現実的なので、いかに少ない頻度と時間でバックアップを済ませるかを考えることになる。

私の場合、以下のように

  • 全データを d:\root など一フォルダ内に集める(トップフォルダ)
  • トップフォルダのサブフォルダを用途別に分類

の二段階でデータファイルを置いていて、各サブフォルダ毎にバックアップ頻度を変えている。対応は以下のとおり。

サブフォルダ名 バックアップ頻度 説明
bin 週一 解凍系アプリを集めている
bin1 実施しない Ruby/Python/Sublime/Eclipseなど言語系や処理系
data 毎日 メモ全般、スクショ全般、proxy.pac、壁紙類
data1 月一 メールデータ、署名、証明書、Office形式の個人データ
download 月一 ダウンロードファイル格納先(YYYYMMで更に分類)
temp 実施しない 解凍したファイルを放り込んでいる
temp1 実施しない virtualenv, npm, git などの作業ディレクト
work1_proj PJ変更時に一度 過去PJのデータ(残しても差し支えない個人ノウハウ等)
work2_ws 実施しない 自分の GitHub を clone している
work3_oddjob 週一 社内雑務や会社雑務(YYMMDD_TITLEで更に分類)の作業フォルダ

バックアップは Backup で実施。開始タイミングはタスク管理ツールで制御しており、大体以下のようなスケジュール。

  • 毎日 → 定時前くらいに毎日実行する定期タスク
  • 週一 → 金曜日に週一で実行する定期タスク
  • 月一 → 月末平日に月一で実行する定期タスク

TIPS

サイズの大きなフォルダを特定する

TreeSizeFree を使う。

指定フォルダをサブフォルダ含めて容量計算して、ツリー状にランキング表示してくれる。どのフォルダが全体の何%を占めているかが一目でわかり、でかいフォルダや不要ファイルの特定に役立つ。

その他:

  • TreeSizeFreeで何分も待つ=ファイル数・ファイルサイズが多い(のでもっと断捨離すること)
    • 何が大事か人それぞれなので一概には言えないが

おわりに

後編として実践的な内容を紹介した。何かと煩雑であり、Windows のバックアップは正直しんどい。

しかし、バックアップしておかないと、いざ PC が壊れたり移行したりする時に苦労する。備えあえば憂い無しである……が、もうちょっと楽したいなぁ。

Windows のクライアント PC をバックアップするための覚え書き(理論編)

仕事でもプライベートでも Windows を使っていて、何度かバックアップのお世話になっているので、良い機会だし Windows PC のバックアップについて書いてみる。

二部構成で行く。本記事は前編として理論編を。

後編はこちら: Windows のクライアント PC をバックアップするための覚え書き(実践編)

前提

  • 個人の Windows PC をバックアップする

バックアップとは

帰るまでが遠足です、ではないが「リストアするまでがバックアップ」。リストア手順も確認しておくこと。

そもそもバックアップは必要?

コンテキスト次第だが、私の場合は以下のとおりなので必要。

  • 毎日使用(基本的に電源入れっぱなし)
  • 4-5 年に一度くらい、PC の寿命が来る
  • 1年に一回は PJ や所属が変わる(変わると使う PC も切り替わる)
  • 2-5 年に一度くらい、会社全体で Windows アップグレードが入って PC 切り替えが入る

バックアップとリストアとエクスポートとインポート

  • バックアップ …… データの予備を確保すること。
  • リストア …… バックアップしたデータを復旧すること。
  • エクスポート …… 環境やアプリの設定を外部ファイル化すること
  • インポート …… エクスポートしたファイルを読み込んで当該環境やアプリの設定を復元すること

エクスポートは単に設定をファイル化しただけ。バックアップはエクスポート + エクスポートしたファイルを別ディスクに保存、までやる。

インポートはリストアの一種。リストアにはインポート以外にも「手作業で設定画面や設定ファイルを巡って頑張って復旧する」などがある。

バックアップ対象

バックアップ対象は以下に大別できる。

  • 環境(Windowsそのものの設定)
  • アプリ
  • ファイル

環境 は OS そのものの設定のこと。Windows で言えばコントロールパネルから辿れる設定項目全般である。設定値の実体はレジストリやシステムファイルとして散財しており、バックアップは簡単ではない。

アプリ はアプリケーション、ツール、ソフトウェア全般のこと。さらに以下に分類できる。

  • アプリ
    • 環境系 …… RubyPython、Node、Cygwin など言語系や処理系全般。とにかくファイル数ファイルサイズが桁違いでバックアップするのは非現実的。
    • インストール系 …… C:\Program files にインストールされるようなやつ。設定は %appdata% やレジストリに保存する。バックアップは割としんどい。
    • 解凍系 …… zip 解凍すれば使えるようなやつ。設定は同フォルダの ini や xml に保存する。フォルダ丸ごとバックアップするだけでいいから楽。

ファイル はデータファイル全般のこと。たとえば文書、コード、メモ、設定ファイル、ドキュメント、動画像など。バックアップ難度はファイル次第だが、一般的にはファイル数ファイルサイズが大きいとか、機密性が高いとかすると高くなる。

バックアップの難度

バックアップの難易度は以下パラメータに依存している。

  • Time バックアップ時間(≒コピー時間)
  • Difficuly 実現難易度
  • Manual Cost 手作業量
  • Security Cost セキュリティコスト

バックアップ時間 はバックアップに要する時間。コピー完了までの時間と考えて良い。ファイル数が大きい、ファイルサイズが大きいと肥大化する。

実現難易度 はバックアップ(特にリストア)を実現するのがどれだけ難しいかということ。難易度が低いとは、たとえばフォルダ毎コピペするだけで完了するくらい。難易度が高いとは、たとえばコピペだけでは完了せず多数の設定ファイルやシステム設定をいじらねばならない(たとえばエクスポート/インポートに対応してなくて手動でメモ&再設定するしかないとか)ケース。

手作業量 はバックアップ実行時にどれだけ手作業が必要かということ。手作業量が多いとは、たとえばファイルシステムGUI を辿って手を動かさないと完了できないようなケース。逆に手作業量が小さいとは、たとえばコマンド一発で完了できるケース。

セキュリティコスト はバックアップ対象のセキュリティ担保に要するコストのこと。個人データや業務データなどはこのコストが高く、バックアップ先やら暗号化やら色々考える必要がある。

バックアップ頻度

バックアップを実行する頻度はどうするかという話。

毎日、週一、月一などがある。

実施タイミングはタスク管理やリマインダなどで制御したい(頭だけだと忘れる)。

より確実なのはタスクスケジューラ等でスケジュール登録を行い、自動で実行されるようにすること。しかしこれは技術的ハードルも設定の手間の大きい。が、業務レベルのバックアップでは当たり前に行われていることでもある。個人でここまで頑張るのはしんどい。

バックアップ先

バックアップ先としても多数の選択肢がある。

  • ローカル
    • 外付けHDD 一番速いが、高価。
    • USBメモリ そこそこ速く、小さく、安価でバランス良い。
    • CD/DVD 使ってないからよくわからん。音がうるさい。
  • リモート
    • LAN 業務だと大体これ。いわゆる共有フォルダ。
    • クラウド 複数環境から扱うのに便利だが、遅い、あと業務利用NGが多い

ミラーリング

ミラーリングとはバックアップの一種で、バックアップ先をバックアップ元と全く同じ構成にすることである。バックアップ先をバックアップ元と同じ構成に保てるのが特徴。

Ans: ただのコピーだとミラーリングにならない。なので「(バックアップ元では)もう使ってない不要ファイル」がバックアップ先に残ったままとなり無駄である。

Backup などのツールを使うのがベター。バッチファイルで頑張るなら「いったんバックアップ先を全部消す」→「バックアップ元をコピーする」の二段階を行うといい。

ミラーリング設定にしくじるとバックアップ先とバックアップ元の両方からファイルを消しちゃって涙を見る(私は何回かやらかしたことがある)。ミラーリング設定が整うまでは、ただのコピーで全データをどこかに退避しておくなど保険をかけるのが吉。

おわりに

以上、雑多だがまとめてみた。

後編 Windows のクライアント PC をバックアップするための覚え書き(実践編) に続く。

AutoHotkey で全角入力中でも Markdown 記法を素早く入力できるようにする

AutoHotkey の Hotstring を使う。

やりたいこと

以下のように Markdown 記法の入力を省力化したい。

  • 「m1 」と入力すると # が入力される
    • 「m2 」だと ##
  • 「l1 」と入力すると - が入力される
    • 「l2 」だと - ←先頭にスペースが二つあります
  • 「bb 」と入力すると **<ここにカーソルを持ってくる>** が入力される
  • 「lnk 」と入力すると [](<ここにカーソル>) が入力される

abbr(省略語)については何でもよいが、上記は m1 は見出し(Midashi)レベル1、l2 はリスト(List)レベル2、b は太字(Bold)、lnk はリンク(lnk)という具合で、個人的な覚えやすさを元にして考えたものである。

なぜ?

Markdown で日本語文章を書いているが、各種文法を入力するのにいちいち半角モードに切り替えて打つのが面倒くさい(しミスタイプも多い)から。

コード

; refs
; http://ahkwiki.net/Hotstrings
; http://ahkwiki.net/FormatTime
; http://ahkwiki.net/Send
; http://ahkwiki.net/Clipboard

; 終了文字無しで発動させる
#Hotstring *

::m1 ::
  Clipboard := "# "
  Send,^v
return

::m2 ::
  Clipboard := "## "
  Send,^v
return

::m3 ::
  Clipboard := "### "
  Send,^v
return

::l1 ::
  Clipboard := "- "
  Send,^v
return

::l2 ::
  Clipboard := "  - "
  Send,^v
return

::l3 ::
  Clipboard := "    - "
  Send,^v
return

::bb ::
  Clipboard := "****"
  Send,^v
  Send,{Left}{Left}
return

::lnk ::
  Clipboard := "[]()"
  Send,^v
  Send,{Left}
return

コードの解説(Q&A風に)

  • Q: なぜ(Sendで文字を送らずに)クリップボードからのコピペで挿入している?
    • A: 全角入力中でも確実に入力させるため
  • Q: #Hotstring * これは何?
    • A: 終了文字を打たずに挿入するため
    • これを有効にしないと、終了文字(タブとかスペースとかEnterとか)を最後に打たないと挿入されない仕様
  • Q: Send,{Left}{Left} は何?
    • A: カーソル位置を(最も自然と思えるところまで)移動させている
    • 太字の場合は **ここ** だし、リンクの場合は [](ここ) だと思う(URLから書く場合)
  • Q: Clipboard := "****"= を使ったり " を省いたりする書き方もあると思うけど?
    • A: ない。そうすると末尾のスペースを入力できないので、この書き方一択になるはず。

サーフィンワード

自分のお気に入りのワードで検索した結果をネットサーフィン する遊びがある。この時に使うワードを サーフィンワード という。

私のサーフィンワード

以下に挙げてみる(リンク先はTwitter検索)。

何が楽しい?

自分が好きなワードについて、他の人の意見を知ることができるところ。

リアルではどうしても空気を読みがちで、あまりマニアックな話ができない(そもそもできる人がいない)。が、ネットだと同じ人間は多数存在することがわかる。読んでて面白いし、気も紛れるし、何なら「私も何か書いてやろう!」とやる気にさえなる。

検索方法は?

  • Twitter 検索でツイートを調べる
  • Google 検索でウェブサイトを調べる

多数の意見を読みたいなら Twitter。ただしノイズも多く、除外ワードの設定が面倒くさい時もある(上記で言えばポメラとか)。

がっしりした記事を読みたいなら Google。ただし情報が古いことが多く、新しい情報が中々出てこない。しかしながら「熱い思いを持つ人」が面白い記事を書いていたりする。

Firefox が google.co.jp の時だけ遅い、重い、たまに開かない時の対処法

長年悩んでいた問題にようやく終止符を打てた。

現象

Windows7Firefox で、google.co.jp を開く時に限って以下が発生する。

  • 現象1: 接続完了までが遅い
  • 現象2: 散々ローディングアイコンで引っ張っておいて結局何もしない(読み込みをキャンセルしたかのような挙動)

特に現象2が煩わしい。ひどい時は、ググった結果をタブでバシバシ開いた分が全部現象2を食らう。

現象2が起きた後は、アドレスバー上で enter を押して再読込をかけると(たいていは)あっさり表示されるようになるのだが……正直煩わしい。勘弁してほしい。仕事でも趣味でも何十何百とググるわけで、これで足止め食らうのはストレスが相当溜まるのである。

対処方法

IPv6DNS 設定を無効にする

無効化方法は「Windows自体で無効化」と「Firefoxでのみ無効化」の二種類がある。

  • Windows: ローカルエリア接続のプロパティ > インターネットプロトコルバージョン6(TCP/IPv6) のチェックを外す
  • Firefox: アドレスバーに about:config > network.dns.disableIPv6 を検索して、値を true にする

効果がない場合は有効/無効の組み合わせを試すと良いかも。私の場合、以下のとおりだった。

  • Windowsで無効/Firefoxで無効 → 効果無し
  • Windowsで無効/Firefoxで有効 → 効果有り
  • Windowsで有効/Firefoxで無効 → 試してない
  • Windowsで有効/Firefoxで有効 → 効果無し(両方無効なのだから効果アリな気がするが無しだった。理由はよくわからない……)

Q: IPv6 を使うと遅くなるのはなぜ?

IPv6 を使うと遅くなる原因は二つある。

  • 理由1: Firefox が「まず IPv6 でアクセスできるか調べる→ダメなら IPv4 でアクセス」という二段階手順を常に踏んでいるから
  • 理由2: ISP や会社の DNS サーバが IPv6 アドレスの名前解決に弱い(解決に要する時間が遅いとか対応してないとか)から

理由2 について、なぜ弱いのか(それも google.co.jp に限って)かはよくわからない。これは想像だが、Google など頻繁に利用されるドメインについては、(多数のリクエストをさばくために)ISP や会社側で特別な対処がなされているのだと思う。その仕組みの、IPv6 DNS 名前解決部分の処理が遅い……ということではないか。いや、その仕組みって何やねんって話だけど……。詳しい方、教えてください。。。

参考:

単一 HTML ファイルで markdown ファイルを表示できる MDwiki を試してみた

MDwikiとは?

MDwiki - Markdown based wiki done 100% on the client via javascript

一言で言うと、ブラウザで mkwiki.html!#MARKDOWN_FILE.md を開くだけで、MARKDOWN_FILE.md の中身を HTML で表示してくれるやつ。TOC(目次)も付いてる。

サンプルは以下のとおり。

なぜ使おうと思った?

Markdown ファイルをどうやって閲覧するかは悩ましい問題である。

テキストファイルだと「目次が無い」「ブラウザみたいにタブブラウズできない」「ブラウザみたいにリンクをクリックしてリンク先を開けない」といった弊害がある。

で、思ったのは Web ページみたいにブラウザで気軽に読めたら楽だよね ってことで、これを実現するにはどうしたらいいかと調べてみて、MDwiki がたぶん一番シンプルっぽいと結論。

※余談。他の手段としてはサイトジェネレータやビルドシステム等を使って md ファイルを html ファイルに変換する手があったが、このやり方は大掛かりだし難易度も高い。

入手

MDwiki ← このリンク先を保存する。

使用(単一ファイルの表示)

  • 保存した html ファイルを、markdown ファイルが置いてあるフォルダに置く
  • ブラウザで mdwiki.html!#MARKDOWN_FILE.md を開く

使用(Wikiみたいにファイル一覧を出したい)

  • index.md に、各 Markdown ファイルへのリンクを書く
  • ブラウザで mdwiki.html を開く

すると index.md に書いた通りにリンク一覧がずらっと表示されるはず。

所感

良い:

  • markdown の文法は一通り問題無く表示できている
  • TOC(目次)を表示してくれる
  • 日本語の見出しにもジャンプできる(海外製は日本語に弱いことが多い...)

いまいち:

  • TOCが長すぎる(見出し100個超など)と表示が見切れる
  • TOC中見出しのみで構成される
    • 理想は「大見出し、中見出し、小見出し……」のように階層表示すること
    • MDwiki は中見出しを大見出しとして表示してしまう上、小見出しを表示してくれない
      • ちなみに大見出しはページタイトルとして使用される

個人的結論

採用しない。

理由: TOC の作り方が残念すぎるから。

私は日本語テキストも Markdown で書いており、これをブラウザで見れることを期待した。が、TOC が中見出しのみで構成されるせいで、TOC 経由であちこち辿ることができない(ここ重要)。

私の日本語テキストは大見出し、中見出し、小見出しを用いたアウトライン構造で書かれ、見出し数は何十、時には 100 を超えることも多い。そのようなテキストも問題無く表示してほしかったのだが……MDwiki にはそのポテンシャルが無かったようだ。

リンク