ゼロから始める(た) Travis CI
Travis CIって?
Travis CIを使うと、GitHubにコードをプッシュするだけで自動的にコードのテストを行ってくれる。
さらにテスト結果がメールで届いたりする。
SignUpからテストの実行まで,一通り行ったので手順をメモっておく。
このページを読むと…
Travis CIを使って、プログラムの簡単なテストが出来るようになる。
前提知識
“ゼロから"と言っても、やはり多少の準備は必要
- GitHubのアカウントを持っている
git commit
,git push
等ができる- シェルの基本的なコマンドの意味がわかる (
echo hoge > hoge.txt
とか)
逆に言えば、これぐらいの知識でも使いはじめることはできるということ
準備編
練習用のリポジトリを作ろう
GitHubの自分のページに、練習用のリポジトリを作成しよう。
practice_Travis_CI
でもなんでもOK。
Travis CIに登録しよう
Travis CIのページにアクセスし、Sign Up ボタンを押す。
GitHubのアカウントとパスワードを入力するだけで登録完了。
リポジトリをTravis CIに登録しよう
Travis CIのページの左側に、[My Repositories]ボタンがあるのでクリックすると、自分のリポジトリ一覧が見れる。
リポジトリ名の左側にチェックスイッチがあるので、テストしたいリポジトリのスイッチをONにしておく。
これで準備完了。
実践編
実際にテストを行うには最低でも以下の4つのファイルが必要になる。
- テスト対象となるプログラム
- テスト内容について記述してある.yml(やむる)ファイル
.travis.yml
。*1 .travis.yml
によって呼び出される、テストを実行するシェルスクリプト- プログラムの望ましい出力結果が記述してあるリファレンスファイル
スイッチオンにしたリポジトリに更新をgit push
すると、.travis.yml
ファイルにある記述に従って、自動的にテストが実行される。
それぞれ実際に作成してみる
1 テスト対象のプログラム(target.py)
何でもいい。今回は0~10までの値を標準出力に書き出すpythonプログラム、target.py
にした。
#!/usr/bin/env python #coding:utf-8 #0から10まで標準出力する for i in range(11): print i
2 .travis.yml
テスト内容について記述してある.ymlファイル。
script: sh -e ./test.sh
意味
3 テスト用のシェルスクリプト(test.sh)
#!/bin/sh python target.py > result diff result ref echo $?
意味
- プログラム
target.py
を実行して、結果をresultってファイルに書き込んでね - resultとリファレンス用のファイルrefの内容を、diffコマンドで比較してね(一致すると終了ステータスは0になる)
- 終了ステータスを吐いてね
4 リファレンス用ファイル(ref)
プログラムの望ましい実行結果が書いてあるファイル
中身
0 1 2 3 4 5 6 7 8 9 10
こんだけ*3。
テスト実行
先述の4つのファイル(target.py, .travis.yml, test.sh, ref)を作成し、git add
-> git commit
-> git push
すればOK。
今後はリポジトリの内容を更新してgit push
するたびに勝手にテストが実行される。
結果はTravis CIのページで確認できる。メールで報告も来る。
テスト結果
成功すると(するんだけど)こんな感じ
target.pyかrefを適当に書き換えると、テスト失敗が帰ってくる。こんな感じ
もっと
これ↓とか詳しい
knowledge.sakura.ad.jp
おしまい。
ROSのlaunchファイルの書き方
launchファイルとは
launchファイルを使うと、rosの複数のプログラムを同時に立ち上げることができるので楽ができる
launchファイルの場所
立ちあげたいプログラムが入っているパッケージに、launchディレクトリを作成.
この中に .launchファイルを作成する
launchファイルの中身
具体例
<launch> <node pkg="パッケージの名前" name="ノードの名前" type="実行ファイルの名前"\> . . . <launch>
実行方法
どのディレクトリからでも実行できる。
$ roslaunch ./launch/ hoge.launch
その他
roslaunch にオプション –screenをつけると、出力を直接見ることができる。
ファイルのバイト数を数えるCプログラム
概要
- 引数に指定したファイルの中身が何バイトあるかをカウントするCのプログラム
- ファイルがバイナリでもテキストでもOK
プログラム
#include<stdlib.h> #include<stdio.h> int main(int argc,char *argv[]) { FILE *fp; unsigned bite = 0; if ( (fp = fopen(argv[1],"rb")) == NULL) { printf("ファイルを開けません\n"); exit(1); } while(! feof(fp)) { fgetc(fp); if(!feof(fp)) bite++; } printf("ファイルの内容は %u バイト\n",bite); return 0; }
使用例
ファイルの中身を確認
$ cat hoge.txt hoge
実行
$ ./a.out hoge.txt ファイルの中身は5バイト
4文字プラス改行文字?で5バイトみたいです
確認
ファイルのメモリ上のスペース数を調べるlinuxコマンド du を使う
-bオプションで単位はバイトになる
$ du -b hoge.txt 5 hoge.txt
合ってるみたいですね
もちろん
使えるならduを使ったほうがいいですね。
C言語でバイナリもテキストも読み書きする方法
概要
- Cを使うと、バイナリファイルもテキストファイルも同じやり方で読み書きできる
- ファイルの中身を1バイトづつchar型の変数にコピーして用いれば良い
- 引数に指定したファイルの中身を、もう一つのファイルの中に書き込むプログラムを作成
- ファイルがバイナリでもテキストでも関係なく実行できる
具体例
./a.out photo.png text.txt
と実行するとtext.txtの中身がphoto.pngに書き換わる(テキストファイルが画像ファイルになる)
プログラム
/* バイナリであれテキストであれ引数に指定したファイルをコピー ferror()を用いてエラー検査を行う */ #include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) { FILE *from,*to; char ch; if((from = fopen(argv[1],"rb"))==NULL) { printf("コピー元ファイルを開けません\n"); exit(1); } if((to = fopen(argv[2],"wb"))==NULL) { printf("コピー先ファイルを開けません\n"); exit(1); } while(!feof(from)) { ch = fgetc(from); if(ferror(from)) { printf("コピー元ファイルの読み込みエラー\n"); exit(1); } if(!feof(from)) fputc(ch,to); if(ferror(to)) { printf("コピー先ファイルの書き込みエラー\n"); exit(1); } } fclose(from); fclose(to); return 0; }
.vimrcの設定
自分のvimの設定をメモ。
- vimの設定はホームディレクトリにある .vimrc というファイルの中身を書き換えることで行う。
$ vim ~/.vimrc
とコマンドを送ると編集できる。- ‘=’ の左右にスペースがあってはいけない。
- set tabstop=4 … タブ文字の長さが半角スペース4つぶんになる。(デフォルトだと8つ)
- set expandtab … タブキーを押した時、タブ文字の代わりに複数のスペースが入力されるようになる *1
- set autoindent … 改行時に自動インデント
- set shiftwidth=4 … ヴィジュアルモードで範囲を指定した後、[<],[>]キーでインデントを入れることができる。この時何文字ぶんインデントするかを決める
- set nu … 左サイドに行数が常に表示されるようになる
- set clipboard=unnamedplus … カットやヤンクした内容がクリップボードにも保存されるようになる*2
- set cryptmethod=blowfish2 … :Xコマンドで暗号化する際のアルゴリズムをblowfish2(強力なアルゴリズム)にする
- nmap <C-c> :%s/./&/g … :Ctrl+C で文字数をカウントできるようにする
*1:タブ文字を入力したい場合は ctrl+b を押してから[tab]
*2:普通のvimだとできない katorinax.hatenablog.com