[Swift] 72 フォントサイズの自動調整

[Mac M2 Pro 12CPU, Sonoma 14.3.1]

watchOSアプリでフォントサイズを自動調整する場合は、lineLimitモディファイアやminimumScaleFactorモディファイアを使用します。

HStack(spacing:4){
    Text("White Background")
        .font(.body)
        .frame(maxWidth: .infinity, alignment: .leading)
        .lineLimit(1)
        .minimumScaleFactor(0.8)
    Spacer()
    Toggle(isOn: $whiteBack) {
        Text("")
    }
        .labelsHidden()
        .onChange(of: whiteBack) { newValue in
            defaults?.set(newValue, forKey: whiteBackKey)
        }
}

[Swift] 71 条件演算子を使ったリファクタリング

[Mac M2 Pro 12CPU, Sonoma 14.3.1]

SwiftUIアプリでトグルボタン2つと言語設定で分岐させたif文がメンテ不能な程にややこしくなったため、条件演算子を使ってリファクタリングしました。

条件 ? 真の場合の値 : 偽の場合の値

Clangではあり得なかったことですが、Xcodeでややこしいコードを書くと根を上げてエラーになりリファクタリングを強制されます。

[整理前]

VStack (spacing: -6){
    if bezelDisplay {
        if !coloredCMP {
            if languageCode!.contains("ja") {
                Text(getFormattedWeekday(entry.date).prefix(2))
                    .font(.system(size: 15))
                    .bold()
                    .foregroundColor(Color(hex:colorCircular1Hex))
                    .containerBackground(for: .widget){
                        Color.blue
                    }
                    .widgetLabel {
                        Text(getYear(entry.date) + " " + getFormattedYear(entry.date))
                            .font(.system(size: 20))
                    }
            } else {
                Text(getFormattedWeekday(entry.date).prefix(2))
                    .font(.system(size: 15))
                    .bold()
                    .foregroundColor(Color(hex:colorCircular1Hex))
                    .containerBackground(for: .widget){
                        Color.blue
                    }
                    .widgetLabel {
                        Text(getYear(entry.date))
                            .font(.system(size: 20))
                    }
            }
        } else {

<以下略>

[整理後]

VStack (spacing: -6){
    let fontSize: Font = coloredCMP ? .system(size: 18) : .body
    let yearText: String = bezelDisplay ? (languageCode!.contains("ja") ? getYear(entry.date) + " " + getFormattedYear(entry.date) : getYear(entry.date)) : ""

    Text(getFormattedWeekday(entry.date))
        .font(fontSize)
        .bold()
        .foregroundColor(Color(hex: colorCircular1Hex))
        .containerBackground(for: .widget) {
            Color.blue
        }
        .padding(.vertical, 2)
        .widgetLabel {
            Text(yearText)
                .font(.system(size: 20))
        }
        
    Text(getDay(entry.date))
        .font(.system(size: 20))
        .bold()
        .foregroundColor(Color(hex:colorCircular3Hex))
        .containerBackground(for: .widget){
            Color.blue
        }
}

[C++] 373 ChatAIアプリの製作 その51 LLMの序列変更 Perplexity API

[Mac M2 Pro 12CPU, Sonoma 14.3.1, clang++ 15.0.0]

Perplexity APIを使うことで最新情報も取得できるようになったので、第1選択LLMに昇格させました。

間違った情報が混ざっていることもありますが、ラフな情報収集としてはまずまずかと思います。

24/05/17追記
Perplexity APIは回答の言語が不安定(日本語 or 英語)なので、第1選択LLMをgtp-4oに戻しました。Webサービス(無料 or Pro)で使う方が良さそうです。

[C++] 372 ChatAIアプリの製作 その50 gpt-4oとPerplexity APIの導入

[Mac M2 Pro 12CPU, Sonoma 14.3.1, clang++ 15.0.0]

5月13日に発表されたgpt-4oを早速導入しました。Perplexity APIも導入しました。

gpt-4oについてはこれから検証していきます。

まず驚いたのがPerplexity API(llama-3-sonar-large-32k-online)のネット検索能力です。年度、日付などはいい加減ですが、プレミアリーグの最新データを取得してくれました。順位、勝敗、得失点は正確でした。

ただしPerplexity APIはgptのようにあまり行間を読んでくれないため、くどくどしくプロンプトを書かないと意図に沿った回答が得られないケースがあります。

またsystemで日本語で回答するように指示しても、英語で返す方が多かったりします。なので最初のプロンプトでも日本語指定のテンプレを自動追記するようにしました。それでも頑なに英語で返すことがあります。

アプリに登録しているLLM一覧(左上のプルダウンメニュー)