2015年6月5日金曜日

「出来ます」

C++ が出来ますと言うプログラマが信用できない件。

 私自身はC++(VC++) を使い始めて二年ほど。まあ期間なんて何もはかれないと思うが、
どちらかといえばひよっ子の部類(だと思う)。

業務上 c++ 出来ますという経歴の型を面接する機会があるのだが、
言葉を失うようなレベルの方がいらっしゃることが少なくない。
特に経歴の多くがC++(or VC++)と言う方。

C++11 は使ったことありますか? このプロジェクトは?
と聞くと、「分かりません」とほざくのだ。

三流javaerでも担当プロジェクトのバージョン聞けば把握しているだろうし
.NETでも意識していないなんてありえないと思うのだが。普通rubyだろうがperlだろうがPHPだろうが分からないとか無いよね!?

ところが(クソの方の)C++er は知らんと言う状況がありえるらしい。(何人かに聞いた結果です)
visual studio 2010 から visual studio 2013 にしたいんですけどねー色々便利じゃないですかと言ったらポカンとされた。
スマートポインタ分かりますか?右辺値参照は?foreacheは? と聞いたら windows は詳しくないとかなんとか。
あなたそれ恥の上塗りですよ。。。

effective c++ は読みましたかといったら何ですかそれ(美味しいの?)。始めて聞きましたと言われました。
きっとリファクタリングして下さいと言ったら「はあ?」みたいなリアクションなんだろうなあ。
オブジェクト指向分かります(キリッ)
といいながら(超)便利な馬鹿デカイユーティリティークラスを
継承したクソクラスを設計するんだろうな。
洒落になんない馬鹿でかい関数とか、ゴールデンハンマーみたいなクラスとか、
役に立たない方のハンガリアンとか意味も無く構造体とか使うんだろうな。
あったかい布団で眠るんだろうな。まじで〇ね。



組み込みからwindows,linux,unixと分母が多いだけに玉石混合というか。

多くのC++ プログラマはコンピュータ、OS、言語に詳しい優秀なプログラマである。早くて、小さくて、エレガントなプログラムを書けるのだと思う。
と同時に多くのクソみたいな古代人のような地雷プログラマが同居しているのがC++界隈だと感じる。
可能であればガベージコレクタの無い言語+関数型言語一つできる人間 とかでフィルターかければ
まともにならないかなぁと思うのですが。
何かいいフィルターは無いですか?











少しでもそういう人が何かに気づいてくれるようこの愚痴を継続したいと思う。
プログラマーって別に勉強しない人も多いのかな。


2015年6月2日火曜日

なぜ角を獲らない

モニター一枚はない。

 ある人がノートPCにUSBキーボードとマウスをつなぎ、わざわざ閉じた状態で外部モニター(1枚)へ出力していた。
なんで開けてノートPCのモニター使わないんだろう。 多ければ多いほどいいかどうかは知らないが、1枚より2枚が快適なのは明らかだろう。
もしかしたら解像度がちぐはぐでとかモニターの高さが合わなくて気持ち悪いとか、なにか理由があるのかもしれない。だとしてもファイラーあげとくくらいならそれなりに使えるだろう。

普通に仕事をしていればいくつかのアプリケーションを立ち上げ行ったり来たりすることがあるのは 当たり前で、そのたびにいちいちウィンドウを切り替えるなんて無駄以外の何物でもない。
 一万円も出せばコード読む程度なら十分なディスプレイが手に入る。 生産性のためのほんの僅かな投資だ。
 会社で用意してくれないなら自腹を切ったってそれで仕事の効率が1%でも上がるなら十分元が取れるのではないか。
 それも許してくれないような会社なんて…ろくなもんじゃないね。まあ沢山あるだろうけど。
 プロダクティブ・プログラマ -プログラマのための生産性向上術 にも一応モニターについて少し書かれている。他にも同じようなことを誰かが書いてた気がするが思い出せず。
仮想デスクトップの利用なんかもお勧めされている。そういえば windows 10 では標準で利用できるそうな。 



便利なものを教えても「ああ、知ってるけど覚えるのが面倒で」とか「使ったことあるけどこっちの方が慣れてて」と言われることがある。( GUIでやるよりコマンド叩けば一発だよ といった )
確かに学習コストは無視できないし、手に馴染んだやり方の方が早いこともままあるだろう。
しかし、もっといいものがあるかもしれないな。とか、新しいものを試してみようといった気持ちは持ちがなくなったらもう、頑固ジジイの仲間入りだ。老害だ。思考停止だ。
自分でも気づかないうちにそうなっていないだろうか。気を付けたい。

2013年6月14日金曜日

アイコンを作りました

作ったって程じゃないか・・・
エクセルっぽいのとかワードっぽいのとか、とりあえず必要だった分だけ。
保存もかねて。
サイズは16*16
エクセル、ワード、パワポ、PDFのつもり。
権利関係とか考えるほどのものじゃなし、もし誰かが使いたいなら勝手に使っていいんじゃないかな。

2013年4月17日水曜日

ブラウザバックでformの値が消える

php + Pear Auth利用
phpで簡単な認証を行うページを作成、自前で実装も手間なので何かあったかなと調べるとPearにAuthあんじゃんかと。
とりあえず認証周りはOKであとはちょっとしたフォームを作成しテスト。
フォーム入力後にhistory.back()すると値が再現されない。
別にフレームワークも使ってないし、いちいちセッションやらなんやらで引き回すつもりはないが、戻ったときくらいは消えないで欲しい。
キャッシュ周りだろうと思いレスポンスヘッダを確認すると

Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
陽に設定した記憶もないしほかのページは問題ない。とするとPearがやってるのかな。
認証処理の前に以下を記述しIE,FFで確認。とりあえず期待した動作になりました。
session_cache_limiter('private_no_expire');


Pear Auth ・・・ ちょいちょいっと認証したいときにはいいのかもしれないが、
あんまりいい感じじゃないなー。ラッパーかませって感じなんだろうけど(実際そうしたし)データベースの接続からformの出力までやってくれちゃうし、inputタグの名前まで決め打ちって・・・。まあアダプター的なもの作ればすぐ済むし、これはこれですぐ使えて便利なんだろうな。


2012年10月10日水曜日

ie (ie9) でjavascriptが動かない

jqueryを使ってAjaxでフォームのオプションを絞り込むような処理を作成。
FFでは問題なかったがieではなぜか動かない。
コンソール(開発者ツール?)を表示させるとなぜか動く…
キャッシュとかが問題か?などとしばらく悩むも
console.log('foo');の記述がまずかったみたい。
ieだとコンソール開いてないとエラーになるのね…

(なぜか動くとか言ってる時点で気づくべきか)

しかしieは随分よくなったとは言えなんだかなぁー=3

2012年7月14日土曜日

NSNull って使えないかも

NSNull objecrtive-cのコレクションにはnilを突っ込めないので(番兵につかわれてる?)のでディクショナリーなんかで値がないことを表現したい場合はNSNullクラスのインスタンスを使うみたい。
ドキュメントにもそう書いてある。ちなみにシングルトンインスタンスのようだ。
こいつをif文で比較すると真になってしまう。ただのオブジェクトなので当然かも知れないが、期待としてはそうじゃないだろと・・・
 NSNull *nullObj = [NSNull null] //シングルトンインスタンスを取得する
if(nullObj){
     NSLog(@"残念...");
}else{
    NSLog(@"こっちでしょ");
}

>残念...

まあただのオブジェクトなんだからむしろこれが正しいのか。
適当にメソッド作って対応するしかないのかな。

- (BOOL)isNSNull:(id)obj{
    if([obj isEqual:[NSNull null]] || obj == nil){
        return YES;
    }else{
        return NO;
    }
}
そういえばDBNullってあったなあ。あれも比較が冗長だったけど似たようなもんか。

2012年3月30日金曜日

android暗号化メモ

データを暗号化する際に、エミュレータでうまくいっても実機だと
プロバイダーがなかったりしてうまく動作しないことがある。

とりあえず使えるプロバイダの確認

java.security.Security.getProviders()

で一覧を取得できる。
以下エミュレータで取得した結果

for(Provider each : java.security.Security.getProviders()){
    android.util.Log.d(tag, each.getName());
}

エミュレータ
  • AndroidOpenSSL
  • DRLCertFactory
  • BC
  • Crypto
  • HarmonyJSSE

手元にある 001HT
  • DRLCertFactory
  • Crypto
  • HarmonyJSSE
  • BC

機種に依存したくないならProviderをアプリに含めるしかなさそうだ。

ついでにエミュレータで各プロバイダのアルゴリズムを出力してみた。

ProviderName : AndroidOpenSSL
  • Service algorithm : SSL
  • Service algorithm : MD5
  • Service algorithm : SSLv3
  • Service algorithm : SHA-512
  • Service algorithm : Default
  • Service algorithm : SHA-256
  • Service algorithm : SHA-1
  • Service algorithm : TLS
  • Service algorithm : TLSv1
  • Service algorithm : SHA-384


ProviderName : DRLCertFactory

  • Service algorithm : X509


ProviderName : BC

  • Service algorithm : PBEWITHSHA256AND128BITAES-CBC-BC
  • Service algorithm : SHA-1
  • Service algorithm : SHA-512
  • Service algorithm : SHA-384
  • Service algorithm : DESEDEWRAP
  • Service algorithm : PBEWITHMD5AND256BITAES-CBC-OPENSSL
  • Service algorithm : RSA
  • Service algorithm : PBEWITHHMACSHA1
  • Service algorithm : PBEWITHMD5AND192BITAES-CBC-OPENSSL
  • Service algorithm : PBEWITHSHA1ANDDES
  • Service algorithm : PBEWITHMD5ANDDES
  • Service algorithm : DH
  • Service algorithm : ARC4
  • Service algorithm : PBEWITHSHAAND192BITAES-CBC-BC
  • Service algorithm : PKCS12PBE
  • Service algorithm : AES
  • Service algorithm : SHA-256
  • Service algorithm : PBEWITHHMACSHA1
  • Service algorithm : DH
  • Service algorithm : DSA
  • Service algorithm : BouncyCastle
  • Service algorithm : DESEDE
  • Service algorithm : DESEDE
  • Service algorithm : Collection
  • Service algorithm : HMACSHA512
  • Service algorithm : PBEWITHSHAAND2-KEYTRIPLEDES-CBC
  • Service algorithm : PKIX
  • Service algorithm : HMACSHA256
  • Service algorithm : AESWRAP
  • Service algorithm : PBEWITHMD5ANDRC2
  • Service algorithm : PKCS12
  • Service algorithm : HMACSHA384
  • Service algorithm : PBEWITHSHAAND40BITRC2-CBC
  • Service algorithm : NONEWITHDSA
  • Service algorithm : DES
  • Service algorithm : SHA1withDSA
  • Service algorithm : RC4
  • Service algorithm : PBEWITHSHAAND256BITAES-CBC-BC
  • Service algorithm : RSA
  • Service algorithm : PBEWITHSHAAND128BITRC4
  • Service algorithm : DH
  • Service algorithm : HMACSHA384
  • Service algorithm : PBEWITHSHAAND192BITAES-CBC-BC
  • Service algorithm : PBEWITHSHA1ANDRC2
  • Service algorithm : DSA
  • Service algorithm : PBEWITHSHA256AND192BITAES-CBC-BC
  • Service algorithm : DH
  • Service algorithm : PBEWITHSHAAND128BITRC2-CBC
  • Service algorithm : PBEWITHSHAAND3-KEYTRIPLEDES-CBC
  • Service algorithm : DESEDE
  • Service algorithm : PBEWITHMD5ANDRC2
  • Service algorithm : SHA256WithRSAEncryption
  • Service algorithm : PBEWITHMD5AND256BITAES-CBC-OPENSSL
  • Service algorithm : DSA
  • Service algorithm : BLOWFISH
  • Service algorithm : PBKDF2WithHmacSHA1
  • Service algorithm : SHA512WithRSAEncryption
  • Service algorithm : PBEWITHMD5AND128BITAES-CBC-OPENSSL
  • Service algorithm : SHA384WithRSAEncryption
  • Service algorithm : PBEWITHHMACSHA
  • Service algorithm : AES
  • Service algorithm : PKIX
  • Service algorithm : PBEWITHSHAAND40BITRC4
  • Service algorithm : PBEWITHSHAAND128BITAES-CBC-BC
  • Service algorithm : DES
  • Service algorithm : PBEWITHSHAANDTWOFISH-CBC
  • Service algorithm : HMACSHA512
  • Service algorithm : PBEWITHSHAAND40BITRC4
  • Service algorithm : HMACMD5
  • Service algorithm : HMACSHA1
  • Service algorithm : PBEWITHSHA256AND192BITAES-CBC-BC
  • Service algorithm : PBEWITHSHAAND3-KEYTRIPLEDES-CBC
  • Service algorithm : HMACSHA1
  • Service algorithm : PBEWITHMD5ANDDES
  • Service algorithm : DSA
  • Service algorithm : PBEWITHSHAANDTWOFISH-CBC
  • Service algorithm : DES
  • Service algorithm : PBEWITHSHAAND128BITRC2-CBC
  • Service algorithm : AES
  • Service algorithm : PBEWITHSHAAND40BITRC2-CBC
  • Service algorithm : PBEWITHSHA1ANDDES
  • Service algorithm : HMACMD5
  • Service algorithm : PBEWITHMD5AND128BITAES-CBC-OPENSSL
  • Service algorithm : PBEWITHSHA256AND128BITAES-CBC-BC
  • Service algorithm : X.509
  • Service algorithm : PBEWITHSHAAND256BITAES-CBC-BC
  • Service algorithm : DES
  • Service algorithm : DESEDE
  • Service algorithm : BLOWFISH
  • Service algorithm : MD5WithRSAEncryption
  • Service algorithm : HMACSHA256
  • Service algorithm : OAEP
  • Service algorithm : BKS
  • Service algorithm : PBEWITHSHAAND128BITRC4
  • Service algorithm : MD5
  • Service algorithm : PBEWITHSHAAND128BITAES-CBC-BC
  • Service algorithm : PBEWITHSHA256AND256BITAES-CBC-BC
  • Service algorithm : PBEWITHSHA1ANDRC2
  • Service algorithm : PBEWITHMD5AND192BITAES-CBC-OPENSSL
  • Service algorithm : RSA
  • Service algorithm : BLOWFISH
  • Service algorithm : PBEWITHSHAAND2-KEYTRIPLEDES-CBC
  • Service algorithm : SHA1WithRSAEncryption
  • Service algorithm : PBEWITHSHA256AND256BITAES-CBC-BC
  • Service algorithm : DH

ProviderName : Crypto

  • Service algorithm : SHA1withDSA
  • Service algorithm : DSA
  • Service algorithm : SHA-1
  • Service algorithm : SHA1PRNG


ProviderName : HarmonyJSSE

  • Service algorithm : TLS
  • Service algorithm : TLSv1
  • Service algorithm : SSLv3
  • Service algorithm : X509
  • Service algorithm : X509
  • Service algorithm : SSL

実機の方は割愛するが試したかったBlowfishがなかった。