JavaScriptのブログ記事

od -vAn -N8 -tu8 < /dev/urandom | node -e "var d2x=function(d){var s='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';var l=s.length;var x='';while(d>0){x=s.charAt(d%l)+x;d=Math.floor(d/l);}return x;};process.stdin.resume();process.stdin.on('data',function(str){console.log(d2x(str));});" | cut -b 1-8

  1. 		/dev/urandamから20桁取って来る
  2. 数字とアルファベット(0-9a-zA-Zの62進数)に変換する(11桁くらいになる)
  3. 先頭8文字取ってくる。

 

以上

タイムスタンプをファイル名やら何かのIDやらに使ったりするけど、重複が怖いのでナノ秒まで取ると長すぎて使えないとか、色々有りますよねー。でも、タイムスタンプにしとくと、時系列に並べるのが楽とかあるよねー。

 

年〜ナノ秒まで並べると、24桁。

これをエポック秒+ナノ秒にすると現在19桁。

 

[自然数をX進数の文字列に変換するJavaScript](http://recitativo-fant.asia/blog/2013/01/xjavascript.html)

[Linuxコマンドからパイプでnode.jsに渡して処理するワンライナー](http://recitativo-fant.asia/blog/2013/02/linuxnodejs.html)

dateコマンド(エポック秒+ナノ秒) date +"%s%N" でタイムスタンプ取得、これらを組み合わせて、・・・

 

とかやってみるけど、JavaScriptの桁数の関係上、現在時刻でマイクロ秒(16桁)くらいまでしか計算できてない(=逆算もできない)ので(逆算しないなら使えなくもないけどw)、「cutコマンドで16桁だけ取り出す」をカマして、下記としてみた。

 

date +"%s%N" | cut -b 1-16 | node -e "var d2x=function(d){var s='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';var l=s.length;var x='';while(d>0){x=s.charAt(d%l)+x;d=Math.floor(d/l);}return x;};process.stdin.resume();process.stdin.on('data',function(str){console.log(d2x(str));});"

 

これで、「1359705351694061」(エポック秒+マイクロ秒の16桁)を「6e6ngkaIt」(9桁)にできた。\(^ω^)ノ ヤッホイ

 

ちなみに、逆算する場合はこちら。

 

echo "6e6ngkaIt" | node -e "var x2d=function(x){x=''+x;x=x.trim();var i,j,k=0,s='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',l=x.length;for(i=0;i<=l;i++){for(j=0;j<s.length;j++){if(s.charAt(j)==x.charAt(i)){k+=j*Math.pow(s.length,l-i-1);}}}return k;};process.stdin.resume();process.stdin.on('data',function(str){console.log(x2d(str));});"

コマンド | node -e "process.stdin.resume();process.stdin.on('data',function(str){console.log(【処理】)})"

Scriptletの書き方

 

ブックマークのURL欄にJavaScriptを書く。

下記のように書くとキレーかな(?)

 

javascript:void(func=function(){フツーに処理を書く}, func())

 

例)

javascript:void(func=function(){alert('%EF%BD%91(^%CF%89^)%CF%81 %EF%BE%86%EF%BD%AC%EF%BD%AF%EF%BE%8E%EF%BD%B2');confirm('%EF%BC%BC(^%CF%89^)%E3%83%8E %EF%BE%94%EF%BD%AF%EF%BE%8E%EF%BD%B2');}, func())

UTF-8について

Webサーバのログとか、AJAXの内容とかでは、日本語や記号をUTF-8でエンコードされた形、あるいはUTF-8のコード表記で見ることが多くなってきたわけですが・・・

 

例えば「ポ」という文字は・・・

 

\u30ddという「コード」がマッピングされている。

 

これは、UTF-8における「その文字のコード」であり、UTF-8でエンコードしたものではない。

 

実際にこれらのコードでエンコードするには、他に追加すべき情報がある。

 

このコードを2進数にすると次のようになる。

 3 0 d d => 0011 0000 1101 1101

 

これを次のようにゴニョゴニョする。

=---- : 「1」の個数(=バイト数)+「0」
     ---- : 1バイト目
         =-- : 「10」バイトの区切り
            ------ : 2バイト目
                  =-- : 「10」バイトの区切り
                     ------ : 3バイト目
     ----   ------   ------ : この領域に「30dd」を入れると次のようになる。
=11100011=10000011=10011101 : これを16進にすると次のようになる。
=E3=83=9D : UTF-8エンコード完了

 

nkf(ファイルのエンコードをゴニョゴニョする)コマンドで確認する。

echo "ポ"|nkf -wMQ

=E3=83=9D

 

逆に言うと、nkfでは、実際のどの文字がどのコードにマッピングされているか直接的には分からない。

 

コード<==>文字の変換には、JavaScriptがお手軽でいい。

### コード→文字の変換

 -  サーバでnode.jsとか入っていれば、

    node -e "console.log(unescape('\u30dd'.replace(/\\\\u/g, '%u')))"

 -  あるいは、Google Chrome のデベロッパーツールのコンソールで、

    console.log(unescape('\u30dd'.replace(/\\u/g, '%u')))

### 文字→コードの変換

* replaceの位置が変わっていることに注意 *

 -  サーバでnode.jsとか入っていれば、

    node -e "console.log(escape('ポ').replace(/%u/g, '\\\\u'))"

 -  あるいは、Google Chrome のデベロッパーツールのコンソールで、

    console.log(escape('ポ').replace(/%u/g, '\\u'))

 

JavaScriptでエンコードするには、encodeURI, encodeURIComponentを使う。

 

ハ長調だと「ラ」の音は、「A」っていうコードだけど、実際は「440Hz」みたいな(?)

指定文字でパディングするJavaScript

 

// 左側を指定文字でパディング

var strpad = function(str, len, pad, right){

    if(typeof pad == "undefined" || pad.length == 0){ pad = " "; }

    var padding = "";

    if(len){

        for(var i = 0; i < len; i++){ padding += pad; }

    }

    str = new String(str);

    if(len){

        if(right){

            str = str + padding;

            str = str.substr(0, len);

        }else{

            str = padding + str;

            str = str.substr(str.length - len, len);

        }

    }

    if(pad == " ") str = str.replace(/ /g, "&nbsp;");

    return str;

// 右側を指定文字でパディング

var strpadright = function(str, len, pad){return strpad(str, len, pad, true)}

// 左側を"0"パディング

var strzeropad = function(str, len){return strpad(str, len, "0");}

// 右側を"0"パディング

var strpadzero = function(str, len){return strpad(str, len, "0", true);}

 

// 使用例

strpad("aa", 5, "x")

=> "xxxaa"

strpad("aa", 5, "x")

=> "xxxaa"

strpadright("aa", 5, "x")

=> "aaxxx"

strzeropad("aa", 5, "x")

=> "000aa"

strpadzero("aa", 5, "x")

=> "aa000"

// 本体

var d2x=function(d,s){var l=s.length;var x="";while(d>0){x=s.charAt(d%l)+x;d=Math.floor(d/l);}return x;}

var x2d=function(x,s){x=''+x;x=x.trim();var i,j,k=0,l=x.length;for(i=0;i<=l;i++){for(j=0;j<s.length;j++){if(s.charAt(j)==x.charAt(i)){k+=j*Math.pow(s.length,l-i-1);}}}return k;}

 

// 使用例

var seeds = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

d2x(1, seeds);   // => "1"

d2x(9, seeds);   // => "9"

d2x(10, seeds);   // => "a"

d2x(35, seeds);   // => "z"

d2x(36, seeds);   // => "A"

d2x(61, seeds);   // => "Z"

d2x(62, seeds);   // => "10"

 

x2d("1", seeds);   // => 1

x2d("9", seeds);   // => 9

x2d("a", seeds);   // => 10

x2d("z", seeds);   // => 35

x2d("A", seeds);   // => 36

x2d("Z", seeds);   // => 61

x2d("10", seeds);   // => 62

nojimageさんのTwitterの発言をmixiボイスに投稿するスクリプトを大変便利に利用させてもらったのですが、nojimageさんに一言お声をかけて、これをベースに発言をローカルに保存するPHPとその表示用PHPを作成してみました。

twlogです。

TwitterのAPIを利用して発言を取得し、ローカルの指定ディレクトリに保存します。

発言の取得は、どの発言まで取得したかをファイル(last_idと言うファイル)で管理しており、初回取得時(last_idがないとき)には全発言、次回以降は前回取得した発言より後の発言を取得してきます。
私はこれをcronで15分間隔で動かしています。

保存方法は、指定ディレクトリ配下に、「年/月/」ディレクトリを構築し、その下に日毎にタブ区切りテキストを作成しています。

表示の方は、指定ディレクトリの配下の「年/月/日」にあるタブ区切りテキストを読み込んで、月別に表示します。
あえてのスタイルシートなしのシンプルデザインですw
#めんどくさくなったとも言うww

おまけで、発言を保存しているタブ区切りテキストをJSONやJSONPに動的に変換するスクリプトも同時に作成しました。
GETで指定したパスにあるタブ区切りテキストを、GETで指定したフォーマットで(オプション)、GETで指定したコールバック関数にして(オプション)、JSON/JSONPにして返します。
なので、タブ区切りテキストであれば、なんでもJSONにしてくれる(ハズ)です。
#ブログの「Twitter Update」をJavaScriptで自作しようかと思ったけど、これも面倒になったので使ってないw

お友達が作ったもっとよく出来た(w)Ruby版はこちら

緯度、経度 フォーマット変換

Google マップでは、緯度、経度を「度(小数点あり)」で扱います。
一方、他の電子地図や携帯のGPSでは「度分秒(小数点あり)」で扱うものがあります。

ってことで、JavaScriptで作ってみましたよ。
※ソースは勝手に持って行ってくださいな。

緯度、経度 フォーマット変換

要は、分とか秒とかを小数点で表すかどうかなので、60で掛けたり割ったりすればいーんですね。

度分秒を度で表すには、
  1. 度 + 分/60 + 秒/60/60

度を度分秒で表すには、
  1. 整数部分を度とする。
  2. 小数部分*60 の整数部分を分とする。
  3. 2.の小数部分*60 を秒とする。


楽天、Yahoo!、Amazon一括検索ガジェット

以前作ったJavaScriptで楽天、Yahoo!、Amazon一括検索をGoogleガジェットにしてみました。

このアーカイブについて

このページには、過去に書かれた記事のうちJavaScriptカテゴリに属しているものが含まれています。

前のカテゴリはJavaです。

次のカテゴリはMovableTypeです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。