コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2015年6月4日 >>> 2015年5月22日
link もっと後

2015年6月4日

バカが見る

鼻と耳は繋がっているから、鼻にイヤホン挿したら聞こえるというからやってみたけども、何も聞こえませんでした。

ウォークマンを最大音量にすれば聞こえますが、鼻に刺しても挿さなくても聞こえる音量は変わりません

鼻詰まってるからかな?と思って、鼻かんでからやってみたけどやっぱり聞こえません。

もしかして「うわ、あいつ本当にやってるよ、バーカバーカwww」的な冗談だったのかなあ??

メモ: 技術系?の話はFacebookから転記しておくことにした。

編集者:すずき(2015/11/29 04:50)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2015年6月3日

ビルド高速化ツールccache

目次: Linux

巨大なプロジェクト(Androidなど)をコンパイルするときに欠かせないccacheというツールがあります。

簡単に説明すると、過去にコンパイルした結果をキャッシュデータとして保存しておき、一致する場合はコンパイルをスキップして、結果をキャッシュデータから引き出してくるツールです。

使い方は大きく分けて2つあって、1つは環境変数やMakefileなどを書き換えてコンパイラの名前を変更する方法です。

例えば今までgcc hoge.cとしていたところをccache gcc hoge.cと書き換えたり、makeとしていた部分をCC='ccache gcc' makeとします。簡単ですが透過性が無いのが欠点で、そこらじゅうのMakefileを変えて回るのは非常に大変だろうことは、容易に想像できるかと思います。

もう1つはコンパイラの起動をフックする方法です。ccacheはシンボリックリンク経由で起動された場合、シンボリックリンクの名前に該当するコンパイラを探して起動する、という動作をします。やることとしては、

  • ccacheへのシンボリックリンクを作成し、名前をキャッシュしたいコンパイラと同じ名前にします
  • gccを起動したときに ~/bin/gccが選択されるように、PATHを書き換えます

例えば /usr/bin/gccのコンパイル結果をキャッシュするなら…、

ccacheを使う準備
$ which gcc
/usr/bin/gcc

$ ln -s /usr/bin/ccache ~/bin/gcc

$ export PATH=~/bin:$PATH
$ which gcc
/home/katsuhiro/bin/gcc

このようにします。またccache -sでどれくらいキャッシュが効いているかを見ることができますので、実際キャッシュ出来ているかどうかを見てみます。

ccacheが働いている様子
$ echo 'int main;' > a.c

$ ccache -s
cache directory                     /home/katsuhiro/.ccache
cache hit (direct)                     0
cache hit (preprocessed)               0
cache miss                             0
files in cache                         0
cache size                             0 Kbytes
max cache size                       1.0 Gbytes

$ gcc -Wall a.c -c -o a.o
a.c:1:5: warning: ‘main’ is usually a function [-Wmain]
 int main;
     ^
$ ccache -s
cache directory                     /home/katsuhiro/.ccache
cache hit (direct)                     0
cache hit (preprocessed)               0
cache miss                             1★★キャシュから結果を返せなかった★★
files in cache                         3
cache size                            12 Kbytes
max cache size                       1.0 Gbytes

$ gcc -Wall a.c -c -o a.o
a.c:1:5: warning: ‘main’ is usually a function [-Wmain]
 int main;
     ^
$ ccache -s
cache directory                     /home/katsuhiro/.ccache
cache hit (direct)                     1★★キャシュから結果を返せた★★
cache hit (preprocessed)               0
cache miss                             1
files in cache                         3
cache size                            12 Kbytes
max cache size                       1.0 Gbytes

きちんと働いてくれていそうです。

ccacheとPATH環境変数

で、今日の本題なんですが、会社でccacheが動かないというので相談を受けて見に行ったら、確かにPATHをどう設定しても「コンパイラが見つからない」というエラーが出ていました。

散々悩んで辿り着いた答えはCCACHE_PATH環境変数でした。man ccacheとすると、しっかり説明が載っています。

この名前だけ聞いて、ああ、あれね?とわかる方は、かなりccacheを使い慣れている方だと思います。恥ずかしながら、わたくし全く知りませんでした…。

先の節で説明した2つ目の方法でccacheを起動すると、ccacheはPATHに列挙されたディレクトリからコンパイラを探そうとします。

しかし実はこの挙動はCCACHE_PATHという環境変数により変えることができて、もしCCACHE_PATHという環境変数が定義されていた場合、ccacheはPATHの代わりにCCACHE_PATHに列挙されたディレクトリからコンパイラを探そうとします。

相談されたエラーは間違ってCCACHE_PATHが定義してしまい、さらにCCACHE_PATHで何もないディレクトリを指していたため、ccacheが「コンパイラが無いですねー?」とエラーを出していたのでした。

CCACHE_PATHの働き
$ gcc
gcc: fatal error: no input files
compilation terminated.

$ export CCACHE_PATH=/usr
$ gcc
ccache: FATAL: Could not find compiler "gcc" in PATH★★コンパイラが見つからないと言っている★★

$ unset CCACHE_PATH
$ gcc
gcc: fatal error: no input files
compilation terminated.

わかっていれば、何だ、そんなこと…というレベルの話ですが、意外とハマって苦戦したので、思い出として書き残しておきます。

編集者:すずき(2025/10/09 23:49)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2015年5月28日

GPS故障?

目次: 自宅サーバー

先日(2015年5月8日の日記参照)の日記で壊れているのかと思っていたGlobalsat BU-353-S4ですが、実は壊れていませんでした。

GPS受信機が受信状態を伝える通信方式には、NMEA 0183という規格に基づいたテキストデータで送ってくるか、GPSの受信機メーカー独自のバイナリデータで送ってくるか、の2つがあるようです。

恐らく大抵のメーカーは両方に対応しており、NMEAか、メーカー独自バイナリかが選択できます。もちろんGlobalsat BU-353-S4が採用しているSiRF Star IVもどちらかを選ぶことができます。

どうも色々いじっているうちにバイナリモードになってしまっていたらしく、NMEAを期待していたGPSのデータ表示アプリなどが「何言ってるのかわからんわ、このデバイス」状態に陥っていました。故障じゃなくて良かったです。

GPSデータの確認方法
stty -F /dev/ttyUSB0 ispeed 4800 && cat < /dev/ttyUSB0
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,12,01,00,000,,02,00,000,,03,00,000,,04,00,000,*7C
$GPGSV,3,2,12,05,00,000,,06,00,000,,07,00,000,,08,00,000,*77
$GPGSV,3,3,12,09,00,000,,10,00,000,,11,00,000,,12,00,000,*71
$GPRMC,,V,,,,,,,,,,N*53
...

もし上記のようにテキストデータが受信されればNMEAモードになっています。もしグチャグチャの字が受信されるときは、ボーレートが間違っているか、バイナリモードになっている可能性が高いです。

モードの切り替え方

GPSデータの通信方式を切り替えるにはgpsctlというコマンドを使います。GPSデバイスが /dev/ttyUSB0として認識されているとして、

GPSデータの通信方式切り替え
# to NMEA
gpsctl -f -n /dev/ttyUSB0

# to Binary
gpsctl -f -b /dev/ttyUSB0

オプション-nはNMEAモードにする、-bはバイナリモードにするという意味で、-fはローレベル(gpsdを介さないという意味らしい)でGPSデバイスにアクセスするという意味です。

ちなみにSiRF Star IVはモード切り替えに数秒〜10秒近くの時間がかかることがあります。さすが「絶対買わない方が良いぜ」と言われるだけのことはある…。

無理やり変えてみる

これで終わりだとあまり面白くなかったので、Globalsat BU-353-S4の通信方式をgpsctl -n以外で切り替える方法も試してみます。

ありがたいことにGlobalsat USのサイトからSiRFバイナリデータの仕様書を入手できますので、NMEAモードへの切り替えコマンドを送ってみようと思います。仕様書のダウンロードはこちらのサイトの「SiRF Binary Protocol Document」からできます。

ちなみに仕様書の「Switch To NMEA Protocol – Message ID 129」にそのまま使える例が載っていますので、これをそのまま送ってみます。

  • A0A20018 - Start Sequence and Payload Length
  • 810201010001010105010101000100010001000100012580 - Payload
  • 013AB0B3 - Message Checksum and End Sequence

このデータをバイナリエディタなどでファイル(to_nmeaというファイル名だとします)に書いておき、

GPSデータの通信方式切り替えSiRF用
# gpsctl -f -b /dev/ttyUSB0
/dev/ttyUSB0 identified as a SiRF 9GSD4e_4.1.2-B2_RPATCH.02-F-GPS-4R-1301151 01/17/2013 017 at 9600 baud.
gpsctl:SHOUT: switching to mode BINARY.
falcon:~# stty -F /dev/ttyUSB0 ispeed 9600 && cat < /dev/ttyUSB0 | hexdump -C
00000000  a0 a2 00 29 02 00 00 00  00 00 00 00 00 00 00 00  |...)............|
00000010  00 00 00 00 00 00 00 00  00 00 03 36 02 6a 9c 5a  |...........6.j.Z|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 01 9d b0  |................|
00000030  b3 a0 a2 00 09 09 00 00  00 00 00 00 00 00 00 09  |................|
...

# cat to_nmea > /dev/ttyUSB0

# stty -F /dev/ttyUSB0 ispeed 9600 && cat < /dev/ttyUSB0
$GPGGA,163721.731,,,,,0,00,,,M,0.0,M,,0000*53
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,163721.731,V,,,,,,,280515,,,N*43
...

以上のようにバイナリをGPSデバイスに送りつけると、無事NMEAモードに切り替わります。ちなみに上記の設定例だとボーレートが4800bpsから9600bpsに変わってしまうので注意してください。

編集者:すずき(2024/06/22 16:22)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2015年5月26日

ピリオドとユーザ名の不思議

Debianのセットアップでユーザ名にピリオドを使ったら「不正なユーザ名」と言われるので、何故?と思って調べたら思いのほか歴史がありました。

元々BSDでは、chownのユーザ名とグループ名の区切りにピリオドを使っていたそうで、ユーザ名にピリオドを使うなど以ての外でした。

しかしPOSIXがユーザ名にピリオドも使えるよ、と決めてしまったので、哀れchownの区切りはピリオドからコロンになりました。

Debianのセットアップスクリプトは安全側、つまりユーザ名のピリオドに対応していない古いツールを考慮してBSD時代のルールを守っているのだろう、と思われます。

実は誰も直さずに放置されているだけかも知れませんけど…真相はわかりません。

メモ: 技術系の話はFacebookから転記しておくことにした。

編集者:すずき(2015/06/05 01:01)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2015年6月4日 >>> 2015年5月22日
link もっと後

管理用メニュー

link 記事を新規作成

<2015>
<<<06>>>
-123456
78910111213
14151617181920
21222324252627
282930----

最近のコメント5件

  • link 25年11月28日
    すずきさん (12/03 11:24)
    「トルクコンバーターがいてエンブレは掛かり...」
  • link 25年11月28日
    hdkさん (12/02 08:02)
    「"停止直前に急にエンブレがほぼゼロになる...」
  • link 25年10月6日
    すずきさん (10/10 13:14)
    「ですね。ccはもはやコンパイラというより...」
  • link 25年10月6日
    hdkさん (10/10 08:27)
    「ただのHello, worldでも試して...」
  • link 25年9月29日
    すずきさん (10/03 00:29)
    「なんと、メタパッケージ入れてなかったです...」

最近の記事20件

  • link 25年11月29日
    すずき (12/02 01:15)
    「[バーベキュー@つくば] 筑波大関連の人が集まってバーベキューするイベントが年1回開かれていて、誘ってもらったので去年から参加...」
  • link 25年11月28日
    すずき (12/02 00:43)
    「[ジャガーさんの所感] 目次: 車購入してから4か月が経ちました。通勤で毎日乗っているためか走行距離が3,000kmを超えまし...」
  • link 23年5月15日
    すずき (12/02 00:43)
    「[車 - まとめリンク] 目次: 車三菱 FTO GPX '95の話。群馬県へのドライブ1群馬県へのドライブ2将来車を買い替え...」
  • link 25年9月7日
    すずき (12/01 22:03)
    「[ジャガーXEのタイヤ交換(FALKEN AZENIS)] 目次: 車タイヤのメーカーが左前だけ違うのと、溝の残りが4mmくら...」
  • link 25年7月20日
    すずき (12/01 22:02)
    「[ジャガーXEを買いました] 目次: 車車を買い替えました。ジャガーXE Sです。マイナー車すぎて会社の人たちもあまり知らなさ...」
  • link 10年9月3日
    すずき (12/01 22:01)
    「[レガシィの納車は明日] 目次: 車中古車屋さんから夕方電話がかかってきました。明日の納車だそうです。担当の方が忙しいかったの...」
  • link 10年9月4日
    すずき (12/01 22:00)
    「[今日の予定] 目次: 車今日の予定はこんな感じ。午前: 納車(茨木)昼: 退寮(高槻)午後: 同期のみなさんと食事(京都)実...」
  • link 25年11月21日
    すずき (12/01 21:55)
    「[ジャガーさんをぶつけた] 目次: 車家の近所の狭い道で路駐してたタクシーをかわして進もうと思したら、左前を電柱にぶつけました...」
  • link 25年11月9日
    すずき (11/23 14:16)
    「[タローマンのゲームTAS動画] 目次: ゲーム今年の夏ごろにシブヤフードダンジョンとタローマンがコラボしたイベント(シブヤフ...」
  • link 21年12月28日
    すずき (11/23 14:14)
    「[ゲーム - まとめリンク] 目次: ゲームNintendo DSを買ったパネルでポンDS最近の朝はパネポンDS聖剣伝説DSチ...」
  • link 25年5月1日
    すずき (11/07 13:52)
    「[首都高バトルSteam版、フルチューン後の姿 - その3] 目次: ゲーム首都高バトル(Steam版)高ランクの車をひたすら...」
  • link 23年4月10日
    すずき (11/04 16:20)
    「[Linux - まとめリンク] 目次: Linuxカーネル、ドライバ関連。Linux kernel 2.4 for ARMが...」
  • link 09年5月18日
    すずき (11/04 16:19)
    「[ffmpegとlibx264] 目次: LinuxせっかくDVDという長めの映像コンテンツが手元にあるので、ffmpegで変...」
  • link 25年10月31日
    すずき (11/02 03:19)
    「[GNU global + pygmentsトラブルシューティングUbuntu編] 目次: Linux先日(2025年10月2...」
  • link 25年10月22日
    すずき (11/02 02:58)
    「[NTPで時刻をすぐに合わせたい] 目次: LinuxNTPで時刻を調整する方法は2つあって、ズレている時間をジワジワ合わせて...」
  • link 23年6月1日
    すずき (11/02 02:42)
    「[自宅サーバー - まとめリンク] 目次: 自宅サーバーこの日記システム、Wikiの話。カウンターをPerlからPHPに移植日...」
  • link 05年11月23日
    すずき (11/02 02:41)
    「[NTPで時計合わせ、その2] 目次: 自宅サーバー11/23現在、未だGoogle先生に捕捉されていない奇跡。それはさておき...」
  • link 05年11月22日
    すずき (11/02 02:41)
    「[NTPで時計合わせ] 目次: 自宅サーバーパソコンの時計は勝手にどんどんずれていきます。放って置くと1分くらいずれていること...」
  • link 15年5月8日
    すずき (11/02 02:40)
    「[GPSは世界一正確な時計、その2] 目次: 自宅サーバー前回(2015年3月9日の日記参照)はGPSモジュールをPCと接続し...」
  • link 15年3月9日
    すずき (11/02 02:40)
    「[GPSは世界一正確な時計] 目次: 自宅サーバーGPSのレシーバーモジュールを買いました。Globalsat BU-353S...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 2025年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 12/03 11:24