月末には京都に引っ越します。
職種はサービスクリエイターで、新サービスの開発などをやる予定です。
そんなわけでよろしくお願いします。
[d.hatena.ne.jp]
6455 items (6455 unread) in 32 feeds
Chinese
(5202 unread)
Japanese
(1139 unread)
English
(94 unread)
Object.deep_clone = function(obj){
return (typeof uneval == "function") ? eval(uneval(obj)) : eval(Object.toJSON(obj));
}
// Object.toJSONは別途適当に実装。prototype.jsに入ってたりしますね。
見てのとおり、一つ嫌な問題があって、prototypeに割り当てているにも関わらず、for (k in object)でclone自身が見えてしまうのです。これって何とかならないのかなあ....__proto__プロパティを使う方法だと新しすぎる?
obj = {keyname: "hoge"};
"toString" in obj // true
"hasOwnProperty" in obj // true
obj.hasOwnProperty("keyname") // true
obj.hasOwnProperty("hasOwnProperty") // falsefunction clone(obj){
var F = function(){};
F.prototype = obj;
return new F;
}
Object.deep_clone = function(obj){
return (typeof uneval == "function") ? eval(uneval(obj)) : eval(Object.toJSON(obj));
}
// Object.toJSON???????????????????????????prototype.js?????????????????????????????????
??????????????????????????????????????????????????????prototype?????????????????????????????????????????????for (k in object)???clone????????????????????????????????????????????????????????????????????????????????????....__proto__????????????????????????????????????????????????????
obj = {keyname: "hoge"};
"toString" in obj // true
"hasOwnProperty" in obj // true
obj.hasOwnProperty("keyname") // true
obj.hasOwnProperty("hasOwnProperty") // falsefunction clone(obj){
var F = function(){};
F.prototype = obj;
return new F;
}
// 常にキャッシュを使う
Cache.prototype.check_expr = function(){return true};
// 設定変えて再描画
Config.use_autoreload = false;
Config.touch_when = "manual";
Config.view_mode = "flat";
Config.limit_subs = 100;
get_unread.cache.max = 500;
// 再描画
subs.update();
// reload無効化
Control.reload_subs = function(){}
// 全部先読み
Ordered.list.forEach(prefetch);
// ??????????????????????????????
Cache.prototype.check_expr = function(){return true};
// ????????????????????????
Config.use_autoreload = false;
Config.touch_when = "manual";
Config.view_mode = "flat";
Config.limit_subs = 100;
get_unread.cache.max = 500;
// ?????????
subs.update();
// reload?????????
Control.reload_subs = function(){}
// ???????????????
Ordered.list.forEach(prefetch);
(function(){
var l=function(src){
var s=document.createElement('script');s.charset='utf-8';s.src=src;
document.getElementsByTagName('head')[0].appendChild(s);
};
l("http://s.hatena.ne.jp/js/HatenaStar.js");
var t = setInterval(function(){
try{
Hatena.Star.ConfigLoader.addEventListener('load', function(){
new Hatena.Star.EntryLoader();
});
new Hatena.Star.ConfigLoader();
clearInterval(t);
} catch(e){}
}, 100);
})();
(function(){
var l=function(src){
var s=document.createElement('script');s.charset='utf-8';s.src=src;
document.getElementsByTagName('head')[0].appendChild(s);
};
l("http://s.hatena.ne.jp/js/HatenaStar.js");
var t = setInterval(function(){
try{
Hatena.Star.ConfigLoader.addEventListener('load', function(){
new Hatena.Star.EntryLoader();
});
new Hatena.Star.ConfigLoader();
clearInterval(t);
} catch(e){}
}, 100);
})();
(function(){
var w = typeof unsafeWindow != "undefined" ? unsafeWindow : window;
var initialized = false;
var s = document.createElement('script');
s.src = ' [s.hatena.ne.jp] ';
s.charset = 'utf-8';
document.body.appendChild(s);
var t = setInterval(function(){
if(w.Hatena){
init();
initialized = true;
clearInterval(t);
}
}, 100);
function init(){
w.Hatena.Star.EntryLoader.headerTagAndClassName = ['h2', 'item_title'];
w.Keybind.add('H', function(){
new w.Hatena.Star.EntryLoader();
});
}
})();
(function(){
var w = typeof unsafeWindow != "undefined" ? unsafeWindow : window;
var initialized = false;
var s = document.createElement('script');
s.src = ' [s.hatena.ne.jp] ';
s.charset = 'utf-8';
document.body.appendChild(s);
var t = setInterval(function(){
if(w.Hatena){
init();
initialized = true;
clearInterval(t);
}
}, 100);
function init(){
w.Hatena.Star.EntryLoader.headerTagAndClassName = ['h2', 'item_title'];
w.Keybind.add('H', function(){
new w.Hatena.Star.EntryLoader();
});
}
})();
prompt("これをコピーする",subs.model.list.pluck("feedlink").toJSON());prompt("これをコピーする",subs.model.list.pluck("link").toJSON());(function(){var c=prompt("さっきの貼り付ける");if(!c)return;var d=eval(c);var m={};d.forEach(function(s){m[s]=1});var total=0;var p=0;var wait=100;subs.model.list.forEach(function(s){if(m.hasOwnProperty(s.feedlink)){new API("/api/feed/unsubscribe").post({subscribe_id:s.subscribe_id},function(){p++;message(total-p)});total++}}.later(wait+=100))})();(function(){var c=prompt("さっきの貼り付ける");if(!c)return;var d=eval(c);var m={};d.forEach(function(s){m[s]=1});var total=0;var p=0;subs.model.list.forEach(function(s){if(m.hasOwnProperty(s.link) && s.feedlink.indexOf('?')==-1){(function(){new API("/api/feed/unsubscribe").post({subscribe_id:s.subscribe_id},function(){p++;message(total-p)})}).later(100*total)();total++}})})();
prompt("????????????????????????",subs.model.list.pluck("feedlink").toJSON());prompt("????????????????????????",subs.model.list.pluck("link").toJSON());(function(){var c=prompt("???????????????????????????");if(!c)return;var d=eval(c);var m={};d.forEach(function(s){m[s]=1});var total=0;var p=0;var wait=100;subs.model.list.forEach(function(s){if(m.hasOwnProperty(s.feedlink)){new API("/api/feed/unsubscribe").post({subscribe_id:s.subscribe_id},function(){p++;message(total-p)});total++}}.later(wait+=100))})();(function(){var c=prompt("???????????????????????????");if(!c)return;var d=eval(c);var m={};d.forEach(function(s){m[s]=1});var total=0;var p=0;subs.model.list.forEach(function(s){if(m.hasOwnProperty(s.link) && s.feedlink.indexOf('?')==-1){(function(){new API("/api/feed/unsubscribe").post({subscribe_id:s.subscribe_id},function(){p++;message(total-p)})}).later(100*total)();total++}})})();

<key>WebKitFixedFont</key> <string>MS ゴシック</string> <key>WebKitStandardFont</key> <string>MS Pゴシック</string>
<key>MS ゴシック</key> <string>C:WINDOWSFontsmsgothic.ttc</string> <key>MS Pゴシック</key> <string>C:WINDOWSFontsmsgothic.ttc</string>
(function(){
var api="http://rpc.reader.livedoor.com/feed/discover?url=";
window.__feed_discover=function(r){
var seen={};
var links=document.links;len=links.length;
for(var i=0;i<len;i++){
var a=links[i];href=a.href;
for(var l=0;l<r.length;l++){
var f=r[l];
if(f.link&&href.indexOf(f.link)!=-1&&!seen[f.link]){
seen[f.link]=true;
a.style.border="2px solid #F00";
a.title=f.subscribers_count + " users / "+ f.feedlink;
}
}
}
};
api+=encodeURIComponent(location.href)+'&format=json&callback=__feed_discover';
var s=document.createElement('script');s.src=api;document.body.appendChild(s);
})();
count[key] = count[key] ? count[key] + 1 : 1;
count[key] = ++count[key] || 1;
count[key]がNumberまたはundefinedであるとして、個人的には
count[key] = (count[key] || 0) + 1;
のほうが好みです。
JavaScriptでは問題ないとはいえ、言語によってはi = ++iの動作が未定義だったりするので。
0: /html[0]/body[0]/div 1: /html[0]/body[0]/div[0]/div 2: /html[0]/body[0]/div[0]/div[0]/ul[0]/li 3: /html[0]/body[0]/div[0]/div[0]/ul[0]/li 4: /html[0]/body[0]/div[0]/div[0]/ul[0]/li 5: /html[0]/body[0]/div[0]/div[0]/ul[0]/li
/html[0]/body[0]/div[0]/div[0]/ul[0]/li[3]/a[0] /html[0]/body[0]/div[0]/div[0]/ul[0]/li[3]/a[1] /html[0]/body[0]/div[0]/div[0]/ul[0]/li[3]/a[2] /html[0]/body[0]/div[0]/div[0]/ul[0]/li[3]/a[3]
[
{level:6, length:(下位のtextNodeのlengthの合計), text: textNodeを連結したもの }
{level:6, length:(下位のtextNodeのlengthの合計), text: textNodeを連結したもの }
{level:6, length:(下位のtextNodeのlengthの合計), text: textNodeを連結したもの }
]
require 'gearman/worker'
worker = Gearman::Worker.new
worker.debug = 1
worker.job_servers("127.0.0.1")
worker.register_function("sum"){|job|
(a, b) = job.arg.split(",")
a + b
}
worker.work
use strict;
use Gearman::Client;
my $gc = Gearman::Client->new;
$gc->job_servers("127.0.0.1");
my $ts = $gc->new_task_set;
for my $i(1..20){
$ts->add_task("sum" => "3,4", {
on_complete => sub{
print "$i:". ${$_[0]}. "n"
}
});
}
$ts->wait;
(function(){
var w = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow;
var b = "hoge";
document.getElementsByTagName("base")[0].target = b;
w.base_target = b;
w._open = w.open;
w["open"] = function(url){return w._open(url,b)};
})();
javascript:window.base_target="hoge";void(0);

[bookmarks.yahoo.co.jp] [[title]]&u=[[url]]&ei=UTF-8