100人もいて僕はひきこもりなのでたぶん10人くらいとしかしゃべってないのですが、すごく楽しかったです
みんな同い年なのにいっぱいおもしろいことやっていて、さすがだなあと思いました
運営とかやってた人たち本当にお疲れさまでした 来年も参加したいです :)
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)
クックパッド賞欲しかった...
関係者及び参加された皆様、楽しかったです ありがとうございました
あんなbotを作るくらいですし僕の気狂い、狂気に対する関心というものはこれはけっこう大きなものなのですが、やはり丘気狂いとしての僕は大したことない。
自分の感覚、認識というものは、認識する対象その実体とは直接つながっていない。つまりたとえば、あなたがあるWEBページをみていて、僕も同じWEBページを見ていても、僕が見ているページとあなたの見ているページは、キャッシュなりよくわからないエンジンの作り出したおすすめなりによって、完全に同一ではなく、ひょっとしたらその時点におけるマスター情報とも齟齬がある可能性すらある。こういった差異は、実体と自らの認識の間におけるすべてのレイヤーで発生し、分岐する可能性がある。
そして、自分の感覚、認識を疑うようになれることは、良い問題解決手法であると同時に気狂いへの第一歩でもあると僕は考える。これを利用し効率良く自分がよりよい丘気狂いになるような仕組みが作れるように思う。
という訳で、僕は自分のアイコンを逆さまにした。
ふつうだ。ふつうの丘気狂いっぽい。
タイムラインを見ても、ひとりだけ空気の読めていないやつのように見える。
ここでスクリプトを書く。別にuserstylesheetでも、プロキシでも、なんでもいい。
// ==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();
なんとなく、これで感覚がだませるようになった。
この環境でtwitterを眺めると、何かがおかしい茫洋な世界で僕だけが一人まともなような感覚を得る。しかし、他のひとは、誰もお互いのおかしさを指摘せず、ただ僕だけにきみ、おかしいよと訴えかける。しかし僕が知覚する僕はおかしくない、自然の体だ。つまりこれは僕がおかしいということを僕自身が認識していないということに帰結するのではないか、僕は気狂いにとうとうなったのではないかと思うことになる。嘔吐。
自分の最愛の女性のことを幻覚と呼ぶのもそういう意図だが、これは失敗している。幻覚かわいい。多分実在する。