2018年10月26日金曜日

Visual Studio Code でC言語をステップ実行


こんにちは、ふじかーです。

C言語をテキストエディタで書いているような 組み込み開発現場 では

(´-`)。oO( このロジックが意図通り動作するか、ちょいと手元で確認したい。。 )

みたいな時、少し困ります。

テキストエディタではそんな事できないし
VisualStudioの無償版は昔に比べて準備も大変だし、使うのも重いし不便。
業務のクロスコンパイル環境を立ち上げるのは、もっと大袈裟で面倒くさい。

ということで「軽量なツールで、C言語をお手軽にステップ実行できる環境」 を作成します。

以前、もりもり君が「なかなか使いやすいっスよ」とお勧めしてくれた
Visual Studio Code(以下、VS Code)を使います。

<手順>



コンパイラ(gcc)をインストール

  • ダウンロード・インストール
下記のサイトにアクセスし、一式おとしてインストールします。
http://www.mingw.org/download/installer
 → mingw-get-setup.exe のダウンロードが始まる
 → 実行して Install → Continue で進める
 → 「MinGW Installation Manager」が起動

  • gcc設定
C言語作業に必要なパッケージをインストールします。
 ・「mingw32-base」   を右クリックして「Mark for Installation」を選択し、チェックを入れる
 ・「mingw32-gcc-g++」を右クリックして「Mark for Installation」を選択し、チェックを入れる
 ・[Installation]→[Apply Changes]]→[Apply]→ セットアップが終われば [Close]


  • パスを通す
システムのプロパティから、環境変数のPathにgccのパスを追加します。
手順が分からない場合、下記参照。
 ・Windowsキー+R → [ファイル名を指定して実行] 画面が開く
 ・「sysdm.cpl」 と入力してEnter → [システムのプロパティ]画面が開く
 ・[詳細設定]タブ → 環境変数(N) → システム環境変数(S) エリアの 「Path」 を選択 → 編集(I)... をクリック
 ・[システム変数の編集] ダイアログの [変数値(V)] の末尾に 「;C:\MinGW\bin」 を追記して [OK]



VS Code 本体をインストール

  • ダウンロード・インストール
下記のサイトにアクセスして、本体をダウンロード・インストールする。
 https://code.visualstudio.com/Download


 → 64bit環境なら、[User Installer 64 bit] をクリック
 → VSCodeUserSetup-x64-X.XX.X.exe のダウンロードが始まる
   (記載時点ではVSCodeUserSetup-x64-1.28.2.exe)
 → 同意して、次へ次へ~でインストール完了。



  • 日本語化 
VS Code はバージョン1.25以降「デフォルト英語版のみ」になったため、
日本語化する必要があります。
 ・画面左の 拡張機能(Extensions)ボタン を押して「Japanese Language Pack」で検索 → Install → VS Codeを再起動



  • C/C++
C/C++開発用の拡張機能もインストールしておきます。
 ・こちらも拡張機能から「C/C++」で検索 → Install → VS Codeを再起動




作業場所、test.cの準備

  • test.c ファイル準備
VS Code からでも お手持ちのエディタでも良いですが、適当にHelloWorldソースを用意します。
#include <stdio.h>

int main(int argc, char *args[])
{
    printf("Hello, world!\n");
    return 0;
}
これを作業フォルダに保存しておきます。ここでは D:\test\c\test.c としました。

またこの作業フォルダを、VS Code のメニューから開いておきましょう。
・メニュー → フォルダーを開く → D:\test\c



デバッグの為の設定

  • ビルドタスクの設定(tasks.json)
 修正したソースコードをビルドするための設定を行います。
 ・フォルダーを開いている状態で Ctrl+Shift+B
 ・「実行するビルドタスクがありません。ビルドタスクを構成する」というメッセージが出るのでクリック
 ・「テンプレートからtask.jsonを作成する」というメッセージが出るのでクリック
 ・表示された候補の中から「Others 任意の外部コマンドを実行する例」を選択
  → 作業フォルダ内に「.vscode/tasks.json」ファイルが自動生成され、画面に表示される


 ・表示された task.json の
"command": "echo Hello"
  を削除して、下記を挿入
"command": "gcc -g -O0 -o a.exe test.c",
"problemMatcher": "$tsc", 
"group": {
    "kind": "build",
    "isDefault": true
}
 ・Ctrl+S で保存しておく


  • デバッグ環境の設定(launch.json)
 デバッグに必要な設定を行います。
 ・画面左のデバッグアイコンを押下
 ・デバッグの開始アイコン(再生マーク)を押下
 ・表示された候補の中から「C++(GDB/LLDB)」を選択
  → 作業フォルダ内に「.vscode/launch.json」ファイルが自動生成され、画面に表示される


 ・表示された launch.json の
"program": "enter program name, for example ${workspaceFolder}/a.exe",
"miDebuggerPath": "/path/to/gdb",
  を削除して、下記を挿入
"program": "${workspaceRoot}/a.exe",
"miDebuggerPath": "c:\\mingw\\bin\\gdb.exe",
 ・Ctrl+S で保存しておく



デバッグ開始!


 ・試したいコードをmain関数に記載し、リビルドは Ctrl+Shift+B
 ・ブレークポイントをセットしてF5でデバッグ開始、F10でステップ実行


[デバッグの為の設定] を見ての通り、
 gcc を使って test.c を a.exe にビルドして、gdb を使ってデバッグする
というだけのシンプルな構成です。

既存のプロジェクト全体をデバッグするものでは無いけど、軽量だしIntelliSenceも使えるし、
ちょっと机上じゃ面倒な確認をしたい時とか、関数の単体試験などにも使えて便利。

とりあえず現場でも使ってるC環境の手順が整ったので
今度は別の言語も使えるように整備していこう。

2019/1/12追記:Visual Studio Code で C++ と Python をデバッグする



※VS Codeは結構な頻度でバージョンアップを繰り返しており
 記事の内容(ver.1.28.2)と 最新のVS Codeとでは、手順や表示が若干異なるかも知れません。

※ちなみに「用意したcソースの日本語が文字化けするよー」という時は
 画面下の文字コード選択からポチポチと選べば直せます。
 

2018年10月19日金曜日

Pythonでつまづいたことを細々とまとめてみる



こんにちは。よっしーです。

この1年ぐらい Python をちょいちょいとさわってきたのですが、
つまづいたところがいくつかあったので、備忘録としてまとめたいと思います。


・Pythonバージョンの 2.x系 と 3.x系 でコードの記法が違う。

 # 2.x 系の標準出力コード
  print 'hogehoge'

 # 3.x 系の標準出力コード
  print('hogehoge')

↑は代表例ですが、その他にもいろいろと書式が変わっています。

2.x系 で書かれたコードを、3.x環境で実行すると、実行時にエラーとなる。逆もまたしかり。
せめて下位verの互換ぐらいはして欲しかった。。。

conda(コンダ)などを使って、2.x系 と 3.x系 の環境切り替えも可能ですが、
2.x系 のサポートは2020年までなので、私は新しい 3.x系 でコードを組むことにしています。


・Ubuntu14.04/16.04 は 2.x系 がデフォルト設定となっている。

 # pythonのパスを表示
 $ which python
 /usr/bin/python

 # python のリンク先を表示(ver2.7を指している)
 $ ls -la /usr/bin/python
 lrwxrwxrwx 1 root root 9 12月 21  2013 /usr/bin/python -> python2.7

これ。ミソなのは、3.x系 も存在しているということ。

 $ ls -la /usr/bin/python*
 lrwxrwxrwx 1 root root       9 12月 21  2013 /usr/bin/python -> python2.7
 lrwxrwxrwx 1 root root       9 12月 21  2013 /usr/bin/python2 -> python2.7
 -rwxr-xr-x 1 root root 3341384 10月 27  2016 /usr/bin/python2.7
 lrwxrwxrwx 1 root root       9  3月 23  2014 /usr/bin/python3 -> python3.4
 -rwxr-xr-x 2 root root 3693624 11月 17  2016 /usr/bin/python3.4
 -rwxr-xr-x 2 root root 3693624 11月 17  2016 /usr/bin/python3.4m

/usr/bin/python のリンクを 3.x系 張り替えるとこで、3.x系 を使うことも可能です。

ただ、/usr/bin/python のリンクが 2.x なのか 3.x なのかに依存したくないので、
私は、実行する際のコマンドを明示的に python3 にするようにしています。

 # この指定だと、python の指しているリンクが 2.x なのか 3.x なのかによって実行エラーとなってしまう。
 python hoge.py

 # この指定だと、必ず 3.x で実行される
 python3 hoge.py


・辞書はとても便利。でも 3.6 以前だと入れた順にソートしてくれない。

 # 辞書に対して、
 dict = {}

 # 値を入れていく
 dict['one'] = 1
 dict['two'] = 2
 dict['three'] = 3
 dict['four'] = 4
 dict['five'] = 5

 # でも表示すると入れた順に並んでいない。
 print(dict)
 {'four': 4, 'three': 3, 'five': 5, 'two': 2, 'one': 1}

これ、3.6以降だと入れた順に並んでいるので、
自分の環境(3.7)では正しく動いているのに、
実環境(3.4)ではおかしな動きになる。ということがありました。

気付くまでにかなり時間がかかりました。

対応としては、OrderedDict(順序付辞書)を用いて回避しました。

 # 順序付辞書に対して、
 from collections import OrderedDict
 dict = OrderedDict()

 # 値を入れていく
 dict['one'] = 1
 dict['two'] = 2
 dict['three'] = 3
 dict['four'] = 4
 dict['five'] = 5

 # きちんと入れた順に並んでいる。
 print(dict)
 OrderedDict([('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)])


Python は Ver依存でいろいろと問題があるなぁ~。
というのが正直な感想ですね。。。

ではまた~。

2018年10月13日土曜日

Excel作業がもっと捗るように

こんにちは、ふじかーです。

使ってますか?Excel。使ってますよね。

「Excel使うのは表計算だけにして、脱Excel だ!」
なんて声もありますが、

表計算以外のどんなドキュメントを作成する時も
なんだかんだで最も直感的に使いやすいので
結局みんなExcelに落ち着いているのが現状だと思います。

さて、このExcelを少しでも便利に使うために
私が実施している小技を紹介します。



クラシックスタイルメニュー


ほんと今更ですが、昔から慣れ親しんだExcelの メニューバー/ツールバー が
Excel2007以降「リボン」なる使いづらいI/Fに変わりました。

[新規作成] とか [印刷] とか [図形] とか、どこ・・・?

操作したいボタンが見つからず途方に暮れた人も多いと思います。
Outlookもそうですが、リボン本当に嫌い。

そんな「昔のメニュー形式の方が操作が早い!」という旧式の人間には
下記サイトの クラシックスタイルメニュー がお勧めです。

「クラシックスタイルメニュー for Office」

インストール方法
 1.上記サイトからZIPファイルをダウンロードして解凍
 2.「解凍フォルダ\アドインフォルダを開く.vbs」を実行 → アドイン置き場のフォルダが開かれる
 3.「解凍フォルダ\左端のタブに表示用\ClassicMenu.xlam」を、2.のアドイン置き場に格納
 4.Excelを起動し、
    [ファイル] - [オプション] - [アドイン]
 5.アドイン一覧が表示されるので「Classicmenu」を選択し、「設定(G)…」をクリック
 6.「有効なアドイン」の中にある「Classicmenu」をチェックし、「OK」ボタン


これで設定完了。「Classic Menu」タブが追加されています。

おなじみのボタンが。

クイックアクセスツールバーの活用


さらに快適に使うために
よく使う機能ボタンをタイトルバーに並べます。


①名前を付けて保存 ボタン
言わずもがな、リネームして保存したいときのボタン。
もともとある「上書き保存」ボタンの隣に配置します。

[ファイル] - [オプション] - [クイックアクセスツールバー]
→ コマンドの選択(C):「基本的なコマンド」
  の、一番下にあります。


②読み取り専用の設定/解除 ボタン
今現在開いているExcelファイルを
 読取専用 で開いている状態 にしたり
 上書保存可能 で開いている状態 にしたり
切り替えられるようにするボタンです。

ちょっと変わった機能なので、使うかどうか人によると思いますが
私はサーバ上のファイルを直接触る時などに結構使います。

[ファイル] - [オプション] - [クイックアクセスツールバー]
→ コマンドの選択(C):「リボンにないコマンド」
  の、下のほうにあります。

「リボンにないコマンド」のリストには、
よく見ると電卓とか面白いボタンがあったりします。
欲しいものがあれば追加しましょう。


貼り付けオプション が邪魔すぎる


セルの値をコピペしたとき右下あたりに出るコレ。

「貼り付けオプション」というらしいですが
その下のセルを次に触りたい時、この上なく邪魔でイラっとしませんか?

実はこいつ、下記の手順で非表示にできます。

[ファイル] - [オプション] - [詳細設定] - [切り取り、コピー、貼り付け]
→ 「コンテンツを貼り付けるときに [貼り付けオプション] ボタンを表示する(S)」のチェックボックスを外す


ハイパーリンク付き目次 を10秒で作る


Excelで設計書などを作っていて、複数シートに渡るブックになった場合
こんな目次シートが欲しくなったりします。

それぞれクリックすると該当ページにジャンプする「ハイパーリンク」になってたりすると
なお嬉しいんじゃないでしょうか。

これを10秒程度で作成する手順です。

作成手順
ALT + F11 で Visual Basic Editor を起動する
Ctrl + G  で画面下部に イミディエイトウインドウ を表示する
③イミディエイトウィンドウに下記コードを貼付ける
For Each i In ThisWorkbook.Sheets: debug.print "=HYPERLINK(""#'" & i.name & "'!A1"",""" & i.name & """)" : next i
④コードの上でEnter押下すると、下記のような ハイパーリンク一覧 が出力されるので、任意のセルにコピペ

=HYPERLINK("#'表紙'!A1","表紙")
=HYPERLINK("#'更新履歴'!A1","更新履歴")
=HYPERLINK("#'目次'!A1","目次")
=HYPERLINK("#'概要'!A1","概要")
=HYPERLINK("#'要求分析'!A1","要求分析")
=HYPERLINK("#'基本設計'!A1","基本設計")
=HYPERLINK("#'詳細設計'!A1","詳細設計")
=HYPERLINK("#'シーケンス'!A1","シーケンス")
=HYPERLINK("#'API仕様'!A1","API仕様")
=HYPERLINK("#'などなど'!A1","などなど")
(貼り付けた段階では 黒字 ですが、一度選択すると リンク状態 になります)

私の現場では「設計ドキュメントのテンプレートファイル」を置いて
皆それをベースに設計資料を作成していますが、
その目次シートに①~④の手順を書いたテキストボックスを貼り、活用しています。


では長くなってきたのでこの辺で。また小ネタあれば投稿します。

2018年12月7日追記
ExcelでF1を押してもヘルプが出ないように
2019年5月24日追記
Excelで クラシックスタイルメニュー が表示されない(ClassicMenuタブが出ない)

2018年10月5日金曜日

人生が捗るテレビ。レグザのタイムシフトマシン!


こんにちは。よっしーです。

今回は『テレビ』についてお話したいと思います。


この業界、システム開発に携わっている人は、遅くまで仕事があったりで、

なかなかテレビを見る時間が取れなかったりします。


録画して見るという選択肢もありますが、いちいちテレビ欄をチェックして、

録画設定するのも面倒だし、見たいテレビがあっても、録画予約を忘れてしまい

見れなかったりと。。。


そこまでしてテレビが見たいかと言われると、そうでもないし、

自分の中では「時間が合えば見る」程度のものでした。


そう。レグザのタイムシフトマシンに出会うまでは。。。


私が使っている東芝のレグザというテレビですが、

上位モデルには『タイムシフト』という機能があります。



このタイムシフトという機能。別途、ハードディスクが必要にはなりますが、

録画予約なしで、最大6番組を常時録画することができます。


ハードディスク容量、録画時間帯設定などで、過去何日分の番組を残せるかは異なってきますが、

我が家では、主要な地上デジタル放送の6番組を常時録画しており、

約2週間分のデータが常に取り溜めされています。


直近2週間分の録画した番組は「過去番組表」からいつでも見ることが出来ます。

もちろん録画した番組なので、CMなどは飛ばせますし、時短で見ることが可能となります。



また、テレビをつけて、面白そうだな。始めから見たいな。と思ったときも、

常時録画しているので「始めにジャンプ」というリモコンのボタンを押すだけで、

頭から番組を見ることも簡単に行えます。


本当にこのタイムシフト機能がすこぶる便利で、

テレビを見るために時間に縛られる。というのが一切なくなり、

空き時間で好きにテレビが楽しめるようになります。


一度この便利さを味わってしまうと、

タイムシフトがない生活にはもう戻れなくなります。


上位モデルということと、ハードディスクが必要ということから、

購入に少しお金はかかってしまいますが

「買ってよかったな」と思わせてくれるテレビです。


ただ、私のまわりでタイムシフト使っているよ。という人に会ったことがないので、

あまり認知というか、普及はされていないのかもしれません。


こんないい機能なのに、みんな知らないのはもったいない。

ということで、ここで紹介させてもらいました。タイムシフトマシンは超絶おススメです。

ではまた~。