發表文章

人生好難

圖片
要說古代人要中科舉,可是真的很難,要讀一大堆八股文,重點是一個身心處在一個極度想發財的考生上,怎麼樣才能寫出正直不阿的文章來贏得科舉考試? 從醫是一個好選擇,但從醫如果不是有個有錢的老爸,每天為五斗米折腰,也無法鍛鍊醫術。 所以古代人要成功是非常難的一件事,資訊不發達,偷搶拐騙變成唯一的捷徑。官員要透過賄賂貪污才能發財,從上到下都是一個樣子,不貪就沒法維持生活,當官的要花的錢可多了。 人生好難。 現代人也不要覺得古代人麼都這個樣子?現代人也是從小被考試壓著跑,長大後為了生活費也是工作到沒日沒夜,夢想也無法去實現。 最近也是被工作壓的喘不過氣,捷運文湖線在上班時段又出錯停擺,遲到進公司的我,看到同事都沒遲到,一問之下才知道他們都開車,不搭捷運的,只有我這窮人才搭捷運… 最近公司的專案要用到flutter,正好是我要發展的技能。 但是卻遇到一堆紅字問題,無法正常build. 突然之間覺得… 這不正好跟人生一樣? 總是有處理不完的問題? ---- 提醒大家, flutter sdk不會自己升級,要自己打flutter upgrade. C:\>flutter doctor Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, 2.10.4, on Microsoft Windows [Version 10.0.22000.978], locale zh-TW) [√] Android toolchain - develop for Android devices (Android SDK version 33.0.0) [√] Chrome - develop for the web [X] Visual Studio - develop for Windows     X Visual Studio not installed; this is necessary for Windows development.       Download at https://visualstudio.microsoft.com/downloads/.       Please install the "Desktop

來看看小米寵物飲水器等新品

圖片
小米的產品真是便宜又大碗,cp值超高. 當然,小米都是先在中國大陸市場推出後,在台灣才推出,所以產品都已經過數萬人用過後,功能等都經過驗證, 不過這樣也害慘了其他相關產品的廠商,完全被壓著打, 若產品售價一旦高過同級小米產品,馬上就無人問津. 比如說小米手錶,Xiaomi Watch S1 Active 馬上就打敗Garmin 同級智慧錶,而且小米做的還比對手更好,舉凡外型,重量,功能. 像上面的平板,就是可以打敗Samsung, microsoft Surface, 價格上面足足便宜一大截. 推出新品的速度也快,上面是溫度計,一代還是簡易溫度計,二代已經變時鐘了. 價格也是非常有競爭力. 小米12手機卻是一大敗筆,價位開始變超貴20000以上,這價位等級讓小米使用者退卻. 可見銷售量一定不好,太貴了.不是品質不好. 小米手機高檔價位,通常在15000-18000新台幣之間,超過就.... 耳機也是,便宜又大碗,價格足足是蘋果airpods的一半,但品質卻非常好.

Kotlin: @JvmStatic and Kotlin Data Types

這幾天面試真的都是被打臉, 有面試官問我Kotlin的變數基本型態有那些,當下我答得不好. 像這種基本型態的問題.... 都需要隨時複習一次. Kotlin has the following basic data types: 1. Numbers – Byte, Short, Int, Long, Float, Double 2. Boolean – True, false 3. Characters: Char 4. Arrays // val numbers = IntArray(5) 5. Strings Type Size Range Byte 8 bits -128 to 127 Short 16 bits -32,768 to 32,767 Int 32 bits -2,147,483,648 to 2,147,483,647 Long 64 bits -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 Every number type has the following conversion functions: toByte(): Byte toShort(): Short toInt(): Int toLong(): Long toFloat(): Float toDouble(): Double toChar(): Char fun main() { val x:Long = 23_334 val y:Int = x.toInt() println(x) println(y) } 基本上面試官問這種問題,實在不恰當,這種東西是屬於 reference 性質, 就算背的苦瓜爛熟,又有何用?  ---- char: fun main() { for (c in 'a'..'k') print("$c ") println() for (c in 'k' downTo 'a') print("$c ") } . ------ @JvmStatic fun calcute_total_ele

Kotlin: Convert Java to Kotlin issue

java cooperation with korlin: Kotlin最後也還是會轉換成java. 所以一個專案裡面有java有kotlin是正常的事 . 兩者可以互相工作正常. 且android studio有提供一個功能,能把java檔案轉成Kotlon. ----- 注意事項與小故事: 轉換一家新工作,跟convert java to kotlin一樣,會有很多未預期的事發生. 比如說幾年前我曾經到一家千x淨水公司,賣飲水器的公司上班, 那次新工作經歷給我的觀感就非常不好. 那時我很努力寫android app,甚至還做出一套檢測BLE狀態的工具app. 我超努力的,每天都做到很累, 結果那單位主管有一次把我叫到會議室,突然就說要安排寫ios的engineer當我主管,要在我上面, 我當然拒絕,因為那位ios engineer個性古怪,平常都不跟人溝通的.能力也普普. 我拒絕後,他就跟我說你就自己離職吧.做到這周. 然後就被迫離職了.然後他們很扯的的是不給資遣費,叫我自願離職. 後來我才知道,安排新主管只是他們設的一個陷阱, 我答應不答應都是一個坑. 而且那主管也知道我不會答應的, 利用這逼迫我離職. 然後他們馬上就花錢請另一個工程師. 這也讓我知道我們工程師非常不受尊重, 努力只是白費,被糟蹋了. 當我們選擇新創公司工作就是這樣,工作很容易不保,有時不是自己的問題, 遇到不好的主管或同事都是家常便飯. 轉換java到kotlin也是一樣, 常常??沒自動加上,執行時app就自主當機了. 轉換完後的kotlin非常不可信,需要再三檢查一遍.  ----- Convert Java to Kotlin With a Java file open in the editor,  go to main menu and select Code | Convert Java File to Kotlin File (or press Ctrl+Alt+Shift+K  ) ---- 很方便快速,但當Java轉換Kotlin 後,  我就發生執行app發生error:   Caused by: java.lang.ClassNotFoundException: Didn't find class  但這個file是之前從java 轉換到kotlin. 很神奇

Kotlin: View Binding

最近工作有點不如意阿,壓力太大,總是遇到不好的人... 嘆~ Android app一般情況下的UI component :Button,textview...,使用前須透過 : (最新方法:) developer - View Binding https://developer.android.com/topic/libraries/view-binding (舊式,已可以全部改用view binding.) ButterKnife https://github.com/JakeWharton/butterknife (原始方法,若程式元件不多,可直接用這方法取得ui元件) findViewById https://developer.android.com/reference/android/view/View#findViewById(int) < Button     android: id= "@+id/button_submit"     android: src= "@drawable/image1"     android: layout_width= "wrap_content"     android: layout_height= "wrap_content" /> var btn_submit = findViewById(R.id.button_submit) as Button 或是: private lateinit var textView : TextView //in onCreate() textView = findViewById(R.id.textView) 這樣的宣告才可使用,否則未宣告就使用會導致直接app crash. 若是有超過10個以上的UI元件,程式碼就變成非常繁瑣,有一大部分都在寫這重複的code,所以就有view-binding的出現. ( In most cases, view binding replaces  findViewById . ) ---- View-Binding: https://developer.android.com/topic/libraries/view-binding  you

Kotlin (5): Coroutines

圖片
學習Kotlin最重要的項目,就是Coroutines. 這可是之前Java所沒有的,Java的Thread 不好用,這個coroutines才是適合非同步領域的東西. Coroutines 這個單字是由兩個英文單字合併而成的,分別是 cooperation + routine.用來做非同步和非阻塞任務.意思就是要各個子任務程協作運行的意思,所以明白了它被創造出來是要解決異步問題的。 Kotlin的協程完美復刻了Go語言的協程設計模式( 作用域/channel/select), 將作用域用對象分類; 可以更好地控制作用域生命週期; await模式(類似JavaScript的異步任務解決方案) Kotlin參考RxJava響應式框架創造出Flow 使用協程開始就不需要考慮線程的問題, 只需要在不同場景使用不同的調度器就好 github:  https://github.com/Kotlin/kotlinx.coroutines kotlin home:  https://kotlinlang.org reference:  https://juejin.cn/post/6987724340775108622 仔細看完文件後,發現coroutines並不是那麼簡單,反而使用方法有點複雜. ---- dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:+' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:+' } ----- coroutine 典型用法, 啟動協程: 啟動一個新的協程, 常用的主要有以下幾種方式:它們被稱為coroutine builders.  launch async (可從Coroutine 返回值) runBlocking ---- launch– Launches new coroutine without blocking current thread and returns a reference to the coroutine as a Job. The coroutine is canceled when the resu