2025年9月24日 星期三

Swift storyboard for FitAutoTest 雜記

info.plist:

看是Ordinary.storyboard 還是 TabView.storyboard ?

在info.plist:

Main storyboard file base name (macOS): Ordinary
則是Ordinary

==========================================

實際在跑的<project_name>_<station_name>.plist

以branch B495_Pizza為例:

PlistHelper.swift:

func getStationProjectName() -> String {

        return "\(self.getProjectName())_\(self.getStationName())"

}


B44445_QT2Flow.swift:

SAP109_MBFlow.swift:

ConcurrentFlow.swift:

...

let stationProjectName = self._plistHelper!.getStationProjectName()

let testList = TestListFactory.getTestList(stationProjectName: stationProjectName)

...


TestListFactory.swift:

class TestListFactory {

    static func getTestList(stationProjectName: String) -> ITestList? {

        switch stationProjectName {

        case "B444445_QT2":

            return B444445_QT2List()

        ...

        case "B495_Pizza":

            return B495_PizzaList()

        ...

        case "B499_Pizza":

            return B499_PizzaList()

        case "Test_Pizza": // Temp 20250219

            return B495_PizzaList()

        default:

            return nil

        }

    }

}

==========================================

FitAutoTest, 找出程式GUI的start,

Ordinary.storyboard點兩下,

Start Btn0 -> Show the Connections inspector


Referencing Outlets

看到叫做startBtn0


Sent Actions

看到Ordinary Controller

dutStart0


OrdinaryController.swift:

@IBAction func dutStart0(_ sender: Any) {

        super.handleStartBtnClick(dutIndex: 0)

    }


BaseViewController.swift:

...

self.startBtnList = [startBtn0, startBtn1, startBtn2, startBtn3]


func handleStartBtnClick(dutIndex: Int){

    ...

     if self.setUIAfterStart(dutIndex: dutIndex, isAlarm: true) {

            ...

            self.startBtnList[dutIndex].isEnabled = false

            self._testflow!.testStart(startTime: startTime, allDutIndexSnMap: [dutIndex: self.snTextFieldList[dutIndex].stringValue])

            ..

    }

}


ITestFlow.swift:

protocol ITestFlow {

    ...

    func testStart(startTime: Date, allDutIndexSnMap: Dictionary<Int, String>) -> ()

}


B444445_QT2Flow.swift:

class B444445_QT2Flow : ITestFlow {

    ...

    func testStart(startTime: Date, allDutIndexSnMap: Dictionary<Int, String>) {

        ...

         for i in 0...plistTestItems.count - 1 {

            let pItem = plistTestItems[i]

            

            //add into DispatchGroup

            queue.async(group: group) {

                

                let eachfunc = testList!.testItemScript[pItem.Script]

                if eachfunc != nil {

                    ...

                    var resultItem = eachfunc!(container)

                    ...

    }

}

2025年8月7日 星期四

大杯無鹽

關羽跟張飛都掛了

劉備找孔明訴苦 劉備:「雲長魂歸故里,如今三弟也溘然長逝,真乃大悲啊」 孔明:「甜度?」

劉備:「大悲無言」

孔明:「我是問甜度,不是加不加鹽…」

2024年8月21日 星期三

Codewars: The Baum-Sweet sequence

這題列在7 kyu,我覺得有點難度,應該有6 kyu的程度了。

這題有數學題的感覺,我因為害怕TLE,加上我有感冒,

因此是直接問ChatGPT 4o怎麼解決,

沒想到一開始,ChatGPT是提供TLE的方法,

我再問ChatGPT要如何加快,

才給我夠快的方法,

看了ChatGPT的方法,覺得還算是基本的方法,

不用去想太特別的方法,

大家如有興趣,可以挑戰看看。

Problem: https://www.codewars.com/kata/5d2659626c7aec0022cb8006/lua

2024年8月8日 星期四

我做的遊戲

Star Pilot:

程式及腳本製作(不含素材)

遊戲類型:AVG
主要素材來源:HAL MIDI, 女の子立ち絵, AI繪圖
對應機種:win7/winxp?/vista/MAC?/Linux
語種:繁体中文
推薦年齡:全年齡
工作天數:約一週
AVG內容:模擬
遊戲時間預估:15~30 分鐘
開發工具:Ren'Py 6.12.1        "Human Factor"

Death版 遊戲截圖:




遊戲截圖:




載點1:
載點2 (For Windows, Linux? ):

下載說明:
以下連結是OneDrive的連結,檔名需要自己選,如Windows的話,選Star Pilot-1.0-pc.zip的檔案下載,即可遊玩。MAC(Star Pilot-1.0-mac.zip)和Windows XP 下沒測過,所以對應機種那邊打?號,不過應該也是可以遊玩。遊戲採用大量隨機選擇,帶給大家每次都不同的遊玩經驗,目前的難度算簡單,大約90%以上的人都可輕鬆全破,而Death版難度算超超難,不S/L應該無法全破。如對遊戲有什麼bug或建議,都可回覆告訴我。

Lean 4 極簡教學 (Using VS Code on macOS)

 1. Install Lean Environment: https://lean-lang.org/install/ 試著完Step one, two, three 2. 在VS code下,建一新的project: 取名Hello_World 3. 嘗試執行Main.lea...