Hatena::ブログ(Diary)

Higé au lait Twitter

 | 

2008年01月27日

ActionScript

少し触ってみた。

  • JavaScript と同じ言語を元にしてるとは思えない複雑さ
  • 音楽、映像再生できるのはいいよね。 JavaScript もいつかきっとできるようにはなるんだろうけど。
  • コンパイルちょっとめんどい。
  • 型指定めんどい。
  • 引数、戻り値の型指定めんどい。
  • 型指定したほうがデバッグしやすいんだろうけど。
  • なんだかんだで書くこと多すぎ。
  • これ全部書くものじゃないのかな。
  • extends Sprite
  • trace ってどこに表示されるのさ?
  • スコープわからん。
  • 全然わからん。
  • 新しい言語を学ぶのは面白い。

で、ぜんぜんわからんなりに作ったのが これ

2008年01月18日

String 型とか参照型とか

js> new String("hoge") == new String("hoge")
false
js> "hoge" instanceof String
false
js> String("hoge") instanceof String
false
js> "hoge".constructor
function String() {
    [native code]
}
js> (new String("hoge")) instanceof String
true
js> (new String("hoge")).constructor
function String() {
    [native code]
}

これと同じことが Number にもいえる。

2008年01月16日

JavaScript 読書会 復習 & 感想

前回に引き続き参加してきた。

ライトニングトーク

  • JSDeffered: 使うよ。書き方面白いね。
  • Haskell: もう一度挑戦してみるよ。
  • 無限ループ: jsThread も使ってみるよ。

読書

6 章から 7.4まで


  • case ラベルに式を記述できるよ。
  • for 文の 初期化には var文だけつかえるよ。他の文はダメ。
var o = {x:1, y:2, z:3};
var a = new Array();
var i = 0;
for(a[i++] in o); //プロパティ名を配列にコピー
main : {
 ...
 if(shuldExit) break main;
 ...
} //break の ループ以外の使いかた
  • switch の default は最後じゃなくてもいいよ。
  • continue はループ内しか使えないよ。
for(let i = 0; ;) { /* i の有効スコープ */ } // ECMAScript 4 からだっけ? JavaScript 1.8 からっぽい。いつになったら実装されることやら
  • 文 と 式の違い。わかったようなわからなかたような。
  • Primary Expression

懇親会

  • Opera の話をたくさんしたような気がする。
  • Opera Widget について LT してもおもしろいかも。
  • ユーザ名は統一するべきだよね。

その他感想

  • 前回以上に高度になってたような気がする。
  • 自分一人で勉強したときには考え付かないようなことが話題にあがっていい刺激になった。
  • 読書会としてはぎりぎりの人数なのかも。
  • いつも通り、人見知りを発揮してほとんどの人と話さなかった。
  • id:amachang と話しているときのあまりにも緊張して漏らしそうになりました。
  • 鍋安すぎ

参考

del.icio.us/higeornage/js:reading+#2


関連エントリ

null と 0 の比較

null値の扱いの不思議 - hogehoge @teramako より。


null > 0

11.8.5 抽象的関係比較アルゴリズム (The Abstract Relational Comparison Algorithm) によると null が 0 になって

0 > 0 // false

null >= 0

も同じく

0 >= 0 // true

null == 0 // false

は、11.9.3 抽象的等価比較アルゴリズム (The Abstract Equality Comparison Algorithm)にしたがって 型変換は行われず falseになる。


== のときも 0 に変換してもよさそうなのに。

AutoPagerize SITEINFO

Yahoo pipes 検索結果

url:           'http://pipes\.yahoo\.com/pipes/search.*'
nextLink:     '//div[@class="paginate"]/a[last()]'
insertBefore: '//div[@class="paginate"]'
pageElement:  '//ul[@class="pipelist"]'

Code Snippets - Snipplr Social Snippet Repository

url:           'http://snipplr.com/'
nextLink:     '//div[@class="paging marg"]/a[contains(text(),"Next")]'
insertBefore: '//div[@class="paging marg"][2]'
pageElement:  '//ol[@class="snippets marg"]'

1.8

function sum(a) function(b) function(c) a + b + c;
sum(1)(2)(3) // 6

2008年01月14日

Kanasan.JS JavaScript第5版読書会#2 終了後

higeorange's js:reading+#2 Bookmarks で関連エントリを補足していきます。


私のエントリは後ほど。明日じゅうには書く。


あぁあと、参加したと思われる人の Blog & Twitter リスト

ブログリスト

twitter リスト


lingr のログからごにょったので参加していない。または別の人ですよみたいなことがあると思うので参考までに。

結構手作業でやりました。


追記

ブログリストのほうも html にしました。 Thx, yhara.

2008年01月13日

読書会予習

ちょっとどこまでやったか忘れたので 4章から


js> +"300"
300
js> typeof +"300"
number
js> +"300hoge"
NaN
js> typeof +"300hoge"
number

js> typeof NaN // NaN は値の定まらない数値
number

js> "ab" < "bc"
true
js> "ab" < "abc"
true
js> "ab" < 3
false
js> "A" < "a"
true
js> "Ab" < "bA"
true

js> 2 in [1, 3]
false
js> 2 in [1, 3, 5]
true
js> "2" in [1, 3, 5]
true

とりあえず 5章まで。ほぼコードのみ。読書会終了後に別エントリでいろいろと書き足す。


当日参考になりそうなところを列挙


追記 1/14

やっぱり前回に読んだ内容だった。

まぁいい復習になったとおもえばいいか。

配列に含まれてるかどうか

以前 for ループで調べていたけど、join して indexOf してみるのはどうかと。

Array.prototype.contains = function(o) {
    var sep = /*配列の各要素と探すものに含まれていない文字列*/ 
    return (sep + this.join(sep) + sep).indexOf(sep + o + sep) >= 0;
}

もんだいは配列の要素をつなぐ文字列の選定が難しいところ。ってことで未完。

2008年01月11日

oAutoPagerize SITEINFO: my opera photo

url:           'http://my.opera.com/.*/albums/show.dml.*'
nextLink:     '//div[@id="albumnav"]/p[@class="pagenav"]/span[last()]/a'
insertBefore: '//div[@id="albumnav"]'
pageElement:  '//div[@id="mypix"]'

Kanasan.JS JavaScript第5版読書会#2

前回に続き参加することにした。 amachang がくるらしい。


id:tomoya さんとか渡辺さんとか芦塚さんとか一緒にどうっすか?と、さりげなく誘ってみるテスト。

2008年01月10日

del.icio.us network -> opml

network に登録しているものを個別に livedoor Reader で購読してみる。*1


まず、network の json から opml を生成。

netwrok2opml.rb

#!/usr/bin/ruby

require 'json'
require 'open-uri'

username = ARGV.shift
s = ''
open("http://del.icio.us/feeds/json/network/#{username}") { |f|
    s = f.read
}
json = JSON.parse s

print <<-EOS
<?xml version="1.0" encoding="utf-8"?>
<opml version="1.1">
<head>
    <title>del.icio.us network</title>
</head>
<body>
EOS

json.each { |u|
    print %Q{    <outline title="del.icio.us / #{u}" text="del.icio.us / #{u}" htmlURL="http://del.icio.us/#{u}" type="rss" xmlUrl="http://del.icio.us/rss/#{u}" />\n}
}
print "</body>\n"
print "</opml>\n"
$ ruby network2opml.rb [ユーザ名] > network.xml

でできた、OPML を livedoor Reader にインポート。


まとめて読むのと個別に読むのとどちらがいいか確かめる。


json パーサーとして http://rubyforge.org/projects/json/ を使用した。 わざわざ使わなくてもよかった気もするけど。

opml は bloglines のものを参考にした。仕様が全くわかっていない。

*1:今までは network のフィードを購読

2008年01月09日

for ページで自分が保存していないものだけを表示する

del.icio.us で影の薄い機能にスポットを当ててみる。


for なんてつかわねーよなんていわないでください。

どんどん for:higeorange タグをつけてブックマークを強要してください。


// ==UserScript==
// @name      del.icio.us show only not saved for
// @namespace http://opera.higeorange.com/
// @include   http://del.icio.us/for*
// ==/UserScript==

(function() {
    var posts = document.evaluate(
        '//li[@class="post"]',
        document,
        null,
        6,
        null);
    var saved = /(saved)/;
    for(var i = 0, l = posts.snapshotLength; i < l; i++) {
        if(saved.test(posts.snapshotItem(i).getElementsByTagName('div')[0].innerHTML)) {
            posts.snapshotItem(i).style.display = 'none';
        }
    }   
})();

2008年01月08日

AutoPagerize の弱点 : ページデザイン

AutoPagerize を使っているんだけど、だいぶん前から気になっていることをひとつ。


このページのようにフッタ部分がでかいと AutoPagerize は相性悪いんではないかと。

スクロールするたびにページが追加されてフッタ部分のリンクをクリックできない。これは悩ましい。


AutoPagerize を入れてる人なんて少ないんだろうから気にする必要はないとは思うが。

2008年01月07日

文字列繰り返し

String.prototype.repeat = function(n, sep) {
    this.n = this.n + 1 || 1 
    if(this.n >= n) return this;
    return this + (sep || "") + arguments.callee.call(this, n, sep);
}

print("hoge".repeat(3, '+')) // hoge+hoge+hoge
print("fuga".repeat(4, '-')) // fuga-fuga-fuga-fuga
print("foo".repeat(4)) // foofoofoofoo
 |