2012年12月16日日曜日

Windows 8にアップグレード & SSDに引っ越し

TEST用のWin7のPC、
マザボがGIGABYTEのH55M-D2H

ディスクドライブ
HDD 1TB (システム予約領域:100MB C:112GB E:416GB F:402GB)
SSD 240GB

ソフトの再インストールや設定がめんどくさい & 年末で時間がもったいないので、
Win8にアップグレード後、SSDに起動ドライブを引っ越した際の作業内容のメモ

「SSDって何?」から開始したはず

【手順】
■Win8にアップグレード
CCleanerでCドライブのごみ掃除 使用領域が60GB -> 40GBに減ったはず
アップグレードアシスタントで×印の付いたソフトをアンインストールした気がする
Windows 8のディスクをDVDドライブに入れてセットアップ
特に問題無かったはず(約1時間~2時間)

■SSDへの引っ越し
SSDを、なんとかして接続
MiniTool Partition Wizard Home Edition 7.6.1を実行
システム予約領域とCドライブをSSDにコピー後に、Applyボタンを押す
再起動後の、ブート中に HDD -> SSDにコピーされた
コピー中に経過時間の表示があった、

SSDにコピーされているのを確認したらシャットダウン
HDDのSATAの接続ケーブルを外しておく

MBRを作成
Win8をDVDからブートさせて、システムの修復を選択
コマンドプロンプトを起動させて、bootrecコマンドを使用
bootrec /fixmbr
bootrec /fixboot
bootrec /ScanOs スキャン結果が出たらアップグレードしたWindowsを選択
bootrec /RebuildBcd
exit 後 PCの電源OFF

電源ON -> SSDでブートできたらOK
電源OFF HDDのSATAケーブルを接続
電源ON BIOSでHDDのブート優先順位 SSDを上にする
"Windows の修復なんとか"が 英文から日本語に切り替わった ! ?
"修復 し よ う としています" の画面が5分くらい表示されてた

Windows 8が起動したら 窓+E でハードディスクをチェック
C, E, Fドライブが表示されて、HDDのシステム予約領域とCドライブは見えなくなっていた
SSDのシステム予約領域とCドライブを最適化しておく

以上で作業終了

一番疲れたのがSATAケーブルの抜き差し
グラボを外さないと 手が・・届かない・・ ラジオペンチで解決

EaseUS Todo Backup、EaseUS Partition Masterでコピーしても、うまくいかなかった?


SSD ガリガリ音が無いので静か、アプリの起動が早くなった気がする

2012年12月8日土曜日

Android Walkman NW-F805のテスト 1

本体の裏を見ると、下側の左上にDIGITAL MEDIA PLAYERと記載されているのが
「何コレ?」

電車内でポケットに入るサイズの端末(電話嫌いなので、携帯電話はない)で、
ソースコードを無料で見るために、1週間テストした感想ですが、

(a). 本体上部の左側にある電源ボタンが押しにくい
(b). タッチパネルの反応がおかしい 「押してないよ!」
(c). なんとなく持ちにくい 片手で操作できない
(d). iPod Touch 5thより表示面積が小さいのに重い
(e). Androidに無料で、普通に使えるテキストビューアが無い?
(f). iOSでもテキストビューア無い?

(e)が問題、文字化け、50KB程度のファイルで固まる、複数ファイルを開けない・・・
使えるアプリが無い・・・
920 Text Editor が使えそうなんだけど200KBのテキストを開くと重い
https://github.com/jecelyin/920-Text-Editor にソースがあり
落として、Eclipseでビルドして動作確認 SDKなどのUpdateがめんどくさい、
JecEditText::drawView() でテキストを描画しているみたい
jniでgrep, syntax highlight, Universal Character Set Detector C Library
うーん、どうしようかなー。

(f)もあれだ、林檎教にお布施をしないとアプリが開発できない そういえば脱獄があった
あっ、XcodeするのにMac OSがいる・・・

おっ、ダクソ2が出るーーーーー
センの古城~アノールロンド突破がおもしろかった、
360のアジア版を買って連日朝までだった気がする。

2012年12月2日日曜日

iPod touch 5thで動画再生のテスト

をしていたらフリーズしました。

■フリーズした場合 電源とホームボタンを同時に長押しすると再起動するはず

■PCに接続するとitunesが起動して何かするのをやめさる方法
編集/設定/デバイスから xxxのiPod touch を選択
「iPod、iPhone、およびiPadを自動的に同期しない」

それにしても薄い&軽い

2012年11月4日日曜日

PCL メッシュの再構築のテスト2

pcl::GreedyProjectionTriangulationのテスト

入力元の点群


フィルタリング結果


再構築結果

残念、欠けている部分がちらほらとある



pcl::GreedyProjectionTriangulationのテスト

#include <stdio.h>
#include <boost/thread/thread.hpp>
// pcl
#include <pcl/point_cloud.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/features/normal_3d.h>
#include <pcl/surface/gp3.h>


// PCLVisualizer のテスト
void TestCloudViewer003(const char* pFilePath)
{
  // テキストファイルから頂点を取得
  FILE* fp = fopen(pFilePath, "rt");
  
  int n;
  char buf[256];
  fscanf(fp, "%s %d", buf, &n);

  int num = n;

  // 点群の作成
  pcl::PointCloud::Ptr cloud( new pcl::PointCloud );

  cloud->width = num;
  cloud->height = 1;
  cloud->points.resize( cloud->width * cloud->height );

  int txtFmt = 1;
  float x, y, z;
  for(int i = 0; i < num; i++)
  {
    switch(txtFmt) {
    case 0:
      fscanf(fp, "%f %f %f", &x, &y, &z);
      break;
    case 1:
      fscanf(fp, "%f, %f, %f", &x, &y, &z);
      break;
    }
    cloud->points[i] = pcl::PointXYZ(x, y, z);
  }
  fclose(fp);

  // 点群の削減

  // フィルタリング結果の格納用
  pcl::PointCloud::Ptr filtered_cloud( new pcl::PointCloud );

  // ボクセルグリッドで点群のフィルタリングを行う
  pcl::VoxelGrid sor;
  sor.setInputCloud (cloud);
  sor.setLeafSize(1.0f, 1.0f, 1.0f);
  sor.filter(*filtered_cloud);

  // 点群の数を出力
  printf("source cloud size = %d\n", cloud->size());
  printf("filtered cloud size = %d\n", filtered_cloud->size());

  // 元データ
  pcl::PointCloud::Ptr src_cloud = filtered_cloud;

  pcl::PolygonMesh polyMesh;

  // KdTreeを作成
  pcl::search::KdTree::Ptr tree(new pcl::search::KdTree);
  float epsilon = tree->getEpsilon();
  tree->setEpsilon(0.01f);
    tree->setInputCloud(src_cloud); 

  // 法線ベクトルの推定
  pcl::NormalEstimation ne; 
    ne.setInputCloud(src_cloud); 
    ne.setSearchMethod(tree); 
    ne.setKSearch(8);

  // 法線ベクトル格納用
  pcl::PointCloud::Ptr norm(new pcl::PointCloud); 
    ne.compute(*norm);

  // 座標と法線ベクトルの点群
  pcl::PointCloud::Ptr clPosNormal(new pcl::PointCloud);
    pcl::concatenateFields(*src_cloud, *norm, *clPosNormal); 

  // ↓今回のテスト対象
  pcl::GreedyProjectionTriangulation gpt;

  pcl::search::KdTree::Ptr tree2 (new pcl::search::KdTree);
    tree2->setInputCloud(clPosNormal); 

  // パラメータをいろいろ設定
  gpt.setSearchRadius(20.0);
  gpt.setMu(2.5);
  gpt.setMaximumNearestNeighbors (150);
//  gpt.setMaximumSurfaceAngle(M_PI/4);
//  gpt.setMinimumAngle(M_PI/18);
//  gpt.setMaximumAngle(2*M_PI/3);
//  gpt.setNormalConsistency(false);

  // 入力データ等をセット
  gpt.setInputCloud (clPosNormal);
  gpt.setSearchMethod (tree2);

  // 再構築
  gpt.reconstruct (polyMesh);

  // 点群のビューア
  pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
  
  viewer.setBackgroundColor (0.0, 0.2, 0.6);

  // 原点に座標軸を追加
  viewer.addCoordinateSystem(100.0, 0.0, 0.0, 0.0);

  // カメラ座標のセット
  double camPos[] = { 0.0, 60.0, 350.0 };
  double camLookAt[] = { 0.0, 60.0, 0.0 };
  double camUp[] = { 0.0, 1.0, 0.0 };
  viewer.setCameraPose(camPos[0], camPos[1], camPos[2], 
    camLookAt[0], camLookAt[1], camLookAt[2], camUp[0], camUp[1], camUp[2]);

  // ビューアに点群を追加
//  viewer.addPointCloud(filtered_cloud);
  viewer.addPointCloud(cloud);

  // ビューアにポリゴンメッシュを追加
//  viewer.addPolygonMesh(polyMesh);

    while (!viewer.wasStopped ())
    {
    viewer.spinOnce(10);

    boost::this_thread::sleep (boost::posix_time::microseconds (100000));
    }
}

int main(int argc, char** argv)
{
  TestCloudViewer003(argv[1]);

  return 0;
}

2012年10月28日日曜日

PCL メッシュの再構築のテスト1

input cloud からポリメッシュを作成するテスト (失敗例)

入力した点群↓





実行結果が↓の画像


テスト結果 何かが変? 何だチミは?


Point Cloud Library(v1.6.0)のテスト

#include <stdio.h>
#include <boost/thread/thread.hpp>

#include <pcl/point_cloud.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/features/normal_3d.h>
#include <pcl/surface/marching_cubes_hoppe.h>

// PCLVisualizer のテスト
void TestCloudViewer003(const char* pFilePath)
{
 // テキストファイルから頂点を取得
 FILE* fp = fopen(pFilePath, "rt");
 
 int n;
 char buf[256];
 fscanf(fp, "%s %d", buf, &n);

 int num = n;

 // 点群の作成
 pcl::PointCloud::Ptr cloud( new pcl::PointCloud );

 cloud->width = num;
 cloud->height = 1;
 cloud->points.resize( cloud->width * cloud->height );

 int txtFmt = 1;
 float x, y, z;
 for(int i = 0; i < num; i++)
 {
  switch(txtFmt) {
  case 0:
   fscanf(fp, "%f %f %f", &x, &y, &z);
   break;
  case 1:
   fscanf(fp, "%f, %f, %f", &x, &y, &z);
   break;
  }
  cloud->points[i] = pcl::PointXYZ(x, y, z);
 }
 fclose(fp);

 // 点群の削減

 // フィルタリング結果の格納用
 pcl::PointCloud::Ptr filtered_cloud( new pcl::PointCloud );

 // ボクセルグリッドで点群のフィルタリングを行う
 pcl::VoxelGrid sor;
 sor.setInputCloud (cloud);
 sor.setLeafSize(1.0f, 1.0f, 1.0f);
 sor.filter(*filtered_cloud);

 // 点群の数を出力
 printf("source cloud size = %d\n", cloud->size());
 printf("filtered cloud size = %d\n", filtered_cloud->size());

 // 元データ
 pcl::PointCloud::Ptr src_cloud = filtered_cloud;

 pcl::PolygonMesh polyMesh;

 // KdTreeを作成
 pcl::search::KdTree::Ptr tree(new pcl::search::KdTree);
 float epsilon = tree->getEpsilon();
 tree->setEpsilon(0.01f);
    tree->setInputCloud(src_cloud); 

 // 法線ベクトルの推定
 pcl::NormalEstimation ne; 
    ne.setInputCloud(src_cloud); 
    ne.setSearchMethod(tree); 
    ne.setKSearch(8);

 // 法線ベクトル格納用
 pcl::PointCloud::Ptr norm(new pcl::PointCloud); 
    ne.compute(*norm);

 // 座標と法線ベクトルの点群
 pcl::PointCloud::Ptr clPosNormal(new pcl::PointCloud);
    pcl::concatenateFields(*src_cloud, *norm, *clPosNormal); 


 // ↓今回のテスト対象
 pcl::MarchingCubesHoppe mc;  

 pcl::search::KdTree::Ptr tree2 (new pcl::search::KdTree);
    tree2->setInputCloud(clPosNormal); 

 mc.setSearchMethod(tree2); 
 mc.setInputCloud(clPosNormal); 
 mc.setIsoLevel(0.0015); // 0.0 ~ 1.0
 mc.setGridResolution(50, 50, 50); 

 // 再構築
 mc.reconstruct(polyMesh); 


 // 点群のビューア
 pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
 
 viewer.setBackgroundColor (0.0, 0.2, 0.6);

 // 原点に座標軸を追加
 viewer.addCoordinateSystem(100.0, 0.0, 0.0, 0.0);

 // カメラ座標のセット
 double camPos[] = { 0.0, 60.0, 350.0 };
 double camLookAt[] = { 0.0, 60.0, 0.0 };
 double camUp[] = { 0.0, 1.0, 0.0 };
 viewer.setCameraPose(camPos[0], camPos[1], camPos[2], 
  camLookAt[0], camLookAt[1], camLookAt[2], camUp[0], camUp[1], camUp[2]);

 // ビューアに点群を追加
 viewer.addPointCloud(filtered_cloud);
// viewer.addPointCloud(cloud);

 // ビューアにポリゴンメッシュを追加
 viewer.addPolygonMesh(polyMesh);

    while (!viewer.wasStopped ())
    {
  viewer.spinOnce(10);

  boost::this_thread::sleep (boost::posix_time::microseconds (100000));
    }
}

int main(int argc, char** argv)
{
    TestCloudViewer003(argv[1]);

    return 0;
}

2012年9月17日月曜日

C# TextFieldParser

参照設定にMicrosoft.VisualBasicを追加


TextFieldParserのテスト

using Microsoft.VisualBasic.FileIO;

public void TestTextFieldParser(String path)
{
    System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis");
    
    TextFieldParser parser = new TextFieldParser(path, enc);

    // タブ区切り
    parser.SetDelimiters("\t");
    
    // コメントのトークンをセット
    parser.CommentTokens = new String[] { "//", "'" };

    // データの終わりまで処理する
    while(parser.EndOfData != true)
    {
        // 現在の行を処理して次の行に進める
        string[] splittedResult = parser.ReadFields();

        // 行数を取得
        long lineNum = parser.LineNumber;

        //出力ウィンドウに出力
        foreach (string output in splittedResult) {
            if(output.Length > 0) {
                System.Diagnostics.Debug.Print(output);
            }
        }
    }
}

2012年6月24日日曜日

C++/CLI テキストの置換

main.cpp

using namespace System;

// テキストファイルを開いて文字列置換を行うテスト
void ReplaceText(String^ path, String^ strOld, String^ strNew)
{
  if (!IO::File::Exists(path)) return;

  Text::Encoding^ enc = Text::Encoding::GetEncoding("shift_jis");

  // テキストファイルの読み込み
  IO::StreamReader^ sr = gcnew IO::StreamReader(path, enc);
  String^ textInput = sr->ReadToEnd();
  sr->Close();

  // 置換する
  String^ textOutput = textInput->Replace(strOld, strNew);

  // テキストファイルの書き込み
  IO::StreamWriter^ sw = gcnew IO::StreamWriter(path, false, enc);
  sw->Write(textOutput);
  sw->Close();
}

int main(array ^args)
{
  if(args->Length == 3) {
    ReplaceText(args[0], args[1], args[2]);
  }
    return 0;
}