2018/11/21

20181121-程式-使用Knockout呈現資料過程+moment.js處理日期呈現

image

(先寫出第一版,點選樹狀資料,在右側會呈現其結果資訊)


重點記錄:

(此篇不是記錄基本的使用,而是過程中遇到的問題)

■    Knockout在處理具有 subModel的物件時,它的Bind方式是要借用「data-bind="with:ArchiveFolder"」方式處理。

■    C#回傳的Json日期格式為「CreateTime":"/Date(1542789732383)/"」這類格式。

      而透過moment.js 可以轉換為正確的日期格式。


參考資源:


■    Knockout 的with binding 處理說明:

      https://knockoutjs.com/documentation/with-binding.html

■    Moment.js 的日期格式處理: (官網也在這)

      https://momentjs.com/docs/#/parsing/string-format/

■    相關的問題:problem knockout js with date binding


1. Knockout 處理子Model 議題:


這是我物件結構的樣子:

SNAGHTML63a6538

當我要Bind Name 的屬性時: data-bind就是要這樣寫

<div class="col-md-9" data-bind="with:ArchiveFolder,visible:IsView">
                    @Html.SpanFor(m => m.ArchiveFolder.Name, new { data_bind = "value:Name" })
                </div>


2. 使用Moment.js處理Date格式

最終就是用這方式,處理JSON回傳的「CreateTime":"/Date(1542789732383)/"」日期格式

image


(THE END)

2018/11/18

20181117-單車-環北海岸順時[110K]-4H14M(登高棄賽去練車)

(星六時間12:34分,我準備出門練北海岸)

目標先以 四小時 完賽,努力捉回自已的腳力

腳力退步是事實,就重新開始,從這基準點再次出發。


重點心情

*

上午,睡到九點,出門去新光那領 登高物資,然而,今天這場比賽就這樣棄賽了。沒辦法去比這賽事。

*

這一次騎車的結果來看,大約在2小時50分(即爬萬里高點左右),狀況還算可以,之後就是腳力爆掉沒有了。

所以這一次可以「撐2H50M」的時間~ 而 Garmin 的測試,蠻準的 (它是如何做到的呢?)

功率來看:平均 138 W而已,所以,再慢慢將這「平均速度」拉高。且最大(20min)也才180W,還破不了200W。

前段要到200W,也不是常常有的。再加油,將這數字拉上去。

image

*

這一次,較少盯著功率值,而就是踩。

肚子餓的狀況,2個口糧吃掉了,還不夠,到了汐止,受不了就彎進去買地瓜來吃! (全家地瓜真是好物!)


騎完心得影片


時間記錄

關鍵時間的記錄點:

  • 關渡大橋:1小時左右。
  • 聖約翰:1小時30分整。
  • 白沙灣:1小時50分
  • 金山小七:2小時35分。
  • 萬里高點:3小時6分 (印象中)


活動記錄


下雨騎車,對單車來說,是個好天氣,不會太熱。


這一次,從這橋翻過去另一邊,比上一次順,未來就是走這條路即可。 (橋上一群年輕人,其中一個妹妹好好看!)

image


白沙灣,是個沒雨的天氣。


爬萬里高點,目前僅是8分多鐘。

不過這次狀況,比上一次快些,而一樣是騎到好酸。目標是 「捉入7分內」

image

看到八堵的好天氣,也差不多是夕陽的時間 (16:02)~~~

爬大橋的長上坡,沒力,僅能撐著。



後來到汐止市區,餓到受不了,找全家買地瓜吃,加「買一送一」餅乾。

結束賽事,辛苦 OCR,未來都用它練車!


(THE END)

2018/11/15

20181115-程式-設計具有新欄位Mapping的架構設計邏輯

image

(目標設計架構結果圖)


設計需求背景:

*

當從資料庫取得的Table 欄位資訊,在應用至程式開發上,也許需將它「重命名」為具有意義的「新命名」(滿足命名規則)。


因為這樣,在現行的功能下,我想要加上這樣的功能,且「不能設計太復雜」 XDDD。

而這次的處理,很多技術的問題,在於前端Json Array 的處理,太多技術細節的應用都需上網查詢如何用?

因此,也將這樣的資訊Log 下來。

*

主要就是「原欄位名稱」,具有個地方可以修正,讓它可以 Map 至新欄位資訊。

這樣的好處,是在產生 程式碼時,都可以有 一致性 的命名。而不會受限於於原本的資料表 Naming。


設計需求概念-Column Mapping

這邊,就將技術需求面,做個整理描述,方便未來可以 回味

*

1.  對應的資料儲存,直接以Json格式儲存即可。

2.  當它在選擇 各類Table時,它的欄位對應清單,就會一直做累加的動作。 且已存在的名稱,就 不重覆 新增至清單車 (以便一致的命名規則)。

3. 當它選擇到「A Table 」時,欄位Map清單中,與A Table 相關的欄位會「自動」排序在最上面。  (這需求超棒的!)

    (超級 友善 的操作動線 !,方便針對 A Table 的欄位做Mapping  )

4. 取得 & 儲存時機點:在 Load Database時 取得Mapping 清單; 在 Generate時 將現在的Mapping 清單 儲存。


技術面的參考資源彙整:

1.  Javascript  Array 上的相關應用:  超完整內容&都有範例  (https://mzl.la/2OKVDpU)。

     --應用到:array.splice (拼接)/ array.slice(0) (複製概念) / Array.reverse()(反轉) / Array.find(func) (找到滿足之Element) 

        Array.some(func) (檢查是否存在?)


技術面的開發過程:


預期的JSON儲存格式:

image

a.   JSON資料的初始字串為「[]」才是表示Array,(而示是「{ }」代表),而在後續的應用上,才會正確。

b.   資料目標,在Client去應用處理 ,Server端只負責「取全部」「存全部」即可。 (也就是這樣,我在Client 端有大量的Array 處理應用~)


最終結果的JS程式  (Angular框架下):(截錄最重要的Function)

image

a.  這是傳入所取得的Table Column ,然後依判斷,再決定 新增 / 或是「搬移」現有的 最終程式碼。

*

再來就依續說明,程式設計原因:

Array 的 Copy 及 反轉(Reverse):

image

a.  為了不影響現在的Array,所以要先Copy一份出來做處理。

b.  因為 要將有滿足的ColumnName,在處理過程中都填入至「第一筆」,所以我將Array反轉處理。 (邏輯思考)


找到滿足條件的Element  (再加上取得它的Index位置)

image

a.  Array 下 Find()的應用,它是傳入Function的,且還可以用 Lambda的語法寫 (javascript 竟可跟C#超像)

b.  因為無法直接取得該Element所在的Index,所以透過Find的過程中,將Index記錄下來。


若找到Element,開始做排序動作,將它「搬移」至最上層

image

a.  這需求:要達到將原Array下的Element搬移至最上頭,所用的解決方式:splice 處理。先移除/再新增至第一筆。

b.  splice的使用概念:目標位置,要移除幾個 、要加入的元素 (也可以是Array)。


結論心得:

*

針對前端Array 的這類 較細的應用,實在是要花時間在尋找「解答」。

不過,最重要的是「怎麼設計出好的需求應用」。

*

現在要學習,記錄下「技術文章」內容,雖然有時是較細的技術,但是後續要可以看得懂我原本的「思考流程」概念。

再加油了。

(THE END)

2018/11/10

20181110-單車-環北海岸順時[110K]-4H25M(好久沒練車了)

(未來就先專注這一條路線了,四小時內的腳力訓練)


重點項目:


■    這次的功率結果:4小時的單車 ,平均140 / 最大平均(20分)=177 。這…….好弱喔!真要再加油了

■    這次很「認真」的一直看功率變化,變低時,就想把它給拉上去。

■    這次特別早醒,但天還沒亮,等到6點後再出發。

■    果然老天爺幫忙,開始下雨,後來是陰天、也有出太陽的行程,是很合適於單車。

■    目前的腳力,2個半小時就差不多耗光了;最後一天八堵路,後來沒有力可以拼了。

■    未來就是單純&專注「練北海岸」路線,等功率 & 腳力(可撐下四小時)有上來後,再來想其它的。

      (或是找 3小時內的單車路線 ,先不騎長距離了…)


這就是「失落的功率」,集中在今年的二三月,平均功率排行

後來有思考,那一段的腳力為何會上去?? 待我 11/17登高結束後,我再來試試,是否為這原因了?



今日過程:


2018 KOM 王者名詞:「Go Hard ! or Go Home 」 ,意思就是,出門要麻就好好練!要麻就回家!!

覺得有勵志到!! 所以,我出門騎單車,不該僅是完騎就好。而是有你的訓練目的。

而最就就變成………「Go Hard後,Go Home so Hard」!!! (即腳力不支之感)



昨夜,又是緊張入睡。 還算是蠻早睡的。

而我 四點多就醒來, 天色暗 、外面又下著雨,還是乖乖等到「天亮之時」再出門騎車好了。


時間:6:13分,我吃了一包口糧後,就可以出發了。

練習賽的心情記錄


就開始今天的單車訓練,

好一陣子沒有出門騎車了。 (最近一周,右屁股超痛!跟黑青一樣!!還以為是運動傷害~~~原來是椅子坐太久!又姿勢不良所造成)


原本都是在圓山那換到「右岸」去的,因為那邊施工,就這一次,從社子島後再換過去「右岸」。

過了右岸,有看到「秋秋」他迎面跑過來,當下就覺得他在跑「速度」,蠻快的。

而後,有蠻多人在跑步,還有路標、號碼布,看來是有路跑競賽……那這樣她跑很前面喔!  (回家後看狀況,她好像不是賽事)


接到關渡大橋,時間是一小時整。剛剛好。


淡水那段,就盡力騎啦,到三芝、白沙灣,就是剛好 二個小時整。


而再來的路段就是「狂風」了!

風還蠻大的,不過,我是還好,因為喜歡吹風騎車。


推到金山小七,時間8:56,這已是三個小時又45分了。 跟之前比起來:三個半,落後很多。


就繼續推了,這時腳力也算是快沒了。

而萬里坡,就努力想拉功率 上來,但完完全全就在160左右。完賽時間變成「十分鐘」左右,之前最佳是6分半。

這就是當下爬上來後,那個酸的感覺….


再來的八堵段,就是感受那功率僅能在 150以下,無腳力可以拉上來了。

所以,推往回家的路,好難騎的。


最後巷口的2KM,努力的騎,結束了這次的練習。


辛苦的OCR,四瓶水,也喝掉了3瓶。


這一次的會後心得:

>>有提到,若平日練個簡單的10~20分鐘的間歇,是否是不錯的訓練模式呢?



這一次的功率狀況,平均「140」真的是打擊呀。重新開始練了,最大平均也才177 @@



(THE END)

2018/11/09

20181109-程式-C# 使用 DotLiquid 透過Template定義產生 其程式碼資料

SNAGHTML57880445

(最終所產生的目的結果:將資料庫的Table資料,產生對應的Class資料)  註:因table資訊未補齊,所以結果圖才會小怪怪的。


目標

依所取得的 Database Table 下的Columns資訊,可以依 「Template」的定義,決定其 Render出來的Class樣式。


此篇重點:


■    目標是要能夠讀Template定義資訊,然後產生對應的Code Result。

■    使用「DotLiquid」的Framework,以及所遇到的問題及心得!(真出呼我意料之外)

■    此篇思考了:如何不動到原Model,又可以應用至DocLiquid當參數的方式。

■    DotLiquid它是無法直接使用即有的Model類別物件的,最終都會是使用 Anonymous Class (匿名物件)

http://bit.ly/2RNhQWt (官方說明)

clip_image001

註:實作 ILiquidizable的函式,最後也是回傳 匿名物件的。



彙整相關資源:

■    Liquid 語法的官方說明  (DotLiquid為實作能讀取該類Template 的Framework)

■    DotLiquid的官方網站DotLiquid的 GitHub資訊它的Wiki資料(那幾篇都要看)

■    DotLiquid的 Template官方測試案例  (使用Sample)

■    Dot Liquid Template Implementation in C# and MVC

      >>我並非用此篇內容,僅是參考別人的寫法如何寫 Dot Liquid的程式碼。


最終程式碼模樣:


定義的Liquid樣版資料:

image

  • {%- -%} 多一個「-」號的用意,是Render時不讓它多占一行空白資料  (官方語法說明:http://bit.ly/2RIUWzh )


實作出DotLiquid實務上應用的程式碼:

image

  • 讀取特定的樣版資料。
  • Template Parse 該資料內容,建立起 Liquid Template。
  • 使用 Liquid 可以用的Model:實作 Liquidizable。
  • 若要透過Object,最後一定都是要呼叫:Hash.FromAnonymoutObject。


最終使用的Model模式:(採用繼承原Model後去實作ILiquidizable)

image

image

>>這最後也是回傳「匿名物件」出去。 (這邊即是定義Liquid Template可使用的參數)




遇到的問題:


錯誤一:Liquid syntax error: Object 'CodeGen.Web.Models.TableInfo' is invalid because it is neither a built-in type nor implements ILiquidizable

這就是「TableInfo」對DotLiquid來說,不是匿名物件型別  (實作ILiquidizable的程式可參考上面)

而加上 Template.RegisterSafeType 的方式,它也是要明確宣告要那一個 Property Name,所以我實務上不這樣做。


錯誤二:Missing property. Did you mean 'column_description'?

它不是Exception,而是在Render時,它認不得所用的屬性,

最終就是 上述程式的寫法 解掉這問題。

總之,它Render可讀的參數類型,以C#來說就是 Anonymous Type 的資訊了,(且還不能讀Json資料當參數……)


個人學習過程心得:


1.

過程中,使用 Dot Liquid的方式,真的概念和我不一樣。

原以為,就是傳入 DataModel,及使用對應的Template,它就可以Render出我要的資訊出來。

但……就是不能使用原生的DataModel,要變成用匿名物件、或是實作他的ILiquidizable 介面。


2.

網站上的資訊,很少有寫DotLiquid的使用方式,

這次就 嘗試出 這樣的寫法架構,不要修改到原生的Model,而可以當DotLiquid的參數使用。

而看官網的 「單元測試」,看看他們怎麼寫,也是不錯的經驗

(THE END)

2018/11/04

20181026-單車-KOM東進武嶺-賽前狀況+前一天花蓮行

(賽前一天,在花蓮拍下的美景)

(又隔了一個禮拜後,才開始在寫這一場賽事的日記,真不知寫日記對我是種壓力嗎?)


賽前狀況

這場賽事,緊接著排在 NS 武嶺賽的三個禮拜之後,

而狀況,真的不是很好。

三個禮拜間,我的睡眠不好,這場賽事 加上 工作上的事情。

然後,在一次的「重訓」後(賽事兩個禮拜前),左膝出了事!這狀況我沒辦法騎車,下踩沒辦法出力。

算算時間,應有緩衝的時間可以恢復。

再來就是兩個禮拜的全部休息,而心態上也不是那麼健康。


賽前那禮拜二,看完中醫,騎機車回家,身體就那麼不好,中了感冒!

實在是 「人虛百病侵」!!

天呀,還有三天,我應可以恢復它!


就是水狂喝,然後多睡…….


我所訂的莒光號,星四早上七點二十發車。


一切,都差點不想出門


中了感冒,又擔心賽事下雨 (又說有個颱風要來),整個「心理素質」到很低…..我到底為了什麼??

星三晚上在整理行李,在想,我就不要去了,請的兩天假,就在家算了!


後來想想,就走一步算一步。火車票訂了、住宿也訂了、兩天的特休假也請了!

不如就到花蓮「旅行」,若真的下雨,就不騎也沒關系。

一切就都先別說死。


星四早上六點整,我打包好,要到南港火車站搭火車。

就這麼一包,然後因為時間超級早,就慢慢的打包,然後玩玩手機的APP,等待火車到來。


水瓶一個就這樣掉落在鐵軌上

就在移去搭火車的過程中,我的一個水瓶就這樣掉落下去……當下真該是下去撿的!

莒光號,雙鐵列車,說是「單車」都要在12車箱。

一來是,列車根本沒有按照「站台」號碼在進站。

二來是,根本沒有12車箱….

我的坐位是2車XX號,而我人在10車箱這…….

就先上車,而也沒辦法帶著車移動,就先找個「可放」的地方,先將單車留在這車箱。

然後,我再去找我的位子。。。 (這一班,都是旅行團居多)


就這樣,三小時就可到花蓮了。時間:10:18分。



再來就是先到民宿那。這個過程之中,就覺得老闆不是「當地人」,

問了之後,他是在台北,然後,搬來這管理民宿。

之所以會這樣覺得,就是他的「步調快」,那種「什麼事都依流程交待好」的感覺。

我可以理解這就是「台北人」的生活步調。。

(我住的房間,我直接租下這兩人房,以防會吵)


放好行李,就開始騎車亂逛。首先「治感冒」的方式,就是直接「喝掉」這一罐!(當場就真的一次一瓶!)


今天的花蓮。天氣好。


(這是我星四所繞的地方,最後是到報到會場)

image


這個花蓮港入口,遊客是不能進入的,而後警衛跟我說「花蓮港」的觀光入口是那裡。


後來從這個地方開始,然後,往這個方向先繞,發現,很這是很合適於「輕鬆騎」的單車路線~~


看到那兒有點就停下來看看

這上方,就是我剛剛「不能進」的花蓮港入口處~~




以上都是取好風景拍,今天的天氣真好。


地景畫作。

真正的沙灘排球


這是騎回原點,再繞另一邊的景色路線

留下的,都是我拍下的美景



這邊是個養苔的地方,不過好像是不允許外人進來的 (我是看它泊油路很新,就順著騎進來,想說會有路的…..)


一條路線往七星潭


而後又繞回港口的另一側,


今日最喜歡的風景照片!


大會報到及說明會


一點開始報到,而三點有說明茶會。

就先到附近吃個素食餐點, 這樣剛好$100元,很好吃的。


到會場飯店。很高檔。

所發的物品



好奇於大賽事,他們的前導車 & 隊車間的安排。

送的這個防水背包,實在是高級貨。我很喜歡。





各個焦點人物 依序介紹上台的。


再來回到宿舍,買了今天的晚餐 + 明天的早餐。

而感冒的狀況,就是要把這兩罐給喝掉才會改善。

就明天的賽事加油了。


前一晚的心情記錄。




(THE END ~~註:這篇日記非常的不專心寫,導至時間快沒有,草草結束)