2019/02/09

定年までサポートアプリのアイコンを作成

 噴飯モノ(?)の定年までサポートアプリであるが、まだ開発中とはいえ、アイコンが無くてレーダーチャートみたいなアイコンで起動するのはもう嫌だ。。というわけで、勘亭流というのか、江戸文字というのか、正しくは分からないが、ぶっといフォントで定年の定だけを使ってアイコンを作ってみた。アイコンの作り方は、本によると、1536x1536 pixcelでまず作って、各サイズにリサイズするらしい。リサイズするサービスがあって、自分は、MakeAppIconというサービスサイトで変換した。変換するとメールで送られてくるので、開発中のプロジェクトの該当フォルダ(AppIcon.appiconset)にCopy&Pasteすればプロジェクトに組み込まれる。ビルドしてiPhoneに転送すると確認できる。左はXCodeでアイコンが組み込まれたところ。右は自分のiPhoneで表示させたところ。笑える。。

定年までサポートプログラムをGITに設定

 仕事ではSVNとかTracとか使ってるけど、設定してくれた人がいて、自分は利用させてもらっているだけだ。GitHubもソースを取ってくることはあるけど、自分でリポジトリをセットアップしたこともない。分からないだらけなのだが、、今作って居る、「定年までサポートプログラム」のレポジトリをGitHub作ってみた。GitHubとXCodeは同期させることができるようだけど、どうやったらいのかまだ分からない。。すくなくとも、アドバイスのテキストはGitHub上で管理して、更新したらアプリがダウンロードできるようにしたい。

定年までサポートプログラムのリポジトリ ->今は作っただけ
https://github.com/dune-geek/retire-support.git

何も設定せずXcodeでgitにコミットとかやったら、circleciのレポジトリにコミットされたようなのだが。。そうなのか!? circleciって無料?? よく分からん

XcodeではVersionControlが画面左の箱のような所で行うことが分かり、ここでGitHubの設定を行うことで、自分のリポジトリにアップすることができた。まだお試し中なので、just4learnとした。ここに今開発中のソースが上がっています。

https://github.com/dune-geek/just4learn

2019/02/03

iPhoneアプリ;定年までサポート(仮)

 曜日がSat等の英語表現になっていたのは、FormatterでLocaleをja_JPに指定していなかったためと分かった。修正したので、今は漢字の曜日になった。
 曜日を数値で取得して、switch/caseで曜日ごとにメッセージを出し分けるように実装した。7日経つとまた同じメッセージなのですぐに飽きるけど、まぁ無いよりはまし。各曜日に対応したメッセージを大量に用意しておいて該当する曜日の候補から乱数でメッセージを選択して表示するようにしたい。







■メモ
https://kiririmode.hatenablog.jp/entry/20160503/1462256139
macでemacsを使っていて、Ctrl+SPでイラっとなる件の対応策
->MarkSetになった。。感謝

2019/02/02

Swift Optional型とは

Optional型とは、nilの代入を許す型のこと。
// Optional Int
var optionalInt: Int? = 5
// 通常のInt
var int: Int = 5

 関数呼び出し等でOptional型を使えない場合は、型変換する。変換方法の一つとして、Forced Unwrappingと呼ばれるラップをはがす方法があり、var!  の様に変数に!を付けるとOptional型から普通型に型変換される。(T? 型から T型への型変換)。ただし、Forced Unwrappingを実行する際、変数値がnilの場合はExceptionが発生する。

Swift ガイドツアー
https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html

Swiftで2つの月日の間の年月、月、日、時間を計算する

 DateTimeの計算において、LocaleとかUTC/GMTとかいろいろな属性を正しく理解していないと、日付計算ができないのだが、、理解度20%ぐらいで、先人のサンプルをCopyして勤務日を計算するコードを作成した。勤務最終日までどれぐらいあるのか、年月、○ヶ月、○日、○時間でそれぞれ計算する。下記のコードの様に何度もdateComponents関数を呼ばないといけないのか?までは分かっておらず。。下記コードは土日・祝日を考慮しない、素の計算コード(実装前の参照コード)


-------------------------------------
let complete = "2020/10/31 17:30:00"   //  (例)勤務最終日

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat =  "yyyy/MM/dd HH:mm:ss"
let cmplDate = dateFormatter.date(from: complete)

let calendar = Calendar(identifier: .gregorian)
let today:Date = Date()

var components = calendar.dateComponents([.year, .month], from: today , to: cmplDate!)
print(String(components.year!) + "nen" + String(components.month!) + "gatu")

components = calendar.dateComponents([ .month], from: today , to: cmplDate!)
print(String(components.month!) + " mon")

components = calendar.dateComponents([ .day], from: today , to: cmplDate!)
print(String(components.day!) + " days")

components = calendar.dateComponents([ .hour], from: today , to: cmplDate!)
print(String(components.hour!) + " hours")

-------------------------------------
上記の日付計算ルーチンをベースに現在開発中の定年サポートアプリに営業日を表示するように組み込んだ。左の画面のように、定年までの月日、〇ケ月(ここまでは祝日、土日考慮なし)、営業日〇日、勤務時間〇時間を表示してくれる。

 営業日を正確に計算するには、1年365日に対して、土日を抜いて、祝日を抜いて、さらに、振替休日も計算して、、となるのだけど、非常に複雑なので、概算として7割で計算しています。また、労働時間も前記のだいたいの営業日に対して、1営業日を8時間で計算しています。。
 アプリが表示する日程を改めて眺めていると、意外と月が短いという印象。53か月か。。さらに、残りの営業日は1147日(多少誤差あり)となっている。仕事の目標として、1000日に向けてなんとか日々乗り越えたい。しかーし、1000日を切ると定年までの日の進みが段々と加速するような気も(それは良いことなのか悪い事なのか。。どっちだろうか)。。

 アプリ完成までに必要な作業は、、(1)読むとほっこりさせてくれるはずの一言メッセージを実装(WebAPIで取ってくる予定)、(2)最終勤務日を入力するUIを追加、(3)一言メッセージ用のサーバサービスを実装(GoogleSitesでサイトを立ち上げて、特定の記事で代用)、(4)アイコン等のビジュアルを整える。 といったところか。

■ご参考URL
本気&&本物の営業日計算Webページ
https://keisan.casio.jp/exec/system/1251167854

「2018年の年間休日日数は何日」より
https://jpnculture.net/nenkankyuujitu/

週休二日の公務員の場合、年間休日は123日らしい。1年間の勤務日数は242日となり、1年のうちで66%が営業日、34%が休みであると。

swiftでDate Timeを扱う

プログラミングで厄介な、DateTime、曜日、祝日等、Swiftでどう処理したらいいのかを調べる

先人の記事を見てみる。。
qiita 【Swift】Dateの王道 【日付】
https://qiita.com/rinov/items/bff12e9ea1251e895306

特にinclude等せず、test.swift等としてそのままビルドしたらエラーが出た

test.swift:3:17: error: use of unresolved identifier 'DateFormatter'
let formatter = DateFormatter()

ライブラリ等を使うためにまじないが必要では。。Swiftの標準ライブラリとか標準クラスどうなっているのかよくわからず。

同梱されているサンプルから、import Foundationが必要なようだった。
ソース (@rinov様提示のコード)
--------------------------------------------------
import Foundation
let formatter = DateFormatter()
formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "ydMMM", options: 0, locale: Locale(identifier: "ja_JP"))
print(formatter.string(from: Date()))
--------------------------------------------------
実行結果
2019年2月2日

日付のフォーマットは以下に従うらしい。自分は曜日を入れたいので、EEEを追加
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns

フォーマットとして、ydMMMEEEhm を指定
--------------------------------------------
formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "ydMMMEEEhm", options: 0, locale: Locale(identifier: "ja_JP"))
print(formatter.string(from: Date()))
-----------------------------------------
実行結果
2019年2月2日(Sat) AM11:24
曜日を漢字にしたいのだが、、それは今後の宿題ということで。

■参考URL
日付関連クラスのまとめ(Swift3)
https://qiita.com/eKushida/items/541a65800efe1ffc523f

Swiftで日付・時刻を取得・整形(format)する方法
https://swift.tecc0.com/?p=172
NSDate()を使っている

Windows上でSwiftを動かす

普段はWindows環境で作業をしていて、Mac OSはやっぱり使い慣れない。できたらWindows環境でSwiftを走らせたい。特にアルゴリズムがややこしい部分のプログラミングはストレスの少ないWindows上で行いたい。営業日計算とかの実装方法の確認だけなら、CLIでサンプルコード試作ー>ビルドー>テストのループを回す方が効率がいい。。
Windows上でもSwiftを走らせられる様で、Swift for Windowsというのを試してみる。

https://swiftforwindows.github.io/ からコンパイル環境をダウンロードできるようだ

あまりWindowsに固執せず、Linuxで手を打つというのもありかも知れない。
Linux版はSwift公式サイトからDL可能
https://swift.org/download/

PCではCygwin上でgcc等を使っているが、上記のWindows用Swift環境の場合、/usr/local/swiftにインストールすると、以下でコンパイルと実行が可能

コンパイル:
/usr/local/swift/bin/swiftc.exe Hello.swift
実行:
PATH=$PATH:/usr/local/swift/RuntimeEnv/
./Hello.exe

Hello.swiftは最初から同梱されている以下のシンプルなコード
$ cat Hello.swift
print("Hello")

ビルドするには以下のbuild.jsonが必要なようです
$ cat build.json
{
        "sfwbuild_version": "0.1",

        "executable_name": "Hello",
        "sources": [
                "Hello.swift"
        ]
}

バージョン等は以下
$ /usr/local/swift/bin/swift.exe  --version
Swift version 4.1.3 (swift-4.1.3+mingw.20181009)
Target: x86_64-w64-windows-gnu



作ろうとしているiPhoneアプリは、、定年までの毎日をサポートアプリ

 自分が勉強を兼ねて作ろうとしているiPhoneアプリは、定年までの残り日数(年、日、時間)を計算してくれるというもの(自分の場合定年まで約4年だが、毎日えらくしんどいので。。残り日数を見ながら、何とか残る日々(4年と〇ケ月(←正確に分かっておらず))を乗り切りたい)。さらに。。ほっこりする一言も添えてくれる(金曜ですね。お疲れ!とか)はず。ちょっと調べてみると、祝日を考慮した日数計算(営業日の計算)というのは非常にややこしいらしい。確かに、年によって祝日は変わるし、振替とかある?それも休日のうち?よくわからないけど。どこまで真剣に作りこむか?はよく考える必要がある。真剣に作るのはめちゃくちゃ大変だ。多分バグ出まくる。日数計算はだいたいで置いといて、今日の一言にこだわりたい。ポイントは同じメッセージを出さないようにして飽きない事と、多少は元気が出るのを期待したい。今日の一言はプログラムには内蔵させず、APIでサーバサービス等から取って来る予定。左がモックアップで、あと何日というのと、今日の一言が表示される。
 さらに、今日の一言には、利用者が登録した場合の備忘録も表示させたい。しかし、、API経由でGoogleカレンダーの記録を取ってくるのはOAuthでメチャクチャ大変だろう。。遊び半分だからいいけど、仕事でこんなアプリを作ることになったら大変だろうな。。