ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

1つの項目に、数字のときはカンマ付け右寄せ、文字のときは左寄せする

2013-12-17 14:23:36 | JavaとWeb
こんなかんじ(3桁目の数字と文字(欠測))。

これを、JavascriptとJQueryでやる方法の概要とサンプルコード




■概要

(1)テーブルのデータにidとクラスをつけます、
     IDは、一意になるように
     クラスをcomma3など、すべて共通にします


(2)JQueryで
  $(function(){
$.each($(".comma3"), function() {

     // (3)の処理
  }
  }
 というふうに、(1)で指定したクラス全体に対して、(3)以降の処理を
 行います。

(3)IDを取得して
     myid = $(this).attr("id"); // id取得
     mycssid = "#"+myid;     //  後で使う

   文字だったら   
   if ( isNaN(parseInt( $(this).text() )) )
   {
       // 左寄せ
       $(mycssid).css("text-align","left");
   }
   数字だったら
   else
   {
       // カンマをつけて
       set_comma3(this);
       // 右寄せ
       $(mycssid).css("text-align","right");
   }
  とします。

(4)カンマ付け関数set_comma3()は、

[jQuery] 金額などの数値に3桁のカンマをセット
http://blog.aidream.jp/jquery/jquery-comma-three-digit-1870.html

を参考に作成




■ソースコード

<!doctype html>
<HTML>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" 

type="text/javascript"></script>

<script>
$(function(){ 
	$.each($(".comma3"), function() {
		myid = $(this).attr("id");	//	id取得
		mycssid = "#"+myid;	
		if ( isNaN(parseInt( $(this).text() )) )
		{	//	文字→左寄せ
			$(mycssid).css("text-align","left");
		}
		else
		{
			//	数字→カンマつけて
			set_comma3(this);
			//	右寄せ
			$(mycssid).css("text-align","right");
		}
	});
});

//--------------------------------
// カンマ付け
// 参考にしたサイト
// http://blog.aidream.jp/jquery/jquery-comma-three-digit-1870.html
//--------------------------------
function set_comma3(target)
{
	var value = $(target).text();
	if (isNaN(parseInt(value)) == false)
	{
		while (value != (value = value.replace(/^(-?\d+)(\d{3})/, ",")));
	}

	$(target).text(value);
}
</script>

<body>
<table border=1>
<tr><td>1</TD><td>数字</td><td id="data1td" class="comma3">1234</td></tr>
<tr><td>2</TD><td>カンマなし</td><td id="data2td" class="comma3">234</td></tr>
<tr><td>3</TD><td>大きな数</td><td id="data3td" class="comma3">12345678</td></tr>
<tr><td>4</TD><td>マイナス</td><td id="data4td" class="comma3">-1234</td></tr>
<tr><td>4</TD><td>文字</td><td id="data5td" class="comma3">欠測</td></tr>
</table>
</body>
</html>



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

WebAPIを利用する場合、実現可能性を100%は保証できない

2013-12-17 11:47:19 | Weblog
これ、話題になって、私の意見は表題の通りなんだけど、
周りの人にぼろくそに批判されたので、
ちょっと、ここに自分の意見を書いてみる。




WebAPIを使ったシステムを作る場合、
自社が提供するAPIを使うのであればともかく、
GoogleMapや、FaceBookなどの他社のAPIを使う場合、
実現可能性を100%は保証できないと思う。

なぜなら、WebAPIの仕様は急に変わったり、サービスがなくなったりするから。
GoogleMapや、FaceBookなら大丈夫でしょう・・・
といわれると、サービスはなくならないと思うけど、API変更は・・・?

実現可能性は、「リリース日に動いている」という意味で
とらえれば、リリース日寸前にAPI変更となった場合、
対応できない。
だから、実現可能性100%保証はできない。




さらに費用も含めて、「実現可能性」となった場合、
商用のAPIを利用するのもヤバイ!
いきなり、「API使用料上げます!」ってこともありえる。
予算超過(>_<!)




まあ、これは一例だけど、現在の場合、
ソフトウェア環境は「常に」動いている。
そこで、今出来ることでも、将来できる保証はない。
そういう意味で、

WebAPIを利用する場合、実現可能性を100%は保証できない

いや、WebAPIに限らず、実現可能性は、
「現在100%」とか、
「たぶん、実現可能」
という言い方しかできず、その不確実な状態で、受注・発注することになると
おもう。




100%実現可能と思ってしまった場合、
   「それができなかったら?」というのは考えない。
「実現可能性を100%は保証できない」と思うからこそ、
   「それができなかったら?」と考える。

世の中、人それぞれなので、どのように考えても自由だが、
私は、後者のように、保証できないと考えるほうが安全と思っている。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

由美かおるさん(水戸黄門の)が、正四面体タイル定理を説明-情報処理学会会誌

2013-12-16 21:38:48 | Weblog
情報処理学会の会誌「情報処理」2014年1月号(きょうくらいに来たやつ)
の巻頭コラム、水戸黄門でお風呂入ってた由美かおるさんが正四面体タイル定理を説明
している(@_@!)

・・・入浴シーンはない。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JQueryの脆弱性って、ウィルスより危険では?

2013-12-16 10:58:09 | ネットワーク
『セキュア・プログラミング講座(Webアプリケーション編)』第2弾:マッシュアップ(12/13)で、JQueryの脆弱性について言っていたというのは、前に書いたけれど、これって、ウィルスより危険なんじゃないか?




■危険な理由その1:どんだけ、脆弱性があるかわからない

 話にあったのは、JQueryの(障害番号?)9521という番号で修正されているものなんだそうだけど、これの問題点がわかりにくい。

ちなみに、

jQueryにおけるXSSを引き起こしやすい問題について
http://subtech.g.hatena.ne.jp/mala/20110624/1308881526

の「典型的なXSSの事例」が、この問題について書いているみたい。

 さらに、これ以外に脆弱性があるのかどうかもわからない。




■危険な理由その2:全サイトが脆弱性対策できるわけではない

 仮に、この問題で、攻撃手法がわかったとする。
 で、このとき、現在は修正されているそうで、かつ、昔のバージョンも
修正されているそうだ。だから、CDNでJQueryをリンクしているところは、
問題ないかもしれない。

 しかし、JQueryは、かならずしもCDNを使わない。
 自分のローカルで、JQueryを持っている場合がある。
 そうすると、このJQueryは、脆弱性対策されないままである。
 →攻撃手法がわかったら、攻撃できてしまう。

 その上、クラッカーさんに、脆弱性があることがばればれである。
 (CDNか、ローカルにJQueryを置いているかどうかは、
  ソースコードを見れば分かる。
  ローカルにJQueryがある場合、そのソースコードを見れば、対策している
  かどうかもわかる)




■危険な理由その3:これらを公開する機関がわからない

 これらの脆弱性が今後も見つかった場合、
 どこの機関がこれらの問題点を公開して、対策をたててくれるのか、
さっぱりわからない。

 IPAなのだろうか・・・
 セキュリティ会社?




というかんじで、ウィルスだと脆弱性が見つかれば、
シマンテックさんや、ノートンさんが何とかしてくれるが、
JQueryだと、だれも何もしてくれない・・・

これは、ウィルスより、危険じゃないだろうか?

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

セキュア・プログラミング講座(Webアプリケーション編)第2弾:マッシュアップ

2013-12-13 19:45:48 | JavaとWeb

『セキュア・プログラミング講座(Webアプリケーション編)』第2弾:マッシュアップ(12/13)
http://topse.or.jp/2013/10/2068

に行ってきた!その内容をメモメモ




従来のWebアプリケーション
・紙芝居的な画面遷移
  わりとゆっくりとした動き
AJAX流アプリケーション
・滑らかな画面変化
  反応速度はやい
構図の変化
 従来は、サーバー側が動的
 AJAXは、ブラウザで動き、サーバーはデータを与える

1.WebAPI
 Webアプリケーションとなに違う?
  →ユーザーの会話を想定しない
 クライアントへデータや演算結果
・REST
  Representational State Transfer

 HTTPリクエストと対応付ける
 特徴4つ
  ・ステートレスな通信プロトコル
  ・リソースでステートを表現
  ・簡素化されたオペレーション
  ・URIのパス部分でリソースを識別

 RPC,SOAPはソフト複雑になる
  →REST風

 Ruby on Railのresourcesタイプルーティング

2.マッシュアップの構図
・マッシュアップ
  音楽DJの世界におけるマッシュアップ
 →Webにおける「マッシュアップ」
    複数の既存WebAPIを組み合わせ
    新たなWebアプリケーションを作成

 2種類のマッシュアップ
  クライアント側マッシュアップ
  サーバー側マッシュアップ

マッシュアップに対する侵害パターン
  悪意のAPI→ゆーざー
  悪意のAPI→API
  無関係のサイト→API
  無関係のクライアント→API

今回はブラウザが侵害される「悪意のAPI→ゆーざー」を考える

Javascript
 インタプリタ言語
 Javaに似た構造(似て非なる言語)
 動的型言語(実行時に型が決まる)
 オブジェクト指向(プロトタイプを使う)
 リテラル表記の表現力
 関数型プログラミング

制御構造
 分岐
 ループ
 ループから脱出

コンストラクタとプロトタイプ
 コンストラクタ関数/new Foo() 新しいオブジェクト
   →プロトタイプオブジェクト
      →プロパティ

 コンストラクタはオブジェクトに振る舞いを与える
 プロトタイプがチェーンにより、継承に相当することができる

ブラウザのJavascript実行環境
・ECMAスクリプトオブジェクト
・ブラウザオブジェクト
・DOM
・Javascriptアプリケーションコード

windowとグローバルオブジェクト
・グローバルオブジェクト:
  すべてを収容するトップレベルオブジェクト
・ブラウザのグローバルオブジェクト=window
  document = window.document

4.クライアント側コードに起因するスクリプト注入
・innerHTML
  スクリプト注入攻撃できる
  →ID,パスワードを入れるようにさせる&のっとりできる
 →imgタグで src=/でかならず、失敗させ、
  onerrorの先に、実行したいことを記述する。

病理メカニズム
・スクリプトはどこにある
  head,bodyのscriptタグ
  イベントハンドラ
・スクリプトはいつ実行されるか?
  (1)HTMLが読み込まれたとき
  (2)イベントハンドラ:イベント起きたとき
  (3)動的に:動的についたとき
  (4)くっつけたときにイベントが起きればすぐに
      →onerror
・スクリプト注入
 外から来た値
  HTTPリクエスト
  クッキー
  WebAPI
  別のクライアント

 DOM,eval関数→スクリプト動く

・攻撃パターンの入口
  location
  クッキー
  XMLhttpRequest
  WebSocket:第三者
  postMessage()
  Window.name
  WebStorage

・どこに行くと危ない
  eval系
   eval
   function→文字列から関数
   settimer
  scriptタグ
  IFRAMEタグ→サンドボックス属性,
  イベントハンドラ
  innerHTML
  document.write

対策
・インラインスクリプトを避ける
  →スクリプトを分離する
 サーバー側コードでスクリプトを出力せず、別ファイルで
・入力を警戒する:仕様を決めて、入力チェックする
・正規表現のバグに注意する
 .+,.*は貪欲なので、工夫する
 .は改行文字にはマッチしない
   ユニコード2028攻撃
 ^と$を忘れない
  (\A,\zはjavascriptではサポートされていない)
・タグではなく、テキストとして出力する
・JQueryで$(検索式)→検索式のところで、タグが生成されることも
  →findを使う
・html()は危ない→innerHTMLと同じ
  →text()で書く
・$.parseHTML()の使用も避ける

5.同一源泉と他源泉
・これまでの脅威の構図
  クライアントから脅威
 最近は
  サーバーが脅威
源泉:Webコンテンツの出所
 スキーム、ホスト、ポートの3つ組み
 これが違うと、源泉が違うかも
   例:ポート80、ポート8080

セキュリティ確保のための源泉
・同一源泉ポリシー
  かつての制約
  →マッシュアップにとっては不便
抜け道
・JSONP
・iframeの3重
・iframe+postMessage
・webワーカー+importScript

→XMLHttpRequest level2 XHR2
→IEではXDomainRequest
Originリクエストヘッダー→Access-Control-Allow-Origin
 →サーバーには拒否権がある
 →ブラウザには、歯止めがない
   :スクリプト注入攻撃
対策にはCSP
・ContentSecurityPolicy
  アクセスできる源泉のホワイトリスト
 実装:FireFoxから
 W3CではCSP1.1がドラフト、Androidでもサポート予定

他のマッシュアップ論点
・CSP
・クライアント側マッシュアップにおける
 リクエスト強要(CSRF)
・HTML5の新機能
・javascript向けフレームワーク
・サーバー側マッシュアップ
・IE固有

パーフェクトJavaScript
JQuery 9521
古いバージョン(1.6)などは危ない
でも、前のバージョンも修正されている

HTML5でタグ増えた
onの着かない属性:危ない属性

脆弱性をチェックする仕組み
有償の検査ツール:出始めてはいる

性能、負荷テストのかわりに
セキュリティ用のテストがあっていいはず。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Wordファイル内の画像の解像度を、いっぺんに落としたい(案)

2013-12-13 14:00:01 | Officeソフト&VBA
まだ、やっていないので、アイデア(案)段階。

【問題】
Wordに、相当な画像を貼りこんで、とても大きくなってしまった。
すべての画像の解像度を、出来るだけ簡単に落としたい

【ソリューション案】
・docx形式で保存する
・拡張子をzipにして、解凍する
  →docxは、zipファイルで固めてあるXML+画像ファイル
・word/_relsに、ファイル名とIDの対応が書いてある
・word/mediaの下にイメージファイルがある

  →ここまで確認した。


よって、このあと、
word/mediaの下のイメージファイルの解像度を全て落とし、
もう一度zipで固めなおして、拡張子を.docxに戻せばよい?

・・・まだやってない。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

統計モデル その5 探索的因子分析(いわゆる因子分析)/信頼性と妥当性

2013-12-13 09:11:28 | AI・BigData

統計モデル その4 パス解析
http://blog.goo.ne.jp/xmldtp/e/883ff50a30dc1d864e9b0acd12b78e85

の続き。「統計モデル」の授業のメモメモ




■前回の復習

モデルの修正
・適合度を上げる
 →数値で示すこと可能
 →理論的に妥当な修正
・モデルを当てはめた結果=Σ
 SとΣの差を求める
  →大きいところ
 残差間(誤差間)の相関をいれてみる
・修正指数
 mi→カイ2乗の減少量予測
・パス解析
 関係の強さ
 因果の方向を知るのは難しい

・直接効果の解釈
 他の影響が一定/排除

・間接効果の解釈
 パス係数の掛け算

・総合効果
 直接効果+間接効果
 標準化の使い分け
  単位に意味あり→標準化しない

・潜在変数間のパス解析
 合計得点間のパス解析より、係数・相関大きくなる
  →希薄化の修正
 因子を使うと、飽和モデルでなくなることも

・等値制約
 複数のパス係数が等しい量であるとする制約

・誤差分散・誤差間共分散
  誤差分散を明示的に書くもの/書かないもの
   →lavvanは後者(勝手にやる)
    amosは前者
  誤差間共分散は書く
  誤差分散を等しくする場合はlavvanでも書く

・等値制約の影響
 標準化推定値が等値になるとは限らない
  →まず等値にならない

・修正係数
 誤差の共分散

・分散を1に固定
  f1~~1*f1
 因子負荷量を推定 NA*
 おなじにするequal

<HR>

■探索的因子分析(いわゆる因子分析)
・構成概念が定義することが難しい場合
  →名前を後からつける

・例:ビッグファイブ理論
  →おおよそ5つ

・信頼性と妥当性
  信頼性:同じ値が得られる
  妥当性:意図した構成概念を測定できているか

・探索的因子分析でわかること
  因子数がはじめわからない→決定する
  因子負荷量

・因子分析的考え方

・因子分析の言葉
  寄与
  回転

・寄与
 各因子が観測変数のすべての分散のうちの
 どれだけを説明するか
 各因子に注目
  →%で表現したり・・

・共通性
 寄与と混同しやすい
  共通性:観測変数に注目

Rによる探索的因子分析の手順
何回も行う
・固有値のスクリープロットを作成して
 (これ以外も見る)
 因子数を決定
    →変数削除も
・初期解と共通性を求める
・因子軸の回転
    →結果変換
・因子の解釈

因子分析における解の不定性
・因子分析:変数間の相関を利用して、
 変数を少数の因子にまとめる
・同じ相関行列から複数の解
  →解の不定性
・まずは、初期解をもとめ、説明しやすいものを

不定性をとめる
・二次のせきりつ(二次のもーめんと)
---------------------------------
 三次のせきりつ(三次のもーめんと)


<HR>

■Rでの操作

library(psych)
#    けっそく値を削除
bfi2<-na.omit(bfi[,1:25])
#    とりあえずnfactorを1、fmはml(最尤法)
fa(bfi2,nfactors=1,fm="ml")
#    スクリープロット
plot(fa(bfi2)$e.values,type='o')
#    大きく下がる手前を選ぶ。固有値1以上
#    因子数を5に,回転しない
fa(bfi2,nfactors=5,fm="ml",rotate="none")

#    回転させるライブラリ
library(GPArotation)
#    プロマックス回転
fa(bfi2,nfactors=5,fm="ml",rotate="promax")
#    バリマックス回転
fa(bfi2,nfactors=5,fm="ml",rotate="varimax")

<HR>
■結果の見方
・h2共通性
・u2独自性
  →回転しても同じ
・ML1,ML2・・因子

■削除する項目
・平均が極端な項目を削除
   →みんなが同じ回答
・因子負荷量(0.4未満)、共通性(0.3未満)を削除
・複数の因子から影響を受けている
・SEMのように残差を見て削除
・項目を削除すると、適切な因子数が変わることも!

<HR>

■項目削除のR操作

#1項目抜く
fa(bfi2[, -1], nfactors = 5, fm = "ml", roteto = "promax")

#2つ抜く
fa(bfi2[,c(-1,-24)], nfactors = 5, fm = "ml", roteto = "promax")

#1個ずつ抜いて、確認すること

<HR>

■バリマックス回転結果
・値が固まってきて、因子の内容わかる
   →単純構造

・一般にバリマックス回転よりも、プロマックス回転の方が明確になる

・なぜ、「バリマックス」というのか?
  因子負荷量の9ばりあんす(分散)をMAXに
  →最近あんまり使われなくなった
   因子と因子の間の相関を0に固定してるので

・プロマックス
  因子間の相関を許容している

  プロマックスの寄与、寄与率には2つの考えがあるが、
  そちらではなく、初期解のプロマックスの寄与、寄与率

<HR>

■Rの因子得点

round(fa(bfi2[,-1],nfactors=5,fm="ml",roteto="promax")$scores[1:10,],2)

#1:10つけないと、いっぱい出てくる
#確認的因子分析でもpredictを使ってできる

<HR>

■手順のまとめ
・因子数:固有値、解釈できるか
・因子負荷量/共通性で観測変数を減らす
・報告すべき結果:プロマックス回転の結果
・各因子が何を表しているか:因子の命名

<HR>

■信頼性

・構成概念を測定するための測定道具の性能を示す指標の1つ
  →もうひとつが妥当性

・信頼性:測定値の安定性

・測定値=真値+測定誤差
 →平均的にみれば、誤差0?
 →そこで、分散を求める

 信頼性=真値の分散/測定値の分散

 信頼性が高い
   誤差の分散0に近い=測定が安定
   真値の分散=測定値の分散→信頼性1

 信頼性が低い
   信頼性の値は低くなる

 決定係数などと同じようなもの

・大問題
 でも、測定値は求められるが、
 真の値や誤差は求められない

 →別のテストを考える
   
 2つのテストとの相関:信頼性

・信頼性
  再検査信頼性:別の時期の、同一のテスト
  平行検査信頼性:別バージョン

・大問題
  2回求める・・・1回で
  折半信頼性→2個でなく4個に・・
    =α係数:すべての分け方の平均

  n 相関の合計
--------------------------
 n-1 項目数+相関の合計

・α係数の問題点
 同じように測定しているという仮定:
  むずかしい。
 →因子分析では、誤差は違うと仮定した

・因子分析の枠組みで信頼性を考える
  →ω係数

・Rでは、alphaで求められる
・α係数=内的整合性の指標
・他の信頼性とは、違う概念の指標
  →一番妥当なのは、再検査信頼性
・一致係数:評定者間の整合性の指標

■妥当性
・本当に測りたいものが、測れているか?
  →測定値の解釈に対する適切性

 信頼性が高く、妥当性が低いときがある

 適切性を保証するための証拠を提示する
  →一般化可能性の側面の証拠:信頼性
   妥当性を示す証拠のひとつが信頼性
  →外堀を埋めていく


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

NEC、パナは撤退したのに、なぜ富士通は生き残れたのか

2013-12-12 12:40:47 | ケータイ
時間がないので、あとでよむ(まだ読んでない)。


NEC、パナは撤退したのに、なぜ富士通は生き残れたのか
スマホシフトが成功した理由は東芝との事業統合にあった
http://itpro.nikkeibp.co.jp/article/Interview/20131205/522846/

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

主に性能テストに使うJMeterについて その2

2013-12-12 09:18:38 | 開発ネタ
JMeterの話のつづき。

主に性能テストに使うJMeter。以下の手順で行うが、

これについて


主に性能テストに使うJMeterについて その1
http://blog.goo.ne.jp/xmldtp/e/a3f92ea9bc3922a87b12c2db1e50c90e

で、スレッドグループ作成まで、

JMeter2.10の、HTTPプロキシサーバーでエラー
http://blog.goo.ne.jp/xmldtp/e/fd71e4bba088d695f3d2aaf45b75289b

で「自動で作成」ルートを書きました。

今回は、「手動で作成ルート」以下を書きます。
なお、今回はバージョン2.7を使っています。




■手順4:HTTPリクエスト設定
(テスト計画の下にある)スレッドグループを右クリックし、
  追加→サンプラー→HTTPリクエスト



を選択すると、HTTPリクエスト画面になります。

ここで、アクセスする
サーバー名、ポート番号、メソッド、パス(URL中、サーバー名を抜いた部分)
を追加ないしは選択します。

また、引数を送る場合は、「リクエストで送るパラメータ」の追加ボタンを
クリックします。名前と値の欄があらわれます。
そこで、名前をダブルクリックして引数名を、
値をダブルクリックして値を入れます。

これを、送りたいリクエスト分繰り返します
(同じリクエストは省略可能。理屈は後述)

なお、HTTPリクエストを右クリックして、削除を選択すると、削除されます。



■手順5:リスナーの追加

リクエストをいくら作成して実行しても、送ったかどうかは
分かりません。それを確認するには、
リスナーやアサーションを追加する必要があります。

スレッドグループを右クリックして
追加→リスナー→結果を表で表示

を選択します。

な画面になります。
このとき、ファイル名に出力ファイルのパスを入れておくと、
結果をファイル出力します。




■手順5-2:アサーションとリスナー追加

JUnitのように、ある値を取ったかどうかを確認するには、
アサーションを追加し、それを目視・ファイルでエビデンスを
残すには、リスナーを追加します。

スレッドグループを右クリックして
追加→アサーション→アサーション

出てきた画面で、

テストパターンの下にある
「追加」ボタンをクリックすると、入力できるようになるので
入力(ほかのところをクリックすると、入力が確定します)


そうしたら、このアサーション結果を確認するリスナーを作ります。

スレッドグループを右クリックして

追加→リスナー→アサーション結果

を選択すると、以下のような画面になるので


結果をファイルに出力したい場合は、「ファイル名」に設定
なお、このファイル名に、存在しないファイルを入力し、
Enterキーをクリックすると

と出るが、OKをクリックし、気にしなくて良い。
(ファイルが無ければ作成する)




■手順6:その他の要素の作成・編集

このほか、JMeterでは、
・クッキーを設定
・HTTPリクエストの初期値設定
・ヘッダーの設定
・カウンターの追加などが、

設定エレメントでできる。
これらはすべて、スレッドグループを右クリックし、

追加→設定エレメントから選択する。

詳しくは

3. 設定エレメント
http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/3/


また、スレッドグループの設定で、ループ回数などが指定でき、
何回も繰り返しリクエスト発行が出来るが、
その際、「このときには処理しない」のような条件がつけられる。
それを行うのが、「ロジックコントロール」で、
これらは全て、スレッドグループを右クリックし、

追加→ロジックコントローラー

で選択する。

詳しくは

4.ロジックコントローラ
http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/4/

を参照のこと。




■手順7:保存

スレッドグループにもどって、「スレッドプロパティ」に
ループ回数などを設定したら(例では、3回にしてある)、

「ファイル」→「テスト計画を保存」

で保存する。保存しないと実行できない。




■手順8:実行

スレッドグループを選択し

実行→開始
で地味に実行する・・・ので、結果は、リスナーをみないとわからない。
左のツリーから、結果を表で表示にすると、

アサーション結果は、

と表示される。なお、ファイル名をwk.txtとしているが、
実際に書き出されるのはxmlファイルなので、拡張子はtxtでなく
xmlのほうがいい




■手順8-2:バッチで実行

jmeter.bat -n -t "HTTP リクエスト.jmx" -l jmeter1.jtl

とコマンドラインから入力すると、

上記で作成、保存した"HTTP リクエスト.jmx"に基づき実行して、
ログをjmeter1.jtlに書き出す
("HTTP リクエスト.jmx"と""で囲っているのは途中にスペース
があるからで、テスト計画ファイルのファイル名の途中に
スペースが無ければ、""で囲む必要はない)

なお、結果ファイルの見方に注意

  failureがfalseとは、
  失敗が、偽→つまり、正常

  failureがtrueとは、
  失敗が真→つまり、問題あり

trueになったほうが、まずい。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

政府調達関連資料・パブリックコメントのありか

2013-12-11 15:44:28 | Weblog
政府調達関連資料

政府調達事例データベース
http://cyoutatujirei.e-gov.go.jp/Main?CID=GPB0101G01

調達計画書、提案依頼書など

パブリックコメント

・募集中

パブリックコメント:意見募集中案件一覧
http://search.e-gov.go.jp/servlet/Public


・結果公示

パブリックコメント:結果公示案件一覧
http://search.e-gov.go.jp/servlet/Public?ANKEN_TYPE=3



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

主に性能テストに使うJMeterについて その1

2013-12-11 12:42:09 | 開発ネタ
前に

JMeter2.10の、HTTPプロキシサーバーでエラー
http://blog.goo.ne.jp/xmldtp/e/fd71e4bba088d695f3d2aaf45b75289b

でJMeterについて書いたけど、そもそも、JMeterについては、

JMeterダウンロード→テスト実行までのメモ
http://blog.goo.ne.jp/xmldtp/e/27c395f87d78b5b186ab939e9a557fb6

に書いた程度で、書いている内容が古く、
(うそではないが)大事なことを書き落としているので、
今回、何回かに分けて、JMeterについて書いてみたいと思います。

まずは、JMeterの概要と、前に書いたところの手前、
2.10をダウンロードして、起動するまでの話。





■JMeterとは

 主に負荷分散・性能テストに使う(場合によっては、シナリオどおり
流れるかという結合テスト、機能テストや回帰テストにも使う)、
テストツールである。

 たとえば、検索-一覧表示を何回も繰り返しても、エラー画面を
表示しないかどうか確認するようなときに使う




■いきなりだけど・・・参考資料の注意

JMeterでググルと

●今から3分で jmeter の使い方を身に付ける (負荷テスト入門) - 主に言語
d.hatena.ne.jp/language_and_engineering/20081014/1223905380‎

●JMeterでWebアプリケーションのパフォーマンス測定を行う(1/4
codezine.jp/article/detail/336‎


●JMeter
http://www.techscore.com/tech/Java/ApacheJakarta/JMeter/index/


等がヒットする。これらを頭から読んでいくと、はじめのほうは、私が昔、「JMeterダウンロード→テスト実行までのメモ」に書いたのと同じやり方で、操作をいちいち作成していくやり方が書いてある。

     ★ ★ ★

そうではなく、ブラウザで、一度シナリオを操作し、それを保存したのち、
修正して、テストケースを作る方式

●JMeterメモ
http://muimi.com/j/jakarta/jmeter/

に、書かれている。

これらの主に、2とおりの方法が記載されている。




■2とおりの方法

 2とおりの方法の手順と、その違いは、以下のとおり。


 つまり、手作業で、HTTPリクエストを作成するか、
ブラウザを開いて行うかの違いである。

テスト計画は

(1)HTTPリクエスト
(2)リスナー・アサーション等
   →エビデンス取得
(3)その他の制御(ロジックコントロール等)

 が含まれる。特に(1)、(2)は、これらがないと、
 テストを行った意義がないので、必須といえる
 表示したものを確認するだけなら、(3)はない可能性がある

このうちの、(1)の作りかたが、HTTPリクエストとプロキシ設定で
違うというわけで、他は、同じ。



■前提

・Javaがインストールされていて、環境設定のPATHが設定されていること。
 (コマンドプロンプトからjavaとたたいて、
「使用方法:」とか、なにか出てくること)





■手順1.ダウンロード
まず、ダウンロードするため、以下のURL

Download Apache JMeter
http://jmeter.apache.org/download_jmeter.cgi


にいき、Binaryの、zipファイルをクリックして、ダウンロードする。
(ここでダウンロードできるのは、最新版。現在は2.10
 これでは問題がある。そのことについてと、過去の版のダウンロード
 については、前に書いた

ここで、注意したいのは、ダウンロードを開始すると

のように、30Mとか、それくらいの大きさになっているはず。
もし、0.9Mとかいったら、なんかおかしい。
上記のミラー先を変えてみてください。

ダウンロードしたら解凍します。
解凍した結果、LICENSEファイルが0KBなら、なんか、おかしい
ダウンロードに失敗していますので、他の解凍ソフトで解凍するべし





■手順2:起動

そんなこんなで解凍できたら、
解凍したフォルダをapache-jmeter-2.10とすると、
apache-jmeter-2.10\binフォルダを開いて

jmeter.batをダブルクリックする

な画面になる。




■手順3:スレッドグループを追加する

テスト計画を右クリック。

メニューから、追加>Threads(Users)>スレッドグループ

を選択。
左に「スレッドグループ」ができるので、そこをクリックすると、こんな画面に






このあと、ワークベンチにHTTPリクエストを追加しよう

として、前の話につづく。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ビッグデータは、社会的ネットワーク分析に使われてもいいと思う

2013-12-11 10:10:47 | AI・BigData
 社会的ネットワーク論(社会ネットワーク理論)という学問分野がある。

 社会的ネットワークというと、英語にすると、ソーシャルネットワークになってしまうが、「社会的ネットワーク論」は、別に、mixiの使い方やfacebookで出会い系サイトに誘導する方法を研究する学問では決してなく、(ただし、SNSを扱うことも当然ある)社会的な”つながり”を研究する学問である(Wikipediaの定義参照

 この分野の用語として、ウィーク・タイ(弱い紐帯)などが、よく知られている。そして、応用分野としては、SNSはもちろんのこと、人事や人間関係の解析など、幅広く用いられている。




 この学問分野では、グラフを多く用いる。
 って言っても、棒グラフとか、折れ線グラフのあれではなく、有向グラフ、無向グラフ、線でむすぶ、あれだ。ノードとエッジの世界(グラフ理論)
 これを、扱うために、行列を用いる。
 ノードn1,n2,n3・・・を、行と、列に並べてn1とn3に線が引かれていたら、n1行n3列の値を1にする・・・
 1万人を解析する場合、1万行X1万列=1億セルの値を持つことになる。まさにビッグデータ!!
 ただし、1万人のうち、知り合いは・・・100人くらい?なので、100*100=1万くらいは値が入るけど、のこり、9900万は、0っていう、とてもスカスカ(スパースという言い方をする)な行列を操作する。
 もちろん、この操作は、単純にかけたら遅くなるので、スパース行列を操作する手法がいろいろ考えられている。




 ということで、社会的ネットワーク論、人間関係を扱うので、幅広い分野なわけで、グラフ→行列を扱うとなると、ビッグデータなんだけど、いまいち、回帰やSVMやクラスタリングや決定木のような多変量解析に比べて、まだまだ人気ないような気がする・・・

 ということで、このブログでも、社会ネットワーク論を今後、取り上げていくと思います。みなさんも、注目ですぞ!

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JMeter2.10の、HTTPプロキシサーバーでエラー

2013-12-10 16:40:53 | 開発ネタ
今、JMeter2.10と戯れていたら、

なエラーになった。

ログ見ろって書いてあるけど、めんどっちいので、
オプション→LogViewerにチェックを入れて、

下にログを出させるようにした。こんなかんじ。

そしたら出てきた、こんなエラーログ。
2013/12/10 14:20:06 WARN  - jmeter.protocol.http.proxy.ProxyControl: Could not open/read key store E:\いろいろ\apache-jmeter-2.10\bin\proxyserver.jks (指定されたファイルが見つかりません。) 
2013/12/10 14:20:06 INFO  - jmeter.protocol.http.proxy.ProxyControl: Creating Proxy CA in E:\いろいろ\apache-jmeter-2.10\bin\proxyserver.jks 
2013/12/10 14:20:06 ERROR - jmeter.protocol.http.proxy.ProxyControl: Could not initialise key store java.io.IOException: Cannot run program "keytool" (in directory "E:\いろいろ\apache-jmeter-2.10\bin"): CreateProcess error=2, Žw’肳‚ꂽƒtƒ@ƒ
	at java.lang.ProcessBuilder.start(Unknown Source)
	at org.apache.jorphan.exec.SystemCommand.run(SystemCommand.java:142)
	at org.apache.jorphan.exec.SystemCommand.run(SystemCommand.java:125)
	at org.apache.jorphan.exec.KeyToolUtils.genkeypair(KeyToolUtils.java:123)


この下は、省略している。つまり、もっと出てくる。
どうも原因は、keytoolのあたりらしい。
ってことは、httpsあたりか・・・

・・・たしかにそこ、昔と変わってるよね!




■対策:ふるいバージョンに

ということで、2.10よりも前のバージョンに戻すことにした。

http://jmeter.apache.org/download_jmeter.cgi


で、普段は、水色のあたりをクリックするけど、
もっとスクロールして、
「Apache JMeter archives... 」をクリック

「binaries/」をクリック

まあ「apache-jmeter-2.7.zip」でもクリックして、
ダウンロード、解凍してみてください。




■実際にやってみる:その前に準備

で、起動。するんだけど、その前に、ブラウザ側の設定しときます。
IEでやります。
オプション→インターネットオプションを選択すると


ダイアログが出るので、

「接続」タブの「LANの設定」をクリック

ローカルエリアネットワークの
プロキシサーバーの
上のチェックボックスチェック
その下のアドレスに、127.0.0.1とかいれて、
ポートは、あとで設定するJMeterのHTTPプロキシのポート番号。

なお、念をいれて、「詳細設定」をクリックし

○で囲ったところを「消して」ローカルアドレスでも
プロキシ使用するようにする。
(けど、あとで書くけど、これでも、うまく行かないときがあるので、
 プライベートのIPアドレスを直接打っている)

で、全部OKして、ブラウザを再立ち上げすると、

なにも表示できない(インターネットに繋がらない)
これは、まだJMeterでプロキシの設定をしていないから。
表示できないのが正しい。
もし、どっかのサイトにいけたら、おかしいので、
プロキシがちゃんと入っているか、チェック




■実際にやってみる:JMeter設定

では、JMeterを起動する

起動できたら、テスト計画を右クリックして

追加→Threads(Users)→スレッドグループ

でスレッドグループを作ったら、

ワークベンチを右クリック

追加→Non-Testエレメント→HTTPプロキシサーバ

を選択。

ポート番号は、IEに設定したポート番号、
コントローラーは、先ほど作ったスレッドグループを選択し、
グループごとにセパレータをいれたほうがわかりやすいので、そうした

そして、「開始」

これで、開始する




■実行!と、その結果

で、ブラウザで、自分の試験するところを指定するんだけど、
このとき、
  127.0.0.1のようなループバック、
  localhostのようなローカル指定だと、
うまくプロキシに入らないことがあるので、
プライベートアドレス(192.168.1.198とか)で打って見ると

JMeterに呼び出した結果が入ってくる。





■おまけのなぞ・・・

で、なんか題名がはいっていない、4つのものがあるんだけど・・
見てみると・・・

urs.microsoft.com??
この謎は、また今度かく。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

リモート先でジョブが終わったときの戻り値と標準出力内容がほしいとき

2013-12-10 12:20:01 | トピックス
以前、

リモート先でジョブが終わったかどうかを確認する
http://blog.goo.ne.jp/xmldtp/e/cbbdbadaae9c2c8eea8ed8b2ed3cb0dd

というのを書いた。

ここでは、結局
(1)SSHでバックグランドでジョブ起動
(2)動いているかどうか確認
(3)終了したら、データを取ってくる。
ということだった。

ここで、(1)について考えてみると、
たとえば、192.168.1.180から

  ssh 192.168.1.192 /tmp/xmldtp 1234 &

を起動したとすると、
SSHコマンド実行の返り値は、/tmp/xmldtpを起動したことに対する
返り値であって、このxmldtp内で実行した処理に対する返り値は
わからない。

これらのxmldtp内部の処理の返り値と標準出力を受け取りたいというのが、
今日のお題




■お題
192.168.1.180から

  ssh 192.168.1.192 /tmp/xmldtp 1234 &

を起動すると、192.168.1.192では、以下の/tmp/xmldtp内の
シェルが実行する。

touch "/tmp/job.txt"
/tmp/xmldtp1 > "/tmp/kekka1_.txt"
/tmp/xmldtp2 > "/tmp/kekka2_.txt"
cat "/tmp/kekka1_.txt" "/tmp/kekka2_.txt" > "/tmp/kekka.txt"
rm "/tmp/job.txt" "/tmp/kekka1_.txt" "/tmp/kekka2_.txt"


ここで、/tmp/xmldtp1、/tmp/xmldtp2の2つの処理を行っているが、
この返り値を取得し、それも/tmp/kekka$1.txtに入れて、返してほしい。




■2つの方法

返り値は、$?で取得できる。
このとき、大きく2つの方法が考えられる

(1)戻り値($?)の値もファイルにechoで書き出し、
  標準出力と共に、1つのファイルに書き出した後
  不要な作業ファイルを削除する
   →すべてファイルに書き出す作戦

(2)バッククウォートで実行し、標準出力を変数に入れる
  戻り値($?)の値も、何かの変数に入れる
  これら変数をファイルに書き出す
   →すべて、変数に入れる作戦

これらの中間で、一部ファイル、一部変数に入れる形も考えられる。
が、今回はこの両極端を考える。

以下、スクリプトを記述する




■方法1:すべてファイルに書き出す作戦

こんなかんじ

touch "/tmp/job$1.txt"
/tmp/xmldtp1 > "/tmp/kekka1_$1.txt"
echo $? > "/tmp/kekka3_$1.txt"
/tmp/xmldtp2 > "/tmp/kekka2_$1.txt"
echo $? > "/tmp/kekka4_$1.txt"
cat "/tmp/kekka3_$1.txt" "/tmp/kekka1_$1.txt" "/tmp/kekka4_$1.txt" "/tmp/kekka2_$1.txt" > "/tmp/kekka$1.txt"
rm "/tmp/job$1.txt" "/tmp/kekka1_$1.txt" "/tmp/kekka2_$1.txt""/tmp/kekka3_$1.txt" "/tmp/kekka4_$1.txt"


まあ、説明は要らないだろう




■方法2:すべて変数に入れる作戦

こんなかんじ

touch "/tmp/job$1.txt"
job1out=`/tmp/xmldtp1`
job1ret=$?
job2out=`/tmp/xmldtp2`
job2ret=$?
echo $job1ret $job1out $job2ret $job2out > "/tmp/kekka$1.txt"
rm "/tmp/job$1.txt"

バッククウォートで実行(`/tmp/xmldtp1`)しているので、変数(job1out)
には、標準出力値が入る。
$?も変数にいれ、それらをまとめて書き出している。

はじめに作業ファイルを作るので(起動していることを示すため)
これを削除しているが、標準出力と戻り値に関しては、変数にいれ、
これらをファイル書き出ししていない。




■比較

ファイルを使わないので、削除し忘れの無い、方法2のほうが、
一見良いように見える。
しかし、方法2は変数に入れるため、大量のデータが変数領域に
はいることになる。これが、よいかどうか・・・

が問題になる。変数にいれるのがよろしくないとなると、
方法1になる。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

OpenStack Networking

2013-12-10 09:15:04 | ネットワーク
OSSユーザーのための勉強会 <OSS X Users Meeting> #5 OpenStack
にいってきた。その内容をメモメモ




Openstack NII 19階
会場70人くらい?

SCSKのホームページに資料載るよ!

OpenStackNetworking(Neutron)解説
 VA Linuxの人

VA
・たち位置的には、開発
・Neutronの歴史
  OpenStackのコアプロジェクトの1つ
  プロジェクト間は疎結合(HTTP通信)
   以前は、Nova-Network
    →Quantum
   Folsom(ふぉろさむ)
    →Quantum
  Grizzly,
  Havana,
   Quantumから、neutronへ
  IceHousr
   いまここ

・API
  リソースを定義し、REST APIでリソースの操作を行う

・コアリソース
  ネットワーク:L2スイッチ
  サブネット:IPアドレスブロック
  ポート:L2スイッチのポート

・ネットワークAPI
  実行例は、ドキュメント見ればわかるので省略
・ポートAPI
・CLI neutronコマンド
  だいたいAPIでできることは、できる
  Python-Neutronクライアント
  実行例はあとでみてね
  デバックオプション

・VMの起動

・その他のリソース
  仮想ルーター(l3エクステンション)
  仮想ロードバランサーなど

・仮想ルーター
  floating IPサポート

・Newtrin-server
  APIとDBの処理を行う、
  Pythonでできている

・プラグイン
  コアプラグイン:
  サービスプラグイン:サービスタイプごとにプラグイン
  継承して作る→コンフィグレーションファイルで指定
・エクステンション:リソースにAPI追加
  コマンドで確認できる

・サーバーと実行系の処理の流れ
  典型的な処理の流れ

仮想L2の実装
・Netronサーバー、プラグイン、DB、ネットワークサービス、コントローラー
・インターフェースドライバー
・エージェント:プラグイン固有処理(プラグインによってはないものも)

処理の流れ
・環境の準備
(1)プラグインの選択
(2)ホストの実行環境設定
・テナント用ネットワーク作成
・ポートの作成
・インターフェースの作成
  VMを起動するNovaComputeがインターフェースを作る
・インターフェースの検知
・ポート情報の取得
・インターフェースの設定

OpenVSwitchプラグイン、リナックスブリッジプラグイン
  →ML2プラグイン
ML2
 ・タイプドライバ
 ・メカニズムドライバ
   →個別のプラグインを作成する代わりに
    ML2のメカニズムドライバで実装できる

L3拡張機能の実装

その他のサービス実装
・基本的な構造はL3と同じ

情報源
・Launchpad
・Wiki

-----------------------

OpenStack導入事例 Yahoo

・自己紹介

・導入経緯
  2008~09年 VMの提供までだいぶ時間かかる
  2010から11年 VMを管理しきれなくなる
   WebUIによる機能を作成
    リソースを事前取得
    ロードバランサーの設定LBaaS)
    Ciscoスイッチのコンフィグ変更
  2012年
   技術的に古く、パフォーマンスよくない
   好きなとき好きなだけVM作れない
   コンポーネント依存
   社内で爆速がキャッチフレーズに

  →OpenStack検証
   ベーシックな機能は問題なし
   Jenkinsなどとも連携
   Qemuを手を加えた
   ConfigDrive
   構成のポイント:安定して稼動できる

・導入システム構成 VM Net、Volume、nova config、
    RPCタイムアウト
  Quantum config,config_drive

・Openstackの開発と管理
  社内Github,Jenkinsを利用して,Upstreamと独自コードのマージ
  Jenkinsによる自動テスト

・苦労したところ
  amqpの高い稼働率

・今後
  Nutronまわりの検証
  (べあめたるあらため)Ironic導入:物理サーバーの利点は大きい
  Nova-cellsの検証、実装
  社内ニーズに応じた実装

Q&A

ZEN→KVM
構成管理は内製
cloudstackとOpenstack
 明確にこれっていうのはなくて、手が進んだのがOpenstack
APIが結構かわるよね。
 進化している証拠。ポジティブにとらえる
バージョンアップは?
 資源があるので、はばなとぐりずりー両方つかって

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする