読者です 読者をやめる 読者になる 読者になる

もやもやエンジニア

IT系のネタで思ったことや技術系のネタを備忘録的に綴っていきます。フロント率高め。

百人一首暗記するアプリ作ってからの振り返り

rei19.hatenablog.com 上の記事から3ヶ月たったので、数字とかやったこととかの振り返りメモです。 3ヶ月たった時点の数字 項目 数値 取得元 インストール数 13,500(うちアクティブは5,500) play store 平均評価 4.382 play store レビュー/評価数 31/76 pla…

RecyclerViewにインクリメンタルサーチをくっつけたライブラリを作った

こんな感じでRecyclerViewにインクリメンタルサーチくっつけたやつを作りました。ライブラリを公開するのは初めてだったりします。 github.com 僕はAndroidアプリの開発を仕事として関わり始めたのが Lolipop が出たくらいのときでわりと後発です。特に凝っ…

TextViewでカスタムフォント使ったら InflateException が出るようになった

先日、下のアプリをリリースしました。で、ありがたいことに正月の暇つぶしに使ってくれてるのか、ちょこちょこインストールされてるのですが、CrashlyticsにInflateExceptionが結構な頻度で飛んでくるのに気付きました。 rei19.hatenablog.com 開発中の実機…

ちはやふるにはまったので百人一首を暗記するアプリ作った

今年もぼちぼち終わりですね。さて、毎年1個くらいプライベートで何かWebサービスなりアプリなりリリースすることを目標にしてるんですが、今年はちはやふるにはまったのがトピックとしてあって、百人一首に興味が湧いたので暗記用のアプリを作りました。 ※…

MacBook Pro 15インチが入るいい感じのリュック買った

買ったのはこれ! BLK Aer アー FIT PACK フィットパック バックパック リュックサック エーイーアール デイパック アメリカ USAメディア: ウェア&シューズこの商品を含むブログを見る MacBook Pro 15インチを普段愛用していて、それを持ち運べてかつ機能性…

君の名は。展に行ってきた。良さがあった。

君の名は。展に行ってきたので簡単なレポートなど。基本的に中は撮影NGなので雰囲気だけ。 場所 長野県は小海町というところにある高原美術館で開催されています。 小海は新海監督の出身地で、以前にも新海誠展が開催されたところです。僕はその時に初めて行…

転職してAndroidエンジニアになってから1年経ったので振り返る

去年に一休を退職してから今の会社に入ってちょうど1年経ったので軽く振り返ってみます。 仕事の内容 前はWebサービスの開発 / 運用まで一通りやってました。アプリも作りました。(Web系エンジニアの僕が初めてAndroidアプリをリリースした話 - もやもやエ…

適当な就職活動からSEになった話

今、一緒に働いているインターンの子が就活で頑張っていて、自分の時はどうやってたっけ?と、ふと思ったのでちょっと書いてみます。参考になるかは謎。 当時の大学生活 当時がどれくらいかというと2006年ですね。法学部生でしたが、ゼミにも入らず、サーク…

エンジニア立ち居振舞い : オンラインコミュニケーションに少しの気遣い

お題「エンジニア立ち居振舞い」 ということで普段自分が気をつけてることでも書いてみます。 今でこそコミュニケーションはSlackやQiita Teamなどのツールを使い、レビューはGitHubの上でPull Requestを送ってそこにコメントするという開発スタイルになって…

おんやど恵で開発合宿してきた日記。開発 + 温泉 is 最高

会社の同僚と開発合宿するぞ!という話になったので、おんやど恵さんの開発合宿プランを使って4人で行ってきました。今回は会社のイベントではなくて個人でアプリ作ったりサービス作ったりしてる人たちの集いで、各々自分の作りたいものを普段とは違うところ…

AndroidでEspresso + Spoonでキャプチャを撮りつつUIテストを走らせる

Android実機上でのテストにはEspressoというテスティングフレームワークを使いますが、Spoonというライブラリと組み合わせることでUIテスト実行時のキャプチャを残すことができます。導入してみたのでメモになります。 導入 Espressoは導入済の状態からSpoon…

最近の個人的なAndroidの設計とかテスト周りとかまとめ

最近、Androidの設計やらテストの書き方やらを試行錯誤していて、ちょっと情報が散らばってきたので個人的なまとめです。これが絶対的にイケてる!とかじゃなくて単にいろんな人のスライド読んだり、自分で試したりして今こんな感じになったというレベルのも…

京都の一軒家借りて開発合宿に行ってきた

2泊3日で京都の一軒家借りて一休.comのエンジニア勢と開発合宿してきました。この開発合宿は東京から離れて泊まりでもくもくして最終日にアニメの聖地巡礼をして帰るという趣のイベントです。今回はちはやふるがテーマということで開発した後にかるたの聖地…

もくもく会でFluxを学んだ with Babel + webpack

仲間内でGWもくもく会やるか!という話になったので、僕のテーマはFluxの考え方を学んで実装できるようにしようということで久しぶりにJS書きました。 やったこと 資料は Flux でぐぐると一番上に出てくる @azu_re さんのこちらのスライドを理解しながら写経…

SwiftでiOSアプリ開発の勉強始めた 1

今の会社の仕事はAndroidアプリ書いてるけどiOSアプリも書けるようになりたいということでSwiftの勉強を始めました。ブログにはやったこととか覚えたこととかを適当にメモを残していこうかなーと思います。夏くらいまでにはしょぼくてもいいのでアプリを1本…

DroidKaigi 2016に行ってきた 2日目

一日目 rei19.hatenablog.com ということで2日目も行ってきました。2日目も知見にあふれていて最高でしたね!各セッションの資料はこちらのブログであらかたまとめられていたので、今回は参加したセッションと感想を少しだけ残しておこうかなっと思います。 …

DroidKaigi 2016に行ってきた 1日目

Androidの開発者向けのお祭り DroidKaigi に参加してきたレポ。去年は行けなかったけど、今年は参加できた!写真撮ろうと思ったけどスマホの充電器を忘れてしまってご臨終な感じだったのでほとんどテキスト。。。 参加セッション 基調講演 : OSSの動向を捉え…

ストレングスファインダー(Now, Discover your strength)をやってみた

会社の開発チームでみんなでやってみようという話になったのでテストしてみました。 元ネタはこちら さあ、才能(じぶん)に目覚めよう―あなたの5つの強みを見出し、活かす作者: マーカスバッキンガム,ドナルド・O.クリフトン,田口俊樹出版社/メーカー: 日本経…

2015年を振り返る

仕事 5月くらいまでAndroid 10月までC# 11月転職 転職先でまたAndroid プライベート 特に変わったことは起きず。 たまに逆流性食道炎っぽい症状が出るのも直ってない。 Prime Videoを使い始めたことで我が家のPS4さんが本気出しはじめた。 今はシュタゲ専用…

Kotlinで書いたHBFav MaterialというAndroidアプリをリリースしました

タイトルのとおりですがKotlinで書いたAndroidアプリをリリースしました。ことりんかわいいよことりん。なお、Android版HBFavはすでに別の方がHBFav for Androidをリリースしていたので少し名前を変えてHBFav Materialという名前で出しています。Design Supp…

名言 大事なことはFateから教わった

このエントリーは 名言Advent Calendar 2015の16日目のエントリです。 www.adventar.org 名言 貴様は臣下を救うばかりで導く事をしなかった 王の欲の形を示す事もなく、道を見失った臣下を捨て置き、 ただ一人ですまし顔のまま小奇麗な理想とやらを思い焦が…

Androidのデザインパターンを考えてみたの続き。Kotlin対応版。

一番最新のやつはこっち rei19.hatenablog.com 前回はこちら rei19.hatenablog.com 前のプロジェクトで開発していたアプリをリリースしてからはAndroidから離れていたのですが、会社変えてまた触ることになったので思い出す意味でも再考します。 前回は出来…

自分用 MacBookセットアップメモ

転職して新たなMacBookが支給されたけど、セットアップするときにあれ何入れてたっけ?となったので自分用のメモ。 shell Login Shellをzshにしよう oh-my-zsh パッケージ管理 brewコマンドで必要なものを入れるようにしておくためにとりあえずぶっこむ。 ho…

飛騨の古民家を借りて開発合宿に行ってきた

目的 非日常な空間にこもって新しい技術に挑戦したり、作ろうと思っていたけど普段はなかなか時間が・・・というようなものを集中して作る もともと身内でプライベートでも何か作ったりするのが好きな人達が集まってわいわい開発するイベントだったり。今回…

一休を退職しました

ご報告 10月いっぱいで退職しますという話をし、本日が最終出社でした。社内外の方にはお世話になりました。ありがとうございました。気がつけば入社してから6年。。。6年前だとガラケサイトの開発からはじまり、最近だとネイティブアプリの開発とかいろいろ…

雑兵MeetUp #1で「REVEAL.jsとMilkcocoaで双方向LTする」というLTをしてきました

Twitterのタイムライン上でイベントをみかけて、あまり見ないコンセプトの勉強会で面白いなーと思ったので盛り上げる側で参加してきました。主催の @yodatomato さん、会場を貸してくれた 21cafeさんありがとうございました。ほかの参加者の方々もお疲れさま…

Android StudioとKotlinでAndroidアプリを作る

Kotlinとは InteliJ IDEAでおなじみ、JetBrains社が主導して開発している言語で、JVM上で動く静的型付けのオブジェクト指向プログラミング言語。Java 言語よりも簡潔に書けることを目指しているらしい。これを使ってAndroidアプリを書いてみます。 公式はこ…

Atomがだいたい使える感じになってきたので設定を整理してみる

Atom始めました 仕事だと.Net開発してるので大部分の時間はWindows/VisualStudioを使ってますが、家だとMacBook使うので普通にテキストエディタ使ってます。で、世の中的にはVimとEmacsで2分している中、Sublime Text 2でHTMLやらJavaScriptやらNode.jsやらG…

Elixir 入門 ~ META-PROGRAMMING IN ELIXIR ~ その2 - Macro

Macros Foreword Macroは通常のElixirのコードよりもわかりづらい。開発者は責任を持ってクリーンなコードを書くように心がける。 Elixirはすでに簡潔でわかりやすい仕組みを提供している。Macroを使うのは最後の手段であると理解すべきだろう。 Our first m…

Elixir 入門 ~ META-PROGRAMMING IN ELIXIR ~ その1 - Quote and unquote

Quoting Elixir のプログラムはtupleを伴った3つの要素に置き換えることができる。例えばsum(1, 2, 3)があった場合は以下のように書き換えることができる。 以下、自分の環境だとsumなんかおらん!と言われるのでremとか適当なビルトイン関数に置き換えて試…

Elixir 入門 ~ MIX AND OTP ~ その9 - Distributed tasks and configuration

最後にroutingの機能をKVアプリケーションに追加する。routing table はこのようになる。 [{?a..?m, :"foo@computer-name"}, {?n..?z, :"bar@computer-name"}] Our first distributed code VMに名前をつけて開始する。iex --sname fooでREPLを起動する。 す…

Elixir 入門 ~ MIX AND OTP ~ 実際にOTPを使ってプロセス管理をする

ElixirのGetting StartもMix/OTPが終わり、次に進むのですが、復習がてら前にElixirで書いたコードをMix and OTPの章でやったことを使って改善してみます。 元ネタはQiitaの自分の投稿 ElixirでSlackのbotを作ってHerokuで動かしてみる - Qiita いまいちQiit…

Elixir 入門 ~ MIX AND OTP ~ その8 - Docs, tests and pipelines

TCP経由で受け取ったメッセージをパースしてKVアプリケーションに送る処理を実装する。 Doctests doctestを使ってパースする関数を実装する。これはドキュメントからテストを作成することができ、ドキュメント内の正確なサンプルコードの提供を助けてくれる…

Elixir 入門 ~ MIX AND OTP ~ その7 - Task and gen-tcp

Erlangの:gen_tcp モジュールについて学ぶ。 Echo server まずはEcho Serverを作成することから始める。TCP Serverは以下のStepを実行する 利用可能なPortを開いてListenする そのPortでクライアントからの接続を待ち、受け入れる クライアントからの要求を…

Elixir 入門 ~ MIX AND OTP ~ その6 - Dependencies and umbrella projects

KVアプリケーションは完成したので次にそれを実装するTCPサーバーを作成する。その前にMixのDependencyについて理解する。 External dependencies 外部依存はビジネスドメインに縛られない。例えば今のKVアプリケーションのためにHTTP APIが必要であれば外部…

Elixir 入門 ~ MIX AND OTP ~ その5 - ETS

キャッシュ機構であるErlang Term Storageについて学ぶ。 ETS as a cache ETSは etsモジュールを経由してメモリ上のETSテーブルにデータを保存できる仕組み iex(1)> table = :ets.new(:buckets_registry, [:set, :protected]) 8211 iex(2)> :ets.insert(tabl…

Elixir 入門 ~ MIX AND OTP ~ その4 - Supervisor and Application

この章ではElixirのポリシーである“fail fast” と “let it crash”を実現しているsupervisorについて学ぶ。 Our first supervisor Supervisor behaviour を使ってsupervisorを実装したモジュール lib/kv/supervisor.ex を作成する。 defmodule KV.Supervisor …

Elixir 入門 ~ MIX AND OTP ~ その4 - GenEvent

複数のhandlerにイベントをpublishできるGenEventについて学ぶ。 Event managers iex -S mix でセッションを新しく初め、GenEvent API を触ってみる。 iex> {:ok, manager} = GenEvent.start_link {:ok, #PID<0.83.0>} iex> GenEvent.sync_notify(manager, :…

Elixir 入門 ~ MIX AND OTP ~ その3 - GenServer

Bucketのプロセスを監視するプロセスをGenServerを使って作成する GenServerはElixirとOTPでサーバー機能を実装するための抽象化された仕組みである。 Our first GenServer GenServerは Client API と Server Callback の2つの部品が実装される。 ClientとSe…

Elixir 入門 ~ MIX AND OTP ~ その2 - Agent

この章では KV.Bucket というモジュールを作成する。このモジュールはkey-value形式でデータを保存でき、複数のプロセスからの読み書きをできるように実装する。 The trouble with state Elixirはshared nothingでimmutableな言語である。もし状態を持つ何か…

Elixir 入門 ~ MIX AND OTP ~ その1 - Introduction to Mix

実際にMixとOTPを使ったアプリケーションを作成していく。 ↓のようにKey-Valueなデータを扱うアプリを作る CREATE shopping OK PUT shopping milk 1 OK PUT shopping eggs 3 OK GET shopping milk 1 OK DELETE shopping eggs OK アプリケーションを作るため…

Elixir 入門 その19 - Typespecs and behaviours

Types and specs ElixirはTypespecを使い以下の目的に用いる カスタムデータ型を定義するとき 関数のシグネチャ(仕様)を定義するとき Typespecは開発者のためだけのものではない。例えばErlangの静的解析ツールの dialyzer は typespecディレクティブを参…

Elixir 入門 その18 - try, catch and rescue

Elixirは errors throws exits の3つのErrorに関する仕組みを持つ ただ、Erlangでは基本的に「クラッシュさせるならさせておけ」というポリシーがあるのでどのような場合にErrorをハンドリングするかは考えるべき Errors ErrorあるいはExceptionはコードの中…

Elixir 入門 その17 - Sigils

~ で始まるテキストをSigilといい、文字列を扱うための仕組みを提供する。 delimiter sigil delimiter modifier の形式。r/hogehoge/i みたいな形。 Regular expressions ~rはよく使われるSigilで正規表現を作成するために使う 正規表現は Perl-compatible r…

Elixir 入門 その16 - Comprehensions

Elixirではあるリストをfilterしてmapにかけて別のリストを作るということをしたい場合、Enumモジュールを使うことが一般的だが、リスト内包表記を使って書くこともできる。forを使うとEnumやStreamを使って書くより簡単な記述にできることがある。 (確か)…

Elixir 入門 その15 - Protocols

Protocol ProtocolはElixirでポリモーフィズムを実現するための仕組み。プロトコルを使うことでどのようなデータでもやり取りできるようになる たとえば Elixirではnilとfalseだけがfalseとして扱われ、それ以外のすべてはtrueと評価されるが、アプリケーシ…

Elixir 入門 その14 - Structs

Mapの拡張してStructがある。 Structは初期値の設定とコンパイル時のチェックを行ってくれる Defining structs defstruct でStructを定義できる defmodule User do # フィールド名と初期値を定義する defstruct name: "John", age: 27 end # mapに似てるけど…

Elixir 入門 その13 - Module attributes

ElixirのModuleのattributeは次の3つの目的をかなえる ユーザーやVMによって使用されるためのモジュールの説明をつける 定数として動く コンパイルの間に使われるためテンポラリ領域として動く As annotations ElixirはErlangからモジュール属性の概念を取り…

Elixir 入門 その12 - alias, require and import

リソースの再利用を容易にするための仕組みとして alias, require ,importがある arias モジュールにaliasをつけることができる defmodule Math do # Math.Listはモジュール内であればListで呼ぶことができるようになる。 # 本来のListは ` Elixir.List ` で…

Elixir 入門 その11 - IO and the file system

The IO module # 標準出力 iex> IO.puts "hello world" hello world :ok # 標準入力 iex> IO.gets "yes or no? " yes or no? yes "yes\n" # :stderrをarg1に与えると出力先が標準エラーになる iex> IO.puts :stderr, "hello world" hello world :ok The File…