ubuntu で pdfファイルからテキスト抽出

インストール
$ sudo apt-get install poppler-utils


上記でpdftotextというコマンドが使えます。

コマンドの例

$ pdftotext abc.pdf abc.txt

レイアウトを維持したい場合
$ pdftotext -layout abc.pdf abc.txt

最後の5ページを変換
$ pdftotext -l 5 abc.pdf abc.txt

最初の5ページを変換
$ pdftotext -f 5 abc.pdf abc.txt

パスワード付きのPDFの場合
$ pdftotext -upw 'password' abc.pdf abc.txt

SSDの寿命対策 google chrome のキャッシュ保存先変更

SSDへの書き込み回数を減らすため、空きメモリ上にドライブを作成しそちらへキャッシュ保存先を変更する。
(メモリ上にドライブを作成するソフトはBUFFALO RAMDISKを利用)

google chromeの起動オプションで下記を指定。ショートカットを右クリックで起動パスに下記を追記

キャッシュの保存先を D:\ChromeCache キャッシュサイズは200MBを指定した場合

 --disk-cache-dir="D:\ChromeCache" --disk-cache-size=204800000 --media-cache-size=204800000

具体的に下記のようなパスになる。

C:\Users\hoge\AppData\Local\Google\Chrome\Application\chrome.exe --disk-cache-dir="D:\ChromeCache" --disk-cache-size=204800000 --media-cache-size=204800000


まれに、OS(Windwos7)を強制終了した場合には、起動オプションが消えている場合があるので再度設定の必要あり。

LWP::Authen::Digest を使って perl でDigest認証

LWP::Authen::Digestを使えば簡単

use LWP;
use LWP::Authen::Digest;

my $username = "hoge";
my $password = "fuga";
my $url = "http://x68000.q-e-d.net/~68user/net/sample/http-auth-digest/secret.html";
my $host_port = "x68000.q-e-d.net:80";
my $realm = "Secret Zone";
my $browser = LWP::UserAgent->new();

$browser->env_proxy;
$browser->credentials("$host_port","$realm","$username","$password");
my $response=$browser->get($url);

if($response->is_success) {
print $response->decoded_content;
}
else {
die $response->status_line;
}

ダイジェスト認証自体の詳細はこの辺を参照で。
http://x68000.q-e-d.net/~68user/net/http-auth-2.html

 perl の localtime

たまに利用するけどよく忘れるのでメモ

localtimeは下記のリストを返す。

1. 秒
2. 分
3. 時
4. 日
5. 月(0〜11) 1月の場合に0、2月の場合に1、……、12月の場合に11
6. 年(西暦から1900を引いた値) 2008年の場合に108
7. 曜日(0:日、1:月、……、6:土)
8. 年明けからの経過日数(1月1日の時に0)
9. サマータイムが有効の場合正の整数、無効の場合0、不明の場合負の整数

使用例:現在時刻を取得し時分秒を表示

my @now = localtime;
print "$now[2]時$now[1]分$now[0]秒\n";

使用例:1時間後はtimeに3600を足して

my @time = localtime(time + 3600);
$time[5] += 1900;
$time[4] += 1;
print "$time[5]年$time[4]月$time[3]日 $time[2]時$time[1]分$time[0]秒\n";

ピンポイントでほしい場合はスライスで

my ($min , $hour) = (localtime)[1,2];

JavaScriptの jsファイルをWebService::Google::Closureでコンパクト化

Google Closure Tools の JavaScriptのコードを最適化する 
「Closure Compiler」をperlから利用する。

Closure Compilerは元のJavaScriptコードに対して大きく分けて二つの処理を行います。
1.既存のJavaScriptコードの最適化
2.外部参照しているコードの取り込み


cpanのままだけど、サンプルは

use WebService::Google::Closure;

my $res = WebService::Google::Closure->new(
url => "http://code.jquery.com/jquery-1.8.0.js",
compilation_level => 3,
)->compile;

print "Orig Size = " . $res->stats->original_size . "\n";
print "Comp Size = " . $res->stats->compressed_size . "\n";

jquery-1.8.0.js だとサイズは下記の感じになる。

# prints;
# Orig Size = 163855
# Comp Size = 65523

topでプロセスのメモリ使用量を追う

topで見張るとき、

メモリ使用量でソートするには、top起動中に

shift + o を押して
n を押す

上記で実メモリ使用量でソートされる


topの更新時間を指定、top 起動中に

d を押して
秒数を指定する。

起動オプション top -d1 でもOK


色付けする。top起動中に

B もしくは z を押す。
x を押すとソートしているカラムの色だけが反転表示


topの表示内ではメモリ関連は下記を見る。

VIRT : プロセスのメモリ使用量(確保したメモリ量)
RES : 実メモリの使用量

VIRTは確保したメモリ使用量なので注意。(実際にはまだ使われていない可能性もあり。)

DBI connect(...) failed: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

なエラーの場合が出た場合は

ソケットを確認して、

mysql> show variables like 'socket';

確認したソケットを下記のように設定($socketに上記のソケットのパスを設定)

my $dbh = DBI->connect("$driver:database=$database;mysql_socket=$socket", $user, $pass)