CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

perlでソート付きのdu

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

ファイルをサイズ順にソートして出力するスクリプト。

du.pl /home/*

とかで容量くってるユーザを調べたりする用途に丁度いいかな。
1024バイト単位にしたけど、最近は1000バイト単位の方が一般的?まぁいっか。

#!/usr/bin/env perl
use warnings;
use strict;

die "Usage: $0 dir [dir dir ..]" if ($#ARGV<0);

sub filesize{
  my $s=shift || die "filesize: lack arguments";
  return "${s}B" if($s<10);
  my $i=$s;
  foreach my $a ('B','K','M','G','T','P','E','Z','Y'){
    return sprintf "%3.1f$a",$i if($i<10);
    return sprintf "%d$a",int($i) if($i<1024);
    $i/=1024;
  }
  return $s;
}

sub du{
  my $d=shift;
  my @a=`du -sb $d`;
  my %h;
  foreach (@a){
    my ($l,$n)=split;
    die "Error: $n already exist\n" if($h{$n});
    $h{$n}=$l;
  }
  return %h;
}

my %h=();
while(@ARGV){
  %h=(%h,&du(shift));
}

foreach my $name (sort {$h{$b}<=>$h{$a}} keys %h){
  printf "%5s %-30s\n", &filesize($h{$name}), $name;
}

Unixコマンドの出力をテキスト処理するのはperlで書くのが楽しい。極力モジュールは使わない方がいいな。

スポンサーサイト

USBメモリにpuppy linuxをインストールした

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

Puppy Linuxは下記サイトからたどって pup-431JP.iso を入手。

Puppy Linux 日本語版 http://openlab.ring.gr.jp/puppylinux/

作業中、いろいろ消しすぎたらしく、後でブートできなかったりいろいろあったので、
MBRの復旧など含めて、この手順でいいはず。尚、今回は FAT16 で。

最初に、dfでUSBメモリが /dev/sdb1 なのを確認。
umountして、fdisk で d -> n p 1 -> a 1 -> t 6 -> w

$ sudo dd if=/usr/lib/syslinux/mbr.bin of=/dev/sdb
$ sudo mkfs.vfat -v -c -F16 -n puppy /dev/sdb1
$ mkdir iso
$ sudo mount -t iso9660 -o loop pup-431JP.iso iso
$ mkdir usb
$ sudo mount -t vfat /dev/sdb1 usb
$ sudo cp iso/* usb/
$ sudo cat > usb/sysilnux.cfg
default puppy
label puppy
kernel vmlinuz
append initrd=initrd.gz pmedia=usbflash
timeout 5
$ sudo syslinux /dev/sdb1

作成したUSBメモリは、手持ちのeeePCだとブートできなかった。
BIOSでブートの優先順を変更してあるけど、SSDが選ばれてしまう。
だけど、電源投入時に ESC を押してブートするドライブを選んだらブートできた。
まぁ...いっか。(途中、ブートできた事もあったので、なんかブートできる条件があるみたい)

まぁ、何はともあれ、Puppy Linux が使えるようになった。よかったよかった。

512MBのUSBメモリだったんだけど、カーネルとかは100MB位で余裕っぽかったけど、
使用するには足りなそうな感じだった。
セッションを保存しないとかいろいろ設定すれば、
ちょっとWebブラウズ程度には使えるかな??


C/C++の#if 0ハック。すごいなー

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

このハックすごいなー。

http://d.hatena.ne.jp/Seasons/20090504/1241390314

C/C++はコンパイラ型言語だけど、それをインタプリタのイメージで実行するのが特徴かな。

普通、「Cインタプリタツールを使って...」だと思うのだけど、そうするとどうも C言語感が薄れる。「CインタプリタツールはWindowsでしか動きません」とか「printfは可能だけど、ライブラリのリンクはできません」とか。なんだ、Cの文法を持つ、Cインタプリタ言語じゃん...みたいな。結局、C言語とインタプリタの間になんか壁があるなぁ...みたいな。けど、この方法では使ってない。まー sh gcc は使うけど、それは壁なのか?どうなのさ?んー。悩ましい。

コンパイルして実行してるけど、インタプリタっぽい。これはどういう分類なんだろうか。とりあえず C はコンパイラ型の言語としても、もしこう書く新規の言語があった場合、どう思うだろう?...んー、たぶん、コンパイラとかインタプリタとか、そういう区別自体、どうでもいいことなのかも知れない。まーいいじゃん。そんなことよりコード書けよ...かな。

すごいなー。感動。

自分用に貼っとこっと。

#if 0
#!/bin/sh
gcc -o ${0%.*} $0 && ${0%.*} $* ; exit
#endif
#include 
int main(int c,char*v[]){
 while(c--) printf("%s ",*v++);
 printf("\n");
 return 0;
}

を hoge.c に書いたとして、

% ./hoge.c

とする。あれ? でも、これって

alias hoge='gcc -o hoge hoge.c && ./hoge'

と書くのと変らない気がする。いや、hoge.c に書くのがいいとこか。

#if 0
#!/bin/sh
gcc -DTEST -o ${0%.*} $0 && ${0%.*} $* ; exit
#endif
#include 
#include 
void func(void) {
 ....
}
#ifdef TEST
int main(int c,char*v[]){
 int ret = foo();
 if ( ret == 0 ) return 1;
 return 0;
}
#endif

とするといいかな。.c を実行した場合は単体テストみたいな。かなり昔だけど、Java 使ってたとき、こういうコードが好きでよく書いてたかも。

これはいいネタだなー。おぼえとこっと。

もちろん、こういうコードは嫌われやすいので使う場面には気をつけよう。


Macbookのバックアップをrsyncで

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

Macbookのバックアップをした。

バックアップしたいデータは主に写真ファイル。
USBハードディスクにミラーリングが希望なんだけど、
お手軽なフリーソフトでそういうのが見つかってないので
前回同様 rsyncで差分バックアップをした。

まずは、こんな感じで dry-run。

rsync -n -av /path/to/local /path/to/backup/

local → backup/local への差分バックアップになる。

  • n dry-run
  • a 転送にアーカイブを用いる...ってマシン間でないから意味ないかも
  • v 転送ファイル名を表示

ファイルのリネームがちょこちょこあったので手作業で解決。

その後で、-n抜きで実行。

rsync -av /path/to/local /path/to/backup/

ん。まぁまぁいいけど、

もうちっといいツールにしたいとこだなぁ。


 | HOME | 

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。