麻雀ゲーム作成を待ってる人はいないですよね?
このblogで、麻雀ゲーム作成を宣言して途中で保留してしまってますが、完了を期待してる人とかいないですよね?
もしコメントがあれば、再開しなければならないと思ってるのですが、多分無いと思うので、気が向くまでは別の事に注力していこうと思っています。
| 固定リンク | コメント (3) | トラックバック (0)
このblogで、麻雀ゲーム作成を宣言して途中で保留してしまってますが、完了を期待してる人とかいないですよね?
もしコメントがあれば、再開しなければならないと思ってるのですが、多分無いと思うので、気が向くまでは別の事に注力していこうと思っています。
| 固定リンク | コメント (3) | トラックバック (0)
作成途中のSamuraiJanをダウンロ-ドできるようにしました。
右上のSamuraiJan Downloadからダウンロ-ドできます。
ソ-スはすぐしたのレポジトリから入手できます。 Subversionでアクセスできます。
| 固定リンク | コメント (0) | トラックバック (0)
wget --spider --http-user=<ログイン名> --http-password=<パスワ-ド>
3 http://www.mydns.jp/login.html でhttpアクセスしようとしても失敗するので、調べていたら、どうもgatewayが設定できていなかったみたい。
/sbin/route add で追加しても、ネットワ-ク再起動したら消えてしまうので、
/etc/sysconfig/network-scripts/ifcfg-eth0 へ、下記の1文を追加。
GATEWAY=192.168.11.1
/etc/rc.d/init.d/network restart
/sbin/route で、追加されている事を確認。
wget --spider --http-user=<ログイン名> --http-password=<パスワ-ド>
3 http://www.mydns.jp/login.html でLinuxからアクセスしてから、
http://www.mydns.jp/ のアクセスログ確認をしてOK。
| 固定リンク | コメント (0) | トラックバック (1)
今までのネット環境はEmobileをUSBでLinuxに接続して、Linuxをル-タとして使用していたけど、今度はEtherealのマンション付属のネット環境を使用するように、変更になりました。
■変更前
■変更後
これに伴い、LinuxをProxyサ-バとして使っていたのを全部やめたので、その備忘録。
Linuxをル-タに接続した状態で
ifconfig でeth0がLANケ-ブルIFである事を確認して、
vi /etc/sysconfig/network で、GATEWAY を変更
その後、各種ル-タとして使ってた時の機能をストップ、proxyのポ-トも受け付けないように変更
/etc/rc.d/init.d/ipmasq stop
chkconfig ipmasq off
/etc/rc.d/init.d/dhcpd stop
chkconfig dhcpd off
/etc/rc.d/init.d/squid stop
chkconfig squid off
iptables -D RH-Firewall-1-INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
| 固定リンク | コメント (0) | トラックバック (0)
今週末か来週くらいにver0.01リリ-スしようと思います。
ピンフだけ対応した状態の、使い物にならないレベルから・・・
| 固定リンク | コメント (0) | トラックバック (0)
SamuraiJanを公開するにあたり、ホームページ・ビルダー を買うかどうか迷い中。
ゲ-ムのダウンロ-ド、ソ-スのダウンロ-ド、当ブログへのリンク、等くらいなのが、テキストでhtml書いてもいいかな、とも思っていますが。
5/Mに引っ越し予定で、そこには100Mのブロ-ドバンドが付いてるので、引っ越し後なるべく早いタイミングで公開できればと思っています。
| 固定リンク | コメント (0) | トラックバック (0)
Linuxサ-バにサ-バソフトを入れて、Windowsパソコンにてクライアントソフトを4つ実行させて、通信し、麻雀できるところまで、進みました。
そろそろ公開かな、と思います。
| 固定リンク | コメント (0) | トラックバック (0)
自動でVersionUPするようにしました。 苦労したのは、なぜかcocologにUPしたjarファイルが期待通りダウンロードできなかった部分。 普通のバイナリダウンロード時によく使われる実装なのですが。
connect = (HttpURLConnection)url.openConnection();
is = connect.getInputStream();
os = new FileOutputStream(file);
なぜか特定のクラスパッケージだけ、無くなった状態でダウンロードされます。 ファイルの拡張子をjar⇒ja_ に変更したらできるようになりました。
ココログのサーバでなんらかの特殊処理をしている? のかわかりませんが、取り敢えず解決
| 固定リンク | コメント (0) | トラックバック (1)
SamuraiJanを公開する前に、サーバ上に新しいバージョンがあったら自動で更新するようにしたい。 http通信で処理したいが、プロキシ設定していたらサーバデータの確認がうまくできない。 (UnknownHostException が発生)
System.setProperty("http.proxyHost", "proxy.******"); を使えばできるが、できればIEのプロキシ設定を自動で取得したいのですが。。。 答えにたどり着きませんでした。
仕方ないからUI上から設定変更できるようにしようか・・・
| 固定リンク | コメント (0) | トラックバック (0)
IzPackを使ってインストーラを作成しました。 結構簡単にできました。 本当にフリ-でなんでも揃うものです。
このタイミングで作成した麻雀ゲームの名前をつけました。 途中で変更するかもしれませんが、SamuraiJanとします。
| 固定リンク | コメント (0) | トラックバック (0)
ゲーム開始から、平和を上がり判定できるところまで完成しました。 役はタンヤオ、その他の頻出のものを実装したら、ボチボチ公開しようと思います。
サイコロ振りボタン画像は、http://sozai.akuseru-design.com/ からダウンロード。
| 固定リンク | コメント (0) | トラックバック (0)
一部設計変更。 Modelの表示パフォーマンス目的の、Modelクラスを親クラスにして、上位Modelクラスに変更を通知する方法だと色々と不都合が生じてくる。
controlパッケージから新旧のModelをuiへ渡して、表示時に変更有無を判断させる方式とする。 旧Modelを持つためには、ディープコピーを行う必要があるが、javaのcloneメソッドを使うと各Model派生クラスでオーバーライドする必要があるため、Serializable(シリアライズ)を利用したディープコピーを行う。 下記のようなサービス関数を持つクラスを1つ作成してそれを利用する。
public static Object deepCopy(Serializable original) {
if (original == null) {
return null;
}
Object ret_obj = null;
ObjectInputStream in_obj;
try {
ByteArrayOutputStream out_byte = new ByteArrayOutputStream();
ObjectOutputStream out_obj = new ObjectOutputStream(out_byte);
out_obj.writeObject(original);
ByteArrayInputStream in_byte =
new ByteArrayInputStream(out_byte.toByteArray());
in_obj = new ObjectInputStream(in_byte);
ret_obj = in_obj.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return ret_obj;
}
| 固定リンク | コメント (0) | トラックバック (0)
JDKクラスの上でF3を押下しても、ソース参照はできないので、設定方法を調べて参照できるようにしました。 まず、PCの中に2つのJRE環境がある。 2つのうち、”jre6”フォルダはJREのみが格納されているので、ソースコードは存在しない。
自分のEclipseはこの、”jre6”フォルダのほうが設定されているので、まずは”jdk1.6.0_11”フォルダを設定する。 Windows⇒Preferences から、設定。
ここ待て設定したうえで、参照したいクラスの上でF3キー押下。 ”参照できません”と表示された場合は、”ソースを添付”を選択して、jdk1.6.0_11 下の”src.zip”を選択。 これで次から表示される。
| 固定リンク | コメント (0) | トラックバック (0)
設計までほぼ完了したので、実装を進めていく。 まずは各パッケージの格となるクラスのクラス作成まで。
実装結果はSubversionリポジトリ に格納している。 この記事がUPされた後も随時更新している。
| 固定リンク | コメント (0) | トラックバック (1)
前回記事で設計フェーズの記事一覧を記載したので、サーバ構築についても目次を改めて作成
開発ツール
サーバ構築
リポジトリ/Subversion/TortoiseSvn
| 固定リンク | コメント (0) | トラックバック (0)
ほぼ設計が完了したので、目次の意味を兼ねてUPしたきた記事の一覧を下記に記載した。 設計書はSubversionリポジトリ に格納してるので、ワードの設計書を見れば全体像を見やすいように構成している。 ※つもり
全体
control
ui
model
command
| 固定リンク | コメント (0) | トラックバック (0)
牌画像の表示座標計算方法については、下記図のようにボード幅から位置計算の一要素サイズを算出し、一要素サイズから基準座標を算出し、基準座標から各牌の表示座標を計算する。
| 固定リンク | コメント (0) | トラックバック (1)
牌画像データはまつせんさんのサイトからDLしたものを使用する。
DLした画像は下記のサイズ。
ただし、後述するように縦横で画像の”内部分”を共有するため、横画像についてはDLしたものは使わず、縦画像の内部分から生成する。
牌は、縦/横、立ち状態/捨て状態 がある事を考えると、下記の4種類がある。画像については、内側部分を共有して4種類の画像を生成するようにする。 赤枠の部分が”共通表部分画像”となる。
| 固定リンク | コメント (0) | トラックバック (0)
国士無双、七対子の判定を行い、もし成立する場合は、④の出力結果と比較して、得点の高いほうを採用する。
| 固定リンク | コメント (0) | トラックバック (0)
成立した各パターンに対して、役の判定をしていく。 判定のためには、成立パターン以外に、下記の情報が必要となる。
ModelScoreHolder の一部のメンバを使用して、最大点数になる役を保持する。 上がり牌種別 のデータを複数個持っている場合、1つの成立パターンで2つ以上の点数計算結果を出す必要があるケースがある。
例えば、③.重複成立パターン削除 の結果、2つに絞られた成立パターンを
入力とした場合を考える。 この時、上がり牌種別が”4”であった場合、1つの成立パターンにつき、2つの計算結果を出す必要がある。 対子の一部が上がり牌だったら単騎待ちの2符が付くが、平和の役は付かない、等の違いが発生のが理由。
仮に上記4つのパターンでの得点計算結果が下記のように異なる場合、最も高い点数が採用され、このプロセスの出力としてはこの1パターンに絞られる。
| 固定リンク | コメント (0) | トラックバック (1)
| 固定リンク | コメント (0) | トラックバック (0)
流局判定は単純で、Com_Winの上がり種別が流局で、残り牌が14個であれば成立し、テンパイしているものへ点数が流れる。
| 固定リンク | コメント (0) | トラックバック (0)
上がり判定は、
の順で行う。 各処理詳細は後述する。
| 固定リンク | コメント (0) | トラックバック (1)
次は上がり判定について。
上がり判定メソッドはCom_Winに持たせる。 上がり種別には3種類ある。
これも上がりの一種として処理するようにする。 残り山牌が14枚であれば、即成立するので、まず流局かどうかを確認する。
1人のプレイヤーが14個の牌を持っている状態でCom_Winコマンドを送信する事になる。
捨て牌されたタイミングで、他家プレイヤーがCom_Winコマンドを送信する事になる。
2番目と3番目のケースで上がり判定メソッドを共有できるようにするため、14枚目の牌を内部的に”上がり牌”として認識しつつ、それ以外の組合せパターン判定ロジックにおいては14牌をソートした状態で判断処理を行う。
| 固定リンク | コメント (0) | トラックバック (1)
設計基本方針に1つ追加。 頭の中ではそういう事になっていたけど、明記していなかった点をNetJan設計書.doc (svnリポジトリ) へ追記。
基本的に、サーバとクライアントは常に同じデータを保持する方針とする。 こうする事により、設計とデバッグをシンプルにさせる。 伴い、Com送信も常にサーバが処理したら必ずクライアントに送信して同じ処理をクライアント側でも行うようにする。
例えば、得点計算画面表示中において、4つのクライアントから計算画面のClose要求を受信してから次の局に移る。 設計選択肢の1つとして、4つのクライアント全員からClose要求が集まってから、サーバ→クライアントへ計算画面Close通知コマンドを送信する事もできるが、そうではなく、1つのクライアントから要求が来る度に全員にその都度伝え、”どのクライアントからClose要求が来てるか”というフラグについてサーバ/クライアントで共有する。
| 固定リンク | コメント (0) | トラックバック (1)
最後に、各局の終了時に使用されるコマンド
| 固定リンク | コメント (0) | トラックバック (1)
次はゲーム中に使用されるコマンド。 これらのコマンド群の使われ方を理解するには、サブ状態 を十分に理解している必要がある。
| 固定リンク | コメント (0) | トラックバック (0)
Com_ShuffleはCom_DiceSeat処理時に自分が親だったら自動で要求発行される。 親以外からの要求は拒否する。 サーバ側は牌をシャッフルし、134個の牌の配列をまず作成し、クライアントへ送信、134個をModelHolderPileへセットする。 クライアントは配列を受信したら同じようにセットする。
Com_DiceDevide も親からの要求のみ許可される。 サイを振り、結果によってModelBoardのgpos_nexttake、ModelHolderPileのnexttake、をそれぞれセットする。 例えば、サイの目が“3”であった場合、gpos_nexttake=2、nexttake=7となる。 ここでの6は、西家プレイヤーの右手から見て何牌目のところから配牌するか、を示す。
Com_Distribute も親からの要求のみ許可される。 牌を山から手牌へ移動する。 親には14枚目まで配る。 この時点で、6.6.2サブ状態 のWAIT_DISCARDになり、親の捨て牌を待つ形となる。
| 固定リンク | コメント (0) | トラックバック (0)
各Comコマンドのトリガ条件、Requestコマンドに付加されるデータ、(許可された場合の)サーバでの実行内容、Notifyコマンドに付加されるデータ、クライアントでの実行内容、を表にしたもの。 これら以外に、許可条件があるがこれについては以下表では省略する。
Com_Startはサーバへのゲーム参加要求。 サーバから許可通知を受信した場合、受信したloginnames配列と自分のログイン名(myloginname)を比較し、例えば配列のloginnames[3]とmyloginnameが等しい場合、myloginindexは“3”になる。
次にCom_SeatConfigコマンドにて、席順を決める。 本来は東南西北の牌をそれぞれが引いて決めるが、まずは固定とする。 gpos[0] (サーバ) = 5、gpos[1] (ゲームに最初に参加した人) = 3、gpos[2] = 2、gpos[3] = 1、gpos[4] (ゲームに最後に参加した人) = 0 と割り振る。 あえて参加順序と逆にするのは、そのほうがデバッグがしやすいと考えるから。 ただ、loginindexはゲームが開始されれば、ほとんど意識しない識別概念となる。
この時点でgpos=0の人が仮親なので、Com_DiceSeatで親決める事になる。 サイコロを振る権利の無い人からのコマンドは拒否される。
| 固定リンク | コメント (0) | トラックバック (1)
サブ状態の定義のさせ方により要求の輻輳に対する処理方法を設計する。 例えば、プレイヤーAからのチー要求と、プレイヤーBからのポン要求が輻輳した場合、プレイヤーAからのチー要求を受けたサーバーは、チーが可能な状況でもすぐには許可せず、一旦、待ち状態(STEAL_REQUESTED)に移り、もっと優先度の高い要求が来ないかを確認してから、許可通知を行う。
下記がその状態遷移図(ステートチャート図)
| 固定リンク | コメント (0) | トラックバック (0)
内部クラス図内、ControlComGeneratorは、コマンドの自動生成を行うクラス。 通常のコマンド処理は、クライアントからの要求が元となって、サーバで実行可否判断が行われるが、サーバで自動生成されるケースもある。
例えば、プレイヤーの1人が牌を“ツモ“ると、一定時間内に捨てる必要がある場合。 そうしないと、他のプレイヤーは永久に“ツモ“をしたプレイヤーの捨て待ちとなってしまうからである。 このようなケースにおいて、ControlMainからControlComGeneratorへ“ツモ“コマンドが発生した事を通知し、Generator側はその時点からのタイマーで、”捨てる“コマンドの自動生成を行う。
| 固定リンク | コメント (0) | トラックバック (1)
modelの識別概念の続きで、uiの関係する部分である、表示位置判断について記載する。
表示ポジションは、どの視点からゲーム盤を表示するかという概念。 Modelクラス、controlクラスでは、この概念は意識しない。
自分の位置を目の前とするので、そこを0とした時、席順(反時計周り)に、90、180、270という反時計周りに何度回転した状態か、というデータで保持する。
例えば、modelの状態が下記の状態であったとする。
”南”家のプレイヤーの表示をする際には、下記のように、gpos=0の部分を目の前として表示する。 ”自分がgpos=0である”という事は、myloginindexが”2”であるところから、導き出せる。
同じデータ状態でも、”西”家プレイヤーから見ると、下記のようになる。 このイメージ図では、南が下にあるが、西プレイヤーの画面には、西が一番下に表示される。
| 固定リンク | コメント (0) | トラックバック (0)
麻雀は4人で行うゲームであるため、4人を識別を行う必要があるが、識別概念には、4つの種類がある。ログインindex、Gameポジション、役割、表示ポジションの4種。
ログインindexは、ゲームへの参加要求順番に割り当てられる。
| 固定リンク | コメント (0) | トラックバック (1)
先日設定したWebalizerの集計を見ようとして、開くと、下記エラーが発生。 先日は見れてたのに・・・ httpdの再起動で無理になったのかな。
Forbidden
You don't have permission to ~
/etc/httpd/conf.d/webalizer.confに、下記行を追加
Allow from 192.168.11.0/24
/etc/rc.d/init.d/httpd restart
これでも同じ結果・・・ 仕方ないので、Wiresharkでパケット解析。
どうもLinuxサーバにDNSしにいこうとしてるみたい。 ブラウザのツール⇒インターネットオプション⇒接続⇒LANの設定⇒詳細設定 に、LinuxのURLを追加して解決。
| 固定リンク | コメント (0) | トラックバック (0)
表示更新処理は、uiパッケージ内のクラスで行うが、表示更新のパフォーマンスを確保するため、下記の2点を設計方針とする。
| 固定リンク | コメント (0) | トラックバック (0)
MVC間の排他制御は、Model部へのデータ更新(Comクラス経由にて行う)、View部への表示指を、ControlMainクラスが一括で行う事により行う。
独習Javaを見てsynchronized化部分を理解し直して作成。
| 固定リンク | コメント (0) | トラックバック (0)
Subversionの整理が完了したので、設計書を見直していたら、どうも見づらく感じました。 Word、Excel、Judeの3つの良いとこどりをして、それぞれの形式で表現しやすい部分をそれぞれのファイルに記載する方針としていましたが、どの情報がどこに書かれているか、全体像が掴みにくいです。
なので、基本、Wordをメインの設計書とし、ExcelやJudeで作成したものは画像等にしてインポートして、Wordに全体像がわかりやすく表されてる事を目標とします。
今回、モデリングツールとして何を使うか色々調べました。 前に活動していたのが1年前なので、もっと良い、Eclipse上でソースと綺麗に連携できるフリーのツール等出てきてるかと思いましたが、まだまだ発展途上な感があります。 なので、Judeを継続して使う事に決めました。
また、設計内容についても、modelパッケージについては元祖 デザインパターンで紹介されている、Compositeパターンを使ったほうがうまく作れそうなので、この点、方針変更します。
| 固定リンク | コメント (0) | トラックバック (0)
LinuxサーバはEmobileのカードで繋いでおり、公開用として使う状態にはなってないけど、先にWebalizerを入れておく事にしました。
インストールして、
yum install webalizer
/etc/webalizer.conf を編集。 ローカルからのアクセス集計をして欲しくないから、IgnoreSiteで設定。 格納場所はデフォルトでクライアント側からhttp://www.alesi.mydns.jp/usage で見れるように、htmlディレクトリ内に指定
HostName alesi.mydns.jp
OutputDir /var/www/html/usage
IgnoreSite 192.168.11.*
集計実行。
/usr/bin/webalizer
IgnoreSiteで設定したのに、反映されず集計されてしまう。 色々調べてると、どうも、 /etc/webalizer.conf 内の、HistoryName、IncrementalName で設定されているファイルに、キャッシュみたいなものが残ってるみたい。 /etc/webalizer.conf を開いて、
HistoryName /var/lib/webalizer/webalizer.hist
IncrementalName /var/lib/webalizer/webalizer.current
hist、currentの2ファイルを削除してから、再び集計実行させると、うまくいきました。
解析作業は定期的に行うように設定しておく。 wgetの時同様、crontab -e で定期実行を指定するファイルを開き、下記の行を追加して保存。
0 9 * * * /usr/bin/webalizer
| 固定リンク | コメント (0) | トラックバック (0)
Eclipse上のSVNリポジトリViewから、ブランチやタグの操作ができるみたいなので、やはりtrunkからでなく、その親フォルダから登録し直す。
既にリポジトリに作成済みの空フォルダ、”6_ソースコード/NetJan” フォルダにソースとプロジェクトが入るようにしたいので、Eclipseプロジェクトを作成する。 Eclipseのファイル ⇒ Import ⇒ SVNからプロジェクトをチェックアウト 既存のリポジトリロケーション利用を選択
SVNリポジトリのどの部分からImportするか選択できるので、~ 6_ソースコード/NetJan を指定。
新規プロジェクトウィザードを使ってプロジェクトとしてチェックアウト ⇒ JavaProject 選択。 既存ソースから作成、を選択してローカルの”~ 6_ソースコード/NetJan”に対応するフォルダを指定。
Finishボタンを押して終わり、のはずが、 ”This client is too old to work with working copy”とかいうエラーが発生。 メッセージ内容からして、ローカルリポジトリのSubversionのversionと、Subclipseのものが違ってそう。 調べてみると、Subversionの1.5移行のリポジトリの場合、Subclipseはversoin1.4.7以降を使う必要があるとの事。。。
前回記事で http://subclipse.tigris.org/update をEclipseのUpdateサイトとして登録したが、ここからだとSubclipseの1.4.7以降はDLできないみたい。 なので、削除して、代わりに、 http://subclipse.tigris.org/ で紹介されている最新のversion1.4.7用のURL、http://subclipse.tigris.org/update_1.4.x を登録。 ここからSubclipseをDL(ダウンロード)。
update_1.4.x 下のもの全てにチェックを付けて、Install
(中途半端に作成されたものを削除してから) 改めて同じ手順を踏んで、プロジェクトを作成。 今度こそ成功した!
実験的にクラスを作成し、Commitしてみる。
チェックイン成功したので、今度はTortoiseSvnから確認してみる。 ローカルの”~ 6_ソースコード/NetJan”で右クリックして、RepositoryBrowserで確認すると、Eclipseのプロジェクトファイル、作成した試験クラス、等がCommitされているのがわかる
それにしても、今後はSubversionのDBのversionが変わる事に注意しなければないない、と思いました。
| 固定リンク | コメント (0) | トラックバック (0)
EclipseとSubversionの連携をしていきます。 Subclipseというものを使えば、できるらしいので、Eclipseに組み込みます。 Help -> Software Update -> Available Software から、”Add Site”を選んで、http://subclipse.tigris.org/update を入力。
すると・・・ ”No repository found at eclipse” とかいうエラーが発生。 通信エラー発生時の頼みの綱、WireShark で確認すると、何とパケットが全く流れていない。 そもそもパケット送信する前にエラー発生したと判定されてしまってるという事か。 もしかして、proxyを通ってくれていないのかな? と思い、proxyの設定をできる項目を探したらありました。
Windows -> Preferences -> Network Connections
もう一度”Add Site”すると成功。 追加したサイトをチェックして、Install。
Eclipse再起動するよう聞かれるので、再起動。 次に、Eclipse左したのボタンから、Other選択
SVNリポジトリを選択。
SVNリポジトリ画面が開くので、リポジトリの追加ボタンを押して、作成したtrunkのリポジトリを入力。 trunkの親を指定したほうがやりやすいのかもしれないが、必要なら変更します。
| 固定リンク | コメント (0) | トラックバック (0)
リポジトリ内に、trunk、branches、tagsを作成。 適当なフォルダから右クリックしてリポジトリブラウザを開き、
フォルダを作成 ⇒ ”trunk”入力 のようにして作成していく。
次に、ローカルの”svn”フォルダを右クリックし、SVNCheckout
URL部分には、http://www.alesi.mydns.jp/svn/netjan/trunk
チェックアウトディレクトリ部分には、C:\work\Job\Output\NetJan\svn\
を入力
今までの過程で作成したものを、格納する。 格納の方法はTortoiseSvnの説明書を見なくてもわかる。 この時点でtagを作成しておく。 RevisionGraph使うと、格納された様がわかりやすい。
| 固定リンク | コメント (0) | トラックバック (0)
Subversionのリポジトリに、設計書、ソースコード、その他をどのように格納していくか、を決めていきます。
くらいの基準で、まずは決めて進めていく。
当然、Subversion内には、trunk、tags、branchesを持たせた上で、上記のフォルダイメージを1つの固まりとして管理する。
閲覧は、http://www.alesi.mydns.jp/svn/netjan で外からもできるようにしておくが、現時点、Emobileのカードを抜いた時点で、外からのアクセスは途絶えてしまう状態。
| 固定リンク | コメント (0) | トラックバック (0)
前回記事では、Apacheと連携したsubversion設定について記載したけど、今の設定方法では、リポジトリが全ユーザから書き込み可能な設定になっている。
drwxrwxrwx 7 toshiki toshiki 4096 2009-01-01 23:37 test
これはあまりよくないので、NetJan開発用のリポジトリはグループユーザのみフルアクセスを許可する形にする。 httpdはapacheというユーザで実行されているので、apacheとtoshikiを同じグループに所属させ、このグループに書き込み許可を行う。
groupadd subversion
usermod -G subversion apache
usermod -G subversion toshiki
vi /etc/group でグループ作成されているのを確認しておく。
ついでに、新しいsubversoinユーザを作成しておく
cd /etc/httpd/conf.d/
htpasswd -mc svn.passwd nj_dev
パスワードは非公開 ★非公開010★
TortoiseSvnからnj_dev でtestリポジトリにチェックインできる事を確認。 OK! 次に、新しいNetJan用リポジトリを作成し、グループまでしかアクセスできないように設定
chmod 774 netjan -R
ノートPCから同じようにアクセスしようとすると、”Could not open the requested SVN filesystem” とエラー
・・・ Linuxの事をよくわかっていなかっけど、作成時にプライマリグループがtoshikiになってしまってると、ownerが、toshiki:toshikiになってしまい、せっかく作成したsubversionグループに属していない事になるみたい。 なので、chownで補正
chown -R toshiki:subversion netjan
もう一度 ノートPCからアクセスすると、成功した!
| 固定リンク | コメント (0) | トラックバック (0)
先日の記事にて、TortoiseSvnからのアクセスがうまくいかなかったが、それ以前にhttp経由でアクセスできるようにしてから、問題解決しようと思い、まずはhttpd(Apache)にsvn(subversion)を連携させました。
まずは、mod_dav_svn をイントール。
yum install mod_dav_svn
次に、/etc/httpd/conf.d/subversion.conf を編集
<Location /svn>
DAV svn
SVNParentPath /var/www/svn/repo
# Limit write permission to list of valid users.
<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /etc/httpd/conf.d/svn.passwd
Require valid-user
</LimitExcept>
</Location>
/etc/httpd/conf.d/svn.passwd にユーザ一覧とパスワードが登録される事になる。 次はこのファイルの設定。
htpasswd -mc svn.passwd ★非公開009★
パスワードを聞かれるので、入力して設定する。 ★非公開009★
apacheを再起動。 httpdデーモンで動作するので、iptablesのsvnデーモン用のポートをアクセスさせないようにする。 ※”iptables -D~”で削除
/etc/rc.d/init.d/httpd restart
iptables -D RH-Firewall-1-INPUT -p tcp -m tcp --dport cvspserver -j ACCEPT
iptables -D RH-Firewall-1-INPUT -p udp -m udp --dport cvspserver -j ACCEPT
次に、ノートPC側(ローカル)に、適当なフォルダを作成する。 右クリックし、”SVN Checkout” サーバ側のURLと、ノートPC側の作成したフォルダのパスを入力してOK。 成功したらその旨ダイアログBoxが表示される。
サーバ側のURLは、
しかし、ローカルフォルダ内に適当なテキストファイルを作成して、Commitしようとすると、”Can't create directory '/var/www/svn/repo/test/db/transactions/1-1.txn': Permission denied”のエラー発生。。。
色々調べてると、Subversionの情報サイト に、解決方法が記載されていた。 どうも、Apacheを実行しているユーザに対して、リポジトリ内の全てのフォルダ、ファイルへのアクセスを許可する必要があるみたい。
Apacheを実行しているユーザ というのは、恐らく、/etc/httpd/conf/httpd.conf 内、”User”で設定されているユーザの事。 今日のところは、"chmod 777~" を使ってこのユーザ以外も含めて全てのユーザにアクセス許可する。
リポジトリがあるフォルダに移動して、chmod実行 ※-Rは、testフォルダ以下の全てのファイルとフォルダに対しての設定
cd /var/www/svn/repo
chmod 777 test -R
再び、ローカルPCの作成したフォルダから、右クリック⇒SvnCommitを選択すると、ユーザとパスワードを聞いてくるので、htpasswd で作成したユーザとパスワードを入力して 成功!
| 固定リンク | コメント (0) | トラックバック (0)
前回記事にて、D02HW を使ってLinuxサーバからネットアクセスできるようにしたので、今度は、ノートPC2つ(Let’sNoteとVaio)から、Linuxをproxyとして使ってネットアクセスできるようにします。
まず、/etc/sysconfig/network のゲートウェイを、eth0に設定する。
GATEWAY=ppp0
yumコマンドで、dhcp, squidをインストール
yum install dhcp
yum install squid
次に、できるPRO Fedora 8 Linux (DVD付) から、NATの設定をコピーし、アクセス制限変更。
mount /dev/cdrom /mnt
cp /mnt/dekiru/ipmasq /etc/rc.d/init.d
chmod 755 /etc/rc.d/init.d/ipmasq
/etc/rc.d/init.d/ipmasq を編集する。 私の自宅の場合、eth0がハブ(ルータ)に繋がってる、イントラネットのデバイスで、ppp0がemobileが繋がってる、外部インターネットへのデバイスなので、下記のように修正
IF_OUT=ppp0
IF_IN=eth0
LOCALNET=192.168.11.0/255.255.255.0
iptables -I RH-Firewall-1-INPUT -i eth0 -o ppp0 -j ACCEPT
iptables -D RH-Firewall-1-INPUT -i eth0 -o ppp0 -j ACCEPT
NATを起動させ、また次回Linux起動時に自動で立ち上がるようにしておきます。
/etc/rc.d/init.d/ipmasq start
chkconfig ipmasq on
次に、DHCPの設定をします。 /etc/dhcpd.conf のモード変更を行い(chmod 644 /etc/dhcpd.conf)、その後下記編集
subnet 192.168.11.0 netmask 255.255.255.0 {
range 192.168.11.16 192.168.11.240;
option broadcast-address 192.168.11.255;
option routers 192.168.11.100;
option domain-name "alesi.mydns.jp";
option domain-name-servers 60.254.193.158;
option netbios-name-servers 192.168.11.100;
}
次に、DHCPのデーモンファイルを、できるPRO Fedora 8 Linux (DVD付) からコピー。 その前に現時点のものをバックアップしておく。
mv /etc/rc.d/init.d/dhcpd /etc/rc.d/init.d/dhcpd.20090102
cp /mnt/dekiru/dhcpd /etc/rc.d/init.d
chmod 755 /etc/rc.d/init.d/dhcpd
/etc/rc.d/init.d/dhcpd を編集し、eth0 をinputとして設定
IF_IN=eth0
DHCPを起動させ、また次回Linux起動時に自動で立ち上がるようにしておきます
/etc/rc.d/init.d/dhcpd start
chkconfig dhcpd on
次に、squidサービス(proxyサービス)を設定していきます。 /etc/squid/squid.conf を編集。 squidサービスは一般的に8080ポートを使うので、8080を設定。
http_port 8080
ftp_user Squid@alesi.mydns.jp
※ "acl CONNECT method CONNECT" の上に追加
acl localnet src 192.168.11.0/24 119.72.29.75/29※ "http_access allow localhost"の下に追加
http_access allow localnet
8080に対して、パケットを受け付けるようにiptableを設定、その後、squidサービスを起動。
iptables -I RH-Firewall-1-INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/squid start
chkconfig squid on
ここまでで、Linuxサーバ側の設定は完了。 次はノートPC側の設定。
C:\WINDOWS\system32\drivers\etc\hosts ファイルに、"proxy.alesi.mydns.jp"を192.168.11.100 として登録。
その後、ブラウザにproxy.alesi.mydns.jpを登録する
ノートPCから適当にネットサーフィンしてみる・・・ 成功!
■■■■■■■ 参考図書 ■■■■■■■
・できるPRO Fedora 8 Linux (DVD付)
・Linuxの仕組み
・しっかり学べるUML2.0
・元祖 デザインパターン
・独習Java
・入門Subversion
■■■■■■■■■■■■■■■■■■■■
| 固定リンク | コメント (0) | トラックバック (1)
年末にLetsNoteを買った事により、今まで使ってたノートPCを妻用にしました。 ただ、これにより、Emobileカードを何回も差し替えないといけないという事になり、 ”Linuxサーバ(Fedora8)にEmobileを繋げて、proxyにしたらいいんでは?” と思い立って、やってみました。 ただ、大抵の設定例はGUIなので、コマンドラインだけでの対応にはなかなか苦労したので、メモを残しておきます。
今回思ったのは、英語がスラスラ読めるメリットの大きさです。 英語のサイトまで足を広げると、大分助かりました。
まずは、Emobile(D02HW)をLinuxに差し込みます。 この時点で、Linuxがモデムを認識していないと、以下の手順以前の状態なので、このサイトだけでは解決できません。
まずは、モデムのシリアルが認識されているか、下記コマンド実行。 Linuxでは、モデムはシリアルとして扱われるそうです。
dmesg | grep tty
下記のように、"ttyUSB0"のような表示がされれば、認識OK。
usb 4-1: GSM modem (1-port) converter now attached to ttyUSB0
usb 4-1: GSM modem (1-port) converter now attached to ttyUSB1
次に、モデムからのダイアリングをするモジュールをインストールします。
yum install wvdial
インストール完了したら、etc/wvdial.conf を作成します。
[Dialer Defaults]
Phone = *99***1#
Username = em
Password = em
Stupid Mode = 1
Dial Command = ATDT
Modem = /dev/ttyUSB0
Baud = 3500000
Init2 = ATZ
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
ISDN = 0
wvdial を実行し、接続成功したら、Ctrl+Cで止めます。
次に、今まで私の自宅LinuxはノートPC経由してネット接続していたので、defaultのゲートウェイがノートPCを指してるので、これを削除します。
/sbin/route delete default
wvdial & で、改めてモデムからダイアルし、Ctrl+Cではなく、リターンで接続継続したままコマンドプロンプトへ。 /etc/resolv.conf のDNSサーバのIPを、wvdialで取得したEmobile経由のものに更新。
先日、ノートPC経由でyumやwgetを行うように設定したので、これらを元に戻しました。 この状態で、yumとwgetが成功する事を確認成功!
次記事では、ノートPCからのネットサーフィンができるところまで。
■■■■■■■ 参考 ■■■■■■■
・できるPRO Fedora 8 Linux (DVD付)
・Linuxの仕組み
・しっかり学べるUML2.0
・元祖 デザインパターン
・独習Java
・入門Subversion
■■■■■■■■■■■■■■■■■
テキスト コマンドライン CUI コマンドプロンプト イーモバイル 通信カード
| 固定リンク | コメント (0) | トラックバック (0)
次はノートPCにTortoiseSvnをインストール、設定していく。 まずは、http://tortoisesvn.tigris.org/ から、TortoiseSVN-1.5.6.14908-win32-svn-1.5.5.msi をダウンロードし、インストール。 普通に”次へ”を選択していくだけでOK。
インストールが完了すると、Windows上のどのフォルダからでも、右クリックするとTortoiseSvnのメニューが選択できるようになる。
まずは、リポジトリブラウザで、リポジトリが見れるか確認。 なんと・・・
”no access allowed to this repository” と表示され、いきなりこけた。 色々調べてみると、/var/www/svn/repo/test/conf/ ディレクトリ内、
と、見れるようになった。 ただ、気になるのは、なぜ認証を聞いてこないのか、こちらはtoshikiユーザとしてアクセスしたいのに。
| 固定リンク | コメント (0) | トラックバック (1)
次はLinuxサーバ(Fedora)Subversionの設定を行っていく。
------------------------------------------------
service svnserve
{
disable = no
socket_type = stream
wait = no
user = toshiki
server = /usr/bin/svnserve
server_args = -i -r /var/www/svn/repo
log_on_failure += USERID
only_from = 192.168.11.0/24 127.0.0.1
}
------------------------------------------------
------------------------------------------------
svnserve 3690/tcp # Subversion
svnserve 3690/udp # Subversion
------------------------------------------------
------------------------------------------------
iptables -I RH-Firewall-1-INPUT -p tcp -m tcp --dport 3690 -j ACCEPT
iptables -I RH-Firewall-1-INPUT -p udp -m udp --dport 3690 -j ACCEPT
------------------------------------------------
------------------------------------------------
iptables -D RH-Firewall-1-INPUT -p tcp -m tcp --dport 2401 -j ACCEPT
iptables -D RH-Firewall-1-INPUT -p udp -m udp --dport 2401 -j ACCEPT
------------------------------------------------
------------------------------------------------
chkconfig --add svnserve
service xinetd restart
------------------------------------------------
------------------------------------------------
anon-access = none # Anonymous(匿名)ユーザのアクセスを許可しない
auth-access = write # 認証済みユーザには書き込み権限を与える
password-db = passwd # パスワードファイルをpasswdとする
realm = sample repository # リポジトリの説明(適当でOK)
------------------------------------------------
------------------------------------------------
[users]
toshiki=★非公開009★
------------------------------------------------
ここまでで、設定作業は完了。
■■■■■■■ 参考 ■■■■■■■
・できるPRO Fedora 8 Linux (DVD付)
・その場でつかえるしっかり学べるUML2.0
・元祖 デザインパターン
・独習Java
・入門Subversion
■■■■■■■■■■■■■■■■■
次回はノートPCからのアクセスについて
| 固定リンク | コメント (0) | トラックバック (0)
さて、先日の記事で登録したmydnsについて、Linuxからアクセスしてみる。 http://connect2.jp/weblog/2007/05/linuxproxy.html を参考に、下記のproxy設定を行う。
■wgetの設定
/etc/wgetrc
http_proxy=http://[servername or server IP] :[port number]/
できるPRO Fedora 8 Linux (DVD付) の284ページを見ながら、”wget --spider --http-user=mydns33333 --http-password=<登録したパスワード> http://www.mydns.jp/login.html”を実行。 mydns サイトを見て、Linuxからアクセスされた事を確認できた。
■■■■■■■ 参考 ■■■■■■■
・できるPRO Fedora 8 Linux (DVD付)
・その場でつかえるしっかり学べるUML2.0
・元祖 デザインパターン
・独習Java
・入門Subversion
■■■■■■■■■■■■■■■■■
上記の本とネットで調べながら、ここまでの作業を行ってます。
| 固定リンク | コメント (0) | トラックバック (0)
先日の記事にて、subversionのインストールができてなかったのですが、色々試行錯誤の末、できました。
そもそも、事をややこしくしてるのは我が家のネットワーク環境。 後はLinuxの仕組みの理解不足。 HOW LINUX WORKS を買って勉強予定。
上記のように、ノートPC(LetsNote)からしか、インターネットにアクセスできないようにしてるので、LinuxServerも、ノートを経由させなければインストール等ができない。 麻雀ゲーム完成して、稼働する段になれば別のネットサービス申し込みますが。
Linuxから”yum install subversion”としても、失敗するので、まずはノートPCとLinuxがネット的に接続されているのかを確認していく。 フリーソフトのWireShark を使って、パケットをモニタリングしながら、コマンドラインからping。 すると、パケットは流れてるけど、pingはタイムアウトしてる。。。 つまり、データはきてるけど、アプリ(ここではping)までは届いていない状態。
ファイアウォール関係でブロックされてるみたい。 ウイルスバスタを見ていくと、どうもここでブロックされてるみたい。 192.168.11から始まるIPなら、すべて受け付けるように設定。
ここまでしても・・・ yumコマンドは失敗。 WireShark を再び使って調べてると、yumコマンドをLinux側で実行してもノートまで来てない。 linuxがノートPCをproxyとして認識しなければならないが、それができてないのか。 http://connect2.jp/weblog/2007/05/linuxproxy.html を参考にして設定し、更に・・・フリーソフトのproxyソフトをノートPCに入れる( BlackJumboDog )
ここまで設定すると、やっとLinuxのYumが成功!
下記はyum通信をproxy経由で行うための設定。
yumの設定
/etc/yum.conf
proxy=http:// [servername or server IP] :[port number]/
| 固定リンク | コメント (0) | トラックバック (0)
次は、Java開発環境のデファクトスタンダードである、eclipseをhttp://www.eclipse.org/downloads/からダウンロードする。
Windows用のものをダウンロード。 解凍して、適当なところに移動するだけです。 起動はフォルダ内のeclipse.exe をクリックで。 初めて立ち上げると、ワークスペースをどこにするか聞かれるが、適当なところにワークスペース用のフォルダを作成して、そこを指定する。
Javaの言語の勉強は、独習Java でOKと思います。 今回の麻雀ゲーム作成にあたって、ちょっと読み直そうと思ってます。
| 固定リンク | コメント (0) | トラックバック (0)
今後の麻雀ゲーム作成は、最近買ったLetsNoteで行うため、改めて必要なソフトをインストールする。
まずは、JavaのSDKを http://www.sun.com/ からDL。
その次に、Judeをhttps://jude.change-vision.com/jude-web/index.html からインストール。
JudeはUMLモデリングツール。 UMLについては、その場でつかえるしっかり学べるUML2.0 がお勧め。 この本を見ながら設計を進めていく予定。
| 固定リンク | コメント (0) | トラックバック (0)
インターネットからアクセスできるようにするため、http://www.mydns.jp/ にて、ドメイン登録をしました。 お金がかからないのが良いですね。
ユーザ登録の後、上記のように入力してドメイン登録。
久しぶりにこの本を引っ張りだしてきて、対応しました。
| 固定リンク | コメント (0) | トラックバック (0)
次に、SubVersionを導入する。 実際のメーカ等でも、事実上のデファクトスタンダードになりつつあるのを感じるこのソフトを使わない手は無いです。
rpm -qi subversion
yum install subversion
コマンドで、subversionインストール済か確認後、インストールされていない事を確認のうえ(自分のサーバなのでわかってるけど)、インストール。 ただ、ここでエラーが大量に発生。 以前はLinuxから直接ケーブルテレビのモデムに繋いでたけど、これが無いのでノートPCのEmobile経由してインストールする必要がある。。
http://park15.wakwak.com/~unixlife/linux/net-gateway.html を参考にして、192.168.11.200(ノートPC) をデフォルトゲートウェイに設定へ変更。
不要かもしれないが、shutdown -r now で再起動させておく。 これでうまくいかない・・・
”not using ftp, http”とかいうエラーでyumが失敗する。 色々調べて見るが解決まで至りませんでした。
| 固定リンク | コメント (0) | トラックバック (0)
麻雀ゲーム、NetJanの設計をようやく再開。 サーバとクライアントの間のコマンドのやりとりについて、Comクラスの送受信で行うが、このクラスの派生クラスをそれぞれ設計していく。
サイコロを振って山を分けるところまでのコマンドについて、完成
最近迷ってる事があって、これが一通り終わると、大体ゲームの一連の流れの設計ができたことになるけど、あがり判定も設計書に落としてからコーディングすべきか、コーディングの着手を早めるか、どっちにしようか。
■■■■■■■ これまでの作業で読んだ本 ■■■■■■■
・できるPRO Fedora 8 Linux 完全活用編(DVD付)
この本に付属のCDで自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
・その場でつかえるしっかり学べるUML2.0
UMLとは何か? から説明しています。 わかりやすいのでお勧めです。
・オブジェクト指向における再利用のためのデザインパターン
設計時にデザインパターンを参考にしながら行っているので、辞書的に使ってます
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
■■■■■■■■■■■■■■■■■■■■■■■■■■■
| 固定リンク | コメント (0) | トラックバック (2)
Com(コマンド)の処理を決めていく。 ステートチャート図設計時に定めたステートの遷移をたどりつつ、各コマンドで更新するModelも決めていく。
今日はCom_DiceSeatまで完了し、次回はCom_Shuffleから進めていく。
■■■■■■■ これまでの作業で読んだ本 ■■■■■■■
| 固定リンク | コメント (0) | トラックバック (1)
設計が進んできたので、今までの設計の記事を再度列挙。 以前設計記事を列挙した記事を一度UPしたけど、それも含める形で列挙。
ここまでの設計書をUP ⇒ 「NetJan_20080202_2005.zip」をダウンロード
■■■■■■■ これまでの作業で読んだ本 ■■■■■■■
・できるPRO Fedora 8 Linux 完全活用編(DVD付)
この本に付属のCDで自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
・その場でつかえるしっかり学べるUML2.0
UMLとは何か? から説明しています。 わかりやすいのでお勧めです。
・オブジェクト指向における再利用のためのデザインパターン
設計時にデザインパターンを参考にしながら行っているので、辞書的に使ってます
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
■■■■■■■■■■■■■■■■■■■■■■■■■■■
ここらへんでレビューしてもらいたいところだけど、1人のプロジェクトなのでできない。
| 固定リンク | コメント (0) | トラックバック (0)
Excelでのデータ設計が完了した。 大体思いつく限りでは、ここで定義したデータがあれば、ゲームの状態を表せるはず。 あとは微調整レベルくらいで済むはず。
■■■■■■■ これまでの作業で読んだ本 ■■■■■■■| 固定リンク | コメント (0) | トラックバック (0)
各Model派生クラスのメンバについては、Excelのほうが見やすいので、こちらで表すようにする。
続き
ModelBoard については、明日以降に追記予定。
■■■■■■■ これまでの作業で読んだ本 ■■■■■■■| 固定リンク | コメント (0) | トラックバック (0)
ModelHolder派生クラス、各派生クラスのメソッドを決める。 捨牌、手配、山牌、のそれぞれで、必要なメソッドが少しずつ異なる。
■■■■■■■ これまでの作業で読んだ本 ■■■■■■■
・できるPRO Fedora 8 Linux 完全活用編(DVD付)
この本に付属のCDで自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
・その場でつかえるしっかり学べるUML2.0
UMLとは何か? から説明しています。 わかりやすいのでお勧めです。
・オブジェクト指向における再利用のためのデザインパターン
設計時にデザインパターンを参考にしながら行っているので、辞書的に使ってます
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
■■■■■■■■■■■■■■■■■■■■■■■■■■■
技評の記事で勉強もします。
| 固定リンク | コメント (0) | トラックバック (0)
ModelTileHolderについて、派生クラスとの関係を考えつつ、メソッドを追加していく。 牌をホルダーに追加するメソッド、削除するメソッド、並べるメソッド、等。
■■■■■■■ これまでの作業で読んだ本 ■■■■■■■| 固定リンク | コメント (0) | トラックバック (0)
今度は牌を保持する、ModelHolder派生クラスの派生クラス図を作成。
■■■■■■■ これまでの作業で読んだ本 ■■■■■■■| 固定リンク | コメント (0) | トラックバック (0)
データ構造の設計をしていく。 ModelPositionクラスについては、staticなメンバを1つ持ち、このメンバがプレイヤーがどの位置(東南西北)にいるか、を表す。 各牌はこのクラスを内部に持ち、その牌がどの位置(絶対位置、ゲーム位置)にあるかがわかる。
■■■■■■■ これまでの作業で読んだ本 ■■■■■■■
・できるPRO Fedora 8 Linux 完全活用編(DVD付)
この本に付属のCDで自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
・その場でつかえるしっかり学べるUML2.0
UMLとは何か? から説明しています。 わかりやすいのでお勧めです。
・オブジェクト指向における再利用のためのデザインパターン
設計時にデザインパターンを参考にしながら行っているので、辞書的に使ってます
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
■■■■■■■■■■■■■■■■■■■■■■■■■■■
| 固定リンク | コメント (0) | トラックバック (0)
次はデータの詳細設計をしていく。 どのModelクラスにどのようなデータを持たせるかを考えていく。 その中でも、色々なModel派生クラスで使用されるであろう、東南西北を表す概念について、1つのクラスで表すようにする。
牌、ユーザ、その他のデータについて、”位置”の概念を含有するクラスがいくつか存在する事になるが、その際、JAN_POSITIONクラスを利用する。
絶対位置、ゲーム位置、の2つの概念を持ち合わせるクラスで、2つの概念の違いは下記の通り
下記図において、南家のプレイヤーから見ると下記の位置だとしても、同じ状況を西家から見ると、絶対位置は異なる。 (例えば、西家のプレイヤーから見れば南家の人の絶対位置は4となる)
■■■■■ これまでの作業で読んだ本 ■■■■■
・できるPRO Fedora 8 Linux 完全活用編(DVD付)
この本に付属のCDで自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
・その場でつかえるしっかり学べるUML2.0
UMLとは何か? から説明しています。 わかりやすいのでお勧めです。
・オブジェクト指向における再利用のためのデザインパターン
設計時にデザインパターンを参考にしながら行っているので、辞書的に使ってます
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
■■■■■■■■■■■■■■■■■■■■■■■
| 固定リンク | コメント (0) | トラックバック (1)
Gameのステートチャート図、詳細への記事で設計したステートチャート図の各ステートの意味を忘れないように図中のノートに各ステートの意味を書いていく。
書いてて思ったが、TAKE_REQUESTEDの状態は持ってても意味がないという結論に達した。 というのも、AFTER_DISCARD 状態と結局は同じ(ロンか鳴きがなければ、WAIT_DISCARDに遷移する、というのがポイントなので)状態だから。 同時に、Com_Takeもなくし、替わりにCom_NoAction(捨牌後、上がりも鳴きもしない事を意味する)を追加。
下記、調整したステートチャート図
■■■■■ これまでの作業で読んだ本 ■■■■■
・できるPRO Fedora 8 Linux 完全活用編(DVD付)
この本に付属のCDで自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
・その場でつかえるしっかり学べるUML2.0
UMLとは何か? から説明しています。 わかりやすいのでお勧めです。
・オブジェクト指向における再利用のためのデザインパターン
設計時にデザインパターンを参考にしながら行っているので、辞書的に使ってます
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
■■■■■■■■■■■■■■■■■■■■■■■
ステートチャート図を説明したような記事ってなぜか少ないと感じます。。
| 固定リンク | コメント (0) | トラックバック (0)
クライアント~サーバ間のコマンド(Com)の送受信のシーケンスを作成する。
このシーケンス作成にあたり、NetworkMainからは、ドライバレペルの違いを意識しないようにしてる事を再認識した。 よく考えたら起動時のシーケンスでNetworkMainからドライバの区別をしているように設計してしまってたので、一部修正する。
■■■■■ これまでの作業で読んだ本 ■■■■| 固定リンク | コメント (0) | トラックバック (0)
起動時にMVCの各オブジェクトの生成と連携必要部分について、参照できるようにセットするシーケンスを作成。
■■■■■■ これまでの作業要約 ■■■■■■
できるPRO Fedora 8 Linux 完全活用編(DVD付) を使って、自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
今はUMLで麻雀ソフトを設計中です。 UMLに関しては、その場でつかえるしっかり学べるUML2.0を、デザインパターンに関しては、オブジェクト指向における再利用のためのデザインパターン
を参考にして進めています。
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
■■■■■■■■■■■■■■■■■■■■■■■
MVCでちょっとググッてみました。
| 固定リンク | コメント (0) | トラックバック (0)
ネットワークのクラス設計を行う。 サーバは4つのクライアントとやりとりをする必要があるが、クライアントからすれば相手はサーバ1つ。 この違いを、Neetwork層の外のクラスからは意識不要な疎結合設計にする。
■■■■■■ これまでの作業要約 ■■■■■■
できるPRO Fedora 8 Linux 完全活用編(DVD付) を使って、自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
今はUMLで麻雀ソフトを設計中です。 UMLに関しては、その場でつかえるしっかり学べるUML2.0を、デザインパターンに関しては、オブジェクト指向における再利用のためのデザインパターン
を参考にして進めています。
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
■■■■■■■■■■■■■■■■■■■■■■■
| 固定リンク | コメント (0) | トラックバック (0)
今度はコマンド(Com)の実行について、viewから(ユーザから)のアクションをトリガとして実行されるのではなく、タイマー満了による実行をする仕組みの設計。
例えば、プレーヤーAが牌を場から取得した場合、プレーヤーAがいつまでも捨てる牌を選ばない場合、ずっと待つわけにはいかないので、取得した時点でタイマーを開始し、一定時間経過したら、プレーヤーAは自動で牌を捨てるようになる。
■■■■■これまでの作業要約■■■■■| 固定リンク | コメント (0) | トラックバック (0)
次は起動処理を設計していく。 GUIとCUIの両方で起動できるようにする。 これはmainメソッドを持つStartUpクラスに渡すパラメータにより、どのクラスを生成するかを判断する。
■これまでの作業要約※参考にした記事
| 固定リンク | コメント (0) | トラックバック (0)
今までの設計の記事を列挙してみました。
ここまでの設計書をUP ⇒ 「NetJan_20080123_0039.zip」をダウンロード
■これまでの作業要約
できるPRO Fedora 8 Linux 完全活用編(DVD付) を使って、自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
今はUMLで麻雀ソフトを設計中です。 UMLに関しては、その場でつかえるしっかり学べるUML2.0を、デザインパターンに関しては、オブジェクト指向における再利用のためのデザインパターン
を参考にして進めています。
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
| 固定リンク | コメント (0) | トラックバック (0)
前回記事で、Game状態を表すEnumを2つ作成した。 GameStateと、その中のPLAY Stateの中を詳細化した、GameSubState、との2つ。 下記はTree図。
前回記事で作成したステートチャート図を少し並び替える。 ここにGameSubStateも記載してしまおうと思っていたけど、少し大きくなりそうなので、図も別々にする。
■これまでの作業要約
できるPRO Fedora 8 Linux 完全活用編(DVD付) を使って、自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
今はUMLで麻雀ソフトを設計中です。 UMLに関しては、その場でつかえるしっかり学べるUML2.0を、デザインパターンに関しては、オブジェクト指向における再利用のためのデザインパターン
を参考にして進めています。
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
※
ステートチャート図を説明したような記事ってなぜか少ないと感じます。。
| 固定リンク | コメント (0) | トラックバック (0)
ModelMain内に含有される、ModelGameが、ゲームの状態を表す、state、substateメンバを持つようにする。 この組み合わせで、ゲーム中の状態を表す。
状態の変化は、コマンドの実行によって行われる。
まずはコマンドの実行なしで、単純に状態を並べてみる。
■これまでの作業要約
できるPRO Fedora 8 Linux 完全活用編(DVD付) を使って、自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
今はUMLで麻雀ソフトを設計中です。 UMLに関しては、その場でつかえるしっかり学べるUML2.0を、デザインパターンに関しては、オブジェクト指向における再利用のためのデザインパターン
を参考にして進めています。
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
| 固定リンク | コメント (0) | トラックバック (0)
ユーザからのアクションをViewからControlに伝える手段、そしてC/S間で要求、受理判断を行ううえで常に使用するのが、Comから派生した各クラスとする。
例えば、"牌を捨てる"というアクションをユーザが希望した時(捨てるボタンを押下した時)、Com_Discardクラスが生成され、Comの配送のシーケンスのように処理される。
アクション毎にクラスを作成するので、Comから派生するクラスは多岐にわたる事になる。
■これまでの作業要約| 固定リンク | コメント (0) | トラックバック (0)
次はデータ構造を決めていく。 modelパッケージのクラス図を作成し、モレが無いか考えていく。 ModelMain内部に全てのデータクラスを含有する形にしていく。
■ここまで
できるPRO Fedora 8 Linux 完全活用編(DVD付) を使って、自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
今はUMLで麻雀ソフトを設計中です。 UMLに関しては、その場でつかえるしっかり学べるUML2.0を、デザインパターンに関しては、オブジェクト指向における再利用のためのデザインパターン
を参考にして進めています。
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
| 固定リンク | コメント (0) | トラックバック (0)
ユースケース図を更新した。 よく考えたら、viewの先までユースケース図で表す必要は無いので消した。 ついでに、"ゲーム中"というユースケースを動詞に変更。 同時にそこから派生するユースケースを洗い出してみる。
ここまでの設計書をUP 「NetJan_20080121_0209.zip」をダウンロード
■ここまで
できるPRO Fedora 8 Linux 完全活用編(DVD付) を使って、自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
今はUMLで麻雀ソフトを設計中です。 UMLに関しては、その場でつかえるしっかり学べるUML2.0を、デザインパターンに関しては、オブジェクト指向における再利用のためのデザインパターン
を参考にして進めています。
他にもいくつか本を買いましたが、ここまでの過程で必須ではないので割愛します。
※時々見てるblog でもユースケースの事書いてた事だし。
| 固定リンク | コメント (0) | トラックバック (0)
ユーザアクションはViewで検知させ、それをcontrol内にpushで渡し、キューイングする。 controlはタイマーで定期的にキューのチェックを行い、1つずつ取り出して実行(execute)するようにする。
排他処理は2つの部分で行う。
synchronized (this){
処理内容
}
上記実現のため、controlパッケージ内のクラスに、メソッドを追加する。
ここまでの決定を元にシーケンス図を作成する。
■ここまで
できるPRO Fedora 8 Linux 完全活用編(DVD付) を参考にして自作PCにLinuxインストールし、麻雀サーバとして立ち上げました。
今はUMLで麻雀ソフトを設計中です。 UMLに関しては、その場でつかえるしっかり学べるUML2.0を、デザインパターンに関しては、オブジェクト指向における再利用のためのデザインパターン
を参考にして進めています。
| 固定リンク | コメント (0) | トラックバック (0)
ViewとControlのやりとりは、ViewIFをインターフェースにする事で考えていった。 次はViewとModelのやりとり。 Modelのデータが変更した時にViewに通知して、View側で表示変更するかたちになる。
今回は、Observer/Observableのパターンを使う。 このパターンはデザインパターンという非常に有名な本でも紹介されてる設計パターン。 java.utilに元々存在するので、これらを利用してクラス図を作成。 ついでに、今まで作成した配置図、コンポーネント図、クラス図の図名を少しだけ変更。
ここまでの設計書をUPする。 「NetJan_20080119_1134.zip」をダウンロード
デザインパターンという本はカスタマーレビューでも非常に評価が高い、お勧めの本。
勉強のため、http://blog.goo.ne.jp/cilsetyu も少し確認しておく。
| 固定リンク | コメント (0) | トラックバック (2)
ユースケース図作成にあたって、ViewをIF化したので、他の図も変化する。
クラス図とコンポーネント図の変更版
ユースケース図の作成の考え方がそもそも合ってるのかわからない。 http://www.rmake-labo.com/akasata/articles/show/229 で少し説明を見てみる。
また、お勧めの本も購入。
| 固定リンク | コメント (0) | トラックバック (0)
基本設計を始めていく。 MVCアーキテクチャをベースとする。 Modelは牌、その他のデータを格納するクラス郡、Viewは表示とユーザからのアクションを受け付けるクラス郡、Controlは他のノードからコマンドパケットを受信してコマンド実行をしたりするクラス郡。
これまでの画像、設計書:「NetJan_20080116_2220.zip」をダウンロード
| 固定リンク | コメント (0) | トラックバック (0)
前回の記事の続きで、足りない牌表示パターンについて考えていく。 縦の牌の寝てる板は、立ってる牌の外枠部分を上下を逆にする感じで作成する。
表示パターンは4つに分ける事ができる。 下記、設計書の分類。 横立のパターンは不要となる。 この不要なパターンも含めた4種類の画像を作成する。
| 固定リンク | コメント (0) | トラックバック (0)
前回記事 での牌画像の編集を行うため、GIMPという画像編集用フリーソフトをDLし、共通部分画像と外枠画像の分割等を行った時のイメージを掴む。 ただ、実際に画像データを編集するのは、プログラムで行う予定。 というのも、34種全て牌について、この作業をツールで行うのはツライので。
http://www004.upp.so-net.ne.jp/iccii/usegimp/usegimp.html、http://e0166.blog89.fc2.com/blog-entry-244.htmlに、かなりわかりやすく使い方が説明されていたので、それを参考にしました。
| 固定リンク | コメント (0) | トラックバック (0)
DLしてきた画像ファイルは、縦表示用と横表示用がある。
ゲームを作成しようとすると、これ以外にも色々なパターンが必要になる。
この4つのパターンに分けられると思う。 この時、DLしてきた画像の横versionは、ゲームにおいては使わない画像になりそう。 逆に必要なパターンが欠けてる事になる。
そう考えたとき、できれば1つの画像データを元に、全ての必要なパターンの画像を作成すれば楽になると考える。
例えば縦の画像を拡大してみると、”面”部分(共通部分画像)と、立体的に見せる部分(外枠部分画像)に分けて考える事ができる。
■元画像
■元画像の”面”部分を黒塗りしたもの
そう考えたとき、この”面”の部分を”共通部分画像”と考え、それ以外の部分を”外枠部分画像”とする事により、各パターンで”共通部分画像”を流用できるようにしようと思う。
※ゲームで遊んじゃうblog で紹介してる麻雀ゲームみたいにリアルには作るのしんどそう。
| 固定リンク | コメント (0) | トラックバック (0)
NetJanで使用する牌画像を色々googleで検索。 色々と使用制限がないものがあれば助かるが、何かしら制限はついてしまうか、と思っていたけど、まつセン というサイトで完全フリーの画像を提供していた。
ここの画像をDLする。 麻雀ゲーム作成に使いたい事を作者に連絡しておこう。
ちなみに牌の画像はこんな感じ。
| 固定リンク | コメント (0) | トラックバック (0)
実際に設計~コーディングを始めたら、色々と出てきそうな気はするけど、機材配置、サーバ構築から、Java開発環境を整えるところまで、大体の準備は完了したので、今までの作業をリンクとしてまとめます。
機材
サーバ構築
Java開発環境
この後は牌画像をDLできるところを探したり(最悪、フリーで使えないなら自分で作成?)、LinuxサーバでNetJanのサーバサイド動作させるために、サーバにJavaをインストールしたり、と必要ですが、それは開発がある程度進んで通信ができるようになってから、にします。
| 固定リンク | コメント (0) | トラックバック (0)
次に、作成したソースコード等をこのblogにUPするために、ソースフォルダ等を圧縮するバッチファイルを作成する。
圧縮処理がWindowsのデフォルトのコマンドラインにあればいいんですが、無いので、perlで圧縮部分だけ作成。
xcopy C:\Work\toshiki\NetJan\4_画像 %ZIPWORK_PATH%\4_画像 /c /e /i /y /z
xcopy C:\Work\toshiki\NetJan\6_Src %ZIPWORK_PATH%\6_Src /c /e /i /y /z
でワークフォルダに必要なフォルダをコピーした後に、perlのArchive::Zip を使ってそのワークフォルダを圧縮する。 ※Perl自体を持ってない場合は、ココからDLできます
use Archive::Zip;
my $zip = Archive::Zip->new();
# 第1引数は圧縮するフォルダ
# 第2引数は出力先フォルダ
$src = $ARGV[0];
$dst = $ARGV[1];print "$src 圧縮⇒ $dst \n";
$zip->addTree($src);($ss, $min, $hh, $dd, $mm, $yy) = localtime(time);
$yy += 1900;
$mm++;
$datetime = sprintf("%04d%02d%02d_%02d%02d", $yy, $mm, $dd, $hh, $min);$dst_fullpath = "$dst\\zipped_$datetime.zip";
print "making $dst_fullpath \n";
$zip->writeToFileNamed($dst_fullpath);
ただ、スクリプトを組んで実行してみると、出力ファイルの中身に余分なファイルがある。
各フォルダと同じ名前のファイルが存在する。 これはなんだろう。 でも、解凍したら余分なファイルは残らないので、まぁ良しとします。
| 固定リンク | コメント (0) | トラックバック (0)
NetJanプロジェクトをcvsに登録する。 プロジェクトを右クリック ⇒ Team ⇒ ShareProject を選択。
リポジトリはeclipseからcvsアクセス で作成したリポジトリを使うので、Use existing repository location を選択してNext ⇒ Use project name as module nameを選択してNext。
cvsのパスワードを聞かれるので、★非公開007★を入力。 そのままデフォルトで進めていき、Commitコメントを聞かれるので、適当に入力する。
これで完了
| 固定リンク | コメント (0) | トラックバック (0)
続いて、eclipseの設定を行う。 まずはJunitインストール でインストールしたJunitのライブラリを追加する。
NetJanプロジェクトを右クリック ⇒ JavaBuildPath ⇒ Libraries ⇒ AddExternalJars から、インストールしたJunit.jarを選択する。
次に、http://www.javadrive.jp/eclipse3/help/index4.html を参考にして、jdkのsrc.zipを設定する。
同様に、junitもソースを設定する。 junitから右クリックして、ソース添付させる。 junitをインストールした場所を選択し、junit-4.4.jar を設定。
| 固定リンク | コメント (0) | トラックバック (0)
次はeclipseの設定を進めていく。 ソースは自分の指定した場所にしたいので、色々触ってやり方を確認。 どうもその後色々実験してみると、開発環境を共有したらeclipseUMLは使えない、とある (http://www.eclipsewiki.net/eclipse/index.php?EclipseUML)
それならeclipseUMLを使うのはやめよう。 ソースと同期が取れるのが魅力的だったけど、cvsを諦めてまでは不要。 やっぱりみんなが使ってるJudeにする。
ここからJudeCommunityというフリー版を落としてくる。 DLしたファイルは、jude-community-5_1_1-setup.exe (7,546 KB) (Windows インストーラ)推奨
DLしてインストール
UMLの勉強は独習シリーズの本で少しした事があるくらい。
| 固定リンク | コメント (0) | トラックバック (0)
今度は準備したLinux上のCVSにノートPCからアクセス。 eclipseを立ち上げ、Window->perspective->Other からCVS Repositoryを選択。
CVS Repositories のコンテキストで右クリック ⇒ New ⇒ Repository Location を選択する。
を入力して、Finish
アクセス成功!
| 固定リンク | コメント (0) | トラックバック (1)
段々環境が整ってきた。 今回開発する麻雀ゲーム、本当なら仕様書から作成したいところだけど、ソフト開発しながら仕様を決めていく。
開発途中のソースの管理のために、ソース管理システムを導入したいところなので、これもフリーのCVSをインストールする。 eclipseはデフォルトでCVSのクライアント機能が付いてるようなのでインストールは不要。 今回構築したLinuxサーバをCVSサーバとするために、こちらにインストールする。 TeraTermから、
yum install cvs
でインストールする。
次に、pserver設定方法サイト を参考にしながら設定していく。
ここまでで、LinuxサーバへのCVSリポジトリの作成は完了。 次にノートPCからソースのUP/DLをできるようにする必要がある。 色々調べてわかったことだが、LinuxをCVSサーバとして動かすためには、xinetd の説明サイト の説明に書いてるように、スーパーサーバのデーモンを動かしたり、そのためのパケットを受け付けたりする必要があるみたい。
pserver設定方法サイト の説明を参考にして設定を進めていく。
iptables -I RH-Firewall-1-INPUT -p tcp -m tcp --dport ★非公開006★ -j ACCEPT
iptables -I RH-Firewall-1-INPUT -p udp -m udp --dport ★非公開006★ -j ACCEPT
で、使うポートのアクセスを許可。 次に、/etc/services に下記の2つを追記
cvspserver 2401/tcp
cvspserver 2401/udp
次に、CVSアクセスのためのユーザを追加する。
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = netjancvs
passenv =
server = /usr/bin/cvs
env = HOME=/var/www/cvs
server_args = -f --allow-root=/var/www/cvs pserver
# bind = 127.0.0.1
}
service xinetd restart でxinetdを再起動、させようとしたが、ここで、"xinetd: unrecognized service"のエラーが出る。 インストールしてなかった。。
yum install xinetd
でインストール。 改めて service xinetd restart
CVSのコマンドの使い方は本を見て勉強する。
| 固定リンク | コメント (0) | トラックバック (0)
サーバ構築が終わったので、Java開発環境の準備に戻る。
http://java.sun.com からjdk-6u3-windows-i586-p.exe をDLし、インストール。 途中で色々聞かれるが、Nextを選択し続ける。 インストールが終わったら、readme.txtを読んでおく。 色んなソフトインストール時のreadme.txtは昔は読まなかったけど、最近は有用な情報が詰まってる事を実感しているので、一応読むようにしてる。
http://www.omondo.com/ からEclipseUML 2007 3.3.0 Free(version:3.3.0.v20071210) をDLし、同サイトのHtml Documentation を見ながらインストールしたら特につまる事なくできた。
| 固定リンク | コメント (0) | トラックバック (0)
前の記事 では、cgiは正しく動作した記憶があったのですが、今ノートPCから http://www.ts.mydns.jp/cgi_test.cgi にアクセスすると、"このファイルを開くか、または保存しますか?"とファイルのダウンロードDialogが表示されてしまうようになりました。
Googleで色々と調べ、http://webmemo.flaps-web.com/2007/06/cgi.html で解決。 引用すると、
Dialogからダウンロードしてどこかに保存しテキストエディタで開いてみてください。
perlのCGIだと仮定すると3つの状態が想定できます。
1. CGIの実行結果が記述されている場合
ヘッダの不良、 またはContent-type:text/plain\n\nと言うヘッダの場合、文法的には正しいのですが、MSIEのおかしな仕様により開けません。
Content-type:text/html\n\n をつけてHTML文を出力しましょう
2. 実行結果ではなく #! /usr/local/bin/perl などを含むスクリプトのソースそのものが記述されている場合
httpd.confまたは有効な .htaccessで AddHandler cgi-script .cgi が効いていません
3. エラーメッセージが記述されている場合
error.logを見て参考にしましょう 場所はデフォルトなら C:\Program Files\Apache Group\Apache\logs
内容を見ても判らなければ logの一番下から3行分を補足に貼り付けてください
という事で、cgi_test.cgi のtext/plainの部分を、text/htmlに変更して保存、http://www.ts.mydns.jp/cgi_test.cgi にアクセスしてみるとうまくいった。 また、今後の対比実験のために、もとのtext/plain のままのものは、cgi_test_plain.cgi で保存。 http://www.ts.mydns.jp/cgi_test_plain.cgi にアクセスすると確認できるようにしておきました。
| 固定リンク | コメント (0) | トラックバック (0)
これまでは、本の前から割りと順番に進めてきたけど、後は必要なものだけをインストールしていく。
■まずはSamba
■次はSSH
更に安全にリモート操作するために、公開鍵認証の設定を行おうとしたけど、うまくいかない。 なので、仕方なくPort番号だけ、★非公開005★ に変更する。
また、SMTP/POP/FTP等のためのPortはACCEPTにしてたものを削除、同時にルータの設定も同様に不要なPortの転送ルールは削除する。
■NTP
| 固定リンク | コメント (0) | トラックバック (0)
最近のコメント