Stripe API の IP アドレスとメーリングリスト
Stripe の webhook でできること
Stripe は webhook を使うことで、イベントの通知を受け取ることができる。
Stripe のような外部のサービスを使うと、アプリケーションの外からの操作によってアプリケーションの状態が変わってしまうことがある。webhook を使うことで、アプリケーション状態を変える外からの操作を知ることができる。
続きを読むStripeObject その2
前回の補足。
key があるかどうかで to_h するのはどうなの?と言われて keys.include? を同僚から提案いただいた。たしかに。
あいかわらず key は symbol になってるのでその点注意。
pry(main)> s = Stripe::StripeObject.construct_from({id: 1, 'foo' => 'bar'}) => #<Stripe::StripeObject:0x3ffd9cecf14c id=1> JSON: { "id": 1, "foo": "bar" } pry(main)> s.keys => [:id, :foo]
StripeObject について
最近お仕事で決済サービスの Stripe を使っているので色々メモする。
溜まったらまとめて Qiita に記事にするかな。
Ruby で Stripe の API を叩くと StripeObject が返ってくる。StripeObject のドキュメントは
http://www.rubydoc.info/github/stripe/stripe-ruby/Stripe/StripeObject ここにあって、内部に Set を持っていて key value を管理している様子。
この StripeObject は Hash っぽいけど Hash じゃないので稀にハマる。
以下の点が気になる
引っ越した。
色々あって仕事も変わったので。
trigraph
2014 TCO Algorithm Round 2B で トライグラフ (trigraph) に軽くハマった。以前にもハマったことがあるので、早めに気づいて致命傷にはならずにすんだけど、スコアをいくらか落としてしまったので対応策をまとめた。
trigraph とは
一部の記号が無いキーボードでも C のプログラムが書けるように、ISO 646 で規定されたより一般的な 3 文字を使って表記する方法。プリプロセッサによって変換される。
トライグラフ - Wikipedia
英語版 wikipedia には 2 文字表記の digraph についても説明がある
Digraphs and trigraphs - Wikipedia
このため、次のようなソースコードは大部分の人の意図と異なる出力となる
#include <iostream> using namespace std; int main() { std::cout << "??-" << std::endl; return 0; }
出力は
~
の一文字になってしまっている。 C++11での実行結果
外部ファイルを読み込んだ場合は変換されないので、プログラミングコンテスト系ではソースコードに直接テストケースを記述する topcoder ぐらいでしか発生しない問題かも。
コンパイルオプション
ここで、先ほどのコードのコンパイラを変えてみる。先ほどは C++11 でコンパイルしたが、今度は C++4.8.1 でコンパイル、実行してみる。
C++4.8.1での実行結果
今度は変換されずに出力されている。まだ調べきれていないけど、C++11 ではデフォルトで trigraph を変換するようだ。なので、今回 Topcoder でハマった人はだいたい g++ でコンパイルして、オプションに次の指定をしていたと思われる
g++ -std=c++11 ...
この場合は次のような警告が出ていたはずだ。以下の警告は (GCC) 4.9.0 で試した結果。
SwitchingGame.cpp:111:4: warning: trigraph ??- converted to ~ [-Wtrigraphs] "-??-?+"}
trigraph ??- が変換されたことがわかる。ソースコードが C++11 の機能を使っていないのであれば、 -std=c++11 を外すと、次のような警告になる。
SwitchingGame.cpp:111:4: warning: trigraph ??- ignored, use -trigraphs to enable [-Wtrigraphs] "-??-?+"}
trigraph は無視されたので、変換したいなら -trigraphs をつけてと言われる。こっちのほうが望ましい挙動なんだけど…
トライグラフを有効にするオプションがあるなら、無効にするオプションがあるのではないかとも思うけど、どうも見つからない(´・ω・`)。ちなみに、-Wno-trigraphs とすると警告を無効にできる。でも -no-trigraphs オプションは存在しない。何故。
解決策
2 番目がおすすめ?
1. トライグラフを書かないようにする
"??-" となっていたら、"\?\?-" と、? にバックスラッシュを追加すればトライグラフにならない。"??""-" と分割して書いてもよい。ソースコードを適当に置換すればよい。 https://ideone.com/yqQfbq
2. コンパイルオプションを -std=gnu++11 にする
twitter 見てたらわかった方法
手元の環境,-std=c++11 だとtrigraphは変換されて,-std=gnu++11 だとtrigraphは警告付きで無視されるらしい
— くりんぺっと (@climpet) 2014, 6月 7
コンパイルオプションを gnu++11 にすることで、gnu の独自拡張が適用されてトライグラフがデフォルトで無効になる。独自拡張に関しては、stackoverflow とか C++ Extensions - Using the GNU Compiler Collection (GCC) ここを参考に。
Code Jam Tasting 作った。あと、Qiita 使ってみた。
しばらくプロコンから離れていたけど、最近またぼちぼちやっている。楽しい。で、Google Code Jam の過去問を練習するときに、人のソースコードを見るのがたるいので、楽にする Extension を作った。
Code Jam Tasting - Chrome ウェブストア
作ったあとで気がついたけど、Google Code Jam の解法をページ内に表示する bookmarklet - miauの避難所 これとほとんど同じ。ただ、セキュリティの問題で今は Chrome で動かないらしいので、これの Chrome 版かも。さすがにブックマークレットではない分、少し機能は多い。
主な機能
- ダウンロードしないでコード表示
- クリップボードへのコピー
- Code Jam Statistics (2014) への対応
スクショは Chrome Store のページを見てください。私も当然使っていますが、コンテスト中に悪影響が出たことはないです。
説明とか
コードは GitHub - ororog/CodeJamTasting: Chrome extenstion for adding preview link to scoreboard of Google Code Jam. にあります。実装上のすこし面白い点は、JS ので zip のダウンロード、解凍と、chrome extension でのクリップボードのコントロールです。
JS での zip の扱いは、候補はいくつか有るのだけどどれも上手く動かせなくて苦労した… 最終的には jszip を使った。
クリップボードに関しては Qiita で初記事書いてみた Chrome Extension で content_scripts から clipboard を使う - Qiita
既知の問題
- zip 内に複数のファイルが入っていたり、ソース以外が入っていると正しく表示されない
対応がめんどい…
- レイアウトが少し崩れる