タグ

ブックマーク / unageanu.hatenablog.com (16)

  • [Javascript] AJAXアプリでオートコンプリート機能を有効化する際の注意事項 - うなの日記

    ユーザー名とパスワードをブラウザに覚えさせられるオートコンプリート機能ですが、入力されたデータをAJAXで送信して認証するタイプのアプリで使うにはいろいろと工夫が必要です。ということで、AJAXアプリでオートコンプリート機能を有効化する際の注意事項などを調べた範囲でまとめてみました。以下に挙げた手法を適用することで、IEとFirefoxではなんとか動作するようになりましたが、Chrome/Safariはまだダメです。 注意: 動作確認は手元にあった以下のブラウザで行っています(いずれもWindow版。)。他のバージョンでどうなのかは未確認です。 Firefox 3.6.17,4.01 IE 8 Chrome 11 Safari 5.0.5 サマリ IEでの記憶にはwindow.external.AutoCompleteSaveForm(form) を使用する FormをonLoad後に動的

    [Javascript] AJAXアプリでオートコンプリート機能を有効化する際の注意事項 - うなの日記
    yuiseki
    yuiseki 2013/11/06
    chromeでajaxなformだとオートコンプリート不可能
  • Seleniumを使ったWeb UI自動テストシステムの構築でやったことまとめ - うなの日記

    Seleniumを使ったWeb UIの自動テストシステムを作ったので、やったこと・感想などをまとめてみます。 テスト対象 テスト対象は、AJAXなWebアプリです。 サーバーはREST APIを提供するのみで、UIは全てJavaScriptという構成。 サポートブラウザはIE7以降,Firefox3.6以降。(特定の組織内で使うものなので、Operaなどは未サポートです。) 使用したSelenium 2.x 系列を使いました。 WebDriverと統合されたあとのやつです。 言語はJavaを使用。 テストの目的 以下を目的としました。 機能追加/不具合改修でのデグレード防止 機能追加や不具合改修に伴う動作不正を検出し、デグレードを未然に防止する。 動作確認コストの削減による開発効率の向上 ブラウザごとの動作確認を自動テストを利用して行うことで、機能実装時の確認工数を減らす。 リリース前のリ

    Seleniumを使ったWeb UI自動テストシステムの構築でやったことまとめ - うなの日記
    yuiseki
    yuiseki 2012/12/06
  • 画像内で使用されている色の統計を取るサンプル - うなの日記

    RMagickを使って、画像内で使用されている色の統計を取得するサンプルを書いてみました。使用されている色ごとに割合を算出し、使用量の多い順に出力します。 require 'rubygems' require 'RMagick' imgs = Magick::Image.read("./kitten.jpg") img = imgs.first # 画像内で使用されている色の一覧を集計 histogram = img.color_histogram.inject({}) {|h,pair| color = pair[0].to_color( Magick::AllCompliance, false, 8, true ) h[color] ||= 0 h[color] += pair[1] h }.sort_by {|pair| pair[1]*-1 } #使用されている順にソート #割合を

    画像内で使用されている色の統計を取るサンプル - うなの日記
  • XSSの攻撃手法いろいろ - うなの日記

    html5securityのサイトに、XSSの各種攻撃手法がまとめられているのを発見せり!ということで、個人的に「お!」と思った攻撃をサンプルつきでご紹介します。 1. CSS Expression IE7以前には「CSS Expressions」という拡張機能があり、CSS内でJavaScriptを実行できたりします。 <div style="color:expression(alert('XSS'));">a</div> 確認 @IT -[柔軟すぎる]IEのCSS解釈で起こるXSS で詳しく解説されていますが、CSSの解釈が柔軟なことともあいまって自前で無害化するのはなかなか困難。以下のようなコードでもスクリプトが実行されてしまいます。 <div style="color:expr/* コメントの挿入 */ession(alert('XSS'));">a</div> 確認 <div s

    XSSの攻撃手法いろいろ - うなの日記
  • Hashのfindには何が渡されてくるのか? - うなの日記

    RubyのHashはEnumerableをMixinしてるのだけど、Enumerable#findのブロックに渡される引数は1つ、となっているわけだ。Hashならキーと値を持つのに何で1つ?Hash#eachは2つじゃん!とかひそかに疑問に思っていたのだけど、今日解決しました。 { :a=>"aa", :b=>"bb", :c=>"cc" }.find {|item| p item } 実行結果です。 [:b, "bb"] [:c, "cc"] [:a, "aa"]なるほど、配列で渡されてくるわけね。納得。

    Hashのfindには何が渡されてくるのか? - うなの日記
    yuiseki
    yuiseki 2010/10/17
  • GMailのSMTPサーバーを使ってメールを送信するサンプル - うなの日記

    GMailのSMTPサーバーに接続し、メールを送信するサンプルです。 TMail利用してメールを作成。 これを使うと、日語メールや添付ファイル付きメールもさくっと作成できるみたいです。 メールの送信はRuby付属のNet::SMTPで。 GMailのsmtpサーバーでは、TLSによる暗号化が必要なので「tlsmail」を利用して対応します。 あと、認証も必須です。 require 'rubygems' require 'tmail' require "tlsmail" # tmailでメールを作成 mail = TMail::Mail.new mail.to = 'foo@var.com' mail.from = 'foo@gmail.com' mail.subject = 'test mail' mail.date = Time.now mail.mime_version = '1.0

    GMailのSMTPサーバーを使ってメールを送信するサンプル - うなの日記
    yuiseki
    yuiseki 2010/09/20
  • Basic認証を行う簡単なサンプル - うなの日記

    SinatraのFAQにBasic認証を行うサンプルがあったので試してみます。といっても、「set Rack::Auth::Basic」を呼び出すだけ。 require 'rubygems' require 'sinatra' # 認証を設定。 # ユーザー名が「foo」,「var」の場合のみアクセスを許可する。 use Rack::Auth::Basic do |username, password| username =~ /(foo|var)/ end # 後は普通にrouteを登録すればOK get( "/" ) { 'Hello world!' } スクリプトを実行し、 http://127.0.0.1:4567/にアクセスすれば、Basic認証のダイアログが表示されます。 特定のパスでのみ認証を有効化する 上の例では、サーバーのすべてのパスで認証が必要になります。特定のパスにア

    Basic認証を行う簡単なサンプル - うなの日記
    yuiseki
    yuiseki 2010/02/06
  • 平均・分散・標準偏差を求める - うなの日記

    配列の要素をto_iした値の平均・分散・標準偏差を求める関数です。 class Array # 要素をto_iした値の平均を算出する def avg inject(0.0){|r,i| r+=i.to_i }/size end # 要素をto_iした値の分散を算出する def variance a = avg inject(0.0){|r,i| r+=(i.to_i-a)**2 }/size end # 要素をto_iした値の標準偏差を算出する def standard_deviation Math.sqrt(variance) end end サンプル。 array = [6,4,6,6,6,3,7,2,2,8] puts array.avg puts array.variance puts array.standard_deviation 実行結果です。 5.0 4.0 2.0

    平均・分散・標準偏差を求める - うなの日記
  • Google Street View を表示するサンプル - うなの日記

    Google Map API を利用してGoogle Street Viewを表示するサンプルです。必要な作業は以下のとおり。 Google MapJavaScriptライブラリをインポート Google MapAPIキーを取得して、keyの値に設定する必要があります。 Street Viewを表示するコンテナ要素を作成。 幅と高さも設定しておきます。 GStreetviewPanoramaを作成。 引数で2で作成したコンテナ要素と表示する緯度経度を指定します。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!-- google mapのライブラリをインポート --> <script src="http://maps.google.com/maps?file=api

    Google Street View を表示するサンプル - うなの日記
    yuiseki
    yuiseki 2009/09/28
  • jquery-jsonでJSONを安全にパーズする。 - うなの日記

    jQueryのgetJSON()ではJSONの解析がwindow.eval()で行なわれてしまいますが、プラグインとして別途提供されているjquery-jsonを使うとJSONを安全に解析できます。 プラグインをインポートすると、「$.evalJSON」と「$.secureEvalJSON」の2つのJSON解析APIが追加されます。 「$.evalJSON」は安全性チェックなしに「window.eval()」してJSONを解析します。 「$.secureEvalJSON」は安全性を事前にチェックしてから「window.eval()」します。 チェックでエラーになった場合は、例外をスローします。 なお、どちらの関数も「JSON.parse」が使用可能であればそちらを優先して使用します。 なのでFireFox3だとどちらの関数を使っても安全な解析が可能だったりします。 以下は各解析メソッドで普

    jquery-jsonでJSONを安全にパーズする。 - うなの日記
    yuiseki
    yuiseki 2009/09/11
  • Sinatraで遊んでみる - うなの日記

    Sinatraは、Rubyで簡単にWebApplicationを作成できるDSL(ドメイン特化言語)です。 インストール $ gem install sinatra シンプルなサンプル 以下は、"/"にGETでアクセスされた場合、"Hello World"を返すWebサーバーを起動するだけの単純なサンプルです。 require 'rubygems' require 'sinatra' # "/"にGETでアクセスされた場合、"Hello World"を返す。 get( "/" ) { 'Hello world!' } 起動して、以下のURLにアクセスすれば http://127.0.0.1:4567/「Hello world!」が返されてくるはず。ログをみる限りでは、内部的にはWebrickを利用しているみたい。また、デフォルトでは、Daemonにはならないようです。 portを指定する

    Sinatraで遊んでみる - うなの日記
    yuiseki
    yuiseki 2009/05/20
  • EnumMapがどれだけ早いか性能を測ってみた。 - うなの日記

    EnumMapとかいうEnumのみをキーにできるMapがあって、これがEnumの連番を使って高速に動作するらしい。(→Java プログラミング言語 - 列挙型) ということでとりあえず性能を測ってみた。 計測方法 EnumをキーとしたMapのインスタンスをいろいろ作成し、 get、putをそれぞれ500000*26回実行した場合の所要時間を計測。 それぞれ5回試行し、平均を取る。 結果 get put EnumMap 312ms 490ms HashMap 593ms 921ms TreeMap 334ms 1490ms LinkedHashMap 497ms 690ms うん、まぁ、早いかな。> EnumMap。 なお、計測環境のCPUは Pentium D 2.79GHz, JDKは1.6.0_07です。 計測で使用したコード 計測で使用したコードは以下の通り。 // テスト用の列挙型

    EnumMapがどれだけ早いか性能を測ってみた。 - うなの日記
    yuiseki
    yuiseki 2009/01/31
  • トランザクション - うなの日記

    transactionを利用して、一連の更新処理をアトミックに実行します。 トランザクションを使う テーブル定義: CREATE TABLE kittens ( id int(11) NOT NULL auto_increment PRIMARY KEY, name VARCHAR(255), color VARCHAR(255), age int(4) ) TYPE = InnoDB ; サンプル: # 接続先サーバーの設定は省略 # ロガーの設定/ログを"debug.txt"に出力する。 ActiveRecord::Base.logger = Logger.new("debug.txt") class Kitten < ActiveRecord::Base def to_s return name end end # transaction を利用。 # ブロック実行後に変更がコミット

    トランザクション - うなの日記
  • Chartを使ってみた。 - うなの日記

    Yahoo! UI Library 2.4.0 の新機能「Chart」を使ってみました。 「Chart」を使うとJavaScript APIの呼び出しだけで簡単にチャートを作成できます。 チャートはFlash(CSSJavaScriptではなく)を使って描画されます。 内部的には、ASTRAが使われているようです。前にさわったことがあるな。 Flashとの連携部分は隠蔽されており、基的にJavaScriptの知識のみあればリッチなチャートを使えます。 JavaScriptからのリアルタイムなデータ更新もサポートされます。(この辺が、画像を返す系のグラフ作成APIに対するメリットかな。) インストール 必要なモジュールをインポートします。 <!-- 依存モジュール --> <script type="text/javascript" src="http://yui.yahooapis.c

    Chartを使ってみた。 - うなの日記
    yuiseki
    yuiseki 2008/09/20
  • Method#callとObject#send - うなの日記

    インスタンスの任意のメソッドを実行する方法として、 Method#call Object#send があります。どちらも同じことが可能ですが、指定されたメソッドが存在しなかった場合の動作が違います。 方法 メソッドが存在しなかった場合の動作 Method#call エラー(メソッドが未定義) Object#send Object#method_missingが実行される。 class Kitten def initialize( name ) @name = name end def meow ( count ) print @name + " : " count.times { |i| print "meow!" } print "\n" end def method_missing ( name, *arg ) print "method " + name.to_s + " is no

    Method#callとObject#send - うなの日記
    yuiseki
    yuiseki 2008/07/03
  • タグをグループ化して整理できるはてなブックマーク-フロントエンド「Bookmarks」 - うなの日記

    「Bookmarks」は、タグをグループ化して整理できる、はてなブックマーク-フロントエンドです。 特徴 タグセットでのタグのグループ化 関連するタグをグループ化してタグセットを作成。 タグセットからタグを探すことで、関係のないタグが排除され、効率よく目的のタグを見つけることができます。 タグセットを使ったブックマークの分類 タグセットを使ってブックマークを階層的に分類表示できます。 ブックマーク検索 キーワードでのブックマーク検索をサポートします。 試してみる はてなブックマークを公開しているはてなユーザーならすぐに試せます。(認証不要)次のURLにアクセス! http://unageanu.sakura.ne.jp/bookmarks/index.html#<はてなのユーザーID>例) unageanuのブックマーク ( http://unageanu.sakura.ne.jp/boo

    タグをグループ化して整理できるはてなブックマーク-フロントエンド「Bookmarks」 - うなの日記
    yuiseki
    yuiseki 2008/04/01
  • 1