高価なロープを買った
MAMMUT 9.5 Alpine Dry Rope
これまで使っていたロープ(BEAL バイラス 10mm / 60m)と比べると倍の価格。
知人達の間で評判の良いマムートかエーデルリッドから選ぼうと思い探していたところ、9.5mm 前後 / 60m / ドライ加工ありだと選択肢があんまりない かつ 通販の在庫も少ない。山道具用品店に出かけてみて在庫があったのが Alpine Dry Rope だった。
公式サイトの商品説明にはアルパインクライミング用とか書いてあるけどアルパインクライミングはやらないし、自分のレベルではオーバースペックなのではと躊躇したが、思い切って購入。結論としては「最初からこれを買えばよかった!」という感じ。
良い点
- ロープ径が細くなったのでかさばらない
- 汚れがつきにくい!
1 は、パッキングが下手で荷物が大きくなりがちな自分にとってはかなりのメリット。
2 は、これまで使ってた表面加工なしのロープと比べると全然違う!細かい砂の多い乾燥した環境で使ったけれど、砂を寄せ付けない感じでロープはサラッとしたまま。
頻度高く外に行くならそれだけロープも早く痛むし、コストのことを考えたくなるけど、 週1日外に行くくらいなら短くても3年〜5年は持つんじゃないかと思う。
Android, iOSのジオフェンシング機能を調べた
メモ
AndroidもiOSも、同時に登録できるジオフェンス数は多くない(Android: 100件、iOS: 20件)。多数のジオフェンスを登録したい場合は工夫が必要。
案
- ユーザーの進路に合わせて遠ざかったポイントを削除、近づいたポイントを追加
- ジオフェンススポットをクラスタリングし、大きい範囲にしておく。大きい範囲に入ったらより詳細なジオフェンスを登録しなおす。
ジオフェンシングとは
特定の領域(ジオフェンス)を定め、領域の境界線を横切ったことを検出することで、領域への「進入」「退出」を検知し、何らかの処理を行うことができる。
ジオフェンスの定め方はいろいろある。
Android
Google Play services location APIs の機能として提供されている。
仕様
- 同時に設定できるアクティブなジオフェンスは、1アプリにつき100件まで
- デバイスをマルチユーザーで利用している場合は、1アプリにつきユーザーごとに100件まで
- ジオフェンス内滞留時間を指定することができる
- 指定の時間滞在していたら通知する、といった調整が可能
- ジオフェンスの有効期限を設定することができ、期限切れになると自動的に削除される
iOS
CoreLocationフレームワークに、地理的領域の観測機能とビーコンによる領域観測機能が用意されている。今回は、地理的領域の観測機能についてのみ調査した。
仕様
iOS11でnavigationItem.titleViewにセットしたViewの表示位置がずれる
guard let width = navigationController?.navigationBar.frame.size.width, let height = navigationController?.navigationBar.frame.size.height else { return } // NavigationBarのほぼ幅いっぱいに表示する(ただし少し余白はできる) let rect = CGRect(x: 0, y: 0, width: width, height: height) let titleView = MyTitleView(frame: rect) navigationItem.titleView = titleView
NavigationBarの中にViewをセットしていたところで、iOS11ではずれて表示された。
uinavigationcontroller - iOS 11 navigationItem.titleView Width Not Set - Stack Overflow
上記回答にあるように、
View側で intrinsicContentSize を以下のようにオーバーライドすることで、ずれないで表示できた。
override var intrinsicContentSize: CGSize { return UILayoutFittingExpandedSize }
Stringの末尾の改行コードを削除したい
String#replace()でやろうとしたけれど、改行コード3つ(\r, \n, \r\n)を書くのやだなーと思い調べた。 そうしたら、trim()で削除される文字に改行コードもふくまれることを知った。
trim()の説明では、「空白」とは文字コードが'\u0020'より小さい文字のことを指しているとのこと。 改行コードの文字コードは'\u0020'より小さい。
Unicode一覧 0000-0FFF - Wikipedia
trim()すると、改行コード以外の制御文字も削除されるけれど、今回は問題ない。
warning: Auto Layout Localization: Fixed leading and trailing constraints with a center constraint may cause clipping.
Xcode9.1で、storyboardでこんな警告がでた。
warning: Auto Layout Localization: Fixed leading and trailing constraints with a center constraint may cause clipping.
「センター揃えの制約と一緒に、固定のleading/trailingの制約をつけると見切れちゃうかもよ」ということ? adjustsFontSizeToFitWidth を 有効にしているけどだめなのだろうか。
ここの回答の通りに、ローカライズされていたStoryboardを一旦参照解除して再度追加したら、警告がでなくなった。
ios - Xcode 9 - Localization Issue Warning Storyboard - Stack Overflow
深追いはしない。
ローカライズはコードからやることにする。
Realm Objective-CをSwiftから使うときに、NSNumber?なプロパティの初期値をnilにできない
RLMObjectを継承したモデルクラスでNSNumber?のプロパティを用意し、「値:なし」を表現したいので、初期値はnilとしました。
(Objective-Cからも使いたいので、Int?にはできない)
public class MyData: RLMObject { @objc dynamic var myValue: NSNumber? = nil }
実行すると、以下のエラーで止まる
訳(適当):NSNumberは初期値なしでは保持できません。Swift-nativeな型を使うか、初期値を入れてください。
*** Terminating app due to uncaught exception 'RLMException', reason: 'Can't persist NSNumber without default value: use a Swift-native number type or provide a default value.'
- Impossible to create `NSNumber` property with `nil` default value in Swift · Issue #4026 · realm/realm-cocoa · GitHub
- Allow explicitly specifying `NSNumber` property types in Swift by JadenGeller · Pull Request #4027 · realm/realm-cocoa · GitHub
Realm Objective-Cでは、Swift側でNSNumberの初期値をnilにすることはできないみたいです。
また、今後変更もされない様子。
とりあえず NSNumber? -> String? にして対応。
public class MyData: RLMObject { @objc dynamic var myValue: String? }
そもそも、OptionalなNSNumberって、Objective-C側から見えないかもしれない(未確認)。
きっともっと良い解決策はあるはず。
フォーム作成ライブラリのEurekaで、セクションのヘッダーとフッターを表示しない
iOSでのフォーム作成ライブラリのEureka、とても便利に使っています。 github.com
普通に Section を追加すると上下にスペースができるのですが、以下のように設定すると、ヘッダーとフッターのスペースをなくせます。
form +++ Section() { // ヘッダー/フッターを表示しない $0.header = HeaderFooterView<UIView>(HeaderFooterProvider.class) $0.header?.height = { CGFloat.leastNormalMagnitude } $0.footer = HeaderFooterView<UIView>(HeaderFooterProvider.class) $0.footer?.height = { CGFloat.leastNormalMagnitude } }
調べたら、これはiOS標準の UITableView (Group style) でよく使うようです。
知りませんでした。
Grouped UITableView のセクションヘッダーおよびフッターの余白をなくす方法 - Qiita