Updated: 2006.12.04
Hit:
index | 2005年07月 »

Navigation of sieg

Index
Information
サイトマップ


最近のエントリー

Google Sitemaps
Flash programming リンク集
Perl & CGI リンク集
PROGRAMING リンク集
プログラミング言語の種類
自宅サーバを公開
WebDAV
ダイナミックDNS
リンク元調査
Perl での正規表現


Link

ActivePerl
Perlドキュメント(和訳)
Perlデータ構造
Apache JP
Apache 中核機能

ipodnanou_180-150.gif



関連用語 (e-Words)



Opera
rss1.0
rss2.0
atom0.3
BLOGinSPACE

ほっとけない 世界のまずしさ

Opera 9 - Your Web, Your Choice

クリエイティブ・コモンズ・ライセンス
クリエイティブ・コモンズ・ライセンス



2005年06月30日

Google Sitemaps


遅ればせながら GoogleSitemaps を知りました
詳しく読むと なんのことはない
規定のサイトマップを作るとGoogleロボットがやってきて、くまなく拾って行ってくれると言うもの
これ、特にブログなんかには有効で なかなか拾って行ってはくれなかった 過去のアーカイブなんかも拾って行ってくれるらしい
まぁ、うちみたく始めたばかりのところには あんまり効果はないかも・・

それにしても、Googleってどこまでやるんだろ
最近登録URLが増えたせいか、ただでさえクロールの失敗が多いというのに
こんなこと始めちゃって大丈夫なんだろうか
もしかしたら、これからはこの Google Sitemaps を基準にする気かもね
まぁ、ベータ版ですからね いろいろと実験してるんだということかも

Googleアカウントを持っているので、とりあえずここでもやってみました
Google Sitemaps (BETA)にログイン後、このMovable Typeで作ったXMLのURLを指定しておきました
あとは、待つだけ たのしみ たのしみ

ついでに、このことを調べてるうちになかなかいいサイトを発見検索エンジン三国志なんだけど
なかなかためになること色々あっていいかもよ


更に詳しい情報:
Google、更新情報などを検索結果に反映するツールでインデックス強化 (ニュース)
Google Sitemaps グーグル・サイトマップ(ベータ版)FAQとプロトコル全訳 (ナレッジ)
Google SitemapsのMovable Typeテンプレート完全版 (解説)
Ogawa::Memoranda: Google Sitemaps (解説&ナレッジ)
Google SitemapsのXMLジェネレータ (ツール)

投稿者 edams : 04:37 | コメント (0) | トラックバック | ▲

2005年06月29日

Flash programming リンク集


Macromedia - FLTN : fl0284 - FlashVars を使用して SWF へ変数を渡す
クジラ式 FLASH CGI
FLASH道場
http://www.ochaden.net/technology/flash/
Flash ActionScript Helper
FLASH ADVANCE
FLASH-JP.COM - FLASH-japan FORUM
Macromedia - Macromedia Web ボタン
FlashQ&A
happy
[ the flash components network ]
Macromedia - FlashPaper 2
Macromedia - Showcase
Macromedia Japan
FLASH,ActionScript作成講座 - [ホームページ作成]All About(1/2)

投稿者 edams : 10:07 | コメント (0) | トラックバック | ▲

2005年06月28日

Perl & CGI リンク集


Perl Archive by Creative Fundamentals, Inc.
Perl for Newbie(Perl初心者の部屋)
Perl.com The Source for Perl -- perl development, perl conferences
perlwin32faq4 - Windows NT および Windows 95/98
Perlメモ
Perl情報メモ
CGISpy.com Webmaster Spot - Search Engine Tips
PF:Perl CGI
MIMEBase64 - base64文字列のエンコードとデコード
Shift_JIS に含まれない文字をエスケープ (Jcode.pm編)
Tips (CGI, Perl, Unix and etc.)
use Object; (Perl)
PerlDoc of /docs/modules(日本語翻訳)
Perl & CGI Scripts
search.cpan.org EncodeJP - Japanese Encodings
HomePage - PAR Homepage
phone.pl - 携帯電話キャリア自動判別ライブラリ
Introduction of CGI in C/C++

投稿者 edams : 10:03 | コメント (0) | トラックバック | ▲

2005年06月27日

PROGRAMING リンク集


Blowfish JavaScript Implementation AAM
Cepheid - Blowfish暗号化アルゴリズム
DirectX Developer Center - Microsoft DirectX 9.0 ダウンロード
hail2u.net
SourceForge.jp Project Info - Cygwin JE
Prog.
Common Archivers Library: 拡張子別 対応DLL(圧縮解凍エンジン)一覧表
euc kanji code table
68user's page

MySQL
つみきWeb
MySQLプログラム / Winclients日本語サーバー対応版
かねやんMySQLAdmin公式サイト
MySQLのインストール/動作確認手順
DBDesigner4 Manual(日本語)
MySQLデータベースサーバーのセットアップ Windows篇
fabFORCE.net


Windows
ThemeWorld.com - You Dream It, We Theme It!
Windows2000.FAQ
ネットの基礎知識&OSカスタマイズ
WindowsNT/2000 と Linux の共存
LWD - Win2K Boot Logo Gallery - Page 1
ライアーマン ウインドウズXPには【隠しコマンド】が存在した
WSTWeb Designs - Windows Themes and Wallpapers
MSN Messengerカスタマイズ
Windowsコマンド集:(append)
DOS-Vコマンド・リファレンス@FPCU


Linux
LinuxWorld Online
Vine Linux Home Page
WindowsでPostgreSQL 手順1-3 - [データベース]All About Japan
DISTORTION in the SHELL
Index of /pub/linux/Vine/VinePlus/3.1/i386/RPMS.plus
ペンギンの杜


Delphi
Delphi Tips
Delphi 入門
Delphi入門
Pascal・Delphi入門:オンライン学習 ページ
Delphi(デルファイ)のページ


C系
Visual C++ 講座
ファイル/フォルダの絶対パス取得、名前の読み込み、作成、リネーム、コピー、移動、削除
VC++ 操作方法
VC++の使い方 [VC++の使い方]
VC++ 覚書き
VC++テクニックindex
Area of VC++TIPS らららのお部屋
VC++超初心者のホームページ
Borland C++ Compiler 5.5 FAQ
C言語Windows SDK編INDEX

投稿者 edams : 09:58 | コメント (0) | トラックバック | ▲

2005年06月26日

プログラミング言語の種類


大きな定義からいうと 低水準言語と高水準言語に分けられます


#-----------------------------------
# 低水準言語
#-----------------------------------

機械語とアセンブリ言語が代表的

■機械語
CPUがそのまま解釈できる命令の集まりで、人間が直接書くことはまずない
参考書: 『マシン語・機械語・真心語』   (参考書: は『Amazon.co.jp各商品詳細ページ』へのリンクです)


■アセンブリ言語
英単語に近いニーモック表記で、機械語の命令に1対1に対応したプログラムの作成が可能となる
ただし、CPU毎に命令体系が異なるため、CPUの種類だけ機械語やアセンブリ言語は存在することになる
アセンブリ言語は、CPUの全ての動作を制御することができ、非常に細かい部分までプログラム可能である
つまり、アセンブリ言語を学習・理解することはCPUの動作自体を理解することになるので、コンピュータの基礎的な学習をする際には必修となる
参考書: 『アセンブリ言語』 『アセンブリ言語の教科書』 『アセンブリ言語の基礎―CASL2によるプログラミング』

#-----------------------------------
# 高水準言語
#-----------------------------------

■FORTRAN (FORmula TRANslation)
FORTRANは、1956年にIBM社が開発した科学技術計算向けの言語
高水準言語としては最も歴史があるもので、その後何度か改定を受けながら進化している(FORTRAN 66、FORTRAN 77、FORTRAN 90)
現在でもLISPとならんで科学技術計算を行う際にはよく利用されている
参考書: 『わかりやすいFORTRANプログラミング』 『Fortran 77プログラミング』 『FORTRAN77とFortran90』


■COBOL (COmmon Business Oriented Language)
COBOLは、1959年にアメリカ国防総省が計算機利用者と製造業者の代表を集め、CODASYL(COnference on DAts SYstems Languages:データシステム言語協議会)を作り、そこで発表された
COBOLの特徴は、事務処理作業の中心となるデータ処理を容易にしている点と読みやすく、書きやすい表現として、英語に近い表現でプログラムできるようにしている
最近ではCOBOLを使った、ネットワークプログラミングも注目を集めている
参考書: 『標準COBOLプログラミング』 『.NETのしくみとVB.NETプログラミング入門―COBOLユーザーに捧げる』


■Pascal
Pascalとは、世界で最初に機械式計算機を発明した哲学者B.Pascalにちなんで名づけられたもので、1971年にスイス連邦工科大学のNiklas Wirth教授によって言語仕様が公開された
Pascalは、構造化プログラミングと言語体系が最も一致しており、アルゴリズムの表現がし易いという特徴を持っている
そのため、厳格な書式を要求することから、情報系学生の教育用やアルゴリズムの表現方法として最も利用されている
その後PascalはWirth教授自身によって、拡張され、また後継となる言語も開発されてきている
代表的なものとしては、オブジェクト指向の拡張がなされたObject-Pascal(Delphi)やシステム開発用に再設計されたModula、Modula-2、Modula-3などがある
参考書: 『PASCAL』 『はじめてのObject Pascalプログラミング』 『Delphi Object Pascalリファレンスブック』


■C
C言語は、1972年から73年にかけてAT&Tのベル研究所のDennis M. Ritchieによって開発された
C言語はUNIXと呼ばれるOSを開発するために作られた言語で、構造化プログラミングへの対応しているだけではなく、アセンブラ言語のようにハードウェアの近い部分の制御も可能としている
そのため、現在ではOSをはじめとして各種アプリケーションの開発がC言語でなされるようになっている
また、C言語をオブジェクト指向の機能を付加した言語としてC++が、更に派生したC#等も登場して新しいシステム開発の主流になりつつある
参考書: 『やさしいC 第2版』 『プログラミング言語C ANSI規格準拠』 『新版 明解C言語 入門編』


■BASIC (Baginner's All-purpose Symbolic Instruction Code)
BASICは、1964年ダートマス大学でFORTRANをベースにして 大型コンピュータの教育用言語として開発された
BASICの特徴は、教育現場での利用を考え、対話性に優れたインタプリタ方式を採用したことにある
そのためスピード的には、他のコンパイラ言語と比較にならないが、プログラムが作りやすく、また初期のパソコンに標準で採用されたこともあり、大変普及した
現在では、オブジェクト指向の拡張がなされ、コンパイラ方式のBASICが主流となりつつある
参考書: 『これから始めるBASIC』


■VBA (Visual Basic for Application)
Visula Basicとはマイクロソフト社によって開発されたオブジェクト指向のBASIC言語である
Windowsに代表されるように、現在パソコンはGUIにより操作が主流となっている
これらのウィンドウやボタンといった部品をオブジェクトとして扱うように拡張された言語で、Windowsの機能をフルに使ったプログラムの作成が可能で
マイクロソフトの製品(アプリケーション、例えばExcel,wordなど)用のマクロ言語としてVisual Basicのサブセットを実装したもので、個々のアプリケーション内でしか利用出来ないという制限を持つ
また、マクロ言語として対話性を重視していることからインタプリタ言語と位置づけられている
参考書: 『やさしくわかるExcel VBAプログラミング』 『Access VBAプログラミング開発工房―2003/2002/2000 (入門・基礎編)』


■LISP (LISt Processor)
LISPは1960年にマサチューセッツ工科大学(MIT)のJohn McCarthyによって発表された関数型のプログラミング言語で高水準言語の中では古いものに属する
LISPは、その名称が示すようにリスト(LIST)と呼ばれる文字や数字(個々の文字や集合のことをアトムと呼ぶ)の集まりとして表現し、そのリストを処理するために開発された関数型の言語
人間の知的活動を抽象化すると文字列と文字列のつながり方の操作に還元できる
すなわちリストとリスト操作というLISPそのもので表現できることを利用して、人工知能の分野で利用されている
現在では、数式処理システムなど実用化されたシステムも多い
ただ、LISPは関数型言語であるため各自が勝手に関数を拡張した結果、数多くの方言が出来てしまい互換がとれなくなってしまった
このような状況を打破するため統一化が図られたのがCommon-LISPで
教育用にシンプルで美しい意味体系で再構築されたSchemeと言うのもある
参考書: 『ANSI Common Lisp』 『やさしいLisp入門』 『Common Lisp 入門』


■Prolog (Programming in Logic)
Prologは、1970年フランスのマルセイユ大学でAlain Colmerauerによって作られた論理型のプログラミング言語
Prologの特徴は、「述語論理」と呼ばれる人間の言語の論理体系をベースとしたもので、まず「事実」を定義し(表明)、事実間の関係を「規則」として定義する(公理)、そして最後に、「質問」を行うと、Prologは、「事実」と「規則」に従い「質問」を解釈し、その結果を返す
つまり、他の高水準言語とは全く異なるプログラミングとなる
参考書: 『わかる Prolog』 『Prolog入門』 『Prolog入門―知識情報処理の序曲』


■LOGO
LOGOは、1970年代にマサチューセッツ工科大学(MIT)のグループが、LISPをベースに、子供を含み人間との対話を重視した教育用言語として開発
LOGOは、子供に対する創造性開発、情報開発を目指して、柔軟な処理を可能とする言語設計とユーザーにとって使いやすさを追求した設計を行っている
その代表といえるのが「タートル・グラフィックス」と呼ばれるもので、運動場にライン引きで絵を描くのと同じようにコンピュータ上で絵が書ける
参考書: 『LOGO入門』 『LOGO空間プログラミング』 『入門・Logoの世界』


■Haskell
Haskellは関数型言語の基礎となる記号論理学に従事したHaskell Brooks Curryにちなんで名付けられました
Haskellは汎用の純粋関数型プログラミング言語で、プログラミング言語設計の分野での最近の革新の多くが取入れられています
Haskellが提供するのは、高階関数、非正格の意味論、静的多相型付け、利用者定義の代数的データ型、パターン照合、リストの内包表記、モジュールシステム、モナド I/O システムで
遅延評価型関数型言語に関する長年の研究を凝縮したもので、モジュールシステムなどプログラミング言語の設計としての言語


■Python
Pythonは 1990年代にGuido van Rossum 氏に設計されたもので、英国 BBC 放送のコメディ番組「モンティ パイソン」から名づけられた
当初からオブジェクト指向言語として設計されたわけではないがオブジェクト指向とは相性がいい
Pythonは、「シンプル」で「習得が容易」で言語自体の機能は最小限に押さえ、必要な機能は拡張モジュールとして追加するという柔軟性豊かな言語
標準で多くのGUIライブラリやネットワーククライアント機能も搭載されていて、商用 RDB用のモジュールも数多く公開されている
参考書: 『初めてのPython』 『Pythonテクニカルリファレンス―言語仕様とライブラリ』


■C++
C言語から派生した言語でAT&Tベル研究所のBjarne Stroustrup氏がC言語を拡張してSimula67から取り入れたクラスの概念を取り込んで開発した言語
1983年にRick Mascitti氏によってC++と名づけられました
現実のC++には多くのバージョンが存在します
1985年に商業ベースのRelease1.0が販売され、Stroustrup博士自身が1986年に出版した"The C++ Programming Language"がRelease1.0の解説書です
1990年にStroustrup博士とMargaret A. Ellisとの共著"The C++ Programming Language"で多重継承などの機能が追加されて、大幅な改良が行われ Release2.0, Release2.1と進化し続けています
参考書: 『やさしいC++ 第2版』 『詳説C++ 第2版』 『C++標準ライブラリの使い方 完全ガイド』


■JAVA
James Gosling によって開発された言語が "Oak" であり、後のJavaとなった
1993年に発表された、WebブラウザMosaic のクローンであり、Java(Oak)ベースのブラウザ "WebRunner"をSun Microsystemsが開発した
オブジェクト指向の言語でどのような環境でも動くと言うのが売りだが、現在ではサーバサイドでの開発が主になってきている
参考書: 『やさしいJava 第3版』 『Javaネットワークプログラミング』 『Javaクックブック―Java開発者のためのレシピ集』


■Perl(Practical Extraction And Report Language)
Perlは1986年、Larry Wall氏によって開発されたスクリプト言語で現在ではオブジェクト指向にも対応している
Ver1 1987年外部に始めて公開
Ver2 1988年正規表現パッケージを導入
Ver3 バイナリデータを扱えるように
Ver4 1991年
Ver5 1994年
と、精力的に進化している言語で 特にテキスト処理に優位を持っており現在ではCGIに代表されるように 広く一般に広がった
参考書: 『初めてのPerl』 『プログラミングPerl〈VOLUME1〉』 『Perlクックブック〈VOLUME1〉』


■Ruby
まつもと ゆきひろ氏が設計した本格的な日本発のオブジェクト指向言語
まつもと ゆきひろ氏はPerlを尊敬するとだけあって Perlに似たオブジェクト指向言語でテキスト処理関係の能力などに優れている
参考書: 『たのしいRuby―Rubyではじめる気軽なプログラミング』 『Rubyプログラミング入門』 『RubyによるCGIプログラミング』


ウィキペディアの「Hello world」を見てるとさすがにあきてきます

投稿者 edams : 09:39 | コメント (0) | トラックバック | ▲

2005年06月25日

自宅サーバを公開


ADSLモデムには「ルータタイプ」と「ブリッジタイプ」がある
これらは、ISDNルータとTA(ターミナルアダプタ)の関係と似た関係にある
ISDNによるインターネット接続では、TCP/IPをPPP(Point to Point Protocol)というプロトコルでくるんで送受信する
ISDNルータはPPPを処理する機能を持つので、ISDNポートにはTCP/IPをくるんだPPPが、LANポートにはPPP部分を取り除いたTCP/IPが流れる
これに対してTAは、PPPを処理しないのでISDNポート、シリアルポート(あるいはUSBポート)のどちらにもPPPが流れる
PPPを処理してTCP/IPに変換するのはPCの役目だ

「Yahoo!BB」を除くADSLサービスでは、PPPoE(PPPoverEthe,net)やPPPoA(PPP over ATM)というプロトコルでTCP/IPを運ぶ
これらは、その名のとおりイーサネットプロトコルやATMでPPPをカプセル化するものだ
PPP部分にはさらにTCP/IPがカプセル化されているという、およそ美しくないプロトコルなのだが、イーサネットプロトコルやATMでPPPの持つユーザー認証機能を利用するために考案された


■ルータタイプのモデム
ルータタイプのADSLモデムは、PPPoEやPPPoAを処理する機能を持ち、LANポートにはTCP/IPが流れる
ISDNルータと同じように、IPマスカレード機能により複数のPCをインターネットに同時接続させることも可能だ
Webブラウジングなど、インターネット上のサーバに接続する場合は、PCの設定が簡単なルータタイプのモデムが手軽でよいのだが、IPマスカレード機能を有効にしたままでサーバを公開するには、ポートフォワードという仕組みを利用しなければならない


■ブリッジタイプのモデム
ブリッジタイプのADSLモデムは、LANポートにPPPoEが流れる
そのため、LinuxマシンでPPPoEを扱えるようにする必要がある
ただし、ADSL回線業者とプロバイダの両方を1社で行う「Yahoo!BB」は、ユーザー認証の必要がないため、PPPoEではなくTCP/IPが直接流れる
「Yahoo!BB」を利用するときは、モデムとPCをイーサネットでつなぎ、TCP/IPの設定を行うだけで利用可能だ
IPアドレスなどのネットワーク情報は、DHCPによって取得する
PPPoEで接続する場合は、LinuxマシンにPPPoE接続ソフトウェアをインストールする
IPアドレスなどの情報はPPPの機能で取得するので、DHCPクライアントを動かす必要はない

今回は、Roaring Penguin'sSoftwareInc.のRP-PPPOEを紹介しよう
なお、モデムとLinuxマシンの間にPPPoE対応ブロードバンドル一夕をつなぎ、PPPoEの面倒をルータにみさせることも可能だが、サーバを公開するにはルータタイプのモデムを使うときと同様にポートフォワードの設定が必須となる

#--------------------------
# PPPoE接続ツールRP-PPPoE
#--------------------------

RP-PPPoEを利用するためには、バージョン2.3.7以上のPPPデーモン(pppd)がインストールされている必要がある
カーネル2.4を採用しているディストリビューションではPPPパッケージ(ppp)も2.4以上になっているが、
古い場合はPPPパッケージのサイト(http://www.samba.org/ppp/)などから最新版を人手しよう
また、モデムとの接続に使うイーサネットインターフェイスにはIPアドレスを設定しないこと


■ファイルの入手とインストール
同社のWebページ(http://www.roaringpenguin.com/pppoe/)には、Red Hat Linux6.2用のバイナリRPM、そのほかのRPM系ディストリビューション向けのソースRPMファイルが用意されている
また、ソースのtar.gzファイルもあるので、非RPM系ディストリビューションのユーザーはこれを使うとよいだろう
ソースRPMを使う場合は、ファイル取得後、rootユーザーになって次のようにする


# rpm --rebuild rp-pppoe-3.3-1.src.rpm


すると、コンパイル作業が行われ、/usr/src/redhat/RPMS/i386/に、
rp-pppoe-3.3-1.i386.rpm
rp-pppoe-gui-3.3-l.i386.rpm
というファイルができるので、これらをインストールしよう
ソースのtar.gzからインストールする手順は次のようになる


# tar xvfz rp-pppoe-3.3.tar.gz
# cd rp-pppoe-3.3
# ./go


コンパイル、インストールが自動的に行われ、続いて接続設定を行うadsl-setupコマンドが起動される
RPMからインストールした場合、adsl-setupコマンドは自動実行されないので、rootユーザーになって/usr/sbin/adsl-setupを実行する


■adsl-setupによるPPPoEの設定
adsl-setupは対話的にRP-PPPoEの接続設定を行うコマンドだ
プロバイダから提供されている接続情報を用意して、それに従って作業を進めよう

 ・USER NAME
 プロバイダに指定されたPPPoE接続ユーザー名
 例:edams@sieg.xeong.com

 ・lNTERFACE
 PPPoE接続に利用するイーサネットインターフェイス
 例:eth0

続いて、オンデマンド接続の設定
 「Enter the demand value(defaultno):」に対し、データが流れなくなってから回線を切断するまでの時間を秒単位で人力
 デフォルトは“no”で、これは回線をつなぎっぱなしにする設定

 ・DNS
 DNSサーバのIPアドレス設定

プロバイダに指定されたDNSサーバがあれば、そのIPアドレスをプライマリ、セカンダリの順で設定する
IPアドレスの代わりに“server”と人力すると、接続時にプロバイダからDNSサーバのIPアドレスを取得する

 ・PASSWORD
 プロバイダに指定されたPPPoE接続パスワード

確認のために2回人力する。なお、画面にエコーバックされないので慎重に

 ・FIREWALLING
 ipchainsによるパケットフィルタの簡易設定
 今回は“O"を入力し、簡易設定を利用しない

設定すべき項目は以上だ。指定した内容が表示されるので正しければ"y”を人力して設定が終了する
adsl-setupによって設定した内容は、/etc/ppp/pppoe.confに書き込まれる
また、ユーザー名とパスワードは、同じディレクトリにあるchap-secretsとpap-secretsに書かれる


■PPPoEでの接続
設定が済んだら/usr/sbin/adsl_startを実行して接続しよう
/var/log/messagesにログが出力されるので、うまくいかないときは参考にしてほしい
Linuxの起動とともに接続したいなら、rootユーザーになって次のようにする

# chkconfig --level 35 adslon

--levelに続けてランレベルを指定する
この例では、Linuxがランレベル3と5で起動する場合にPPPoE接続をする
また、Linuxをシャットダウンする際には接続を切ってくれる

更に詳しい情報 : RP-PPPoEのGUI編

投稿者 edams : 03:49 | コメント (0) | トラックバック | ▲

2005年06月24日

WebDAV


#-----------------------
# WebDAVってなに?
#-----------------------

ブロードバンド環境の普及で、誰もが比較的容易に自宅サーバを持てるようになった
これを、会社や学校など出先からいつでもアクセスできる便利な"ファイルサーバ"にできないか?と期待するのは私だけではあるまい
残業持ち帰りのExcelファイルとか、学校のパソコン室で書いたレポートなど、サイズが大きくてフロッピーで持ち帰るっていうのもちょっとメールで送るにもアカウントがない現場から、なんてこともある
FTPが使えればいいのだが、こういったシーンでは外部インターネット接続が制限されていて「webアクセスしかできません」状態なことが多い
あえなく"自宅ファイルサーバ"計画は断念・・・?

そこで登場するのが「webDAV」(ウェブダブ)というプロトコル
この名は「web−based Distributed Authoringand Versioning」の略で、長ったらしいが「webのプロトコルだけでコンテンツの書き換え/配布などをできるようにしましょう」というしくみを意味している
従来、遠隔地にあるwebサーバ上のファイルはFTP経由でアクセスしないと更新できないのが常識だったが、webDAVではHTTPプロトコルを拡張、FTPなどを使わないでこれらのことができるようにした
RFC2518で提案され、現在ではWindows、MacOSの多くのwebオーサリングツールが対応する

webDAVを使えば遠隔地サーバからのファイルのダウンロードはもちろん、アップロードも更新も可能
しかもHTTPを使用するのでファイアウォール内でも利用できる可能性が高い
さらに、クライアントがWindowsの場合、InternetExplorer5以降で導入された「webフォルダ」機能を用い、ファイルのやりとりが簡単にできる
そのうえ、Microsoft Office2OO0以降ではwebDAVとの親和性が高くなっており、webフォルダ上のExcelファイルなどを直接集でき、しかもファイルロック機能に対応しているので複数人の共用ファイルスペースとしても活用を期待できる
なお、ユーザー認証はふつうのwebコンテンツと同じように制限をかけられる

#------------------------
# mod_davを導入する
#------------------------

Apache1.3系列では、WebDAV.orgで公開されている「mod_dav」
モジュールをインストールするだけで、既存のwebサーバがそのままwebDAV対応になる(http://www.webdav.org/mod_dav/)

まず、mod_davをコンパイルする
残念ながらmod_davは日本語環境を考えて作成されていないので、このままではクライアントの文字コードによって誤動作が起きてしまう
そこで、WebDAV Resources JPが配布している「mod_encoding」を導入する
次に、mod_davが用いるロックファイル用領域を作る
/var/lock/moddavディレクトリを作成するため、


# mkdir /var/lock/mod_dav


としたあと、httpd.conf中のUser、Groupに指定したApache動作時のユーザー/グループをチェックする
User:nobody、Group:nobodyの場合は、


# chown -R nobody.nobody/var/lock/mod_dav


とする
最後に、各モジュールに必要な設定項目をhttpd.confに追加

#------------------------------
# WebDAVのファイル共有を実験
#------------------------------

では、実際にDAVによるファイル共有を行ってみる
ここでは、/home/httpd/public_html/dav デイレクトリを対象に設定する


# cd /home/httpd/public_html
# mkdir dav
# chown nobody.nobody dav


とディレクトリを作成したあと、httpd.confを開いて、

くLocation/dav>
DAV On
DAVMinTimeout 1800
Options +Indexes
Index0ptions FancyIndexing
く/Location>

を追加する
デイレクトリ内一覧表示不可の設定だとWebDAVが使い物にならないIndexesオプションを忘れずに

とりあえず手近なWindowsで「マイネットワーク」→「ネットワークプレースの追加」をクリック
するとウイザードが立ち上がるので、DAVの設定を行ったURLを入力
通常のフォルダのような画面で、指定したURLを「Webフォルダ」としてアクセスできる
ファイルをドラッグ&ドロップすれば、公開しているデイレクトリに対してHTTP経由でアップロード/ダウンロードが行えるまた、ExcelのファイルはWebフォルダ上で直接編集を行え、なかなか便利だ
なお、この状態では誰もが該当デイレクトリにアクセスできてしまうので、実際に使う際にはBasic認証などの対策を講じる必要がある

まだまだ不安定なところもあるmod_davだが、人によってさまざまな使いこなし方が考えられる
ぜひ試してみてほしい

更に詳しい情報 : mod_dav のインストールと設定

投稿者 edams : 05:37 | コメント (0) | トラックバック | ▲

2005年06月23日

ダイナミックDNS


ダイナミックDNSサービスを使えば、動的IPアドレスでもドメインによるインターネットサーバの公開ができる


#--------------------------------------------
# まずはダイナミックDNSについて
#--------------------------------------------

常時接続環境が利用できるとなると、インターネットの活用法も飛躍的に広がってくる
単にWebページを閲覧するだけに使用するというのではあまりにもったいない
次なるステップはマイ・インターネットサーバの構築ということになるだろう
プロバイダのメールサーバではメールアドレスやメールの送受信量に制限もあるだろうし、Webサーバも容量やCGIなどに制限が課せられる
せっかく常時接続に近い環境が得られるのであれば、自分だけの自由なサーバを構築してみたくなるものだ


#--------------------------------------------
グローバルIPアドレスとプライベートIPアドレス
#--------------------------------------------

インターネットに直接接続されるPCやホストには、インターネット上において一意で重複しないIPアドレスが割り当てられている
このIPアドレスをグローバルIPアドレスという
このグローバルIPアドレスがないとインターネット上のホストを特定することができない
インターネットが考案された当時は、現在のようにインターネットが爆発的に普及し、インターネットに接続されるホストが膨大になるとは想定されていなかったため、グローバルIPアドレスが不足するという事態となってしまった
こうしたグローバルIPアドレスの枯渇問題に対応するために、LANなどインターネットに直接接続されないPCやホストには、プライベートIPアドレスという内部的に使用されるIPアドレスを割り当てることが多い

プライベートIPアドレスでは直接インターネットに接続することはできない
このため、NAT(Network Address Translation)やIPマスカレードといった、プライーベートIPアドレスとグローバルIPアドレスを変換する仕組みを利用することで、インターネット上のホストに接続できるようにしている
こうした仕組みは、一種のファイアウォールとして機能するというメリットもあるが、逆にインターネット上からプライベートIPアドレスのホストに接続することはできない
このため残念ながらプライベートIPアドレスによるサーバの公開は不可能だ
つまりインターネットサーバを公開するとなると、グローバルIPアドレスが割り当てられていることが必須ということになる
IPアドレスがグローバルIPアドレスかプライベートIPアドレスかは、割り当てられたIPアドレスの範囲(アドレス空間)で知ることができる (下記)


----------------------------------------
10.0.0.0 〜 10.255.255.255
----------------------------------------
172.16.0.0 〜 172.31.255.255
----------------------------------------
192.168.0.0 〜 192.168.255.255
----------------------------------------


これらの範囲のIPアドレスはインターネット上に存在することが禁止されているものだ
ただし、ルータを使ってインターネットに接続している場合は、ルータがグローバルIPアドレスを持ち、サーバ自体はプライベートIPアドレスを持つこともある
この場合は、ルーターとサーバの間でパケットをポートフォワードすることによって、サーバを外部に公開することができる

#----------------------------------
# lPアドレスとDNS
#----------------------------------

インターネット上のホストにはすべてIPアドレスが割り当てられているが、これらは111.122.133.144といった数値の羅列であり人間が覚えることば難しい
これを人間が覚えやすいような、たとえば www.hoo.bar.jpといったドメイン名に割り当て、相互に変換するシステムがDNS(Domain Name System)だ
いわば、DNSはインターネットの電話帳と考えることができる
この仕組みを使うことで、覚えやすいアドレスでホストに到達できるようになっている

ドメイン名からIPアドレスへの変換を正引き(順引き)、逆のIPアドレスからドメイン名への変換を逆引きと呼ぶ
人間が利用する場合はもっばら正引きだけだが、コンピュータにとっては逆引きも重要となる
DNSはIPアドレスとドメイン名の相互変換という仕組みを提供しているが、こうしたアドレスの対応は固定されており、頻繁には変更されないという前提で作られている
つまり、固定(スタティック)IPアドレスが想定されているわけだ
これは常時接続されるホストは当然固定IPアドレスを持ち、頻繁に変更されることはないという想定の元で設計されていたからだ

ところがADSLやBフレッツといった常時接続サービスのほとんどは、接続のたびにIPアドレスが変わる動的(ダイナミック)IPアドレスを提供する
こうした動的IPアドレスでは、DNSに登録したとしてもいつまでそのIPアドレスが割り当てられているかはわからず、実際に誰かがインターネット上から接続しようとしたときには、すでにそのIPアドレスは違うホストに割り当てられているかもしれない
これではDNSそのものが機能しないことになる

となると、サーバを公開する場合には固定IPアドレスが必須になるということになる
もちろん、オプションで固定IPアドレスを割り当てるサービスを行っているプロバイダもいくつかあるが、オプション料金が高額で気軽に使えるものではない
しかし、これはDNSを使う場合の話で、DNSを使わず直接IPアドレスでホストに接続するのであれば現在のグローバルIPアドレスさえわかっていればいいわけだ
とはいえ、IPアドレスはいつ変わるかわからないし、接続しようとしている相手に現在のIPアドレスを伝えるのもやっかいだ
やはりドメイン名による接続ができないと不便ということになる

しかし、そうした動的IPアドレスユーザーのために、ダイナミックDNSというサービスが登場した
通常のDNSがIPアドレスを固定的に扱うのに対し、ダイナミックDNSは動的にIPアドレスを扱う
いわば、IPアドレスがコロコロ変わることを前提に作られたDNSだといえる

#-----------------------------
# ダイナミックDNSの仕組み
#-----------------------------

ダイナミックDNSは、ドメイン名とIPアドレスの対応データベースを動的に書き換えられるように作られているシステムだ
つまり、動的IPアドレスしか持たないホストに対し、ドメイン名でアクセスできるようにするためのサービスだと考えればよい

動的IPアドレスしか持たないホストは、ダイナミックDNSサーバに対して現在のIPアドレスを通知する
ダイナミックDNSサーバは、ドメイン名での名前の問い合わせに対してこのIPアドレスを回答することになる
これによって、インターネット上のホストはドメイン名から目的のホストのIPアドレスに到達できるのだ

インターネット上のホストからしてみるとドメイン名で接続できるため、接続先が動的IPアドレスであるかどうかといったことや、ダイナミックDNSサービスによって名前の解決が行われているかどうかなどを気にする必要もない
ただし、DNSは名前の解決が頻繁に発生しないように名前の解決結果を一定時間キャッシュする
つまり、正しいホストのIPアドレスが伝搬されるまでにタイムラグがあるわけだ
このため、ホストのIPアドレスが変更された場合には、一定期間(おおむね数分から数十分)は接続できない可能性もあることに注意しなければならない

なお、ダイナミックDNSサーバは正引きに対する問い合わせに対して対応するIPアドレスを回答するが、IPアドレスからドメイン名への変換といった逆引きに関しては、接続しているプロバイダのDNSサーバが回答する
このため、正引きと逆引きの結果が一致しないという問題がある とはいえ、通常の用途には問題はないだろう

#-----------------------------
# ダイナミックDNSサービスの種類
#-----------------------------

ダイナミックDNSは、インターネットサービスプロバイダが提供している場合や、ダイナミックDNSとして有償で提供している企業、無償サービスやボランティアベースで提供しているサイトなどがある
それぞれのダイナミックDNSによって提供している機能が若干異なるので、自分に合ったサービスを選択するといいだろう
たとえば、多くのダイナミックDNSサービスはドメイン名が決められており、自分のホストはそのサブドメインとして運用するが、一部のダイナミックDNSサービスでは独自ドメインによる運用が可能なものもある
また、バーチャルドメインや回線切断時にはほかのURLへ転送するオフライン機能、メールの代理受け取りが可能なサービスも存在する
なお、IPアドレスを通知する方法はダイナミックDNSサービスによってまちまちだ
ほとんどのサービスでは手作業によるWebサイトへの登録のほかに、専用のツールで自動化することもできる


無料のダイナミックDNSサービス(日本)
家サーバー・プロジェクト
私的DNS(MyDNS.JP)
DDNS(ダイナミックドメインネームシステム)
Dynamic DO!.jp
マイドメイン
J-SPEED

無料のツール
DiCE for Windows

投稿者 edams : 06:30 | コメント (0) | トラックバック | ▲

2005年06月22日

リンク元調査


JavaScriptでの例です(とてもめんどうなことになってますが)


リファイラーをとるページ[index.html]

Code: [download]

  1. <html>
  2. <body>
  3. <script src="js.cgi"></script>
  4. </body>
  5. </html>

受け取るCGI[js.cgi]

Code: [download]

  1. print <<HTML;
  2. Content-Type: application/x-javascript\n
  3. rf = parent.document.referrer; //フレーム内なら top.document.referrer
  4. document.write(rf); //ページに表示するならば
  5. logurl = "js2.cgi?ref="+rf;
  6. document.write('<script src="' + logurl + '"></script>');
  7. HTML

記録するCGI[js2.cgi]

Code: [download]

  1. use CGI qw (:standard);
  2. $ref = param('ref');
  3. open FH, ">>js.txt";
  4. print FH "$ref\n";
  5. close FH;

欠点 : JavaScriptを使えないまたはOFFにしているユーザの情報は得られない
投稿者 edams : 11:01 | コメント (0)

2005年06月21日

Perl での正規表現


# 半角スペース
$str = '\x20';

# 全角スペース
$str = '(?:\xA1\xA1)'; # EUC-JP
$str_sjis = '(?:\x81\x40)'; # SJIS

# 全角数字 [0-9]
$str = '(?:\xA3[\xB0-\xB9])'; # EUC-JP
$str_sjis = '(?:\x82[\x4F-\x58])'; # SJIS

# 全角大文字 [A-Z]
$str = '(?:\xA3[\xC1-\xDA])'; # EUC-JP
$str_sjis = '(?:\x82[\x60-\x79])'; # SJIS

# 全角小文字 [a-z]
$str = '(?:\xA3[\xE1-\xFA])'; # EUC-JP
$str_sjis = '(?:\x82[\x81-\x9A])'; # SJIS

# 全角アルファベット [A-Za-z]
$str = '(?:\xA3[\xC1-\xDA\xE1-\xFA])'; # EUC-JP
$str_sjis = '(?:\x82[\x60-\x79\x81-\x9A])'; # SJIS

# 全角ひらがな [ぁ-ん]
$str = '(?:\xA4[\xA1-\xF3])'; # EUC-JP
$str_sjis = '(?:\x82[\x9F-\xF1])'; # SJIS

# 全角ひらがな(拡張) [ぁ-ん゛゜ゝゞ]
$str = '(?:\xA4[\xA1-\xF3]|\xA1[\xAB\xAC\xB5\xB6])'; # EUC-JP
$str_sjis = '(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55])'; # SJIS

# 全角カタカナ [ァ-ヶ]
$str = '(?:\xA5[\xA1-\xF6])'; # EUC-JP
$str_sjis = '(?:\x83[\x40-\x96])'; # SJIS

# 全角カタカナ(拡張) [ァ-ヶ・ーヽヾ]
$str = '(?:\xA5[\xA1-\xF6]|\xA1[\xA6\xBC\xB3\xB4])'; # EUC-JP
$str_sjis = '(?:\x83[\x40-\x96]|\x81[\x45\x5B\x52\x53])'; # SJIS

# 半角カタカナ [ヲ-゜]
$str = '(?:\x8E[\xA6-\xDF])'; # EUC-JP
$str_sjis = '[\xA6-\xDF]'; # SJIS

# EUC-JP文字
$ascii = '[\x00-\x7F]'; # 1バイト EUC-JP文字
$twoBytes = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'; # 2バイト EUC-JP文字
$threeBytes = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3バイト EUC-JP文字
$character = "(?:$ascii|$twoBytes|$threeBytes)"; # EUC-JP文字

# EUC-JP文字(機種依存文字・未定義領域・3バイト文字を含まない)
$character_strict = '(?:[\x00-\x7F]|' # ASCII
'\x8E[\xA1-\xDF]|' # 半角カタカナ
'[\xA1\xB0-\xCE\xD0-\xF3][\xA1-\xFE]|' # 1,16-46,48-83区
'\xA2[\xA1-\xAE\xBA-\xC1\xCA-\xD0\xDC-\xEA\xF2-\xF9\xFE]|' # 2区
'\xA3[\xB0-\xB9\xC1-\xDA\xE1-\xFA]|' # 3区
'\xA4[\xA1-\xF3]|' # 4区
'\xA5[\xA1-\xF6]|' # 5区
'\xA6[\xA1-\xB8\xC1-\xD8]|' # 6区
'\xA7[\xA1-\xC1\xD1-\xF1]|' # 7区
'\xA8[\xA1-\xC0]|' # 8区
'\xCF[\xA1-\xD3]|' # 47区
'\xF4[\xA1-\xA6])'; # 84区

# EUC-JP未定義文字(機種依存文字・3バイト文字を含む)
$character_undef = '(?:[\xA9-\xAF\xF5-\xFE][\xA1-\xFE]|' # 9-15,85-94区
'\x8E[\xE0-\xFE]|' # 半角カタカナ
'\xA2[\xAF-\xB9\xC2-\xC9\xD1-\xDB\xEB-\xF1\xFA-\xFD]|' # 2区
'\xA3[\XA1-\xAF\xBA-\xC0\xDB-\xE0\xFB-\xFE]|' # 3区
'\xA4[\xF4-\xFE]|' # 4区
'\xA5[\xF7-\xFE]|' # 5区
'\xA6[\x89-\xC0\xD9-\xFE]|' # 6区
'\xA7[\xC2-\xD0\xF2-\xFE]|' # 7区
'\xA8[\xC1-\xFE]|' # 8区
'\xCF[\xD4-\xFE]|' # 47区
'\xF4[\xA7-\xFE]|' # 84区
'\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3バイト文字

# SJIS文字
$oneByte_sjis = '[\x00-\x7F\xA1-\xDF]'; # 1バイト SJIS文字
$twoBytes_sjis =
'(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; # 2バイト SJIS文字
$character_sjis = "(?:$oneByte_sjis|$twoBytes_sjis)"; # SJIS文字

# SJIS文字(機種依存文字・未定義領域を含まない)
$character_sjis_strict = '(?:[\x00-\x7F\xA1-\xDF]|' # ASCII,半角カタカナ
'[\x89-\x97\x99-\x9F\xE0-\xE9][\x40-\x7E\x80-\xFC]|' # 17-46,49-82区
'\x81[\x40-\x7E\x80-\xAC\xB8-\xBF\xC8-\xCE\xDA-\xE8\xF0-\xF7\xFC]|' # 1,2区
'\x82[\x4F-\x58\x60-\x79\x81-\x9A\x9F-\xF1]|' # 3,4区
'\x83[\x40-\x7E\x80-\x96\x9F-\xB6\xBF-\xD6]|' # 5,6区
'\x84[\x40-\x60\x70-\x7E\x80-\x91\x9F-\xBE]|' # 7,8区
'\x88[\x9F-\xFC]|' # 15,16区
'\x98[\x40-\x72\x9F-\xFC]|' # 47,48区
'\xEA[\x40-\x7E\x80-\xA4])'; # 83,84区

# SJIS未定義文字(機種依存文字を含む)
$character_sjis_undef =
'(?:[\x85-\x87\xEB-\xFC][\x40-\x7E\x80-\xFC]|' # 9-14,85-120区
'\x81[\xAD-\xB7\xC0-\xC7\xCF-\xD9\xE9-\xEF\xF8-\xFB]|' # 1,2区
'\x82[\x40-\x4E\x59-\x5F\x7A-\x7E\x80\x9B-\x9E\xF2-\xFC]|' # 3,4区
'\x83[\x97-\x9E\xB7-\xBE\xD7-\xFC]|' # 5,6区
'\x84[\x61-\x6F\x92-\x9E\xBF-\xFC]|' # 7,8区
'\x88[\x40-\x7E\x80-\x9E]|' # 15,16区
'\x98[\x73-\x7E\x80-\x9E]|' # 47,48区
'\xEA[\xA5-\xFC])'; # 83,84区

# iモード対応 絵文字
$iPictograph_base = '(?:\xF8[\x9F-\xFC]|' # 基本絵文字(SJIS)
. 'F9[\x40-\x49\x50-\x52\x55-\x57\x5B-\x5E\x72-\x7E\x80-\xB0])';
$iPictograph_ext = '(?:F9[\xB1-\xFC])'; # 拡張絵文字(SJIS)
$iPictograph =
'(?:$iPictograph_base|$iPictograph_ext)'; # iモード対応 絵文字(SJIS)

投稿者 edams : 16:31 | コメント (0)