« 2006年6月 | トップページ | 2006年8月 »

2006年7月30日 (日)

アクセス解析(ムリヤリMACアドレス)

アクセス解析をしたりアクセス元を調べるのに一般的に使うのはIPアドレスか出るならホスト名ですが、この値はふつうのユーザーならどんどん変わっていく値になります。なのでその値で制限を書けたりすると、数日後には全く関係の無い人にそのIPアドレスが割り振られていることになります。
LAN内でDHCPサーバーを設定できれば、どのPCにどのIPアドレスを割り振るのか固定することは出来るのですが、そんな設定ができる権限を持っているわけもなく・・・
ネットに繋がっているPC固有の情報はいろいろあるでしょうけど、ネットに繋げてるんだからMACアドレスでしょう。ということに。もちろんMACアドレスも替えることはできるのですが、少なくとも使用者の意思と関係無く替わってしまうことはないはずです。
ただ、基本的にインターネットに繋いでしまえばMACアドレスは必要じゃなく、IPアドレスでやりとりをするので、ネット上には流れていません(PCとプロバイダの間ではMACアドレス≒PCとIPアドレスを結び付けるためのやりとりはしていますが)
で、一応垂れ流してないかなぁと思ってサイトアクセス時の環境変数などみましたが、もちろん見当たりません。
自分のMACアドレスはipconfig /allとしてみたり、WMIを使って表示させることはできるのですが(他にGUIDという手もありますね)、それをネットを介して普通にやると、なんでも出来そうなIEでもその情報にはアクセスできません。とエラーが出て、使えません。
で、ここでずいぶん昔からある技術ですがHTA(HTMLApplication)を使ってみることに。VBSで書いたファイルをHTAという拡張子に変えて、ネットを介してアクセスしてみました。
(作り手にとって)残念なことにXPSP2ではセキュリティー警告が出ますね。でもちゃんとIE上でMACアドレスを取ってくるという目的は果たせました。実行?保存?で保存するとソース丸見えですが。
最終的には最初のアクセス時だけ認証サイト風にこのファイルを呼び出して、MACアドレスを抜いてその値をCookieに覚えさせる。Cookieがある限りHTAは呼ばないように。と考えています。そこまでやらないでもパスワード設定するなどでいいと思うのですが、それだと毎回1ステップ増えてしまい面倒。個別にアクセス制限をかけるときにどこかからパスワード漏れたら意味がないので、ハード的にムリヤリ強制さえようかと。
どれもWindows&IE限定ですが、HTA自体の情報ってあんまり無いものですね。

Javaが得意なら、http://www.ytp.ne.jp/tech/java/sineruka/activexhowto.htmlとかhttp://java.sun.com/products/plugin/1.3/docs/ja/script.htmlにあるようにJavaBeansを使って目的の処理をしたのをActiveXに仕上げる方法もあるかなぁと思いますが、よくわかりません。

| | コメント (0) | トラックバック (0)

2006年7月24日 (月)

今さらF902iの事(時刻補正)

今日、昼休みに携帯を見ると、いきなり時刻も日付も--:--という状態になっていて(特別手荒に使った記憶は無いんですが、かる~~く放り投げる程度はいつものことで)、自動時刻補正をONになってるのを確認した上で、じ~~~~~~~~~~っと待ってましたが、一時間経っても2005年1月1日00:xxという表示(待ち受けは和にしているので画面では雪がちらついてます)パケット通信?と思ってなんどもiモード問い合わせしてみたり、、、もちろん1月1日。雪も降ってます。
・・・
・・・
ググッてみると、どの機種かわかりませんが電源ONのタイミングで補正する。との一文を発見!。F902iのことか確かめず、もちろん急いで電源OFF&ONしました、、、、、。正しく補正されていました(正しいかは判りませんが今っぽい日付と時間に変わってます)
ということは電源をOFFにせず毎日使っていたら、時刻補正は全くされず、でも使っている本人はこの携帯はDocomoが時間を合わせるから、この時間が正確な時間だ!!!と思っているという、、なんとも間抜けな状態だったわけですね。
一週間に1回は電池切れでイヤでも電源OFFになっているので実は時刻補正していないことに気づかなかったのでしょうね。夜中にでも自動OFF&自動ONするように設定をします。

auは時刻補正を選んだらすぐに補正してくれてたので、もちろんDocomoも満を持して付けた時刻補正なので、そのようになっていると信じて、試してませんでした。うかつでしたね

| | コメント (0) | トラックバック (0)

2006年7月22日 (土)

ちょっと恐いです(アクセス解析)

今日ふと、なぜかふと、自分の会社のHPのアドレスがドメイン取って変わったことを思い出して、そういえば前からアクセス解析してたなぁ。と思ってトップページのソースコードを見ていたら、見事にアクセス解析してました。
以前うちの会社で働いていた人(TL氏)に私のブログのアドレスを教えていて、ありがたいことにその方のブログに時々紹介していただいていたのですが、同時にうちの会社のHPアドレスも時々載せておられます。アクセス解析CGIを動かさないようにそのデータを覗いてみたところ、見事に一日一回はそのブログからのアクセスが残っていました。それ以外のアクセス元は検索サイトと就職サイトばっかりで、結構ブログからのアクセスが目立っていました(件数は多くないので見逃してるかもしれませんが)。少し前に私のブログアドレスだけは消していただいていたのですが、ググるともちろん前の状態で表示されます。ということはGoogleのキャッシュを見ると私のブログを見ることはできるはずです。
その方も私もいろんな意味で社内で目立ってしまっているので、社内のちょっとベテランの人間が記事の内容を見ると絶対ヤツだ!!と確信を持たれること間違いない!でしょう。一時少し過激な事を書いていたので、、、>_<

TL氏には、
ご自身のブログに詳しく判るアクセス解析を仕込んで、私の会社のプロバイダからのアクセスを確認して、もしわが社の人間がブログを見ているようなら、超会社寄り(に見えているはず)の人たちとのやり取りを書いていただければと思っています。(夢オチででも)
プロバイダだけを特定してもしょうがないですが、IPアドレス判ればメールヘッダーから確定できそうな気がします。

OperaはGoogleCalendarも見れないですが、テトリス入れました。

| | コメント (0) | トラックバック (0)

2006年7月20日 (木)

ん~~イマイチOpera

職場のPCにもOpera入れてみました。で、普段InternetExplorer(IE)やFirefox(FF)でしていることを置き換えてみました。イマイチよさが判りません!!
確かにいろいろカスタマイズできるのは便利。マウスジェスチャーも便利。それはなんとなく判ります。でもカスタマイズすればするほど、他の人のPCを触ったときにOpera入ってないことに苦痛を感じてしまったり、することになりかねないので、私自身はほとんどカスタマイズしない状態で使うことにしています。一番気になったのはPDFファイルの扱い。いちおうAdobeReader7.08が入っているところへOpera入れたのでPDFファイルを読む環境としてはそろっていると思いますが、OperaでPDFファイル開けないのです。何度やっても白紙の状態で画面が止まってしまいます。設定を見てみるとプラグインを使うようになっているので、AdobeReaderを再度アップデートして(バージョンは変わりませんが)みましたが、全然反応せず。一応AdobeReaderを開く。ということで別ウィンドウが開くようにすると何の問題も無く使えるのですが。IEもFFもプラグインで動くので旧式に戻った感じがします。ネット調べてみたのですが、、、でも、描画は確かに早い気がします(測ってませんけど)。
ウリっぽいウィジットもちょうど秘書君(スケジュールソフト)を消したところだったので、祝日表示対応のCalenderを入れてみたのですが、動作が遅いのとOperaの起動時に自動で表示する機能が無さそうなので >_<
で、あきらめてカレンダーはGoogleCalenderを使うか、YahooCalenderを使うか。どっちにしてもオンラインなのでログインが必要。できたら省きたいんですけど、職場のPCでIDとPWを覚えさせるのは抵抗があるし。Windowsの時計をWクリックして出るカレンダーで良いんですが、時計をロックしてあるので表示されないんですよね。
ちょっと英語表記が気になりますが、GoogleCalenderがAjaxでアプリっぽくて使いやすいかな。と思います。繰り返しの予定の選択肢に毎月末、ってのが欲しいのと、任意の曜日の色を変えられたら良かったんですけどね。

| | コメント (0) | トラックバック (0)

2006年7月17日 (月)

ajaxでJavaScript隠してみます

インターネットで見ているページがどういう方法で実現されているか。それを見るためにはブラウザ(IE,FF、Operaなど)でソースコード(ソースコードが見えるということはそのページの仕組みが丸裸ということ)を表示する。以前紹介したページでも結構いろいろな方法を使っていらっしゃいましたが、、
静的に表示されているレイアウトなどを見られるのは、まぁ手の込んだことしてうまく作ってるなぁ。と思われるだけかもしれませんが、プログラム(Script)部分については、やはり隠したい。でも、外部ファイルにして次々と芋づる式に呼び出していたとしてもソースコードをどんどんたどっていくと、結局はたどりついて暴かれる。IE限定にしてScript Encoderを使ってもdecodeするツールがあるらしい。CGIで作ったとしてもクライアントサイドで実行する部分についてはどうしようもない。というところで、ひらめいたのが流行のAjaxを利用すること。Ajaxについて正しい理解はネットや書籍で見に付けていただければ良いと思いますが、結局はユーザーが入力したものをサーバーとリアルタイムに通信してサーバーから帰ってきた答えに応じて画面を書き換える。というもので、GoogleMapだとか他にもいろいろ活用されているようです。

ユーザーから見えるソースコードにはサーバーとの通信部分しか載っておらず、サーバーから送られてきたデータは画面に反映はしますが、反映した後にソースコードを表示する。メニューで見てもそこにはサーバーから帰ってきた答えは表示されません。

と、ここまで読むとだいたい予想は出来ると思いますが

クライアントからの要求にスクリプト文字列を返して、それを実行させる(eval関数)ことで画面上ではこれまでと変わらない動作をさせる。だけどソースコードを見ても具体的にはわからない。
でも、CGIを呼び出しているのはわかるので、ブラウザから直接そのCGIを叩くでしょう。
それに対してはPOST限定で引数を与えておくことで引数がない状態でCGIを呼び出したときやGETで挑戦したときには拒否する。これにScriptEncoderなどと組み合わせるとやる気がうせるように思います。
Encodeしないで、CGIから戻す値は見た人をガッカリさせるような文章や無意味な文字列の中に\\n(\nは改行\でエスケープ)コマンド。という形で(//はずかしいからみないでよぉ\nalert(\"test\")という感じで)ポツリポツリと埋め込んでいくとかも面白いかもしれません。この辺は受け側の作り方だと思います(javascriptでも正規表現扱えるので一見無意味な文字列が使えそうです)。

これで素直に見せたり、単にコピペで外部ファイルを辿られるよりましだと思います。
CGIスクリプト自体のソースは見えませんので、CGIの中でわかりやすくソースを書いておくことで保守もそんなに手間ではないと思います。

| | コメント (0) | トラックバック (0)

2006年7月16日 (日)

いまさらOpera

JavaScriptを書いているといろんなブラウザが気になってきました。
現在はInternetExplorer(IE:Windowsなんだからもちろん入っています)。Firefox(FF:メインで使っています、ソフトのサイズが小さいのでイマドキじゃないPHS接続でもダウンロードする気になるので)。の2つが使えます。基本はFirefoxでどんどんタブで開いていって要るページだけを残していく。という使い方。ページレイアウトが崩れていたり、スクリプトなどありそうな感じがしたページについてはFirefoxの右クリックメニュー(コンテキストメニュー)にIEで表示(IEViewを入れたから)というのがあるので、それを使ってそのページについてはIEで表示しています。
それで全く不都合はなく、非常に快適に使っているのですが、ブラウザの話題のページを見ているとOperaOperaと目に付きました。で、Operaもフリーで使えるので入れてみようと思い立ちました。

Operaは画面の描画が速い。のがウリだそうです。
ダウンロードはFFに比べるとサイズが大きく時間はかかります。インストールは非常にあっさりと終わって、起動したらすでにブックマークなどはインポートされている状態でした。
FFにしてもOperaにしても設定の自由度が高く、体に合わせられるというのがウリのひとつですが、あんまり設定をいじると別の環境でストレスが思いっきり溜まる(ノートPCのタッピング私は嫌い=苦手なのですが、どのPCでも初期設定で有効になっており、たまに何にもしてないのに別のページに動くとか意図しない動作するのであの設定は自分自身でも切りますし、他のPC触るときにも最初に切りますが)ので、マウスジェスチャーとかには興味はないのですが、タブブラウザということもありOperaはFFと非常に似ています。
(あくまで初期状態で)IEやFFと比べて気になった点
スクロールバーの上にマウスを持っていくとバーの色が変わるのはいいのですが背景と同じような色になってしまうので、長いページをスクロールするときに現在地をつかみにくそう。
アドレスバーにカーソルを持っていったときにInfoseekとAmazonで検索と表示される。Infoseekって使いませんが
でもアドレスバーに検索語を入れるとGoogleで検索がデフォルト
初期状態でいろんなツールバーがなぜか非表示
どれも設定で簡単に変えられそうなんですけどね

タブにマウスを乗せると画面イメージが出るのは便利なのかうっとうしいのか。タイトル無いページばっかりだったら便利なのかな?

メニューバーにウィジットという項目があるのはそれがウリだから?なんかトップメニューとして必要なの?という気はします。とりあえずブラウザを使って見ようという私にとっては???です。

便利そうだと思ったのは、ツールの中にメモ。というのがあって選んだところをメモにコピーできるので、ページを見ていてこの部分の文章チェックというところを何も考えずに選んでメモに送っていったら開いておくタブの数が減らせそうです。
ショートカットはFFに似ているのですが、残念なことに検索バーへの移動がShift+F8でした。これは今後Opera使うか使わないかは別として、FFのCtrl+Kの方が検索のKと覚えやすいのでCtrl+Kに変更しました。なんでも自分用にカスタマイズできるのはいいのですが、設定項目が非常に多いため、このショートカットの変更でもリストをいろいろ探しました。Excelのマクロ記録じゃないですが、実際に操作をして設定する項目が表示されるような工夫があったらふと思いついたときにできていいんじゃないでしょうか。

といろいろ書きましたが、全体的にはIE6のむりやりくっつけた、使いにくいタブ機能と比べると使いやすいです。

Operaは第三の大物ブラウザということらしいのですが、UserAgent(内部的に使うブラウザの名前)ではIEと偽装していたそうで(今入れたのはデフォルトではOpera/9.00 (Windows NT 5.1; U; ja)と表示されました)、そういう歴史もあり、偽装してもユーザーに文句を言われない程度にはIEと同じレイアウトやスクリプトの動作をするのかと思っていましたが、VBScriptやActiveXの非サポートはしょうがないとしても、まず、この記事はOpera上で書き始めたのですが。ココログな方は試してくださったらと思いますが、記事作成画面がInternetExplorerやFirefoxと違って記事の作成タブやフォント設定などが普通に表示されません。Javaスクリプトについても全然100%IE互換ではないですね。UserAgentでOperaをIEと勘違いさせてIEでしか理解しないスクリプトやActiveXの呼び出しは失敗する。なんかイソップ童話のこうもりみたいな気がします。IEの最初がMozillaで始まるのも同じ理由だと思いますので歴史は繰り返すですかね、他のもUserAgent偽装できるし、ブラウザで振り分けてスクリプトを実行させるのは全然使えないなぁ。と思っていたら、クロスブラウザなスクリプトのためにというページでtypeofという関数についての記事を見つけました。(常にトップページに飛びますので、その後メニューから選んでください)新しい関数やブラウザどれかが未対応の関数についてはこれでチェックしてメッセージでも出すように。が一番確実にチェックできますね。

何度も書いてますが、今私が手を加えているサイトはVBScript使うのでIE専用なんですが、IE以外にVBScript理解する一般的なブラウザは無い。でもUserAgentは簡単に偽装できるので、IE専用スクリプトを実行しようとして途中で中断することになる。しかもOperaは公式にUserAgentを偽装している。でUserAgentで振り分けてもうまく行かず困っていたのですが、typeofの記事を見つけてなんかすっきりした気がしました。多少でもJavaScriptを使っているサイトならこれを使うようにしようと思います。

| | コメント (0) | トラックバック (0)

2006年7月13日 (木)

Acrobatのバージョン調べ

前に紹介した(気がする)PDFJを使ってCGIを作っているのですが、調子に乗ってFormにJavaScriptを使ったからなのか(PDFJでForm機能が使えるのは0.89以降のようです)今日、テストをお願いした相手から、Acrobatがエラー?でPDFを表示できない!との連絡を受けました。で、バージョンを見てもらったところ5!?だそうです。最近Acrobatも自動で更新するのでみんな同じぐらいのバージョンだと思っていましたが、5とは。そういえばバージョンアップなんてしてないわ。とのこと。日常見るPDFファイルといえば紙をスキャンして画像としてPDFに変換したものだけで、バージョン5でも見れているので気にしたことすらなかったらしいです。とりあえずAcrobatのバージョンアップをお願いして、その後音沙汰無いのでテストする時間がなかったのか問題なく使えているのかだと思います。で、現在はテストということでほんの数人にお願いしているだけですが、これを公開すると社内のいろんな人が使うようになって、当然同じ質問を浴びることになるでしょうし、事前にバージョンアップしておいてください。と言ってもやらないような人ばかり(うちの会社はこんなのばっかり、トラぶって初めて自分のやらかしたことに気づくんです)>_<。なので、そのページを見ようとしたときにAcrobatReader(AdobeReader)のバージョンを調べて古かったらAdobeのサイトに飛ぶように。ちゃんとバージョンを上げないと使えないようにしようと(我ながら親切なサイトですねぇ)ブラウザからプラグインのインストールとバージョンを調べる方法をググってみました。
ブラウザにプラグインは付き物でそれようの専用関数ぐらいあるやろ。と思っていたら大間違い!!。結構うろうろしました。
そのものズバリ書いてそうなページがhttp://hotwired.goo.ne.jp/webmonkey/99/39/index3a.htmlになります。3ページともみてから、PDFに置き換えて実行してみたのですが、検出されず!!!
いろんなサイト(日本語限定、私は英語読めますが雰囲気だけで読むのでできれば避けたい)をみたところ、バージョン5を検出するのにPDF.PdfCtrl.5と書いてあったので、PDF.PdfCtrl.7に(今入っているのは7.08なので)してみたのですが。検出されず。
でしょうがないのでWeb全体でググってみたところ、http://www.oreillynet.com/cs/user/view/cs_msg/9920にバージョン7からは別の名前として
AcroPDF.PDF.1だと書いてありました。で、変えてみたところやっとのことでちゃんと見つけてくれました。他にhttp://www.aspfree.com/c/a/Windows-Scripting/Detecting-Plugins-in-Internet-Explorer/4/なんかはVBScriptですがズバリ書いてあってそれを思いっきり参考にしました(今回は他にもVBScript使っている関係でIE限定)。これにVBScriptではOn Error Goto Labelを使えないらしいので、OnError Resume Next  とErr.Number<>0とOn Error Goto 0 でとりあえず動作が確認できているバージョン7じゃなければAdobeのサイトへ行くようにしました。
いちおうソース
On Error Resume Next
    IsObject(CreateObject("acroPDF.PDF"))'バージョン7以上
if(Err.Number<>0) then
msgbox("Acrobatが古いので次のページでバージョンを上げてから再挑戦してください")
location.href="http://www.adobe.com/jp/products/acrobat/readstep2.html"
end if
On Error Goto 0
'以下参考までに。バージョン5以上でよければ、5,6,7の全てをCreateObjectしてエラー値の積がゼロなら5以上が存在するとか、毎回if~Thenしても良いし。
'checkForAcroRead7 = (IsObject(CreateObject("acroPDF.PDF.1")))
'checkForAcroRead6 = (IsObject(CreateObject("PDF.PdfCtrl.6")))
'checkForAcroRead5 = (IsObject(CreateObject("PDF.PdfCtrl.5")))
'checkForAcroRead4 = (IsObject(CreateObject("PDF.PdfCtrl.4")))
'checkForAcroRead3 = (IsObject(CreateObject("PDF.PdfCtrl.1")))

参考ページにはJavaScriptでIEだけじゃなくNNとかでも使えそうなのが書いてあるのですが。今回はIE限定だし。まぁ良いかと。JavaScriptで書いてあるのをみると結構ごちゃごちゃして見えるので、ソースを覗く気にはならないかもしれないですね。

| | コメント (17) | トラックバック (1)

2006年7月 4日 (火)

面倒だと思うことは機械に任せるべし

これまでCGIで伝票を作ることをやってきたのですが、まぁ普通に使う分には完成かな。と思ったので、後はテスター募集して、トラブル無ければ公開予定なのですが、ここで私自身にちょっと問題が、商品マスターを更新しないといけないのです。商品マスターを更新。といっても誰かが常に最新のファイルをインターネット上に公開してくれているのです。ですので私自身がすることは、更新されているかのチェックをして、更新されていたらダウンロード&圧縮されているのを解凍して必要な処理(今の場合は文字コードをSJISからEUCへ)をして、そのファイルをアップロードする。作業なのです。ファイルが更新されているかをチェックして更新されていたら手作業でやってもいいのですが、当然面倒。ダウンロードして機械的に変換してアップロードって自動でできそうやん。と思い立ったわけです。ダウンロードとアップロードはず~~~っと昔にCでやったので、それをそのまま使う。更新確認はヘッダーを見れば良い。文字コード変換もVectorを見るといくつかライブラリがある。でそれを組み合わせれば出来そうです。
FTPを使ったアップとダウンはhttp://www.dinop.com/vc/ftp_wininet.htmlとかhttp://www.geocities.jp/monalipse/c/wininet/upload.htmlやhttp://forums.belution.com/ja/vc/000/044/37.shtmlにも書いてますね。Winsockでもできたはず。LHA形式を解凍するのでもちろんlhaを使うか。解凍だけなので7zipでも使ってみるか。
で、作ったのを手元にあるネットに繋がるPCに入れておいてスタートアップにでも入れておけば毎朝必ずチェックすることになるので、私が日々なんにもしなくても済むかなぁとか思っています。職場にある私のPCはJavaもPerlも入れてるのでそれらを使ってもいいのですが、都合によっては本社のPCに入れてもらおうかなぁと思っているのでそれらの環境を必要とするのは拒否される一因になることも考えられるので止めておきます。単に本社は光接続。我が職場も常時接続なのですがADSL10M。差分のダウン&アップロードじゃなく、更新されていたときは商品マスター全体をでもADSLが来ていない場所にある支店はPHSとか使っているそうで、そんな場所じゃなくて良かったなぁと思っています。
最初はCGIを使って、ダウンロードというよりはサーバーのsocketを使って元ファイルを取ってきて。とか考えてたのですが、解凍部分をどうしよ、と(調べてはいないのですが)いうのと、定期的に実行させるのにサーバー上でcronはさすがにやりすぎかなという思いがあるのとでやめました。

| | コメント (0) | トラックバック (0)

今日は副業日和(決算ごとにリセット)

昨日はめちゃくちゃヒマでした。来客数も少なく、それぞれ滞在時間も短かったです。ヒマな時期なのでしょうか。
なので、副業というかず~~っと前から取り組んでいる伝票づくりが非常にはかどりました。正しく使えばほぼ完成といえるかな。と思ってます。正しく使えば。というのは入力値のチェックとか必須項目のチェックとか、CGIなのでタグ対策とかはまだ手をつけていないのです。なんの値も入れなくても伝票を作成して伝票Noだけは繰り上がってしまうのです。伝票Noって決算ごとにリセットされたほうが良いらしいです(うちの場合)。決算は(たしか)9月なので2006.10.1からまた新たに1から始めるということで、決算日の前後を判断する条件をどうしようかと思っていたところ、月の数字を10分の1して、小数点一位切り捨てするとちょうど0or1になるのでその値に年でも足せば、今年で考えると2006年9月までは2006。となって2006年10月は2007。同じく2007年1月から9月までは2007。それで解決できました。Noについては一番単純なアクセスカウンターのコードをそのままつかってまぁOK。PDFJへもRC バージョンを使ってJavaScriptも入れられたので、順調にすすんでます。

| | コメント (0) | トラックバック (0)

« 2006年6月 | トップページ | 2006年8月 »