39ギター

35年ぶりに弾き始めたクラシックギター
神経痛と戦いながら
どこまでバッハに迫れるか
蝶も花もアーチェリーもあるよ

データベースはGRDB.swiftに決まり

2020-02-21 22:52:04 | 日記

こんばんは

このところずっとプログラミングにハマってしまいまして、ブログをずいぶんサボっています

何にハマっていたかというと、データベースです

アーチェリーアプリのメインになる画面はできたんですが、そのデータを永続的に保存する方法の目処が立たず色々と研究していました

iOSアプリのデータ保存方法は色々とありますが、UserDefaultとかCoreDataは最初から捨てて、SQLiteを中心としたラッパークラスを検討していました

最初に検討したのはRealmですが、インストールすると途端にxCodeの動きが悪くなるしせっかく買った本もあまり役に立たないし内容的にも3年前の本だったのがよくなかった

本当はRealmがiOSアプリでは主流になってきているみたいなんですが、そこまで高機能は必要としてないのでこれも結局ボツとしました

 

次に検討したのはSQLiteそのものを使うと言うこと、ハダカのSQLを直接使う事ができるので僕はその方がいいのですが、SQLiteをそのまま使うのがとても難しくこれもボツとしました

 

次に検討したのはGRDB.swiftと言うSQLiteのラッパーです

ラッパーというのはSQLiteを使いやすくした関数群とでも言うんでしょうか、ネット上の評価もまずまずです

インストール方法が色々とあるんですが、優しそうなのでcocoapodを使ってみました

一発インストールしたら後はいつでもどのプロジェクトでも使えるということにはなりませんが、まあまあ少しの手順でインストールはできます

使い方的にはネットでもいろいろな情報があり、すぐにできるようになるかと思ったんですが、これがとんでも無く時間がかかりました

いくら時間がかかってもしつこく食い下がられたのは、なんとなく「これ良さそう」と言うカンのようなものがありました

ネット上のサンプルを色々と組み合わせてやってみましたが、最初はニッチもサッチもでSQL文を受け付けてくれなくて困りましたが、ちょっとしたことで少しずつ動きができてきました

今日の時点で、データベースを作成しいろいろなSQL文を実行する事ができるようになりました

SQL文はInsert,update,delete,dropなどは戻りがないので単にexecuteするだけ、selectは戻りを配列で受けます

結局、戻りの有無で2種類の基本関数を作っておけば後はそれに与えるSQL文の違いだけになります

 

ただ一つだけどうしても解決しないドツボに、今日までハマっていました

それはせっかくデータベースにデータを登録してもアプリが動いている時だけでアプリが終わると消えてしまう事です

データベースはデータの更新は一時的でCOMMITをしないと元に戻ってしまうことはわかっていました

結果をコミットという事なんですが、そのCOMMITの仕方が分からなくてずいぶん悩みました

今日最終的に解決したのは結局COMMITしなくてもいいという事です

では消えていたのはどういう事なんでしょうか

実は何回もやっていると不思議なことに以前登録したデータがヒョイと現れることに気が付いたのです

よくよく考えてみて気が付いたのはデータベースファイルの保存場所です

早速調べてみると毎回起動のたびに違うフォルダーにできています

URLを調べるとシミュレーターの動きがらみで毎回乱数のような長い名前のフォルダーにできています

たまたま同じフォルダーになるとひょっこりと前のデータが出てきたということです

そこでファイルのできる場所を直接指定してやってみたらうまく行きました

訳もわからずにNSHomeDirectory()みたいな関数を使っていたのでおかしかったようです

最終的なアプリをiPhone上で動かすときにどこを指定するかはまた調べないといけないのですが、とりあえず開発中はこれでよしということになりました

もう何週間も時間を費やしてしまいましたが、この間の唸るようなしつこい作業も最終的には達成感に変わりました

まだまだ先は長いしこれからもドツボにハマる事があるかもしれませんが、持ち前のしつこさでなんとか切り抜けようと決意を新たにしました(ちょっと大袈裟)


またドツボにはまります

2020-02-17 21:32:12 | 日記

こんばんは

 

少しずつ雪が近づいています

西日本は今夜から積雪ということですが、山陽の平野ではそれほどではないでしょう

今日は昼過ぎに少し雪がチラチラとしましたが、西から冷たい風が吹くだけで雪が降る感じはありません

今夜から雪になるのなら明日の朝はカーテンを開けるのが楽しみです

この冬一回ぐらいは一面の白い世界も見たいですよね

 

データベースのRealmですが昨日はどうしてもインストールから先に進まなかったんですが、今日改めて色々と試してみたところ少し進みました

昨日はcocoapodsでRealmSwiftのインストールを試して失敗し、そのあとDynamic Frameworkのインストールもやってみたんですがこれも失敗し、途方に暮れていました

今日はまた振り出しに戻って、cocoapodsのインストールからやり直しました

いったんcocoapodsをuninstallして再度インストールするんですが、これがエラーになる

おかしいなぁと思いつつ原因がわからず色々と試してみたところ、自分のディレクトリでinstallしていたのでこれをcd..で上に遡りこれ以上いけないところまで行ってからinstallしてみました

これが良かったんですね、すんなりcocoapodsのインストールができて、そのあと大切な「pod setup」です

おそらく昨日はこれをしてなかった

他の方の書いたHPやブログ等をみると、これについて書いてないところばかりです

普段podを使っている人はもうsetupしているので忘れているんですね

次にxcodeのプロジェクトのあるディレクトリで「pod init」昨日はこれができなかったんですが今日は少し時間がかかりましたが成功しました

よしよし、なんとかなりそうだ・・・

次にpodfileの編集ですが、他の方の書いたHPやブログなどでは「vim」とかエディターを使うようになっていますが、こう言ったキャラクターベースのエディターは苦手なので、Mac標準のテキストエディタで編集しました

次に「pod install」テキストエディターでやったらダメだよとエラーになるかもしれないと思っていましたが、大丈夫でした

やっと本に書いてある通りになりました

 

ここまでの道のりの長かったこと・・・

さあこれでプロジェクトを起動して「import RealmSwift」と打ってエラーにならなければOK

よしよし大丈夫なようだ

次にSwiftUIの簡単なプログラムを組んでRealmSwiftを使ってみました

う〜ん、ダメみたい

まだ全然わかってないようなので、期待した通りにはなりません

あれこれとさわっていると不思議なことに「import RealmSwift」の行がエラー表示になりました

どこかで思いがけない事が起きているようです

こうなるとまたドツボにはまります

少し冷静になった方がいいので、夕方いったんスイッチOFF

 

もう少し勉強してから再度チャレンジしましょう

でも、まあ、少しずつでも進んでくれたので良かったですね


やはりSQLite3を攻略ということですかね・・・

2020-02-16 22:47:42 | 日記

こんばんは

 

やっと冬らしい寒波がやってきそうですね

月曜日の夕方ごろから雪が降って、ここ広島の平野部でも積雪の予報です

今まで暖かったので空気が湿気を十分含んでいます

そんなところに歓喜ですから、大雪になるかもしれませんね

まあ冬は寒くて当たり前

県北のスキー場は待ちに待った雪で今までの遅れをなんとか取り戻したいところでしょうね

我が家のFit君は今年は冬用タイヤになっていません

困ったなぁ

明日の午前中なんですが、市内でも北部になる義母の家に行かなければなりません

まあまだ大丈夫とは思いますが、用事が済んだらすぐ帰ることにしましょう

 

iOSアプリで使うRealmと言うデータベースですが、本を読みながら色々とやってみようと思っているんですが、その本が3年前のものということで今の環境とは全然違います

ネットで調べた情報で補間しながら進めていますが、インストールの時点で早くもつまづいています

なんとなくインストールできた感じになって簡単なコードを打ち込んで走らせようとしますが、ビルドが通りません

何回もやってやっとビルドが通っても、実行時点でアプリがクラッシュします

iOSアプリの開発は素人なのでトラブル対処はなかなかできそうにありません

 

それに自分のことは棚に上げておいて、本に文句があります

見てください

コードの部分が不必要に網掛けが濃くよくよく目を凝らしてもなかなか読めません

こんなに濃い網掛けにする必要がどこにあるんでしょうか

サンプルファイルをダウンロードすれば同じコードが見られるかとも思ったんですが、3年前のSwiftとxCodeなので色々と警告が出たり、画面の構成も違うので迷ってばかりになります

なんとかコードを開くことはできますが、実行をしたりはまずダメなので正直使い物にはなりません

まあ3年前の本を承知の上で購入したんですから誰にも文句は言えませんけどね・・・

という事でもう少し頑張っては見ますがネットなどでよほどいい情報でも得られない限り、結局「Realmはボツ」ということになりそうです(使いこねせればかなり良いデータベースなんですけどねブツブツ)

 

やはりSQLite3を攻略ということですかね・・・


Realmデータベースがいい感じなら・・・

2020-02-14 22:48:39 | 日記

こんばんは

 

暖かいですね

明日までは割といい天気で日曜日からはまた雨模様で月曜日からは冷えるようです

気温の上下が激しいので体調管理には気を使いますが、寒いよりは暖かい方がいいので寒い日に気をつけるようにしておけばなんとかこの冬は乗り越えられそうです

 

一週間前にメガネを作りました

今は仕事中のメガネという事で中近のレンズになっています

なのでそのまま外に出たりすると遠くが見えにくくて困ります

ということで今回作ったのは遠近です

早く慣れたいので朝昼夕方の外出時には遠近をかけるようにしているんですが、どうもこれがしっくりとこない

多分、仕事中に中近のレンズに目が合っているのでいきなり遠近にすると目が追いついてない、そんな感じです

二日ほど前からどうも後頭部が痛む

頭痛というより目の奥が痛いというかもっと後ろの後頭部の筋肉が痛い、そんな感じなんです

これは多分遠近をかけたときにすごく目に力が入っているためで、要するに目が疲れているんです

中近を使わずに朝からずっと遠近をかけていると案外なんともないのかもしれません

色々と工夫してみることにしましょう

 

プログラミングの方ですがデータベースを何にしようかと検討しています

今日届いた本は「Realm」と言うデータベースで、スマホのデータベースとしては今一番のもののようです

ただしインストールに一癖あっていちいちコマンドベースの作業が必要になります

まあこれぐらいは構わないんですけど、Macなんでコマンド作業はない方がエレガントですよね

今日はもう目が疲れているので何もしないで、明日はアーチェリーランドに行くので勉強は明日の夕方からですね

その頃には目の疲れも取れているでしょう

 

ちょっとプログラムを工夫してスクリーンショットを撮ってみました

赤い手のマークのところをタップしてドラッグすると十文字のマークが動いて指を離すと十文字と手のマークは消えて真ん中の丸だけがその位置に残り下の点数欄に点が入ります

1→2→3→Scoreと赤い選択状態が自動的に進みます

右側のコース番号の下の右矢印をタップすると次のコースになりまた1から順に点をつけられます

左右の青いボタンを押すとそれまでにつけた点と丸い矢の的中痕が次々と表示されます

普通は点数だけをノートにつけているのですが、的中痕がどうなっているかがわかると同じ点数でも良し悪しがあるので後から見たときに大変参考になります

この点数と的中痕の位置情報をデータベースに登録しておかないと、今のままではアプリを終了すると忘れてしまいます

これからが少し難しいところになると思いますが、難しいと思っていてもいつも意外と簡単にできてしまう事が多いので楽観しています

Realmデータベースがいい感じならこれに決定して突っ走りたいと思っています

まだまだ楽しめそうだ・・・


気をつけるようにしよう

2020-02-12 22:34:18 | 日記

こんばんは

 

久しぶりの雨です

しばらく続くそうです

お日様が射さないので今日は少し寒さを感じてエアコンのスイッチを入れましたが、明日は今日よりかなり暖かくなるそうで、体調に気をつけましょう

 

SwiftUIによるアーチェリーアプリ開発は、データの記憶にどのデータベースを使うか迷っています

iOS上で使われるデータベースは主に3つ

CoreData、SQLite、Realmです

CoreDataは難しそうだし重たいと言うことで却下

SQLiteはPythonでは簡単に実装できたんですが、どうもSwiftでは同じようにはできないみたいです

SQLiteをラップしたライブラリーが複数ありますがどうもイマイチ

SQLiteを直接使う方法も少し分かりかけてきたんですが面倒臭い

Realmについては未知の部分が多いのですが、独特の文法でSwiftとは相性がいいみたい

さっきアマゾンに「Realm入門」の本を注文しました

これ3年前の本ですが、まずこれで勉強してからですね

 

コロナウィルスによる肺炎はまだまだ収束には程遠いようです

マスクが全然手に入りません

みんなで買いあさって本当に必要な人の手に入らない状態です

最新の記事ではマスクは感染予防にはあまり効果がないとか

つまり感染者がマスクをしっかりとしている事が大切で、感染を恐れる人がマスクをしても「まあしないよりはマシ」と言う事らしいですね

それよりも手洗いが重要と言う事です

外でエスカレーターの手すりとかエレベーターのボタンとかドアノブとかを触った手で目や鼻を触るとかそちらの方がよほど危ないと言う事です

スマホの画面も不潔なので頻繁に拭く方がいいので、100均でスマホのクリーナーを買いました

一日一回でも拭いた方がいいですね

無意識に鼻糞をほじくる癖があるのでこれも危ない

気をつけるようにしよう