投稿

2019の投稿を表示しています

Makefileの基本的な書き方について

最近研究室Wikiに後輩向けの文章書いてたのですが,いくつかはclosedにするのも勿体無いので編集してブログで公開しようかと思います。 概要 Makefile は自分の書いたコードのビルドの自動化に便利なため基本的な記法は知っておくとよい いちいちシェルの履歴を確認したりコマンドをミスする悲しいことがなくなる Makefile はビルドだけでなく実験やらなんやらの task runner としても便利 ビルド・実験を回す・結果をグラフにする,などをまとめてやったりすることも可能 上記は shell script でも可能だがメリットとして あるタスクに対して依存関係が記述できる 実験タスクの依存にビルドタスクを記述すれば,実験タスクを実行したら自動でビルドしてくれる あるタスクについて,依存先が更新されていなければ実行しないという機能が標準で存在 二行上のような依存を記述していたときに,ソースコードの更新の有無でビルドの実行をする/しないを勝手に判断してくれる 以下の説明は GNU Make に準拠して説明を行う。BSD Make の場合上手く動作しない記法も含まれる Makefile の基本的な利用法 TARGET := prog CC := /usr/bin/gcc CFLAGS := -g -O2 -Wall RM := /bin/rm $(TARGET): main.c $(CC) $(CFLAGS) $< -o $@ clean: $(RM) -rf $(TARGET) all: $(TARGET) .PHONY: all clean 上記は最も基本的な Makefile の記述のひとつ。 ひとつひとつ見ていく Makefile の変数 Makefile はシェル変数とは別に独自の変数を持つ。 := で変数を定義し, $(VAR) のように記述して展開する。 また,変数は = でも定義が可能だが, := と = は定義式の評価のタイミングが異なるなど差異が存在する。 具体的には = を用いると値が決まるのが実際に参照されるときになる。 Makefile のタスクの中でシェルの環境変数($PATH など)を展開したい場合は $$PATH のように $ をエスケープす

計算機科学(一部分野)の論文の探しかた・投稿先の探しかた

Google scholar や CiNii で検索しろなどという論文一般の探しかたはもう言われ尽くしてるので,CS(の一部の分野)に限った話をします。 論文 まず論文の探しかたとして, https://jeffhuang.com/best_paper_awards.html が 1996 年以降のベストペーパーを分野を横断して掲載しています。 分野ごとにトップカンファレンス 1 つしか掲載していないので網羅的ではないですが,面白い論文を探してるのなら手軽に探せると思います。 なんならここから見つけた会議名や論文についてる reference から芋蔓で他の論文探せますしね。 あとは IEEE Xplore や ACM Digital Library で検索するととてもよいですね。 IEEE や ACM が主な戦場ではない CS の分野はたくさんあると思いますが,私はそれらについて詳しくないので詳しい人に任せます。 また,検索した論文のカンファレンスが分野でどのぐらいの位置付けなのか,あるいは,この分野についてどういうカンファレンスをみればよいのか,というので, Conference Ranks Guide2Reserch これらのようなカンファレンスのランクが検索できるようなサイトでカンフェレンスの格付けが確認できます。 ジャーナルについてもランクが出てきますが。 最後に,普段から読んでる論文を Mendeley に登録しましょう。Mendeley が論文を suggest してくれるようになります。 なんならたまにメールとかで suggest をまとめて送ってくれます。 投稿先 先程も出したカンファレンス格付けサイト,これはひとつの参考になります。また,これは完全に OS や DB といった CS のうちシステム系に限定した話なのですが, http://www.cs.technion.ac.il/~dan/index_sysvenues_deadline.html テクニオン(イスラエル工科大学)の Dan Tsafrir 准教授がまとめていらっしゃるこのサイトが非常に有用です。 システム系の主要な会議が網羅的に書いてある上に,それぞれの締切日と開催日が載っています。 追記 OS 系会議リスト https://w

コマンドラインでメール/GPG で暗号化と復号

msmtp と msmtp-mta をインストールすると sendmail 互換のコマンドが生えるため CLI からメールがサクっと送れる。 これは Git で ML に patch に送る際に便利である。 defaults auth on tls on tls_trust_file /etc/ssl/certs/ca-bundle.crt logfile ~/.msmtp.log account gmail host smtp.gmail.com port 587 from example@gmail.com user example passwordeval "gpg --quiet --for-your-eyes-only --decrypt ~/.msmtp-gmail.gpg" account outlook host smtp.office365.com port 587 from example@outlook.com user example@outlook.com passwordeval "gpg --quiet --for-your-eyes-only --decrypt ~/.msmtp-outlook.gpg" account default : gmail こういう風に設定を書いておけばよい。 また,この際に password に平文でパスワードを書くこともできるが,passwordeval として暗号化されたファイルを復号するコマンドを記述すると, パスワードを暗号化し別に扱えるので便利である。 さて,ここで GPG の暗号化なのだが,暗号化のコマンドは以下の通り ➤ gpg --encrypt -o ~/.msmtp-gmail.gpg -r example@gmail.com - password ^D -r に指定するメールアドレスは自分の GPG 秘密鍵に登録してあるメールアドレスである。 コマンドの末尾に - を指定して

デュアルブート環境で Bluetooth を使いたい!

問題 Windows と Linux のどちらか片方でしかペアリングができない。 これは,Windows と Linux でデュアルブートする際, Bluetooth のインターフェースを共有することに起因する。 Bluetooth のペアリングは,ある MAC アドレスの Bluetooth インターフェースに対して Bluetooth 周辺機器がペアリングすることになるため,片方の OS でペアリングしてしまうと,もう片方の OS ではまだペアリングしていないのに周辺機器は「ペアリング済」と判断してしまう,ということである。 周辺機器側でペアリング登録の解除が可能ならば(たとえば iPhone はペアリング済みのホストを一覧・解除できる)両方の OS でペアリング動作は行えるものの,両方の OS でペアリングに使うキーが異なってしまう。しかし,周辺機器が特定の MAC アドレスの Bluetooth インターフェースに対して記憶するペアリングキーは当然ひとつだけである。 解決方法 Linux ならテキストファイル,Windows ならレジストリにペアリングキーが書き込まれる。片方の OS でこれを閲覧して,もう片方の OS のペアリングキーを上書きしてしまえば良い。 手順 まず,Linux でペアリングする。次に,Windows でペアリングしなおす。この時点で Linux で接続が失敗するようになる。 ここからがミソである。Linux を起動し, chntpw をインストールする。これは,Windows のレジストリファイルを編集することが可能なコマンドである。 たとえば,Windows の C ドライブにあたるパーティションを /media にマウントしていた場合, $ chntpw -e /media/Windows/System32/config/SYSTEM chntpw version 1.00 140201, (c) Petter N Hagen Hive </media/Windows/System32/config/SYSTEM> name (from header): <SYSTEM> ROOT KEY at offset: 0x001020 * Subkey indexing type is: 68