EclipseのPyDevでtensorflowをインポートした時にコンパイルエラーとなる問題と解決法の覚書
Mac OS X上のEclipseからでもPyDevプラグインを用いてTensorFlowを利用可能ですが、
TensorFlowをimportする時に
unsolved import:tensorflow
という構文エラーがpythonエディタ上で発生します。
これがtensorflowモジュールが動的に生成されている(うろ覚え)為に
構文上、tensorflowモジュールを解決できない為のようです。
当座の解決方法としては以下のとおり。
import tensorflow # @UnresolvedImport
UnresolvedImportアノテーションをコメント中で付与する事で、PyDevエディタ上でのエラーが無視されます。
現在TensorFlowが提供されていないWindows環境で、とりあえずTensorFlowのコードをエラーなく写経してみたい時にも便利かもしれません。
「java.util.regex.PatternSyntaxException: Dangling meta character」でハマった
Javaの正規表現で時間を浪費した腹いせに数年ぶりに覚え書き。
String fileName= "regex.html";
// [ファイル名].[拡張子]として判別したい
Pattern pattern = Pattern.compile("+\\.*");// 正規表現にマッチしているかを判断すると…
pattern.matcher(fileName).matches();
上記のコードを実行すると、
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
と出て怒られます。
理由としては、Pattern (Java Platform SE 6)にある(Java7の日本語版にはなかった…)
Perl では、表現 *a などの不正なマッチ構文や表現 abc] などのぶら下がり括弧を許容しており、それらをリテラルとみなす。このクラスでもぶら下がり括弧は受け入れるが、+、?、* などのぶら下がりメタキャラクタは許容せず、それらが見つかった場合は PatternSyntaxException をスローする
つまりJavaでは、ぶら下がりメタキャラクタの前に.を付与して、
Pattern pattern = Pattern.compile(".+\\.*");
と書かなければいけません、という事のようで。
多角形の面積の求め方についての覚え書き
座標が交差していない多角形の面積は、
http://ja.wikipedia.org/wiki/%E5%A4%9A%E8%A7%92%E5%BD%A2#.E9.9D.A2.E7.A9.8D.E5.85.AC.E5.BC.8F
を元にすると、単位などを細かく考えなければ
(
(x1 - y1 + 1) * (x1 + y1 + 1)+ (x2 - y2 + 1) * (x2 + y2 + 1)
...
+ (xn - yn + 1) * (xn + yn + 1)
) / 2
した値で求められる、と。
インポートしたプロジェクトをXCodeのシミュレーターで動かす際の覚え書き
お勉強の為にXCodeにインポートしたプロジェクトを、iPhoneシミュレーターで動かそうとしたけど動かない…なんて事がよくあると思います。
Xcode cannot run using the selected device.
に「あれっ」となって戸惑う事など、今でも偶にあります。
で、これは実行用のシミュレーターまたはデバイスの設定が実行環境と合致していない、というエラーになります。ただ、どこを直せばいいんだっけ、という事になりがち。
そんな時、
「scheme」ボタンをクリックしましょう。
シミュレーターまたはデバイスの一覧が出てきますので、実施したいものを選択すれば問題なくRun出来るようになります。
Struts1 EOFを受けて、その後釜や如何に。
Struts1は諸方面から「まだ使ってるの?」「もう使いたくねえ」と言われつつも何だかんだ日本のエンプラJava界隈では生き残って来た訳ですが、ついに出ましたね。
http://struts.apache.org/struts1eol-press.html
2013-04-05 - The Apache Struts Project Team would like to inform you that the Struts 1.x web framework has reached its end of life and is no longer officially supported.
現場的な実感で言うと、Struts1.xは、当分は保守案件中心に生き残り続けると思います。2008年に開発が実質的に停止して以後も、Struts1.xで開発されたアプリケーション資産は多数ありますし、Struts1.xとの組み合わせを前提にしたF/W標準みたいなものも著名なもの含めてあっちこっちで聞きますので、すぐに捨て去る事はないでしょう。
また、Struts2含めて後継と目される類のF/WはStruts1.xと(少なくともクラスレベルでの)互換性がほぼないので、移行と言っても習得やベストプラクティスの構築には相応の時間と工数を要するように思います。
なので、「Struts1の次は何を使えばいいんだ?」の答えは「アーキテクトが頭絞って考えて決めろ」というベタな結論になっちゃうんではないかと。
また、そもそも論で言えば、フロントエンドのF/Wを移行するのに「開発終了したから」では費用対効果的に弱いように思います。エンジニアにとってはともかく、少なくともプロダクトオーナーの皆様にとって。なので、「Struts1に致命的なセキュリティ問題が」となるまでは、Struts1からの移行に急き立てられるまで多少の時間がありそうです。...アルトイイナァ
今後は地道に後継F/Wにキャッチアップしつつ、その中でどれを使うのかを精査していくのが重要になるのではないでしょうか。
そこでF/Wスタックを変えるなら、フロントエンド層の作りやすさだけではなく、トランザクション回りと「Requestでは帯に短し、Sessionでは襷に長し」な問題を解決出来るF/Wスタックを組んでおくと生産性が大分向上するんじゃないかな…その辺も個人的な課題かなと思ってます。
FizzBuzzの解法はどちらがより正しいか
FizzBuzz wikipedia:Fizz_Buzz の解法って、手続き型言語においては二種類解法があると思うんですよね。
ざっくりJavaScriptで書くとこんな感じ。
一つ目が、
/** * どんどん文字を足して行くタイプ */ function fizzbuzz(count){ var value = ""; if(count % 3 == 0){ value += "Fizz"; } if(count % 5 == 0){ value += "Buzz"; } if(value.length ==0){ value = String(count); } return value; }
二つ目が、
/** * どんどんreturnしていくタイプ */ function fizzbuzz(count){ if(count % 15 == 0){ return "FizzBuzz"; } if(count % 3 == 0){ return "Fizz"; } if(count % 5 == 0){ return "Buzz"; } return String(count); }
個人的には、例外的な処理、早めに終わる処理を前の方で弾いてネストを浅くするという点で
後者の方がFizzBuzzの解法としては妥当かなと思ってます。
DBアクセスのような複雑な処理が介在する場合だと、最初に処理してreturnとは行かない事も多いですしね。