ぼくの livedoor Reader 設定

Stylish

livedoor Reader - compact | Userstyles.org
(自作)広告・アカウント名を非表示、コンパクト表示の調整

Greasemonky

http://userscripts.org/scripts/show/22702
g で全文取得
http://userscripts.org/scripts/show/22001
広告エントリを目立たなくして j/k 移動時にスキップ
http://userscripts.org/scripts/show/34576
m ではてなブックマークのコメント表示
http://userscripts.org/scripts/show/62710
(自作)Read It Later に記事を登録

refControl

[RefControl]
blogimg.goo.ne.jp=
dtiblog.com=
fc2.com=
image.itmedia.co.jp=@FORGE
blogs.yahoo.co.jp=@FORGE
stat.ameba.jp=@FORGE
stat001.ameba.jp=@FORGE
webry.biglobe.ne.jp=
www.tumblr.com=@FORGE

livedoor Reader から Read It Later に追加する Greasemonkey 書いた

かんたんな使い方

設定画面の表示

インストール後に新しく追加される Read It Later ボタンか、Greasemonkey の設定メニューから起動できます。

設定

ショートカットキーは1文字です。たぶん大文字・小文字は区別します。
API Key は取得がちょっとめんどくさいですが、GET API Key のリンク先から取得してください。
あと、API Key がないとその後のユーザ認証もできません。


設定後に入力欄がグリーンになれば OK です。

設定完了

設定完了後に livedoor Reader をリロードすると、Read It Later の未読数が表示されるはずです。

Read It Later への追加

設定したショートカットキーか Read It Later ボタンで、フォーカス状態の記事を追加します。

ぼくが聞いた IT 用語の読み間違いまとめ

2009-12-21 更新

単語 聞いたの 正しくは
alt あると おると
char ちゃー*1 きゃら
deny でにー でぃない
leopard れおぱるど*2、れおぱーど*3 れぱーど
null ぬる*4 なる
ping ぴんぐ ぴん
squid すきっど すくぅぃど
warning わーにんぐ うぉーにんぐ

*1:ギタリストなら正しい

*2:ドイツ語読み

*3:カタカナ語大辞林に表記)らしい

*4:ドイツ語読みらしい

はてなブックマークのノベルティセット欲しい!

はてなブックマークのノベルティセット欲しい!ので勝手に紹介します。

id:Hamachiya2 携帯アドレス晒してたのでデコメ送ったら「なにこれどうやるの!」って返信きて嬉しかった!
id:Ubuntu おうちにあんなにサーバあって超うらやましい
id:ooo0_temaki_0ooo 3週間ハネムーンのふりをして旅にでたい
id:m37a ヤングでギークでもうすぐママ
id:osi7 天真爛漫(悪い意味で)&ブチャラティ(残念な意味で)みたいな男

Xen マシンのシリアルポートを使う

Xen はデフォルトで /dev/ttyS0 を掴んでしまうため、このままではシリアルポートが使えない。

# dmesg |grep ttyS0
Xen virtual console successfully installed as ttyS0

なので、Xen が ttyS0 以外のコンソールを使うように設定する。

# vi /boot/grub/menu.lst

> # xenkopt=console=tty0
---
< # xenkopt=console=tty0 xencons=tty6

GRUB を更新して再起動。

# update-grub
# shutdown -r now

これでシリアルポートが使えるようになる。

# screen /dev/ttyS0 115200

GNU screen 自分用まとめ

今まで単純に nohup 的な使い方しかしてなかったので、もったいないから色んなとこを参考に環境を設定してみました。zsh と組み合わせるともっと便利らしいんですが、今はこれが精一杯。

.screenrc

startup_message off
escape ^j^j
autodetach on
defkanji utf-8
defencoding utf-8
encoding utf-8 utf-8
defscrollback 10000
hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
bind n screen
bind h prev
bind j next
bind l windowlist
bind c copy
bind t title

起動画面は邪魔くさいのでオフ。
エスケープはデフォルトの Ctrl+a から Ctrl+j に変更してます。参考サイトによると、Ctrl+a だと emacs とかでバッティングするかららしいのですが、僕は単純に押しやすいのでそうしてます。
あとはスクリーン下に時間とウィンドウ名を表示します。

起動とか

・起動
# screen

・screen のリストを表示
# screen -ls
There are screens on:
        627.pts-0.debian        (08/13/08 13:45:27)     (Detached)
        571.pts-0.debian        (08/13/08 11:32:06)     (Detached)
2 Sockets in /var/run/screen/S-kohiro2.

・screen を再アタッチ(仮想端末が一個)
# screen -r

・screen を再アタッチ(仮想端末が複数)
# screen -r [PID]

-ls で現在の screen 状況が表示されます。アタッチ可能な screen が一個だけの場合は -r で一発ですが、複数あるときは PID を指定する必要があります。PID は -ls や -r 失敗時で表示されます。

コマンド

Ctrl+j でエスケープしたら、以下のコマンドを打ちます。

コマンド 説明
n 新規ウィンドウを作成
h 前のウィンドウに移動
j 次のウィンドウに移動
0-9 n番のウィンドウをアクティブにする
l ウィンドウリストを表示(j/k で移動、Enter で選択)
c コピーモード(スクロールバッファを vi チックな操作でさわれる)
t ウィンドウタブの名前変更
d デタッチ(screen から抜ける)

小ネタ

.screenrc のリロード

エスケープして

:source $HOME/.screenrc

設定を書き換えるたびに quit してましたが、これは超絶便利。

Pukiwiki EUC-JP版 → UTF-8版 移行用のデータ変換スクリプト

Pukiwiki のデータのみを EUC-JP から UTF-8 に変換するスクリプトを、勉強がてら Perl で書いてみました。適当な名前で保存(例:convert.pl)して、変換元の Pukiwiki ディレクトリと変換後の保存先ディレクトリを指定して実行すれば OK です。

 # convert.pl [変換元ディレクトリ] [保存先ディレクトリ]

吐き出されたディレクトリを、まるごと新しい UTF-8Pukiwiki ディレクトリに統合というか上書きすればたぶん OK です。

変換対象のディレクトリと変換内容は以下の通りです。

  • attach
    • 対象ファイル: *.1 *.log 拡張子なし
    • ファイル名のみ変換(ただし _ はそのまま)
    • タイムスタンプ保存
  • backup
    • 対象ファイル: *.gz
    • ファイル名と中身を変換
    • 再圧縮
    • タイムスタンプ保存
  • cache
    • 対象ファイル: *.ref *.rel recent.dat
    • ファイル名と中身を変換
    • タイムスタンプ保存
  • diff
    • 対象ファイル: *.txt
    • ファイル名と中身を変換
    • タイムスタンプ保存
  • wiki
    • 対象ファイル: *.txt
    • ファイル名と中身を変換
    • タイムスタンプ保存

参考:PukiwikiをUTF-8へ変更 - mynote

2008-08-15 追記

PHP で書かれたもっとしっかりしたやつが既にありました><
http://pukiwiki.cafelounge.net/plus/?Documents%2FAbout%20the%20migration%20from%20EUC-JP%20to%20UTF-8
Plus! 用ですが、Pukiwiki でも問題なさそうです。

スクリプト

#!/usr/bin/perl -w

use strict;
use warnings;
use Encode;
use File::Basename;
use File::Copy;
use IO::File;
use Path::Class::Dir;
use Path::Class::File;

use constant REGEX_SUFFIX => qw(\..+$);		# 【最初】の . 以降を拡張子とする
#use constant REGEX_SUFFIX => qw(\.[^\.]+$);	# 【最後】の . 以降を拡張子とする

&main();

sub main {
	if ( $#ARGV != 1 ){
		print "error: $0 [source_dir] [target_dir]\n";
		exit 1;
	}

	(my $src_dir_root, my $trg_dir_root) = @ARGV;
	my $subdir_name;
	my @suffixes;
	my $src_dir;
	my $trg_dir;

	####### */attach #######
	$subdir_name = "attach";
	@suffixes = (".1", ".log");
	($src_dir, $trg_dir) = &set_dir($src_dir_root, $trg_dir_root, $subdir_name);
	foreach my $src_file ($src_dir->children) {
		if ($src_file->is_dir) { next; }
		(my $hexname, undef, my $suffix) = fileparse($src_file->basename, REGEX_SUFFIX);
		next if ( grep( /$suffix/, @suffixes) == 0 && $suffix ne "");
		my @splited = split(/_/, $hexname);
		my @utf8ed;
		for (@splited) {
			push @utf8ed, &hexEUCtoUTF8($_);
		}
		my $utf8name = join("_", @utf8ed);
		my $trg_file = Path::Class::File->new($trg_dir, $utf8name . $suffix);
		copy($src_file, $trg_file->stringify);
		utime $src_file->stat->atime, $src_file->stat->mtime, $trg_file;
	}

	####### */backup #######
	$subdir_name = "backup";
	@suffixes = (".gz");
	($src_dir, $trg_dir) = &set_dir($src_dir_root, $trg_dir_root, $subdir_name);
	foreach my $src_file ($src_dir->children) {
		if ($src_file->is_dir) { next; }
		(my $hexname, undef, my $suffix) = fileparse($src_file->basename, REGEX_SUFFIX);
		next if ( grep( /$suffix/, @suffixes) == 0 );
		my $trg_file = Path::Class::File->new($trg_dir, &hexEUCtoUTF8($hexname) . $suffix);
		&fileEUCtoUTF8(IO::File->new("gzip -cd $src_file 2>/dev/null |"), IO::File->new("| gzip -c - > $trg_file") );
		utime $src_file->stat->atime, $src_file->stat->mtime, $trg_file;
	}

	####### */cache #######
	$subdir_name = "cache";
	@suffixes = (".ref", ".rel");
	($src_dir, $trg_dir) = &set_dir($src_dir_root, $trg_dir_root, $subdir_name);
	foreach my $src_file ($src_dir->children) {
		if ($src_file->is_dir) { next; }
		(my $hexname, undef, my $suffix) = fileparse($src_file->basename, REGEX_SUFFIX);
		next if ( grep( /$suffix/, @suffixes) == 0 );
		my $trg_file = Path::Class::File->new($trg_dir, &hexEUCtoUTF8($hexname) . $suffix);
		&fileEUCtoUTF8($src_file->open('r'), $trg_file->open('w'));
		utime $src_file->stat->atime, $src_file->stat->mtime, $trg_file;
	}
	# recent.dat
	my $src_file = Path::Class::File->new($src_dir, "recent.dat");
	my $trg_file = Path::Class::File->new($trg_dir, "recent.dat");
	&fileEUCtoUTF8($src_file->open('r'), $trg_file->open('w'));
	utime $src_file->stat->atime, $src_file->stat->mtime, $trg_file;

	####### */diff #######
	$subdir_name = "diff";
	@suffixes = (".txt");
	($src_dir, $trg_dir) = &set_dir($src_dir_root, $trg_dir_root, $subdir_name);
	foreach my $src_file ($src_dir->children) {
		if ($src_file->is_dir) { next; }
		(my $hexname, undef, my $suffix) = fileparse($src_file->basename, REGEX_SUFFIX);
		next if ( grep( /$suffix/, @suffixes) == 0 );
		my $trg_file = Path::Class::File->new($trg_dir, &hexEUCtoUTF8($hexname) . $suffix);
		&fileEUCtoUTF8($src_file->open('r'), $trg_file->open('w'));
		utime $src_file->stat->atime, $src_file->stat->mtime, $trg_file;
	}

	####### */wiki #######
	$subdir_name = "wiki";
	@suffixes = (".txt");
	($src_dir, $trg_dir) = &set_dir($src_dir_root, $trg_dir_root, $subdir_name);
	foreach my $src_file ($src_dir->children) {
		if ($src_file->is_dir) { next; }
		(my $hexname, undef, my $suffix) = fileparse($src_file->basename, REGEX_SUFFIX);
		next if ( grep( /$suffix/, @suffixes) == 0 );
		my $trg_file = Path::Class::File->new($trg_dir, &hexEUCtoUTF8($hexname) . $suffix);
		&fileEUCtoUTF8($src_file->open('r'), $trg_file->open('w'));
		utime $src_file->stat->atime, $src_file->stat->mtime, $trg_file;
	}
}


### 元先ディレクトリを設定
sub set_dir {
	my $src_rootdir = shift;
	my $trg_rootdir = shift;
	my $subdir = shift;

	my $src_dir = Path::Class::Dir->new($src_rootdir, $subdir);
	my $trg_dir = Path::Class::Dir->new($trg_rootdir, $subdir);

	# 元ディレクトリ確認
	if ( ! -e $src_dir ) {
		print "ERROR: Can't locate source directory.\n";
		exit 1;
	}

	# 先ディレクトリ確認
	$trg_dir->mkpath if ( ! -e $trg_dir );

	return ($src_dir, $trg_dir);
}


### File EUC-JP => UTF-8
sub fileEUCtoUTF8 {
	my $src_fh = shift;
	my $trg_fh = shift;

	while (<$src_fh>) {
		chomp;
		my $tmp = encode('utf-8', decode("euc-jp", $_));
		$trg_fh->print("$tmp\n");
	}

	$trg_fh->close;
	$src_fh->close;
}


### HEX => EUC-JP => UTF-8 => HEX => UPPER CASE
sub hexEUCtoUTF8 {
	my $string = shift;

	# 変換: 16進 → バイナリ
	$string =~ s/([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1) )/eg;
	# 変換: EUC-JP → UTF-8
	$string = encode('utf-8', decode("euc-jp", $string));
	# 変換: バイナリ → 16進
	$string = unpack("H*", $string);
	# 変換: 小文字 → 大文字
	$string =~ tr/a-z/A-Z/;

	return $string;
}

1;