ヘタレなコード

2年ほど前に書いたPHPコードをを修正する機会があった。何の気なしに開いてみると、なんじゃこりゃー!という素敵なコードが目の前に現れた。こう、なんというか、「これは自分のコードではなく、誰か別のすごく出来ないヤツが書いたコードなんだ・・・」と心の底から思いたかった。

でも、ふと考えた。そう思えると言うことは、今の自分の能力はその当時に比べて上達したんだと。普段は納期に追われることもあり、ただひたすらコーディングをしているから、自分がどれだけ上手になったのか(あるいは下手になったのか)がいまいち見えにくい。けれど、こうしてたまには過去のコードを見るとその差は歴然として現れる。まあ、たまたま今回は嬉しい驚きだったけれど、これが悲しい驚きにならないよう日々努力していかなければな、と肝に銘じた。

それはそうと、こんなヘタレなコードを見ているといまにも書き直したい衝動に駆られるけれど、いろいろあって手は付けられない。ジレンマだけれど仕方がない。ヘタレとはいえきちんと動作してるしね。

perlでUTF-8の文字列を切り出す。

perlにて、UTF-8の文字列(日本語)をある特定の文字数(バイト数)で切り出しする必要があり、いろいろ調べているうち、次のサブルーチンを見つけました。

文字列を任意のバイト数で切り出しを行い、半端なバイト数である(UTF-8として成り立たない)場合にはその末尾を自動的に調整してくれます。大変に助かりました!

sub strcutbytes_utf8 {
my ($src, $maxlen) = @_;
my $srclen = length($src);
my $srcpos = 0;
while($srcpos < $srclen) {
my $character = substr($src, $srcpos, 1);
my $value = ord($character);
if($value < 0x80) { # ASCII characters
$srcpos ++;
next;
}
my $width = 6;
$width = 5 if($value < 0xFC);
$width = 4 if($value < 0xF8);
$width = 3 if($value < 0xF0);
$width = 2 if($value < 0xE0);
my $nextpos = $srcpos + $width;
last if($nextpos > $maxlen);
last if($nextpos > $srclen); # sequence is incomplete
$srcpos = $nextpos;
}
return substr($src, 0, $srcpos);
}

参照

Diskpartを使ってEISAパーティションを削除する。

Windows付属のディスクユーティリティでThinkpadのHDDにあるEISAを削除しようとしても、エラーのため(特になにも言われないが)削除することができない。

fdiskや他のOSから消しても良いのだけれど面倒くさいですし、なんとかWindows上で作業ができないかと探したところ、ぴったりのツールがありました。しかもMicrosoft謹製。

使い方は至極簡単で、コマンドラインからdiskpartと入力をすれば専用のツールが立ち上がり、パーティションの作成/削除など一通りのことを行ってくれます。

Microsoft Windows [Version 6.0.6001]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.
C:\Users\***>diskpart
Microsoft DiskPart バージョン 6.0.6001
Copyright (C) 1999-2007 Microsoft Corporation.
コンピュータ: ****
DISKPART> list disk
Disk ###  Status           Size     Free     Dyn  Gpt
--------  ---------------  -------  -------  ---  ---
Disk 0    オンライン         75 GB    75 GB
Disk 1    オンライン        186 GB      0 B
Disk 2    オンライン       3780 MB      0 B

詳しくは「Diskpart コマンドライン ユーティリティについて」のページを参照下さい。

symfonyとsymphony

今更ながらにsymfonyとsymphonyのスペルの違いに気がついた。

「symfony」とばかり普段はタイプしているので、いざ正しい「symphony」をタイプしようとしたときに危ないかも。いや絶対に間違えそう。。。

やる気がなくなったとき

何事もそうだけど、やる気があるときとそうでないときがある(仕事は別で)。私はそんなとき、ずっとネットサーフィンしたり、何か他のことをする。確かに焦りはあるけれど、自分に対して無理強いをせず、自然にあれをやってみたい、これをやってみたいと思うまでのほほんと。

ただ、興味を持ち続けられるようにはしているつもり。好きだからといえばそれまでだけど、興味を持ち続けるための努力は必要なのかなと思う。たとえば、関連のニュースやブログだけは毎日見るとか、興味のある分野の本だけはこまめにチェックして購入しておくとか・・・(そのまま開かずの書籍になることも往々にしてあるけれど^^;)。

そうしておくことで、やる気がなくなった時に別のことをしていても「そういえば、あんな本を買ったな。ちょっと見てみるか」とこの世界に引き戻される。

T60pでGavotte Ramdiskを試す。

今更ながらRAMDISKを試してみようと思い、いろいろいじってみました。使用したソフトはGavotte Ramdisk(まとめWIKI)。

まずは普通にGavotte RamdiskをインストールしてRAMDISKを作成する。が、タスクマネージャの使用メモリが激増することからどうもOS管理内から領域を取得している様子。コマンドプロンプトから「bcdedit /set pae forcedisable」をするも効果なし。

これはハード的な問題かと考えいろいろ調べてみると、BIOSにてMemory Remapping Featureを有効にしなければいけないという記述を見つけるが、BIOSをのぞいて見るも、そもそもそんな記述がなくてどうしようもない。

最後の希望にと、Memtest86をかけて本当に4GBを利用できるのかを調べたところ、やはり3GBちょっとしか認識しておらず、ここであきらめた。。。

原因としては、T60pのチップセットはモバイル インテル® 945PM Express チップセットであって、CPU/メモリ間のアドレス本数が32bit分しかなく、この本数にはPCIデバイス等の予約分も含まれるために、そもそもBIOSにて4GBが利用できない(表示はされるが)とのこと(私もなんとなくの理解ですので、詳しくはこちらを参照)。

何かの参考にと、私の環境でのメモリ容量を掲載します。

スペック

パソコン
ThinkPad T60p
OS
Windows Vista Ultimate SP1 32bit
CPU
Intel Core2 T7600(2.33GHz)
メモリ
2GB*2(合計4GB)

メモリの認識容量

BIOS
4096MB
POST
3069MB(3070MB?)
Memtest86
3070MB
タスクマネージャ
3069MB
コントロールパネルのシステム
4.00G

xargs

grepの効率の良い使い方を探していたらxargsを見つけました。標準入力からのファイル名に対してコマンドを実行してくれるようです。

たとえば、複数のディレクトリにまたがったhtmlファイル中の<title>タグに対してgrepしたいときなどに便利です。

% find -name '*.html' | xargs grep '<title>'

参考

見るなと言われると・・・

どこかのニュースサイトを巡っていたところJSHOPPERS.COMというショッピングサイトへのリンクをたまたまクリックしてしまった。ところが、アクセスしてみると、こんなメッセージが。

海外向けサイトであるため、原則的に日本国内からはご覧になれません。

なんというか、インターネットの世界での「国境」を初めて感じた。インターネットは基本的にオープンであって、情報の質は別としても、知りたいと望めば誰でもアクセスが可能なものだと思っていた。たとえそのサイトが有料であっても、それはお金を払えばよいし、年齢制限があるのなら、それまで待つ、もしくは近くの大人(子ども)に替わってもらえばよいが、「国によってアクセスの可否が決まる」というのはまた別の次元の話。こればかりは大多数の人にとっては基本的にどうしようもないものだと思う。じゃあ、僕は今日から「○○人」なんてことできないしね。
たしかYoutubeも似たようなことをしていたような。。。

きっと、これまでの歴史のなかで国境をこれほど意識しなくなった事柄はインターネットをおいて他にはない。海外なんてろくに訪れたこともない私がいうのも何だけれど(だからこそ、そう思うのかな)、そうして広がった世界観を狭めるようなことだけはしたくないし、されたくはない。

とはいえ、見るなと言われると見たくなるのが心情。ちょっと経由して覗いてこようかな・・・

OpenPNE3.0.1をインストールする。

ようやくリリースされた3.0.1をインストールしてみる。

基本はこちらのインストールガイドに沿って行います。なお、シリーズ3からはsymfonyの事前セットアップが必要。

まずこちらからファイルをダウンロードして解凍します。解凍先は「/公開ディレクトリ/op3/とします。次にテーブルの作成。今回はユーザー名/パスワード/DB名を共に’openpne’としてます。

$mysql -u root -p
mysql> CREATE DATABASE openpne DEFAULT CHARACTER SET utf8;
mysql> grant all privileges on openpne.* to openpne@localhost identified by 'パスワード(openpne)';

次に解凍したフォルダのsymfonyフォルダがあるディレクトリで次のコマンドを実行します。

$./symfony openpne:install

途中でいくつかの質問に答えます。最後に確認をしてOKのはずです。

Choose DBMS (mysql, pgsql or sqlite) <-DBMS名の選択
mysql
Type database username <-DBのユーザー名の選択
openpne
Type database password (optional) <-DB名の選択(オプショナル)
openpne
Type database hostname <-DBホスト名の選択
localhost
Type database name <-DB名の選択
openpne
Type database socket path (optional) <-ソケットパス名の選択(オプショナル)
The DBMS                mysql
The Database Username   openpne
The Database Password   ******
The Database Hostname   localhost
The Database Name       openpne
The Database Socket
Is it OK to start this task? (y/n) <-最終確認
y

インストールが完了したら、下記にアクセスします。

一般ページ
http://***.***.***/op3/web/
管理ページ
http://***.***.***/op3/web/pc_backend.php
id/pwはadmin/password

インストール途中で次の警告がでます。とりあえず動くので調査は保留・・・

Warning: symlink(): ファイルが存在します in /***/***/***/op3/lib/symfony/task/sfFilesystem.class.php on line 224