2012年9月20日

Tumblrでリブログできないのを修正するTomblooパッチ

Firefox アドオン Tombloo のパッチです。

機能概要

Tombloo からリブログが失敗するようになってたので、その修正パッチです
本体のほうが修正されたらパッチは削除したほうがよいです
(同じ修正を pull request してます)

パッチ (Download or Update):

インストール/アップデート:

上のパッチリンクを
右クリック→「Tombloo」→「Tomblooパッチのインストール」でインストール/アップデート。


※直接右クリックからインストールできない場合:

できない場合は
「Tomblooパッチのインストールに失敗しなくなるパッチ」 のパッチ/記事をインストールもしくは参照ください。

レポジトリ



2012年9月4日

重い処理を軽くできるJavaScriptライブラリ作ってみた

追記: この記事のものは古くメンテナンスされていません。
CPU負荷をかけずにループ処理するJavaScriptライブラリは「CPU負荷を抑えて重い処理を軽くするJavaScriptライブラリ「chillout.js」 | 圧縮電子どうのこうの」を参照ください。

lazyIter.js

lazyIter.js は CPU 負荷をかけずにループ処理が可能な JavaScript ライブラリです。

重いループ処理などを軽くすることができます。
ループ内で処理の負荷に応じて遅延させ、結果的に重い処理は軽くなり
元々軽い処理は、ほぼ従来の速度のまま実行できます。

処理の負荷だけでなく、時間のかかるループ処理は
「応答のないスクリプト」警告がでてしまいます。
そのような警告なしで実行できるのも特徴の一つです。

どうに違いがあるのかは CPU 負荷テストページ で実際に試してみてください

Pot.js が実装しているイテレータから派生しています。
パフォーマンスなどは Pot.js のイテレータとほとんど同じです

ループ処理は非同期で実行されます。

使い方は Pot.js のイテレータ と同じですが、Deferred を使っていないので
引数にコールバックを指定する点が違います。

動作環境

主な Web ブラウザで動作します
  • Mozilla Firefox *
  • Internet Explorer 6+
  • Safari *
  • Opera *
  • Google Chrome *
また、以下の環境でも動作します
  • Greasemonkey (userscript)
  • Mozilla Firefox Add-On (on XUL)
  • Node.js
  • Other non-browser environment

lazyIter.js は、CommonJS などに対応しています

使い方

lazyiter.js を読み込みます (Webページの場合)

  1. <script src="lazyiter.js"></script>  

読み込むと、lazyIter というオブジェクトが定義されます (定義されるのは lazyIter だけです)。

lazyIter.forEach :

オブジェクトや配列に対してループ実行します

  1. // forEach:  
  2. //  
  3. // lazyIter.forEach(object, func, callback [, speed [, context]])  
  4.   
  5. // Array.  
  6. lazyIter.forEach(['a''b''c'], function(val, i) {  
  7.   console.log(i + ':' + val);  
  8. }, function() {  
  9.   console.log('End loop');  
  10. });  
  11. // result:  
  12. //   '0:a'  
  13. //   '1:b'  
  14. //   '2:c'  
  15. //   'End loop'  
  16.   
  17. // Object.  
  18. lazyIter.forEach({a: 1, b: 2, c: 3}, function(val, key) {  
  19.   console.log(key + ':' + val);  
  20. }, function() {  
  21.   console.log('End loop');  
  22. });  
  23. // result:  
  24. //   'a:1'  
  25. //   'b:2'  
  26. //   'c:3'  
  27. //   'End loop'  

lazyIter.repeat :

指定の数だけループ実行します

  1. // repeat:  
  2. //  
  3. // lazyIter.repeat(max, func, callback [, speed [, context]])  
  4.   
  5. // Specify as number.  
  6. lazyIter.repeat(10, function(i) {  
  7.   console.log(i);  
  8. }, function() {  
  9.   console.log('End loop');  
  10. });  
  11. // result:  
  12. //   0  
  13. //   1  
  14. //   2  
  15. //   3  
  16. //   4  
  17. //   5  
  18. //   6  
  19. //   7  
  20. //   8  
  21. //   9  
  22. //   'End loop'  
  23.   
  24. // for文のように 初め(begin)、ステップ(step)、終わり(end) を指定  
  25. lazyIter.repeat({begin: 0, step: 5, end: 30}, function(i) {  
  26.   console.log(i);  
  27. }, function() {  
  28.   console.log('End loop');  
  29. });  
  30. // result:  
  31. //   0  
  32. //   5  
  33. //   10  
  34. //   15  
  35. //   20  
  36. //   25  
  37. //   'End loop'  

lazyIter.forEver :

lazyIter.StopIteration が throw されるまでループし続けます

  1. // forEver:  
  2. //  
  3. // lazyIter.forEver(func, callback [, speed [, context]])  
  4.   
  5. var end = 10;  
  6. lazyIter.forEver(function(i) {  
  7.   if (i === end) {  
  8.     throw lazyIter.StopIteration;  
  9.   }  
  10.   console.log(i);  
  11. }, function() {  
  12.   console.log('End loop');  
  13. });  
  14. // result:  
  15. //   0  
  16. //   1  
  17. //   2  
  18. //   3  
  19. //   4  
  20. //   5  
  21. //   6  
  22. //   7  
  23. //   8  
  24. //   9  
  25. //   'End loop'  

throw lazyIter.StopIteration; により各イテレートを止めることができます。
引数 'context' は、コールバック関数の 'this' として使われます (省略可)。
引数 'speed' を指定することで速度の調節ができます (省略可)。
  • 'ninja' : もっと速い
  • 'rapid' : 速い
  • 'fast' : 速め
  • 'normal' : 通常 (default)
  • 'slow' : 遅め
  • 'doze' : 遅い
  • 'limp' : もっと遅い

速度の指定 (rapid, ninja など) は、Pot.js と同じです

Download

ダウンロード

動作テスト (サンプル)

レポジトリ



その他、なにか問題・バグ・感想・指摘などあれば、
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。



ランレングス法をJavaScriptの正規表現で書いてみた

ランレングス法は、BMP などに使われるデータ圧縮アルゴリズムです

連続したデータが多ければ圧縮率は上がりますが、
そうでない場合、逆にデータ量が増えることもあります
  1. // ランレングス圧縮/解凍  
  2. var RunLength = {  
  3.   compress : function(s) {  
  4.     return s.replace(/([\s\S])\1{0,8}/gfunction(a, c) {  
  5.       return c + a.length;  
  6.     });  
  7.   },  
  8.   decompress : function(s) {  
  9.     return s.replace(/([\s\S])(\d)/gfunction(a, c, n) {  
  10.       return new Array(++n).join(c);  
  11.     });  
  12.   }  
  13. };  



2012年6月28日

Tomblooの「アカウントの切り替え」にTwitterを追加するパッチ

Firefox アドオン Tombloo のパッチです。

機能概要

Tombloo の 「アカウント切り替え」 に Twitter を追加します
インストールすると 「アカウント切り替え」 に Twitter が出現します

パッチ (Download or Update):

インストール/アップデート:

上のパッチリンクを
右クリック→「Tombloo」→「Tomblooパッチのインストール」でインストール/アップデート。


※直接右クリックからインストールできない場合:

できない場合は
「Tomblooパッチのインストールに失敗しなくなるパッチ」 のパッチ/記事をインストールもしくは参照ください。

レポジトリ



2012年6月24日

Tumblrでリブログ/ポストするとき特定のアカウントだったら警告するTomblooパッチ

Firefox アドオン Tombloo のパッチです。

機能概要

先日、ポスト専用のアカウントで間違えてリブログしまくってしまいました
またやらかしそうなので、指定のアカウント名でポスト/リブログしようとした時
警告(確認ダイアログ)をだすパッチを作りました

このパッチはブログ専用や 何らかの限定したアカウントを持っている場合に効果的です
間違えてそのアカウントでリブログしようとした時に警告がでます

インストールするとコンテキストメニューに「リブログ確認の設定」が出現します

「リブログ確認の設定」をクリックすると上のウィンドウが表示されます

リブログ時に警告したいアカウント名を 1行毎 (改行区切り) で入力します
アカウント名は、「アカウントの切り替え」で表示されるメールアドレスです

設定後、そのアカウントでポスト/リブログしようとすると警告ダイアログがでるようになります

パッチ (Download or Update):

インストール/アップデート:

上のパッチリンクを
右クリック→「Tombloo」→「Tomblooパッチのインストール」でインストール/アップデート。


※直接右クリックからインストールできない場合:

できない場合は
「Tomblooパッチのインストールに失敗しなくなるパッチ」 のパッチ/記事をインストールもしくは参照ください。

レポジトリ



2012年5月17日

テキストエリアがJavaScriptコンソールなTwitterポスト用クライアント作りました

「ついぽこ」 というポスト用 Twitter クライアント作りました
ちょっと前から公開してて、やっと安定してきた気がしますが
機能は本当にしょぼいです

JavaScript (ECMAScript) が実行できます

概要

ついぽこは Twitter ポスト専用クライアントです
ホットキーを設定すると、選択範囲の文字をツイートできます
メモ帳からでもブラウザ上の文字からでも
文章書きながら、メール書きながら、その場でツイートできます

特徴

  • テキスト編集エリアが JavaScript コンソール (ECMAScript-262 5th Edition)

動作環境

  • Windows (XP と 7 で確認)

Download

ここからダウンロードできます

インストール

  • インストーラなしの exe のみ


その他の詳細については
ついぽこページプロジェクトページ を参照ください


その他、なにか問題等あれば
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。



2012年4月24日

JavaScriptで文字コード変換ライブラリ作ってみた

文字コード変換ライブラリを JavaScript で作りました。
文字列ではなく配列 or TypedArray で処理します。

追記

↓動作サンプルを作りました
文字コード変換 動作サンプル

Unicode の変換が可能になりました。
文字コード配列から URLエンコード/デコード が可能になりました。
あと説明とサンプルも少し載せました。。(説明不足でごめんなさい)

こないだの 「JavaScriptだけでzipファイルの解凍 - Unzipper.js」が
SJIS ファイルとかだと表示で文字化けするので、ついつい。。

動作確認は、zip ファイル解凍のデモページでわかると思います。
zip の中に SJIS や EUC-JP のファイル (ファイル名) がある場合でも
UTF-8 表示で化けなければ問題なしです。


↑のデモページを開いて、デスクトップなどから zip ファイルをドロップすると
解凍して結果のテキストを表示します。

※ JavaScript だけで動いていて、どっかのサーバなどに送信したり保存したりしてません


今回はぜんぶ同期で書いちゃったのですが、
バイナリファイルとかが対象だとちょっと重たくなりがち。。
気が向いたら非同期も可能にしてみたいです。

あと、Unzipper.js と同じレポジトリにしちゃったけど
これもできれば別にしたいところ。
追記→ 作りました

使い方:
  1. // <script src="encoding.js"></script>  
  2. //  
  3. // Encoding というオブジェクトがグローバルに定義されます  
  4. // 配列に対して変換または判別します  
  5.   
  6. // 文字コード変換  
  7. var utf8Array = new Uint8Array(...) or [...] or Array(...);  
  8. var sjisArray = Encoding.convert(utf8Array, 'SJIS''UTF8');  
  9.   
  10. // 文字コード自動判別で変換  
  11. var sjisArray = Encoding.convert(utf8Array, 'SJIS');  
  12. // or    
  13. var sjisArray = Encoding.convert(utf8Array, 'SJIS''AUTO');  
  14.   
  15.   
  16. // 文字コード判別 (戻り値は下の「共通の文字コード値」のいずれか)  
  17. var encoding = Encoding.detect(utf8Array);  
  18. if (encoding === 'UTF8') {  
  19.     alert('UTF8です');  
  20. }  
  21.   
  22. // 特定の文字コードかどうか判別  
  23. var isSJIS = Encoding.detect(sjisArray, 'SJIS');  
  24. if (isSJIS) {  
  25.     alert('SJISです');  
  26. }  
  27.   
  28. // convert, detect 共通の文字コード値:  
  29. //  - 'UTF32'   (detect only)  
  30. //  - 'UTF16'   (detect only)  
  31. //  - 'BINARY'  (detect only)  
  32. //  - 'ASCII'   (detect only)  
  33. //  - 'JIS'  
  34. //  - 'UTF8'  
  35. //  - 'EUCJP'  
  36. //  - 'SJIS'  
  37. //  - 'UNICODE' (JavaScript Unicode String/Array)  
  38. //  
  39. // ※ (detect only) は Encoding.detect() でのみ有効 (変換はできない)  
  40. // ※ 'UNICODE' は JavaScript の Unicode コード値 (0xFF 以上の数値になりえる)  
  41. //  

サンプル:
  1. // EUCJPの文字コード配列 (中身は 'こんにちは、ほげ☆ぴよ')  
  2. var eucjpArray = [  
  3.     164, 179, 164, 243, 164, 203, 164, 193, 164, 207, 161,  
  4.     162, 164, 219, 164, 178, 161, 249, 164, 212, 164, 232  
  5. ];  
  6. // UTF-8に変換  
  7. var utf8Array = Encoding.convert(eucjpArray, 'UTF8''EUCJP');  
  8. console.log( utf8Array );  
  9. // output: [  
  10. //   227, 129, 147, 227, 130, 147, 227, 129, 171,  
  11. //   227, 129, 161, 227, 129, 175, 227, 128, 129,  
  12. //   227, 129, 187, 227, 129, 146, 226, 152, 134,  
  13. //   227, 129, 180, 227, 130, 136  
  14. // ]  
  15. //   => 'こんにちは、ほげ☆ぴよ'  
  16.   
  17. // ---------------------------------------------  
  18. // 文字コード自動判別で変換  
  19. //  
  20.   
  21. // SJISの文字コード配列 (中身は 'こんにちは、ほげ☆ぴよ')  
  22. var sjisArray = [  
  23.     130, 177, 130, 241, 130, 201, 130, 191, 130, 205, 129,  
  24.      65, 130, 217, 130, 176, 129, 153, 130, 210, 130, 230  
  25. ];  
  26. // Unicodeに変換  
  27. var unicodeArray = Encoding.convert(sjisArray, 'UNICODE''AUTO');  
  28. // 文字列にして表示  
  29. // codeToStringは、文字コード配列を文字列に変換(連結)して返す関数  
  30. console.log( Encoding.codeToString(unicodeArray) );  
  31. //  
  32. // output: 'こんにちは、ほげ☆ぴよ'  
  33. //  
  34.   
  35. // ---------------------------------------------  
  36. // 文字コードの配列をURLエンコード/デコード  
  37. var sjisArray = [  
  38.   130, 177, 130, 241, 130, 201, 130, 191, 130, 205, 129,  
  39.    65, 130, 217, 130, 176, 129, 153, 130, 210, 130, 230  
  40. ];  
  41. var encoded = Encoding.urlEncode(sjisArray);  
  42. console.log(encoded);  
  43. // output:  
  44. //   '%82%B1%82%F1%82%C9%82%BF%82%CD%81A%82%D9%82%B0%81%99%82%D2%82%E6'  
  45.   
  46. var decoded = Encoding.urlDecode(encoded);  
  47. console.log(decoded);  
  48. // output: [  
  49. //   130, 177, 130, 241, 130, 201, 130, 191, 130, 205, 129,  
  50. //    65, 130, 217, 130, 176, 129, 153, 130, 210, 130, 230  
  51. // ]  

ダウンロード



レポジトリ



その他、なにか問題等あれば
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。



デザインに便利な解像度マップ付き壁紙画像合成ツール作った

壁紙とか任意の画像に解像度別のマップを入れて合成できるツールを作ってみました。

HTML とか CSS とかデザインいじってて解像度ごとに確認したい時とか
窓の大きさを一定にしたい時とかに便利です。


↑のページを開いて、デスクトップなどから 画像ファイルをドロップすると
その画像に 1024x768 とか解像度ごとのマップつきで合成してダウンロードできます。

※ソース確認でわかりますが JavaScript で動いていてアプリはユーザー操作とか記録してません

あと、canvas とか HTML5 API, DropEvent などが動かないブラウザでは使えません。
Firefox, GoogleChrome で動作確認済みです。


遊んでみてくれるとうれしいです。



その他、なにか問題等あれば
コメントやメールまたは @polygon_planet までお願いします。



2012年4月22日

JavaScriptライブラリ Pot.js 関連リンクまとめ

Pot.js 関連のリンクまとめ

JavaScript ライブラリ Pot.js に関する記事やサンプルの紹介です。
Pot.js は CPU に負荷をかけることなく JavaScript の実行を可能とするユーティリティライブラリです。
MOONGIFT さんの記事 で紹介されたのもあって、せっかくなのでまとめてみました。



Pot.js / PotLite.js

Pot.js は CPU に負荷をかけることなく JavaScript の実行を可能とするユーティリティライブラリです。
PotLite.js は Pot.js の非同期な部分だけを抽出したライトバージョンです。

ダウンロード

マニュアル

その他の情報についてはマニュアル/マニュアルからのリンク から参照ください。

レポジトリ




その他、なにか問題・バグ・感想・指摘などあれば、
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。



2012年4月17日

JavaScriptだけでzipファイルの解凍 - Unzipper.js

とつぜん書いてみました。


デモページを開いて、デスクトップなどから zip ファイルをドロップすると
再帰的に解凍して結果のテキストを表示します。

非同期 + Pot.js イテレータ を使って実装したくて作ってみました。
zlib inflate を非同期化しています。
数GB の zip も、CPU 負荷を抑えつつ「応答のないスクリプト」警告なしに解凍できましたが
ブラウザによって、ファイルドロップの時点である程度サイズがあると無効になるようです。

レポジトリ



その他、なにか問題等あれば
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。



2012年4月15日

JavaScriptライブラリPot.js 1.18 リリース。strict modeになりました




Pot.js 1.18 と PotLite.js 1.35 リリースしました。





変更点など

  • 'use strict'つけてライブラリ全体が strict mode になりました
  • DropFile が Firefox で不具合出てたので修正
  • minify したときの最適化

などで、とくに機能の変更はありません。
ねんがんの strict mode にできたので、'use strict' 内で取り込まれても問題なく動きます。
全体を strict mode にするためにソースコードの表現はけっこう変わってますが
動作はむしろ速くなって、サイズがちょっとだけ減りました。


リファレンスのほうは、定義してある関数をとりあえず全部メニューに載せるようにしました。
でもメニューだけで中身の html が無いので、はやいとこ作りたいなと思ってます。




Pot.js / PotLite.js

Pot.js は CPU に負荷をかけることなく JavaScript の実行を可能とするユーティリティライブラリです。
PotLite.js は Pot.js の非同期な部分だけを抽出したライトバージョンです。

ダウンロード

マニュアル

その他の情報についてはマニュアル/マニュアルからのリンク から参照ください。

レポジトリ




その他、なにか問題・バグ・感想・指摘などあれば、
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。



2012年4月12日

Tumblrにポストすると動かなくなるgifアニメを減色して動かすTomblooパッチ

Firefox アドオン Tombloo のパッチです。

機能概要

Tumblr に gif アニメをポストすると、ちょっとサイズがあるだけで動かなくなってしまいます。
それを減色とかして動くようにするパッチ。

gif 画像からメニュー出すと、「Photo - Upload from Cache」 の下にでます。


cxx さんの API を使用しています、感謝

API の都合上、レスポンスが遅かったり 500 が返ってくることがあります。
そういうときはのんびりやるといいです


パッチはアップデートする可能性があるので、
パッチ一括アップデートぱっち で確認すると便利かと思います。

パッチ (Download or Update):

インストール/アップデート:

上のパッチリンクを
右クリック→「Tombloo」→「Tomblooパッチのインストール」でインストール/アップデート。


※直接右クリックからインストールできない場合:

できない場合は
「Tomblooパッチのインストールに失敗しなくなるパッチ」 のパッチ/記事をインストールもしくは参照ください。

レポジトリ



2012年4月11日

JavaScriptライブラリ Pot.js のチートシートと壁紙用ジェネレータ作りました




Pot.js チートシートとジェネレータ ができました。



Cheat Sheet

現時点では、PotLite.js のぶんです。
他のライブラリのチートシートを参考にしながら作ってたのですが、
Pot.js のほうはまだリファレンスも全部書けてないので
重要な非同期系の関数/メソッド/プロパティに絞ってたら PotLite.js と同じになりました。
はじめからそうしてればよかった。。


Cheat Sheet Generator

自分で関数の存在を忘れてしまうことがあって
それもどうかと思うので、忘れないように壁紙にできたらなぁて思って
せっかくだからいつも使ってる壁紙とか好きな画像とアルファ合成できたらいいなって
ジェネレータ作ってみました。
canvas で DataURI にして合成してるだけですが…。(なので Firefox, GoogleChrome, Safari? 限定)

上のリンクからジェネレータのページに行って、
デスクトップとかからブラウザに画像ドロップして合成・生成できます。
※ソースでも確認できますが画像とかをどっかに送信したり保存したりしてません

通常のチートシートは Basic Cheat Sheet のをダウンロードして利用できます。

ジェネレータはこんな感じで背景と合成できます。



以下、Pot.js についてのリンクとか。

Pot.js / PotLite.js

Pot.js は CPU に負荷をかけることなく JavaScript の実行を可能とするユーティリティライブラリです。
PotLite.js は Pot.js の非同期な部分だけを抽出したライトバージョンです。

ダウンロード

マニュアル

その他の情報についてはマニュアル/リンク から参照ください。

レポジトリ




その他、なにか問題・バグ・感想・指摘などあれば、
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。



2012年4月5日

並列処理のWorkerぽいWorkeroid実装。JavaScriptライブラリPot.js 1.17 リリース




Pot.js 1.17 と PotLite.js 1.34 リリースしました。





Web Workers

バックグラウンド処理、並列処理ができる HTML5 API の Web Workers は、
主要なブラウザですでに実装されています。

  1. var worker = new Worker('child.js');  
  2. worker.onmessage = function(event) {  
  3.     alert(event.data); // 'hogefuga' がアラートされる  
  4. };  
  5. worker.postMessage('hoge');  
child.js
  1. onmessage = function(event) {  
  2.     postMessage(event.data + 'fuga');  
  3. };  
上のような感じで使うのですが、基本的に 'child.js' のようにファイル名を渡さないといけないんです。
なので JavaScript が 2 ファイルになります。

並列で 4 スレッドとか 6 スレッドとかしてたら どんどん増えてファイルの管理がめんどいです。

あと、ブラウザによって動作 (子Worker のスコープ) が若干異なっていて
せっかく並列処理がネイティブにできるのに、なかなか扱いにくいものになってしまってます。

そこで、ネイティブ Worker が利用できたら ネイティブで
なければ Worker エミュレータとして、
クロスブラウザに動作する Workeroid (Pot.Workeroid) を実装しました。

Pot.Workeroid

  • 基本的にネイティブ Worker と同じに並列処理ができる
  • ネイティブ Worker がなければエミュレートする
  • クロスブラウザ
  • 子 Worker スレッドで importScripts しなくても Pot.js が使える
  • エミュレート時でも terminate で中断/終了できる
  • ファイル名だけじゃなく関数オブジェクトを子 Workerとして渡せる

ネイティブの Worker は
子Worker プロセス内では 親 window のライブラリなどが使えません。
importScripts('hoge.js') で読み込まないと使えないのですが、
Pot.Workeroid はデフォルトで Pot.js が利用できます。
なので、Pot.Deferred.forEach などを利用して CPU 負荷を抑えた処理が可能です。

最大の特徴として、
コンストラクタに ファイル名のほか、関数を渡すことが可能なことです。

以下は function で Worker スレッドを生成する例です。

var worker = new Pot.Workeroid(function(data) {
    //                                          
    // このスコープの中が 子Worker スレッド     
    //                                          
    var add = 1;                                
    postMessage(data + add);                    
});

// メッセージを受信した時
worker.onmessage = function(data) {
    alert(data);
};

// エラー時の設定 (任意)
worker.onerror = function(err) {
    alert(err);
};

// 1 を 子 Worker に送信 => 2 が alert される
worker.postMessage(1);

をつけたスコープ内が 子 Worker として別スレッドになります。
子 Worker 空間内は、別ファイルに書いてる気持ちでコーディングするとわかりやすいかもです。
たくさんのスレッド作る場合でも、少しの短いコードでも 別ファイルにしなくて済みます。

これで楽に並列処理ができるとうれしい!


Pot.Workeroid の例を含む詳細は Pot.Workeroid リファレンス から参照できます。

あと、簡単な動作テストを jsFiddle に置いてあります。

更新したところ


Pot.js / PotLite.js

Pot.js は CPU に負荷をかけることなく JavaScript の実行を可能とするユーティリティライブラリです。

PotLite.js は Pot.js の非同期な部分だけを抽出したライトバージョンです。

ダウンロード

マニュアル

その他の情報についてはマニュアル/マニュアルからのリンク から参照ください。

レポジトリ




その他、なにか問題・バグ・感想・指摘などあれば、
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。



2012年4月3日

ブログを移動しました

ブログの URL が変わりました。

http://polygon-planet-log.blogspot.com/
になりました。

blogspot.com は、blogspot.jp に飛ばされると思います。
canonical 設定するとか、 /ncr にリダイレクトして .com に戻すことも可能ですが
変化しようとしているものを無理にとどめるのもアレなので何もしてません。

ブログの URL が変わったのは Google に BAN されてしまったからです。
何度ログインしなおしても

「アカウントが無効になっています」

Gmail, リーダー、Google+、Blogger、GoogleBookmarks、Picasa、
Docs、カレンダー、サイト、ほかいろいろ、全部消えました。
全部です。
アカウントがオワタので全サービスです。もちろんログインもできません。


エイプリルフールだったので、あらあらまあまあwww とか思ってたんですが

えっ、日付変わってるのに戻らないよ?どういうことなの?……えっ?



えっ?



頭ましろ色シンフォニーになって

よくわかんないですが PC 再起動とかしてみてルーターもついでに再起動して
そのまま勢いで OS 再インストールとかしそうになって
当然のごとく何も変わらなくて、

そういえば最近 picasa に画像ポストのテストしてたなあ・・
Tumblr からひっぱって。
それ入れっぱなしだったなぁと思うフシがあって

つまり立派なポリシー違反でした。ごめんなさい。
と言っても遅すぎて完全に手遅れだったので

そのころ GoogleMaps では、ぼうけんがはじまってましたが
こちらもはじまりました。
そうです、今からが始まりなのです。

せっかくだからリーダーもフォルダ分けして整理できるし
1 からつける Gmail ラベル付け
楽しいなっ!アハハッ!
真っ白のカレンダーに未来の予定を記入したりしてアハハ!

無理。

もうヤダから Gmail は Thunderbird から復旧
同期するようにしてバックアップ状態を保つようにして
リーダーはエクスポートした OPML があったので復旧
Bookmarks はインポートという機能が見つからないぞ!
Google+ は 1 からサークル作ってどんどん追加
またサークルに追加とか迷惑かけてごめんなさい
他のサービスもどうのこうの
Blogger はバックアップしてなくて、ブログが消えたのはつらい・・・
と思ってたら数時間後に閲覧だけできるようになってたので
あっでも、アカウントの有効期間って 6~9ヶ月くらいだったような・・
Google アカウントの有効期間を調べたけど今のポリシーには書いてないっぽい
それでもいつ消えるかわからないから、ブックマークしてくれた方々のためにも
せめてアーカイブとして残そうと思って
でもログインできないから、バッチ書いて記事抽出してインポートの XML 形式に合わせて
あれれ、いくつか記事壊れたけどいいや状態でインポートして
デザインは外側から見た HTML からだいたい復元
これはべつに違うデザインにしてもよかったなと今書いてて思った
でも画像が Picasa だから全部ダメになってて仕方なく手作業で戻した

このような感じで季節はすっかり春になりました

今後はこのブログでとりあえず書くけど、
その前に メールアドレスが変わったから、ソースコード内の表記とか
登録してるサービスの情報変更をしなければ・・・

ブログは Tumblr にしようか Octpress と GitHub Pages にしようか考え中
Tombloo 関連が多いから、どっちかというと Tumblr かなぁ

なんか思いつくまま書いてしまったけど、そういう状態でした
クラウドというか Web サービスとどう付き合うべきか学べたし
それでも Google は寛大だと思った

そろそろコード書かないと死にそう


2012年3月19日

Tumblrの「アカウントの切り替え」を直すTomblooパッチ

Firefox アドオン Tombloo のパッチです。

機能概要

Tumblr の「アカウントの切り替え」を直すパッチです。
ログインのりにゅーで動かなくなってたのでとりあえず。

直してて思ったけど、CAPTCHA が導入されるかも…。そしたらめんどいな

追記:
CAPTCHA は signup の時でした

本体が直ったらパッチ削除したほうがいいです。

パッチの削除がわからなかったら、
パッチ一括アップデートぱっち で削除もできます。

パッチ (Download or Update):

インストール/アップデート:

上のパッチリンクを
右クリック→「Tombloo」→「Tomblooパッチのインストール」でインストール/アップデート。


※直接右クリックからインストールできない場合:

できない場合は

「Tomblooパッチのインストールに失敗しなくなるパッチ」 のパッチ/記事をインストールもしくは参照ください。

レポジトリ


2012年3月12日

jsFiddleだらけ-JavaScriptライブラリPot.js+PotLite.jsリリースノート



Pot.js 1.15 1.16PotLite.js 1.32 1.33 リリースしました。

2012-03-13 追記:
Pot.js 1.15 と PotLite.js 1.33 はバギーなためアップデートしました。詳細
2012-03-13 時点の最新は Pot.js 1.16PotLite.js 1.34 です。最新にアップデートお願いします。。


このバージョンでは、
  • 文字列処理の高速化
  • 重くなりそうな処理を非同期化
などを適応しました。

文字列処理の高速化

先日、ふと思って String.fromCharCode を呼ばずに
U+0000 - U+FFFF の配列をあらかじめ作成して インデックスに対応させたらどうなのかなって
ベンチマークとってみました。


結果として、String.fromCharCode(c) のような
apply で配列を使わない場合、かなり高速化できました。
メモリ消費も文字列などは気にするほどじゃなかった。
String.fromCharCode.apply(null, [...]); のような場合は逆に遅くなるので
従来通り String.fromCharCode を使用しています。

(この件はあほなミスをしてて@gochoさんにつっこまれて助かりました)

重くなりそうな処理を非同期化

重くなりそうな処理とは、巨大な文字列が渡される可能性のある関数や、
ループ回数が未知の処理などです。

途中で「応答のないスクリプト」警告なんぞ でてしまったらめんどうです。
そういった対処や負荷軽減も含めて 関数オブジェクトに deferred というメソッドを持たせました。

例えば Pot.md5(string); が同期実行に対して
Pot.md5.deferred(string); は、非同期で実行します。


圧縮・解凍

文字列を LZ77 アルゴリズムをベースに圧縮・解凍する
Pot.Archive.AlphamericString も同様に非同期化しています。

その他のサンプル

他にもいくつかテスト用にサンプルがあったので紹介します。



Pot.js / PotLite.js

Pot.js は CPU に負荷をかけることなく JavaScript の実行を可能とするユーティリティライブラリです。

PotLite.js は Pot.js の非同期な部分だけを抽出したライトバージョンです。

ダウンロード

マニュアル

その他の情報についてはマニュアル/マニュアルからのリンク から参照ください。

レポジトリ




その他、なにか問題・バグ・感想・指摘などあれば、
コメントやメールまたは @polygon_planet まで送っていただけるとうれしいです。