Read from socket failed: Connection reset by peer

  • sshでアクセスしようとすると以下のエラーが出るようになってしまった。
$ ssh user@hostname
Read from socket failed: Connection reset by peer
  • /etc/hosts.allowなどを見るという情報などもあったが、自分は/etc/sshディレクトリ以下のファイルパーミッションを意図せず変更していたのが原因でした。
  • スクリプトを作成していて意図せず、"$ sudo chmod -R +rx /"なんてコマンドを実行していた。

m2eclipseのなぞ

不思議だ。Eclipse galilleo SR2を導入し、m2eclipseを入れた。ワークスペースが混乱していたので、作り直し、既存プロジェクトをチェックアウトしたらいくつかのプロジェクトでコンパイルエラーとなってしまった。コンパイルエラーの内容は以下。

  Description	Resource	Path	Location	Type
  Could not calculate build plan: Missing:
  ----------
  1) org.apache.maven.plugins:maven-war-plugin:maven-plugin:2.1-alpha-1
  
    Try downloading the file manually from the project website.
  
    Then, install it using the command: 
        mvn install:install-file -DgroupId=org.apache.maven.plugins -DartifactId=maven-war-plugin -Dversion=2.1-alpha-1 -Dpackaging=maven-plugin -Dfile=/path/to/file
  
    Alternatively, if you host your own repository you can deploy the file there: 
        mvn deploy:deploy-file -DgroupId=org.apache.maven.plugins -DartifactId=maven-war-plugin -Dversion=2.1-alpha-1 -Dpackaging=maven-plugin -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
  
  ----------
  1 required artifact is missing.
  
  for artifact: 
    org.apache.maven.plugins:maven-war-plugin:maven-plugin:2.1-alpha-1
  
  from the specified remote repositories:
    central (http://repo1.maven.org/maven2, releases=true, snapshots=false)
  	201004XxxxXxxx		Unknown	Maven Problem

つまり、maven-war-pluginファイルがダウンロードできないと言うことのように思う。しかし、以下で確認したが公開されているようで、ブラウザからも確認できた。

http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-war-plugin/2.1-alpha-1


ダウンロードできない理由がさっぱりわからないので、pom.xmldependencyに手動で追加してみたら、ダウンロードでき、エラーも消えた。

はて。不思議なのでもう一度、pom.xmldependencyから消してみたら今度はエラーが出ない。まあ、ローカルリポジトリにあるからだろうと思うので、ローカルリポジトリから該当jarがあるディレクトリを削除してみた。( .m2/repository/org/apache/mavenplugins/maven-war-plugin 以下すべて削除)
そして、dependencyに追加していない状態でEclipse上でリビルドしたが、今度はエラーが出ない。
もう一度、dependencyに追加すると、先ほど削除したディレクトリがまた作成されていたので、間違いはなさそうである。

いったいどういうことなのか、まったくわからない。ただ、コンパイルエラーは消えたままだ。その後、ワークスペースを作り直しても見たがエラーは二度と出ない。maven-pluginの情報がどこかに残るのだろうか。....

もうここまできたので、ローカルリポジトリも思い切ってすべて削除してみた。結果は変わらず、コンパイルエラーも再現しなくなった。どういうことだろう。

正直は割に合う

  • 「今回の見積もりは、なぜ以前と比べてこのように高額なのですか?」

今回の案件は1年近く前に見積もりをし、その当時は要件検討不足で保留になっていた案件を若干変更して再見積もり依頼をいただいた、という内容だった。しかし、すっかりその当時の提示見積もり金額との比較を忘れており、純粋に新たな要件で見積もったのでその2つの見積もりの整合性をチェックしていなかったのだ。

  • 「以前の見積もりの3倍近いと思います。どういうことか、ご説明願えませんか?」

明らかに、お客様はこちらを疑っている。

こういうとき、自分に自信がないと焦ってしまうし、変なことを口走ってしまうことも多そうだ。

  • 「今回は儲けてやろうと大きな利益幅を追加してしまったのだろうか?」

このような考えも自分の頭をよぎった。「なんて誤魔化したらよいのだろう。」と考えてしまう場合もありそうだ。しかし、考えてみると、

  • 「自分はお客様に嘘を言ったことはない。」

という強い自信が自分の中にあったため、適切な見積もり金額のはずだ。実は、ある細かな特定機能の実現に非常に多くの工数がかかっており、前回の見積もり時にはなかった機能だったのだ。(この時点で実は見積もりは4,5案件ほど並行して提示していたので、少し記憶力も落ちていて、すぐに気づかなかった。)自分の中ではまったくやましいことがないため、すっきりとお客様に説明できた。今回の見積もりには根拠があり、正当であり自社の利益のみを追求しているわけではない、ということが伝えられたと思う。

こういう突然のドッキリした質問に自信を持って答えられたのも、「自分は嘘をついたことがない」というのが一番のポイントになったように思う。

システム開発を進めていると、どうしてもお客に嘘をついてしまいたくなるケースが多い。

  • 「ある条件が重なると、挙動がおかしくなるが、そんな条件は重なることはめったにないのだから、お客様に説明しなくてもよい。」
  • 「こんなエラーが出ることがあるが、大きな問題では無いと思うので、連絡もしないし、対応もしなくてよいだろう。」
  • 「この仕様書は、本来の要望と違うように思うが、わざわざ言わないで、書いてある通りに実装してしまおう。連絡する必要はない。」
  • 「いつも利益が出ていないので、今回は黙って大きな利益幅を載せて見積もりを提示してしまおう。」

しかし、自分のなかではどんなに自社に不利益だろうと嘘をついて、誤魔化そうとしたことはなかった。そういう自信が自分にはあった。なので、自信をもってお客様に説明ができたし、見積もりに正当性があるといまでも自信を持っていえる。嘘をついていないと、こういう自信が持てる。

「正直は割に合う」のである。

http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E6%88%90%E5%8A%9F%E3%81%95%E3%81%9B%E3%82%8B-%E7%8F%BE%E5%A0%B4%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%81%AE%E3%80%8C%E6%8A%80%E8%A1%93%E3%80%8D-%E5%B2%A1%E5%B3%B6-%E5%B9%B8%E7%94%B7/dp/4797333502/ref=sr_1_1?ie=UTF8&s=books&qid=1256512841&sr=8-1

最近アツくなったこと

久しぶりに、アツくなる事件がいくつかあった。

  • JavaはやめてC言語にしましょう。外部ライブラリも使わず、すべて手で作り直しましょう。
  • Judeでアクティビティ図を描くのはやめて、Excelフローチャートにしましょう。
  • ドキュメント作成のために新たに2名要員を追加します。

それぞれ、アツくなって、提案資料を作成した。C言語はほかの要因により、Javaが再採用された。Excelフローチャートはまだ不明だ。

このなかでドキュメント作成のために要員追加、というのは問題がないと思われる方もいるかもしれない。細かな話は書けないのだが、要するに、開発に携わっていない人を新たに採用し、新規にドキュメント作成しよう、という話なのだ。

レガシーで単純なシステム開発をしていた時代には、ドキュメント維持もそれなりにできていたのだろう。しかし、現在はシステムも複雑だし、スピードも要求される。そのようななか、ドキュメント専門家が日々メンテナンスされていく開発コードに対して、一からドキュメントを作成するのは相当難しいと思う。

大事なのは、プロダクトコードとドキュメントは一蓮托生であり、切っても切れない仲であり、コードを修正したら、必ずドキュメントも修正する、というぐらいの意気込みがなければ維持はできないとということだ。そしてそれを開発に携わっていない人が書くことができるかといったら、無理としか言いようがない。もし、ドキュメント専用要員を新たに雇うのであれば、開発に入ってもらい、開発をしながらドキュメントを書いていけばよい。もちろん、いままで開発していたメンバーもドキュメントを書くのだ。(今までできていなかったのなら、今から書けばよい。フォーマットなんか気にせず、必要と思われる情報を思いついた時点でどんどん書くのだ。)

ドキュメントも修正しないとテストコードが通らない、というぐらいにしてもよいプロジェクトもある。自分の参加しているプロジェクトはそのようなレベルを目指しているはずなのに。提案資料を作成して、マネージャ達に通知だけしたが、その後なにか動きはあるだろうか。

  • eclipse3.4eeSR2をダウンロードして実行したところ、以下のエラーが出た

Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.

  • これは、eclipseCygwin上のunzipコマンドで伸張したさいに、どうやら書き込みパーミッションが一部失われてしまうようだ。WindowsエクスプローラーからRead Onlyのチェックをはずしても、伸張したフォルダによっては、正しくRead Onlyのチェックがサブフォルダまで外れない場合もあるようだ。
  • unzipコマンドではなく、jarコマンドで伸張したり、Cygwinでchmod -R 755としてパーミッションを与えたら、問題なく起動できた。

風邪

久しぶりに風邪をひいた。4年ぶりぐらい。
驚くのは、自分は40年間、ほかの人より風邪を引きやすい体質で、4年前までは年に3,4回は風邪をひいていたのだが、この4年間まったく風邪をひくことがなかったのだ。思い当たるのは

  • 外から帰ったら手洗いとうがいをする

これだけだ。それでほとんど風邪をひかなくなるのだからすごいものだ。次に体調崩すのは4年後ぐらいでありたいものだ。

cronの導入

  • Cygwinの以下のパッケージをインストールする
    • cron
    • cygrunsrv
  • 以下のコマンドを実行し、Windowsサービスにcronを登録する

$ cygrunsrv --install cron --path /usr/sbin/cron --args -D

  • Windowsサービスにcronが登録されていることを確認したら、cronを以下コマンドで実行

$ cygrunsrv --start cron

  • ここで以下のエラーが出る場合がある。

$ cygrunsrv --start cron
cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062:
そのサービスを開始できませんでした。

  • /var/log/cron.logを見ると以下のようなログが出力されていた。

$ cat /var/log/cron.log
...
cannot chdir(/var/cron), bailing out.
/var/cron: Permission denied
...

  • どうやら/var/cronが現在作業中のアカウントのユーザーで作成されてしまっているのが問題のようだ。以下のコマンドを実行し、再度startしたところ、正常に起動できた。

$ chown -R SYSTEM:root /var/cron
$ cygrunsrv --start cron