2010年10月26日火曜日

5分で作るOpera エクステンション

このエントリーをはてなブックマークに追加
5分で作るOpera エクステンション

Opera エクステンションがやって来るヤァ!ヤァ!ヤァ!


Opera11が発表されましたが、皆様いかがお過ごしでしょうか。
開発者でない人でも、簡単に作れるOpera エクステンション。
作成するファイルは僅か5つ。
・index.html
・background.js
・popup.html
・test.png
・config.xml
早速、作ってみましょう。

用意するもの

Opera 11
あと、圧縮ツール。zip圧縮出来るならば、何でも良いです。

実際に作ってみよう

まず、index.htmlを作りましょう。
<!DOCTYPE HTML>
<html lang="ja">
<head>
 <meta charset="UTF-8">
 <title>MyTest</title>
  <script charset="UTF-8" src="background.js" type="text/javascript"></script>
</head>
<body>
</body>
</html>

2010年10月25日月曜日

連想配列を使おう

このエントリーをはてなブックマークに追加

きっかけ

JavaScript関係のエントリで気になるコードがありました。
それは、以下の二つ
半角カナのスタイル名を全角カナに変換する - 名もないテクノ手
JavaScriptで半角英数字を全角英数字に変換する関数|本を買わずに解決するWeb制作の小技

問題点

どちらも、半角と全角の変換をするだけの簡単なコードなのですが、その変換用の辞書に使っているのが二つの配列というのがちょっと残念。
この程度の量であれば問題ないのですが、こういうコードメンテは大変面倒です。
辞書が増えて、配列の「順番」が変わった時にバグるという危険性も含まれています。
それでは、こういう時にはどうすれば良いのでしょうか。

2010年10月22日金曜日

高専にはアホしかいない.

このエントリーをはてなブックマークに追加

ネタです

高専っていうのはつまらないところだ.

アホしかいない.

学生も骨がないのばかりだし, 本当にただの学生である. それは違う. 研究室の学生は教官と対等である. それが研究というものだ. 授業においてはそうではないかも知れない. しかし, 研究室に入ったからには独立の精神を持って自分の意志で研究テーマを選択し実行しなければならない. こんな当たり前のことがほとんど行われていない. というか皆無である.

これではどこぞの三流大学とどう違うのだ. 高専生の気概を持つべきである. おれたちはエリートなのだという意識を持ち, 教官のいうことにはまず逆らうことから思考すべきである. なんでもはいはいと言うことを聞いて, それではダメだ. 大体において, なんでもかんでも正しいアドバイスが出来る人間が高専の教官なんかやってると思うのか?

おれたちは, これから日本を引っ張っていく人材にならなければいけない. その時におれたちにアドバイスをくれる人間はいない. 常に自分たちで思考し, みんなを引っ張っていく必要がある. それは三流大学の学生との違いだ. 彼らは教官のいうことを大人しく聞くことが研究であるが, おれたちは教官と対等に意見することが研究だ. これが出来なければ, 一体どの世界でリーダーになれるというのだ.

もちろん, 研究能力において教官というのは多少は優れてるのだろう. 特に論文の書き方についてはまぁまぁ従うべきだ. しかし研究の内容については, とことん言い争うべきだ. 納得行かないことがあればとことん反論すべきだ. はい分かりましたはい分かりましたと連打するような学生であってはいけない. 研究テーマがつまらんと思ったらとことん拒否すべきだし, 教員の無能さを見抜けばとことん指摘して攻撃すべきだ. 場合によっては精神的に潰しても問題ない. というか, おれは教員というものが向上していくとすればそれは学生との対話の中でしかないと思っている. 彼らにとって, 学生と対話したことは生涯における価値なのだ. 学生と対話することを拒否するような教員は教員失格であろう. 一体何のために生きているのか. そんなに教官であることが誇らしいのであれば, おでこに私は高専の教官ですとマジックで書いて闊歩してみなさい.

日本人の教官にすら意見出来ない人間が, どうして外国人相手に対等に勝負が出来るのだ. もっと骨のある高専生になろう. エリートとしての意識を高く持とう. 気高く生きよう. おれたちがダメならば世界に負けてしまうんだ. おれたちが戦うんだという気概を持った「高専生」になろう.

元ネタ

京大にはアホしかいない. - とある電気系出身者のいんでっくす

共感した部分

タイトルと二行目だけ。
以降は高専には当てはまったり当てはまらなかったりな感じ。
真面目な人だったら心がぐさぐさ痛むのだろうけれど、如何せん、高専生だからなー。
笑っておしまいって落ちが見えてしょーがない。
この人が定義するアホと僕が定義するアホの意味合いが違うので、しょーもないけれど、比較的近い概念で当てはめるならば、僕の中での阿呆はこの人のアホと似ているのかもしれない。
似ていないのかもしれない。

2010年10月18日月曜日

あから2010が指した5七角について

このエントリーをはてなブックマークに追加

この記事を読む前に

罪山罰太郎さんのこのエントリを先に目を通してください
【レポート】プロ棋士vsコンピューター - 「あから2010」の威力を目撃してきた (1) 歴史的な対局が行われた | エンタテインメント | マイコミジャーナル
俺の邪悪なメモ - ハートキャッチあから?!
ついでに、脳内将棋盤を用意してください。

5七角は本当に理外の一手なのか

マイコミジャーナルの方で書かれていますが、5七角は果たして理外の一手だったのでしょうか。
控え室でも検討されていなかったとありますが、改めて冷静にこの局面を分析してみたいと思います。

2010年10月15日金曜日

ニコニコ動画用の自作スクリプト更新

このエントリーをはてなブックマークに追加

またニコニコ動画のHTMLが変わりましたね

そのままだと不便なので、自作スクリプトを更新しました。

nicovideodown.js

userscripts.orgに更新しました。
http://userscripts.org/scripts/show/84552へアクセスして、ダウンロードして下さい。
自力で直せる人は自力で直しちゃってください。

nico_description

今回から、DOMContentLoadedで発火するようにしていますので、ファイル名を「nico_description.js」に変更してください。
また、今まで無駄にオブジェクト指向していたのを撤廃して、ふつーに連想配列にしました。
これでいーよね。
// ==UserScript==
// @name      nico description
// @namespace http://looxu.blogspot.com/
// @include   http://www.nicovideo.jp/watch/*
// @author    Arc Cosine
// @version   3.0
// ==/UserScript==
(function(){

    var NDesc = {
      com_style : {
        'color' : '#1259C7',
        'text-decoration' : 'underline',
        'padding-left' : '5px',
        'cursor' : 'pointer'
      },
      options : [
        { 'text' : '広告表示',  'func' : function(){ NDesc.ad_toggle(); } },
        { 'text' : 'Video詳細', 'func' : function(){ NDesc.description_toggle(); } }
      ],
      init : function(){
          //add Input Box
          NDesc.createInput();

          //hide parts
          NDesc.description_toggle();
          NDesc.ad_toggle();

          //add focus key event
          document.addEventListener( 'keypress', function(e){
            if( e.target.tagName != 'INPUT' && e.keyCode == 32 ){
              NDesc.use_hotkey();
              e.preventDefault();
            }
          },false );


          for( var i=NDesc.options.length; i-- > 0; ){
            NDesc.createParts(NDesc.options[i]);
          }
        },
        createParts : function( data ) {
          var insert_node1 = document.querySelector('div.des_1 p.font12');
          var insert_node2 = document.querySelector('div.des_2 p.font12');
          var node = document.createElement('span');
          node.appendChild(document.createTextNode(data.text));
          for( var option in NDesc.com_style ){
            var st_op = option.replace(/-([a-z])/,function(m){ return m[1].toUpperCase();});
            node.style[st_op] = NDesc.com_style[option];
          }
          node.addEventListener( 'click', function(){ data['func'].apply(); } ,false );
          var node2 = node.cloneNode(true);
          node2.addEventListener( 'click', function(){ data['func'].apply(); } ,false );
          insert_node1.appendChild(node);
          insert_node2.appendChild(node2);
        },

        toggleObject : function( selector ){
            var target = document.querySelector(selector);
            if( target ){
              target.style.display = (target.style.display == 'none' ) ? '' : 'none';
            }
        },

        description_toggle : function() {
            NDesc.toggleObject('div.info_frm');
            NDesc.toggleObject('div.des_2 table');
        },
        ad_toggle : function() {
            NDesc.toggleObject('#WATCHFOOTER');
            NDesc.toggleObject('#PAGEFOOTER');
        },
        createInput : function(){
            if( window.parent != window ) return;
            var input_work = document.createElement('input');
            input_work.readOnly = true;
            input_work.autocomplete = 'off';
            input_work.style.margin = '0px 0px 5px 10px';
            input_work.addEventListener('focus', function(){
              input_work.style.backgroundColor = '#fcc';
              input_work.value = 'Hotkey available';
            },false );
            input_work.addEventListener('blur',function(){
              input_work.style.backgroundColor = '#9D9';
              input_work.value = 'Hotkey unavailable';
            },false );
            input_work.addEventListener('keypress', NDesc.key_event, false );

            var video_title = document.querySelector('.video_title');
            video_title.parentNode.insertBefore( input_work, video_title.nextSibling );
            NDesc.input = input_work;
        },

        use_hotkey : function(){
          NDesc.input.focus();
        },

        play_pause : function(){
          var flvplayer = document.getElementById('flvplayer');
          if( !flvplayer ) return;
          if( flvplayer.ext_getStatus() == 'playing' ){
            flvplayer.ext_play(0);
          }else{
            flvplayer.ext_play(1);
          }
        },

        volumeup : function(){
          NDesc.volume(5);
        },
        volumedown : function(){
          NDesc.volume(-5);
        },
        seekleft : function(){
          NDesc.seek(-10);
        },
        seekright : function(){
          NDesc.seek(10);
        },
        seek2top : function(){
          NDesc.seek(Number.NEGATIVE_INFINITY);
        },
        volume : function(vol){
          var flvplayer = document.getElementById('flvplayer');
          if (!flvplayer) return;
          var cur = Number(flvplayer.ext_getVolume());
          var to = cur + Number(vol);
          if (to > 100) to = 100;
          if (to < 0  ) to = 0;
          flvplayer.ext_setVolume(to);
        },
        seek : function(time) {
          var flvplayer = document.getElementById('flvplayer');
          if (!flvplayer) return;
          var len = Number(flvplayer.ext_getTotalTime());
          var cur = Number(flvplayer.ext_getPlayheadTime());
          var to = cur + Number(time);
          if (to > len) to = len;
          if (to < 0  ) to = 0;
          flvplayer.ext_setPlayheadTime(to);
          // for shotage of backward seek.
          var cur = Number(flvplayer.ext_getPlayheadTime());
          if (time < 0 && cur - to > 5 && to > 10) {
              flvplayer.ext_setPlayheadTime(to - 10);
          }
        },
        key_event : function(e) {
          var handler = {
            'o' : function(){ NDesc.description_toggle(); },
            'a' : function(){ NDesc.ad_toggle(); },
            ' ' : function(){ NDesc.play_pause();  },
            'k' : function(){ NDesc.volumeup(); },
            'j' : function(){ NDesc.volumedown(); },
            'h' : function(){ NDesc.seekleft(); },
            'l' : function(){ NDesc.seekright(); },
            'H' : function(){ NDesc.seek2top(); }   //Shift+H
          };
          var t = e.target;
          var pressKey = String.fromCharCode(e.which);
          if( t.nodeType == 1 && typeof handler[pressKey] == "function" ){
            e.preventDefault();
            handler[pressKey].apply();
          }
        }
   };

    document.addEventListener('DOMContentLoaded', function(){
     NDesc.init();
    },false );

})();

2010年10月12日火曜日

2010年10月9日土曜日

多分、誰か既にやってると思うけれど

このエントリーをはてなブックマークに追加

Operaで、tumblrのスクロールが変

Operaでtumblrを使っていて前から、スクロールが変だなぁと思っていました。
tumblrはデフォルトで、j/kで画像を上下にいけるのですが、Operaでみてると何故か数ピクセルだけ余計にスクロールするんです。
そのため「○○user」の部分が見えなくて、若干苛立を感じていました。
他のブラウザではそんな事ないのでなんでかなーと思いつつも、生きていくのさほど影響が無いので放置していました。

ところが今日、ふとある事に気づきました。
世の中変なOpera使いは少ないと思いますが、JやKにScroll up/downアクションを割り当ててる人っていると思うんですね。
それが、悪さをして数ピクセル余分に移動してるんじゃないかなと思ったわけです。

そういう訳で、書いたUserScriptは以下のようになります。
名前はkeyaction_cancelar.jsで。
Opera限定で使いましょう。むしろ、Opera以外使い道が無い。

// ==UserScript==
// @name      keyaction canceler
// @namespace http://looxu.blogspot.com/
// @include   http://www.tumblr.com/*
// @author    Arc Cosine
// @version   1.0
// ==/UserScript==
(function(){
  var keyList = {'J':'dummy','K':'dummy'};  //You can add more key.

  window.addEventListener('keypress',function(e){
    if( e.target.tagName == 'INPUT' || e.target.tagName == 'TEXTAREA' ) return;
    var pressKey=  String.fromCharCode(e.which).toUpperCase();
    if( typeof keyList[pressKey] == "undefined" ) return;
    e.preventDefault();
  },false );

})();

これ、応用すれば新Twitterの画面とかにも対応できそうですよね。
データ構造をちょいちょい修正すれば、ドメイン単位で(略
なんかVimperatorで似たような拡張がありましたね。気のせいだと思います。
それでは良いOperaライフを

2010年10月6日水曜日

Smooth Scrollのブログパーツ作りました

このエントリーをはてなブックマークに追加

こりずにブログパーツを作りました

といっても、某有名なSmooth Scrollスクリプトを丸パク(略
ま、どこかで見たコードだなぁと思っていただければ幸いです。

ダウンロード&デモ

ダウンロードはこちらからお願いします。(新しいタブまたはウインドウが開きます)
http://sites.google.com/site/mksdcom/Home/smooth.js
デモページはこちら(新しいタブまたはウインドウが開きます)
http://tunsns.net/smooth_test.html

ライセンス

ライセンスはPublic Domainです。
いつものごとく。
商用利用・非商用利用問わずお使いください。

サポートブラウザ

Opera 9.5+
Google Chrome 5.0+
Firefox 3.5+
Safari 4.0+
IE 6.0+
Firefoxの3.0でも動くかもしれませんが、手元にない為、確認出来ていません。

2010年10月2日土曜日

久々の物欲

このエントリーをはてなブックマークに追加

マウスは最初はMicroHardSoft社製のマウスを愛用していましたが、数年前にLogicoolに乗換て以来、ロジクール派です。
んで、今日ふと見たこのマウスが欲しくなった!
物欲センサー全力ONって感じです。
ああ、いいなー、トラックボールいいなぁああ。



お金はありませんが。