カテゴリ:日記( 303 )
2013年07月04日の日記、Perlのモジュール
相変わらずPerlがおもしろい。

なぜか最近 if文の条件式が正規表現になってる!笑

なぜ Windows には標準添付されていないのか憤る!
Mac にも Linux にも Unix にも入っているのにおかしい!

モジュールがすごい!
とりあえず教科書に載ってるモジュールを使ってみる。
CPANという集約サイトからダウンロードもできるが、コマンドラインインターフェースからcpanm <モジュール名>でダウンロードからインストールまでしてくれる。
モジュール名を知っていればいつでもどこでも(ネットに繋がっていれば)すぐに環境作れる試せる。

とりあえず使ってみたモジュールは DateTime モジュール!
日付等はPerl標準のlocaltime関数で取得しても変わらないですが、DateTimeモジュールを使ったほうがなんかスマート。
僕は日付処理がちょっと苦手です…
DateTimeモジュールの中身を見てみたいです。いつか!
難を言えば、ちょっと名前が長いこと -> DateTime。でもまあしょうがないか(^^;
・・・
ちょっと使ってたら少々面倒でしたw
set_time_zoneがね。

use DateTime;

my $dt = DateTime->now();
$dt->set_time_zone("Asia/Tokyo");
my ($d, $t) = ($dt->ymd("/"), $dt->hms());
print "\@$d $t\n"; # 日付 時間 を出力


ミリ秒は扱えない?
プログラミングしてると、ログを出力したくなります。
まあ、ログというよりデバッグするためですが。。。
コンピュータは速いのでミリ秒まで(もしくはマイクロ秒まで)欲しいところです。
ミリ秒で検索したら Time::HiRes というモジュールがヒットしました。
これはこれで微妙なネーミングだと。
ちょっと残念だがまだ使用してないのでなんとも言えない。
[PR]
by redchant | 2013-07-04 22:22 | 日記
あれもこれも反対です!!!
最近めっきりサッカーネタを書いてないですが、ここぞとばかり一言です!!!

ザックさんの解任意見には反対です、、、
と一般人がいくら言っても日本サッカー界のお偉いさんには伝わらないかもしれません。
例えばJリーグ2ステージ制の話題にしても。

オシム氏 ザック監督解任論に異議「私なら代えない」

オシムさんの言葉なら伝わるでしょうか???

2ステージ制についてはどう考えているのだろうか。
[PR]
by redchant | 2013-07-01 23:37 | 日記
2013年06月15日の日記、「初めてのPerl」、え?なにか?w
[22:06]

どうもです。
ジメジメと暑い!

そんな暑い部屋で午後からずっとほとんどプログラミングしてますw
休みの日にどんだけーって感じです、我ながらw

で、現在タイトルどおり「初めてのPerl」で勉強しています。
昨日までは「すぐわかるオブジェクト指向Perl」で勉強してたんですけどね。。。
「すぐわかる・・・」で勉強してて、知らないことが出てくると不安感に襲われるんですよ。
なんかやっぱちゃんと勉強したいな、ということで「初めてのPerl」。

自分のことをこう言っちゃうの嫌なんですが、「不器用だな」と思います。
この業界は"ドンドン突き進む"のが現在のスタンダードなスタイルになってます。
そうしないと進化の激しい業界・技術についていけない、
言ってしまえば食っていけないんです。

でも僕はそういうのがイヤで。
仕事でも知らなくてもいいことまで首を突っ込んでしまう、よって仕事が増える、と非効率なことをしてます。
仕組みがわからないとやっぱ不安感がでてくるです。

だけども、Perlはプライベートなので、とことんやってみようと思いました。
そんな感じでこんな状態です。

c0050550_22273688.jpg

積んだ感じは壮観です。
オライリーの動物本なので表紙を見せたかったですが、Perl関連の書籍は積んだ厚さを見て欲しかったです。
(でもわからないですね。。。写真は難しい。。。)
ということで、タイトルなどを表示し、総ページ数を表示するプログラムを作ってみました。
ちなみに上から順番に読む感じです。
ちなみに僕は表紙をとって読む派です。


#! /usr/bin/perl

use strict;
use warnings;

my $books = [
{
name => '初めてのPerl 第6版',
nickname => 'リャマ本',
page => 488,
},
{
name => '続・初めてのPerl 改訂版',
nickname => 'アルパカ本',
page => 328,
},
{
name => '詳説 正規表現 第3版',
nickname => 'フクロウ本',
page => 528,
},
{
name => 'プログラミングPerl 第3版 VOLUME 1〉',
nickname => 'ラクダ本',
page => 756,
},
{
name => 'プログラミングPerl 第3版 VOLUME 2〉',
nickname => 'ラクダ本',
page => 680,
},
];

print "# My Perl Texts ###################################\n";

my $index = 0;
my $sum_of_pages = 0;

for my $book (@$books) {

$index++;

print "Book No.$index\n";
print " Name:${$book}{'name'}\n";
print " Nickname:${$book}{'nickname'}\n";
print " Page:${$book}{'page'}\n";

$sum_of_pages += ${$book}{'page'};

}

print "\nSum Of Pages=$sum_of_pages\n";

print "####################################################\n";



出力結果です!

# My Perl Texts ###################################
Book No.1
Name:初めてのPerl 第6版
Nickname:リャマ本
Page:488
Book No.2
Name:続・初めてのPerl 改訂版
Nickname:アルパカ本
Page:328
Book No.3
Name:詳説 正規表現 第3版
Nickname:フクロウ本
Page:528
Book No.4
Name:プログラミングPerl 第3版 VOLUME 1〉
Nickname:ラクダ本
Page:756
Book No.5
Name:プログラミングPerl 第3版 VOLUME 2〉
Nickname:ラクダ本
Page:680

Sum Of Pages=2780
####################################################

[PR]
by redchant | 2013-06-15 22:28 | 日記
2013年06月14日の日記、Perl - 二次元ハッシュ、ではなく;
今日は、Perlで二次元ハッシュ。
下記のデータでイメージしやすいかと。

[File]
perl_root=~/usr/bin/perl
tmp=/tmp
file1=file1.txt
file2=file2.txt
file3=file3.txt
[Internet]
web=http://www.xxx.co.jp/
ftp=ftp://www.xxx.co.jp/


ハッシュのイメージはこんな感じになります。

ハッシュ{'File'}{'perl_doc'} とすると ~/usr/bin/perl を取得
ハッシュ{'File'}{'tmp'} とすると /tmp を取得
ハッシュ{'Internet'}{'web'} とすると http://www.xxx.co.jp/ を取得

で、いやーハマったハマった笑
ハマったところは、具体的には言えません!
恥ずかしすぎて!
ハッシュでハマったわけでも、リファレンスでハマったわけでも、正規表現でハマったわけでもなく!
基本的なアルゴリズムを間違っちゃった(・∀・)

my %conf = ();
my $category = '';

while (<DATA>) {

my $data = $_;
chomp $data;

if ($data =~ /^\[(.*)\]$/) {
$category = $1;
} elsif ($data =~ /^(.*)=(.*)$/) {
$conf{$category}{$1} = $2;
}

}

for my $category (keys %conf) {
for my $key (keys %{$conf{$category}}) {
print "Category:{$category} Key:{$key} = $conf{$category}{$key}\n";
}
}

__DATA__
[File]
perl_root=~/usr/bin/perl
tmp=/tmp
file1=file1.txt
file2=file2.txt
file3=file3.txt
[Internet]
web=http://www.xxx.co.jp/
ftp=ftp://www.xxx.co.jp/


がんばろっ
[PR]
by redchant | 2013-06-15 00:12 | 日記
2013年06月10日の日記、Perl - リファレンスのみの2次元配列;
Perlのお勉強。
今日は、配列。
配列でも、リファレンスを使った「現場的な」配列。


#! /usr/bin/perl

use strict;
use warnings;

my $array = [
undef,
['Jan', 1],
['Feb', 2],
['Mar', 3],
['Apr', 4],
['May', 5],
['Jun', 6],
['Jul', 7],
];

print "no syntax sugar : ${$$array[4]}[0] is ${$$array[4]}[1]\n";
print " syntax sugar 1: $array->[4]->[0] is $array->[4]->[1]\n";
print " syntax sugar 2: $array->[4][0] is $array->[4][1]\n";

上記のコードのprint文は3つとも同じ変数展開をします。

no syntax sugar : Apr is 4
syntax sugar 1: Apr is 4
syntax sugar 2: Apr is 4

なんとも奇怪です。
3種類も書き方があるとは困ります。(もしかしてもっとある?)
たぶん読むのに困ります。
個人的には2番目の書き方が一番明瞭かと思います。

でもですねー、最初は -> 記法のデリファレンスのシンタックスシュガーは好きではなかったです。
原始的なデリファレンスの方が分かりやすいと思ったです。
でも、それは1次元配列まででした;
リファレンスのみの2次元配列は、原始的なデリファレンスでは、まだちょっと理解できません。
まだブレース(波括弧({}))の役割が分かってないなあ。

${${${$array[4]}}[0]}

もっともっとデリファレンスして、これでもいけると思ったのだがエラーになる。
わからん。


ところで、Vimの使い心地がいいです!
普通のエディタを操作している時も、Vimのコマンドを打ってしまいます;
それはそれで問題ですが。。。
[PR]
by redchant | 2013-06-10 23:17 | 日記
2013年06月09日の日記、Vim使いになる!
エディタ選びを悩みに悩んで、とうとう「Vim」を使っていこうかな、と思っています。
WindowsからMacに移行してからは、「mi」から「Sublime Text2」を使ってました。
でも、やっぱ、プログラマは「Vim」か「Emacs」を使った方がカッコイイ(・∀・)
ということで!

ということで、「Vim」です!

まず、「Vim」を説明しておこうかと。
読み方は「ブイアイエム」(ビムと読む人もいるらしいが)です。
UNIX系OSのデフォルトで付いているエディタの「vi」の超機能追加版です。
で、「Vim」も現在となってはUNIX系OSにデフォで付いているっぽいです。

MacもUNIX系OSのひとつですから付いてるそうです。
「付いてるそうです」というのは、確認する前に、日本人MacユーザのVimのデファクトスタンダードである、
MacVim-KaoriYaをインストールしてしまったからです!
なんだよ、標準添付を使用するんじゃなくて、わざわざインストールすんのかよって感じですか?
でも、後ほど、すごいことに気付くことになると思います。

「MacVim + 香り屋さんのパッチ + なるべく日本語化 = 香り屋さんのWindows版の使い勝手に近いMacVim 」を勝手に目指すプロジェクト
http://code.google.com/p/macvim-kaoriya/

さて、初めて触る人は、かなり難しく感じると思います。
僕は、仕事で少しだけ「vi」を使ったことがあったので、少し入りやすかったです。
なにが難しいって、マウスを使いませんから!(僕の場合ノートPCなのでタッチパッドですが)
Vimは全てキーボードで完結します。
カーソル移動が、なんと、
j :下へ
k :上へ
h :左へ
l :右へ
です!
なんで!? と思いますが、この割当てだと右手のみで移動できます。
(でも、矢印キーでも可能です。僕もたぶん矢印キーを使いそうな気がします orz)
キーボードのみで完結するのは逆にマウスに手を移動する時間を減らせるということです。
キーボードだけで何ができるの? という疑問も浮かぶでしょう。
それができるんです!
すべて!
例えば検索処理はノーマルモードで、

/検索したい値

するだけです。
まあ、これだけでは、どんな恵みがあるかは感じられないかもしれませんが、あらゆることがパパっとできてしまうのです!

さて、そんな初心者は、なにから入ればいいかというと、「Vim」には「vimtutor」というレッスンが付いてます。
で、ここで重要なのが、MacVim-KaoriYaをインストールしたということです。
なんと「vimtutor」が日本語訳されています。見事に。ここ重要!
たぶん英語だったら使うことにはならなかったでしょう。
一旦コマンドや操作方法を覚えてしまえば、英語版の「Vim」でも怖くありません。(きっと)
そんなエディタなんです!
ちなみに、「vimtutor」を実行すると冒頭に、「レッスンを終えるには25分から30分くらいかかります」と書いてありますが、「vi」経験者の僕でも1時間くらいかかりました。
「vi」未経験者の方は2時間くらいかかりかもしれません。
それでも是非最後までやって欲しい。たった2時間と思えるはず。それだけの享受を受けられます!

でも、当エントリは「Vim」で書いたのですが、日本字入力する場合は、ちょっとめんどかったです。
編集モード→[Command+SPACE]で日本字入力モードに→ブログ内容書いて→ノーマルモード→[Command+SPACE]で英字入力モードに→移動とかコマンド打ったりとか。
初稿は「Sublime Text2」などで書いた方がいいかもです。
その後の編集やプログラミングは「Vim」が良いですと思いました。
慣れだけかも知れないですけど。

とにかくマスターしてやりますよ、Vim!
[PR]
by redchant | 2013-06-09 19:59 | 日記
2013年06月02日の日記、正規表現を一旦終えるの巻
Perlは文法を少し知っていたので、いきなり「すぐわかる オブジェクト指向 Perl」という本で勉強してました。
そしたら、少し進んだら「前著で散々やりました正規表現」(深沢千尋さん著)のような記述が出て来ました。

Perlを勉強しようとした理由は自分にもよく分からないのです。
でも「正規表現をマスターしたい」というのは前から夢のように思っていました。
Perlといったら正規表現でしょう。これ間違いない。
そう、「Perlを勉強したい」と「正規表現をマスターしたい」、

Matchしました!

ということで、正規表現のお勉強を始めたとさ。

深沢千尋さんの前著「すぐわかるPerl」は、少々古い本でして絶版なのかAmazonで新品はありませんでした。
出版社にも無かったです。
ということで、著名な結城浩先生の「新版Perl言語プログラミングレッスン入門編」で正規表現を勉強し始めました。
この本なぜか持ってました(^^;
Perlの文法を少し知っていたのもこの本を読んだからかな。たぶんかつての自分は挫折したのでしょうw
この本、なんと正規表現について2章も割いているんです。
わかりやすい結城先生の本なので頑張りました。

最後の方の、「正規表現のループ展開」や「HTMLの解析」や「CSVの解析」は難しくまだ完全に理解はできてないのです。
でも、基本はできたと思うので、結城先生の本はなんとか仮免許ということで。

今では、あんなに味気なかった正規表現も、おもしろく感じるようになりました。
いつかはオライリーの5,040円の528ページの「詳説 正規表現」も読みたいと思います。

※それでも正規表現のリファレンス本みたいな本はとりあえず買っておきました。
[PR]
by redchant | 2013-06-02 22:08 | 日記
2013年05月25日の日記、正規表現
正規表現を勉強中。
もちのろん Perl で。
すげー難しいっ;

プログラム

# 単語の出現数を確認するプログラム
use strict;
use warnings;

# 検証する文
my $line = "Humpty Dumpty sat on a wall,
Humpty Dumpty had a great fall;";

# 正規表現で単語単位に分割、配列へ格納
my @words = ($line =~ /[\w]+/g);

# 単語と単語の出現数を格納するハッシュ
my %count = ();

# 単語単位に分割された数ループ
foreach my $word (@words) {
$count{$word}++;
}

# 単語の出現数を出力
foreach my $key (sort keys %count) {
print "$key: $count{$key}\n";
}


出力結果

Dumpty: 2
Humpty: 2
a: 2
fall: 1
great: 1
had: 1
on: 1
sat: 1
wall: 1


初めの方は、単語単位に分割するのにかなり苦心した正規表現を組みました。
そ・れ・が!

/[\w]+/

これで済んでしまうなんて。。。
僕が苦心して組んだ(しかも完成しなかった)正規表現モドキはとても見せられません;
[PR]
by redchant | 2013-05-25 21:42 | 日記
2013年05月20日の日記、唐突にPerl!
唐突にPerl!
なぜかPHPの勉強を止めてPerlをやりたくなった!
よくわからん、自分(´・ω・`)
リファレンスまで勉強した。

データ型は、
・スカラー型(文字列、数値(Booleanは無いのかな?))
・配列型(スカラー型を格納)
・ハッシュ型(連想配列)
みたいです。

それぞれ、

my $fruit = "apple";
my @fruits = ("apple", "banana", "orange");
my %price = (apple => 10, banana => 20, orange => 30);

として頭に記号をつけて使い分けるようです。

出力は、スカラーでします。

print $fruit . "\n"; // apple
print $fruits[1] . "\n"; // banana
print $price{apple} . "\n"; // 10


とりあえず、今日はここまで。
[PR]
by redchant | 2013-05-20 20:46 | 日記
2013年05月09日の日記、ひさしぶりのMySQL
今日は、WEBアプリ開発の勉強の一環として、ひさしぶりに MySQL をいじりました。

SQLクライアントには、せっかく XAMPP をインストールしたので、「phpMyAdmin」を使ってみました。
しかし、簡易的にテーブルを参照するのには不便ないものの、「SQLを組む」ことに関しては不適でした。

次に試してみたのは、なにを血迷ったかターミナルに直接打ち込むということでした。
まあ、反応がダイレクト(?)なので良いのですが、これまた不適です。

次には、テキストエディタでSQLを組んで「phpMyAdmin」に貼り付けるといった方法でした。
これはこれで良いのですが、どうも思ったのと違うのですよね。

仕事では、「A5:SQL Mk-2」で SQLServer を覗いてます。
かなり、使いやすいです。
が、Windows用ですから。。。

と、思い出したのは、かつてインストールした「Sequel Pro」でした。
そうでした。
この使用感です。
ということで落ち着きました。

今日はツール探しがメインになってしまい、勉強が二の次になってしまいました。
こういうことは往々にしてあります。
しかし、

「目的は?」

「サービスを作ること!」

です!
プログラム(SQL含む)を組むのには簡易的なテキストエディタがあれば充分なのです!

・・・

といいつつ、テキストエディタを紹介したいのですがw
Mac使いの方は「Sublime Text 2」というエディタを試してみてください。
使い込んではいませんが、中々に使い良いです。美しいです。
本当は、VimとかEmacsとか使えれば良いのでしょうが、正直そこまでは到達できそうもありません。
そちらには突っ込まないでいきます。(設定ファイルをいじるのに vi は多少使いますが。)
「Sublime Text 2」も表面的な使い方になると思います。
[PR]
by redchant | 2013-05-09 23:14 | 日記