watchmanを使ってTexのコンパイルを自動化してみる
Texで文章を書く際に,いちいちコンパイルを行うのが面倒だったので自動化してみました.
今回は,facebookが提供しているwatchmanを使います.
watchmanとは
ファイルの変更を検知するツールで,ファイルの変更をトリガーとして何らかのアクションを起こすことが出来ます.
watchmanのインストール
Homebrewで手軽にインストールできます
brew install watchman
watchmanの使い方
今回の使い方で必要なのは次の1つだけです (watchmanのドキュメント->watchman | A file watching service)
watchman -- trigger [監視対象ディレクトリへのパス] [トリガ名] [監視するファイルのパターン] -- [実行するコマンド]
このコマンドで
- [監視対象のディレクトリ]で変更が生じた場合,
- 該当ファイルが[監視パターン]にマッチすれば
- [コマンド]が実行
されます
(ここでの監視パターンはwatchman のSimple pattern syntaxのみが使用可能です https://facebook.github.io/watchman/docs/simple-query.html)
Texファイルを自動コンパイルする
まず,コンパイルを行うシェルスクリプトを書きます.(update.sh
とします)
platex foobar && dvipdfmx foobar
そして,watchmanでTexファイルを監視させるために以下のコマンドをtexファイルのあるディレクトリ内で実行します.
watchman -- trigger ./ texbuild '*.tex' -- ./update.sh
これで,Texファイルの変更時にコンパイルが自動で行われるようになりました!
監視をやめる
triggerを解除してあげましょう
watchman trigger-del ./ texbuild
その他
コンパイルが終わったら自動的にビューワで開きたい
platex foobar && dvipdfmx foobar && open foobar.pdf
としてあげれば,自動的に開いてくれるはずです!
上の方法だといちいちフォーカス移ってだるい
仰るとおりです. Mac標準のプレビュー.appでは,フォーカスを当てないと再描画されないため,他の方法を考える必要があります...
Macには変更を検知して,再描画を行ってくれるPDFビューワがあるようなので,それを使うのもありかもしれません!
参考
- TeXを監視して自動コンパイルする - Qiita
- ruby のguardを使ったやり方
アナライジング・マルウェアのサンプルはWin8じゃ動かない!!!
最近アナライジング・マルウェアという本を読み始めました.
アナライジング・マルウェア ―フリーツールを使った感染事案対処 (Art Of Reversing)
- 作者: 新井悠,岩村誠,川古谷裕平,青木一史,星澤裕二
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/12/20
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 315回
- この商品を含むブログ (22件) を見る
マルウェアは簡単に解析できないように
- Packing
- Polymorphism
- Metamorphism
等の対策が施されています.それらが具体的に
- どのようなもので,
- どのように解析を妨害するのか,
それらを知るために読み始めました.
しかし,1章から壁にぶつかりました...書いてある操作を行うとエラーを吐くのです...
環境
ホストOS: MacOSX 10.10 仮想化ソフト: Parallels ゲストOS: Windows8.1(64bit)
発生箇所
Immunity debuggerを用いてサンプルのmalware.exeを解析する箇所.(p.24から
そこで,malware.exeをImmunity debuggerへドラッグ&ドロップして開こうとするとエラーが生じる.
エラー内容
上のような
アプリケーションを正しく起動出来ませんでした(0xc000007b)。 [OK]をクリックしてアプリケーションを閉じてください。
というエラーが表示され,解析をうまく進めることが出来ない.
解決策
ゲストOSをWindows7に変えて実行しましょう.
解決までの経緯
Immunity Debuggerの問題じゃないか?
ゲストOSのスナップショットを撮ってあるから,とりあえずマルウェアを実行してみよう!!!
ということで,実行してみました(サンプルだとしても,マルウェア初心者の自分は戦々恐々です
上のエラーと同じ結果が得られました.ということは,Immunity debuggerの問題では無いはず
少し前の本なので,もしや32bit用にバイナリが作られているのでは?
たとえ64bit環境でも,32bitプログラムはWOW64という機能により動くはずですが,試しに32bitのWindows8をインストールして実行してみました. が,しかしエラーは変わらず.
その後紆余曲折あり,
そもそもWindows8じゃダメなんじゃないか.少し前の本だし
ということで,Windows7のゲストOSを用意し,同様の操作を行いました.そしたら無事解決.
これで読み進められそうです. 調べても解決策が見つからなかったので,同じような問題に直面した方の助けになれば.
Ubuntu14.04 でApache2 設定ファイルの場所(ポート番号変更)
スクレイピングして遊んでみるためのテスト環境として,PHP実行環境が欲しかった. MAMPでも良かったのですが,なんとなくVMにサーバ建ててみようと思ったのでトライ.
そこで,Ubuntu14.04にApache2を入れ,ポート番号を変更しようとしたところ,httpd.confが見つからなかったのでメモ.
設定ファイルの場所
/etc/apache2/ |-apache2.conf |-ports.conf (<- ポート変更に使うのはこれ! |-site-available/ |-000-default.conf (<-とこれ! |-default-ssl.conf |-sites-enabled/ |-conf-available/ |-conf-enabled/ |-mod-available/ |-mod-enabled/ |-envvars |-magic
多くのサイトはCentOSについて解説しているため,httpd.confに
Listen 8000
と記述すれば,ポート番号を8000に変更できると有りましたが,Debian系であるUbuntuはどうやらhttpd.confは無い模様.
/etc/apache2/
配下のファイル群がhttpd.confの代わりみたい.
ポート番号の変更(例として8000番に変更
ports.conf
のListen 80
を
Listen 8000
とし,
sites-available/000-default.conf
を
<VirtualHost *:80>
だったのを,
<VirtualHost *:8000>
に変更.
そして,sudo service apache2 restart
すればポート変更完了!
http://VMのIPアドレス:8000
でアクセスできるようになりました.
お世話になったサイト
【Ruby】rbenvでruby1.9.1-p430をインストールしようとしたらハマった
rbenvでrubyのバージョン1.9.1-p430をインストールしようとしたらハマったのでメモ。
環境
現象
rbenv install 1.9.1-p430
を実行したところ、下記のようなエラーログを吐いてインストール出来なかった。
configure: WARNING: unrecognized options: --with-readline-dir checking build system type... i386-apple-darwin14.0.0 checking host system type... i386-apple-darwin14.0.0 checking target system type... i386-apple-darwin14.0.0 checking whether the C compiler works... no configure: error: in `/var/folders/61/8kytz9bj4szbhmj5l7jt3mm40000gn/T/ruby-build.20141230202407.88569/ruby-1.9.1-p430': configure: error: C compiler cannot create executables See `config.log' for more details.
注目したのはerror: C compiler cannnot create executables
の箇所。
どうやらgccがおかしいらしい。きっとこれもclangのせいである。
解決策
homebrewでapple-gcc42をインストールし、
% brew install apple-gcc42
% CC=gcc-4.2 brew install 1.9.1-p430
と実行する
経緯
調べてみたところ、やはり同じようなエラーで困った人が。
http://qiita.com/laiso/items/fe627d77c92b51874931
gccのバージョンが原因のよう。とりあえずhomebrewで昔インストールしたgcc49(証明書周り?が面倒でインストールしただけ。)をアンインストール。
そしてとりあえずまた
rbenv install 1.9.1-p430
を実行してみると次のようなエラーが出力されました。
ERROR: This package must be compiled with GCC, but ruby-build couldn't find a suitable `gcc` executable on your system. Please install GCC and try again. DETAILS: Apple no longer includes the official GCC compiler with Xcode as of version 4.2. Instead, the `gcc` executable is a symlink to `llvm-gcc`, a modified version of GCC which outputs LLVM bytecode. For most programs the `llvm-gcc` compiler works fine. However, versions of Ruby older than 1.9.3-p125 are incompatible with `llvm-gcc`. To build older versions of Ruby you must have the official GCC compiler installed on your system. TO FIX THE PROBLEM: Install Homebrew's apple-gcc42 package with this command: brew tap homebrew/dupes ; brew install apple-gcc42 You will need to install the official GCC compiler to build older versions of Ruby even if you have installed Apple's Command Line Tools for Xcode package. The Command Line Tools for Xcode package only includes `llvm-gcc`. BUILD FAILED
1.9.3-p125より古いrubyをコンパイルするためにはapple-gcc42を使って欲しいとのこと。
そこで
% brew install apple-gcc42
を実行して、apple-gcc42をインストール。
これだけでは
% rbenv install 1.9.1-p430
としてもapple-gcc42を使ってくれない。(clangが使われてしまう)
そのため
% CC=gcc-4.2 brew install 1.9.1-p430
とgccのバージョンを指定して実行してあげることでインストールすることが出来ました!
【C言語】ctimeがsegmentation fault
C言語でクライアント・サーバー型のプログラムを作っていて、Macのローカルで開発した後にサーバプログラムをCentOSに移した時にctimeでハマったのでメモ。
経緯
- クライアント・サーバ型のプログラム
- Macのローカル環境で動かしたら問題なく動いた
- 問題はサーバ側のプログラムを、別のCentOSに移すと生じた
- ctimeの部分でsegmentation faultが発生した
問題
ctimeを使おうとするとsegmentation faultが生じる
原因
time.hをincludeしていなかった
問題となったプログラム
送受信日時を表示するために、以下のような形のプログラムを書いていました。
#include <stdio.h> #include <sys/time.h> int main(void) { struct timeval time; gettimeofday(&time, NULL); printf("%s", ctime((time_t *)&time)); }
これをMacでコンパイルするとsegmentation faultは発生しません。が、しかし、CentOSでコンパイルするとsegmentation faultが発生します。
このプログラムに
#include <time.h>
を加えてあげることでCentOSでも問題なく動くようになります。同じようなことで困っている方が居てお役に立てれば。
(includeし忘れはコンパイル時にエラーが出るとばかり思い込んでいたので気づきませんでした。。。(;´д`)トホホ…
思うところ
今回のMacOSでは実行できたのは、gccと打っていても裏ではclangが動いているからかな―。と想像してます。Mavericksからgccはclangのエイリアスとなったようなので。
きっとclangがよろしくやってくれていたのでしょう。
どうなんでしょ。
【Android】AndroidStudioでVolleyをgit submodule addして使う
EclipseからAndroid Studioへ移行し、リファクタついでにvolleyをgit submoduleで利用しようとし、こちらの方のブログを参考に作業を進めました。
Androidプロジェクトを新規作成してVolleyが使えるようになるまで | Androg
ひと通り終わり、Syncしたところvolley/tests/AndroidManifest.xml内で次の様なエラーが生じてしまいました。
Attribute instrumentation#android.test.InstrumentationTestRunner@targetPackage value=(com.android.volley) from AndroidManifest.xml:28:9 is also present at manifestMerger1551574815074955787.xml:12:22 value=(com.android.volley.tests) Suggestion: add 'tools:replace="android:targetPackage"' to <instrumentation> element at AndroidManifest.xml:27:5 to override
よくみたら、Suggestionというのが含まれていたので、 manifestに
xmlns:tools="http://schemas.android.com/tools"
を、instrumentationへ
tools:replace="android:targetPackage"
を追加し、Syncしてみると解決解決。
ただ、submoduleについてよく分かってはいないのですが、submodule内のファイルを弄ることに抵抗があります。 どうなんでしょうか。。。
【Rails】validateのエラーメッセージ日本語化でハマった
rails tutorialを終え、ようやく自分の作りたいものをつくろうと走りはじめました。
そこで今回はユーザ登録画面において、validateのエラーメッセージを日本語で出力したい! ってことで、しました。日本語化。
Railsの多言語化対応 i18nのやり方を整理してみた!【国際化/英語化】 - 酒と泪とRubyとRailsと
そこで、こちらのサイトを参考にさせていただいたのですが、どうもうまく動かない。
普段開発サーバにPowを使っているのですが、試しに
rails s
を実行してみたところ、rails serverでエラーメッセージが日本語化されました!
これにより、
powder restart
を実行してみたところ、Powでも日本語化してくれました。
困ったらします。リスタート。
このせいで結構な時間が取られたので、同じような駆け出しの人の助けになればと。
configのファイルを弄った時にはサーバ再起動もしなくちゃなんですね。 お恥ずかしい。