tag:blogger.com,1999:blog-59947934218096731582024-02-08T20:43:46.890+09:00日常のコンピュータテクニック集パソコン,スマホ,タブレットなどのコンピュータを使う場合もちょっとしたテクニックを知っておくと便利です。時々難しいC言語も特集します好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comBlogger41125tag:blogger.com,1999:blog-5994793421809673158.post-50920427014366713852023-12-28T19:29:00.002+09:002023-12-28T19:29:41.167+09:00ウィンドウズアプリ入門 クリップボードにコピーされたらメッセージを受信する方法<p> Windowsアプリでコピーされたときにイベントを取得できると便利です。例えばコピーされた内容を画面に表示したい場合などです。 もちろんタイマーイベントで定期的にポーリングをする方法もありますが、やや無駄な処理かもしれません。</p><p>Windowsとしてはコピーされたときのイベントを取得できる仕組みになっていますので使わない手はないと考えます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf1g484tQJWcm8Tepqxb3Wpyyjo3VMG_tsPW0o_jSQICpNauB414_8XRQrYJGvy4WY96u7aSNNPsy7YZPSesXrJ17JvTSoh115mAYYz2qcyfr_cKnCbCpTrBrRUMhVs-zBd1jwx3z7o0htvjHh2DKUzqmCNfQ464-Rz8wOVcF33G3HtLOEWJOFHpCtYoJ4/s1476/Code.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="656" data-original-width="1476" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf1g484tQJWcm8Tepqxb3Wpyyjo3VMG_tsPW0o_jSQICpNauB414_8XRQrYJGvy4WY96u7aSNNPsy7YZPSesXrJ17JvTSoh115mAYYz2qcyfr_cKnCbCpTrBrRUMhVs-zBd1jwx3z7o0htvjHh2DKUzqmCNfQ464-Rz8wOVcF33G3HtLOEWJOFHpCtYoJ4/s320/Code.jpg" width="320" /></a></div><p style="text-align: left;">上図がこのイベントを処理するためのコードの一部です。まず、Visutal C++でウィンドウアプリを新規作成します。そして以下の部分にコードを追加します。</p><p><span style="font-size: x-small;">case WM_CREATE:<br /> AddClipboardFormatListener(hWnd); //クリップボードの監視開始<br /> break;</span></p><div><p>これをウィンドプロシージャに追加します。 この部分は標準ではないのでそのまま追加してください。 このコードでは、ウィンドウが作成されたときに WM_CREATE:が呼ばれて、AddClipboardFormatListenerという関数が呼ばれます。この関数はこのアプリがクリップボードの監視を開始するための物です。</p><p><span style="font-size: x-small;">case WM_DESTROY:<br /> RemoveClipboardFormatListener(hWnd); //クリップボードの監視終了</span></p><p>既にある WM_DESTROY: という部分にRemoveClipboardFormatListener(hWnd);関数を追加します。この関数はクリップボードの監視を終了するための物です。</p><p><span style="font-size: x-small;">case WM_CLIPBOARDUPDATE:<br /> MessageBox(hWnd, (LPCWSTR)L"情報", (LPCWSTR)L"コピーされました", MB_OK); //メッセージボックスの表示</span></p><p>最後にこのコードを追加します。これはクリップボードに何かコピーされたら呼び出される、WM_CLIPBOARDUPDATEイベントです。そして、これが呼ばれたらメッセージボックスが表示されます。</p><p>以上簡単なコードでした。 これでクリップボードにコピーされたら何か処理を行う準備が出来ました。そのあとはクリップボードの内容を取得して画面表示したりファイルに保存したりできます。 いろいろ応用が出来るので是非使ってみて下さい。</p><p style="text-align: center;"><a href="https://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E-%E5%AE%8C%E5%85%A8-%E5%85%A5%E9%96%80-%E6%9D%BE%E6%B5%A6%E5%81%A5%E4%B8%80%E9%83%8E/dp/4815611688?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3PF45JZP0FYU8&keywords=C%E8%A8%80%E8%AA%9E%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80&qid=1703473280&sprefix=c%E8%A8%80%E8%AA%9E%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80%2Caps%2C161&sr=8-3&linkCode=li3&tag=yt_jihei-22&linkId=89ea95d557ff0758f6246a649963e345&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4815611688&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=yt_jihei-22&language=ja_JP" /></a><img alt="" border="0" height="1" src="https://ir-jp.amazon-adsystem.com/e/ir?t=yt_jihei-22&language=ja_JP&l=li3&o=9&a=4815611688" style="border: none; margin: 0px;" width="1" /></p></div>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-57952219128006877982023-12-27T19:17:00.001+09:002023-12-27T19:17:33.323+09:00G++ でコンパイルできるシンプルなウィンドウ<p> G++でコンパイルできるサンプルコードです。実行するとシンプルなウィンドウが表示されます。ただこれだけですが、これがウィンドウプログラミングのはじめの一歩です。まずは、これをコンパイルできるようにしてください。</p><p><code>
</code></p><ol style="background-color: #eeeeff; color: black; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li style="background-color: #eeffff;">#include <windows.h></li>
<li style="background-color: #eeeeff;">/*************************************</li>
<li style="background-color: #eeffff;">ただウィンドウを表示するだけのアプリです。以下のコマンドラインでアプリを作成できます。</li>
<li style="background-color: #eeeeff;">g++ -o 001_plainwindow.exe 001_plainwindow.cpp -mwindows -m64</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;">注意点としては、001_plainwindow.cpp と言う名前でこのテキストファイルを保存してください。</li>
<li style="background-color: #eeffff;">保存するときは UTF-8 BOM無しで保存してください。Windows標準のメモ帳よりサクラエディタなどのコーディングするエディタを使う事をお勧めします。</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;">コメントにカスタマイズ方法を書いておきます。色々楽しんでみて下さい。</li>
<li style="background-color: #eeeeff;">**************************************/</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;">// ウィンドウプロシージャ(こういう名前の固有名称です覚えてください。)</li>
<li style="background-color: #eeffff;">LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"> switch (uMsg) {</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"> </li>
<li style="background-color: #eeeeff;"> //ウィンドウが閉じられたときに呼ばれます</li>
<li style="background-color: #eeffff;"> case WM_DESTROY:</li>
<li style="background-color: #eeeeff;"> // 終了時にメモリを解放</li>
<li style="background-color: #eeffff;"> PostQuitMessage(0);</li>
<li style="background-color: #eeeeff;"> break;</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;"> default:</li>
<li style="background-color: #eeffff;"> return DefWindowProcW(hwnd, uMsg, wParam, lParam);</li>
<li style="background-color: #eeeeff;"> }</li>
<li style="background-color: #eeffff;"> return 0;</li>
<li style="background-color: #eeeeff;">}</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;">// 最初に呼ばれる関数です。エントリポイントとも言われます。これはほぼ作法です。</li>
<li style="background-color: #eeffff;">int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"> // ウィンドウクラスの登録</li>
<li style="background-color: #eeeeff;"> WNDCLASSW wc = {0};</li>
<li style="background-color: #eeffff;"> wc.lpfnWndProc = WindowProc;</li>
<li style="background-color: #eeeeff;"> wc.hInstance = hInstance;</li>
<li style="background-color: #eeffff;"> wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);</li>
<li style="background-color: #eeeeff;"> wc.lpszClassName = L"SimpleEditWindowClass";</li>
<li style="background-color: #eeffff;"> RegisterClassW(&wc);</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"> // ウィンドウの作成 "シンプルなウィンドウ"と書かれている部分はタイトルバーの表示です。好きなものに変えてみて下さい。640,480と言う数字はウィンドウの大きさです。変えてみて下さい。</li>
<li style="background-color: #eeeeff;"> HWND hwnd = CreateWindowExW(0, L"SimpleEditWindowClass", L"シンプルなウィンドウ", WS_OVERLAPPEDWINDOW,</li>
<li style="background-color: #eeffff;"> CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"> </li>
<li style="background-color: #eeeeff;"> // ウィンドウ表示</li>
<li style="background-color: #eeffff;"> ShowWindow(hwnd, nCmdShow);</li>
<li style="background-color: #eeeeff;"> UpdateWindow(hwnd);</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;"> // メッセージループ</li>
<li style="background-color: #eeffff;"> MSG msg;</li>
<li style="background-color: #eeeeff;"> while (GetMessageW(&msg, NULL, 0, 0)) {</li>
<li style="background-color: #eeffff;"> TranslateMessage(&msg);</li>
<li style="background-color: #eeeeff;"> DispatchMessageW(&msg);</li>
<li style="background-color: #eeffff;"> }</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"> return static_cast<int>(msg.wParam);</li>
<li style="background-color: #eeeeff;">}</li>
<li style="background-color: #eeffff;"></li>
</code></ol><p></p><p>まず、このプログラムには理屈はありません。こういう作法で組むと思ってください。まず、最初にWinMainという関数が呼び出されます。これはC言語の基礎で習うmain関数と同じです。ウィンドウプログラムの場合はこちらが呼び出されます。</p><p>次にウィンドウプロシージャーと呼ばれる関数が呼ばれます。このサンプルプログラムではWM_DESTROY というウィンドウが閉じられたときの処理だけが書かれていますが、Case文の要素としてウィンドウが開かれたときやマウスをクリックされたときなど多くの処理をここに追加して機能を増やしていきます。</p><p>それより、まずはこのプログラムをコンパイルして実行ファイルを作ることを最初に考えてください。コンパイルするためにはMinGWという開発環境が必要です。これはソースフォージから「x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0.7z」と言うファイルをダウンロード解凍して、Cドライブにコピーしてください。そして、環境設定でPATHをBINに通してください。 これでコンパイルが可能です。</p><p><code>
</code></p><ol style="background-color: #eeeeff; color: black; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li style="background-color: #eeffff;">g++ -o 001_plainwindow.exe 001_plainwindow.cpp -mwindows -m64</li>
</code></ol><p></p><p>コマンドプロンプトをソースファイルのあるフォルダ(ディレクトリ)で実行し、上記コマンドを入力すればこんぱいる、ビルドが終了します。 そのあとは出来た実行ファイルを開いてください。 ソースファイルは必ずUTF-8のBOM無しで作成してください。</p><p>これで初めてのウィンドウプログラムが作成できたと考えます。</p><p><a href="https://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E-%E5%AE%8C%E5%85%A8-%E5%85%A5%E9%96%80-%E6%9D%BE%E6%B5%A6%E5%81%A5%E4%B8%80%E9%83%8E/dp/4815611688?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3PF45JZP0FYU8&keywords=C%E8%A8%80%E8%AA%9E%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80&qid=1703473280&sprefix=c%E8%A8%80%E8%AA%9E%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80%2Caps%2C161&sr=8-3&linkCode=li3&tag=yt_jihei-22&linkId=89ea95d557ff0758f6246a649963e345&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4815611688&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=yt_jihei-22&language=ja_JP" /></a><img alt="" border="0" height="1" src="https://ir-jp.amazon-adsystem.com/e/ir?t=yt_jihei-22&language=ja_JP&l=li3&o=9&a=4815611688" style="border: none; margin: 0px;" width="1" /></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-53661677782379835552023-12-27T16:20:00.004+09:002023-12-27T16:26:32.056+09:00 Chrome OS Flex をWindows Vista時代のパソコンにインストール FRDS330120WA Frontier フロンティア神代<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://amzn.to/3NG2YIG" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNuBkYUnP79NfzErF-xB7D7GukCDYVMC7ZfUgYDKI6Nl9LM6Er81x62P8bo5n3SsYiWh-OqUA6l7SlVRGIDXeA2rc_b1qAv8H2LBmDfPm7f5QJGhruPHWRa1uP6tda0S3XhNH504rJBg8KtawN6TXnC2KDPltITopdQqsrzBO__U8qduNU16cyvi7wDmAr/s320/IMG_4519.jpeg" width="240" /></a></div><br />10年以上前に買って今では銀行ファームバンキングのモデムアクセスマシンとして使っていたフロンティアのパソコンがファームバンキングサービスの終了で不要になりました。 もちろんネットに接続すればブラウザマシンとして使えますが、OSがVISTAなのでセキュリティー的に問題があります。<p></p><p>ここで古いPCにインストールすれば最新セキュリティで安心して使えると言われている Chrome OS Flexを試してみました。</p><p>結果はとりあえずインストールと起動が出来ました。ブラウザも動作し、YouTube動画も見れました。 しかし、動画は時々コマが飛ぶ感じです。そのためパフォーマンス的には問題あるかもしれません。</p><p>どうしてもパソコンが欲しいという用途なら使えそうですが、他にパソコンやタブレットを持っている人は無理して使わなくても良いと考えます。</p><p>ウチではインストールして使う事を確認した後はリサイクルショップにジャンクとして販売してしまいました。 まあ、10年使えば十分なのではと考えます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4p98qV446W7YHCBquXho9lWDKoEjMp8JQs8kQ8nRDD2NF5xnMTno4cfNKIob5nKZVDvyvUp_3S2u2wULyVO_ctoHvOu1q33UdBJiaRWNPYtB-v7CyJMJ4ejw2EigKTBBuvNm6yn3W4SdYsGg2n81TfN75_D4A2ofD-5kOiSpAxU-UthaU0QO1BFNVwgZM/s4032/IMG_4518.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4p98qV446W7YHCBquXho9lWDKoEjMp8JQs8kQ8nRDD2NF5xnMTno4cfNKIob5nKZVDvyvUp_3S2u2wULyVO_ctoHvOu1q33UdBJiaRWNPYtB-v7CyJMJ4ejw2EigKTBBuvNm6yn3W4SdYsGg2n81TfN75_D4A2ofD-5kOiSpAxU-UthaU0QO1BFNVwgZM/s320/IMG_4518.jpeg" width="240" /></a></div><br /><p>インストール手順は</p><p></p><ol style="text-align: left;"><li>8G程度のUSBフラッシュメモリーを準備</li><li>手持ちのPCのChromeブラウザから追加機能で Chrome OS Flexをインストール</li><li>その指示でUSBフラッシュメモリーにインストールメディアを作成する。</li><li>目的のPCをUSBドライブで起動できるようにして指示に従いインストールする。ハードウェアの種類は Google → Chrome OS Flexを選びます<br /></li></ol><div>PCのスペックは</div><div><ul style="text-align: left;"><li>メーカー Frontier フロンティア神代</li><li>型式 FRDS330120WA (FRDS3301/20WA)</li><li>CPU Intel Celeron Dual-Core E1200 1.6GHz</li><li>SSD 120GB</li><li>メモリ 2048MB</li><li>ビデオカード nVidia の安い物(メモ忘れました)</li></ul></div><div>これで終了です。Windowsなどのインストールに慣れている人であれば特に面倒は無いと考えます。</div><div><br /></div><div><a href="https://amzn.to/3NG2YIG" target="_blank">USBメモリはAmazonで購入をお勧めします</a></div><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-17729612039066300702023-12-25T12:02:00.001+09:002023-12-25T12:02:02.900+09:00G++でコンパイル、ビルドできるwindowsプログラム<p> 今では開発環境が充実しており「簡単に」ウィンドウプログラムを開発することが出来ます。しかし、生成されるプログラムは色々なDLLやコンポーネントが必要であることが多いです。ビルドすると色々なファイルが生成されるわけです。</p><p>ただ、こちらとしては一個のEXEファイルだけで十分なわけです。今回はそのニーズにこたえるコードを説明します。</p><p>このコードは簡易的なテキストエディタです。元々はChatGPTに作成してもらった、単機能なものです。コピペ、簡単な編集、表示内容の拡大縮小が出来ます。通信や管理できない領域へのデータ保存は一切していないので安心です。</p><p>実用品としても十分使えますが、簡易的な開発実験も出来るファイルだと考えます。以下がソースコードです。</p><p><code>
</code></p><ol style="background-color: #eeeeff; color: black; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li style="background-color: #eeffff;">#include <windows.h></li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;">/*</li>
<li style="background-color: #eeeeff;">メモ代わりに使える通信機能も保存機能もないエディタです。</li>
<li style="background-color: #eeffff;">パスワードやメモなどセキュリティー的に危ない物を一時的に保管するのに役立ちます。</li>
<li style="background-color: #eeeeff;">G++で各自がコンパイルすれば危ない機能とか事前に確認できます。</li>
<li style="background-color: #eeffff;">試用する前にコードレビューも出来るので安心して使ってください。</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;">コンパイル・ビルド方法</li>
<li style="background-color: #eeeeff;">g++ -o hoge.exe piyo.cpp -mwindows</li>
<li style="background-color: #eeffff;">*/</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;">// メニューアイテムのID</li>
<li style="background-color: #eeeeff;">#define IDM_FONT_SIZE_INCREASE 101</li>
<li style="background-color: #eeffff;">#define IDM_FONT_SIZE_DECREASE 102</li>
<li style="background-color: #eeeeff;">#define IDM_ALLSELECT 103</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;">//定数</li>
<li style="background-color: #eeffff;">#define FONT_SIZE_MIN 10</li>
<li style="background-color: #eeeeff;">#define FONT_SIZE_MAX 100</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;">//アクセラレーターテーブル</li>
<li style="background-color: #eeffff;">ACCEL accel[] = {</li>
<li style="background-color: #eeeeff;"> { FCONTROL | FVIRTKEY, 'W', IDM_FONT_SIZE_INCREASE },</li>
<li style="background-color: #eeffff;"> { FCONTROL | FVIRTKEY, 'S', IDM_FONT_SIZE_DECREASE },</li>
<li style="background-color: #eeeeff;"> { FCONTROL | FVIRTKEY, 'A', IDM_ALLSELECT },</li>
<li style="background-color: #eeffff;"> };</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;">// フォントサイズを変更する関数</li>
<li style="background-color: #eeeeff;">void ChangeFontSize(HWND hTarget,HFONT *pfFont,int delta) {</li>
<li style="background-color: #eeffff;"> LOGFONTW lf;</li>
<li style="background-color: #eeeeff;"> GetObjectW(*pfFont, sizeof(LOGFONTW), &lf);</li>
<li style="background-color: #eeffff;"> lf.lfHeight += delta;</li>
<li style="background-color: #eeeeff;"> if (lf.lfHeight < FONT_SIZE_MIN) {</li>
<li style="background-color: #eeffff;"> lf.lfHeight = FONT_SIZE_MIN;</li>
<li style="background-color: #eeeeff;"> }</li>
<li style="background-color: #eeffff;"> if (lf.lfHeight > FONT_SIZE_MAX) {</li>
<li style="background-color: #eeeeff;"> lf.lfHeight = FONT_SIZE_MAX;</li>
<li style="background-color: #eeffff;"> }</li>
<li style="background-color: #eeeeff;"> DeleteObject(*pfFont);</li>
<li style="background-color: #eeffff;"> *pfFont = CreateFontIndirectW(&lf);</li>
<li style="background-color: #eeeeff;"> SendMessageW(hTarget, WM_SETFONT, (WPARAM)*pfFont, TRUE);</li>
<li style="background-color: #eeffff;">}</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;">// ウィンドウプロシージャ</li>
<li style="background-color: #eeeeff;">LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;">static HWND hEdit;</li>
<li style="background-color: #eeffff;">static HMENU hMenu;</li>
<li style="background-color: #eeeeff;">static HFONT hFont;</li>
<li style="background-color: #eeffff;"> </li>
<li style="background-color: #eeeeff;"> switch (uMsg) {</li>
<li style="background-color: #eeffff;"> case WM_COMMAND:</li>
<li style="background-color: #eeeeff;"> // メニューアイテムが選択された場合</li>
<li style="background-color: #eeffff;"> switch (LOWORD(wParam)) {</li>
<li style="background-color: #eeeeff;"> case IDM_FONT_SIZE_INCREASE:</li>
<li style="background-color: #eeffff;"> ChangeFontSize(hEdit,&hFont,2);</li>
<li style="background-color: #eeeeff;"> break;</li>
<li style="background-color: #eeffff;"> case IDM_FONT_SIZE_DECREASE:</li>
<li style="background-color: #eeeeff;"> ChangeFontSize(hEdit,&hFont,-2);</li>
<li style="background-color: #eeffff;"> break;</li>
<li style="background-color: #eeeeff;"> case IDM_ALLSELECT:</li>
<li style="background-color: #eeffff;"> SendMessage(hEdit, EM_SETSEL, 0, -1);</li>
<li style="background-color: #eeeeff;"> break;</li>
<li style="background-color: #eeffff;"> }</li>
<li style="background-color: #eeeeff;"> break;</li>
<li style="background-color: #eeffff;"> case WM_CREATE:</li>
<li style="background-color: #eeeeff;"> // エディットコントロールを作成</li>
<li style="background-color: #eeffff;"> hEdit = CreateWindowExW(WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,</li>
<li style="background-color: #eeeeff;"> 10, 10, 400, 300, hwnd, (HMENU)0, GetModuleHandleW(NULL), NULL);</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;"> // メニューを作成</li>
<li style="background-color: #eeffff;"> hMenu = CreateMenu();</li>
<li style="background-color: #eeeeff;"> AppendMenuW(hMenu, MF_STRING, IDM_FONT_SIZE_INCREASE, L"拡大 ctrl+W");</li>
<li style="background-color: #eeffff;"> AppendMenuW(hMenu, MF_STRING, IDM_FONT_SIZE_DECREASE, L"縮小 ctrl+S");</li>
<li style="background-color: #eeeeff;"> AppendMenuW(hMenu, MF_STRING, IDM_ALLSELECT, L"全選択 ctrl+A");</li>
<li style="background-color: #eeffff;"> SetMenu(hwnd, hMenu);</li>
<li style="background-color: #eeeeff;"> // デフォルトフォントを設定</li>
<li style="background-color: #eeffff;"> hFont = CreateFontW(32, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,</li>
<li style="background-color: #eeeeff;"> CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Arial");</li>
<li style="background-color: #eeffff;"> SendMessageW(hEdit, WM_SETFONT, (WPARAM)hFont, TRUE);</li>
<li style="background-color: #eeeeff;"> break;</li>
<li style="background-color: #eeffff;"> case WM_SIZE:</li>
<li style="background-color: #eeeeff;"> // ウィンドウサイズが変更された場合、エディットコントロールも調整</li>
<li style="background-color: #eeffff;"> MoveWindow(hEdit, 10, 10, LOWORD(lParam) - 20, HIWORD(lParam) - 20, TRUE);</li>
<li style="background-color: #eeeeff;"> break;</li>
<li style="background-color: #eeffff;"> case WM_DESTROY:</li>
<li style="background-color: #eeeeff;"> // 終了時にメモリを解放</li>
<li style="background-color: #eeffff;"> PostQuitMessage(0);</li>
<li style="background-color: #eeeeff;"> break;</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;"> default:</li>
<li style="background-color: #eeffff;"> return DefWindowProcW(hwnd, uMsg, wParam, lParam);</li>
<li style="background-color: #eeeeff;"> }</li>
<li style="background-color: #eeffff;"> return 0;</li>
<li style="background-color: #eeeeff;">}</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;">// エントリーポイント</li>
<li style="background-color: #eeffff;">int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"> </li>
<li style="background-color: #eeeeff;"> // ウィンドウクラスの登録</li>
<li style="background-color: #eeffff;"> WNDCLASSW wc = {0};</li>
<li style="background-color: #eeeeff;"> wc.lpfnWndProc = WindowProc;</li>
<li style="background-color: #eeffff;"> wc.hInstance = hInstance;</li>
<li style="background-color: #eeeeff;"> wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);</li>
<li style="background-color: #eeffff;"> wc.lpszClassName = L"SimpleEditWindowClass";</li>
<li style="background-color: #eeeeff;"> RegisterClassW(&wc);</li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;"> //アクセラレーターテーブルの作成</li>
<li style="background-color: #eeffff;"> HACCEL hAccel = CreateAcceleratorTableA(accel,sizeof(accel)/sizeof(accel[0]));</li>
<li style="background-color: #eeeeff;"> </li>
<li style="background-color: #eeffff;"> </li>
<li style="background-color: #eeeeff;"> // ウィンドウの作成</li>
<li style="background-color: #eeffff;"> HWND hwnd = CreateWindowExW(0, L"SimpleEditWindowClass", L"シンプルテキストメモ", WS_OVERLAPPEDWINDOW,</li>
<li style="background-color: #eeeeff;"> CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);</li>
<li style="background-color: #eeffff;"> // ウィンドウ表示</li>
<li style="background-color: #eeeeff;"> ShowWindow(hwnd, nCmdShow);</li>
<li style="background-color: #eeffff;"> UpdateWindow(hwnd);</li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"> // メッセージループの処理(アクセラレーターテーブルの処理付)</li>
<li style="background-color: #eeeeff;"> MSG msg;</li>
<li style="background-color: #eeffff;"> while (GetMessage(&msg, NULL, 0, 0))</li>
<li style="background-color: #eeeeff;"> {</li>
<li style="background-color: #eeffff;"> if (!TranslateAccelerator(hwnd, hAccel, &msg))</li>
<li style="background-color: #eeeeff;"> {</li>
<li style="background-color: #eeffff;"> TranslateMessage(&msg);</li>
<li style="background-color: #eeeeff;"> DispatchMessage(&msg);</li>
<li style="background-color: #eeffff;"> }</li>
<li style="background-color: #eeeeff;"> } </li>
<li style="background-color: #eeffff;"> </li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"> return static_cast<int>(msg.wParam);</li>
<li style="background-color: #eeeeff;">}</li>
<li style="background-color: #eeffff;"></li>
</code></ol><p>このコードを「hoge.cpp」という名前で保存してから、「g++ -o hoge.exe piyo.cpp -mwindows」でコンパイル、ビルドすると piyo,exe が作成されます。その実行ファイルを開くことで簡易的なテキストエディタを表示させることが出来ます。</p><p>ぜひ、プログラミングの入門として活用してみて下さい。コードの追加も普通なCやC++の知識で可能です。分からない人は以下の本で勉強してみて下さい。</p><p><a href="https://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E-%E5%AE%8C%E5%85%A8-%E5%85%A5%E9%96%80-%E6%9D%BE%E6%B5%A6%E5%81%A5%E4%B8%80%E9%83%8E/dp/4815611688?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3PF45JZP0FYU8&keywords=C%E8%A8%80%E8%AA%9E%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80&qid=1703473280&sprefix=c%E8%A8%80%E8%AA%9E%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80%2Caps%2C161&sr=8-3&linkCode=li3&tag=yt_jihei-22&linkId=89ea95d557ff0758f6246a649963e345&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4815611688&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=yt_jihei-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=yt_jihei-22&language=ja_JP&l=li3&o=9&a=4815611688" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-22144244073405958392023-04-10T21:27:00.000+09:002023-04-10T21:27:04.997+09:00クリップボードの空白行を削除するコマンドレット ショートカット<p> 空白行など無駄な行を削除するのが面倒だと思っていませんか?こんな時に便利なショートカットの作り方を紹介します。これを作っておけばコピーしてショートカットを実行するだけで、無駄な行が削除されます。</p><p><span style="font-family: helvetica;">ああああああああああああああ<br />いいいいいいい<br />うううう<br /><br />えええええええ<br /><br />おおおおお</span></p><p>こんな文章があった場合に、コピーして実行すると</p><p><span style="font-family: helvetica;">ああああああああああああああ<br />いいいいいいい<br />うううう<br />えええええええ<br />おおおおお</span></p><p>このように無駄な行が削除されます。便利です。</p><p>ショートカットの作り方は、デスクトップなどで右クリックして「新規作成、ショートカット」を選び、場所の入力で以下のコードを入れてください。</p><p><b><span style="font-family: arial;">powershell -NoLogo -Command "& {Get-Clipboard |Where-Object { $_ -notmatch '^\s*$' } | Set-Clipboard}"</span></b></p><p>これで文書をコピーして、実行した後に張り付けてください。</p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-26927623681285287852023-03-24T09:57:00.000+09:002023-03-24T09:57:13.419+09:00今日の日付や今の日時をコピペしたい場合(Powershell ショートカット)<p> 今日の日付や今の時刻を入力したい場合に自分で手打ちしていないでしょうか?これは面倒だし、ミスもあります。そもそも、コンピュータを使っているのだからそういう作業は自動化させてみることをおすすめします。</p><p>方法は非常に簡単です。右クリックメニューでショートカットの作成を選択して。項目の場所という項目に以下を入れるだけです。</p><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><p style="text-align: left;"><span style="font-family: inherit;">powershell.exe -NoLogo -Command "& {(Get-Date -Format 'yyyy年MM月dd日hh時mm分ss秒') | Set-Clipboard}"</span></p></blockquote><p>これで、ショートカットを作成し、わかりやすい名前で保存すれば準備完了です。その後に、日付や日時を取得したい場合はそのショートカットを実行して下さい。日付や時刻がコピーされますので後は貼り付けて下さい。</p><p>今回のサンプルでは年月日と時分秒が日本語の単位付きで表示されていますが、コードの修正で好きなように出来ます。秒が要らない場合、単位が要らない場合など色々な対応が可能です。</p><h2 style="text-align: left;">応用例</h2><p>間違えなく日付を入力したい場合はもちろん、重複しないファイル名を作りたい場合に役立ちます。人の作業であれば、このショートカットで秒まで入れれば重複は考えられません。</p><p>今回のショートカットはPowershellという仕組みを利用しています。Windows標準の仕組みなので会社でも問題なく使えると考えます。</p><p style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/40yC49s" target="_blank">AmazonでPowershell</a></span></b></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-13309655518952686102022-12-27T16:20:00.001+09:002022-12-27T16:20:58.955+09:00ボイスメモを簡単にパソコンに転送する方法 iTunes 社外アプリ不要 必要なものはカメラコネクションキット iOS iPhone<p></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/vvXGoanidoI" width="320" youtube-src-id="vvXGoanidoI"></iframe></div><br />ボイスメモのファイルをパソコンに転送するのは意外に手間がかかります。iTunesを使う方法が紹介されますが正直挙動が良く分かりません。 社外アプリも便利ですが、アドウェアや良くわからない課金システムでインストールするのが怖いです。<p></p><p>今回の方法は、『カメラコネクションキット』を使ってメモリカードにコピーする方法です。カメラコネクションキットは必要ですが、Apple認証の社外品であれば千円程度で買えます。多少お金がかかりますが、安定動作という意味では強いです。</p><p>一番の利点はパソコン側にソフトのインストールが不要なところです。メモリーカードスロットがあれば対応します。</p><p>手順</p><p></p><ol style="text-align: left;"><li>ボイスメモで目的の音声をコピーする</li><li>カメラコネクションキットを接続</li><li>メモリーカードをカメラコネクションキットに挿入</li><li>ファイルアプリを起動する(Apple純正品です)</li><li>メモリーカードの中に入り、長押ししてペーストする。これで音声ファイルがメモリーカードにコピーされました。</li><li>メモリーカードをパソコンに挿入してコピーする</li></ol><p></p><p>です。これで、iPhoneで録音した音声ファイルをパソコンで活用できます。</p><p>実は小容量の音声であればメールで送信するほうが楽です。特に会社で使っている場合は一般社員でもメールのほうが使いやすいです。</p><p>今回の方法を会社で使う場合は、メモリーカードの読み込みがあるので稟議などが必要かもしれません。ただ、読み込みなので制限は甘いかも知れません。 詳しくは社内情報担当に相談してみて下さい。</p><div style="text-align: center;"><span style="font-size: x-large;"><b><a href="https://amzn.to/3jy3agM" target="_blank">Amazonでカメラコネクションキット</a></b></span></div><div style="text-align: center;"><a href="https://www.amazon.co.jp/dp/B0BQGKYW4N?&linkCode=li3&tag=yt_jihei-22&linkId=233b0231390a420aee60bf3858ee8a9e&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B0BQGKYW4N&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=yt_jihei-22&language=ja_JP" /></a><img alt="" border="0" height="1" src="https://ir-jp.amazon-adsystem.com/e/ir?t=yt_jihei-22&language=ja_JP&l=li3&o=9&a=B0BQGKYW4N" style="border: none; margin: 0px;" width="1" /></div>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-51863635937062677062022-12-05T10:39:00.001+09:002022-12-05T10:39:02.075+09:00プログラム言語の糞コメントの原因は初学学習にあります<p> 良く、プログラミング言語のコメントで意味がないと突っ込まれる物があります。</p><p>i=0; //iにゼロを代入する</p><p>みたいな物です。はっきり言って役に立たないコメントです。しかし、これってどこかで見たことが無いでしょうか? それは「初学者のテキスト」です。</p><p>プログラミング言語自体を説明する書籍には当たり前ですが、その命令自身の意味が説明されています。</p><h2 style="text-align: left;">悪の原因は初学者の解説にコメントを使うこと</h2><p>私はコメントが誤って使われる原因は、初学者の説明にコメントが使われることです。プログラミング以外でも人など動物って「最初に見たもの」が刷り込まれます。幼少期の時に見たものがその人の「常識」となるわけです。</p><p>それと同じように、初学者のテキストに書かれているコメントを最初に見てしまうからその書き方が常識になってしまうわけです。</p><p><code>
</code></p><ol style="background-color: #eeeeff; color: black; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li style="background-color: #eeffff;">#include<stdio.h></li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;">int main(void)</li>
<li style="background-color: #eeeeff;">{</li>
<li style="background-color: #eeffff;"> int sum=0; <font style="color: green; font-style: italic;">//足し算する変数をリセットする</font></li>
<li style="background-color: #eeeeff;"> </li>
<li style="background-color: #eeffff;"> for(int i=1;i<=10;i++){ <font style="color: green; font-style: italic;">//1から10までループする</font></li>
<li style="background-color: #eeeeff;"> sum+=i; <font style="color: green; font-style: italic;">//現在のカウンターを足し算する変数に加算する</font></li>
<li style="background-color: #eeffff;"> }</li>
<li style="background-color: #eeeeff;"> </li>
<li style="background-color: #eeffff;"> printf(<font style="color: brown;">"%d\n"</font>,sum); <font style="color: green; font-style: italic;">//結果を表示する</font></li>
<li style="background-color: #eeeeff;">; </li>
<li style="background-color: #eeffff;"> return 0;</li>
<li style="background-color: #eeeeff;">}</li>
<li style="background-color: #eeffff;"></li>
</code></ol><p></p><p>これはよくある初学者向けテキストに書かれているコメントです。ただ、これを業務でやられると「ゴミコメント」になります。</p><h2 style="text-align: left;">初学者の学習ではコメントを封印する</h2><p>上記コードからコメントを除去します</p><p><code>
</code></p><ol style="background-color: #eeeeff; color: black; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li style="background-color: #eeffff;">#include<stdio.h></li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;">int main(void)</li>
<li style="background-color: #eeeeff;">{</li>
<li style="background-color: #eeffff;"> int sum=0;</li>
<li style="background-color: #eeeeff;"> </li>
<li style="background-color: #eeffff;"> for(int i=1;i<=10;i++){</li>
<li style="background-color: #eeeeff;"> sum+=i;</li>
<li style="background-color: #eeffff;"> }</li>
<li style="background-color: #eeeeff;"> </li>
<li style="background-color: #eeffff;"> printf(<font style="color: brown;">"%d\n"</font>,sum);</li>
<li style="background-color: #eeeeff;">; </li>
<li style="background-color: #eeffff;"> return 0;</li>
<li style="background-color: #eeeeff;">}</li>
<li style="background-color: #eeffff;"></li>
</code></ol><p></p><p>そして、初学者の説明として言葉で説明します。</p><p></p><blockquote><p>このコードは1から10までをループさせて、その値をSUMという変数に代入します。</p><p>forは(変数の初期化;とどまる条件;ループ一回が終了した時の処理)</p><p>+= という演算子は足し込むという意味です。例えばsum+=5 とすると sumの値に5を加えるという意味です。</p><p>そして、printfでその結果を出力します。</p></blockquote><p></p><p>この様な形でコードを説明します。非常にコメントとしてインラインで書きたくなりますが、初学者への変な刷り込み防止という意味で止めて下さい。</p><h2 style="text-align: left;">本当のコメント術を教える</h2><p>そして最後に、本当のコメント術を教えて下さい。</p><p><code>
</code></p><ol style="background-color: #eeeeff; color: black; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li style="background-color: #eeffff;">#include<stdio.h></li>
<li style="background-color: #eeeeff;"></li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;"><font style="color: green; font-style: italic;">//1から10までの数を足して表示する。</font></li>
<li style="background-color: #eeffff;"></li>
<li style="background-color: #eeeeff;">int main(void)</li>
<li style="background-color: #eeffff;">{</li>
<li style="background-color: #eeeeff;"> int sum=0;</li>
<li style="background-color: #eeffff;"> </li>
<li style="background-color: #eeeeff;"> for(int i=1;i<=10;i++){</li>
<li style="background-color: #eeffff;"> sum+=i;</li>
<li style="background-color: #eeeeff;"> }</li>
<li style="background-color: #eeffff;"> </li>
<li style="background-color: #eeeeff;"> printf(<font style="color: brown;">"%d\n"</font>,sum);</li>
<li style="background-color: #eeffff;">; </li>
<li style="background-color: #eeeeff;"> return 0;</li>
<li style="background-color: #eeffff;">}</li>
<li style="background-color: #eeeeff;"></li>
</code></ol><p></p><p>業務ならこの程度のコメントで十分です。やっていることは1から10までの数を足して表示する物です。このプログラムを実行すれば1から10の合計が表示されるわけであり、特にプログラミングテクニックとしての特記事項はありません。</p><p>初学者の学習テキストとしてのコメントを封印するのは苦しいかもしれませんが、初学者である期間は短いです。その後は業務としてのコメントを求められるので、初学者の間違ったコメントを封印することは非常に重要であると考えます。</p><p style="text-align: center;"><span style="font-size: x-large;"><b><a href="https://amzn.to/3VTw1dg" target="_blank">Amazonでコーディング術</a></b></span></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-17726689440439847112022-07-13T15:22:00.001+09:002022-07-13T15:22:32.640+09:00クラウドを使わずにバックアップが安心 ROBOCOPY と バックアップの習慣化<p> 皆さん、ファイルのバックアップは作成していますか? 私が聞いた限りでは「誰もやっていない」というのが正直なところです。ただ、そこまでパソコンというデバイスを信用しているのは怖いところです。</p><p>「良い道具は一生物」という言葉があります。実際、工具類は良いものを手に入れれば一生涯使えます。料理人の包丁もしっかりと手入れしていれば同様です。でも、パソコンに限っては全く違います。</p><p>理由としては、手入れする方法がまったくないためです。油をさす場所や定期的にチェックする場所などはありません。もちろん乱暴に扱えば壊れますが、丁寧に扱っても故障はします。</p><p>故障は何の前兆もなくやってきます。昨日まで調子良かった物が、今日は起動しないという事があります。そうなったら、今までのデータは全て消えてしまいます。運が良ければ救えるかもしれませんが。</p><h1 style="text-align: left;">文書ファイル程度ならクラウドに</h1><p>ExcelやWordなどの文書ファイル程度であれば容量が少ないので、OSが対応しているクラウドストレージに保存してください。ネットに接続されていれば自動的にバックアップされます。</p><h1 style="text-align: left;">堅いのは保存場所とバックアップを自ら決める</h1><p>クラウドは何も考えずに使えるので便利ですが、ネットに接続されていないと使えません。また、外部的なトラブルで自分のファイルが失われることもあります。そう、時々うまくいかないときがあります。</p><p>それを防止する方法は以下の2つの方法です。</p><p>まず、データの保管場所を確実に自分で決めてください。別に「マイドキュメント」で良いのですが、確実にエクスプローラーを使ってマイドキュメントがどこに有るか把握してください。笑えない事実でもありますが、いつもExcelでファイルが開けるが、どこに保存されているか把握できていないという人も多いです。これは、怖いので止めてください。</p><p>私の保管場所のお勧めはCドライブの下に data というフォルダを作りそこにファイルを保存する方法です。どんなアプリを使っても保存場所を選ぶことができるのであれば、dataフォルダの中に保存してください。</p><p>次に、バックアップを取る方法です。お勧めは外付けHDDやSSD,USBメモリです。ここに、先程の「マイドキュメント」や「DATA」フォルダの中身をコピーします。</p><h1 style="text-align: left;">コピーはロバストコピーコマンドを</h1><p>コピーをする方法は、フォルダにコピペすることはおすすめしません。理由は、間違えが発生するということ、意外に面倒という2つです。</p><p>私は、USBメモリや外付けHDD,SSDの中に以下のバッチファイルを設置し、時々接続したときに起動しています。バッチファイルの名前は何でも良いです。</p><p>それと、予めドライブの中に backup というフォルダも作っておきます。</p><p><code>
</code></p><ol style="background-color: #eeeeff; color: black; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li style="background-color: #eeffff;">cd /d %~dp0</li>
<li style="background-color: #eeeeff;">robocopy C:\data ./backup /E /ZB /J /COPY:DATOU /MIR /DCOPY:DAT /FFT /R:1 /W:10 /BYTES</li>
<li style="background-color: #eeffff;">pause</li>
</code></ol><p></p><p>このバッチファイルを右クリックして、「管理者として実行」を選ぶとコピーされます。間違えなくフォルダの中身は全てコピーされます。</p><p>さらに便利なのは、既に存在するファイルはコピーしないところです。変化があったところだけがコピーされるので時間の節約にもなります。</p><p>仕事が終わり、机の整理をしているときや、休憩中に実行をすれば良いと考えます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ7WQaPyWjxvE1ebIPeIgEE7Lvvbthtl2l5UjffVGaOG5l2O5m2G65cdQiLNNOecYU0Oes_Haa8mDAYkHlTrEMC5k9u2PTKvdPR07gq_EiuuXibzWBZaSQs7kNCczVGAjeX0p4LfapyxBDOPTBy2aCsUhwRX_tDpUmEaEZHq77XJP06G0zhs_TeSNOcA/s929/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%201.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="929" data-original-width="929" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ7WQaPyWjxvE1ebIPeIgEE7Lvvbthtl2l5UjffVGaOG5l2O5m2G65cdQiLNNOecYU0Oes_Haa8mDAYkHlTrEMC5k9u2PTKvdPR07gq_EiuuXibzWBZaSQs7kNCczVGAjeX0p4LfapyxBDOPTBy2aCsUhwRX_tDpUmEaEZHq77XJP06G0zhs_TeSNOcA/s320/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%201.jpg" width="320" /></a></div><b><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3z2Im6H" target="_blank">Amazonで<br />外付けドライブ</a></span></b></div></b><p><br /></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-44912037834654697182022-04-14T18:56:00.003+09:002022-04-14T18:56:35.404+09:00縦長動画の編集、公開方法 Reel や shorts メタデータで動画を90度回転 ffmpeg<p> 動画といえばテレビ。だから横長で見るのが常識と言われていました。かつては2001年宇宙の旅で、情報スクリーンは縦になるだろう? と言われていましたが横向きのままでした。更にテレビのワイド化でエスカレートしていました。</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/bSvlZ9pYxkQ" width="320" youtube-src-id="bSvlZ9pYxkQ"></iframe></div><br /><p></p><h1 style="text-align: left;">インスタが世界を変えた</h1><p>スマホが普及してもスクリーンの使い方は2001年宇宙の旅が予言する縦位置にならなかった。スマホというハードウェアは縦位置の撮影に対応しているし、それをSNSに公開すれば縦向きの写真や動画として認識されているにも関わらずです。</p><p>それが、インスタグラムのリールという機能で変わりました。理由としては単にインスタ運営の強制力だと考えます。 縦位置のリール機能であげればより目立つ場所に投稿されますよ!</p><p>目立ちたい人、トレンドセッターな人はこの流れに乗らないわけは無いと考えます。</p><h1 style="text-align: left;">縦位置動画を編集したい</h1><p>残念なところとして、縦位置動画の編集に対応した環境は非常に少ないです。一部のクリエイター向けの高額なソフトやスマホ内蔵のアプリ程度です。</p><p>今あるソフトを縦位置のために買い直すのも予算が乏しいフリーランスに取っては厳しいです。</p><h1 style="text-align: left;">FFMPEGで簡単変換</h1><p>実は縦位置動画って、その動画が縦ですよ!というメタデータを付加するだけで縦動画になります。</p><p>まずは、手持ちの動画編集ソフトで「左を上」にして動画を編集します。スマホ以外の高級カメラも、撮影者から見て時計回りに90度回して撮影すれば動画としては左が上になります。</p><p>そして、普通の動画として保存します。</p><p>次に、FFMPEGのファイルをダウンロードします。場所はググってください。ダウンロードしたプログラムファイルは適当な作業フォルダに展開してください。</p><p>先程の動画を input.mp4 と名前を変更します。</p><p><code>
</code></p><ol style="background-color: black; color: white; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li>ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=-90 output.mp4</li>
</code></ol><p></p><p>そしてコマンドラインを起動して上記コマンドを実行すれば output.mp4 という縦長動画が出来上がります。</p><p>これなら、昔から持っているカメラや編集機材で対応できます。縦位置に対応したカメラや動画編集ソフトを買う必要は取りあえずはありません。 ただ、最初から縦位置に対応した機材は楽ですので、余裕が出来たら手に入れてみてください。</p><p>縦動画サンプル <a href="https://www.youtube.com/shorts/xxuurXNBXBo" target="_blank">YouTube</a> <a href="https://www.instagram.com/p/CcUt__yAmpB/" target="_blank">Instagram</a></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-9990000411797805862022-03-21T17:26:00.002+09:002022-03-21T17:26:40.588+09:00ゼロクロススイッチは悪影響が大きいから使わないこと<p>エレクトロニクスやコンピュータに詳しい人なら「ゼロクロススイッチ」という物をご存知では無いでしょうか? 交流の電源の電圧ゼロのタイミングで投入すればスムーズに電気が入るというものです。</p><p>コンピュータやオーディオ機器を突入電流から守り、より長く大切な機器を使うことができるという説明です。 特にヴィンテージオーディオや高級オーディオに対してはずばり「ゼロクロススイッチ」という名前でアクセサリーが売られていたりします。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlT40-6PwEStRr-6mLDSVmcOM56-cNWEOVlLU5MKwmXpajA5ZDsQBuOhh0pys1FumxIZFVRz153Xr27sQfsm5ZQ-DtnB6s8uAv7i0Wa7xdEL7RyRlhSenD2wGo0jV1m3dj0ATucbPvq9rLtO7eCBc68dehKJI7idHiFdT1XI8cpxDZW5p0Vw4r6ZjKfw/s1280/%E3%82%B5%E3%83%A0%E3%83%8D%E3%82%A4%E3%83%AB2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlT40-6PwEStRr-6mLDSVmcOM56-cNWEOVlLU5MKwmXpajA5ZDsQBuOhh0pys1FumxIZFVRz153Xr27sQfsm5ZQ-DtnB6s8uAv7i0Wa7xdEL7RyRlhSenD2wGo0jV1m3dj0ATucbPvq9rLtO7eCBc68dehKJI7idHiFdT1XI8cpxDZW5p0Vw4r6ZjKfw/s320/%E3%82%B5%E3%83%A0%E3%83%8D%E3%82%A4%E3%83%AB2.jpg" width="320" /></a></div><br /><p></p><h1 style="text-align: left;">実は逆効果</h1><p>電子部品メーカーの『タイコエレクトロニクス』(Tyco Electronics / TE Connectivity)の<a href="https://www.te.com/jpn-ja/products/relays-contactors-switches/relays/intersection/zero-crossover-switching-transformers.html" target="_blank">レポート</a>の「<a href="https://www.te.com/usa-en/products/relays-contactors-switches/relays/intersection/zero-crossover-switching-transformers.html" target="_blank">Beware of Zero-Crossover Switching of Transformers</a>」では</p><p></p><blockquote>ゼロクロスオーバー ソリッドステート リレーは、変圧器または高誘導負荷のスイッチング方法として最悪と言えます。</blockquote><p></p><p>としています。説明は後回しにしますが、ヴィンテージオーディオやコンピュータ機器の電源には変圧器が入っているので、説明の通り最悪ということになります。</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/gebaD6n-tVU" width="320" youtube-src-id="gebaD6n-tVU"></iframe></div><br /><p></p><h1 style="text-align: left;">ゼロで投入すると逆起電力が発生しない</h1><p>トランスなどコイルに電圧を一気に投入すると、それに逆らう形で逆起電力が発生します。そのため電圧が高くなることは有りません。しかし、ゼロボルトから電圧を上げると逆起電力が発生しないため突入電流が多く流れます。<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihEd4_RRkmpXS6VqaJiM79f4yCx--5FTCxYHLS2b46HXTtjDxNbo1FDf_COCeUAMbTFiTpVuEhQiTUiAK6bYsG-eENOWl_92N0LBCrYRu12vIfpHnTs0qMjYBQM3f6Wlzvag3mGQ30NYupWnulMgGXgA7hWl3heL0u46ovjuBiQMcdZI0ufFnj53z9RA/s1980/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%201.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1080" data-original-width="1980" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihEd4_RRkmpXS6VqaJiM79f4yCx--5FTCxYHLS2b46HXTtjDxNbo1FDf_COCeUAMbTFiTpVuEhQiTUiAK6bYsG-eENOWl_92N0LBCrYRu12vIfpHnTs0qMjYBQM3f6Wlzvag3mGQ30NYupWnulMgGXgA7hWl3heL0u46ovjuBiQMcdZI0ufFnj53z9RA/s320/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%201.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">これが交流 一秒間に50/60回繰り返す</td></tr></tbody></table><br /></p><p>それにより過大な負荷がトランスや部品にかかり悪影響を与えます。</p><h1 style="text-align: left;">何故、ゼロクロススイッチが存在する</h1><p>悪いものだったら何故製品としてあるのか? それは、ごく一部に適した場所があるからです。 それは単純な抵抗負荷で突入電流が少ないものです。</p><p>抵抗負荷で思い浮かぶのがフィラメント電球ですが、フィラメントは冷えているときには抵抗値が低く過大な突入電流が流れるのでゼロクロススイッチの効果は有りません。</p><p>残るはヒーターなどの電熱線です。電熱線はゼロから電圧をかけることで突入電力を回避し断線を防止できます。</p><p>ただ、ヒーター負荷などほとんど無いと思われるので、ゼロクロススイッチの発揮できるケースは無いのではと考えます。<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFeEPTozxSLKw7z98I6-RQJhS0k0t1hGie0vzvRUIJ_qOreTj2t1nI5m15JrCpQ1ZEsd4H61xdZUle1HenOYkAwXRtcc0KmonGvqDQh7FUvzGzBpb2lBRxM2R6NEqnstsDHHk3MZyRJQZrj9ih2rxLS5ARjNrDpapj2M-Wyv2aKosdTl9ulUQ0Rbz2Sw/s1920/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%202.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1080" data-original-width="1920" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFeEPTozxSLKw7z98I6-RQJhS0k0t1hGie0vzvRUIJ_qOreTj2t1nI5m15JrCpQ1ZEsd4H61xdZUle1HenOYkAwXRtcc0KmonGvqDQh7FUvzGzBpb2lBRxM2R6NEqnstsDHHk3MZyRJQZrj9ih2rxLS5ARjNrDpapj2M-Wyv2aKosdTl9ulUQ0Rbz2Sw/s320/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%202.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">ゼロクロススイッチはこのタイミングでON/OFFする</td></tr></tbody></table><br /></p><h1 style="text-align: left;">結論、普通なスイッチで良い</h1><p>ゼロクロススイッチはやっていることも理解しやすいし、DIY初心者でも手を出しやすい理解しやすい回路図なので手を出す人が多いです。 ネットにも製作記事があります。</p><p>でも、ゼロクロススイッチが有効なら最初から機器の中に入っていると考えられます。昔よくあったクルマの燃費、馬力改善グッズみたいなポン付けしたり、DIYで軽くいじるだけで効果が出る物が有りました。 ただ、冷静に考えれば、そんな物があれば自動車メーカーに売れば良い話です。<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCl3kE9fb76Z0w-xaydwB_2utsFq5nNEvc84_IqEY_3t6WPT29i2TqLwXbyAP_qGHfXoALTYCxlV9DCGpRdjBddFTtKPQSHJYERLKM9gi5RJSo8x90_WCMB-mWWDbSql8hl50kcDfE29N3Bpgt8H2EwEmJUrnYmCsH87_AIxpgfetAXVkG6nBBI8OoJQ/s1920/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%203.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1080" data-original-width="1920" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCl3kE9fb76Z0w-xaydwB_2utsFq5nNEvc84_IqEY_3t6WPT29i2TqLwXbyAP_qGHfXoALTYCxlV9DCGpRdjBddFTtKPQSHJYERLKM9gi5RJSo8x90_WCMB-mWWDbSql8hl50kcDfE29N3Bpgt8H2EwEmJUrnYmCsH87_AIxpgfetAXVkG6nBBI8OoJQ/s320/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A%203.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">TE社の説明ではピークでONしたほうが良いとのこと</td></tr></tbody></table><br /></p><p>自宅や職場のシステムを改善するときには、このゼロクロススイッチの事を思い出して、決して安易に応用しないと考えて下さい。</p><p style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://www.youtube.com/watch?v=gebaD6n-tVU" target="_blank">動画を見る</a></span></b></p><p></p><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3KUDO56" target="_blank">Amazonで</a></span></b></div><b><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3KUDO56" target="_blank">ゼロクロスリレー</a></span></b></div></b><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-83192766540479974532022-03-16T11:13:00.002+09:002022-03-16T11:13:30.564+09:00【入門】漠然とプログラミング言語を覚えるにはC言語系 C++とか<p> 漠然とプログラミング言語を覚えたい。今流行りのプログラミング学習の流れでそう思う人が多いです。 良いことだと思って、「で、何をやりたいの? ゲーム制作、ウェブ、スマホアプリ?」と聞いても、とりあえずプログラミングを覚えたいとなります。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgY-lpQOoGqL_MTw1uMa4qDPw9sYEK4AepOR1E4mxoXoxRelBgwRdisPRwY3eK-XtUpFHVVZuyH-JoW85q9ufIuTUiFp_65b8ThebLSpRG6zyBZj8a3E_8LTmqKEeYfH1fl_iQcG--nBTxxOzjPyK_uhuIwvi67XpwyRY0PCM20YihE45hA9oBbKMbhlw=s1280" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="180" src="https://blogger.googleusercontent.com/img/a/AVvXsEgY-lpQOoGqL_MTw1uMa4qDPw9sYEK4AepOR1E4mxoXoxRelBgwRdisPRwY3eK-XtUpFHVVZuyH-JoW85q9ufIuTUiFp_65b8ThebLSpRG6zyBZj8a3E_8LTmqKEeYfH1fl_iQcG--nBTxxOzjPyK_uhuIwvi67XpwyRY0PCM20YihE45hA9oBbKMbhlw=s320" width="320" /></a></div><br /><p></p><h1 style="text-align: left;">そんな人はC言語</h1><p>漠然とプログラミング言語を覚えたいのであれば、C言語をおすすめします。理由としては、非常に汎用的に使えるところです。 特定の分野に特化した機能が基本部分には無いため言語の本質を覚えやすいと言う部分もあります。</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/nJ1F_ua8jhg" width="320" youtube-src-id="nJ1F_ua8jhg"></iframe></div><br /><p></p><h1 style="text-align: left;">C言語かC++か?</h1><p>よくわからないのであれば悩まないで下さい。単にC言語を増築したのがC++です。まずはどちらも同じって考えで取り組んで見て下さい。というか、この手の悩みがある人って、理解できないことを妄想して悩むって人かもです。「遠くの関係ない心配ばかりしていて、足元の穴に躓いて骨折するって人」です。</p><p>学生のときにもよくいた「どの参考書が良いのか?」って探しまくっている人です。結局、最初は周りの人が使っている参考書でも手に入れて勉強の習慣を付けることが重要なのですけど。 英会話初心者が「イギリス人から習うのは心配です」みたいな事を言っているようなものです。 そんな方々は一生何かを身につけることは無理なのではと考えます。</p><p>だから、よくわからなければC言語を覚えて下さい。</p><h1 style="text-align: left;">最初に習うことは</h1><p>C言語というとポインターと言われるが、とりあえずは忘れて下さい。 まずは、普通に変数に値を代入し、IF文で判定、FOR文で繰り返し、標準関数のprintfで文字出力をして色々動かしてみて下さい。</p><h1 style="text-align: left;">それでもポインターが気になる</h1><p><code>
</code></p><ol style="background-color: black; color: white; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li>#include<stdio.h></li>
<li>main(){</li>
<li></li>
<li> int *a; <font style="color: lightgreen; font-style: italic;">//整数型のポインタ(住所を書くことが出来るaというメモ用紙って認識)</font></li>
<li> int z=111; <font style="color: lightgreen; font-style: italic;">//整数型の実体 (zという土地を買ったと言う認識、上モノは111)</font></li>
<li> </li>
<li> a = &z; <font style="color: lightgreen; font-style: italic;">//zという土地の住所をメモ帳aに書き込む 実体の変数の先頭に & を付けるとその住所を返す</font></li>
<li></li>
<li> z = 240; <font style="color: lightgreen; font-style: italic;">//zという土地に240という家(上モノ)を建てる。</font></li>
<li> </li>
<li> printf(<font style="color: lightcoral;">"%d\n"</font>,z); <font style="color: lightgreen; font-style: italic;">//土地aにどんな家(上モノ)があるか表示する。このコードの場合は240と表示される</font></li>
<li></li>
<li> *a = 222; <font style="color: lightgreen; font-style: italic;">//メモ用紙aに書かれた住所に222という家(上モノ)を建てる。ポインター(メモ)に*を付けると上モノにアクセス出来る</font></li>
<li> </li>
<li> printf(<font style="color: lightcoral;">"%d\n"</font>,z); <font style="color: lightgreen; font-style: italic;">//土地aにどんな家(上モノ)があるか表示する。このコードの場合は222と表示される</font></li>
<li> </li>
<li>}</li>
</code></ol><p></p><p>簡単な例えです。まず、普通の変数は不動産に例えると「土地と上モノ」と考えて下さい</p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><p style="text-align: left;">int z = 111;</p></blockquote><p>とした場合、zという土地と111という上モノが手に入ります。次に</p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><p style="text-align: left;">z = 240;</p></blockquote><p>とすると、既に持っているzという土地の上モノを240にすると言うことです。まあ、たとえ話なので先程の上モノである111はどこに行った? という心配は忘れて下さい。(適切に廃棄されていますと納得を)</p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><p style="text-align: left;">int *a;</p></blockquote><p>上記のようにアスタリスクを付けて定義したものがポインターです。意味としては物件の住所をメモるすことが出来る変数として下さい。不動産のたとえだと単なるメモです。</p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><p style="text-align: left;">a = &z;</p></blockquote><p>上記の式では、zの住所をaにメモします。 物件を示す zに&を付けて&z とすると、zの物件の住所がメモ帳であるaに書き写されます。</p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><p style="text-align: left;">*a = 222;</p></blockquote><p>とすると aにかかれている土地の上モノを222にするということになります。</p><p>ではクイズです。現在 zの変数はいくつでしょうか? 答えを言うと 222です。 わからなければ以下の例えを順番に見て下さい</p><p></p><ol style="text-align: left;"><li>zという土地を111という上モノと一緒に取得 int z=111;</li><li>zという土地に240という上モノを建築 z = 240;</li><li>aというメモ帳のページを一枚買う int *a;</li><li>aというメモ帳にzという土地の住所をメモする a = &z;</li><li>aというメモ帳に書かれている土地の住所に222という上モノを建築 *a = 222;</li></ol><p style="text-align: left;">これで大体のポインタの意味が理解できたのではと思います。 ただ、とりあえずはこういう機能があるということだけで、普通の変数を使うことだけを考えて勉強すれば良いと考えます。</p><p style="text-align: left;">とりあえず何かプログラミング言語を覚えてみたいと考えている人は、今が吉日だと考えてC言語を覚えてみましょう。</p><p style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://www.youtube.com/watch?v=nJ1F_ua8jhg" target="_blank">動画を見る</a></span></b></p><p style="text-align: left;"></p><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3KJkKH6" target="_blank">C言語に関してAmazon</a></span></b></div><b><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3KJkKH6" target="_blank">で本を探す</a></span></b></div></b><p></p><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-4782589846436195962022-03-07T10:32:00.000+09:002022-03-07T10:32:17.591+09:00【電卓技】電卓だけで三平方の定理<p> エンジニア系ほど事務用の電卓を使わないのではと考えます。多くはExcelなどの表計算を使っていると思います。あと、笑ってしまうのは</p><p>「Excel起動できないからとりあえず計算しない」</p><p>って謎行動です。えっ、計算しないの? ってことです。意外にエンジニアって面倒なときは計算をしない傾向にあります。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjmlh-Fr4CeYeVwTy8EhQWH44cVieDF3wSH53q2g7wS0uFaG6QYJBqZIyCMPhKOGc81C83EzYImxct3C--3jbwyOATKHluAgT6muhHLHFqNMd5h-x4F5OsopWvRujxMU8Hr0GItnYd267qPWG5vdL5XB7oyMkMob3AGkpeuiDecHpx9cF5ViN5Yjv_HPQ=s1280" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="180" src="https://blogger.googleusercontent.com/img/a/AVvXsEjmlh-Fr4CeYeVwTy8EhQWH44cVieDF3wSH53q2g7wS0uFaG6QYJBqZIyCMPhKOGc81C83EzYImxct3C--3jbwyOATKHluAgT6muhHLHFqNMd5h-x4F5OsopWvRujxMU8Hr0GItnYd267qPWG5vdL5XB7oyMkMob3AGkpeuiDecHpx9cF5ViN5Yjv_HPQ=s320" width="320" /></a></div><br /><p></p><h1 style="text-align: left;">電卓はどこにでもある</h1><p>一般家庭のリビング、事務員の机の中、今だと子供のおもちゃ箱の中とか… いろいろな場所に電卓はあります。 込み入った計算をしたいのであればすぐに電卓を手にすれば良いのです。</p><p>でも、複雑な計算はメモが必要でしょ?</p><p>あっ、エンジニア! 技術者なのに技術のことを知らないの? って嫌味を言われそうな瞬間です。 電卓って昔から複雑な計算が出来てしまいます。多少、脳内で式変形とか必要ですが、それってエンジニアの得意技じゃないでしょうか?</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/tzA9DkWZKFk" width="320" youtube-src-id="tzA9DkWZKFk"></iframe></div><br /><p></p><h1 style="text-align: left;">三角形の斜辺の長さ</h1><p>三角形の斜辺の長さの求め方はご存知でしょうか? 「三平方の定理」「ピタゴラスの定理」だね! と言われそうです。 でも、その計算を電卓で行うには結局メモが必要じゃないか?</p><p>いえ、メモリー機能を使えばメモは不要です。正確には電卓内部にメモされています。</p><h1 style="text-align: left;">三角形の斜辺を求める方法</h1><p>高さを二乗したものと底辺を二乗したものを足して、それをルートする。</p><p>です。となると、高さの二乗と幅の二乗をメモしないと無理だろ? と言われそうです。</p><p>このときにメモリー機能を使うとメモは不要です。手順は</p><p></p><ol style="text-align: left;"><li>電卓の電源を入れる、リセットする</li><li>高さを入力する</li><li>×を押す(これで大体の電卓は二乗される)</li><li>MR+ボタンを押してその結果をメモリーに加算する</li><li>底辺を入力する</li><li>×を押す。</li><li>MR+ボタンを押す。これで、加算される</li><li>MRCボタンを押すと先程の加算したものが入力される</li><li>√ボタンを押す。これで斜辺が出る</li></ol><p style="text-align: left;">です。電卓のメモリー機能を使うと今まででは考えられなかった複雑な計算が普通な電卓で出来てしまいます。 ここまで手元に転がっている「電卓」というテクノロジーを使わないのは損だと考えます。 あと、「車輪の再発明」ってエンジニアを揶揄する言葉もありますが、電卓を使わないということはそれ以前の「車輪を使いこなせない」ということです。</p><p style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://www.youtube.com/watch?v=tzA9DkWZKFk" target="_blank">動画を見る</a></span></b></p><p style="text-align: left;"></p><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3HMWgLf" target="_blank">Amazonで</a></span></b></div><b><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3HMWgLf" target="_blank">電卓を調べる</a></span></b></div></b><p></p><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-7844018062818410192022-03-02T16:16:00.001+09:002022-03-02T16:16:40.949+09:00【課題提出】C言語でべき乗のプログラムをシンプルに書いてみた<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgHfdFlfK3q_SAAIR6Qtp0vOzoYd9kvF65XGBcERrioUtQCcZT7aRxWOuclWG7UNmgLFHbI48bq6aZi491wz9gvT9vC-TF0ofFq2yi4NCU0d4tfZwoJK9X6cWtijk1bn1fmrF0oMZp7dFOSlMXHeTgWSeH0vXrgKYabVJbhX-YhtTxyBnx7ishKsaC2RA=s1080" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEgHfdFlfK3q_SAAIR6Qtp0vOzoYd9kvF65XGBcERrioUtQCcZT7aRxWOuclWG7UNmgLFHbI48bq6aZi491wz9gvT9vC-TF0ofFq2yi4NCU0d4tfZwoJK9X6cWtijk1bn1fmrF0oMZp7dFOSlMXHeTgWSeH0vXrgKYabVJbhX-YhtTxyBnx7ishKsaC2RA=s320" width="320" /></a></div><br />課題提出などで、長いコードより短いコードのほうが提出が楽とされる場合があります。今回は「power」関数に相当するコードです。いわゆるべき乗を効率の良いループで計算するプログラムです。<p></p><p><code>
</code></p><ol style="background-color: black; color: white; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li>#include<stdio.h></li>
<li>main(){</li>
<li> int a,n,v;</li>
<li> scanf(<font style="color: lightcoral;">"%d%d"</font>,&a,&n);</li>
<li> for(v=1;n>0;v*=n%2?a:1,a*=a,n/=2);</li>
<li> printf(<font style="color: lightcoral;">"%d\n"</font>,v);</li>
<li>}</li>
</code></ol><p></p><p>以下がプログラム本体です。非常にシンプルで分かりやすいです。もちろん、アルゴリズム的にも洗練されており、単純に掛け算を乗数だけ繰り返すものでは有りません。</p><p>ただし、組み込み型のint変数を使っているので巨大な数はオーバーフローしますので注意です。 一応 2の30乗まで計算できます。</p><p>2</p><p>30</p><p>1073741824</p><p>このような計算結果です。</p><p></p><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3C3ZZmt" target="_blank">Amazonでレポート</a></span></b></div><b><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3C3ZZmt" target="_blank">についての書籍を確認する</a></span></b></div></b><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-7586788664161338922022-03-02T15:43:00.002+09:002022-03-02T15:43:17.319+09:00【C言語】べき乗を割り算で効率よく<p> 大学でコンピュータのアルゴリズムの基礎として「べき乗」の計算がよく出ます。まあ、実用的にはライブラリのpow関数でも使えば良いのですが、基礎的な関数を自分で実装できる機会も学生のときは必要だと考えます。</p><p>確かに仕事を始めると「車輪の再発明」みたいな言葉で何でも自作することは悪みたいな風潮はあります。ただ、初学者が自分で作ってみる機会は重要です。建築家が研究のために小さな小屋や木工製品を作るように、プログラマも既存の関数を自分で作ってみて下さい。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhtzj6fqMnTSKt-sqwa8pirwS-B9WXv7_9lbqM8SRs2tcb4xsqYB5qA-tkrY6DQ_mJ3HeEpol9-g09oFxa_2DTmH7Qg7IJUEHUuuWDeKkTXsaNgEz16ggWCsSfYZ6hPadV6Xo-H7rThX-_n5ZpXoEfT_eAcjuW7mIPz9FcWZCcHpa6rRBnm6nUFtJiPEQ=s1080" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEhtzj6fqMnTSKt-sqwa8pirwS-B9WXv7_9lbqM8SRs2tcb4xsqYB5qA-tkrY6DQ_mJ3HeEpol9-g09oFxa_2DTmH7Qg7IJUEHUuuWDeKkTXsaNgEz16ggWCsSfYZ6hPadV6Xo-H7rThX-_n5ZpXoEfT_eAcjuW7mIPz9FcWZCcHpa6rRBnm6nUFtJiPEQ=s320" width="320" /></a></div><p></p><h1 style="text-align: left;">まず思いつく方法</h1><p><code>
</code></p><ol style="background-color: black; color: white; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li>unsigned int power1(const int x,const int n){</li>
<li></li>
<li> unsigned int val = 1;</li>
<li> </li>
<li> for(int i=1;i<=n;i++){</li>
<li> val *= x;</li>
<li> }</li>
<li> </li>
<li> return val;</li>
<li>}</li>
</code></ol><p></p><p>上記の関数を思いつくのでは無いでしょうか? 単純に指数だけループして基底部を掛け算しています。2の30乗を計算するときも 2*2*.....*2 と30回繰り返しています。</p><p>分かりやすいアルゴリズムですが、もっと最適な方法があるだろうと言う疑問を持つと考えます。</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/XFlyF60nBCo" width="320" youtube-src-id="XFlyF60nBCo"></iframe></div><br /><p></p><h1 style="text-align: left;">指数部を2進数にしてみる</h1><p>先程の30と言う数字を2進数にすると</p><p style="text-align: center;"><span style="font-size: large;">(30)</span><span style="font-size: xx-small;">10</span>=<span style="font-size: large;">(11110)</span><span style="font-size: xx-small;">2</span></p><p>となります。具体的には2で割った余りが2進数の桁になります。一番最初が一番地位いさい桁です。</p><p><span style="font-family: courier; font-size: medium;"><b>30÷2 = 15…0<br />15÷2 = 7…1<br /> 7÷2 = 3…1<br /> 3÷2 = 1…1<br /> 1÷2 = 0…1</b></span></p><p>数字を2で割った余りが2進数の桁数になっていることが確認出来ます。次に2を繰り返し二乗します。先程の30を2進数にした桁数である5回やってみます。</p><p style="text-align: center;"><span style="font-size: medium;">2,4,16,256,65536</span></p><p>となります。この数字を先程の2進数の桁が少ない方からかけ合わせて見ます。</p><p style="text-align: center;"><span style="font-size: large;">0*2,1*4,1*16,1*256,1*65536</span></p><p>と計算できます。後はこの数字を全て掛け算すれば2の30乗が計算できます。答えは</p><p style="text-align: center;"><span style="font-size: large;">1073741824</span></p><p>です。</p><h1 style="text-align: left;">実際のコード</h1><p><code>
</code></p><ol style="background-color: black; color: white; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li>unsigned int power2(const int a,const int n){</li>
<li> unsigned int val = 1;</li>
<li> int base = a;</li>
<li> int exp = n;</li>
<li> </li>
<li> while(exp > 0){</li>
<li> if(exp%2){</li>
<li> val *= base;</li>
<li> }</li>
<li> base *= base;</li>
<li> exp /= 2;</li>
<li> }</li>
<li> return val;</li>
<li>}</li>
</code></ol><p></p><p>これが指数を2進数にしたコードです。3行目では base に基底部、4行目ではexpに指数を入れています</p><p>6行目で expがゼロより上の条件でループします。 7行目の if 文では exp%2 は 2で割った余りがあれば2進数の桁が1ということで、現在の基底部base の内容が掛け算されます。</p><p>その後、基底部は二乗されます。単に自分自身を自分自身で乗算しています。 expは2で割り算しています。整数型なので小数点は切り捨てられます。</p><p>忘れがちなことですが、わり算の答えで余りを出す方法を思い出して下さい。小学生の算数や高校数学の整数で出てきているはずです。</p><p>他には</p><p>base *= base;<br />exp /=2;</p><p>と言った記述がありますが、以下と同じ意味です。表記が簡潔になるのと、間違えが発生しにくいと言う利点がありますので使って下さい。</p><p>base = base * base;<br />exp = exp / 2;</p><p>これと全く同じことが行われます。</p><h1 style="text-align: left;">途中結果を出すコード</h1><p><code>
</code></p><ol style="background-color: black; color: white; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li>unsigned int powerInst(const int a,const int n){</li>
<li> unsigned int val = 1;</li>
<li> int base = a;</li>
<li> int exp = n;</li>
<li> </li>
<li> printf(<font style="color: lightcoral;">"Idx / 2 Div ...M Base * M\n"</font>);</li>
<li> while(exp > 0){</li>
<li> printf(<font style="color: lightcoral;">"%3d / 2 = %3d...%1d %10d * %1d\n"</font>,exp,exp/2,exp%2,base,exp%2);</li>
<li> if(exp%2){</li>
<li> val *= base;</li>
<li> }</li>
<li> base *= base;</li>
<li> exp /= 2;</li>
<li> }</li>
<li> printf(<font style="color: lightcoral;">" %10d\n"</font>,val);</li>
<li> return val;</li>
<li>}</li>
<li></li>
</code></ol><p></p><p>上記コードは途中結果を出力します。これで動作を確認してみて下さい。実行結果は以下です。</p><p><code>
</code></p><ul style="background-color: black; color: white; list-style: outside none; margin: 0px; padding-left: 5px;"><code>
<li>Idx / 2 Div ...M Base * M</li>
<li> 30 / 2 = 15...0 2 * 0</li>
<li> 15 / 2 = 7...1 4 * 1</li>
<li> 7 / 2 = 3...1 16 * 1</li>
<li> 3 / 2 = 1...1 256 * 1</li>
<li> 1 / 2 = 0...1 65536 * 1</li>
<li> 1073741824</li>
</code></ul><p></p><p>一列目が指数、二列目が2、三列目が割り算、四列目が余り、五列目が基底部、六列目が余りです。</p><p>べき乗計算は既にライブラリとしてありますので、正直この実験は「車輪の再発明」に近いです。 ただ、最初に言ったように初学者ほどこのような基礎的なアルゴリズムを空で打てるようにしておいて下さい。</p><p>あと、べき乗計算でこの方法を応用すると劇的に処理を高速化出来ます。今回も正攻法だと指数部30だと30回のループが必要ですが、今回の方法だと5回のループで計算できています。この知識は高度なプログラミングにも応用が利くので覚えておいても損は無いと考えます。</p><p></p><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3Ce2nHm" target="_blank">Amazonでアルゴリズム</a></span></b></div><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3Ce2nHm" target="_blank">の本を確認する</a></span></b></div><div style="text-align: center;"><b><br /></b></div><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://www.youtube.com/watch?v=XFlyF60nBCo" target="_blank">動画を見る</a></span></b></div><p></p><p><br /></p><p><br /></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-43371716639139426752022-03-01T13:51:00.004+09:002022-03-01T13:51:42.714+09:00【常に初心者】学ぶときには地頭力を封印すること<p> エンジニアと呼ばれる人ほどMicrosoft Officeの研修を受けていないと私は考えます。もちろん私自身も現役のときは受けてもいないし、入門書すら読んだことが有りませんでした。これらのツールは「地頭力」と呼ばれる方法を使えばほとんどのエンジニアは使えてしまいます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi6_dQQf6ND2cz7Tk2sHApzZb1muQbwnrY9EUtXgcIwFSuSfY9zgUItYVLWLw8YVoKiEW-3lvNStzq4-zMSqkM_m9WjQOGnJpLag__3rojWlKKOcohsaU9WbvUezckbS4uY5L-HRbAENJui8EWZpQOI6zsO5moMXM6-dj_2GWIXfs7VCm1QAl-huyQOHA=s1080" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1079" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEi6_dQQf6ND2cz7Tk2sHApzZb1muQbwnrY9EUtXgcIwFSuSfY9zgUItYVLWLw8YVoKiEW-3lvNStzq4-zMSqkM_m9WjQOGnJpLag__3rojWlKKOcohsaU9WbvUezckbS4uY5L-HRbAENJui8EWZpQOI6zsO5moMXM6-dj_2GWIXfs7VCm1QAl-huyQOHA=s320" width="320" /></a></div><br /><p></p><h1 style="text-align: left;">地頭力の罠</h1><p>新しいことも地頭力で使うことが出来る。例えばC言語を知っていれば、困らずにJavaのコードを読むことが出来ます。細部が違うだけでコードとしての振る舞いは全く同じと言って良いでしょう?</p><p>しかし、C言語とJavaではコンセプトが違います。Javaではオブジェクト指向と呼ばれる概念。いわゆるClassというものがあります。しかしC言語の地頭力でJavaを使いこなした場合、そのClassを使うという部分が抜け落ちます。</p><h1 style="text-align: left;">初心者としてコンセプトを学ぶ</h1><p>先程のOfficeに話を戻すと、昔のOfficeを使えれば今のOfficeも使えます。しかし、追加された機能に関しては全て無視することになります。 そのため、新しい関数はもちろん、テーブルの中にテーブルを作ることが出来るという概念すら使えないということになります。</p><p>そのため、新しいことを学ぶ場合はとりあえず「地頭力」を封印して下さい。</p><h1 style="text-align: left;">最後に</h1><p>地頭力は自分の意思決定を迅速にするためだけに使うのが有用です。しかし、新しいことを学ぶ場合は邪魔になります。そのため、類似のものだと感じたとしてもその考えは捨てて全く新しいものを学ぶという姿勢が重要です。</p><p></p><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/35bAmEl" target="_blank">地頭力について</a></span></b></div><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/35bAmEl" target="_blank">Amazonで確認する</a></span></b></div><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-40057476363611656932022-02-28T16:45:00.003+09:002022-02-28T16:45:41.312+09:00【C言語】研究 ループカウンタを改変出来なくする<p> C言語のfor文では通常 i がカウンターとされます。そのときに i をループ中で改変出来るとバグが多く発生する原因になります。また、カウンタを改変する意図がなくても行ってしまう可能性もあります。 今回はこの解決策について考えてみます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh-5y3-A4a7Blq1wngyg1JUNGnUCmS2Gar5ebzM0FPXgnfC2QtDQABkNIFCR_fdtg4qGiGF-BN6xvZ99rbEEmyffKuI45_-SaedZPyphwxqPW0JOm-VLwviielrFwzXNvqV3p-WFreGikk90Gxwn1iO9Vy4llbTLlPf6ZlXvGStnzeVtOlLZIWQ6riKEQ=s1452" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1452" data-original-width="1452" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEh-5y3-A4a7Blq1wngyg1JUNGnUCmS2Gar5ebzM0FPXgnfC2QtDQABkNIFCR_fdtg4qGiGF-BN6xvZ99rbEEmyffKuI45_-SaedZPyphwxqPW0JOm-VLwviielrFwzXNvqV3p-WFreGikk90Gxwn1iO9Vy4llbTLlPf6ZlXvGStnzeVtOlLZIWQ6riKEQ=s320" width="320" /></a></div><p></p><h1 style="text-align: left;">ループ開始時にconstにする</h1><p><code>
</code></p><ol style="background-color: black; color: white; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li>#include<stdio.h></li>
<li></li>
<li>main(){</li>
<li></li>
<li> for(int i=0;i<10;i++){</li>
<li> const auto x = i; <font style="color: lightgreen; font-style: italic;">//ループカウンターを定数として代入</font></li>
<li> {</li>
<li> const int i =0; <font style="color: lightgreen; font-style: italic;">//生のループカウンター iにアクセス出来ないようにこれで封印</font></li>
<li> printf(<font style="color: lightcoral;">"%d "</font>,x);</li>
<li> }</li>
<li> }</li>
<li> </li>
<li>}</li>
</code></ol><p></p><p>6行目で const auto x=i; としています。これは i の内容を定数として x に代入しています。変化する値なのに定数というのは変ですが、ここでの意味は 変化する値 i を使いこれ以降のxを定数とすることです。</p><p>これにより x の値は変更できません。 x++ などの変更するコードを記述するとコンパイルエラーが出るのでループカウンターの値を変更するバグを防げます。</p><h1 style="text-align: left;">更に i も改変不可にする</h1><p>これでも、直接 i を変更可能です。 今回はこれを防ぐために、ブロックを一つ追加しています。 7と10行目の括弧囲んだ部分が追加したブロックです</p><p>このブロックの中の 8 行目で const int i = 0; としています。これによりループ変数としての i にアクセスできなくなります。 さらに i++ など変更を加えようとするとエラーが出ます。 難点としては i を参照すると この場合は0が取得できるところです。</p><p>仕様として error 型でも作って 参照したら即エラーになるような型でもあれば良いのですけど。</p><p></p><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3K54Gin" target="_blank">AmazonでC言語の</a></span></b></div><b><div style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3K54Gin" target="_blank">書籍をチェックする</a></span></b></div></b><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-16501018292820237632022-02-28T15:18:00.008+09:002022-02-28T15:18:57.650+09:00【C言語】プログラミング言語C++ は必読書です<p> 私が経験した周りだけのことかもしれませんが、IT業界の人ほど新しい物事を基礎的に習っていない傾向にあると考えます。 例えば、プログラミング言語は最初だけ入門し、後からはいわゆる「地頭力」的な力で覚えていると考えます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEja_cTcY6VNv0DRufO7V2H5Bnv_yGUcy_b3WN3BKNL3kQDMAk7cZLCW_1-EJQfBJiPoDwBcjlmUgoBe_4LehGg1QwjKKNVRlRj8AoLb_rocyy0zRBZT4V8kjxIYEEw9Ii1cGL2SeDjMpyqvwANFlneip3cL8x5P6TT3Gdzl61myf49iQesm4Ca2Erkidw=s1080" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1079" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEja_cTcY6VNv0DRufO7V2H5Bnv_yGUcy_b3WN3BKNL3kQDMAk7cZLCW_1-EJQfBJiPoDwBcjlmUgoBe_4LehGg1QwjKKNVRlRj8AoLb_rocyy0zRBZT4V8kjxIYEEw9Ii1cGL2SeDjMpyqvwANFlneip3cL8x5P6TT3Gdzl61myf49iQesm4Ca2Erkidw=s320" width="320" /></a></div><br /><p></p><h1 style="text-align: left;">地頭力は危険</h1><p>プログラミングじゃない分野で地頭力は行動指針を決める参考程度にしかならないと言いました。 他人への助言に地頭力は使ってはいけません。 それと同様に新しい言語を習うときに完全な地頭力を使うと大きな失敗をします。</p><p>確かに変数の宣言、代入、ループなどは大きく違わないので地頭力でコードを読み続けることが出来ます。 しかし、地頭力による理解では全く新しいコンセプトは理解できないと考えます。</p><h1 style="text-align: left;">C++とConst</h1><p>実は私は仕事でC言語やC++を使っていました。今でもどこかで私が書いたサービスが動いているのではないかと考えます。 しかし、最近C++の解説書である<b><a href="https://amzn.to/3M1WaTn" target="_blank">プログラミング言語C++</a></b>を読んで衝撃を覚えました。</p><p>実は新しい言語を古いスタイルで使っていたと言うところです。私はC++を「構造体に関数を書くことが出来る便利な言語」と言う程度でしか考えていませんでした。</p><p>知らなかったことの一例をあげると const です。 もちろん、const は定数の宣言であることは知っています。</p><p>const float g = 9.8;</p><p>って書けば浮動小数点型でgという変数が定数として宣言される。そしてプログラム内部で書き換えようとするとコンパイルエラーとなると言う事は知っていました。</p><p>しかし、これはどうでしょうか?</p><p><code>
</code></p><ol style="background-color: black; color: white; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code>
<li> int x;</li>
<li> scanf("%d",&x);</li>
<li></li>
<li> const int y=x;</li>
<li> </li>
<li> for(int i=0;i<x;i++) printf("*");</li>
</code></ol><p></p><p>えっ、constなのにプログラム中で変化する数字を代入しているの? って疑問です。</p><h1 style="text-align: left;">constの真の意味</h1><p>上記のコードでは2行目で入力した値をxに代入しています。そして、そのxを定数型のyに代入しています。 当然xは入力される値で不定です。だったら、y=x; としているからconst 定数じゃないだろ?</p><p>ここではそういう意味ではなく、4行目では変化するxを今から定数にすると言う意味で使っています。</p><p>このため、4行以降で y=3; とするとコンパイルエラーになります。</p><h1 style="text-align: left;">変数の自動宣言</h1><p>そう言われてみれば auto という宣言が有ったと思いますが、その真意は知らないままだと思います。</p><p><code>
<code>
</code></code></p><ol style="background-color: black; color: white; in-left: 0; list-style: outside decimal-leading-zero; margin: 0px; padding-left: 36px;"><code><code>
<li>#include<stdio.h></li>
<li></li>
<li>int f(int a){</li>
<li> return a*a;</li>
<li>}</li>
<li></li>
<li>main(){</li>
<li> int x;</li>
<li> </li>
<li> scanf("%d",&x);</li>
<li></li>
<li> const auto y=f(x);</li>
<li> </li>
<li> printf("%d\n",y);</li>
<li>}</li>
</code></code></ol><p></p><p></p><p>このコードの12行目で const auto y=f(x); としています。 この宣言をすることでyは関数f()の戻り値で型式を宣言されます。</p><p>これにより、一箇所のintの定義によりそれに関連する場所全てが int で宣言されます。 また、const により関数f()の戻り値が代入されたyはこの後書き換わることが無いということも明示されています。</p><p>余談ですが、このコードを見ると古株から</p><p>「変数は関数の開始時に定義するように」</p><p>と言われそうです。しかし、C++の解説書では代入間違えをしないという意味で、途中で宣言することに意味があるとしています。</p><p>今回のyもmain関数の先頭で宣言するより、途中で明確に const であるとしたほうがわかりやすく意図しない変更防止が出来るとしています。</p><h1 style="text-align: left;">最後に</h1><p>ITエンジニアってMicrosoft Office の入門書って読んだことが無いのではと考えます。私もそうでした。ただ、最新のOfficeの入門書を読むと昔とはコンセプトが違うことに気が付きます。 それと同じように、新しい言語も古い言語には無いコンセプトがあります。</p><p>もちろん、言語なので昔のコンセプトで組むことも出来ますが、それでは新しい言語を使っても楽は出来ません。 新しいツールには確実に楽に出来る機能が追加されています。</p><p>ですので、C言語からC++を覚えた人や、C++はクラスが追加されただけと思っている人は是非入門書や解説書を読んでみて下さい。</p><p style="text-align: center;"><b><span style="font-size: x-large;"><a href="https://amzn.to/3M1WaTn" target="_blank">プログラミング言語C++<br />をAmazonで確認する</a></span></b></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-51750215231861585632022-02-27T14:10:00.002+09:002022-02-27T14:41:29.026+09:00【防衛術】安全では有りません!とサイトに表示される意味<p> ブラウザでウェブを表示するときに「安全ではありません」と表示されることが有りました。皆さん、この意味は分かりますか?</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh8zans32pUpnq1x2nXjOa2lrYBAnm2TQ9bnD3aMsFnyuLFTOk8sv2VMLaH4oNElkANCXXny5YQjkOO7SHsW5fASWShHbV6SnZ5XFyH4Zaeae-9y42vGsVU1eiHoyxIk2fQregAvGQMP932PGwNFG0AYXYmO0L43J52K5UCu-6YJewD-tqVveMFfaYp9A=s750" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="750" data-original-width="750" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEh8zans32pUpnq1x2nXjOa2lrYBAnm2TQ9bnD3aMsFnyuLFTOk8sv2VMLaH4oNElkANCXXny5YQjkOO7SHsW5fASWShHbV6SnZ5XFyH4Zaeae-9y42vGsVU1eiHoyxIk2fQregAvGQMP932PGwNFG0AYXYmO0L43J52K5UCu-6YJewD-tqVveMFfaYp9A=s320" width="320" /></a></div><p></p><h1 style="text-align: left;">安全では有りません!の勘違い</h1><p>あるものが「安全では有りません」と言われた場合他のものは「安全」。 これは間違えです。単にあるものが「安全じゃない」というだけです。それ以外については言及していません。</p><h1 style="text-align: left;">安全じゃないサイトの意味</h1><p>安全ではないという意味は、そのサイトが誰のものか保証されていないと言う意味です。なので、その表示が無いサイトは「誰のサイトか保証されている」という程度の意味です。</p><p>一方で、安全じゃないと表示されていないサイトは単に「誰のサイトか保証されている」というだけです。なので無条件で信用出来るわけでは無いですが、詐欺グループの特定などがしやすいです。そのため、安全じゃないサイトと比べると詐欺に使われる率が低めです。</p><h1 style="text-align: left;">安全じゃないサイトは見てはいけない?</h1><p>そんな事は無いです。特に見るだけでは何も問題は有りません。ググった結果「安全じゃないサイト」がヒットした場合でも見て構いません。しかし、安全じゃないサイトのリンクをクリックして、その先で個人情報やクレジットカード情報を入力することは避けて下さい。</p><p><a href="http://t.kink.jp/unsafe/">http://t.kink.jp/unsafe/</a> このURLは私が作成した「安全じゃない」と表示されるサイトです。しかし、見るだけなら問題は全く有りません。</p><h1 style="text-align: left;">いつもの通販サイトに「安全じゃない」と出ている場合</h1><p>フィッシング詐欺の可能性があります。現在の買い物は中止してブラウザを閉じて下さい。再度、正しいアドレスを入力して買い物をやり直して下さい。</p><p>まとめ</p><p></p><ul style="text-align: left;"><li>安全じゃないサイトを閲覧するだけなら問題ない</li><li>安全じゃないサイトの掲示板に匿名で書くことは問題ない</li><li>安全じゃないサイトで個人情報や決済情報を入れるのは問題ある</li><li>いつもの通販サイトに安全じゃないと表示された場合はブラウザを閉じる</li></ul><p style="text-align: left;">です。</p><p style="text-align: left;"><b><a href="https://amzn.to/3vntZbI" target="_blank">Amazonでネットセキュリティについてチェックする</a></b></p><p></p><p><br /></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-2235981826764901542022-02-27T12:24:00.003+09:002022-02-27T12:24:29.095+09:00【節約術】固定ネットを入れるべきかの判断<p> 「固定ネットを使うとWi-Fiでパケ代節約」 自宅の固定ネットの宣伝でよくあります。確かに固定ネットでパケ代は節約出来るのは間違えは有りません。しかし、多くの場合は損していることが多いです。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgNwtRgtt7m0Fb0egqYuhNIdxl7SkqdxpSM7jPGGUo8gd_NMQRpuPaQCSfYlke59bQuZjJzLE_n85_DBDeR0L0zdrz-70dWtvhXrCaJD6voL3CN5MweD55RUi8nSeAy6_ju7gTLiOY9_1fWmCbIEAnJe7OWm72rQOTcCy2hGOnZhCpq_Z6s5-Pf4ilBrA=s2259" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2259" data-original-width="2259" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEgNwtRgtt7m0Fb0egqYuhNIdxl7SkqdxpSM7jPGGUo8gd_NMQRpuPaQCSfYlke59bQuZjJzLE_n85_DBDeR0L0zdrz-70dWtvhXrCaJD6voL3CN5MweD55RUi8nSeAy6_ju7gTLiOY9_1fWmCbIEAnJe7OWm72rQOTcCy2hGOnZhCpq_Z6s5-Pf4ilBrA=s320" width="320" /></a></div><p></p><h1 style="text-align: left;">一人暮らしで出先でも利用する人</h1><p>「動画投稿とかライブ配信をしまくっている人」という極端な例を除き、一般的な利用方法であればスマホのプランを『ギガモンスター』などにして単体運用したほうが安いです。</p><p></p><ul style="text-align: left;"><li>固定5000円+携帯6650円(ドコモ、ギガプレミア)</li><li>固定5000円+携帯3000円(楽天モバイル最大利用)</li><li>固定なし+携帯6650円(ドコモ、ギガプレミア)</li><li>固定なし+携帯3000円(楽天モバイル最大利用)</li></ul><p style="text-align: left;">結局、外でパケットを使ってしまうので自宅でWi-Fi節約してもコスト的に意味は有りません。</p><h1 style="text-align: left;">一人暮らしで自宅にこもる人</h1><p style="text-align: left;">リモートワークや個人事業主でほとんど自宅から出ないと言う場合は</p><p style="text-align: left;"></p><ul style="text-align: left;"><li>固定5000円+携帯1500円(ドコモ、ギガプレミア)</li><li>固定5000円+携帯0円(楽天モバイル最小利用)</li><li>固定なし+携帯6650円(ドコモ、ギガプレミア)</li><li>固定なし+携帯3000円(楽天モバイル最大利用)</li></ul><p style="text-align: left;">と、3大キャリアなら同じ、格安キャリアでも固定回線の利点を活かせません。どちらにしても一人暮らしなら固定回線は不要ではと考えます。</p><h1 style="text-align: left;">家族の場合</h1><p style="text-align: left;">4人家族で全員スマホを持っている場合を考えます。煩雑になるので固定回線と楽天モバイルで考えてみます。</p><p style="text-align: left;"></p><ul style="text-align: left;"><li>固定なし 携帯12000円(楽天モバイル最大利用) </li><li>全員が出先利用 固定5000円+携帯12000円(楽天M最大利用)</li><li>一人が自宅利用 固定5000円+携帯9000円</li><li>二人が自宅利用 固定5000円+携帯6000円</li><li>三人が自宅利用 固定5000円+携帯3000円</li><li>四人が自宅利用 固定5000円+携帯0円</li></ul><p style="text-align: left;">と自宅利用が3人以上なら固定ネットの導入がお得です。</p><h1 style="text-align: left;">家電がネットに接続されている</h1><p style="text-align: left;">家電がネットに接続されているから固定ネットが必要? 体重計やロボット掃除機、スマートリモコンの利用であればIoTプランを考えて下さい。IoTとは「モノのインターネット」という意味で、スマートスピーカーやリモコン、ロボット掃除機など小容量のパケットを低速で接続するプランです。このプランであればロケットモバイルの神プランなど月額数百円もの物があります。</p><h1 style="text-align: left;">テレビはテザリングする</h1><p style="text-align: left;">IoTプランは低速なのでネットフリックスやフールーなどの動画を見ることは出来ません。その場合はそれぞれの見る人がスマホをテザリングして下さい。</p><h1 style="text-align: left;">四人家族で自宅利用が3人以上なら固定ネット</h1><p style="text-align: left;">結構、衝撃的です。4人家族で3人も家にこもっている家庭は少ないと思います。ということは、多くの家庭では光ネットなどの固定ネットは不要なのではと考えます。</p><p style="text-align: left;">一ヶ月5000円。それを20年間5%の複利で積み立てたとすると。</p><p></p><p></p><p></p><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><p></p><p style="text-align: left;"></p><p style="text-align: left;"></p><p style="text-align: left;"><b>2,055,168円</b></p><p></p><p></p><p></p></blockquote><p></p><p style="text-align: left;"></p><p style="text-align: left;"></p><p style="text-align: left;">です。<a href="https://www.fsa.go.jp/policy/nisa2/moneyplan_sim/" target="_blank">金融庁のサイト</a>で計算できます。二十年間で200万円近い貯蓄が出来ます。これは非常に大きいですので考えてみて下さい。<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiz4B8vnChpdLao_VojlgWXGw4V-RpDwVVFOQFd_X46nqK1QZhVvuw4_-gdSXUmuh90_EJcoEdObIdHAfaZEeqXgDbC6mvPo511Q-kZeHXFDhx-5JhyGIxWQqsGTI_xypP29P4NfnVmA5C006kRBXm8bJ811G5piZ3jPm6cEUpm9xL2cwZOFBSFnWBrbg=s1878" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1412" data-original-width="1878" height="241" src="https://blogger.googleusercontent.com/img/a/AVvXsEiz4B8vnChpdLao_VojlgWXGw4V-RpDwVVFOQFd_X46nqK1QZhVvuw4_-gdSXUmuh90_EJcoEdObIdHAfaZEeqXgDbC6mvPo511Q-kZeHXFDhx-5JhyGIxWQqsGTI_xypP29P4NfnVmA5C006kRBXm8bJ811G5piZ3jPm6cEUpm9xL2cwZOFBSFnWBrbg=s320" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">毎月5000円を20年間5%の複利で積立運用した場合</td></tr></tbody></table></p><p style="text-align: left;"></p><ul style="text-align: left;"><li>一人暮らしの場合は固定回線は損</li><li>四人家族で二人以上は出先の人は固定回線不要</li><li>テレビは見る人の端末でテザリングする</li><li>スマート家電は月々数百円のIoTプランを考える</li></ul><div><p style="text-align: left;">です。</p><b><a href="https://amzn.to/3Iq9hLW" target="_blank">IoTについてAmazonで確認する</a><br /><a href="https://amzn.to/35uCXJ5" target="_blank">Simカードを使うLAN対応アクセスポイントをチェック</a></b></div><p></p><p></p><p></p><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-90046031703971762922022-02-25T15:14:00.005+09:002022-02-25T15:14:54.895+09:00【嘘】収納できるからノートパソコンを選ぶ<p> 自宅でパソコンを買う人の多くは「ノートパソコン」を選んでいます。理由の一つとして「使わないときに収納できる」です。しかし、私が見た感じ衝撃的な事実があります。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi6BIWTKIbe2CY-V6TYA9-47w28-oH3ueRFDxhDiY1XEDBYZAVFVff5z6-Jq4A3ZENtOVGKus5brALLf1gu0flMotpk4MtydVgzUEkWCPmDcVn3nKkoKc7NnMFz14DByPsJfMZubYiOeMfFRILSEj3Y9VaK2B49zKO_diWVfrweLuRZPWB4otdcIt8UXw=s1080" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1079" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEi6BIWTKIbe2CY-V6TYA9-47w28-oH3ueRFDxhDiY1XEDBYZAVFVff5z6-Jq4A3ZENtOVGKus5brALLf1gu0flMotpk4MtydVgzUEkWCPmDcVn3nKkoKc7NnMFz14DByPsJfMZubYiOeMfFRILSEj3Y9VaK2B49zKO_diWVfrweLuRZPWB4otdcIt8UXw=s320" width="320" /></a></div><p></p><h1 style="text-align: left;">ノートパソコンを収納する人などいない</h1><p>アンケートとか査読論文の類じゃないのですが、私が見たところほぼ全ての家庭ではノートパソコンは机に上に出しっぱなしです。あと、開きっぱなしでキーボードにはカバーするための布がかぶさっている家もありました。</p><p>企業でもノートパソコンの活用が多いですが、多くの会社は出しっぱなしです。</p><h1 style="text-align: left;">結局デスクトップで良くないか?</h1><p>ノートパソコンって同一性能のデスクトップパソコンより高価です。更にゲーミングや高性能なノートほど割高にです。ノートを買っても机に出しっぱなしであればデスクトップPCで良いのではと考えます。</p><h1 style="text-align: left;">デスクだってスッキリできる</h1><p>ディスプレイを固定し、配線を隠匿すればデスクトップPCもスッキリさせられます。本体はデスクの下に置いたり、近くにクローゼットがあればその中に入れてしまうことも出来ます。キーボードやマウスはワイヤレスで接続すればスッキリです。</p><h1 style="text-align: left;">壁に設置するとスッキリ</h1><p>机の上に置くのではなく壁にモニターを設置し、本体をクローゼットや棚に入れることで更にスッキリさせることが出来ます。机は移動式にして、パソコン作業をするときはディスプレイの前に移動させて下さい。</p><p>パソコンを使わないときは机を部屋の中央に持っていけば食事や読書などがしやすい環境を作ることが出来ます。</p><h1 style="text-align: left;">リビングのテレビ裏</h1><p>パソコンは必要だが、時々しか使わない人は、リビングのテレビに接続することをおすすめします。 パソコンはテレビの裏やテレビ台の中に入れて下さい。キーボードとマウスはワイヤレスです。これなら、常にパソコンが見えていないので更にスッキリです。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiKcA9hh0KfeehqZBhTeT5EKc-wesxwcOMQ0Y_kV0BFxOqLVx6NmoUPxvpotZbOYZO_FkqkjvaHiQOIqmBhaG4uN8rj-AIroj3QhuBtTa_6ZFHWa8rMi3kNTnNiO88aC9-zAqEJ-xvAU7SOXm9UL7-ld7ZM2Zp37m2vSBsH_SGX0BZkClTaDFdZNcJ_xA=s1080" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1079" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEiKcA9hh0KfeehqZBhTeT5EKc-wesxwcOMQ0Y_kV0BFxOqLVx6NmoUPxvpotZbOYZO_FkqkjvaHiQOIqmBhaG4uN8rj-AIroj3QhuBtTa_6ZFHWa8rMi3kNTnNiO88aC9-zAqEJ-xvAU7SOXm9UL7-ld7ZM2Zp37m2vSBsH_SGX0BZkClTaDFdZNcJ_xA=s320" width="320" /></a></div><p></p><p>ディスプレイはテレビと兼用しているので新たに買う必要もなく経済的です。</p><h1 style="text-align: left;">結論、持ち運ばないのならノート不要</h1><p>単にスッキリとさせたいだけなら、ノートパソコンにこだわる必要はありません。ただ、いろいろな部屋でパソコンを使いたいとか、出先で作業することが多い人はノートが必須です。</p><p>パソコンを一箇所でしか使わない場合はノートではなくデスクトップをスッキリと設置することをおすすめします。</p><p><b><a href="https://amzn.to/3pgGBx8" target="_blank">AmazonでデスクトップPCを探す</a></b></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-67669320945061692302022-02-25T12:45:00.001+09:002022-02-25T12:45:42.557+09:00【嘘】裏紙利用は失うものが多い<p> 一時期、コストダウンや環境に優しいという理由で、コピー機やプリンタでの裏紙利用が推奨されたことが有りました。その後、熱は冷めましたがこの間違った考え方が一部では残っています。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiJJGZM2c6413OWVLNYY2FEqfRSG_pxDOksvkkheaSUJip3xSKlJ6QZnxn3l-YefluOf2PX6rHWjtBDXbe73YrCu86g60CWhXKAgf_k0yOmb5J8f0EIrX_HVeAM0CbXG-v8Tb_VWQIUIoNVTAD-FClFiQfkAUWmisqbQ6LYlAvU4xFpbkDgIow0kiwbEA=s1080" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEiJJGZM2c6413OWVLNYY2FEqfRSG_pxDOksvkkheaSUJip3xSKlJ6QZnxn3l-YefluOf2PX6rHWjtBDXbe73YrCu86g60CWhXKAgf_k0yOmb5J8f0EIrX_HVeAM0CbXG-v8Tb_VWQIUIoNVTAD-FClFiQfkAUWmisqbQ6LYlAvU4xFpbkDgIow0kiwbEA=s320" width="320" /></a></div><br /><p></p><h1 style="text-align: left;">裏紙や両面は高く付く</h1><p>結論を言ってしまいましたが、裏紙利用や両面印字で節約できるのは紙代です。Amazonで確認してみたら一箱2080円でした。枚数は2500枚なので割り算すると一枚あたりの価格が0.832円です。</p><p>極端なプリントボリュームで考えて、一日一箱を消費する組織で考えると、</p><p>12ヶ月×20日×2080円=49万円</p><p>なので、裏紙を使った場合約24万円の節約が可能です。ただ、年間24万円の節約は大きいだろと考えるのは間違えです。</p><p>まず、裏紙とは一度使われた用紙です。そのため、色々なゴミが付着しています。消しゴムカス、埃などです。それらを再びプリンタやコピー機に入れるので故障の原因になります。</p><p>更に、クリップや付箋紙などの異物の混入も考えられます。また、紙の種類によってはプリンタを一撃で破壊する物があります。インクジェットの発色が良くなる「スーパーファイン用紙」と呼ばれる紙をレーザプリンタに入れると一発で故障です。</p><p>ドラムユニットとかドラムセットと呼ばれる非常に高い部品を全て交換する必要があります。</p><h1 style="text-align: left;">年に二回誰かが間違えを起こした場合</h1><p>ドラムユニットのスポット修理の費用をググってみたら20万円とのことです。それが二回と考えると40万円。 一日に2500枚プリントするハイボリュームな例でも割に合いません。</p><p>だから、これだけでも裏紙利用は止めたほうが良いと考えることが出来ます。</p><h1 style="text-align: left;">他にも悪いこと</h1><p>印字ミスして白紙のままコピー機から紙が出てきたときも、もったいないと思って戻す人がいます。良いことより悪い事のほうが多いのでその紙は捨てて下さい。一度プリンタから出てきた紙は曲がっていたり、触ったことで汚れが付いています。</p><p>あと、古紙として捨てればリサイクルされるので罪悪は無いと考えます。</p><h1 style="text-align: left;">家のプリンタでも</h1><p>同じです。裏紙や汚れた紙を入れると故障の原因になります。だから、失敗してまだ、空白が多い紙も再利用は考えずに捨てて下さい。あと、家庭用のプリンタの場合は壊れた場合は修理が出来ずに破棄の可能性があります。</p><p>保証期間内でも中からクリップや付箋紙などの異物が発見された場合は無料保証はされないと考えて下さい。</p><p><b><a href="https://amzn.to/3InfLv4" target="_blank">Amazonでコピー用紙を確認してみる</a></b></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-34786374813811108582022-02-23T15:23:00.002+09:002022-02-23T15:23:39.651+09:00【過剰】セキュリティが甘いデバイスは使用厳禁なのか?<p> 工場の生産ラインでよく使われるPLCというコンピュータがあります。一昔前だと「シーケンサ」と呼ばれていましたが、今ではあまり聞かないです。そのPLCにもEthernet端子つまりLAN端子が搭載され遠隔から制御したり、PLC同士が通信して連携しています。</p><p>非常に便利にはなったのだが、あるときにPLCがインターネット側から攻撃されたと言う話があります。 ただ、報道の論点はPLCにセキュリティ概念が無かったので悪いという部分になっています。</p><p>これに関して私の見解を書きます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg3esQINfAEUyAlilseAV0LWO-NvdAf9cHbLnaUU8fANPqCB81skDCQtsccwt44AaAdJPOa09y6T27uGoZ0qPH2hkc1NLcnQn0qBHkcWgyxz2ALXhWxlVAogTflglALOL6yeXXLOkzkGjA8AiTby_ryJc26xibWr52AxPHcBn-fQpPgNhuh1uAQ5bmIUA=s1080" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEg3esQINfAEUyAlilseAV0LWO-NvdAf9cHbLnaUU8fANPqCB81skDCQtsccwt44AaAdJPOa09y6T27uGoZ0qPH2hkc1NLcnQn0qBHkcWgyxz2ALXhWxlVAogTflglALOL6yeXXLOkzkGjA8AiTby_ryJc26xibWr52AxPHcBn-fQpPgNhuh1uAQ5bmIUA=s320" width="320" /></a></div><br /><p></p><h1 style="text-align: left;">悪いのは現場でのネットアクセス</h1><p>かつては会社のLANはインターネットに接続されていませんでした。社内の文書のシェア、ローカルメール、印字などとともに生産ラインのPLCが接続されていました。ただ、PLCの接続にはセキュリティなど無く、設定すれば誰でもアクセス出来る状態にありました。</p><p>ただ、社内LANなど皆さんは仕事で使っているだけで、それ以外の用途では使われることは有りませんでした。</p><p>しかし、インターネットが普及したときに取った手は、社内のLANにインターネットのトラフィックを流すと言う事をはじめました。 まあ、既存のLANもあるし通信方式も同じだから使わない手は無いと考えたのでしょう。</p><p>最初は社員が喜ぶ程度の娯楽を提供していた程度だが、外部の悪者が社内の情報を盗んだり破壊するための経路としても使われるようになりました。</p><p>ざっくり社内のPLCなどが攻撃される方法としては</p><p></p><ol style="text-align: left;"><li>誰かが悪意ある実行ファイルをダウンロードする。またはメール送付される</li><li>実行してLAN内部のコンピュータが荒らされる。</li><li>PLCと通信し、誤動作する情報を設定される。機械が暴走したり、液体が溢れたりする。PLCじゃないがプリンタの紙が無くなるまでジョブを入れることなども出来る</li></ol><p style="text-align: left;">こんな流れでPLCが攻撃されます。</p><h1 style="text-align: left;">そもそもの悪は無意味なネットアクセス</h1><p style="text-align: left;">冷静に考えれば、社内にパソコンやLANがあるからとネットアクセスが出来る状態にする必要は有りませんでした。しかも、業務上理由は有りません。</p><p style="text-align: left;">さらに、会社が社内資源を使って社員に娯楽を提供したことってインターネットアクセスが初めてだったのでは無いでしょうか? ラジオやテレビは一部の事業所では勤務時間中に楽しむことが出来たと言われているが、インターネットアクセスはパソコンが仕事場に有る職場では全て出来るようになったのではと考えます。</p><h1 style="text-align: left;">再びPLCは悪くない</h1><p style="text-align: left;">悪いのはセキュリティが低いPLCでは無く、無意味なインターネットアクセスです。なので、必要の無いLANにはインターネットへの接続を行わないという方針を立てるべきでした。</p><p style="text-align: left;">製品としてセキュリティが甘い機器を業務で使っている場合は、そのLANにインターネットなどの外部アクセスを許すのが悪です。 あと、社内のセキュリティって</p><p style="text-align: left;">「部外者が入ることが出来ない上で成り立っている」</p><p style="text-align: left;">と考えられます。施錠しないロッカー、自由に使えるコピー機、ログイン不要の端末、トイレ……これらは単体のセキュリティで守られているのではなく、敷地に入る守衛によって守られています。</p><p style="text-align: left;">なので、PLCも自分自身でガードするのではなく、守衛に相当するもので守られるべきです。</p><p style="text-align: left;">なので、悪いのは</p><p style="text-align: left;">「インターネットという部外者を入れてしまった」</p><p style="text-align: left;">ということです。セキュリティが甘いデバイスは適切にガードして運用すればよいだけです。</p><h1 style="text-align: left;">余談、クルマのCAN通信悪用</h1><p style="text-align: left;">最近のクルマにはCANと言う通信が入っています。昔は多くのハーネスでウインカーやスイッチ、ヘッドライト、エンジンなどが接続されていました。それが、パソコンで言うとLANに相当するCANと言うネットワークで接続されています。</p><p style="text-align: left;">そのCANを悪用して外部からロックを解除しエンジンを始動して走り去ることが出来てしまいます。方法はバカバカしく簡単で</p><p style="text-align: left;"></p><ol style="text-align: left;"><li>ウインカーなど一番外側のCAN通信の配線を取り出す</li><li>そこにコンピュータを割り込ませる</li><li>解錠信号を送ると、ロックアクチュエーターが動作し、ドアが開く。</li><li>エンジン始動信号を流すとエンジンが始動</li></ol><p style="text-align: left;">って流れです。私はまさかと思いましたが、ウインカーやライトなど外部とエンジンコントロールやセキュリティに係る内部のバスと分けられていなかったということです。</p><h1 style="text-align: left;">先程の社内LANとインターネットと同様だと考えます。</h1><p style="text-align: left;">これは絶対に無いと思うのだが、航空機のエンタテインメントシステムとエンジンコントロールは同じバスにぶら下がっているのだろうか? こんなありえないことをクルマのバスや社内LANにインターネットアクセスに対しては行っていたということです。怖いです。</p><p style="text-align: left;"><b><a href="https://amzn.to/36om5nK" target="_blank">CAN通信についてAmazonで見る</a></b></p><p></p><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-75627604407337969492022-02-22T21:18:00.004+09:002022-02-22T21:18:58.900+09:00【詐欺】未だにサイト量産システムとか情報商材がある<p> ネットで楽して稼ぐことが出来る! と広告が時々入ります。「独自のプログラム」でコンテンツを量産し不労所得みたいなものです。まあ、冷静に考えれば売っている本人が使えよ! ということになることで詐欺だと分かります。</p><p>仮に私が、仕掛けておくだけで不労所得を得るサイトシステムを持っていたら人に営業せずに自分で使います。もっと極端な話、伝説の打ち出の小槌(振るだけで金が出てくる槌)を手に入れたとしても苦労して他人に売ろうとはしません。絶対に自分で使います。</p><p>と考えれば冷静になるのでは。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEifAgrXc_ZWfgNIxHDGSf3jVusqNZT_jveUb57__OAjm_EM3nLPX6AmsJhLhU86_-mWDf6PRQMz_fZ0YMz-C7-nwVgxBKlVAzTGoSL8qhAvaLBSJsCTcsRLYKyhwegLCrsDlKoh9J1Cxp5p7qpi8ca61fDYAvnpiOHrhGeLzge7XZDDgNHY9KODX3VRpg=s1080" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEifAgrXc_ZWfgNIxHDGSf3jVusqNZT_jveUb57__OAjm_EM3nLPX6AmsJhLhU86_-mWDf6PRQMz_fZ0YMz-C7-nwVgxBKlVAzTGoSL8qhAvaLBSJsCTcsRLYKyhwegLCrsDlKoh9J1Cxp5p7qpi8ca61fDYAvnpiOHrhGeLzge7XZDDgNHY9KODX3VRpg=s320" width="320" /></a></div><br /><p></p><h1 style="text-align: left;">サイト量産システムとは?</h1><p>名前の通りページを大量に作るシステムです。名前のとおりです。では何故大量に作ると嬉しいのか? とりあえずググればヒットし、そのページの広告を踏んでくれれば収益が入るという仕組みです。</p><p>うん、話だけ聞くと別に詐欺でもなく他人に影響がなさそう?</p><h1 style="text-align: left;">大きな影響があります</h1><p>「風が吹けば桶屋が儲かる」「北京でチョウが羽ばたくと、ニューヨークで嵐が起こる」って感じで一般人が食らいます。</p><p>まず、誰かが量産サイトを作り広告収益を得るとします。そうすると、一般ユーザが検索した場合に必要ないものを過剰に見ることになります。ただ、そんな流れで広告を見ても物品の購入に至りません。</p><p>これが繰り返されると</p><p></p><ul style="text-align: left;"><li>広告主は宣伝費の割に物品が売れない</li><li>一般ユーザは検索しても役立たない情報ばかり</li><li>コンテンツ制作者は収益を奪われる</li></ul><p style="text-align: left;">という流れになり、そのプラットフォームを運営しているGoogle社は全てのユーザから見放されることになります。</p><p style="text-align: left;">ということで、Googleはゴミコンテンツを検索結果や宣伝ページから排除することで利用者に役立つシステムを提供しています。</p><h1 style="text-align: left;">YouTubeのスクロール動画</h1><p style="text-align: left;">2ちゃんねるのネタを文字にしてスクロールさせる動画が大量に発生したことを覚えていないでしょうか? Googleはそれに対し、システムで量産した価値のないコンテンツと判断しました。</p><p style="text-align: left;">そして、広告を外し、検索の順位も低く設定しました。 まあ、あのスクロール動画に関しては結構なユーザーが好きで見ていたと言う報告もあるので、100%ゴミだとは言えませんがGoogleとしては価値はないと判断しています。</p><p style="text-align: left;">最近だと統計データを時系列でグラフにする動画が現れていますが、次なるスクロール動画系として広告が付かなくなるのではと予測しています。</p><h1 style="text-align: left;">結局喜ばれるのは人の手で作られたコンテンツ</h1><p style="text-align: left;">YouTube動画にしても、ブログにしても自分のアイデアで作ったものはそこそこ検索され、広告も付きます。</p><p style="text-align: left;">なので、高価でGoogleから嫌われる量産系ツールなどを買うのは止めて下さい。それより、動画編集ソフト、カメラ、素材集などのソフト・ハード、動画の撮影方法やブログの書き方、写真撮影の方法が書かれた本を読んだりして良質のコンテンツをネットに公開するようにして下さい。</p><h1 style="text-align: left;">Adsense審査は厳しい</h1><p style="text-align: left;">昔は一度通ってしまえば、後はやり放題なGoogleの広告プログラムであるAdsenseでした。しかし、今ではサイトやブログを作るたびに審査が必要になっています。また、昔と比べて審査も厳しいです。</p><p style="text-align: left;">だから、審査を通ったとしても、ゴミのようなコンテンツをツールを使って投稿するのは止めて下さい。せっかくAdsenseの権利を手に入れることが出来たのであれば、自分の手でコンテンツを作り出して投稿して下さい。</p><p style="text-align: left;"><b><a href="https://amzn.to/3sUZirr" target="_blank">Amazonでブログ術についての本を探す</a></b></p><p style="text-align: left;"><br /></p><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.comtag:blogger.com,1999:blog-5994793421809673158.post-81341041436920835862022-02-22T13:53:00.001+09:002022-02-22T13:53:10.708+09:00【社内システム】Excel方眼紙が嫌ならフォーム入力システムを構築してもらって下さい<p> Excelを方眼紙のように使うテクニックである、「Excel方眼紙」が悪者にされています。特に悪いのは社内での集計用フォームとしてExcelが使われるところです。特に入力する側は問題が無いのですが、集計する側は地獄です。ただ、Excel方眼紙が無くならない理由はバカバカしく明快です。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgFL2XYtqbcloNStNYSQuvzO6sMzn-B9o-9FXGFRtTbfccwvsiTbIZE1Y5qEZIX9fEzxPy2ZYRZFWePRyKDaSW7QpynobmcUZGdzUOp2Zitgnzn4WxE5jJRZpnjxpF2Y-MQ1ey9HXw2AWIyia0dN8za3SnLJ6Phu2a91zhyM2LNPlG-ip5VLg6GK2fd_g=s1080" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEgFL2XYtqbcloNStNYSQuvzO6sMzn-B9o-9FXGFRtTbfccwvsiTbIZE1Y5qEZIX9fEzxPy2ZYRZFWePRyKDaSW7QpynobmcUZGdzUOp2Zitgnzn4WxE5jJRZpnjxpF2Y-MQ1ey9HXw2AWIyia0dN8za3SnLJ6Phu2a91zhyM2LNPlG-ip5VLg6GK2fd_g=s320" width="320" /></a></div><br /><p></p><h1 style="text-align: left;">理由は2つ</h1><p></p><ol style="text-align: left;"><li>記入者は困らない</li><li>上司、役職者はそんな作業をしない</li></ol><p style="text-align: left;">です。まず、記入者は全く困りません。困るどころかおなじみのExcelファイルなので見れば分かる的な対応で記入してメールで担当者に返します。</p><p style="text-align: left;">上司や役職者も困りません。理由を書くだけバカバカしいのだが、そんな作業はやらないためです。</p><p style="text-align: left;">つまり、Excel方眼紙で困る人が少なすぎるというだけで放置されています。</p><h1 style="text-align: left;">Excel方眼紙からの脱出</h1><p style="text-align: left;">非常にシンプルです。一番簡単な方法は<a href="https://www.google.com/intl/ja_jp/forms/about/" target="_blank">Googleフォーム</a>を使うことです。集計したいことをフォームにして、そのURLを対象者に送るだけです。受け取った側もURLのリンクをクリックして、ウェブサイト上で必要な情報を入れるだけです。</p><p style="text-align: left;">集計された情報はGoogleスプレッドシートにまとめられるので先程のコピペ地獄は有りません。</p><p style="text-align: left;">ただし、最近では社内のプライバシーマークなどの問題で、機密保持契約を結んでいない企業の仕組みを利用することは禁止されているので導入は厳しそうです。ただ、既製品で無料で使えるので情報システム部門に相談してみることをおすすめします。</p><p style="text-align: left;">余談だが、社外システムを使うことに関してはプライバシーとか機密保持とか言って上司は認めてくれないが、その話をしたあとで「キンコーン!」とスマホが鳴ったと思ったら、会社の書類がLINEされていたりします。バカバカしいけどこんな物です。</p><h1 style="text-align: left;">イントラネットにフォームシステムを</h1><p style="text-align: left;">先程のGoogleフォームがダメなら、情報システムに相談してフォームシステムを作ってもらって下さい。 さらに、社内システムと連動すると社員番号など識別情報も入るので他の社員を偽ることも出来ません。この部分はGoogleフォームより良いのではと考えます。</p><p style="text-align: left;">なかなか、社内システムの変更を提案する考えは出ないかもしれません。しかし、会社ってそんなに硬直化はしていないと考えます。ですので、ダメ元で提案してみて下さい。</p><p style="text-align: left;">ただし、稟議を通すということなので、最初の提案は直属の上司からです。</p><p style="text-align: left;"><b><a href="https://amzn.to/3JJ0dC6" target="_blank">Amazonで社内稟議について調べる</a></b></p><p></p>好きなことをやらない人生は最高http://www.blogger.com/profile/12697536338675722812noreply@blogger.com