03 Oct 2012, 22:38

Doxygenの使い方(セットアップ編)の備忘録

最近、モノ忘れが激しくて困る。

そんな、おとぼけおじさんの、ドキュメント生成ツールDoxygenの使い方の備忘録。

今回は導入まで。

Doxygenのダウンロードとインストール

公式サイトからDoxygenをダウンロード&インストール。

または、自分はCygwinを使っているので、setup.exeからダウンロード&インストール。

image

Doxygenの設定ファイルの作り方

Doxygenを試したいプロジェクトディレクトリで、以下のコマンドを実行。

doxygen 窶堵ツꀀ doxygen.conf

doxygen.confは設定ファイル名なので、任意の名前でよい。実行すると、設定ファイルが出来上がる。設定する項目はたくさん用意されているけれども、とりあえず以下の項目を編集した。

PROJECT_NAME プロジェクト名 mock_study
OUTPUT_LANGUAGE 言語 Japanese
INPUT 入力ディレクトリのパス src/
INPUT_ENCODING 入力ソースのエンコード SHIFT_JIS/EUC-JP
ここをいじらないと、
Doxygenが文字化けする。
FILE_PATTERNS 拡張子指定 *.c *.h
GENERATE_LATEX LATEX形式出力 NO

 

  • デフォルトのエンコードはUTF-8なので、
  • デフォルトではHTMLとLATEX形式の出力が有効になっている。

Doxygenでドキュメントを生成してみる

設定ファイルを引数として、コマンドを実行する。

doxygen doxygen.conf

html/というフォルダができ、その下にドキュメントが生成される。

閲覧するには、index.htmlを開く。

C言語でDoxygenを利用するときの注意点

出来上がったindex.htmlを開くと、

わお、ソースファイルがない!ヘッダファイルしかない!

いろいろ悩んだ結果、設定ファイルで、

EXTRACT_ALLツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀ = YES

とすると、Cソースもドキュメント化された。

03 Oct 2012, 12:15

地獄の苦しみ、メモリ破壊をCppcheckで華麗に食い止めよう!

前回の記事の続き。

CppCheckでC言語/C++のメモリリーク(解放漏れ)を静的解析で検出する

Cppcheckを利用して、バッファオーバーランを検出したい。

バッファオーバーランとは、バッファオーバーフロー、メモリ破壊、メモリ不正番地アクセスとも言われていて、組込みエンジニアを一瞬のうちに恐怖に戦かせる魔法のぽぽぽぽーんだ。

いろんなパターンのメモリ破壊をCppCheckで検出できるか、遊んでみた。

メモリ解放したあとにアクセスしてしまうパターン

[c]

void buffer_over_run(void)

{

char *p;

p = (char *)malloc(1);

free(p);

*p = 3;

}

[/c]

[text]

$ cppcheck –enable=all memory_leak.c

Checking memory_leak.c…

[memory_leak.c:21]: (error) Dereferencing ‘p’ after it is deallocated / released

[memory_leak.c:21]: (error) Uninitialized variable: p

Checking usage of global functions..

[/text]

関係ないメモリ領域に勝手にデータを書き込んでしまう領域破壊パターン

[c]

void buffer_over_run(void)

{

char *p;

p = (char *)malloc(1);

memset(p,”c”,2);

free(p);

}

[/c]

[text]

$ cppcheck –enable=all memory_leak.c

Checking memory_leak.c…

[memory_leak.c:11]: (error) Buffer is accessed out of bounds.

Checking usage of global functions..

[/text]

配列で宣言した領域をオーバーするパターン

[c]

void buffer_over_run(void)

{

char c[5];

c[5] = 3;

}

[/c]

[text]

$ cppcheck –enable=all memory_leak.c

Checking memory_leak.c…

[memory_leak.c:8]: (style) Variable ‘c’ is assigned a value that is never used

[memory_leak.c:21]: (error) Array ‘c[5]’ accessed at index 5, which is out of bounds.

Checking usage of global functions..

[/text]

インクリメントすることで、知らないうちに不正番地アクセス

[c]

void buffer_over_run(void)

{

char *p;

p = (char *)malloc(1);

p++;

*p = 1;

printf(“%x”,p);

free(p);

}

[/c]

[text]

$ cppcheck –enable=all memory_leak.c

Checking memory_leak.c…

Checking usage of global functions..

[/text]

あれ、検出してくれない・・・・そして

$ ./a.exe
*p = 800482a8
Aborted (コアダンプ)

ちょ・・・・なんとかしてよ。

おまけ

ネットを徘徊していたら、メモリ破壊についての面白い詩をみつけた。

直接引用はチョッと気が引けるので、参考リンクとしてリンク貼っておく。

諸君、私はC言語が好きだ

02 Oct 2012, 23:35

CppCheckでC言語/C++のメモリリーク(解放漏れ)を静的解析で検出する。

メモリ解放漏れ・メモリ二重解放は組込みエンジニアにとって、背筋が凍る単語だ。

それは、即、残業しなさいという意味に転じる。

そこから、泥沼のデバッグにハマることがよくある。

そんな課題をスマートに解決するために、メモリ解放漏れやメモリ二重解放を検出するツール調べてみたので、メモメモ。

オープンソース CppCheckのインストールをしよう

Cppcheckを使うことでメモリ解放漏れを静的解析で見つけることが可能だ。CppCheckはその他にも、アロケーション(確保と解放)の不一致(メモリ二重解放),バッファオーバーランの検出ができる。OSSなので、誰でも無料で利用可能。

CppCheckのダウンロードはココから

Cppcheckの使い方の日本語訳は、以下のサイトで公開されている。

(ものすごく感謝!)今回はこれを参考に自分でも試してみる。

cppcheck 日本語マニュアル – 一人ぼっちの共鳴

cppcheck 英語マニュアルはこちちから

Cppcheckでメモリリークを検出する

Cppcheckを利用するには、–enable=allオプションをつけて以下のコマンド実行。

[text]

cppcheck –enable=all [フアイル名]

[/text]

試しにこんなコードを書いてみた。

memory_leak.c

[c]

#include

#include

int main(void)

{

int *p = NULL;

printf(“*p = %x\n”,p);

p = malloc(10);

printf(“*p = %x\n”,p);

return 0;

}

[/c]

なかなか、喧嘩を売っているコードだけれども、

これをCppCheckでチェックすると、案の定怒られる。(よしよし (^-^))

[text]

$ cppcheck –enable=all memory_leak.c

Checking memory_leak.c…

[memory_leak.c:12]: (error) Memory leak: p

Checking usage of global functions..

[/text]

自分で定義したメモリ獲得/解放関数のメモリリークをチェックする

次に、ユーザ定義したメモリ獲得/解放関数をチェックする。

普通、C標準のメモリ獲得/解放関数を直接使用することはなく、自前の関数でカスタマイズして使用することが多い。メモリアロケート関数を別ファイルで宣言してみる。

hoge_memory.c

[c]

#include “hoge_memory.h”

void *hoge_malloc(void)

{

return malloc(10);

}

memory_leak.c

void hoge_free(void *p)

{

free(p);

}

#include

#include “hoge_memory.h”

int main(void)

{

char *p = NULL;

printf(“*p = %x\n”,p);

p = (char *)hoge_malloc();

printf(“*p = %x\n”,p);

return 0;

}

[/c]

[text]

$ cppcheck –enable=all memory_leak.c hoge_memory.c

Checking hoge_memory.c…

12 files checked 40% done

Checking memory_leak.c…

22 files checked 100% done

Checking usage of global functions..

[/text]

Oh! 検出してくれないYo!!(゜д゜)/

こんなときは、–appendオプションを使用する。

使い方は、

[text]

cppcheck 窶錀-append=<メモリ獲得・解放関数定義file> <静的解析対象file>

[/text]

[text]

$ cppcheck –enable=all –append=hoge_memory.c memory_leak.c

Checking memory_leak.c…

[memory_leak.c:13]: (error) Memory leak: p

Checking usage of global functions..

[/text]

これで、、メモリリークを検出しました。

メモリ二重解放を検出する

おまけ。メモリ二重解放もこのとおり発見できます!スゲー。

[c]

int main(void)

{

char *p = NULL;

printf(“*p = %x\n”,p);

p = (char *)hoge_malloc();

printf(“*p = %x\n”,p);

hoge_free(p);

hoge_free(p);

return 0;

}

[/c]

[text]

$ cppcheck –append=hoge_memory.c memory_leak.c

Checking memory_leak.c…

[memory_leak.c:15]: (error) Deallocating a deallocated pointer: p

[/text]

使われていない関数宣言

[text]

$ cppcheck –append=hoge_memory.c –enable=all memory_leak.c

Checking memory_leak.c…

Checking usage of global functions..

[memory_leak.c:18]: (style) The function ‘hogehoge_special’ is never used

[/text]

02 Oct 2012, 22:14

倍速再生 Youtube動画を2倍速・スロー再生する方法を知ったメモ

Youtubeを早送りの2倍速で再生する方法を見つけたので、メモ。
しかも、この方法だとパソコンに動画をダウンロードすることなく、再生できるのだ。
手順は3ステップ。

  1. GoogleChrome(HTML5対応のプラウザ)をインストール
  2. 秘密のページでHTML5をYoutubeで有効化
  3. Youtubeで0.5から2倍速再生

では、順に書いていきます。

GoogleChrome(HTML5対応のプラウザ)をインストール

Youtubeを倍速再生するためには、HTML5に対応したブラウザで閲覧する必要がある。
簡単な方法がGoogleChromeで閲覧すること。

他にも、Safari が対応しているらしいが、未検証。

GoogleChromeをダウンロード

秘密のページでHTML5をYoutubeで有効化

次には、Youtubeの設定でHTML5を有効にする必要がある。
以下のページの下に

『HTML5視聴用が無効になっています』

と表示されているので、有効にする。

Youtube HTML5有効設定ページはココから

image

Youtubeで0.5から2倍速再生

設定ができたら、Youtubeで適当な動画を選択。
速度を調節するに、右下の[設定]アイコンをクリックする。

image

最後に

この機能はYoutubeで開発中の機能らしいので、
いづれ、デフォルト機能として搭載されるでしょう。

今回はコチラのエントリを参考にしました。感謝_(-_-)_
HTML5 を使うとYouTubeでスローや早送りができる – 5号館のつぷやき

30 Sep 2012, 23:33

もっとクラウド速聴!iPhoneのPodcast Appで実現する倍速体験

IMG_1825

前回の記事で、自分が普段速聴のためにしていることを書きました。

フリーソフト、『Lilith』を使った方法です。

クラウド速聴!フリーソフト『Lilith』でNHKニュースを3倍速で聴いてみる。

しかし最近、iOS6で搭載された、iPhoneのデフォルトアプリ

『PodCast App』

を利用すると、もっと簡単に高速再生ができることがわかりました。

NHKラジオニュースをクラウドからダウンロードする

iOS6になってから、Podcastを聴くためのアプリ『Podcast App』がデフォルトインストールされるようになりました。このアプリを利用すると、クラウド上のPodcast音源をiPhone/iPadへ直接ダウンロードすることができます。

そして、ダウンロードした音源を0.5~3倍速に変換して聴くことができるのです\(^0^)

アプリを起動して、下の[トップラジオ局]を選択します。

次に、[News & Politics]から[NHKラジオニュース]を選択します。

IMG_1823

すると、登録画面が開くので、番組を登録します。

[Podcast]タプをタッチすると、さきほど登録した番組が表示されます。

ダウンロードできる記事が一覧で表示されるので、早速ダウンロードです。

IMG_1822

iPhoneで音源を3倍速へ加速させる

ダウンロードしたら、次は倍速再生してみます。

ダウンロードした音源をタッチすると、通常速度で音声が再生されます。

速聴をするには、画面を上にスクロールします。

すると、1x というアイコンが中心に表示されるので、好みの速度に変更します。

3倍速にするためには3xを選択します。

IMG_1824

これで、簡単にNHKラジオニュースを3倍速で聴くことが可能となります。(^-^)

Podcastアプリの評価・感想

前回の記事で紹介した方法に比べると、音質は悪いです。ときどき、音が飛びます

ただし、前後関係から判断すれば、まあ理解できるかな、といったところです。

若干手間はかかりますが、前回の記事のLilithで速聴変換した方法の方が私は好きです。

ノイズキャンセリングヘッドホンでNHKニュース中へ現実逃避しよう

NHKニュースの英語版、NHK World Englishも 同じアプリで楽しめるのもいいですね。私は普段、まず3倍速で日本語のニュースを聴いて、そのあとで英語のニュースを聴くようにしています。そのすると、内容がもれなく頭に入ります。

ちなみに、ニュースは通勤中の満員電車の中で聴きます。

耳にはノイズキャンセリングヘッドホンをつけ、目をつぶって音声に集中します。

満員電車は嫌いなので、音楽の世界に逃避して、ほとんど目を開けません。

ノイズキャンセリングヘッドホン、高いけれどとてもオススメです。

最高の現実逃避用のグッズです。

(↑これを使ってます)

30 Sep 2012, 12:48

JenkinsにWarning Plugin/Task Scanner Pluginを入れる

Jenkinsのコード分析のためのプラグイン2つを入れてみたので、

こんなかんじだよというのを紹介。

  • Warning Plugin
  • Task Scanner Plugin

Warning Pluginで、コンパイルエラーを早期検出する

Warning Pluginは、コンパイラが吐き出すエラーをJenkinsで表示するプラグイン。

いろんなコンパイラに対応している。

設定画面

image

出力結果はこんな感じ。

image

Task Scanner Plugin でやり残しを見逃さない

よく自分はあとでやることはソースに、TODOと書くことが多い。

また、バグを作りこんでしまった場合は BUGBUGと書くことが多い。

Task Scanner Pluginを使うと、

そんなような、決まったキーワードを検索して、表にまとめてくれる。

このことによって、タスクをやり残すことを防ぐことができる。

設定画面

image

出力結果

image

まとめ

ここで紹介したものはEclipseを使っていれば、

特に必要ないかもしれない。

でも、Jenkinsを使って見えてくる視点、それは

時間軸での変化

これがワカルのである。

30 Sep 2012, 05:19

親指シフトでPC入力効率を爆速化!~ようやく効果を感じ始めた私の体験談~

自分は一年前からコツコツと親指シフトをマスターすべく続けてきたが、

最近親指シフト入力とローマ字入力の入力速度を計測したところ、

親指シフトの方が速かったので、体験談や効果を交え、記事にしてみた。

(会社の自席で使っているMy親指シフトキーボード)

はじめに

PC作業を効率的にこなすにはなにが必要か?

ショートカットを覚える?バッチやマクロを組む?まぁ、それも大事だ。

しかし、一番効率的な方法は、タイピング速度を上げることである。

それでは、タイピング速度を上げるためにはどうすればよいか?

あまり知られていないが、とても効果的な方法がある。

それは、

親指シフト

である。

親指シフトとはなにか

今ではPC入力の方法としては、ローマ字入力がほとんどだろう。一般的なキーボードには、かな入力のためのひらがなが振ってあるので、かな入力も知名度が高い。しかし、ローマ字入力やかな入力とは違う、第三の入力方法が存在する。それが、日本語入力のために開発された親指シフト入力である。

親指シフトは日本語を効率的に入力するために開発された、入力方法だ。

親指シフトをつかうと、理論上はローマ字入力の

1.7倍

の入力速度を身に付けることができるらしい。 その秘密は、キーボード配列にある。下の左右に配置された親指シフトと他のキーを組み合わせることによって、どのひらがなでも、1打鍵で入力できるのだ。ローマ字入力が2打鍵必要なことを考えると、納得のいく効果である。

親指シフトに必要なフリーソフト、『やまぶき』の紹介

親指シフトに専用のキーボードは必要ない。

フリーソフトのエミュレータ、やまぶきを利用すれば、

どんなWindowsPCでも親指シフト利用可能だ。

(ダウンロードはココから)やまぶき作ってます

インストールしたあとは、[設定]から[配列定義ファイル]を選択する必要がある。

image

配列定義ファイルは \layout\配下にある。

いろいろと種類があるのだが、

標準的そうな NICOLA.yab を選択する。

これで準備完了。あとは親指シフト入力表を印刷して壁に貼り付け、

ひたすら練習するのみだ。

親指シフト入力表は以下のリンクから参照できる。

親指シフト配列はココから

親指シフトの体験談をツラツラと

まずは半年間であいうえおをマスターする

親指シフトを知ったのは、勝間氏の書籍だった。

 

親指シフトの存在を調べていき、身に付けるのは大変そうだけれど、

将来もずっとパソコンと関わっていくことを考えると、

今の時点で親指シフトに乗り換えたほうがよいと判断した。

はじめは、1日5分、『あいうえお』からひらがなを覚えていった。

なんだか小学生のころに戻ったような懐かしい感じだ。

ときどきサボったり諦めたりしながらも3,4ヶ月かかって、

ひと通りの文章を打てるようになった。

続く2ヶ月はひたすらに『走れメロス』の冒頭を写経した。

半年くらいかけて、ようやくブラインドタッチマスターだ!(=^_^=)

仕事での導入・・・非生産性をコソコソと隠す日々

日常や仕事で親指シフトを導入するのは、

ある程度の速度を出せるようになってからを考えていた。

なので、6ヶ月経った当たりで、仕事に親指シフトを導入した。

すると、仕事の効率が半分になった。(T◯T)

周囲にはひた隠ししていたが、親指シフトで生産性が半分になっていたら、

会社としてはいやな社員だとおもう。

そんな周囲の目に耐えながらも、コソコソと親指シフトの修行を積んでいたある日、

後ろの席を振り返ったら、なんと後ろに座っていた人が親指シフトを使っていた。

(親指シフトキーボードを使う人を、親指シフターという)

今の自席に座っていて2年以上経ったが、いままで気付かなかった自分にびっくりした。

さっそく話しかけたところ、

『あー,君は若いのに親指シフトつかってんだー』

と、たいへん嬉しそうな顔をされた。

そして、親指シフトキーボードをあげるよーと言われた。

目の前のロッカーを開けると、

そこには親指シフトキーボードが3台転がっていた。(\(◎o◎)/ マジデフカ!)

 

さらには、ほらよといわれて、

親指シフト専用IMEの『Japanist』をくれた。(\(◎o◎)/ マジデフカ!)

 

なんというミラクルありえない展開!!

かくして、親指シフトキーボードを手に入れた自分は、 それから非生産的な仕事ぶりを発揮しつつ、 その後半年をかけて親指シフトをマスターしたのだった。

JapanistもNICOLA親指シフトキーボードもいらない

Japanistも親指シフトキーボードも必要ないというのが、自分の所感だ。

Japanistは試してみたが、GoogleIMEの方が単語予測が優れているので、結局、仕事でもプライベートでもGoogleIME + やまぶきの組み合わせに落ち着いている。

また、専用親指シフトキーボードもあってもなくても、関係ない。

個人的には、親指シフトキーボードはデザインがダサいので・・・hogehoge(放送禁止用語)だ。価格も普通のキーボードより高い。

参考リンク

 

23 Sep 2012, 12:53

C言語/C++でJenkins実践入門してみるよ

最近継続的インテグレーション(CI)に興味を持ったので、

Jenkinsの日本での初めての入門書である、Jenkins実践入門を読んでみた。

内容はとても興味深いものの、残念、JAVA中心で述べられていた。...┌(´_`)┐

C言語つかいの自分としては、C/C++でのツールの情報が欲しいところだ。

Jenkins実践入門目次チラ見せしちゃいます

C言語でJenkinsをハック!継続的インテグレーションだぃ

というわけで、この本で紹介されていることを、

C言語/C++でしようとするとどうすればいいのかを調べてみた。

目次に対応させると、以下のような感じ。

CheckstyleとかSonerはもしかしたらC/C++でも使えるのかな?

調査不足でバタンキュ~ツꀀ σ/〇\

 

image

参考リンク

23 Sep 2012, 12:08

CPDでsaxon9-dom.jarがないよと怒られる

PMDの最新版、pmd-bin-5.0-alphaを落としてきて、

それに付随するCPDを使ったところ、エラーした。

フェーマット出力で XML出力ができない。HTMLやTEXTならばできる。

cpdツꀀ –minimum-tokens 10 –files “C:\hogehoge\src” –language c –format xml

Error DOMSource cannot be processed: check that saxon9-dom.jar is on the classpath java.lang.IllegalStateException: net.sf.saxon.trans.XPathException: DOMSource cannot be processed: check that saxon9-dom.jar is on the classpath at net.sourceforge.pmd.cpd.XMLRenderer.render(XMLRenderer.java:95) at net.sourceforge.pmd.cpd.CPD.main(CPD.java:223) Caused by: net.sf.saxon.trans.XPathException: DOMSource cannot be processed: check that saxon9-dom.jar is on the classpath at net.sf.saxon.event.Sender.send(Sender.java:251) at net.sf.saxon.IdentityTransformer.transform(IdentityTransformer.java:30) at net.sourceforge.pmd.cpd.XMLRenderer.render(XMLRenderer.java:92) … 1 more

JAVAすら知らないが、saxon9-dom.jarがないよといっているみたい。

よくわからないが、ネットから別の saxon9-dom.jarをダウンロードしてきて、

pmd-bin-5.0-alpha\lib\配下にsaxon9-dom.jarをおいたらXML出力できた。

http://www.java2s.com/Code/Jar/s/Downloadsaxon9domjar.htm

23 Sep 2012, 09:14

CCCCを利用してC言語のステップ数をJenkinsで表示する

CCCCとは、C言語/C++のステップカウンタだ。
ステップ数をカウントをカウントしてくれるだけでなく、
コードの様々なメトリックをレポートととして生成してくれる。

CCCCとは、ギャグでもなんでもなく、C and C++ Code Counterの略。
以下からダウンロードできる。

C and C++ Code Counter 窶錀 sourceforge

ccccを実行して、ステップ数を得る

ccccはコマンドラインから以下のように実行する。

cccc (対象ファイル)

すると、.ccccというディレクトリに cccc.htmlやらcccc.xmlやらが自動で生成される。

cccc.hemlはこんな感じで出力される。LOCというのが行数にあたる。

image

CCCCはWindows版では
C:\Program Files (x86)\CCCC\cccc.exe
にインストールされるので、Windowsのコマンドプロンプトから実行するには、
直接バスを指定するか、環境変数を設定するかの工夫が必要。

CCCC Pluginを導入してJenkinsで表示する

CCCC PluginをJenkinsにインストールする。
[Jenkinsの管理] > [プラグインの管理] からCCCC Pluginを選択して、インストール。

カバレッジ出力するための設定は、[設定] > [ビルド] で、ccccのコマンドを追加する。

[ビルド後の処理] に [Publish CCCC report]
という項目が追加されているので、選択。 xmlファイルパスを追加する

image

出力結果

出力結果は .htmlと同じだけれど、
ソースが参照できなかったり、関数ごとのステップ数がわからなかったりする。
あまり・・・・な感じだ。

image

こんな感じで、ステップ数の遷移もワカルようだ。(あまり例がよくないな・・・)

image

参考リンク