« 2006年5月 | トップページ | 2006年7月 »

2006年6月28日 (水)

シス担でもないのに

明日は本社に参上する日なのです。
いつもは行って、時計をチラチラ見ながら、ただえらいさんの話を聞いているだけです。トイレ行きたいなぁと立つタイミングを図っていたりもしてますね。
でも、明日はちょっと参加しないといけません。

うちの会社は棚卸と言ったら、未だに紙に書き出してるのです。まぁ商品にバーコードなどが付いていないのでしょうがないのですが、単に五十音順に出てくるだけで、棚番を入れて振り分けとかってできないので、そのリストだけで棚卸をしようとするとあっちウロウロこっちゴソゴソしないといけないのです。それを軽減するために、別の場所においてある商品のリストを棚卸の前に作ったりするのですが、当然種類が増えたり減ったり・・・そのたびに書き換えたりしないといけないので、五十音で並んだデータを取ってこれるようになったので、振り分けるようなのをExcelで作ったのですが(こんなことって誰でも思いつくと思うのですが)、それがちょっとおもしろいということなのか、現状本社へ提出する書式と似せて作り、ひとつの棚卸のやり方の提案として発表するようにと言われてしまいました。
書式を変えて、Excelから出したリストで提出してもよい。という確認は取れたのですが、それを明日店長さんたちの前で発表しろ。といわれました。サルでも使えるかも。という使い勝手を狙って作ったので、データを取り込んで振り分ける。全部印刷する。クリアする。の3つのボタンで用が足りるようにしてしまったのです。だから説明しろと言われても、、、という感じです。別に注意することも無いし。
だから、レジュメもプレゼン資料も無いし、説明する内容もぶっつけ本番で口からでまかせ。プロジェクター用意してくれるらしいので、実演するだけです。実演も自分がやるのは面倒なので、だれかを指名してやってもらおうかと思ってます。
店長さんの中には、的外れな質問を的外れな人に投げかける(ソフト屋さんにうちの会社の決まりごととの整合性の質問をして困らせたり、、)とい う難しいことをされる残念な方が数人いらっしゃるので、(おもわず小声で突っ込んでしまいます)その方々の質問を軽~く裁けたら(それは全っ然!関係ないので、私に聞いていただいてもしょうがないですね。○○さんに聞いてください。とか、それは○○さんどうですか?とか)気持ち良いやろなぁ。とだけ思ってます。

シス担でもない私が作ったマクロでいいの?とは思いますが、提案ということで使用は任意だそうなので、良いんでしょうね。

明日の会議室はネット環境がないということで、ネット経由で認証というか使用チェックする部分ははずしたのを使いますが、実際には振り分けるときにネット経由で利用のログを取る予定です。表向きは利用状況の確認&バージョンアップやバグフィックス時の連絡用。としていますが、ありないぐらいムカッとさせられた方には常にエラーを起こさせたり。というよからぬこともギリギリ想定内です

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

2006年6月20日 (火)

どうがんばっても面倒なので、無断でサーバー

CGIを作るのにWindowsにActivePerl環境で作業しているのですが、どうもOKボタンとかを押して画面が変わってどうこう。というところのテストをするのが面倒なのです。といってプロバイダへTELNETできるからそっちを使ってみようと思ったら、いいところでお客さんが来る。で戻ってきたらTimeOutで切断されてる。当然保存していない分は破棄ということ。FFFTPとかを使って、FTPで繋ぎっぱなしで編集するたびにアップでも良いかなぁ。とも思うけど、こっちもやっぱりタイムアウトとかあるし。今やってるのは自分自身が乗り気じゃない&しばらく間が空いて再開という状況で、なかなか気力が続かない。結構どうでもいいようなホームページとかをうろうろしながら、「あぁ~こんなことしてたらアカンわ!」と思っては作業に戻っての繰り返し。その間にお客さんが来るし。そこで、しょうがないからこっそりとWebサーバー(Apache)のWindows版を仕事PCに入れてやろう!!と。そうしたらタイムアウトとおさらば(古っ)できるし。デモしようというときもLANケーブルとか無線LANに参加させる必要もないし(でもMy仕事PCでデモするって言う前に、デスクトップとかブックマークとか整理しないと。見られるとまずい!!ってものが徐々に増えていろんなところに点在している我が仕事PCなので、人が覗くとびくっとします)
最近ウイルス対策兼ファイアーウォールソフトも入ってるし、ADSLモデムで外から80番と8080番のポートへのアクセスを許可しないで、http://localhost/~~。ってするようにしたら大丈夫でしょう。

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

2006年6月18日 (日)

同意?不同意でムリヤリ?

教え子の中学生にみだらな行為 愛知・西尾
2006年06月18日19時18分
 愛知県警は18日、教え子の女子生徒にみだらな行為をしたとして、愛知県西尾市平坂町、同市立中学校教諭中村庸男容疑者(44)を県青少年保護育成条例違反の疑いで逮捕した。
 西尾署などの調べでは、中村容疑者は3月中旬から下旬にかけ、同市内の住宅や車の中で2度にわたって教え子の少女が18歳未満であることを知りながら、みだらな行為をした疑い。5月上旬に生徒の母親が西尾署に相談し、同署などが調べていた。
 同市教委は、中村容疑者がかぎのかかる部屋で女子生徒を指導しているなどという匿名の電話を4月26日に受け、校長に指導を指示。数日後に「誤解を受けることがないよう指導した」と報告を受けたが、実際に問題行為があったかどうかなどは確認しなかったという。校長は「指導熱心な先生だが、そのような行為があるとは警察から連絡があるまで想像もしていなかった。市教委への電話以外にこの問題について指摘を受けたことはなかった。関係者の方々にご心配をかけ申し訳なく思っています」と話している。
 同市教委は事実関係を確認して、中村容疑者の処分を検討する方針。

なかなか勇気ある先生の行動です。電車の中で女子中学生が痴漢にあって相手が普通のサラリーマンとかだったら、ニュースになるほどのことでもないんでしょうけど、先生が自分の教え子ってどうなのでしょうね。よく言われる漢字の使い分けの説明で、師と士があります。”士 師 使い分け”などでググってみるといろんなページが見つかります。たとえばhttp://www.kyoiku-shuppan.co.jp/kokugo/tebiki.html#%82p5%81@%81u%81E%81E%81E%8Em%81v%81u%81E%81E%81E%8Et%81v%81u
師の方は教える人や導く人。とあります。まぁそれらの意味に100%したがって使っているわけではないんでしょうね。でも商売道具である教え子に手を出すのはいかんでしょうね。

逮捕されたのは18歳未満に手を出したこと=青少年保護条例違反なので、わが町の青少年保護条例(夜間外出で一時TVを騒がせたような記憶が)を見てみると、

何人も、青少年(六歳以上十八歳未満の者(婚姻により成年に達したものとみなされた者を除く。))に対しみだらな性行為又はわいせつな行為をしてはならない

と書いてあります。みだらな性行為ということは普通の性行為はいいんでしょうか?みだらとは、SMとかスカトロとか???ナニが基準なのでしょう。「何人も」ということは、男女とも初体験が18歳未満の人は存在しないということ?「何人も」ということは、高校生で初体験は青少年保護条例違反ということ??高校生とちぅするのはみだら?それともアリ?「何人も」ということは、高校生同士は良くて大人が高校生に。というのが良くないってことは無いんだろうし?なんか難しい。

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

2006年6月13日 (火)

今日もやっぱりヒマでした

恐れていたことが、今日も昨日に引き続き仕事中忙しくなかったので、しょうがないので(自分の中で)先延ばしにしていた、書類フォーマットを作る作業をし始めました。
PDFJをもちいて最終的にPDFファイルを作りたいのですが、既存のPDFファイルにレイヤーで文字を当てられるなら、ExcelからPDFなどで一度フォーマットを作ってしまえばいいのですが、PDFJではそういうことができず、ファイルを差し込むとしたら画像ファイルしかないのです。画像ファイルでは文字が画像になってしまうため、ちょっとでも画像を拡縮すると文字がガタガタになってがっかりな出来になりそうなので、不採用として、毎回定型書類を作ることにしました。なので数値で座標や長さなどを指定しなくてはいけないので、ちょっと書いては実行してみてAdobeReaderで確認するの繰り返しです。とりあえず2枚必要なのですが、面倒なほうの一枚は多分完成。項目の過不足だとかがあったら面倒なので、いちおう出来たのを確認してもらっています。
単純にExcelで作って書くセルの幅高さを調べてその数値を使ってもいいのですが、Excelってイマイチそういう用途には使いにくいんです。画面上で印刷できるサイズだと思っても実際出してみたらうまく収まっていない。ということがあるのと、セルの高さ幅の指定が自由なようで勝手に調節されてきっちりした数値でとれないとか。ペイントだとかDTPソフトで、線の始点終点座標や文字枠の座標を指定した単位で出力するようなソフトって見当たらないものです。

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

昨日は掃除

とりあえず、
あ~~ぁ。残念でした。W杯初戦落としてしまいました。しかもすぐそこまで勝ちを引き寄せながら、、、引き分けで終わってもしょうがないなぁって思ってたらずるずると負け確定。交代した人が活躍したオーストラリアと残念ながら見せ場がなかったように見えた日本のちがいかな。という感じはしましたが、最初日本がリードしたときはオーストラリアが前掛かりになるからうまくしたら追加点。って言ってたのを全然うまく出来ず。逆に3点目なんて前掛かりになっているところをうまくされたという感じで、2バックってなんや?そんなの聞いた事ないなぁと思ってたら、案の定でした。と、W杯の初戦批評とあと2戦の希望をどこかに見出すことは専門家に任せておいて。
昨日(気分は今日ですが)は結構仕事に時間が取れたのですが、やらなきゃいけない作業はどうしても気分が乗らずに、、さぁ何しようかなぁと考えた末。身の回りを掃除していました。そういえば、学生のときに中間期末テストの直前追い込みとかや~~な科目の前には思い出したかのように掃除していたことを昨日のことのように?思い出しました。なんとなく散らかっていたのがすっきりして良かったのですが、今日(気分は明日)も仕事中に時間が取れたら、今度こそやらなきゃいけない仕事を少しでも進めないと。っとおやすみなさい

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

2006年6月11日 (日)

CPIを契約したのに

うちの会社は最近CPI(ドメインを調べたらCPIとのことでした)と契約して、独自ドメインをとったのです。ついにわが社も社名.co.jpのサイトができるんだ~。と喜んでいたのです(イマドキは企業の公式HPアドレスがプロバイダのスペースでは恥ずかしいと思うのは私だけでしょうか)。でCPIでは最安プランでも200個のメールアドレスが付いてくるのです。付いてくるということは使っても使わなくても同じ料金なので、採用活動担当者に「ついに独自ドメインのメールが使えるみたいなのでゼヒ取得してください」と言っておきました、これまではどうされていたのか知りませんが、プロバイダのメールアドレスか個人のメールアドレスを使っていらっしゃったことだと思います。ドメインが結構長いので、名刺にはQRコードも付けたら携帯からでも気軽にメールできますよ、とも付け加えておきました。
それで大丈夫だと思ったら、会社のシス担からわけのわからないことを言われて、メールアドレス取得を再考するようなことをききました。シス担は会社ドメインのメールは一度本社で取り込んで、それを転送する形になる。と言ったらしいです。それを聞いてそう言ったのが確かならアホちゃうかと。思いました。

CPIがプロバイダならそのプロバイダ経由でないとPOPやSMTPサーバーに接続できない。という事をするのかもしれません。でもそんなことをしたら逆に不便といわれるだけ。
たしかにプロバイダには25番ポートブロックについてという他社の送信(SMTP)サーバーへの接続を拒否しているということが書かれているのですが、逆にCPIにはその対策として別のポートを用意している。と書かれています。25番ポートブロックについてだけチェックしていたら、そういう答えになるのかもしれませんが、CPIにはWebメール機能もあり、メールソフトと比較して少し不便かもしれないが、とWebメールの存在も説明すれば。と思います。
一番手っ取り早いのは、そのメールについての受信はCPIのPOPサーバー。送信はプロバイダのSMTPサーバー使えば良いことで簡単に解決できるような気はするんですけどねhttp://www.kcn.jp/faq/mail.xml。プロバイダのSMTPサーバーがPOPbeforeSMTPを採用していたとしても、起動時に受信操作をさせて、POPbeforeSMTPの有効時間ごとにメールを取りに行くように設定する。ではいかがでしょうね。これがダメならCか何かで同様のことをバックグラウンドでさせればいいだけですし。
そこへ考えが及ばないのか、単に面倒だからか、、、

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

ほそなが~~い領収書

今、定型書類を作っている(本当にやりたいのはその中に自動で項目を入れること)のですが、スペースの関係で領収書が縦5cm横A4の横幅サイズ程度で作らなければ収まらないような感じです。多少は高さも高く出来ると思いますが、どう考えてもこう考えても、、バランスが悪い。その中に、伝票と同じ明細(品名と数量だけですが)を盛り込む必要があり、、なかなか困ったものです。良くある領収書はいわゆるAとかBとかサイズなので、市販の領収書を見ても大して参考になっていないように思います。なんといっても縦横比が1:4なのです。横を小さくするとそこで切らないといけないので、面倒!。とか、そういうことを言われるのも癪ですし、明細を入れなければいけないのでスペースが余っているわけでもないんです。収まることは収まるのですが、なんかバランスが悪いんです。きっちりデザインをExcelで作って渡してくれ!と言ったのに、さんざん待たせて送られてきたのはどう見てもそれを見て1枚のPDFとして作るという、こちらの都合は全く考えられていないもので。やっつけ仕事で作ったものでした。
Excelできっちり作ってあったら、RowHeightとWidthのプロパティーを取得して(両方とも単位はポイント)そのままの座標を使えたのに、、そしたらこんなこと悩まずに今頃本題の部分をささ~っと作っていられたのに。
レイアウトってホント苦手

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

2006年6月10日 (土)

ユーザーチェック

いろんなソフトを作って社内に非公式に公開する。というときに、いろいろとユーザーを認証する方法を考えます。うちの会社ってあんまり横のつながりがないからなのか、私が自己責任!!!ってしつこく言うからか、あんまり妙なところへ広がったりはしていません。どうやったらいいかなぁって思ったときに、今どきは常時接続なので、WinXPのようにオンライン認証かな。と思います。認証ってほどでもなくて、使っている相手の情報を取り込んだ上で、そのまま許可すればいいので、起動ごとにネットに情報を送って、それを記録してOKのデータを返すことにしました。ネット上の特定のページへアクセスしてそこでCGIを動かせば簡単なので、主にローカルで使うExcelについてHTTPアクセスしてデータを送って。って調べてみると。http://www.happy2-island.com/access/gogo03/capter90100.shtmlにそのまんま載っていました。といっても複数ページにわたっているので、最初の宣言部分が省略されていたりで、うろうろしましたが、いい感じで動きます。CGIから帰ってきたデータを確認するだけで良いので、データをファイルに保存する部分はコメントアウトして、代わりにchr関数で文字列を取り出しています。保存が必要ならその部分を有効にすれば保存できます。データを送って受け取る。最終的なサンプルの宣言部分を補完したものを引用しておきます。

'変数の定義 ※(General)(Declarations)です
Private lngWinINet As Long 'インターネットハンドルの保存用
Private lngHttpHnd As Long 'HTTPハンドルの保存用
Private lngReqHnd  As Long 'HTTPリクエストハンドルの保存用
Private strBuffer  As String * 1024 'サーバからの応答保存用
Private lngLength  As Long '応答結果のデータ長
Private bytDataArea() As Byte '取得したファイルの保存用
Private lngDataLength As Long '取得したファイルのデータ長
Private lngSavePos    As Long '取得中ファイルの保存位置

Private Declare Function HttpOpenRequest _
            Lib "wininet.dll" _
          Alias "HttpOpenRequestA" _
         (ByVal hConnect As Long _
        , ByVal lpszVerb As String _
        , ByVal lpszObjectName As String _
        , ByVal lpszVersion As String _
        , ByVal lpszReferer As String _
        , ByVal lpszAcceptTypes As String _
        , ByVal dwFlags As Long _
        , ByVal dwContext As Long) As Long

'dwFlags(ダウンロード方法)
'キャッシュを無視し、サーバから強制的にダウンロード
Private Const INTERNET_FLAG_RELOAD        As Long = &H80000000
'ダウンロードファイルをキャッシュに加えない
Private Const INTERNET_FLAG_DONT_CACHE    As Long = &H4000000
'サーバから再読み込みします
Private Const INTERNET_FLAG_RESYNCHRONIZE As Long = &H800
'キャッシュできないときに一時ファイルを生成
Private Const INTERNET_FLAG_NEED_FILE     As Long = &H10
'有効期限、最終更新時刻がサーバから返されない場合は強制的に再読み込み
Private Const INTERNET_FLAG_HYPERLINK     As Long = &H400

'(General)(Declarations)へ記述します
Private Declare Function HttpSendRequest _
            Lib "wininet.dll" _
          Alias "HttpSendRequestA" _
         (ByVal hRequest As Long _
        , ByVal lpszHeaders As String _
        , ByVal dwHeadersLength As Long _
        , ByRef lpOptional As Any _
        , ByVal dwOptionalLength As Long) As Boolean

    '(General)(Declarations)へ記述します
Private Declare Function HttpQueryInfo _
            Lib "wininet.dll" _
          Alias "HttpQueryInfoA" _
         (ByVal hRequest As Long _
        , ByVal dwInfoLevel As Long _
        , ByVal lpvBuffer As String _
        , ByRef lpdwBufferLength As Long _
        , ByRef lpdwIndex As Long) As Boolean

'dwInfoLevel(取得内容)
'コンテンツの種類
Private Const HTTP_QUERY_CONTENT_TYPE     As Long = 1
'データ長
Private Const HTTP_QUERY_CONTENT_LENGTH   As Long = 5
'サーバ日付
Private Const HTTP_QUERY_DATE             As Long = 9
'更新日時
Private Const HTTP_QUERY_LAST_MODIFIED    As Long = 11
'HTTPリクエストの結果コード
Private Const HTTP_QUERY_STATUS_CODE      As Long = 19
'ヘッダー情報
Private Const HTTP_QUERY_RAW_HEADERS_CRLF As Long = 22
'サーバ情報
Private Const HTTP_QUERY_SERVER           As Long = 37
'要求したメソッドの種類
Private Const HTTP_QUERY_REQUEST_METHOD   As Long = 45

'(General)(Declarations)へ記述します
Private Declare Function InternetReadFile _
            Lib "wininet.dll" _
         (ByVal hRequest As Long _
        , ByRef lpBuffer As Any _
        , ByVal dwNumberOfBytesToRead As Long _
        , ByRef lpdwNumberOfBytesRead As Long) As Boolean

'(General)(Declarations)へ記述します
Private Declare Function InternetCloseHandle _
            Lib "wininet.dll" _
         (ByVal hInternet As Long) As Boolean

'(General)(Declarations)へ記述します
Private Declare Function InternetConnect _
            Lib "wininet.dll" _
          Alias "InternetConnectA" _
         (ByVal hInternet As Long _
        , ByVal lpszServerName As String _
        , ByVal nServerPort As Long _
        , ByVal lpszUsername As String _
        , ByVal lpszPassword As String _
        , ByVal dwService As Long _
        , ByVal dwFlags As Long _
        , ByVal dwContext As Long) As Long

'nServerPort(接続ポート)
'FTP
Private Const INTERNET_DEFAULT_FTP_PORT    As Long = 21
'GOPHER
Private Const INTERNET_DEFAULT_GOPHER_PORT As Long = 70
'HTTP
Private Const INTERNET_DEFAULT_HTTP_PORT   As Long = 80
'HTTPS
Private Const INTERNET_DEFAULT_HTTPS_PORT  As Long = 443
'SOCK
Private Const INTERNET_DEFAULT_SOCKS_PORT  As Long = 1080

'dwService(サービスの種類)
'FTP
Private Const INTERNET_SERVICE_FTP    As Long = 1
'GOPHER
Private Const INTERNET_SERVICE_GOPHER As Long = 2
'HTTP
Private Const INTERNET_SERVICE_HTTP   As Long = 3

'dwFlags(オプション)
'PASSIVEモードで接続(FTP時)
Private Const INTERNET_FLAG_PASSIVE = &H8000000

'(General)(Declarations)へ記述します
Private Declare Function InternetOpen _
            Lib "wininet.dll" _
          Alias "InternetOpenA" _
         (ByVal lpszAgent As String _
        , ByVal dwAccessType As Long _
        , ByVal lpszProxyName As String _
        , ByVal lpszProxyBypass As String _
        , ByVal dwFlags As Long) As Long

'dwAccessType(接続方法)
'全てのホスト名をローカルで解決します
Private Const INTERNET_OPEN_TYPE_DIRECT    As Long = &H1
'既存の設定(要はIEの設定)を利用します
Private Const INTERNET_OPEN_TYPE_PRECONFIG As Long = &H0
'プロキシサーバ経由で接続します
Private Const INTERNET_OPEN_TYPE_PROXY     As Long = &H3

'dwFlags(ネットワーク使用有無)
'サーバーから取得します
Private Const INTERNET_FLAG_ASYNC       As Long = &H10000000
'キャッシュから取り出します(ネットワークを使用しません)
Private Const INTERNET_FLAG_FROM_CACHE  As Long = &H1000000

Sub prcHTTPReadFileSample()

    Dim lngRc     As Long
    Dim lngStatus As Long

    'インターネットサービスをオープンします
    lngRc = fcInternetOpen

    'オープンに成功したらHTTPサーバとの接続と切断を行います
    If lngRc = 0 Then

       'HTTPサーバへ接続します
       lngRc = fcHTTPConnect("www.yahoo.co.jp")

       '接続に成功したらリクエストを初期化します
       If lngRc = 0 Then
          lngRc = fcHTTPOpenRequest("GET", "index.html")
       End If

       'リクエストの初期化に成功したら、リクエストを送信します
       If lngRc = 0 Then
          lngRc = fcHTTPSendRequest
       End If

       'HTTPステータスコードを取得します
       If lngRc = 0 Then
          lngRc = fcHTTPQueryInfo(HTTP_QUERY_STATUS_CODE)

          'HTTPステータスコードを保存
          lngStatus = CLng(strBuffer) '取得した値を数値型に変換

          'HTTPステータスコードが200番台(ファイルあり)
          '以外なら以下の処理を実行しないように設定
          '(サーバの設定により、なぜか200を返す場合もあります)
          If lngStatus < 200 Or lngStatus > 299 Then
             lngRc = 9
          End If

       End If

       '対象のファイルをダウンロードします
       If lngRc = 0 Then
          lngSavePos = 0    '保存位置を初期化
          lngDataLength = 0 '取得データ長を初期化
          lngRc = fcHTTPReadFile 'ファイルの取得処理
       End If

       'ダウンロードしたファイルを保存します
       If lngRc = 0 Then
       Sum = Chr(bytDataArea(0)) & Chr(bytDataArea(1))
'          Call fcDataSave("c:\happy", "news.html")
       End If

       'HTTPリクエストをクローズします
       Call fcHttpRequestClose

       'HTTPサーバから切断します
       Call fcHTTPDisConnect

    End If

    'インターネットサービスをクローズします
    Call fcInternetClose

End Sub

Function fcHTTPReadFile() As Long

    Dim tmpIndex        As Long
    Dim lngSize         As Long
    Dim i               As Long
    Dim tmpBuffer(1023) As Byte

    'ファイルはいくつかに分割して受信するため
    'Do~Loopで(InternetReadFileを)複数回繰り返します
    Do

       strBuffer = vbNullString
       lngSize = 0

       'ファイルを取得
       Call InternetReadFile(lngReqHnd _
                           , tmpBuffer(0) _
                           , 1024 _
                           , lngSize)

       'InternetReadFileが正常時のみ
       'データの保存処理を実行
       If Err.LastDllError = 0 Then

          '取得データ長が0なら取得終了
          If lngSize = 0 Then
             Exit Do
          End If

          'データ長の加算と取得データ保存領域の拡張
          lngDataLength = lngDataLength + lngSize
          ReDim Preserve bytDataArea(lngDataLength)

          '取得したデータの保存(一時領域から保存領域へ)
          For i = 0 To lngSize - 1
              bytDataArea(lngSavePos) = tmpBuffer(i)
              lngSavePos = lngSavePos + 1
          Next

       End If

    Loop

    '何らかのデータを取得しているときは
    '取得データ保存領域のデータ長を調整
    If lngDataLength > 0 Then
       ReDim Preserve bytDataArea(lngDataLength - 1)
    End If

    'この関数の戻り値には、APIの処理結果コードを返します
    fcHTTPReadFile = Err.LastDllError

End Function

Sub fcDataSave(strPath As String, strFileName)

'    'ファイルの保存はバイナリモードで行うため
'    'ADO.Streamを使用します。
'    'ADO.Streamを使う場合は「ADO 2.5以上」を指定しましょう
'
'    Dim objADOStream As New ADODB.Stream
'    Dim objFS        As Object
'
'    Set objFS = CreateObject("Scripting.FilesystemObject")
'
'    '保存形式はバイナリモード
'    objADOStream.Type = adTypeBinary
'    objADOStream.Open
'    objADOStream.Write bytataArea
'
'    'データの保存(adSaveCreateOverWriteは上書きの意味)
'    objADOStream.SaveToFile objFS.BuildPath(strPath, strFileName) _
'                          , adSaveCreateOverWrite
'
'    objADOStream.Close
'
'    Set objFS = Nothing
'    Set objADOStream = Nothing

End Sub

Function fcHTTPQueryInfo(lngInfoLevel As Long) As Long

    Dim tmpIndex As Long

    lngLength = 1024 '初期値はstrBufferの長さ
    tmpIndex = 0
    strBuffer = vbNullString

    'APIの実行/サーバからの応答を取得
    Call HttpQueryInfo(lngReqHnd _
                     , lngInfoLevel _
                     , strBuffer _
                     , lngLength _
                     , tmpIndex)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcHTTPQueryInfo = Err.LastDllError

End Function

Function fcHTTPOpenRequest(strMethod As String, strURL As String) As Long

    Dim tmpURL    As String * 255

    'URLは255バイトの固定長文字列で渡す
    tmpURL = strURL

    'APIの実行/リクエストを初期化
    lngReqHnd = HttpOpenRequest(lngHttpHnd _
                              , strMethod _
                              , tmpURL _
                              , "HTTP/1.1" _
                              , vbNullString _
                              , vbNullString _
                              , INTERNET_FLAG_RELOAD _
                              , 0)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcHTTPOpenRequest = Err.LastDllError

End Function

Function fcHTTPSendRequest() As Long

    'APIの実行/リクエストを送信
    Call HttpSendRequest(lngReqHnd _
                       , vbNullString _
                       , 0 _
                       , vbNullString _
                       , 0)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcHTTPSendRequest = Err.LastDllError

End Function

Function fcHttpRequestClose() As Long

    'APIの実行/インターネットサービスをクローズ
    Call InternetCloseHandle(lngReqHnd)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcHttpRequestClose = Err.LastDllError

End Function

Function fcHTTPConnect(Server As String) As Long

    'APIの実行/HTTPサーバへ接続
    lngHttpHnd = InternetConnect(lngWinINet _
                              , Server _
                              , INTERNET_DEFAULT_HTTP_PORT _
                              , vbNullString _
                              , vbNullString _
                              , INTERNET_SERVICE_HTTP _
                              , 0 _
                              , 0)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcHTTPConnect = Err.LastDllError

End Function

Function fcHTTPDisConnect() As Long

    'APIの実行/HTTPサーバから切断
    Call InternetCloseHandle(lngHttpHnd)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcHTTPDisConnect = Err.LastDllError

End Function

Function fcInternetOpen() As Long

    'APIの実行/インターネットサービスをオープン
    lngWinINet = InternetOpen(vbNullString _
                            , INTERNET_OPEN_TYPE_PRECONFIG _
                            , vbNullString _
                            , vbNullString _
                            , 0)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcInternetOpen = Err.LastDllError

End Function

Function fcInternetClose() As Long

    'APIの実行/インターネットサービスをクローズ
    Call InternetCloseHandle(lngWinINet)

    'この関数の戻り値には、APIの処理結果コードを返します
    fcInternetClose = Err.LastDllError

End Function

マクロを含んだExcelファイルに使ったユーザー名やメールアドレスなどを取ってきてCGIへ送ったらあとでCGI設置サイトの管理者がチェックすることができます。

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

2006年6月 9日 (金)

物知りになった気分

封筒の数え方ってなんなんだろ~~。と思って調べてたら見つかった、福島中央テレビのページ。数え方だけじゃなく、ほんとにいろんなことが書いてあって、
著名作品の書き出し書き終わり。とかって確かに知ってたらちょっと賢そうにみえるかもって思うし。モールスとか手旗信号って自分が知っていても多分一生使わないと思うような内容も。
わざわざ勉強って程のことでも無いと思うけど、ちょっとおもしろいページ。ちょっとしたことをネットで調べる時にまず最初に見るようにしてもいいかな。とは思いました。

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

2006年6月 8日 (木)

今度は添付メール送信用Perlモジュール

またまた、久しぶりでなかなか毎日続けて投稿できません。
ちょうど今サイト上で作った定型書式のファイルを印刷して。ということで、その書式作りで四苦八苦しているのですが、そんななか、印刷するのではなく、そのファイルを無理やり提出先にメール送信できないかなぁと、
普通にsendmail使ってもいいのですが、文字コードの変換だとか、非常に直感的ではない。しかも添付ファイルを送信。となったらなかなか一筋縄ではいけないようです。
そこでいろいろ調べまわって
http://script.lovely.to/bbs/infolng.cgi?print+200101/01010034.txt
http://www.rescue.ne.jp/CGI-BBS/database/database/20010809002231.shtml
見つけたのがMIME-Lite Perlモジュールの総本山CPANが配布しているものなので信頼度もあるかと思います。
http://search.cpan.org/~yves/MIME-Lite/
ここのドキュメントには非常にわかりやすい例がたっぷり掲載されていて、しかもサーバー上でsendmailを利用するだけじゃなく、自分のPCのSMTPサーバー(メール送信用サーバー)を使うこともできます。利用するためにはPerlが必要なのでActivePerlなどを入れておく必要はありますが、
モジュール自体はhttp://script.lovely.to/bbs/infolng.cgi?print+200101/01010034.txtに書いてあるようにインストールしなくても使えます。
=====引用始め=================================================

まず、ダウンロードしたファイルをサーバにアップロード、
tar zxvf でほどく。
その後、そのほどかれたディレクトリに入って、
MIME/Lite.pmというファイルがあるので、
自分のホームディレクトリにたとえば
PM/Module
というディレクトリを作って、
そのディレクトリの下に
MIMEというディレクトリを作り、その下にLite.pmをコピーする。

そして、Perl Scriptのshebang文の後に
use lib qw (/path/to/your/home/PM/Module);
とすれば、
モジュールを使うことができます。

=====引用終わり=================================================
ファイルを指定したときもファイルに対して余計な処理をしたりせずに利用できるので、Web上ではなく、特定のフォルダに入れたファイルを一斉送信。などという用途に使えそうです。メーラー立ち上げずに使えるので気軽に使えるというのもありますね。
と、想像は膨らみましたが、提出先からはメールで送られるよりも、他の書類と一緒に送ってくれたほうが作業としてラク。との返事。とりあえずこれの利用はお預けです。

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

2006年6月 3日 (土)

HTMLソースを隠す方法

WebページをJavaScriptなどいろいろ調べて書いていると、そういう気持ちになることがあります。普段あんまりそういうことを考えていませんが、どちらかといえば、仕事として(自分自身が必要になってというのではなく)作ったものについてそういう気持ちになります。自分自身が必要で作っているときはその時間が苦痛じゃないですが、仕事として(=自分に全く興味の無いネタ)作っている時間。それを簡単にローカルに保存されて。とかってムカつくという気になります。そういうときに見つけたページがその名もHTMLソースを隠す方法というページです。今回私がHTMLと各スクリプト使って作っているCGI&JavaScriptについては締め切りが明確に決まっていないのと、ブラウザの指定もしようと考えているので、非常に範囲を絞った対応ができそうです

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

2006年6月 2日 (金)

経理って何?

最近ブログの更新が滞り気味です。。ここ数日は対外的に利用する伝票の仕組みを協議していたのですが、弊社の経理は何を考えているの??ということで一杯です。メールでのやり取りでは全く拉致があかないので、ちかぢか乗り込もうと思っています。
この伝票は要らないやろ?って思うものでも必要である!と言い張っているので、書式を作る側&利用する側からすると、伝票作成の手間を省くのと同程度の手間がかかっている気がします。基本的に書類をなくして、手間をなくす。という方向に持っていきたいのですが、
①商品を仕入れたときに送られてくる伝票。その伝票どおりに入力してこちらの在庫を増やすときに入力確認用で利用している伝票。私は一方だけの保存でよいと思うのですが、経理は在庫(棚卸)基準で会計するため、送られてきた伝票だけではなく入力確認用も保存する必要がある。とのこと。決算月に棚卸して在庫を合わせる。それでええやん!というと、殺し文句。税理士と相談してそういうことになりました!と言ってきます。私が税理士以上の資格を持っていれば反論することもできますが、それだけでも馬鹿げてるのですが、伝票の仕組み&書式を作っているときに経理の意見と思っていたら、また馬鹿げてる!と思わせることを言ってきました。あいてとこちら両方に引渡&受取書は保管するのですが、それらに加えて領収書と納品書(こちらが売るのですが)両方の控えが必要との事。領収書控えに明細出しても納品書控えが必要!。逆もまた然り。とのことらしいです。
加えて本当は領収書控えは複写式が良いとまで言ってるようです。経理処理を厳密にしていることが要求される東証一部上場企業に買い物に行っても複写式の領収書なんてもらうことはないのに、という気はしますね。ユニクロでそんな複写の領収書なんてくれるわけも無く(逆にそんなのくれたらうざいだけです)。

書類は監査などで要求される必要最低限でお願いしたいんですけどね。

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

« 2006年5月 | トップページ | 2006年7月 »