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

そーす

福岡在住のプログラマ

「ReactNativeってどうなの?」というタイトルでLTしてきました

React nativeってどうなの? from Ryosuke Hara www.slideshare.net LTなんて初めてでした。 とりあえず、なんか友人からの質問やTwitterとか見てて疑問に思ってそうな事適当に並べて見ました。 なんというか、福岡でもReact/React Nativeをワイワイさせた…

(解決)ReactNative+FirebaseではネイティブSDKを使ったほうが良いかも

(追記)解決しました。 やっぱりJavascriptCoreが原因でした。 github.com developers-jp.googleblog.com ここで紹介されてたので、ネイティブSDK入れなくてもいけるのか〜 と思って色々試して見ました。 匿名ログインしてRealtimeDatabaseに書き込みは出来…

ReactNativeでiOS, Androidに最適化したUIを構成するには

最近は仕事でも個人でもReact Nativeでの開発がメインになっており、かなり知識が溜まってきました。 で、だいぶiOSとAndroidに最適化したUIの構成ができるようになってきたのでメモ程度に残します。 OSごとのUIの分け方 ReactNativeは標準で幾つかiOS, Andr…

Imageコンポーネントは画像をキャッシュする

ReactNativeの標準のImageコンポーネントはキャッシュ機構があります。 なので、以前に取得したURLの画像の場合はキャッシュが読まれます(期限は無さそう) 同じURLの画像が更新される仕様のAPIなどではこれは厄介です… ちなみにいくつかIssueが上がってま…

BackAndroidはremoveEventListenerではなくaddEventListenerの返り値のオブジェクトを使おう

facebook.github.io Andoroidの戻るボタンが押された時のイベントをハンドリングするAPIです。 なんか公式ドキュメント見るとaddEventListerでセットしたハンドラの破棄はremoveEventListerを使わないといけないっぽいですが、 ソースを見てみる addEventLis…

NetInfo.isConnectedはiOSでは常にfalseを返すという罠

issue上がってます github.com 再現方法 NetInfo.isConnectedを使うだけ。 Androidはちゃんとしたネットワークの接続状況を返してくれますが、iOSは常にfalse… 原因 github.com ワークアラウンド なんと公式ドキュメントのサンプルにまで書いてあります…直さ…

iOSのみ、ModalとAlertを同時に使うとModalが消えないバグがある

issue上がってます github.com 再現方法 例えば通信処理中にインジケータ(くるくるするやつ)を出して、通信終わったらインジケータ消してレスポンスに応じてダイアログでユーザに通知したいとかあるじゃないですか。 このインジケータの表示にModalを使っ…

DroidKaigiに出席した

3月9,10日に新宿で開催されたDroidKaigi2017に参加してきました。 スピーカーでは無いです。 スピーカーの皆様、スタッフの皆様、超お疲れ様でした。 あの規模のイベント回すのはとても大変だし準備も相当大変だっただろうとお察しします。 個人的にも大満足…

ReactNative製アプリをデバッグするときのTips

実機デバッグはVysorを使おう chrome.google.com 実機の画面をキャプチャしてPCに転送してくれます。 キャプチャ画面でクリックやスクロール、タイピングもできるので非常に便利です。 ReactNativeのRELOAD機能はR2回押しで実機だと出来ないのでコレを使うと…

ReactNativeのソースを読んで見る(Android編①)

*Android編①って書いてるけどAndroid編②があるとかiOS編があるとかは未定です ReactNativeの「Native」の部分がどう動いてるのか気になったのでソース見てみました。 細かい所まで見てないですし、間違った認識かもしれませんのであしからず。 エントリポイ…

ReactNative雑感

最近自社のアプリ(iOS,Swift/Android, Kotlin)をReactNative化しているので使ってみた雑感など。 導入のきっかけ 自社アプリのiOS(Swift)とAndroid(Kotlin)は私が一人で作って運用しています。 なんで一人かというと社内でアプリをかけるのは私しかいない…

Kotlin Android Extensionsで注意すること

とくにハマった訳ではないですがやらかしそうなミスだなぁと思ったので。 Kotlin Android ExtensinsとはViewの参照を自動で作ってくれるAndroidのためのPluginです。 kotlinlang.org findViewByIdしなくてもID名から自動で参照を作ってくれるので非常に便利…

KotlinからJavaのクラスを利用するときにAccessorが上手く生成されないことがある

Kotlin小ネタなんですが、KotlinからJavaのクラスを利用するときにjavaのSetter, GetterメソッドからKotlinのAccecorに自動で変換してくれる機能があります。 例えば、 Java側で class Text { ... public void setText(String text) {...} public String get…

DIY子供の絵本棚

設計 Sketchを使って作りました。 よくある形です。 本棚は3段にして、下はおもちゃ箱です。 扉が開閉します。重いので1歳のうちの子は開けることができないです。 近くのナフコに89mm * 19mm * 183mmの木材が200円で売ってたのでそれで作れる範囲にしました…

Redash外で閲覧画面を作る

RedashのDashboardは使いづらいです(個人的には なぜなら縦横幅が基本固定値で横に最大でも2個しか並べられない仕様だからです。(グラフに関しては縦幅を変更出来ます) Redashは作ったグラフなどを外部でも表示できる機能を提供しています。 やり方 外部…

RedashのデータソースにGoogleAnalyticsを追加する

*2017年1月15日現在ではRedashのGoogleAnalytics対応はαバージョンということになっているので、今後方法が変わるかもしれません。 Google Developer Consoleでプロジェクトを作成 console.developers.google.com サービスアカウントキーを登録する 左側のナ…

Redash概要

redash.io 概要 Redashはデータの分析や可視化を効率よく行えるBIツールです。 豊富なデータソースとクエリの登録 Redashは連携データソースとして登録できるソフトウェアやサービスが豊富です。 2017年1月12日現在でこれだけのデータソースに対応しています…

ミラースタンドを自作した

うちには長らくミラーがなくて、欲しいやつとかは結構高かったので作ることにした。 写真は完成品。 ニトリのミラー ナフコの木材 ウォールミラー(ソレイユ) | ニトリ公式通販 家具・インテリア・生活雑貨通販のニトリネット 金額 2500円位かな

パームレスト自作2

前回初めて自作して思いの外良かったので職場+家用で2個欲しくなり作りました 材料は前回と同じなのですが、今回は2つあるうちの1つを6mmの厚さの板に変更しました。 厚さがHHKBの土台の高さピッタリになりました!!!!!! あー、きもちぃぃーーーーー ち…

データが無い日をUnionで補完する

BIツールなどを使ってグラフとかを日付順に出したい時に 「今日の〇〇のデータは無いけど△△では今日のデータあるので〇〇のグラフも今日の表示が欲しい」 みたいなことがある場合の対処法です。 Unionでデータを追加する DBにデータを入れるわけには行かない…

不要なCOUNT関数を追加すると何故か高速化するSELECT

最近データ分析をやることが多くSQLばっかり書いてます。 といってもSQLとかDBに関する知識はMAX100とすると私は「2」くらいです。 なので、色々と躓きます。 昨日もちょっとわからないことがありました。 例えば、日毎の累計ユーザが欲しい場合のクエリは S…

HHKBのパームレストを100均アイテムで自作した話

HHKBめっちゃ使いやすいんだけど、私は指が短いので一番上の列のキーが結構遠い。 MBPのキーボードの時は特に感じなかったので、おそらくHHKB自体の高さがある分距離が長くなったんだろうと思い パームレストが欲しくなりました。 売ってるやつは4000円とか…

Google Dagger2の公式サンプルをKotlinで書き直してみた

これをAndroid Kotlinで書き直しました。 元のサンプル github.com Android Kotlin Ver GitHub - ryohlan/Dagger2KotlinSample: Dagger2 sample written by Kotlin 経緯 Daggerに関しては色々記事は読んだもののイマイチわからなくて、かと言って使わないと…

UIScrollViewは基本的にUIStackViewを内包していいのでは

iOS8を切れる状況なら、ですが。 class StackScrollView: UIScrollView { private(set) lazy var stack: UIStackView = { let stack = UIStackView() stack.axis = .vertical stack.alignment = .center return stack }() override init(frame: CGRect) { su…

カラムの情報をモデルに出力するGem「annotate」

最近個人アプリでサーバーサイドも作りたくなったので目下勉強中です。 Railsチュートリアルは一通りやってたのですが、アプリのAPIとなると結構わからない部分が多くて中々進みません。 テーブルのカラムの情報をschema.rb見ながらモデルクラスにバリデーシ…

Retrofitで503の時にメンテナンスモードを表示する

Kotlinは特に関係ないけど。 Retrofitって503ってデフォルトでリクエスト成功の処理に回されるんですかね? 私の環境だと503を成功として扱っていて困りました。 また、デフォルトで成功処理の場合はステータスコードが取得出来ないのでRetrofitでAPIのinter…

文章中の任意のテキストをクリック可能にする

UITextFieldを使う というかUITextFieldじゃないとクリックイベントが発火しないようです。 UILabelとかUITextViewはだめみたいです。 クリック可能な部分のテキストのスタイル定義 UITextFieldのlinkTextAttributesプロパティにスタイルをセットします。 た…

Statusbarのスタイルを変更する

LaunchScreenとここのViewControllerごとに変更しなければならないようです。 LaunchScreenの変更 Info.plistにStatus bar styleを追加します。 ViewControllerごとの変更 UIViewControllerのpreferredStatusBarStyleプロパティをオーバーライドしましょう o…

基本的にCustomViewを使うメリット(Adapter編)

class ItemAdapter(context: Context) : ArrayAdapter<Item>(context, 0, mutableListOf<Item>()) { var delegate: EventDelegate? = null override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { val view = (convertView as? ItemView)</item></item>…

基本的にCustomViewを使うメリット(全体設計編)

基本的にCustomViewってどういうことだよ、って話ですが… 例えば, Activityだと class MainActivity: AppCompatActivity(){ private view by lazy { MainView(this) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceSt…

Structural Subtyping(構造的部分型)についての現時点での理解

なんで気になったかというとたまたまフォローしてる人らがタイムラインで言い合いしててそこの出てきたから。 togetter.com 恥ずかしながらStructual Subtypingって初めて聞きました。 このブログの説明読みました。 yuroyoro.hatenablog.com 「Structural S…

個人アプリの動向を晒す。

個人でAndroidアプリを開発してます。 一部の女性がある期間のみ結構必要となるアプリなので、利用シーンがかなり限られてます。 今のところ約9000ダウンロードくらいで有効インストールが半分位です。 基本的にはFabricでアクティブユーザの動向をテキトー…

KotlinのInterfaceでSwiftのProtocolExtensionぽいことをやる

kotlinのInterfaceではJavaのinterfaceの機能に加え、フィールドの定義とデフォルト実装ができるようになっています。 この機能を使ってSwiftのProtocolExtensionっぽいことをやってみました。 実装内容ですが、例えば画像をギャラリーやカメラアプリをInten…

Kotlinのif式とwhen式

Kotlinのifとwhenは式です。 ifは式 どういうことかというと Javaだと… String message = ""; if( count > 0 ){ message = "hoge" } else { message = "fuga" } こうなるプログラムが Kotlinでは… val message = if( count > 0) "hoge" else "fuga" と書けま…

KotlinとSwiftのシンタックス比較の記事書いてたけどGithubにいいやつあったので

URLだけ貼ることにした。 Swift is like Kotlin これ、わかりやすいし見やすいので自分もGithubページで比較表作ろうかな

AtomでSwift開発環境を整える

Xcode好きですか?私は嫌いです。 重いし、よくクラッシュするし、補完うんこだし modocache.io これに期待してる。 現状 私はiOS以外の開発でSwiftを使う場合はAtomを使ってます。 Plugin language-swift atom.io シンタックスハイライトです。必須。 scrip…

SwiftからObjective-cのライブラリを使う

備忘録 HeaderFileを新規作成 Objective-c Bridging Headerに指定 Project -> buiild settings -> Swift compiler code generation のObjective-c Bridging Header に作ったHeaderFileを指定 Objective-cのライブラリのヘッダを記入 #ifndef ObjcBridgingHea…

Swiftのコーディング規約を作り始めました

だいぶSwiftのコーディングにも慣れてきて、良い書き方悪い書き方などもわかってき始めたので自分なりのコーディング規約を作り始めました。 コーディング規約って作ったことも無いし、自分の中がぼんやりとある規約にしたがって作ってたのでせっかくだしま…

Obj-cとSwift連携の注意

結論 obj-cからswiftのプログラムを呼ぶ際はSwift独自の機能に気をつけよう(適当 ハマりました。 UICollectionViewDelegateFlowLayoutのメソッドをよく使うものはProtocolExtensionで共通化しようと思いました。 protocol BaseCollectionViewDelegate: UICo…

キーボードを閉じるExtension

毎回めんどくさいので extension UIView { func hideKeyboard() -> Bool { if isFirstResponder() { resignFirstResponder() return true } else { return subviews.map{$0.hideKeyboard()}.filter{$0}.first ?? false } } } キーボードって1つしか出ない……

Tupleの使い方まとめ

名前無し let tpl1 = ("unko", 32) print("\(tpl1.0), \(tpl1.1)") // unko, 32 代入時でキー指定 let tpl2 = (name: "unko", size: 32) print("\(tpl2.name), \(tpl2.size)") // unko, 32 print("\(tpl2.0), \(tpl2.1)") // unko, 32 キーをつけたり付けな…

AVAuthorizationStatusがNotDeterminedでもAVCaptureDevice.requestAccessForMediaTypeでダイアログが出ない場合の対処

半日ハマった… info.plistのBundle display nameが空の場合に起こります。 なんのエラーも吐かないので全然わからなかった…

ProtocolExtensionで普通にweakは宣言できない

protocol Hoge {} extension Hoge { func post(){ Api.send(success: {[weak self] response in //処理ー }) } 上記のように書くと weak may only be applied to class and class-bound extension とコンパイルエラーが出ます。 protocolは構造体にも適用で…

HHKBでMacのディスプレイの輝度を調整するには

Fn + O 暗くなる Fn + P 明るくなる コレに載ってなかった Happy Hacking Keyboard | キー配列 | PFU

イマサラナガラHHKBProfessional2墨を買った

HHKBProfessional2墨買いました もともとはMacのデフォルトキーボード好き派だったのですが、iOSアプリを開発するに連れて自分のタイピング力の無さに気づきました。 と言うか、AndroidStudioのコード補完能力が高すぎて自分の打つことあんまり無くてそれに…

Enumの総数を返すextension

UICollectionViewで見た目が違うものに関してはSectionを使ってCellを切り替えたしするわけですが、私はそのSectionの種類をEnumで定義して使ってます。 その時にnumberOfSectionsInCollectionViewでセクションの総数を返す必要があるのですが、Enumの総数を…

表示されているViewControllerを取得する

saburesan.hatenablog.com この記事、ミスが有りました。表示されているViewControllerの取得の部分の実装が不十分でした。 こちらが新しい方法です。 UIViewControllerExtention.swift extension UIViewController { var currentTopViewController: UIViewC…

きゅうりが嫌い

www.zenmashiniki.com もうホント同意です。 きゅうり酷い。 キュウリ農家さんには申し訳ないと思いますが、 きゅうり大嫌いです。 あの緑を見ただけで吐き気がする。 断面を見ただけで寒気がする。 夏場の的屋をみて目眩がする。 ホント滅びてくれ。 ちなみ…

UICollectionViewで最下部での追加読み込みを実装する

アプリの仕様で * UICollectionViewの最下部で追加読み込みをする * 読み込みの際に最下部でインジケータを表示する * 追加がない場合はインジケータを消す という仕様、あるあるですよね。 方法はいくつかあるのですが、私が一番しっくりきた実装を載せます…

iOSエミュレータでcould not build Objective-C moduleと出た時の対処法

iOS

いきなりエミュレータで実行しようとした時に 「RxCocoa.h not found」 「could not build Objective-C module」 とでてビルド失敗しまくったので対処法。 エミュレータをアクティブにした状態でツールバーの Window->Projects->対象のプロジェクトDerived D…