モバイルSuica(Apple Pay)でJR発着以外の定期券を買う方法

Apple WatchでApple PayのSuicaを利用しています。定期券を登録しているので、毎日必須の機能です。来月から勤務場所が変わるので定期券を変更する必要ができました。JRから他社への乗り換えが2回もあるのですが、接続駅は、定期があればそのまま乗り入れ可能です。今回の問題は定期券の区間がJR以外→JR→JR以外となるのです。モバイルSuicaの購入ができるのはJR駅を発着する必要があります。ですが、実はJRを利用さえすれば、定期を購入できる可能性があるのです。

モバイルSuicaとは

このページを見ている方はモバイルSuicaの基本は理解されていると思いますので省略します。知りたい方はモバイルSuicaを知りたいを参考にしてください。

モバイルSuicaで購入可能な定期

購入可能なパターンは以下のパターンです。他社にまたがる連絡定期券も条件次第で可能です。

モバイルSuicaで発売可能な定期券のパターン

定期券(定期券のパターン)

連絡定期券

連絡定期券とは、他社にまたがる区間を一枚にまとめた定期券です。

ただし、以下の条件があります。

発駅・着駅がともに連絡会社線の駅となる連絡定期券は、当社で発売することができません。発駅または着駅となる連絡会社へお問合せをお願い申し上げます。

JR東日本

モバイルSuicaで購入できない定期券

以下の通り、他社線のSuicaは購入できません。

他社の連絡定期券を購入する方法

今回購入したいのはJR以外→JR→JR以外です。そのため、上記の購入できないパターンの3つ目の「他社線1」+「JR線」+「他社線2」になります。注意深い人は気づいたはず。「△」マークが付いてます。購入できないセクションに書かれてますが、条件によって購入可能なのです。

購入方法

残念ながらアプリからは購入できません。

Apple Payの人は、下記リンクから購入を申請します。
アプリ操作で買えない区間・経路の「通勤定期券」を新規購入したい。
Apple pay以外の方は、下記のリンクから申請します。
アプリ操作で買えない区間・経路の「通勤定期券」を新規購入したい。

申請にはSuicaIDが必要になります。申請処理が完了し、購入可能な場合はメールで連絡が来ます。急いでいいる場合は注意してください。20時までに申請する必要があります。

20時までにご申請いただきますと、原則当日中に取扱いを承りメールにてご案内いたします。

ご申請いただいた後の手順

まとめ

JR発着でない連絡定期券をモバイルSuicaで購入する方法について記載しました。わかりずらいですが、情報は注意深く確認しましょう。不明点はJRに問い合わせしてみるのもいいかもしれません。

実はこれまでも連絡定期券でしたが、モバイルSuica+IC定期券の2枚運用でした。たまにIC定期券を忘れたり、逆の定期券をかざしてしまったりして、損をしてしまうことがありました。

とっても便利なApple Payです。これからももっと便利になることを願います。

タグ: ,

Androidのreleaseビルドで、okhttp周りでNoClassDefFoundErrorが起きる

久しぶりにAndroidコードをアップデートしてビルドしたところ、releaseビルドのみ、NoClassDefFoundエラーで落ちてしまいます。エラーログにはOkHttp3周りで発生しているようです。release(本番)ビルドのみということで、怪しいのは、if (BuildConfig.DEBUG) で分岐させた処理に問題があるか、Proguard/R8の難読化での変換です。

if (BuildConfig.DEBUG)の処理に差異はあったのですが、根本原因はやはりR8でした。ライブラリのバージョンを上げたことで問題であるのか、クラスを足したことで難読化の状態が変わったのかは不明です。

対応は2点です。

  • OSS系のproguard-rules.proの設定を入れる
  • andoroidxにリファクタしたため、その設定も念の為入れる
  • API通信時に利用するモデルクラスを追加する ←おそらくこれが原因

-keep class com.your.package.model.** { *; }

原因はOSS側だと思っていましたが、自分のクラスだったとは。。公式ドキュメントに書いてあったかな?RxJava2も併用しているので、そのへんが問題かもしれません。

iOS8でContacts.frameworkを参照してエラー
<a href="https://pixabay.com/users/mohamed_hassan/">mohamed_hassan</a> / Pixabay

iOS8でContacts.frameworkを参照してエラー

iOS8シミュレーターで、Contacts.frameworkをOptionalとしているにもかかわらず、エラーで落ちてしまいます。

単純な新規プロジェクトで、Contacts.frameworkを追加しただけで再現します。エミュレータのバグなのでしょうか?Swiftコードを動かす場合への下記対処は行っております。

ディレクトリの作成
/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 8.1.simruntime/Contents/Resources/RuntimeRoot/usr/lib/swift

https://stackoverflow.com/questions/55389080/xcode-10-2-failed-to-run-app-on-simulator-with-ios-10

解決策があれば教えてください。。

AutoLayoutがうまく動かない

いまさらながらiOSのAutoLayoutを勉強しているのですが、なかなか動きません。世の中のサンプルを利用しても、今ひとつ動かないことが。自分がやっているのは、コード上でAutoLayoutを設定するシーンです。

原因
view.translatesAutoresizingMaskIntoConstraints = false に設定をし忘れている。ViewController単位で一括変更できないものか。

Apple Watchの電池が急になくなる

2年ほどApple Watch Series 2を使用していますが、週末から急に電池がなくなるようになりました。いままではSuicaを利用する程度でしたが、夜になっても60%くらい残っているイメージでした。ここ数日、なんと急に半日で10%程度までなるなるようになり、今日は駅ナカでご飯を食べていたら、電池切れで改札を出れなくなりました。駅員さんにiPhoneの定期画面を見せて、一旦出していただくレベルまで悪化です。

原因はまだわかっていません。とりあえず、全く使わないトランシーバーをOFFにし、バックグラウンド更新も最小限にし、再起動を行い、Hey, Siriの呼びかけ起動もオフにしました。記憶領域が3GB中2GB以上使っていたため、ミュージックとポッドキャストを削除もしました。これでどうなることやら。。。

気になるのは、ワークアウトを予測する通知が意味もなくされることと、手首を曲げたときに、Siriが起動している事が多いことです。ただし、最近使い方を変えたわけではないので、電池が減る理由がわかりません。お行儀の悪いアプリがバックグラウンド通信しているというのが原因だと、それを削除して解決なのですが。

2年でまさか、Apple Watchのバッテリーがだめになったとすると、少し製品としては甘いですね。

原因わかる方がいらっしゃれば、教えてください。

POSTリクエストがなぜかGETリクエストになる

運営しているサーバがなぜかPOSTリクエストを送ると、GETリクエストになってしまいました。フロントサーバがLet’s encryptでSSLターミネーションしているだけのnginxリバースプロキシです。Dockerのhttps-portalを利用しています。ログがstdoutへ出力されてしまい、すぐに確認できませんでした。

リバプロされたサーバにはGETリクエストのみ来ていることは確認済みです。しかも別のクライアントからアクセスすると、なぜか普通にPOSTリクエストで処理されます。

原因

原因は、クライアントのURLがHTTPアドレスになっていました。https-portalがHTTP(80)リクエストを、HTTPS(463)にリダイレクトしたときに、POSTがGETになってしまってました。まさかのクライアント側の問題でした。

Androidエミューレータから開発PCにアクセスするアドレス

サーバプログラムを開発用PCで動かしていて、Androidエミューレータから、開発PCへアクセスする場合のアドレスの備忘です。

エミューレータネットワーク

https://developer.android.com/studio/run/emulator-networking.html

Androidエミューレータから見たPCのアドレスは、10.0.2.2です。proxyなどを利用してるなども、同IPアドレスでアクセス可能です。

Webサーバのファイルをブラウザに強制的にダウンロードさせたい場合

XML系のデータファイルなどをWEBサーバに配置して、リンクを張ったときに、ブラウザで表示するのではなく、ダウンロードさせたい場合、サーバにMIMEタイプを設定することができれば、対応可能です。

これが唯一の方法ではないかと思いませんが、今のところ困ってません。

レンタルサーバだと設定が異なるかもしれませんし、.htaccessの場合、AddTypeの先頭に追加する必要がありますが、MIMEタイプに「application/force-download」を指定すれば、ダウンロードになります。もちろん、ブラウザがどう解釈するかで挙動は変わるとは思いますが、一旦困ってないので、よしとします。

MacのMagick Mouseが途切れる/反応が鈍い

不満

2018年版のMac miniはもはやminiとは言えないほどの性能です。カスタマイズにより、6コアCore i7、メモリ16GBにしたので、サクサク動きます。ですが、根本的な部分で不満があります。それは、Magick Mouse(無印。2ではなく1)の反応が鈍いんです。若干途切れるといいますか、反応が鈍くて、マウスの動きが遅いです。そのため、マシンへのインプットが遅れるので、どうしても不快感が募ります。

買った当初は気にならなかったのに、なぜ接続が不安定になってしまったのか、、、。

我慢できなくなってきたので、本気で解決しました。

解決模索

どのようにして解決したのか、アプローチと共にまとめます。

  • 電池交換
    • 電池がなくなったと思い、満充電のエネループに交換 → 改善なし
  • Mac再起動
    • →毎日終了、起動しているため効果なし
  • MacとのBluetooth接続解除
    • 解除後、再接続 → 改善なし

解決案

Mac miniを移動する。

当初、マウス利用と同じくらいの高さで、1m強の距離にあったので、まさか接続不良はないだろうと思っていたのですが、50cm程の距離である机の上に移動したところ、一気に解決しました。

appleのサポートページには、下記の通りの記載があります。

・2.4 GHz 帯のワイヤレスネットワークが干渉源となる場合があります。干渉が疑われる場合は、コードレスホンの親機、電子レンジなどの 2.4 GHz の周波数帯を使用する電子機器を Mac から遠ざけてください。
・ ワイヤレスデバイスは Mac から 10 メートル (約 30 フィート) 以上離さないでください。
・ワイヤレスデバイスと Mac の間に金属の物体を置かないようにします。

https://support.apple.com/ja-jp/HT204621

mac miniの隣にスピーカーがあるのが悪いのか、家のWifiが2.4GHzと5GHzの自動切り替えのため、切り替わってしまったのか、なにか干渉する物体があるのか(机はそれなりにごちゃごちゃしているので、、、)、つまりは接続の問題でした。

問題に遭遇した場合は、1m程度と言えど、位置の変更を試してみてください。

Firebase Authenticationでクラッシュ(iOS)
<a href="https://pixabay.com/users/mohamed_hassan/">mohamed_hassan</a> / Pixabay

Firebase Authenticationでクラッシュ(iOS)

久しぶりにiOSのコードをイジっていました。最近は自身のサービスのユーザ管理をFirebase Authenticationに移行することを検討しています。理由は自身のサービスで認証を管理したくないからです。

Firebase AuthでGoogleのログイン検証をしていたのですが、普通にチュートリアル通りに進めても、クラッシュしてしまいました。クラッシュするタイミングはGoogleのログインページ(WebView)でログイン処理が完了後、アプリに戻ってくるところです。下記のようなエラーが出てしまいます。

自身が管理するところではないので、結構面倒な問題なのですが、2,3時間でやっと解決というか、なんとか問題は起こらなくなりました。実施したことを以下にまとめます。

  • クリーン、ビルド
    • 基礎の基礎。 →解決せず
  • 各種ライブラリのアップデート
    • しばらく放置していたので、ある程度最新にしました。FabricやClashlyticsはバージョン指定がチュートリアルの指示ですが、古くなっていたので他のFirebaseライブラリと不整合が発生していると考えて、最新へ。→解決せず
  • Swiftバージョンを4.2中心に変更して、コードも変換。
    • Pod系がビルドが通らなくなったので、Swift language versionは4.0と指定 →解決せず
  • ライブラリの削除
    • GTMSessionFetcherはNSURLSessionのラッパーらしいので、他の通信を利用するライブラリと干渉しているのではないかと仮説。「GTMSessionFetcher makes it easy for Cocoa applications to perform http operations. The fetcher is implemented as a wrapper on NSURLSession, so its behavior is asynchronous and uses operating-system settings on iOS and Mac OS X.」
      • AppsFlyerの削除 → 削除せず
      • NewRelicの削除 → 解決?

真の原因かわかりませんが、エラー検知のために昔から利用していたNewRelicを削除したところ、すんなり動くようになりました。他の要素も関係している可能性がありますが、今後、エラー検知はCrashlyticsで十分なため、一旦解決とします。参考になれば。

Android LiveDataの2-way バインディングが動かなくて2日潰した

久しぶりにAndroidの最新技術をキャッチアップ中です。

RxJavaやKotlin、Architecture components、AndroidXなどなど。まだまだ新しい物が増えているようです。。

まず、自分のアプリにRxJava(RxKotlin)を導入しています。また、なんちゃってMVVMだったのですが、最近はAndroidがViewModelを採用しているようなので、最新のデファクタに寄せてみようと思ってました。

早速詰まったのが、LiveDataの2wayバインディング。いままではDataBindingを利用していたのですが、ViewModelとは、LiveDataが相性がいい模様。さらにAndroid Studio 3.1(?)から、DataBindingとLiveDataが連携できるようになったとのこと。

早速、バインディングしてみたのですが1wayはうまくいくのですが、2wayが動かないです。どのようなUIかというと、単純なEditTextとButtonがあって、EditTextが空でなければ、Buttonがenabled=true。空の場合、enabled=falseとしたいのです。

RxJavaの不慣れとあわせて、ここで2日も潰すはめに。。。

レイアウトイメージは、シンプルにこんな感じ

ViewModelはこんな感じです。書き換えているので、コンパイルなどは気にしてません。

さて、なぜ動かないのか。。。

結論は公式ドキュメントをちゃんと読みなさいということです。

The @={} notation, which importantly includes the “=” sign, receives data changes to the property and listen to user updates at the same time.

developer.android.com

この辺の新しい技術は公式ドキュメントのバージョン管理もわけわからないことになっているのですが、ちゃんと読みましょう。

普通のバインディングは@{xxx}としますが、2wayにしたい場合は@={xxx}と=(イコール)が必要です。なんかもっとわかりやすい表記にしてくれたらいいのに、、、。

タグ: ,

IntelliJで「Selected directory is not a valid home for JDK」

Ubuntu16.04を利用しているのですが、IntelliJでJDKを指定時に、「Selected directory is not a valid home」と表示され、SDKを設定することができませんでした。海外でも解決しない旨の情報が多かったのですが、下記手順で解消できました。

必要なのは下記です。

おそらく必要なファイルやディレクトリが参照できないのだと思います。default-jdkがシンボリックリンクその他などの制御を行っているのだと推測します。

他にJAVA_HOMEの設定もしました。上記のみで不足の場合、こちらも設定してみてください。

【無料化】ANA Wi-Fi Serviceを試してみた

ANA国内線のwifi(ANA Wi-Fi Service)が2018/4/1から、無料化されました。試してみたので、接続方法や速度など、記事にしてみます。

JALは以前から無料だったようなので、ANAが追いついた形になります。

事前準備

使い方はそこまで難しくありません。事前にiphoneのANAアプリをダウンロードしておきます。アプリがなくともインターネット接続は可能ですが、手間だったり、機内コンテンツが利用できないので、落としておくことをお勧めします。飛行機のドアが閉まるまでにダウンロードしておく必要があります。離陸後でも、理屈上はダウンロードできますが、のちに述べる速度を考えると、難しいと思います。

接続方法

iPhone

接続方法はiphoneからの場合、

  • wifiをON
  • anaアプリを起動
  • インターネットサービスを選択
  • ブラウザが起動しますので、メールアドレスを入力して、規約に同意する

以上です。

Mac

macの場合、anaアプリがありません。

  • wifi起動
  • ブラウザ起動
  • 場合によって、anaのwifi接続ページが起動
  • 起動しない場合、機内パンフレットに記載のurl(https://www.ana-inflight-wifi.com/ja_JP/)を指定
  • メールアドレスを入力して、規約に同意(キャプチャ撮り忘れた、、)

以上です。そこまで難しくありません。urlは、機内の冊子に記載されていると思いますので、覚えておく必要はありません。また、httpのアドレスであれば、初回アクセス時に、リダイレクトされます。どうやらhttpsのページでは、失敗する確率が高いです。

ネットワーク速度

Googleから直接ネットワーク速度を検証するツールが利用できたので、こちらで速度を測ってみました。

速度は下りが3.39Mbps、上りが0.13Mbpsでした。

飛行場所や、天候の状況によるところが大きいと思いますが、ネットワーク速度を測ってみました。あくまで目安です。共用の細い回線ですので、利用人数にも大きく左右されると思います。利用する事前にこんなもんなんだなと、思っていただければと思います。

まとめ

思っていたよりは速度は出ていましたが、基本はメール確認や、ちょっとした調べ物にしたほうがいいと思います。エンジニアの方は、障害対応できてしまう環境が、無料で使えることになりますが、快適に使うのは難しいかもしれません。

画像を事前に圧縮するプロキシなどに接続すると、快適性が上がるかもしれません。ana側でこういったプロキシを導入しているのか、そこまでネットサーフィンしたわけではないので、確認できませんでした。次回確認しようと思います。

WordPressで関連記事がなぜか表示される
<a href="https://pixabay.com/users/ndemello/">ndemello</a> / Pixabay

WordPressで関連記事がなぜか表示される

ndemello / Pixabay

 

wordpressでLION BLOGテーマを利用しています。(本ブログではなく、自転車ブログの方)

LION BLOGテーマは、SEOに強く、関連記事を表示する機能もあります。広告の利便性も高く、記事一覧の合間や、関連記事に広告を挟むことが可能です。

しかし、なぜか他の機能が関連記事をすでに表示しているようでした。バッティングするので、LION BLOGテーマの関連を非表示にしていた次第です。

WordPressの最新版のデフォルト機能かと思ったのですが、どうやらそんな機能はない様子。

結論:JetPackプラグインの拡張機能。

JetPackの「設定」>「トラフィック」> 「」をOFFにすれば、表示が止まります。

WordPressの画像アップロードがhttpエラーで失敗
<a href="https://pixabay.com/users/mohamed_hassan/">mohamed_hassan</a> / Pixabay

WordPressの画像アップロードがhttpエラーで失敗

本ブログのwordpressをEC2の自前運用から、ネットオウルのレンタルサーバへ移行しました。もともとEC2を利用していたのは、サーバ運用の経験をしたかったからです。

また自転車ブログもBloggerからネットオウルへ同じく移行しました。bloggerが独自ドメインでHTTPS対応をなかなかしない点と、カスタイズしたくなったときに、wordpressのほうが楽だからです。

さて、今回、ブログ移行は滞りなくいったものの、画像アップロードが失敗しました。表示されたエラーは、httpエラーでした。その原因と対応についてまとめます。

原因

最初に疑ったのは、ファイル最大サイズです。

WordPress の「HTTPエラー。」でメディアアップロードができない、を調査まだプログラマーですが何か?

ネットオウルの管理画面から、php.iniの値を見たのですが、「upload_max_filesize」は30Mとなっています。また、アップロードしようとしていた画像は14M程のため、問題はなさそうです。

原因が多岐に渡るケースがあるとのことで、まずはログを見ました。ネットオウルは自前サーバではないですが、管理画面からログを参照することができます。

ログを確認すると、原因は一発でした。

処理時間が30秒のMAX値を超えたようです。

対策

原因はわかったので、対応は簡単です。

ネットオウルの管理画面からphp.iniのmax_execution_timeを30から60へ変更しました。変更後、問題なく大きな画像もアップロードできました。

Dockerコマンドをsudoなしで実行する

最近、Dockerにはまってます。SakuraのVPSからAWSへ移行したのですが、結構価格が高い。。。わかっていたのですが、AWSのLightSailへ移行して少しでも安くしようとしたのですが、いろいろな環境を渡り歩くと、都度、環境構築が面倒なため、仮想化を検討。

リソース使えない前提では、Dockerのほうがいいだろうと思い、Dockerに挑戦中です。そんななかあるあるのハマり方をしました。

Dockerはデフォルトではsudoがないとパーミッションエラーとなります。

ネットで調べたのですが、解決できず、もうひと手間必要でした。

dockerという名のグループを作ってユーザをそこに所属させればOKです。Dockerコマンドをsudoなしで実行する方法

それは、ログアウトすること。(よく見ると引用元にも書いてありました、、)

ログアウトしないと、グループ変更が適用されません。

Djangoをデバッグモード利用時に、ローカルホスト以外からのアクセスを許可する方法(PyCharm利用)

Djangoはデフォルトでは、デバッグモード時は、localhostからのアクセスしか受け付けません。Dockerなどを利用していると、直接アクセスできないことがあります。

解決方法は、起動時パラメータに0.0.0.0:8000のように、ホスト名を指定することです。0.0.0.0は任意のアドレスすべてを受け入れるようになります。適切なIPを指定することで、必要最低限にすることも可能です。

PyCharmを利用しているため、Pycharmでの設定方法をメモ書き。

Django起動をするビルド設定でEdit Configurationsを選択し、下記の通りHost, Portを指定するだけです。

djangoで任意のIP許可

 

Apple WatchのApplePayが利用できない自販機の対応方法

AppleWatchのApplePayを利用しています。おもにSuicaで通勤し、コンビニ等でもApplePayで決済をしています。財布を出さなくて良いため、とっても便利です。

いままではAndroidのおサイフケータイを利用するために、iPhoneとの二台持ちをしていましたが、スマホの進化も緩やかになってきたため、二台持ちをやめました。なによりも2台持つと邪魔です。。AppleWatchは腕に着けているため、いつでも、スッと決済できます。

さて、そんな便利なAppleWatchのApplePayですが、おサイフケータイには少し至らない点があります。まずは対応している決済手段が少ないです。Suica,  iD,  QuickPayでしょうか。セブン好きの私はnanacoも欲しいです。

さらに、一番問題なのが、たまに利用できない自販機や決済端末があります。使えないのは非常に困ります。職場の飲料自販機がまさにそれです。利用できない自販機の特徴は、iD、QuickPayなど複数の電子決済に対応しているものです。Suicaのみのシンプルなものは、普通に利用できます。

もちろんエクスプレスカード設定されているSuica以外は、利用前にカチカチッと横のボタンを押しています。自販機は発光し、認識したように見えます。そして、AppleWatchには「完了」と表示されますが、飲み物はでてきません。「あれ???」まさか決済だけされた?後日確認しましたが、決済はされていないようです。ですが、直近の自販機が使えないのは、生産性がかなり低いです。いまさら現金払いなどしたくありません。

ですが、後日、対応方法を偶然見つけました。それを説明します。(※自己責任でお願いします)

  1. AppleWatchの横ボタンをカチカチッと押して、決済手段カードを選択
  2. 自販機の読取機にかざす(自販機が選択式でも、選択は不要)
  3. 自販機が一度光る。AppleWatchには「完了」と表示される。
  4. 再度、カチカチッとAppleWatchの横ボタンを押す。※ここがポイント
  5. すると、決済が完了する。

念のため、後日、請求を確認しましたが、一度しか決済されていません。(くれぐれも自己責任で)

おそらく、決済時に、一度目はカードの確認。二度目に決済。が行われているのだと思います。これで大半の自販機はクリアです。

過去に、タクシーや駅ナカの端末でもうまくいかないことがあったので、この方法で解決できるかもしれません。失敗すると、相手がいるだけに恥ずかしいのですが、、、。

Android Google MapsでStack Over Flow Error

またまた久しぶりにAndroidコードを再ビルドしていて、MapViewがStackOverFlowでエラーとなってしまいます。
エミュレータのみで実機では起こらないのかもしれません。(でも、持っている端末が古いものしかなく、確認できない、、)
下記で、一旦メモリ量を節約できます。またまた暫定。

 

Android-OrmaでWriting things must run in backgroundでエラーになる

以前は問題なかった気がするのですが、最近、コードを修正していて、「Writing things must run in background」でOrmaのインサートが全くうまくいきません。

しばらく放置していたのですが、たしかに、Firebase Crash Reportで上記エラーがメールで届いていたのですが、無視してました。。

公式ドキュメントにも、わかりやすい記述はなかったのですが、OrmaDatabaseのインスタンスを生成するオプションで回避できそうなため、メモ。
ただ、本来の問題解決にはなっていないような気がします。


orma = OrmaDatabase.builder(context)
.readOnMainThread(AccessThreadConstraint.NONE)
.writeOnMainThread(BuildConfig.DEBUG ? AccessThreadConstraint.WARNING : AccessThreadConstraint.NONE)
.build();

Top