- キット各種完売。
- msBerryDAC改造情報
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固定電話化できます。どちらも月額基本料、無料です。
ちょっと設定が大変だったのでメモっておきます。
使い方
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。コンフィグ設定パスから読み込んでくれればよかったのに(苦笑)
まとめ
PoEも対応しているし、細かい設定項目などをみると、会社で巨大な内線システムと一緒に使えるよう設計されているようです。IP固定電話機ってそもそももっぱらビジネス用なのか、個人で使うにはちょっと高機能すぎるのが難点(苦笑)。パナソニックのIP電話機もAmazonで売ってるのですが高いんですよね。
通話はとりあえず安定しています。
蛇足
Brastelは発信時の強制アナウンスがとても邪魔。広告と通話時間アナウンスで20秒ぐらい人生を無駄にします。ネットの評判(評価)にこのことがほとんど書かれてないのはステマだらけなのかな。これなら多少高くてもSmartalkのほうが留守電とかの使い勝手も含めておすすめです。Brastel(ブラステル)は絶対やめとけ(苦笑)
2012/11/26(月)DICOM通信プロトコルのまとめ
DICOMという医用画像のフォーマットおよび医療画像通信規約があり、その通信規約の部分についてのまとめです。DICOMがなんであるか知ってる人向けです。
個人的に必要な最低限Query/Retrieveする範囲のみの情報で、網羅はしていません*1。しかし、この情報があればあの厄介かつ難解な規格書を読むのが相当楽になるかと思います。
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
と修正してください。
改良
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さんの実装が一番スマートですね。