Archive for 2月, 2012
複数のOS向けに自動でヘッダファイルや、リンクの指定を変えたいと思った場合での、
configure.ac
になんと書けばよいかのメモ。
(もっとよい方法があるかも・・・・)
まず、configure.acに以下の指定を加えます。
AC_CANONICAL_SYSTEM
このマクロを加えることで、configure時に指定するtargetやhostなどの指定を変数で取得できるようになります。
従って
AC_PREREQ([2.68])
AC_INIT([jvmvoke], [1.0], [coltware@gmail.com])
AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE([foreign])
AC_CONFIG_SRCDIR([src/jvmvoke.c])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
case "${target}" in
*darwin*)
echo "Target is MAX OS X"
JNI_INCLUDE=/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/
AC_SUBST(JNI_INCLUDE)
JNI_LDFLAGS="-Wl,-framework,JavaVM"
AC_SUBST(JNI_LDFLAGS)
;;
*mingw*)
echo "Target is WIN32"
;;
esac
ってな感じで、
AC_SUBST
で変数を動的に指定していきます。
つまり、
src/Makefile.am
には、
LDFLAGS=@JNI_LDFLAGS@ CFLAGS=-I@JNI_INCLUDE@ bin_PROGRAMS=jvmvoke jvmvoke_SOURCES=jvmvoke.c
と記述することができました。
これが対応する前は
LDFLAGS=-I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/ CFLAGS=-Wl,-framework,JavaVM bin_PROGRAMS=jvmvoke jvmvoke_SOURCES=jvmvoke.c
ってな感じに記述していました。
これで、mingw32向けとか、Linux向けの指定を追加していけば、
同じMakefile.amファイルにて複数のOS向けのファイルができるという訳です。
「やる気がゼロでも仕事をする方法」
という記事の中で紹介されていたツールで、テキストボックスに文字を入れていけばメールになる。
というやつ。これは結構アイデアとしていいですね。
ほとんどのビジネスメールなんて、定型フォーマットで十分なのでは?
と思っているし、新入社員(新卒)は、
よくできた定型フォーマットで1年くらいメールを書いていれば、
自然と、文章の組み立て方が体になじんでくるのではないかと思います。
意外と、文章というのは学校でもまじめに勉強してきておらず、
また、会社となれば、ほとんど、日本人に日本語を教えてくれる人なんて皆無です。
なので、メールでの文章なんてもうめちゃくちゃ。
たいてい、多くの方のメールの最後の方にいいたいことがあります。
さらに、困るのが、報告と称して単に、過去の内容を引用されてくるメールで、
下記のような内容となっております。
>先日・・・・
>>この間・・・
>>>以下の件ですが・・・・
>>>>前回の修正で・・・
>>>>>ミーティングの内容の・・・・
ってな感じ。
おいおい、結局、オフラインのミーティングの内容を記さず、
それに対して話をされても、皆目検討もつかない物語が進行している状態が多々。
さらに、上から下へと過去に向かって話が進行していくので、ついていけません。
それに、報告って・・・
今までのメールに
「下記のような内容となっております。」
しか、追加されていないぞーー。
さらに、極めつけが、
メールの冒頭に、
「間違いがあった場合にはご指摘ください」
って但し書き。
内容を知りたいから、報告をしてくれって頼んでいるのに、
間違いがあるかも知れません。
って、俺は内容も知らないのに、指摘できる分けないだろ。
っていうか、間違いがあるかもっておもっているなら、
それを修正して、もう一度提出してくれーーーー!!
でもって、最後の必殺技。
「さっき、メールしましたけど!」
っていう台詞。
ここまでくると、私も心が折れてしまいます。
まあ、今や、上から下へは
「下記の件ですが、対応してください。」
ですから、
下から上への報告は
「下記のような内容となっております。」
でも、あまり文句もいえないのかもしれませんが・・・
私も入社したてなんて同様だったのですが・・・
そう思うと、あー、あの大企業さん。ありがとうございます。
入社して数週間は自分の日報だけで仕事が終わりました。
(日報の中身が、昨日の日報の修正で終了なんていう屈辱的な日報も書きましたし・・・)
日報を毎日毎日、3年間もルールで書かせてもらったので、
いざ、1、2年前のメールを見返すと、自分のアホさ加減に嫌気がさすと同時に、
今の内容をみると、当時、いわれていることが皆目検討つかず、
むかつくことばかりでも、当時と今を知っているのでわかることがあるのです。
まあ、父親になり、初めて父親の意味が分かってくるみたいな感覚です。
自由もいいけど、「型」も非常に大切なのですよね・・・
ちょっとANEを使って、Javaの起動を試してみたくなった。
が、今回はそこまでは到達せず、
CからのJavaの起動までです。
#include <jni .h>
#include <stdio .h>
#include <stdlib .h>
int main(int argc, char **argv){
JNIEnv *env;
JavaVM *jvm;
jclass clazz;
jmethodID methodId;
JavaVMOption options[3];
options[0].optionString = "-Xmx128m";
options[1].optionString = "-verbose:gc";
options[2].optionString = "-Djava.class.path=/Users/coltware/java/classes";
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_6;
vm_args.options = options;
vm_args.nOptions = 3;
fprintf(stderr,"JNI_Creating ¥n");
int ret = JNI_CreateJavaVM(&jvm, (void **)&env,&vm_args);
if ( ret < 0 ){
fprintf(stderr,"JNI_Creating Error ¥n");
return __LINE__;
}
clazz = (*env)->FindClass(env, "Hello");
if( clazz == 0){
fprintf(stderr,"Can't find Hello class ¥n");
return __LINE__;
}
methodId = (*env)->GetStaticMethodID(env,clazz,"main","([Ljava/lang/String;)V");
if ( methodId == 0){
return __LINE__;
}
(*env)->CallStaticVoidMethod(env,clazz,methodId,NULL );
(*jvm)->DestroyJavaVM(jvm);
return 0;
}
Java側では以下のようなクラスを作成し、
java.class.path
で指定した場所におきます。
public class Hello {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
今回は、Mac(OS X Lion)上のgccでコンパイル&リンクをしてみます。
$gcc -I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/ ¥
-o jvmvoke.o -c jvmvoke.c
$gcc -framework JavaVM -o jvmvoke jvmvoke.o
リンクはlibjvm.soをリンクする必要があるのですが、
Linuxだと-L/path/to/java -jvmにあたるものが、
Macだと、この-framework JavaVM
になります。
こちらを実行すると
./jvmvoke JNI_Creating Hello world
とりあえず、CからJavaの起動まで確認。
JavaでWindowsのサービスを作りたくても、Cでラップしなければならないので、
このあたりはそこらあたりのキーワードをたよりにググると見つけやすい。
とここまでがMacですが・・・
これを次回はWindowsをターゲットにやってみて、ANE化してみます(さて、動くことやら・・・わかりません)。
でも、これでJavaを起動できれば、あとはそこでローカルでhttp通信をしてしまえば、
かなりANE、いろんなケースで気軽に使える気もします。
(NamedPipeのほうがよいきもしますが、Java&Windowsだとちょっとどうやればいいのかわかりません)
あと、だれか、MacでXCodeを使わないで.frameworkライブラリを作る方法がわかるかたがいたら、教えてください。
昨日、FxUGにてairxzipの紹介をしてきました。
そのときの資料(PDF)をアップしておきます。
ただし、多少(ライセンスと、ソースのURL)を書き加えました。
紹介PDF
また、そのときに紹介したコードを多少変更し、載せておきます。
このコードは、入力されたzipのパスワードが厳密に正しいかをチェックする為のコードです。
ZipFileReader reader = new ZipFileReader();
reader.open(zipFile);
// もっとも小さいファイルを見つける
var list:Array = reader.getEntries();
var targetEntry:ZipEntry = null;
// 実際は、上のlistから何らかの方法で、解凍したいターゲットを選択します。
// チェックサムの値を取得する
var crc32Str:String = targetEntry.getCrc32();
var orgCrc32:Number = parseInt(crc32Str,16);
try{
reader.setPassword("password");
var bytes:ByteArray = reader.unzip(targetEntry);
// ここから下は通常行わなくてよい。
// たまたま、ファイルが解凍できても、その中身を見れば壊れているので、問題ない
bytes.position = 0;
var crc32:uint = ZipCRC32.getByteArrayValue(bytes);
if(crc32 == orgCrc32){
// パスワードが正しい。
}
}
catch(ex:ZipError){
// パスワードが間違っていると、このエラーが起きる
}
また、時間の関係でMS-Officeのファイルを編集までは説明しませんでしたが、
それは私のaixooxというライブラリ(ただし、svnでソースでチェックアウトする必要がある。)を使う方法で、
簡単にある程度は編集できます。
エクセルだけはそれなりに使えるようにはなっているとおもいます。
また、中身はXMLの操作ですから、日本語の問題もありません。
ここから、srcをダウンロードしてください。
http://code.google.com/p/airxoox/
< ?xml version="1.0" encoding="utf-8"?>
<s:windowedapplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init()"
>
<fx:script>
< ![CDATA[
import com.coltware.airxlib.utils.DateUtils;
import com.coltware.airxoox.airxoox_internal;
import com.coltware.airxoox.classes.OoxML;
import com.coltware.airxoox.core.CoreProps;
import com.coltware.airxoox.excel.SMLCell;
import com.coltware.airxoox.excel.SMLRow;
import mx.logging.ILogger;
private static var log:ILogger = Log.getLogger("airxoox.sample");
import com.coltware.airxoox.SpreadsheetML;
import com.coltware.airxoox.excel.SMLWorkbook;
import com.coltware.airxoox.excel.SMLWorksheet;
import mx.logging.Log;
import mx.logging.LogEventLevel;
import mx.logging.targets.TraceTarget;
private function init():void{
var logTarget:TraceTarget = new TraceTarget();
logTarget.filters = ["com.coltware.airxoox.*","airxoox.*"];
logTarget.level = LogEventLevel.DEBUG;
logTarget.includeCategory = true;
logTarget.includeLevel = true;
logTarget.includeTime = true;
Log.addTarget(logTarget);
}
private function testExcel():void{
var excel:SpreadsheetML = new SpreadsheetML();
excel.openFile(File.desktopDirectory.resolvePath("sample.xlsx"),FileMode.UPDATE);
// プロパティ情報を設定する
var core:CoreProps = excel.getCoreProperties();
core.setKeywords("sample,airxoox");
core.setTitle("this is sample data for airxoox");
core.setDescription("これはあくまでもサンプルです。気をつけてね");
// WORKBOOKを読み込む
var workbook:SMLWorkbook = excel.getWorkbook();
var sheets:Array = workbook.getSheetList();
log.debug("sheet size is .." + sheets.length );
var worksheet:SMLWorksheet = workbook.getSheetAt(0);
// これを忘れてはいけない。データが大きいといけないので使わないsheetは読まない
worksheet.load();
// すべてのデータを取得する
var rowList:Array = worksheet.getRowList();
for each(var row:SMLRow in rowList){
var cells:Array = row.getCellList();
for each(var _cell:SMLCell in cells){
log.debug(_cell.getCellId() + "=>" + _cell.getValue());
}
}
// A1のセルの情報を取得する
var cell:SMLCell = worksheet.getCell("A1");
// そして、そのセルの情報を上書き
cell.setStringValue(ui_a1.text);
// 最後のファイル名を変えて書き込む
excel.saveFile(File.desktopDirectory.resolvePath("output.xlsx"));
excel.closeFile();
}
private function dumpCoreProps(core:CoreProps):void{
log.debug("title=>" + core.getTitle());
log.debug("subject=>" + core.getSubject());
log.debug("creator=>" + core.getCreator());
log.debug("keywords=>" + core.getKeywords());
log.debug("desc=>" + core.getDescription());
log.debug("lastModBy" + core.getLastModifiedBy());
var createdAt:Number = core.getCreatedAt();
if(createdAt){
log.debug("created:" + DateUtils.dateToString("Y/m/d H:i:s",createdAt));
}
}
]]>
</fx:script>
<s:layout>
<s:verticallayout gap="20" />
</s:layout>
<s:textinput width="100" id="ui_a1" />
<s:button label="Excel" click="testExcel()" />
</s:windowedapplication>
ずばり、やりたい事が限定的で明確に決まっているならば、
airxzipとXMLだけで処理をしてしまった方が、わかりやすく、問題も出にくいとは思います。
ANEでCとAS3でのデータ受け渡しが面倒だな-とおもってきた。
で、クラス(もしくはなんらかの構造体)みたいな形でデータを受け渡しができればいいのだが・・・
とおもっていたので、昔、作りかけていた、
ApacheのモジュールでデータをamfからXMLに変換するようにしていたが、
そもそも、すべてByteArrayでamfのデータを受け渡しして、
それをC側でamfから構造体へ変換すれば、結構いいかもとおもってきた。
もちろん、データを返すときもその反対。
まあ、時間があるときにでもちょっと引っ張り出してきて、試してみようかなとおもったので、
自分用のメモ。
できれば、Android NDKとしても使えるようにしたいのだが、
結構、apr ( apache portable runtime)に頼ってしまっているあたりがネック。
(Androidとかで、使える事例をまだ見たことがない・・・・)
char *data = “12345678″;
substr(data,3)
みたいなことをして、”123″を取り出す関数というのは、すぐに見つかります。
(私はaprを使っていますので、apr_pstrndupを使うのですが・・・ここはそれが趣旨ではありませんので)
しかし、始まりを引数に指定する関数は、見つかりません。
何故に、終了が指定できるのに、開始が指定できないんだーーー!と思ってしまう。
が・・・
data + 4
みたいにすれば、開始が指定できる訳です。
この辺りが、文字列のアドレスを4つ移動するみたいなことになる訳ですが、
文字列のdataという固定概念があるので、
なかなか、これが思い浮かびません。
C言語を触っていると、あーこれは私が知っているJavaとかの言語とは、
まったく違って、この辺りが、まさしく、コンピュータ(機械)なんだなーと思ってしまいます。
でも、なれてくると、決行便利なところもあり、
使い勝手がいい部分もあるものだなと、最近思ってきました。
ANE用のDLLをLinuxのautotoolsをつかって作成する手順です。
以前、途中までを記述しましたが、やっと一通りの流れが、
./configure; make;
だけで終了するようにすることができました。
まず、はじめにLinuxの前提ですが、
なぜか64bit版ではSeg faultを起こしてしまうので、32bit版のほうがいいみたいです。
でまず、準備から
環境の前提
$uname -m -r 2.6.31.12-174.2.3.fc12.i686.PAE i686 $automake --version automake (GNU automake) 1.11.1 $autoconf --version autoconf (GNU Autoconf) 2.63
というのが私の環境です。
MinGW32のインストール
$yum install mingw32-¥*
で終了です。
ソース環境の構築
ここでは、プログラムの説明はしません。
従って、hello.cは自分で用意してください。
また、ANE用のFlashRuntimeExtensions.(lib,h)は、以下のようの配置してある前提とします。
├── lib
│ └── win32
│ └── FlashRuntimeExtensions.lib
└── src
├── FlashRuntimeExtensions.h
└── hello.c
Makefile.amの作成
下記のようにMakefile.amを2つ用意します。
Makefile.am
ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src
src/Makefile.am
lib_LTLIBRARIES = libhello.la
libhello_la_LDFLAGS = -no-undefined \
-avoid-version \
-Wl,-o,.libs/hello.dll \
-Wl,../lib/win32/FlashRuntimeExtensions.lib \
-Wl,--output-def,.libs/hello.def,--out-implib,.libs/hello.dll.a
libhello_la_SOURCES = hello.c
ここで、作成するdllはhello.dllであると指定しています。
また、ここでは使いませんが、何かの役に立つかもしれないので、
hello.defとhello.dll.aも同時に作成するよう指定しています。
(多分、最終的なANE用のDLLを作成する場合には必要ないと思いますが・・・)
これでフォルダは以下のようになったはずです。
├── Makefile.am
├── lib
│ └── win32
│ └── FlashRuntimeExtensions.lib
└── src
├── FlashRuntimeExtensions.h
├── Makefile.am
└── hello.c
./configure; make; で構築できるようにする
$autoscan $mv configure.scan configure.ac
と実行したら、以下のようにconfigure.acを書き換えます。
私が追加したのは
AC_INIT
AM_INIT_AUTOMAKE
AC_CONFIG_MACRO_DIR
AC_PROG_RANLIB
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
意外は追加していません。
この辺りは、autoconfのバージョンによって多少違うようですが、
トラブルは避けたいので、自分の環境でautoscanした結果を編集した方がよいようです。
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.63])
AC_INIT([hello], [0.1], [coltware@gmail.com])
AM_INIT_AUTOMAKE([foreign])
AC_CONFIG_SRCDIR([src/FlashRuntimeExtensions.h])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
# Checks for programs.
AC_PROG_CC
AC_PROG_RANLIB
# Checks for libraries.
# Checks for header files.
AC_CHECK_HEADERS([stdint.h string.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_INT32_T
AC_TYPE_UINT32_T
AC_TYPE_UINT8_T
# Checks for library functions.
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
AC_CONFIG_FILES([Makefile
src/Makefile])
AC_OUTPUT
そして、次のようにコマンドを実行していきます。
$mkdir m4 $libtoolize $aclocal -I m4 $autoheader $automake -a -c $autoconf
で一応の環境の構築は終了です。
DLLの構築
以下のようなconfigureを実行するスクリプトを作成します。
export MINGW=/usr/bin/i686-pc-mingw32
export CC=$MINGW-gcc
export AR=$MINGW-ar
export LD=$MINGW-ld
export AS=$MINGW-as
export NM=$MINGW-nm
export RANLIB=$MINGW-ranlib
export STRIP=$MINGW-strip
export DLLTOOL=$MINGW-dlltool
export WINDRES=$MINGW-windres
./configure \
--target=i686-mingw32-pc \
--host=i686-linux-gnu \
archive_cmds_need_lc=no
ここでかなりはまったのが、最後のarchive_cmds_need_lc=noの部分です。
これがないと、libtoolで-lcを加えてしまいエラーになってしまいました。
毎回、これを手でうつのは面倒なのスクリプトにします。
$./make
これで終了です。
作成されると、
src/.lib/hello.dll
に作成されます。
あとはこれをほかの環境に移動して、ANEファイルを作成してください。
たかだか、hello.cのためだけにここまでするのは大げさですが、
ここから、ほかのライブラリが必要になった場合とか、ソースが多くなってきた場合とかに
autotoolsを使うと結構便利です。
ちょっと、変更すればほかの環境用にもできるはずです。
(まだ、自分ではやっていませんが・・・)
私も今更ではありますが、初めてActionScript Native Extensionに挑戦してみました。
しかし、今回はMac、もしくはLinux環境にMinGW32の環境を作成し、
そこでクロスコンパイル環境を構築し、ANEを作ってみました。
(ただ、はっきりいってANEはめんどくさい!)
理由としては、ずばり、zlibとaprなど既存のUnix(Linux)で使われているライブラリを使いたいからです。
また、構築も面倒なのでできれば、autoconf & automakeを使いたいと思った次第です。
まあ、MakefileのなかにANEの構築手順なんかも書いておけば、
いつもの、
./configure; make; make install;
のような感覚でいけるようにしたいのがGOALです。
実はこのネタを記述する前に、Java(JNA) & MinGW32 on Linuxを多少やっていたので、
この流れのままANEもやりたいと思った次第です。
このようにすれば、ActionScriptに関わらず、JavaからもNative Extensionが共通化できますので、
単純とはいきませんが、かなりの部分でいろいろな所に使い回しができると思ったからです。
で、ANEに関しては全くよくわからないので、
FlashDevelop + GCCでANE入門
を参考にさせてもらいました。
でもって、私はLinuxもしくはMacでのクロスコンパイル環境なので、まずはMinGW32をインストールします。
といっても、yum(Linux)、MacPortsを使うのでインストールは簡単です。
私はCentOSでやりましたが、EPELのリポジトリを使ってMinGW32をインストールするので、Fedoraの方がなにも考えなくてもすみます。
Linuxの場合
yum install mingw32-¥*
Macの場合
port install i386-mingw32*
のようにインストールします。
これで、環境が整いました。
さて、ともにhello.cを用意してautoconf & automakeの環境を作ってみたのですが、
ここで、Macの方は、
checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for i686-strip... /opt/local/bin/i386-mingw32-strip checking for a thread-safe mkdir -p... ./install-sh -c -d checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for i686-gcc... /opt/local/bin/i386-mingw32-gcc checking whether the C compiler works... no configure: error: in `/Users/coltware/ane_work/anewin': configure: error: C compiler cannot create executables See `config.log' for more details
のようにエラーがでてconfigureが先に進みません。
logをみてどこが悪いのかはなんとなくわかりましたが、
解決するのが面倒そうなので、しょうがないのでgccのコマンドをたたいて作りました。
(といっても、まずは2回のみですが・・・)
Linuxの方は問題なかったので、やはり、
Windows版ANEはLinuxでの構築が自分にとっては良さそうです。
といってもMac上のVMWare FusionでのLinuxとWindowsなので一応ハードとしては1つですんでいます。
ちなみに、
#!/bin/sh MINGW=/usr/bin/i686-pc-mingw32 export CC=$MINGW-gcc export AR=$MINGW-ar export LD=$MINGW-ld export AS=$MINGW-as export NM=$MINGW-nm export RANLIB=$MINGW-ranlib export STRIP=$MINGW-strip export DLLTOOL=$MINGW-dlltool export WINDRES=$MINGW-windres ./configure \ --target=mingw32 \ --host=i686-pc-linux-gnu \ --host=i686-pc-linux-gnu
こんな感じにshellをつくってconfigureを実行しています。
ちなみに、作成されたdllは以下のようにして確認するとよいと思います。
objdump -p hello.dll | grep "DLL" DLL vma: Hint Time Forward DLL First DLL Name: Adobe AIR.dll DLL Name: KERNEL32.dll DLL Name: msvcrt.dll
これはLinuxいうlddみたいなもので、macではotoolというものがあるようです。
Windowsのファイルをみるにはこのobjdumpを使うとその代わりができるようです。
このまま、AndroidもsoでANEの作成までいければよいかなともっています。
ただ、Andoridでsoを使った際の
(これは、実際のARM上のハードの上で構築をしてみようと思っていますが・・・)
さて、ここからzlibとaprを使った外部ライブラリも使ってもうちょっと本格的なANEを作っていきたいと思います。
できれば、airxzipにzlibの処理を加えたいと思っているのですが・・・・
途中、手順や話が飛んでいるのは、まだ、きちんとまとまっていないので、
もうちょっと本格的なもののが作り込めたら、もう少しまとめて書き直すつもりです。
その他、参考
http://help.adobe.com/ja_JP/air/extensions/index.html
MacをWindowsから接続する場合には、VNCで接続できるのだが、
ディスプレイサイズの変更の方法がわからない。
アクセスするときは、1920*1080のディスプレイに、ノートPCから接続するので、
小さいディスプレイで大きな範囲を使うので非常に使いづらいなーと思っていた。
そこで、何かいいのはないのかなーと思っていたら・・
ちょっと、使えそうなのを見つけた。
iRAPPというのもですが、
まあまあ使えます。
これで$79という値段が微妙です。
自宅のMac miniもSSDに変更しました。
主に、Vaio Z(3世代くらい前)を使っていたのですが、
こちらも、SSDなのでかなり早いです。
Mac miniもこれでVaio Z並みに速度が追いつきました。
(スペック的にはこちらの方が上なのかもしれませんが、体感的には大してかわりません。)
最初のHDDから比べるとかなり改善しました。
しかし、よい環境とはなれると怖いものです。
ただ、少し違和感があるのが、何も音が聞こえない点です。
カリカリいっていると、動いているんだなーという感覚がありましたが、
あと、こういうことは、買ったときに自己満足と自己納得をするためのものですが・・・
一応、お約束のベンチマーク。
Results 426.62 System Info Xbench Version 1.3 System Version 10.7.2 (11C74) Physical RAM 8192 MB Model Macmini5,1 Drive Type M4-CT256M4SSD2 Disk Test 426.62 Sequential 259.82 Uncached Write 445.77 273.70 MB/sec [4K blocks] Uncached Write 350.07 198.07 MB/sec [256K blocks] Uncached Read 113.99 33.36 MB/sec [4K blocks] Uncached Read 656.50 329.95 MB/sec [256K blocks] Random 1191.76 Uncached Write 2104.62 222.80 MB/sec [4K blocks] Uncached Write 627.19 200.79 MB/sec [256K blocks] Uncached Read 2182.67 15.47 MB/sec [4K blocks] Uncached Read 1206.77 223.92 MB/sec [256K blocks]
ちなみに、VMWare fusion情のWindows7のWindowsエクスペリエンスインデックスでも
ハードディスクは7.9になりました。



