skypeでp2p窓を作る自分用メモ
僕が使ってるチャットツールはずーっとskypeです。
slackとかhipchatではありません、skypeです。
skypeってアレです「I’m indifferent. Slack/Hipchat. I don’t give a shit as long as it’s not Skype.(私は無関心です。 たるみ/Hipchat。 それがSkypeでない限り、私は全然構いません。(Yahoo!翻訳ママ))」に27%も投票されてしまうアレです。
たるみよりはマシだろうと思ってたけどそうでもないみたいです。
まぁ個人的にはそこまで恨み辛みも無いんですが、bot周りに少々難がありまして。
以前まではチャットがp2pベースで動いていたのにいつの間にかクラウドベースになってるんですね。
僕はhubotが好きで使っているのですが、それによってskype用アダプタが使えなくなってしまいました。
README.mdの先頭にもでかでかとWARNINGって書いてますね。
p2p時代に作られた部屋なら正常に動くので、古い部屋を使いまわしたりしてたんですがそのうち限界が出てきます。
そんなある日、ふとgoogle先生に聞いてみるとなんと今でもp2p部屋が作れるそうです。
えっ。
その方法はどこの部屋でもいいからチャット欄に以下のコマンドを打つだけ。
/createmoderatedchat
空の部屋ができるのでそこにbotを呼びましょう。
そしたらあら不思議。
久しぶりじゃねぇかおめえ。
このあと滅茶苦茶(ry
jenkinsでデーモン的な
#!/bin/bash -ex # nohupで起動したプロセスを殺さないようにBUILD_ID=dontKillMeをつける # https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller BUILD_ID=dontKillMe nohup java -jar hogehoge.jar >/dev/null 2>&1 &
ドンキルミー!ドンキルミー!
phpスクリプトが最終行まで到達しているのにSEGVる件
全く意味がわからず糞ハマってしまった。
phpでバッチ処理を書いてたら突如「セグメンテーション違反です」と言われる。
にも関わらず処理は完了している???という謎の状況。
どうやらスクリプト自体は最終行まで到達しているようだが・・・。
Segmentation fault at end of PHP script | LogikDevelopment
色々探した結果上記のサイトに辿り着いた。
要はPHPがsoファイルを読み込むとき、mysql.soの前にcurl.soを読むと最後にSEGVる、と。
自分はRedshift使ってる時にハマったので試しにpgsql.soの後にcurl.soを読み込むようにしたところセグメンテーション違反は発生しなくなった。
単純にファイル名順に読み込んでるっぽいので下記で対応。
$ cd /etc/php.d $ cat {mysql,pgsql,curl}.ini > zz_mysql_pgsql_curl.ini $ mv curl.ini{,_bk} $ mv mysql.ini{,_bk} $ mv pgsql.ini{,_bk}
なんでこんなドバグな挙動が残っているんだろうかよくわからんけど、とりあえずよし。
Jersey(JAX-RS)でリストの要素が一つしかない場合にレスポンスのjson内の値が配列じゃなくなっちゃう問題の対応
タイトル長いですが、読んで字の如くです。
例えばこんなクラスがあるとします。
@XmlRootElement public class MyResponse { private List<String> list; public List<String>getList() { return list; } public void setList(List<String> list) { this.list = list; } }
このクラスをレスポンスとして返した時、複数の要素がある場合はこうなりますが。
{ "list": ["fukusu", "aruyo"] }
要素が一つしかないとこうなる。
{ "list": "hitotsudake" }
お前リストやったんちゃうんかい、と。
まぁ別にデータが破損してるわけじゃないんだけど、読み取る側で分岐を入れないといけないとか割とクソ感あります。
「これ直すのに結構奥深くまで手入れないといけないんだろうなぁ・・・」と思いながらグーグル先生に訊いてみると、stackoverflowにそのものズバリな回答がありました。
How can I customize serialization of a list of JAXB objects to JSON? - Stack Overflow
要するにweb.xmlの<servlet>タグに以下のパラメータを追加するだけでいいと。
「your.project.packages」の部分は各自の環境に合わせて書き換えてください。
<init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>your.project.packages;org.codehaus.jackson.jaxrs</param-value> </init-param>
たったこれだけで、ねんがんのレスポンスをてにいれることができました。
{ "list": ["hitotsudake"] }
コードの追加、修正が全くなくて得した気分です。
AWS SDK for Java(&KCL)でのDynamoDB、Kinesisのリージョン&プロキシ設定
コードだけ。
プロキシの設定は両者ともcom.amazonaws.ClientConfigurationを使う。
リージョン設定はDynamoDBの場合、com.amazonaws.regions.Regionを渡し、Kinesisでは名前の文字列を渡すだけでいい。
DynamoDB
// クレデンシャルプロバイダ AWSCredentialsProvider credentialsProvider = new InstanceProfileCredentialsProvider(); // クライアント(プロキシ)設定 ClientConfiguration clientConfig = new ClientConfiguration(); clientConfig.setProxyHost("unko.proxy.jp"); clientConfig.setProxyPort(8080); // クライアント生成 client = new AmazonDynamoDBClient(credentialsProvider, clientConfig); // リージョン設定 client.setRegion(Region.getRegion(Regions.fromName("us-west-2"))); // 実行 DynamoDB dynamo = new DynamoDB(client); Table table = dynamo.getTable("people");
Kinesis
String applicationName = "hogeApp"; String streamName = "hogeStream"; String workerId = InetAddress.getLocalHost().getCanonicalHostName() + ":" + UUID.randomUUID(); // クレデンシャルプロバイダ AWSCredentialsProvider credentialsProvider = new InstanceProfileCredentialsProvider(); // キネシスクライアント設定生成 KinesisClientLibConfiguration kinesisClientLibConfiguration = new KinesisClientLibConfiguration( applicationName, streamName, credentialsProvider, workerId); // リージョン設定 kinesisClientLibConfiguration.withRegionName("us-west-2"); // クライアント(プロキシ)設定 ClientConfiguration clientConfig = new ClientConfiguration(); clientConfig.setProxyHost("unko.proxy.jp"); clientConfig.setProxyPort(8080); kinesisClientLibConfiguration.withCommonClientConfig(clientConfig); // 実行 IRecordProcessorFactory recordProcessorFactory = new ProcessorFactory(); Worker worker = new Worker(recordProcessorFactory, kinesisClientLibConfiguration); worker.run();