Studencheskie Programmisty

Page 1 of 2: 1 2

miのJavaScriptモードを作った

May 12, 2012

mi.app用のJavaScriptモードを作ってみた。miはコード補完機能が標準でついてないので、そこのところを補完することを第一目標として作成した。詳しい機能などはGithubの方に書いておいたので、そちらも参照のこと。

スクリーンショット

主な機能

  • JavaScriptの主要なプロパティ名/メソッド名をキーワードとして登録。
  • 関数・オブジェクト・変数名を自動的に見だしリストに追加し、かつキーワードとして登録。
    • キーワードに登録されたものは、コード入力中にescまたはCtrl+Spaceを押すことでコードの補完候補に現れるようになるので、入力の負荷が大幅に削減される。
  • function/if/for/whileなどのあとで自動的にインデントを一段深くする機能を搭載
  • ツールとして、JSDocのコメントをカーソルの位置に挿入する機能と、JSDoc Toolkitで表示中のファイルのドキュメントを作成する機能を搭載

インストール

Githubからダウンロード(ページ上の「ZIP」ボタンからzipでまとめてダウンロードできる)して、「JavaScript」フォルダをLibrary/Application Support/mi/mode/のなかに放り込めばインストールは完了です。

    BogosortをJavaScriptで実装してみた

    Jan 31, 2011

    暇でWikipedia見てたらボゴソートとかいうのを見つけた。JavaScriptでの実装例があまりないようだったので、どうせだからと実装してみることにした。

    ちなみに、ボゴソートとは「要素をシャッフル→ソートされてたら処理終了、されてなければまたシャッフル」を繰り返す、非常に効率の悪いアルゴリズムである。

    function isSorted(aArray){
       for(var i=0,l=aArray.length-1;i<l;i++){
          if(! (aArray[i] <= aArray[i+1])) return false;
       }
       return true;
    }
    
    function shuffle(aArray){
       return aArray.sort(function(){
          return Math.random()*100 <= 50;
       });
    }
    
    function bogoSort(aArray){
       while(!isSorted(aArray)){
          shuffle(aArray);
       }
    }
    

    追記。sortでシャッフルすると偏るらしいです。

      「タブを隠す」メニューを追加するuserChrome.jsスクリプト

      Nov 21, 2010

      他人に見られたくないサイトを見ているようなときに使えるかも?

      隠されたタブは、タブバーからは見えなくなるので、タブ一覧のメニューから選択するようにして下さい。 また、隠されたタブを選択している状態で、「Show Selected Tab」を実行すると、普通のタブに戻ります。

      ダウンロード

        adblock#.uc.js

        Nov 21, 2010

        匿名で開発していたものも公開することにした。これはそのうちの一つ。

        個人的に、Adblock Plusとかが重かったので、非力なPCでもそれなりのスピードで動くようにすることを目指して開発した。 詳しい使い方などは、Read Me.txtを見ていただければ分かると思う。

          IEのDOMがおかしい

          Jan 26, 2010

          導入したie6-upgrade-warningが実はうまく動いていなかったので、原因を探っていたら、IEのバグらしきものに遭遇した。

          具体的には、以下のような感じ。

          var input = document.createElement('input');
          input.id = "test_i_1";
          input.type = "checkbox";
          document.body.appendChild(input); //きちんとチェックボックスが追加される
          
          var input = document.createElement('input');
          input.id = "test_i_2";
          document.body.appendChild(input);
          var i = document.getElementById('test_i_2');
          i.type = "checkbox";  //エラーがでる
          

          なぜか、getElementByIdしたやつだとDOMがうまく動かないみたい。ちなみに、i.setAttribute("type", "checkbox")でも 結果は同じだった。

          やはりIEのDOMはよく分からん...