2009年11月1日日曜日

WindowsでAppleのMagic Mouseを使用する



Apple からMagic Mouseが発売されました。Magic Mouseが発表されたとき、一目見たときからそのデザインのよさにほれ込んでしまい、Apple Storeで発売されるとすぐに購入してしまいました。実際に届いたマウスは右側の写真です。化粧箱もなかなかかっこいい。ちなみに右側のマウスは、携帯用のお気に入りマウスのMicrosoft Arc Mouseです。
基本的にはMagbookをもっているのでそちらで使うつもりで購入しました。しかし、Windowsでも使えないかとためしたところ、専用のドライバがないためタッチによる操作、スワイプはもちろんのことホイール操作もできませんが、Bluetooth接続で普通の2ボタンマウスとしては使用できることがわかりました。
ちょっとしたステータスとして持ち歩く分にはかっこいいマウスであることは間違いないのでWindowsでの設定方法を紹介します。
ここでの設定は、EeePC901(windowsXP SP3)との接続ですの例ですが、実績としては、WindowsXP SP2とPLANEX BT-MicroEDR2Xとも接続できたので、Bluetoothのデバイスさえあればたいていの場合接続できると思います。






Magic Mouse側の電源をONにして、マイ Bluetoothを開きます。そうするとMagic MouseがApple Wireless Mouseとして認識されます。






次に認識されたApple Wireless Mouseを選択し、コンテキストメニューから「デバイスを接続」選択します。




HID(Human Interface Device)に接続するには[はい]をクリックししてください。とたずねられるので「はい」を選択します。






デバイスの接続を選択すると接続確認をもとめられるので、表示されている時間内に「ここをクリック」をクリックして接続を完了させます。







デバイスが接続状態となると同時にセキュリティコード(PIN)の入力を求められます。ここには、「0000」と入力することで接続できます。最初ここで接続できなくてはまり結構悩みました。ちなみにWindowsXP SP2では、端末側のセキュリティコードの設定を聞かれますが、端末側は設定なしでOKでした。



以上の設定でMagic MouseをWindowsで使用することができます。ただし、先ほど述べたようにスワイプ等ができないので、残念ながら見た目を自慢することくらいしかできませんが。。。。




2009年8月13日木曜日

スリープトラッカーで快適な目覚めを[SleeptrackerPRO ELITE]


「ほぼ目覚めている状態」にアラームが鳴り、起こしてくれるという画期的な?腕時計です。睡眠には、眠りの浅い状態のレム睡眠と眠りの深い状態のノンレム睡眠の2種類の状態があります。このスリートラッカーは、眠りの浅い状態のレム睡眠の半覚醒状態に近いときに、アラームが鳴り起こしてくれるというものです。また、眠りの浅い状態を記録し、それをUSB経由で付属のWindows用のソフトウェアで管理することもできます。

まず、目覚ましの機能ですが、仕組み的には時計に加速度計が内蔵されおり、寝ている時の動きによって眠りの状態を判断しているようです。実際に使用した感覚では、私の場合は寝返りのタイミングでアラームが鳴るといった感じでした。ここら辺の判定は、個人差はあると思います。この時計のうたい文句であるすっきりとした目覚めであるかは微妙ですが、普通の目覚ましよりは、気がつきやすいのではないかと思います。
それから、アラームの鳴る時間は、アラーム時間とアラーム・ウィンドウ(分数)で時間帯として設定します。設定したアラーム時間よりアラーム・ウィンドウ(分数)前の間の眠りの浅い時にアラームが鳴ります。例えば7時にアラームを設定し、アラーム・ウィンドウを60分と設定すると6時から7時の間で眠りの浅い時にアラームが鳴ります。設定した時間帯に眠りの浅い状態がなかった場合でも、アラームの設定時間にはアラームが鳴ります。ちなみに、アラーム・ウィンドウ(分数)は、最大90分の設定が可能です。
また、スリープトラッカーPROシリーズでは、アラームの他にバイブレーションも選択することができるので、音が聞こえない状態でのアラーム機能としても使えます。例えば、音楽を聴きながら長時間電車に乗っているときに、時間を知らせてほしい場合とか。

次に、データを管理するソフトです。スリープトラッカーでは1日分の睡眠データが記録されるので、このデータを毎日USB経由で転送します。データ転送し、睡眠データを登録するとき(左図)に、自分の気分と状態(昼寝をしたとか、アルコールを摂取したとか)を登録することで、どういったことが睡眠に影響しているのかを記録していくことができます。

登録したデータは、画面(下図)で確認できます。左側のバー表示が眠りの状態で、黒丸が付いている部分が眠りの浅かった時間になります。この画面でいうと8月13日のAM2:30頃~AM4:00過ぎまでは、眠りが深かったことを示しています。また、8月11は、黒丸が多いのでかなり眠りが浅かったということになります。
そして、右側には、先ほどの画面で登録した気分と状態がアイコンで表示されます。これをもとに自分の睡眠の良い状態を維持・管理していくといったことになります。



まあまあ実用性ある時計だと思いますが、次の点は改善してほしいなと思っています。(ただ、すでに購入しているので改善されたら、改善されたでくやしいだけなのですが。。。。)
  • アラームの種類・音量はバリエーションがほしい(アラームと音量は固定となっている)。
  • デザインをもう少しなんとかほしい。(個人的にはあまり気にっていない)。
  • USB接続でなく、無線(Bluetoothとか)にしてほしい(クリップで挟むだけなのでそれほど手間にはなっていないけど、やはり無線の方が便利)。
  • 値段が高い(もうちょっと安くならないかと思う)。
スリープトラッカーのオフィシャルサイトはこちらです。

2009年6月30日火曜日

ピコピコゲーム(PikoPiko Game)

Javaを覚えたてのころに作ったゲームです。息抜きに遊んでみてください。

左側が自分で、マウスを枠内で押し続けるとハンマーが下がります。
少し勢いがついた時に相手にヒットすると勝利となります。
枠内からマウスが出るとポーズ状態がかかります。





※Java Appletにて作成していますので、遊ぶためにはJava Runtimeのインストールが必要となります。

2009年5月30日土曜日

Java 6 Mustang のXML機能(JAXB)によるXmlDAO

Java 6 MustangのXMLの機能(JAXB)の機能がかなり拡張され、これを利用してXML用のDAOクラスを作ってみました。

まず、Java 6に付属しているSchemagenというツールにより、DAOで扱うクラスのスキーマファイルを生成します。
たとえば次のようなSampleクラスを作成します。schemaのルートノードとなるクラス(ここではSampleクラス)には
アノテーションXmlRootElementを指定します。

Sampleクラス:

import javax.xml.bind.annotation.XmlRootElement;

/**
* サンプルクラス
*/
@XmlRootElement
public class Sample {

/* 名前 */
private String name;

/* 年齢 */
private int age;

/**
* 名前を取得する。
*
* @return 名前
*/
public String getName() {
return name;
}

/**
* 名前を設定する。
*
* @param 名前
*/
public void setName(String name) {
this.name = name;
}

/**
* 年齢を取得する。
*
* @return 年齢
*/
public int getAge() {
return age;
}

/**
* 年齢を設定する。
*
* @param 年齢
*/
public void setAge(int age) {
this.age = age;
}
}



Sampleクラスに対するスキーマを作成する場合以下のようにコマンドを実行します。

> schemagen -classpath <クラスパス> Sample.java

※なぜかMacでは動作しなかった(InvocationTargetExceptionが発生してしまう)ので、Windowsでschemagenを実行しました。

schemagenを実行するとschema1.xsdというファイルが生成されますので、これをSample.xsdという名前に変更し保存します。


今回作成したXmlDAOにより、上記のSampleクラスの保存および読み込みのロジックは記述すると次のようなコードになります。
XmlDAOのテストコード:

import java.io.File;

import jp.aarkiton.xml.dao.XmlDAO;

/**
* XmlDAO用テストソース
*/
public class XmlDAOTest {

public static void main(String args[]) throws Exception {
// 保存対象のテスト用オブジェクト
Sample sample = new Sample();
sample.setName("tama");
sample.setAge(10);

// XmlDAOのインスタンス生成
XmlDAO<Sample> xmlDAO = XmlDAO.getInstance(Sample.class, "Sample.xsd");

// オブジェクトの保存
xmlDAO.save(sample, new File("sample.xml"));
// 一旦オブジェクトを解放
sample = null;

// オブジェクトの読み込み
sample = xmlDAO.load(new File("sample.xml"));

System.out.println(sample.getName());
System.out.println(sample.getAge());

}

}


上記コードを実行した結果得られるsample.xmlは以下のようになります。
sample.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sample>
<age>10</age>
<name>tama</name>
</sample>


最後に今回作成したClassUtils、XmlDAO、のクラスを記載します。
ClassUtils:

/*
* Copyright 2009 (C) Aarkiton Soft. All Rights Reserved.
*
* This software is open source.
*/
package jp.aarkiton.util;

import java.io.InputStream;
import java.net.URL;

/**
* クラス、パッケージ関連のユーティリティクラス
* @author Takanori
* @version 1.0.0
* @since 1.0.0
*/
public class ClassUtils {

/**
* 指定したクラスのパッケージパスから、指定したファイルのURLを取得する。
* @param cls クラス
* @param name ファイル名
* @param URL
*/
@SuppressWarnings("unchecked")
public static URL getResource(Class cls,String name){
return cls.getClassLoader().getResource(getPackagePath(cls)+"/"+name);
}

/**
* 指定したクラスのパッケージパスから、指定したファイルの入力ストリームを取得する。
* @param cls クラス
* @param name ファイル名
* @param 入力ストリーム
*/
@SuppressWarnings("unchecked")
public static InputStream getResourceAsStream(Class cls,String name){
return cls.getClassLoader().getResourceAsStream(getPackagePath(cls)+"/"+name);
}

/**
* クラスを指定してパッケージのパスを取得する。
* @param cls クラス
* @return パッケージのパス
*/
@SuppressWarnings("unchecked")
private static String getPackagePath(Class cls){
return cls.getPackage().getName().replace('.','/');
}

}


XmlDAO:

/*
* Copyright 2009 (C) Aarkiton Soft. All Rights Reserved.
*
* This software is open source.
*/
package jp.aarkiton.xml.dao;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;

import jp.aarkiton.util.ClassUtils;

import org.xml.sax.SAXException;

/**
* Java 6 Mustang のXML機能を使用したJavaオブジェクトのシリアライザークラス

* Java 6 から同梱されたschemagenにより、Javaのクラスからスキーマを生成することができ、
* その生成されたスキーマを使用しオブジェクトのロード、セーブを行う。
* スキーマファイル名を指定しない場合、スキーマは対象となるクラスのパッケージパスの
* 「クラス名.xsd」という名前のスキーマファイルを使用する。
*
*

* (1)スキーマの生成
* Usage: schemagen [-options ...] <java files>
* Options:
* -d <path> : 出力先ディレクトリ
* -cp <path> : ユーザ定義ファイルの検索パス
* -classpath <path> : ユーザ定義ファイルの検索パス
* -version : バージョン情報
*
* (2)クラスの使用例
* 例1)SampleクラスのインスタンスをXMLスキーマ定義(Sample.xsd)に基づき、
*     XMLファイル(sample.xml)として保存する。
*
* Sample sample = new Sample();
* :
* XmlDAO<Sample> xmldao = XmlDAO.getInstance(Sample.class,"Sample.xsd");
* xmldao.save(sample, new File("sample.xml"));
*
* 例2)SampleクラスのインスタンスをXMLファイル(sample.xml)として保存する。
*     (XMLスキーマ定義を指定しなかった場合、パッケージフォルダにある<クラス名>.xsdファイルが使用される)
* Sample sample = new Sample();
* :
* XmlDAO<Sample> xmldao = XmlDAO.getInstance(Sample.class);
* xmldao.save(sample, new File("sample.xml"));
*
* 例3)SampleクラスのインスタンスをXMLスキーマ定義(Sample.xsd)に基づき、
*     XMLファイル(sample.xml)からロードする。
*
* XmlDAO<Sample> xmldao = XmlDAO.getInstance(Sample.class,"Sample.xsd");
* Sample sample = xmldao.load(new File("sample.xml"));
*
* 例4)SampleクラスのインスタンスをXMLファイル(sample.xsd)からロードする。
*     (XMLスキーマ定義を指定しなかった場合、パッケージフォルダにある<クラス名>.xsdファイルが使用される)
* XmlDAO<Sample> xmldao = XmlDAO.getInstance(Sample.class);
* Sample sample = xmldao.load(new File("sample.xml"));
*
*


* @author Takanori
* @version 1.0.0
* @since 1.0.0
*
* @param
*/
public class XmlDAO {

/** 永続化クラス */
protected Class targetClass;

/** Marshallerオブジェクトに渡すプロパティ */
protected Map properties;

/** スキーマファイル */
protected File schemaFile = null;

/**
* クラスオブジェクトを入力としてXmlDAOのインスタスを生成するファクトリメソッド。
*
* @param targetClass
* ターゲットクラス
*/
public static XmlDAO getInstance(Class targetClass) {
return new XmlDAO(targetClass);
}

/**
* クラスオブジェクト、スキーマファイル名を入力としてXmlDAOのインスタスを生成するファクトリメソッド。
*
* @param targetClass
* ターゲットクラス
* @param schemaFilename
* スキーマファイル名
*/
public static XmlDAO getInstance(Class targetClass,
String schemaFilename) {
return new XmlDAO(targetClass, schemaFilename);
}

/**
* クラスオブジェクト、スキーマファイル名を入力としてXmlDAOのインスタスを生成するファクトリメソッド。
*
* @param targetClass
* ターゲットクラス
* @param schemaFile
* スキーマファイル
*/
public static XmlDAO getInstance(Class targetClass,
File schemaFile) {
return new XmlDAO(targetClass, schemaFile);
}

/**
* クラスオブジェクトを入力としてXmlDAOのインスタスを生成するコンストラクタ。
*
* @param targetClass
* ターゲットクラス
*/
protected XmlDAO(Class targetClass) {
this(targetClass, (File) null);
}

/**
* クラスオブジェクト、スキーマファイル名を入力としてXmlDAOのインスタスを生成するコンストラクタ。
*
* @param targetClass
* ターゲットクラス
* @param schemaFile
* スキーマファイル名
*/
protected XmlDAO(Class targetClass, String schemaFilename) {
this(targetClass, new File(schemaFilename));
}

/**
* クラスオブジェクト、スキーマファイルを入力としてXmlDAOのインスタスを生成するコンストラクタ。
*
* @param targetClass
* ターゲットクラス
* @param schemaFile
* スキーマファイル
*/
protected XmlDAO(Class targetClass, File schemaFile) {
this.targetClass = targetClass;
this.schemaFile = schemaFile;
this.properties = getDefaultProperties();
}

/**
* Marshallerオブジェクトに渡すデフォルトのプロパティを取得する。
*
* @return デフォルトのプロパティ
*/
protected Map getDefaultProperties() {
Map defualtProperteis = new HashMap();
defualtProperteis.put(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
return defualtProperteis;
}

/**
* オブジェクトをセーブする。
*
* @param o
* ターゲットオブジェクト
* @param output
* 出力ファイル
*/
public void save(T o, File output) throws JAXBException, SAXException,
IOException {
save(o, new FileOutputStream(output));
}

/**
* オブジェクトをセーブする。
*
* @param o
* ターゲットオブジェクト
* @param output
* 出力ストリーム
*/
public void save(T o, OutputStream output) throws JAXBException,
SAXException, IOException {
// ターゲットクラスのためのコンテキストを作成.
JAXBContext context = JAXBContext.newInstance(targetClass);

// 使用する Schema オブジェクトを作成.
Schema schema = getSchema();

// Java オブジェクトから XML に変換するための Marshaller を作成.
Marshaller marshaller = context.createMarshaller();
marshaller.setSchema(schema);
for (Map.Entry entry : properties.entrySet()) {
marshaller.setProperty(entry.getKey(), entry.getValue());
}

// XML に変換.
marshaller.marshal(o, output);
}

/**
* オブジェクトをロードする。
*
* @param input
* 入力ファイル
* @return オブジェクト
*/
public T load(File input) throws JAXBException, SAXException, IOException {
return load(new FileInputStream(input));
}

/**
* オブジェクトをロードする。
*
* @param input
* 入力ストリーム
* @return オブジェクト
*/
@SuppressWarnings("unchecked")
public T load(InputStream input) throws JAXBException, SAXException,
IOException {
// ターゲットクラスのためのコンテキストを作成.
JAXBContext context = JAXBContext.newInstance(targetClass);

// 使用する Schema オブジェクトを作成.
Schema schema = getSchema();

// XML から Java オブジェクトに変換するための Unmarshaller を作成.
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setSchema(schema);

// XML から Java オブジェクトに変換.
return (T) unmarshaller.unmarshal(input);

}

/**
* オブジェクトを入力にストリームに変換する。
*
* @param o
* ターゲットオブジェクト
*/
public InputStream getInputStream(T o) throws JAXBException, SAXException,
IOException {
// ターゲットクラスのためのコンテキストを作成.
JAXBContext context = JAXBContext.newInstance(targetClass);

// 使用する Schema オブジェクトを作成.
Schema schema = getSchema();

// XML から Java オブジェクトに変換するための Unmarshaller を作成.
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setSchema(schema);

// Java オブジェクトから XML に変換するための Marshaller を作成.
Marshaller marshaller = context.createMarshaller();
marshaller.setSchema(schema);
for (Map.Entry entry : properties.entrySet()) {
marshaller.setProperty(entry.getKey(), entry.getValue());
}
ByteArrayOutputStream output = new ByteArrayOutputStream();
// XML に変換.
marshaller.marshal(o, output);

return new ByteArrayInputStream(output.toByteArray());
}

/* クラスと同一フォルダからスキーマを読み込む。 */
private Schema getSchema() throws SAXException {
SchemaFactory factory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
if (schemaFile != null) {
return factory.newSchema(schemaFile);
} else {
return factory.newSchema(ClassUtils.getResource(targetClass,
targetClass.getSimpleName() + ".xsd"));
}
}

}

2009年5月27日水曜日

汎用Diffライブラリ

仕事上の必要性にかられ、汎用Diffライブラリを作ってみました。



Diff関連の資料をいろいろと調べたところ、「An O(NP) Sequence Comparison Algorithm」のアルゴリズムがよさそうだったのでこれをもとに実装しています。
実装にあたっては、可読性>メモリ使用量>性能の優先順位をおいて実装しているので性能的には改善の余地があるとは思っています。ただ、自分としてはとにかくシンプルに拡張できることが重要だったのであまり凝った作りにはしていません。

実際に使う場合は、以下の図にあるDiffSourceを実装することで様々なDiffをとることができます。標準の実装として文字列用のDiffStringSourceというクラスが用意してあるので文字列のDiffであればこちらを使用してください。



以下は文字列用のDiffStringSourceを使用したときの結果イメージを示しています。図のようにDiffSequenceに開始、終了インデックスが格納されDiffSequenceのリストとして結果を取得できます。



ソースと結果イメージは次のようになります。
サンプルソース:

public class DiffTest {

public static void main(String[] args)
throws Exception
{

DiffSource s1 = new DiffStringSource("abcdefg");
DiffSource s2 = new DiffStringSource("abzge");
Diff diff = new Diff();
List diffList = diff.diff(s1, s2);
int i = 0;
for(DiffSequence seq : diffList){
if(seq instanceof CommonSequence){
System.out.println(i+":共通部分");
System.out.println(
" source("+seq.getSourceStartIndex()
+","+seq.getSourceEndIndex()
+") = "+seq.getSourceElements());
System.out.println(
" target("+seq.getTargetStartIndex()
+","+seq.getTargetEndIndex()
+") = "+seq.getTargetElements());
}else{
System.out.println(i+":差異部分");
System.out.println(
" source("+seq.getSourceStartIndex()
+","+seq.getSourceEndIndex()
+") = "+seq.getSourceElements());
System.out.println(
" target("+seq.getTargetStartIndex()
+","+seq.getTargetEndIndex()
+") = "+seq.getTargetElements());
}
i++;
}
}
}


結果:
0:共通部分
source(0,2) = ab
target(0,2) = ab
1:差異部分
source(2,4) = cd
target(2,4) = zg
2:共通部分
source(4,5) = e
target(4,5) = e
3:差異部分
source(5,7) = fg
target(5,5) =

2009年4月19日日曜日

MacBook + Intel SSD X25-M で Boot Camp

iPhone Appが気になってとうとうMacBookを購入してしまいました。せっかくなのでこれをメインPCとして使用すべく、内蔵ディスクをIntel SSD X25-Mにしてみました。ここまでは順調だったのですが、欲を出し、さらにBoot CampでWindowsXPを入れようとしたところ、なぜか内蔵ドライブでは、WindowsXPのインストールディスクが起動しない。ネットをいろいろと調べていみるとどうやら同じ症状(起動はするけど認識しない場合もあるようです)の人がかなりいるようで、原因もいろいろな説が飛び交っていました。
最近になってIntel SSDで使用しているIndilinxのチップの問題でNVIDIAのチップセットとのネゴシエーションがうまくいかないらしいことがわかりました。(もっとも、軟弱なJavaプログラマーにはさっぱりわからない世界ですが。。。)

そこでIntelに問い合わせしてみたところ、最新のFirmware(8820)があるので試してみてくださいとのこと。
Intel® SATA SSD Firmware Update Toolのダウロードページへ
早速ダウンロードしてFirmwareをバージョンアップしてみたところ、なんと認識するじゃないですか(やったー!!)。念のためバックアップをとってバージョンアップを行いましたが、幸いディスクの中身は無事でした。しかも性能も向上するようです。ただ、Firmwareのバージョンアップをするには別のPCで行う必要があるのでMacBookしかない人はどうするんだろう?
あと、すべての場合で問題が解決するわけではなさそうなので注意が必要です。
http://www.pcper.com/article.php?aid=691&type=expert&pid=7

早速、Boot CampでWindowsXPをいれ、CrystalDiskMarkで測定してみるとめっちゃ満足な結果となりました。


調子にのって、さらに、Boot CampのパーティションをVMWare Fusionで仮想化してCrystalDiskMarkで測定してみると、なぜか読み取り速度が異常に遅くがっかりな結果に。。。この結果遅すぎない?何かチューニングできないのだろうか?



しかしながら、体感速度的には快適なので問題なし。
これでMacBookさえあればなんでもできる環境になったので、本題のプログラム等の掲載も開始しなければ。。

【2009/11/5 更新】
私が購入した当時(上記内容)は50nm版だったけど、今は34nm版になっている。また、先日SSD(Solid-State Drive)用の管理・最適化ツール「Intel Solid-State Drive Toolbox (v1.1)」とファームウエア・アップデート「Intel SATA SSD Firmware Update Tool (v1.4)」の提供が開始されたようです。ただし、34nm版用の高速化が期待されるtrimコマンドに不具合があったらしく、ファームウェアは提供を中断しているようです。
それから、VMWare Fusionからのアクセスは、Snow LepardにしてもVMWare Fusion3にアップデートしてもほとんど変わらなかった。どうにかならないかな?

【2009/12/5 更新】
ファームウェアの提供が11/30よりされているようです。
ただ、50nmに関しては、変更がないようですね。

2009年1月22日木曜日

ピータッチ2430PC

単なるラベルプリンターですが、PCに接続するだけで専用アプリケーションが立ち上がり、PCにドライバ等をインストールせずに利用可能だそうです。
お手軽さと価格的になかなかのものだと思います。ちょっと前に自分のポストにラベルを付けたのですが、そのときはシールに印刷して作りましたが、出来栄えはいまいちでした。
そのとき、これがあれば迷わず買っていたと思います。。。

2009年1月21日水曜日

SSD[Mtron SSD MOBI 3000]


現在Eee PC 901-Xを所有していますが、最近になってEee PC S101、Sony Type-Pなど魅力的な製品が出てきてもう少し待てばよかったと少し後悔しています。
ただ、後悔ばかりしてもしょうがないのでなんとか今使用しているEee PCをパワーアップさせるべく、いろいろとネットを検索してMtronから出ているSSD MOBI 3000[MSD-PATA3018032-ZIF2]を見つけました。
このSSDはZIFで接続するのですが、ZIFのインタフェースが初期のEee PC 901-Xにしかないらしく、最近のモデルだと自分でZIFのインタフェースを半田付けするしかないようです。半田付けはちょっと。。。でもSSDをつけたいという場合は南烏山という製品があるようです。

いづれにしろ保証外となってしまうのがつらいところですが。。。また、SSDを取り付ける場合、既存のDドライブのSSDは取り外し、CドライブはDドライブとして使用することになります。
あとMOBI 3000にはケーブルが含まれていないので、私の場合は、別途CF (コンパクトフラッシュ) 1.8ZIF変換カードなどを購入してその中の付属品を使用しました。
実際の分解・接続にあっては、こちらなどを参考にしています。取り付けが完了すると上の写真のようになり、BIOSではSecondary Masterとして認識されます。あとは付属のCD-ROMからシステムを普及させれば換装が完了します。
起動速度を測ってみる(下の動画)とだいたい20秒強で立ち上がるようになり、DISKの速度もS101に近い値となりまずまずの結果になりました。実際の使用してみると、以前はときどきもっさりとした感じることもあったのが、待たされている感じがほとんどなくなりとても快適になりました。
これでEee PCももうしばらく活躍させることができそうです。

2009年1月16日金曜日

モバイル無線ルータ[CMR-350]


先日coviaのCMR-350を購入しました。CMR-350は、e-mobileとの組み合わせて使用することによりどこでもアクセスポイントになるルータです。
インタフェースとしてLAN専用ポート、LAN/WAN兼用ポートとUSBが2ポートあります。実際にUSBポートにD11LCを接続してみると左のような感じになります。
写真のようにe-mobileを直接接続でき、ルータ自身がダイアルアップしてくれる点が強みだと思います。
iPod Touch、PSPなどWiFi機能を持った機器をインターネットで接続したいけど近くにホットスポットがないような場合でもこれさえあればどこでもインターネットに接続できます。(コンセントは必要ですが。。)



そのほか次のような機能があり、インターネット上に簡単なサーバーを立ち上げることができます。
・Webカメラサーバー
・ファイルサーバー
・FTPサーバー
・プリンタサーバー
しかもDynamicDNS(DynDNS)にも対応しているので外部からの接続も容易にできます。

製品のページ
http://www.covia.net/main/index.html