【Rails】MySQLテーブルの文字コードを変更する
テーブルの文字コードをutf8mb4に変更するさいに調べていたが既存のテーブルについては新たにmigrationファイルを作って文字コードを変更するSQLを実行するのが必要そうだったが、調べるのに時間かかったのでメモしておく。
$ ./bin/rails g migration change_table_charset
db/migrate/xxxxxxxxxxx_change_table_charset.rb
class ChangeTableCharset < ActiveRecord::Migration[5.1] def change ActiveRecord::Base.connection.tables.each{|table| sql = "ALTER TABLE #{table} CONVERT TO CHARACTER SET utf8mb4" ActiveRecord::Base.connection.execute(sql) } end end
全テーブルに対して、順次 alter table実行していく。こんなので本当によいのかは不明。けどできた。
ionic(cordova)iPhoneXでスプラッシュ画像が正しく表示されなかったときの対応
まず、スプラッシュ画像をセットする方法は2つあってxcodeのimages.xcassetsの以下のどちらかに正しいサイズの画像をセットすれば良いらしい。
1. LaunchImageに画像をセット
2. LaunchStoryboardに画像をセット
今回は1.の方でやったときの流れをメモしておく。
1. 画像を準備
1125 x 2436 と 2436 x 1125 の画像をそれぞれ準備して、resources/ios/splashに置く。
2. config.xmlの編集
config.xml
・・・ <splash src="resources/ios/splash/1125_2436.png" width="1125" height="2436"/> <splash src="resources/ios/splash/2436_1125.png" width="2436" height="1125"/> ・・・
いちおうこれだけで上手く行く予定だったのが、上手くいかずに少しハマった。。スプラッシュの制御で、cordova-plugin-splashscreen というプラグインを使っているようだが、これのバージョンがデフォルトのままだとiPhoneXに対応されていないようで、githubから直接DLする必要があった。
$ ionic plugin rm cordova-plugin-splashscreen $ ionic plugin add ionic plugin add https://github.com/apache/cordova-plugin-splashscreen.git#5.0.2
https://github.com/apache/cordova-plugin-splashscreen/commit/4ffaaa295202fb5adfcf5644c6226bdb31b283bb
こちらのコミットで対応いただけたらしく、5.0.2以上が必要ぽかった。
以上です
【mac】grepで半角カナを検索できずにハマった
以下のコマンドでいけると思ったのだが意図した動きにならずに色々調べるハメになったのでメモしておく。
$ grep '[ア-ン]' file
使われているロケール、文字コードが正しいか?
$ locale LANG="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_CTYPE="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_ALL=
問題なさそうだった
[ア-ン]の指定の仕方は正しいのか?
http://orange-factory.com/sample/utf8/code3-ef.html
こちらを見るとア=EFBDA7 ン=EFBE9Dの範囲でちゃんと連続しているので問題なさそう。
日本語が使えない?
$ grep [0-9] file
これだと意図した動きになる
$ grep [ア-ン] file
これでも意図した動きにならない
借りてるVPS(CentOS6)だと日本語でも意図した動きになる
$ grep -V grep (BSD grep) 2.5.1-FreeBSD
$ grep -V grep (GNU grep) 2.20
BSDとGNUでgrepの系統が違うぽい。
その後調べるとhomebrewでggrepというのが入れられぽい。
$ brew install ggrep $ ggrep -V ggrep (GNU grep) 3.1
$ ggrep '[ア-ン]' file
検索できた!
【iOS】AdHoc版アプリが起動しなくなったときに調べたこと
前提としてはずっとAdHoc版でデプロイゲートから配布していたアプリが突然起動しなくなったとのこと。
ipaの有効期限を見ても期限内だったのでちょっととまどったがその時に調べたことをメモしておく。
AdHoc版のipaからembedded.mobileprovisionを確認
発生日時が 2017/12/1 とする
Payload/xxxxx.app/embedded.mobileprovision(日付は適当)
CreationDate : 2017-01-01T00:00:00Z ExpirationDate : 2018-01-01T23:59:59Z TimeToLive : 365
これを見る限り有効期限はまだ問題なさそう。
ApplicationIdentifierPrefix : AAAAAAAAAA DeveloperCertificates : AAAAA・・・AAAAA
ここからどの証明書でビルドされたかわかるらしい。DeveloperCertificatesにはPEM形式の文字列が書かれている。
Apple DeveloperのiOS Certificatesから該当の証明書をDLしてダブルクリックでキーチェーンに登録。
キーチェーンアクセスの証明書から、上のApplicationIdentifierPrefix(AAAAAAAAAA)が名前に入っている証明書を探す。
「iPhone Distribution: xxxx(AAAAAAAAAA)」みたいなやつ。
今回これが複数入っていて、1つは有効期限が入れているものだった。
それを選択して、右クリックして書き出すを選択して、フォーマットをPEM形式を選択して保存する。
これの中身とDeveloperCertificatesを比較すると一致!
新しい証明書と古い証明書と両方入っていて、古い証明書を使ってビルドされたのが原因でした。以上です。
【mac】node.jsのバージョン管理(切り替え)について調べたことメモ
各バージョンのnode.jsをhomebrewでインストールして、bash_profileでPATHをちくちくいじって変更していた。が、npmやnpmでインストールしたソフトもバージョン固定でなく複数バージョン使えるようにしたかった。自分の環境ではnpmでインストールしたものが、/usr/local/bin/以下にインストールされてしまいうまくできなかった。なのでnodejsのバージョン切り替えツール?を試したのでそのときのメモ。
.bash_profileで切り替える
$ which node /usr/local/opt/node@8/bin/node $ which npm /usr/local/bin/npm
.bash_profile
export PATH="/usr/local/opt/node@6/bin:$PATH" # export PATH="/usr/local/opt/node@8/bin:$PATH" # export PATH="/usr/local/opt/node@9/bin:$PATH"
nodebrewで切り替える
nodebrew使うと、同一マシンの中に複数バージョンのnode.jsをインストールして切り替えが可能。切り替え方法はコマンドで手動で切り替える形。
# nodebrewインストール # 参考 https://github.com/hokaccha/nodebrew#install $ curl -L git.io/nodebrew | perl - setup # export PATH=$HOME/.nodebrew/current/bin:$PATH を ~/.bash_profileに追加 $ source ~/.bash_profile # インストール可能なnode.jsのバージョン確認 $ nodebrew ls-all # v6.13.1とv8.10.0 を入れる $ nodebrew install-binary v6.13.1 $ nodebrew install-binary v8.10.0 # v6.13.1を有効にする $ nodebrew use v6.13.1 # node.jsとnpmのPATHが~/.nodebrew/current/binになる $ which node ~/.nodebrew/current/bin/node $ which npm ~/.nodebrew/current/bin/npm # 各バージョンごとにnpmでインストールしたものが保存される $ ls -1 ~/.nodebrew/node v6.13.1 v8.10.0 v9.8.0
ndenvで切り替える
ndenvも複数バージョンのnode.jsをインストールして切り替え可能。nodebrewと違って、ディレクトリ以下の.node-versionを見て勝手にどのバージョンか判定してくれるので手動での切り替えが不要。これもバージョン管理するとよいのかも。
# ndenvインストール # 参考 https://qiita.com/noraworld/items/462689e108c10102d51f $ git clone https://github.com/riywo/ndenv ~/.ndenv # ~/.bash_profileに以下を追加 # export PATH="$HOME/.ndenv/bin:$PATH" # eval "$(ndenv init -)" $ source ~/.bash_profile $git clone https://github.com/riywo/node-build.git $(ndenv root)/plugins/node-build # インストール可能なnode.jsのバージョン確認 $ ndenv install -l # v6.13.1とv8.10.0 を入れる $ ndenv install v6.13.1 $ ndenv install v8.10.0 # 対象のディレクトリに移動して、v6.13.1を有効にする $ cd /path/to/project $ ndenv local v6.13.1 # .node-versionに書き込まれる $ cat .node-version v6.13.1 $ which node ~/.ndenv/shims/node $ which npm .ndenv/shims/npm # 各バージョンごとにnpmでインストールしたものが保存される $ ls -1 ~/.ndenv/versions/ v6.13.1 v9.8.0
まだ、ちゃんと使ってないので不都合に出会ってないけどとりあえずやりたいことはできそう。以上です。
ionic(cordova)でiPhoneXでステータスバーの背景色が適用されなかった時の対応
タイトル通りですが、既存プロジェクトのアプリをiPhoneXに対応させたときの対応をメモ。やったことはざっくり以下
1. ionic本体を1.3.3から1.3.4へバージョンアップ
2. cordova-plugin-statusbarプラグインを2.1から2.4.1へバージョンアップ
1.については、コマンドライン操作でのやり方がわからなかったので、githubからソースを落としてきて、www/lib/ionic以下へコピーしただけ。変更点はCSSだった(たぶん)。
2.については、1度プラグインを削除して入れ直した。が、cordova-plugin-statusbarと指定していplugin addすると2.1がインストールされていしまうので、githubのレポジトリにバージョンを指定してい直接インストール。
$ ionic plugin rm cordova-plugin-statusbar $ ionic plugin add https://github.com/apache/cordova-plugin-statusbar.git#2.4.1
ionicについては新規でプロジェクト作成すると最新のionicがDLされるはずなので問題ないとして、cordova-plugin-statusbarプラグインの方は入れ直さないとならないかも。というかそろそろionic1使ってることが問題かもしれないけど。修正続けてくれていて助かりました。以上です。
HTML・CSSコーディングを外注するときにチェックすべきだったと後悔したこと
たぶん基本的なことだと思うけど忘れがちな自分のためにメモしておく。
文字数を変えて確認すること
仕様的にちゃんと決まっていない場合もあるかもしれないけど決まってなければ決める必要がある。データを動的にしたときに気づいて別の人が直すとかだとけっこう時間かかることもあるのでチェックしておきたい。
画像サイズを変えて確認すること
文字数と同じだが画像サイズが固定でない場合は想定されるサイズの画像を用意してチェックしておきたい。
非表示になりうる項目をチェック
条件によって非表示になる項目があるならチェックしておきたい。ある要素を非表示にしたら別の要素のデザインが崩れたとかもたまにあるので。
実機で確認すること
最近ではJavaScriptもバリバリ書いて実現してるUIが納品されるが、機種やOSのバージョンによって動いたり動かなかったりあるので、iPhoneとAndroidと各OSのバージョンくらいでは最低限チェックしておきたい。
サービス開発の序盤で細かいことを気にせず実装を進めて、テストやデバック時点で気づいたけどコーティングした人がいなくて。その辺りが不得意な人間が対応すると時間もかかるしもったいないので外注するときは注意したいと思った。社内でこういうまとめてやれたら1番いいのだけど。以上です。