サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
za.toypark.in
ここで圧縮速度 = (圧縮後ファイルサイズ - 圧縮前ファイルサイズ) / 圧縮時間。展開速度 = (展開後ファイルサイズ - 展開前ファイルサイズ) / 展開時間。 今回、xz, bzip2, gzip 圧縮で効率の比較を行った。その結果、xz は圧縮時間より圧縮率、圧縮展開時間比が重要な場合 (アーカイブを多数に配布する場合等) に適し、bzip2 は圧縮展開時間比より圧縮率、圧縮時間が重要な場合 (圧縮展開を繰り返す場合) に適し、gzip は圧縮率より、圧縮展開時間比が重要な場合 (xz と同様) に適すということが言える。 ダミーファイルの場合 圧縮元ファイルを圧縮に適さないランダムな内容のファイルにすることで、処理速度自体を比較できないかなぁ。 /dev/urandom をソースにして 1GB のダミーファイルを作成 $ dd if=/dev/urandom of=./dumm
debian-user@lists.debian.org で投稿されていたネタ。ネットワークスピード測定が遅いということでどうやって速度をnetcatとddで測定するかということが議論されていた。紹介されていたページを軽く翻訳してみる。裏が取れてないので、参考程度に。 ネット上でnetcatを用いたネットワークスピード測定法をいくつか見たことがあるけど、それらは最近のnetcatでは動かない。 1番目のマシンで以下のコマンドを実行。 $ nc -v -l 2222 %gt; /dev/null (2222ポートへの接続がブロックされていないことを確認すること。) 2番目のマシンで以下のコマンドを実行。 $ dd if=/dev/zero bs=1024K count=512 | nc -v $IP_OF_FIRST_MACHINE 2222 ddの出力を見ることでネットワークの速度がわかる
関数が使われている位置にカーソルを移動して、コマンドモードで以下。関数の宣言にジャンプ(ctag不要)出来る。 [ C-I マクロが使われている位置にカーソルを移動して、コマンドモードで以下。マクロの宣言にジャンプ(ctag不要)出来る。 [ C-D 元の場所に戻るには C-O 関数が使われている位置にカーソルを移動して、コマンドモードで以下。関数の宣言にジャンプ(ctag必要)出来る。 C-] 元の場所に戻るには C-t 変数の使われている位置にカーソルを移動して、コマンドモードで以下。変数の宣言に(Go decration)ジャンプできる。 gd 変数の使われている位置にカーソルを移動して、コマンドモードで以下。変数の宣言に(Go decration)ジャンプできる。ただしグローバル変数。 gD ファイルが参照されている位置(#include とか)にカーソルを移動して、コマンドモード
まずはシンプルな例。psコマンドを呼び出したシェルのプロセスIDは28676ということが判る。 $ ps wxf -U hoge; echo $$; PID TTY STAT TIME COMMAND 28676 pts/6 Ss 0:00 \_ /bin/bash 28831 pts/6 R+ 0:00 \_ ps wxf -U hoge 28676 sh -c を使用した例。ps コマンドを呼び出したシェルのプロセスIDは28832で、このプロセスはプロセスID28676から呼び出されたということが判る。 $ sh -c 'ps wxf -U hoge; echo $$;' PID TTY STAT TIME COMMAND 28676 pts/6 Ss 0:00 \_ /bin/bash 28832 pts/6 S+ 0:00 \_ sh -c ps wxf -U hoge; ech
以下のようにすればutf-8でバッファの内容を再読み込みできる。 C-x RET c utf-8 RET C-x C-v RET 自動判定がうまくいかない場合、ファイルの先頭に以下の行を追加することで文字コードを強制することができる。 -*- coding: utf-8 -*- 1行目に意味がある場合は、下のように行コメント化する。 #-*- coding: utf-8 -*- /* -*- coding: utf-8 -*- */
直接編集ということを考えるとこれらの選択肢も考えておかねばならないだろう。どちらもfuseを用いてhttpやftpのディレクトリをマウントしてローカルと同様に使えるようにしている。httpfsはそのプロトコル上の制約なのか読み込み専用のようだ、ftpfsは読み書きの両方が可能なようだ。編集という観点かれすれば書き込みが出来ないhttpfsは除くとしてもftpfsは魅力的な選択肢といえる。可能であればftpfsがもっとも良い選択肢だと思われる。これらの方法の問題点はマウントしなければ使えないという点だ。常にマウント可能、つまりftpfsの導入されたマシンがある、かどうかわからないのならftpfsという選択肢も消えてしまう。結局のところ編集用のcgiをつくっておいてブラウザ経由で編集するのが汎用性という観点からすればベストな回答なのかもしれない。 FUSE: Filesystem in Use
firefoxを常時起動させておくと、vmstatのfreeがどんどん消費されていく。それにしては、topコマンドのVIRTはほとんど変化無し。これ一体どういうこと?空きメモリの定義って何?結局、アプリケーションがアロケートできるメモリの総計は「空きメモリ+バッファキャッシュ+ページキャッシュ」これを表示するのが「freeの-/+buffers/cacheのfree」。vmstatでは表示されないけれど、それぞれの情報が別々に表示されるので、足し算すれば問題なし。せっかく計算機使っているのに手計算したいと言うのなら話は別だ。 freeとvmstatの両方でfreeをチェックする。両方の出力でfreeの定義が違っている様子。freeコマンドMem項目のfreeは空きメモリ、bufferはバッファキャッシュ、chachedはページキャッシュ、空きメモリとバッファキャッシュとページキャッシュの和
nohupは良く使っていた。最近になってdisownを知った。違いは、プロセスの起動前に使うのがnohup、起動後に使うのがdisown。これだけだと判りにくいので、例を考えてみる。プログラムを作って、起動させる。 $ hoge 終わるまでに1分待ったのに終わらない、でもログアウトして帰宅したい。そんな時は、C-zで一時停止して、psとかjobsで一時停止したプロセスのPIDかジョブ番号を調べる。これを引数にしてdisownを走らせる。 $ jobs $ disown %1 これで心おきなく帰宅できる。ログアウトしてもプロセスは死なず、プログラムhogeが完走するまでプロセスは生きつづける。 hogeが時間のかかるプログラムだということが判ったので、次に計算させるときはあらかじめログアウト後もプロセスを生かしておきたい。そんなばあいはnohupをつけてhogeを起動。 $ nohup ho
リネームするにはgit mvなのだけど、この後にpushしただけではリモートに変更が反映されない。必ずgit commitしてからgit pushすること。 まずは名前を変更する。lsで確認すると確かにtest.htmlがなくなり、index.htmlが出来ている。 $ git mv test.html index.html この後にpushしてもリモートに変更は反映されない。 $ git push github Enter passphrase for key '/home/**************************************': Everything up-to-date そこでcommitした後にpushする。これでリモートレポジトリの内容がローカルコピーと同じになったことになる。 $ git commit -a rename file # Please en
[linux] swapper: page allocation failureを解決するにはvm.min_free_kbytesを設定 dmesgにswapper: page allocation failure.というエラーらしきものが表示されるようになった。どうやら、ネットワークでビットレートの高い高速通信をしている場合におきるような傾向がある。 dmesgに見えるエラーは以下のような感じ。 [ 7873.855883] swapper: page allocation failure. order:0, mode:0x20 [ 7873.855895] Pid: 0, comm: swapper Not tainted 2.6.32-5-686 #1 [ 7873.855899] Call Trace: [ 7873.855935] [<c108c9a2>] ? __alloc_p
死活確認したい場合、プロセスファイルの有無とか調べるんだけど、それだとcore吐いて死んだ時は残る。せっかくプロセスファイルがあるのならそれを使って死活確認。 たとえば、httpdのプロセスの死活確認。生きていれば何も表示されない。適当なプロセス番号入れるとそんなプロセスはないといわれる。 $ kill -0 `cat httpd.pid` $ kill -0 4864 bash: kill: (4864) - No such process grepとか使うのはもうやめましょう。 sig に 0 を指定した場合、シグナルは送られないが、 エラーのチェックは行われる。これを使って、プロセス ID や プロセスグループ ID の存在確認を行うことができる。成功した場合 (少なくとも一つのシグナルが送信された場合)、 0 が返される。エラーの場合 -1 が返され、 errno が適切に設定され
umountする際にdevice is busyと言われることがある。多くの場合それはマウントされたディレクトリの下にあるファイルを編集していたり、どこかのシェルがこのディレクトリをカレントとしていたりすることが原因なのだけど、そうでもないことがある。 例えば以下。fugaマシンであるディレクトリいかにブロックデバイスをマウントし、これをnfs経由でhogeマシン上にマウント、hogeマシン上からアンマウントして、fugaマシン上からもアンマウントしようとしたら、device is busyと言われた。 fuga:~# mount /home/******/sdb1 hoge:~# mount /home/********************/sdb1/ hoge:~# umount /home/********************/sdb1/ fuga:~# umount /ho
Text::Wrap、Text::WrapI18N、Text::Format、Lingua::JA::Fold、Text::LineFoldのそれぞれについて禁則処理の確認を行ったところ、Text::LineFoldが最も良い結果を返した。 以下のようなテストスクリプトを用意する。 #!/usr/bin/perl -l use warnings; use strict; use Encode; use Text::Wrap; use Text::WrapI18N; use Text::Format; use Lingua::JA::Fold; use Text::LineFold; my $utf8 = find_encoding('utf8'); my $columns = 72; my $text = <STDIN>; $text = $utf8->decode($text); #{
一時間に1回コマンドやシェルスクリプトを走らせたいけれど、走るタイミングはランダムであってもらいたい。呼び出しのタイミングが一定であればcronだけでOKだが、ランダムなタイミングだとそういうわけには行かない。そんな場合にどうするのか。1時間に1回という点はcronで、ランダムなタイミングはsleepで解決してみる。呼び出されるコマンドやシェルスクリプトの一般性をなくさないために呼び出すタイミングをランダムにするためのシェルスクリプトを介してコマンドやシェルスクリプトを呼び出す。 $ cat randomsleep.sh #!/bin/bash NUM=`expr $RANDOM % 3600` echo $NUM sleep $NUM $ sh randomsleep.sh; wget http://www.google.com -O - randomsheep.shで0-3599秒の適
移動元の inode と移動先のそれが換わらないのが mv、コピー元の inode とコピー先の inode が換わるのが cp。全てのデータは inode によってアクセスできるようになっている。人間のわかりやすさの観点からツリー構造がある。 例えば、以下のようなスクリプトを書いてテストしてみる。cp コマンドの前後でディレクトリの内容がどう変わったかチェックする。 $ cat test.sh rm -fr src/ dst/ mkdir -p src/ mkdir -p src/fuga for (( i=0 ; i<3 ; i++ )) do SRC=`printf "src/%03d.txt" $i` touch $SRC SRC=`printf "src/hoge/%03d" $i` mkdir -p $SRC for (( j=0 ; j<3 ; j++ )) do SRC=`
screenrcの内容を書き換えて再読み込みする方法を知らないと、作ったセッションを終了してから再度screenを起動しないといけない。これだと面倒。 この場合は、C-a :のあとに以下のように入力する。これで再読み込みできる。 :source ~/.screenrc screenrcの中でもsource構文を使うことが出来る。また、これはvimrcとかbashrcとかで見られる外部ファイル読み込みテクニックと同じ。
daily, weekly, monthlyというディレクティブはあるのに、hourlyは定義されていない。これを使うともちろん怒られる。それでも一時間に1回ごとログローテートしたい。google検索すると様々な解決策が見つかるが、どれもまともなものは無い。 -f オプションを使うと強制的にログローテーションを行うことになる。ヘルプを参照すると以下の内容が書いてある。 Tells logrotate to force the rotation, even if it doesn't think this is necessary. Sometimes this is useful after adding new entries to logrotate, or if old log files have been removed by hand, as the new files wil
[perl] Time::PieceやDateTime::Format::Strptimeで日付をパース、早いのはTime::Piece 日付フォーマットのパースに関するデファクトスタンダードはconventionalなdatetime。formatがわかる場合はdatetime::formatを使えばいいんだけど、わからないときは結局自前でパーサを書いていた。パースを自作するのは面倒なので、DateTime::Format::StrptimeかTime::Pieceのstrptimeを使うのが解決策。早いのはTime::Piece たとえば、ctimeフォーマットの文字列をパースする場合(twitterのcreated_atフィールドが相当)、Time::Pieceのstrptimeを使えば以下のようにかける。 $ perl -MTime::Piece -le 'my $t = Time
GNU screenにおいて、新しいウィンドウを作るにはC-a cなのだけど、作ったウィンドウを並べ替えたい場合がある。そんなときはC-a : numberとして、適当なウィンドウ番号を与えればよし。 例えば以下のようなウィンドウがあったとき、irssiのウィンドウ(3番)を2番にしたいとする。 0 bash 1 emacs 2 vim 3 irssi まずはC-a 3でirssiのウィンドウに移動して、C-a :でコマンド入力モードに移行。number 2と打って3番のウィンドウと2番のウィンドウを入れ替える。 C-a 3 C-a :number 2 この操作の後はウィンドウが以下のようになる。 0 bash 1 emacs 2 irssi 3 vim 新しいGNU screenではウィンドウ番号の変わりに+1とか-2とかの相対指定が使えるらしいのだけど、うちのscreenでは使えない。
新規に作成したgitリポジトリをgithubで共有する まずはgithubのページから適当なプロジェクト(gitの言葉でいえばリポジトリ)を作る。ここでは仮にexampleというgithubアカウントでtestというプロジェクトを作ったとする。webからプロジェクトを作ったらこれ以上web上でやることは無い。そして、プロジェクトという概念も忘れて良い。なぜなら後はgitの使い方そのものだから。 $ mkdir test $ cd test $ git init Initialized empty Git repository in /home/hoge/test/.git/ $ ls -la total 12 drwxr-xr-x 3 hoge hoge 4096 2009-12-20 03:32 . drwxr-xr-x 6 hoge hoge 4096 2009-12-20 03:31
異なるデバイスを跨いだ mv でエラー発生して、inter-device move failed, unable to remove target: Is a director などといわれた。 通常のブロックデバイスと nfs の間で mv しようとおもったら下のようなエラーがでた。で、探していたら面白そうなページを見つけたのでチェックしておく。 inter-device move failed 英語のページだったから引用して適当に訳しておく。適当なので、あんまり正確じゃない。なんか抜けている気がする。 Linux: Cannot move folders – inter-device move failed, unable to remove target: Is a directory Linux: フォルダの移動が出来ない。 - デバイス間移動に失敗しました。ターゲットを削除できま
[perl] lwpでコンテンツを取得するときに"500 Can't verify SSL peers without knowning which Certificate Authorities to trust"というエラーが出たらMozilla::CAをインストール lwpはperlで様々なプロトコルを喋るクライアント。これを使ってコンテンツを取得するときに、"500 Can't verify SSL peers without knowning which Certificate Authorities to trust"というエラーがでる。これはどうやらlwp 6.00以降に起きる問題のようだ。このときはIO::Socket::SSL と Mozilla::CAを導入する。 例えば以下のようなエラーがでる。 $ lwp-download "https://github.com/"
aptitude経由で導入したscreenが256色に対応しているかどうかチェックしたかったので、まずはコンパイルオプションの確認から始めた。 まずはapt-get sourceでソースのダウンロードとパッチの適応。出力から dpkg-source -x screen_4.0.3-11+lenny1.dsc されている事がわかる。dpkg-source はパッチを当ててくれるので、出来上がったディレクトリの内容はパッチ済みということ。 $ apt-get source screen Reading package lists... Done Building dependency tree Reading state information... Done Need to get 972kB of source archives. Get:1 http://ftp.jp.debian.or
perlでモジュールの検索パスを追加するにはuse lib qw()。これで@INCの最初に追加される。 モジュールの最新版や不安定版を使うときに検索パスを指定したい。こんなときはuse lib qw()を使う。例えば、hoge::fugaが2つの場所にインストールされている場合に、どちらか一方が使いたい。そんなときはuse libを使って以下のようにする。@INCの先頭に/home/**********/libが追加されるので、/home/*********/lib/hoge/fuga.pmが読み込まれるはずだ。正しく読み込まれたかの確認は%INCの中味で行う。 #!/usr/bin/perl use lib qw(/home/****************/lib); use hoge::fuga; map{print "$_\n"} @INC; while (my ($key, $
[SystemRescueCd] fdisk, dd, sfdisk, partimageでリカバリに必要なパーティションイメージを取る。 SystemRescurCDを使うと、作業に必要なツールがすべてそろっている。fdiskでパーティションテーブルの確認、ddでMBRのバックアップ、sfdiskでパーティションテーブルのバックアップ、partimageでパーティションの内容をイメージにしてバックアップ。 まずはパーティションの確認。 % fdisk -l /dev/sda Disk /dev/sda: 40.0 GB, 40007761920 bytes 255 heads, 63 sectors/track, 4864 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/phy
このページを最初にブックマークしてみませんか?
『サービス終了のお知らせ | Toypark無料ホームページホスティング』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く