JPEGのバイナリフォーマットは案外シンプルで、けっこう簡単に分解することができます。 JPEGはKey-Valueデータの羅列です。 0xFFで始まる2バイトはマーカといい、一まとまりの値が格納されていることの印となっています。 例えば0xFF 0xDBの2バイトはDQTマ…
アプリのデータを新しいiPhoneに移行したい!というのはよくあるニーズだと思います。 単純にはiCloud Documentsを使ってアプリを作っていれば良いのですが、デバッグのしやすさなどの兼ね合いから自社サーバを使っているところが大半だと思います。 データ…
ASImageNodeは、Facebookのオープンソース非同期UIライブラリAsyncDisplayKitに含まれるUIImageView相当のコンポーネントです。 このコンポーネントを使用することで、かんたんに画像表示のパフォーマンスを改善できることをご紹介します。 UIImageView の問…
Background Fetch を使うと、アプリのライクサイクルイベントが少し変わってくるのでメモ書きをします。 通常のアプリ起動時のライフサイクルイベント - application:didFinishLaunchingWithOptions: - applicationDidBecomeActive: こののち、「アプリを閉…
複数の iOS 端末でのアカウント共有をしてもらうため、iCloud アカウントの ID を利用することを考えます。 様々な方法がありますが、CloudKit を使うのが一番簡単で考えることも少なくラクだと思います。 事前準備 iCloud Capability を ON にします。あわ…
リアクティブは値の変化に対して、対応した処理を動かせることができる。これは直感的にはとても合理的であり、キレイな対応となっている。 実際、リアクティブに書くと処理が重複しにくかったり、値の変化に対して起こる動作がわかりやすく整理される、とい…
Medium は 30x30pixel の画像を表示しておいてから、原寸画像を表示しているらしい。 そこで、30x30pixel というのがどの程度のクオリティ、サイズなのかを調査してみた。 iPhone 5S で撮った写真を題材にします。 原寸 2448 × 3264, 1.8MB 30x30 画像 30 × …
超音波通信を実装してみたくて、もっともカンタンに実装できる方法を調査してみました。 もっとも単純な方法で、ノイズがのってもいいような伝達手段を考えます。 変調・復調 波形(音波)に情報を載せることを変調、波形から情報を取り出すことを復調といい…
あまり多くのことをしたくない、あまり多くのことを覚えたくない、でもちゃんと動くソフトウェアが欲しい。 そんな人がなにを意識してコードを書くべきか、ということを挙げてみました。 変えないのが一番 人は一度に多くの物事を変化させられません / 変化…
仕事しながらスプラトゥーンで S+ になるための戦術とか語ります。 ちなみにゲームは好きですがそんなに得意ではありません。FPS は本格的にやったことがありませんし、スプラトゥーンの開発陣が影響を受けたであろうゲーム「ボーダーブレイク」の最高ランク…
Rails などのフレームワークの CSRF 対策の実装を使わず、自前で CSRF 対策を行ってみる。 そもそも CSRF とは? リクエストが「なぜ起こったか?」に関わらず、ブラウザが自動的に Cookie などのセッション情報を送信することを利用した攻撃方法。 例えば、…
kaiinui.hatenablog.com 先日の記事では、AMP のさわりについて書きましたが、今回は具体的に AMP がどのようなフォーマットとなっているかを追うため実際に AMP HTML を書いてみます。 まず、AMP は HTML を拡張したフォーマットになっています。また、AMP …
www.suzukikenichi.com Google と Twitter が共同で AMP というフォーマットを制定しました。このフォーマットは、Facebook の Instant Articles のように高速なページ表示を実現するためのものです。 近年、広告や重度の JavaScript, 多すぎる/大きすぎる画…
HOKO いいですね。Product Hunt でもいい感じだったらしいです。 HOKO: Mobile Deeplinking made easyhokolinks.com できることは デバイス毎の遷移先振り分け(iOS, Android, PC) アプリインストール済みかどうかで振り分け アプリで開く(URL Scheme) ア…
MagicalRecord の + MR_findAll などの同期メソッドは非常に便利なのですが、UI を非常にブロックしやすい性質があります。大量のオブジェクトが保存されうる場合に特に注意が必要です。 めやすとしては、1000 件以上のデータは同期メソッドでは顕著になりま…
iTunes Connect Analytics で以下のようなハマりどころがあったので共有します(*´ω`*) まず、iOS8 以降の端末での情報のみがカウントされます。iOS7 以下の情報を含まないので正確な数字ではありません。 App Store Views / App Units = インストール率 …
さいきん、デバッグ用に、ログと CoreData のダンプを送信出来る機能を実装しました。 デバッグ情報の送信機能を実装することで、クラッシュレポートでは検知出来ないようなロジックのバグやデータの不整合、その他様々な不具合のデバッグをサポートする事が…
App Engine でサービスを作っていると、ログは確かにいつでも見られて安心ですが、何かが起こった時にすぐに知れないのが辛いですね。 そんな時には Google Cloud Monitoring です。 下の図のようにアラートを設定し、メール, Slack, SMS, 電話など様々な手…
何に使うわけでもありませんがつくってみた GET https://socialcountapi.appspot.com/count?callback=jsonp&url=https://facebook.com/ jsonp({"twitter":31135,"facebook":234483"pocket":503041}); kaiinui/SocialCountAPIgithub.com ページを速く表示する…
ActivityLifecycleCallbacks は Activity のライフサイクルを監視して、処理を挟み込める機構です。 使い方は至って単純で、Application.ActivityLifecycleCallbacks を implement し、Application のインスタンスメソッド registerActivityLifecycleCallbac…
Internet.org は Facebook 社が主導する、途上国向けのインターネットプロバイダーです。 利用者は無料もしくは格安でインターネットを利用する事が出来ます。 途上国向けに低コストでインターネットを提供するため、Internet.org はアクセス出来るサイトを…
BigPipe: Pipelining web pages for high performance 非常に面白い内容だと思うので、メモついでに紹介します。 一言でいうと ページの枠組みと、付随するページフラグメント郡を一つのリクエストでまとめて要求・非同期受信する技術です。 具体的には、ト…
主にパフォーマンス関連でじぶんようのメモです HTTP/2 によって解決した問題は、「同時リクエスト制限」によるものが殆どです。 HTTP/1.1 では「一本のコネクションで同時に一つのリクエストしか出来ない」だったものが、HTTP/2 では「一本のコネクションで…
正しいものが良いものであるとは限らないし、利用ケースに沿うとは限りません。 正しいものは「もっともらしい」ので、無視する事が非常に気持ちが悪いです。 これは極めて宗教的な圧力です。 しかし、この気持ち悪さを我慢したほうがいいです。YAGNI を我慢…
登場当時は 「AWS でいいじゃん(笑)」と無視してしまっていたけれど、今見るとめちゃくちゃ気合いを入れてサービスを拡張していた。 AWS と比較して優れていると感じるのは、非常にモジュラー指向なところ。 AWS も SQS や SNS など「モジュール」といえる…
最近ちょっとライブラリ作るのに凝りだしてしまって、AppEngine/Java の commons ライブラリを書いている。 第一弾は Counter. kaiinui/appengine-commonsgithub.com Datastore 上でカウンターを単純に実装すると、遅いし Write オペレーションで高くついて…
前書いたので RegistrationIdSender (registrationId: String をサーバに送るメソッドだけ) を実装して渡すことでよしなにやる Helper です。 gist.github.com
表題通りの事を調査しました。せっかくなので貼っておきます。 gist.github.com
Spring 載せない方が良い DI が遅いのでスピンアップが死ぬほど遅くなる Spring MVC だけにして、Component Scan は使わず xml 直接 Bean を指定する たいてい Slim3 Controller だけで済むし、API は Google Cloud Endpoints を使った方が良い jsp でなく F…
Entity の変更を通知したいことが多々ある。たとえば、「メッセージを受信しました」は、recipient_id が自分の Message オブジェクトの追加を検知して、通知を行なっていると言える。 このハンドラーは例えば Rails であれば Model の after_create などで…