Linux Journal11月号発売中。特集はハードウェア。
▼▼▼ディストリビューション関連ニュース▼▼▼ ●CalderaCaldera は Linux マネージメントソリューション「コスモス」のペータ版を発表。コスモスはポリシーとプロファイルを使ってディストリビューションに捕らわずにネットワークの Linux システムを管理することができる。ベータ版は http://www.calderasystems.com/beta/ からダウンロードできる
●Conectiva ●LuteLuteLinux.com の新しいサービス、ShowMeLinux。ShowMeLinux はビジネスプロフェッショナルや Linux 好きな人向けのオンラインマガジン。ShowMeLinux ではコントリビュータも募集している。
●MandrakeLinux-Mandrake 7.2 のダウンロードができるようになった。KDE 2.0, GNOME 1.2, PowerPak の ViaVoice, CUPS プリンティングシステム, ラップトップの同期ツール、KOffice, ReiserFS(ジャーナルファイルシステム)、Supermount, MandrakeUpdate などがバンドルされている。いくつかの外国語版もリリースされており、家庭、ビジネスユーザ用の商用版もまもなくリリースされる。
●Red FlagSun Wah Linux Ltd. から新しいディストリビューション Red Flag Linuxがデビュー。これは Red Flag Linux Server 2.0 と Red Flag E-business Start Kit 1.0 だ。Linux Server 2.0 は32ビット、64ビットもしくはよりハイエンドマシン向けでサーバ用に最適化されている。インターネット/イントラネット接続ソリューションと ISP/ICP ソリューションとを提供、アンチウィルスソフトウェアにも対応している。同ディストリビューションとも I18NUX と GPL に準拠。
Red Flag E-business Start Kit 1.0 は Red Flag Linux 2.0、e-Office、e-Shop、Web Mail、Web BBS などを統合したソフトだ。
●RockROCK Linux 1.3.11 がリリースされた。
●SuSESuSE Linux 7.0 はインストール、システム環境設定などに必要なリソースをすべて備えたSOHO、家庭用ディストリビューションで、StarOffice 5.2, Netscape, VMWare などがバンドルされている。
SuSE Linux 7.0 Professional 版は VMWare, Emhydra, PostgreSQL などのパワーツールをバンドルしている。
▼▼▼その他のニュース▼▼▼ ●今後開催予定のイベントおよびコンファレンス|
Linux Business Expo (co-located with COMDEX event) | November 13-17, 2000 Las Vegas, NV www.key3media.com/linuxbizexpo |
|
USENIX Winter - LISA 2000 | December 3-8, 2000 New Orleans, LA www.usenix.org |
|
Pluto Meeting 2000 | December 9-11, 2000 Terni, Italy meeting.pluto.linux.it |
|
LinuxWorld Conference & Expo | January 30 - February 2, 2001 New York, NY www.linuxworldexpo.com |
|
ISPCON | February 5-8, 2001 Toronto, Canada events.internet.com |
|
Internet World Spring | March 12-16, 2001 Los Angeles, CA events.internet.com |
|
Game Developers Conference | March 20-24, 2001 San Jose, CA www.cgdc.com |
|
CeBit | March 22-28, 2001 Hannover, Germany www.cebit.de |
|
Linux Business Expo | April 2-5, 2001 Chicago, IL www.linuxbusinessexpo.com |
|
Strictly e-Business Solutions Expo | May 23-24, 2001 Location unknown at present www.stricltyebusinessexpo.com |
|
USENIX Annual Technical Conference | June 25-30, 2001 Boston, MA www.usenix.org |
|
PC Expo | June 26-29, 2001 New York, NY www.pcexpo.com |
|
Internet World | July 10-12, 2001 Chicago, IL events.internet.com |
|
O'Reilly Open Source Convention | July 23-26, 2001 San Diego, CA conferences.oreilly.com |
|
LinuxWorld Conference & Expo | August 10-14, 2001 New York, NY www.linuxworldexpo.com |
|
Linux Lunacy Co-Produced by Linux Journal and Geek Cruises | October 21-28, 2001 Eastern Carribean www.geekcruises.com |
Jabber.com, WorkSpot Inc., IQ3G. Inc. が提携し Palm と Jabber を統合する。これは新しい Jabber ワイヤレスイニシャティブ団体設立のため。今後はオープンソースコミュニティと Palm デバイス、Jabber の互換性のために協力する。
Jabber はまた Red Hat 組み込みLinux にリアルタイムメッセージングインフラを提供するために Red Hat との戦略的提携を発表した。基本的な部分は Embedded Systems 2000 で展示された。
●Dell が早くも Red Hat Linux 7 をリリースDELL は Dell PowerEdge(tm), Dell Precision(tm) に Red Hat Linux 7 をインストールしてリリースする。さらにいくつかのデスクトップやノート型PCでも Linux 7 をインストール可能だ。Dell PowerEdge 8450, Dell PowerEdge 6400 サーバのベンチマークは http://www.spec.org で見ることができる。
●NeowareNeoware Systems によると Security Applications, Inc. は同社のセキュリティ構築用パネル、e-Panel のプラットフォームに Neoware の Eon 情報アプライアンスプラットフォームと NeoLinux ソフトウェアを採用した。Security Applications は同社独自仕様の Unix ソフトウェアを Red Hat Linux を基盤とする NeoLinux に移植した。NeoLinux は Red Hat Linux の最初の組み込みバージョンだ。
●VMWare 新しいユーザグループプログラムを発表VMware,Inc. は新しいユーザグループプログラムを発表。これは世界中の関連ユーザグループをソフトウェア、ギブアウェイ、テクニカルガイドなどの形でサポートしていこうというもの。詳細は http://www.vmware.com/news/user_groups/index.jsp から入手できる。
●Sensiva が Wacom と提携 コンピュータグラフィックタブレット製造の大手 Sensiva,Inc. と Wacom Co., Ltd. とが提携を発表した。Wacom は Sensiva のインタラクティブ処理 API を利用できるようになり、ユーザはイメージを直接コンピュータにコピーアンドペーストできるようになるばかりでなく速度も向上する。 ●中国のインターネット関連法律CNN は中国のインターネット関連法案に対し慎重になっている。法案はインターネットコンテンツ/サービスプロバイダはコンテンツの記録、クライアントのアクセスログを保存し必要がある場合には捜査機関に提出するというものだ。違法なものに対する定義はまだはっきりしていない。
●Opera, PalmPalm, Trolltech が組み込みLinuxで戦略的提携Opera Software、PalmPalm Technology Inc.、Trolltech はアジアのワイヤレス Linux での戦略的な提携を発表した。3社は共同でワイヤレスインターネット機器用の総合 Linux ソリューションを開発する。それぞれ Opera、組み込みQt、組み込み GUI 環境、Tynux を利用する。
▼▼▼ソフトウェア関連ニュース▼▼▼ ●NetworX Linux クラスタ大規模クラスタソリューションプロバイダの Linux NetworX, Inc. は NCMI (National Center for Macromolecular Imaging) が同社のクラスタコンピュータを採用したと発表した。病原菌やウィルスの分子配列の再構成や3次元構成の開発などに利用される。
●TridiaeSupport ツールプロバイダの Tridia Corporation は最新バージョンの TridiaVNC のリリースを発表。TridiaVNC 2.0 の Linux ビューワー、管理機能でリモートのサーバを制御することができる。ベータバージョンが www.tridiavnc.com から ソースコードは www.developvnc.org からダウンロードできる。
●Teamware Office 5.3Teamware Group の Teamware Office 5.3 for Linux の評価版を www.teamware.com/linux/ からダウンロードできる。90日間使用可能。
●Proven CHOICE アカウンティングがインターネットツールキットをリリースProven Software, Inc. は Proven CHOICE アカウンティングのインターネットアプリケーション開発用のインターネットツールキットをリリースした。詳細は ウェブサイト から入手できる。Prove CHOICE は強力なマルチユーザ対応のアカウンティングシステムだ。
●Workstation Solutions の Quick Restore 2.7データ保護ソフトウェアの大手 Workstation Solutions, Inc. は Quick Restore 2.7 を発表した。パフォーマンスとスケーラビリティが向上している。ビジネスデータのバックアップ、リストアが低コストで迅速にできる。コンパック、Exabyte、HP、Breece Hill、Spectra Logic、ADIC、Qualstar などの機器にも対応している。価格は2500ドル。
●Internet C++ のアルファバージョンInternet C++ の開発者、Bob A. Dayley 氏はアルファバージョンをリリースした。バーチュアルマシン (ICVM)、コンパイラ (igcc)、ライブラリが含まれている。ソースとバイナリがダウンロード可能だ。高速な仮想マシン上で DOOM を起動可能。
HAL91 Linux ディストリビューションを紹介しよう。詳しくはHAL91 のメインテナ、Christian Perleを参照して欲しい。HAL91 のブートメッセージを見てもらえば分かるだろうが、HAL91 はフロッピディスクに収まる小さなサイズの Linux だ。システムにはネットワークの他にシステムの修復や管理などのユティリティが含まれている。HAL91 プロジェクトを始めたのは Oyvind Kolaas だが 現在のメインテナは Christian Perle だ。
HAL91 はサイズの問題から libc5 を採用しており最新のカーネルは 2.0.36 だ。ハードウェアは 386 プロセッサに 8MB のメモリがあれば十分だ。HDD や CD-ROM をサポートしているが起動はフロッピだ。NE2000 互換ネットワークカードをサポートしナルモデムを使ってシリアル経由の PPP 接続ができる。
HAL91 ディストリビューションには次のようなプログラム、ツールが含まれている。
| tool/program | Description |
| bash | bourne again shell |
| bunzip2 | uncompress bzip2 files |
| bzip2 | compress files to .bz2 |
| cat | concatenate files |
| chmod | change file permissions |
| chown | change file ownerships |
| chroot | change root filesystem |
| cp | copy files |
| dd | read/write devices and files |
| df | show free disk space |
| dir | show contents of directory (symlinked to ls) |
| dmesg | show kernel messages |
| du | show disk usage |
| e2fsck | check/repair an ext2 filesystem |
| elvis | clone of the vi editor |
| fdisk | partition hard disks |
| free | show memory statistics |
| ftp | ftp client |
| grep | search for patterns in files (symlinked to rgrep) |
| gunzip | uncompress gzip files |
| gzip | compress files to .gz |
| halt | halt the system |
| hostname | show/set hostname |
| ifconfig | configure network devices |
| init.net | simple script for configuring ethernet |
| insmod | load kernel modules |
| less | display files |
| ln | create links |
| loadkeys | load keymaps |
| ls | list contents of directory |
| lsmod | show loaded kernel modules |
| mkdir | create directories |
| mke2fs | create an ext2 filesystem |
| mknod | create special device files |
| mkswap | set up swap partition |
| more | display files (symlinked to less) |
| mount | mount filesystem |
| mv | rename/move files |
| ncp | server/client to copy files/directories over network |
| npoll | receive stdin over network (symlinked to ncp) |
| npush | send stdin over network (symlinked to ncp) |
| open | open virtual consoles |
| ping | send ICMP requests |
| ppp-nullmodem | simple script for PPP using nullmodem cable |
| pppd | PPP daemon |
| ps | show process status |
| reset | clear the screen |
| rgrep | search for patterns in files |
| rm | remove files/directories |
| rmmod | remove kernel modules |
| route | configure network routes |
| sh | bourne shell (symlinked to bash) |
| sleep | pause for a specified time |
| swapoff | turn off swap (symlinked to swapon) |
| swapon | turn on swap |
| sync | synchronize cache with disks |
| tar | tape archiver |
| telnet | remote login client |
| tr | translate characters in files |
| umount | unmount filesystem |
| update | automatic syncing of filesystems |
| vi | vi editor (symlinked to elvis) |
| zcat | concatenate gzip compressed file (symlinked to gzip) |
| zless | display gzip compressed files |
HAL91 のカーネル設定は kconf に納められている。内容は次の通りだ。
# # Automatically generated by make menuconfig: don't edit # # # Code maturity level options # # CONFIG_EXPERIMENTAL is not set # # Loadable module support # CONFIG_MODULES=y CONFIG_MODVERSIONS=y # CONFIG_KERNELD is not set # # General setup # CONFIG_MATH_EMULATION=y CONFIG_NET=y # CONFIG_MAX_16M is not set CONFIG_PCI=y CONFIG_SYSVIPC=y # CONFIG_BINFMT_AOUT is not set CONFIG_BINFMT_ELF=y CONFIG_KERNEL_ELF=y CONFIG_M386=y # CONFIG_M486 is not set # CONFIG_M586 is not set # CONFIG_M686 is not set # # Floppy, IDE, and other block devices # CONFIG_BLK_DEV_FD=y CONFIG_BLK_DEV_IDE=y # CONFIG_BLK_DEV_HD_IDE is not set CONFIG_BLK_DEV_IDECD=y # CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDESCSI is not set # CONFIG_BLK_DEV_IDE_PCMCIA is not set CONFIG_BLK_DEV_CMD640=y # CONFIG_BLK_DEV_CMD640_ENHANCED is not set # CONFIG_BLK_DEV_RZ1000 is not set # CONFIG_BLK_DEV_TRITON is not set # CONFIG_IDE_CHIPSETS is not set CONFIG_BLK_DEV_LOOP=y CONFIG_LOOP_ROOT=y # CONFIG_BLK_DEV_MD is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_INITRD=y # CONFIG_BLK_DEV_XD is not set # CONFIG_PARIDE is not set # CONFIG_BLK_DEV_HD is not set # # Networking options # # CONFIG_FIREWALL is not set # CONFIG_NET_ALIAS is not set CONFIG_INET=y # CONFIG_IP_FORWARD is not set # CONFIG_IP_MULTICAST is not set # CONFIG_SYN_COOKIES is not set CONFIG_IP_ACCT=y # CONFIG_IP_ROUTER is not set # CONFIG_NET_IPIP is not set # CONFIG_INET_PCTCP is not set # CONFIG_INET_RARP is not set # CONFIG_NO_PATH_MTU_DISCOVERY is not set CONFIG_IP_NOSR=y CONFIG_SKB_LARGE=y # CONFIG_IPX is not set # CONFIG_ATALK is not set # CONFIG_AX25 is not set # CONFIG_NETLINK is not set # # SCSI support # # CONFIG_SCSI is not set # # Network device support # CONFIG_NETDEVICES=y # CONFIG_DUMMY is not set # CONFIG_EQUALIZER is not set # CONFIG_PLIP is not set CONFIG_PPP=y # CONFIG_SLIP is not set # CONFIG_NET_RADIO is not set CONFIG_NET_ETHERNET=y # CONFIG_NET_VENDOR_3COM is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_PCI is not set CONFIG_NET_ISA=y # CONFIG_LANCE is not set # CONFIG_AT1700 is not set # CONFIG_E2100 is not set # CONFIG_DEPCA is not set # CONFIG_EWRK3 is not set # CONFIG_EEXPRESS is not set # CONFIG_HPLAN_PLUS is not set # CONFIG_HPLAN is not set # CONFIG_HP100 is not set CONFIG_NE2000=y # CONFIG_SK_G16 is not set # CONFIG_NET_EISA is not set # CONFIG_NET_POCKET is not set # CONFIG_TR is not set # CONFIG_FDDI is not set # CONFIG_ARCNET is not set # # ISDN subsystem # # CONFIG_ISDN is not set # # CD-ROM drivers (not for SCSI or IDE/ATAPI drives) # # CONFIG_CD_NO_IDESCSI is not set # # Filesystems # # CONFIG_QUOTA is not set # CONFIG_MINIX_FS is not set # CONFIG_EXT_FS is not set CONFIG_EXT2_FS=y # CONFIG_XIA_FS is not set CONFIG_NLS=y CONFIG_ISO9660_FS=y CONFIG_FAT_FS=y CONFIG_MSDOS_FS=y # CONFIG_UMSDOS_FS is not set CONFIG_VFAT_FS=y CONFIG_NLS_CODEPAGE_437=y # CONFIG_NLS_CODEPAGE_737 is not set # CONFIG_NLS_CODEPAGE_775 is not set CONFIG_NLS_CODEPAGE_850=y # CONFIG_NLS_CODEPAGE_852 is not set # CONFIG_NLS_CODEPAGE_855 is not set # CONFIG_NLS_CODEPAGE_857 is not set # CONFIG_NLS_CODEPAGE_860 is not set # CONFIG_NLS_CODEPAGE_861 is not set # CONFIG_NLS_CODEPAGE_862 is not set # CONFIG_NLS_CODEPAGE_863 is not set # CONFIG_NLS_CODEPAGE_864 is not set # CONFIG_NLS_CODEPAGE_865 is not set # CONFIG_NLS_CODEPAGE_866 is not set # CONFIG_NLS_CODEPAGE_869 is not set # CONFIG_NLS_CODEPAGE_874 is not set CONFIG_NLS_ISO8859_1=y # CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_3 is not set # CONFIG_NLS_ISO8859_4 is not set # CONFIG_NLS_ISO8859_5 is not set # CONFIG_NLS_ISO8859_6 is not set # CONFIG_NLS_ISO8859_7 is not set # CONFIG_NLS_ISO8859_8 is not set # CONFIG_NLS_ISO8859_9 is not set # CONFIG_NLS_KOI8_R is not set CONFIG_PROC_FS=y # CONFIG_NFS_FS is not set # CONFIG_SMB_FS is not set # CONFIG_HPFS_FS is not set # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set # # Character devices # CONFIG_SERIAL=y # CONFIG_DIGI is not set # CONFIG_CYCLADES is not set # CONFIG_STALDRV is not set # CONFIG_RISCOM8 is not set CONFIG_PRINTER=y # CONFIG_SPECIALIX is not set # CONFIG_MOUSE is not set # CONFIG_UMISC is not set # CONFIG_QIC02_TAPE is not set # CONFIG_FTAPE is not set # CONFIG_APM is not set # CONFIG_WATCHDOG is not set # CONFIG_RTC is not set # # Sound # # CONFIG_SOUND is not set # # Kernel hacking # # CONFIG_PROFILE is not set
システムが起動できないときは HAL91 を使ってシステムを起動することができる。その他ブータブル CD-ROM のブートイメージにしたり、他の Linux のバージョンをインストールする際にも利用できる。HAL91 関連のサイトは次の通りだ。
今月の HelpDex は ここ をクリックしてください。
[Eric は Sun Puppy も描いています。 http://www.sunpuppy.com から見ることができ ます。]
数年前のウェブサイトは単純なテキストファイルに画像が挿入されている程度で、HTMLが使えれば十分だった。現在は大きく様変わりし静的なテキスト情報では対応しきれなくなった。ウェブサイトではダイナミック情報、アニメーション、セッションマネージメントなどがあちこちで使用されている。これらの機能は従来の HTML 言語では実現できず、データベースにアクセスしたり、セッションマネージメントを処理するスクリプト言語が使われている。
PHP はサーバサイドスクリプト言語だ。HTML ページに埋め込まれたスクリプトをサーバが実行しその出力をウェブページとして返す。
PHP Essentials は HTML にスクリプトを導入するための書籍だ。従来のウェブサイト製作の経験があり、さらに複雑なダイナミックサイトを構築するための書籍だ。出版元は多数のコンピュータ関連書籍を出している Prima Publishing で、作者は Julie Meloni だ。分かりやすく常に実際的なサンプルが提供されている。
第一章では PHP のインストールから複数のウェブサーバでの利用法までが解説されている。データベースの章ではデータベースの解説の他に問い合わせ言語なども説明している。
PHP のバージョンは PHP4 までが解説され、データベースには MySQL が使われている。
それぞれのトピックで丁寧に解説がなされているが、すべてを網羅しているわけではない。サンプルコードと PHP が付録 CD-ROM で提供されればより便利だったろう。
PHP Essentials は PHP を使って高度なウェブサイトを構築しようという人には役に立つ。価格も 39ドル 99 セントと手頃だ。
Linux のヘルプで特定の機器を動作させる方法を尋ねるとよく「dmesg の出力をチェックしなさい」とかいうつれない返事が帰ってくることがある。これでは新しいユーザは混乱するだけだ。そこでこのデバッグツールを解説しよう。
Linux のカーネルはユーザとハードウェアの間を取り持つものだが、サポートしているデバイス名は時として分かりにくいものになっている。"dmesg" はカーネルのメッセージでデバイスの認識、対応などの記録だ。この記事のタイトルも構成も OpenBSD の記事からヒントを得ているが Linux にも必要だと思う。
ブート時の dmesg の出力はカーネルのブートの記録で、デバイスの認識と設定可能かどうかなどが表示される。ファイルの場所は /var/log/dmesg だ。
x86 システムのブート直後の dmesg は次の通りだ。
筆者のマシンは K6/2-300 でプロセッサの速度は 300MHzだ。
比較のために PowerPC システムの Linux 2.2 の出力だけを示す。
前にも説明したがカーネルのブートが終了すると特に引数が渡されていなければ続いて /sbin/init が実行される。カーネルに "init=/bin/sh" を渡すとカーネルブート後に /sbin/init を実行せずにシェルを起動する。この場合カーネルはルートファイルシステムをリードオンリーでマウントするので修正を保存する場合はリードライトでマウントしなければならない。例えばルートのパスワードを忘れて /etc/passwd ファイルを修正したときなどだ。
参考サイト
ユーザ ID などウェブサーバ上で暗号化して送信したいデータがある。しかし暗号化したデータはバイナリファイルであり、Perl で簡単に暗号化できるパッケージは多くない。Blowish ならライセンスの心配もなく PERL の暗号化モジュールを簡単に使える。暗号化と解読の手順は次の通りだ。
use Crypt::Blowfish; my $Blowfish_Key = "An extremely dumb password you should change."; my $Blowfish_Cipher = new Crypt::Blowfish $Blowfish_Key; ### Remember, sentence has to be 8 long my $Sentence = "DumbWord"; my $Encrypted = $Blowfish_Cipher->encrypt($Sentence); my $Decrypted = $Blowfish_Cipher->decrypt($Encrypted); print "Do the next two lines match?\n"; print "$Sentence\n"; print "$Decrypted\n";
暗号化された鍵を16進数に変換する
バイナリデータを16進数に変換するのは数字で表現できしかもブラウザで容易に表示できるから。コンパクトで長さが変わらないし、長さが変わらなければバイナリデータへの再変換も簡単だ。テキストから16進数への変換、テキストへの再変換は簡単なコマンドで可能だ。
my $Sentence = "This is a dumb sentence.\n";
print "$Sentence\n";
my $Hex = unpack("H*",$Sentence);
print "$Hex\n";
my $Sentence2 = pack("H*",$Hex);
print "$Sentence2\n";
cgi で暗号化、解読をする
gnujobs.com では多少古いバージョンを使っている。これは "new" メソッドが使えない。メソッドの呼び出しは次の通りだ。cgi では mod_perl を使用する。まずウェブサーバのルートディレクトリにディレクトリを作成する。
mkdir -p lib/perl/MyPackage次にモジュールを lib/perl/MyPackage/ にコピーする。 暗号化の手順は次の通りだ。
use MyPackage::Misc; my $Data = "Just a dumb sentence I want to encrypt"; my $Encrypted = MyPackage::Misc->Encrypt($Data);解読は次の通り。
use MyPackage::Misc; my $Decrypted = MyPackage::Misc->Decrypt($Encrypted);メソッドを次に示す。このコードを必要に応じて修正すればいい。コンパイルが一度ですむように $Blowfish_Cipher をグローバル変数にしてある。ライセンスは GPL だ。
#!/usr/bin/perl
# Copyright (C) 2000 Mark E. Nielsen at GNUJobs.com
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Web-Encrypt-Example version 0, Copyright (C) 2000 Mark E. Nielsen at GNUJobs.com
# Web-Encrypt-Example comes with ABSOLUTELY NO WARRANTY.
# This is free software, and you are welcome
# to redistribute it under certain conditions.
# The Computer Underground, Inc., hereby disclaims all copyright
# interest in the program `Web-Encrypt-Example'
# written by Mark E. Nielsen.
# Mark E. Nielsen, President of The Computer Underground
package MyPackage::Misc;
use strict;
use Crypt::Blowfish;
my $Blowfish_Key = "An extremely dumb password you should change.";
my $Blowfish_Cipher = new Crypt::Blowfish $Blowfish_Key;
#-----------------------------------
sub Encrypt
{
my $self = shift;
my $String = shift;
my $Temp = $String;
my $Encrypted = "";
while (length $Temp > 0)
{
### If less than 8 characters, padd it with tabs
while (length $Temp < 8) {$Temp .= "\t";}
### Ecnrypt the 8 length segment
my $Temp2 = $Blowfish_Cipher->encrypt(substr($Temp,0,8));
### Add it to the end
$Encrypted .= $Temp2;
### If it is 8 or less, abort, otherwise get the next segment
if (length $Temp > 8) {$Temp = substr($Temp,8);} else {$Temp = "";}
}
my $Unpacked = unpack("H*",$Encrypted);
return ($Unpacked);
}
#--------------------------------
sub Decrypt
{
my $self = shift;
my $String = shift;
my $Packed = pack("H*",$String);
my $Temp = $Packed;
my $Decrypted = "";
while (length $Temp > 0)
{
my $Temp2 = substr($Temp,0,8);
### In theory, we could up with less than 8 characters, check
if (length $Temp2 == 8)
{
my $Temp3 = $Blowfish_Cipher->decrypt($Temp2);
$Decrypted .= $Temp3;
}
if (length $Temp > 8) {$Temp = substr($Temp,8);} else {$Temp = "";}
}
### Getting rid of tabs at the end, which could be a bad thing
### but is how I did it.
$Decrypted =~ s/\t+$//g;
return ($Decrypted);
}
情報を解読する場合にはデータが正当なものかどうかチェックしてほしい。数値データなら数字で、正数で、桁数が大きすぎないことなどだ。
my $Error = 1;
if (($Value >0) && ($Value < 1000000000)) {$Error = 0;}
if ($Error == 1) {print "Darn it, this sucks, no valid data, bye bye!"; exit;}
他人に情報を改ざんされないようにデータを暗号化することは非常に有効な手段だ。もちろんウェブサーバは情報の改ざんを認めているわけではないがそれでも不可能なことではない。PHP やPython なども試してみたが Perl のモジュールが最も簡単に使えるのは Blowish だった。
3月号の記事を書いたときのターゲットはプログラムの経験があるがオブジェクト志向のプログラムの経験がない人たちだった。その後 Smalltalk と オブジェクト志向入門に関するメールが多かったので入門用の記事を書くことにした。今回のターゲットはプログラムやオブジェクト志向プログラムの初心者だ。オブジェクト志向プログラムと Smalltalk の面白さを説明しよう。多数のチュートリアルとは違ってわかりやすいものにしていきたい。
オブジェクト志向プログラムを説明する前にこの記事の背景などを話しておこう。筆者はオブジェクト志向言語を学ぶには Smalltalk が最適だと信じている。その理由は
Squeak には MVC と Morphic の GUI がある。スキンで外観を変えられるが最初はシンプルに Morphic をスキンなしで使うことを勧めます。Squeak のダウンロード、インストールは installation instructions か installation instructions. を参照してください。
セットアップは焦らずにこの記事を読みながら進めてください。まず起動しましょう。squeak のディレクトリで "squeak Squeak-2.7.image" を実行します。すると Window がいくつか開きます。Welcome To... や Getting Started... は後で目を通してもかまいません。Play With Me では自由に試すことができます。保存しない限り影響はありません。Play With Me 3,6,7,8 は Window 上でクリックする必要があります。終了するには Window の背景上でマウスの左ボタンをクリックし "previous project" を選びます。
最初の画面に戻るには squeak の背景上でマウスの中ボタンをクリックし "quit" と "no" を選びます。保存すると次にスタートしたときにその Window が最初に開きます。IDE の状態が完全に再現され、中断したところからスタートすることができます。
Welcome To... と Play With Me Window は次の通りです。
それでは若干のカスタマイズをしてみよう。squeak の背景上でマウスの中ボタンを押して "open...>workspace" を選んでワークスペースを開こう。Wolcome To... Window などと同じような Window が現れたら次のコードを入力しよう。
Preferences setPreference: #noviceMode toValue:
true.
Preferences setPreference: #inboardScrollbars
toValue: true.
Preferences setPreference: #useGlobalFlaps toValue:
true.
このコードを実行するには マウスの中ボタンをクリックして "do it" を選ぶ。これは Smalltalk の実行だ。これが最初の Smalltalk のコードの実行だ。最初に触れた morphic GUI を選ぶにはマウスの中ボタンを押し "open...>morphic project" を選ぶ。すると Unnamed1 という Window が開く。Window のタイトル上でクリックすると "rename" のプロンプトが表示されるので "Making Smalltalk" と入力しよう。プロジェクトを開始するにはプロジェクトの上でクリックすればいい。スクリーンの周りに四つのタブが表示される。それぞれ Menus, Squeak, Tools, Supplies でマウスポインタがその上にいくとポップアップメニューが表示される。"open" から "workspace" を選ぶとワークスペースが開始する。Morphoc の GUI を使っていると外観が以前とは違うはずだ。
このワークスペースが基本だ。
このワークスペースのメニューには保存というオプションがないので追加してみよう。プロジェクトの背景上でマウスの右ボタンをクリックする。スクリーンの周りにドットが現れるのでスクリーンの左上の赤いドットをマウスの左ボタンでクリックする。playfield menu の "keep this menu up" を選ぶとメニューが現れたままになるので左下まで移動し、"save" をクリックして状態を保存しよう。window は次のような状態になる。
オブジェクトに関する定義はいろいろある。例えば名詞だ。window、メニュー、アレイ、GUI、文字列、整数、人、木などだ。いずれわかりやすく整理できるだろう。Smalltalk ではすべてがオブジェクトだ。他の言語と違いすべての構成要素がオブジェクトだ。手続き型言語の経験者はしっかり記憶しておいてほしい。それではすべての始まりである "Hello World" を例に説明しよう。でも標準出力に文字列を表示するのではなく window に表示しよう。ワークスペースで次のように入力してほしい。
(Workspace new contents: 'Hello World') openLabel:'Hello World Workspace'
次のように表示されるはずだ。
今やったことは新しいワークスペースオブジェクトに "Hello World" を代入して "Hello World Workspace" というラベルのワークスペースをオープンした。他の言語のように "main" メソッドもコンパイルもリンクもない。エディタとコンパイラを切り替える必要もない。ただ Smalltalk コードを入力して走らせる。もう少し新しい例を試してみよう。ワークスペースに次のように入力してほしい。
World addMorph:
(PolygonMorph
vertices: {50@50.
200@200}
color: Color red
borderWidth: 20
borderColor: Color
red)
ここでは World プロジェクトにポイント 50x50 から 200x200 への赤いラインを追加している。このオブジェクト上でマウスの右ボタンをクリックするとハローという複数の色のポイントが現れる。オブジェクトの上にマウスポインタを移動するとバルーンヘルプが出現する。ハローをクリックするとオブジェクトのリサイズ、回転、複写、移動などが可能だ。"X" をクリックすると終了する。
今回はこのくらいで十分だろう。ここで "Sweet Squeak" セクションについて説明しておこう。コードの解説はしないがインターネットにアクセスしている状態で shockwave のファイルを見てみよう。次のように入力してほしい。
(FlashMorphReader on: (HTTPSocket
httpGet: 'http://www.audi.co.uk/flash/intro1.swf'
accept:'application/x-shockwave-flash'))
processFile startPlaying openInWorld.
次回はオブジェクトについて説明しよう。その他クラス、メッセージ、カプセル化なども解説する予定だ。