2008年10月31日金曜日

寒くなってきた

もうじき11月ということもあってか寒くなってきましたね。
朝起きるのが辛くなってきました。布団からでるのが辛い。
だって2度寝が気持ちいいんだもの・・・><
ジョギング始めてから、寝つきがよくなってそれのせいか寝起きもよかったんだけど
寒さのせいで以前の様に布団から出れなくなってきました。
そろそろ毛布だそうかな~、コタツも用意しないといかん。
でも今年はベッド買ったので微妙にコタツを置く場所が取れない。
置けたとしても座れない、寝っころがれない・・・。
ベッドで寝るのはとても快適なので買ってよかったんだけど
他に入らない物(ピアノとか本棚)が部屋を占領してるですよ。
なかなか物が捨てれないんだよねぇ・・・。
いらない本と服を捨てれば本棚とタンスをいくつか捨てれそうなんだけど。
11月の三連休で模様替えしてみようかな。

さて、寒くなってきましたが風邪引かないように暖かくしていきまっしょい。

2008年10月28日火曜日

プログラミングの話

プログラミングの心構えエントリーの流れを受けてdankogaiが弾言してた。
ひさびさにdankogaiにちょ~同意。




How to Code などブロックをendで閉じるか}で閉じるかほどの意味しかないことを。



しかし、その差が気にならない人が良いプログラマーになるということもまずないのだけれども。



404 Blog Not Found:そろそろ3つのポイントについて「弾言」しとくか から引用


人のコード見てていつも思うのはほんとにこれ。
インデントをタブで行うか空白で行うか、改行を空にするかそんなのは意味が無い。
でもそれを気にしている人と気にしていない人は雲泥の差がある。
気にしない人はコードは書けるけどメタな視点では書けない。
ただそこで動いているだけのコードしか書けない。
他のコードへの影響を考えて無いからコードの流用もできない。

コードの差はわずかなのにここまで影響するのは不思議。
コードって結構人の内面を表してるからコードをポストして脳内メーカーみたいな結果を返すサービスっておもしろいかもw

2008年10月23日木曜日

マスゴミふぃるたー

麻生さんのべらんめぇ口調は好き嫌いがあると思うけど僕は結構好きです。
そんなべらんめぇ口調の麻生さんとぶらさがり記者が対決した記事がこちら。

【麻生首相ぶらさがり詳報】「ホテルのバーは安全で安い」(22日昼) (1/4ページ) - MSN産経ニュースチャマニへ

ちなみにはてブのコメントによるとぶらさがり記者は新人の役目だそうで、
麻生さんはわかってて記者を厳しい口調で教育してるとも取れるね。
そして時事通信のふぃるたーがかかるとこちらww。

夜会合、今後も続ける=ホテルのバー「安い」-麻生首相(時事通信) - Yahoo!ニュースチャマニへ

逆切れ、逆質問とかなりまくしたててます。
もちろんそれは事実かもしれないけどその原因は記者にあるんだよね。
それをいっさい書いてないあたりが怖い。
普段観てるテレビや新聞なんてのはこういうことを前提に読まないといけないですね。

2008年10月21日火曜日

SEとPGとキャリアパス

なかなかおもしろい考察の記事があがってたので感想でも。

下流から見たIT業界: SEとPG、どっちが頭がいい?(1)チャマニへ
下流から見たIT業界: SEとPG、どっちが頭がいい?(2)チャマニへ

SE(システムエンジニア)とPG(プログラマー)
うちの会社でもゆくゆくはSEにとかってよく言われます。
でも、自分的には生涯PGになりたいなどと思っていてSEねぇ・・・と鼻で笑っています。
正直SEって何する仕事か曖昧ですよね。
よく言われるのは要求定義から詳細設計を作るといった分野でしょうか。
しかしこれは上の記事によると昔PGが単純労働だった時代に行われていた手法なのだそうです。
その昔、PCが各自一台設置されていなかった時代には紙の上でプログラムを書いて
それを現場にある唯一のPCに打ち込むといったことが行われていました。
紙に書いたプログラムを打ち込むだけだからまさに単純労働ですね!
その印象を今まで引きずっているため、PGは単純労働者とみなされSEより下に見られるんですね。
でも現状は違います、まず各自がPCを持っているし、机上で書いたプログラムを打ち込むだけなんてしないんです。
ある程度の仕様を聞かされて、そこからソースコードを自分で考えて打ち込むのです!!
これが単純労働と言えますか?完璧に知的労働ですよね。
自分で考えて動かなければいけないことが沢山あるんです。
だから正直SEとPGって分けて考えるのは古臭いし、未だに将来はSEだ!なんて言っちゃてる人は
どんなけ時代錯誤だよ、現場わかってね~と言わざるを得ません。
他にも様々な背景があります、それは上記の記事に書かれていますので一度読んでみてください。
PG不遇の時代が早く終わるのを願っています。

2008年10月20日月曜日

10日も書いてない!

間が空くとブログを書くのが億劫になる。

何故か?

間を空けたのだから書く内容をレベルアップさせないといけないというプレッシャーがあるからだ。
ということで適当なエントリーでも。


ピアノ関連
先週の月曜はフジ子・ヘミングのコンサート、土曜はピアノの発表会に行った。
発表会と言っても最近弾いてないので簡単な小曲を。
ぶっつけ本番だったけど思ったより弾けた。
ピアノまたやろうかな、コード覚えて弾き語りとかやろうかな。


最近思うこと
自分の思ってることって人に言葉で伝わらないよね。
いや、伝えかたがヘタな言葉ってのは伝わらないという感じかな。(伝えるがゲシュタルト崩壊)
父親は伝え方がヘタな人で、そういう性格に自分が似ててすごく嫌。
自分が喋らなかったってのもあるけど、実家にいるときに話したことがない。
話したとしてもなんかヘラヘラしててうわべだけの会話。
腹を割って話した事って無いし、真剣に向き合った事がない。
向き合いたいわけじゃなくて向き合えないんだよね。
新人を教えるようになってすごくその気持ちはわかる。
わかったところでどうするつもりはないけど、なんかモヤモヤすんだよね。
こういうのトラウマって言うんだろうか・・・。

2008年10月10日金曜日

グーグルリーダー+チャートマニアックス

とりいぞぎ

元コードはグーグルリーダー+はてブ数のグリモン
grb+-20061113.user.js - ヒビノキロク

これにチャートマニアックスのページに飛ぶリンクを追加しました。
時系列で見るとまた一味違った感じがしておもしろいですね~。
さすがamachangさん!!


// ==UserScript==
// @name GR+?B
// @namespace http://d.hatena.ne.jp/nozom/
// @description show ?B button and count in Google Reader
// @include http://www.google.com/reader/view/*
// @include https://www.google.com/reader/view/*
// ==/UserScript==

// original author is id:kusigahama
// see http://d.hatena.ne.jp/kusigahama/20051207#p1

(function() {
const user = 'mamotena';

var timerID = null;
var busy = false;
var urlCache = new Object();

function getUrlCache(url) {
if (typeof urlCache[url] == 'undefined')
urlCache[url] = new Object();
return urlCache[url];
}

String.prototype.htmlescape = function() {
return this.replace(/&/g, "&").replace(/</g, "<");
}

function findNode(root, xpath) {
var result = document.evaluate(xpath, root, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
if (! result.snapshotLength) return null;
return result.snapshotItem(0);
}

function getBookmarkCountSpan(node) {
return findNode(node, 'span[@class="hatena-bookmark-count"]');
}

function insertChartSBM(targetNode, url) {
var a = document.createElement('a');
a.setAttribute('href', "http://amachang.art-code.org/chart/?" + url);
a.setAttribute('target', '_blank');
a.appendChild(document.createTextNode('C'));

with (targetNode) {
appendChild(document.createTextNode(" ("));
appendChild(a);
appendChild(document.createTextNode(") "));
}
}

function insertBookmarkCount(targetNode, url, count) {
var a = document.createElement('a');
a.setAttribute('href', "http://b.hatena.ne.jp/entry/" + url);
a.setAttribute('target', '_blank');

var str = (count > 0 ? "" + count : "no") + " user" + (count != 1 ? "s" : "");
a.appendChild(document.createTextNode(str));

with (a.style) {
fontSize = "0.9em";
textDecoration = "none";
if (count >= 5) {
fontWeight = "bold";
backgroundColor = "#fff0f0";
color = "#f66";
}
if (count >= 10) {
backgroundColor = "#ffcccc";
color = "red";
}
}

with (targetNode) {
appendChild(document.createTextNode(" ("));
appendChild(a);
appendChild(document.createTextNode(") "));
}
}

function createBookmarkCount(url, count) {
var node = document.createElement('span');
node.setAttribute('class', 'hatena-bookmark-count');
if (count > 0) {
insertBookmarkCount(node, url, count);
} else {
node.appendChild(document.createTextNode(' '));
}
insertChartSBM(node, url);
return node;
}

function setBookmarkCounts(infoArray) {
for (var i = 0; i < infoArray.length; i++) {
var entry = infoArray[i].entry;
var url = infoArray[i].url;
var title = infoArray[i].title;
var entryContainerTitle = infoArray[i].entryContainerTitle;
var collapsedTitle = infoArray[i].collapsedTitle;
var entryActions = infoArray[i].entryActions;

var count = getUrlCache(url).count;
if (typeof count != 'undefined') {
if (typeof collapsedTitle != 'undefined') {
var node = createBookmarkCount(url, count);
collapsedTitle.insertBefore(node, collapsedTitle.childNodes[1]);
}
if (typeof entryContainerTitle != 'undefined') {
var node = createBookmarkCount(url, count);
entryContainerTitle.insertBefore(node, entryContainerTitle.childNodes[1]);
}
}
}
}

function callXmlrpc(requestbody, infoArray) {
const endpoint = "http://b.hatena.ne.jp/xmlrpc";
function onload(response) {
if (response.responseText.match(/<fault>/)) {
// clearInterval(timerID);
//setInterval(timerID, 15000);
//alert("xmlrpc call failed: " + response.responseText + "\n" + "request: " + requestbody);
} else {
var pattern = /<name>([^<]+)<\/name>\s*<value><int>(\d+)/g;
var m;
while (m = pattern.exec(response.responseText)) {
getUrlCache(m[1]).count = m[2];
}
setBookmarkCounts(infoArray);
}
busy = false;
}

// alert('xmlrpc call :' + requestbody);
GM_xmlhttpRequest({ method: "POST", url: endpoint, data: requestbody, onload: onload });
}

function createAddBookmarkIcon(url, title) {
var a = document.createElement('a');
a.setAttribute('href', 'http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title=' + escape(title) + '&url=' + escape(url));
a.setAttribute('target', '_blank');

var img = document.createElement('img');
img.setAttribute('src', 'http://b.hatena.ne.jp/images/append.gif');
img.setAttribute('alt', 'add bookmark');
img.setAttribute('title', 'add bookmark');
with (img.style) {
borderWidth = '0px';
}
a.appendChild(img);

var node = document.createElement('span');
node.setAttribute('class', 'hatena-bookmark-icon');
node.appendChild(a);

return node;
}

function createBookmarkIcon() {
var img = document.createElement('img');
img.setAttribute('src', 'http://www.hatena.ne.jp/images/user_bookmark.gif');
img.setAttribute('alt', 'bookmarked');
img.setAttribute('title', 'bookmarked');

var node = document.createElement('span');
node.setAttribute('class', 'hatena-bookmark-icon');
node.appendChild(img);

return node;
}

function addBookmarkIcon(currentEntry) {
var entryContainerTitle = findNode(currentEntry, './/div[@class="entry-container"]//h2');
var entryActions = findNode(currentEntry, './/div[@class="entry-actions"]');
if ((entryContainerTitle == null) || (entryActions == null)) return;

var link = entryContainerTitle.firstChild;
var title = link.firstChild.textContent;

function onload(response) {
if (response.responseText != null) {
var responseXML = (new DOMParser()).parseFromString(response.responseText, "application/xml");
if (responseXML != null) {
var channel = responseXML.getElementsByTagName('channel')[0];
if (channel != null) {
var items = channel.getElementsByTagName('items')[0];
if (items != null) {
var lis = items.getElementsByTagName('li');
if (lis.length > 0) {
getUrlCache(link.href).bookmarked = true;
entryActions.appendChild(createBookmarkIcon());
} else {
getUrlCache(link.href).bookmarked = false;
entryActions.appendChild(createAddBookmarkIcon(link.href, title));
}
}
}
}
}
}

var bookmarked = getUrlCache(link.href).bookmarked;
if (typeof bookmarked == 'undefined') {
getUrlCache(link.href).bookmarked = 'loading';
var url = 'http://b.hatena.ne.jp/' + user + '/rss?url=' + escape(link.href);
GM_xmlhttpRequest({ method: "GET", url: url, onload: onload });
} else if (bookmarked == 'loading') {
// skipped
} else if (bookmarked) {
entryActions.appendChild(createBookmarkIcon());
} else {
entryActions.appendChild(createAddBookmarkIcon(link.href, title));
}
}

function timerHandler() {
if (busy) return;

var entries = document.getElementById('entries');
if (entries == null) return;

var currentEntry = document.getElementById('current-entry');
if (currentEntry != null) {
if (findNode(currentEntry, './/span[@class="hatena-bookmark-icon"]') == null) {
addBookmarkIcon(currentEntry);
}
}

busy = true;

var infoArray = new Array();
var reqUrlArray = new Array();
var reqUrlHash = new Object();
for (var i = 0; i < entries.childNodes.length; i++) {
var entry = entries.childNodes[i];
var collapsedTitle = findNode(entry, './/div[@class="collapsed"]//h2');
var entryContainerTitle = findNode(entry, './/div[@class="entry-container"]//h2');

var link = null;
var title = null;
if (entryContainerTitle != null) {
link = entryContainerTitle.firstChild;
title = link.firstChild.textContent;
} else if (collapsedTitle != null) {
link = collapsedTitle.parentNode.parentNode.firstChild;
title = collapsedTitle.textContent;
}

if (link != null) {
var info = { entry: entry, url: link.href, title: title };
if ((collapsedTitle != null) && (getBookmarkCountSpan(collapsedTitle) == null)) {
info.collapsedTitle = collapsedTitle;
}
if ((entryContainerTitle != null) && (getBookmarkCountSpan(entryContainerTitle) == null)) {
info.entryContainerTitle = entryContainerTitle;
}
if ((info.collapsedTitle != null) || (info.entryContainerTitle != null)) {
infoArray.push(info);
if ((getUrlCache(link.href).count == null) &&
(! reqUrlHash[link.href])) {
reqUrlHash[link.href] = true;
reqUrlArray.push(link.href);
}
}
}
}

if (infoArray.length == 0) {
busy = false;
return;
}

if (reqUrlArray.length == 0) {
// all items are found in the cache
setBookmarkCounts(infoArray);
busy = false;
} else {
// avoid xmlrpc call failure in 'too many params' error
reqUrlArray = reqUrlArray.splice(0, 50);

var request = '<?xml version="1.0"?>\n<methodCall>\n<methodName>bookmark.getCount</methodName>\n<params>\n';
for (var i = 0; i < reqUrlArray.length; i++) {
var url = reqUrlArray[i];
request += "<param><value><string>" + url.htmlescape() + "</string></value></param>\n";
}
request += "</params>\n</methodCall>\n";
callXmlrpc(request, infoArray);
}
}

// be careful not to be too busy
timerID = setInterval(timerHandler, 15000);
})();

2008年10月4日土曜日

ポーカーおもろい

もう始めて2ヶ月くらいかな?
どんどん嵌るポーカーの世界。
名古屋でライブで打てる店を探し中だけどよくわかんない。
一応名古屋でも大会とかあるみたいなんだけどね。
あとココに行きたいです!!

=-=-メイドカジノ-=-= アキバギルド


ライブでポーカー打ちながらコスプレも楽しめるという・・・なんて素敵なお店なんでしょうか!!
名古屋支店できないかなーまじできないかなー。

今日の一枚


2ヶ月目にしてようやく万チップだしました。
要するにジャックポットって奴。(正確にはトーナメントのウィナーズスロット)

油断してたらいきなり止まったんでスロットの写メは取れなかったけど・・・。
今週は全然だめで今日で最後の貯メダルだったんだけどこれでかなり復活!!
また心置きなく通える(*^-^*)
でも、ポーカーの成績はあんまり・・・。ランク一つ落としちゃったし。
全国一位はまであと3万弱の経験値。

2008年10月3日金曜日

路上でちゅっちゅ

さすが金曜日?住宅街をジョギングしてると路上でちゅっちゅしてるカップルがちらほら。
それもスーツ着た社会人っぽいカップル。
お金もってんだからホテル行けよ(´д`)
おまいらがいるせいで遠回りしなきゃいけねーんだよ><

閉話休題・・・いや、閑話休題


うわ~、へいわきゅだいじゃなくてかんわきゅうだいか!!!結構使ってたよ><
ま、それはいいとしてこないだ予約してたピアノ曲集50枚セットのCDがようやく届きました。


無駄に箱がでかい!


丁寧にコンポーされてます。


正方形の箱型ケース。カラフルです。


開けるとCDと解説書。


解説書には索引が無いので作曲者からCDを探すのが大変。お気に入りのドビュッシーを発見!


ジャケットにはデカデカと作曲者名が書かれています。CDラベルはシンプル。


さっそく聞きましたが、やっぱ生演奏の音源はいいですね。
今までMidiデータで聞く事が多かったんだけど、生演奏はとても人間っぽいっていうか
アナログな演奏が心地いいです。結構有名な演奏家らしいし(よく知らない
全部聞くまでに当分かかりそうだけど、楽しみながら聞いていこうと思います。

ピアノ・マスターワークス