同僚や、知人が書かれていることもあり、Swift実践入門を読んでSwift言語への理解を深めてみました。 私個人のスキルでいうと、公式のThe Swift Programming Languageの2.1向けのものや、Functional Swiftとかの英語書籍を読んだり写経したりして簡単なSwiftプログラムを書いたり読んだりはできる感じです。iOSエンジニアとして会社でコードを書き続けているわけではないです。 内容は、うろ覚えだったり把握していなかったとところを補足することができ、言語自体の学びを整理することにとても役立つ書籍でした。iOS周辺の開発になると、こことは別にAPIへの理解も必要なのですが、私はそこはまだまだ足りていない… 全体的に、Swiftの様々な機能をどういう形で使うと良いのか、というところで参考になりました。以下、私が読んでいてメモしておきたかったところをメモしておきます。 2章 Swiftにおける範囲型、Optionalの話とか、復習になった。特に、 ? や ! のforce unwrapの話。実行時に評価されて無理やり値を取り出す ! と、 .none になる ? の話とか。 テストコードだと、例えばEarlGreyのようなやつだと実行時評価が必要なことが多く、 ! を使ったりしていた。けれど、Swiftの理想でいうとやっぱり ! は思想に反する(実行時にしか評価されないし、クラッシュするし)のでやぱりよくないのだなーと。 as? によるダウンキャストや as! as? によるアップキャストの話もちらほら。 3章 switch の制御で以下のようにかける形、Erlang/Elixirを学んでいたので自然な感じだった。こういうの書き始めると、Androidの世界にも時折欲しいと思う時がある… 繰り返しの for … in … {} は使ったこともあるのですが、 case 使う場合もinを支えたのですね。把握していなかった… switchの中、 break を置くことはよくやることですね。Javaとかやっていると。これ、breakしないと多くの場合は次々と case を実行していくのですが、swiftでは明示的に fallthrough を与えないといけないのですね。 あと、 breakやcontinueの遷移先を制御するために label をつけることができるとは知らなかった… 4章…More
Category Archives: development
[Mac][RedwoodHQ]Run on Mac
RedwoodHQ on Macを過去書いた時点ではMacで動かすことができていなかったのですが、最近見て見るとLinux/Mac上でも動作するようになっていました。 http://redwoodhq.com/redwood-download/ からダウンロード・展開して、 を実行、 http://172.0.0.1:3000 へブラウザからアクセスする、です。私はNode 4.7.2で実行していました。 ちなみに、このRedwoodHQは以下にフォークされてPRなどが取り込まれていました。 https://github.com/wolterskluwer-redwoodhq/RedwoodHQ もともと作ってた人は退いたのかな。More
[Java][Android]Error patternを検出する
Google製のFindBugsみたいなもののようです。 http://yone098.hatenablog.com/entry/2017/01/27/115753 https://github.com/google/error-prone これのパターンに何があるのかは以下に書かれていました。 http://errorprone.info/bugpatterns ざっと見てみると、DaggerなどのDIツールを使っている時のルールもありました。 独自ルールも追加できるみたいですね。 なので、何らかの自社製ライブラリへ適合させる時も使いやすいのかな。 Bazelを見ると、Bazelではすでにこれが組み込まれてて、デフォルトONなのですね。 https://github.com/bazelbuild/bazel/blob/c4e92b1ba06fba48121e4db8050a69b6d998e2e9/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BazelJavaBuilder.java#L108 もう少し話がそれると、Bazelでは以下がデフォルトで組み込まれているのですね。 https://github.com/bazelbuild/bazel/blob/c51d506eb83f1e5974e3317c53532f6e81ca50d8/third_party/BUILD#L310 以下、試しに適用してみたコミットになります。 https://github.com/KazuCocoa/WebSocketDemoForAndroid/commit/806fe6cebef4e4c4435817b989fddf74724c55de これに対してビルドすると、generated codeに対してwarningが確認されました。 内容は http://errorprone.info/bugpattern/MissingOverride なのですが、ここら辺を見ているとGoogleのJava style gideに合致しているかも見ているのですね。More
[app]fuse
ちょうど、 https://www.fusetools.com/ というツールを見つけたので触ってみた。 期待としては、やっぱり簡単にアプリの雛形を作ることができ、その雛形を参考にAndroid/iOSの各プラットフォームでプロダクトを開発することができる状態でしょうか。 少し触った感じ、previewがうまく動かなかった… マシンスペックも関係するのか。。。 まだBetaなので、もう少ししたらまた触ってみよう。 こういうのを試してみようとした。 https://www.fusetools.com/examples/circle-menuMore
[iOS]run tests on simulators vol2
[iOS]Run multi simulators with FBSimulatorControl にも書いている、iOSシミュレータを1つのマシンで複数動作させるやつ。最近ではLinkedInからOSSが公開されましたね。Blogはこちら。スターも多く、さすがLinkedInという感じ。 社内で FBSimulatorControl ベースの複数シミュレータで実行する環境を作ろうと思っていたけれど、もっと素晴らしいものが世に出てきててオォォォという感じ…(私、価値出せてない…) ここら辺、実装能力が顕著に現れて私は本当にまだまだと思う一方です。。。 以下、以前からある類似のものをピックアップ。 類似 https://github.com/linkedin/bluepill https://github.com/plu/pxctest このeBayに属している方、とても価値出している… https://github.com/plu/parallel_ios_tests 以前はxctoolを使って並列実行をサンプルとして実施可能にしていたのですが、今はpxctestをベースにしているらしいですね https://github.com/facebook/FBSimulatorControl 過去のBlogにも書いやつ。最近のこれ系のツールはこれを基本としていることが多い。 これを実施していると、正直なところ並列実行できないCloud実行環境はイマイチですね。 ローカル環境強し。。。More
Architecture for GUI Testing(mobile)
In 2014, I talked about GUI testing architecture. 20141018 selenium appium_cookpad from Kazuaki Matsuo Recently, someone asks me about the architecture.So, I post the blog about it. The following flow means the architecture. I think this architecture is common if anyone uses libraries such as Cucmber. Scenario layer Describe scenarios. This layer depends on “User…More
[React][iOS][Android]Try ReactNative + TypeScript
以下を参考に、ReactNative + TypeScriptでアプリを書いてみる。 ReactNativeでは testID としてiOSはaccessibilityIdentifier、AndroidはView#setTag/getTagが使われている。(ただ、2016/9ごろにAndroidに対してresource idを付与できるようになったとあったので、ReactNativeでもresource idベースでも今後は大丈夫かも) 以下を参考にした。環境構築周り。 https://medium.com/react-weekly/react-native-and-typescript-ad57b7413ead#.el446eisr https://github.com/mrpatiwi/ReactNativeTS https://medium.com/react-weekly/react-native-and-typescript-ad57b7413ead#.3cdqtxsr2 https://github.com/KazuCocoa/MyFirstReactNativeTS ただ、上記のどれもそのままでは動作しなかったので、本格的にはまだ触っていない。More
[Design][iOS][Android][windows]
メモ iOS https://developer.apple.com/ios/human-interface-guidelines/overview/design-principles/ Windows https://msdn.microsoft.com/en-us/windows/uwp/usability/index Testing https://msdn.microsoft.com/en-us/windows/uwp/accessibility/accessibility-testing Google https://material.io/guidelines/ Bidirectionality https://material.io/guidelines/usability/bidirectionality.html#bidirectionality-localizationMore
[Elixir]What’s new in Ecto2.0
Elixirの開発元であるPlatformatecからEcto2.0に関するフリーペーパーが正式に公開された。 Click to access whats-new-in-ecto-2-0-1.pdf いくつかEctoの特性(Ecto is not your ORMといったこととか)が書かれていて、解決したい問題とその対策として2.0や2.1で入ったことを書いている。 1つ、気になったところをメモとして残しておく。 Ecto2.1からdynamicを使って簡易に動的にwhere句を制御することができるようになった。コードは以下。 https://github.com/elixir-ecto/ecto/blob/v2.1.1/lib/ecto/query.ex#L381 例えば、以下の場合は dynamic で指定した箇所をその引数の状態によって動的に切り替えることができる。 (http://blog.plataformatec.com.br/wp-content/uploads/2016/12/whats-new-in-ecto-2-0-1.pdf より) This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode…More
[Elixir]timestamp in Ecto2.1
Ecto2.1が着々とrcとして改修されていますね。 この中で、Calendar typeの導入が書かれています。 defaultでは、従来は timestamp() などの Ecto.Scheme に設定する値には Ecto.DateTime が格納されていたのですが、ここがデフォルトで NaiveDateTime になるよう。これにより、このSchemeを使っているところは基本的に NativeDateTime でEctoから今まで Ecto.DateTime で受け取っていた時間を扱う必要がありますね。 Ecto.DateTime とかはEcto2.2で完全に削除されるそうな。 https://github.com/elixir-ecto/ecto/blob/e3077b99c24086d5b93580228b1daa6bb0ee0b5a/CHANGELOG.md#integration-with-elixir-13-calendar-types Schemeの設定としては以下になるそうですね。(ここの @timestamps_opts より。) ちなみに、これが導入PR https://github.com/elixir-ecto/ecto/commit/12d67912ddddb39ff79cb53d3098569cb427b521 ~N[] のsigilとか使われてて、個人的には Map だけで表現されるより読みやすくなった。More