包含標籤 w3HexSchool 的文章

AutoMapper —— 類別轉換超省力

類別間的轉換幾乎是每個專案每個工程師都會碰到的動作,舉凡是分層架構每層之間的轉換,如 Dto 轉換成 ViewModel;或是接收到資料要塞進自定義的類別時也需要進行轉換。但在遠古時代,當我們要把一個類別的資料倒進另一個類別時,總免不了一番折騰

例如一個卡片對戰遊戲的資料庫,光是要先把卡片資料讀取出來就需要:

有些時候也會看見用 Foreach 然後逐一傳值的場景,或是各種差不多的變種情況。同樣的是,光是將一個簡單的卡片資訊轉換成 ViewModel,就花了一大段在做對映的處理。這個過程本身枯燥乏味又占空間,更可怕的是,如果有個陳年資料表,動不動就上百個欄位,那這個轉換過程的恐怖程度可想而知

幸好!天無絕人之路,這種時候就是本日的主角 —— AutoMapper 出場的時候了。

當 AutoMapper 一出手,轉換的過程瞬間就變成:

是不是精簡很多呢?接著就讓我們來看看怎麼開始使用吧!

……

閱讀全文


Electron.net —— 把網頁包成桌面應用吧

因緣際會下想要弄出一些單機小工具來跑,這時候正巧接觸到 Electron.net 這個神器,特別紀錄一下以免忘記。這是 Electron 搭配 .net Core 的框架, Electron 是用 Chromium 和 Node.js 將網頁封裝成桌面應用程式,像是 Visual Studio Code、Slack 也都有使用到 Electron。而 Electron.net 顧名思義就是 .net 用的 Electron 框架囉。

這邊記錄一下自己嘗試時載入套件和建置的流程,主要參考自黑大的 用 ASP.NET Core 寫桌面 GUI 應用程式 - Electron.NETElectron.NET API 快速巡覽 這兩篇文章,以及官方的 API DEMO,特此感謝。

本篇小節:

……

閱讀全文


讀《黑馬思維》

每個人都是天才。但如果你用爬樹能力來斷定一條魚有多少才幹,牠整個人生都會相信自己愚蠢不堪。

這邊整理一下這陣子讀《黑馬思維》這本書的筆記,以及一些個人心得。直接破題說,我個人覺得值得一讀。

本書的目的是研究那些橫空出世的黑馬。但在研究少數的黑馬之前,就必須先說明何謂多數,所以本書前段著重在介紹什麼是標準化

從工業革命至今,為了能大量生產、品質穩定、降低成本、最終達到「一致、大量、簡單、有效」的效果,最直接且有效的做法就是制定流程和規定。不管是製造業,或者是教育,甚至是人生,群眾總是試圖找出一個固定的流程,鋪設一條筆直的道路,並且告訴大家:只要遵循這個路線,就能夠達到成功

雖然比起更加以前的階級制而言,標準化的做法的確更加公平了。然而為了達到標準一致,勢必得要重視群體、忽視個人。標準化的做法將所有人一視同仁,如同工廠的機器,或是程式的流程,認為設定好的輸入,經過了制定好的流程,就該有期待的產出。為了達到標準,因此無法認為每個人是特別的,甚至那些過於特別的,反而對標準化而言是個麻煩。

標準化的成功很直接:跟別人做一樣的事,但做得更好,就是最佳路線。

但有一些人,並不遵循標準化建議的路線,仍然取得了成功,他們就是黑馬。在個人化崛起的這個時代,媒體、醫療、廣告,甚至教育都開始有了量身打造的選項,隨處可見精準投放,個人菜單,標準化漸漸被個人化取代,於是作者們提出了疑問:什麼是「個人化的成功」呢?他們開始研究這些黑馬。

直接結論:黑馬們的個性、背景和領域都不大一樣,然而他們有一部分是相似的。有些人說:我認為自己做的事情是值得的,有些人說他感覺到熱忱,也有人說這是他的天職。黑馬的共通點在於:他們都並非為了想要成功或是達到目標才努力前進,而是靠著追求自我實現而成就卓越

Chase Excellence, Success will follow. - 3 Idiots

而對於這些黑馬如何追求自我實現,如何走出和標準化不同的路。本書提出以下四個重點:

  • 知道你的微動力
  • 清楚你的選擇
  • 了解你的策略
  • 忽略你的目的地
……

閱讀全文


C#: 位元旗標 (Bit flag) 與列舉

前陣子碰到個資料表儲存方式,因為這種位元運算的方式也常用在權限管理等地方,這邊就順手紀錄一下。

平常遇到二元的情形(例如 開/關、有/沒有),我們會直接宣告個 Boolean 來處理。但這次遇到的是同時有多個「有/沒有」的狀況,但我遇到的程式碼並沒有分成多個 Bool 去做處理,而是直接儲存成一個數值。

由於「有/沒有」只佔據一個位元,那麼將多個狀況按照位元順序排列的話,就只需要一個數字就可以紀錄或傳遞給其他系統了。例如最常見的用處是在權限系統,若有「讀」、「寫」、「執行」等權限,那麼我們按照這個順序去排列,當 讀=可、寫=不可、執行=可 的時候,就記做 101 = 5。這種直接用一組位元表示狀態的方式就叫做位元旗標(Bit flag)

1 讀   = 可
0 寫   = 不可
1 執行 = 可

/* 橫放 */
=> 101 (2進位) 
=> 5 

假使某天老闆靈光一現,決定接下來的新人員工都要記錄他們會的程式語言,並且他們報到的時候就會發一張公司列好的程式語言清單請他們勾選。

Enum & Flags

在 C# 中已經有方便的工具可以處理數字列表,我們可以建立一個叫做 SkillEnum 的列舉(Enum),並且按照上面說明的,將老闆提到的每個技能各自用一個位元來表示。

[Flags]
public enum SkillEnum
{
    C = 1,     // 0001
    PHP = 2,   // 0010
    SQL = 4,   // 0100
    Java = 8,  // 1000
}

註:[Flags]的標籤是指 C# 專門提供給位元旗標使用的 Enum,請參見 FlagsAttribute

只要在 enum 上加上 Flags 的屬性,除了自動按照 2 的次元增加以外,在使用 ToString() 也能更方便看見旗標內容

有了這個列舉之後,我們就可以表達不同排列組合的狀況了。例如:

* C: C
* P: PHP
* S: SQL
* J: Java
===========
J S P C
0 0 0 0 => 什麼都不會
0 0 0 1 => 只會 C
0 0 1 1 => 同時會 C 和 PHP
1 0 1 0 => 同時 PHP 和 Java
1 1 1 1 => 全部都會
……

閱讀全文


WakaTime —— 我 Coding 了多久?

這一周又是 偷懶週 繁忙週,因此就跟大家分享一個有趣的網站:WakaTime

WakaTime 能夠幫你自動記錄寫程式的時間、常用語言及專案,只要簡單地在常用的 IDE 設定好擴充套件就可以達成。 WakaTime 支援的 IDE 可以參閱 WakaTime - Plugin

註冊相當簡單,此處就不贅述。稍微介紹一下儀表板的各區塊的功能:

左上會有最近的專案及花費時間,每個色塊都是一個專案,滑鼠移上去就會顯示專案名稱。

點擊其中一天更會顯示當天的時間軸,可說是無所遁形。至於它判斷專案名稱的方法是看你編輯的檔案所在的資料夾名稱。

……

閱讀全文


我要訂便當 (5): Heroku 填坑小記

在上一集的 將 Python 腳本部署上 Heroku 中,記錄了將 Python 腳本放上 Heroku 的過程,但仍然沒有將我們的 訂便當小幫手 給放上去。之前有稍微提到是因為過程中遇到了一些問題,最後決定將這些問題和找到的前人解決文記錄在這一篇,將來再遇到的時候就可以參考。

  1. SQLite 要改成用 PostgreSQL
  2. 在 Heroku 上執行 Selenium

一、SQLite 要改成用 PostgreSQL

在之前的 我要訂便當(2) —— 用 Python + Sqlite 儲存訂單 中,為了方便及簡單性,選擇了較輕便的 SQLite 來儲存我們爬回來的訂單資訊。然而,SQLite 將資料儲存在小檔案以便於攜帶的做法,在 Heroku 上將會遭遇像是各個 dyno 的資料不同步等許多問題,因此 Heroku 是不建議使用 SQLite 的。

在 Heroku 的開發文件中的 SQLite on Heroku 有關於這部分的詳細說明,並直接提到「If you were to use SQLite on Heroku, you would lose your entire database at least once every 24 hours.」同時,官方也提供了他們的建議:PostgreSQL。相較於輕便但只能同時單一寫入而且還會在 dyno 炸掉的 SQLite,PostgreSQL 的完整性更符合 Heroku 對服務的要求。

關於在 Heroku 上使用 PostgreSQL 的做法,這篇 佈署 Python Flask 網站留言板應用程式到 Heroku + PostgreSQL 資料庫系統 說明得相當詳細。

……

閱讀全文



Carbon —— 把程式碼片段截成有質感的圖片吧

開始挑戰每週寫文之後,發現最大的敵人根本不是寫文這件事,而是自己的惰性啊。像這次母親節假期過太爽,差點兒就忘記發文…… 所以這週就還是 偷懶 工具介紹囉。

今天要分享的是 Carbon 這個工具,它能夠將貼上的程式碼輸出成圖片,並且支援程式碼上色,還可以自選字型、背景色等等,產出的圖可以說相當有質感。

當傳送圖片比較快或排版比較好的場合(例如Line, Facebook..),或是在部落格和文件中想直接放漂亮圖片,以及需要示範給對方看可是又不想要對方直接複製貼上的時候可謂是相當實用。

先來一張成果圖鎮樓

……

閱讀全文


我要訂便當 (4): 將 Python 腳本部署上 Heroku

目標:紀錄一下如何將 Python 寫好的東西丟上 Heroku

在先前的 訂便當系列 中已經建立了一個替我們去爬便當網並通知我們的小工具,但還存在一個相當大的問題:要在哪跑?總不能就只放在家裡電腦有開機就跑、沒開機就算了吧?因此我們必須找個主機把它放上去。而在上一篇做 Line Notify 的時候所參考的 如何快速建置一個 LINE Notify 的服務 中提到了將服務放上 Heroku 的部分,因此馬上嘗試看看。

結果過程中碰了不少壁,因此特地紀錄下來。

Heroku 是一個雲端平台,讓使用者可以把服務丟上去跑,同時最讚的部分是,免費用戶就提供了每月 450 小時可以使用(但有每半小時會進入休眠的限制),詳情可以參閱 Heroku 的計費頁面

本系列最後一階段的目標就是要將訂便當爬蟲整套丟上去雲端上運行,達到被動接收通知的效果。但由於訂便當爬蟲還牽涉到用 Selenium 開瀏覽器互動,以及使用 Sqlite 儲存的部分,轉移到 Heroku 的環境上還需要進行一些調整。因此這一階段將會分成兩篇(或以上)文章進行,上篇會先簡單地紀錄如何將服務放上 Heroku,下篇開始則著重於紀錄將訂便當系統放上 Heroku 時遇到的問題和解決過程

本篇主要的參考來源來自於 搭配 Git 在 Heroku 上部署網站的手把手教學發布網站到 Heroku 以及 網站部署(使用 Heroku) 這幾篇,其餘參考將附於文末,感謝各位前人大大留下的優質文。

……

閱讀全文


CSS: 變數 (Variables)

這禮拜忙了些,只好先偷懶打張安牌。這邊就記一下前陣子同學弄主題切換時用到的 CSS 變數(Variables)功能用法

原本使用 CSS 時就會有許多重複使用的部分,例如說網站的主色彩和副色彩等,然而在管理上,或是要修改的時候就會很麻煩,通常都要另外借助工具來處理。然而 CSS 其實原生就有變數可以使用,大大地增加了改動時的方便性。用法上也相當簡單。

在 CSS 宣告變數時,建議放在 :root 裡,並使用 --變數名 的方式宣告。例如

:root{
    --color: #000000;
}

而使用的時候只要 var(--變數名) 就可以囉。例如

body {
  background: var(--color);
}
……

閱讀全文