Ubuntu 10.04をPentium III 667MHzマシンに入れてみたw

実家の押し入れの隅に転がっていた10年近く前?のPentium3が刺さったまんまでむき出しになってたマザボを見つけたのでとりあえずUbuntu入れてみたw
インストールしようとCDドライブとか電源とか刺してCD入れて起動してみたけど、インストール途中でよく考えたらNIC無いやんとか思って一旦中断したw
そういやこの時代はNICオンボじゃなくてカード刺してたよなぁ。。。と遠い目をしつつゴソゴソと押し入れの箱の中を漁ってたらPCIのNICを発見!
いそいそと刺して再度インストールにチャレンジ〜
UbuntuってLiveCDだけど、メモリ不足(512MBあれば十分と思ったけど。。。)なのかわからないけどCD入れて起動したらインストーラーが起動するのね。
んでとりあえずインストールを進めるんだけど、当然ながら遅いw
言語→時間→キーボード→ディスク→アカウントとか進んでいくんだけど、もう1つ1つがもっさりしすぎw
結局1時間くらいかかったんだけど、インストールが完了した!
実は2回ほどCD読み取りエラー的なやつが出たから3回くらいインストール作業したけどな><
で、再起動したら無事立ち上がったんだけど、ソフトウェアアップデートがかかって(またそれも遅いがw)アップデート終了して再起動した後に事件が起きた!
こんな古いPCでも起動は笑えるくらい速いんだけど、ログインしてもいつまでたってもパネルとかメニューが出てこないwww
何度も再起動したけどムダで、仕方なくCtrl+Alt+F2とかその辺押してコンソールでログインしてとりあえずsshを入れてリモートで操作できるようにした。
その後も何度か再起動とかしてみてもよく分からない
右クリックとかでメニュー出るし、フォルダ作成してそれを開いてからフォルダ色々移動して、/usr/bin/firefoxとかやってfirefoxとか起動できたけど、んな使い方ありえないよねwww
なんかウィンドウマネージャーとかでおかしなことが起きてるような気がするけど、解決策もよくわからないので「ウィンドウマネージャーを別のにしたらイイんじゃね?w」とか単純に考えてUbuntuでも軽いらしいXubuntuってやつを入れてみた
>sudo apt-get install xubuntu-desktop
簡単すぎるw
リモートからこれやって再起動させたらXubuntuになってた!
そして無事ログインできたし、メニューとかパネルとかもちゃんと表示されたw
イマドキのPCと比べたらありえないくらい重いし、Atomと比べてもかなりもっさりだし、youtubeは紙芝居ですw
まぁ、webの閲覧とかぐらいならそんなにストレスなく、意外と使えます。
スペック
CPU:Pentium III 667MHz(ファミコンのカセットみたいな形のやつw)
M/B:たぶん815チップセット
メモリ:512MB(時代を考えるとかなり多めだよね)
HDD:80GB
ホコリ被ったPCとかある人は一度お試しあれ〜

Filed under: PC — maesan 11:38 PM

エクスプローラーがメモリ使い杉www

USB外付けHDDにあるゴミファイル(というかMacのリソースフォークね)を検索して、そのファイル達を一斉に削除したら

って2Gオーバーとか使いすぎだと思うのw

Filed under: PC — maesan 6:33 PM

Mojoはじめました#3 [モデル作成]

MojoでTodoアプリ作るということでそろそろ本題に入りますね〜
このテーマではMojoliciousでTodoって名前のアプリを作ります。
まずはアプリ生成
>mojolicious generate app Todo
>cd todo

なんか色々と自動で生成されますの
とりあえず動作させる
>perl script/todo daemon –reload
後ろに–reloadつけるのはファイルを更新した時とかに勝手に読み直してくれるっぽいので
ただ、エラー出た時とか再起動しないと動作がおかしい時があったので気休め程度に
ブラウザでhttp://localhost:3000/で確認でとりあえずおk
前もちょと書いたけど仕様
・期日と内容を登録する
・状態は「まだ」「やってる」「おわった」の3段階
・完了日も登録
・データはDBに保存する(MySQL)
まずはモデルを作成
・モデル名はEntry
・構造はこんなの

CREATE TABLE `entries` (
`id` int(11) NOT NULL auto_increment,
`todo` text collate utf8_unicode_ci NOT NULL COMMENT ‘todo’,
`due_date` date default NULL COMMENT ‘期日’,
`finished` date default NULL COMMENT ‘完了日’,
`state` tinyint(4) NOT NULL COMMENT ’0:まだ, 1:やってる, 2:おわった’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

んでこのページを参考に実装〜
Mojoを使って自作ウェブアプリをよりポータブルに!:第3回 サンプルフレームワーク:Mojolicious
Mojoliciousの流儀かはわかんないのですが、どうやらクラスとかの定義はlib/Todo/以下に置くっぽいので
>vim lib/Todo/Entry.pm

package Todo::Entry;
use strict;
use warnings;
use DBI;
use base 'Mojo::Base';
my $database = "todo_mojo";
my $con = "DBI:mysql:$database";
my $db_user = 'root';
my $db_pass = 'root';
sub read {
my ($self, $id) = @_;
my %entry = (id => 0, todo => "", state => 0, due_date => "", finished => "");
#idが渡ってきたらDBから読み取りに行く
if (defined($id) || $id != 0) {
my $db = DBI->connect($con, $db_user, $db_pass);
my $sth = $db->do("set names utf8");
my $sql = "select * from entries where id = '$id'";
$sth = $db->prepare($sql);
$sth->execute() || die($db->errstr);
if ($sth->rows() > 0) {
my $dat = $sth->fetchrow_hashref();
%entry = %{$dat};
}
$sth->finish();
$db->disconnect();
}
return %entry;
}
sub save {
my ($self, %entry) = @_;
my $sql;
my $new_id = $entry{id};
my $db = DBI->connect($con, $db_user, $db_pass);
my $sth = $db->do('set names utf8');
if ($entry{id} == 0) {
#idが0の場合は新規登録なのでinsert
$sql = sprintf('insert into entries(todo, state, due_date, finished) values ("%s", %d, "%s", "%s")',
$entry{todo}, $entry{state},
$entry{due_date}, $entry{finished});
$sth = $db->do($sql);
$new_id = $db->last_insert_id($database, $database, $db_user, $db_pass);
} else {
#idが入っている場合は更新なのでupdate
$sql = sprintf('update entries set todo = "%s", state = "%d", due_date = "%s", finished = "%s" where id = "%d"',
$entry{todo}, $entry{state},
$entry{due_date}, $entry{finished}, $entry{id});
$sth = $db->do($sql);
}
$db->disconnect();
return $new_id;
}
1;

とりあえずDBから読み込んでハッシュにして返すのと、ハッシュを受け取って保存する処理。
読み込みはidを受け取ってそのidのレコードを読み込んで返す。もしidが渡ってこなかったり0が来たら空っぽのを作って返す。
保存はidに値が入ってたらupdateする。0の場合はinsertする。んで保存したレコードのidを返す感じで。
実際に新規登録した時とかidが欲しい場合が多いのでこうした。
あんまりフレームワーク関係ないけど、perl慣れてないからここまで作るのに時間かかった><
ホントはORマッパー風の汎用的なコード書きたかったけど挫けたw
何か変な書き方とかおかしなところとかツッコミお願いします〜
馴染みが無かったけどやってみて馴染んだコト
・ハッシュの扱い
 %hoge{key}じゃなくて$hoge{key}とか
 %hoge = {key1 => $val1, key2 => $val2};じゃなくて%hoge = (key1 => $val1, key2 => $val2);とか
 ただ、$hoge->{key}とか%{$hoge}とかたぶんまだちゃんと理解できてないと思う。。
・サブルーチンのパラメータは参照で来るから注意
・hoge->foo() みたいな呼び出しの場合、第一引数にパッケージ名(≒クラス名?)が渡ってくる
・コンストラクタは一般的にnewって名前で作る
 →Mojoの場合、Mojo::Base(か更に上か)で定義されてんだよね?
・最後に1;って書く。
 →調べたら理由は理解はできたけどあまりカッコヨクナイネ。。。
まだよく馴染んでない、てかわかってないコト
・perlのオブジェクト指向ではクラス≒パッケージ?
・クラスのメンバ変数ってどんな風に扱うのがよい?
 →サンプルで__PACKAGE__->attr(hoge => ‘ほげ’);とかやってるのはperlの流儀?mojoの流儀?
とりあえず次はコントローラー作る

すぐわかる オブジェクト指向 Perl
深沢 千尋
技術評論社
売り上げランキング: 65539
おすすめ度の平均: 5.0

5 すばらしいです
5 しつこいくらいに丁寧に解説
5 分かりやすい語り口
5 WEBの海での救命道具のような本
5 マスターコースを読む前に

Filed under: Mojo — maesan 4:00 PM  Comments (1)

PHP4と5でstrtotimeの挙動が違った

ちょっとはまったので覚え書き
$res = strtotime(パースできない文字列);
PHPの5(確認したのは5.3.1)では
$resにはfalseが入る
PHPの4(確認したのは4.3.9)では
$resに現在の日付の00:00:00のUnixタイムスタンプが入る
これってかなり挙動が違うので非常に困る><
しかも現在時刻じゃなくて今日の00:00:00のUnixタイムスタンプとかイミフ…
というかまだPHP4が現役のレンタルサーバーって多いよね…
いい加減ヤメテ欲しい…

PHP4→PHP5移行ガイド いまこそPHP資産をマイグレーション [PHP徹底攻略シリーズ] (PHP徹底攻略シリーズ)
橋本 英勝 桑村 潤 三宅 泰裕
ソフトバンククリエイティブ
売り上げランキング: 356291

↑こういう本が出たのもう3年前だぜ…

Filed under: Programming — maesan 7:05 PM
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)