タグ

ブックマーク / arikui.hatenadiary.jp (21)

  • WSHでウェブページをHTMLDocumentで取得 - f8g

    いろいろ調べたけどあんまりうまくいかなかったりしたので、ちょっとややこしい方法。 ウェブページの取得 MSXML で。 var XmlHttp = WSH.CreateObject("MSXML2.XMLHTTP"); XmlHttp.open(method, url, false); XmlHttp.send(data); 文字コード変換 変換にはここの ADOS_Decode がそのまま使える。 http://homepage2.nifty.com/nonnon/SoftSample/VB.NET/SampleModADOS.html function toUnicode(bytes, charset){ var stream = WSH.CreateObject("ADODB.Stream"); stream.Open(); stream.Type = 1; // ADODB.Str

    WSHでウェブページをHTMLDocumentで取得 - f8g
    kageroh_
    kageroh_ 2009/11/20
  • ifとスコープの速さ - f8g

    ifとor 書き方として気になったんですが、 if(!b) b = 2; a = b + c; と a = (b || (b = 2)) + c; と、if文を書くかどうかで速度に違いが出るのかなー、と思って計ってみました。 // case 1 var a, b, c = 1; while(i--){ if(!b) b = 2; a = b + c; b = null; } // case 2 var a, b, c = 1; while(i--){ a = (b || (b = 2)) + c; b = null; } fx3.5 ie8 opera10 chrome3.0 case 1 0.00001313 0.0002628 0.0001864 0.00002484 case 2 0.00001188 0.0002962 0.0002122 0.00003132 (単位はms) どれ

    ifとスコープの速さ - f8g
  • Rubyで書いてJavaScriptで使う - f8g

    AgDLRのRepl面白いですね。 CodePlex Archive ブラウザ上で Ruby を試せる「IRBWEB」を作ってみた - てっく煮ブログ 跡地 Replは名前のとおりブラウザ上でレプるためのパーツって感じでしょうか。Replの実装は大体こんな感じでやってるんだと思います。 http://blog.tomasm.net/2009/02/20/multilingual-repl/ それを参考にして、Rubyで作ったオブジェクトをJavaScriptで利用するサンプル。 http://arikui.github.com/run_ruby/TestPage.html オブジェクト登録後に (なんちゃら).Invoke("呼ぶメソッドの名前", [引数]) みたいな感じでFirebugなどから呼び出してみてください。 ソース arikui.github.com/Page.xaml.vb

    Rubyで書いてJavaScriptで使う - f8g
  • ツリーマップ型の音楽再生機 - f8g

    最近は Ruby-Processing を使って「ビジュアライジングデータ」をやってます。 GitHub - jashkenas/ruby-processing: Code as Art, Art as Code. Processing and Ruby are meant for each other. Ruby-Processing のいいところ JRuby で動くので Processing で使うような Java のライブラリが使える 「ビジュアライジングデータ」で利用している Treemap のライブラリも使えます gem install すると JRuby ごとくっついてくるので, わざわざ JRuby を用意する必要がない 「ビジュアライジングデータ」の内容で困ることはあんまりない 後半は rp5 create で --bare 付けると困る Ruby でスケッチを書けるのでオ

    ツリーマップ型の音楽再生機 - f8g
    kageroh_
    kageroh_ 2009/07/18
  • WSHでImageMagick、Tomblooに位置情報付加 - f8g

    ImageMagickはCOMからも使えるんですね。 Install the ImageMagickObject COM+ Component @ ImageMagick たとえば、identify -verbose rose.jpgをWSHで実行したいときはこうやります。 var ImageMagick = WSH.CreateObject("ImageMagickObject.MagickImage.1"); ImageMagick.Identify("-verbose", "rose.jpg"); 別にWshShellでいいじゃん、という気も。注意しないといけないのは、上のコードでは、ダダーッと情報が表示されるけれど、-formatのときなどはIdentifyが値を返すようになるところ。 var info = ImageMagick.Identify("-format", "%[fx

    WSHでImageMagick、Tomblooに位置情報付加 - f8g
    kageroh_
    kageroh_ 2009/03/17
  • SilverlightでJavaScriptのライブラリを書く - f8g

    メモ。 クラスにScriptableTypeAttributeを設定する ScriptableTypeAttribute Class (System.Windows.Browser) | Microsoft Docs <Browser.ScriptableType()> _ Public Class Library1 Dim _aaa As Integer = 1 Public Property aaa() As Integer Get Return Me._aaa End Get Set(ByVal value As Integer) _aaa = value End Set End Property Public Function bytesFromBase64(ByVal s As String) As Byte() Return Convert.FromBase64String(s

  • Canvasでバーコードを読む - f8g

    JANの仕様 ここが分かりやすい。→ バーコードの作り方 プログラミングでの話 まずは、 バーコードの部分だけ写ってる写真を用意する 高さ1px分どこかを切り取る コントラスト調整 2値化 ビットの文字列にする モジュールの幅を調節 左右のガードバーからスケールを推測 ガードバー部分を削除 みたいな準備をします。結構写真写りに左右されるかも。 13桁の数字のうち、画像として表現されているのは2-13文字目までの12文字で、最初の1文字目は2-7文字目によって判別します。なので、とりあえず2文字目以降を判別します。対応表は下みたいな感じ。 { left: { odd: { "0001101": 0, "0011001": 1, "0010011": 2, "0111101": 3, "0100011": 4, "0110001": 5, "0101111": 6, "0111011": 7,

    Canvasでバーコードを読む - f8g
  • Shellなプロトコル - f8g

    中身がまったく別物になってきたので別のGistにしました。ちゃんと動いてる気がする。 http://gist.github.com/69913 普通の実行 cmd:command 例「cmd:ruby -e "puts 1"」 ファイルにコードを保存して実行 cmd:command;code;args 例「cmd:vbs; WSH.Echo(WSH.Arguments(0) + WSH.Arguments(1)); "1" "2"」 JavaScriptのevalを通して実行 cmd:-e command;code;args command, code, argsをJavaScriptのコードとして評価してから実行します。 例「cmd:-e "echo " + (100 * 100)」 コード

    Shellなプロトコル - f8g
  • いろんな言語を実行できるプロトコル - f8g

    昨日の発展したやつです。「eval:言語;コード」で実行します。(たとえば「eval:vbs;WSH.Echo(1)」とか「eval:ruby;puts 1」とか) Language.evaluatorsに色々追加していけば色々実行できると思います。 Tomblooを使わないようにしたら、Tomblooのコードをパクリまくるという結果に至ったのだった。 追記 何でも動くようにしました。「eval:ls」とか「eval:ruby -e "puts 1"」みたいに。ファイルを指定して実行する系は「eval:何か;コード」みたいにする。

    いろんな言語を実行できるプロトコル - f8g
  • Firefox3でWSHプロトコル - f8g

    Firefox3のXPCOMUtilsを使うと、短いコードで独自プロトコルを登録できるんですね。 Components.utils.import | MDN MXR is retired 2008-12-03 - 趣味プログラマの外部記憶 XPCOMUtilsを使わない方法との比較 使わない方法は以下のリンクを参考に。 Adding a New Protocol to Mozilla 日語: Latest topics > Firefoxで独自プロトコルを定義する方法 - outsider reflex QueryInterfaceをあんまり書かなくてよくなった XPCOMUtils.generateQIが作ってくれます。 ProtocolFactoryを書かなくてよくなった 勝手に作ってくれます。自分で定義したい場合は、_xpcom_factoryに書きます。 TestModuleを書

    Firefox3でWSHプロトコル - f8g
  • JSActionsでGPSから座標を取得してGoogleMapsに反映 - f8g

    Tombloo + JSActionsでWSHを実行するコードは下ページからのコピペです。凄い簡単にFirefoxからWSHが使える。 http://d.hatena.ne.jp/brazil/20090102/1230876349 GPSからデータを取得する GPSからデータを取得するのに自作コンポーネントを使ってますが、MSCommを使ったりとか、そもそもWSHを使わないとか、色々方法はありますんでその辺は適当に。 自作コンポーネントはこんなの: http://d.hatena.ne.jp/arikui/20071212/1197453931 GoogleMapsを用意する window.map = new GMap2(document.getElementById("map")); みたいに、外からGoogleMapsのAPIが使えるやつ。 コード JSActionsのコードからwi

    JSActionsでGPSから座標を取得してGoogleMapsに反映 - f8g
  • 画像を分割してランダムに配置するモザイク - f8g

    カラー画像だと少々面倒臭そうなので、グレースケールに変換してからやります。手順はこんな感じです。 グレースケール化 10 * 10 に分割 分割画像のRGBを平均して分類 分類ごとにランダムソート 再配置 コード 使用 ImageProcessing.prototype.f= function(fnc){ return fnc(this); }; var clips = {}; ip = ImageProcessing .load("image.png") .lock() // グレースケール .each(function(px, x, y, self){ self.setPixel(x, y, px.grayScale()); }) .update() // 分割して色ごとにまとめる // 分割した画像の平均でまとめるてるので結構適当 .f(function(self){ var cli

    画像を分割してランダムに配置するモザイク - f8g
  • 等高線を描く - f8g

    基盤地図情報を使うと画像が公開できないので、普通の画像のRGBを標高値として等高線を描きます。 アルゴリズムが合ってんだか間違ってんだか分からん。(間違ってたのでコード修正しました) 簡単なアルゴリズムでは、画像を三角形に分割してその中で線を引いていきます。 使用 // 点 function Point3D(x, y, z){ if(!x) x = 0; if(!y) y = 0; if(!z) z = 0; this.x = x; this.y = y; this.z = z; } /** * 分割して線を引かせる部分 * @boxInterval 三角形の大きさ * @conInterval 等高線を引く間隔 */ ImageProcessing.prototype.drawContour = function(boxInterval, conInterval){ var ps = [

    等高線を描く - f8g
  • ラベリング - f8g

    http://www.microsoft.com/japan/msdn/academic/Articles/Algorithm/03/ これ使用 ImageProcessing.prototype.f= function(fnc){ return fnc(this); }; var ip = ImageProcessing.load("img.png"); // ImageDataを使用した方が速い ip.support.pixel = false; ip.initPixelControl(); var labels = []; var fil = 0; // ラベリングする色 ip.lock() // 閾値処理 .f(function(self){ var t = self.average().average(); //var t = (self.max().max() - self.m

    ラベリング - f8g
  • 自動コントラスト - f8g

    画像濃度変換処理 濃度の最小値が0, 最大値が255になるようにする濃度変換。与える関数は、 var f = function(x){ var a = 255 / (max - min); var b = - a * min; return a * x + b; }; 一般的な画像では最大値≒255、最小値≒0ということが多いので、見た目で変わってくることはほとんどない、と思う。明るさの調節と一緒に使うと効果が分かりやすい。 これ使用 ImageProcessing.Color.prototype.intensity = function(v){ return new Color(this.r + v, this.g + v, this.b + v); }; ImageProcessing.prototype.autoContrast = function(){ var self = th

    自動コントラスト - f8g
  • ハーフトーニング(拡散誤差法) - f8g

    パターンを用いたものではなく、空間フィルタリングのときのようなフィルタを掛けて2値化。 コード これ使用 ImageProcessing.prototype.errorDiffuse = function(flt){ var self = this; // init var w = this.canvas.width; var h = this.canvas.height; var sum = 0; // total of flt values var tmp = []; // temporary colors var fw = flt[0].length; // filter width var cur = parseInt(fw / 2, 10); // current pixel (X) of flt // init sum flt.forEach(function(_){ _.fo

    ハーフトーニング(拡散誤差法) - f8g
  • ハーフトーニング (ディザ法) - f8g

    画像を2値化するハーフトーニングのDither法が面白かったので紹介。 コード パターンを与えると、それっぽく点を打つ。(これ使用) function dither(img, pattern){ var black = new ImageProcessing.Color(0, 0, 0); var white = new ImageProcessing.Color(255, 255, 255); var l = pattern.length; var n = 256 / (l * l); img.each(function(px, x, y){ if(px.average() > pattern[x % l][y % l] * n + 8) img.setPixel(x, y, white); else img.setPixel(x, y, black); }); } 参考PDF http

    ハーフトーニング (ディザ法) - f8g
  • JavaScriptで空間フィルタリング - f8g

    あるピクセル(V0.0)と周囲のピクセルとフィルタ行列を掛けて、それらの合計をV0.0のところに置くようなやつ。 Photoshopでは5*5, 7*7も高速にやれるけど、さすがにJavaScript/Canvasでは3*3でも遅い。 イメージ V-1.-1 V0.-1 V1.-1 V-1.0 V0.0 V1.0 V-1.1 V0.1 V1.1 掛ける f-1.-1 f0.-1 f1.-1 f-1.0 f0.0 f1.0 f-1.1 f0.1 f1.1 の和 (分かりづらい) シャープ var flt = [ [ 0, -1, 0], [-1, 5, -1], [ 0, -1, 0] ]; ぼかし var flt = [ [0.08, 0.12, 0.08], [0.12, 0.2 , 0.12], [0.08, 0.12, 0.08] ]; 輪郭抽出 var flt = [ [1, 1,

    JavaScriptで空間フィルタリング - f8g
  • JavaScriptで濃度変換 - f8g

    1pxごとに何らかの関数を与えて, 明るさなどを変える。セピアやグレースケールもこの類だと思います。 IronRubyのやつ http://d.hatena.ne.jp/arikui/20070918/1190050541 元画像 明るさ調整 var _f = function(n){ return function(x){ return x + n; }; }; var f = _f(50); 色調反転 var f = function(x){ return 255 - x; }; レベルスライス var f = function(x){ if(x <= 64) return 0; if(x > 191) return 0; return 128; }; 階調化 var f = function(x){ return parseInt(x / 32) * 32; }; ガンマ補正 var

    JavaScriptで濃度変換 - f8g
  • OperaのCanvasが凄いのでモザイク - f8g

    いまさらながらOperaにはgetPixel/setPixelがあることを知りました。 http://orera.g.hatena.ne.jp/higeorange/20080604/1212505679 Operaさんはすげえぜ! ただ、色の指定が文字列ってところが使いづらい。 ということでモザイク。 CanvasRenderingContext2DGame.Color = function(r, g, b){ this.r = r; this.g = g; this.b = b; this.toString = function(){ return "rgb(" + [this.r, this.g, this.b] + ")"; }; }; CanvasRenderingContext2DGame.prototype._getPixel = function(x, y){ var co

    OperaのCanvasが凄いのでモザイク - f8g