風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別blogからの引っ越しなのでレイアウトがアレです。

バッチファイルメモ

いっつも忘れるのでメモ。 ■変数 set hoge = "12345" echo %hoge% 環境変数が元々定義されているので、上書きしないように注意 ■条件分岐 if %hoge%=="12345" ( ... ) else ( ... ) 条件文の後ろの(は1個スペースを付けないと構文エラーになる ■設定ファイルの読み込み 参考:http://cheatsheet.blog93.fc2.com/blog-entry-2.html 便利ですね。ありがとうございます。 ■入力を受け付ける set /p hoge="入力してね > " echo %hoge% ■実行時の引数を受け取る echo %1%2%3 %1~%9で実行時引数を受け付け ■ループ for %%hoge in (aaaa bbbb cccc) do ( ... ) ループごとに%%hogeに()内の要素が1つずつ入る 後はコマンドプロンプトのコマンドとパスの管理が出来れば大体はなんとかなるんじゃないかと。 こちらにもまとまってます。ありがとうございます。 http://d.hatena.ne.jp/cloned/20080822

arduinoで簡単サーボ制御

とある目的のためにサーボ3つを制御したくなったので、Arduinoに挑戦してみた。 参考にしたのは以下。 ブレッドボード、AVRマイコン、各種部品は動画の通りに秋月の通販で買ってだいたい2500円。 ライタはもともと持っているので、それを使うとして、サーボは1個900 800円。秋月にあるものの中では一番小型。 支払いは銀行振込だったのですが、入金確認後は即日発送でした。すばらしい秋月。 最初の動画の通りブレッドボード上で回路を組み上げて、BitBangでブータを書こうとしたんだけど、どっかで何かに失敗したらしく石破損。シグネチャーが読めなくなってしまいました…。 2個目の石はライタを使ってArduinoブータを書き込み、開発へ。 http://twitpic.com/8g0y3e ↑開発途中 一回ブータを書いて環境構築してしまえばもう後はサクサクです。 サーボの制御モジュールは標準でライブラリがあるし、タイマーについては、Metroという Arduino公式からダウンロードできるライブラリを使いました。 プログラミングは正味1時間くらい。むしろメカ部分の工作のほうが大変でした。 Messengerライブラリを使えば、シェルみたいなこともできると思われるので、次はそれで 動かしながら設定変えたりとかしたいですねー。

続・Tomcat5.5のTCPセッション保持時間って?

はじめに

タイトルからしてそもそもおかしいのですが、チラ裏なんで恥をそのまま晒しておきますw

Tomcatサーブレットコンテナ兼HTTPサーバなので、TCPからみたらユーザ(ネットワーク層で言うところの上位層)にあたります。

TCPのセッション保持は結局OSのネットワークプロトコルスタックの実装に依るものでいて、Tomcatは関係ありませんね。

Windowsの場合、レジストリをいじることで変更できます。

 

調べてみた

http://bwind.blog19.fc2.com/blog-entry-41.html の件、必死こいてTomcatを色々調べても出てこなかったでござる。 前の記事に書いた予想が大体当たってたんだけど、 OSのプロトコルスタックの設定でした。試してた環境はWindowsXP

  • クライアントが1回目の通信開始
  • 通信が終わる
  • サーバはTCPセッションをTIME_WAIT状態で「一定時間」保持(これはTCPの仕様)
  • この間クライアントが同じソースポートで2回目(別)の通信開始
  • サーバはTIME_WAIT状態のセッションに新たなパケットが来たと思うんだけど、シーケンス番号が違うので破棄 *1
  • クライアントは2回目の通信のSYN ACKを受け取れない、接続タイムアウトしたと思う

ということでした。

「一定時間」はRFC793では「最大セグメント生存時間の2倍」で、RFC推奨値は240秒 (最大セグメント生存時間は大体のTCPパケットで120秒だから) Windows2000はきっちり240秒設定だったらしいんだけど、TIME_WAITのセッションがある間は 新しいセッションを当然張れないので、パフォーマンス的にどうよ?ってことになったらしく、 XP以降は120秒になってるらしい。

で、ここは最小値30まで設定可能なので30に変更しておいた。ホントは10秒くらいにしたかったんだけどね。 設定方法はレジストリに値追加して再起動するだけ。参考URLからTcpTimedWaitDelay検索でどうぞ。

参考 http://support.microsoft.com/kb/314053/ja

 

わざわざこんな対応しなくても、通常は「短い時間に同じsrcポートで別の通信しようとしてくるクライアントがタコです」って言えば済む話だと思いますです。

*1:本来は、通信終了後-CLOSEまでに、ネットワーク上を彷徨ってるパケットをこの間に受け取ることができるようにしておくステート

WinAVRのコマンドがエクスプローラから起動すると上手く動かない

↓続報はこちら

http://bwind.blog19.fc2.com/blog-entry-70.html

こちらの記事は微妙な予想ばっかりだったので、続報だけ見るのが吉かも。

WinAVRとAVRStudioをインストールしまして、SVNにある他人の作ったプロジェクトをチェックアウトしてきて、 ビルド。

winavrさんはコンパイルgnu make を使うので、他のmakeが間違って使われないように PATHに気をつける。 で、ビルドするためにこさえたbatファイルをエクスプローラからダブルクリックして実行すると、

--- /usr/bin/sh: /c/WinAVR/bin/avr-objcopy: Invalid argument ---

こんなのが出るわけですよ。 今度は、コマンドプロンプトを起動して、このbatファイルを実行すると、今度はエラーが出ずにビルドやら他の 作業をちゃんとやってくれる。

…………??

わけわかめエクスプローラからダブルクリックして起動したコマンドプロンプトは、PC起動時の環境変数を使うので、 PATHがちゃんと通ってなかったか?と思って、再起動しても結果は同じ。

batファイルにpath出力させるようにしたら、両者とも全く同じ、作業フォルダも同じ(batファイルのあるディレクトリ)

※両者

 1. エクスプローラからダブルクリックして起動したbatファイル
 2. コマンドプロンプトを起動し、batファイルのあるフォルダまで行って、起動したbatファイル

…………??

わけわかめcygwinが入ってるので、なんかそっちのシェルがでしゃばって勝手にパス解決できないプンスコしてるみたいなんだけど、 お前呼んでないから。つかエクスプローラから起動した時だけ出てくるってどういうことよ。

って、X-Finderお前かー!! ファイラにX-Finderを使ってるんだけど、こいつ経由で起動するとどうやらダメらしい。 "Windowsエクスプローラ"からダブルクリックすると上手くいきました。 さて、X-Finderの設定でも見てみるか…。

(追記) PC再起動したら今度はX-Finderから起動したbatファイルが上手く動いて、Windowsエクスプローラから起動した batファイルが/usr/bin/sh: ~~エラー吐きやがったww これはひどい

AVRStudioから直接ビルドした場合も、上手くいく場合と上手くいかない場合が再起動毎に発生する。 起動回数が偶数(奇数)の時はなんかが頑張っちゃうのか?ざけんなw

SVSが悪さをしているのか、cygwinが悪さをしているのか、はたまたOSなのかPCなのか…。 これはちょっとしんどそうなので、完全にビルド出来なくなるまでは放置かな…。

(さらに追記) setで環境変数全部出して、ビルドできるときとできないときの差分を見てみたら __COMPAT_LAYER=ElevateCreateProcess というのがある時に失敗する。

batファイルの先頭に set __COMPAT_LAYER= として、この設定を削除してから実行すると、失敗している方の起動方法でもエラーがでなくなった。 うーむ。結局ビスたんのせいだったということか…?

Win7でVNCサーバをサービスモードで使えない

サービスの起動と登録自体ははできるんだけど、 ・設定が読み込めない ・設定画面が開けない というわけで、パスワードの設定が変更できない。 認証なしにすると外からおっぴろげになるのでダメ。そもそも設定が変更できない。 ユーザモード(普通のアプリ)で起動すると設定の変更もできるし、外からも繋がるんだけど、 ログオフしたりPC再起動したりするとダメ。スタートアップに登録してても、起動するのはログイン後。 windowsユーザのパスワードを無しにしてみても、win7だとログイン画面が一度出るんだよねー。 RealVNCもTightVNCもどっちも駄目でした。他のVNCはまだ試してない。 Windowsリモートデスクトップは、残念なことにHomePremiumにはサーバ機能が無し。 しょうがないので、PC再起動しないように注意しつつ使ってもらうということで。 多分Vistaからこの状態なんだろうけど、対応するの大変なんだろうか…。 レジストリに設定書けさえすれば、行けそうなもんなんじゃないのか…?