2015/12/01(火)gitコマンドメモ

自分用メモ。

初期設定

$ git config --global user.name "nabe"
$ git config --global user.email "nabe-g@example.com"
$ git config --global core.editor vi
$ git config --global color.ui true 
$ git config --global core.pager 'less'
$ git config --list
$ git init
$ git clone http://------/

基本コマンド

$ git status
$ git log
$ git log --oneline
$ git log --pretty=oneline
$ git diff
$ git diff --cached
$ git rm
$ git mv

コミット

$ git commit
$ git commit --amend		直前のコミットをやり直し(上書き)
$ git reset  --soft HEAD^	ファイルをそのままでコミットの取り消し

stash

$ git stash
$ git stash pop

ブランチとタグ

$ git branch new-branch
$ git checkout branch-name
$ git merge develop
$ git tag -a v3.00-beta2 -m "Version 3.0x"
$ git push
$ git push --tags
$ git tag -d DeleteTAG
$ git push origin :DeleteTAG

リモート操作

$ git remote -v
$ git remote add [name] [url]
$ git remote add 
$ git remote rename pb paul

その他

手元の変更取り消し

$ git checkout -- .

ログ

$ git log --pretty=oneline

2015/11/09(月)IPカメラ(Webcam)リレープログラム / ip-camera-relay.pl

IP Cameraの映像を中継するプログラムです。以下の機能があります。

  • IPカメラへの自動再接続。
  • 複数のIPカメラを登録し、接続できたカメラの映像を中継する。接続が切れたら、次に接続できたカメラに接続する。
  • IPカメラに接続できていない時は、指定した画像(ブランクイメージ)を代わりに送信する。

VLCなどのIPCamストリーム受信ソフトでは、カメラとの接続が切れた場合に自動再接続を行ってくれないものがあります。またカメラと接続が切れたときにブランク画像を挿入したいこともあり、それを実現するためのソフトになります。

プログラム

Gistに置いたので、適当に拾ってください。

  • ip-camera-relay.pl Perl用プログラム
  • ライセンス : GPLv2 or later
  • http転送。パスワードなし。Motion JPEG(以下MJPEG)のみ対応。

使い方

$ ip-camera-relay.pl -p 8888 http://(camera-ip):port/stream-path

クライアント接続用に8888番ポートを開き、指定したカメラに接続します。カメラURLはブラウザから接続するURLではなく、ビデオストリームのURLを指定してください*1

複数のカメラを指定すると、それぞれを順番に接続します。最初に接続できたストリームをクライアントに配信し、カメラとの接続が切れたら次に接続できたカメラの映像を送ります。

どのカメラとも接続できない時は、ブランク画像(標準では640x480の青い画像)を送信します。

その他オプションはヘルプを参照してください。

*1 : ブラウザから接続したりカメラの仕様書を見れば、書かれているかと思います。

WebCamのプロトコル

続きを読む

2015/11/06(金)UPnP/SSDPマルチキャスト中継プログラム(DLNA用)

UPnPのマルチキャストパケットを中継するためのプログラムです。通常、同一ネットワーク内でしか使用できないUPnPを、ルーターを超えて使用できるようになります。

想定

  • DLNAサーバとクライアント(またはコントローラーとレンダー)がルーターを超えて存在する。
  • それぞれネットワークAとBとすれば、A内のPCとB内のPCは互いに通信可能である(NATされていない)。
  • どちらのネットワークにも属するPCが存在する。

「WiFiと有線LAN環境を同一ネットワークにしたくない」ただそれだけなのですが、そのせいでUPnP/DLNAが超えられず大変苦労しました……。

続きを読む

2012/11/26(月)DICOM通信プロトコルのまとめ

2010/05/14(金)3の倍数を除算せずに判定する

テーブルが間違ってたバグを修正しました(汗) 感謝>ingktさん


3の倍数を除算を使わずに判定したいという話を聞いたので、ちょっと考えてみました。

方法

2進数表示を考えて2桁ごとに区切ります。それぞれ0~3までの数字と捉えて、足し算します。足し算の結果が3で割り切れれば3の倍数です。

372 → 101110100b
 → 1b + 01b + 11b + 01b + 00b
 = 1 + 1 + 3 + 1 = 6

(参考にしたサイト) No.055 「111」は「3」の倍数(原理は一緒)

実装

intが32bitの場合(0-0xfffffffeまでテスト済)。

#define MUL3TABLE 0x49249248	// bit31 to 0
int mul3test(unsigned int x) {
	int i;
	int c=0;
	for(i=0; i<16; i++,x>>=2) {
		c += (x & 3);
	}
	if (c>30) c-=27;
	return (MUL3TABLE >> c) & 1;	// if multiple 3 return 1
}

16bitの場合。

#define MUL3TABLE 0x9248;	// bit15 to 0
int mul3test(unsigned int x) {
	int i;
	int c=0;
	for(i=0; i<16; i++,x>>=2) {
		c += (x & 3);
	}
	if (c>15) c-=12;
	return (MUL3TABLE >> c) & 1;	// if multiple 3 return 1
}
}

判定に0を含める場合

「3の倍数」ではなくて3で割り切れるかどうかを判定する場合は、

#define MUL3TABLE 0x49249248	// bit31 to 0
#define MUL3TABLE 0x9248;	// bit15 to 0

をそれぞれ、

#define MUL3TABLE 0x49249249	// bit31 to 0
#define MUL3TABLE 0x9249;	// bit15 to 0

と修正してください。

改良 2010/05/14

ts1さんのコメント通り改良したもの。

int mul3test2(unsigned int x) {
	x = ((x >> 2) & 0x33333333) + (x & 0x33333333);	// 0 to 6
	x = ((x >> 4) & 0x0f0f0f0f) + (x & 0x0f0f0f0f);	// 0 to 12
	x = ((x >> 8) & 0x00ff00ff) + (x & 0x00ff00ff);	// 0 to 24
	x = ((x >> 16) + x) & 0x0000003f;
	if (x>30) x-=27;
	return (MUL3TABLE >> x) & 1;	// if multiple 3 return 1
}

ingktさんの改良案。2bitずつ加算しなくてもいいのは気付かなかった(汗)

int mul3test3(unsigned int x) {
	x = ((x >> 4) & 0x0f0f0f0f) + (x & 0x0f0f0f0f);
	x = (x >> 8) + x;
	x = (x >> 16) + x;
	x = ((x >> 4) & 7) + (x & 0xf);
	return (MUL3TABLE >> x) & 1;
}

実行速度0~0xfffffffeまで。gcc -O3でコンパイル。

mu3test()
real    2m10.451s
user    2m10.400s
mu3test2()
real    1m28.912s
user    1m28.900s
mu3test3()
real    15.719s
user    15.700s

非力なマイコンだとしても、ingktさんの実装が一番スマートですね。

OK キャンセル 確認 その他