研究や趣味やらあれこれ

日々のあれこれをあれ

アプリ開発 part.0.5 シングルトン?

またしてもお久しぶり

やることが多いと必須項目以外はどうも疎かになってしまう…

アプリは依然開発中、で作ってる途中で知らないことをメモしておこうと思った次第

シングルトン

なんやそれ

今回シングルトンを使用したのは、様々な情報をプロパティに保存するクラス

この時問題になるのが、インスタンスが複数作成されるとインスタンス間で情報に齟齬が発生してしまうかも…ということ

そこでシングルトンの実装

通常

var instance = SomeClass()

instance.someMethod()

て感じでクラスのインスタンスを作成して、そのインスタンスを経由して機能を使用するけど、シングルトンを利用すると

public class SomeClass {

     static let sharedInstance = SomeClass()

     public func someMethod( ... 

}

 

var instance = SomeClass.sharedInstance

instance.someMethod( ... )

みたいにかけるねってお話

アプリ開発 part.0 問題を決める!

さてさてお久しぶり

 

研究がまあまあめどが付いたので、念願のアプリ開発へ

 

インターンまでに制作物提出できるかなあ

 

とにかく何もやったことないので、何か簡単なものを…

 

なんてやってたら時間もやる気も出ないので、目標というか作りたいものを決めてしまおう

 

まず、ゲームを作るか日常で役立つようなアプリを作るか(何か呼称あるのかな)

 

まあゲームはないな笑

 

最終的には作りたいけど、今は時間がない…

 

となると生活の中で役立つようなアプリを作っていくわけだが、やはりこういう時に役立つのは、生活していて生じる課題・問題だと思う

 

課題・問題を解決するようなアプリを開発すれば需要があるからね

 

こういうのをソリューションっていうのかな、規模はかなり小さいけど

 

ということで問題探しだが…アプリを開発したいみたいなことをぼやいてたら先輩がアイデアを投下してくださった

 

ありがたや、で問題がこち

 

問題:ふと外食がしたくなった時、どこに行こうか迷う

 

あー、すごいわかる

 

いつも友達と飯行こうぜってなった時、どこいく?でグダるもん

 

うちのサー長もサークル後の飯でめっちゃ迷って時間なくなってるもん

 

ということで問題決定

 

ではどう解決していくか?

 

どこいく?で結局一度行ったことがある飯屋がほとんどであることを考えると、

 

「飯屋に行った時にその情報をメモする」ことで解決するのではないだろうか

 

メモするのは、位置、ジャンル、評価、etc…

 

これなら、ここから近い飯屋を検索できるし、うまかった飯屋も検索できる

 

発展的には、SNSへの投稿で共有したり、サーバーを立てて共有したり…

 

個人開発なのでサーバーまではいかないと思うが、SNSでの共有は面白そう

 

 

 

これを見た人はきっと、それホット○ッパーでええやん、と思うがあっちは多分知らない飯屋を見つけたい人用なので、まあ用途は変わってくるのではないかなーと

 

自分の評価で検索できるのがいいと思う

 

 

 

まずはiOSのみで開発ですな

 

アプリのなんとなくの作り方はわかったけど、まだ各フレームワークの使い方等全く知らないので、

 

そうだな、まずばGPSから使えるようになろうと思う

 

 

P.S. 最近コーヒーでお腹を下す体質と知って悲しい

GeekTool Macでも壁紙をカスタマイズ!動画編

 少し長ったらしかったので目次

なんとなく…

 

とつぜんですが、僕はあまりカスタマイズしない人です

 

たとえば、Macbook

 

みんなあれにシール貼りたがるよね笑

 

個人的には、シールなんてぼろくなったり剥がれたりして汚くなるのだから貼るのはちょっと…という感じです

 

つまり、のちのち外観を損なってしまいそうなことはしたくないのです

 

内部的なものは大歓迎です。ソフトウエアとかプラグインとか

 

ということで、壁紙だけでもカスタマイズしてやろうと思った次第

 

"GeekTool"というものに出会いました

 

どんなの?

 

これは壁紙を変える、と言うよりデスクトップにウィジットを置けるようになるみたいな感じ?(ぼくの知識で表現するなら)

 

つまりMacで設定した壁紙は表示されたままで、その上から全画面表示の画像やら動画やらを表示させるってことです

 

もっと詳しく言うと、範囲を指定してそのなかでHTMLやシェルを動かすといった感じです。しかもいくつも表示できます

 

画像に関しては直接範囲の中に表示できます(最も1枚だけの画像ならMacの壁紙で設定すればいいが)

 

先程も述べたように、指定範囲内でいくつも表示できるので画像の上にシェルで表示したカレンダー、のさらに上に画像という風にすると立体感のあるものも作ることができます

 

がー、僕にはシェルを使う技能がない上に今回は動画を動かしたいだけなので、HTMLを使った動画をデスクトップに表示させておく方法を紹介します

 

やってみた

 

1.GeekTool起動。

f:id:csl-mc:20170526012421p:plain

 

2."Web"のアイコンをデスクトップにドラック&ドロップ

f:id:csl-mc:20170526012519p:plain

 

ここで何やら設定画面らしきものと、四角い枠が表示されました

 

設定画面のほうは、HTMLを表示させる場所、大きさ、拡大倍率などを変更できるものです。こちらで(もしくは枠を直接動かして)位置調整します

 

枠は実際にHTMLが表示される場所のプレビューです

 

3.HTMLをかきかき

htmlファイルと同フォルダ内にvideoフォルダを作成し、その中に再生したい動画sample.mp4がある場合です

 

<video autoplay loop src="./video/sample.mp4"></video>

 

たったこれだけ…

 

htmlファイルは適当な名前で保存

 

4.使うHTMLファイルを指定

ここも簡単。2の図の設定画面のAdressのURLの欄に使いたいhtmlファイルをドラック&ドロップするだけでパスを挿入してくれます

 

この時点で枠内に動画のプレビューが現れます

 

枠の位置や大きさ、倍率をうまく調整してかっこよすな感じにして

 

5.さいごに

f:id:csl-mc:20170526014242p:plain

 

閉じる前にShow in menu bar にチェックを入れておくとどこからでもGeekToolを終了できるようになります

 

閉じるボタンを押すと上の図のような警告が出ます

 

ここでNoを選択して終わりです

 

 

 

これですこーーーーーーし、おしゃんなマカーやで

yukicoder No.5 数字のブロック

区切りにするつもりのNo.5

 

N個のそれぞれ高さ1横幅Wi(i:1->N)のブロックがあって、高さ1の長さLの箱に最大何個入れられるかという問題

 

No.4はこの問題で、ちょうどLになるときはあるか?という時だったのでちょっといじってできた

 

github.com

 

特に有りませぬ。★1だしね

yukicoder No.4 おもりと天秤

さてNo4

 

それぞれ重さのわかるおもりN個があり、それらすべてを天秤にのせたときうまく水平にできるおもりの置き方があるかどうか

 

github.com

 

はいWA

 

重い順に天秤が軽い方へ載せていったけど…これだと

 

Left{10, 3, 3, 3} Right{9, 5, 5}

 

みたいとき見つけられてなかった

 

あとからだと気づくんだけどね笑

 

 

こういう問題ってシミュレートして結果うまくいった、いかなかったっていう方法はだめなんだなと気づいた

 

素因数ゲームのときもそうだったけど、答えを置き換えなきゃ…

 

今回は、

両方のおもさがおなじになる割当があればおっけー

全体の半分の重さを作ることのできる割当があればおっけー!

 

 

github.com

 

TLE…だと?

 

テストケースコピってローカルで試してみたけどなぜかchallenge8だけ実行が終了しない…

 

そもそも無限ループになるような書き方してないのになぁ…

 

やっぱりなれない再帰を使うとうまくいかない

 

 

先輩に相談してみたところ、メモ化再帰ならうまくいくのでは、とのこと

 

…が、ダメ!!

 

そもそもの無限ループっぽい

 

悔しいけどカンニング

 

やっぱりDPなのかぁ。DP大人気!考えは良かったっぽい

 

わかってきたのは、ある答えを追い求めるよりも、考えうる答えをリスト化した後に答えがあるかを調べるのがいいのかな?

 

github.com

 

ようやくAC

 

 

 

研究も忙しくなってきたし、5までやってこっちは一段落しよう

 

 

yukicoder No.3 ビットすごろく

★2だ!やった簡単!

 

と思っていた時期がぼくにもありました。

 

と言うのはさておき、No.3

 

N個マスがあるすごろくで、Nマス目がゴールとなっている。1マス目がスタートで、自分の今いるマスの番号を2進数で見たときに1ビットの数だけ進むまたは戻る事ができる。ただし1未満のマス、N+1以上のマスには移動できない。このとき、何回の移動でゴールすることができるか、またはできないか

 

とりあえずWA(あたりまえのように)

 

github.com

 

よく考えたら、途中で戻る場合を考えてないことに気づいて修正

 

github.com

 

なんや、ちょろいやん

 

★2なら1WAでなんとかしたい…願わくば0…

 

 

 

うまくいって嬉しくなってデバッグコードまで一緒に提出してREなったのは秘密

 

 

これからの世界?

昨日読んだ雑誌で人工知能について取り上げられていたのでそれを読んで思ったことをつらつら

 

研究していないことについて述べてもつまらんので、一般のぼくらが使えるようになる技術について覚えていることを

 

  1. 30年後の人の職業の半分がAIで代替可能?
  2. これからはデジタルではなくアナログへ

 

まず、1.について。まあ就職していないぼくが語るのもあれですが、まじか。と

 

どうやら、現在の試算でこの結果が出ているそうな

 

もちろんだがどの職業もまんべんなく5割カットというわけではなくほとんど持っていかれるもの、ほとんど取って代わらないものがあるようだ

 

具体的には、経理事務員、公共交通機関運転士、各種清掃員などが99%以上は代替可能

 

医師・カウンセラー、ゲームクリエーター、各種デザイナーなどは代替率1%未満らしい

 

確かに、現在でさえ車や電車の自動運転があるのだから高い代替可能率のものはそうなっても仕方ないのかな、と思った

 

けど医師については現在カルテから病名を確定させる人工知能も出てきているのに代替できないのだろうかとは不思議に思った

 

リエーターが残るという試算が出ているのは少し嬉しかった笑

 

 

次に2.について

 

デジタルからアナログへ?なんで時代逆行してんの!と思うかもしれないが時代は進んでいる

 

これは、インターネットをパソコン同士の通信だけにつかうのではなく、身の回りの普段手にとって使うようなものにまで適用させよう!という考えらしい

 

この考えをIoT(Internet of Things)というんだと

 

たとえば、植木鉢

 

植木鉢にネットがつながれば、スマホから土の乾き具合、栄養状態が管理できるようになる、といった具合だ

 

つまり、万物の声が聞けるようになる…と

 

こんな厨二バンザイ技術だけど普通に整備してみたい

 

家のあらゆるものをIoT化してスマホで管理できるアプリを作ってみたい…

 

 

 

普段雑誌なんて読まないけどこういう技術紹介本は大好き