ARAGO for Internet Wiki Project AkuAku

This web site is powered by Arago for Internet v7.0 UTF-8 edition on FreeBSD
SPC main menu Expand/Fold
Products 取扱商品 Expand/Fold
SouthWind  Expand/Fold
Q&A Technical support Expand/Fold
BBS 掲示板 Expand/Fold
Easy PC life Expand/Fold

Last Edit Date: 09/03/2008
Akuakuの設計概念

2008/07/08 ファイルの構成を追加
現在分かっている問題点。
googleの最新のブラウザー google chromeから編集モードに入るとおぺnWYSIWYGが対応していないと表示する。
異なったメニューでも同じディレクトリを指定したページが両方に表示される。


aragoiのUTF-8対応作業が完了し、前から構想していたaragoiのよるWikiプロジェクトを開始した。 これは同時にAkuakuのソースコードの公開するこで日本の多くの間違ったインターネットに関する情報で混乱させられている開発者の参考になる情報を公開する目的もある。

最大の理由はもちろんSPCのサイトのメンテナンスをBrowserで作業できるようにし、負担の軽減する事であった。
将来的にはAkuakuをBlogや 投稿サイトなどの多言語サイト開発に使いたいと考えた。


では基本的な考え方を書く

1. 大量のページのサイトのメンテナンス性を向上させる。

2. すべての処理をBrowser経由で処理する。

3. 拡張性を考える

4. バックアップの作業効率の向上。

5. Search Engine Friendly にする。

7. セキュリティーを重視する。
8. メンバーの参加により、メニューグループ、ページの作成、削除 編集ができるようにする。
9. 非公開ページを内部作業や内部情報伝達に利用する。
10. できる限りすべてのAkuakuで使用するプログラムファイルもBrowserで編集できるようにする。

 
1. 大量のページのメンテナンス性を向上させる。
 海外からでもBrowserでページを更新できるのは、今や当たり前の時代に、FTPを使って更新するのには疲れました、またFTPのセキュリティ確保もえらく面倒くさいものです。 またディレクトリに分けられたとは云え、大量のhtmlファイルをファイル名とページの関係を記録するにはうんざりである事、 その為にPC上にサイトのファイルすべてのコピーを保存し、いつも最新のものにしなければいけません。 

DBFにすべてが保存され、それをBrowserで直接編集するのですから、面倒な作業は過去のものに。 Akuakuでは、すべてのサイトのデータを一本のDBFファイルに保存しています。 もちろん英語/中国語などのグループを作成したり、標準のページ構成と大きく異なるグループなどを、それぞれのディレクトリに分け、異なったDBFに保存することもできます。 

2. すべての処理をBrowser経由で処理する。
今まではHTMLエディタで編集しftpでアップロードしていたのを、Browserで直接編集。 掲示板に書くのと変わないレベルにしました。
編集画面はopenWYSIWYGで自由にBrowserに表示されるのと同じように編集ができる。 もちろんtextモード(TAG編集モード)でも細かい編集ができる。
ひとつのページをひとつのprgファイルを実行することで終了する。 それぞれのページのプログラムファイルPRGもデータもひとつのレコードに保存する。

ページの作成、編集などのシステム管理プログラムも同じデータベースのそれぞれのレコードに保存されている。 またそれらのシステムプログラムも自由にBrowserで編集することができる。

3. 拡張性を考える
新規のページを作成するにはBrowserでログインし認証をへてページの作成を選ぶことで作成できる。このページの処理プログラムはmemoフィールドに保存される。 このページプログラムは自由にBrowserで編集することができる。 もちろんCGIも使える。 その機能を利用しBlog、投稿サイト、ショッピングモール、ビデオ、サウンド、写真などでを外部から処理できるサイトの構築を考えている。

4. バックアップの為にもできる限り少ないDBF、PRGファイルにする。
Akuakuでは1本のDBFファイルと数本のインデックスファイルそして数本の基本プログラムによって構成されている。 バックアップ作業はとてもらくです。 そのためサイトのすべてのデータは、httpd.conファイルとhtmldocs、akuakuのディレクトリのコピーで終了する。 USBメモリなどでコピーするときにはこのファイルの少なさがバックアップの作業性を向上させます。 

5. Search Engine Friendly にする。
現在ほとんどのサイトのアクセスにGoogleなどの検索サイトで検索するか、どこかのページに有る情報に基づきリンクされているサイトにジャンプするのが普通ではないでしょうか? この検索サイトに登録されないと、検索対象として表示されません。(もちろん有償では可能ですが) 検索サイトの検索エンジンの詳しい検索方法については、他を検索してください。 ここではサイトの構成についての問題を書きます。

Googleではいくつかの検索エンジンを使っているようですが、他でリンク情報があるときには、それに基づいてリンク先の情報を取得する。
リンクが多ければ多いほど検索の順位が上がる。 実際の検索エンジンはGET /robots.txtを最初に見ます。
このファイルで検索対象に含みたくないファイルやディレクトリを指定できます。 と言う事はこのrobots.txtファイルが無いとApacheのerrorログが一行増えることになります。 空っぽのrobots.txtを作成してdocのrootに相当するところに置きましょう。

検索エンジンは次にGET / HTTP/1.1とアクセスしファイルを取得します。 Apacheはこのアクセスに対してhttpd.confにあるDirectoryIndex index.html /akuaku/rewrite.prgで指定されたファイルを返します。  /akuaku/rewrite.prg についてはmod_rewriteで説明しますのでここでは無視してください。
検索エンジンは、それぞれの検索対象のサーバーの負荷を考えて行動しています。 またcgiを実行し無限loopにはならないように行動します。
ですから、サーバーがクラッシュするのを避けるためcgiをパラメータを持ってcgiを呼ぶようなリンクは無視します。 ですからSPCの既存の掲示板の内容などは検索サイトに含まれないのです。 このcgi問題では一部のcgiは引数が無い限り実行するそうです。
Akuakuではmod_rewriteを利用し(詳細はmod_rewiteを参照ください)例えばuser.htmlと云うリンク先は、内部ではrewrite.prgというプログラムにuserという引数を渡します。 rewite.prgでは頭に rewrite.prg userとして実行します。 rewrite.prgではメインのDBFにuserがあるかどうか検索します。 あればこのページプログラムをmemoフィールドから読み込み、.prgファイルを作成しそれを実行します。このときに認証が必要かも調べます。 実行されるとアドレスバーにはwww.soupacific.com/user.html、browserには文章が表示されます。 検索エンジンはこのuser.htmlの要求に対して正常にdocumentが返されたので正常に取得したものと考えます。 phpで書かれたサイトでは、このmod_rewriteを利用しないところではアドレスバーにxxx.php?zorozoroと表示されるものがあります。
Akuakuではこの要求されたファイルをBrowserに正常に返すと、すぐに作成された.prgファイルを削除します。 Formでcgiを呼び出されても同じ動作をします。 ですから動的にhtmlファイルを生成するのですが、検査エンジンには静的なhtmlを取得したいるようになります。

参考
http://searchenginewatch.com/showPage.html?page=2168031

http://infolab.stanford.edu/~backrub/google.html

百度で親切に書いてあります。 robots.txt の解説http://www.baidu.jp/search/robots.html#n

7. セキュリティーを重視する。

現在このサイトはFreeBSD 6.0を使用し、ipfilterでroutingの管理、port管理をしています。 このipfilterで許可しないportやipへのアクセスを管理しているが、許可されないアクセスのログは24時間で150Mから200Mになっています。またApacheに対する不正なアクセスは10M以上になることがあります。 このApacheのerrorログファイルはアタックの旬の季節や日によって膨大なものになることが有り。 これらのアタックで一番多いのはWindowsでのファイル名の関連付けを利用したもの。 perlのよくある素人のサイトのリスクがあるファイル名実行しようとする、そのほかのありとあらゆる攻撃の対象となりえるファイルの実行の試みをしています。 

このために、aragoi.exeをcgi-binには置かないようにしました。 (現在移行中につき、まだ残っている) aragoiをUTF-8化するときに同時に大幅な拡張をしており。 その拡張の一部に実行プログラムファイルの先頭に実行するaragoiを指定することができるようにようにした。

#!/usr/local/aragoi/aragoi.exe createpage.prg 
この機能とApacheのcgiディレクトリにaragoiを置かないことで、 この結果外部からaragoi.exeを起動できない。 この機能はWindowsでも動作する。(BOMがあると動作しないので注意すること) EXEC()の機能の一部なのですが、なんと呼ばれるのでしょうか? 知っている方がいたら教えてください。

システムコールのEXEC()でスクリプトファイルの実行時、EXEC内部では、#!に続くインタプリタに引数を渡し実行します。 この!#でインタプリタのディレクトリを指定します! windowsでも全く同じように動作します。 UNICESで使用するプログラムをwindowsで開発するときには、windowsで必要なディレクトリを作成し(ここの例では/usr/local/aragoi/)、そこにaragoiを置くと便利です。

スクリプトファイルには、実行属性が必要です。 またcgiディレクトリには実行属性と書き込み属性が必要になります! これらの属性の設定が間違えていると、cgiの実行エラーになります。

Akuakuのすべてのファイルはcgiディレクトリに保存されています。 documentディレクトリに実行ファイルを置く愉快なサイトもありますが、そんな愉快なサイトのセキュリティを考える人は馬鹿か天才なのでしょう? まあ人災だとは思うのですが。。。

同時に、Akuakuのソースコードで解説しますが、passwordで保護されているファイルを認証をしないで直接実行することが無いようにプロテクトしています。

未だに外部からアタックされ、データを垂れ流す事件がよく起きますが、ほとんどがSQLインジェクションです。 ARAGOIではそんな愉快なことは絶対におきません! コマンドも入力されたデータも同じなんて概念が通用する?、 そんなサイトのセキュリティとは? 刑務所の中で何千人だかの泥棒と看守が同じ服着てダンスパティーしているような冗談でしょう!
SPCのサイトのトラブルは、サーバー自体がダウンしたことと(インディアンサマーでhddがちんちんに、ASUSのマザーが昇天した時)、回線がダウン、それと表の道路の電柱にトラックがぶつかり一帯の電気が落ちたことです。 あとはメイルサーバをSpamに利用されかけたこと、Windowsで運用していたときに、Windowsに攻撃されたことです! (これには泣かされました、FreeBSDに移行するための作業で半寝ぼけの日々でした)

インディアンサマーとはカリフォルニアで9月ごろ起きる熱波です。 温度計のメモリは最高表示を超え、エアコンは全く効かず、外に水をまけば、熱風が襲う状態です。

8. メンバーの参加により、メニューグループ、ページの作成、削除 編集ができるようにする。

まだ未作業であるが、メンバー参加の要求ページ、passwordを忘れたときの処理、passwordの自動生成。
このメンバーによって外部からも新しいページを追加、既存のページの編集更新などができる。
ページ群によっては、この認証せずに編集ができるようにすることもできる。 これによって大勢の参加者によってページをどんどん更新、拡張することができる。 wikipediaの様に少数の管理者で基本的な管理をし、ユーザー参加型のサイトを構築できる。


9. 非公開ページを内部作業や内部情報伝達に利用する。
passwordで保護した非公開ページを作成時に選択できる。 グループ内で文章を関係者で共有して作成することができる。
作成されたページはそのページを処理するPRGファイルとそれぞれの文章がひとつのレコードとして保存されます。 アクセス件の設定で、参照なのか、編集権があるのかなどを設定できます。 もちろんそれらの認証で、いつでもBrwoserでPRGも文章も編集することができます。
 
10. できる限りすべてのAkuakuで使用するプログラムファイルをBrowserで編集できるようにしてある。
3本の基本プログラム以外(ページの作成、パスワードの管理など。。20本弱)はすべてDBFに保存されています。 このDBFに保存されているプログラムをBrowser経由で修正できます。 


詳しくは実際のプログラムの解説をご覧ください。 ちょっと込み入っているところもありますが、基本的にはとても簡単です。perlやphpみたいに途中で迷子になることはありません。


aragoiはとても分かりやすいxBASE言語ですので、誰にでも分かりやすい、とても短いプログラムです。
そして大量のページであろうと高速にBrowserにデータを返すことができます。 一部のWikiのようにページ数が大量になるとレスポンスが落ちるなどのことは発生しません。

現在のaragoiuでの問題点は2Gのファイルサイズの制限問題だけです。 近いうちに64bit化しこの2Gのファイル制限を取り払います!
64bit化と前後して、大量のアクセスに対応するときに使用するload blancerを利用したときの書き込みデータの整合性を保障する、複数サーバーの同時書き込みのプログラムを作成する予定です。

難しいことを簡単にをモットーに、国境や言語をこえた多言語対応のウェッブサイトの構築を簡単に実現する方法を提供しています。是非aragoiuで新しい世界に踏み出してください。

ファイルの構成

システムファイル

BEDIT.PRG
下部の表示データの編集

CREATEPAGE.PRG
ページの作成、 ページの編集MEDITとよく似ています。 CREATEPAGEはcontent.dbfにAPPENDでレコードを新規作成追加します。 MEDITは既存のレコードの編集です。 MEDITではTEXTAREAの解説にある処理をしています。

INDEX.PRG
何は無くとも江戸むらさきならぬ、 akuakuの基本になる最初のページです。 これが無いと始まりません。
 
LEDIT.PRG
左にあるメニューの部分の編集プログラムです。



EDITMENU.PRG
編集処理の選択画面

MDELETE.PRG
メニュからの削除。


MEDIT.PRG
既存ページの編集プログラムです。


MMORDER.PRG
メインメニューの順番の変更です。


MODE.PRG
メニューの表示、非表示、右メニューの表示非表示などの指定の変更処理をします。


MOVESMEN.PRG
サブメニューを別のメインメニューに移動。


PASSWORD.PRG
パスワードの作成変更などをするプログラムです。 未完!


PDELETE.PRG
既存ページの削除プログラムです。


PEDIT.PRG
ページソースプログラムの編集


RECOVER.PRG
削除ページの復活プログラムです。


REDIT.PRG
右にあるメニューの部分の編集プログラムです。


SEDIT.PRG
システムプログラムの編集プログラムです。 SEDIT.PRGの変更はできません!


SKELTON.PRG
新規にページを作成したときに、骨格となるプログラムです。 間違えてもBOMなんか入れないでください! 最悪な状態になります!


SUBMENU.PRG
サブメニューの順番の変更

content.dbfに含まれないシステムファイル

AUTH.PRG
変種モードへの認証プログラム



rewrite.prg
rewrite2.prg
ARAGOIから別のプログラムを起動するためのプログラムです。

ユーティリティー プログラム
Akuakuシステムのメンテナンス用のプログラムです。 content.dbfに含まれていません。

APPNDSYS.PRG
システムファイルをcontent.dbfの書き込み、全ての値を初期化します。

UPDATEPRG.PRG
システムファイル、それぞれのページファイルをcontent.dbfに書き込みます。


WRITEOUTSYS.PRG
content.dbf-にある全てのファイルを出力します。



HTMLファイル
damedame.html
認証に失敗したときに表示するhtmlファイル

pagenotfound.html
使ってないような気がする?


DBFの解説

現在は使用していないフィールドもあります。 

メインのデータベースです。

content.dbf
pagename     c     100    
pagetitle         c    100    indexed pagetitle.ndx
pagesource     m        this page prg
systemfile    l        system file
LMTXT        m        left menu HTML format
RMTXT        m        right menu HTML format
BMTXT        m        bottom display HTML format
MMTXT        m        main page content HTML format
left        l        display left or not  1 = display
right        l        display right menu or not
bottom        l        display bottom or not
deleted         l        deleted or not
createdate    d        created date
lastmodify    d        last modified date
crusername    c    100    create person name   
crremoteip    c    20    created psron ip
cmail        c    100    created person mail address
lmusername    c    100    lastmodified person name
lmremoteip    c    20    lastmodified person ip
lmmail        c    100    last modified person mail address
topgourp        n    10    access level
subgroup        n    10    access level
pagegroup    n    10    access level
lastaccess    d        last accessed date             indexed  laccess.ndx
language         c    30    language multi means mixed language
mainmenu    l        if yes this is a main menu  if false submenu
belongto        c    120    main menu page title
private         l

check lastaccess then conditional option then  delete such as blog pages which are no longer accessed


lmenu.dbf
topmenu        c    100    top menu prg file name
pagenameii    c    100    this page prg file name
menu        c    100    sub menu string
delete        l        if not use, delete is true

auth.dbf                *******before start need to add super admin's password and account name
deleted         l
accountnam    c    50
passwd        c    50
createdate    d
lastmodify    d
crusername    c    100
crremoteip    c    20
cmail        c    100
lmusername    c    100
lmremoteip    c    20
lmmail        c    100
superuser    l

pageauth.dbf
deleted        l
accountnam    c    50
passwd        c    50
pagenam        c    100
acsslevel        n    10
createdate    d
lastmodify    d
crusername    c    100
crremoteip    c    20
cmail        c    100
lmusername    c    100
lmremoteip    c    20
lmmail        c    100
superuser    l

menuorder.dbf
menuorder    n    10
pagenam        c    100
createdate    d
lastmodify    d
crusername    c    100
crremoteip    c    20
cmail        c    100
lmusername    c    100
lmremoteip    c    20
lmmail        c    100   
deleted        l

laccess.ndx

auth.dbf

CONTENT.DBF
CONTENT.DBT
lmenu.dbf
menuorder.dbf
menuorder.ndx
numtopmenu.ndx
paaccountnm.ndx
pageauth.dbf
pagename.ndx
pagenameii.ndx
pagenameiii.ndx
papagename.ndx
topmenu.ndx
topmenun.ndx
Advertisement Expand/Fold