グァソのメモ書き

主に自分用メモ

Windows Defenderに人質にとられたNAS上のファイルをMicrosoft Security Essentialsで復元した話

この記事は所謂やっこれ(やってみた結果これができた)です。
他の環境で動く確証は全くありません。

背景

作者が公開をやめてしまった古いフリーソフトNAS上に転がしておいたんですが、
ひょんなことからWindows10を突っ込んだ端末のWindows Defender (以下WD)によって検疫されてしまいました。
WDのGUIから許可、復元を試みたのですが、エラーコード0x80508014とか出て復元に失敗してしまいました。

セーフモードから、とか試したのですがどうしてもWindows10環境のWDではNAS上から隔離したファイルを復元出来ません。

転機

あれこれ試してもだめで、途方にくれていたのですが、
「MSの製品ならMSの製品でなんとかできるやろ」
と唐突に思いついて、
Windows 7を突っ込んだ別端末のMicrosoft Security Essentials(以下MSE)を利用して復元を試みました。

手順

  1. WDのQuarantineフォルダ以下をMSEのQuarantineフォルダに移植
  2. MSEのGUIから復元を試みた
  3. でけた

わかったこと

  • MSEとWDとで検疫に使う処理は全く一緒

気になること

  • Windows10のWDはNAS上のファイルを検疫しちゃうと復元できない場合があるんじゃないか

Cable Matters USB2.0 to 10/100 Fast Ethernet Adapter(202023-Black)を試してみる

背景

Giga bit Ethernetが当たり前な今日この頃ですが、
RJ45ポートが1つある他はUSB2.0ポートしかない一昔前のラップトップをマルチホーム運用したくてですね。。。

今回試した製品

Cable Matters USB2.0 to 10/100 Fast Ethernet Adapter (202023-Black)
Amazon.co.jpだと1000円くらいで買える。

計測

例のごとくiperf使います。

計測は同じセグメントにおいてある2台のPC間で行いました。

  • Server
    • Ubuntu Server 12.04 LTS
    • Giga bit Ether
  • Client
    • Ubuntu Desktop 12.04 LTS
    • 前掲アダプタ

ケーブルはCat5e、
スイッチングハブ(NETGEAR GS116E)を挟んでいます。

使ったコマンド*1(クライアント)は

iperf -c SERVADDR -t 50 -i 5

総時間50秒の計測を5秒単位でレポートさせます。

結果はこんな感じ。

------------------------------------------------------------
Client connecting to SERVADDR, TCP port 5001
TCP window size: 22.9 KByte (default)
------------------------------------------------------------
[  3] local CLIENTADDR port 47696 connected with SERVADDR port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 5.0 sec  56.2 MBytes  94.4 Mbits/sec
[  3]  5.0-10.0 sec  54.4 MBytes  91.2 Mbits/sec
[  3] 10.0-15.0 sec  56.1 MBytes  94.2 Mbits/sec
[  3] 15.0-20.0 sec  56.1 MBytes  94.2 Mbits/sec
[  3] 20.0-25.0 sec  54.8 MBytes  91.9 Mbits/sec
[  3] 25.0-30.0 sec  55.8 MBytes  93.5 Mbits/sec
[  3] 30.0-35.0 sec  56.1 MBytes  94.2 Mbits/sec
[  3] 35.0-40.0 sec  56.0 MBytes  94.0 Mbits/sec
[  3] 40.0-45.0 sec  54.4 MBytes  91.2 Mbits/sec
[  3] 45.0-50.0 sec  56.1 MBytes  94.2 Mbits/sec
[  3]  0.0-50.0 sec   556 MBytes  93.3 Mbits/sec

上流が100Mbpsのネットワークに生やす口としては十分なスペックだと思います。

*1:サーバはiperf -sだけ叩いて放置

ミーティングのログ取り補助スクリプト

背景

ミーティングだとかゼミだとか云った場でログを取る時にお決まりの記述がある。

逐一入力するのが面倒だったので、
日付、時刻、何のログかと言った情報を加えたテンプレを作ってEDITORで開くという、
ログ取りの補助をしてくれるスクリプトをつくろうと思った。

簡単な設計

コマンドを叩いたら日付と簡単な記述の入ったtxtファイルを作成してEDITORで開く。
ファイル冒頭にはログ取り開始時刻を挿入し、
日付、場所、参加者、発表者、アジェンダ、ロガー、ロジなどお決まりの要素を挿入。
EDITORが閉じたあとファイル末尾にログ取り終了時刻を挿入する。

引数が与えられた場合、引数最初の1語をファイル名末尾に加え、
全ての引数を記述としてログ冒頭に挿入する。

エラー処理など

環境変数EDITORが設定されていない場合の終了処理、
引数に"-h"を与えた時の使用方法表示

スクリプト

#!/bin/sh
################################################################################
#
# LOGGING ASSIST TOOL
# 
# REQUIREMENTS:
# ENVIRONMENTAL VALIABLE 'EDITOR' must be set.
# 
################################################################################

DATE=`date "+%Y%m%d-%H%M%S"`
FNAME=${DATE}$1.txt
LOGGER="YOURNAME"

if [ -z "${EDITOR}" ]; then
	echo "ERROR: Environmental variable 'EDITOR' is NOT set."
	echo "Exit."
	exit 1
fi

if [ $# -eq 1 ] && [ $1 = "-h" ]; then
cat << __EOF__
LOGGING ASSIST TOOL

USAGE: $0 <DESCRIPTION>
 This script creates a text file which is named as following sample.

 %Y%m%d-%H%M%S<DESCRIPTION>.txt

 %Y and other symbols are same as "date" command.
 i.e. %Y : year, %m : month ...

 <DESCRIPTION> is also to be inserted into first line of the header.
 <DESCRIPTION> can be plural words.
 But ONLY first word of <DESCRIPTION> is to be added into the tail of the file name.
__EOF__
exit 0
fi

case "$#" in
0)
	date "+/*%n * START LOGGING AT %H:%M%n */%n%n/*" >> ${FNAME}
;;
*)
	date "+/*%n * START LOGGING AT %H:%M%n */%n%n/*" >> ${FNAME}
	echo " * "$@ >> ${FNAME}
;;
esac
	date "+ * DATE: %Y-%m-%d%n * TIME: " >> ${FNAME}
	cat << __EOF__ >> ${FNAME}
 * PLACE: 
 * ATTENDEES: 
 *
 * SPEAKERS: 
 * AGENDA: 
 * 
 * LOGGER: ${LOGGER}
 */

/*
 * LOGISTICS
 */


/*
 * SPEAKER: 
 * SUBJECT: 
 */
__EOF__
	${EDITOR} ${FNAME}
	date "+ %n/*%n * FINISH LOGGING AT %H:%M%n */" >> ${FNAME}
exit 0

使い方と生成されるファイル

適当に実行権限を与えてPATHの通った所に置いて下さい。

次のコマンド*1
実行した場合、

THISSCRIPT TEST DESCRIPTION

以下のようなファイルが出来ます。
%Y%m%d-%H%M%STEST.txt
*2

/*
 * START LOGGING AT %H:%M
 */

/*
 * TEST DESCRIPTION
 * DATE: %Y-%m-%d
 * TIME: 
 * PLACE: 
 * ATTENDEES: 
 *
 * SPEAKERS: 
 * AGENDA: 
 * 
 * LOGGER: YOURNAME
 */

/*
 * LOGISTICS
 */


/*
 * SPEAKER: 
 * SUBJECT: 
 */
 
/*
 * FINISH LOGGING AT %H:%M
 */

*1:THISSCRIPTにはこのスクリプト名が入ります

*2:%Y-%m-%d, %H:%M:%Sにはスクリプト上のdateコマンドで取得した値が入ります。 ファイル名最後の%SとTESTの間に何も入っていないためわかりにくいですね。。。

メモ取り用シェルスクリプト

背景

日常的なメモを取る時に、yyyymmdd_HHMM_hoge.txt *1ってファイルを逐一作ってたんだけど、yyyymmdd_HHMMを入力するのが面倒。

簡単な設計

引数なしならyyyymmdd_HHMM.txt、引数ありならyyyymmdd_HHMM_hoge.txtってファイルをvimで開くだけ。*2
引数が2つ以上あった場合を考えるのが面倒だったので、引数が2つ以上あったらUSAGEをechoして終了。

スクリプト

#!/bin/sh
DATE=`date "+%Y%m%d_%H%M"`
FNAME1=${DATE}
FNAME2=${DATE}_$1

if [ $# -eq 0 ]; then
	vim ${FNAME1}.txt
elif [ $# -eq 1 ]; then
	vim ${FNAME2}.txt
elif [ $# -gt 1 ]; then
	echo "USAGE(0): $0"
	echo "to make yyyymmdd_HHMM.txt"
	echo "USAGE(1): $0 <Description>"
	echo "to make yyyymmdd_HHMM_<Description>.txt"
	exit 1
fi
exit 0

使い方

俺の場合は、このスクリプトを分かりやすい名前にして実行権限を与え、~/binに置いてある。
実行権限を与えてpathの通ってるディレクトリに転がしておくといいんじゃないかと。

*1:一々記述しなくてもだいたいyyyymmdd:年月日、HHMM:時分、hoge:任意の記述、って分かるんじゃないかな、と思うけど一応脚注に書いておく。

*2:vim以外で開きたけりゃ任意に変更して下さい。

某学会テンプレのスタイルファイルでBibTeXを使った時のトラブルと暫定的対処(無責任)

注意

暫定的に採った対処でしかありません。
これが正しい対応だという確信はありません。
本記事の内容を参考にして生じた如何なる事態にも責任は取りません。

問題の所在

某学会テンプレートのスタイルファイルを用いて論文執筆中に
いつものノリでplatex; platex; jbibtex; platex; platex; dvipdfmx;って感じでタイプセットしようとしたら

Undefined control sequence.
l.hoge \newblock

と云うエラーメッセージが出てタイプセットが出来ない事態に陥った。

原因の推測

エラーメッセージに書いてある通り、指定のスタイルファイル中に\newblockが定義されていない?*1

対処の方針

jbibtexを叩いた後に生成される.bblファイルの中に記述されている\newblockというコマンドを削除してやれば対処療法*2程度になるかと。

コマンド

Makefileの中でjbibtexを叩いた後にsedでの処理を追加。

jbibtex hoge
sed -i -e 's/\newblock//g' hoge.bbl

追記

以上の事を書いた後で少し落ち着いて奥村本を読んだ所、
\newblockを使う理由はthebibliography環境中ではピリオドとコンマの扱いが同じになる(フレンチスペーシング)ため、ピリオドの後にもう少し大きなアキを入れるために\newblockという命令を用いているとのこと。
そのため、適当にググって見つけた
Bibliography management - LaTeX Reference and Guides
を参考に

\def\newblock{\hskip .11em plus .33em minus .07em}

で\defし、上記sedの処理は現在使っていない。

*1:テンプレで配られているって事から推測するに根本的な原因はこれじゃない気がする。俺の環境依存?

*2:その場しのぎである

Ubuntuサーバでdisk残量をチェックして警告メールを投げるシェルスクリプト

背景

先日、サーバのディスク残量が枯渇しているのに気付かず、
丸一日走らせてしまうという失態を犯して実に残念な気分になった。
こういった事態が二度と起こらないように、
ディスク容量を定期的にチェックして、利用率が閾値以上だった場合に
所定のメールアドレスに警告メールを送信するという
実に単純なスクリプトを書いた。

スクリプトの動作概要

dfで/にマウントされてるファイルシステムの情報取得。
sedで利用率を切り出す。
利用率と閾値の比較。
(利用率が閾値以上の場合)メールの成形、送信。

動作環境

HP ML110G7
Ubuntu Server 12.04 LTS

スクリプト

#!/bin/sh
CAPACITY=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'`
if [ $CAPACITY -gt 80 ]; then
cat << __EOF__ > /tmp/alertmail.txt
From: hoge@huga.com
To: foo@bar.com
Subject: [ALERT] DISK CAPACITY SHORTAGE

========== ALERT ==========
DISK CAPACITY IS INSUFFICIENT!
__EOF__
df / >> /tmp/alertmail.txt
/usr/sbin/sendmail -t < /tmp/alertmail.txt
fi
exit 0

そのままコピペをする前に

そのままコピペをする人なんて居ないと思うけど一応注意事項を書いておきます。

このスクリプトでは閾値を80%に設定しています。任意の数字に変更して下さい。
また、メールの送信元、宛先についても任意のアドレスを指定して下さい。

sedで何やってるかの概要

冒頭から任意の要素の繰り返し、
半角スペース、
\(0から9の数字の繰り返し\)%、
末尾まで任意の要素の繰り返し、
ってなる部分(要するに、パイプで渡したdf /の末尾1行)の
\(\)で囲まれている部分(要するに、hoge%の数字の部分)を出力している。

cronを使って自動実行

このスクリプトに実行権限を与えてcron.hourlyにでも放り込んでおけば
1時間に1回、ディスク残量が閾値を超えていないかチェックしてくれる。

主に自分向けの注意事項

いつものシェルスクリプトのノリで*.shって名前にしてたんだけど、
run-partsコマンドで実行出来るファイル名制限に引っかかってた。
cron.hourlyの中身はrun-partsで実行するからファイル名にドットを使っていると実行されない。

その他

sendmailの設定は割愛。

Ubuntuにthe_silver_searcher(ag)をインストールする手抜きスクリプト

the_silver_searcherが何なのかは割愛。

普通にREADMEに書いてある通りなのであくまで自分用のメモ。
sudoなりrootで実行する。
俺の場合は~にgitってディレクトリを掘ってその下で以下の手順を実行する。
特に意味はないけどシェルスクリプトにしたった。
ぶっちゃけこのくらいならスクリプトにする理由もないのだがw

#!/bin/sh
apt-get install automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev
git clone https://github.com/ggreer/the_silver_searcher.git
cd the_silver_searcher
./build.sh
install ag /usr/bin/
which ag
exit 0

後はシェルを再起動したりreloadしたり。