418 I’m Komatzz

プログラミングとか学んだことの備忘録ブログです。

ソフトバンクiPhoneからSIMフリーiPhoneに乗り換えた手順を公開する

はじめに

つい最近、ソフトバンクiPhone6 から SIMフリー版(LINEモバイル)iPhone7 に変えたので、その手順や実際にやったことなどを書いていこうと思います。

キャリアはソフトバンクですが、どのキャリアでも手順はほとんど変わらないはず。

僕の場合、乗り換えたことにより、月々の支払いが大体 5,000円弱安くなる算段です。

月々のデータ通信を把握する

まずは自分が大体月にどれくらいデータ通信しているのか確認します。

「キャリア名 通信量」とかでググれば出てきます。

ログインして確認しましょう。

僕は大体 4GB くらいでした。

どこのSIMカードにするか決める

自分の通信量やスマホの使い方を元に、どのSIMカード会社が自分にとって 1番得なのか徹底的に比較します。

僕に最適であろう、4GB というプランは中途半端なのか、どの会社にも存在しないことが多いです。

なので 3GB か 5GB になる訳ですが、どうにか 3GB に抑えたいところです。

Freetel(フリーテル)と LINEモバイルには「カウントフリー」という

「ある特定のアプリだけ通信量を無料にしますよ」という神制度があります。

「カウントフリー」になるアプリはどちらも大体同じですが、

Freetel には AppStore の通信費を無料にする制度があり、

LINEモバイル には LINE電話 の通信費が無料になる制度があります。

AppStore は家や会社の Wi-Fi を使ってダウンロードとアップデートをすれば良いと思うので、今回は LINEモバイル にしました。

また、LINEモバイル にすると地味に LINE ID で友達追加できたり(他はできない)、

Amazon経由 で申し込めば登録事務手数料の 3000円が無料になったりして良いです。

iPhoneを買う

iPhone を普通に買うだけです。

iPhone は大体どこで買っても価格は同じなので、僕は Apple ストア公式から購入しました。

2日くらいで届きました。

ついでに、iPhone ケースと液晶保護フィルムをこのタイミングで買っておきました。

MNP予約番号を取る

各携帯会社の MNP 転出専用ダイヤルに連絡をします。

「キャリア名 MNP 転出」とググれば出てきます。

土日は電話が混んでいて結構待たされるので注意。

ソフトバンクの場合、MNP の予約番号をすぐに SMS で送信してくれました。

SIMカード会社にMNPする

MNP予約番号を控えて、対象のSIMカード会社に「MNP したいんですけど」と連絡します。

最近は家電量販店に実店舗があったりするので、そちらでも良いと思います。

LINEモバイルの場合は実店舗がないので、MNP 予約番号をネット上から入力して SIM カードを配送してもらいます。

ここで注意なんですが、

MNPの開通受付窓口へお電話がない場合、SIMカードが配送された翌々日の午後に自動的に切り替えを順次実施します

公式がアナウンスしているので、

なるべく休日に SIM カードが届くように手配した方がいいです。

大体 2日くらいで届くので、土日休みの人は木曜くらいですかね。

仕事中にいきなり切り替わったりしたら大変ですからね。

LINEモバイルの場合、開通手続きの電話をして完了するまで 2時間弱かかりました。

また、完了後は一度 iPhone を再起動しないと回線を拾ってくれませんでした。

iPhoneを買取りに出す

以上で乗り換え完了です。

ついでなので、旧iPhone を買い取りに出しましょう。

色々調べた結果、じゃんぱら が 1番高く買い取ってくれる気がします。

ただ、土日だと人が多く、90分くらい待たされるので要注意。

おまけ

最近 Qiita をはじめました。

技術的な話はこちらで更新してますので、よかったら読んでください。

Django(Python)のDB操作まとめ

仕事でDjangoPython)に触る機会があり、0から学習しながら進めています。

今回は個人的に分かりづらかった、DB(SQL)周りの内容をまとめました。

ドキュメントを読んでも分かりますが、ちょっと読みづらいです

 

条件指定

SQLで条件を指定したい場合は「filter」を使えばできます。

誤解を恐れないで言うと、

filter = where

という認識で良いと思います。

 

サンプル

 

複雑な条件を使いたいときは Q object を使う

 

日付型のインサートとアップデート

ちょっとSQLとズレますが、Model で以下のように設定すると、良しなにやってくれます。

 

・auto_now_add=True にすると自動で今の時間がインサートされます

createdt = models.DateTimeField(auto_now_add=True)

 

・auto_now=True にすると自動でインサートされるしアップデートもされます

update_dt = models.DateTimeField(auto_now=True)

 

※参考先↓


 

Google Developers Summit:Progressive Web Appsに行ってきた

少し前に行われたGoogle Developers Summit : Progressive Web Appsに行ってきたので、PWAについて自分なりにまとめたいと思います。

f:id:kmatz90:20160508164153j:plain

 

Progressive Web Apps(PWA)とは?

無理やりシンプルに説明すると、今までのWebアプリ(サービス)に、

プッシュ通知やオフラインアクセスなどをできるようにした新しいWebアプリの概念です。

 

Webアプリでプッシュ通知やオフラインアクセスを使うにはどうするのか?

答え:Service Workerを使う!

 

Service Worker(SW)とは?

Webページとは別にバックグラウンドで実行されるJavascript環境(API)のことです。

プロキシ的な感覚が近い?と思います。

なので、技術的にはPWAを勉強するというより、

SWを勉強すると表現した方がいいかもしれません。

詳細はこちらを参照。 

 

Service Workerを使うには?

具体的な使い方はこちらを参照

なお、Service Workerを使うには、SSL化(HTTPS)が必須になります。

 

SUUMOのPWA導入事例

これは実際にカンファレンスで聞いてきた話です。

 

SSL化の課題

SUUMOでPWAを導入する際に1番ネックになったのがSSL化で、

かれこれ1年以上かかっているそう(大きな理由はlocalStorage)。。

しかも紙媒体のURL表記が「http」のものもあるので、

「HSTS」を導入する予定とのこと。

 

Add to Homescreen

ホーム画面にショートカットを追加させる施策です。

スーモに再来訪したら「ホーム画面に追加しませんか?」的なバナーを出して追加を促したそう。

ホーム画面から来た人はCVRが約1.2倍と言っていたので、導入効果はあるもよう。

 

Offline Cache

利用したことで表示速度が約4倍に。

 

プッシュ通知

ユーザーが新着案件(賃貸)情報を受け取る設定をしたら、

スマホにプッシュ通知できるような仕組みを検討中とのこと。

 

その他

ジオフェンシングもそのうちやりたいと話していた気が。

 

まとめ

スピーカーも話していましたが、ネイティブアプリは色々大変なんですよね。

リリースとアップデートに審査が必要だし、

GoogleAppleを挟む分、自由じゃないし時間がかかったり。

その点、PWAのようにWebにあるといつでも改修できるし、

各OSに依存しないのでネイティブアプリのデメリットを解消できます。

 

結構明るい技術だと思うのですが、

今のところブラウザのSafariMicrosoft Edgeに対応していないようです。

※対応状況はこちらで確認できます。

なので、iOS主流の日本ではすぐすぐ取り入れる技術ではないかもしれませんが、

今後のアプリのトレンドして抑えておく必要はありそうです。

パーフェクトJavaScript

パーフェクトJavaScript

 

プロダクトマネージャーになりたい人は「Inspired: 顧客の心を捉える製品の創り方」を読むといいかも

少し前からバズワードっぽくなっているプロダクトマネージャー。

結局どういう人なの?って思ったので、

Inspired: 顧客の心を捉える製品の創り方 を読んでみました。

 

※以下からPMと表記する箇所があります

 

プロダクトマネージャの役割(仕事)とは?

この書籍には「PMの役割とは?」みたいなものが散りばめられているのですが、

その中でもよりシンプルに表現されているのが以下。

 

プロダクトマネージャーの主な任務としては 2つある。

製品の市場性を評価すること(1)と、

開発すべき製品を定義すること(2)である。

 
(1)製品の市場性を評価すること

製品の仕様を決めることだけが仕事ではないのです。

そもそも作ろうとしているプロダクトが、

本当に価値のあるものなのか、

あるいはどうやって価値を高めていくのか

という検証をすることも仕事になります。

 

どうやって作るか(How)だけではなく、

何(what)を、なぜ(why)作るかのレイヤーまで手を出すイメージですかね。

 

また、製品の価値やユーザーの意向を測る指標として、

NPS(ネットプロモータースコア)というものがよく使われているようです。

 

(2)開発すべき製品を定義すること

プロダクトマネージャーの仕事は、

究極の製品を定義することではなく、

目的を達成するために必要最小限までそぎ落とされた製品を定義することである。

これ言うのは簡単なのですが、実際にはかなり難しいんですよね。

製品(機能)を削るというのは、偉い人や顧客の承認を得ないといけないので。

つまり「そぎ落とす理由をロジカルに説明できて」、

なおかつ「偉い人たちと臆せず戦えるキモを持ちあわせた人物」でないとPMは務まらないということですね。

 

プロダクトマネージャーはコードを書くのか?

書籍を読む限りほとんど書かないようです。

というのも、

エンジニアリング部門というのは、基本的に、

正しい製品を作ることではなく

製品を正しく作ることに専念することになっている。

と書いてあるように、 

実際にプレイヤーになると「製品を正しく作ること」に専念してしまい、

「何が正しい製品なのか」混乱すると思います。

 

ではコードを書けなくてもいいのか?

優秀なプロダクトマネージャーになるためには、

自分で新しい技術を発明したり、使いこなしたりする能力を身につける必要はないけれど、

その技術を理解し、活用の可能性を調べられるぐらいには使いこなさなければならない。

書けなくてもいいようですが、 フィジビリティを判断する能力は必要とのこと。

 

プロダクトマネージャになるには?

プロダクトマネージャーは、

エンジニアが質の高い製品を作るために必要だと思っていることを自由にやらせるようにしなければいけないし、

エンジニアは、

プロダクトマネージャーが使いやすくて、価値の高い製品を自由に思い描けるように配慮しなければいけない。

 

すばらしい製品の定義を思いついて、それをエンジニアリングチームに丸投げしてしまう、というのがある。

そのせいで、何をしたいかと何ができるのかをすり合わせるという非常に重要な作業に取りかかるのが遅れて、

いろいろな情報をしっかり検討する時間もないまま意思決定をしなければならない状況に陥ってから、慌ててすり合わせをする羽目になる。

 

やっぱり実際の現場でエンジニアとして経験を積んだ人の方が、上記のような気持ちが分かると思います。

気持ちが理解できるということは、エンジニアチームと上手くコミュニケーションが取れるということだと思うので、

PMになるにはエンジニアとして修行を積むというのが近道だと思います。

※SEじゃダメ

 

まとめ

PMは「製品(プロダクト)のCEO」とどこかで聞きましたが、

ほんとにそんなイメージだと思いました。

 

プロダクトマネージャという言葉が、

世間に認知される前(できる前)からこの役割はあったと思いますが、

なぜここ最近でいっきにフォーカスされるようになったんですかね。

いわゆるITが成熟してきて、単純なサービスの内容だけでは勝負できなくなって、

製品をより良いものにする人、ひいては製品に責任を持つ人を作ろうといった背景ですかね。

 

ちなみにクックパッドでは、PMのことをディレクターと読んでいるらしいです。

呼び名は様々ですが、いずれにしても、

ユーザーを幸せにするサービスを作るためには、

学んで検証をするPDCAを回し続ける人物が必要ですね。

Inspired: 顧客の心を捉える製品の創り方

Inspired: 顧客の心を捉える製品の創り方

 

Swiftでランダムな文字列を生成する方法

Xcodeのバージョン:7.1

Swiftのバージョン:2.1

 

方法

ランダムな数値を生成した後、

その数値の場所の文字列を取得すれば、

おのずとランダムな文字列が生成できます。

 

Swift 2以降は、

advancedBy(n)

を使って任意の場所の文字列を取得できます。

 

 

注意点

上述した通り、

letter[letter.startIndex.advancedBy(randNum)]

のように、

文字列の変数[]

で囲まないと正常に動作しませんでした。

具体的に言うと、advancedBy(n) の「n」に入った数値をそのまま出力してしまいました。

 

何か僕がミスってるのかもしれないですが、

同じような状況に陥った方は上記の方法を試してみてください。

 

詳解 Swift 改訂版

詳解 Swift 改訂版

 

Swiftでキャリア情報とかOS情報とかデバイス名とかIPアドレスとか取得する方法

Xcodeのバージョン:7.1

Swiftのバージョン:2.1

 

ユーザーが使用している端末のデータを取得したいときがあります。

キャリア名とかOSのバージョンとかデバイス名とか。。

ある程度の情報は、以下の方法で簡単に取得できます。

 

IPアドレスだけ特殊で、

Bridging Header(ブリッジングヘッダー)を使わなければ取得できないようです。

ブリッジングヘッダー作成の方法はこちらを参考にしました。

追加したブリッジングヘッダー(.hファイル)に

#include <ifaddrs.h> 

を追加後、

で取得できます。

 

ちなみに、フレームワークプロジェクト(Cocoa Touch framework)だと、

ブリッジングヘッダーは使えないそうです。。

 

詳解 Swift 改訂版

詳解 Swift 改訂版

 

SwiftでBase64エンコードしたときに改行コードが入ってハマった

新年早々めでたくハマって、

f:id:kmatz90:20160109171157j:plain

こんな顔になったので、メモしておきます。

 

Xcodeのバージョン:7.1

Swiftのバージョン:2.1

 

ちなみにBase64とは?

データを64種類の印字可能な英数字のみを用いて、

それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。

MIMEによって規定されていて、

7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。

- Wikipedia

 

改行コードを正規表現で削除(置換)する

SwiftBase64エンコードした場合、

「64文字」ごとに改行コードが入るようなので、

正規表現で改行コードを削除して対応しました。

MIMEの基準では「76文字」ごとと書いてあるんですけどね。

具体的なコードは下記です。

含まれていたのは「\r\n」でしたが、

念のため「\n」も消せるようにしておきました。

 

※追記

KishikawaKatsumiさんにコメントでご指摘頂きました通り、

encStr!.base64EncodedStringWithOptions([])

で改行を含まないようにできました!

オプションを空で指定する方法を知りませんでした。。

なので、正規表現とかわざわざ使わなくて大丈夫です。。

その他の疑問も丁寧に説明をして頂いて、大変助かりました。

 

詳解 Swift 改訂版

詳解 Swift 改訂版