SJC-* 値上げ
価格改定のお知らせ
元々高いと言われていた試験ですが、値上げです。今日のメールで知りました。
さすがに5万もするSJC-D(SCJ-D)は値上げしないようですね。
とりあえず、SJC-WSは取りたいのでチケットだけ先に買っておかないと。
買うのはいつものNECラーニング株式会社で。
| 固定リンク | コメント (0) | トラックバック (0)
価格改定のお知らせ
元々高いと言われていた試験ですが、値上げです。今日のメールで知りました。
さすがに5万もするSJC-D(SCJ-D)は値上げしないようですね。
とりあえず、SJC-WSは取りたいのでチケットだけ先に買っておかないと。
買うのはいつものNECラーニング株式会社で。
| 固定リンク | コメント (0) | トラックバック (0)
ももモバイル: XMLマスター:ベーシック
先週のSJC-WCから続けて。2008/11/02に。
同じPrometricセンターてなところで受験してきました。
土日の受験なのでいつもいくところの受付のお姉さんがいっしょです。仕組みというか、「これを読んで待っていてください」なのも覚えました。同じ時間に受験する人(内容はそれぞれ)の中でも自分の名字があいうえお順で遅いからなのか、いつも最後に呼ばれるのも覚えました(^^;
XMLマスターの試験は、より実践的な、、みたいなことを謳い文句にしていたみたいですが、やはりこういう試験はしょうがないのか、意味不明な問題が多いですね。
知識を問うものはいいのですが、どう考えても普通はやらないような、XML/XSLT/XML Schemaの書き方があったり。
で40問で80%で合格というこの手の試験では正解率が高いのですが、82%でなんとか合格。
今回は最後の1秒まで粘ってました。
スコアレポートを見るとXSLTが弱いようです。逆にDOM/SAX系はなかなか。
XML処理システム構築技術はまぁいいとしても、XML要素技術の活用はもう少しがんばりたかったところです。
というわけで最近はなんか試験ばっかりですが、まぁ基本はできたので、さくっと次に。
まぁ一番取ってないといけないのが取れてないのでダメダメなのですが(>_<;)
まぁ、それはこつこつと。
| 固定リンク | コメント (0) | トラックバック (0)
TeratermとUnix系サーバがあればいいんですけど。
今日、Excelの資料で sort | uniq しようと思ったら今のPCにはCygwinがありませんでした。
そういえば、DOSにもsortがあったような気はしましたが、どちらかといとuniq したい。
しょうがないのでeclipse でJavaで簡単なのを作りました。
Collectionは簡単でいいですね。
| 固定リンク | コメント (0) | トラックバック (0)
メモ。
GNU 劣等一般公衆利用許諾契約書 - GNU プロジェクト - フリーソフトウェア財団 (FSF)
lesser って劣等でいいのか。。。
LGPLのライブラリを使うだけならソースの公開はしなくてもいいのね。クレジットは必要。
javaは静的にリンクというか動的に実行?だけど、配布物にjarを含めても特に問題はないらしい。
要するにソース公開してしまったほうが面倒がなくてよさそうですね。
| 固定リンク | コメント (0) | トラックバック (0)
普段のWebアプリケーションのビジネスロジックではほとんど使うことはないですが、ライブラリ的なものはツールを作っていると、ReflectionやJavaBeans(java.beans.*)は便利ですね。
まぁすでにcommonsとかに基本的なものはあるのでしょうが、ちょっと作りこむ場合には自分で作った方がいいですからね。
J2SE5からのGenericsも型を今まで以上に安全に使えますし。
java.util.MapとJavaBeansへの相互変換はいろいろ便利に使えます。
使いすぎは、パフォーマンスにも影響しますが、便利に使えばOKです。
/**
* BeanInfo/PropertyDescriptor取得サンプル
*
*/
private void sample() throws IntrospectionException {
BeanInfo beanInfo = Introspector.getBeanInfo(SampleBean.class);
PropertyDescriptor[] pdArray = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pdArray) {
Method readMethod = pd.getReadMethod();
Method writeMethod = pd.getWriteMethod();
// method invoke or etc.
}
}
| 固定リンク | コメント (0) | トラックバック (0)
高いお金払って受けてきました。IT系のベンダー試験とかは受験料が高いです。
まぁベーシックぐらいは、2,3日ぐらい勉強して取れるぐらいじゃないとアカンのですが...
結果レポートを見ると、全体で90%でXML文書の作成が80%、XSLT、XPathが80%。
XSLT/XPath関係は個人的には苦手なのでまぁしょうがないですね。XML文書の作成が80%ってのはよくわかりませんが、、、
コツ的には簡単なものだけさくさく解いていき、このXML文書をXSLTで変換したらどうなるか?とかいうのは飛ばしてやっていった方がいいですね。まぁ試験一般のやり方ですが、面倒なのは後でじっくり時間を書けたほうがいいです。
で、 始めてじゃないのでPrometric IDカードとかいうのが必要なのですが(といっても紛失の場合はその場で発行)
紛失していたのでその場で発行してもらおうと思っていたんですが、受付の時にそれを言うのを忘れてて。
そしたら、受け付けのお姉さんが受験のための、メモ用紙が入ったやつををくれないわけですよ。
放置です。
実際には、IDカードをメモ用紙といっしょに渡していたので、IDカードがない自分は、そのメモ用紙がセットされていないので、渡し忘れたとかなのですが、
本人確認の時に、IDカードチェックして欲しかったです。
まぁ今度からはしっかり、prometricのIDカードは財布にしまっておくことにします。
また次回も出すの忘れるかもしれないけど、、、あとは人が多かったからかも。
平日に行ければ行った方がいいかな。
------------
XMLマスター自体は
「実践的なSEの育成」に役立つこと
とか書いていますが、やっぱり引っ掛け問題みたいなのがあります。これは試験という以上しょうがないですね。
XML文書と、XLSTもしくはDTD/XML Schemaでどれがエラーになるか?
って、ブラウザで開いてしまえばいいじゃん? とか思ってしまいます。
もちろん、基礎として覚えることは必要ですけどね。
というわけで、XML マスター:プロフェッショナルもさくっと取りたいけど、その前に一休みして、SJC-WCを意味もなく取ってみます。今日も隣の人がSJC-WCの勉強してました(^^;
| 固定リンク | コメント (0) | トラックバック (0)
C/C++のポインタの機能--変数の場所(アドレス) - builder by ZDNet Japan(From:スラッシュドット・ジャパン | ZDNetのポインタ解説記事で勘違い)
はてなブックマーク - C/C++のポインタの機能--参照渡し - builder by ZDNet Japan
コメントでももちろん指摘されてるけど,,,
#include <stdio.h>int main( void ) {
int *n;
scanf( "%d", n ); /* *nの値をキーボードなどから入力(Enterで終了) */
printf( "%d\n", *n ); /* nの値を出力 */
return 0;
}
あと本文では既に直っているようですが、
int *p;
*p = 5;
なんてのも。
変数名については、まぁどうでもいいところですが、(編集の結果かもしれませんが)、1ページ目で
int n = 5;とかなってるのに次のページでは、int *n;とかなっててわかりにくい。
この沖林正紀って方は本もいろいろ書いているようですが、この人の本は絶対に買いたくないなぁ。
というわけで思わず該当のコードを実行してしまった今日この頃。
結果:Segmentation fault (core dumped)
とりあえず、沖林さんは前橋さんのC言語ポインタ完全制覇 とかでも読んだ方がよいのではないだろうか。
はてなブックマークでも本人らしき人が宣伝されてましたが(^^;
| 固定リンク | コメント (1) | トラックバック (0)
なんか、ブログのカテゴリーを整理したい今日この頃ですが、もういったん作ってしまったものはどうにもならないですね。そもそも「パソコン・インターネット」って範囲が大きすぎる。ココログにも早く タグ が導入されないですかね。
というわけで果てしなく今更ですが、SJC-WCのために本を買ってみました。11章ぐらいあるのですが9章ぐらいはほとんど知っている内容でした。ということでこの本の価値は2割りぐらい(^^;(4,000円ぐらいなので800円ぐらい)
知らないのは、ほとんど使わないListener系とセキュリティ関係は全然知らないので参考になりましたが、Servlet/JSP/Taglibとかはほとんど普通に知っている内容でした。
まぁ試験のためのもの、という感じですね。
今はEclipse/NetBeansとかJavadocのドキュメントもあるのに、HttpServlet#doGet の引数は何と何か?ってそんなのわかりますけど、Eclipseがいつも自動生成/自動補完してくれてるから細かく覚えてないってさ。
本はほとんど1日で読み終わりましたとさ。
Sunとプロメトリック社の利益と、自分のためにがんばります。
| 固定リンク | コメント (0) | トラックバック (0)
例:testStrの値が"test"か判定するA: testStr.equals("test");
B: "test".equals(testStr);
String mailAddress = "";
String str = getXyz(); // 文字列の取得
if (str.equals("")) {
mailAddress = "デフォルトのアドレス";
}
if (str == null || str.equals("")) {
// 何らかの処理
}
こんなようなコードがありました。詳細は忘れましたが。
最初のif 文で str.equals() しているので次の strがnullの時は(str==null)は実行されないので意味がありません。
2つめのif文はたぶん、その辺のコピーペーストで何も考えていないので(str == null)というチェックコードが出てくるんでしょうけれど。
そもそも、Stringに限らず何らかのオブジェクトを戻り値で返す場合に、nullが絶対に返ってこないのにnullの場合の処理をしていたりして、良く分かりません。なんでもかんでもチェックすればいいということではないのです。
nullになり得る場合とそうでない場合は区別して欲しいです。
| 固定リンク | コメント (0) | トラックバック (0)
昔の人は配列が好きです。
なのでこんなコードが出てきます。(java)
Hashtable[] hashArray = new Hashtable[50];
そもそもHashtableじゃなくてほとんどの場合はjava.util.Mapで済むし、Genericsなら、
final List<Map<String, String>> mapList = new ArrayList<Map<String, String>();
1.4までなら、
final List mapList = new ArrayList();
mapList.add(map);
かな。配列の要素数も平気で17とか21とか書いてあって足りなくなったら、25とか30に増やすという。
そういえば、
Hashtable hWk;
Vector vWk;
のhWk とかいう気持ち悪い変数名を良く見ますね。
きっと昔は、「変数名も5文字まで!」とかいう時代の名残なのでしょう。
どっかに書いてあったけど、IllegalArgumentException とかいう長いクラスはそういう人には耐えられないのかもしれない。
| 固定リンク | コメント (0) | トラックバック (0)
というわけいつもとは違うプログラムなお話。
JDK1.4からは正規表現も使えるようになっていますが、String#splitで簡単にCSVなどをカンマで分割できます。
「aaa,bbb,ccc,,ddd」
があった場合
final String source = "aaa,bbb,ccc,,ddd";
final String[] resultArray = source.split(",");
で"aaa", "bbb", "ccc", "", "ddd"
に分割されます。
ただ、これだと文字列の最後に区切り文字が連続していた場合、"aaa,bbb,ccc,ddd,,,"の場合に最後の空文字ができないのでその場合は、
String#split(String regex, int limit)のlimit引数に -1を指定することで文字列の最後の文字も空として取得できるようになります。
ちょっとした文字列を変更する場合は簡単にできます。
ただし、"のエスケープとか、ダブルコーテーションでエスケープして、中身のデータに改行のある場合は自分で パースする処理を入れないとダメですが。
最近の担当するシステムはやっと1.4になってきましたが、JDK6とかはまだまだですね。
せめて、5のGenericsは使いたいところですが。
| 固定リンク | コメント (0) | トラックバック (0)
4 回 基礎セミナ J2SE 5.0 マイグレーションシリーズ - ジェネリクスに申し込みして行ってきました。
19時からだったので仕事を早めに終えて会場の秋葉原に。スーツだけだと外はやっぱり寒い。
講師は櫻庭 祐一さん。Java in the Boxの人。
Java 2 Platform, Standard Edition v1.4 の新機能とかJ2SE 5.0 虎の穴 Java2 SE v5.0 Tiger の新機能とかJava SE 6 じゃじゃ馬ならしは参考になります。
仕事では、JDK1.2とかもうサポートも完全に終了しているバージョンなので、Genericsは使っていないのですが、自分で作っているツールとかはJDK6で作っているので、自分で、Genericsなクラスとかは作っているので知っていましたが、こういうのあんまり参加したことないので参加してきました。
人数は前の方だったので、後ろの方わかりませんが、50人ぐらいかな?
内容的には理解して使っている立場なので、再認識とか再確認という感じでしたが、なかなか良かったと思います。質問もいくつか出てましたし。
List#remove(Object) は、Generics対応ではないというか、List内部にあれば削除、なければ何もしないというだけなので、Generics対応になっていないとかは知らなかったです。というか気にしたことなかった。だいたいその型以外でList#remove()とか呼びませんしね。
GenericsとあわせてAutoBoxing/Unboxingの話も出てました。
java.lang.Intergerとか、java.lang.Double とかってあまり使わないので、Autoboxingもあまり使わないのですが、いちいちnew Integer()とか、Integer#intValue()とか書かなくていいので楽ですね。
話の中でも少し出ていましたが、配列がGenerics対応していません。
Genericsって結局はコンパイラレベルのもので、内部的にはキャストを自動的に行っているだけで、Listの内部データはやはりObject[]なのです。String[]になったり、Ingeger[]とかではない。
で、配列はコンパイル時点(バイトコード?)で型付けしないといけない(表現あってるかな)のでGenericsではできないんですね。
前にソート関連でちょっとクラスを作っていた時に
T[] List#toArray(T[] a)というメソッドがあるんですが、戻り値はT[]だからいいとして、引数のT[] aを作らないといけないんですが、これがうまく作れなくて悩みました。ちょっとごにょごにょして解決しましたけど。
会場では、櫻庭さんが時折Dukeのウクレレを弾いたりしてて、なかなかよかったです。
会場では手を挙げませんでしたけど、J2SE 5.0 虎の穴 Java2 SE v5.0 Tiger の新機能見てConcurrency Utilitiesはツールで使ったりしてます。簡単にできてちょっと拍子抜けしてしまうぐらい。
仕事でも、最新でもまだ1.4レベルですが、言語仕様も変わる5/6が使えるのはいつかなぁ...
| 固定リンク | コメント (0) | トラックバック (0)
VPNの接続が、1行で、案外あっさりと解決してしまってちょっと拍子抜けです。
HPやDell製品では、W-SIMがないし、今はBitwarpもやっていないので、まずWX310KなどでBluetoothを起動しないといけないので、それが面倒ですね。W-ZERO3のように常時接続できる環境があればいいのですけどね。
CFカード型の通信カードを挿せばいいかもしれませんが、CFは地図データやmp3などで埋まっているので、それをはずすわけにも行かず、無線で通信できるBluetoothがやはり一番なのです。
というわけで、nSctipやネットワークの操作が得意そうなので、その部分は、MortScriptではできなさそうだし、nScriptは、モバイルデバイス固有の機能もそんなにあるわけでもないので、この組合せが一番ですね。
ももモバイル: Windows Mobile5.0で自動巡回
のExecMultiとMTAP、KeyInputEmulatorも、タップとかが必要なのでこれはこれで重要ですしね。
というわけで、暇があったらまた何か作ってみよう。
スクリプトは、簡単でいいですね。
| 固定リンク | コメント (0) | トラックバック (0)
ももモバイル: MortScript(1)とか書いたけど(2)ぐらいで終わりそうな。
前にももモバイル: Windows Mobile5.0で自動巡回でVPN接続も自動化(スクリプトとかで自動化)できればと思っていましたが、2,3時間の格闘の末できました。
コードはこれだけ。(個々のモバイルデバイスの設定にもよるかと思いますが)
Connect("社内ネットワーク設定")
これでダイヤルアップをはじめ、その後VPNにも接続に行きます。
最初、接続の設定では、「既定のインターネット設定」「既定の社内ネットワーク設定」となっているのですが、既定を「規定」と書いていてずっとできませんでした(; ;)
これに、nScriptで作った、WOLのスクリプトをSleep等で少し時間をあけつつ実行させればボタン1つで接続、VPN接続、WOLスクリプトの実行、切断までできました。
ただ、このConnect関数は、EasyDial等とは違って、MortScript自体が終了すると、接続自体も自動的に終了してしまうようです。
自動切断してしまうので、スクリプトなどで動かす場合にはちょうどいいのですが、そのまま接続を残しておき、ブラウザなどを使いたい場合は別の方法(EasyDial等)をしたほうがいいですね。
これに、後はタイマーソフトでも組み合わせればなんでもできそうですね。
また、PPC版は、/wait=秒数 という引数をMortScript実行の際の引数に指定すれば、それだけ待機するようです。
SDカードやCFカードは起動直後は、数秒待たないと使用できない場合もありますし、スタンバイから復帰した場合は、Bluetoothの起動にも時間かかっているようですので、これも大変有用ですね。
というわけで、今までは、まず最初に接続してから、スクリプトを起動して、、とやっていたのをボタン1つで、もしくはランチャーやタイマー等でもできるようになったので非常に便利です。
こういうのは、プログラムにやらせるのが一番です。
他にも、Mortscriptがいくつか公開されているようですので、いろいろと便利になりそうです。
| 固定リンク | コメント (0) | トラックバック (0)
useWill.com(ウィルコムを使え!): Willcomを応援するファンサイトですで
「rlTodayとMortScriptが非常に気になる」
と書かれていたので私も気になって入れてみました。ScriptはnScriptは便利で使っていましたが、こちらも同じように結構簡単にできそう。
マニュアルとかはMortScript まとめ&マニュアル要訳で和訳があります。
変数とか制御文はまぁどの言語でも同じなのでいいとして、見ていくと
レジストリの読み書きや、ダイアログ、プロセス起動、クリップボード、電源関係、ZIPアーカイブ、キーストロークを送るとかPocketPCデバイス固有な機能もあって便利そうです。
これをnScriptや、他のスクリプト、MTAP、ExecMulti、KeyInputEmulator、タイマーソフトと連動すればなんでもできそうです。
| 固定リンク | コメント (0) | トラックバック (0)
普通、for loopは増やしていくので、逆に減らしていくのはあまり作らないのですが、
普通に間違えて無限loop になりました。
まぁJavaScriptで、Firefoxでは、「スクリプトが反応しないから停止してもよい?」と聞いてきてくれたのですが、その後、デバッグでalertを入れたら、alert出まくりで終了しなくなりました(>_<;)
for (var i = max; i <= 0; i--) {
// some code
}
だいたい、i <= 0までは書くのですが、i--をいつものようにi++としてしまいます。
単純すぎて、最初は気づかないのです。
| 固定リンク | コメント (0) | トラックバック (0)
Struts自体は有名ですし、ある程度デファクトスタンダートな感じがあって、仕組みとかだいたいは知ってましたが、実際にプロジェクト等ではやったことがなくて、最近使い始めました。
設定ファイルでいろいろできるのはいいですし、プログラムすることも減るのでいいところもあると思いますが、仕組みがちょっとわかりにくいですね。
後は今回初めてだったので、基本的なところはわかるものの、ちょっとこういう場合どうしたらいいのか?っていうTipst的なものがないというか少し検索したぐらいでは見つかりませんでした(^^;
例えば、Validatorを使って、エラーになった場合にアクションが呼ばれなかったりとか。
とりあえずこれで慣れていけばいろいろとTips的なことも覚えられるのかも。
KB(knowledge base)としてどこかに蓄積されているべきだと思いますけど、FrontPage - EclipseWikiみたいのがあるといいな。
| 固定リンク | コメント (0) | トラックバック (0)
工程を管理している人がいるんですけど、勝手に決めた工程で(こちらには意見も何もなく)
遅れないようにやってくださいね、と嫌味っぽく言われ。
彼らは、機械のように勝手にコードが出来上がると思ってるに違いない。
昨日から今日にかけて、うまく動かないなぁといろいろやってたら他人の初歩的なバグでしたよ。その時間はどうしたら...
というかテスト完了したものしかソースは更新しないとか言ってながら初歩的なバグって。テストしてないじゃん。
だいたいからして、なんで
assertを入れていいかどうか聞かないといけないんだよ。何をどうしたら
assert禁止になるのかね。
Javaなのに
「それ#ifdefでできるの?」とか。Javaに#ifdef というかプリプロセッサは存在していませんよ。
なんでコードを書けない人がコード規約とか決めるんでしょうね。
そんなんだからももモバイル: 変数のネーミングルールが出てくるのです。
| 固定リンク | コメント (0) | トラックバック (0)
これも同じやつですが、
最初は、
boolean isXxx() {
return a || b || c;
}
ぐらいだったのが、いろいろ条件が加わって
boolean isXxx() {
return
(a || b) && ((c || d && ee) || (ff || gg && hh));
}
みたいになってました。
もちろん変数は意味のあるものですが、これじゃあ、どの時に true になるのかわからないよ。
絶対に、1つの return文で済ませたかったのでしょうね。。。
追記:
ももモバイル: コードの修正の仕方と同じようなものですね。
| 固定リンク | コメント (0) | トラックバック (0)
変数のスコープは最小限に、というのは余計なことを考えなくていいためにも、必要だと思うのですが、昔の人?の特にCとかやってきた人のコードには、
Map<String, String> map = ...;
Iterator<Map.Entry<String, String>> ite = map.entrySet().iterator();
Map.Entry<String, String> entry = null;
String key = "";
String value = "";
while (ite.hasNext()) {
entry = ite.next();
key = entry.getKey();
value = entry.getValue();
// 何らかの処理
}
これだけのコードなら、それほど分かりにくいわけでもないのですが、もっとひどいのになると、すべてメソッドの先頭で変数を宣言しているものもあったりして。。。
たぶん、変数を何回も宣言すると、その分メモリが消費されて...とか考えているのかもしれませんが、そんなのはコンパイラに任せておけばいいし、気にするほどではないはず。
ループの中でしか使わないものは、ループの中で宣言しましょう。
デフォルト(?)のCheckStyleだと、警告が出て怒られますが、こんな書き方は使います。
final String result;
{
StringBuilder sb = new StringBuilder();
sb.append("xxx");
sb.append("yyy");
// なんらかの処理
result = new String(sb);
}
メソッドにしてもいいのですが、メソッドにするまでもない場合で途中の変数(上だとsb)はいらないので、注目する変数が、result だけですし、間違えて同じ変数(sb)を使いまわしてしまうこともなくなります。
これもJava魂 に載ってたやつだったかな..?
| 固定リンク | コメント (0) | トラックバック (0)
J2SE5.0(余談ですが、6は Java SE 6だったかな)からGenericsが導入されて、これまで、CollectionFrameworkのキャストしまくりのコードから、もう一歩、型付けされた(?) コードが書けるようになっていいですね。
J2SE 5.0 Tiger 虎の穴 Genericsにあるようにクラスファイル的には同じだとしても、コンパイル時に静的なチェックができるのはいいことです。
コンパイラがコンパイル時にチェックできるものは、なるべくチェックさせた方がいいですからね。
宣言時に<String, String> とか書くのが少し面倒ですが、Eclipseで保管もできるので楽チンです。
Autoboxing/Auto-Unboxingも少し気をつけないといけませんが、簡単にできますし、ぐるぐるまわすだけのfor文は拡張for文で、
List<String> list = ...;
for (String s : list) {
// 処理
}
と書けて楽ですね。
...とはいえ、担当のプロジェクトは5.0なんてまだまだ使えない古いバージョンなので、Generics、拡張for文が使えるのが自作のツールとかだけですが。。
| 固定リンク | コメント (0) | トラックバック (0)
JavaでCollection Frameworkの Mapを使う場合、各要素(キーと値)にアクセスする場合、普通は
Map<String, String> m = ...;
for (Iterator<Map.Entry<String, String>> ite = m.entrySet().iterator(); ite.hasNext(); ) {
Map.Entry<String, String> entry = ite.next();
String key = entry.getKey();
String value = entry.getValue();
// キーと値を処理
}
としますが、なぜかkeySet() を使って、
Map<String, String> m = ...;
for (Iterator<String> ite = m.keySet().iterator(); ite.hasNext(); ) {
String key = ite.next();
String value = m.get(key);
// キーと値を処理
}
とkeySet() のキーで Map#get(Object key)を使っているコードがあるのですが、どうやらkeySet()ばっかりで、entrySet() を知らないようです。javadocに載っているのに、読めないのでしょうかね。
また、ListなどをIteratorでまわしている時に、Iterator#remove() ではなく、List#remove(Object)を使っているコードもあって危ないです。
List<String> l = ...;
for (Iterator<String> ite = l.iterator(); ite.hasNext(); ) {
String s = ite.next();
if (s.equals("何かの文字列")) {
// 通常は、ite.remove()
l.remove(s);
break;
}
}
こんなコード書いていたら、ConcurrentModificationExceptionがIterator#next()の呼び出し時にthrow されますが、breakしているため、たまたま発生しません。
こんなコードが納品したコードにうじゃうじゃ紛れ込んでいます。
でも、
「コードは動けばいい」「動いているものは修正してはいけない」ということでそのままです。
まぁわからなくはないですけど、こんな品質のコードを書いている おじさんにはなりたくないです。
まだまだ、汚いソースは宝? のようにあります。
| 固定リンク | コメント (0) | トラックバック (0)
会社で、false のことをしきりに「ふぁるす」と言っている人がいるのですが...
「ふぉるす」とか「ふぉーるす」ですよね。うちは「ふぉるす」ですけど。
parseやfalseをどう読みますか? - ラウンジ
を見ると結構いるようで...3割ぐらい?
他にもアルファベットをそのまま?読んでる人とかいて、なんか気持ち悪いというか、false ぐらい読めないの?って思ってしまいます。
Altも「あると」って言っている人もいますが、まぁこちらはまだ許せる範囲かな?
とはいえ、HTMLとかで以前は使っていた「align」とかも、心の中では「ありぐん」とか読んでましたけどね(笑)
まぁ昔の話です。
| 固定リンク | コメント (2) | トラックバック (0)
ネットバンキングの“穴”が不正引き出しを許した - ワークスタイル - nikkei BPnet
参考になります。対応中のプロジェクトはSQL InjectionもCommand InjectionもXSSもなんでもありだからなぁ..
| 固定リンク | コメント (0) | トラックバック (0)
高木浩光@自宅の日記 - WASF Times版「サニタイズ言うな!」
この記事で言われているようなサニタイズとかではないのですが、某プロジェクトのコードで、処理をしている途中で、
String data;
if (xxx) {
data = " "
} else {
data = "xxx<br>yyy"
}
みたいなのが随所に埋め込まれているんですが、、、(^^;
なので、htmlEsacpe() みたいなメソッドを使ってやろうにも途中で下手にタグが入っているおかげで、うまくいかないという。
| 固定リンク | コメント (0) | トラックバック (0)
掲示板spam対策
htaccessでアクセス制限
表示用と書き込み用のCGIのファイル名を分けて、表示用は、アクセスOK、書き込み用は日本のみ、としていたのですが、Spammerは一向にやめないので、とりあえず、表示用も、jpドメイン、comドメイン、あとは、bbtec.netとk、il24.netのみにしました。
comも許可したのは、google.comとか、googlebot.comからもあるため。search.live.comとかも。
登録用CGIは、comドメインは許可していませんが、これらのホストは検索エンジンなので、収集しているだけで、POSTリクエストは絶対に送ってこないから、登録用CGIにはいらないのですね。
これでよくわからない、.co, .de, .brとかどこの国かわからないような、ボット経由のアクセスを拒否できます。
正引きできないホストもたぶん拒否できるのかな。
あとは、それ以外の、comですが、こちらはとりあえず、ブラックリスト方式で、様子を見て、あまり多くなさそうであれば、googlebot.comとかだけ許可するように使用かと思います。
| 固定リンク | コメント (0) | トラックバック (0)
文字列定数もそうですが、マジックナンバーを平気で使っている今のプロジェクト。
5,7,10,14,19
ソースを追っていけば、それが何を意味しているかはわかりますが、何かの最大値とかであることもあり、変更されたらすべてを書き換えなければならないし、意味がわかりづいらい
ということは、ずーーーっと前から言われているのにできていない、同じプロジェクトのメンバー(同じ会社)の人のモラル?というかレベルの低さには閉口します。
メールで言っても無駄なので諦めてますけどね。早くやめないとなぁ。。
| 固定リンク | コメント (0) | トラックバック (0)
今のプロジェクトのソースがすでに破綻しそうになっているのですが、
最初は、よかったものの、フラグとか対象が増えていってフラグだらけになって、
if (xxx) {
if (yyy) {
} else if (aaa || bbb) {
if (ccc) {
}
みたいな。こんなのが続くわけで、わかりにくいったらないのですが、
こういうのを平気で書ける人のほうが、いいのかなぁ
と思ってしまう今日この頃です。
実際、多いしね。
コードって、単純にそのままずらずら書いて、長くなったら 関数に分割する
って、そういうものじゃないよね...
1つの例としては、Template Methodパターン使って、その部分だけ外出しにするようにすれば、ずいぶんとコードもすっきりして、分かりやすく、かつ個々は、その対象だけに注目すればいいのでわかりやすいのに。
なんというか、使えない上司の下につくと、こうまでモチベーションが下がるものですかね。。。
| 固定リンク | コメント (0) | トラックバック (0)
現プロジェクトで、未だにこんなコメント書いている人が:
...
// xxx なら、someMethodを呼び出す
if (xxx) {
someMethod();
} else {
...
そのコメントは、何も意味をなしていないし、意味がないのに...
というかあるだけ無駄。ないほうがよっぽどいい。
そのくせ30行ぐらいの何をやっているかよくわからない処理のところには、コメントが1つもなく。
どういうコメントが必要なのかとか、わからないのかなぁ。結構年なのに。年だから?
| 固定リンク | コメント (0) | トラックバック (0)
スペシャルインタビュー 世界がRubyを愛する理由
Rubyは、先日、ファイルの漢字コードを返すだけのプログラムというかシェルスクリプトのようなものが欲しかったときに、nkfとかではできなくて、kccというものがあるのですが、それがCygwin用とかがなくて、探していてサンプルコードがあったので、触ったぐらいでほとんど触ったことはないのですが、時間見つけてやってみたいです。
Perlはもうほとんど今では書けないし(^^;
| 固定リンク | コメント (0) | トラックバック (0)
今月号?でJava Worldが休刊だそうです。スラッシュドットジャパンとかのストーリーでもいくつかの雑誌が休刊されるなかで、もうすぐJava Worldも、という話が出ていたのでそうかなと思ってていたのですが、やはり休刊だそうです。
Javaをやるようになってからはけっこう買っていたので、休刊はちょっと寂しいですね。
やはり、Webには勝てないということなのでしょうかね。売り上げもあがらなかったのかしらん。
| 固定リンク | コメント (2) | トラックバック (0)
仕事で、Javaとかでオブジェクトを生成して...とかはよく使われたりしていますが、そのままご飯作るときも
「ご飯を生成して...」とか考えてしまっていてなんかちょっと変な感じ。(^^;
| 固定リンク | コメント (0) | トラックバック (0)
さらによくわからない規制が追加されました。
もう、こんなところで仕事したくない...
私は、打ち合わせに参加してないのに、「終わってから意見するな」とか言い出されて、もうなんだか。
そもそも、なんでJavaのフィールドも知らない人間が決まりを決めているのか。
決定したルールでコード作ってみるものの、変な決まり+αのために、はっきりいって、整合性が取れてなくて帰って見にくいしわかりにくいのですけれど。
それ以外にもいろいろあるのですけれど、もうなんだかテンション...じゃなくてモチベーションは下がりまくり。今までの仕事で一番嫌な感じ。
やっぱり上の人やメンバによって、かなり違いますね。
| 固定リンク | コメント (0) | トラックバック (0)
変数のスコープを最小限にするというのは当たり前のことですが、Effective Javaに普通に載ってますね。
このIteratorの書き方を知ってからは、while文を使うことが一度もなくなりました。
while文の前にいちいち、Iteratorを生成する必要性がないですからね。
Effective Javaについては、
JavaOne 2006 - あの『Effective Java』から5年 「Effective Java Reloaded」にあるように最新のJavaに対応したものが出るということで早く出て翻訳されて欲しいものです。
そうそう、assertについてもJDK1.4になったので普通に使うと思ったら、「注意して使わないと云々」って言っていたのですが、何を注意するんだろう?
assert文で副作用のある式を使ってはいけないとかだと思いますがそんなの当たり前だし、そもそもそんなのをassertで使いますかね?
普通は、0以上 とか、コレクションが空とか、文字列がnullだとか空文字だとかそんなところですよね。
| 固定リンク | コメント (0) | トラックバック (0)
あるプロジェクトで変数のネーミングルールを決めるということで、わかりやすいように、型にあったプレフィックスをつけるということになりました。
String sValue;
int nValue;
double dValue;
みたいな感じ。でもって「あ、shortがある、shortも先頭がsだな...」とか言い初めて、shortはshtで、じゃあStringBufferはstrBuff?とか言っていて。
booleanはbを使うと、byteもbだとかなんとか。
boolean はisXXX だとか、hasXXX もあるだとかなんだとか。
っていうか変数名にisXXX って付けたらメソッド名は、isIsXXX になってしまいますよ(笑)
そんなもの、その場にあったものをつければいいのであって、型なんてEclipse使っていればその変数にマウスカーソルを当てれば表示されるのに...
そうでなくても、スコープを最小限にしたり、良いコードを書いていけばそんな変数名がstrXXX とかstrBuffYYYみたいにしないとわからないところなんてないと思いますけどね。
こういうのってよくわかってない マネージャとかリーダが勝手に決めるからたちが悪いです。リーダはコードを書いた事がない人だし。
そんなことより、スコープを最小限にするとか、書き換えされないパラメタにはfinal をつけるとかいう方が、よっぽど大事だと思うのですけれどね。
Cじゃないんだし、メソッドの先頭に全部の変数を馬鹿の一つ覚えみたいに宣言している人がまだいるのですよ。ループ変数のi とかまで宣言してしまっているのです。
人間、そんなにたくさんのことを同時に覚えられませんし、だからこそスコープを最小限にすれば、別に型にあったプレフィックスなんていらないと思うのですけれどね。
メソッドの先頭で全部宣言するから、混乱するのですよ。
果てには、Vectorがいいとか、ArrayListがどうとか。普通はList とかMapとか interfaceでアクセスするんであって、普通は 「べくたー」「はっしゅてーぶる」なんて言葉は出てこないと思うのですけれどね。
(まぁ、これは昔は私もよくわかってない、JDK 1.2ぐらいの頃はVectorとか言っていた時もありました)
もうこうなったら、わざとsが先頭なら、全部
String s1;
String s2;
int n1;
int n2;
FooClass obj1;
BarClass2 obj2
とかにすれば、変数の命名規約にもあっているからこうやって作りましょうかね。
クラス名もID番号みたいな、XXX_123456 みたいな意味不明なクラスでしかもアンダーバー入りのクラスになりそうで、もうどうでもよくなってきました(笑)
ループ変数のi,j,kあたりもnを先頭につけるのかしらん?
| 固定リンク | コメント (0) | トラックバック (0)
掲示板にspamアクセスが多いので、spamと判断した場合に、403 Forbiddenもしくは404 Not Foundを返そうと思ったのですが、HTTPのステータスコードは、Apacheレベルでないとだめで、できないようです。
単純に
HTTP/1.1 403 Forbidden
を返せばできると思ったのですが、うまくいかず。サーバ環境がローカルにないので何度も実サーバで試すわけにもいかないし。
サーバエラーの場合は、自動的に505をApacheが返しているみたいですね。
ただ、Location: ヘッダは別物なのか、その場合は302になるようですが、403/404も返したいところです。
( もともと人様のスクリプト&最近いじってないので違うかもしれませんが)
結局CGIスクリプトは、spamチェックを厳しくしただけでした。
POSTした後にLocation: ヘッダを返しているので、通常のブラウザなら再度掲示板のCGIにアクセスするはずですが、生ログを見ていると、ボットネットの専用ソフト経由の場合は、ことごとくLocation: ヘッダを解釈しないようですね。POSTするだけで終わりのようです。
あとは、User-Agentに、"User-Agent"の文字列自体を含んでいるspammerがいるのですが、あれは何なんだろう...
彼は一向にspam行為をやめません...
| 固定リンク | コメント (0) | トラックバック (0)
ある文字を入力する場面で、「1番目」というのを見て、1番目だから配列とかリストと間違えて、2番目の文字を入力してしまっていました。
職業病?
| 固定リンク | コメント (0) | トラックバック (0)
掲示板を、有名どころ(KENT WEB)のを使っているためか、掲示板spamの対象になってしまたようです。
今まではspamがあっても、ブラウザで手書きで入力しているようなものばかりだったので、その都度消すなり、ある程度の対策で防げていたのですが、今回のものは有名どころのものを使っているためか、もうソフトでHTTP GET/POSTなどを半自動で行っているようです。
とりあえず、それまでに行っていた対策は,,,というか掲示板スクリプトに標準搭載されているspam対策の設定をONにしていなかったのですが、以下の対策をしていました。
ただ、書き込み処理をしないだけで、内容は確認しておこうと思い、メールで通知は行うようにしていました。(その方が今後の対策のための材料にもなるので)
しかしながら、ソフトで自動POSTされ、さすがに1日に10回もあると、メールで通知も来るので、ウザイこと、この上ありません。
そのspam投稿の傾向ですが、アクセスログから
さらに、通常のブラウザであれば、302のMoved Templraryに対し、指定されたURIにアクセスするのですが、POSTだけして終わりなので、User-AgentはFirefoxとか言っていますが、掲示板spamであることがわかります。
そして、掲示板に搭載されているspam対策の設定をしました。
なにやら、画像で数字を生成してそれを入力させるものなのですが、これなら普通にブラウザでアクセスしないと、画像は見えないので大丈夫でしょう。一部ユニバーサルアクセスには画像形式だと問題ありますが、まぁ今のところ通常の書き込みをする人も多くないので、これで問題ないでしょう。
これをかいくぐってくる掲示板spamソフトもあるかもしれませんが、それはそのとき考えることにします。
| 固定リンク | コメント (0) | トラックバック (0)
最近は、Web上でのBookmarkツールがはてなとかMicrosoftでも流行っていますね。
それでもいいのですが、個人用なのでどこかにCGIでないかなぁと探していたら、Fumy News Clipperというのを見つけました。
早速インストールして使っていたのですが、PocketPC用に削除ボタンがあったほうが簡単だなぁということで、削除ボタンをまずは設置。これは、テンプレートの修正であっさりできました。
その次に、今度は投稿する際はパソコンのブラウザからが多いので、Bookmarkletを作ろうとがんばっていました。
朝の5時ぐらいまでいろいろやっていたのですが(久しぶりに、なんか楽しかったかも)
まず、JavaScriptに、encode() メソッドだけではなく、最近のブラウザには encodeURIComponent() というメソッドがあることを発見。これは、UTF-8 で document.title や、window.getSelection() などを URLエンコードするのに使います。そもそも今までなかったのが不思議ですが、最近のIE6や FirefoxなどのMozilla系ブラウザは使えるので大丈夫でしょう。
そして次が、そのUTF-8をCGI側で処理するために、UTF-8からShift_JISやEUCへの変換が必要なのですが、こちらも最近 Perl5.8 以降では Encode モジュールを使えば簡単にできるそうなので、サンプルなどを探しながらやっていたのですが、どうもうまくいかず。
文字化けしてしまいます。
Encode::encode ではうまくいかず、Encode::from_toでやろうとしていたのですが、
$str = "UTF-8文字列"
$str = Encode::from_to($str, 'utf-8', 'Shift_JIS');
とやっていました。私はてっきり 戻り値に変換された結果が入ると思ったいたのですが、
Encode と Unicode::Japanese - Ceekz Logs
にあるように、戻り値はlength でした。どうもテストしていた10とか15になるのでおかしいと思っていたのですが
というわけで、戻り値を無視するようにして、見事変換もできるようになって、Bookmarkletも完成。
これで気になった記事があったらBookmarklet1つで投稿ができます。
まぁ他のBookmarkツール等も BookmarkletやIEのツールバーなどでできるのでしょうけれど...
最近のPerl/JavaScript/Ajax/XML 関係もいろいろ進化?しているのでJavaだけじゃなくて追いついていかないといけないなぁと思う今日この頃です。
自分の知識は、Perl4のころで、use Encode などなかったので、そのあたりから勉強しなおしです。
| 固定リンク | コメント (0) | トラックバック (0)
J2SE 5.0 から、java.lang.StringBuilder なるクラスがあるようですね。
ちょっとjavaでの文字列の連結とかを検索していて知りました。
とはいえ、今やっているのはまだまだJDK1.3とかなので、1.4すらまだ遠いです。隣では、JDK1.2のシステムもありますが。。。
なんだか取り残されている気分です。
J2SE 5.0 虎の穴 Java2 SE v5.0 Tiger の新機能
にわかりやすく解説されていますが、
個人的には、 Genericsとか、拡張 for 文、 タイプセーフ Enumとかは早く使いたいですね。アノテーションもこれからは、どんどん重要になっていきそうですね。(Springとかでも)
Autoboxing/Auto-Unboxingは、個人的には使わなそうですが。
で、今のプロジェクトのソースを見ていたのですが、Stringを += で連結しているのが多くて、なんだかなぁと思います。もうループだろうがなんだろうが、文字列は += なのdす。
他にも、今時Cじゃないのに、
メソッドの先頭で、変数を宣言しまくっていたりとか、(たくさんすぎてよくわかりません)
メソッドの引数が15個とか、
1つの関数(クラス)が500行、700行とか、
ループの外で1回取得すればいいのを、ループの中で何回も同じことをやっていたり。。。
まぁ自分があんまり覚えられないってのもありますが、逆に引数15個とか、メソッドが500行とか作る人は、どういう考えで作っているのかなといつも思ってしまいます。
| 固定リンク | コメント (0) | トラックバック (0)
今日ちょっとしたCGIを作成して(ローカルはWindowsなので改行コードがCF+LF)転送したのですが、どうもうまく動きません。コマンドラインから
% ./foo.cgi
ってやってもCommand Not Fountと言われ(なぜ...)
% perl ./foo.cgi
だと正常に動くしと悩んでいたのですが、ローカルのWindowsのCygwinでは、どちらも動くしおかしいと30分ぐらいハマってしまったのですが、どうもサーバでのファイルの改行コードがCR+LFのままだったのです。
しかしながらFTPはASCIIモードで何回も転送しているし、vi で見ても改行に^M なんてのはないし、、、とサイズを見てみるとASCIIモードで転送してもファイルサイズが変わっていませんでした。CR+LFがLFのみになるので改行があればあるだけバイト数は減るわけですが、バイト数が同じで、要するるにバイナリで送っていたわけです。
とりあえずその場は、ローカルファイルをLFにして転送することでなんとかサーバでも動くようになりました。
(vi はvimだから設定なのか ^Mはつかないようになっていたみたいです...)
でどうもおかしいとFTPのログを見てみるとサーバが、vsFTPdとかいう聞いたことのないサーバで、しかもASCIIモードにした際に、
FTP 200 ASCII tastes bad dude.
とかなっていて、なんかASCIIモードが「bad」のようです。
調べてみると、vsFTPdは Very Secure FTPDというみたいで、Redhat9とか Fedora 系のはこのvsFTPdがデフォルトになっているようです。
さらに、デフォルト設定でASCIIモード転送がOFFになっているのでした。
よくある質問(FAQ) - 一般的な質問 - futomi's CGI Cafeの4番に書いてありますが、
ASCII転送をデフォルトでOFFにするのがSecureなのでしょうか。いまいちよくわかりませんが、今回のように誤動作? というか
をするのを承知の上でのデフォルト設定(Very Secure)ということなのでしょうが、うーん。
しかも「vsFTPdの設定をする」という個人が作成したサイトなどを見てみるとだいたいが、設定でASCIIモード転送のデフォルトの設定を変えるとなっています。
なんのためのデフォルト設定なのか...
そもそもFTPでASCIIモードなんて使うなってことなんでしょうかね。っていうかWindowsとUNIXがある以上ASCIIモードは重要だと思うのですが...
| 固定リンク | コメント (0) | トラックバック (0)
東芝のHDDレコーダのRDシリーズにはメール予約といって、メールに
open パスワード prog add 20051107 ...
というコマンドを書いたメールを送ると、定期的にそれをチェックして、予約してくれる機能があるのですが外出先から操作できるように自作noHTML+JavaScript+メール送信CGIを作成していたのですが、先日予約をする機会があったので外出先から予約したのですが、結果:失敗となりました。
前にテストした際にはうまくいっていたのでおかしいと思い、JavaScriptを見てみると日付の指定がうまくできていませんでした。
年+月+日の部分が数値として計算されたり文字列として連結されたりするのがうまくいっていなく、20051107となるはずが2006107 のようになってしまっていました。
我ながらデバッグが足りないようでした。最初試した際はうまくいっていて気づかなかったようです。
しかも一部にデバッグコードが残っていて悩むこと10分。
まぁ影響は自分だけなので特に問題ないのですが、Perlとかの数値と文字列を自動的に変換する言語は気をつけないといけないですね。
| 固定リンク | コメント (0) | トラックバック (0)
スラッシュドット ジャパン | 日本語プログラミング言語「ひまわり」(/.J)
こういうのがあるとは知らなかったので面白そうかなと思いますが、サンプルを見ると、なんかちょっと変な感じの日本語になっていてどうかな? と思います。
やはりC/Javaが一番かなと思ったり。
最近いそがしくて勉強する時間がとれないのでなんとかしたい・・・
| 固定リンク | コメント (2) | トラックバック (0)
久しぶりに掲示板のCGIのコードを見ました。。言語はPerlですが、C/JavaばかりやっていたせいかPerlの独特なコードを忘れてしまっていて、最初はちょっと理解できないというか、どうなってたんだっけ?と思いましたが見渡していくうちにだんだんと思い出してきました(^^;
まぁちょこっと修正するだけなので、それほど難しくないんですが、データ構造をよく見ずに修正したら、バグってしまいました(^^; もともと人のコードなのでどういう風になっているのかよく知らないのですが、最初のほうに書いてあるといいと思います。最近の掲示板スクリプトはどうなっているんでしょうか? 巷の掲示板を見るといろいろ高機能なのがあるけど..最近はサーバのスペックもあがっているので昔ほど重い処理を気にせずにできそうですね。
なんかPerl/PHP/RubyとかのLLな言語でなんか書いてみたい今日この頃。
っていうか仕事でしかコード書いてないからなんか自分用の便利なツールを作りたい...
| 固定リンク | コメント (0) | トラックバック (0)
というわけで新しいプロジェクトになって、C言語で開発してます。
でもって Unicode?っていうか UTF-16なファイルを扱うわけですが、
wchar_t は ロケール依存だとかでどうも使えないみたいです。
Cygwinだと sizeof(wchar_t)が 2byte で Solarisは 4 byte.
でちょっと自作しようとするんですが、ちょっとしたライブラリもCにはないので、
ライブラリがあるといいんですが、検索してみたところなさげな感じ。
でもってポインタのポインタとか配列の配列を使おうとして、2次元になった瞬間に
よくわからなくなってくる自分 :-)
3次元以上は絶対無理。
わからない時は、裏紙なんかに絵に書くのが一番ですね。
Cygwinに splint っていう lint系?のツールがあったのでちょっと使ってみたらprintfの戻り値を使ってないぞー
みたいなことまで言われてしまったけど、この辺はオプションでどうにかなるのかな。
printfの戻り値なんて使っている人 世の中にそんなにいるとは思えないけど...
| 固定リンク | コメント (0) | トラックバック (0)
ソースの中にコメントアウトしたり、Cなら #if0としたりして、以前のソースを残す人がいます。
そんなのは見にくくなって可読性が下がるだけなので、やめたほうがいいと思うのですが、
そうしている人がいます。
実際、修正をいろいろしていてコメントアウトだらけで、よく見てみたら現在はなにもしていなかったというようなこともあります。
使用しなくなったソースファイルも、もし動かなくなったら困るからとか言う理由で、削除せずに、そのままシステムに残したままと
いうこともあります。(そのモジュール/クラスは絶対に呼び出されないわけです)
なんのためのCVS/ソースコード管理なんでしょうか。
履歴は、CVSのlogや一番先頭に履歴を書くぐらいで十分でしょう。
どう変更したのかを見たければCVSで diff で見ればいいわけで、その際に cvs log すれば十分だと思います。
変更されたら、それを
「変更開始」
「変更終了」
と書いて残りしたりするのが、コーディング規約とかで決まっていたりするわけですが、
ソースコードの中に以前のものを残しておく必要性はどれほどあるのでしょうか?
だいたいそのコメントアウトしたコードはコメントなので動作しませんし、
バグが見つかって前の状態に戻すにしても、CVSで戻すなり、diff取ればいいだけだと
思うのですが、昔の名残?で今もずっとコメントアウトして残すのが続いているのかな。
まぁ上の人が考えて決めるので、よくわかりませんが。
| 固定リンク | コメント (2) | トラックバック (0)
プログラミングで使うソースファイルやクラス名、変数名とかに
XXX_1 とか XXX_2とか意味もなく使う人がいます。
今日も同じ会社で XXX_2を 作成して・・・とか言ってました。
1と2でなにが違うのかわからないからもっと、わかりやすい名前にして欲しい。
ArrayIndexOutOfBoundsException ぐらい長い名前にしろとは言わないけど、
意味のある名前にして欲しい。
同様に、
変数名
v
vv
vvv
vvvv
vvvvv
とか。 vvvvvv じゃなんだかわからんだろ・・・(-_-;;;
| 固定リンク | コメント (0) | トラックバック (0)
SCJD合格
SunのJavaの資格試験、Sun Certified Developer for the Java[TM] 2 Platform(310-027)
の認定証がやっと来ました。
催促してきたので、送るのを忘れていたのではないかと・・・
というわけで、WCがまだなので受けたいのですが、仕事のほうが忙しくてそれどころではなく。
| 固定リンク | コメント (0) | トラックバック (0)
SunのJavaの資格試験、
Sun Certified Developer for the Java[TM] 2 Platform(310-027)を受けたのですが、
結果が来て合格しました。
SCJDの受験に必要な、SCJPに受かったのが2002年の12月で、2003年の1月には、Developer試験の
申し込みをしていたのですが、直後に出張があったり、そのあとは仕事が忙しかったりして
その存在すら忘れそうになってましたが、
試験期間が1年間あるとはいえ、さすがにやばくなってきたので、10月、11月ぐらいから
試験(というかプログラム)を作成し、12月のバウチャーチケットぎりぎりでプログラム提出。
その後すぐに小論文試験も受けて結果を待っていたのですが、先日結果がきてみごと合格でした。
これに合格したからといって、会社からお金がでるわけでもないのですが、まぁ自分の腕試しということも
あるし、転職にもないよりはいいし、いいかなと。
ソフトウェア開発技術者にまだ受かってないというか受けてないので、今度は、それを
がんばろうっと。
| 固定リンク | コメント (3) | トラックバック (0)