音がしないコンピュータ

最近のハードディスクは静かだ。しかし,SSDやUSBメモリブートに比べたら,かなりうるさい。

ハードディスクはガリガリ音やディスクが高速回転する音が出る。
ハードディスクが非常に熱くなる。熱くなると寿命が極端に短くなる。
 (電子部品も高熱だと寿命が縮む。)

USBメモリブートで使っていると,そういう音がまったくしない。
非常に静かで落ち着く。そして全然熱くもならない。
特にノートパソコンだと熱量が全然違う。
音は,冷却ファンの回る音だけ。しかも涼しいというか冷たい風が出てくる。

USBメモリの寿命は短いかもしれないが,コンピュータの発熱量が非常に少ないので,コンピュータの寿命を伸ばすことができる。

ハードディスクの駆動量がすくないor無いので消費電力も少なくて済む。省エネにもなる。

ハードディスクをSSDにするのは高いけど,USBメモリブートなら安くできるし,取り付けも簡単。やめるのも簡単。さて,USBメモリは いつまでもってくれるだろうか。寿命が尽きたらUSBメモリを買い換えるだけだが・・・。

comments

USBメモリの書き換え回数には制限があり,USBメモリでUbuntuを動かす危険性について。

USBメモリで普通のハードディスクと同等のインストールをしたUbuntu使っているので,「つっこみ」が入る前に一応,ポリシーというか方針などを書いておきます・・・。

USBメモリの書き換え回数には制限があり,USBメモリでUbuntuを動かす危険性について。

Ubuntu日本語フォーラムより
USB メモリーで Ubuntu を運用するのが望ましくない件
http://forum.ubuntulinux.jp/viewtopic.php?id=3129
より

 知っている方も多いでしょうが、USB メモリーの寿命はそう長くはありません。USB メモリーで Ubuntu 環境を運用することの危険性を知っておいてください。

そこのリンク:
http://usersforum.turbolinux.co.jp/viewtopic.php?t=101
より

例を上げると、USBメモリに使われる、NANDメモリは、通常は10万回程度の読み書き保証があると思いますが、5秒毎に書き換えを行うと、一日に、(60/5)*60*24=17,280回の書き込みになり、6日程度で10万回になります。アプリケーションなどのデーターと違って、ログなどが煩雑に書き込まれるOSのディスクとして利用すると、意外と10万回のアクセスは、すぐに行われてしまいます。

6日っすか!!。NANDメモリ1箇所につき10万回なので,この計算式は1箇所に集中して書き換えが発生したら・・・。ということなんじゃないでしょうか?

http://gigazine.net/index.php?/news/comments/20080204_usb_memory_life/
によると

使用頻度としては2週間~3週間に1度あるかないかぐらいで、LinuxのISOイメージなどを詰め込んで移動させるのに使ってました。

購入したのは2007年2月27日。故障したことが発覚したのは2008年1月13日。発覚したきっかけはこのUSBメモリにコピーしたZIPファイルをローカルに戻して解凍しようとしたらエラーが起きたこと。さらに画像も化けることが判明。

書き込みデータがこわれています。2週間~3週間に1度,LinuxのISOイメージなど書き込みだけで1年未満でディスクがこわれるのでしょうか?
具体的な書き換え回数を計算すると・・・。
1年は365日で1週間は7日なので週の数は 365÷7=52.142857143となり,1年は約52週あることになります。で2週間〜3週間に1度あるかないか,なので多く見積もって2週間に1度書き込みとすると,1年の書き込み回数なら 52週÷2週=26回となります。
多めに見ても26回しか書き込んでいないはずです。「ウエアレベリング」などの書き換え回数最適化を無視して計算していますので,実際はもっと少ない回数となります。
NAND型フラッシュメモリの寿命はそこまで短くありません。

そもそも,書き込みエラーチェックが働いていないのでは?
不良セクタチェック機能も働いていませんし。
など,疑問がたくさんあります。

これは,このUSBフラッシュメモリ自体がたまたま不良品である可能性が高いと思われます。通常の品質であればここまで低いとは思えません。これは,書き換え回数が限界に達したから壊れたということではないと思われます。またそうであっても,26回書き換えただけで書き込み限界に達して こわれるというのは,10万回どころか100回にも達してないので,商品のばらつきというレベルではなく,不良品であるともいえます。

また,そのレベルの品質で出荷しているのならもっと大勢の人が被害にあうはずで,だれもUSBメモリを使わなくなります。

USBメモリ=危険,ハードディスク=安全とはなりません。どちらもデータが消える危険性がある。ということです。

USBメモリはハードディスクよりは寿命が短いかもしれませんが,短すぎて問題があるというレベルでもありません。(というのを実証実験中ですが・・・。)

私は 以前,1年程度しか使っていないハードディスクが壊れました。ハードディスク上のデータがこわれているので,コンピュータの動作がおかしくなっています。
その時の様子:http://sato-si.at.webry.info/200504/article_2.html

ここでいうUSBメモリは危険というのは,SSDが危険とか,ハードディスクが危険というのと同等だということです。

どんな記憶ディバイスでも突然こわれることがあるので,バックアップを取りましょう。ということです。

私が使っているUbuntu環境は1ヶ月となります。フルにデスクトップ環境として動かしています。朝から夜まで動かしていることも何日もあります。

消える消えると言われているので,定期的にGParted を使ってUSBメモリのフルイメージのバックアップをしていて,ディスク全体のチェックをかねてディスクイメージのバックアップをしていますが,エラーなしでコピーが取れています。

良く書き込まれるところをRAMディスク化していますが,まだまだしょっちゅう書き換えている箇所があります(ログ系です)。

ちなみに,高価なUSBメモリだと書き換え回数が多いものもありますが,これは,おもいっきり安物です。

たまたまでしょうか?ラッキーなだけ???ひょっとして間もなく終了!?

USBメモリが壊れたら,壊れたら買い換えます。別のメーカーにして,また耐久テストをしてみます。もちろん買い替え費用は3千円程度です。2回まで買い換えるつもりです。(USB接続のハードディスクの最低価格が9千円程度なので3回買い換えるとUSB接続ハードディスクより高くなるため,損な気分になるから。)

しかし,なかなか壊れてくれません。さて,いつになったらこわれるのでしょうか?

ところが,世の中にはSSDにUbuntu 8.04 が インストールされているのコンピュータが日本でも販売されています。
SSDもUSBメモリもどちらもNAND型フラッシュメモリです。基本的な構造が同じです。またNAND型フラッシュメモリは書き換え回数が10万回といわれいる根拠の構造です。
SSDにUbuntu 8.04 が インストールされているのコンピュータとUSBメモリに入っているUbuntu 8.04 に違いがあるのでしょうか?(なんか,カスタマイズされているそうですが,関係あるのかな。また,これによって書き換え回数に対する根本的な解決が出来るなら知りたい。)

参考(以前にも出しましたが・・・):
 Enterprise Watch デル、Atom搭載で約1kgのミニノート−Ubuntu採用で5万円を切るモデルも http://enterprise.watch.impress.co.jp/cda/hardware/2008/09/05/13787.html
http://www1.jp.dell.com/content/topics/topic.aspx/jp/segments/corp/pressoffice/2008/080905?c=jp&l=ja&s=corp

それに以下の様な話もあります:

2006年8月の記事です:
http://pc.nikkeibp.co.jp/article/NPC/20060801/244807/

 メモリーメーカーにこの点を聞いたところ、フラッシュメモリーの耐久性は大きな障害にならないとのことでした。読み書きを繰り返すごとに劣化はしていきますが、HDDのように急に壊れることは少ないとのことです。劣化の進行具合も「記録保持期間が10年間だったものが、8年、7年と短くなっていく程度」(同メモリーメーカー)。また、フラッシュメモリーには読み書きを制御するチップも搭載されており、特定の場所に書き込みが集中しないよう工夫されています。

 

2007年5月の記事です:
http://www.tdk.co.jp/techmag/knowledge/200705/index2.htm

 また、フラッシュメモリーは書き込みできる回数に制限があります。電子が貫通する際に酸化絶縁膜を劣化させることがその原因です。対策として、なるべくすべてのメモリーセルに対して均等に書き込むため、「ウエアレベリング(メモリーへの書き込み回数を平滑化すること)」などの工夫が盛り込まれています。おかげで、現在市販されているフラッシュメモリーは50〜100万回程度までの書き込みが可能とされているので、現実的な使用状況において、特に気にする必要はなくなったと言っていいでしょう。

 

SSDとUSBメモリはどちらもNAND型フラッシュメモリーです。
SSDには,「ウエアレベリング(メモリーへの書き込み回数を平滑化すること)」があってUSBメモリには,「ウエアレベリング」がないのでしょうか?
最近のUSBメモリにも「ウエアレベリング」入っているはずですが・・・。

ということで 大丈夫なような気がするので とにかく 実証実験中です♪。

・USBメモリで運用するメリットが大きいこと
・問題があることを知っていて,その問題にある程度対処していること(書き込みが多いディレクトリとホームディレクトリをRAMディスク化している)
・SSDとUSBメモリはどちらもNAND型フラッシュメモリで書き換え回数が10万回ですがどちらも「ウエアレベリング」によって書き換え回数が多くなっていて,SSDはプリンインストールすらOKで,USBメモリはだめなのはなぜか?が良く分からないため。(USBメモリの方がしょぼそうですが。)
・USBメモリがこわれたときの損害が3,000円程度で済むため,極めてローリスクである。

SSDでも書き換え回数について:

http://bbs.kakaku.com/bbs/05370110002/SortID=7458703/

http://www.tdk.co.jp/techmag/knowledge/200705/index2.htm

SSDやUSBメモリは50〜100万回程度までの書き込みが可能と

いうことを考えると,HDDと同等か半分の性能まで確保出来ていると考えていいような気もします。

参考:
日本HDD協会2008年4月セミナーレポート
〜HDD対SSD、その行方を議論:
http://pc.watch.impress.co.jp/docs/2008/0423/idema.htm

USBフラッシュメモリの書き換え回数:
http://edcforum.okwave.jp/qa2257876.html

ハードディスクの寿命と故障リスク:
http://www.reusepc.net/page/chuko_choice05.html

 一般的に、100万回以上の書き換えができ、それが機械的な寿命なのですが、実際にはその書き換え回数に満たない年数で寿命を迎えます。その原因は人間は気になりませんが、空気中を漂う埃です。

ハードディスクの寿命:
http://hddbancho.co.jp/longevityof_hdd.html

日ごろ接する電気製品で最も壊れるのは電球・蛍光灯に続いてハードディスクそのものであるから数十年の寿命であっても信用しにくい。

上記より,USBメモリやSSDの寿命や信頼性はいずれハードディスクを越えるでしょう。機械的に高速回転や可動部があるものは信頼性・寿命・チリ・ほこりの環境・振動衝撃に対する耐性や消費電力や大きさに限界がありますから。これからはゼロスピンドルですよ。

comments

.NET開発をLinuxで MonoDevelop 1.0

Windowsアプリが .NETに移行している。
.NETはWindowsだけで動くものではなく,LinuxやFreeBSDとかでも動く。

ただし,動くといっても,ウインドウ等のGUIを使ったものは,実はWindowsじゃないとまともに動かない・・・。

そして Linux(正確にはUNIX系OS)でも, .NET環境がある。その1つがMono Projectだ。

開発環境も Visual Studio風のものがある。それがこの MonoDevelopだ。バージョンも1.0となり,とりあえず一通りの機能がある。

 ※画像をクリックすると拡大して細かいところまで見えます。

MonoDevelopVersion

当然,マウスでボタンとかテキストボックスを置ける

MonoDevelopGUIEdit

ここで使用している言語は.NET定番のC#。

MonoDevelopCSharp

他にも,C言語とC++と VB.NET(!)が使える。

MonoDevelopVBNET

VB.NET って・・・。

特筆すべきはC#やVBを使ったサーバサイドのアプリ ASP.NET が作れてしまう点だ。まさか,これが出来るとは・・・。Windows + IISだけだと思っていたが,Linux + Apache で開発・実行出来てしまう。

しかし,残念ながら,Windows用のウインドウとかを使った.NETアプリは作れない。作れてもまだ全部のWindows向けの機能がMonoで実装されていないので,動かないものも多い。Windows向けのソフトをマウスを使ってGUIで作ることも今は出来ない・・・。残念。しかし,そのうち可能になるだろう。需要も多いだろうし。ていうか,私はそれをやりたいのだが。

Linuxのソフト開発も変わっていくのだろうか。viとかemacsでgccとかperlから,こういう統合環境も普通になるのだろうか?

もちろん,これらもすべて8GBのUSBメモリで使っているUbuntuに入っています。どこでも,借りたコンピュータでもいきなり .NET開発環境出来ます!

comments

財布にOS

Ubuntu-USB-saifu

最近の財布の中身。お金とカード類以外に
例のUSBメモリと名刺カードサイズCDを入れています。
どこでも同じ環境を常に持ち歩ける。手ぶらでも財布さえも持てば。
コンピュータが無い場所はネットもメールもメモもケータイで。
あとは普通の手帳の方がいいかも。

コンピュータは違っても起動する環境は同じ。結構不思議な感覚。キーボードが違った(Fnキー+○とか全然違うし)りマウスが違ったり(タッチパット,トラックポイント,普通のマウス),指紋認証ログインがあったりなかったりと違うので,間違った操作をしてしまう。
あと,コンピュータのスペックが低すぎて動かない時は,ただのUSBメモリとして使う。(Ubuntuの動作スペックに依存)

しばらく使っているけど,この環境で困ることは,Ubuntuで動かないソフトが必要な時。たとえばMSアクセスとか。Wineを使ってなんとか動かすことで対応か?

OpenOffice 3.0がリリースされてMS-Office 2007 の ファイル形式を読み込める様になった。ただし2007形式で保存は出来ないけど。(Novell 版 OpenOffice のみか?)

あーそういえば,SDカードの方が少し安くてコンパクトにできるかな。
スマートさはこちらの方が上。こっちは,コンピュータから飛び出さないからね。
ただ,標準装備しているコンピュータの数が少ないので,あまり使えないかも。
新しいコンピュータは,SDカードのスロットが標準装備になってきているのでこっちの方が普通になるかも。

落としても,心配しない様にファイルシステムを暗号化しようかな。

comments

WindowsとMacを混ぜた様な環境の秘密その2

最近はWindowsとMacを混ぜた様な環境
WindowsとMacを混ぜた様な環境の秘密
の続きです・・・。まだあるんです。秘密

もはや コンピュータの使い方が変わります。

この環境のインストール方法を見れば,ある程度わかるのですが,VMware Playerという仮想コンピュータソフトを使ってインストールしています。

つまり,USBメモリのUbuntuは現実のコンピュータだけではなく仮想のコンピュータでもそのまま動きます。
そうなると,複数同時に使えるんです。

UbuntuVirtualBox1

えーとどういうことかというと

仮想コンピュータとはコンピュータ上でコンピュータの動作を再現してコンピュータ上で別のコンピュータが動いている状態をつくるもので,1つのコンピュータ上で複数の別のコンピュータとOSを動かすことができるソフトです。動作は完全に別のコンピュータなのでソフトを使うにはその仮想コンピュータにOSとソフトをインストールしなければなりません。ハードディスクは仮想ハードディスクが使われていることが多いです。。実際のハードディスクは使いません。実際のハードディスク上に仮想コンピュータで使うハードディスクのディスクイメージのファイルを作成します。
実際のハードディスクは使えないことが多いです。そもそも実際のハードディスクに入れてしまうと実機に影響を与えてしまうので,仮想コンピュータでは出来出来ません。(仮想コンピュータが実機に影響を与えると危険です。)
それとは別にUSBもサポートしています。USBは仮想的なものではなくて,実際のコンピュータにつながっているものを使います。
とすると,USBメモリも実際のUSBメモリが仮想コンピュータで使える様になってしまい,OSの起動がUSBブートするタイプだと,何の変更もないまま仮想コンピュータで起動できるという理屈が成り立ちます。実際には,CD-ROMからUSBメモリ上のOSを起動すると言う方法で起動が可能です。
ちなみにCD-ROMやDVD-ROMは実機のものを使ったりCD-ROMのイメージファイルを使ったり出来ます。

最近は,市販の仮想コンピュータソフト,VMwareとかVirtual PCとか VirtualBoxが無料で手に入る様になりました。これらのソフトは以前は高額なソフトでしたが,今では無料で使えるので趣味で仮想コンピュータを作ることが気軽にできる様になりました。

そして このUSBメモリに入れたUbuntuをVirtualBox で起動させて設定を少ししてやると,仮想PC上で動く上に3Dデスクトップまで動作させることができます。ちょっと遅いですが・・・。

UbuntuVirtualBox2

UbuntuVirtualBox3

・OSは一度インストールすれば持ち歩き続けることができる。
・パソコンを買い替えても,出先のパソコンでも同一の環境でできる。
・仮想コンピュータソフトを使えば,複数同時起動が可能。
 複数のUSBメモリにOSを入れて,それを複数持ち歩き,複数同時に起動できる。
  たとえば,データベースとウェブサーバの入ったUSBメモリとデスクトップ環境の入ったものとか。

・いろんなサーバをそれぞれUSBメモリに入れておけば,1つのコンピュータに複数さして仮想コンピュータを複数起動して複数のUSBメモリのサーバを起動。
 もしパフォーマンスが不足する様なそのサーバだけUSBメモリを取り出し,仮想コンピュータから実機単体で動くサーバにUSBメモリを差し込んで運用すればすぐにパフォーマンスアップ。

・サーバのアップグレードや故障によるコンピュータの変更も,コスト削減のために実機から仮想化に戻すのもUSBメモリを差し替えるだけで即可能。設定や再インストール再設定は少しの設定で ほとんど正常に動く。

・コンピュータを買い換えても設定しなおさずにUSBメモリを新しく買ってきたコンピュータに差し込むだけで即使える。

・USBメモリで起動したOSにさらにWMwareなどの仮想ソフトを入れてその中でWindowsを起動するなども可能です。
  実際にUSBメモリ内のUbuntu上のWMwareにWindows2000を入れて動作させることができました。

問題はマシンのパワーと実メモリがたくさん必要なことです。
USBメモリの書き込み速度が遅い。
逆にそれさえ解決すれば,技術的なハードルは他にはありません。

つまり,コンピュータの使い方が変わります。

5万円PCとか安価なPCよりももっと安価な使い方ができます。
例えば,自分でコンピュータは持たない。OSは無料で,記憶装置と起動方法が 3千円程度のUSBメモリと100円程度のCD-Rを持っていて,自分の環境をどこのコンピュータでも使える。公共の場だったり,学校だったり,職場だったり,ネットカフェだったり。

遠い未来の話じゃないです。現実に今可能なのです。

コンピュータ技術は勉強すればするほど お得です。

comments

WindowsとMacを混ぜた様な環境の秘密

最近はWindowsとMacを混ぜた様な環境 ,実はこれは USBメモリにインストールされていてUSBメモリをコンピュータに差し込んで電源を入れると起動できます。(USB-HDDブートを有効にするBIOSの設定が必要ですが)

USBでブートが出来ないコンピュータや失敗する場合は起動のみ百円ショップで売っている名刺サイズのCDでします。

なので,この2つを持ち歩くだけで任意のコンピュータで起動出来ます。

つまりインストール不要でどのコンピュータでも同じ環境で使えます!

USB-CD-R

Ubuntuはハードウェアの対応や自動認識能力が高いのでディバイスドライバがなくて困るということも あまりありません。

インストールされているOSが起動しなくなったときの復旧作業にも使えます。それも快適なカスタマイズされた環境で!

USBメモリだと容量が少ないじゃないかと 言われそうですが,Ubuntu プリンインストールの5万円ミニノートパソコンは 4GB SSD(ハードディスクの代わりにフラッシュメモリタイプの記憶装置) にインストールされているものもあります。

参考:
 Enterprise Watch デル、Atom搭載で約1kgのミニノート−Ubuntu採用で5万円を切るモデルも http://enterprise.watch.impress.co.jp/cda/hardware/2008/09/05/13787.html

http://www1.jp.dell.com/content/topics/topic.aspx/jp/segments/corp/pressoffice/2008/080905?c=jp&l=ja&s=corp

最近のUSBメモリは大容量でも安く簡単に手に入ります。この環境を入れているのは 8GBですが3千円程度で購入しました。高速でもなんでもない普通のUSB 2.0タイプ。Ubuntuプリンインストールの5万円ミニノートパソコンの倍の容量です。

Ubuntu の Wiki で USBメモリへの専用のインストール方法が紹介されています。

Ubuntu Tips/USBデバイスへのインストール/UbuntuをUSBメモリにインストールするには

Ubuntu Tips/USBデバイスへのインストール/USBメモリ上のUbuntuを快適に使うには

私はこの方式を試しましたが,色々調べてみると,特にUSBメモリ専用のインストール方式じゃなくても入れることが出来るのが分かりました。普通にハードディスクへのインストールと同一の方法で出来てしまいます。なんらかの不具合があるかもしれませんが・・・。(特に速度)
インストールの詳しくはこちら:http://sato-si.at.webry.info/200810/article_2.html

WindowsでこのUSBメモリを見ると 1GB のUSBメモリとして認識出来ます。残りは Ubuntu 用領域として使っています。具体的には以下の様な感じです。Ubuntuからは 先頭の1GBも記憶装置として使えます。ファイルのやりとりに便利です。

USB-PT

1つめが FAT32フォーマット。(1ギビバイト・・・。1ギガバイトとちょっと違います。ネットで調べてね。)
 Windowsで認識できる記憶領域です。普通の1GBのUSBメモリな部分です。
2つめが ext3 フォーマット。Linuxで最近標準で使われる様になってきているフォーマットの方法です。(6.43ギビバイト)
 Ubuntu 8.04 がインストールされています。
3つめが linux-swap フォーマット。いわゆるスワップ領域。実メモリの空き容量が少なくなって来たら一時的に書き込む領域。なくてもいいが。(258.86メビバイト)
 USBメモリへの書き込みは遅いので,ここを使うとかなり速度が低下します。っていうかほとんど固まります(汗)。ですが滅多に使いません。ここを用意しているのは,メモリ不足で停止してしまわない様にするための保険です。

問題は
・書き込み速度がめちゃくちゃ遅い。(SSDだとめちゃくちゃ速いんですが・・・。)
・USBメモリなどは書き換え回数に制限がある。(SSDでも同じことがいえます。)

要するに,USBメモリへの書き込みの回数を減らせばいいのです。

Linuxなので,OSを動かすとやたらとファイルを書き込む。
書き込むところをどんどんRAMディスク化していく改造を実施。
詳しくはこちら:http://sato-si.at.webry.info/200810/article_1.html

※本当はUbuntuはとくに設定をいじることなく快適に使えるのですが・・・。

書き込みの監視を行うスクリプトも作成した。
・・・といっても時々
sudo find /var /etc -mmin -5 -print
と入力するだけですが・・・。
意味は5分以内に更新があったファイルを検索する。
( /var ディレクトリ内と /etc ディレクトリ内が対象 )

USBメモリ上のスワップ領域はできる限りさせない。(空きメモリを確認するとか・・・。)
ハードディスク領域にスワップ領域を用意させてそっちのスワップを使う設定をする等。(swapon コマンドやswapoff コマンド)
———-

動作はかなり安定しています。Ubuntuは新しいバージョンがいっぱい入っている割にはバグが少なく大変安定しています。(Linuxの新しいバージョンはほとんど開発中バージョンみたいなもので,バグとか結構あって不安定です。)

カスタマイズしまくると Windows XPより軽くて Windows Vistaよりも派手な環境で安定しています。Windows で派手な効果を追加でいれると不安定になったり,遅くなったりします。しかしLinuxのこの3D効果などは大変軽く,メモリ量も普通に使っても 14MBしか使いません。3Dのビデオカードの性能もそこそこで十分高速に動きます。ちなみに UbuntuのFireFox 3.0.3 は普通に2,3個開くだけで133MBとか使いますが・・・。FireFox 3方がよっぽど重いです。

comments

最近はWindowsとMacを混ぜた様な環境

最近使っている環境。

デスクトップはMacにそっくり で ウインドウはWindows Vistaにそっくり。
しかし,中身はWindowsでもMacでもありません・・・。画像2つめ以降の3Dデスクトップ環境等はWindowsでもMacでも出来ません。

これはUbuntuという Linuxで,色々設定すればこの様になります。
標準は茶色いデスクトップです。初期状態のウインドウは Windows XP風です。上部のMac風のバーは最初からあります。

くわしくはこちら:Ubuntu
Mac風にしたりWindows風にしたりする人は多いです。
こんな風に Mac風とWindows風のごちゃまぜしている人は,あまりいないかもしれませんが。。。

この環境で作業していると これが Linux であることを忘れてしまう(^^;。

MacとWindowsの混ざった環境・・・しかしMacでもWindowsでもない。 [拡大表示]

Ubuntu-Mac-Win-1

3Dデスクトップ。Compiz Fusion。 [拡大表示]

Ubuntu-Mac-Win-2

ウインドウを動かすとこんな感じにふにゃふにゃする。[拡大表示]

Ubuntu-Mac-Win-3

ウインド切り替え効果の1つ。Vista のエアロ風にも出来る。[拡大表示]

Ubuntu-Mac-Win-4

標準のUbuntuの画像と3Dデスクトップの動画:http://jp.youtube.com/watch?v=Px7Cq9KvRH0

comments

Linux管理者の初心者向けの書籍

Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)

先日,久しぶりに,本屋でコンピュータ系の本がどんなのが売っているのかを見た。
(本を買うのは本屋ではなく,ネット通販ばっかりだった。)

ふと,一冊の本に目が留まる。
「Linuxの教科書」

本書より引用

雑誌Linux WORLDの「システム管理入門講座」(2002年11月号から2003年12月号)の記事をまとめたムック「本当に読んでほしいLinux入門」(2004年5月発行)をもとに,現状(2007年9月時点)を踏まえた大幅な加筆・修正を加えたものです。

とても読みやすい。文字は比較的少ないが,技術的にも読み物としてもクオリティが高い。

こりゃ3千円ぐらいかな?。と思い値段を見る。

…1,600円・・・!! この手の本としては安い!

買った。

Linux管理者の初心者向けの書籍だが,セキュリティ対策の話もしっかり書かれているので,これ一冊でもかなり使える。

2007年11月1日発行。内容もほぼ最新。
CentOS, Ret Hat Linux Enterprise Linux, Debian GNU/Linux, Ubuntu など
主要なOSに対応!
新しいうえに,これらのOS間の設定方法などの違いも書かれているので,初心者じゃなくても役に立ちます。

京都コンピュータ学院では,ネットワーク学科でこれに関することが勉強できます。

comments

私が愛用するワンチップマイコン

PIC16F84A

PIC16F84Aです

私が愛用しているワンチップマイコン。
・・・普通ワンチップマイコンなんて愛用しないか。
けど,これが おもしろいんだ。ロボットを作る技術にもつながっている。

ロボットといえば,1月29日にKCGの京都駅前校に自転車ロボット「ムラタセイサク君」がやってくるそうな。(NAIS講演会 情報システム学会日本支部(NAIS)特別講演会

一見すると,単なるICにしか見えないが,これでも,コンピュータとしての機能を一通り持っている。
組込みシステムに使われているものの1つ。
他にも同様なものがたくさんある。

これで何が出来るのかというと,たとえば自動車のデジタルスピードメータ。
私は実際に以前KCGの自動車制御学科の説明用に,これを使ってデジタルスピードメータを作成した。

実際に動いている映像をある所で見ることが出来る。
・・・既にその映像を見た人も多いかもしれない。
なぜなら,KCG オープンキャンパスの中で流される「KCGの学院紹介ビデオ」の中で,自動車制御学科の説明の所で流れているからだ。

実際に動いているのを見たい人は,オープンキャンパスに参加して学院紹介ビデオを注意深く見てみよう。
オープンキャンパスは一番近いので,1月26日(土)に開催されます。(今週末かよ)

PIC16F84Aを使えば,パソコンとの通信もできる。その様子も学院紹介ビデオに含まれている。パソコンの画面上にスピードメータが出でている。
パソコン画面に描かれたスピードメータで赤い針が動いているやつである。
こっちは,Visual C++ を使ってWindows用ソフトで作ってある。パソコン上で動き,ワンチップマイコンと通信して速度を表示するもの。
ワンチップマイコンの本体は。デジタルスピードメータの隣においてある。学院紹介ビデオには,一瞬だけ写っている。

ちなみに,このPIC16F84Aというワンチップマイコンは,以下のKCGのワークショップでも使われている。
これに参加すれば,「あなたも」これを使うことが出来る!
しかも 完成したものをもって帰ることが出来てしまう。

第4回ワークショップ 電子砂時計を作ろう(終了)
第10回ワークショップ 電子メッセンジャーを作ろう(3月30日)

興味がある人は是非参加してみよう。

イヤ,本当におもしろいのでおすすめです。(。。)

ちなみに,KCGでは,自動車制御学科や情報工学科やコンピュータ工学科やメディア工学科でこれに関する勉強が出来る。

————-
もうちょっと詳しく:

メーカー:マイクロチップ・テクノロジー
http://www.microchip.co.jp/

このワンチップマイコンは電源は2Vから6Vの範囲。けっこう適当でいい。(もちろん,電圧は一定に安定しているほうがいい。)
とりあえず乾電池2本で動く。

8bitコンピュータ パソコンは32bitとか64bitとか言っていることを比べるとかなり性能が低い。自由度が低い。しかし結構簡単に作れる。
動作クロックは最大20MHz で駆動する。パソコンに比べたらありえないぐらい遅い。
しかし,私は4MHzで使っている。十分というか,4MHzでも速すぎると思っている。

足の数は18本。好きなように使える足が13本ある。
 残り5本は電源用2本とリセット用1本とか,動作クロック入力に2本に使う。

足は,スイッチとか,センサーとか,電気を光らせたり,・・・等,回路を自由につなぐことが出来る。

書き込むプログラムで足の動作内容を変更して使う。

プログラミング言語(C言語やアセンブリ言語)を使って,好きなように電気を入力したり,電気を出力したりできる。

プログラミングは普通のコンピュータで行い,PICライターといわれる機械でプログラムを普通のコンピュータから書き込む。

——–
他に良く使われるワンチップマイコンにH8シリーズがある。

以前,このブログに出てきた「ETロボコン」で使われているLEGOマインドストームやKCGの部活のCINCSが参戦しているマイクロマウスは,H8が使われている。実際の自動車のエンジン制御のECUもこれが使われていることが結構ある。

H8の見た目は正方形をしたいかにもLSIという感じ。足が多い。PICよりも高性能。価格はPICよりも高い。というか,PICが安くて単純。

comments

Javaをマニアックに楽しむ方法

Javaには,実行中に任意のクラスをダイナミックロードできる。

<Javaを使っていないひとには,ぜんぜん面白くない記事です(--;。タブとか空白や  を入れても空白が入らない仕様なのでインデントされていません>

Javaはコンパイルすると,クラス名.class を出力する。
通常クラスを使う場合は,クラス名を書いてやったり,importで指定してやれば
使うことが出来る。

じゃあ,実行中に,任意のクラスをロードできないか?
例えば,クラス名をキーボードから入力し,そのクラスのフィールドやメソッドの一覧や
さらには,そのクラスのオブジェクトを作る方法は?



ObjectクラスとかClassクラスとかFieldクラスがある

import java.lang.reflect.Member;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

// 実験用のクラス。このクラスをロードしています。
class TestClass
{
public int num;
public double gas;
public static int static_val;
public void Proc(int a, String s)
{
System.out.println("a = "+ a + " s = "+s);
}
public static void TestProc2(double a, String s)
{
}
}

class DLoadClass
{
public static void main(String[] args) throws Exception
{
Class c = Class.forName("TestClass"); // 上記のclass TestClass のクラス情報ロード
Constructor cst[] = c.getDeclaredConstructors(); // コンストラクタ一覧取得。getConstructors じゃないのは,デフォルトのコンストラクタも取りたいので
Field f[] = c.getFields(); // フィールド一覧取得
Method m[] = c.getMethods(); // メソッド一覧取得

int i,j;

System.out.println(c.getName() + "クラスの情報");

/* フィールド一覧を出力 */
System.out.println("フィールド一覧:");
for(i = 0; i < f.length; i++) {
Class type = f[i].getType(); // 変数の型を取得
System.out.println(type.getName() + " "+ f[i].getName() ); // 変数の型 と 変数名
}

System.out.println();

/* メソッド一覧を出力 */
System.out.println("メソッド一覧:");
for(i = 0; i < m.length; i++) {
System.out.println(m[i].getName()); // メソッド名出力

Class ret_type = m[i].getReturnType(); // メソッドの戻り値の型
System.out.println("\t戻り値の型:"+ret_type.getName()); // 戻り値の型

System.out.println("\t引数の型一覧:");
Class paramsType[] = m[i].getParameterTypes(); // 引数の型一覧を取得
for(j = 0; j < paramsType.length; j++) {
System.out.println("\t"+paramsType[j].getName()); // 引数の型リストを出力します
}
}

System.out.println();

/* コンストラクタ一覧です */
System.out.println("コンストラクタ一覧:");
for(i = 0; i < cst.length; i++) {
System.out.println(cst[i].getName()); // コンストラクタ名(クラス名)表示

System.out.println("\t引数の型一覧:");
Class paramsType[] = cst[i].getParameterTypes(); // 引数の型一覧を取得
for(j = 0; j < paramsType.length; j++) {
System.out.println("\t"+paramsType[j].getName()); // 引数の型リストを出力します
}
}

System.out.println();

/* これを使って実際にオブジェクトを作りませう */
Object[] param = new Object[0]; // コンストラクタに渡す 引数リスト。引数の個数0
Object obj = cst[0].newInstance(param); // コンストラクタ一覧の

// TestClassのProcメソッドへ渡す引数の準備
Object[] param2 = new Object[2]; // 引数一覧
param2[0] = new Integer(3); // int型は Integerにする必要あり
param2[1] = "OK!"; // String型は文字列直でおけます。

m[0].invoke(obj, param2); // ↓のコード同じ(笑) tは TestClass型です。

//TestClass t = new TestClass();
//t.Proc(3,"OK!");
}
}




ダイナミックロードはもっと簡単にできないのか?
ロードするクラスに実装するインターフェイスを決めていれば,結構簡単に出来ます。
もちろんインターフェイスにしかないメソッドしか呼び出せないが,
十分すぎるでしょう。

import java.lang.reflect.Constructor;

// このインターフェイスを実装するクラスに限定
interface ITestIfc
{
void Proc(int a, String s);
}

// 実験用のクラス。このクラスをロードしています。
class TestClass2 implements ITestIfc
{
public int num;
public double gas;
public static int static_val;
public void Proc(int a, String s)
{
System.out.println("a = "+ a + " s = "+s);
}
public static void TestProc2(double a, String s)
{
}
}

class DLoadClass2
{
public static void main(String[] args) throws Exception
{
Class c = Class.forName("TestClass2"); // 上記のclass TestClass のクラス情報ロード
Constructor cst[] = c.getDeclaredConstructors(); // コンストラクタ一覧取得。getConstructors じゃないのは,デフォルトのコンストラクタも取りたいので

Object[] param = new Object[0]; // コンストラクタに渡す 引数リスト。引数の個数0
ITestIfc i = (ITestIfc) cst[0].newInstance(param); // オブジェクト作成。引数なしコンストラクタ呼び出し
i.Proc(3,"OK!");
}
}




もっと自分でロードする部分を用意しいたい場合は
ClassLoader
を継承したオリジナルのクラスを作る。
このClassLoaderクラスは,Classのオブジェクトを作成するクラスで
外部からクラスをロードして独自のClassをロードできる。

継承して,オーバーライドしなければならないメソッドは以下の2つ。
以下が基本形態だ。

import java.util.*;
import java.io.*;

class OrgClassLoader extends ClassLoader {

public Class loadClass(String name) throws ClassNotFoundException {
return loadClass(name, true);
}

protected Class loadClass(String name, boolean resolve)
throws ClassNotFoundException {
Class cl = null ;
try {
return findSystemClass(name); // ここで独自の読み込みを返せば,ダイナミックロードは完璧!
} catch( Exception e){
System.err.println(e);
}
return cl;
}

}

さらに細かく設定するには,

Class defineClass(String name, byte[] data, int off, int len)
を使う。
name : クラス名
data : コード本体が入った配列
off : dataの配列の何番目から使うか? data全体にするには 0
len : data のoffから何個がクラスか data全体にするには data.length

で設定して,戻り値をreturn すればいい
———-

参照:wiki内
http://ja.wikipedia.org/wiki/Java_Platform,_Standard_Edition#java.lang.reflect

comments