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

2014/11/14(金)GXP1400(GXP1405)を買ってIP固定電話化

ひかり電話(月額540円)に課金するのがバカらしくなってきたので、IP電話機(SIP Phone)を買ってみました。GXP1400です。これ使ってbrastel*1とかSMARTalkのアカウントを割り当てればIP固定電話化できます。どちらも月額基本料、無料です。

ちょっと設定が大変だったのでメモっておきます。

*1 : おすすめしません。発信時に強制的にアナウンスが入るので使い勝手最悪です。

使い方

DHCPをなぜかうまく取得しなかったので、電話機側でIPを設定しました。そのIPをブラウザで開きます。

IDがなく、デフォルトではパスワード「admin」で管理者モード、「123」でユーザーモードでログインできます。

管理者でログインし、アカウント→General Settingからアカウントを設定します。

設定項目は「SIPサーバ」「SIPユーザーID」「認証パスワード」です。これで発着信ができるようになります。

着信を修正する

設定→着信音からアメリカ仕様の呼び出し音を、日本仕様に変更します。

  • システム着信音:f1=400,f2=385,c=100/200;
  • ダイヤル音:f1=400;
  • 呼び出し音:f1=440,f2=480,c=100/200;
  • 通話中トーン:f1=400,c=500/500;
  • 再送信音:f1=480,f2=620,c=1500/1500;

ファームウェアをアップデートしたい

「メンテナンス」→「Upgrade and Provisioning」にはファームウェアアップデートのための設定がありますが、標準状態ではアップデートされません。フォームウェアサーバパスを変更する必要があります。

  • (変更前)fm.grandstream.com/gs
  • (変更後)firmware.grandstream.com

こうすると「http://firmware.grandstream.com/gxp1400fw.bin」(1405でも同じ)を取得しに行きます。http://fm.grandstream.com/gs/ は古くファイルがありません。

設定を自動で読み込ませたい

起動時にIP設定が終了したあと、設定をWeb上から自動的に読み込ませることができます。読み込み元は「設定サーバパス」からでツールダウンロードページから設定ファイルを作ることができます。

GET /path/cfg000b82XXXXXX
GET /path/cfg000b82XXXXXX.xml
GET /path/cfg.xml

この順番に読み込まれます。MACアドレスごとに参照するのですが、cfg.xmlにしておけば簡単です。

<?xml version="1.0" encoding="UTF-8" ?>
<gs_provision version="1">
<config version="1">
<P345>f1=400,f2=385,c=100/200;</P345>
<P343>f1=400;</P343>
<P346>f1=440,f2=480,c=100/200;</P346>
<P348>f1=400,c=500/500;</P348>
<P349>f1=480,f2=620,c=1500/1500;</P349>
</config>
</gs_provision>

Pxxxの設定項目は「Configuration Template」ダウンロードしてください。

カスタマイズ着信音を読み込ませたい

カスタマイズ着信音は配布されているツールで作ることができます*2。長さによって最大3種類まで作ることができます。

「ringX.bin」というファイルを作るのはそんな難しくないのですが、はたしてこれをどこに置くかというのが難しい。このカスタム着信音は「フォームウェアサーバパス」からダウンロードされます

(自前サーバへのアクセスログ)※起動時
[00:07:48] "GET /path/gxp1400fw.bin HTTP/1.0"
[00:07:49] "GET /path/gxp1400fw.bin HTTP/1.0"
[00:07:50] "GET /path/ring1.bin HTTP/1.0"
[00:07:50] "GET /path/ring2.bin HTTP/1.0"
[00:07:51] "GET /path/ring3.bin HTTP/1.0"

つまりカスタム着信音を利用するとファームウェア自動アップデートができなくなります*3。コンフィグ設定パスから読み込んでくれればよかったのに(苦笑)

*2 : 8KHzのモノラル音声ですが、このツールでダウンサンプリングさせると歪んでしょうがないので(おそらくエイリアシング)、別のツールで8KHzにしてから変換したほうが良いようです。

*3 : 試しに http://firmware.grandstream.com/ring1.bin にアクセスするとファイルが存在します。

まとめ

PoEも対応しているし、細かい設定項目などをみると、会社で巨大な内線システムと一緒に使えるよう設計されているようです。IP固定電話機ってそもそももっぱらビジネス用なのか、個人で使うにはちょっと高機能すぎるのが難点(苦笑)。パナソニックのIP電話機もAmazonで売ってるのですが高いんですよね。

通話はとりあえず安定しています。

蛇足

Brastelは発信時の強制アナウンスがとても邪魔。広告と通話時間アナウンスで20秒ぐらい人生を無駄にします。ネットの評判(評価)にこのことがほとんど書かれてないのはステマだらけなのかな。これなら多少高くてもSmartalkのほうが留守電とかの使い勝手も含めておすすめです。Brastel(ブラステル)は絶対やめとけ(苦笑)

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さんの実装が一番スマートですね。