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

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

「Python+JQuery+ajaxで文字化け」ではまったこと

2015-03-20 16:52:26 | トピックス
コレではまったら、サイトを見ると、
beforeSend: function(xhr){
xhr.overrideMimeType("text/html;charset=UTF-8");
},
しろと書いてある。

確かに結果的に言うと、
「このまま書くと」文字化けが消えたように「見える」
だけど、そこに落とし穴がある。
そんなことをつらつらと・・・




■お題

以下のHTMLがある。
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>
<script type="text/javascript">
function senddata()
{
	$.ajax({
		url: "sample2.py",
  		type: 'post',
		data:{
			data:$("#pdata").val(),
		},
  		success: function(mydata){
  			alert(mydata);
			$("#pdata").val(mydata);
		},
		error: function(XMLHttpRequest, textStatus, errorThrown){
			alert("error !!!");
		}
	});

}
</script>
</HEAD>
<BODY>
<form>
	<INPUT type=text name="pdata" id="pdata"/>
	<BUTTON onclick="senddata();return false;">実行</BUTTON>
</form>
</body>
</html>

上記のプログラムはShift-JISで書かれて、保存されている。
これを受けるPythonのプログラム(sample2.py)は、こんなかんじ。

#!/usr/bin/python
# coding: cp932

import os.path
import cgi
import os
import sys

data="";
form = cgi.FieldStorage()
if form.has_key("data"):
data = form["data"].value

print "Content-Type: text/plain;charset=Shift-JIS\n"
print data

これも、Shift-JISで書いて、保存してある。

これを、実行すると、文字化けする。




■xhr.overrideMimeTypeのcharset=Shift-JIS ”ではない”

ここで、全部Shift-JISなのだから
beforeSend: function(xhr){
xhr.overrideMimeType("text/html;charset=Shift-JIS");
},
と書くと、失敗する(変わらない)。

理由はブラウザは、引数を、UTF-8で送る。
ほかはShift-JISで書かれていても。
それで、文字化けしているのだから、
ここはShift-JISでなく,UTF-8で送っているよ!と送らねばならない。
なので、
beforeSend: function(xhr){
xhr.overrideMimeType("text/html;charset=UTF-8");
},
と書かなければならない。
まとめると、こんなかんじ。

<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>
<script type="text/javascript">
function senddata()
{
$.ajax({
url: "sample2.py",
type: 'post',
data:{
data:$("#pdata").val(),
},
beforeSend: function(xhr){
xhr.overrideMimeType("text/html;charset=UTF-8");
},

success: function(mydata){
alert(mydata);
$("#pdata").val(mydata);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert("error !!!");
}
});

}
</script>
</HEAD>
<BODY>
<form>
<INPUT type=text name="pdata" id="pdata"/>
<BUTTON onclick="senddata();return false;">実行</BUTTON>
</form>
</body>
</html>





■これで、一件落着・・・じゃない!

たしかに、上のsample2.pyは、正常に動作する.
だけど、最後の、

print data



print "文字列"

とかに書き換えると、文字化けする。

・・・そう、
xhr.overrideMimeType("text/html;charset=UTF-8");
って書いちゃうと、UTF-8になってしまって、いくら、python側で

print "Content-Type: text/plain;charset=Shift-JIS\n"

って送っても、だめみたい・・・

ということは、python側をすべてUTF-8にする、つまり

#!/usr/bin/python
# coding: utf-8

import os.path
import cgi
import os
import sys

data="";
form = cgi.FieldStorage()
if form.has_key("data"):
data = form["data"].value

print "Content-Type: text/plain;charset=utf-8\n"
print data

と書いて、UTF-8で保存すれば
送られてきたデータをそのまま返しても、また
print "文字列"
と書いても、文字化けしない。


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

Rでグラフを書く書き方をまとめたページ

2015-03-20 06:09:01 | AI・BigData

A Compendium of Clean Graphs in R
http://shinyapps.org/apps/RGraphCompendium/index.php


そこからリンクをクリックすると、いろんなグラフがでてくる
Show R Codeをチェックすると、Chromeだと、
Rのソースコードが出てくる
(IEだと出てこなかった)

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

東日本大震災のとき、支援してくれたバヌアツが大変なことになっているのに・・・

2015-03-19 06:11:50 | Weblog
マスコミは、バヌアツの被害は報道しても


バヌアツ政府は東日本大震災後、当時の首相、大統領が真っ先に支援を表明してくれたほか、「日本のマグロはえ縄漁業関係者と関係地域の復興に役立てて欲しい」と、マグロはえ縄漁船船主グループなどの民間団体(33名)から、日本鰹鮪漁業協同組合へ、約500万円の義援金が寄せられました。

バヌアツの平均月収は約1万円とも言われていることからも、義援金に込められた熱い思いが伝わってきます。


ということは、報道していない・・・

【参考サイト】

【みんな、動こう!】東日本大震災で日本を助けてくれた「バヌアツ」が今、大変なことになっています。
http://tabi-labo.com/100170/vanuatu-hurricane/

(上記太字は上記サイトより引用)

なお、そのサイトに出ているYAHOOの募金とは

【寄付が2倍】バヌアツ サイクロン被害緊急支援募金
http://donation.yahoo.co.jp/detail/1630015/


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

PHPの大幅速度カイゼンはPHP7・・・それ以前にバージョンアップは・・・

2015-03-18 12:40:37 | PHP
昨日、PHPの性能改善を行うために、どこに手を入れたらよいか、
わかるには、Zend Serverを使えば・・・という話を書いた
が、
もちろん、PHP処理系それ自体が速くなれば、もっと簡単に?
性能改善できるわけだ・・・

・・・だが、この路線はちょっと難しそうに思える。




PHPの速度カイゼンとしては、facebookの
HHVMがある。
これに対向した、PHPNG→PHP7は、確かに
(HHVMほどではないにしても)速いのかもしれない。

【参考サイト】

1.PHP7 (phpng) をインストールして爆速体験をしてみる。
  http://qiita.com/y_irabu/items/1bbd8961c9a530cbb8eb

2. PHP7はなぜ速いのか(zval編)
  http://d.hatena.ne.jp/hnw/20141207

しかし、PHP7が、いますぐ出てくるわけではない。
なので、7が出るから速くなるという線は実務上、今は使えない




zend serverをいれても、速くなるそうだ。
というのは、あらかじめコンパイルしておき、
requireの依存関係などが、すぐに読み込めるようになっている
・・・などなどの努力をしているかららしい




しかし、それどころか、実際は、バージョンアップだけでも
難しいかもしれない。

今、サポートされているPHPのバージョンは
5.4,5.5,5.6となる。
また、さっきの参考サイト2をみても、
5.3から5.4に上げると、2割増しぐらい、
速くなりそうだ。

ってことは、5.3以前のバージョンを使っているひとは
5.4以降に移行したほうがいいことになる。
なんたって、EOLなのだから・・・5.3以前は。
(RedHatはサポートしてれるかもしれないけど)




しかし、

PHP Install Statistics
http://blog.ircmaxell.com/2014/12/php-install-statistics.html

に、安全なPHPのバージョンを利用しているのは25.94%しかない。

つまり、PHPの場合、あまりバージョンアップをする人は、あまりいない。
(脆弱性の問題があっても)

ってことからすると、ましてや性能向上のために、バージョンアップ
なんていう人は、いなさそうだね・・・

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

PHPの性能改善が必要な場合

2015-03-17 07:06:36 | PHP
PHPで開発した場合、
システムの入出力はあっているのだが、
パフォーマンスに問題がある
(処理時間が長い、画面遷移が遅いなど)
ということがある。




請負で開発している場合は、なんとかしないといけない。

こういうときに、

PHPの動作状況(各関数の経過時間や利用メモリ量)が分かる「コードトラッキング」の方法
http://blog.goo.ne.jp/XMLDTP/e/80f7182984c441f955038fa99cfa1aa6

で書いたzend-serverは、大変便利で、

Z-Rayを使うと、1つの画面遷移に対して、
PHP,データベース、I/O、ネットワークの処理時間を
返してくれるから、大雑把にどこに問題があるかわかり、

ネットワーク以外の問題であれば、さらに、
コードトラッキングを使って、どの関数が
時間がかかっているのかが分かる。




同じことをログに処理時間を出力させると、
ログに書き出す時間が問題になったり、
見にくかったりと、いろいろたいへん
その辺をすっきりグラフ化してくれるので、
開発者同士、お客さんに見せるのにもいい。

Zend Server 7 Small Business
(PKG-1184)が年間ライセンス30万なので
デバッガ1人月よりかは安い。
となってくると、請負の場合、コレだけの仕事するんなら、
zend server買ったほうが安いか?っていう話になる。




しかし、最近はSESがおおい。SESの場合、
「パフォーマンス悪いですねえ。」
「そーですねえ・・・」
で済んでしまう場合もあるし、さらに、ログを入れて解析する
仕事をする人を雇えば、プログラマを派遣している会社は
儲かるという側面がある。

また、開発と品質保証部門が分かれている場合、
「パフォーマンスの向上は品質保証部門がやることなので、
 開発がやってはいけない」と、怒られるケースがある
(少なくとも私は怒られた経験がある)
→品質保証部門が行わなかった場合、悪いコードが入ったままとなる




つまり、SESの場合、請負にくらべ、(Zend serverのような
高生産性ツールを使わないほうが儲かるから)クオリティも
生産性も下がっていく可能性は高い。
日本はそちらの方向に向かっている。

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

データサイエンス・データマイニングで使う技術範囲

2015-03-14 06:43:27 | AI・BigData
こんなかんじかなあ

全体
 仮説導出~予測まで
  記述統計
    (連続量:1つ)平均、中央値、箱ひげ図
    (連続量:2つ)相関、散布図
    (離散値:カテゴリー)クロス集計
  予測
    (連続量)回帰、重回帰、非線形回帰
    (生起確率)ロジスティック回帰
    (カテゴリ含む)数量化1類
  判別(起きるか起きないか)
    判別分析
    SVM
  分類(カテゴライズ)
    階層型クラスタリング
    非階層型クラスタリング
  ルール発見
    決定木
    アソシエーション分析:アプリオリ
  次数削減・可視化
    主成分分析
    多次元尺度構成法
    コレポン(数量化3類)
  要因分析
    (探索的)因子分析

 仮説検証
  検定
   (2つの値の平均)t検定
   (クロス表)カイ2乗検定 
   (3つ以上)分散分析・F検定
  グラフィカルモデリング
    パス解析
    (確証的)因子分析
    共分散構造分析(SEM)

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

元請けのほうが下請けよりも人月単価が高い正当な理由

2015-03-06 20:25:38 | Weblog
久しぶりのブログで、衝撃的な議論をしてみたいと思う
日本のソフト開発は、多重下請け構造になっている。

そして、必ず

「元請けのほうが下請けよりも人月単価が高い」
(NTTデータは1人月200万だけど、末端のプログラマは1人月65万とか)

こういうと、元請はぼろもうけしているように感じるかもしれない
ところが、元請大手NTTデータがべらぼうに儲けているという感じ
はしない。それどころか、赤字になることがある(人月単価高いのに!)
それはなぜか・・・

具体的な事例で考えよう




■事例

今A社(元請)B社(下請け)C社(下請け)の2社があったとする。

A社は、コンポーネントαを2つのモジュールX,Yに分割し、
   XをB社に
   YをC社に
下請けさせたとする。ただし、X、Yとも完成しないリスクは20%
あるものとし、完成しなかった場合には、一銭も受け取れないもの
とする。

こうすると、A社のリスクは、1-XもYも完成するリスク
となるので、1-(1-0.2)*(1-0.2)=0.36
36%となる。




■下請けのほうが元請よりも人月単価が高い正等な理由

A,B,C社とも1人月60万は会社運用上必要だとすると、
B社、C社の人月単価をsとすると

   (1-0.2)s=60
          s=75万円
以上なら、会社運用経費をまかなえる。

ところが元請の人月単価をtとすると
   (1-0.32)t=60
           t=88万円
と、13万円高くしないと、割に合わない。

つまり、下請けが失敗するリスクの集積が元請のリスクになるので、
元請のリスクは相当高くなる。そのリスクに見合う期待値が人月単価
となるので、リスクの高い元請の人月単価は高くなる。




■ぼろもうけするには?・・・元請けになることではない

下請け中小企業は、元請になれば、より上流に行けば、もうかる
と思っている。確かにその場合、人月単価は上がるがリスクが増える。
下請け中小企業の経済基盤で、元請なみのリスクをとれば、それは
ギャンブルで、倒産する可能性大だ。




■では、どうやったら、もうかるか? その1

ここで、もしB社は、リスク10%しかないのに、
そのことを、A社は知らず、リスク20%と思って契約したとする
つまり人月単価
   (1-0.1)u=60
          u=66万円
でいいのに、75万円、A社が払ってくれたとする。そうすると、
9万円の儲け

つまり、失敗リスクを下げれば、下請けでも儲かる。
失敗リスクを下げるには、技術力をあげるなどが、考えられること
である




■では、どうやったら、もうかるか? その2

もし、ノーリスクだったら、どうだろう?
失敗しても成功してもお金がもらえる。そうSESだ。

SESの場合、60万より高い値段で契約できれば、その分儲かる。
だから、安い単価(でも赤字にはならない単価)で、大規模に
受注すると、規模が大きくなるほどぼろもうけできる。




今は、SESでぼろもうけの時代だね!

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