2012年1月31日火曜日

MI-5[spooks]の退場が激しい件

24話までみましたが、これまでのメインキャラの退場が激しいですな。
やっぱり、他の仕事に移りたいとか、イメージが固定化されるのがいやとか、そういう事情なんでしょうか?

にしても、その理由が、、、
トムはクビ、ゾーイはチリ送りwww

MI-5って実際にこういう組織なんでしょうかね?テムズハウスに常駐するのは数名からなるチームのみ。テムズハウスにどう出入りしてるのか謎www玄関から入っていったらモロバレでしょうし。
あと、尾行とか日頃の情報収集とかは下部組織の担当???
スパイものなだけに、どこまで実態に近いかまるでわからんわ><

2012年1月29日日曜日

回路作成時に持っていると重宝するもの

ハンダコテ握って久しぶりに電気回路をつくってみたのですが、時間の大半は、鉛フリーのヤニ入り半田との悪戦苦闘に費やしました><鉛フリーはんだなんて嫌いだ(´・ω・`)

この手の回路の自作で、持っていると便利なのになかなか売ってないなぁ、ってのがあります。ホームセンターの品揃えショボすぎ><

配線には、テフロンシースAWG32AWG28のより線ケーブルを使用しました。難燃ポリエチレンテフロンなので熱で縮まないのがいいです。千石電商で買いました。(間違ってたので修正><)

同じく配線にラッピングワイヤを使用しました。これもAWG28のテフロンシースで熱に耐えます。ラッピングツール(?)ですが、これもなかなか売っているところを見たことがないなぁ、、、1500円くらいだったかな?これもどちらも千石電商で購入。

鉛フリーはんだのヤニでコテ先がすぐに汚れてしまって熱が通らないので、クリーニングペースト(?)でこまめに綺麗にしながら作業しました。これはHAKKOの製品。会社にあるウェノール(だったかな)のペーストが具合が良くって欲しいんだけどどこで売っているんだろう。。。

ワイヤストリッパーは必需品ですね。AWG28よりももっと細いものに対応した物が欲しいところ。これはHOZANのAWG34までの対応品。

素焼きのベース。彫金用品として入手できます。ゴムの下敷きじゃ、溶けちゃいますからね。

arduinoでサンプルシールド作成

暇だったので、かねてから作っておきたかったarduinoのサンプルシールドを作ってみました。
市販のシールド、高いからね><



スイッチ(DC)
タクトスイッチは初歩中の初歩ですね。10KΩの抵抗でプルダウン。

arduinoで制御してのスイッチですが、ポートの電流でのリレー駆動は不安なので、2SC1815で電流を増幅してリレーを駆動します。僕が前に使ったMAX395使えばもっと楽か。


LED点灯
TIのTLC5940を使っています。TLC5940 1個で16個のLEDの定電流駆動の同時点灯が可能になります。
arduinoのライブラリは、こちらの古い方の(Multiplexでない方の)ライブラリを使うが吉(TLC5940を複数接続したときは、どっちがいいかわからないけど)。MUltiplexの方を使うとチカチカするので。

モータドライバ
東芝TA7279APを使ってみました。Hブリッジ×2だったかな?手頃なモータが手元になかったので動作未確認。エンコーダ付きのモータを組み合わせると割り込みでISR使っちゃうし、モータ駆動のPWMの周波数あげるとTLC5940の動作がおかしくなる??? 

これくらいできれば、DC電源で遊ぶには十分かな?回路図とサンプルコードも後で書いておかないと!僕はすぐ忘れるから。。。

2012年1月28日土曜日

SimuLinkの使い方

まだまだ使い始めて日が浅いけど、こんな感じ。
MATLAB文法は、ある程度知っていればおK。


ブロック図を書きます。
単純に、入力信号を5倍にして上限下限で区切って量子化してビットシフトして1次元ルックアップテーブルで値変換する、というもの。

言語をCに設定して生成させたコードがこれ。

void sample1_step(void)
{
  real_T u;
  u = sample1_P.Gain_Gain * sample1_U.In1;
  u = ldexp(rt_roundd_snf((u >= sample1_P.Saturation_UpperSat ?
              sample1_P.Saturation_UpperSat : u <= sample1_P.Saturation_LowerSat
              ? sample1_P.Saturation_LowerSat : u) /
             sample1_P.Quantizer_Interval) * sample1_P.Quantizer_Interval,
            (int32_T)sample1_P.ShiftArithmetic_Power2Exponent);
  u = floor(u >= 3.0 ? 3.0 : u <= 0.0 ? 0.0 : u);
  if (rtIsNaN(u) || rtIsInf(u)) {
    u = 0.0;
  } else {
    u = fmod(u, 4.294967296E+9);
  }

  sample1_Y.Out1 = sample1_P.Constant_Value[(uint32_T)u];
}

sample1_Pがパラメタ
sample1_Uが入力
sample1_Yが出力

で、それぞれ、以下のように定義される。

typedef struct {
  real_T In1;
} ExternalInputs_sample1;

typedef struct {
  real_T Out1;
} ExternalOutputs_sample1;

struct Parameters_sample1_ {
  real_T Gain_Gain;
  real_T Saturation_UpperSat;
  real_T Saturation_LowerSat;
  real_T Quantizer_Interval;
  real_T Constant_Value[4];
  int16_T ShiftArithmetic_Power2Exponent;
};

extern Parameters_sample1 sample1_P;
extern ExternalInputs_sample1 sample1_U;
extern ExternalOutputs_sample1 sample1_Y;

コンパイルのオプションがいっぱいあるので、一番組み込みやすいコードを吐くオプション設定がわからないけど、これくらいのコードを生成してくれるなら組み込みも容易です。

SimuLinkには、フィードバックループ等のブロック図作成用ブロックやfft等のDSP処理、各種数値演算(ARとか移動最小二乗法とか)が色々用意されているので、大抵の信号処理コードは簡単にできるんじゃないかな。

2012年1月26日木曜日

MATLABの囲い込みがひどい件

ちょっと使ってみたくなってダウンロードしてみようとすると「あとで電話するからな!」って脅されます。893かよ!!!

まぁ、それはそれとして、ちょっとSimuLinkを会社で使ってみて気に入りました。制御系のコードを書きたい場合に、ちょこちょこっとグラフを作ると、Cコードを吐き出してくれますから。まだ試してないけど、多分Windowsに容易に取り込める。
MATLABの方は文法覚えるのが(年取ったし)億劫で億劫でこまります。。。^^;;;

SimuLinkはArduinoに一応は公式に対応してます。他に入手容易な1チップマイコンだとdsPICにも。CortexM3/M4にも公式対応してくれると嬉しいよなぁ。

2012年1月24日火曜日

MI-5(spooks)

MI-5 (spooks) 13話にて。

あっれ~、どっかで見たような車がでてる~www



MR2(SW20)前期型っすね。まさかこんなところで見ることができるとは思わなかったよ。

2012年1月22日日曜日

Engineerのハンドラップ

Engineerって会社の商品、結構好きです。

ハンドラップ(ZC-76)買いました。


Engineerは隙間をつく商品展開がいいです。他にも、~3mmのドリルをモーターツールに取り付けるピンバイスアダプタとか。

2012年1月21日土曜日

パクトケース改 タバコケース

コンパクトケース(?)をもらったので、仕切りを削ってタバコケースにしてみた。
花王ソフィーナのケース。


6本しか入らないので、あまり吸わない人向けだな><
密閉されているわけではないのが難点。

パクトケースは、裏に穴が空いていないやつが狙い目。

一仕事終えて達成感

って、大物廃棄物を多摩の20リッターポリ袋に収まるようにグラインダーで切り落としてましたw

みなさん、不燃物指定の中に含まれないような^^;;;;;大物廃棄物ってどうしてるんでしょ???

ポリ袋3袋にどうにか収まって気分いいです♪

2012年1月20日金曜日

DLLinjection/Debug

アドバンスド大戦略のバイナリを改造したいなぁと思いつつも、すでにプログラミングから離れた僕にとって忘れてしまった技術も多いわけで。。。

既存のバイナリのとあるコードから、別途用意した自作のプロセスまたはDLLのコードを実行させる方法(呼び名があったんだけど、忘れてしまった><)にはいくつかあって、代表的な手法がDLLinjectionとDebugを使う手法だったと思う。

ということで、リハビリがてら、サンプルプログラムを作成しました。
今や時代遅れなWindowsXP 32bitでの動作確認です。アドバンスド大戦略自体、Win98が主流の時代のソフトですので許して><

こちら

DLLinjectionは結構おなじみ?
DLLを注入しておいて、IATに置かれたWin32の関数(MessageBoxAとか)のアドレスを、注入したDLLのアドレスに置き換えるってやつですね!

この関数でDLLをインジェクションして、
int LoadLibraryOnProcess(HANDLE hProcess, HANDLE hThread, char** LibData, int LibCount)
{
  /*
   * Client is started in a suspended state, so I patch it in memory
   * in such a way that it loads LoaderDLL.dll when resumed.
   * On NT4+ I allocate needed memory with VirtualAllocEx, and
   * on 9x I use free space in PE header, because VirtualAllocEx is
   * not implemented there. I can't use PE header space under all OSes
   * because XP does not allow writing there even after calling VirtualProtectEx.
   */
  
  unsigned char SaveStack[2] =
    {
      0x9c,                           /* 00 pushfd */
      0x60                            /* 01 pushad */
    };
  
  unsigned char PopStack[7] =
    {
      0x61,                           /* 00 popad */
      0x9d,                           /* 01 popfd */
      0xe9, 0x00, 0x00, 0x00, 0x00    /* 02 jmp oldeip */
    };
  
  unsigned char LoadLib[10] =
    {
      0x68, 0x00, 0x00, 0x00, 0x00,   /* 00 push "dll path" */
      0xe8, 0x00, 0x00, 0x00, 0x00    /* 05 call LoadLibraryA */
    };
  
  unsigned char CallFunc[13] =
    {
      0x68, 0x90, 0x90, 0x90, 0x90,   /* 00 push "function" */
      0x50,                           /* 05 push eax */
      0xe8, 0x90, 0x90, 0x90, 0x90,   /* 06 call GetProcAddress */
      0xff, 0xd0                      /* 11 call eax */
    };
  
  CONTEXT ctx;
  HINSTANCE Lib=NULL;
  int AllOk=TRUE, i=0;
  unsigned int Tmp=0, PatchBase=0, AsmSize=0, TextSize=0, AsmPos=0, TextPos=0;
  unsigned char *Patch=NULL;
  
  /* get the thread's info */
  AllOk=TRUE;
  ctx.ContextFlags=CONTEXT_FULL;
  AllOk&=GetThreadContext(hThread, &ctx);
  
  /* determine the patch size based on the opcodes and library text (names and functions) */
  AsmSize+=sizeof(SaveStack);
  for(i=0; i
    /* the even indices are the library name */
    /* the uneven indices are the function name */
    
    AsmSize+=sizeof(LoadLib);
    TextSize+=(unsigned int)(strlen(LibData[i])&0xFFFFFFFF)+1;
    
    if(LibData[i+1]!=NULL){
      AsmSize+=sizeof(CallFunc);
      TextSize+=(unsigned int)(strlen(LibData[i+1])&0xFFFFFFFF)+1;
    }
  }
  AsmSize+=sizeof(PopStack);
  
  /* get a patchbase. 0x400400 should always be alright */
  PatchBase=(unsigned int)(UINT_PTR)
    VirtualAllocEx(hProcess, 0, AsmSize+TextSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  if(!PatchBase){
    PatchBase = 0x400400;
  }
  
  Patch=malloc(AsmSize+TextSize);
  if(Patch==NULL){
    return FALSE;
  }
  
  /* build the patch data */
  memset(Patch, 0, AsmSize + TextSize);
  memcpy(Patch, SaveStack, sizeof(SaveStack));
  AsmPos+=sizeof(SaveStack);

  for(i=0; i
    memcpy(Patch+AsmPos, LoadLib, sizeof(LoadLib));
    
    /* "push" lib name, and lib name */
    Tmp=PatchBase+AsmSize+TextPos;
    memcpy(Patch+AsmPos+1, &Tmp, sizeof(Tmp));
    memcpy(Patch+AsmSize+TextPos, LibData[i], strlen(LibData[i]));

    /* the loadlibrary call */
    Tmp=(unsigned int)(UINT_PTR)
      GetProcAddress(GetModuleHandle("kernel32"), "LoadLibraryA")-(PatchBase+AsmPos+5)-5;
    memcpy(Patch+AsmPos+6, &Tmp, sizeof(Tmp));
    
    AsmPos+=sizeof(LoadLib);
    TextPos+=(unsigned int)(strlen(LibData[i])&0xFFFFFFFF)+1;
    
    /* build GetProcAddress-Call */
    if(LibData[i+1]!=NULL){
      memcpy(Patch+AsmPos, CallFunc, sizeof(CallFunc));
      
      /* "push" function name, and the function name */
      Tmp=PatchBase+AsmSize+TextPos;
      memcpy(Patch+AsmPos+1, &Tmp, sizeof(Tmp));
      memcpy(Patch+AsmSize+TextPos, LibData[i+1], strlen(LibData[i+1]));

      /* the getprocaddress call */
      Tmp=(unsigned int)(UINT_PTR)
GetProcAddress(GetModuleHandle("kernel32"), "GetProcAddress")-(PatchBase+AsmPos+6)-5;
      memcpy(Patch + AsmPos + 7, &Tmp, sizeof(Tmp));
      
      AsmPos+=sizeof(CallFunc);
      TextPos+=(unsigned int)(strlen(LibData[i+1])&0xFFFFFFFF)+1;
    }
  }

  memcpy(Patch+AsmPos, PopStack, sizeof(PopStack));

  Tmp=ctx.Eip-(PatchBase+AsmPos+2)-5;
  memcpy(Patch+AsmPos+3, &Tmp, sizeof(Tmp));
  
  /* write the patch */
  AllOk&=WriteProcessMemory(hProcess, (void *)(UINT_PTR)PatchBase, Patch, AsmSize+TextSize, 0);
  
  /* set the current eip to our patch */
  ctx.Eip=PatchBase;
  AllOk&=SetThreadContext(hThread, &ctx);
  
  free(Patch);
  return AllOk;
}
注入したDLLに用意しておいた関数を実行して置き換える。
void *HookImportedFunction(void *ImageBase, const char *Dll, const char *FuncName,
  int Ordinal, void *Function)
{
  DWORD oldProtect=0;
  void *PrevValue=NULL;

  IMAGE_DOS_HEADER        *idh=NULL;
  IMAGE_FILE_HEADER       *ifh=NULL;
  IMAGE_OPTIONAL_HEADER   *ioh=NULL;
  IMAGE_IMPORT_DESCRIPTOR *iid=NULL;
  
  IMAGE_THUNK_DATA *pThunk1=NULL, *pThunk2=NULL;
  IMAGE_IMPORT_BY_NAME *pname=NULL;
  
  unsigned short ordinal=0;
  char *name=NULL;

  /* ImageBase = (DWORD)GetModuleHandle(NULL); */
  idh=(IMAGE_DOS_HEADER *)ImageBase;

  /* idh->e_lfanew is the beginning of the PE header with the signature "PE" */
  ifh=(IMAGE_FILE_HEADER *)(UINT_PTR)
    ((unsigned int)(UINT_PTR)ImageBase+idh->e_lfanew+sizeof(IMAGE_NT_SIGNATURE));
  ioh=(IMAGE_OPTIONAL_HEADER *)(UINT_PTR)
    ((unsigned int)(UINT_PTR)ifh+sizeof(IMAGE_FILE_HEADER));
  iid=(IMAGE_IMPORT_DESCRIPTOR *)(UINT_PTR)
    ((unsigned int)(UINT_PTR)
     ImageBase+ioh->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
  
  /* set the entire IAT (IID + THUNKS) as READWRITE */
  VirtualProtect((void*)(UINT_PTR)((unsigned int)(UINT_PTR)ImageBase+
                                 ioh->DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].VirtualAddress),
ioh->DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].Size,
PAGE_READWRITE, &oldProtect);
  
  /* loop through the IID until it's over */
  while(iid->Name){

    /* if this is the IID of the dll we're after... */
    if(_stricmp(Dll, (const char*)(UINT_PTR)((unsigned int)(UINT_PTR)ImageBase+iid->Name))==0){

      pThunk1=(IMAGE_THUNK_DATA *)(UINT_PTR)
(iid->OriginalFirstThunk+(unsigned int)(UINT_PTR)ImageBase);
      pThunk2=(IMAGE_THUNK_DATA *)(UINT_PTR)
(iid->FirstThunk+(unsigned int)(UINT_PTR)ImageBase);


      /* loop through the IAT until it's over */
      while(pThunk1->u1.AddressOfData){

if(pThunk1->u1.Ordinal & 0x80000000){
 /* Imported by ordinal only: */
 ordinal=(unsigned short)(pThunk1->u1.Ordinal)&0xffff;
}else{
 /* Imported by name, with ordinal hint */
 pname=(IMAGE_IMPORT_BY_NAME *)
   ((DWORD)(UINT_PTR)(pThunk1->u1.AddressOfData)+(DWORD)(UINT_PTR)ImageBase);

 ordinal=pname->Hint;
 name=(char*)pname->Name;
}


if(name!=NULL && FuncName!=NULL && strcmp(name, FuncName)==0){
 // hook if found by name
 PrevValue=(void *)(UINT_PTR)pThunk2->u1.Function;
 pThunk2->u1.Function=(DWORD *)(UINT_PTR)Function;
 
}else if(ordinal==Ordinal){
 // hook if found by ordinal
 PrevValue=(void *)(UINT_PTR)pThunk2->u1.Function;
 pThunk2->u1.Function=(DWORD *)(UINT_PTR)Function;
}

pThunk1++;
pThunk2++;
      }
    }
    /* skip to the next IID */
    iid++;
  }

  return PrevValue;
}








 Debugの方は
  DebugActiveProcess(pi->dwProcessId);
でデバッグ状態にしておき、
     case LOAD_DLL_DEBUG_EVENT:
{
 SYSTEM_INFO SystemInfo;
 BOOL b;
 DWORD lpAddress;

          if(huser32==de.u.LoadDll.lpBaseOfDll){
   GetSystemInfo(&SystemInfo);
   lpAddress=(HookAddress/SystemInfo.dwPageSize)*SystemInfo.dwPageSize;
   b=VirtualProtectEx(pi->hProcess, (LPVOID)lpAddress, SystemInfo.dwPageSize,
      PAGE_EXECUTE_WRITECOPY, &OrgProtect);
   if(!b) goto DebugExit;

            b=ReadProcessMemory(pi->hProcess, HookAddress, &OrgOpeCode, 1, NULL);
            if(OrgOpeCode!=NewOpeCode){
              b=b&WriteProcessMemory(pi->hProcess, HookAddress, &NewOpeCode, 1, NULL);
            }
            if(!b) goto DebugExit;

            FlushInstructionCache(pi->hProcess, NULL, 0);
 }
}break;


で、バイナリの所望の位置を0xccに置き換えておいて、ブレークポイント例外発生したときに特定処理を実行し、またもとのコードに置き換えて元のコードを実行し、
   case EXCEPTION_BREAKPOINT: // @0xcc
     {
if((i=FindThreadInfo(de.dwThreadId))==0xffffffff)goto DebugExit;
ct.ContextFlags=CONTEXT_CONTROL;
if(!GetThreadContext(ThreadInfos[i].hThread, &ct)) goto DebugExit;
if(ct.Eip-1==HookAddress){

                  counter++;
                  SetSharedValue(counter);
                  
 ct.Eip--;
 if(!WriteProcessMemory(pi->hProcess, (void *)ct.Eip, &OrgOpeCode, 1, NULL)){
   goto DebugExit;
 }
 FlushInstructionCache(pi->hProcess, NULL, 0);
 ct.EFlags|=0x00000100;
 if(!SetThreadContext(ThreadInfos[i].hThread, &ct)) goto DebugExit;
}
ContinueStatus=DBG_CONTINUE;
     }break;
再び、0xccに書き戻す。


   case EXCEPTION_SINGLE_STEP:
     {
if((i==FindThreadInfo(de.dwThreadId))==0xffffffff) goto DebugExit;
if(!WriteProcessMemory(pi->hProcess, HookAddress, &NewOpeCode, 1, NULL)){
 goto DebugExit;
}
FlushInstructionCache(pi->hProcess, NULL, 0);
ct.ContextFlags=CONTEXT_CONTROL;
if(!GetThreadContext(ThreadInfos[i].hThread, &ct)) goto DebugExit;
ct.EFlags&=~0x00000100;
if(!SetThreadContext(ThreadInfos[i].hThread, &ct)) goto DebugExit;
ContinueStatus=DBG_CONTINUE;
     }break; 


うーん、トリッキーだなぁwww

2012年1月19日木曜日

MI-5 season1

最近DVD借りて見るのはコレ。またイギリスものかよ、、、ですが。。。
普段見慣れないイギリスの俳優さんたちですが、あ、この人見たことある~って人がボチボチと出てきました。

6話~7話のベタな展開にワロタw

ゾーイさんがかわいいですね!口元とかアゴ周りの輪郭とかいい感じ~♪

スパイモノって好きです。映画だと時間限られているために各キャラに感情移入するのは難しいので、たまにはシリーズ物を見るのもいいなっと思いました。

2012年1月17日火曜日

UltimaOnline久しぶりにログイン

カード払いだけは続けていたUO、カードの番号が変わっちゃって課金できないから家腐るぞって脅されたので久しぶりにログインしてみました。

もうだいぶ前に白熊乗れるだけのアカ年齢になったんだっけ、と入手して乗ってみた。
うーん、人少ないのは相変わらず?
すっかり忘れちゃったよなぁ。プチ再開するにはどっかのギルドでも入ってみたほうがいいんだろうか。

2012年1月15日日曜日

東京オートサロン

会社の同僚に誘われ行ってきました。
幕張 遠い>< 広い><
で足の付根と足の裏が痛いです(´・ω・`)

僕の好きな90年代の車は相手にされてないので、見るべきところはあまり無かったのですが^^;;;
覚えているのは、コンパニオンのネーちゃんといってもきれいどころはあんまりいないのね、ってことかなwww

2012年1月9日月曜日

爪みがき

女の子の爪を拝見することもよくあるのですが^^;;;モデラーからすると、センスいまいち、に感じることも多いです(´・ω・`)

ネイルサロンで働いているよって子の爪を見ると、つけ爪が本人の爪と違和感なくついていて綺麗なんだけど、チップの発色やパール/ラメがちょっとチープで残念に思ったり^^;;;粒子が粗いのですよね。モデラーの場合、塗料やパール/ラメの値段を知っているので、それをさらにマニキュアやチップに製品化したときの値段もおおよそ察することができてしまう。チップとしては高いんだろうけど、原価としてはそんなに高くないよね、みたいな。

ネイルサロンでどういうメニューがあるのか僕はよく知らないけど、つけ爪なしで僕の好みの順位を付けると、


1. 表面未処理+マニキュア
表面が荒れている上に塗ってもだめでしょう。マニキュアも低級品だと安っぽさだけが強調されてしまう。これが最悪。
2. 何も処理していない
小中学生ならなにもしなくても綺麗なんだろうけど、さすがに20代越すあたりからシワが寄ったりして表面が汚くなるんですよね。20代~でこれじゃぁねぇ、って感じ。
3. 軽く表面処理
爪のシワを軽く落とす感じでの処理。悪くはないけど、華はないよね。もともとの爪が美しい子の場合には、もったいなく思います。
4. 表面処理+マニキュア
最低ライン?遠目に見て問題はないんだけど、って感じ。近くで見ると、塗りが汚かったり、塗料の発色が悪かったりで粗が見えたりすると萎えて3.より下にランクダウン。見苦しいからマニキュアは落としてくれって感じ。
5. 表面処理+マニキュア+表面処理(メンテ)
こってり系のマニキュアのつやは好みでないです。軽くつやをおとしてしっとり艶にする感じでメンテしてほしいなぁと出来の悪い4.の爪を見て思うのです。
6. 表面処理(鏡面仕上げ)のみ
これが僕の一番の好み。遊び要素が欲しければ、5.にすぐに移れるし。でも爪は傷つきやすいので、マニキュアコートした5.が実用的にはオススメかな。

僕自身、きれいな爪ですねと言われることが多く、ハズカシイです。。。(3.かな)
これには理由があって、趣味で塗装したときにシンナーじゃ塗装がきれいに落ちないから(特にウレタン塗料だと)紙やすりで剥がしているんですよ><っていちいち説明しなきゃならない(´・ω・`)

で、自分の爪も試しにちょっと磨いてみました。
やり方としては、
・紙やすり#800で水研ぎ
爪は柔らかいので、紙やすりがすぐに目詰まりしますね。爪を削り過ぎると、伸びたときに段差が強調されてしまう失態は普段の塗装落としで経験積みなので、#1000~#1200あたりで慎重に研いだほうがいいかもしれない。特に伸びはじめの新しい爪の部分は慎重に!
爪は柔らかく、爪の下の肉が更に柔らかいので、一度段差がつくと、それを修正するのが難しくなります。
・鏡面コンパウンドで磨き
ミニカーの研ぎ出しと要領は同じですね。爪はやわらかいので、強くゴシゴシこすると、かえって表面が荒れてしまいます。かるーく、かるーく、仕上げにコシコシ泣くくらいの強さで磨きます。


両手で多分30分程度の所要時間かな。バイトしたいw

2012年1月8日日曜日

サイフォン

戦う司書のこのシーンが気に入って、買ってみた。

HARIOのミニフォン。

ホント、一杯分しかできません^^;;;
アルコールとして、とりあえず手持ちにある消毒用エタノールを使用したのですが、30分たってもお湯が上のカップに上がりきらない><燃料用メタノールのほうがよかったのかな。。。
イメージとしては、沸騰したところで上のカップにツーっと上がるはずなのですが、全く上がらず><
むちゃくちゃ濃ゆいコーヒーが出来上がりましたw
うーむ、もうちょっと使い込んだり調整が必要なのかもしれないなぁ。あと、最初っからお湯入れたほうがいいですね!

2012年1月5日木曜日

バンド・オブ・ブラザース バストーニュ

IV号H?VI号Eはプライベートライアンでも使ったやつ?

88mm対戦車砲(かな?)、最強。。。

アドバンスト大戦略ではヴァハトアムラインがバルジの戦いか。僕は天候オフでやってたからなぁ^^;;;;

2012年1月4日水曜日

MR2バッテリー切れからの復帰

3ヶ月くらい露天駐車場にほったらかしでした。
一度、ルームランプつけっぱなしでバッテリー上がりにしてしまい、その後保険のサービス呼んで復帰させたものの、またバッテリー上がり、バッテリーを家に持って帰りチャージャーに1日ほどつけっぱなしにして充電しておいたら壊れました><
仕方ないのでオートバックスにいって一番安い奴(っていっても14000円した><)を買ってきて復帰。

Fiat500のったら、小気味よく走れるMT車がむちゃくちゃ楽しかったのですよね。
通勤には、またしばらくMR2を使おうっかなぁ(*´ω`*)

FIAT 500

実家帰ったときに、友人に運転させてもらいました。
右ハンドル5速MT。
しばらく市街道路を走ってクラッチのつながりを確認したところで山道へ。

ギアチェンジが楽しくてたまらないです(*´Д`)

無意味にギアチェンジしまくりでした(助手席の友人の目が気になりましたが^^;)
100馬力程度ですが、大人二人乗せても全然ローパワーには感じませんでしたねぇ。上り坂を苦も無く走れました。僕の劣化MR2と感覚的に変わらなかったり(´・ω・`)

ヒールアンドトウを試すほどの速度からの減速はさすがにやると怒られそうだったのでやめときましたが、道なりにスコスコとダブルクラッチ踏んで楽しめました。ギアのつながりがよかったですね。ちょっと不満な点は、シートポジションが高くてクラッチを横に押す感じでなく下に踏み込む感じなところでしたが、軽快に街を走って楽しむ車ですからね!