タグ

ブックマーク / ninjinkun.hatenablog.com (16)

  • Cloud FirestoreのSecurity RulesをCircleCIで自動テストする - ninjinkun's diary

    この記事はFirebase Adventcalendar #2の13日目の記事です(もう12/17ですが、丁度書けそうなネタがあったので、空いてる日を見つけて埋めることにしました)。 Firabase Cloud Firestoreを使う場合、Security Rulesがアクセス制御全てのかなめと言えます。ここをミスるとデータが漏れて終わる、しかしその割に簡単に変更できてしまう。というわけで自動テストできると安心でしょう。 今回は先日公開した拙作のBlogFeedback(repo https://github.com/ninjinkun/blog-feedback-app/ )で用いているCircleCIによる自動テスト事例を紹介します。 なお、Security Rulesをテストするというアイデアは以下のエントリから頂きました。 エミュレーターの準備 Cloud Firestore

    Cloud FirestoreのSecurity RulesをCircleCIで自動テストする - ninjinkun's diary
    mfks17
    mfks17 2018/12/17
  • Web+DB総集編にiOSアプリ黎明期にお世話になったモジュールの記事を書いた - ninjinkun's diary

    先日発売されたWeb+DB Press総集編に記事を寄稿した。お題が「記憶に刻む、あのコード」ということだったので、自分がiOSアプリ開発を始めた際にお世話になったImageStoreというOSSの画像ダウンローダーについて書いている。自分の記事は「初見で動きがわかるコード」という地味なタイトルだが、このソフトウェアが今の自分のコーディングに与えている影響を考えてみた結果、これがしっくりきた。 内容の詳細は誌面に譲るが、この記事を執筆するためにImageStoreの作者のPsychs氏にコンタクトを取り、当時のスクリーンショットの掲載許諾をお願いした。氏にはスクリーンショットの使用を快諾していただき、その後も献などの関係で何通かメールのやりとりをした。 そのやりとりの中、Psychs氏からの返信メールにとても印象に残る言葉があったので、許可をいただいて引用する。 ぼくはコードを書くときに

    Web+DB総集編にiOSアプリ黎明期にお世話になったモジュールの記事を書いた - ninjinkun's diary
    mfks17
    mfks17 2018/05/07
  • ninjinkun's diary

    昨年同僚に誘われて数回サバイバルゲームに参加した。初めは朝早いし面倒だけどせっかく誘ってもらったしな…という感じで少し消極的に参加していたのだが、自分の銃を手に入れたあたりから急速にハマってしまい、気づけば沼*1に落ちていた。最近はサバゲがない週末が寂しいので、友人とのゲームがないときは一人でも定例会に参加するようになった。 ゲーム中の自分 自分がサバゲにハマった理由はランニング+ゲームだからだと思う。 元々走り回るのが好き →なのでランニングをやっている →しかし走ること自体は退屈 →サバゲは走り回りながらゲームがプレイできる! という流れである。 しかし最初からこう思っていたわけではない。初めはレンタル銃で参加するのだが、レンタル銃はM4という人気がありバランスが良い銃であることが多い。しかし重さは軽くても2.5kgくらいある。これが普段MacBookより重いものを持つことのない自分に

    ninjinkun's diary
    mfks17
    mfks17 2017/12/25
  • Build Variantsで開発版Androidアプリを分ける - ninjinkun's diary

    Androidアプリを開発していると、開発版とリリース版のアプリを同時に入れておきたいことがあると思います。通常Appliction ID (com.ninjinkun.njkappのようなやつ) が同一だとアプリが上書きされてしまうのですが、Build Variantsを使う事で別のApplication IDを割り振ることができます。 build.gradle productFlavors { staging { setApplicationId("com.ninjinkun.njkapp.staging") } production { } } Manifest Placeholder この辺りは去年からできたのですが、 ContentProvider や BroadcastReceiver を使っている場合、Android ManifestにApplication IDが文字列で埋

    Build Variantsで開発版Androidアプリを分ける - ninjinkun's diary
    mfks17
    mfks17 2017/12/25
  • 就職 - ninjinkun's diary

    6月中旬に株式会社一休に入社した。一休レストランという飲店予約サービスを運営するレストラン事業部で、iOSアプリの開発を行っている(やっていることはコーディングとプロダクトマネジメント的な仕事を半々ずつくらい)。 一休はIT系としては比較的歴史が長い会社だが、 アプリの伸びしろの大きさ 経営陣の面白さ 自分で使って楽しいサービス という点で、総合的に見て面白い経験ができそうと感じて入社を決めた。事前に二週間お試しで働いてみて、一緒に働くメンバーとも楽しく仕事ができそうなのがわかっていた点も大きかった。 元々飲みに行ったり外することは好きだったのだが、一休では自社のサービスを自分で使ってご飯をべに行き、その体験をまた製品にフィードバックして改善できる。自分の生活をサービスに反映できるところが面白い。 他にも、社長(金融工学、CS、コンサル系のバックグラウンド)が検索のおすすめ順やリコメ

    就職 - ninjinkun's diary
    mfks17
    mfks17 2017/09/14
  • builderscon 2017に行ってきた - ninjinkun's diary

    8/4-6に開催されたbuilderscon 2017に行ってきたので、印象に残ったセッションのメモを書いておく。 DeepLearningによるアイドル顔識別を支える技術 LINEエンジニアすぎゃーんさんの発表 元々は仕事と関係なく始めたけど、最近はAIプラットフォームClovaの部署に居るとのこと やはりデータセットがキモ まずこれだけのデータセットを作っているのがすごすぎる 1年半分類し続けているとのこと。これだけ続けられるのがすごい 最初からこれくらいやろうとは思っていなかった 最初は5人のアイドルグループを識別するところから始めた DCGANを使って非実在アイドルを生成するなど、データセットがあると分類以外にできることが広がる 正面顔にこだわったりしているのが精度の高さの秘訣なのではないかと思った OpenCVで顔の角度を出してデータを選定しているとのこと 複雑なJavaScr

    builderscon 2017に行ってきた - ninjinkun's diary
    mfks17
    mfks17 2017/08/14
  • 【翻訳】プロダクトマネジメントトライアングル - ninjinkun's diary

    original: The Product Management Triangle (by Dan Schmidt) (translated by ninjinkun, reviewed by Kosuke) はじめに プロダクトマネジメントは多くのソフトウェア企業が重要だと認識している役割だ。それにもかかわらず、「プロダクトマネジメント」を正確な言葉で定義することは驚くほど難しい。自らを「プロダクトマネージャー」と呼ぶ人々は、企業ごとに全く違うことをやっている。彼らは異なるタイプのプロダクト、異なるタイプのチーム、異なる組織構造の中で働いている。このプロダクトマネジメントの立場の違いは、とても不毛だ。外の立場から見ていると、同じ肩書きの仕事を参照する際に、誤解を引き起こしているように見える。全てのプロダクトマネジメントの仕事を統合して、共通の話題を抽出しようとすると、価値を説明しようとし

    【翻訳】プロダクトマネジメントトライアングル - ninjinkun's diary
  • iOS6から使えるアプリの状態復元UIStateRestoration - ninjinkun's diary

    iOSアプリを起動する際、ユーザが最後に開いた画面を表示できると利便性は高まります。しかしバックグラウンドに移ったアプリは、メモリが逼迫してくると強制的に終了させられて、最初からやり直しです。この終了状態から、あたかも直前まで動いていたかのように状態を復元するUIStateRestorationがiOS6から導入されました。 追加の実装は必要ですが、自前でやるよりは楽に状態の保存と復元が可能になります。 以下の内容は最新のiOSアプリケーションプログラミングガイド(既に日語訳出てる!)を参照しながら実装してみたものなので、詳細を知りたければそちらを参照するのがおすすめです。 はじめに この機能で保存、復元されるものは以下の通りです。 ViewControllerとViewController Container UINavigationViewControllerのスタックも復元 Vie

    iOS6から使えるアプリの状態復元UIStateRestoration - ninjinkun's diary
    mfks17
    mfks17 2016/07/21
  • iOSとAndroidでReduxを使うサンプルを作った - ninjinkun's diary

    Flux(とその実装としてのRedux)は中〜大規模のWebクライアントに向いている設計だと思っているので、具体性を出すためにサンプルとしてTwitterクライアントを作ってみた。iOS版はRIDEと同様にReSwiftを使い、Android版はReSwiftを写経したJava版Reduxライブラリを作って同梱している(用途があれば切り出してもいいかも)。 簡易な実装なので、UITableView、RecyclerViewとの同期問題、アニメーションの問題などは積み残しになっている。 普通にアプリケーションを作る場合に比べてFluxはコード量が増える傾向にあるが、一人で簡単なものを作っているだけではFluxのうまみもなく、実装は結構だるかった。開発に1ヶ月以上かかる場合や、チームが2人以上の場合などであればペイすると思う。

    iOSとAndroidでReduxを使うサンプルを作った - ninjinkun's diary
  • アプリ開発と状態遷移の管理 - ninjinkun's diary

    このエントリーは読者としてスマートフォンアプリ開発者とWebフロントエンドエンジニアを想定して書いています。 CROSS2016に出るので、最近の自分の考えを整理しておく。 最近ReduxSwift実装であるReSwiftを使って開発している。使った感想なども最後の部分に書いたけれど、このエントリーの題はアプリの状態管理の話。 アプリは大きなシングルトン iOS、Android共にアプリを実装しようと思うと大抵シングルトンが必要になる。各ViewController内をまたがってデータを共有したいというユースケースが多いからだ。例えば ユーザーのログイン情報を集約するUserManager コンテンツへのいいね情報を集めるLikesManager ブックマーク情報を集めるBookmarkManager などなど。もちろんアプリの内容によってこれらの顔ぶれは違ってくると思うけれど、大抵U

    アプリ開発と状態遷移の管理 - ninjinkun's diary
    mfks17
    mfks17 2016/04/11
    ある程度複雑化したクライアントサイド開発とは、状態遷移をいかに管理するかということに尽きるのではないか
  • 正しい製品を作る / 製品を正しく作る - ninjinkun's diary

    Inspired: 顧客の心を捉える製品の創り方を読み返していて、「第7章: プロダクトマネージャーを管理する」の一節 エンジニアリング部門というのは、基的に、正しい製品を作ることではなく、製品を正しく作ることに専念することになっているからだ。 というところが引っかかったので、思うところを書いてみる。ちなみに「第5章: プロダクトマネジメントとエンジニアリング(実装)」にも「正しい製品を作るのか、それとも、製品を正しく作るのか」というタイトルの章がある。 エンジニアは製品を正しく作る エンジニアは製品をリリースする責任があるので、不確定要素を減らして正しいスケジュールでリリースすることにモチベーションがある。このために、開発が進むほどにエンジニアは保守的になっていく。企画段階では和気藹々とブレストしてアイデアを出していても、最後のリリース前にはしぶい顔で実装を拒んだりする。 エンジニア

    正しい製品を作る / 製品を正しく作る - ninjinkun's diary
    mfks17
    mfks17 2015/10/06
  • 【翻訳】あなたが求めていたリアクティブプログラミング入門 - ninjinkun's diary

    original: The introduction to Reactive Programming you've been missing (by @andrestaltz) (translated by @ninjinkun, reviewed by @ma0e) あなたはリアクティブプログラミングと呼ばれる新しい方法が気になっている。 勉強するのは大変で、良い教材がないのでさらに難しい。私が勉強を始めたときは、まずチュートリアルを探した。見つけたのは一握りの実践的なガイドだけ、しかもそれらは表面をなぞっているだけで、リアクティブプログラミングのアーキテクチャ全体像を構築しようとしてはいなかった。ある関数を理解するのに、ライブラリのドキュメントは役に立たないことがある。 これを見て欲しい。 Rx.Observable.prototype.flatMapLatest(selector,

    【翻訳】あなたが求めていたリアクティブプログラミング入門 - ninjinkun's diary
    mfks17
    mfks17 2014/08/13
  • はてなを退職しました - ninjinkun's diary

    昨年末に株式会社はてな退職しました。2008年の京都移転直後のインターンに参加し、2009年に新卒入社したので、5年くらいはてなに関わっていたことになります。 このエントリでは、自分がはてなでやったことと、エンジニアとしてのロールモデルを持つことができたこと、コミュニティ活動ついて、そして今後について書きます。 はてなでやったこと 最近ではスマートフォン系の仕事が多かったのですが、入社当初は運用を担当していました。たくさんのサービスを担当しているチームで、ここで様々なコードに触れた経験が今振り返ってみるとすごく良かったと思います。とにかくコードをたくさん読みました。 同期入社には既に実績がある人が何人もいて焦る一方、自分はテストを書いているつもりがDBのデータを消していたり、社内のメールを止めたりとひどいミスを連発していて、今思い出しても冷や汗が出ます。 その後 はてなキーワードフィーチ

    はてなを退職しました - ninjinkun's diary
    mfks17
    mfks17 2014/01/06
  • iPhoneアプリのアクセス解析Google Analytics SDK for iOSについて - ninjinkun's diary

    Cocoa勉強会関西でGoogle Analytics SDK for iOSについて発表してきました。資料を公開します。 Google Analyticsの豊富な機能をiPhoneアプリ内の計測にも利用でき、かなり使いでがあります。目標指標の設定や計測はもちろん、イベントのトラッキングを積極的に活用することで、UI改善の指標にすることもできると思います。 Google Analytics & iPhoneView more presentations from Satoshi Asano. 資料の中で言及している便利マクロもここに貼っておきます。 #define GA_TRACK_PAGE(PAGE) { NSError *error; if (![[GANTracker sharedTracker] trackPageview:[NSString stringWithFormat:@"

    iPhoneアプリのアクセス解析Google Analytics SDK for iOSについて - ninjinkun's diary
    mfks17
    mfks17 2013/08/30
  • iPhoneアプリの通信エラー処理を考える - iOS Advent Calendar 2011 - ninjinkun's diary

    こんにちは。お仕事iPhoneアプリを開発しているid:ninjinkunです。このエントリはiOS Advent Calendar 2011 23日目の記事です。今回はあまり注目されることがなさそうなiPhoneアプリのエラー処理を取り上げてみようと思います。 エラー処理と言うとプログラマが粛々とやるものというイメージで、主に内部のエラーハンドリングのことが中心になりがちです。しかしエラー処理はそれをユーザーに通知するところまで考えて初めて完結します。この記事ではユーザー体験の面と内部処理と両方に言及してみようと思います。自分の今までのアプリでもあまり実践できていなかったので、自戒の念も込めて…。 エラーは様々な状況で発生しますが、ここでは主にHTTP通信のエラーを想定します。HTTP通信はiPhoneのようなモバイル端末では高い確率で失敗します。移動中、地下鉄、山の中の中など通信が不

    iPhoneアプリの通信エラー処理を考える - iOS Advent Calendar 2011 - ninjinkun's diary
  • iPhoneアプリの通信エラー処理についてCocoa勉強会関西で発表しました - ninjinkun's diary

    第42回Cocoa勉強会関西でiPhoneアプリの通信エラー処理について発表してきました。内容としては先日書いたブログエントリの焼き直し + ケーススタディのデモ + サンプルコードの実装という感じです。「やっぱりちゃんとやらなくちゃね…」などの感想が漏れる等、開発者にとっては耳が痛い内容になっております(僕も辛い)。 スライドは以下です。 サンプルコードは以下にあります。 https://github.com/ninjinkun/AlertResume

    iPhoneアプリの通信エラー処理についてCocoa勉強会関西で発表しました - ninjinkun's diary
  • 1