Hatena::Groupborn1981

polog@81s

polog by negipo
癒し系プログラマ@twitter

2009-12-12

1981年生忘年会#3にいった

22:43 | 1981年生忘年会#3にいった - polog@81s を含むブックマーク はてなブックマーク - 1981年生忘年会#3にいった - polog@81s

100人もいて僕はひきこもりなのでたぶん10人くらいとしかしゃべってないのですが、すごく楽しかったです

みんな同い年なのにいっぱいおもしろいことやっていて、さすがだなあと思いました

運営とかやってた人たち本当にお疲れさまでした 来年も参加したいです :)

2009-10-10

WEBエンジニアバトルロワイヤルに出ました

01:56 | WEBエンジニアバトルロワイヤルに出ました - polog@81s を含むブックマーク はてなブックマーク - WEBエンジニアバトルロワイヤルに出ました - polog@81s

http://gihyo.jp/event/2009/webbr01

発表が録画されてました 以下、大体19分めから

http://www.ustream.tv/recorded/2318619

発表資料

http://polog.org/files/presentation/20091008/

発表用にいじったスクリプト

// ==UserScript==
// @name           InFullVolume_mod
// @namespace      http://polog.org/
// @description    music visualizer for any website
// @include        http://polog.org/*
// @require        http://gist.github.com/3242.txt
// @updated        2009-10-08 00:00:00
// ==/UserScript==
// using $X by os0x

var w = unsafeWindow;
const SWF_URL = "http://polog.org/lab/full-volume/test/mic.swf";
const SITE_INFO_URL = 'http://wedata.net/databases/InFullVolume/items.json';
var SITE_INFO = [
/*
    {
        pattern: '',
        elements: ''
    },
*/
    {
        elements: 'id("fook")',
        pattern: 'http://polog.org/files/presentation/20091008/'
    }
];

var elementList = function(exp){
    this.objs = $X(exp);
    this.elements = [];
    for(var i = 0; i < this.objs.length; i+= 1){
        var obj = this.objs[i];
        this.elements.push(new elementSingle(obj));
        if(i != 0)
            this.elements[i - 1].setNextElement(this.elements[i]);
    }
    var self = this;
    if(self.elements[0])
        setInterval(function(){self.elements[0].triggerMove()}, 100);
}

var elementSingle = function(element){
    this.element = element;
    this.buf_level = this.level = 1.0;
    var self = this;
    this.dimensions = {
        width: this.element.offsetWidth,
        height: this.element.offsetHeight
    };
    this.element.style.overflow = "hidden";
    this.element.style.width = this.dimensions.width + "px";
    this.element.style.height = this.dimensions.height + "px";

    this.kicker = setInterval(function(){
        if(typeof(mic_activityLevel) == "object" &&
                !mic_activityLevel)
            return;
        this.effect = setInterval(function(){self.move()}, 50);
        clearInterval(self.kicker);
    }, 1000);
}
elementSingle.prototype.setNextElement = function(nextElement){
    this.nextElement = nextElement;
}
elementSingle.prototype.setLevel = function(level){
    var next = this.nextElement;
    if(next){
        var self = this;
        setTimeout(function(){next.setLevel(self.buf_level)}, 50);
    }
    this.buf_level = this.level = level;
}
elementSingle.prototype.move = function(){
    // w.console.log((this.element.style.width * 0.8) < Math.round(this.dimensions.width * this.level));
    if(
        typeof(mic_activityLevel) == "object" &&
        !mic_activityLevel
      )
        return;

    this.element.style.width = Math.round(this.dimensions.width * this.level) + 'px';
    this.level = this.level * 0.8;
}
elementSingle.prototype.triggerMove = function(){
    var activityLevel = mic_activityLevel * 0.1;
    activityLevel = (activityLevel > 1.0) ? 1.0 : activityLevel;
    if(activityLevel > this.level)
        this.setLevel(activityLevel);
}

w.elementSingle = elementSingle;


var div = unsafeWindow.document.createElement("div");
var init_embed = function(){
    var embed = unsafeWindow.document.createElement("embed");
    embed.src = SWF_URL;
    embed.width = "300px";
    embed.height = "200px";
    embed.name = "mic";
    embed.id = "mic";
    embed.setAttribute("allowScriptAccess", "always");
    embed.setAttribute("wmode", "transparent");
    div.style.zIndex = "10000";
    div.style.position = "absolute";
    div.style.top = "0px";
    div.style.right = "0px";
    div.appendChild(embed);
    unsafeWindow.document.body.appendChild(div);
}

var mic_activityLevel = null;
unsafeWindow.mic_DoFSCommand = function(command, args) {
    if(!args.match(/^\d*$/))
        return;
    mic_activityLevel = eval(args);
    if(mic_activityLevel && div.style.top != "-9999px"){
        div.style.top = "-9999px";
        div.style.left = "-9999px";
    }
}

unsafeWindow.InFullVolume_getMicActivityLevel = function(){
    return mic_activityLevel;
}

// based on Autopagerize old script...
var SiteInfo = function() {
    this.entries = [];
};

SiteInfo.prototype.get = function(url, callback) {
    var self = this;
    var cacheInfo;
    if(cacheInfo = Cache.get('cacheInfo')) {
        self.entries = cacheInfo;
        callback(self.entries);
    } else {
        GM_xmlhttpRequest({
            method : "GET",
            url : url,
            onload : function(res) {
                self.entries = eval(res.responseText).map(function(e){return e.data});
                callback(self.entries);

                Cache.set('cacheInfo', self.entries, 24 * 60 * 60 * 1000) // 1 day
            }
        });
    }
};

SiteInfo.prototype.clearCache = function() {
    Cache.set('cacheInfo', null, 0);
};

var Cache = {};

Cache.set = function(key, value, expire) {
    var expire = new Date().getTime() + expire;
    GM_setValue(key, uneval({ value: value, expire: expire }));
}

Cache.get = function(key) {
    var cached = eval(GM_getValue(key));
    if(!cached) {
        return null;
    }

    if(cached.expire > new Date().getTime()) {
        return cached.value;
    }

    return null;
}

var elements;
var siteInfo = new SiteInfo();
unsafeWindow.addEventListener('load', function(){
    siteInfo.get(SITE_INFO_URL, function(entries) {
        entries = SITE_INFO.concat(entries);
        entries.some(function(entry) {
            if(location.href.match(entry.pattern) &&
               $X(entry.elements).length >= 0) {
                new elementList(entry.elements);
                init_embed();
                return true;
            }
            return false;
        });
    });
}, false);

GM_registerMenuCommand('InFullVolume_mod - clear cache', siteInfo.clearCache)

プレゼン破壊のためだけにプレゼンツール自作しました

クックパッド賞欲しかった...


関係者及び参加された皆様、楽しかったです ありがとうございました

2009-09-18

インターフェースを統合する

02:05 | インターフェースを統合する - polog@81s を含むブックマーク はてなブックマーク - インターフェースを統合する - polog@81s

なにをえらんでいるのかわからなくなる

http://gist.github.com/189166

2009-08-03

無題

23:24 | 無題 - polog@81s を含むブックマーク はてなブックマーク - 無題 - polog@81s

あんなbotを作るくらいですし僕の気狂い、狂気に対する関心というものはこれはけっこう大きなものなのですが、やはり丘気狂いとしての僕は大したことない。


自分の感覚、認識というものは、認識する対象その実体とは直接つながっていない。つまりたとえば、あなたがあるWEBページをみていて、僕も同じWEBページを見ていても、僕が見ているページとあなたの見ているページは、キャッシュなりよくわからないエンジンの作り出したおすすめなりによって、完全に同一ではなく、ひょっとしたらその時点におけるマスター情報とも齟齬がある可能性すらある。こういった差異は、実体と自らの認識の間におけるすべてのレイヤーで発生し、分岐する可能性がある。

そして、自分の感覚、認識を疑うようになれることは、良い問題解決手法であると同時に気狂いへの第一歩でもあると僕は考える。これを利用し効率良く自分がよりよい丘気狂いになるような仕組みが作れるように思う。


という訳で、僕は自分のアイコンを逆さまにした。

f:id:korn_freak:20090803225738p:image

ふつうだ。ふつうの丘気狂いっぽい。

タイムラインを見ても、ひとりだけ空気の読めていないやつのように見える。

f:id:korn_freak:20090803225952p:image


ここでスクリプトを書く。別にuserstylesheetでも、プロキシでも、なんでもいい。

http://gist.github.com/159698

// ==UserScript==
// @name           WhichIsCrazy
// @namespace      http://polog.org/
// @include        http://twitter.com/*
// @require        http://gist.github.com/3242.txt
// ==/UserScript==
// using $X http://gist.github.com/3242 by os0x

function init(){
    icon.style.backgroundColor = COLOR.run;
    $X('//img[contains(concat(" ",normalize-space(@class)," "), " photo fn ")] | id("profile-image")').forEach(function(img){
        each_crazy(img);
    });
    icon.style.backgroundColor = COLOR.finish;
}

function each_crazy(img){
    var r = document.createElement('canvas');
    if (r.getContext) {
        var context = r.getContext("2d");
        r.style.width = img.clientWidth + 'px';
        r.style.height = img.clientHeight + 'px';
        r.width = img.clientWidth;
        r.height = img.clientHeight;
        context.save();
        context.translate(0, base.height - 1);
        context.scale(1, -1);
        context.drawImage(img, 0, 0, img.clientWidth, img.clientHeight);
        context.restore();
    }
    img.parentNode.appendChild(r);
    img.parentNode.removeChild(img);
}

init();

f:id:korn_freak:20090803230333p:image

なんとなく、これで感覚がだませるようになった。


この環境でtwitterを眺めると、何かがおかしい茫洋な世界で僕だけが一人まともなような感覚を得る。しかし、他のひとは、誰もお互いのおかしさを指摘せず、ただ僕だけにきみ、おかしいよと訴えかける。しかし僕が知覚する僕はおかしくない、自然の体だ。つまりこれは僕がおかしいということを僕自身が認識していないということに帰結するのではないか、僕は気狂いにとうとうなったのではないかと思うことになる。嘔吐。

自分の最愛の女性のことを幻覚と呼ぶのもそういう意図だが、これは失敗している。幻覚かわいい。多分実在する。

2009-07-18

rubykaigiいくよ

00:23 | rubykaigiいくよ - polog@81s を含むブックマーク はてなブックマーク - rubykaigiいくよ - polog@81s

と言いつつ寝ながらust見てた

ねむい