Hatena::ブログ(Diary)

Higé au lait Twitter

 | 

2006年09月29日

600613 s34Ch 4 H4xR5

Google

どんな化け方してるんだよと,初めは思った。

RSSリーダー進化

Google ReaderがUIを一新したようで当然のようにOperaは動かないわけで。


Bloglinesもちょっと変わったような気がするんだが…。(The Wizard Behind the Curtains。書いてあった。

速度あがってるね。


参考

Google Reader、新バージョンでパワーアップ | TechCrunch Japan

2006年09月28日 コンビニ弁当をオーブンで…

はてなブックマークは

スラッシュをタグとして使えないのか。

? / % [ ] など一部の記号はタグに使えません。

http://b.hatena.ne.jp/help/tag


ライブドアクリップはスラッシュが消えるのか。

8000越え間近で感じること

ブックマークしすぎ感がある。


どんどん情報が埋もれていく。

探している記事が見つからない。

-> del.icio.usの検索がしょぼすぎ。タグだけでは検索に限界がある。(javascriptとタグづけしたのが1000越え)

-> はてなブックマークで検索。完全な同期が必要。


過去にブックマークしたのにもう一度ブックマークしようとしている。

-> もう一度ブックマークすると一番上にくるようにしたい。

-> 一度削除してもう一度ブックマークか?


関連

ソーシャルブックマークのポスト同士の関連付け - Higé au lait

ソーシャルブックマークのポスト同士の関連付け その2 - Higé au lait

2006年09月27日

コマンドプロンプトでランダムなパスワードを作成する方法(注意)

A Blog For All: Hidden Password Generator In Windows Xp


コマンドプロンプトで

net user administrator /random

と打つだけ。

f:id:higeorange:20060927105648j:image

注意

ちゃんとメモをとっておくように。アドミニストレータのパスワードが変わります。


追記

> net user <ユーザ名> <パスワード>

でパスワードを変更できるのを利用したもの。

> net help user

も見る。

参考

Net accounts / Net user / Net group - Windows CMD - SS64.com

no title

Operaがdel.icio.usの一部のページで固まるのをどうにかする

Operaでdel.icio.usを使っているといらいらすることが多い。その中でも登録しているタグの多いユーザのページで固まってしまうことがある。これをどうにかしたいと思う。


使うのはOperaの"Contents Block"である。

Contents Blockに

http://del.icio.us/ui/static/lib.js*

を追加する。これを追加することによって以下の機能が使えなくなってしまうが一部のページで固まってしまう問題は解消されると思う。

使えなくなってしまう機能。

  • その場で編集機能。"edit"を押すと直接ポスト画面に飛ぶ。もともと使えないから問題無し。
  • 削除するときの確認が表示されない。
  • タグバンドル等の折り畳みができなくなる。

他にもあるとは思うが,普通に使う分には問題ないと思う。

追記

http://del.icio.us/ui/static/delicious.js*

でもいいかもねぇ。こっちを登録しても解消される。どのあたりが問題なのか解決しなければ。

html要素作成

del.icio.usのlib.jsから持ってきたのをちょっといじって,

function extend(dest, src){
    if(!src)
        return dest;
    for(var k in src){
        if(typeof src[k] == 'object' && src[k].constructor == Object)
            extend(dest[k],src[k]);
        else
            dest[k] = src[k];
    }
    return dest
}

とすると

var t = extend(document.createElement('div'),{
    id : 'foo',
    className : 'bar',
    style : {
        border : '1px #000 solid',
        margin : '10px',
        padding : '5px'
    },
    innerHTML : 'hogehoge'
});

な感じで書けてみやすい。速いかどうかはしらない。

計測してみる

比較するのは以下の3つ。

普通に

window.onload = function () {
    var s = new Date().getTime();
    var ul = document.createElement('ul');
    for(var i=0;i<10000;i++){
        var t = document.createElement('li');
        t.style.border = '1px #000 solid';
        t.style.margin = '10px';
        t.style.padding = '5px';
        t.innerHTML =  'hoge'+i;
        ul.appendChild(t);
    }
    document.getElementByTagName(' .appendChild(ul);
    var e = new Date().getTime();
    alert((e-s)+'ms');
}

extend()を使って

window.onload = function () {
    var s = new Date().getTime();
    var ul = document.createElement('ul');
    for(var i=0;i<10000;i++){
        var t = extend(document.createElement('li'),{
            'style' : {
                'border' : '1px #000 solid',
                'margin' : '10px',
                'padding' : '5px'
            },
            'innerHTML' : 'hoge'+i
        });
        ul.appendChild(t);
    }
    document.body.appendChild(ul);
    var e = new Date().getTime();
    alert((e-s)+'ms');
}

withを使って

window.onload = function () {
    var s = new Date().getTime();
    var ul = document.createElement('ul');
    for(var i=0;i<10000;i++){
        var t = document.createElement('li');
        with(t){
            with(style){
                border = '1px #000 solid';
                margin = '10px';
                padding = '5px';
            }
            innerHTML = 'hoge' + i;
        }
        ul.appendChild(t);
    }
    document.body.appendChild(ul);
    var e = new Date().getTime();
    alert((e-s)+'ms');
}

結果

Firefox1.5.0.7 on Linux
普通extend()with
1回目596568915783
2回目589369445783
3回目592669345862
4回目588370015871
5回目589269335929
平均591169525845
Opera9.02 on Linux
普通extend()with
1回目156319831721
2回目184220272169
3回目187021581828
4回目150420091736
5回目174218151719
平均164419981834

んーOpera速い(違


やっぱりextend()遅いかー

追記

var t = extend(document.createElement('div'),{
    id : 'foo',
    className : 'bar',
    style : "border : 1px #000 solid;margin : 10px;padding : 5px",
    innerHTML : 'hogehoge'
});

これでもいけるじゃないか。てことはいじらなくてもよかったのか…。

参考

404 Blog Not Found:javascript - DOMMakerで楽々DHTML

これはよさそうだ。

404 Not Found

これもいいねぇ。

追記 09/29 5:05

prototype.js MochiKitがあるとうごかねー(多分

以下Operaのjsコンソール

JavaScript - http://d.hatena.ne.jp/hatenadiary/
Event thread: load
Error:
name: TypeError
message: object: [object Object] is not iterable

2006年09月26日

2006年09月25日

文字列からある文字が何個含まれているか数える

splitを使って

String.prototype.countS = function(str) {
    return this.split(str).length-1;
}

matchを使って

String.prototype.countM = function(str) {
    return this.match(RegExp(str,'g')).length;
}

replaceをつかって

String.prototype.countR = function(str) {
    var n=0,regex = RegExp(str,'g');
    this.replace(regex,function() {
        n++;
    });
    return n;
}

実行例

js> a='hoge fuga hige mage'
hoge fuga hige mage
js> a.countS('g')
4
js> a.countM('ge')
3
js> a.countR('h')
2

2006年09月24日

del.icio.usはOperaにやさしくないと思われたが意外とやさしい

  • 使ってるタグの多い人のページをみると固まる。
  • その場で編集機能が動かない。
  • Bundle Tagをいじろうとするが反応が鈍い。

こんなこともあるけど,

その場で編集機能乱用でアクセス拒否にあうことがない


てことで,del.icio.usにはFirefox Opera が最適です。

orz

f:id:higeorange:20060924074835p:image

アクセス拒否食らったw。


追記 9/25 8:40

書くの忘れてたけど,アクセス拒否は1時間くらいで解除されました。

del.icio.usからアクセス拒否を食らう方法

その場で編集機能を使いひたすらタグ付け&変更,コメント付けをする。もちろんFirefoxで。

ひたすらってのは1分間に2個のポストを編集って感じ。まとめて編集するときは一括編集を使おうという教訓をえた。

2006年09月23日

まとめて検索

Yahoo!


対応しているのは,YouTube, Google Video, Grouper, MSN Video, AOL, Ourmedia, ROOTV, BBC, IFILM, CBS, Yahoo! Music, Sony BMG, ESPN, MTV 他いろいろ。


AOLがやってるのね。

気にくわない。

フィードを2つ以上吐いてるサイトを登録しようとした時に,片方登録していたとしても登録画面にはまるでまだ登録されていないかのように表示されるのがいやだなぁ。


そろそろ,Livedoor Readerに移ってもいいんだけどなんか馴染めないんだよなぁ。

2006年09月22日

higeorange2006-09-22

今日買った本

アキハバラ@DEEP (文春文庫)

アキハバラ@DEEP (文春文庫)

2006年09月21日

Plaggerをいれてみた

なんどか失敗していたけどついにインストールに成功した。

さっそくBloglinesGmailに送ってみることにした。んが,送信はできるものの本文が表示されない.…。


f:id:higeorange:20060921064813p:image


config.yamlは。

global:
  plugin_path:
    - /home/higeorange/plagger/plugins
  assets_path: /home/higeorange/plagger/assets
  timezone: Asia/Tokyo
  log:
    level: info

plugins:
  - module: Subscription::Bloglines
    config:
      username: ********
      password: ********
      mark_read: 0
      fetch_meta: 1

  - module: Widget::BloglinesSubscription

  - module: Publish::Gmail
    config:
      mailto:   ******@gmail.com
      mailfrom: *******@gmail.com
      mailroute:
        via: smtp_tls
        host: smtp.gmail.com:587
        username: *****@gmail.com
        password: *****

んーなんでだろうかなぁ。なんか足りないのか?偉い人教えてください。



とりあえず,del.icio.usをはてなbookmarkにバックアップをとるようにしてみた*1

404 Not Foundを参考にした。

追記 9/22 2:15

Publish::Feedで試してみたところ本文が取得できてないわけではなさそうなのでGmailに送る際になにかあるんだろうなぁ。


ついでにlivedoor clipにもバックアップ。


解決

gmail_notify.ttがおかしかっただけだった。"/root/.cpan/build/Plagger-0.7.12/assets/plugins/Publish-Gmail/gmail_notify.tt"をコピーして解決。

参考にした

他多数

*1:こっちは問題なく動いた

2006年09月18日

Bookmarkletをみやすく整形してみる。

NOT_FOUND 404

こんなのができた。

以下整形してくれるコード。

function exBookmarklet(str) {
    var pattern = /(;)|({)|(})|(javascript:)/g;
    var n = 0;
    return str.replace(pattern,function($0,$1,$2,$3,$4){
        var tab = '    ';
        if($2)
            n++;
        else if ($3)
            n--;
        return $0+unescape('%0D%0A')+tab.repeat(n);
    });
}

"}"のときのインデントに不満が残る。あと改行コードがあやしい。

すべての場合において思った通りに動くかは不明。


あとString.repeat()は

String.prototype.repeat = function (l) {
    return Array(l+1).join(this);
}

Page not found – BigBold


参考

改行の研究


vim

function! ExBookmarklet()
    let lines = split(getline('.'),'^javascript:(\?\zs\|;\zs\|{\zs\|}\zs')
    let n = line('.')
    for i in lines
        call setline(n,i)
        let n += 1
    endfor
endfunction

インデントはしません。続きの行を上書きします。

どんな感じに動くかのデモ

2006年09月17日

replaceメソッドについて

replaceの第2引数に関数を持ってきたときの動作とか,正規表現のグルーピングによる後方参照とか。

String.prototype.escapeHTML = function(){
    return this.replace(/(&)|(")|(<)|(>)/g,function($0,$1,$2,$3,$4){
        if($1)
            return "&amp;";
        else if($2)
            return "&quot;";
        else if($3)
            return "&lt;";
        else
            return "&gt;";
    });
}

なんてものを書いてみたけど, escapeHTML の実装 3 パターン (ベンチマーク付き) - (new Hatena).blog()の2つめのがエレガントだなぁとおもった。


参考

メモツールとして

Vendre un bien qui est loué à en Poitou Charente : les droits du propriétaire et du locataire |

んー使えるかもしれないね。


日付の挿入は前作った,日付をタグとして入力する。 - Higé au laitをごにょごにょすればできるかなぁと思った。


日付をタグとして挿入するBookmarlet

javascript:(function(){var mary=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');var c=new Date();var y=c.getYear();var ry=(y < 2000)?y+1900:y;var m=c.getMonth();var d=c.getDate();var lm=mary[m];swap(ry+' '+lm+' '+d);})(); 

で考えてみた。

追記 9/18 6:40

変数"d"の前に"var"が抜けていたのを修正。


"2006年 9月 17日"みたいなスタイル。

javascript:(function(){var c=new Date();var y=c.getYear();var ry=(y < 2000)?y+1900:y;var m=c.getMonth()+1;var d=c.getDate();swap(ry+'年 '+m+'月 '+d+'日');})();

2006年09月16日

last.fmに怒られた。

Some tracks you submitted have not been added to your profile for the following reason:

Spam protection triggered: You submitted a track dated earlier than your last submission.

んーなんでだろ。rhythmboxで送信できない…。

アでけた。上のメッセージはなんだったんだろうか…。

2006年09月15日

最新タイトルをひょうじしてみた

んーちょっと様子見。


2カラムにしてみたんだがやっぱり邪魔だなぁ。デザインがダメなせいもあるんだろうけど。


参考

初めてのブログを訪問したとき、どこから見る? :: Love & Design ::

2006年09月11日 引退

約数を表示するメソッドのスピードアップ。

Number.prototype.yakusu = function() {
    var result = [];
    var l = this + 1;
    for(var i=1;i<l;i++) {
        if(this % i == 0) {
            result.push(i);
            if(i != this / i)
                result.push(this / i);
            l = this / i;
        }
    }
    return result;
}

返される値の順番がが気持ち悪いけど。

大きい数の素数の場合だとあんまりはやくないか。

実行例

var a=100
print(a.yakusu());

----
1,100,2,50,4,25,5,20,10

修正

1の約数が返らないのを修正。もういっ回修正。

こっちの方が良さそうです。

チーム俺等

2006年09月08日

タスク管理+メモ+フィードリーダー+α

Makagiga

タスク管理

f:id:higeorange:20060908015924p:image


重要度,進行度,期限の指定が可能

メモ+HTMLエディタ

f:id:higeorange:20060908015828p:image


HTMLを書くとプレビューできる

フィードリーダー

f:id:higeorange:20060908015847p:image

その他

絵も書ける(画像処理もできる)。マウスジェスチャー搭載(ただしミドルクリック)


JRE6が必要。

ファイルを渡せるのか…

// test.js
load('Array.js'); //あまり使えないArrayメソッドのかかれたファイルをロード
//複数ロードするときは load('Array.js','hogehoge.js',....)

a=[1,2,3,4,5]
b=[1,1,2,3,3,4,4,5]
c=[2,1,3,1,2,4,1,5]

print('exist:'+a.exist(3));
print('uniq 1:'+b.uniq());
print('uniq 2:'+c.uniq());

$ js test.js

exist:true
uniq 1:1,2,3,4,5
uniq 2:3,2,4,1,5

もっと早く気づいとくんだった。

いままではシェル起動して”js>"の後にいちいち打ち込んでた。


以下メモ。

js> help()
JavaScript-C 1.5 2004-09-24
Command   Usage                  Description
=======   =====                  ===========
version   version([number])      Get or set JavaScript version number
options   options([option ...])  Get or toggle JavaScript options
load      load(['foo.js' ...])   Load files named by string arguments
print     print([exp ...])       Evaluate and print expressions
help      help([name ...])       Display usage and help messages
quit      quit()                 Quit the shell
gc        gc()                   Run the garbage collector
trap      trap([fun, [pc,]] exp) Trap bytecode execution
untrap    untrap(fun[, pc])      Remove a trap
line2pc   line2pc([fun,] line)   Map line number to PC
pc2line   pc2line(fun[, pc])     Map PC to line number
build     build()                Show build date and time
clear     clear([obj])           Clear properties of object
intern    intern(str)            Internalize str in the atom table
clone     clone(fun[, scope])    Clone function object
seal      seal(obj[, deep])      Seal object, or object graph if deep

追記 20:51

vim

:%!js

で動作確認できるね。

さらに追記 9/9 18:50

上のだと置き換えてしまうのがちょっといやなので(uで戻ればいいけど),

:exe '!js %'

こっちのほうがよさそうだ。ほんとはステータス行の下のコマンド打つところに表示させたいんだけどどうやればいいんだろうか?調べる。

2006年09月07日

素数

昨日作った約数のリストを生成するやつをつかって素数であるかの判定するメソッド。

Number.prototype.sosu = function() {
    var c = false;
    var tmp = this.yakusu();
    if((tmp[0] == 1) && (tmp[1] == this))
        c = true
    return c;
}

実行例

js> a=1
1
js> a.sosu()
false
js> b=7
7
js> b.sosu()
true
js> c=33
33
js> c.sosu()
false
js> d=53
53
js> d.sosu()
true

でかい数だとかなり時間かかるんだろうなぁ。私のPCで7桁の数字になると待たされるようになった。メモリ馬鹿食いだし…。ダメだ…。

あまりつかえないArrayメソッドを作ってみた2

Array.prototype.exist = function(st) {
    var c = -1;
    for(var i=0;i<this.length;i++) {
        if(this[i] == st) {
            c = i;
            break;
        }
    }
    return c;
}

Array.prototype.uniq = function() {
    var tmp = this.clone();
    var tmp2 = tmp.clone();
    var result = new Array();
    for(var i=0,len=tmp.length;i<len;i++) {
        tmp2.shift();
        if(tmp2.exist(tmp[i])<0)
            result.push(tmp[i]);
    }
    return result;
}

再びclone()メソッドを使う。

exist()は最初に一致した要素のインデックスが帰ってくる。一致する要素が複数ある場合が問題だなぁ。

uniq()の順番が気持ち悪くなる…。

実行例

js> a=[1,2,3,4,5]
1,2,3,4,5
js> a.exist(4)
3
js> a.exist(6)
-1
js> b=[1,1,2,3,3,4,4,5]
1,1,2,3,3,4,4,5
js> b.uniq()
1,2,3,4,5
js> c=[2,1,3,1,2,4,1,5]
2,1,3,1,2,4,1,5
js> c.uniq()
3,2,4,1,5

参考

no title

no title

追記(手直し) 9/8 10:46

Array.prototype.exist = function(st) {
    var c = false;
    for(var i=0;i<this.length;i++) {
        if(this[i] == st) {
            c = true;
            break;
        }
    }
    return c;
}

Array.prototype.uniq = function() {
    var tmp = this.clone();
    var tmp2 = tmp.clone();
    var result = new Array();
    for(var i=0,len=tmp.length;i<len;i++) {
        tmp2.shift();
        if(!tmp2.exist(tmp[i]))
            result.push(tmp[i]);
    }
    return result;
}

exist()をbool値を返すように変更。インデクッスを返すのは,”Array.indexOf/lastIndexOf”ってのが実装されるようですし。(Firefox1.5だと使えた。)。

2006年09月06日

あまりつかえないString,Numberメソッドを作ってみた

String.js(前回の手直しを含む)

//指定した数の文字づつ取り出して配列に
String.prototype.cut = function(n){
    var result = new Array();
    var len = this.length;
    var num = (!n) ? 1 : n;
    if(num<len) {
        var i = 0;
        while(i<len){
            var str = this.substr(i,num);
            result.push(str);
            i += num;
        }
        return result;
    } else {
        return;
    }
}

//ソート
String.prototype.sort = function(){
    return this.split('').sort().join('');
}

//逆順並び替え
String.prototype.reverse = function(){
    return this.split('').reverse().join('');
}

//繰り替えしセパレータ付き
String.prototype.repeat = function (n,sep) {
    var result = [];
    var rn = (n)? n : 2;
    for(var i=0;i<rn;i++){
        result.push(this);
    }
    var s = (!sep) ? "" : sep;
    return result.join(s);
}

// Haskellのtails
String.prototype.tails = function () {
    var result = new Array(this);
    var strArry = this.split('');
    var i = 0;
    while(i<this.length) {
        strArry.shift();
        result.push(strArry.join(''));
        i++;
    }
    return result;
}

実行例

js> browser = 'opera'
opera
js> browser.cut()
o,p,e,r,a
js> browser.cut(3)
ope,ra
js> browser.cut(6)
js> browser.sort()
aeopr
js> browser.reverse()
arepo
js> browser.repeat(5,":")
opera:opera:opera:opera:opera
js> browser.repeat()
operaopera
js> browser.repeat(3)
operaoperaopera
js> browser.tails()
opera,pera,era,ra,a,

Number.js

Number.prototype.abs = function() {
    return (this < 0) ? -this : this;
}

Number.prototype.nList = function(){
    var narry = [];
    for(var i=0,len=this;i<len;i++) {
        narry.push(i+1);
    }
    return narry;
}

Number.prototype.yakusu = function() {
    var result = [];
    var narry = this.nList();

    for(var i=0,len=narry.length;i<len;i++) {
        if(this % narry[i] == 0) {
            result.push(narry[i]);
        }
    }
    return result;
}

実行例

js> a=10
10
js> a.nList()
1,2,3,4,5,6,7,8,9,10
js> a.yakusu()
1,2,5,10
js> b=-10
-10
js> b.abs()
10

あまりつかえないArrayメソッドを作ってみた

Haskellの関数を実装してみる。4章(普通のHaskellプログラミング)までで簡単にできそうなものを。

// http://la.ma.la/blog/diary_200510062243.htm
Array.prototype.clone = function(){
    var tmp = [];
    for(var i=0;i<this.length;i++){
        tmp[i] = this[i]
    }
    return tmp
}

Array.prototype.take = function(n) {
    return this.slice(0,n);
}

Array.prototype.unwords = function() {
    return this.join(" ");
}

Array.prototype.tails = function() {
    var ary = this.clone();
    var tmp = ary.clone();
    var result = new Array(tmp);
    for(var i=0,len=ary.length;i<len;i++) {
        ary.shift();
        tmp = ary.clone();
        result.push(tmp);
    }
    return result;
}

実行例

js> a=[1,2,3,4,5]
1,2,3,4,5
js> a.take(3)
1,2,3
js> a.unwords()
1 2 3 4 5
js> a.tails()
1,2,3,4,5,2,3,4,5,3,4,5,4,5,5,
// [[1,2,3,4,5],[2,3,4,5],[3,4,5],[4,5],[5],[]] となってるはず。

一番上のclone()はtails()を作るために拝借。

同じく紹介されていたclone()メソッド

Array.prototype.clone = function(){
    return Array.apply(null,this)
}

だとうまくいかなかったので上のを使った。

あぁコメント欄に書いてあった。

2006年09月05日

昨日買った本


Haskellおもしれぇ.

普段書いてるのと違うから勉強のしがいがある。

2006年09月04日

お魚シェル

no title


f:id:higeorange:20060904214034p:image


  • カラフル。コマンドが間違っていたら赤く表示してくれるなど。
  • 補完がお節介すぎるほど。ディレクトリまで表示してくれ,cdなしで飛べる。さらには説明つき(上の図)

and more(試せてないだけ)

参考

Fish - The friendly interactive shell [LWN.net]

Fish: the friendly interactive shell | Ars Technica

2006年09月03日

画像から配色を抽出する

no title


f:id:higeorange:20060903054803p:image


こんな感じでウェブサイトのスクリーンショットから色も抽出したりなんかもできる。


関連

色を共有する - Higé au lait

昨日借りたDVD

アイランド 特別版 [DVD]

アイランド 特別版 [DVD]

サハラ -死の砂漠を脱出せよ- [DVD]

サハラ -死の砂漠を脱出せよ- [DVD]

ハウス・オブ・ザ・デッド [DVD]

ハウス・オブ・ザ・デッド [DVD]

デッドコースター/ファイナル・デスティネーション2 [DVD]

デッドコースター/ファイナル・デスティネーション2 [DVD]

 |