2009年12月29日火曜日

自分用メモ

このエントリーをはてなブックマークに追加
synergyc [IP address]

タイトル修正:車輪の再発明しました。

このエントリーをはてなブックマークに追加
Mozilla Re-Mix: 2009年 [moziller]がお世話になった13個のGreasemonkeyスクリプト
http://mozilla-remix.seesaa.net/article/136662241.html


追記の追記
初期投稿時に、不適切な表現がありましたので削除しました。
目を通してしまった方々には不愉快な思いをさせてしまい、大変申し訳ございませんでした。


追記
@os0x:@ArcCosine ちなみに、AutoPagerizeToggleRequestが追加されたのは最近のことで、それまではMouseEventを投げるしかなかったので、センスとかはあまり関係がないかと…

@miya2000:@ArcCosine ちょちょ、善意でコードを公開してる人に対してその言い方はないよ。(知り合いで何でも言い合える仲とかなら問題ないだろうけど)

大変失礼しましたorz
今まで無かったのですね……。




って事でソースコードを読んで、os0xさんからAutoPagerizeToggleRequestを教えていただいて、完成しました。
スクリプトはこちら
Iキーでon/offします。

miya2000さん色々アホなPostしてごめんなさい。
os0xさん直球ど真ん中の回答ありがとうございます。
この場を借りてご協力に感謝の言葉をお伝えしたいと思います。
ありがとうございました。

2009年12月25日金曜日

気づいた事

このエントリーをはてなブックマークに追加
iPhoneやめました
この記事を読んで一点気になったことがあった。
それは以下の文だ

しかし、iPhoneを買ったものの使いにくいと文句を言う人に対し、ヘビーユーザーが「どういうものか調べないで買うのが悪い」「iPhoneを使いこなせていないから不便に感じるのだ」といった言葉を投げかけるシーンを、いまだによく目にするのも事実。こういうやりとりがあること自体、やはりiPhoneはまだまだ普及したとは言えないという証拠なのではないか……iPhoneを1年近く使い、そしてやめた今、私はそう思っています。

このiPhoneはPCやブラウザといった単語に置き換えることが出来ると思った。
そして、調べないで買うのが悪いとか、使いこなせないから不便だと言うのは、男性側の意見なんだろうなぁと感じた。
女性と男性の思考パターンの違いは周知の通りで、お互いに理解出来ない所がある。
とはいえ、こういったちょっとした違和感を敏感に感じ取るのは開発者(?)として必要な能力だと思ってる。
PCやブラウザなどは一部の詳しい人だけが使うものでは無くなっていて、よく分からない初心者の人でも使わざるを得ない状況になっている。
その上で、良く分かっている人(≒スキルが高い人)にとって分かりやすいI/Fは、良く分からない人(≒スキルが低い人)にとっては分かりづらいI/Fである事を覚えておかなければいけない。

男性はPCやブラウザやiPhoneのようなガジェットを自分で調べる傾向が強いので(全ての人がそうだとは限らないけれど)自然とスキルアップする。
でも、女性はそういうのを面倒くさがる人が多いと僕は思っている。
これは単純に興味の範囲の違いである。

それならば、物を作る時に誰をターゲットにすべきかで当然I/Fの設計等は変わってくる。
それを僕は今まで意識していなかった。これは完全に見落としていた所だ。
「誰にとっても使い易いI/F」というのは非常に限られている上にしょぼい。
僕はしょぼいI/Fは大嫌いだし、ユーザもすぐ飽きると思う。
ならば、ターゲットユーザを見極めて、その上でそのユーザが何度も使いたいと思うI/F設計をしたいなと思う。
まあ、ただの戯言で御座居ます。
以上。

2009年12月23日水曜日

世界最速が帰ってきた。Opera 10.5 pre-alpha リリース!

このエントリーをはてなブックマークに追加
世界最速ブラウザ。
それがかつてのOperaの二つ名でした。
しかし、Firefox3、Safari、そして、Google Chromeの登場により、Operaは最速の座を明け渡すという屈辱を味わいました。
この一年間ちょっとはまさに苦闘の日々だったでしょう。


しかし、Operaチームはやってくれました。
世界最速の名を取り戻しに来たのです。
昨日リリースされたOpera 10.5 pre-alphaバージョンは現在世界最速のブラウザです。(ArcCosine環境限定ですがw)
Sunspiderのスコア最速を叩き出してくれました!

結果
Opera 10.5 pre-alpha Total: 686.2ms +/- 1.7%
Safari 4.0.4(531.21.10) Total: 770.8ms +/- 1.1%
Google Chrome 4.0.266.0 Total: 798.8ms +/- 2.7%
Firefox 3.5.6 Total: 1846.4ms +/- 1.4%

(参考中の参考)
Opera 10.20 Alpha 1 Total: 9490.2ms +/- 12.5%

※IEは比較対象にすらならないので除外。




尚、Opera 10.5 pre-alphaは名前が示す通り、Opera社内でもテストがほとんど終わってないバグがいっぱいあるブラウザですので、常用は不可です。
そして、Operaに慣れ親しんでいない方は触らない方が幸せです。
インストールして、大事なデータがクラッシュしても、責任は負えませんのであしからず。
ともあれ、次のOpera10.5は期待して良いと思います。
以上

2009年12月18日金曜日

ニコニコ動画の毎時リストでLDRizeするUserScriptを書いた。

このエントリーをはてなブックマークに追加
完全に自分用で、Operaでしか確認してない。いつも通りのScriptです。
Enterで動画を開けるのは便利かなぁ。


// ==UserScript==
// @name nico ldrize
// @namespace http://looxu.blogspot.com/
// @include http://www.nicovideo.jp/ranking/mylist/hourly/all
// @author Arc Cosine
// @version 1.0
// ==/UserScript==
(function(){
var keyHandler = {
'J' : function(){ NicoLDRize.scroll(1); },
'K' : function(){ NicoLDRize.scroll(-1); },
'ENT' : function(){ NicoLDRize.openTab(); }
}
var NicoLDRize = {};
NicoLDRize.init = function(){
var specialkey = {'13' : 'ENT'};
NicoLDRize.pos = 0;
var allow = document.createElement('div');
allow.id = 'nicoldrize';
allow.style.width = '16px';
allow.style.height= '16px';
allow.style.background= '#008800';
allow.style.position = 'absolute';
allow.style.top = '196px';
allow.style.left = '160px';
document.body.appendChild(allow);

window.addEventListener('keypress',function(e){
if( e.target.tagName == 'INPUT' || e.target.tagName == 'TEXTAREA' ) return;
var keyCode = e.which;
var pressKey= (typeof specialkey[keyCode] == 'undefined') ? String.fromCharCode(keyCode).toUpperCase() : specialkey[keyCode];
if( typeof keyHandler[pressKey] != "function" ) return;
e.preventDefault();
keyHandler[pressKey].apply();
},false );

}
NicoLDRize.scroll = function(num){
NicoLDRize.pos += num;
if (NicoLDRize.pos < 0) { NicoLDRize.pos = 0 };
if (NicoLDRize.pos > 100) { NicoLDRize.pos = 100 };
var divs = document.querySelectorAll('div.content_672 > div');
var pos = divs[NicoLDRize.pos].offsetTop - 20;
document.body.scrollTop = pos;
document.getElementById('nicoldrize').style.top = pos + 60 + 'px';
}
NicoLDRize.openTab = function(){
var aTags = document.querySelectorAll('div.content_672 a.watch');
var url = aTags[NicoLDRize.pos-1].href;
window.open(url);
}
NicoLDRize.init();
})();

2009年12月17日木曜日

60分かかった

このエントリーをはてなブックマークに追加
10分でコーディング|プログラミングに自信があるやつこい!!
http://ameblo.jp/programming/entry-10001721422.html

LDCにもPostしたけど、今日ふと思いついてもっとシンプルなコードができたので修正。
修正には10分も掛からなかったけど、この記事を書いてる時間を含めてトータル60分と言うことでw

考え方はシンプル。
もらったカードの数で割れる数字(=limit)まで計算して、後は順番に配るだけ。
余りを計算する事で、配る数値(例えば、numが3だった場合、0~2)を計算して出してるのが余計なループとかを省くポイント。

最初は+=で表現しようと思ったけどうまく行かなかったので、三項演算子でごまかしてる。
邪道な書き方なのでしょーがない。

も・ち・ろ・ん・I・E・非・対・応・!

まあでも僕はツンデレだから、↓のフォームはIEでも動くよ。







<html>
<head>
<title>test</title>
<script type="text/javascript">
window.addEventListener("load",function(){ init(); }, false );
var init = function(){
document.getElementById("fire").addEventListener("click",function(){
var num = document.getElementById("num").value;
var cards = document.getElementById("cards").value;
var card_sprit = new Array();
var limit = cards.length - (cards.length % num);
for( var i=0; i<limit; i++ ){
card_sprit[i%num] = (i<num) ? cards[i] : card_sprit[i%num]+cards[i];
}
document.getElementById("result").innerHTML = "resuluts: " + card_sprit;
}, false );
}
</script>
</head>
<body>
<input size="40" id="num" type="text" value="3" /><br>
<input size="40" id="cards" type="text" value="123123123" /><br>
<input id="fire" type="button" value="calc" />
<div id="result"></div>
</body>
</html>

2009年12月16日水曜日

文章を書くときに意識すること

このエントリーをはてなブックマークに追加
当たり前の事だけど、文章を書くときにその文章の「テーマ」を考えるよね。
これを考えないでいきなり書くのはせいぜい感想文位。
でも、感想文だって突き詰めると○○に関する感想ってテーマがあるよね。

僕は、なにか文章を書く時は必ずメインテーマとサブテーマを考える。
大体、メインテーマは1個、サブテーマは2,3個でまとまる。
後は経験則と勘で凌ぐ。

最も、テーマが明確にならない内に文章を書き出したりする人も世の中には入る。
書いているうちに見つかるだろうという甘い考えなのだろう。
その辺をキチンと見分けて書かないと意味ないでしょうがw

文章を書くのが辛いと思う人は、まずテーマを決めてみましょう。
そうすると上手く次の言葉が出てくるかもしれませんよ?
以上

2009年12月10日木曜日

スライド携帯楽しい

このエントリーをはてなブックマークに追加
G9を手に入れてようやく遊べるレベルまで持ってこれました。
音楽を聞きながらメールするのというのはとても楽しいものですね。
付属のゲームがあるのですが、欠片も遊んでいないのはやっぱり遊び方のベクトルが普通の人と違うのかなぁと思う次第でして、ま、気が向いたら遊ぼうかな。

文字打ちがもう少し楽しくなれば、スライド携帯はもっと楽しくなるかもしれない。
そういう意味では、iPhoneはよく出来たUIを設計したなと思う。
やっぱり、ボタン数は少ない方が人間的には良いのだろう。
ただし、キーボードとマウスは除く(ぁ

タッチパネルの凄さはボタンの見た目は少ないけれど、実際にはInputを多く増やしてる所なんだなと改めて思いました。
さすが、Apple。人間工学がよく分かってる。
僕ももう少しその辺を勉強した方が良いかもしれないなぁ。

project twstar

このエントリーをはてなブックマークに追加
タイトルは無意味です。
ええ、全く持って無意味です。

本日、携帯+BTの音楽環境を整えました。
その為だけにLismoを入れるのも腹立たしかったのですが、短時間解決のためには致し方なし。
CDからインストールしたのですが、起動した瞬間にVerアップ通知が。
……これは酷い。

SonicStageのパチモンってか亜種ってかともかく使いづらいと感じました。
PCの起動とかが遅くならないと良いなぁ(・ω・)

2009年12月8日火曜日

携帯を新しいのにしました

このエントリーをはてなブックマークに追加
ということで、携帯の新しい機種を購入しました。今までポケベル打ちだったので、若干慣れていませんがその内慣れてくるでしょう。

2009年12月1日火曜日

ズバッと三振毎度ありっ!

このエントリーをはてなブックマークに追加

ズバッと三振毎度ありっ! powerd by ピアプロ

名曲!

なんでこんなにブックマークがあるんだろう?

このエントリーをはてなブックマークに追加
Gmailのキーボードショートカットによる生産効率向上が界王拳並みな件 - カイ士伝
http://blogging.from.tv/wp/2009/11/30/3016

書いてある内容は別にどうって事は無いし、公式Help読めば一発で分かることなのにはてぶエントリ数ブックマーク数が異常だったりする。
何でかなと思って適当な仮説を立ててみた。

1.タイトルの釣り効果が抜群だった
 界王拳というドラゴンボール世代を釣るには最適な言葉をタイトルに埋めてたのが良かった

2.意外とgmailのショートカットをきちんとまとめたエントリが無かった
 gmailのショートカットはgoogle maniaさんが既に紹介してるんだけど、全てを細かに紹介していなかった。
 きちんと文章読む人ならこれだけで十分だけど、適当に流し読みする人にはこれくらい事細かに書いてる方が親切なのかもしれない
 でも、キチンと検索すると一覧という意味ではこれだけあるので、決定打では無いと思う。
 http://gmail.1o4.jp/shortcuts.html
 http://bizmakoto.jp/bizid/articles/0901/07/news005.html
 ちなみに、本家ヘルプ
 http://mail.google.com/support/bin/answer.py?hl=jp&answer=6594

3.画像が良かった
 説明に使ってるスクリーンキャプチャが上手かった。
 塗りつぶし含め分かりやすかった。
 これは他のまとめには無い特徴だった。

4.実はgmailのキーボードショートカットキーは意外と使われていない
 多分、これが最大のポイントだと思うのだが、gmailのショートカット機能を使っていないユーザは多い。
 それも、ちょっとどころか大多数を占めているのではないだろうか。
 これは、UI的な事を考えれば一目瞭然なのだが、「ブラウジング」はマウスをメインに行うのが主である。
 一部の変態を除き、キーボードでgmailを操作するという「発想」がユーザ側には無いのだろう。
 その為、折角用意されているキーボードショートカットを使うユーザは少なかったのだろう。
 仮に居たとしても、彼ら変態に取っては「当たり前」の事なので、エントリにする価値が無いと判断し、今までキチンと書かれてこなかった。
 したがって、今回のエントリが大うけだったのではないだろうか。

という事で、総合すると良エントリだったのでしょう。
文句をつけようと思ったけど、冷静に分析するとやっぱりブックマークされる要因はあるものだなぁという事が分かり、一つ勉強になった。

2009年11月28日土曜日

自分のために 人のために

このエントリーをはてなブックマークに追加
自分のために何かを作るという思想が、クリエイターと呼ばれる人たちの根本にあると僕は思っている。
ただ、その中でプロと呼ばれるレベルまで技術を高める人は自分のために+αつまり、人のためにという要素が入って初めてその域に達すると思う。

もちろん、プロ、アマの基準は適当なので正確な表現ではないと思うが、僕の中では少なくとも自分のためだけに何かを作ってる人はアマチュアの領域を出ていないと思う。
それを踏まえた上で、以前作っていたmodokiは、まさにアマチュアレベルの作品だった。
正直、僕が使えれば幸せだった。


しかし、今作ってるmodokiは違う。
不特定多数の利用者を想定して作っている。
その為、技術的なレベルに差異は無い物の、細々とした点ではかなり念入りに作っている。
本当に軽微な修正でも慎重にやってるのが、以前のmodokiとの違いだ。
自分が手を出した事が無い技術にも手を出している。
これは僕が使うだけだったら不必要な機能だが、他の人が使うことを考えたら、覚えざるを得ないものだった。

そして、結局巡り巡って人のためにやってる事が、自分のためになっている。


自分のためだけにやるのはとても楽しいし、楽チンであるが自身の成長が少ない。
しかし、人のためにやるのは苦労が多いけれども、自身の成長があり、なおかつ他の人も喜んでくれる(可能性がある)。
結局、情けは人の為ならずという訳ですね。

自分のために色々やってる方々、そろそろ人のためになにかやってみませんか?

2009年11月26日木曜日

Opera 10.20 alpha

このエントリーをはてなブックマークに追加
Opera 10.20 αバージョンがリリースされました。
本家Blog
今回はWidgetに力を入れていて、スタートメニューやデスクトップやクイック・ラウンチにショートカットを作成できます。
さらに、Operaが起動していなくても起動する仕組みになっています。
素晴らしい。
Adobe AIRへの対抗馬になるのかっ?!
対抗馬は僕の妄言と妄想ですので、それを信じてはいけません。
ともあれ、α版とはいえ面白い機能だと思いますので導入を検討してみるのはいかがでしょうか?

popIn Rainbowの新バージョンが出ました。

このエントリーをはてなブックマークに追加
popIn Rainbowを導入する
↑導入はこちらよりどうぞっ!

2009年11月25日水曜日

Tween modoki開発状況

このエントリーをはてなブックマークに追加
遊んでいる訳では無いけど中々進まないのもアレなので、発破をかける意味で(自分自身に)、スクリーンショットをうpします。
今度はこんな感じー。

2009年11月21日土曜日

WINEのfont設定

このエントリーをはてなブックマークに追加
1.IPAフォントとIPAモナーフォントをインストールする。
sudo apt-get install ttf-ipafont ttf-ipamonafont

2.$home/.wineのuser.regファイルに以下を追加する。


[Software\\Wine\\Fonts\\Replacements]
"MS Gothic"="IPA \x30e2\x30ca\x30fc \x30b4\x30b7\x30c3\x30af"
"MS Mincho"="IPA \x30e2\x30ca\x30fc \x660e\x671d"
"MS PGothic"="IPA \x30e2\x30ca\x30fc P\x30b4\x30b7\x30c3\x30af"
"MS PMincho"="IPA \x30e2\x30ca\x30fc P\x660e\x671d"
"MS UI Gothic"="IPA \x30e2\x30ca\x30fc UI\x30b4\x30b7\x30c3\x30af" "\xff2d\xff33 \x30b4\x30b7\x30c3\x30af"="IPA \x30e2\x30ca\x30fc \x30b4\x30b7\x30c3\x30af"
"\xff2d\xff33 \x660e\x671d"="IPA \x30e2\x30ca\x30fc \x660e\x671d"
"\xff2d\xff33 \xff30\x30b4\x30b7\x30c3\x30af"="IPA \x30e2\x30ca\x30fc P\x30b4\x30b7\x30c3\x30af"
"\xff2d\xff33 \xff30\x660e\x671d"="IPA \x30e2\x30ca\x30fc P\x660e\x671d"


実際にはIPAモナーフォントしか使ってないけれど一応、IPAフォントもインストールしといた。
これは完全な趣味w
これで、msgothicとか無くてもなんとかなる。
素晴らしい。

情報元ネタ
@IT:Linuxで動く便利ツール[Wine](2/2)

最近お気に入りのボールペン

このエントリーをはてなブックマークに追加
ジェットストリームというボールペンをご存知でしょうか?

このボールペン、めちゃくちゃ書き心地が良いです。
普通のボールペンより1.5倍くらい滑らかに紙の上を滑ります。
コンビニでも普通に売ってますので、見つけたら保護しましょう(笑)
今までボールペンにはさほど拘っていなかったのですが、この書き心地を覚えてしまうと他のボールペンが書き辛いと感じてしまう程の差が出ます。
お勧めです。

(以下、AA)

2009年11月15日日曜日

UbuntuのWINEでやることメモ

このエントリーをはてなブックマークに追加
大体のアプリなら動くけど、一部のアプリが動かなかったのでメモ

必要なのはmsgothic.ttfとmsmincho.ttf
$home/.wine/drive_c/windows/Fonts/にコピーするだけ。
とても簡単。
DropBox経由するとファイルのやりとりが楽ちん。
ちぃ、覚えた。

2009年11月13日金曜日

ubuntuのネットワークが通った!!

このエントリーをはてなブックマークに追加
今まで散々インストールしても上手く動かなかったubuntuなのですが、よーやく動くようになりました。
インストールしたノートPCはMS-1006という超絶にアレゲな奴なんですけど、今まで上手く動かない理由が分からなかった。

んで、結局カーネルのブートオプション切替でさくっと動いた。
早く教えてくれよぉおおお!!!
#そんなアレゲなのにUbuntuを入れる人は貴方くらいしか居ません。

って事で、この記事が参考になりました。

How To: NETDEV WATCHDOG: eth0: transmit timed out
http://howtoxyz.blogspot.com/2008/07/netdev-watchdog-eth0-transmit-timed-out.html

acpi=off

これをカーネルオプションにつけるだけ。素晴らしい。
今まで音とかも出て無かったんだけど、これで出るようになった。
もし、ubuntuでネットワークが上手く使えなくてはまってた方はこの方法を試してみてください。
ではでは。

俺俺フレームワーク作成なう。

このエントリーをはてなブックマークに追加
Modoki ver1.0には俺俺JavaScriptフレームワークを搭載する予定。
jQueryを参考に、もう少し機能限定した物を作る予定。
車輪の再発明とも言う。
聞こえん!何も聞こえんぞっ!!

2009年11月12日木曜日

Pixivの漫画ページではショートカットキーが使える

このエントリーをはてなブックマークに追加
http://www.pixiv.net/member_illust.php?mode=manga&illust_id=*******
↑のようなページではショートカットキーが有効ですね。

例:)http://www.pixiv.net/member_illust.php?mode=manga&illust_id=7099895

戻る
・Hキー、Aキー、leftキー

進む
・Lキー、Dキー、rightキー

拍手
・Iキー、Wキー



おお、便利便利。

高専カンファレンスの反響

このエントリーをはてなブックマークに追加
本人が一番びっくりしてますが、思った以上の反響です。
公開したLTの資料は既に1000Viewを超えており、見てくださった方々に感謝です。

嬉しかったのは、Operaの中の人に言及された事かなぁ。
斉藤さん、ありがとうございます><

edvakfさんのもう一つのブログに晒し上げされたのがきっかけだと思いますが(笑)
という事で、edvakfさん++;

にしても、今wandじゃなかったんですねー。
Password Managerだったとは。うーむ、勉強不足でした。


/* 以下余談
それにしても、Shift+Escが有名じゃなかった事にびっくり。
Operaのショートカットって特殊なのが多いから仕方が無いとはいえ、はてぶコメントにこんなにも「知らなかった」という声が上がるとは思っていなかった。
応用編も分かりやすく資料にまとめようかしらん。
いや、別に公式のショートカット一覧を見れば分かる事なので、僕がまとめる意味はあまり無いのですが。
ってか、Opera Wikiを見ると大体載ってるはずだし。
とはいえ、うーむ。うーむ。うーむ。

余談ここまで 余談長いよw */

2009年11月5日木曜日

Javascriptにおけるキーイベントフックについて

このエントリーをはてなブックマークに追加
散々それっぽいコード書いているので、アレなんですが。

Firefox、Chrome、Safariに関しては、keydownイベントを監視すると幸せになれる。
Operaはkeypressイベントをフックすると幸せになれる。
IE? シラネ。

後は、キーコードの判定ですが、80%位は

var keyCode = (e.which || e.keyCode);
var key = String.fromCharCode(keyCode);
alert(key);

で、押したキーを判定できる。
toUpperCase();を使うと、全部大文字に出来るので、そうした方が幸せかも。

Shiftキー同時押しとかの判定は、e.shitKeyで判定できる。

ともあれ、Operaは少しキーボードイベントに癖があるという話でした。
おしまい。

2009年11月3日火曜日

Tweenもどきアップデート

このエントリーをはてなブックマークに追加
といっても、さほど機能変更はしていません。
ただ、本気でTweenから乗換を(本人が)したいと思い始めたので、その内とってもアレな感じになるかもやっ?!
……ま、やる気があるという事は良い事です。

http://tunsns.net/modoki/

2009年10月30日金曜日

可愛いいいいいいいいいいいい!!!

このエントリーをはてなブックマークに追加

tweenもどき

このエントリーをはてなブックマークに追加
tween modokiというWebサービス(?)を作っています。
先日、Ver0.5になったので、宣伝も兼ねてここに記載しようと思います。

・これは何?
 Twitterクライアントです。
 Tweenという非常に便利なクライアントの動きを真似て作っています。
 作っていますが、機能劣化してます。

・使用シーンは?
 ネットカフェとかでふとTwitterしたくなった時とかかなぁ。

・URLうp!URLうp!
 ほい つhttp://tunsns.net/modoki/

・使い方を詳しく
 今のバージョンだと、開いた瞬間に2個くらいBASIC認証用のダイアログが出てくると思います。
 その内これは直します(^^;
 で、そのダイアログにTwitterのIDとパスを入力すれば後は自動的に画面が表示されます。
 操作は基本的にはキーボードで行います。
 「j」 次の発言を読む
 「k」 前の発言を読む
 「Enter」 (リスト部)Replyを自動挿入 (入力部)発言をPost
 「Tab」 発言の場所への画面切り替え
 「n」 次のタブへ
 「p」 前のタブへ
 「e」 発言内のURLっぽいのを開いてくれる。先頭のみ。
 「s」 発言をふぁぼる
 「Space」 最後の未読へ移動
 「G」 リスト部最後へ移動
 「gg」 リスト部先頭へ移動

・分かりづれーよ
 基本的にはVimっぽい動きをすると思っていただければおkです。

・Optionの説明は?
 Optionで設定できるのは、outputzの復活の呪文、フッター、後ログイン用のID、パスの登録です。
 各項目はそれぞれそのままの意味です。
 outputzで自分の出力を計測したい人にお勧めですねっ!

・セキュリティが気になります。
 データの保存にはCookieを使っています。こちら側のサーバでは何も保存していません。

・そういえば、これってどのブラウザで動くの?
 Opera、Firefox、Safari、Google Chromeといったブラウザで動作確認しています。
 IE以外でしたら大体動きます。

・これって何か工夫してる?
 超工夫してます。ソースを見てもらうと分かりますが、このアプリはHTML+CSS+javascriptだけで構成されてます。
 とってもシンプルなクライアント構成になっています

・HTMLじゃなくて、XHTMLじゃね? しかも嘘くさい。
 ……それは色々と失敗してまして……。
 うぃ、むっしゅ。その内直します。

・tunsns.netつながらないぞ、ふぁっく
 codereposに最新版をうpしています。
 チェックアウトはこちらからどうぞ http://svn.coderepos.org/share/websites/modoki/
 こっちでそれっぽい何かを見れるかもです http://bulkya.blogdb.jp/share/browser/websites/modoki/

・最後に一言どうぞ
 Tween作者すごいです。

2009年10月29日木曜日

影絵すげえ……

このエントリーをはてなブックマークに追加

ニコニコ動画用のUserCSSと俺俺UserJSを更新したよ。

このエントリーをはてなブックマークに追加
CSSはこっち。

/* For player page */

#WATCHHEADER{
padding-top: 540px !important;
}

div#flvplayer_container{
position: absolute !important;
top : 110px !important;
}

/* For ranking page */

div.content_312 {
display: none !important;
}

div.content_672 {
width:984px !important;
}

table.rank_data {
width:974px !important;
}

div > div.thumb_frm,div > div.thumb_frm_rank_1,div > div.thumb_frm_rank_2 {
width: 960px !important;
}

marquee {
-moz-binding: none !important;
display: block;
padding-left: 5px !important;
height: auto !important;
}



UserJSはこっち。

// ==UserScript==
// @name nico description
// @namespace http://looxu.blogspot.com/
// @include http://www.nicovideo.jp/watch/*
// @author Arc Cosine
// @version 2.1
// ==/UserScript==
(function(){
/** simple version of $X
* $X(exp);
* $X(exp, context);
* @source http://gist.github.com/3242.txt
*/
var $X = function (exp, context) {
context || (context = document);
var expr = (context.ownerDocument || context).createExpression(exp, function (prefix) {
return document.createNSResolver(context.documentElement || context).lookupNamespaceURI(prefix) ||
context.namespaceURI || document.documentElement.namespaceURI || "";
});

var result = expr.evaluate(context, XPathResult.ANY_TYPE, null);
switch (result.resultType) {
case XPathResult.STRING_TYPE : return result.stringValue;
case XPathResult.NUMBER_TYPE : return result.numberValue;
case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
// not ensure the order.
var ret = [], i = null;
while (i = result.iterateNext()) ret.push(i);
return ret;
}
return null;
}

//無駄なオブジェクト指向www
var NDesc = function(){

this.com_style = {
'color' : '#1259C7',
'text-decoration' : 'underline',
'margin-right' : '5px'
};

this.options = [
{ 'text' : 'Video詳細', 'func' : function(){ NDesc.prototype.description_toggle(); } },
{ 'text' : 'mitter', 'func' : function(){ NDesc.prototype.popup(); } },
{ 'text' : '広告表示', 'func' : function(){ NDesc.prototype.advert_toggle(); } }
];

this.mitter = false;

//fire!
this.init();
}

NDesc.prototype.init= function(){
//add input box
this.createInput();

//hide parts
this.description_toggle();
this.advert_toggle();

//add focus key event
document.addEventListener( 'keypress', function(e){
if (e.target.tagName == 'INPUT') return;
if (e.keyCode == 32) {
NDesc.prototype.use_hotkey();
e.preventDefault();
}
}, false );

//create parts
this.pos = $X('//div[@id="des_2"]/p[@class="font12"]/a')[0];
if( typeof this.pos == "undefined" ){
//this.pos = $X('//div[@id="des_2"]/p[@class="TXT12"]/nobr/a[last()]')[0];
this.pos = $X('//div[@id="des_2"]/table/tbody/tr/td/p[@class="font12"]')[0];
}
for( var i=0; i<this.options.length; i++ ){
this.createParts( this.options[i] );
}
}

NDesc.prototype.createParts = function( data ){
var node = document.createElement('span');
node.appendChild(document.createTextNode(data['text']));
this.setCSS(node,this.com_style);
this.pos.parentNode.insertBefore( node, this.pos );
node.addEventListener( 'click', function(){ data['func'].apply(); }, false );
}

NDesc.prototype.setCSS =function( node, options ){
for( var option in options ){
//It's cooooool css setting code! I think so... :)
var st_op = option.replace( /-([a-zA-Z])/, function(m){ return m[1].toUpperCase(); });
node.style[st_op] = options[option];
}
}

NDesc.prototype.toggleObject = function(xpath){
var t= $X(xpath)[0];
t.style.display = ( t.style.display == 'none' ) ? 'block' : 'none';
}

NDesc.prototype.description_toggle = function(){
this.toggleObject('//div[@id="des_2"]/table[2]');
this.toggleObject('//div[@id="des_2"]/table[last()]');
}

NDesc.prototype.advert_toggle = function(){
this.toggleObject('//div[@id="WATCHFOOTER"]');
this.toggleObject('//div[@id="PAGEFOOTER"]');
}


NDesc.prototype.popup = function() {
var autoclose = (!this.isMitter)? '&autoclose=true' : '';
this.isMitter = true;
// For eyevio
var normalized_url = location.href;
var url = "http://mitter.jp/bookmarklet/popup", v = "0";
url += '?v=' + v + '&url=' + encodeURIComponent(normalized_url) + '&title=' + encodeURIComponent(document.title)+ autoclose;
var options = 'toolbar=0,resizable=1,scrollbars=1,status=1,' + ((autoclose.length!=0)? 'width=1,height=1' : 'width=450,height=230');
var open_func = function() {
var w = window.open(url, 'mitter', options);
if (!w) {
alert('Popup window from Mitter seems to be blocked. Please allow popup window to post on Mitter.');
} else {
w.focus();
}
};
open_func();
}

NDesc.prototype.createInput = function(){
if (window.parent != window) return;
NDesc.prototype.input = document.createElement('input');
NDesc.prototype.input.readOnly = true;
NDesc.prototype.input.autocomplete = 'off';
NDesc.prototype.input.addEventListener('focus', function() {
NDesc.prototype.input.style.backgroundColor = '#fcc';
NDesc.prototype.input.value = 'Hotkey available.'
}, false);
NDesc.prototype.input.addEventListener('blur', function() {
NDesc.prototype.input.style.backgroundColor = '#9D9';
NDesc.prototype.input.value = 'Hotkey unavailable.'
}, false);
NDesc.prototype.input.addEventListener('keypress', NDesc.prototype.key_event, false);
NDesc.prototype.input.style.margin = '0px 0px 5px 10px';
var head = document.getElementsByTagName('h1')[0]
head.appendChild(NDesc.prototype.input);

}

NDesc.prototype.use_hotkey = function(){
NDesc.prototype.input.focus();
}

NDesc.prototype.play_pause = function(){
var flvplayer = document.getElementById('flvplayer');
if (!flvplayer) return;
if (flvplayer.ext_getStatus() == 'playing') {
flvplayer.ext_play(0);
} else {
flvplayer.ext_play(1);
}
}

NDesc.prototype.volumeup = function(){
this.volume(5);
}

NDesc.prototype.volumedown = function(){
this.volume(-5);
}

NDesc.prototype.seekleft = function(){
this.seek(-10);
}

NDesc.prototype.seekright = function(){
this.seek(10);
}

NDesc.prototype.seek2top = function(){
this.seek(Number.NEGATIVE_INFINITY);
}

NDesc.prototype.volume = function(vol){
var flvplayer = document.getElementById('flvplayer');
if (!flvplayer) return;
var cur = Number(flvplayer.ext_getVolume());
var to = cur + Number(vol);
if (to > 100) to = 100;
if (to < 0 ) to = 0;
flvplayer.ext_setVolume(to);
}

NDesc.prototype.seek = function(time) {
var flvplayer = document.getElementById('flvplayer');
if (!flvplayer) return;
var len = Number(flvplayer.ext_getTotalTime());
var cur = Number(flvplayer.ext_getPlayheadTime());
var to = cur + Number(time);
if (to > len) to = len;
if (to < 0 ) to = 0;
flvplayer.ext_setPlayheadTime(to);
// for shotage of backward seek.
var cur = Number(flvplayer.ext_getPlayheadTime());
if (time < 0 && cur - to > 5 && to > 10) {
flvplayer.ext_setPlayheadTime(to - 10);
}
}


NDesc.prototype.key_event = function(e){
var handler = {
'o' : function(){ NDesc.prototype.description_toggle(); },
'm' : function(){ NDesc.prototype.popup(); },
'a' : function(){ NDesc.prototype.advert_toggle(); },
' ' : function(){ NDesc.prototype.play_pause(); if( !NDesc.prototype.isMitter ){ NDesc.prototype.play_pause(); NDesc.prototype.popup(); } },
'k' : function(){ NDesc.prototype.volumeup(); },
'j' : function(){ NDesc.prototype.volumedown(); },
'h' : function(){ NDesc.prototype.seekleft(); },
'l' : function(){ NDesc.prototype.seekright(); },
'H' : function(){ NDesc.prototype.seek2top(); } //Shift+H
};
var t = e.target;
if( t.nodeType == 1 ){
var pressKey = String.fromCharCode(e.which);
if( typeof handler[pressKey] == "function" ){
e.preventDefault(); //Stop Default Event
handler[pressKey].apply();
}
}
}

var o = new NDesc();

})();


誰得?
俺得。

2009年10月25日日曜日

ピアプロをキーボードで快適操作するUserScript書いたよ

このエントリーをはてなブックマークに追加
ま た そ の ネ タ か

はい。またそのネタです。
コードは以下のとおり。
後で、userscriptsへ投稿します。
例のごとくOperaでしか動作確認していません。
qキーで前のイラスト
wキーで次のイラスト
bキーでブックマーク
先頭のページで多分動きがオカシクなるけど、気にしない(マテ


// ==UserScript==
// @name piapro
// @namespace http://looxu.blogspot.com/
// @include http://piapro.jp/content/*
// @author Arc Cosine
// @version 1.0
// ==/UserScript==
// License Public Domain
(function(){
var PIAPRO = {
init : function(){
window.addEventListener('keypress', function(e){
PIAPRO.addKeyBind( 'b', function(){ PIAPRO.bookMark(); }, e);
PIAPRO.addKeyBind( 'q', function(){ PIAPRO.moveLink(0); }, e);
PIAPRO.addKeyBind( 'w', function(){ PIAPRO.moveLink(1); }, e);
},false);
},
addKeyBind : function( keyChar, func, eve ){
var t=eve.target;
var n=t.tagName.toLowerCase();
if( t.nodeType != 1 || n == 'input' || n == 'textarea' ){
return;
}
var pressKey = eve.which;
keyChar = (keyChar=='Enter') ? 13 : keyChar.charCodeAt(keyChar);
if( pressKey == keyChar ){
eve.preventDefault(); //Stop Default Event
func.apply();
}
},
bookMark : function(){
var url = 'http://piapro.jp/bookmark/';
var id = location.href.match(/content\/(.*)/)[1];
var cont_id = document.getElementsByName('content_type_id')[0].value;
var param = 'mode=add&id=' + id + '&content_type_id=' + cont_id + '&folder_id=0';
var xhr = new XMLHttpRequest();
xhr.open( 'POST', url, false );
xhr.onreadystatechange = function(){
if( xhr.status == 200 && xhr.readyState == 4 ){
location.reload();
}
}
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xhr.send( param );
},
moveLink : function(mode){
var imgs = document.querySelectorAll('#main_in680 div.mt10 div div a img');
var target = [];
for( var i=0, l=imgs.length; i<l; i++ ){
if( /gen/.test(imgs[i]['src']) ){
target.push(imgs[i].parentNode);
}
}
var link = target[mode];
if( typeof link != 'undefined' ){
location.href = link;
}
}
};
PIAPRO.init();
})();

2009年10月16日金曜日

お金は無いけど幸せ

このエントリーをはてなブックマークに追加
フリーランスとして生きてそろそろ一年が経とうとしている。
とりあえずアルバイトという形でそれなりの収入源は得られているが、勤務時間は短いので収入はそれなり。
けれど、幸せな毎日を送っている。

なんでこんなに幸せなのだろうと考えてみると、僕は自分の時間をすごく重要視する人間であるからだという結論に至った。
正社員として働いていると、どうしても自分の時間には限界がある。
極端な話、土日が唯一の自由時間なのに体力回復に全て充てられるという生活は良くある事だった。

今は違う。
少なくとも週のうち四日は自由時間でその間何をしても良い。
好き勝手に自分のしたい事をしている。
それでも、生きていけてる。

もちろん、節約はそれなりにしないといけないし、預金だって乏しい(毎月残高10万切る生活してるしな!)
でも、その乏しい収入の中で本当に必要なものだけを吟味して買えることは凄く幸せな事なんだと改めて気づいた。
なので、この一年で買ったもので無駄な買い物はかなり少ない
#無いわけではない

以前はお金が足り無すぎると妙な圧迫感に支配されてたが、以外にもお金が無い方がゆとりが出ているのもまた事実。
もちろん、今後の老後の事とかキチンと考える人にとっては僕の現在の残高状況は超危機的状態で孤独死まっしぐらの駄目人間はよ死ねと言わんばかりなのは分かるが、その時になったらその時でどうにかなるだろう。

人間ある程度の楽観は必要なのである。
日本人は国民性として、楽観が異常なくらい欠如してると思う。
無駄な方向への楽観は強いのだが、生活基盤に関しては大多数の人がかなりの不安を抱えて生きてる。
これは一体どういう事なのだろう。僕には結論を出せない。


最も、世界的な規模で見ても生活への不安は日々募っているはず。
なぜ募るのか。何が不安の要因になってるのか。
それが分かれば楽チンなんだけれども、人によってその不安の要因は異なる。
(そして僕の場合はたまたま自分の時間という非常に安直なものであったというオチね)

大量に金が無いと駄目という人や、物が無いと駄目という人、あるいは愛されないと寂しくて死ぬというどこのレジェンドラビットだと突っ込みたくなる人がいーっぱい居るけど、そういう人は本当にそれが自分にとって大切なものかどうか今一度考え直したほうがいい。

案外、物や金のプライオリティは低いし、異性からの愛情も無くてもなんとかなる。
#なんとかならない人もいるので、その人はそれに突っ走ってね
ま、ぐだぐだと書いたけども、僕は今日も幸せです。

2009年10月15日木曜日

玉虫色の表現

このエントリーをはてなブックマークに追加
昔の職場で使われた言葉に「玉虫色の表現」というのがあった。
読み手によっていかようにも解釈出来る表現を揶揄してそう言っていた。
これが良いか悪いかは別として、僕はこの表現を身に着ける技術を学んだ。
世の中0か1か、YesかNoで通らないというのを知ったきっかけの一つでもある。

僕自身、文章を書くときはなるべく正確、且つ明解に書く事を目標としているが、この玉虫色の表現はそれの真逆に位置する。
とにかく曖昧に、不正確に書くのだから。
いや、もちろん、厳密に読めば不正確ではないのだが、意図的に「勘違い」させる事が出来るので僕は不正確だと思う。

プログラムの設計書は正確に記載するのが望ましいが、あらゆる政治上(笑)の理由により、正確に書く事が望ましくない状況は腐るほどある。
そこで全てを詳らかにするよりは、玉虫色の表現を使って表面的な隠ぺい工作を行う事により、物事が上手く進める方が物事が効率的に進む。
これが正しい方法だとは思わないが、実務をやってると真面目にぶつけると難色を示す人が多いのだ。

最も玉虫色の表現は自分の直属の上司に見せる段階では使わないほうが望ましい。
直属の上司には全部公開して、その上で玉虫色の表現を使ってごまかすか、ストレートに行くかを提示するのが「筋」の通し方だと思う。
この筋を通さないと最終的にお鉢は自分に回ってくる。
筋もどこまで通すかの見極めも難しくて、これはその職場職場で色々変わってくるが、それはその場その場の「空気」を読む必要がある。
論題と外れるのでこれはここまでで止めておくが、この筋通しの見極めも中々面白い。

さて、ぐだぐだと書いてきたが、ここで読者に質問。
玉虫色の表現を使ってる人、いますか?
経験者から言わせてもらうと、その技術は今後役立つかもしれないし、役立たないかもしれない。

職場のカラーに合わせてその技術の引き出しを上手く使い分ける事が重要です。
玉虫色の表現は便利ですが、使いどころを誤ると後で痛いしっぺ返しが来ます。
ですが、直球勝負よりもこのような変化球を混ぜる事でピンチを切り抜ける事が出来る事もあります。

そんな事をふと思いついた午後でした。
落ち? 無いよ?

2009年10月12日月曜日

Pixivの評価を変化させるUserScript書いた

このエントリーをはてなブックマークに追加
Pixivの☆って、hover属性を上手く使ってるので、空間ナビゲーションが使えないっ!!
って事で、UserScript書いた。(書くな)
以下をコピペするだけでおkだぜ!
もちろん、Opera10でしか確認してません(笑)
多分、FirefoxとかChromeでも動くと思う。
多分……。

こちらでも公開してます。
http://userscripts.org/scripts/show/59567

キー説明

評価アップ … 'l'キー
評価ダウン … 'h'キー
決定   … エンターキー


姑息な手段でエンターキーを判定してます。詳細はコードを参照くださいw


// ==UserScript==
// @name pixiv star
// @namespace http://looxu.blogspot.com/
// @include http://www.pixiv.net/member_illust*
// @author Arc Cosine
// @version 1.0
// ==/UserScript==
// License Public Domain
(function(){
var PIXIV = {
hover_size : 30,
my_rate : 0,
init : function(){
window.addEventListener( 'keypress', function(e){
PIXIV.addKeyBind( 'h', function(){ PIXIV.rateChange(-1); }, e);
PIXIV.addKeyBind( 'l', function(){ PIXIV.rateChange(1);}, e);
PIXIV.addKeyBind( 'Enter', function(){ PIXIV.rateSend();}, e);
},false );
},
addKeyBind : function( keyChar, func, eve ){
var t=eve.target;
var n=t.tagName.toLowerCase();
if( t.nodeType != 1 || n == 'input' || n == 'textarea' ){
return;
}
var pressKey = eve.which;
keyChar = (keyChar=='Enter') ? 13 : keyChar.charCodeAt(keyChar);
if( pressKey == keyChar ){
eve.preventDefault(); //Stop Default Event
func.apply();
}
},
rateChange : function(num){
PIXIV['my_rate'] += num;
if( PIXIV['my_rate'] < 0 ) { PIXIV['my_rate'] = 0 };
if( PIXIV['my_rate'] > 10 ) { PIXIV['my_rate'] = 10 };
var chk = document.getElementsByClassName('r1-unit')[0];
if( chk.tagName.toLowerCase() == 'li' ){
return;
}
for( var i=1; i<11; i++ ){ //It's bad roop code ...;-)
var rate_star = document.getElementsByClassName('r'+i+'-unit')[0];
rate_star.style.width = (PIXIV['hover_size'] * i) + 'px';
if( i <= PIXIV['my_rate'] ){
rate_star.style.background = "url('http://source.pixiv.net/source/images/star_rating.gif') left center";
rate_star.style.zIndex = 2;
rate_star.style.left = '0px';
}else{
rate_star.style.background = "url('http://source.pixiv.net/source/images/star_rating.gif') left top";
rate_star.style.zIndex = 1;
rate_star.style.height = '30px';
}
}
},
rateSend : function(){
var w = (typeof unsafeWindow != 'undefined' ) ? unsafeWindow : window;
w.send_rating(PIXIV['my_rate']); //pixiv api
}
}
PIXIV.init();
})();

2009年10月7日水曜日

IEで動かない一行掲示板作ってみたよー。

このエントリーをはてなブックマークに追加

ボカロアイコン 一行掲示板

イメージは上図の通り。
みっくみ~くにし~てやんよ~♪
開発はJavaScript+CSS+Rubyという定番的な定番です。
ファイル保存なのでとってもアレですし、回線がアレなので、アレでアレでアレです。
#分からん

2009年9月30日水曜日

音楽CDを作る

このエントリーをはてなブックマークに追加
ひょんな事からMP3→音楽CDを作る事になりまして、便利なツールねーかーなーと検索したらヒットしたのがDeepBurner。
窓の社のダウンロードページ
以前から使ってたけど、まさかMP3から直接変換出来るとはっ!!


んで、早速変換してさくっと作ってみました。
適当に作ったけどまあまあの音ですね。

2009年9月29日火曜日

素晴らしい出来

このエントリーをはてなブックマークに追加
このPVの出来が素晴らしい。



原曲の良さを生かしつつ、独特な解釈により秀逸なオチを作り上げている所が憎い。
ちょっと元気が無くなった人は、これ見て元気だそう。

こんな設定は邪道だと思いますがOpera使いにありがちな(以下略

このエントリーをはてなブックマークに追加
最近、Livedoor Clip(以下LDC)のドメイン設定ですが、「ポップアップをバックグラウンドで開く」にしています。
LDCはご存知の方が多いようにJavaScriptによるキーボード操作が出来るWebアプリケーションです。
J/Kで下/上の動作をし、エンターキーで該当記事を開くという面白い動きをします。
この、エンターキーの動作が曲者でして、もっと別のクリップを見たいなぁと思っていても、新しくタブが開くとそれに画面が占拠されてしまうんですね。これは良くない!
って事で、右クリックからちょこちょこと設定を変えました。
このポップアップをバックグラウンドで開くという機能は案外便利だなと感じています。
LivedoorのWebアプリケーションと相性が良いような気がします。
まだ使ったことが無い方は使ってみてください。


Firefoxとかだとどうやるんだろうね?
調べるのが面倒だから調べてないけど、多分良いやり方があるんだろうなぁ。

2009年9月24日木曜日

素早いLivedoorClipをする

このエントリーをはてなブックマークに追加
前回のに若干修正を加えました。
待望のFirefox対応で、あなたも今日からfast clip!

スクリプト入手先http://userscripts.org/scripts/show/58048

// ==UserScript==
// @name fast ldc
// @namespace http://looxu.blogspot.com/
// @description Fast post to livedoor clip
// @include http://*
// @exclude http://mail.google.com/*
// @author Arc Cosine
// @version 1.2
// ==/UserScript==
// License : Public Domain
// Get Post key bookmarklet;
// javascript:(function(){ var n=document.getElementsByTagName('input');var p;for( var i=0,l=n.length; i<l; i++ ){ if(n[i].name.match(/postkey/)){ p=n[i].value;break;}}window.prompt('Your postkey',p);})();
(function(){
var LDC = {
/* config ここから */
postkey : 'Your Post Key',
firekey : 'c', //クリップを動かすショートカットキー。使用できるのは0-9a-zA-Zだと思う。A-ZはShift+a-zと解釈される
pub : 'on', //公開|非公開の設定。公開の場合はon 非公開の場合はoff
/* config ここまで*/
init : function(){
LDC.preLoad();
window.addEventListener( 'keypress', function(e){
LDC.addKeyBind( LDC.firekey , function(){ LDC.postBox() }, e );
LDC.addKeyBind( 'q', function(){ LDC.rate_change(-1); }, e);
LDC.addKeyBind( 'w', function(){ LDC.rate_change(1);}, e);
},false );
},
imgList : [],
preLoad : function(){
for( var i=0; i<6; i++ ){
LDC.imgList[i] = new Image();
LDC.imgList[i].src = 'http://clip.livedoor.com/img/rate/pad/' + i + '.gif';
}
},
addKeyBind : function( keyChar, func, eve ){
var t=eve.target;
var n=t.tagName.toLowerCase();
if( t.nodeType != 1 || n == 'input' || n == 'textarea' ){
return;
}
var pressKey = eve.which;
keyChar = keyChar.charCodeAt(keyChar);
if( pressKey == keyChar ){
eve.preventDefault(); //Stop Default Event
func.apply();
}
},
rate : 0,
rate_change : function(arg){
LDC.rate = parseInt(document.getElementById('rate').value) + arg;
if( LDC.rate < 0 ) LDC.rate = 0;
if( LDC.rate > 5 ) LDC.rate = 5;
var el = document.getElementById('rate_img');
//el.src = 'http://clip.livedoor.com/img/rate/pad/' + LDC.rate + '.gif';
el.src = LDC.imgList[LDC.rate].src;
document.getElementById('rate').value = LDC.rate;
},
postBox : function(){
var t_div = document.getElementById('t_div');
if( !t_div ){
t_div = document.createElement('div');
t_div.id = 't_div';
t_div.style.position = 'absolute';
t_div.style.top = (window.pageYOffset || window.scrollY)+ 20 + 'px';
t_div.style.left = '20px';
t_div.style.width = '400px';
t_div.style.padding = '10px';
t_div.style.border = '3px solid #aaaaaa';
t_div.style.textAlign = 'center';
t_div.style.backgroundColor = '#fefefe';
var myForm = document.createElement('form');
myForm.style.fontSize = '12px';
var url = 'http://clip.livedoor.com/clip/add';
myForm.method = 'POST';
myForm.target = 'crossIframe';
myForm.innerHTML = 'LDC Fast Clip<dl><dt style="width: 390px; margin-bottom: 2px;"><label style="font-size:12px; width: 48px; float:left; display: block;">レート</label><img id="rate_img" src="http://clip.livedoor.com/img/rate/pad/0.gif">  w key:rate up,q key:reate down</dt><dt style="width: 390px; margin-bottom: 2px;"><label style="font-size:12px; width: 48px; float:left; display: block;">タグ</label><input style="font-size: 12px; border: 1px solid #aaaaaa; width:300px;" tabindex=1 type="text" id="tagArea" value=""></dt><dt style="width: 390px; margin-bottom: 2px;"><label style="font-size:12px; width: 48px; float:left; display: block;">コメント</label><textarea tabindex=2 style="font-size: 12px; border:1px solid #aaaaaa; width:300px; height: 50px;" id="clipTextNote"></textarea></dt></dl><input tabindex=3 type="submit" value="送信"><input type="hidden" name="link" value="' + location.href +'"><input type="hidden" name="rate" id="rate" value="0">';
t_div.appendChild(myForm);
document.body.appendChild(t_div);

var crossIframe= document.createElement('iframe');
crossIframe.name = 'crossIframe';
crossIframe.id = 'crossIframe';
crossIframe.src = 'about:blank';
crossIframe.style.display = 'none';

myForm.addEventListener( 'submit', function(){
var text = encodeURIComponent(document.getElementById('clipTextNote').value);
var tags = encodeURIComponent(document.getElementById('tagArea').value);
myForm.action = url + '?title=' + encodeURIComponent(document.title) + '¬es=' + text + '&tags=' + tags + '&public=' + LDC.pub + '&postkey=' + LDC.postkey;
var cnt = 0;
crossIframe.addEventListener( 'load', function(){
if( cnt++ == 0 ){
myForm.submit();
}else{
crossIframe.parentNode.removeChild(crossIframe);
t_div.parentNode.removeChild(t_div);
}
}, false );
}, false );
document.body.appendChild(crossIframe);

close_div = document.createElement('div');
close_div.style.backgroundColor = '#dee3ea';
close_div.style.fontSize = '12px';
close_div.style.position = 'absolute';
close_div.style.top = '5px';
close_div.style.right='10px';
close_div.style.width = '60px';
close_div.style.border = '1px solid #0f0f0f';
close_div.innerHTML='閉じる';
t_div.appendChild(close_div);
close_div.addEventListener( 'click', function(){
crossIframe.parentNode.removeChild(crossIframe);
t_div.parentNode.removeChild(t_div);
}, false);

}else{
var crossIframe = document.getElementById('crossIframe');
crossIframe.parentNode.removeChild(crossIframe);
t_div.parentNode.removeChild(t_div);
}
}
};
LDC.init();
})();

Opera10でふぁぼったーからふぁぼれないのを何とかする

このエントリーをはてなブックマークに追加
T/O(マテ
という事で、いつもどおりUserScriptを書きました。
導入はこちらからどーぞ
http://userscripts.org/scripts/show/46655

以前に書いたステータースページのアレを若干改造しています。
素晴らしいツールになりましたね!
さあ、Opera10からどんどんふぁぼろうぜっ!!

2009年9月19日土曜日

Livedoor Clipを素早くする(Opera限定)

このエントリーをはてなブックマークに追加
Opera限定です。
下記のUserScriptを導入するとLDC生活がますます快適に!!
LDCのクリップ画面ってめっちゃ重いじゃないですか。
って事でそれよりかは早くpost出来るのを作ったという超うそ臭いコード仕様になっています。
postkeyが必要なのですが、それはLDCのユーザ画面に行って、そこからpostkeyを取得してください。

取得するためのBookmarklet
これを実行

あー説明面倒ー。
こっちにもうpしたので、詳細な説明はそちらをご覧ください。
#本家が適当それがACクオリティ!!
http://userscripts.org/scripts/show/58048


// ==UserScript==
// @name fast ldc
// @namespace http://looxu.blogspot.com/
// @description Fast post to livedoor clip
// @include http://*
// @author Arc Cosine
// @version 1.0
// ==/UserScript==
// License : Public Domain
// Get Post key bookmarklet;
// javascript:(function(){ var n=document.getElementsByTagName('input');var p;for( var i=0,l=n.length; i<l; i++ ){ if(n[i].name.match(/postkey/)){ p=n[i].value;break;}}window.prompt('Your postkey',p);})();
(function(){
var LDC = {
/* config ここから */
postkey : 'Your Post Key',
firekey : 'c', //クリップを動かすショートカットキー。使用できるのは0-9a-zA-Zだと思う。A-ZはShift+a-zと解釈される
pub : 'on', //公開|非公開の設定。公開の場合はon 非公開の場合はoff
/* config ここまで*/
init : function(){
window.addEventListener( 'keypress', function(e){
LDC.addKeyBind( LDC.firekey , function(){ LDC.postBox() }, e );
LDC.addKeyBind( 'q', function(){ LDC.rate_change(-1); }, e);
LDC.addKeyBind( 'w', function(){ LDC.rate_change(1);}, e);
},false );
},
addKeyBind : function( keyChar, func, eve ){
var t=eve.target;
var n=t.tagName.toLowerCase();
if( t.nodeType != 1 || n == 'input' || n == 'textarea' ){
return;
}
var pressKey = eve.which;
keyChar = keyChar.charCodeAt(keyChar);
if( pressKey == keyChar ){
eve.preventDefault(); //Stop Default Event
func.apply();
}
},
rate : 0,
rate_change : function(arg){
LDC.rate = parseInt(document.getElementById('rate').value) + arg;
if( LDC.rate < 0 ) LDC.rate = 0;
if( LDC.rate > 5 ) LDC.rate = 5;
var el = document.getElementById('rate_img');
el.src = 'http://clip.livedoor.com/img/rate/pad/' + LDC.rate + '.gif';
document.getElementById('rate').value = LDC.rate;
},
postBox : function(){
var t_div = document.getElementById('t_div');
if( !t_div ){
t_div = document.createElement('div');
t_div.id = 't_div';
t_div.style.position = 'absolute';
t_div.style.top = (window.pageYOffset || window.scrollY)+ 20 + 'px';
t_div.style.left = '20px';
t_div.style.width = '400px';
t_div.style.height = '160px';
t_div.style.padding = '10px';
t_div.style.border = '3px solid #aaaaaa';
t_div.style.textAlign = 'center';
t_div.style.backgroundColor = '#ffffff';
var myForm = document.createElement('form');
myForm.style.fontSize = '12px';
var url = 'http://clip.livedoor.com/clip/add';
myForm.method = 'POST';
myForm.target = 'crossIframe';
myForm.innerHTML = 'LDC Fast Clip<dl><dt><label style="width: 4.2em; float:left; display: block;">レート</label><img id="rate_img" src="http://clip.livedoor.com/img/rate/pad/0.gif">  w key:rate up,q key:rate down</dt><dt><label style="width: 4.2em; float:left; display: block;">タグ</label><input style="border: 1px solid #aaaaaa; width:300px;" tabindex=1 type="text" id="tagArea" value=""></dt><dt><label style="width: 4.2em; float:left; display: block;">コメント</label><textarea tabindex=2 style="border:1px solid #aaaaaa; width:300px; height: 50px;" id="clipTextNote"></textarea></dt></dl><input tabindex=3 type="submit" value="送信"><input type="hidden" name="link" value="' + location.href +'"><input type="hidden" name="rate" id="rate" value="0">';
t_div.appendChild(myForm);
document.body.appendChild(t_div);

var crossIframe= document.createElement('iframe');
crossIframe.name = 'crossIframe';
crossIframe.id = 'crossIframe';
crossIframe.src = 'about:blank';
crossIframe.style.display = 'none';

myForm.onsubmit = function(){
var text = encodeURIComponent(document.getElementById('clipTextNote').value);
var tags = encodeURIComponent(document.getElementById('tagArea').value);
myForm.action = url + '?title=' + encodeURIComponent(document.title) + '¬es=' + text + '&tags=' + tags + '&public=' + LDC.pub + '&postkey=' + LDC.postkey;
crossIframe.onload = function(){
crossIframe.parentNode.removeChild(crossIframe);
t_div.parentNode.removeChild(t_div);
}
}
document.body.appendChild(crossIframe);

close_div = document.createElement('div');
close_div.style.backgroundColor = '#dee3ea';
close_div.style.position = 'absolute';
close_div.style.top = '5px';
close_div.style.right='10px';
close_div.style.width = '60px';
close_div.style.height = '16px';
close_div.style.border = '1px solid #0f0f0f';
close_div.innerHTML='閉じる';
close_div.onclick = function(){
crossIframe.parentNode.removeChild(crossIframe);
t_div.parentNode.removeChild(t_div);
}
t_div.appendChild(close_div);

}else{
var crossIframe = document.getElementById('crossIframe');
crossIframe.parentNode.removeChild(crossIframe);
t_div.parentNode.removeChild(t_div);
}
}
};
LDC.init();
})();

2009年9月18日金曜日

.datファイルを見えなくする

このエントリーをはてなブックマークに追加
Apacheの設定で、.datファイルを見えなくするには、以下の通りにする。

<Files *.dat>
order deny,allow
deny from all
</Files>

設定が終わったらリブート。

2009年9月14日月曜日

久々に迷惑メール

このエントリーをはてなブックマークに追加
ものすっごい久しぶりに迷惑メールを受け取りました。
docomoのアドレスからだったので届いてしまったというアレなんですが……。
とりあえず、むかついたので、迷惑メールの情報提供しておきました。

以下、内容の羅列

・送信者は(株)ジョウセイの浅野
・総合情報サイトにて無料お試し期間内での退会手続きが確認できておりませんだから、連絡しろという内容
・相談窓口の電話番号は03-6457-7496
・送信者アドレスは、jyousei-hrc@docomo.ne.jp

これを迷惑メールであると判断した理由は以下

・自分自身が携帯電話での総合情報サイト(笑)を利用していないから。
 (メールと電話しかしない人間なので……。いや、そもそもメールもあんまり使ってな(略))
・株式会社ジョウセイはどうやら建築関連のお仕事らしい=こういう手続きをする会社ではない
・そもそも、送信者アドレスがdocomo.ne.jpって時点でオカシイ。自ドメインくらい確保しとけ。

迷惑メールを送るのは勝手ですが、送った相手が悪かったですね……。
仮に、似たような内容を受けとった方は以下の事を行ってください。

1)連絡先に絶対連絡しない
  メールに記載されてる連絡先・相談窓口には絶対連絡しないで下さい。
  あなたの個人情報を電話経由で聞き出される可能性があります。
2)迷惑メールとして報告する
  ここに違反メールの情報提供をしましょう
  meiwaku@dekyo.or.jp宛にメールを転送します。
  その際に、文頭に「受信年月日」「送信者アドレス」を記載してください。

あー、月曜の朝っぱらからイライラさせられました。くそぅ。

2009年9月11日金曜日

体力の限界は

このエントリーをはてなブックマークに追加
若いって良いよね・・・。体力の限界ってのがないんだもん。
寝て起きればまた動けるし。
そんな感じの無茶生活なう。

2009年9月8日火曜日

自転車楽しい

このエントリーをはてなブックマークに追加
ここ二日間自転車で会社に行ってる。
時間にして一時間弱かかるけど、電車・バスよりずっと楽しい。
お気に入りの音楽を聴きながら風と一緒に走るのは思った以上に心地良い。
それに、体を動かしてるお陰か、夜もぐっすり眠れる。
会社or学校の近くに自転車を駐輪できる方は、一度行ってみるのはどうでしょうか?
思った以上に楽しいと思いますよ?

#そして、思った以上に疲れるので、デスマとかやってる人は気を付けてね。
#翌日確実に死ねる金曜日に自転車通勤とかいいんじゃないかな?

2009年8月22日土曜日

久しぶりの実家

このエントリーをはてなブックマークに追加
久々に実家に帰ってきました。
半年振りくらいなのですが、家族の元気な姿を見て安心しました。
ま、それはお互い様という事で。

それにしても、実家はらくちんですね。
自動的にご飯も出るし、お風呂も沸いてるし、至れり尽くせり。
感謝感謝。

2009年8月3日月曜日

UbuntuのSSHでのログインを早くする

このエントリーをはてなブックマークに追加
今、Putty使ってログインしてるんだけど、ログインにやけに時間がかかる。
んで、調べた結果をここにメモ。

techbizのブログ : ubuntuでのssh接続が遅い - livedoor Blog(ブログ)
http://blog.livedoor.jp/techbiz/archives/503983.html

DNSの名前解決が問題だった模様。

変更ファイル
/etc/nsswitch.conf

変更箇所

変更前

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4


変更後

hosts: files mdns4_minimal [NOTFOUND=return] dns


これでいらいらせずにログインできるようになります。良かった良かった。

2009年8月2日日曜日

サマーウォーズ見たよ

このエントリーをはてなブックマークに追加
柄にも無く映画を見てきました。「サマーウォーズ」、そう「時かけ」の細田監督の最新作です。
すっごい面白かったです。
泣きも笑いもしなかったけど、ものすごくエンターテイメントしていました。
ストーリーも素直でとても楽しめました。
素晴らしい。

以下、ネタバレ(反転してます)


キャラクターのキーワードは、覚醒、協力、消失、成長、帰還ですかね。
兎に角主人公クラスのキャラクターが多すぎるので……。

・健二=覚醒
 主人公というより、狂言回しに近い立ち回り。
 所々で、美味しいところを持っていく、正統派ヒーローからちょっと外れた立ち位置にいます。
 彼が本気を出すのは最後の十五分間くらい。
 紙に書いてといていた暗号を暗算で解くシーン、つまり天才の覚醒はなかなか見ごたえがあります。
 とはいえ、全般的に存在感が薄いです。他のキャラクターの印象が強いってのがありますけどね。


・夏希=協力
 花札で勝負するシーンはまあ、面白いでしょう。ルールが分かっていれば。
 もっとも、彼女自身の力というより、家族どころか、世界中を味方にひきつけて協力するというちょっと現実離れした魅力を出すあたりはまあご都合主義ってことで。

・栄=消失
 影の主人公と言っても過言では無い位の圧倒的存在感の彼女。
 夏希の家族全員をまとめあげる胆力と、その実直ながらも優しい心遣いは本当に素晴らしいと思う。
 死んでなお、彼女は陣内一家を走らせる事が出来たのは彼女の人徳故であろう。
 彼女の消失が、物語の転換点になっているのが印象深い。


・佳主馬=成長
 王道中の王道である成長する主人公。
 もともと強いけど、挫折し涙を流し、それでも最後の最後に立ち上がる姿は子供たちへの受け狙いか。
 とはいえ、中性的なキャラクターなので、誰にでも人気が出るかもしれないなぁ。
 彼の成長は素直に喜べます。

・侘助=帰還
 栄と対を成すキャラクター。彼が家族の中で一番栄を愛していたのは、車でぶっ飛んで戻ってきたあたりで良く分かると思う。
 それはともかく、彼は結構綺麗に消化できていなかったキャラクターだと思う。
 もう少し深く掘り下げることが出来たかもしれない。というか、健二と置き換え可能のでしょ、彼。
 栄の消失があったものの、侘助が帰還する事で家族の縁は決して薄れないみたいなメッセージを僕は受け取りました。


世界観についても少々。
ヴァーチャル世界のOZは大変よく出来た世界観だと思います。
もちろん、Webに身を置く人間としてはあまりにも稚拙&杜撰なセキュリティ(笑)だと思いますが、ひょっとしたら実現するかも……みたいな期待を抱かせてくれるのが心憎い演出だと思います。
この世界が実現するまで後何年かかるんだろうねぇ。
アバターによるもう一つのキャラクタ表示もまあまあ楽しめました。
最も、それが前面に出ていたのは、佳主馬くらいでしたけどね。

ストーリーについて
大筋は非常に素直な作りですが、エピソード詰め込みまくりな印象があります。
良くあれだけの内容をこの短い時間に詰め込めたなーって感じ。
そのため、各エピソードの内容が薄くなってるのが若干残念。
夏季の好感度がどこであがったのか分かりづらかったし、健二があんまり活躍してなかったのも事実。
その辺が残念と言えば残念。

全体的に
主題歌に目をつぶれば100点満点でしょう。めっちゃ楽しめました。
主題歌は正直どうよ?って感じです。別に達郎さんが悪いって訳ではないのですが、時かけに比べるとミスマッチな感じが強かったです。
2~3回繰り返し見聞きすればなじんでくるのかもしれないけど分からないから断言しない。
という事で、トータル的な点数は95点です。


いやあ、映画って本当にいいですねー。

2009年8月1日土曜日

popIn Rainbowを更新。

このエントリーをはてなブックマークに追加
47newsがいつの間にか導入されてたので、アップデートしました。
イメージはこんな感じ。
さあ、どっかをなぞって、Let's popIn!

2009年7月31日金曜日

ニコニコ動画用のプレーヤー用UserCSS書いた。

このエントリーをはてなブックマークに追加
Operaでしか確認してないけど、多分Firefoxとかでも動く。
何してるのかというと、プレーヤーを上に持ってくる。それだけ。
position:absolute;使ってるので、みんな自分の環境に合せて適度に加工してね♪


/* For player page */

#WATCHHEADER{
padding-top: 520px !important;
}

div#flvplayer_container{
position: absolute !important;
top : 140px !important;
}

2009年7月22日水曜日

Operaで新しいタブを開く設定

このエントリーをはてなブックマークに追加


はい、スクリーンショット。
Ctrl+F12で詳細設定の画面が出るので、スクリーンショットの設定にすればおk。

ポイントは現在のタブを再使用するのチェックを外す事。

ネットでよく見かけるのが、
・お気に入りから選んだとき新しいタブで開いてくれる
機能がOperaには無いから、Slepnir選ぶとかFirefox+Tab Mix Plus最強wwwって頭悪い発言があるけど、Operaはワンクリックでそれが設定できます。
最も、分かりづらいというのは否定しない。

2009年7月19日日曜日

石鹸最強伝説

このエントリーをはてなブックマークに追加
さっき、顔料系のインクを手にこぼしてしまい、あわてて手を洗ったものの、なかなか落ちない。
いくつかのアルコール系薬品を試したものの(なぜ薬品が複数あるのかは聞くのは野暮)、落ちない。
手が荒れるのを覚悟で、水酸化ナトリウム系に逝こうかと思ってた矢先に駄目元で、石鹸で手を洗ったら、あらまびっくり玉手箱(表現が古いのはおっさんだから)
綺麗に顔料系インクが落ちていくではありませんか!
一時期は真っ青だったぼくの手も、なんとか復帰。
こうして平穏無事にキーを叩けています。
ってか、石鹸すごいなぁ……。体を洗うだけの能力だと思ってたけど格が違うね!
まあ、それ以前にインクを手にこぼすなとか、何でいきなり薬品で洗い落とそうとするのかとか突っ込みどころが満載ですけど。

落ち? 無いよ。

2009年7月11日土曜日

リファクタしつつ思ったこと

このエントリーをはてなブックマークに追加
最近、とあるプログラムをリファクタしてます。
リファクタをしてて感じたのは当初設計と大分変わってしまったという点が目立つという事です。
つまり、つぎはぎで機能を追加したせいでgdgdになってました。
駄目プログラムの典型的なパターンですね。
もっとも、何度も使ううちに最初の設計のまずさとかが浮き彫りになるので、そうなるのは仕方がないのですが。
後は、自分自身の知識があまりにも少なすぎたとかそういうしょぼい理由だったりします(ぉ
リファクタって重要ですよね……。
グローバル変数の多さとかにいらいらしつつ、ローカライズの事も考えたりして本当に色々と考えさせられます。
もっと勉強しないとなぁ。

2009年7月7日火曜日

万能ウェブサーチャ

このエントリーをはてなブックマークに追加
キーボードブラウジング万歳な僕としましては、GoogleChromeの検索機能は若干使い辛いものがあります。
もちろん、Ctrl+T→アドレスバーから検索というスタイルが確立されていれば特に問題ないのですが、そのCtrl+Tも省略したいって時があります。
#通常はありません。

そんな時に役立つソフトが万能ウェブサーチャ。
作者様に直々に宣伝されまして、使ってみた所、なんかー使いづらいなー
って思って色々と指摘したら、なんとその指摘事項に全部対応してくれたという素晴らしい作者様でございます。
とまあ、前座はこの辺にして機能紹介というよりは、変態(=僕)の使い方を書きましょう。

まずおもむろに、万能ウェブサーチャを立ち上げます。
そして、そこに適当に文言を入れて検索!
そうすると、規定のブラウザで検索してくれます。
はい、簡単(ぉぃ

でも、規定のブラウザがOperaな人である僕はこのソフトはGoogleChrome専用で使いたい訳です。
って事で、オプションの設定から任意のブラウザを追加するで、GoogleChromeを追加するだけでおk。
後は、右端に表示されるアイコンでGoogleChromeを選ぶだけで簡単にGoogleChrome専用ソフト化してくれます。

ホットキーはデフォルトではCtrl+Shift+Fなので、三つのキーを同時押しすればおk。
後はごく普通にキーボードブラウジングを楽しむだけです。
Hit a Hint 可愛いよ、Hit a Hint。


万能ウェブサーチャを使っていて一番便利だなぁと感じたのは、検索欄が自動的に延びる機能。
長文を入力するような変態向けです。
例えば、
『猫postが許されるのは小学生までだよねーとか無駄に意味の無いことをやってみたりやってみなかったり』
という頭の悪い文章を入力しても、にゅるっと伸びてくれます。
このにゅるっと伸びて文字が見えるってのは案外便利且つ重要です。
アドレスバー検索に慣れてる一部変人を除いて、普通の人はそこまで長文を入力するなんて事はまったくもってありませんが。

I/Fも非常に分かりやすく、各サイトのfaviconが表示されてますので、脳内にほとばしる反射神経の汗(意味不明)に身を任せてfaviconをクリックするだけで、お目当てのサイトを開くことが出来ます。
便利やねぇ。
マウスジェスチャ機能やらスクリーンキャプチャ機能を搭載していますが僕は使っていません。
だって、基本キーボードブラウジングなんだもん。
機能のオフもクリック一発で出来るのが心憎い!

ということで、キーボードブラウジングのライトユーザ(いるのか?)お勧めのソフトです。
#例えば、Google Chrome+vimlike.user.jsを使っている人とか。
#お前以外いねーよ。

カスタマイズをほとんどしなくても使えるのが最大の特徴といっても構わないでしょう。
ダウンロードはこちらから。
http://www.vector.co.jp/soft/win95/net/se475966.html

最初のほうで書きましたように、作者様は即時対応をしてくださいます。
使いづらい点がありましたが、色々と指摘するのは親切かもしれません。
#もちろん、余計なお世話になる可能性も(おい)


あー、それから俺。
こーゆーレビュー記事早く書け。
1ヶ月放置とかどんだけ酷いんだ、お前は。
お後がよろしいようで……。

2009年7月4日土曜日

Operaたんラウンジ

このエントリーをはてなブックマークに追加
Opera UniteのOperaたんラウンジを公開(ぉ
僕のOperaが元気に稼動してる時は、動いているかもしれません。
アドレスはこちら。
http://work.mksdcom.operaunite.com/the_lounge_with_operatan/lounge.html

欲しい人はこっちをどーぞ。
http://unite.opera.com/service/301/1.0/
もしかしたらまだ公開されてないかもしれないでsが……(笑)

2009年7月3日金曜日

javascriptマスターがワンサカ

このエントリーをはてなブックマークに追加
javascriptってなんてーか、不思議な言語だなぁと思います。
というのも、javascript初めて僅か1年に満たない人たちがトップレベルの技術を身につけてたりするからです。
簡単な言語ではないので、余計にそう思います。
javascriptの最大の利点はお手軽さでしょうね。
ブラウザがあればすぐ試せますし。
スクリプト言語なので、保存→実行の流れが気持ち良い。
さらに、Blogで公開したらあっという間に広がる。
お陰でjavascriptマスターがワンサカと生み出される。
クロスドメインも気合と根性さえ出せばなんとかなる世界になるのもわかってきたし。
本当にjavascript面白いなぁ。

2009年6月26日金曜日

久しぶりに秋葉原を歩きました。

このエントリーをはてなブックマークに追加
目的は電源を購入するため。
とはいえ、久々の秋葉原の変貌に唖然としました。
まあ、毎度行く度に何かしら変化している町なので、驚く方が変なのかもしれませんが。
チチブデンキの跡地にはクレーンゲーム屋が鎮座してましたし、ソフマップ隣の新ビル(?)建設も大詰めを迎えている感じですし、何よりPCパーツ屋が減った!
もう激減って感じです。お陰で短時間でショップをぐるりと見渡せるという利点は生まれましたが、一時期の勢いが薄れてしまったのは少し残念な気がします。
後、メイドが異常に増えてましたね、パーツ街に。
おっさん的にはあんまり嬉しくないですね、メイドさんがパーツ街を跋扈してるのは。
カレー屋もなんだか増えてましたし、またどこかで時間をかけてじっくり回りたいなぁと思いました。
そんな時間も体力もありませんけど(苦笑)

2009年6月20日土曜日

暑い!

このエントリーをはてなブックマークに追加
午前中外に出てましたが、暑い!
梅雨らしいといえば梅雨らしいですが、それにしても暑い!!
思わず、クーラーつけちゃいました。
午後もお出かけ予定なので、日焼け止めはしていこう……。
それにしてもあづい。

2009年6月17日水曜日

Opera UniteのLoungeを改造しました。

このエントリーをはてなブックマークに追加
Opera Uniteで提供されている「サービス」ってのは要はOpera Widgetなんです。
なのでHTML+CSS+Javascriptで表現出来る素晴らしいツールである事が判明!
Loungeの右隣を消しつつ、Operaたんを表示しようぜって話になりその場のノリと勢いでざくっと作りまし
た。
CSSの修正とイメージファイルの追加という簡単なお仕事です。
momizineさんや、kurumaさんやTERAZZIさんやusopionさんやらとわいわいあれこれ言いながら修正するのは楽しかったです。

変更前
Coolなデザインです。


変更後
Operaたん可愛いよOperaたん。


ダウンロード先ですが、Opera Uniteで以下のURLへアクセスしてみてください。
http://sites.google.com/site/mksdcom/Home/operatan10.us
自動的にインストールが始まり、普通にLoungeが立ち上がると思います。
Let's enjoy Opera Unite!

2009年6月16日火曜日

Opera Unite 速効レポート。荒削りだから信用しちゃだめよん。

このエントリーをはてなブックマークに追加
19:14 追記しました

Opera Uniteについては下記の特設URLよりどうぞ
http://www.opera.com/freedom/

ざっくり使ってみた所、Operaをベースとしたサーバを構築する仕組み。
追記ここから
ちなみに、Operaを起動していないと、以下のサービスは全部使えなくなります。
追記ここまで


以下、機能サービスの羅列
1.File Sharing
 そのまま、ファイル共有
 公開・一部公開・非公開を選択する事が出来る。
2.Fridge
 掲示板システム。メモをぺたぺた貼り付けて行くイメージ。
 なんか面白い。
 公開が前提の模様
3.Media Player
 音楽再生機能。後、音楽共有も出来る。
 公開・一部公開・非公開を選択する事が出来る。
4.Photo Sharing
 写真共有
 公開・一部公開・非公開を選択する事が出来る。
 File Sharingとの差異が良く分からない><
 サムネ表示のありなしかな?
5.The Lounge
 チャットシステム。
 IDに日本語は使えない。
 それ以外は普通にチャットできる。
6.WebServer
 そのまま、Webサーバ。
 これも公開・一部公開・非公開を選択する事が出来る。

という事で、ざっと遊んでみた。
これは面白いwww


ただ、懸念事項が何点か。

・著作権の問題
 □これはアップロードする側がキチンと認識していないと駄目ですね。
 □Opera側はこれにどう対応するのか今後に期待。
 □何も考えて(ry
追記
Opera側では共有データは保持しない模様。
operaunite.comは単なるリバースプロキシみたいです。
って事で、著作権関連はそれぞれ公開するユーザが気をつけないといけなさそうですね。


・セキュリティの問題
 □これ、公開・一部公開・非公開が選択できますけど、本当にそうなっているのか、検証が必要
 □僕はまだ検証してない。

取り急ぎ、報告まで。
とりあえず、人柱として、URL公開。
http://home.mksdcom.operaunite.com/fridge/
↑が一番面白かった。

2009年6月12日金曜日

将棋の棋譜

このエントリーをはてなブックマークに追加
ざっくりと勝った将棋。

俺用ニコニコ動画快適化UserScript

このエントリーをはてなブックマークに追加
githubへコミットした。
http://github.com/ArcCosine/userscript/blob/67ceb16642a3280a4e04b302b3033ff70e2a579d/nico_description.user.js
以前に公開してたのとあんま中身変わってない。
下のエントリに書いた修正したスクリプトってこれの事ね。

UserJavascript使っている人と書いている人

このエントリーをはてなブックマークに追加
僕はUserJavascriptを書いている人であり、使っている人でもあるけど、使う専(?)の人がこの世界にはたくさん居ると思っている。
まず、Javascriptが難しくてよく分からないけど、なんだか便利そうだからなんとなく導入してみたって人。
こういう人はこれから先ずっと使うだけだろう。
次に、自分でもちょこちょこ書いているけど、あまりに複雑なコードはさすがに手を出せないって人。
たとえば、autopagerizeとかminibufferとか仕組みとしては凄いんだけど、かなり長めのコードになった瞬間手を出すのを躊躇してしまう人。
後は、頑張ればコード書けるけど、誰か別の人が書いてくれるからまあいいやみたいなポジションで使うだけの人。
大体これくらいだろうか。

使うだけの人にとって最大の問題点は、サイト側の都合でページ内容が変わり、それまで動いていたコードが動かなくなる事だろう。
ここで、対応がそれぞれ分かれる。
何としてでもかつての便利さを!と思う人は「自分で」コードを修正する。
しかし、別にどうでもいいやって人はそのコードを使わなくなる。

ここで、その人のプログラマ的な素質が問われる。
プログラマはとにかく楽をしたがる怠惰な生き物である。
その、楽をする方法が二種類に分かれるわけだ。
1.コードを書いて楽をする
2.諦める
どちらも、アリだと僕は思う。
最も、1のコードを書いてってのはコードを書くこと自体が好きじゃないとまず出来ない。
そして、大抵1を選ぶ人は、楽をするための目的と手段を見失っている輩になる。
そして、僕は1に属する側だ。

まあ、最後の一行はどうでも良くて、プログラマに向いているのはそういう考え方が出来ている人間なのではないかと思っている。

UserJavascriptはごく限られた人しか使っていない。
そして、その中からさらに限られた人が書いている。
書いているのはプログラマと呼ばれる人ではないかもしれない。
けれども、プログラマの考え方にその人は向いているのではないかと思った。


長々と書いてきたけど、何が言いたかったのかというと、nico_descriptionが急に動かなくなってあれれーとニコニコ動画のソース見たらHTMLが変わっていましたよって話。
以上。

2009年6月8日月曜日

「勝」「負」

このエントリーをはてなブックマークに追加
ふと思ったこと。

「絶対に負けない!」

「絶対に勝つ!」
では、どちらが勝利を手にしやすいのだろうか。

単なる気持ちの問題ですし、人によって結果は違うと思うんですけどね。
簡単に分別すると、前者は挑戦を受ける側で、後者は挑戦をする側です。
挑戦をする側が「絶対に負けない!」って思うこともあると思いますが、傾向的には「絶対に勝つ!」ですよね。
その逆も然り。
個人的な感想なのですが、絶対に負けないって思いより、絶対に勝つって思いのほうが若干強い気がします。
そして、勝利を手にしやすいのかなぁと思います。
後者のほうがポジティブな印象が強いからでしょうかね。
もちろん、言葉の印象で感じたことなので、だからどーしたって感じなのですが。

落ち? 無いよ。

2009年6月6日土曜日

デザインとプログラミング

このエントリーをはてなブックマークに追加
この間、デザイナさんと話す機会があって、教えてもらった事なんだけど、デザインは「引き算」らしい。
クライアントから「こういうイメージでよろしく」と言われて実際にいろいろ作るんだけど、最終的にそこからいかに「引き算」するかが重要らしい。
たとえば、10個くらいのパーツの組み合わせでひとつのイメージが出来たとする。
そしたら、そこから2~3個間引く。
これがそのデザイナさんに言わせれば「引き算」にあたるらしい。
たくさんのイメージをくっつけるのは「足し算」で、それはどんなデザイナでも大抵出来るらしい。
でも、そこから必要なイメージだけを残して、不要なものを削除する「引き算」はなかなか出来ないとも言っていた。
そのデザイナさんもまだまだ勉強中で「何を引けばいいか、まだ分からないんだよね」と笑いながら言ってくれた。

その話を聞いて、プログラム(つうか、コード)にも通じるものを感じた。
良いプログラムには無駄が無い。
アルゴリズムしかり、コメントしかり。
コードから、どれだけ思考の無駄を省けているかで、プログラマのレベルを推し量ることが出来る(時もある)。
もっとも、僕自身は「引き算」が苦手なプログラマなので、醜くぶくぶく太ったコードなら大量に書いている。
中々必要なもの以外を残すというのが出来ない。
低レベルプログラマである理由がそれで分かったような気がする。
ということで、今後は低レベルを脱却するために、自分のコードから余分を省けるようにしたいと思う。
まあ、中々簡単には出来ることじゃないけど、チャレンジする価値はあると思う。

デザインとプログラムって通じるところがあるかもね、って話でした

2009年6月5日金曜日

Opera10 Beta雑感

このエントリーをはてなブックマークに追加
ひとまず、今までのαと差異を感じれなくなるほど十分すぎる完成度が高いです。
最も、自宅回線にOpera様はケチをつけられて、Turboにしようと躍起になっています。
どうやら、xDSLは遅い回線の部類に属するようです。とほほ。
ショウガナイデスヨネー。

検索バーが可変になったのは結構衝撃ですが、いかんせん殆ど使っていないので結局あんまり意味が無(ry
いろいろと感覚がズレテきてるなーと最近感じています。

2009年6月2日火曜日

Iframe版ニコニコ大百科のキーワードポップアップをUserScripts.orgへアップしました。

このエントリーをはてなブックマークに追加
勝手にMIT Licenseとかどんだけーって感じですがががが。

偉大なる元ネタ
Popup Nico Dict for Greasemonkey
http://userscripts.org/scripts/show/48300

劣化版
Popup Nico Dict for Iframe for Greasemonkey
http://userscripts.org/scripts/show/50681

今後はこっちをちょこちょこ修正していければと思います。

2009年6月1日月曜日

2009年5月30日土曜日

Operaで使えるニコニコ大百科ポップアップを更新

このエントリーをはてなブックマークに追加
昨日のコードだと、FirefoxとChromeでは動かなかったから動くようにちょっち修正。
後、見た目とかを一部修正。
影は面倒だからつけなかった。
Flashに重なると表示されないのはブラウザの仕様。あきらめてください。
これがドラッグできると良いよね。
え? 作れ?
面倒。

// ==UserScript==
// @name Popup Nico Dict for Iframe
// @namespace http://gigi-net.net
// @include http://dic.nicovideo.jp/*
// @include http://www.nicovideo.jp/watch/*
// @author giginet modified Arc Cosine
// @version 1.1
// ==/UserScript==
(function(){
/** simple version of $X
* $X(exp);
* $X(exp, context);
* @source http://gist.github.com/3242.txt
*/
var $X = function (exp, context) {
context || (context = document);
var expr = (context.ownerDocument || context).createExpression(exp, function (prefix) {
return document.createNSResolver(context.documentElement || context).lookupNamespaceURI(prefix) ||
context.namespaceURI || document.documentElement.namespaceURI || "";
});
var result = expr.evaluate(context, XPathResult.ANY_TYPE, null);
switch (result.resultType) {
case XPathResult.STRING_TYPE : return result.stringValue;
case XPathResult.NUMBER_TYPE : return result.numberValue;
case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
// not ensure the order.
var ret = [], i = null;
while (i = result.iterateNext()) ret.push(i);
return ret;
}
return null;
}


var tip = null;

var init = function(){
if( checkOption() ){
createNicoDic();
}else{
popup();
}
};

var createNicoDic = function(){
document.getElementById("container").style.display = 'none';
//clear div
var cap = document.getElementsByTagName("h1")[0].innerHTML;
var desc = document.getElementById("article");
var article= desc.innerHTML;

//置き換え用の適当な文字列生成
var rand_st ="st"+(new Date()).getTime();
var rand_ed ="ed"+(new Date()).getTime();

//ページメニューを消去
article =article.replace(/<div id..page-menu.>.*<.div>/i,"");

//見出しを適当な文字に変換
article =article.replace(/<h2.*?>/gm,rand_st);
article =article.replace(/<.h2>/gm,rand_ed);
//ページメニューを消去
article =article.replace(/<div id..page-menu.>.*<.div>/,"");
//タグを全消去
article =article.replace(/<.*?>/mg,"");
//適当な文字を見出しに戻す
article =article.replace(new RegExp(rand_st,"gm"),"<br>【");
article =article.replace(new RegExp(rand_ed,"gm"),"】<br>");
//空の見出しを削除
article =article.replace(/<br>【.*】<br>\s*<br>【/gm,"【");

var ARTICLE_LENGTH = 300;
showText = article.substring(0,ARTICLE_LENGTH-1);
if(article.length>=ARTICLE_LENGTH){
showText +="...";
}
//タイトルを追加
showText ="<h1>"+cap+"</h1>"+showText;
var descDiv = document.body.appendChild(document.createElement('div'));
descDiv.style.display = 'block';
descDiv.style.fontSize='10pt';
descDiv.style.fontFamily='sans-serif';
descDiv.style.textAlign='left';
descDiv.style.lineheight='110%';
descDiv.style.color='#333333';
descDiv.style.paddingLeft='16px';
descDiv.style.paddingRight='5px';
descDiv.style.height = "220px";
descDiv.style.background = 'cornsilk';
descDiv.innerHTML = showText;
};
var popup = function(){
var loc = location.href.match(/nicovideo\.jp\/watch/);
if(loc){
var iconList = $X('//div[@id="video_tags"]/p[@class="tag_txt"]/nobr/a/img[@class="txticon"]');
for( var i=0, l=iconList.length; i<l; i++ ) (function(list){
var link = list.parentNode.href;
list.addEventListener( 'mouseover', function(e){ showTips(e,link); }, false );
list.addEventListener( 'mouseout', function(){ hideTips(); }, false );
})(iconList[i]);
}
};
var checkOption = function(){
var loc =location.href.match(/popup=true/);
if( !loc ){
return false;
}
return true;
};
var showTips = function(e,link){
if( tip != null ){ hideTips(); };
tip = document.createElement("div");
var findPos = function(e){ return { "x":e.clientX, "y": e.clientY }; };
var pos = findPos(e);
tip.style.top = pos.y - 240 +'px';
tip.style.left = pos.x + 20 + 'px';
tip.style.width = '340px';
tip.style.height = '220px';
tip.style.zIndex = '10002';
tip.style.position = 'absolute';
tip.addEventListener( "click", hideTips, false );

var iframe = tip.appendChild(document.createElement("iframe"));
iframe.src = link + "?popup=true";
iframe.width = "340px";
iframe.height= "220px";
iframe.frameborder = "0";
iframe.scrolling = 'no';
iframe.style.zIndex = '10000';

var closeBox = tip.appendChild(document.createElement("div"));
closeBox.style.position = 'absolute';
closeBox.style.top = "2px";
closeBox.style.marginLeft = "2px";
closeBox.style.border = "sold 1px #fcfcfc";
closeBox.style.zIndex = "10003";
closeBox.style.width = '16px';
closeBox.style.height = '16px';
closeBox.style.background= '#333333';
closeBox.style.color= '#ffffff';
closeBox.style.fontWeight= 'bold';
closeBox.appendChild(document.createTextNode('X'));
closeBox.addEventListener( "click", hideTips, false );
document.body.appendChild(tip);

};
var hideTips = function(){
tip.parentNode.removeChild(tip);
tip = null;
}

//fire
var timer = setTimeout(init,1000);
})();

Operaで使えるニコニコ大百科ポップアップ

このエントリーをはてなブックマークに追加
超うそ臭いの作ってみた。
元ネタはこちらのページ
コードをまるっとコピペした。
後、iframeを動的に追加して、dic.nicovideo.jpを表示させた。んで、説明文を適当に切り張りしてる。
つまるところ、無駄にインフラを消費するという素敵無駄コード!!
変な関数とかは使っていないので、FirefoxやGoogle Chromeで動くかもしれません。
動いても嘘くさい動きですががが。
ポップアップは自動的には消えないので、適当に左上の×ボタン(?)をクリックしてください。
mouseoutで消しやがれF*ckって人は適当にコードいじってください。

// ==UserScript==
// @name Popup Nico Dict for Iframe
// @namespace http://gigi-net.net
// @include http://dic.nicovideo.jp/*
// @include http://www.nicovideo.jp/watch/*
// @author giginet modified Arc Cosine
// @version 1.0
// ==/UserScript==
(function(){
var nicodicView = {
tip : null,
init : function(){
if( this.checkOption() ){
this.createNicoDic();
}else{
this.popup();
}
},
createNicoDic : function(){
document.getElementById("container").style.display = 'none';
//clear div
var cap = document.getElementsByTagName("h1")[0].innerHTML;
var desc = document.getElementById("article");
var article= desc.innerHTML;

//ページメニューを消去
article =article.replace(/<div id..page-menu.>.*<.div>/i,"");

//見出しを【】に変換
article =article.replace(/<h2.*?>/gm,"【");
article =article.replace(/<.h2>/gm,"】");

//タグを全消去
article =article.replace(/<.*?>/mg,"");
//先頭300文字のみ抽出し、省略された場合は...をくわえる
showText =article.substring(0,299);
if(article.length>=300){
showText +="..."
}
//見出しを改行する
showText =showText.replace(/【/gm,"<br>【");
showText =showText.replace(/】/gm,"】<br>");
//タイトルを追加
showText ="<h1>"+cap+"</h1>"+showText;
var descDiv = document.body.appendChild(document.createElement('div'));
descDiv.style.display = 'block';
descDiv.innerHTML = showText;
},
popup : function(){
var loc = location.href.match(/nicovideo/);
if(loc){
var iconList = document.getElementsByClassName("txticon");
var _self = this;
for( var i=0, l=iconList.length; i<l; i++ ) (function(list){
_self.CoolTips(list);
})(iconList[i]);
}
},
checkOption : function(){
var loc =location.href.match(/popup=true/);
if( !loc ){
return false;
}
return true;
},
findPos : function(e){
return { "x":e.clientX, "y":e.clientY};
},
CoolTips : function(node){
var link = node.parentNode.href;
node.onmouseover = function(e){ nicodicView.showTips(e,link); };
//node.onmouseout = function(){ nicodicView.hideTips(); };
},
showTips : function(e,link){
if( this.tip != null ){ this.nicodicView.hideTips(); };
this.tip = document.createElement("div");
var pos = this.findPos(e);
this.tip.style.top = pos.y - 240 +'px';
this.tip.style.left = pos.x + 20 + 'px';
this.tip.style.width = '340px';
this.tip.style.height = '220px';
this.tip.style.fontSize = '13px';
this.tip.style.fontWeight = 'bold';
this.tip.style.zIndex = '10000';
this.tip.style.background = "#333333";
this.tip.style.color = "#ffffff";
this.tip.style.position = 'absolute';


var iframe = this.tip.appendChild(document.createElement("iframe"));
iframe.src = link + "?popup=true";
iframe.width = "100%";
iframe.height= "100%";

var closeBox = this.tip.appendChild(document.createElement("div"));
closeBox.style.position = 'absolute';
closeBox.style.top = "2px";
closeBox.style.marginLeft = "2px";
closeBox.style.border = "sold 1px #fcfcfc";
closeBox.style.zIndex = "10001";
closeBox.style.width = '16px';
closeBox.style.height = '16px';
closeBox.style.background= '#333333';
closeBox.style.color= '#ffffff';
closeBox.style.fontWeight= 'bold';
closeBox.appendChild(document.createTextNode('X'));
closeBox.onclick = function(){ nicodicView.hideTips() };
document.body.appendChild(this.tip);

},
hideTips : function(){
this.tip.parentNode.removeChild(this.tip);
this.tip = null;
}

};
nicodicView.init();
})();

2009年5月29日金曜日

Kifu for Flash用タグジェネレータ

このエントリーをはてなブックマークに追加
使い方
swfに、swfのアドレスを入力。
kifに、kifのアドレスを入力。
その後、createをクリックするとresultにタグが出力されるので、それをコピーすれば良い。





将棋の棋譜

このエントリーをはてなブックマークに追加
自宅鯖google sitesにFlashを置いてみた。たまに見えなくなるのは仕様です。
後手番で、矢倉。
見所は、ラストのまくり。
途中までは辛かったのですが、最後の最後でうっちゃった感じです。

2009年5月28日木曜日

Mac Book欲しい病

このエントリーをはてなブックマークに追加
Mac Book欲しい病発動中。
ひとまず13ヶ月計画で行くぜ(ぇ

Opera10 Beta

このエントリーをはてなブックマークに追加
Opera10 BetaがDesktopTeamからリリースされました。
新スキン搭載で、Coolな概観になっています。
以前のスキンは黒かったですけど、今回のは全体的に青灰色(?)みたいになっています。
タブのデザインがありえなくらいダサかったので、即効で非表示にしました。
全体的なイメージとしては、Safariを意識してるのかな? みたいな感じです。
いや、良く分かりませんが。
#分からないのかよ
ともあれ

Opera10 Betaの詳細はこちらをごらんください。
http://my.opera.com/desktopteam/blog/2009/05/27/snapshot-build-with-preview-of-the-new-skin

2009年5月26日火曜日

Webkitのバグ?

このエントリーをはてなブックマークに追加
自分のCSSが悪いと思うんですが、position:absolute;を指定したオブジェクトがスクロールすると固定されない(?)という謎のバグと格闘していました。
Webkit系列だけで発生していて、結局原因分からずで放置プレイ。
明日には直したいなぁ。意外と、WebkitってCSS系に癖があるんだなぁと改めて思いました。
見た目重視ってだからかな? うーん、良く分からない。

2009年5月22日金曜日

デザインの難しさ

このエントリーをはてなブックマークに追加
デザインって難しいですよね。という話。以上(ぇ
今日はお仕事で若干レイアウトの変更をしたのですが、これが難しい。
狭い隙間でそれなりの空白を生み出すという苦行を課せられてしまい、色々と試行錯誤しながらやったのですが、どうにも違和感がある。
結局某検索サイトのレイアウトをパクって参考にして新デザインと相成りました。
CSSの修正だけでしたが若干フォントのサイズを変えたり、marginを少し入れて、line-heightを調整。
それだけで見栄えがぐっとアップ。
んー、単純なだけに奥が深いなぁと改めて思いました。
それだけです。

2009年5月15日金曜日

popIn Rainbow Released

このエントリーをはてなブックマークに追加
ブログの右上左上をご覧ください。
popIn Rainbowというのが見えるでしょうか。
自分も一部だけ開発に携わったpopIn Rainbowの公開が許可されましたので、早速導入してみました。
popIn Rainbowは、いわゆるブログパーツと呼ばれるもので、コード一行をコピペして張り付けるだけで簡単に導入できます。

どのような機能を提供するのか。
主に二つです。

1.なぞってpopIn on Blog
なんでも良いので、文字をなぞってみてください。そしてマウスを放すと小さいウインドウがカーソルの横に現れたはずです。
その上にカーソルを移動すると、メニューがぬるっと出てきます。
これは今、popIn on FirefoxやpopIn on InternetExplorerと同じ機能です。
もっとも、メニューを用意したのはうp主。というか、Blog主=僕です。
searchをクリックすると、なぞった単語をGoogle検索してくれます。
右下にウェブというBoxがあって、その上にマウスカーソルを合わせるとGoogleの各サービスの検索が出来ます。
さらに、右下のYahooアイコンやウィキペディアアイコンをクリックするとそのウインドウのままでなぞった単語を検索できます。
ま、popInを一度でも使った事がある人には手馴れた動作です。
Operaな人もChromeな人もSafariな人もみーんな、popInがどんな動作をするのかなーってのを体験する事が出来ます。
そして、今までIEやFirefoxでpopInをインストールして無かった人もこのページを通してその「面白さ」を体験していただけたらなーと思います。


2.自動リンク
一部のリンクは別のユーザがなぞった単語に自動的にリンクが張られます。
なので、そのリンクをクリックするだけで、さっと検索内容を見る事が出来ます。
実際に自動陸が反映されたのを見た時は、若干感動しました。
この自動リンクは動的に変わるので常に同じ言葉が選ばれる訳ではありません。
なので、どんどんなぞって反映が変化するのをニヤニヤ眺めるのも新しい「楽しみ」かなと思います。

右上のFlashパーツはなぞられたら単語を表示するブログパーツです。
社長が気合を入れて作ったパーツですので、マウスオーバーして楽しんでいただければと思います。

尚、このpopIn Rainbowは特別バージョンでして、popIn ARというのも搭載しています。
ARと書かれた部分をクリックすると、FlashベースのARを楽しむ事が出来ます。
お時間のある方は試してみてください。
5/15追記
popIn ARはWebカメラが必須です。




ちなみに、このブログパーツは限定公開ですが、近日中に一般公開する予定です。
その時は是非是非、ブログ導入を検討していただけると幸いです。


以上、自作自演Postでした。

2009年5月14日木曜日

Javascriptの勉強はどこでやればいーの?

このエントリーをはてなブックマークに追加
正直、Javascriptで何をしたいのかってレベルによって、勉強する場所が違うから、ここでやれ!みたいなのは挙げられないんだけど、リンク集的な意味では、このページが役立つ。

モダンJavaScript チュートリアル集 | Diaspar Journal
http://diaspar.jp/-/javascript-ecmascript

僕の独断と偏見だけど、初心者の人にお勧めなのが、このページ

DOMから始めるJavaScriptモダン・スクリプティング---目次:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070626/275913/

ある程度HTMLが理解できてる人には上記の入門記事はとても丁寧に解説されているので、お勧め。
本格的にJavaScriptを覚えようとしたらMDCとか読むのが一番手っ取り早いけれど、いきなりあれを読むのはキツいと思うので、最低限の知識をつけるためにも読んでおく事をお勧めする。
(とほほさんのページにたどり着く人は多いかもしれないけれど、お勧めは出来ない。リファレンスとしては参考になるけれど、入門記事としてはやや冗長というのが僕の考え)

後は開発環境だけれども、以下のツールを揃えるのが良いと思う。

Windows環境
ブラウザ:Firefox+Firebug
エディタ:サクラエディタ or Terapad or 秀丸

Linux環境
ブラウザ:Firefox+Firebug
エディタ:Vim or Emacs

Mac環境
Macは持っていないんだ。ごめんね……orz

良く、Eclipse最高!とか言う人居るけど、あれはでかいコードを書く時に向いている。
便利なんだけど、起動は遅いし、動作もかなり重い。
Javascript程度の小さいコードを扱う時はシンプルなエディタがお勧め。
その辺は適当に調べればすぐに分かると思う。
文字コードで、UTF-8を扱えるエディタだったら正直何でも良い。


Operaな人だったら、Opera単体で開発できるので、Operaを用意すれば良い。
メニューの「ツール→詳細ツール→エラーコンソール」でエラーコンソールを立ち上げて、ひたすらTry&Error。
ソースの表示から中のコードをゴリゴリっと変えていくのがOperaジャスティスな使い方。
Operaをそれなりに愛している人でないと出来ない開発手法なので、お勧めは出来ない。

ちなみに僕はへたれなので、Opera+Vimでひたすら:wとRを連打するという開発手法を取っている。
効率が悪いって、分かってるんだけどねー。
そろそろvimscriptの書き方覚えるべきかなぁ。


IEでのデバッグ方法は基本的にはalertデバッグかなぁ。
もうね、正直IEの重さと独自性でイライラすること間違い無しなので、IE対応しないコード書く方が(精神的に)良いと思う。
お仕事してる人は文句言わずにキチンとIEでも動くコード書きましょう。
対応したくないのは山々ですけどね……。
以上。

2009年5月12日火曜日

Javascriptな「人」

このエントリーをはてなブックマークに追加
Javascriptな人というと誰を思いつくか。
はてな村の人たちばかりしか思い浮かばないし、僕はUserScriptが好きなので、そちらが得意な人たちに目がつく。
ともあれ羅列してみた。
世界Topクラスとか日本有数とか書いてるけど、僕の誇大妄想なので、実際のランクとかけ離れてる事が多々あるかもしれませんが、参考程度に聞き流してください。

    全般的にすげえ
  • id:amachang
    IT戦記
    ご存知、脊髄反射でコードを書く男。紛れも無い、Javascriptな人で、世界Topクラスの技術の持ち主。一度会ってみたいなぁと思いつつも、会っただけで圧倒されそう。

  • id:ma.la
    最速インターフェース研究会
    LDRの人、最速の人、京都観光の人、100万円の人、高橋メソッドゴルフな人。呼び名は多々あれ、彼もまたJavascriptの世界的権威。Operaはメーラー。速い=I/Fの正解。など、名言多し。

  • id:javascripter
    素人がプログラミングを勉強するブログ
    十代の天才。紛れもない天才。Firefox関連のJavascriptに異様なくらいに詳しい。現時点で確実に国内Top5に入るくらいの技術力があると思う。着眼点が良く、機転も利き、今後の成長に超期待。

  • id:os0x
    0x集積蔵
    oAutopagerizeの人で、OperaへのUserJavascriptの移植しまくりな人で、本当にありがたい限り。Operaだけでなくクロスブラウザに強いというイメージ。

  • id:cho45
    www.lowreal.net
    冬通りに消え行く制服ガールは、夢物語にリアルを求めないの人の方が分かりやすいかな? すげえ便利なJSDeferredを開発された方。本来はCSSな人らしいのですが、全然そう感じないくらい完成度の高いライブラリとなっております。

  • 2009/5/12 お昼ぐらい追記
    edvakfさんからこの人たちをとコメント欄で指摘されたので、追記。

  • id:secondlife
    川o・-・)<2nd life
    Rubyな人だと思ったら、結構Javascriptな人でもあったと。edvakfさん推薦。id:ma.laさん経由でJavascriptを学んだってエントリを書かれている。そりゃ凄いはずです。

  • id:nanto_vi
    Days on the Moon
    Javascriptの細かい仕様に詳しい方。ってか素で忘れてた俺馬鹿ー!edvakfさん経由。ぱっと見て面白いエントリはゆの in ECMASCriptかな?


    Operaですげえ
  • id:higeorenge
    Higeorange.com
    Twipperaの人。Opera関連のコードが多いように見えるけど、地味にクロスブラウザなコードをさくっと書いているあたり、地力の高さが垣間見える。

  • id:edvakf
    by edvakf in hatena
    Operaの変態だけど、ここ最近はJavascriptの変態へと確実に進化している人。英語にも強いので、edvakfさん経由でOperaの便利なUserJSを知るようになった人は世界中にいると思う。Opera界隈では間違いなく、世界Topクラスの技術力を持っている。

  • id:Griever
    Griever
    UserScript関連では一番面白いコードを書いている。実験的なコードが多いものの、その技術力の高さに毎度勉強をさせてもらっている感じ。着眼点がクールすぎます。



本当はmallowlabsさんとかmiya2000さんとかもカウントしたい気がしつつも、そこまでJavascriptに偏ってないかなーという僕の偏見で入れていません(ぇー
他にもこの人が入ってないよ~ってのがありましたら、教えてください。

2009年5月11日月曜日

とりとめのない駄文。

このエントリーをはてなブックマークに追加
なぜコードを書くのか。
いくつか理由がありますが、端的に言ってしまえば自分がその機能を欲しいから、でしょうね。
コードを書く人間の半分位は自分の欲求がベースになってコードを書いていると思います。
そして、残りの半分が仕事だから、ですかねー。
下手したら半分どころか、90%以上が仕事だからって理由でコード書いているかもしれません、このご時世。
ともあれ、コードを書く理由は千差万別ですが、突き詰めると大体2パターンに分かれると思っています。
このうち、自分が欲しいからという理由で書かれたコードってのは意外と世界を変えるコードが多かったりすると勝手に夢想しています。
逆に、仕事でってコードは世界を変えないものの、世界を便利にするコードが多いのかなーと思っています。
どちらも重要ですが、個人的には世界を変えるコードを書きたいと願いつつも、実質は世界を便利にするコードしか書けてないという現状に甘んじています。
そもそも、世界を変えるコードなんてそう簡単には書けません。
それくらい、世界を変えるコードの質というか重さってのはでかいんです。
でも、逆に世界を便利にするコードはとても軽いので、僕程度の能力でも楽に作る事が出来ます。
#楽じゃないけどね……。
今までコードを書いた事が無い人は、ぜひとも世界を便利にするコードを書きつづけましょう。
そうすればいつか世界を変えるコードを書けるようになると思います。
世界を便利にするコードがある日世界を変えるコードになったとしたら、それってすっごく嬉しいですよね?よね?
え? そんな馬鹿なこと考えてるのはお前だけだって?
おっしゃるとおりでございます。反論できません。
酔っ払いの戯言なので、気にした方が負けって事でw

2009年5月8日金曜日

PCの調子が悪かった。

このエントリーをはてなブックマークに追加
ここ数日PCの調子が悪かったのですが、とあるパーツを交換する事でそれが解決しました。
そのパーツは、CPUクーラーです。
CPUクーラーって普通はそう性能劣化しない物だと僕は信じていましたが、どうやらそれは僕の勘違いだった用です。
CPUクーラーを取り外すと大量の埃が付着してました。
半年前に洗浄して以来ずーっと調子悪かったのですが、どうやら洗浄はあまり効果が無かったと判断します。
って事で新しいCPUクーラーを購入して取り替えたところ超安定動作。
最も、CPUファンは前のよりちょっと五月蝿めです。
それでも快適に使えているので文句なしって事で。
前のCPUクーラーは明日にでも洗浄して乾燥放置プレイを決め込もうと思います。
そんな感じで。

2009年5月3日日曜日

僕が週に一回だけお酒を飲む理由

このエントリーをはてなブックマークに追加
僕がお酒を飲むのは週に一回だけです。
理由は単純で経済的に余裕が無いからってのもありますが、そのほかにもいくつか理由があるのでいい具合に酔っ払いつつツラツラと書いていこうと思います。

1.経済的理由
  先に挙げたように、経済的な理由でお酒をあんまり買えません。って事で、週一回です。

2.お酒が好きだから
  割とお酒好きです。で、あると結構ちびちび飲んじゃうタイプです。
  アルコール依存症になりそうなタイプなので、その辺でキッチリ線引きしないといけないなーと思ったのも理由の一つです。
  以前はそれこそ毎晩飲んでいましたが、さすがにこれは肝臓壊すと不安になってから週に一回だけにするようになりました。

3.忙しい
  毎日忙しいです。なんでこんなに忙しいのか理由は明白なのですが、兎に角落ち着ける日は少ないです。
  日曜日の夜は自分のための落ち着きの時間なので、自分へのご褒美(笑)としてお酒をちびちびと飲む感じですね。

4.健康
  2と関係あるかもしれないけど、数値がやばくならないためにもキチンと自己管理をしなくちゃと思ってます。
  呑みすぎは本当に体に悪いので、程ほどに呑める量とペースってのが僕にとっては週一なんですね。

さて、四つほど挙げましたが、結局まとめると金が無いからに尽きます。
後はまあ後付け(笑)
いいじゃないか、酔っていも。
酔いながらエントリ書くってのも久々だなー。
では。

2009年5月2日土曜日

システム屋に必要な能力

このエントリーをはてなブックマークに追加
システム屋って書いてあるのが味噌で、プログラマーにとっては特段必要な能力ではない。
と、思う。

自分は四年間程システム屋をやってきました。
人によっては半人前だと思いますが、個人的には超頑張っていた時期で、色々と死にそうな目にあっていた事もしばしばありましたが、今となっては良い思い出です。
さて、システム屋をやっていて、必要だなと感じたのは「仕組みを見抜く」能力でした。
例えプログラム技術がどんなに卓越していても、あるいはどれだけコミュニケーション能力があろうとも、あるいはどれだけマネジメント能力があろうとも、仕組みを見抜く力が無ければ、相当に無駄が発生するという事がわかりました。
といっても、単に「システム化対象の業務の仕組み」だけを見抜く能力では不十分。
それくらいどんな馬鹿だって大抵身についています。
重要なのは、「その案件に生じる様々な仕組み」を見抜く能力です。
というのも、案件単位で案件の進め方がガラリと変わるのはこの世の中ザラにありまして、その辺を見抜けずに過去のやり方でやろうとしてぶつかって時間をロスする時間が本当に多かったです。
特に僕なんかはその辺の能力が極端に低いので、本当に効率悪くそれらの事をやっていたような気がします。
便利なので「仕組み」って言葉を使っていますが、「しきたり」でも良いですし、「伝統」でも良いです。
結局システム屋とはいえ、顔をつき合わせてやるのは機械だけじゃなくて対人間みたいな所があって、その辺人間は機械より矛盾と無駄と無知がない交ぜになった奇妙な生き物なので、機械よりずっと性質が悪いです。
それを理解しつつもそれらを「上手に回す」仕方を覚えるまたは見抜かないと結局苦労するのは自分って訳です。

そういった「技術」というか「人間力」というか「技能」というべきか、まあそういう能力が無いとシステム屋なんてやってられません。
実際その辺の能力が著しく低かった僕はシステム屋は耐えられないものでした。
面白くないんですよ、そーゆーので自分の思考と行動が遮られるのは。
ま、能力の無い人間がそーゆー事を言うと「死ね馬鹿」って言われるだけがオチですので、言われたくない人はキチンと能力を身につけて相手にごめんなさいを言わせるぐらいになった方がいいんじゃないの、みたいな。

よく「コミュニケーション能力が大事!」みたいに書いている人が居るけど、もしかしたら今回のエントリの内容がその「コミュニケーション能力」に含まれるのかもしれませんね。

あれ、だとするとACさんのコミュ能力って……。
うるさい、ばかーっ!

オチ? さあね。

2009年4月30日木曜日

Modokiの開発で思った事。

このエントリーをはてなブックマークに追加
結論から言うと、JavaScriptとCSSがあればかなりやりたい事が出来るようになりましたねーって話。

今、TwitterのWebベースのクライアントを作っているんですが、画像なし&サーバサイド技術ゼロで作っています。
そもそも、Webでサービス展開してるTwitterのクライアントをWebベースで開発するとかどんだけお前はアホなんだみたいに突っ込まれる事間違いなしなのですが、ともあれ色々作っています。
インスパイアを受けたのはTweenというTwitter専用クライアントなのですが、どうやら僕の環境の問題らしく結構、変なタイミングでメモリエラー吐いて落ちるんですね。
共有メモリのロックに失敗したとかどーのこーの。これだから.NETは……。
#つーか、そろそろ環境再構築しろ、俺
閑話休題。
Tweenめっちゃ便利なんですよ。
クライアントとしての完成度は非常に高いです。
キーボードショートカットとかもうキュンキュンするし、タブ機能とか未読管理機能とかもう至れり尽くせり。
ここまでされちゃうと後はもうやる事無いんじゃない? みたいな感じになっちゃうんですが、先にあげたように自分の環境ではエラー吐きまくる。
後は結構メモリ食うんですよ、Tween。
そりゃ、メモリなんて最近安くなったし、がんがん使っても問題ないくらい積んでいますけど、使っている人が馬鹿だから、Operaで100~200タブくらい常時開いているので、当然ながらメモリもがっつり食われているわけでして(Operaが2G消費とかザラ)、なるべくOperaにメモリを割り振りたいんですよ。
「それ、Operaで実現すればよくね?」みたいに考えて、Tween Modokiってのを作り始めました。
まず、一番重要なのはキーボードショートカット。
Tweenがとても気持ちよく使えるのは、キーボードによる全面的な操作。
もうこれが気持ちよくて気持ちよくて。
ってことで、documentのkeypressイベントにaddEventListenerするいつものパターン的なコードで実現。
後はTimeLine(以下、TL)の表示。Tweenは色とテキストデコレーションでTLを表現しているので、TwicliとかTwitterの表現よりずっと分かりやすいと思っています。
って事でゴリゴリそれっぽい表現をしたのですが、ここで活躍するのがCSS。
CSSで複数のクラスを作成してそれをJavaScriptで書き換えるといういわゆるAjax(笑)的な対応をする事で動的にページを書き換えるというとってもアレゲな動きをするようになっています。
タブの表示とか、入力部分の表示とか兎に角I/Fの表現はCSSで、動作部分はJavaScriptでみたいにする事で、Tweenっぽい動きをさせる事が出来るようになってきました。
これはちょっとした恐怖ですよ?(ナニが恐怖だ)
別に恐怖でも何でもないですが、Webアプリもここまで出来るのかーみたいな感じで、本人的には超頑張ったなーって感じです。
ま、でも、まだまだ機能的にはTweenに追いついていませんし、Modokiを使うメリットみたいなのがまだありません。
なので、今後ゴリゴリ機能追加していって、Modokiを使うメリットみたいなのが出せるようになれば良いなーって思っています。
はい、駄文でした!
さあて、仕事いてきます!

2009年4月29日水曜日

偽術者として

このエントリーをはてなブックマークに追加
以前から何度か書いているように、僕は技術者と呼ぶにはおこがましい程度の能力の持ち主です。
世間一般から見ると相当なコンピュータオタク=Geekに見えるらしいのですが、残念ながらGeekと呼ばれる方々とは天と地の差があるほど僕の能力は低能力です。
弁解するのが面倒なので、特に説明していませんけどね。
偽術者って書くくらいなので、それなりの技術は持っていますが、間違いなく本物ではない。
自分で考えたコードなんて皆無です。
ま、それは僕が今までこのページで公開してきたUserJSとか見ると分かるとおりですね(笑)
コピペの嵐で本当にレベルの低さを露呈している訳ですが、ま、それはそれでいいやと最近思うようにしました。
変に気にしてもしょうがないし、気にしたところで何が改善するのかって訳でもないし。
本物の技術屋さんだったら、その辺キチンと考えるんだろうけど、残念ながら僕は偽術者なので、キチンと考えません。
色々とごめんなさい。
生きててごめんなさい。
そんな軽い鬱(それでもテンションはアッパーだけど)状態でお送りしました。
さあて、今日もいっぱい嘘コード書くぞー!