« 2008年07月 | メイン | 2008年09月 »

2008年08月 アーカイブ

2008年08月03日

過去の遺物との決別

引越に伴い、これまで溜め込んだものを処分している。
整理しはじめた時には捨てるつもりだったのに、整理しているうちに名残惜しくなって捨てる勢いが衰えていく。
学生時代の資料、レポートや答案用紙、捨てるつもりだったのに、過去の自分が意外と良いことを書いていたりすると、その一段落のためだけに全部が捨てられなくなる。
稚拙な文章ではあるが(まあ、今も稚拙ではあるが)、その段落をここに引用して捨てる覚悟を決める事にする。
生化学と生命科学を書き分けているのに気をつけないと読みにくいかも。
ある試験の答案用紙より引用
生命とはある化学反応によりなりたっているただの試験管みたいな物なのかもしれない。しかし、その試験管はみずからをいじするために活動する。その活動は生化学的な反応により成り立ち、生体外では極限状態でしかありえない反応を酵素を用いて行う事もある。生化学を理解するという事は、自分自身の中で「何が」、「何のために」おこっているかを知り、それが自身にまわりにどう影響するのかを知る事ができる。生命科学の広義に哲学があるがその哲学的な考え方にも影響があるだろう。我々はただの試験管か、そうではなく、生きている命、「生命」として考えるのか?生命とは何か?生化学を理解していく事で生体がただの「利己的な反応系」であるとなれば全ての生命科学的分野への影響は、多大である。実際、文系・理系分けへだてなく、ある程度の事は理解しておく必要があると思う。
(誤字脱字は当時のまま)
リチャード・ドーキンスの「利己的な遺伝子」の影響を受けているのがよくわかる。まあ読んだ事はないのだけども、この本の影響を受けた文章や番組から二次的な影響を受けているがはっきりわかる。
「利己的な反応系」という用語は自分の造語だと記憶しているが定かではない。
しかし、「維持」ぐらいは漢字で書けよな、過去の自分。

2008年08月05日

ブログ通信簿

やっと通信簿を発行してくれた。
まあ、こんなもんでしょう。
しかし「WEB素行調査」といい「スパイシー」といい、この手のサービス多いなぁ。

2008年08月06日

はてブのコメントの文字数制限を突破する方法

はてなブックマークのコメントの文字数制限を突破する方法を思いついた。
詳細ははてブコメントを参照の事。
2008/08/06 追記
メタブクマも見て下さい。

2008年08月07日

FONTPARKで遊んでみた

フォントメーカーであるモリサワのサービス「FONTPARK 2.0」で遊んでみた。
文字や文字を構成する部品を使ってお絵描きをするというもの。
離れた部分は別々の部品として使える。
例えば「い」なら二つにわけられる。
偏や旁でわけているのではなく、あくまでグリフ(文字の形)でわけるので「離」や「魎」なんかはひとつにしかならない。
(但し、フォントの種類によってわけられる可能性がある。)
で、作ったのがこれ。
「ヨット」はできるだけ構成要素を少なくして作ってみた。
「ば〜〜ん」はURLを過不足なく使用するという縛りでやった。最後は弾が飛んでいく。
ひらがなでいうとこの辺りが使いやすいかも。
「いうくけこさしたちつてにのひふへん」
使った文字にちなんだ絵が描ければと思ったけどできなかった。

2008年08月08日

今日は葉っぱの日らしい

葉っぱに捧いでみた。
これみて思いついただけ。
ちなみに葉っぱの人はセキュリティの人です。

はてなスターが7つあった場合ウェーブさせるBookmarklet

どうでも良い物を作ってみた。
/*
================================================================================
    Name        :   Seven Stars Waver
    In          :   [none]  
    Out         :   [none]  
    Note        :   はてなスターが7つあった場合ウェーブさせる
--------------------------------------------------------------------------------
    Version     :   Ver1.0.0    |   2008/08/08  |   新規作成
                :   Ver1.0.1    |   2008/08/09  |   不具合修正
--------------------------------------------------------------------------------
    License     :   MIT license
    URL         :   www.kanasansoft.com
================================================================================
*/

(function(){
    var classes=document.getElementsByClassName("hatena-star-star-container");
    var handler=function(stars){
        for(var i=0;i<stars.length;i++){
            stars[i].style.position="relative";
        }
        var cnt=0;
        var cntMax=30;
        return function(){
            var len=stars.length;
            for(var i=0;i<len;i++){
                var x=Math.sin(cnt/cntMax*Math.PI*2-i/len*Math.PI*2)*10*i/len;
                stars[i].style.top=x+"px";
            }
            cnt++;
            cnt=cnt%cntMax;
        }
    };
    for(var i=0;i<classes.length;i++){
        var links=classes[i].getElementsByTagName("a");
        if(links.length==7){
            setInterval(handler(links),50);
        }
    }
})();
ひとつのエントリーにはてなスターが7つ付いている場合ウェーブさせる。
本当はgreasemonkeyにしたかったのだが、はてスタはonload時に読み込まれるようになっているので、タイミングを計るのが面倒。
このため、bookmarkletになっている。
実装にこだわるようなものでもないし...。
2008/08/09 追記
不具合があったので修正

2008年08月24日

Yahooニュースでの不幸を是正するグリモン

あるチャットの常連が作ったwebサービスが、japan.internet.com経由でYahooニュースに載った。
でも、元記事にあったwebサービスへのリンクがYahooニュースにはなかった。
せっかく著名なサイトに載ったのになんて不幸な...。
余りにも不幸なので、Yahooニュースの該当ページに「YouTube2.in」へのリンクを追加するGreaseMonkeyを書いた。
効果があるのかどうかと言われたら、まあ多分ない。
2008/08/24 追記
わかっているとは思いますが、ほとんどネタですよ。
ちゃんと動くようには一応なっていますが...。

2008年08月27日

JavaScriptからCSSを操作する方法を結構詳しく調べてみた

以下、ほとんどがFirefoxの話です。
実行環境はFirebug。
javascirpt側からcssを指定するとき、よく使われるのは次のような方法。
obj.style.color="#000000";
obj.style.fontSize="12px";
このような方法ではなく、次のような方法でできないかなと思うときがある。
//???は不明部分
obj.???="color:#000000;font-size:12px;";
obj.???("color:#000000;font-size:12px;");
実はこれは簡単で次のようにすればいい。
obj.setAttribute("style","color:#000000;font-size:12px;");
どちらの方法にしろ、style属性は独自の動作をするらしく、cssにはないものを指定しても無効にしてくれる。
例えば以下のcodeを実行してみる。
var obj=document.createElement("div");
obj.setAttribute("style","z-index:inherit;dummy:inherit;color:dummy;");
obj.style.backgroundColor="inherit";
obj.style.dummy="inherit";
obj.style.fontSize="dummy";
console.log(obj.getAttribute("style"));
結果は、次の通り。
z-index: inherit; background-color: inherit;
独自属性に対して同じような処理を行ってみる。
var obj=document.createElement("div");
obj.setAttribute("dummy","z-index:inherit;dummy:inherit;color:dummy;");
console.log(obj.getAttribute("dummy"));
結果はこんな感じ。
z-index:inherit;dummy:inherit;color:dummy;
style属性の時は何か特殊な処理が挟まっているようだ。
調べてみた。
var obj=document.createElement("div");
console.log(obj.style); //=>CSSStyleDeclaration length=0
「CSSStyleDeclaration」という見たこともないobject。
(Kanasan.JSで出てきたのならごめんなさい。自分の記憶にはないです。)
とりあえず、「CSSStyleDeclaration」をgoogleで調べてみた。
hitしたsiteからリンクをたどって見つけたのがこれ。
JavaとFlex?
CSSStyleDeclarationなんて長い名前なのに同じって事はDOMにでも定義されているのか?
でも、JavaとFlexではmethodがあまり一致していない。
以下のcodeを実行して調査。
var obj=document.createElement("div");
var keys=[];
for(var key in obj.style){keys.push(key);}
//console.log(keys.join("\n"));
//以下entry用コード
var step=5,lines=[];
for(var i=0;i<keys.length;i+=step){
    lines.push(keys.slice(i,i+step).join(" "));
}
console.log(lines.join("\n"));
実行結果がこれ。
length cssText getPropertyValue getPropertyCSSValue removeProperty
getPropertyPriority setProperty item parentRule azimuth
background backgroundAttachment backgroundColor backgroundImage backgroundPosition
backgroundRepeat border borderCollapse borderColor borderSpacing
borderStyle borderTop borderRight borderBottom borderLeft
borderTopColor borderRightColor borderBottomColor borderLeftColor borderTopStyle
borderRightStyle borderBottomStyle borderLeftStyle borderTopWidth borderRightWidth
borderBottomWidth borderLeftWidth borderWidth bottom captionSide
clear clip color content counterIncrement
counterReset cue cueAfter cueBefore cursor
direction display elevation emptyCells cssFloat
font fontFamily fontSize fontSizeAdjust fontStretch
fontStyle fontVariant fontWeight height left
letterSpacing lineHeight listStyle listStyleImage listStylePosition
listStyleType margin marginTop marginRight marginBottom
marginLeft markerOffset marks maxHeight maxWidth
minHeight minWidth orphans outline outlineColor
outlineStyle outlineWidth overflow padding paddingTop
paddingRight paddingBottom paddingLeft page pageBreakAfter
pageBreakBefore pageBreakInside pause pauseAfter pauseBefore
pitch pitchRange position quotes richness
right size speak speakHeader speakNumeral
speakPunctuation speechRate stress tableLayout textAlign
textDecoration textIndent textShadow textTransform top
unicodeBidi verticalAlign visibility voiceFamily volume
whiteSpace widows width wordSpacing zIndex
MozAppearance MozBackgroundClip MozBackgroundInlinePolicy MozBackgroundOrigin MozBinding
MozBorderBottomColors MozBorderLeftColors MozBorderRightColors MozBorderTopColors MozBorderRadius
MozBorderRadiusTopleft MozBorderRadiusTopright MozBorderRadiusBottomleft MozBorderRadiusBottomright MozBoxAlign
MozBoxDirection MozBoxFlex MozBoxOrient MozBoxOrdinalGroup MozBoxPack
MozBoxSizing MozColumnCount MozColumnWidth MozColumnGap MozFloatEdge
MozForceBrokenImageIcon MozImageRegion MozMarginEnd MozMarginStart MozOpacity
MozOutline MozOutlineColor MozOutlineRadius MozOutlineRadiusTopleft MozOutlineRadiusTopright
MozOutlineRadiusBottomleft MozOutlineRadiusBottomright MozOutlineStyle MozOutlineWidth MozOutlineOffset
MozPaddingEnd MozPaddingStart MozUserFocus MozUserInput MozUserModify
MozUserSelect opacity outlineOffset overflowX overflowY
imeMode MozBorderEnd MozBorderEndColor MozBorderEndStyle MozBorderEndWidth
MozBorderStart MozBorderStartColor MozBorderStartStyle MozBorderStartWidth
なんか、FlexのCSSStyleDeclarationにあったのと同じようなものがちらほらと...。
(Mozで始まるのはFirefoxの独自実装のはずなのでここでは無視。)
cssText
getPropertyValue
getPropertyCSSValue
removeProperty
getPropertyPriority
setProperty
「length」や「item」なんてものもある。使い方もなんとなく想像できるかも。
試してみる。
var obj=document.createElement("div");
obj.setAttribute("style","z-index:inherit;dummy:inherit;color:dummy;");
obj.style.backgroundColor="inherit";
obj.style.dummy="inherit";
obj.style.fontSize="dummy";
for(var i=0;i<obj.style.length;i++){
    console.log(obj.style.item(i));
}
結果は次の通り。
z-index
background-color
余りにも想像したとおりで逆にびっくり。
for(key in style)でやると、定義していないものまで取得してしまうけど、こっちは定義済みのものだけ。
これは使えそう。
次、cssText。
多分こちらも想像した通りだと思う。
var obj=document.createElement("div");
obj.style.cssText="z-index:inherit;dummy:inherit;color:dummy;";
obj.style.backgroundColor="inherit";
obj.style.dummy="inherit";
obj.style.fontSize="dummy";
console.log(obj.getAttribute("style"));
var obj=document.createElement("div");
obj.setAttribute("style","z-index:inherit;dummy:inherit;color:dummy;");
obj.style.backgroundColor="inherit";
obj.style.dummy="inherit";
obj.style.fontSize="dummy";
console.log(obj.style.cssText);
結果は両方ともこれ。
z-index: inherit; background-color: inherit;
やっぱり。
というか、これって前からあった?
なんか、以前やったようなやってないような。
頭にcss-ってついているのはcssFloatと同じ名前の衝突が理由なのかな。
で、一番気になる以下のmethodを試す。
getPropertyValue
getPropertyCSSValue
removeProperty
getPropertyPriority
setProperty
実行したのはこれ。
var obj=document.createElement("div");
obj.style.color="#000000";
console.log(obj.style.getPropertyValue("color"));
obj.style.backgroundColor="red";
console.log(obj.style.getPropertyValue("background-color"));
console.log(obj.style.getPropertyCSSValue("background-color"));
obj.style.setProperty("z-index","3");
console.log(obj.style.getPropertyValue("z-index"));
で、処理結果。
rgb(0, 0, 0)
red
null
[Exception(略)
ん?あれ?
getPropertyCSSValueがnullを返してる。
setPropertyで落ちてる?
まずはgetPropertyCSSValueから調査。
googleで検索すると、ここが引っかかった。
ああ、なるほど。
上記codeでは、「#000000」で指定したはずの文字色を取得すると「rgb(0,0,0)」に変わってる。
文字列で取得すると、#000・#000000・rgb(0,0,0)の相互変換がプログラマがやらなくてはならない。
この変換を可能とするためにCSSValueというobjectを定義して、変換用のmethodを提供しようとしたらしい。
でも、ややこしいためか廃案となったと。
IEとOperaには実装されておらず、Firefoxは常にnullを返す。
でも、Safariには何故か実装されていると...。
そういえば、さっきgetPropertyCSSValueを調べたときにこれがhitしたけど、まさにCSSValueの話なのね。
前に読んだときはぜんぜん理解できなかったけど、やっと意味がわかった。
で、今気づいたけど、CSSStyleDeclarationを調べたときに、「CSSStyleDeclaration javascript」で検索していれば途中の調査いらなかったのか...。
次は、setProperty。
次のsiteを見つけた。
すごく詳しく書いてある。
いや、というか、はじめからここ探しきれていたら、ここまでやってきた調査っていらなかった...。
setProperty以外は見なかったことにして続き。
setPropertyは第一引数にcss名、第二引数に値、そして第三引数に優先度の指定が必要らしい。
なるほど。
getPropertyPriorityがあるのにsetPropertyPriorityがないので気にはなっていたけどそうゆうことか。
つまり、cssを設定するときには一緒に優先度も指定しなければならないが、逆に値と優先度の取得は別々にしなくてはならないと。
これを踏まえてcodeを書いた。
var obj=document.createElement("div");
obj.style.setProperty("color","#000000","");
obj.style.setProperty("background-color","red","important");
console.log(obj.style.cssText);
console.log(obj.style.getPropertyPriority("color"));
console.log(obj.style.getPropertyPriority("background-color"));
obj.style.removeProperty("color");
console.log(obj.style.cssText);
結果がこれ。
color: rgb(0, 0, 0); background-color: red ! important;
(空行)
important
background-color: red ! important;
これは楽しい。
かなりすっきりした。
Google

タグ クラウド