2009年1月24日土曜日

JavaScriptサンプル

MagicPointのJavaScript versionの完成を目指して
JavaScriptで試行錯誤しています

簡単な文字列操作、ブラウザ情報取得
オブジェクトを出したり消したり と準備運動的な
プログラミングを経て
そろそろ本題のMagicPointのJavaScript versionの作成に
入れそうなところです

JavaScriptサンプル はこちら

JavaScript sample

2009年1月15日木曜日

JavaScript

tytyさんのBBSの広告先で色々見てたら
ブラウザゲームが作りたくなった
tytyさんのBBSの提供元が
ゲーム可CGI可Ruby可の
ホームページスペースを提供しているらしい
Rubyにしよっかなー
Perlにしよっかなー
なんて考えてたけれど
最初はJavaScriptかな
ってなかんじ

というのもCGI関連の書籍が今手元にないからだ
PerlのCGIの書籍なら押し入れのどこかにあったはず
探すのめんどくさいなーってとこ
でもPerlよりRubyでCGIを書いてみたい
そのうち書店にあったら始めよっかなー
ってなかんじ

でもCGIを書くとしても
JavaScriptを駆使したい
JavaScriptの書籍どこ行ったかなー?
たぶんそれも押し入れの中だ
押し入れ捜索隊をするか
もう一冊買うか
図書館で借りるか
考え中

JavaScriptは一度作りかけたけれど
日経ソフトウェア総集編2007で
JavaScriptの解説を読んだら
HTML文を全て変更できると書いてありました
僕の作ったのは
ボタンとメッセージボックスの内容の変更で補っていました
ネット情報でスクリプト書きカバーできないかな?
ってなかんじ
ゲームの構想が未完成だと
完成しなさそうなので
何ヶ月か前に作った
MagicPointのJavaScriptバージョンでも書いてみようか

2009年1月10日土曜日

日経ソフトウェア2007総集編を読んでたら
図の解説をしていました
UMLにフローチャート、あと一個

UMLはまだ書けそうにないですが
あと一個は思考の図化で
図を書きながら考える
考えたものを図にする
と、考えがまとまるそうです
少し挑戦してみとうかな?ってかんじです

フローチャートは
コメントの下手な人はフローチャートを
書くと良い。と書いていました
ちなみに
値が素数か調べるver2
は、フローチャートは書かなかったけれど
フローチャートを書いたつもりでコメントを書いてみました

プログラムとは
順に書いていくものなので
図を使って
構造を示すのは悪くないかもしれません

マイルストーン

某文庫に書いてありました
しにくいことは
出来る範囲で少しづつやってみなさい
ということでした

コレを一昨日読んで
昨日、読むのがはかどらない
visual C++2005の本を読んだら
かなりはかどりました
言語解説が終わり
自動作成されるコードの解説にはいりました。とさ

何事も始めるまでがおっくうで
始めてみると案外やってしまう。とは
何かの本で読んだけれど
その具体例ですね

値が素数か調べるver2

この前書いたのが手抜きすぎなので
もう少しきちんと書き直してみました
;素数例:2039

d=0
s=""
input d,300,20,0
button "calc",*start
mesbox s,480,400,0
stop

*start
s=""
cls
input d,300,20,0
button "calc",*start


n=0
m=0
l=0
p=0
// 変数flag:素数であるの時1、素数でない時0
flag=0
s=""
// dは2の倍数であるか調べる
// 2は2n+1ではないので
// whileループの中に入れれない
n=d/2
m=d\2
if d!=2{
if m==0{
s+="× "+2+" * "+n+"\n"
flag=1
}else{
p=(n+1)*2
s+="○ "+2+" * "+(n+1)+" = "+p+"\n":
}
}

// 変数tmp:dがtmpの倍数であるか調べる数
// 値は2n+1
tmp=1
tmp+=2
// 変数tmp02:dがtmpの2乗より大きいか調べる数
tmp02=tmp*tmp
n=0
m=0
l=0
p=0

// dがtmpの2乗より大きい限りループ
while tmp02 <=d
n=d/tmp
m=d\tmp
if m==0{
s+="× "+tmp+" * "+n+"\n"
flag=1
}else{
p=(n+1)*tmp
s+="○ "+tmp+" * "+(n+1)+" = "+p+"\n"
}
tmp+=2
tmp02=tmp*tmp
n=0
m=0
l=0
p=0
await 1
wend
// flagの値で分岐して結果を表示
if flag=0{
s+=""+d+"は素数です"
}else{
s+=""+d+"は素数ではありません"
}
mesbox s,480,400,0
stop

2009年1月7日水曜日

数値が素数か調べる

ハッシュテーブルが257では小さすぎるので
2000くらいにしたいな。と思い
2000くらいの素数ないかな?と思い
その数が素数であるか調べるスクリプトを書いてみました

;素数例:2039

d=0
s=""
input d,300,20,0
button "calc",*start
stop

*start
cls
input d,300,20,0
button "calc",*start


tmp=1
n=0
m=0
l=0
p=0

n=d/2
m=d\2;注
if m==0{
s="× "+2+" * "+n
logmes s
s=""
goto *finish
}else{
p=(n+1)*2
s="○ "+2+" * "+n+" = "+p:
logmes s
s=""
goto *begin
}

*begin
tmp+=2
tmp02=tmp*tmp
n=0
m=0
l=0
p=0
s=""
if tmp02 <=d{
n=d/tmp
m=d\tmp;注
if m==0{
s="× "+tmp+" * "+n
logmes s
s=""
goto *finish}
else{
p=(n+1)*tmp
s="○ "+tmp+" * "+n+" = "+p
logmes s
s=""
goto *begin}
}
*finish
stop


注:¥が文字コードの関係で\になっています
ハッシュテーブルの大きさは2039にしよっと

抽象化

プログラム言語の流れは抽象化だそうです
で、HSPは抽象化が足りない。とどこかに書いてありました
でも、結局抽象化ってオブジェクト指向?
オブジェクト指向でデザインパターンに落とし込むのが抽象化?

でもHSPでスクリプト書いてて
だいたいモジュール作って、それで終わりってことが多い
(僕の場合)
作成したモジュール。関数。命令の統合が上手くできない
これがその例?
だからといってオブジェクト指向にしたら上手くいくとも
思えないけれど
僕の場合オブジェクト指向でプログラミングしても
部品ばかり作ってそうな気がします

UMLはよくわからないけれど
フローチャートとか、紙に図を書くと
少しは上手くいきそうな気もします
だからといってあんまり紙に図を書いてないですね
なんでやろ?全体像がぼやけているからかな?

ToDoリストは書くこともあるけれど
ToDoリスト列挙してもそれ通りに動くのは最初だけだったりもします
なんか書いたスクリプトへの加筆が上手くいかない
書いたスクリプトへの加筆は抽象化させないとできないのかも
書いたスクリプトの解説が上手くいかないのは
きちんと抽象化してないから?
でもスクリプトを書いたらそれで満足しちゃうよな
スクリプトをもっと解説するよう努力するのは
いいのかもしれませんね

抽象化がある?ない?は
トップダウン。ボトムアップのスタイル。も関係しているのかもしれません
僕のプログラミングスタイルは完璧ボトムアップですね
部品ばかり作ってるし
この前コンテストに投稿したGAMEはトップダウンでしたね
行数そんなになかったけど
なかった故にトップダウンで書けた気もします

言語をトップダウン。ボトムアップの視点で見てみると
HSPがトップダウンでRubyはボトムアップな気がします
ツールとして向いているマニュアルが整備されているHSPは
トップダウンだと思います
便利な機能はそろっているけれど
アプリケーション作成には向いていなそうな
Rubyはボトムアップな気がします
僕がボトムアップ型人間であるが故に
トップダウンなHSPが好きなのかもしれない
トップダウン故に居場所が上の方で
そこからボトムアップでスクリプトを書くと
手軽に上へ行けるのでしょう

さっき日経ソフトウェア総集編を読んでたのだけれど
その中に視座という言葉が語られていました
抽象化、ボトムアップ、トップダウン
色々な視座でスクリプトを書いていければ。と思うのです

2009年1月6日火曜日

文字列を " で分割する

プログラムなりスクリプトなりでは
文字列を " でくくりますよね
なのでソースから文字列をくくり出すスクリプトを書いています

紙にオートマンを書いたりして設計までしつつ記述しています
でも文字列中のエスケープ文字の処理がよくわからない
¥¥¥¥→¥¥
¥¥t→¥t
くらいならわかりやすいんですけど
¥¥¥
とか
¥t
とかがあったらどうしよう?なんて考えてます
¥はややこしいので
?tとか?nとかでも可。にしようとは思ってはいますが

でもなんか近いうちにこの処理は完成しそうなかんじです

ハッシュ値の計算

なんか書いてみるかな?ってことで
ハッシュ値を計算してみました

注:blueleafさん作のlongint.dllを使用しています


#include "longint.hsp"
#module
#defcfunc calc_hash var source
l=strlen(source)
tmp01=LongInt(0)
to_cmp=Longint(1)

dim v,l
repeat l
v(cnt)=peek(source,cnt)
loop

repeat l
tmp01+=Longint(v.cnt)*to_cmp
to_cmp*=31;注1
// logmes str(tmp01)
loop

tmp01\=2039;注2
r=int(tmp01)
// logmes str(tmp01)
return r

#global
s1="abc--start"
s2="def--start"
s3="abc--begin"
mes calc_hash(s1)
mes calc_hash(s2)
mes calc_hash(s3)
stop


注1:ハッシュ値は文字列の各要素に
31とか37を掛け続けた後、素数で除算して求めるみたいです

注2:文字コードの関係で¥が\になっています

ハッシュ値を計算できたはいいが
これをどんなデータ構造で管理するかは
今後の課題です

2009年1月2日金曜日

2ちゃんねる宣言

古本屋で売ってて安かったので買って読んでみました

ひろゆきさんがめんどくさがりなのに
こんな巨大サイトを製作するに至った経由とかが
読み応えありました

僕は普通の話題と下ネタは切り離して話すタイプで
普通の話題と下ネタが混ざっている2ちゃんねるは
ほとんど読んでないですけど
こういう本は楽しいですね

2ちゃんねるはやんないけれど
mixiは結構やります
色々なコミュニティにはいりすぎて
新着記事がいっぱいありすぎて
ほとんど追えてないですけど
mixiのコミュニティも
はまってるのがあればもっと楽しいんでしょうけれど
たまに日記書いて
マイミクが少ないので
マイミクの日記は全部読んでます

これはアレか?
自分でコミュニティ作るべき時期なんだろうか?
ま、そんな時は自分のサイトのコンテンツ増やすでしょうけれど

そうそう2ちゃんねるがシンガポールの会社に譲渡されるんですってね
利用してないのでコメントできませんが
あんなに巨大なサイトの経営が上手くいかないって
不思議やなぁ