2014年6月24日火曜日
xubuntu のxfce4での emacs キーバインド設定
Xfceを用いるubuntu ディストロ xubuntuでのEmacsキーバインド化。
Settings Editor でxsetting -> KeyThemeName をEmacsにすればよい。
2014年6月14日土曜日
docbook -> pdf
すごく試行錯誤したのでまちがってるかもしれないが。
Mac,brew で。
> brew intall docbook docbook-xsl fopで、
fop -c fop.conf -xsl docbook.fo.xsl -xml INFILE -pdf OUTFILEfop.confは、
<?Xml version="1.0" encoding="UTF-8" ?>
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<filterlist>
<value>flate</value>
</filterlist>
<fonts>
<auto-detect />
</fonts>
</renderer>
</renderers>
</fop>
docbook.fo.xml は
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="file:////usr/local/Cellar/docbook-xsl/1.78.1/docbook-xsl/fo/docbook.xsl"/> <xsl:param name="l10n.gentext.default.language">ja</xsl:param> <xsl:param name="ulink.show" select="0"/> <xsl:param name="paper.type">A4</xsl:param> <xsl:param name="hyphenate">false</xsl:param> <xsl:param name="callout.unicode" select="1"></xsl:param> <xsl:param name="callout.graphics" select="0"></xsl:param> <xsl:param name="title.font.family">Meiryo</xsl:param> <xsl:param name="body.font.family">Meiryo</xsl:param> <xsl:param name="monospace.font.family">MS Gothic</xsl:param> </xsl:stylesheet>Macなのに、Meiryoにしているのは他のフォントではうまく行かなかったから。 Osaka, Hiraginoあたりは試したけどだめだった。IPAフォントならうまくいくらしい。 fop がメモリ不足で落ちたりするので、そのときは/usr/local/Cellar/fop/1.1/libexec/fop を編集して
java_exec_args="-Xmx1G -Djava.awt.headless=true"とかやるとOK。
2013年7月8日月曜日
cassandra cql3 jdbc
Cassandra のSQLライクなQLであるところのCQL3をjdbc越しに使う方法。
どうも昔は、Cassandraのディストリビューションに必要なDriverが入っていた
らしいのだけど、1.2.4現在、なぜか外されている?
よくわからないことに、org.apache.cassandra.cql.jdbc というそれっぽいパッケージ
は残っており、そこにはJDBC関連の型があるのだけどドライバがないのだ。
driver のダウンロードとインストール
https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/ にコードが有る。 自前でビルドしようとしたら、変なコードが混じっていてJavaCompiler が通らなかったり、 Java1.7 の JDBCで追加されたsetSchema/ getSchemaをサポートしていなかったりでコンパイルが 通らない。。 とりあえず1.2.5向けのjarを持ってきてCLASSPATHを通したら動いた。
public static void main(String[] args) throws Exception {
Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver");
Connection con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/testks");
String query = "INSERT INTO simpledata (id, content) VALUES (?, ?);";
PreparedStatement statement = con.prepareStatement(query);
statement.setString(1, "002");
statement.setString(2, "foobarfoobar");
statement.execute();
statement.close();
}
2013年6月28日金曜日
Apps Scriptで差し込みメイル
多数の相手に文面を少しだけ変えながらメイルを出すためのスクリプト。Google Docs上に文を置き、それの*NAME* というフィールドを置き換えながら送信する。
サーバ上で完結しているので手元にブラウザだけあれば使えるのが便利。
Docs上の文書のIDはURLに含まれているのを抽出しなければならないのが面倒。
Here documentがJavascriptで使えればDocsにおいたりする必要もなくて、もっと便利なのにね。
function myFunction() {
var docname = "xxxx";
var doc = DocumentApp.openById(docname);
var list = [
{name: "test1", email: "addr"},
{name: "test2", email: "addr"},
];
var mailBody = doc.getBody().getText();
for (var i = 0; i < list.length; i++) {
var name = list[i].name;
var addr = list[i].email;
var body = mailBody.replace(/\*NAME\*/g, name);
Logger.log(addr);
Logger.log(body);
MailApp.sendEmail({
to: addr,
subject: "サブジェクト",
body: body,
});
}
}
サーバ上で完結しているので手元にブラウザだけあれば使えるのが便利。
Docs上の文書のIDはURLに含まれているのを抽出しなければならないのが面倒。
Here documentがJavascriptで使えればDocsにおいたりする必要もなくて、もっと便利なのにね。
function myFunction() {
var docname = "xxxx";
var doc = DocumentApp.openById(docname);
var list = [
{name: "test1", email: "addr"},
{name: "test2", email: "addr"},
];
var mailBody = doc.getBody().getText();
for (var i = 0; i < list.length; i++) {
var name = list[i].name;
var addr = list[i].email;
var body = mailBody.replace(/\*NAME\*/g, name);
Logger.log(addr);
Logger.log(body);
MailApp.sendEmail({
to: addr,
subject: "サブジェクト",
body: body,
});
}
}
2013年5月10日金曜日
Cassandra の複数サーバを1ノードで動かす
普通この種のものは、ポートを設定ファイルで切り替えてやれば1ノードで複数サーバを動かすことができるのだけど、Cassandraではむずかしい。というのは、システムのポート番号が全てのサーバで同一であることが前提となっているらしいからだ。サーバのノード情報はゴシップでやり取りしているはずだから、一度接続出来ればポート番号を交換して共有できそうなものなのだが、その接続ができない。
yamlファイルのseedsを指定するフィールドが、IPアドレスのみを指定するようになっていて、ポート番号を指定できない。簡単に修正できれば修正してみようかと、ソースを追ってみたけど割に中の方までIpAddressだけしか持っていないので難しいと判断。
VMの中なので、ネットワークインターフェイスを増やすのは簡単なので、それで何とかしようかと思ったのだが、
ググったらもっと簡単な方法があった。
3年前の記事。
ローカルホストのloインターフェイスにaliasで別のIPアドレスをふり、それを使うという方法。
本物のネットワーク・インターフェイスを増やすと色々面倒だけどこれなら、ずっと楽だしVMじゃなくてもできる。
以下ubuntuでの方法。
-
sudo ifconfig lo:1 127.0.0.2 up
とかやって、lo:1というインターフェイスを作る。必要な数だけつくる。 - conf ディレクトリをサーバの数だけ複製する。
- cassandra.yamlの data_file_directories, commit_log_directory, saved_caches_directory が重複しないように 別々のディレクトリを掘って指定する。
- cassandra.yamlの listen_address と rpc_address を127.0.0.2などに変更する。
-
cassandra.yamlのseeds にアドレスを並べる
- seeds: "127.0.0.1,127.0.0.2"
- log4j-server.properties の /var/log/cassandra となっている部分を適宜重複しないように変更する。
- cassandra-env.sh のJMX_PORTは別の値を指定する。このポートは常に0.0.0.0に対してバインドされるらしいので 複数のサーバ間が同じポートで共有することができないらしい。
-
起動時には新しく作ったconfディレクトリを環境変数で指定して起動すれば良い。
CASSANDRA_CONF=conf1 bin/cassandra
2013年4月17日水曜日
ufw のlogの抑制
ubuntu 12.04のデフォルトの設定だと、ufwのログが/var/log/ufw.log 以外のmessages やら kern.logに出てしまって、
何がおこっているのかわからなくなってしまう。ということで、
/etc/rsyslog.d/20-ufw.conf
の最後の行
#& ~のコメントを外す。これがあるとfall through でデフォルトのログ分配の方にも流れてしまう らしい。これが流れないようにする、と。 あとは
sudo restart rsyslogでOK。
2013年4月13日土曜日
ubuntu preseed で rootのssh pub keyを仕込む
preseed はdebian/ubuntuのインストーラの返答を自動化する仕掛け。RedHatでいうところのkickstartみたいなものか。
この機能を使うとインストールの最後にスクリプトを実行することができる。
それをつかって、rootアカウントにsshの公開鍵を仕込むことができた。
インストールしたらすぐにsshでrootに入れるので、自動的に様々な設定ができて便利。
d-i preseed/late_command string \ in-target /bin/mkdir /root/.ssh ;\ in-target /bin/chmod 700 /root/.ssh ;\ in-target /bin/sh -c 'echo "ssh-rsa 略" > /root/.ssh/authorized_keys'
登録:
投稿 (Atom)