ハセテツがPython、というかDjangoを選んだ理由

2011-04-29
このエントリーをはてなブックマークに追加

思いっきり個人的な見解です。無知であるが故の部分も大きいと思います。

「そんなことねーぞ、こういうのもあるぞ」

っていうのがあると、教えて欲しかったりしてます。

正直、国内でのRuby人気は気になるのです。Rubyというか、RubyonRailsですよね。

2年位前は「Rubyすげえ!Railsすげえ!」だったんです。その前はPHPばっかり書いてました。

でも、RoR使うようになってフルスタックのフレームワークの便利さに魅了され、RoR一本でいくつもりでした。

まぁPHPの前はC#(ASP.NET)ばっかり書いてた頃もあったのですが。ちなみにその前はaspでした。

そんななか、Googleが導入し、GAEでも使えるPythonにも興味がありました。もともといろんな言語を使えるようになりたいとも思っていたので、新規プロジェクトの際にちと手を出してみたんですね。Python+Djangoに。

当時、Apacheにpassengerを組み合わせてRoRを走らせていたハセテツには一定時間ごとにインスタンスが終了されてしまうのが「なんだかなー」でした。アクセス数の多いサイトであれば気にならないのでしょうが、少ないサイトのだったのでリクエスト時に多少のタイムラグがあることが気になってしまっていました。

Python+Django、mod_wsgiはそれを解決してくれました。まぁmongrelでもよかったのかもしれませんが、当時は開発が止まっていた時期だったと。今はthinとかもあるから問題ないのかもしれませんね。

CakePHPやsymfonyは選択肢に入りませんでした。ステップ数が多くてリクエストごとのレスポンスが遅すぎました。APCとか使えばそれなりらしいのですが、そもそもPHPは手軽に書けるのが魅力だと思っていたので、フレームワークのお作法に従うのは違うなーと。

実際、Pythonがよかったのではなく、Djangoがよかったのかもしれません。それくらいDjangoはよくできていました。RoRのfind_by_sqlに匹敵するものがないのは残念ですが。

Djangoだとurlディスパッチャーは自分で設定というか、urlとコントローラを紐付けてやらないといけません。Railsのようにcontrollerが自動的にurlと紐付かれたりはしません。が、それが自由自在で便利でした。

フレームワークを経由しないでApacheから直接レスポンスを返す静的コンテンツを置くディレクトリの指定も簡単です。フレームワークから「ここに置け」って指定されることもありません。

Railsはループ処理のときは一件ごとにsqlを発行しましたが、結合して一気に取ってきてくれます。ちゃんとO/Rマッパーが外部結合してくれます。

Djangoも、syncdbした後にmodelの設計を変えると面倒くさいという不満はあります。まぁそれは事前にきちんと設計しておけばいいだけの話なのですが。

モジュールの多さという点では、PythonもRubyもPHPも必要なものはそろっているという印象です。「RubyにはあるけどPythonにはない」っていうのはなかったかと。

あ、PHP版のMeCabバインディングはなかったか。

あ、あとRoRってひとつのプロジェクトで複数のWebアプリって作れませんよね。

実際こうやって書き出してみると、たいした理由じゃないですね。ちっさな「うーん、なんだかなー」の積み重ねだったりしてますね。

でも、そういう小さな積み重ねって技術者にとっては大事だったりすると思います。不満だった点も、当時はそうだっただけで今はとっくに改善されているのかもしれません。

結局、Python書けるようになってもGAEのアプリは一本も書いてません。それでも、Python+Djangoを選択してよかったと思っています。

うまい感じにオチをつけられないのですが、いろいろ試した結果、もうしばらくはPython+Djangoでいってみようと思います。

メインの言語を持った上で、いろいろな言語、環境のプロジェクトがこなせるように勉強だけは欠かさずにしないといけませんね。

技術者は死ぬまで追いかけ続けるんだろうな。下りのエスカレーターを上っていくように。

立ち止まったらどんどん落ちていくんでしょうね。

ClickOnce配布時のエラー

2009-07-28
このエントリーをはてなブックマークに追加

URLDownloadToCacheFile failed with HRESULT ‘-2146697202’

ClickOnceで配布したアプリケーションを起動しようとすると起動にコケました。エラーログを辿ると上記のログが。エラーからググったんですけど、どうにもわかんなかったんですね。

で、思い当たったのが第三者機関が証明書を発行していないオレオレ証明書。

これがビンゴだったわけですよ。社内でしか使わないアプリケーションなので証明書にコストも掛けられず、かといってプレーンな状態でデータのやり取りもしたくなく、オレオレ証明書を使っていたわけですが、それがよくなかった様子。証明書のインポートをしたら無事に起動しました。

 

Tags:

C#でXMLからLINQtoXMLで必要な情報だけ抜き出してDataGridViewにバインドする

2009-07-09
このエントリーをはてなブックマークに追加

最近RubyonRailsのエントリーばっかりだったのですが、別にそれしかやっていないわけではありません。プロジェクトも並行で同時進行、言語もまちまち。なんとか混乱しないでこなしていますが、堤防決壊寸前ですな。

XDocument doc = XDocument.Parse(XMLの形をした文字列);
var query = from n in doc.Descendants(“user”)
        select new {
            id = n.Element(“id”).Value,
            user_name = n.Element(“user_name”).Value,
            telephone = n.Element(“telephone”).Value
        };

データグリッド.DataSource = query.ToList();

XMLファイルをXDocumentに読み込む場合は

XDocument.Load(ファイルパス);

となります。

LINQtoXMLで必要なノードだけを抽出して(今回は「user」というノードだけを抜き出しています)、データグリッドにバインドしています。

バインドするのはLINQの結果のままの状態ではなく、IListに明示的に変換してあげなければいけません。変換してやら無いとIEnumerableのままなのかな?バインドしてもデータグリッドに何も表示されませんでした。

コレを解決するのに半日悩んだ。。。

Tags: , ,

C#で桁埋め(ゼロパディング)

2008-11-07
このエントリーをはてなブックマークに追加

Console.WriteLine( String.Format(“{0:D2}”,3) );

出力結果は「03」です。Dで10進数と指定、2で2桁にパディング、最後の3が「これをパディングしてくださ」っていう感じです。

Console.WriteLine(String.Format(“{0,4}”,3) );

だと、「   3」と出力されます。4桁にスペースパディングです。固定長出力時に利用します。でも固定長っていまでも使うのかなぁ。

Tags:

C#で四捨五入

2008-09-08
このエントリーをはてなブックマークに追加

2.0以降専用です。

Math.Round(対象数字,0,MidpointRounding.AwayFromZero);

二つ目の引数は、「第何位まで求めるか」です。上記例だと0なので整数値にしてくれます。1.1では四捨五入はなかったので、自作した覚えがあります。

便利になったもんですね。

三つ目の引数を「MidpointRounding.ToEven」にすると丸めてくれます。これは普通に「Math.Round」でもいいと思うので、四捨五入用と思ってもいいのかもしれません。

Tags:

C#で文字列が整数値か判定する

2008-02-11
このエントリーをはてなブックマークに追加

Parseしてcatchするかどうかの判定でもいいのですが、いまいちスマートじゃないなぁと。

そしたら2.0からTryParseなるメソッドが追加されていました。
いやー、不勉強ここにいたるという感じですな。

int intReturn;
Console.WriteLine (int.TryParse(“hoge”,out intReturn));

上記例だとFalseが出力されます。

第一引数”hoge”が整数か否かを判定して、「ちげーよ」っていう結果が出てるんですよね。整数だったらTrueが返ります。boolです。

また、Falseの場合にはintReturnに「0(ゼロ)」がセットされます。Falseの0なんですけど、何に使うのかがわかりませんでした。せめて初期値を指定できて、Falseならその値が返ってくれればいいのですが、一行目を

int intReturn = 1234;

としておいても、0が返ります。

 

Tags:

C#で日付をフォーマット指定して文字列にする

2008-01-05
このエントリーをはてなブックマークに追加

String.Format(“{0:yyyyMMdd}”,DateTime.Now)

まぁこれだけの話なのですが、しょっちゅう書き方忘れるので備忘録に。

Tags:

C#でコンボボックスのSelectedIndexを値から指定する

2008-01-04
このエントリーをはてなブックマークに追加

string[] strMonth = { “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “10”, “11”, “12”,};
cmbMonth.Items.AddRange(strMonth);
cmbMonth.SelectedIndex = cmbMonth.FindString(DateTime.Now.Month.ToString());

 

例として、cmbMonthというコンボボックスに1月から12月までの値を入れています。そして、今月をSelectedIndexに指定しています。FindStringメソッドで当月が格納されているitemindexを求めて、それをselectedindexに指定しているだけ。

これって2.0からでしょうね。確か1.1のころはこんな便利なメソッドはなかった。

Tags:

C#でPDF

2007-12-31
このエントリーをはてなブックマークに追加

最近帳票出力が必要なWindowsアプリケーションの開発をやっています。帳票はPDF。ActiveReportとかを買うお金はありません。ということで、iText.NET

 

フリーなのにとってもよくできているのですが、いまいち思ったとおりに動いてくれない。まぁこれは僕のセンスの問題なのですが。。。

 

もうちょっとしたらTipsをまとめて書けそう。忘れないうちに書かないと。。。

Tags: , ,

DataGridViewのフォントサイズの変更

2007-07-06
このエントリーをはてなブックマークに追加

プロパティウィンドウにフォントサイズなる項目がなかったような気がして不安になったのですが、コードから指定したら簡単にできてしまいました。

DataGridViewの名称.Font = new Font(DataGridViewの名称.Font.Name, 22);

これでデフォルトフォントのままでサイズだけが22になります。
でも、カラムのheightも合わせて指定しないと悲しいことになります。勝手に拡大してくれたら幸せになれたのに。。。

Tags: