[料理佳餚] Xamarin.Forms 一定要了解清楚的 HorizontalOptions 及 VerticalOptions

剛開始要學習 Xamarin.Forms 開發時,一定會想說實作一個簡單的互動程式看看,查了語法敲了一串 <Button WidthRequest="100" HeightRequest="100" Text="I'm Button" /> 放上去之後,哇!怎麼 Button 那麼大?

我相信多數人會遭遇跟我一樣問題「怎麼讓 Button 依照我想要的位置去擺放?」

...繼續閱讀 »

[料理佳餚] Xamarin.Forms 中 Button IsEnable 與 Command 屬性的綁定糾葛

Button 要 Enable 或 Disable 除了直接操控 Button 本身的 IsEnabled 屬性之外,也可以藉由綁定的方式綁定一個變數,當變數值異動的時候 Button 的啟用狀態也跟著改變,有用 MVVM 模式在開發 Xamarin App 的朋友相信應該也會習慣先考慮用綁定的方式來操控 UI,但如果 Button 同時有為 IsEnabled 及 Command 提供綁定值,會有一些問題出現。

...繼續閱讀 »

[食譜好菜] Xamarin.Forms 內建的 DI Library - DependencyService

Xamarin.Forms 已經有一個內建的 DI Library 叫 DependencyService,它提供了簡單註冊及解析的方法,如果我們的使用情境並不複雜,DependencyService 就已經能夠滿足我們絕大部分的需求,有需要的時候再考慮去引用像 Unity 或 Autofac 這種能夠提供更彈性的註冊及解析方法的 Library,底下我就用取得 Android 及 iOS 設備平台識別碼的範例來簡單說明 DependencyService 如何使用。

...繼續閱讀 »

[料理佳餚] Xamarin.Forms(iOS)接收來自 Firebase Cloud Messaging 的推播通知

上一篇 Xamarin.Forms(Android)接收來自 Firebase Cloud Messaging 的推播通知,當然也要來個 iOS 版本,但是在這個過程當中走了相當多的坎坷路,才知道原來 iOS 模擬器不能模擬東西還不少,為了開發 iOS App 除了買 Mac 用來建置之外,還得買 iPhone 來測試模擬器不能測試的東西,還要為我們的開發者帳號繳至少一年 $99 鎂的費用,著實花了不少錢,說這些都是淚水啊。

...繼續閱讀 »

[小菜一碟] Android SDK Manager 裡面選項好多、有的長得好像,差在哪?該不該勾?

剛開始嘗試要用 Xamarin 開發 Android App 的時候,當我打開 Android SDK Manager 要去安裝所需要的相關 Android SDK 套件時...

第一次看到它是在約莫兩年前,觸發了我的選擇恐懼症,於是開始搜尋 Xamarin 的相關教學文章,大都說哪些要勾,沒怎麼對裡面的每個選項多做說明,兩年後想說這樣不求甚解不太行,花了點時間把 Android SDK Manager 裡面的選項查清楚,給有跟我一樣問題的朋友做個參考。

...繼續閱讀 »

[廚餘回收] Redis 裝在 GCE Windows Server 上須注意一下虛擬記憶體的設定

某個週末公司某個裝在 Windows Server 上的 Redis 服務掛點,從 Server Log 看到下面這段錯誤:

# Write error saving DB on disk: Invalid argument
# rdbSave failed in qfork: Invalid argument
# fork operation complete
# Background saving error

是在 Redis 做 Snapshot 的時候沒有成功,進而影響到服務的運作,Snapshot 會失敗大概會有幾個原因:

  1. 記憶體不足
  2. 磁碟空間不足
  3. 權限不足

現在我們就來看看是哪一個原因?

...繼續閱讀 »

[料理佳餚] ASP.NET 在不修改既有程式及後端資料的情況下統一置換某個特定字串

程式的生命週期往往比我們想像中的長,通常年紀愈大的程式包袱愈重,後面接手的人肩負的壓力也愈重,如果我們知道有一個字串叫 http://www.xxx.com ,現在因為政策的關係必須改成 https://www.xxx.com ,偏偏 http://www.xxx.com 被到處寫死在資料庫及程式原始碼裡面,除了把寫死的那些找出來改之外,我們還可以怎麼做?

...繼續閱讀 »