Androidはワンツーパンチ 三歩進んで二歩下がる

Android卵プログラマーの記録ブログ

XcodeのInterfaceBuilderの機能、@IBDesignableを使うとカスタムビューをリアルタイムでプレビュー出来て便利

Appleの公式iOSチュートリアル「FoodTracker」をやっています。
今↓この辺なのですが、カスタムビューを作っています。
https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ImplementingACustomControl.html#//apple_ref/doc/uid/TP40015214-CH19-SW1


XcodeのInterfaceBuilderの機能である、@IBDesignableを使うとInterfaceBuilder上でカスタムビューの表示を確認できますが、
Androidではカスタムビューはいちいち実行して調整していたので嬉しい機能です。

アニメーションにも対応してるのか気になりましたが、2017年10月時点ではどうかわからないですが、こちらのサイト様情報ですと出来無さそうっぽいです。
qiita.com


使い方はクラス宣言のところに@IBDesignableを付けてビルドするだけです。

@IBDesignable class RatingControl: UIStackView {


また。@IBInspectableというものを付けてビューのプロパティを宣言するとInterfaceBuilderでプロパティ変更出来るようになります。didSetオブザーバーをoverrideしてUI属性の変更を反映する必要があります。

  @IBInspectable var starSize: CGSize = CGSize(width: 44.0, height: 44.0) {
    didSet {
      setupButtons()
    }
  }

f:id:sakura_bird1:20171013033512p:plain

@IBInspectableはチュートリアルをやっただけでは開発効率が良くなりそうな実感が得られず、微妙な印象です。

Appleの公式iOSチュートリアル「FoodTracker」で カメラロールから画像選択する所でInfo.plistにPrivacy - Photo Library Usage Descriptionを追加してないのにクラッシュしない(未解決)

私の開発環境
Xcode9.0
Swift3.2
Base SDK Latest(iOS 11.0)
iOS Deployment target iOS10.0

今回クラッシュしたという問題ではなく、クラッシュしなくて???となりました。
メモです。

チュートリアルの↓の下の方で、iOS10以上はフォトライブラリへのアクセスの際にユーザーにパーミッション許諾ダイアログ表示する処理を記述していないためにクラッシュするようになっている箇所があります。
https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/WorkWithViewControllers.html#//apple_ref/doc/uid/TP40015214-CH6-SW1




私のinfo.plistにはPrivacy - Photo Library Usage Descriptionを追加していません。

f:id:sakura_bird1:20171011031259p:plain:w200

でも許諾ダイアログの表示などもなくクラッシュもすることなくアクセス出来ています。

f:id:sakura_bird1:20171011031357p:plain:w200

バッチリカメラロールの画像が表示されます。
f:id:sakura_bird1:20171011031427p:plain:w200

これは何がいけないのでしょう(・・?
くだらないミスをしているんだろうなーとは思うんですが、わからない。

公式チュートリアルXcodeのバージョンが8.1前提ですが、私は9.0です。
関係あるかー?無さそうなんだけどねえ。

まあ、このままチュートリアルを進めてみます。
何かわかったら追記します。

Appleの公式iOSチュートリアル「FoodTracker」で delegate = self のところで Thread 1: exc_bad_instruction (code=exc_i386_invop subcode=0x0)

Swift3.2使用です。

テキスト入力のコールバック設定のところでビューにselfを代入しているところでクラッシュしました。

該当のソースコード

  override func viewDidLoad() {
    super.viewDidLoad()

    // Handle the text field’s user input through delegate callbacks.
    nameTextField.delegate = self
  }

クラッシュのメッセージは下記の通りです。
ソースコード

Thread 1: exc_bad_instruction (code=exc_i386_invop subcode=0x0)

エラーログは

“fatal error: unexpectedly found nil while unwrapping an Optional value” 

“unwrapping an Optional value
と書いてあるのでオプショナル型の記述方法が何か悪かったのだろうかと最初思いましたが、
それは関係なく(そもそも接続時に勝手に設定されるし)
nameTextFieldが定義してあるにも関わらずnilになっているのはStoryboardからの接続が
上手く出来ていないためでした。
チュートリアル通りにやったつもりだったんですが、いじっているうちに変なことをしたようです。

@IBOutletの接続の部分をやり直してクラッシュが解決しました。


今回検索してこちらのOptional型についてのいい説明に出会いました。
是非ご覧ください。
stackoverflow.com


チュートリアルの該当箇所は
↓の章の一番下あたりです。
https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ConnectTheUIToCode.html#//apple_ref/doc/uid/TP40015214-CH22-SW1

【個人学習】Windows10でムービーメーカーのトライアル版をインストールし無料で使用する

自分が個人で動画制作を学習するためだけにとった方法です。
人にすすめておりませんので自己責任でお願い致します。
2017年9月はこの方法が使えていますが、今後使えなくなる可能性があります。
また、インストールするムービーメーカーは英語版となります。

2017年1月10日からWindowsムービーメーカーサポート終了しています。
公式サイトからのダウンロードも出来なくなりました。
そこで私のWindows10にMovie Makerのトライアル版をインストールしました。

トライアル版は「windows movie maker download windows 10」あたりのキーワードで検索して上の方に有るこちらからインストールしました。

Windows Movie Maker Free Download - For Windows 7/8/10/Xp/Vista


For Windows 7, 8, 10 :
と書いてるところの下のダウンロードボタンをクリックしてダウンロードします。

ダウンロードした「windows-movie-maker-2016.exe」を実行して画面に従ってインストールします。

インストールしたムービーメーカーは動画作成は出来ますが、動画ファイルをエクスポートしようとすると
Licenced Email と registration codeと書いてある
ライセンスキーを入力するためのダイアログが表示されてしまい、入力しないと保存が出来ません。

f:id:sakura_bird1:20170928085348p:plain

出力された動画を見てからライセンス購入を考えたかったので、
ネットで調べましたところ次の方法で無料で保存まで出来ることがわかりました。

まず、デスクトップに作成されているムービーメーカーのアイコンを削除します。

エクスプローラーで C:\Program Files (x86)\Windows Live\Photo Gallery
を表示します。

f:id:sakura_bird1:20170928085732p:plain

Photo GalleryディレクトリにMovieMakerというアプリケーションのアイコンが有るので
右クリック→送る→デスクトップ

で、デスクトップに新しいアイコンを作成します。

デスクトップに出来た新しいアイコンから起動したムービーメーカーは、保存する時にライセンスの入力を求められません。


以上です。

Appleの公式iOSチュートリアル「FoodTracker」でTerminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key

Appleの公式iOSチュートリアル「FoodTracker」をちびちびやっています。
https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/index.html#//apple_ref/doc/uid/TP40015214-CH2-SW1developer.apple.com

Xcodeのバージョンは9.0、iOS SDK 10, Swift 3
を使用してます。

エラー対処のちょっとした自分用メモです。全部記録してないので中途半端です。

ここのページの下の方、
To create a setDefaultLabelText action in the ViewController.swift code
のあたり。
https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ConnectTheUIToCode.html#//apple_ref/doc/uid/TP40015214-CH22-SW1

StoryboardのUIコンポーネントのアクションを設定するところあたりで早速クラッシュしました。
Set Default Label Textのボタンからコントロールキーを押しながらソースコードにドラッグしてソースコードと結びつけるんですが、
何回かやってしまったのが原因か参照が間違ってしまった(名前の間違いか?)らしく、
ビルドは成功するのですが実行時にクラッシュしました。
クラッシュ発生ポイントのソースが表示されるのですが、意味がわからず。

ログはこのようなものが表示されました。

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key 

こちらを見て、一度ソースコードとのコネクションを削除してから、もう一度ソースコードとの接続をやり直して対処しました。

stackoverflow.com


ソースコードとのコネクションを削除するのは、
Storyboardでフィールドを右クリックで設定が出るので、
ViewControllerとある箇所のばってんを押して削除します。

f:id:sakura_bird1:20170928010738p:plain

RubyでExcelから出力したShift_JISのcsvをutf-8に変換する

RubyExcelから出力した、文字コードShift_JIScsvutf-8に変換する方法のメモです。
私が作成しているRailsのアプリで、
seeds.rbでExcelファイルから出力したcsvファイルを読み込んで、
DBの初期データ投入をしています。

Excelから出力したcsvファイルはMacExcelを使用していても、Shift_JISになっています。
最近のExcelではUTF-8で出力出来るらしいのですが、私が持っているExcelが古いのか出来ないみたいです。

Shift_JIScsvを直接読み込むために、次の方法をとっています。

require 'csv'

(略)
csv_data = CSV.read('db/food.csv', headers: true,
    external_encoding: "Shift_JIS",
    internal_encoding: "utf-8"
  )
csv_data.each do |data|
  Food.create!(data.to_hash)
end

参考
string - Ruby read CSV file as UTF-8 and/or convert ASCII-8Bit encoding to UTF-8 - Stack Overflow

Nexus5Xのバッテリーを交換した。互換バッテリーは噂通りすぐ電池がなくなる。

Nexus5xをいくら充電をしても充電切れの赤いランプが付いてしまうようになってし
まいました。
ここ最近満充電してもすぐに電池がなくなってしまうのでバッテリーが寿命のようです。
ついに起動も満足に行えなくなってしまいました。

iPhone7をメインで使っているので、すぐに困るというわけではないのですが
Android開発用に実機が使えないのは大変困ります。(現在1台しか実機がないのです)
私のNexus5Xはストレージが16Gしかないので、すぐに容量がいっぱいになるし
3Dゲームもやるので、買い換えることにしました。
Nexus5Xはサブ機にすることにしました。

そこで自力でバッテリー交換をすることにしました。
一応スマフォ修理のお店にバッテリー交換の見積もりをしていただいたのですが、
13000円近くかかることがわかり、これだったらオンボロNexus5Xが
最悪壊れてもいいから自分でやろうと決めたのでした。

バッテリーに使うことにしたのはAmazonで売っている互換品です。

2980円が1780円になっているので、40%OFFでなかなか安いですね。
しかし評価が悪い(TдT)

必要だったら作業用のオープナーやドライバーも用意します。

電池と一緒にサジェストされているスマフォのフタをあけたりするプラスチックのオープナー
を使うのは一般的ですが、
私は精密ドライバーセットで全部やっちゃいました。
マイナスドライバーを隙間に挿して開けていく要領ですね。
マイナスドライバーをあんまり深く差し込んでグリグリすると傷が付いたりするので気をつけてください。


私が使っているのはこれ↓です。
今のところこれで困ったことはありません。
プラスチックのオープナーってプラスチックかすが出てしまうのが微妙に嫌です。
オープナーの爪ってすぐ折れるし。
って私のやり方がいけないのかな!


実際の交換ですが、参考サイト様を参考にやっていきます。
参考サイト様ありがとうございました!

sftt.jp

androgundan.blue


電源オフして、SIMカードを抜き、その穴あたりからマイナスドライバーを差し込み
ベキベキ裏蓋を剥がしまして、10個のネジを外します。プラスドライバーを使います。

さらにバッテリーを覆っている2つのパーツを外します。

f:id:sakura_bird1:20170903161748j:plain


電池を外します。
電池の上部の黄色っぽいベロのようなやつが充電端子になっているので、まず外します。
それから電池の下にマイナスドライバーを差し込んで接着剤を剥がしつつ外します。
電池は柔らかく、折れ曲がります。

f:id:sakura_bird1:20170903162054j:plain


新旧電池の比較。右が古い方。
古い電池が少しむくんでいます。

f:id:sakura_bird1:20170903162456j:plain


後は電池を交換して元に戻します。
電池を入れるとき、充電端子を先に挿した方が私はやりやすかったです。
パーツをはめる前に一旦充電できるか確認します。

f:id:sakura_bird1:20170903194310j:plain


そして作業終了後、充電は出来ることは出来るのですが、
実際に使ってみると50%ぐらい充電できているのに10%ぐらいになるのが異様に早いです。
Amazonのレビューでも散々ですね。
私は新端末が来るまでのつなぎであることと、端末オールリセットしたかったので
それが出来るようになったことで納得しています。
人にはおすすめしません。