読者です 読者をやめる 読者になる 読者になる

flandlescarlet's diary【情報工学生の備忘録】

元機械工学科所属だった情報工学生です。JavaScriptで適当に何かを作ったり、絵を描いていたりします。

夏休み前のちょっとメモ

FC2ではAjaxが使えなかった件

 お馴染みのjQueryで簡単に扱える非同期通信ですが

FC2では上手く動作しないことが判明してしまいました。

 

$(function(){
     $.ajax({
          url: "sample.html",
          type: "GET",
          cache: false,
          dataType: "html",
          success: function(html){
               $("div#ins").html(html);
          }
     });
});

なぜかローカル環境で動作するし他のサーバーの@PAGEとかでも動作するのに

なぜかFC2だけが動作しなかった。

原因を考えてみた所、FC2のレンタルサーバーでなく普通のホームページ制作のサービスはサーバー関係の言語を全て遮断しているのに原因があるのでは無いかと考えた。

FC2は無料でも有料でもPHPやSSIにCGIは使用出来無い事となっている。(サーバーに負担がかかるため)

Ajaxでファイルを読み込む系統の操作は全部できないとみた

結構辛い('д`;)

 

情報処理の勉強中

情報処理の入門書を図書館で借りて読んでいる...

情報関係の資格はITパスポート試験基本情報技術者試験に応用情報処理技術者試験が難易度順に三つ並んでいる、基本的には応用情報をクリアすればレベル4で幾つか種類別に試験がある。データベースにセキュリティーなど

ITパスポートのテクノロジーは良いとして、マネジメントやストラテジー系の問題はちょっと商業関係や実際に職場についてないとしっくり来ない内容が多い

余談

ITパスポート試験はオールで選択問題だからとりあえず勉強すればとれる

しかしレベル2の基本情報技術者試験は午前と午後に二回テストがあり午前はITパスポ並みの選択形式だが、午後は筆記試験という...中にはプログラミングのアルゴリズムを問う問題もあるので

Java , C , アセンブラ ,表計算 等のヘビィ(表計算はそうでもないが)な言語が出題されるのでどれか一つ真剣に取り組むのがベストという

Cを既に触っているならそのままCを独学で進めていたら解けるような問題だったりする。基本的に自分はJavaで行くつもり

最近の活動の記録

知らない間に編集箇所のUIが変更されていて驚いた

結構システマチックになったものだ

 

現在Web言語離れてJavaHSPを勉学中アプリの起動について試行錯誤してみた所

ランチャーがある程度形を成してきたので記録を取っておく

最終的にはHSPではRPG及び3Dゲームまで発展させたいと考えている(メタセコイアで3Dモデル作るのがしんどそうだが...)

 

Sample HSP

 

title "ゲームランチャー"
screen 0,300,300,0

button "ゲーム1",*game1
button "ゲーム2",*game2
button "ゲーム3",*game3
button "終了",*theEnd
stop

*game1
chdir "C:(指定のexeファイルがある直前のディレクトリを参照)"
exec "sample1.exe" //exeファイル指定
stop

*game2
chdir "C:(指定のexeファイルがある直前のディレクトリを参照)"
exec "sample2.exe" //exeファイル指定
stop

*game3
chdir "C:(指定のexeファイルがある直前のディレクトリを参照)"
exec "sample3.exe" //exeファイル指定
stop

*thEnd
end

基本的にexecで絶対パス指定してとあるSTGゲームを起動した所一部の作品では起動せず

一部の作品では音が出ないという致命的なバグが発見された

 

原因としてexecコマンドはそのexeファイル(hspでコンパイルしたファイル)の場所が現在のプログラームソースのディレクトリ位置となっているため、他のゲームの他テキストの書き込みなどが行われる場合(ハイスコア記録のためのファイルとかログファイルとか)

を参照するので予めディレクトリをゲームの位置に指定しておく必要があることが分かった。

 

大抵のアプリやゲームは基本的にどのユーザーもディレクトリや名前を変えないことから

基本的に作り手が意図してパスを通すのも手段の一つだが、一部のユーザーのためにも

ファイルオープンのダイアログなどを駆使する、また専用のテキストファイルを作りそこにゲームのパスを書かせるなどして作るほうがランチャーとしては親切かと思われた。

 

今回はパス指定で実行までだったが、UIを意識するならばボタンではなく作りこんだ画像を配置する方がもっともらしくなります。

(これをJavaでつくろうとするととんでもないことになるHSPJavaの差があまりにも膨大すぎて...)

就職で求められる能力はやはり国語とコミュニティー能力

最近学校にてクラスの一員と共にアイデア工作をする事になったのですが、それを踏まえて朝で面白いニュースがあったので一通り覚えている範囲で記入していく。

 

現代の平成社会人におけるアンケートをとってみたところ役8割が周りの組織やチームワークを重視している。

これを見て今の社会における先輩たちは、競争意識をもってほしいとの意見をあげているわけだが

やっぱり主観的な所、世界に進出していくには個人個人の技術や功績よりもチームとしての団結感が重視されてるのかなと正直思った。

ここでアイデア工作の話に戻るわけだが

今の実習で第1班が図面製作をする。そして第二班が1班の図面を元に軟鋼を切削したりして実物を製作する。

そしてその図面や製作物を通じて第三班がその評価をするという形で行なっていくそうだ。

無論第一班は単に図面を製作するだけではなくて、その前の班の図面を製作する。そしてその更に一個手前の班の図面を元に製作された製品の評価を行う。

こうしてこの1班には5つの班つまり1班が4人であるから自分を除いて19人の人と間接的に関わるという事が目的なのだそうです。

そしてここでコミュニケーションの能力が求められるという形になるわけだ。最近の現代では飛躍的に周りの人間いわば現実世界での人間と関わる事が少なくなる傾向がある事も知られている。

家族さえも会話の成り立たない人も現にいるようだ。

ただ単に勉強ができるだけの人間は社会でははじかれる事が多い(同じ働く者同士上手く付き合って環境を過ごしていかなければならないため)実際に学校でTOPの実績を持つ人でもコミュニティー及び国語力の低下によってはじかれてしまうケースもある。

日々家族や友人以外の知らない同級生及び先輩に後輩また大人が相手だったとしても、通常に会話できるコミュニケーションを今のうちにつけておく必要性があると見た。

CGI Hackで閲覧者を制御する3

CGIを用いられない大手のブロバイダーで仮としてCGIを使用する方法があります。

FC2のホームページでは無料の段階ではCGIは現在のところ使用はさせてもらえません。

しかしながら外部の無料ブロバイダーよりCGIを呼び出す事でそのページに訪問してきたユーザーの情報等をエレガントに引き出すことができます。

 

基本的にCGIは画像ファイルとして設定しておき、<img>タグより呼び出します

そしてユーザーのおおまかなIPアドレスやブラウザ等の種類をログファイル等に保存するということが可能となります。

ファイルの拡張子がcgiからhtmlになるのでユーザーからの警戒も減ります

Sample1

#!/usr/bin/perl

# ここに各CGI処理を記述しておく

print "Content-Type" image/gif\n\n; #gif画像を仕組む

open(IMAGE,"XXXXXX.gif"); #画像ファイルをオープンする

binmode(IMAGE);
binmode(STDOUT);

while(<IMAGE>){
print $_;
}

close(IMAGE);

仮に書いたCGIの名前をadd.cgiと付けるならば

<img src="add.cgi">

と指定すれば画像ファイルでなくcgiとして直接実行してくれます(もちろん通常の画像も表示されます)

画像の指定場所ならどこでもいいです、リストの画像マークにしても画像指定の場所ならば実行させる事ができます。

 

余談としてSSIではexecという指定があり、そのままcgiファイルを指定する事が出来ます

が、残念ながらSSIはセキュリティーの観念から使用できるブロバイダーは極一部となります。

できる限りCGIオンリーで多様に処理出来る裏技を見つけるのが良さそうです

CGI Hackで閲覧者を制御する2

とりあえず今回は環境変数というものを見てみたいと思います

環境変数は$ENV{}で始まり連想配列としてデータが幾つか保存されています。

IPアドレスの場合

$ENV{"REMOTE_ADDR"}

ブラウザの場合(とにかく長い名前が出てくる)

$ENV{"HTTP_USER_AGENT"}

基本的にはIPアドレスとブラウザさえわかれば同一のユーザーだと一応判定できます。

注:中にはプロクシサーバー経由で仮IPを出力している人や、固定IPでない人がいるため過信は出来ない

ブラウザの判定ですが、異常に長くなりますので正規表現にて簡易に文字の切り取り等行うと便利に扱えるでしょう

 

ブラウザの判別

Sample

 $user_agent = $ENV{"HTTP_USER_AGENT"};

if($user_agent =~ m/firefox/i){
$user_agent = "firefox";
}
elsif($user_agent =~ m/opera/i){
$user_agent = "opera";
}
elsif($user_agent =~ m/chrome/i){
$user_agent = "chrome";
}
elsif($user_agent =~ m/ie/i){
$user_agent = "IE";
}

何故CGI等で判別を行うか!?

答えとしてはいくつかありますが、JavaScriptで判別を行う場合、ユーザー側がJavaScriptをoffにすると当然ブラウザの判別が行えなくなります。またJavaScriptの場合ソースでブラウザを判別しているんだなという事がよくわかってしまうのでなんとなく虚しいです(拡張子に.cgiを使用している時点で何かしらのデータを収集しているようにしか見えないと思われる場合もありますが、その場合はSSIを利用する場合もあります)

ブラウザ判別はWebを構築する上でも必須の情報となるので

open()など駆使して収集してみるのも面白いでしょう

 

 

CGI Hackで閲覧者を制御する

最近CGIを深く勉強しています。掲示板とかもそうなんですが

現在はクライアント(閲覧側)がこちらに設置しておいたサイトにアクセスする事により残すデータを満遍なく利用して、閲覧者の情報を集める方法について記述していこうと思います。

CGIの良点

  • 閲覧者のブラウザが分かり、Webデザインをする時の全体のあらましが分かる(基本は五大ブラウザに対応させなければなりませんが)
  • 悪意のあるユーザーを遠ざける(ipアドレスの個人収集により、いざ何かあった時その閲覧者の制限を行えばよい)
  • リファラーのチェック(これによりどんな場所からアクセスしたのかが分かる)
  • アクセス時間の取得(主にどんな時間帯によく閲覧されるかが分かる)

 

主にデータ収集としてはこんな感じです。

CGIはPerlでかきますが、基本PHPでもPython,Rubyまた高速化のためにCを用いても良いですが

文字列の扱いが不気味なほど柔軟なPerlでやるのが定石となります。

 

今回はPerlでの設定だけして終とします

Sample1

 #!/usr/bin/perl

print "Content-type: text/html\n\n";

print "Hello!World";

とりあえずCGIの始めの一歩になります。

通常のPerlとして使用するのでは無いので拡張子は.plでなく.cgiにしてください。

Apache等でCGI環境を作っている事を前提で話を進めていこうと思います。

 

具体的に無料でCGIを使えるサービスをあげておきます

  • トクトク(TOK2)
  • @PAGES
  • HATEML