I ♥ WordPress

CentOS5.3リリース
2009/04/02 00:05 posted by kunkichi

リリースされました。

CentOS 5 Releases

The CentOS team is pleased to announce the availability of CentOS 5.3.

www.centos.org

昨日の時点でダウンロードとインストールは既に済ませておいたので、早速いろいろ見てみる。とりあえず最小構成インストールで、5.2との違いを確認。

  • 最小構成(ベースシステム+日本語サポート)でCDからインストールする場合、CD1、2、4、5、7が必要。
  • yum-fastestmirrorが最初からインストール済み。
  • firstbootやsetupコマンドのネットワーク設定で、DNSの設定が独立。”Tertiary DNS”って何のことかなと思ったらなんてことはない3番目のDNSということでした。

ってところぐらいかな。とりあえず、あんまり変わってないと思います。

Updatesレポジトリに問題があるらしくまだ少し時間がかかるというようなことが書いてあったので、yum updateはちょっとおいといて、まずは標準的なキックスタートファイルを作るためにいろいろいじってみたいと思います。

もうすぐCentOS5.3→CentOS5.3リリース?
2009/03/31 22:59 posted by kunkichi

リリースまでもう少しみたいです。

mirror status update for 5.3 release

The release is going to get pushed out by another 24 hrs or so, ETA is now Tuesday morning UTC.

Planet CentOS

あと、2、3日ってとこですかね。

追記

国内のミラーを見てみたら既にありますねー。公式リリースはまだ発表されてないみたいなんだけど、もう準備OKということなのかな?

[時間割:Perl]『ミニマルPerl』その23
2009/03/30 23:15 posted by kunkichi

最後の更新はもう2週間前、、、やばいやばすぎる、、

ということで久々になってしまいましたが、また時間割再開です。月曜日は「Perl」。えっと、前回に引き続き、スクリプトでよく使う関数のところです。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883
  • shift
    • コマンドライン引数の処理に使う。
    • 複数の引数に対して順次shiftしていくと、引数が順に処理されて破棄される。わかりにくいのでスクリプトで。#!/usr/bin/perl -w
       
      while(@ARGV){
        my $arg = shift @ARGV;
        print $arg . "\n";
      }
      引数をいくつかつけて実行してみる。./shift.pl aaa bbb ccc
      aaa
      bbb
      ccc
      @ARGVをshiftして$argに代入していくと、徐々に@ARGVの要素が減っていくというわけ。
    • $#ARGVを使うとこんな感じ。#!/usr/bin/perl -w
       
      while( $#ARGV ge 0 ){
        print $ARGV[0] . "\n";
        shift;
      }
    • シェルだと$*とか$@とか$#あたりを使っておんなじことができる。
    • Perlの場合は最初の例にあるようにshiftで破棄された値を返して変数に入れたりできる。
    • シェルで”shift 2″のようにずらす個数を指定できるのはPerlだとできない。ずらす分だけshiftを呼び出す必要がある。
    • 最初の例にあるように引数に配列を指定してshiftできるし、複数のスカラーに対してもshiftできる。ちなみに指定しない場合は、スクリプトだと@ARGVでサブルーチンだと@_がデフォルトになる。引数処理に便利なようにできてるね。

では、ここまでやってきた、defined、shift、exitを使ってスクリプトをいろいろ便利にするテクニックを見ていきます。

引数の処理

  • 引数の前処理
    • コマンドラインスイッチをわざわざ-sオプションで指定していたのを、そのまま使えるようにする。本で紹介されているPerl版grepを書き換えていく。元々はこんな感じ。#!/usr/bin/perl -wnl -s
       
      BEGIN {
        $pattern or
          warn "Usage: $0 -pattern='RE' filename\n" and
             exit 255;
      }
       
      /$pattern/ and print;
      実行する場合はこんな感じで変数名を指定していた。$ ./grep.pl -pattern='root' /etc/passwd-sの場合は明確に変数名を指定しないといけないので、例えばgrepみたいに、”grep マッチするパターン ファイル名“みたいな指定は無理。shiftを使ってみる。#!/usr/bin/perl -wnl
       
      BEGIN {
        $pattern=shift;
        defined $pattern and $pattern ne "" or
          warn "Usage: $0 'RE' filename\n" and
          exit 11;
      }
       
      /$pattern/ and print;
      shiftで第1引数はそのままパターンとして読み込んでshift。それ以降はファイル名として処理する。この場合はgrep風に実行OK。
    • あと上記のスクリプトでは、以下も入れている。
      • $patternが「定義されているか?」を明確にチェックするためにdefinedを使用。
      • exitの返り値を独自に設定。

と、途中だけど今日はここまで。引数処理のテクニックはまだ続きます。

Arduino で電子工作ことはじめ
2009/03/30 22:02 posted by kunkichi

ちょっと前から気になっていたこの本を買ってきました。

Arduinoをはじめよう
Arduinoをはじめよう
posted with amazlet at 09.03.28
Massimo Banzi
オライリージャパン
売り上げランキング: 1686

実は電子工作は初めてだったり。どきどきわくわく。

ということで早速、Arduino本体と、書籍のチュートリアルで使われている各部品を以下でポチッと。

全部併せて、約5000円ぐらい。なかなか大人の道楽であります。

サーバとかネットワークだけでなくて、なーんとなく、この辺のもっと身近な部分と絡めていきたいなーというのが最近の気持ち。

またもやさくらのTracがおかしくなった、、、
2009/03/28 23:46 posted by kunkichi

以前にも同じようなエントリを書いてますが、

さくらにインストールしたTracがまたおかしくなった | cafe chantant blog

このサイトは、さくらインターネットのレンタルサーバを使っているのだけど、どうもOSのバージョンアップをしたらしく、ソースからインストールしていたもの、特に Trac が全然動かなくなっていた。

なので、ちょっと前に以下のサイトを参考にビルドし直したのだけど、気づいたらまた動かなくなってる、、、orz

もう何回目かなぁ、、、とりあえず復旧中だけど、ちょっとマジ勘弁。

追記:
pythonがバージョンアップしてるのに気がついた。プラグインやマクロも動かなくなってるしどうしようもないなー。とりあえずコンテンツだけは見れるようになったので今日のところはよしとする。また後日バックアップとって自宅サーバに移行決定。多分Tracはもう使わないな、モジュールとか多すぎて面倒すぎる。

このブログもそのうち移設します。さようなら、さくらインターネット。

デュアルコアAtomマザー欲しい
2009/03/25 01:23 posted by kunkichi

いかん、全く更新できてない、、、ということでニュースネタでお茶を濁してみる。

デュアルチャネルメモリ/最大4GBのハイスペックAtomマザー発売 Atom 330搭載、拡張スロットは計3本

2本のDIMMスロットを搭載、Atomマザーボードでは初めてデュアルチャネルメモリアクセスへの対応をうたったマザーボード「ATOM-GM1-330」がJetwayから発売された。搭載CPUはデュアルコアのAtom 330。実売価格は9,423円だ。

(AKIBA PC Hotline!)

うーん、やっと出てきたかー。デュアルコアAtomマザーで省電力なサーバを1台作りたいと思っていたのだけど、拡張性が低いのばっかりだったので、これなら悪くない。

メモリ4GBだったらOSまるごとオンメモリでディスクレスとか全然いけそうだし、拡張スロットもこんだけあれば、NICたくさん積んでセグメント分けたルータとか監視サーバとか、RAIDカード+HeartBeat用のNIC積んで冗長化ストレージサーバとか、夢だけどんどん膨らむなーw。あ、監視サーバにもよさげ。

あぁ、欲しい、、、

[時間割:Perl]『ミニマルPerl』その22
2009/03/17 03:13 posted by kunkichi

またもや1週間、爆。まずい、若干モチベーションも下がり気味、これはちょっとテコ入れが必要。

とりあえず、月曜日は「Perl」です。ここまではワンライナーだったりコマンドラインから実行するようなのが多かったのだけど、今回からはスクリプトを作っていきます。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883

スクリプト向けの関数

  • defined
    • 変数が定義されているかをチェックする。
    • 未定義(NULL)、偽(数値0)、空(文字列”")はそれぞれ区別できる。未定義をチェックするのがdefined。
    • 入力チェック等では意図せずNULLになる可能性があるので、その場合はdefinedでちぇっくすべし。
  • exit
    • スクリプトを明示的に終了する。
    • ENDブロックがある場合は、それを実行してから終了する。
    • exitに引数を指定しない場合はデフォルト0を返す(ちなみにシェルは最後の$?を返す)。引数指定の場合はそれを返す。
    • ちなみにdieはデフォルトで255を返す。(ちなみにBEGINブロックで中止する場合はdieだとと警告が出てしまうので、warn and exit 255のほうがよい。)
    • $!変数でdieの終了値を指定することもできる。

次は引数処理です。

[時間割:Perl]『ミニマルPerl』その21
2009/03/09 23:00 posted by kunkichi

1週間って早いなぁ、先週の更新から既に一週間、またがんばらないと、汗

ということで月曜日は「Perl」。引き続き組み込み関数編。ファイルのグロブから。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883
  • ファイルのグロブ・・・ファイル名をワイルドカード文字で生成する。FNG(File Name Generation)とかともいう。まあ百聞は一見にしかず。
    $ ls
    GeorgeHarrison.txt  JohnLennon.txt    RingoStarr.txt
    JimmyPage.txt    JohnPaulJones.txt  RobertPlant.txt
    JohnBonham.txt    PaulMcCartney.txt
    $ perl -wl -e '@files=<Paul*.txt>; print @files;'
    PaulMcCartney.txt
  • 複数の条件を指定する場合は括弧でくくって、カンマで区切る。出力セパレータを改行にすればこういう風に出力される。$ perl -w -e '$,="\n";@files=( <*John*.txt>, <*Paul*.txt> ); print @files;'
    JohnBonham.txt
    JohnLennon.txt
    JohnPaulJones.txt
    JohnPaulJones.txt
    PaulMcCartney.txt
  • ファイルグロブでは<>を使うけど、Perlでは他の用途でも同じ記号を使うため、例えば以下のようにFNGパターンを変数に入れてそのまま使うとエラーになる。
    $ perl -wl -e '$pattern = "Paul*.txt"; @files = <$pattern>; print @files;'
    readline() on unopened filehandle at -e line 1.
    ファイルハンドルとして認識されてしまう。この場合は<>内の変数名の前後をスペースで囲む。
    $ perl -wl -e '$pattern = "Paul*.txt"; @files = < $pattern >; print @files;'
    PaulMcCartney.txt
  • FNGで使うメタキャラクタはシェルのワイルドカードっぽい。正規表現ではないので注意。もし正規表現を使ってより厳密・正確にしたい場合は、前にやったgrepでコードブロック内にマッチ演算子を指定するやつと組み合わせる。
    $ perl -wl -e '@files=<*Paul*>; print @files;'
    JohnPaulJones.txtPaulMcCartney.txt
    $ perl -wl -e '$,="\n";@files=grep{/^Paul/}<*Paul*>; print @files;'
    PaulMcCartney.txt
    ファイルグロブでざっくり選んだやつをgrepのフィルタでより厳密にって感じ。
  • ファイルを管理するようなUNIXコマンドと同じような関数も用意されている。(chdir、mkdir、rmdir、umask、chmod、chown、などなど)
  • PerlのchownはUID/GID両方を変更できるので、chgrpは存在しない。
  • chmod、chown、unkinkなどは、成功・失敗を返すのではなく、成功したファイル「数」を返すので注意!
  • 組み込み関数全般で、引数の扱いには注意!
    • 括弧なしでも使えるけど、括弧は指定したほうがトラブルが少なくてすむケースもある。
    • 以下のようなパターンだと引数がどの関数に対して渡されるべきなのかをPerlが判断できない。
      $ perl -wl -e '@files=<*Paul*>; print sort @files, "\n";'
       
      JohnPaulJones.txtPaulMcCartney.txt

      改行が@filesの各要素と並列でsortが実行されてしまっている。ただしくは以下。セパレータも使って指定した方がすっきりします。
      perl -l -e '$,="\n";@files=<*Paul*>; print sort (@files);'
      JohnPaulJones.txt
      PaulMcCartney.txt

さて、組み込み関数もこの辺で。次からはいよいよスクリプトを作成していきます。

[時間割:Perl]『ミニマルPerl』その20
2009/03/03 02:19 posted by kunkichi

どひゃー。ちょっと忙しくてばたばたしている間にもう3月ですよ、トホホ、、、
そろそろ復活しないと〜、ということで月曜日は「Perl」。前回に引き続き、組み込み関数のところ。

今日はリスト処理に絡む関数を。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883
  • sort
    • リストの要素をソートする。デフォルトはアルファベット順。$ perl -wl -e '$,=" "; @ary=("c","a","d","b"); print sort @ary;'
      abcd
    • sortの後にコードブロックで明示的に並べ替え規則を書くとその規則に従ったソートが行われる。ちなみにデフォルトの場合は、本来は以下のコードブロックになっている。$ perl -wl -e '$,=" "; @ary=("c","a","d","b"); print sort { $a cmp $b } @ary;'
      a b c d
    • 数値の場合のコードブロックは以下。$ perl -wl -e '$,=" "; @ary=(14,100,20,8); print sort { $a <=> $b } @ary;'
      8 14 20 100
    • ちなみにこれを文字列としてコードブロックを書くとこうなる。$ perl -wl -e '$,=" "; @ary=(14,100,20,8); print sort { $a cmp $b } @ary;'
      100 14 20 8
    • コードブロックの動作は以下。
      • ソートする項目を$a、$bとする
      • $a と $b を比較演算子で評価する。左辺が大きい場合は-1、イコールは0、右辺が大きい場合は+1を返す。
      • 上記をもとに $a と $b を入れ替える。
    • randを使った無作為ソートの例。randのロジックをコードブロックに記述する。$ perl -wl -e '$,=" "; print sort { int((rand 2)+0.5) -1 } 1..10;'
      2 1 5 9 6 7 4 10 8 3
      randで-1、0、+1のどれかを返すようにすれば、リストのソート規則がランダムになることを利用している。上の例でもあるけれど、文字列・数値それぞれの場合の並べ替え規則はきちんと定義しないとダメだし、かつ、こういう風に定義すればいろいろできるということ。
    • \Lとかを使って、並べ替え規則時に大文字か小文字に統一してやれば、大文字・小文字の違いを無視するソートとかもできる。$ perl -wl -e '$,=" "; print sort { $a cmp $b } "a".."Z","A".."Z";'
      A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
      これがこうなる。$ perl -wl -e '$,=" "; print sort { "\L$a" cmp "\L$b" } "a".."Z","A".."Z";'
      a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z
  • grep
    • UNIXコマンドのgrepとは異なり、標準入力とかファイルからではなく、リストに対して実実行、コードブロックで条件を記載する$ perl -wl -e '@ary=("John","Paul","George","Ringo");print grep {/^J/} @ary;'
      John
  • join
    • リストの要素を単一のスカラに結合する。$ perl -wl -e 'print join "|", "a".."Z";'
      a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
    • リストに対してマッチングとか置き換えを実施したい場合、個々の要素に対して実施する場合は個別に処理するしかないけど、複数の要素にまたがった状態に対して実施する場合はjoinで結合しちゃうという手が使える。$ perl -wl -e '$str = join "", "apple","monday"; $str =~ /lemon/ and print "Lemon was found!"'
      Lemon was found!
    • -aオプションでフィールド処理した@Fをjoinすると、セパレータの変換的なこともできる。$ cat /etc/passwd | perl -wnlaF":" -e 'print join "|", @F;' | grep -v "^#"
      nobody|*|-2|-2|Unprivileged User|/var/empty|/usr/bin/false
      root|*|0|0|System Administrator|/var/root|/bin/sh
      ・・・
  • map
    • リストを変換するフィルタ。
    • 使い方はgrepと似ているけど、grepはコードブロックの評価に対して各要素を返すのに対して、mapはコードブロックの評価そのもの、つまり変換した結果を返す。$ perl -wl -e '@ary=("John","Paul","George","Ringo"); $,=" "; print map { "\U$_" } @ary;'
      JOHN PAUL GEORGE RINGO
    • ありがちなミス。$ perl -wl -e '$,=" "; print map { s/^(.)/\L$1/g } @ARGV;' 'John' 'Paul' 'George' 'Ringo'
      1 1 1 1
      これはs/〜/〜/gという置換演算子は、置換後の結果を返すsedコマンドとは異なり、置換に成功した数を返す。また、mapのコードブロックで返されるのは、コードブロック内の最後の処理になるため、置換に成功した数として1がかえってきているという訳。これを回避するには、コードブロックの処理の最後に$_をつけてやる。$ perl -wl -e '$,=" "; print map { s/^(.)/\L$1/g; $_ } @ARGV;' 'John' 'Paul' 'George' 'Ringo'
      john paul george ringo

こういうリスト関連処理って、読み込んだファイルの内容をいったんリストに放り込んどいて、まとめてフィルタ、みたいな感じで使えばかなり便利な気がします。

今日はここまで。

[時間割:C言語]『デバッグではじめるCプログラミング』
2009/02/18 23:23 posted by kunkichi

またここ数日忙しくて更新できてないのですが、一応ちゃんとやってるよという報告もかねて(笑)

時間割の達成状況をちょっと見直してみたいと思います。

  • 「Perl」の時間は順調とはいわないまでもある程度こなせてる感じ
  • 「サーバ」は引き続きRADIUSを。一応本は読み終わってるので、知識定着のためのまとめをやってこうかなと。あと、念願のクアッドコアCPUを手に入れたので、いろいろと試していきたいなと。

ということで、問題は「C言語」。

これまで、はじめてのC言語 完全入門に沿ってやってきたのだけど、途中からどうも面白味に欠ける気がしてきて、モチベーション低下&ちょっとサボりがち。ということで、てこ入れのために、書籍を変えました。選んだのはこれ。

デバッグではじめるCプログラミング
山本 貴光
翔泳社
売り上げランキング: 262121

ゲームを作る(なつかしのROGUE系RPG!angbandとかやったなぁ、、、)という目標を設定して、実際に設計しつつ実装していくというなかなか実践的な内容。本の中で紹介されているソースコードはわざとちょこちょこ間違いがあって、それをデバッグしつつ学ぶというところが特徴的で面白い本です。ここ2、3日で一気に8割方読み終えるぐらいに読みやすいし、サンプルプログラムに目標がちゃんとあるのはゴールが見える感があってモチベーションも維持しやすいしね。

ただ、はじめてのC言語 完全入門ほど細かい説明(とはいうもののこれもポインタとか配列のところの説明はやっぱり足りない気がするなぁ、具体的にどういうシチュエーションでどう使ったらどういうメリットがあるか?っていうところまではサンプルプログラムには含まれてるとは思えないし。)があるわけではないので、一気に読み進めれたのははじめてのC言語 完全入門をある程度読んでいたからってのもあるね。そういう意味では無駄にはなってないってことだとプラスに考えるようにしてます。

あと少しで読み終えれそうなので、一通り読み終えたら、サンプルのゲームをカスタマイズしつつ実際に作ってみたいと思ってます。一応Windows環境でのプログラミングを想定しているようなので、UNIXでやるならどうするか?とか、これをPerlで書くならどうするか?ってとこまでできると面白いかも。

ま、あんまり細かく勉強成果を報告できるような感じではなさそうなのですが、なるべくアップできるようにがんばります、汗

このページの先頭へ