パソコンの最近のブログ記事

Windows7をセーフモードで立ち上げると

| コメント(0)

エクスプローラがクラッシュする不具合の対応策がわかりました。困った時のセーフモードなのにセーフモードが使えないなんてとんでもないバグです。通常モードで7が立ち上がっている時に以下のように設定することで(とりあえず当方の環境では)直りました。

スタート→コントロールパネル→時計、言語、および地域→キーボードまたは入力方法の変更→「キーボードと言語」タブ→キーボードの変更→「全般」タブ→追加→(ずーと下へ行って)日本語キーボードのところのMicrosoft IMEにチェックを入れる→OK
(すでにMicrosoft Office IME 2007が入っているのですが、Microsoft IMEを追加でチェックしました)

 あともう1つの不具合である、Windows Liveメールで新規作成をすると本文部分だけ日本語入力ができない件、こっちは未解決です。こっちも解決したのかと思って試したら駄目でした。ただしこちらはすぐ上のスペルチェックというアイコンを一度クリックすれば日本語入力が可能になるので特に問題はないですけど。

 

昔UNIXを仕事で扱っていたころ

| コメント(0)

YACC/LEXという字句解析/構文解析の仕組みをちょっとかじったことがあり、気になっていた。これを使いこなせれば、文字列を扱うことなら何でもできるといったすぐれもので、言ってみればちょっとしたコンパイラを作るための仕組みである。で、この仕組みをWindowsパソコン上で使えないかといろいろやってみた。で、やっとのことでWindows上でUNIX環境をシミュレートするCYGWINなるものをセットアップしCYGWIN上でgccやyacc/lexを使って構文解析ツールを作るための環境構築まで漕ぎ着けた。そしてここでふと、VC++.NETの開発環境下でYACC/LEXを使えないかと思い立ち、いろいろ粘ってみた。その時の記録である。自分が技術的なことで困っていろいろな人のブログからヒントを得て大いに助かっているので、もし同じようなところで困っている人がいたらなんらかの「参考」になればとの思いである。

 

 ★VC++.NET2003にてYACC/LEX(bison/flex)を利用する

1. まず前提条件として、WindowsPC上でcygwinのインストールが完了していること。
   C:\cygwin\bin, C:\cygwin\lib、下にYACC/LEX(bison/flex)関係のコマンドおよびライブラリが入っていること。つまりcygwinを起動してシェル下にて、bison/flexがちゃんと利用できることを確認。例えば、
   flex sample.l       -> lex.yy.cが生成
   bison -d sample.y   -> sample.tab.cとsample.tab.hが生成
   gcc main.c sample.tab.c lex.yy.c -lfl -o sample (←あくまで例)
   がちゃんとコンパイル&リンク通ってsampleコマンドが所定の機能を果たすこと。

2. VC++.NET2003にて、まずは「Win32コンソールプロジェクト」で新規プロジェクトを生成してみる。例としてプロジェクト名を「aaa」と仮定する。

3. aaa.cppソースを以下に記述。main()からyyparse()を呼んでいるだけのもの。引数がなければ標準入力から、引数があればその引数で指定されたファイルがそれぞれ入力データとしてyyparse()に引き渡される。
-----------------------------------------------------------
#include <stdio.h>
#include "stdafx.h"

extern "C" int yyparse();  // <-- ※
extern "C" FILE *yyin;   //   <--※

int _tmain(int argc, _TCHAR* argv[])
{
   if(argc > 1) {
        if(yyin = fopen(argv[1], "r")) {
            yyparse();
            fclose(yyin);
        }
    } else {
        yyparse();
    }
    return 0;
}
------------------------------------------------------------
  ※extern "C"をつけないとリンクでエラーになるようです。試行錯誤でみつけた。


4. 「ソースファイル」を右クリックして「追加」→「新しい項目の追加」でテキストファイルを選んで、aaa.l を追加する。同様にaaa.yも追加する。

5. aaa.lとaaa.yにそれぞれ字句解析と構文解析の規則を記述する。

6. aaa.lを右クリックしてプロパティを開く。
  ツールがカスタムビルドツールになっていることを確認して、カスタムビルドステップのコマンドラインのところを、
flex --nounistd aaa.l  (注意:ハイフンは2つ)とする。
"--nounistd" をつけないとunistd.hが見つからないといって怒られる。(これも試行錯誤の結果であり、このオプションがどんな意味をもつのか当方はよく分かっていない)
  出力ファイルのところは、lex.yy.cとする。

7. aaa.yを右クリックしてプロパティを開く。 ツールがカスタムビルドツールになっていることを確認して、カスタムビルドステップのコマンドラインのところを、
  bison -d aaa.yとする。
  出力ファイルのところは、aaa.tab.c; aaa.tab.h とする。

8. VC++.NET2003のメニューバーの「ツール」→「オプション」→「Projects」で「実行ファイルディレクトリ」にC:\cygwin\bin を追加する。

9. aaa.lを右クリックして「コンパイル」を実行する。
 aaa.yを右クリックして「コンパイル」を実行する。
 両者とも正常終了すれば、lex.yy.c, aaa.tab.c, aaa.tab.hの3ファイルが生成されているはず。エラーの場合は、どこかの記述が間違っていると思われる。

10. 「ソースファイル」を右クリック「追加」→「既存項目の追加」でaaa.tab.cとlex.yy.cを追加。
  これでaaa.tab.cとlex.yy.cが現れる。
  「ヘッダーファイル」を右クリック「追加」→「既存項目の追加」でaaa.tab.hを追加。これで
  aaa.tab.hが現れる。

11. lex.yy.cを右クリックしプロパティを開く。 「プリコンパイル済みヘッダー」を選んで、「プリコンパイル済みヘッダーの作成/使用」を「プリコンパイル済みヘッダーを使用しない」に設定する。aaa.tab.cも上記と同様に設定する。

12. aaa.tab.cを右クリックして「コンパイル」を実行する。
  lex.yy.cを右クリックして「コンパイル」を実行する。ワーニングがいくつか出るみたいだが、エラーが出ていないのを確認する。

13. ソリューションエクスプローラの一番上の"aaa"をクリックしてから、メニューバーのプロジェクトから 「プロパティ」→「リンカ」→「全般」の「追加のライブラリディレクトリ」でC:\cygwin\libを追加。コマンドラインを選び、追加のオプションのところに、libfl.aを記述。

14. 最後にメニューバーの「ビルド」から「ソリューションのリビルド」を行い、コンパイル&リンクが正常終了するのを確認する。
  aaa.lとaaa.yがビルドされるとlex.yy.cとaaa.tab.cが新しく出来るのでいちいち確認メッセージみたいなのが出る。嫌な場合は、aaa.lとaaa.yを右クリックしてプロパティから「ビルドから除外」を「はい」と設定しておけばいいのではないかと思う。もちろん変更をかけたらビルドの除外を「いいえ」にするのはいうまでもない。

15. 以上のやり方で当方のPC環境において、VC++.NET2003でのYACC/LEX利用ができるようになった。


なお、ここに書かれた内容が技術的に正しいかどうかは保証の限りではない。試してみる方はあくまでも自己責任であることを申し添える。

気がついた点を一つ。ファイルのアップロード自体は問題なくできるのだが、クライアント側のパソコンの種類によって動作が違う。ファイル名を取り出す時の動作がおかしいのだ。

Perlのスクリプトで、

use File::Basename;

・・・・(途中省略)・・・・

my $filename = basename( $q->param('upfile') );

とやれば、ディレクトリ名は取り除かれてファイル名だけが取り出せるとのことであるが、これがパソコンによってはディレクトリ名が入ってきてしまう場合があるのだ。なんでぇ、おかしいじゃないかぁ~?

で、別のパソコンを使ってやってみるとちゃんとファイル名だけ取り出せるのもある。CGIはサーバ上で動くプログラムでしょ。なんでパソコンに依存して結果が違うの?で、いろいろやってみたがどうやらブラウザがIE6の場合だけがおかしいことが経験上わかりました。IE8やFireFoxでは問題なくファイル名だけが取り出せるのにIE6の場合はディレクトリ名が入ってしまいます。どうやら

basename()って言う関数はディレクトリのつなぎ目をスラッシュ"/"だけで見ていてバックスラッシュ"\"はディレクトリのつなぎ目として認識してないようだ。じゃあIE8やFireFoxはパソコンからパス名を送る時バックスラッシュをスラッシュに変換して送っているのかなぁ。まぁいいや、とりあえず、

my $path = $q->param('upfile');

$path =~ s/\\/\//g;

my $filename = basename( $path );

ってやったらIE6からでもファイル名だけ取り出せるようになりました。

で、さらに調べたら、IE8やFireFoxでは、$path = $q->param('upfile'); で取り出される時点ですでにディレクトリ名は落とされていて、ファイル名のみになっていることが実験でわかりました。

つまり、

IE6では、$q->param('upfile') はディレクトリ名を含んだフルパス名である。

IE8, FireFoxでは、$q->param('upfile') はディレクトリ名を含んでいないファイル名のみである。

CGIは同じでもパソコンのブラウザによってこんな違いがありました。

 

※上記はあくまでも自分の開発環境にて経験上わかったことなので、これが正式な仕様かどうかはわかりません。念のため申し添えます。

 

その後わかったことがありました。IE8では
「インターネットオプション」→「セキュリティ」→「レベルのカスタマイズ」の一覧に、
「サーバーにファイルをアップロードするときにローカルディレクトリのパスを含める」
という項目があり、ここがデフォルトで「無効」になっているのです。
これを有効にしてみたらIE8でもIE6と同じようにアップロードファイルがフルパス名に変わりました。
IE6で同じようなオプションを探してみましたが見つけられませんでした。どうやらIE6ではサーバーにファイルをアップロードする時は、必ず(?)フルパス名を返すようです。IE8ではどちらも選べるのですが、デフォルトではファイル名のみを返すのです。やれやれ。フルパス名をやめてファイル名だけを返す方をデフォルト設定にしたのはローカル側の情報を外に出してしまうことに対する警戒心の現れでしょうか?

まあいずれにせよ、CGI側では受け取った文字列に対して、バックスラッシュをスラッシュに全置換してからbasename()に渡すロジックを入れておけばOKのようですね。

 

参考(IE8のインターネットオプションから)

upload.gif 

  

今日も一日ありがとう

| コメント(0)

継続は力なり。ありがとうございます。Windows7ですが、ユーザーインターフェースはVistaとほぼ同じで、スペックの低いマシンでもVistaに比べればサクサク動くみたいです。ただしコントロールパネルからの各種設定にVista時代と違いがあり、ちょっと戸惑います。XPからVistaへの移行の時は各種設定ともメニュー配置が大変更でこれはこれで腹立ちましたが、Vistaから7への移行では変なところが少しずつ変更されている。まったくもって意味不明な処置であり、同じ機能はできるだけ以前のメニュー配置を踏襲すべきでしょう。で、評価できる点は、スタートボタン→「シャットダウン」となった点。Vistaでは標準設定だとスタートボタン→「電源SWマーク」でスリープ状態に入るというとんでもない仕様で、スリープ状態からの復帰をまるで早く立ち上がるように見せかけるという許せない仕様だった。7になってからは立ち上がり速度も速くなったようで、標準を「シャットダウン」に戻したのは評価したい。

Windows7を使ってみて

| コメント(0)

現時点で気がついた点をあげておきます。

まずはWindows Liveメールですが、メールを「新規作成」で書こうとして日本語入力ができない点。宛先や件名の欄には日本語入力できるのにメール本文のところではMicrosoft Office IME2007がロック状態みたくなって漢字変換できん。でいろいろからかってみたところ、メール本文の上部にスペルチェックというアイコンがあるので、これを一回クリックしてやれば以後日本語入力が可能となった。一応回避できるのでよしとしましょう。

次にセーフモードで立ち上げた時の話しですが、ログイン画面までは来ますが、ログインすると「エクスプローラは動作を停止しました」とメッセージが出て、その後操作不能。Ctrl+Alt+Delキーで次にタスクマネージャを起動するも、「Windowsタスクマネージャーは動作を停止しました」と出てしまう。うーーん。でもログオフはできましたしシャットダウンもできました。セーフモードでちゃんと立ち上がらないなんて、なにかあった時には必ずセーフモードで立ち上げて様子を見るのが王道なのになぁ。オレのパソコンだけかなぁ。Windows Aeroが見られない超低スペックのマシンだからかなぁ。でもVistaの時は動きがもっさりなだけで問題なく動いていたんだけどなぁ。

まぁもうちょっとからかってみよう。

 

Windows7が届いたので

| コメント(0)

早速インストールしてみた。インストール自体は簡単に終了。今まで使っていたXPマシンからメールデータおよびアドレス帳の移行テストしてみようと思い調べるみると、Windows転送ツールなるものがあるとのこと。早速これを使ってみる。7マシンとXPマシンがLAN接続されている環境なら両方でWindows転送ツールを起動しておけばなるほど簡単にデータの移行ができる。ただし移行するデータを細かく選べないようなので、1つのアカウントに関連するデータのすべてが移行対象になってしまう。今回のテストではデータ量が600Mで20分くらいコピーに時間がかかった。ちゃんとブラウザのお気に入りやアドレス帳が7側に反映されてた。その後Windows Liveメールをダウンロードしてきてインストール。Windows Liveメールを立ち上げると、おお!自動的に移行してきたデータが読み込まれている。アカウントもメールデータも。(このへんいろいろググッて調べると、この順番を間違うとだめらしいです。先にWindows Liveメールを立ち上げてしまうとだめらしいようなことが書いてありました。)

で、よくよく見るとやっぱりWindows Liveメールから見たアドレス帳だと、一部の人の名前が漢字で表記されてない。おかしいなぁ。前回の実験と同じだ。アドレス帳フォルダの方はすべての人が漢字表記されてるのに。

 

元々低スペックのマシンなので画面はイマイチ。でもまあVistaよりは軽やかな感じはする。

win7.jpg

 

ノートPCのファンの音がガラガラとうるさかった件ですが

| コメント(0)

近所のホームセンターに行ってマシン油(ミシン油?)なるものを買ってきて、ファンの軸受け部に注入してみたところ、効果てきめんでした。ガラガラ音が無くなって昔どおりのごく小さな「ブーン」という音に戻りました。メインで使っていたノートPCだけに助かります。ありがとうございます。(え、買い換えろってか?)。

ネット上でWindows7に関する情報を仕入れているのだが

| コメント(0)

今まで標準で搭載されていたメールソフトなどは標準で搭載されなくなるとのこと。特にメールソフトに関しては、XP以前なら「Outlook Express」、Vistaでは「Windowsメール」だったわけだが、今回の「7」からはWindows Live Mailなるものを別途ダウンロードしてこなければいけないらしい。で、現状Windows7が手元にないので今あるVistaにWindows Live Mailなるものをインストールして、その使い心地を試してみることにした。ネット上からのダウンロードおよびインストール自体は容易にできた。アカウントの設定もそんなに難しくはなかった。ただ、上の段にメニューバーが標準で表示されていないから最初は戸惑う。IE7の時もそうだがメニューバーは標準で表示しておくことを強く要望する!あとは、XPのOutlook Expressで利用していた以前のアドレス帳がちゃんとWindows Live Mail側に移行できるかどうかである。XPのパソコンから

「スタート」→「すべてのプログラム」→「アクセサリ」→「アドレス帳」を開いて、「ファイル」→「エクスポート」→「アドレス帳(WAB)」とやってアドレス帳をWAB形式で書き出す。

その後このファイルを新しい方へコピーして、Windows Live Mailにてアドレス帳をインポートしてみた。アドレス自体はちゃんとコピーされているようだが、表示がなんか変。漢字で表記される人とそうででない人に分かれる。うーーんなんでだろう?何回かやり直してみたが同じ。一部の人しか漢字で表記されない。同じWABファイルをVista標準のWindowsメールにインポートしてみたらこれはちゃんと全員が漢字で表記された。

試しにWAB形式ではなくてCSV形式で(UTF-8コードに変換が必要)移行作業をやりなおしてみたところ、こっちはうまくいった。うーーん。なんで?

Windows7ではどうなるか、後で要確認だな。

今月末にはWindows7が発売とかで

| コメント(0)

Home Premiumバージョンを予約注文いたしました。Vista発売は3年くらい前でしたでしょうか?このブログでも書いた記憶があります。仕事柄Windowsの新しいOSが出たら買って使って試してみないことにはどうしようもないですからねぇ。操作性はVistaより向上しているのでしょうか、はなはだ疑問ですが。Vistaが出た時は本当に参りました。それまでのXPと操作性が違い過ぎて、各種設定を行うのにそこにたどり着くまでの道筋がことごとく変わっていてイライラが頂点に達しました。OSはアプリケーションと違って縁の下の力持ちなんだから信頼性こそが第一であって、見た目とかどーでもいいと思うのですがはたして今回の「セブン」はどうなんでしょう。

Windows 3.1 -> Windows 95 -> Windows 98 -> Windows Me

Windows 2000 -> Windows XP -> Windows Vista -> Windows 7

-> 帰ってきたWindows

-> Windows エース

-> Windows タロウ

こんな感じか?

メインで使っているノートパソコンVAIOだが

| コメント(2)

ファンの音がガラガラとうるさくなってきて困ったことに。軸受け部が磨耗?してファンがガタついているみたい。ガラガラと相当にうるさい。仕事にならん。ってわけでノートPCの内部を開けて調べてみたが、ソニーのVAIO typeSは小型のため他のノートPCに比べて筐体を開けるのに結構気を使う。素人にはHDD交換はかなり難しいんじゃあないのか?で、ファンのところをマジマジと見つめても、どうしようもないなあ。自分で取り外したところで替えの部品はなさそーだし、メーカー修理に出したら高いだろうし。ファン自体は東芝製で型番らしきものが書いてあったのでそれでググッてみたけれど見つからないし。KURE556を吹き付けてみようとも思ったが、他の部品にどんな影響があるかわからないのでやめた。多少の埃を落としてまた組みなおしたけど何にも改善されず、相変わらず「ガラガラ」。もうやだ。しかも常時回っている。VAIO省電力設定というやつで放熱優先から静かさ優先に変えてもファンは回りっぱなしだし。冷却効率も落ちているのか?まあ購入してそろそろ5年のXPマシンだからなぁ。

 

今日も一日ありがとう

| コメント(0)

継続は力なり。ありがとうございます。

携帯をFOMAにしたことで、外出先でのノートPCのダイアルアップ接続が64kBPSで使えるようになり、イザという時の備えができた。まぁ保険のつもりなのでほとんど使うことはないと思うけど。以前のmovaの時は、SUNTAC U-Cable D2という専用のモデムケーブルを使って9600BPSしか速度がでないのに時間課金なので通信料金ばかりが膨大にかかったことを思えば、どえりゃー進歩である。

javac.exeコマンドが存在しない!

| コメント(0)

あれ~???DOSプロンプトからjavacと打っても「コマンドは存在しない」と出るのみ。パスは絶対に間違いなく通っているハズ。うーーんおかしい。で、インストール先の

D:\Java\jre6\bin

を見ると、どこを探してもjavac.exeなるファイルは存在していない。

この件でググると同じような質問をしている人が大勢いることに気がつく。

回答は決まったように、

「Pathが通っているか?」

「JREじゃなくてSDKをちゃんとインストールしたのか?」

であった。全部OKなのになぁ。

 

上記は、Javaの勉強をしようと思って本を買ってきて、それについていたCD-ROMからコピーしてきた

jdk-6u10-windows-i586-p.exe

を実行し、Javaの開発環境を構築しようとしての出来事。

C:ドライブに余裕がないのでD:ドライブにインストールしたのがケチのつけはじめか?俺はってっきり、

D:\Java\jre6\bin

下にすべてのコマンドがインストールされていると思っていたが、パソコン内をよーく見てみると、あれれC:ドライブの方にもあるじゃん。インストーラでD:ドライブにインストールを指示したのだから、D:ドライブにJava関連のファイルが存在すると思っていたのが落とし穴だったか。とんでもねー作りだ。

C:\Program Files\Java\jdk1.6.0_10\bin

下にjavac.exeファイルがあるじゃぁないか~。あ~じゃあ一体どっちの方をPathに設定したらいいんじゃ?両方をPathに指定しておけばいいんか?でもまてよ、注意深く両ディレクトリに存在するEXEファイルを見ると両方ともに

java.exe

というファイルが存在していておまけにサイズが違う!

つーこんは両者をPathに設定していた場合、そのPathを書いた順で起動されるコマンドが違うつー困ったことになる。アンインストールしてC:ドライブにインストールしなおすか?でもC:には余裕がない。

ええいままよ、Pathは

C:\Program Files\Java\jdk1.6.0_10\bin

だけにして様子を見てみるか。これでDOSプロンプトからのjavacコマンドもちゃんと起動できた。

やりたいのはJavaの実験プログラミングだし。もしなんか新たにわかったことがあったらまたUPしますね。

 

 その後さらにさらに落とし穴がありました。

上記の件は最初XPでやってうまくいったのですが、Vistaの場合まったく同じようにしてもDOS窓でjavacコマンドが見つからないと出ました。ところが管理者権限でDOS窓を起動してやるとOKでした。普通にDOS窓を起動してもうまく環境変数が展開されないようなのです。

その本ではJAVA_HOMEを環境変数として「C:\Program Files\Java\jdk1.6.0_10」に定義し、

Pathに%JAVA_HOME%\binを追加するとありましたが、

普通に起動したDOS窓だと、Pathには「%JAVA_HOME%\bin」のまま記述され、展開されていないようなのです。管理者権限で起動したDOS窓だと、Pathには「C:\Program Files\Java\jdk1.6.0_10\bin」が追加されており、ちゃんと展開されているのです。もうワケワカらん。

様々なところでトラップが仕掛けられているようです。疲れるなぁ。 

今日も一日ありがとう

| コメント(0)

継続は力なり。ありがとうございます。

9年前に買ったノートPC。当時はWIndowsMeだったのを、後からメモリ増設のうえWindowsXPに入れ替えてサブのノートPCとして使っていたのだが、WindowsUpdateが何度も実行されていくうちについにC:ドライブがパンク。いままでディスククリーンナップや最適化を定期的にやってきており、C:ドライブが逼迫していることは把握していたつもりだが、メインで使っているのではないので「まぁええやろ」と放っておいた。ところがノートンのLiveUpdate中に「ディスク領域が足りない」とかメッセージがでてきて、あちゃぁ。C:ドライブが完全にパンク。性格的にパーティション切りなおすよりOSのクリーンインストールの方が好きなので、ええい!WinodowsMeから入れ直したる。これのXPはアップグレード版なのでMeから入れないと駄目なんだろうなぁ。まったく同じようなことをデスクトップ機でもやったなぁ。こっちは元々XP機で後からVistaに入れ替えてるんだが、Vistaがアップグレード版なので、XPから入れ直して、とまぁ。時間の無駄をやっているのだが、本当は時々OSをクリーンインストールしたがる自分の性格かもしれない。なんかWindowsってずっと使っていると、ディスクの最適化やクリーンアップしていても「檻」がたまっていくような気がして気持ち悪いのだ。なんだかなぁ。

当方仕事がらお客様先で

| コメント(0)
いろんなパソコンやら周辺機器を扱ったりするが、それらの詳細な仕様とか取扱い説明書の類をネットで検索しても出てこないことが多い。メーカのHPページから入っていっても過去のモデルの仕様一覧やら取り説のPDFファイルなどどこにあるのかまったくわからないとか、こんなんメーカの名に値しない。素人相手の大メーカでもそんなところは結構ある。素人相手の大メーカだからこそ、我々プロがお客様先にサポートに行った時、ネット環境があればその場でその製品の仕様が瞬時にわかるので、とても重要なことなのだ。メーカー名や製品名でネット検索しても取説すら出てこないのに、売り出しの新商品のスペックばかり出てくるようなメーカのHPは全くのクソである。十何年も過去にさかのぼって今まで出してきた製品の一覧、およびその仕様詳細、取説のPDFファイル、これらを一覧でをちゃんと出すメーカーが本当にいいメーカーである。本当のSEO対策とはこういうことを言うのではないのか?

2010年3月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
Powered by Movable Type 4.25


電話番号

このアーカイブについて

このページには、過去に書かれたブログ記事のうちパソコンカテゴリに属しているものが含まれています。

前のカテゴリはネコです。

次のカテゴリはe-Taxです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。