続報:iOS 11からNSLocaleの仕様が変更されたらしい
以前iOS 11のNSLocaleについて書いた記事はこちら。
10月にAppleのDeveloper Forumに投稿していた質問を久しぶりに見てみたら2月に返信がありました。
翻訳しながら内容を見てみます。
I think the change in behavior makes sense sort of for many things, but would be nice if there was a way to opt out and get the real device locale even if your app doesn't support the user's native language.
For example something like this:
- 例えばこんな感じで
+(NSLocale*)deviceLocale; //Device locale, even if the app is not localized in the given language.
My app displays dates and I've had a couple users complain that they want the date formatted in the style of their language. Even though my app isn't localized in their language, they don't care, they want the date the way they want it.
Does anyone know of a way to get the device locale like +currentLocale used to?
- 私のアプリは日付を表示してるけど、ユーザの言語のスタイルでフォーマットされた日付が欲しいと訴えてきたユーザが幾人かいました
- たとえ私のアプリが彼らの言語にローカライズされていなくても、彼らはそんなこと気にせず、彼らの望むフォーマットの日付が欲しいのです
- 以前
+currentLocale
でできたように、デバイスの実際のロケールを取得する方法をどなたか知りませんか?
Edit to answer my own question, below seems to work:
- 自分の質問に自分で回答します。以下の方法でうまくできそうです
NSString *localeID = NSLocale.preferredLanguages.firstObject; NSLocale *deviceLocale = [NSLocale localeWithLocaleIdentifier:localeID]; //use the locale
上記の方法はまだ実際に試していないので時間があったら試してみようと思いますが、今までcurrentLocale
を利用していたロジックを上記に置き換えることで、iOS 11以降でもアプリのローカライズに関係なく端末の言語設定に準じたロケールを取得することができそうです。
入社1日目のMac環境設定まとめ
メモエントリ
1. キーボード設定変更
System Preferences > Keyboard > Modifier Keys... からCaps Lockを⌃に変更する
2. Apple ID作成
会社のメールアドレスでApple IDを作成する
Developer Teamに招待してもらいジョインする
3. Xcodeインストール
2.で作成したApple IDでログインする
4. XVim2セットアップ
5. Alfredインストール
App StoreからAlfredをインストールする
⌃+Spaceをキーバインドに設定する
6. id_rsa作成
Connecting to GitHub with SSH - User Documentation
RSAキーペアを作成する
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
~/.ssh/configを作成する
Host * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_rsa
キーチェーンにRSAキーを登録する
$ eval "$(ssh-agent -s)" $ ssh-add -K ~/.ssh/id_rsa
Githubに公開鍵を登録する
$ pbcopy < ~/.ssh/id_rsa.pub # コピーした鍵をGithubの設定ページに登録する
sshの接続確認
$ ssh -T git@github.com
7. ターミナルセットアップ
homebrewをインストールする
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
homebrew経由でtmuxをインストールする
$ brew install tmux
dotfilesをcloneしてセットアップする
$ git clone git@github.com:torufuruya/dotfiles.git $ ln -s dotfiles/.tmux.conf ~/ $ ln -s dotfiles/.zshrc ~/
20代後半の冴えないエンジニアが転職活動でそれなりの成果を出すためにやったこと
これといって特徴がなく冴えないエンジニアの私ですが、自分の軸に合致した企業に年収アップで転職を決めることができたので、転職活動で考えてたこととか行ったことについて共有して、万に一つ少しでもどなたかの参考になったら本望なエントリです。
職探し
LinkedInとWantedlyを利用しました。前者は基本的にリクルータとの窓口で、後者は企業の採用担当者(スカウト)との窓口として利用しました。
Wantedlyは多いときは日に何通もスカウトが来て有頂天になることができましたが、自分の軸に合っていそうな企業からのスカウトにのみ反応しました。結果的には1社のみ採用フローに進み内定をいただくところまで行きました(諸事情により辞退しましたが)。
LinkedInも毎日毎日様々な企業のリクルータからメッセージとコンタクト申請が来ますが、私はどうせならと英語の練習をかねて日本人じゃないリクルータ4名ほどに転職活動をお手伝いしてもらいました。電話する時は毎回緊張したけど、英語を話す良い機会になったし今では良い思い出です。リクルータの数4名と言うのはちょっと多いかもしれないですが、メリットデメリットあるかなと思います。
メリット
- 他社が知らないユニークな求人がもらえたりする(L社とかの大手の求人は大体どこもかぶる)
- 英語を話す機会を増やせる(これは私個人に限る)
デメリット
- 時間と手間がかかる
- 面接日程の調整が難しい(内定承諾の期限ために他社の面接を辞退せざるを得なかった)
あと今回、リクルータ経由と直接企業へ応募するフローを両方とも経験しましたが、リクルータ経由の大きなメリットとして「不採用の理由を聞くことができる」というのがあることを知りました。直接応募の場合も会社によっては教えてくれるかもしれませんが、理由については公開できない的な記載がメールにあったりします。私が今回直接応募して不採用だった企業はどこも理由を教えてはくれませんでした。
職務経歴書
以前海外の企業に応募した際に英語のレジュメを作成していたので今回も英語のものを利用しました。日本語の経歴書も欲しいと言う企業があったのはダルかったですが、いまどきのイケてるIT企業なら外資系じゃなくても英語のレジュメを受け取ってくれるので大丈夫です。
上記のエントリを書いた時は正直良い結果が得られなかったので、今回は以下のサイトを参考にして以前のレジュメをブラッシュアップしました。
LifeClever ;-)Give your résumé a face lift
レジュメは内容が一番大事なのはもちろん言うまでもないんですが、上記のサイトではレジュメの「見た目」についての考察とアドバイスが述べられてます。「まずは」毎日多くのレジュメを見てる採用担当者の目に止まることが大事ということですね。こちらを元に作成したレジュメのテンプレがこちらです。
Resume Template - Google ドキュメント
あの誰もが知るグローバル大企業G社のレジュメスクリーニングを通過することができましたし、他にもこのレジュメでスクリーニングに落ちることはほぼなかったので、ある程度信ぴょう性のあるレジュメなんじゃないかなと思います。
試験・面接対策
大学でコンピュータサイエンスを専攻していなかったためまずは基本的な勉強から行うために本屋で吟味して以下の著書を購入しました。今回は転職活動の試験・面接対策が趣旨のため経営などのトピックはスキップして技術的な知識のみを勉強しました。既にCSの知識がある人は全く無用です。この本で基本を掴んだのちに次の著書でより試験対策にフォーカスしました。
平成30年度 イメージ&クレバー方式でよくわかる栢木先生の基本情報技術者教室 (情報処理技術者試験)
- 作者: 栢木厚
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
データ構造とアルゴリズム問題の対策として利用したのは言わずと知れた?以下の著書。Cracking the Coding Interviewという米国ではおそらく相当有名な(ベイエリアのYoutuberの動画でよく見る)著書の日本語訳版です。2017年の年初に1社だけ筆記試験を受けた際にこの類の問題がボロボロだった経験から対策が必要と思いこの著書を購入して勉強しました。とても分厚い内容で前半の方しかやる事ができませんでしたが、その後筆記試験でもそれなりに回答する事ができるようになりました。
世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~
- 作者: Gayle Laakmann McDowell,岡田佑一,小林啓倫
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/02/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
その他のTips
面接前はカフェインを摂取する
カフェインを摂取すると頭が良く回ることが科学的に?立証されてるらしいです。30分程度で効果が表れるみたいです。私も面談の前はコーヒーを飲んでから臨むようにしてました。
面接は可能ならば午前中に入れる
たまたまかもしれませんが午前中に受けた面接は総じて結果が良く、夜受けたものは良くありませんでした。仕事後だと疲れが顔に出るんでしょうか?w
一部上場の大手ソーシャルゲーム会社を退職しました。
この度、約6年間勤めた一部上場の大手ソーシャルゲーム会社を退職しました。
といってもこの会社で実際に働いたのはおよそ3年間で、後半の3年間は子会社に出向していました。
思い返せば2012年の新卒採用で未経験の私を採用していただき、様々なチームで色々なプロジェクトに携わらせていただきました。
まさにエンジニア人生はここから始まったという意味では、大変ありがたい6年間だったなと思います。
入社当時の飛ぶ鳥を落とす勢いの雰囲気を肌で感じる事ができたこと、また盛者必衰を内部の人間として見る事ができたことはとても貴重な経験でした。
両社ともに居心地が良く可能ならばずっと勤めたいくらいでしたが、
年齢ももう若くない頃になってしまったのでそろそろコンフォートゾーンから抜け出すべく転職を決めました。
転職活動の詳細については色々と書きたい事があるので別エントリーにしようかなと思います。
2017年振り返り、2018年目標
2017年の目標振り返り
2017年の目標は以下の3つだった。
- お金の勉強をする
- 海外の企業に応募してみる
- 体脂肪率9.9%
お金の勉強をする
未達成。最近話題のビットコインにすら完全に乗り遅れた。コインチェックが六本木ヒルズに大々的に広告出したり出川がCMやったりと、世の中的にすごい流れが来てる雰囲気はびしびし感じる今日この頃、世間から置いてかれてる感ハンパない。ビットコインに限った話ではないけど、来年はこういう話が周りから聞こえてきた時点ですぐにとりあえずやってみる精神で生きていきたい。
海外の企業に応募してみる
達成。ブログに書いた通り、成果は何も出なかったけど、これを契機にキャリアについてより考えるようになったのはよかった。キャリアは定常的に考える必要があると思った。12月から本格的に開始した転職活動にも影響した。転職についてはまた別の機会に書こうと思う。
体脂肪率9.9%
未達成。西麻布に住んでた頃は仕事終わりに気が向いたらジムに行くという感じで習慣化ができておらず、体型もどんどん弛んでいく一方だったけど、10月に引っ越してから、ちゃんと習慣化したほうがいいよなということで、火曜と木曜と土日のどちらかで週に3回ジムに行く習慣をつけることができた。習慣化されるとあとは続けるだけで、体型も次第に絞られてきて、最近は痩せたと言われるようにもなった。以下メモ:
12/31時点
- 体重 75.5
- 体脂肪 15.5
- 筋肉量 60.0
メニュー
- ランニング 10min
- マシンチェストプレス 42kg 16回 x3
- マシンフライ 36kg 16回 x3
- ラットプルダウン 50kg 16回 x3
- レッグレイズ 35回 + 20回
- トーソローテーション 50kg 16回 x3
- ランニング 30min
2018年の目標
コンピュータサイエンスの基礎を修了する
海外就職には必須と感じているコンピュータサイエンスの学士相当の資格を取得するために、海外でも通用しそうなオンライン講座でコンピュータサイエンスの基礎を修了する。 Udacityを考えてるけど、一応他とも比較検討してみてどのコースを受講するか決める。
ブログを12回以上書く
2017年は9記事しか書けなかったので、2018年は最低でも1ヶ月に1記事くらいは書く。
構想中のサービスをリリースする
転職活動に入る直前に構想ができてからまだ開発に入れてないので、来年は開発してリリースする。 このサービスが完成したら、けっこうアッと世を言わせるものになると思ってワクワクしてる。
体脂肪率9.9%
週3日の朝ジムは継続しつつ、有酸素運動足りてないと思うので、自宅からお台場とかまでのランニングをメニューを加える。
総括
2017年は総じて自分のキャリアについて考えさせられる年になった。今の会社で6年間一生懸命働いてきたつもりだったけど、いざ転職を考えた時に自分の特徴や売りみたいなものがパッとしないということを痛感させられた。そういう働き方をしていたんだということが悲しくなった。一番大事な20台半ばのこの時間はもう戻ってこないんだという虚無感のような感情さえ湧いた。もう28歳になり決して若くない年になってしまったので、とにかくなるべく早く手遅れになる前に今のコンフォートゾーンを抜け出してアクションを起こす。2018年は人生で一番激動の一年にしたい。
Rails 5でAPIをさくっと作る方法
Rails 5のAPI専用モードでAPIのベースをさくっと作ってみたので備忘録として。
Rails開発環境の構築
Railsの最新バージョン(5.1.4)
$ gem install rails
...
12 gems installed
APIアプリケーション作成
$ rails new scribbles_api --api ... RubyDep: WARNING: Your Ruby is outdated/buggy. RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1.
rubyのバージョンアップ
$ rbenv install 2.3.1 Downloading ruby-2.3.1.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2 Installing ruby-2.3.1... BUILD FAILED (OS X 10.12.6 using ruby-build 20160602) Inspect or clean up the working tree at /var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497 Results logged to /var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497.log Last 10 log lines: Referenced from: /private/var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497/ruby-2.3.1/./miniruby Expected in: /usr/lib/libSystem.B.dylib dyld: Symbol not found: _utimensat Referenced from: /private/var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497/ruby-2.3.1/./minir uby Expected in: /usr/lib/libSystem.B.dylib make: *** [.rbconfig.time] Abort trap: 6 make: *** Waiting for unfinished jobs.... encdb.h updated
https://github.com/rvm/rvm/issues/3744
再度インストール
$ xcode-select --install $ rbenv install 2.3.1 ... Installed ruby-2.3.1 $ rbenv local 2.3.1 $ rbenv rehash $ gem install bundler ... 1 gem installed $ bundle install ... Bundle complete! 8 Gemfile dependencies, 49 gems now installed.
API作成
scaffoldでモデル・コントローラ作成
$ rails g scaffold User field1:type field2:type
ダミーデータ作成
以下の記事を参考にさせていただきました
Gemfile
# seeds gem 'enumerize' gem 'activerecord-import' group :development, :test do gem 'faker' gem 'gimei' end
lib/tasks/seed.rake
Pathname.glob(Rails.root.join('db/seeds/*.rb')) do |path| desc "Load the seed data from db/seeds/#{path.basename}." task "db:seed:#{path.basename(".*")}" => :environment do load(path) end end
db/seeds/user.rb
# coding: utf-8 # Create dummy users # Male users = [] 50.times do |no| gimei = Gimei.male users << User.new( user_hash: SecureRandom.uuid, nickname: gimei.katakana, email: Faker::Internet.email, password: Faker::Lorem.characters(45), gender: User.gender.male.value, ) end # Female 50.times do |no| gimei = Gimei.female users << User.new( user_hash: SecureRandom.uuid, nickname: gimei.katakana, email: Faker::Internet.email, password: Faker::Lorem.characters(45), gender: User.gender.female.value, ) end # Bulk insert User.import users
ここまでやるとrakeのseedタスクがこんな感じ
rake -T db:seed rake db:seed # Loads the seed data from db/seeds.rb rake db:seed:user # Load the seed data from db/seeds/user.rb
あとは実際に実行してUserのダミーデータを作成
$ rake db:migrate $ rake db:seed:user
rails routes確認
$ rails routes Prefix Verb URI Pattern Controller#Action users GET /users(.:format) users#index POST /users(.:format) users#create user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy
ローカルサーバ起動
$ rails server => Booting Puma => Rails 5.1.4 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.10.0 (ruby 2.3.1-p112), codename: Russell's Teapot * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000
curlで動作確認OK
$ curl "http://localhost:3000/users/1" {"id":1,"user_hash":"3c929a28-3583-45a8-a71d-82295a2a6a3a","nickname":"タムラ コウタロウ","email":"vada@borerherman.com","password":"0pm8iatqkbk3n7x7vnxofwskk0aws5oyfvvj62r5y7nop","gender":"male","created_at":null,"updated_at":null}