Chrome OS Flex をWindows Vista時代のパソコンにインストール FRDS330120WA Frontier フロンティア神代


10年以上前に買って今では銀行ファームバンキングのモデムアクセスマシンとして使っていたフロンティアのパソコンがファームバンキングサービスの終了で不要になりました。 もちろんネットに接続すればブラウザマシンとして使えますが、OSがVISTAなのでセキュリティー的に問題があります。

ここで古いPCにインストールすれば最新セキュリティで安心して使えると言われている Chrome OS Flexを試してみました。

結果はとりあえずインストールと起動が出来ました。ブラウザも動作し、YouTube動画も見れました。 しかし、動画は時々コマが飛ぶ感じです。そのためパフォーマンス的には問題あるかもしれません。

どうしてもパソコンが欲しいという用途なら使えそうですが、他にパソコンやタブレットを持っている人は無理して使わなくても良いと考えます。

ウチではインストールして使う事を確認した後はリサイクルショップにジャンクとして販売してしまいました。 まあ、10年使えば十分なのではと考えます。


インストール手順は

  1. 8G程度のUSBフラッシュメモリーを準備
  2. 手持ちのPCのChromeブラウザから追加機能で Chrome OS Flexをインストール
  3. その指示でUSBフラッシュメモリーにインストールメディアを作成する。
  4. 目的のPCをUSBドライブで起動できるようにして指示に従いインストールする。ハードウェアの種類は Google → Chrome OS Flexを選びます
PCのスペックは
  • メーカー Frontier フロンティア神代
  • 型式 FRDS330120WA (FRDS3301/20WA)
  • CPU Intel Celeron Dual-Core E1200 1.6GHz
  • SSD 120GB
  • メモリ 2048MB
  • ビデオカード nVidia の安い物(メモ忘れました)
これで終了です。Windowsなどのインストールに慣れている人であれば特に面倒は無いと考えます。

G++でコンパイル、ビルドできるwindowsプログラム

 今では開発環境が充実しており「簡単に」ウィンドウプログラムを開発することが出来ます。しかし、生成されるプログラムは色々なDLLやコンポーネントが必要であることが多いです。ビルドすると色々なファイルが生成されるわけです。

ただ、こちらとしては一個のEXEファイルだけで十分なわけです。今回はそのニーズにこたえるコードを説明します。

このコードは簡易的なテキストエディタです。元々はChatGPTに作成してもらった、単機能なものです。コピペ、簡単な編集、表示内容の拡大縮小が出来ます。通信や管理できない領域へのデータ保存は一切していないので安心です。

実用品としても十分使えますが、簡易的な開発実験も出来るファイルだと考えます。以下がソースコードです。

  1. #include <windows.h>
  2. /*
  3. メモ代わりに使える通信機能も保存機能もないエディタです。
  4. パスワードやメモなどセキュリティー的に危ない物を一時的に保管するのに役立ちます。
  5. G++で各自がコンパイルすれば危ない機能とか事前に確認できます。
  6. 試用する前にコードレビューも出来るので安心して使ってください。
  7. コンパイル・ビルド方法
  8. g++ -o hoge.exe piyo.cpp -mwindows
  9. */
  10. // メニューアイテムのID
  11. #define IDM_FONT_SIZE_INCREASE 101
  12. #define IDM_FONT_SIZE_DECREASE 102
  13. #define IDM_ALLSELECT 103
  14. //定数
  15. #define FONT_SIZE_MIN 10
  16. #define FONT_SIZE_MAX 100
  17. //アクセラレーターテーブル
  18. ACCEL accel[] = {
  19.   { FCONTROL | FVIRTKEY, 'W', IDM_FONT_SIZE_INCREASE },
  20.   { FCONTROL | FVIRTKEY, 'S', IDM_FONT_SIZE_DECREASE },
  21.   { FCONTROL | FVIRTKEY, 'A', IDM_ALLSELECT },
  22.  };
  23. // フォントサイズを変更する関数
  24. void ChangeFontSize(HWND hTarget,HFONT *pfFont,int delta) {
  25.     LOGFONTW lf;
  26.     GetObjectW(*pfFont, sizeof(LOGFONTW), &lf);
  27.     lf.lfHeight += delta;
  28.     if (lf.lfHeight < FONT_SIZE_MIN) {
  29.         lf.lfHeight = FONT_SIZE_MIN;
  30.     }
  31.     if (lf.lfHeight > FONT_SIZE_MAX) {
  32.         lf.lfHeight = FONT_SIZE_MAX;
  33.     }
  34.     DeleteObject(*pfFont);
  35.     *pfFont = CreateFontIndirectW(&lf);
  36.     SendMessageW(hTarget, WM_SETFONT, (WPARAM)*pfFont, TRUE);
  37. }
  38. // ウィンドウプロシージャ
  39. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  40. static HWND hEdit;
  41. static HMENU hMenu;
  42. static HFONT hFont;
  43.     
  44.     switch (uMsg) {
  45.         case WM_COMMAND:
  46.             // メニューアイテムが選択された場合
  47.             switch (LOWORD(wParam)) {
  48.                 case IDM_FONT_SIZE_INCREASE:
  49.                      ChangeFontSize(hEdit,&hFont,2);
  50.                     break;
  51.                 case IDM_FONT_SIZE_DECREASE:
  52.                      ChangeFontSize(hEdit,&hFont,-2);
  53.                     break;
  54.                 case IDM_ALLSELECT:
  55.                      SendMessage(hEdit, EM_SETSEL, 0, -1);
  56.                     break;
  57.             }
  58.             break;
  59.         case WM_CREATE:
  60.             // エディットコントロールを作成
  61.             hEdit = CreateWindowExW(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
  62.                                     10, 10, 400, 300, hwnd, (HMENU)0, GetModuleHandleW(NULL), NULL);
  63.  // メニューを作成
  64.             hMenu = CreateMenu();
  65.             AppendMenuW(hMenu, MF_STRING, IDM_FONT_SIZE_INCREASE, L"拡大 ctrl+W");
  66.             AppendMenuW(hMenu, MF_STRING, IDM_FONT_SIZE_DECREASE, L"縮小 ctrl+S");
  67.             AppendMenuW(hMenu, MF_STRING, IDM_ALLSELECT, L"全選択 ctrl+A");
  68.             SetMenu(hwnd, hMenu);
  69.             // デフォルトフォントを設定
  70.             hFont = CreateFontW(32, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,
  71.                                 CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Arial");
  72.             SendMessageW(hEdit, WM_SETFONT, (WPARAM)hFont, TRUE);
  73.             break;
  74.         case WM_SIZE:
  75.              // ウィンドウサイズが変更された場合、エディットコントロールも調整
  76.             MoveWindow(hEdit, 10, 10, LOWORD(lParam) - 20, HIWORD(lParam) - 20, TRUE);
  77.             break;
  78.         case WM_DESTROY:
  79.             // 終了時にメモリを解放
  80.             PostQuitMessage(0);
  81.             break;
  82.         default:
  83.             return DefWindowProcW(hwnd, uMsg, wParam, lParam);
  84.     }
  85.     return 0;
  86. }
  87. // エントリーポイント
  88. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
  89.     
  90.     // ウィンドウクラスの登録
  91.     WNDCLASSW wc = {0};
  92.     wc.lpfnWndProc = WindowProc;
  93.     wc.hInstance = hInstance;
  94.     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  95.     wc.lpszClassName = L"SimpleEditWindowClass";
  96.     RegisterClassW(&wc);
  97.     //アクセラレーターテーブルの作成
  98.     HACCEL hAccel = CreateAcceleratorTableA(accel,sizeof(accel)/sizeof(accel[0]));
  99.     
  100.     
  101.     // ウィンドウの作成
  102.     HWND hwnd = CreateWindowExW(0, L"SimpleEditWindowClass", L"シンプルテキストメモ", WS_OVERLAPPEDWINDOW,
  103.                                 CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);
  104.     // ウィンドウ表示
  105.     ShowWindow(hwnd, nCmdShow);
  106.     UpdateWindow(hwnd);
  107.     // メッセージループの処理(アクセラレーターテーブルの処理付)
  108.     MSG msg;
  109.    while (GetMessage(&msg, NULL, 0, 0))
  110.     {
  111.         if (!TranslateAccelerator(hwnd, hAccel, &msg))
  112.         {
  113.             TranslateMessage(&msg);
  114.             DispatchMessage(&msg);
  115.         }
  116.     }    
  117.     
  118.     return static_cast<int>(msg.wParam);
  119. }

このコードを「hoge.cpp」という名前で保存してから、「g++ -o hoge.exe piyo.cpp -mwindows」でコンパイル、ビルドすると piyo,exe が作成されます。その実行ファイルを開くことで簡易的なテキストエディタを表示させることが出来ます。

ぜひ、プログラミングの入門として活用してみて下さい。コードの追加も普通なCやC++の知識で可能です。分からない人は以下の本で勉強してみて下さい。

クリップボードの空白行を削除するコマンドレット ショートカット

 空白行など無駄な行を削除するのが面倒だと思っていませんか?こんな時に便利なショートカットの作り方を紹介します。これを作っておけばコピーしてショートカットを実行するだけで、無駄な行が削除されます。

ああああああああああああああ
いいいいいいい
うううう

えええええええ

おおおおお

こんな文章があった場合に、コピーして実行すると

ああああああああああああああ
いいいいいいい
うううう
えええええええ
おおおおお

このように無駄な行が削除されます。便利です。

ショートカットの作り方は、デスクトップなどで右クリックして「新規作成、ショートカット」を選び、場所の入力で以下のコードを入れてください。

powershell -NoLogo -Command "& {Get-Clipboard |Where-Object { $_ -notmatch '^\s*$' }  | Set-Clipboard}"

これで文書をコピーして、実行した後に張り付けてください。

今日の日付や今の日時をコピペしたい場合(Powershell ショートカット)

 今日の日付や今の時刻を入力したい場合に自分で手打ちしていないでしょうか?これは面倒だし、ミスもあります。そもそも、コンピュータを使っているのだからそういう作業は自動化させてみることをおすすめします。

方法は非常に簡単です。右クリックメニューでショートカットの作成を選択して。項目の場所という項目に以下を入れるだけです。

powershell.exe -NoLogo -Command "& {(Get-Date -Format 'yyyy年MM月dd日hh時mm分ss秒') | Set-Clipboard}"

これで、ショートカットを作成し、わかりやすい名前で保存すれば準備完了です。その後に、日付や日時を取得したい場合はそのショートカットを実行して下さい。日付や時刻がコピーされますので後は貼り付けて下さい。

今回のサンプルでは年月日と時分秒が日本語の単位付きで表示されていますが、コードの修正で好きなように出来ます。秒が要らない場合、単位が要らない場合など色々な対応が可能です。

応用例

間違えなく日付を入力したい場合はもちろん、重複しないファイル名を作りたい場合に役立ちます。人の作業であれば、このショートカットで秒まで入れれば重複は考えられません。

今回のショートカットはPowershellという仕組みを利用しています。Windows標準の仕組みなので会社でも問題なく使えると考えます。

AmazonでPowershell

ボイスメモを簡単にパソコンに転送する方法 iTunes 社外アプリ不要 必要なものはカメラコネクションキット iOS iPhone


ボイスメモのファイルをパソコンに転送するのは意外に手間がかかります。iTunesを使う方法が紹介されますが正直挙動が良く分かりません。 社外アプリも便利ですが、アドウェアや良くわからない課金システムでインストールするのが怖いです。

今回の方法は、『カメラコネクションキット』を使ってメモリカードにコピーする方法です。カメラコネクションキットは必要ですが、Apple認証の社外品であれば千円程度で買えます。多少お金がかかりますが、安定動作という意味では強いです。

一番の利点はパソコン側にソフトのインストールが不要なところです。メモリーカードスロットがあれば対応します。

手順

  1. ボイスメモで目的の音声をコピーする
  2. カメラコネクションキットを接続
  3. メモリーカードをカメラコネクションキットに挿入
  4. ファイルアプリを起動する(Apple純正品です)
  5. メモリーカードの中に入り、長押ししてペーストする。これで音声ファイルがメモリーカードにコピーされました。
  6. メモリーカードをパソコンに挿入してコピーする

です。これで、iPhoneで録音した音声ファイルをパソコンで活用できます。

実は小容量の音声であればメールで送信するほうが楽です。特に会社で使っている場合は一般社員でもメールのほうが使いやすいです。

今回の方法を会社で使う場合は、メモリーカードの読み込みがあるので稟議などが必要かもしれません。ただ、読み込みなので制限は甘いかも知れません。 詳しくは社内情報担当に相談してみて下さい。

プログラム言語の糞コメントの原因は初学学習にあります

 良く、プログラミング言語のコメントで意味がないと突っ込まれる物があります。

i=0; //iにゼロを代入する

みたいな物です。はっきり言って役に立たないコメントです。しかし、これってどこかで見たことが無いでしょうか? それは「初学者のテキスト」です。

プログラミング言語自体を説明する書籍には当たり前ですが、その命令自身の意味が説明されています。

悪の原因は初学者の解説にコメントを使うこと

私はコメントが誤って使われる原因は、初学者の説明にコメントが使われることです。プログラミング以外でも人など動物って「最初に見たもの」が刷り込まれます。幼少期の時に見たものがその人の「常識」となるわけです。

それと同じように、初学者のテキストに書かれているコメントを最初に見てしまうからその書き方が常識になってしまうわけです。

  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.     int sum=0; //足し算する変数をリセットする
  5.     
  6.     for(int i=1;i<=10;i++){ //1から10までループする
  7.         sum+=i; //現在のカウンターを足し算する変数に加算する
  8.     }
  9.     
  10.     printf("%d\n",sum); //結果を表示する
  11. ;    
  12.     return 0;
  13. }

これはよくある初学者向けテキストに書かれているコメントです。ただ、これを業務でやられると「ゴミコメント」になります。

初学者の学習ではコメントを封印する

上記コードからコメントを除去します

  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.     int sum=0;
  5.     
  6.     for(int i=1;i<=10;i++){
  7.         sum+=i;
  8.     }
  9.     
  10.     printf("%d\n",sum);
  11. ;    
  12.     return 0;
  13. }

そして、初学者の説明として言葉で説明します。

このコードは1から10までをループさせて、その値をSUMという変数に代入します。

forは(変数の初期化;とどまる条件;ループ一回が終了した時の処理)

+= という演算子は足し込むという意味です。例えばsum+=5 とすると sumの値に5を加えるという意味です。

そして、printfでその結果を出力します。

この様な形でコードを説明します。非常にコメントとしてインラインで書きたくなりますが、初学者への変な刷り込み防止という意味で止めて下さい。

本当のコメント術を教える

そして最後に、本当のコメント術を教えて下さい。

  1. #include<stdio.h>
  2. //1から10までの数を足して表示する。
  3. int main(void)
  4. {
  5.     int sum=0;
  6.     
  7.     for(int i=1;i<=10;i++){
  8.         sum+=i;
  9.     }
  10.     
  11.     printf("%d\n",sum);
  12. ;    
  13.     return 0;
  14. }

業務ならこの程度のコメントで十分です。やっていることは1から10までの数を足して表示する物です。このプログラムを実行すれば1から10の合計が表示されるわけであり、特にプログラミングテクニックとしての特記事項はありません。

初学者の学習テキストとしてのコメントを封印するのは苦しいかもしれませんが、初学者である期間は短いです。その後は業務としてのコメントを求められるので、初学者の間違ったコメントを封印することは非常に重要であると考えます。

Amazonでコーディング術

クラウドを使わずにバックアップが安心 ROBOCOPY と バックアップの習慣化

 皆さん、ファイルのバックアップは作成していますか? 私が聞いた限りでは「誰もやっていない」というのが正直なところです。ただ、そこまでパソコンというデバイスを信用しているのは怖いところです。

「良い道具は一生物」という言葉があります。実際、工具類は良いものを手に入れれば一生涯使えます。料理人の包丁もしっかりと手入れしていれば同様です。でも、パソコンに限っては全く違います。

理由としては、手入れする方法がまったくないためです。油をさす場所や定期的にチェックする場所などはありません。もちろん乱暴に扱えば壊れますが、丁寧に扱っても故障はします。

故障は何の前兆もなくやってきます。昨日まで調子良かった物が、今日は起動しないという事があります。そうなったら、今までのデータは全て消えてしまいます。運が良ければ救えるかもしれませんが。

文書ファイル程度ならクラウドに

ExcelやWordなどの文書ファイル程度であれば容量が少ないので、OSが対応しているクラウドストレージに保存してください。ネットに接続されていれば自動的にバックアップされます。

堅いのは保存場所とバックアップを自ら決める

クラウドは何も考えずに使えるので便利ですが、ネットに接続されていないと使えません。また、外部的なトラブルで自分のファイルが失われることもあります。そう、時々うまくいかないときがあります。

それを防止する方法は以下の2つの方法です。

まず、データの保管場所を確実に自分で決めてください。別に「マイドキュメント」で良いのですが、確実にエクスプローラーを使ってマイドキュメントがどこに有るか把握してください。笑えない事実でもありますが、いつもExcelでファイルが開けるが、どこに保存されているか把握できていないという人も多いです。これは、怖いので止めてください。

私の保管場所のお勧めはCドライブの下に data というフォルダを作りそこにファイルを保存する方法です。どんなアプリを使っても保存場所を選ぶことができるのであれば、dataフォルダの中に保存してください。

次に、バックアップを取る方法です。お勧めは外付けHDDやSSD,USBメモリです。ここに、先程の「マイドキュメント」や「DATA」フォルダの中身をコピーします。

コピーはロバストコピーコマンドを

コピーをする方法は、フォルダにコピペすることはおすすめしません。理由は、間違えが発生するということ、意外に面倒という2つです。

私は、USBメモリや外付けHDD,SSDの中に以下のバッチファイルを設置し、時々接続したときに起動しています。バッチファイルの名前は何でも良いです。

それと、予めドライブの中に backup というフォルダも作っておきます。

  1. cd /d %~dp0
  2. robocopy C:\data ./backup /E /ZB /J /COPY:DATOU /MIR /DCOPY:DAT /FFT /R:1 /W:10 /BYTES
  3. pause

このバッチファイルを右クリックして、「管理者として実行」を選ぶとコピーされます。間違えなくフォルダの中身は全てコピーされます。

さらに便利なのは、既に存在するファイルはコピーしないところです。変化があったところだけがコピーされるので時間の節約にもなります。

仕事が終わり、机の整理をしているときや、休憩中に実行をすれば良いと考えます。


劇遅 メモリ交換だけで古いセレロンパソコンを使えるレベルにアップグレード esprimo FH52/W 2950M SP016GLSTU160N22

Amazonでメモリを購入します ウチにある古いパソコンの富士通ESPRIMO FH52/W が酷く遅くなりました。OSの起動も遅く、アプリの起動も遅いです。さらにブラウザや事務ソフト程度の軽いソフトも突然固まります。30秒くらい待っていればまた使えるようになりますがストレスはあ...