超お父さんの日記

日記とか雑談とか、スノーボードとか、サーフィンとか、たまに技術系とか。

Could not resolve com.android.tools.lint:lint-gradle:26.1.4.

久々にAndroidStudioでリリースビルドしようとしたら出てきたエラー。

ググってみた1番上に出てきたやつを見てみた。 stackoverflow.com けど、よく見てみたら、エラーの詳細内容が違っていて、自分のは

No cached version of com.android.tools.lint:lint-gradle:26.1.4 available for offline mode.  

となっていた。 これでググってみたところオフラインモードをやめろって回答を発見。 ru.stackoverflow.com たしかにNo cachedって言ってるしね。

で、自分のAndroidStudioの設定をみてみたところ、、Command-line Optionsにオフラインモードの指定はしてなかった・・・
また闇に・・・と思ったら、こんなところにオフラインモードのチェックボックスが。 f:id:hirokim412:20180831182211p:plain ここのチェックを外したら、ちゃんとビルドできましたとさ。

よくよく思い出してみると、昔ネットワークに繋がってない状態でビルドしようとして、ここにチェック入れたような気がする。

Swift4でclass_copyPropertyListでプロパティ名が取得できない?

今作っているアプリは、AWSのMoble Hubを使っている。 バックエンド側の開発をするまでもないけど、画像アップロードしておいたり、ユーザー認証とかDB(DynamoDB)とか使いたいなという時にもってこいのサービスだ。 説明はクラスメソッドさんの記事とかがわかりやすくて良い。(いつもお世話になっております。)

そんな中で、ちょっとハマったことを覚書。
Moble Hubはめっちゃ便利で、Moble Hubにあるサービスを使う設定すると、その設定に沿ったサンプルプロジェクトが自動生成されてダウンロードできる。
そのサンプルプロジェクトを参考に実装を進めていたのだが、DynamoDBでつまづいた。
自分のプロジェクトにコードを持ってきて実行しようとしたら、以下のエラーが発生した。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '_deleted is not a property of MyProject.Hoge.'

エラーの発生箇所を追っていくと、AWSMTLModel.mというクラスの以下のメソッドに使われている、class_copyPropertyListというメソッドでプロパティ名の一覧が取得できていないことが原因だった。

+ (void)enumeratePropertiesUsingBlock:(void (^)(objc_property_t property, BOOL *stop))block {
    Class cls = self;
    BOOL stop = NO;

    while (!stop && ![cls isEqual:AWSMTLModel.class]) {
        unsigned count = 0;
        objc_property_t *properties = class_copyPropertyList(cls, &count);

        cls = cls.superclass;
        if (properties == NULL) continue;

        @onExit {
            free(properties);
        };

        for (unsigned i = 0; i < count; i++) {
            block(properties[i], &stop);
            if (stop) break;
        }
    }
}

プロジェクトのターゲットでSwiftのバージョンを3.2にしたら、ちゃんと動いた。
けどSwift4で実装したい。と思って、調べたら以下ようにプロパティ一覧取得したいクラスの頭に@objcMembersをつけて解決。

@objcMembers
class Hoge: AWSDynamoDBObjectModel, AWSDynamoDBModeling {
    
    var _hogeId: String?
    var _hogeDate: String?
    
    class func dynamoDBTableName() -> String {

        return "hogehoge-mobilehub-1010453911-Reply"
    }
    
    class func hashKeyAttribute() -> String {

        return "_hogeId"
    }
    
    class func rangeKeyAttribute() -> String {

        return "_hogeDate"
    }
    
    override class func jsonKeyPathsByPropertyKey() -> [AnyHashable: Any] {
        return [
               "_hogeId" : "hogeId",
               "_hogeDate" : "hogeDate",
        ]
    }
}

参考) https://bugs.swift.org/browse/SR-5748

34歳で色々分岐点なので、ついでにブログも。。。

何年か前にブログ書こうと思い立って作ったのを思い出したので、見てみたら2年前の新婚旅行を最後に途絶えていた。

ついでに始めたブログだったし、だんだん会社に馴染んで行くにつれて書こうと思う日が無くなっていった。海外案件でちょいちょい出張いかせてもらったり、自社製品開発やらせてもらったりで結構忙しかったしね、という言い訳もしておく。 hirokim412.hatenablog.jp

3年前の初投稿からまた随分と環境が変わっていて、結婚して会社も変わって住む場所も変わっている。
去年の10月いっぱい、ほぼ3年働いた会社をやめて、以前崩壊した会社のメンバー2名が新たに建てた会社にジョインした。 崩壊した会社のメンバーといっても、社長含め役員陣と社員の対立が崩壊の原因であり、自分含め今の会社のメンバーは当時の社員だ。
崩壊した会社の社員、特にエンジニアメンバーは気が合う仲間が多く、今でも年に数回飲みに行っている。

そして人生初の在宅ワーク

自分の時間は確かに増えるし、打ち合わせも最小限で仕事に集中できるのだけど、家事をする量も増えた。というかほぼ家事は自分が担当だ。

住む場所はというと、東京都練馬区に住んでいたけど、仕事が在宅になるし、車も買いたいし、子供も欲しいしってことで、より広く安くを求めていたら埼玉県に来てしまった。

そんなこんなで、環境変わって約半年が過ぎようとしていて、このスタイルにも慣れて来たし、34歳になったし、春だし、新年度だし、足跡としてブログを書いてみた。
どの程度の頻度で書くかわらないけど、せっかく在宅なんだし、もうちょっと色々書こうかなぁ。

クロアチア・スロベニア 新婚旅行 8日目

朝5時に起きて、天気を確認した。

曇りだったので、朝日は見れないと判断して再度眠りについた。

 

今日はブレッド湖というか、この旅行最終日だ。

8時頃に朝食を済ませ、荷物をホテルに預けて最後の観光に出た。

ちなみにここのホテルの朝食が1番バリエーション豊かだった。

 

知り合いや旅行会社のオススメで入口がわかりにくいという絶景ポイントに向かう。

昨日は雨だったので、晴れるであろう今日にかけたのだ。

天気予報では夕方4時から晴れマークがあったが、実際には昼の12時くらいから晴れ間が見えていた。

 

入口がわかりにくいと聞いていたが、GoogleMAPで見てみると、絶景ポイントにカメラマークがついていたので、迷うことはなかった。

f:id:hirokim412:20160612183716p:image

獣道というか、普通に山道なので、本当に進んでいいのか不安にはなる。

 f:id:hirokim412:20160612183728j:image

登ること20分程すると、ほぼ垂直の階段が出てきた。

それを登りきったらゴールだった。

f:id:hirokim412:20160612183739j:image

普通に登山だったし、倒木を跨いだり、鎖場ではないが、金属のロープがある場所もあった。

お年寄りや小さい子供には厳しいと思う。

 

ゴールには、ひとつだけベンチがあって、座って絶景を眺めることができる。

まるで絵本とかに出てきそうな景色だ。

 f:id:hirokim412:20160612183750j:image

登山をしたのでお腹が空いた。

最後の優雅な食事をしにレストランに入った。

時間が2時を回っていたので、店内はガラガラだ。貸切でテラス席で湖を見ながら、この旅行最後のレストランでの食事。

この旅行で随分とナイフとフォークの使い方に慣れた。

f:id:hirokim412:20160612214711j:image

 

食後、空に青空がまた広がってきたので、写真を撮るために湖を一周することにしたのだけど、それが間違いだった。

17時半の迎えの車に合わせるために、半周はほぼ競歩のように歩く羽目に。

最後に足がパンパンになるくらい疲れてしまった。お陰で移動の車や飛行機では熟睡だったが。

 

リュブリャナ空港に着いてチェックインしようとするも、今までのようにチェックイン出来る機械は無く、並んでカウンターでチェックインしなければならなかった。

Eチケットなので、パスポートを見せるだけで滞り無く終わったが、変なこと聞かれやしないかと、少しドキドキした。

 

飛行機を待っている間、たまたまベンチで隣に座っていた日本の方に話しかけられた。

仕事で国際会議に出ていたらしい。

会議の場所を選んで狙ってヨーロッパ出張にきているとのこと、羨ましい。。

 

これにて新婚旅行終了。

最後の9日目はただの移動だ。

夢のような9日間だったなぁ。

夢だと言われれば、ああやっぱりねと信じることが出来るくらい、現実離れした世界にいた。

 

心から現実に戻りたくない。

クロアチア・スロベニア 新婚旅行 7日目

どのホテルの朝食も種類や数の違いはあれど、出てくるものは同じような感じだ。
パンがあって、スクランブルエッグにハムとチーズとソーセージ、ヨーグルトやフルーツ。
 
毎日、パンにケチャップをつけたスクランブルエッグとハムとチーズを挟んで食べている。
取り分ける皿が大きいので、ついつい大きさの感覚が狂って取りすぎてしまって、お腹が朝からパンパン。
 
朝8時にドライバーが迎えに来ると予定だ。
ホテルから駐車場を見下ろすと、見覚えのあるベンツが停まっていた。
昨日のドライバーと同じだった。
 
昨日と違う点としては女性がいる。
おかしいな、専用ドライバーで混乗とはなっていなかったはず。。
自己紹介を済ませ、車に乗り込む。
 
ザグレブからスロベニアブレッド湖まで2時間強かかる。
昨日と打って変わって助手席に座った女性と話が弾んでドライバーが楽しそうだ。
たまに軽くいちゃついてるんじゃないかくらいな感じだった。こりゃ、仕事ついでに彼女連れてきてデートも兼ねちゃうパターンか。
 
そんなやり取りを後部座席で見つつ、ブレッド湖に到着。
途中、激しい豪雨で今日の観光はもうダメかと思ったが、ブレッド湖に到着するとギリギリ雨は降っていなかった。
ホテルに荷物を預けると、ドライバーが車でブレッド城に連れて行ってくれた。
見て回るのは1時間で十分だと言われて、ホントに?と思いつつ従った。
昨日の買い物も1時間って言われたし、なんかこのドライバーせっかちなのかな。
f:id:hirokim412:20160612001627j:image
城は30分程度で見終わった。
中は歴史資料館的なものがあって、あとはワイナリーやお土産屋とカフェがある感じだ。
と、ここでまあまあ強めな雨が降ってきた。
悩んだけど、お土産屋で折り畳み傘を購入した。
英語でアイ・フィール・スロベニアと書かれている。日本に帰ったら誰かにお土産としてあげてしまおう。
 

1時間経ち、ドライバーと合流すると今度はブレッド湖に連れてってくれた。

そこでドライバーとのお別れ。彼女を乗せてザグレブに戻って行った。
なんか肩の力が抜けた気がした。
f:id:hirokim412:20160612001715j:image
ブレッド湖畔の店で、何やら有名なケーキがあるらしく、昼飯がてら店に入った。
ケーキは美味しかったが、結構甘くて自分は一口で満足した。
パスタとハンバーガーとビールとレモン水とケーキ、それぞれ1つずつ頼んでお会計が約40ユーロだった。
この店は観光地価格だった。
f:id:hirokim412:20160612001736j:image
f:id:hirokim412:20160612001746j:image
外は小雨が降り続いていたので、ホテルにチェックインして、そのまま昼寝した。
こういう自由が効くのが団体ガイド付き旅行とは違って良いところ。
夕方に起きて、雨がほとんど降っていなかったので、ブレッド湖を一周しつつ、夕食の店を探しに出た。
f:id:hirokim412:20160612001843j:image
トリップアドバイザーで比較的リーズナブルで美味しそうな店をチョイス。
一皿一皿が大きく、ワインも1リットルで11ユーロとかなりお買い得。
お店の人は安心感のあるお母さんって感じで落ち着けた。
ただミックスグリルを頼んだのだけど、肉が固かった。外国だから仕方ないのかな。
最終的なお会計は20ユーロほどだった。昼間の半額だ。
f:id:hirokim412:20160612001908j:image
 
明日が最終日。
天気予報を見るとブレッド湖はここ1週間以上ずっと雨で、奇跡的に明日だけ晴れ間が見えるという予報になっている。
晴れてくれ〜。

クロアチア・スロベニア 新婚旅行 6日目

昨日、プリトヴィッツェ国立公園の中は全て見ることが出来たので、今日はすぐにザグレブに行っても良いくらいだ。

朝食後、フロントの人に隣のホテルに泊まってるドライバーと連絡を取りたいと伝えると、電話してくれた。
するとドライバーがこっちに来てくれるとのこと。
自分達は出発の時間と場所を決めたかっただけなのに悪いなという気持ちだったが、直接話した方が話も早いし、まあいいかという感じだった。

ドライバーが来きて、自分達が11時半に出発したいと伝えると、何やら10時に出発しようぜ的なことを言っている。
どうやら、自分達が伝え間違えてドライバーは今すぐ出発するくらいの気持ちで来てしまったみたいだ。

なんとか1時間待ってもらって、その間に昨日歩かなかった所を少しだけ歩くことにした。

そしてザグレブに戻る。
旅程ではお土産にとショッピングモールに寄ることになっていた。
ドライバーはザグレブ近くの巨大ショッピングモールに連れて行ってくれた。
日本でいうイオンみたいなものだろう。
ここは若干安いが、後で入ったザグレブ市内のスーパーとあまり変わらなかった。

ザグレブのホテルに着くとドライバーはバーイと言って消えていった。
チェックインを済ませ、時間は13時過ぎだった。ザグレブの街を観光する。
f:id:hirokim412:20160611220908j:image
ザグレブの新市街と旧市街を見て回る。
それだけなら、そんなに大きくはなく数時間で回ることが出来る。
f:id:hirokim412:20160611220711j:image
f:id:hirokim412:20160611220731j:image
夕食はどうせならザグレブならではの物を食べたいと思い、Vinodolというカツレツとペカを食べれる店に行った。
カツはチーズが入っていて美味しかったし、ペカも牛?の肉が柔らかく焼かれていて、とても美味しかった。
f:id:hirokim412:20160611220931j:image
帰りにビールとツマミを買って帰る。
今日のホテル、ヤドランには冷蔵庫が無く、ちょっと残念だ。あと風呂は浴槽がないタイプでシャワーのみで結構狭い。
ホテルに戻ってお土産の整理。
f:id:hirokim412:20160611221023j:image

今日のドライバーが引続き明日も運転するのかは定かではないが、今日の別れ際には明日も的なことは言われなかったから人が変わるのかな。
昨日、今日で我々が英語出来なさすぎて、若干気まずかったから、変わってくれた方がいいな。。

そろそろ日本食が恋しくなってきた。

クロアチア・スロベニア 新婚旅行 5日目

眠い、眠すぎる。。
朝3時半に起床。
 
荷物を整えてフロントに行くと、10数名の客がソファーでバナナとか食べてる。
きっと自分らと同じで空港に向かうのだと思われる。
 
チェックアウトして、ボケっと待っていると4時半くらいに車が2台到着した。
10数名の人たちが次々と荷物を運び入れている。自分たちもこの車に乗るのだろうか。。分からない。
運転手らしき人物に話しかけて、ホテルから渡された集合時間のメールが印刷された紙を見せる。
6時25分のザグレブ行きの飛行機に乗るのか?と聞かれてYesと答えると、どっちの車でも良いから乗れと言われた。
この車が自分達の迎えだったのか定かではないが、乗れと言われたので乗る。
空港に行くのは間違いない。
 
車内で隣に座ったおじいさんにどこに行くのか聞かれて、プリトヴィッツェって言ったけど聞き取ってもらえなかった。
f:id:hirokim412:20160611205304j:image
空港に到着して入り口の入ったすぐのところにチェックインをするための機械が置いてある。
予約番号を入力してなんとかチェックインを済ませた。
 
ドブロブニク空港、国内線だからなのか分からないが、ゲート前の待合場所がとても狭かった。
f:id:hirokim412:20160611205319j:image
ザグレブには1時間程度で着く。時間だけで考えると羽田空港から千歳空港くらいか。
簡単な軽食が出た。朝食を食べていなかったから丁度よかった。
 
ザグレブに到着して、荷物受け取った後の出口で直ぐにドライバーと合流することが出来た。
そこまでトイレが無く、ドライバーにトイレに行きたいことを伝えると、今は混んでるし、ここのトイレは汚いから、少し車で行ったところにしようと言われた。
 
車に案内されると、そこにはベンツがあった。
自分達2人のためにベンツで専属ドライバーがいる。なんか贅沢な気持ちがしてきた。
f:id:hirokim412:20160611210102j:image
約2時間半のドライブを経てプリトヴィッツェ国立公園に到着。時間は朝の10時過ぎ。
ここまで運転してくれたドライバーもプリトヴィッツェの別のホテルに泊まり、明日のザグレブまでの運転をしてくれる予定となっているのだけど、ここで問題が起きる。
 
携帯電話の番号を交換しようとしたのだけど、うまく出来ずに失敗に終わってしまったのだ。
そのためドライバーがホテルのフロントに自分の電話番号を伝えて、フロントの人は快くノープロブレムを連呼していたので、とりあえず良いかと思っていたら、明日の時間や場所を決めずにドライバーは去ってしまった。
明日の午前中までの何処かで、フロントの人に言ってドライバーと連絡を取り、集合時間と場所を決めなければならなくなった。
 
一旦その問題は置いておいて、荷物をホテルに預けてプリトヴィッツェ国立公園を見学することにする。
チケットは1人110クーナ。
ほとんどチケットを見られることはないが、湖を船に乗るときだけチケットにスタンプを押された。
f:id:hirokim412:20160611205742j:image
ここは湖だらけの水の都という感じで、上から下まで幾つもの湖を色んなところから流れ出ていて、なんとも綺麗な景色がたくさんあった。
f:id:hirokim412:20160611205559j:image
日帰りではないので時間はたっぷりある。
いくつか見学コースがある中で、上湖群からスタートし、下湖群まで全て見尽くす5時間フルコースで見て回った。
f:id:hirokim412:20160611205841j:image
f:id:hirokim412:20160611205908j:image
11時過ぎに歩き始め、ゴール地点にたどり着いたのが16時過ぎ。
綺麗な水の中にマス?が必ず沢山いるのだけど、今日の夜は近くのレストランの有名なマスのグリルを食べることにしていた所為もあって、だんだん美味しそうに見えてきた。
f:id:hirokim412:20160611205946j:image
平日ということもあってか、夜のレストランは空いていて、お目当のマスのグリルを美味しくいただいた。
このマスはさっきまで見ていたとこにいたマスだよね、きっと。
f:id:hirokim412:20160611210001j:image
 
明日はちゃんと集合場所と時間を聞き出さないと。。。