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();
railsで使用するgitignoreメモ
まず前提としてgithubが公開しているものをベースにする。
gitignore/Rails.gitignore at master · github/gitignore · GitHub
secret_token.rbとsecrets.ymlについてはどうしようか。
まぁ案件の規模にもよるだろうけど、どちらにしろプライベートな場所に置くと思うのでとりあえずコメントアウトしておく。
# TODO Comment out these rules if you are OK with secrets being uploaded to the repo # config/initializers/secret_token.rb # config/secrets.yml
あとはエディタ、OSのゴミなど細かいのを追加。
doc/ *.swp *~ .project .DS_Store .idea .secret
で最終的にはできたのはこんな感じ。
*.rbc capybara-*.html .rspec /log /tmp /db/*.sqlite3 /public/system /coverage/ /spec/tmp **.orig rerun.txt pickle-email-*.html # TODO Comment out these rules if you are OK with secrets being uploaded to the repo # config/initializers/secret_token.rb # config/secrets.yml ## Environment normalisation: /.bundle /vendor/bundle # these should all be checked in to normalise the environment: # Gemfile.lock, .ruby-version, .ruby-gemset # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc # if using bower-rails ignore default bower_components path bower.json files /vendor/assets/bower_components *.bowerrc bower.json # Ignore other unneeded files. doc/ *.swp *~ .project .DS_Store .idea .secret
とりあえずこれでやってみる。
なんか不便を感じればその都度改良していこう。
modern.IEの設定方法メモ
よく忘れるのでメモ。
- https://www.modern.ie/ja-jp/virtualization-tools#downloads から実行する側のOSを選択後、目的のバージョンのsfx、rarをダウンロード
- sfxに実行権限を付与(chmod +x 〜)
- sfxを実行してファイルを結合
- カレントディレクトリにovaファイルが出来ているので実行する
- vmware、virtualboxなどが立ち上がるので日本語設定(タイムゾーン、言語パック)を行う
- 言語を変更した後は一旦ログオフしてからIEUser:Passw0rd!でログインしなおす
- hostsファイルにてlocalhostを10.0.2.2に向けてアクセス
以上。