あなたのウェブサイトにも,雪の降るページを

京都コンピュータ学院のウェブサイトに雪を降らせるコードを実装しました。
ページの右上の検索ボックスの横にある小さい雪だるまの絵をクリックすると雪が降り始めます。もう一度押すと雪が止みます。

これは,JavaScriptでかかれています。●の文字をいろんな大きさで色々な場所に配置して,ちょっとずつ下に移動させています。(●は画像や円を描いているわけではなく,●の文字そのものです。)

自由にお使い下さい。

といっても,これは京都コンピュータ学院のウェブサイト用に最適化されていますので,こちらに,再利用しやすくしたバージョンをおいておきました。
こちらは雪が●と*が混ざったバージョンに変更されています。
実行例:雪のサンプルページ(雪が●と*の両方)。

最低限のHTMLの場合:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="kcg-snow.js"></script>
</head>
<body onload="onload_snow()" bgcolor="#000000" text="#ffffff">
<div style="height:100%">

</div>
</body>
</html>

とりあえず使うことが出来ます。
これで あなたのウェブサイトにも,雪の降るページを。

カスタマイズの例:
kcg-snow.js
の中の
count = 30;
は同時に出る雪の個数です。40とか80とかにすれば,雪の量を増やすことが出来ます。
‘●’ とか ‘*’ は雪の形です。ただの文字なので,好きな文字に書き換えれば,その文字が降ってきます。これは,HTMLなので,'<img src="snow.gif" alt="">’ とかにして画像を入れることも出来ます。

私は,雪を降らすプログラムがとても好きです。
子供のころによく書いたプログラムも雪を降らせるプログラムでした。
その時 使っていたコンピュータは父親のCASIO FP-1100。言語はC82-BASICでした。(電源入れると,C82-BASICの入力画面になった。)
CとはカシオのCで,82は1982年のことだったと思う。
すさまじく遅かったので,雪のようにゆったり動くプログラムとかは最適でした。その時も,雪は画像ではなくて,文字でした。雪を表している文字は*を使用していました。
この手のプログラムを作るのは,当時も楽しかったですし,今でも楽しいです。

CASIO FP-1100は,現在,京都コンピュータ学院京都駅前校の1階に展示されていますね。

comments

スーパー キーとハイパー キー

Windowsのコンピュータのキーボードには,Windowsキーがあります。
Macには,Appleキーがあります。Optionキーもあります。

昔は,もっとすごいキーがありました。

そのキーは スーパー と ハイパーです。

ええ?ほんまかいな?って感じですが,

Space-cadet keyboard (Wikipedia 英語)
の画像
http://upload.wikimedia.org/wikipedia/commons/4/47/Space-cadet.jpg
を見ると,確かに 一番左下と一番右下にそれぞれに「HYPER」と「SUPER」が並んでいます。
その隣には,「META」キーもあります。
良く見ると,見たことがないキーがたくさんあって非常に興味深い。
手の絵で指差ししているものや,λとか・・・。

MITのLisp マシンで使われていたそうです。
変わった文字を入力できるみたいです。
(参照:Space-cadet keyboard (Wikipedia 英語)

参照(日本語の解説 宇宙飛行士養成キーボード ):http://d.hatena.ne.jp/masatoi/20051202/1133537070

現在も, スーパーキー を積極的に使うソフトがあります。
compiz-fusion です。LinuxのX-Windowで動く 3D デスクトップ環境です。
http://blog.kcg.ne.jp/s2node/?p=323
とか
http://blog.kcg.ne.jp/s2node/?p=302
ができるソフトです。

そういった3Dウインドウや3Dデスクトップを出すのにスーパーキーを押しながら操作しているのがいくつかあります。

でも,今のコンピュータに スーパーキーはありません。
どうやって,スーパーキーを押すのかというと,WindowsキーやAppleキーを押します。これらのキーがスーパーキーとして機能します。( WindowsキーやAppleキーがスーパーキーとして割り当てられています。)

つまり,Linuxを使っているのにWindowsキーやAppleキーをよく使います。なんか変な感じです。

スーパーキーについて Wikipedia(英語):
http://en.wikipedia.org/wiki/Super_key_(keyboard_button)

あと,「META」キーは Alt で代用できます。
じゃあ,「HYPER」キーは なにで代用するんでしょうか?(私は知らないです・・・。)

comments

組み込みにもSELinuxを

SFなどで,ロボットなどの組み込みのコンピュータシステムが通信などを使って敵に乗っ取られて,味方だったのが敵に変わってしまい,逆に襲われるというのがよくある。

パニック映画とかで,世の中のありとあらゆるコンピュータシステムが乗っ取られて・・・。というのも。

そういった対策のために 組み込みにもSELinuxを。

SELinuxで組み込み機器のセキュリティを高める:
(前編)
http://www.kumikomi.net/article/explanation/2008/18selin1/01.html
(後編)
http://www.kumikomi.net/article/explanation/2008/19selin2/01.html

組み込み機器がインターネットに接続されるようになり,さまざまな攻撃にさらされることになった.SELinuxは,Linuxのアクセス権限機能を拡張し,ファイルやポート番号ごとに細かくアクセス制御を行うことができる.前編の今回は,SELinuxの概要と組み込み機器への摘要の取り組みについて解説する.

組み込みシステム:
携帯電話やデジカメや自動車の中の小さいコンピュータ。

組み込みシステムにもLinuxが使われる。

ネットワークにつながる組み込み機器が増えている。

当然,組み込み機器への攻撃やクラッキングが増えるでしょう。

これからは,組み込みシステムがネットワークにつながっているので,のっとられ,いうことを聞かなくなる(操作出来なくなる。クラッカーによって遠隔から勝手に使われる)。そういったことが,SFじゃなくても起こる。

そういった対策にSELinuxを使うというお話。

SELinuxとは,簡単に言うとLinuxの根本的なセキュリティ的な弱点を強化して弱点を少なくするもの。もちろん組み込み専用の技術ではない。インターネットのサーバにも使われている。

組み込み機器のセキュリティを強化しないとSF(サイエンス フィクション)がフィクションじゃなくなります・・・。恐ろしい。

comments

USBメモリのもう一つの寿命

USBメモリで,Ubuntu。そろそろ2ヶ月になる。
あまりにトラブルが無いので,ネタがない。
本当に毎日,普通に使える。(使い勝手が悪いか快適でなければ,使うのをやめている。しんどいし。)

しかし,そんなUSBメモリに,もう一つ弱点があることが判明。
USBメモリの抜き差し回数に上限があるのだ。

え?と言う感じだが,考えてみれば当然である。

理由:
USBのコネクタは,金属と金属が接して通電させている。
抜いたりさしたりすると,その金属同士で接する面がこすれる。
当然,削れる。

1回の削れる量はわずかかもしれないが,毎日抜き差しすれば
金属は当然薄くなる。薄くなると接触が悪くなる・・・。

これが 回数に制限がある理由だ。

この耐久性は,フラッシュメモリの書き換え耐久性より低いらしい。(と,勝手に思っている。だれか調べてください・・・。)

また,USBメモリの方だけが削れるのじゃなくて,コンピュータ側のUSBコネクタも削れる。
コンピュータ側の交換は簡単には出来ないことが多いので,USBメモリを良く抜き差しする人は,同じ場所ばかり抜き差ししないで,別の場所のUSBコネクタを使うか,USBハブやUSBの延長コードなども使う方がいいかも。

こればっかりは,USBというものを使う以上避けられない。

こうなったらワイヤレス化か!?
(てか,ワイヤレスでブートできるのか!?)

参考:
ワイヤレスUSB
http://itpro.nikkeibp.co.jp/article/NEWS/20061117/254168/

comments

C言語でいかに「わかりにくい」プログラムを書けるか の コンテスト

C言語の「まったく」役に立たない知識を教えます!! の解答と解説です。

((3-2)[a]-2)[b] = 5; の 5 は b[0] に入ります!。

で,解説ですが,C言語で a[1] は 1[a] と書けます。
配列 は 変数名と添字を入れ替えて書けるという,構文ルールがあります。
それを使うと
((3-2)[a]-2)[b] = 5;
の (3-2) は 1なので,
(1[a]-2)[b] = 5;
となり, 1[a] は a[1] となります。
(a[1]-2)[b] = 5;
で,a[1] は int a[2] = {1,2}; となっているので, a[0]は1で a[1]は2 です。だから
(2-2)[b] = 5;
となります。 2-2 を計算すれば 0 となり
(0)[b] = 5;
となります。 ( ) を取り除くと
0[b] = 5;
となり, 0[b] は b[0] と書けます。結果
b[0] = 5;
となり, 5は,b[0] に代入されます。

もちろん,プログラムはわかりやすく,読みやすく書くものです。
しかし,あえて,わかりにくく,読みにくくするコンテストがあります。

それがこちら:
 C言語でいかに「わかりにくい」プログラムを書けるか の コンテスト:
IOCCC(The International Obfuscated C Code Contest)

みんな分かりにくいプログラムばかりです。
読みにくくするために,技術力を使いすぎです(笑)。

たとえば,過去の作品(1984年から2004年まで)
http://www.ioccc.org/years.html

これらの中の
なんとか.c
をいろいろ開いてみてください。

C言語でアスキーアートになっているものも結構あります。
たとえば

http://www.ioccc.org/1998/banks.orig.c
http://www.ioccc.org/2004/newbern.c
http://www.ioccc.org/2004/omoikane.c
http://www.ioccc.org/2000/bmeyer.c

などなど。
歴史あるコンテストですが,ほとんど遊びですね・・・。

参考:
http://www.geekpage.jp/blog/?id=2007/1/12
http://www.nwhite.info/nw5/2008/11/-ioccc.html

comments

C言語における役に立たない知識を教えます!!

C言語はシステム開発言語として役に立つ。
そんなC言語の「まったく」役に立たない知識を教えます!!(いらんか・・・。)

いきなり問題:
以下のプログラムはC言語の構文として正しい。(正しく実行できる。)
さて,値5を代入している行があるが,これは,一体どこに入っているのか?

#include <stdio.h>

int main(int ac, char **av)
{
int a[2] = {1,2};
int b[3] = {0,1,2};

((3-2)[a]-2)[b] = 5; /* ←この5は,どこに代入されるのか? */

return 0;
}

答えと解説は後日・・・。

comments

Ubuntu 8.04で画面の解像度を簡単に変更できるソフト・・・がほしい。 ので作った。

Ubuntu 8.04で画面の解像度を簡単に変更できるソフト・・・がほしい。 ので作った。

Ubuntu 8.04 のディスプレイ設定変更がおかしいことがある。
8.10で少しは改善されているらしいが,私は使わない・・・。

8.04での設定方法は色々あるみたいだけど,どれも動きが変・・・使い方がよくわからない。。。(複数のディスプレイ設定でおかしい時が結構ある。どうも設定方法にコツがいるらしい。)
(たとえば sudo displayconfig-gtk は,使うのに管理者権限がいるし,サブディスプレイの設定がうまく出来ない。具体的には,ディスプレイが有効にして1024×768で設定しているのに,そのディスプレイが無効になっていて800×600までの解像度しか出ない等で変)

色々調べると
xrandr というコマンドを使って動的に変更出来るというのが分かったが,GUIで変更出来ない。
とりあえずメニューの項目に登録してやればできるが,
環境によってディスプレイの識別名が違うことがわかり,対応出来ない場合があることが判明。
リフレッシュレートの周波数の指定もいっしょに簡単に出来たほうが実用的っぽいので,それもできるように。

xrandr の使い方:
xrandrを単に端末から実行すれば,設定出来るディスプレイとモードの一覧が出る。

VGA出力を 1024×768で 60Mhz で出力するならこれ。(ちなみに, –rate 60.0 はなくてもいい。)
xrandr –output "VGA" –mode 1024×768 –rate 60.0

ノートパソコンの場合,VGAは外部出力となる。
で,内臓ディスプレイ出力を 1024×768で で出力するなら
xrandr –output "LVDS" –mode 1024×768

画面の解像度と周波数の設定細かく設定出来て,GUIで簡単に使えるツールがほしい・・・。

うーん。作るか。(コンピュータ技術者ばんざい)
ということで,プレゼンテーションとかで便利な様に解像度変更や同時表示などをGUIで出来るツールを作ってみた。

言語はPerl。以前からCGIとか作るので使っていたの。たぶん手軽に作れるはず。
・・・再利用とか考えていないし,そもそも,これ自体の作成に時間をかけれない。うーむ。バグがあるかも・・・。
でも,GUIはやったこと無いぞ。サンプルを探してみる。うーむ。

あ,簡単そうなのを発見。
GUIの見た目の作成は,glade というのを使ったものがなかなか簡単らしい。
(今回これも,はじめて使った。Visual Studioとか MonoDevelopみたいにボタンとかをマウスとかで貼り付けながら 作れる。)

GUIを用意して,設定出来るの一覧とそれを使った設定を 内部でxrandrをパイプという通信をする方法で実行してディスプレイの設定をする。

glade

これのインストール方法:
sudo aptitude install glade-gnome-3
で,出来る。アプリケーション – プログラミング – Glade 3 インターフェイス・デザイナ を選ぶと起動できる。

しかし,Ubuntuは,ありとあらゆるものがちゃんと 多言語で用意されているのですね。最近のLinuxの多言語対応レベルはすばらしい。

ここを見ながら作る:
Gtk2 API : http://live.gnome.org/GTK2-Perl/

で,出来た。作成時間 約2時間ぐらい?プログラミングばんざい。
そういえば,配布条件とか考えていないや・・・。まぁ,そんなに内容もないし。テストとかあまりしていないので,動かない環境もあるかもしれません。Ubuntuは,USBメモリブートなのでいろんな環境でテストする予定。

ソースのダウンロード
Perl : disp-setting.pl
GUI : disp-setting.glade

別途必要なソフトのインストール:
端末から
sudo aptitude install libgtk2-gladexml-perl
と実行すれば,全部入るはず。

使い方:
disp-setting.pl と disp-setting.glade を同じディレクトリにおいて
端末でそのディレクトリに移動後
perl disp-setting.pl
と入力し実行すると

disp-setting

が出る。

これで設定できる。とりあえず完成。しばらくこれで使って不具合がないか見よう。

リストから変更したいディスプレイを選んで,下のリスとから使いたいリフレッシュレートの周波数を選ぶ。
ディスプレイ名が何なのかを推測するためのヒント付きです。(英語ですが・・・)

複数のディスプレイに同じ画面を出したり,解像度や周波数を設定できる。

——————————–

現在は,拡張デスクトップ(マルチディスプレイで広いデスクトップ)の設定は出来ない。
それをするには, /etc/X11/xorg.conf を編集しないといけないため。

そのやりかた:

sudo gedit /etc/X11/xorg.conf
で開くことが出きるので,以下様な部分を探す。

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
EndSection

これを

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
SubSection "Display"
Virtual 2048 768
EndSubSection
EndSection

という風に,追加する。

とすれば, 1024×768 を横に2個並べたディスプレイ設定が出来る。
これで,ログインしなおして,

ノートパソコンでLCDディスプレイと外部VGA出力なら
xrandr –output "VGA" –mode 1024×768 –rate 60.0 –output "LVDS" –mode 1024×768 –left-of "VGA"
コマンドでできる。
–rate 60.0 はなくてもいいが,プロジェクターに出力するときは,これがあると,表示横にずれたり切れたりしないのでいい感じ。

参考:
http://manual.sidux.com/ja/hw-dev-mon-ja.htm
この Sidux とは,Debianの不安定版を安定化させて使うディストリビュージョン。UbuntuもDebianの不安定版がベースに作れているが,UbuntuよりDebianに近いディストリビュージョン。ベースが同じなので,SiduxとUbuntuは内部構造が似ている。

comments

脳でパソコンを操作する

脳でパソコンを操作する

SFみたいですが,もう ある程度出来るそうです。

脳でパソコンを操作する、全身麻痺の研究者
2008年11月14日
http://wiredvision.jp/news/200811/2008111419.html

モニター画面上で点滅する文字列を見ながら、入力したい文字が表示された瞬間に「これ!」と思うだけで、Mackler氏は文章を入力していく。「ブレイン=コンピューター・インターフェース」(BCI)のおかげで、Mackler氏は仕事を続け、科学論文を執筆し、子どもたちにメールを送ることさえできるようになった。

コンピュータ技術は素晴らしい。

comments

今日のMyデスクトップ

今日のMyデスクトップ。こんな風に設定してみた・・・。
デスクトップが地球です。以上。ちなみに, WindowsではなくてLinux (Ubuntu)です。

mydesktop

USBメモリ起動のUbuntuでこれがグリグリ回転出来る・・・結構軽い。
実用性? 分かりません(笑) ちゃんとした天球を背景に表示できれば,天体シミュレーション系の何か出来そうですが。
・・・Compiz-fusion ばんざい。

ちなみに,この状態で入力などは出来ません。普段は平面のデスクトップです。複数の画面切り替え時にこうできます。以下の動画を参照してください・・・。(ちなみに私の動画ではありません。)

参考 動画:
Compiz Earth

元画像とやり方とか:
http://forum.compiz-fusion.org/showthread.php?t=8271

comments

FireFox3の比較(WinXPとUbuntu)

WindowsとUbuntuのどちらにもFireFox 3 がある。

しかし,Windowsと同じページでも何か表示が違う。
レイアウトとか色とかはほとんど同じ。
最初は気がつかなかったが,どちらもかなり使い込むと,違いが分かってきた。

同じページを並べてみるとこんな感じ。(画像をクリックするとオリジナルのサイズで表示します)
もちろん,上がWindows XP で 下が Ubuntu。バージョンはどちらもFireFox 3.0.3 (最近3.0.4にバージョンアップしましたね。)

FF3-S

GUIも若干違う。ボタンの形が全然違う。シンプルだ。
まぁVista版だと,WindowsXP版と同じボタンの形をしているが,ボタンの色がすべて青色単色系になる。

で,一見,同じ様だが,違う部分だけ拡大すると・・・

zoomEX

左がWindowsXPで,中央がUbuntu。ついでに右にWindows Vistaの場合。
何が違うかというと,Windowsだとフォントのスムージングが小さい文字なので効いていないのに対して,Ubuntuだと,小さい文字でもスムージングされている。
ん?・・・「最近は」が2回ある・・・。そんなに主張したいわけではない・・・。

元々の画像サイズよりも画像より拡大して表示されている画像は,スムージングが逆でWindowsの方がUbuntuより綺麗にスムージングされている。Ubuntuの方は,スムージングされていないのか四角いドットが見える。

Ubuntuは,細かい文字でも綺麗にスムージングしてくれる。この辺はありがたい。画面上の細かい文字もすべてが綺麗に見えるので,読みやすい。

ちなみに,Windowsでも,設定などを色々してやれば,小さい文字もスムージングできるが,漢字等は ぼやけて読みにくくなる。

以前はLinuxだと日本語フォントが汚いものしかなく,スムージングなども一切なかったので,読むのが辛かったが,今ではIPAゴシックやIPA明朝などの高精細フォントが無料で入手できる上に,細かい文字も綺麗にスムージングしてくれるのでWindowsXPよりも綺麗に表示出来る様になった。
VLゴシックとかでも,結構綺麗。VLはVine Linuxのこと。日本語に強い。

comments