搜尋

搜尋結果

Coding | Test Case 值得寫嗎?
科技新知
MacauYeah・2023-11-02

很多做軟件開發的朋友,其實都會聽過Testdriven的開發模式。就像Scrum一樣,名氣很高,但試過的人很少。為何會這樣呢?筆者認為,並非開發者懶,而是編寫Test Case的難度真的高。對比開發程式本身的成本,寫Test Case的時間學習成本一樣高。 造成這些高成本的原因很多。一來是因為開發者並不像過往一樣,慢慢從零寫程式,一般都應用Framework去預構建一些東西,例如打包Database connection pool,Dependency injection。Framework是好用的,但就令你要模擬Mock up特定資源,變得越來越複雜。所以一般中、小型開發,都鮮有人懂得做Test Case除了大神獨立開發者外。筆者對於Spring boot等Framework,都摸索了很久,才能模擬一些特定資源。但Framework一更新,就很多部份都要重寫。所以筆者沒有很強調要做Test Case,因為成本認真大。 最近,在摸清一些test case 基本concept後,筆者又重新開始嘗試編寫test case。以下假設用的是object oriented programming 在開發自己的class,為每個public function,都寫test case。很多IDE, 都有提供相關自動生成test case function signature的功能(就是為你的目標function,起一個只有外框的test function。)vscode雖然不是原生支援java,但只安裝基本的java test package,就可以達到同樣效果。 在不依靠framework的情況下,自己class要『引用』的其他class object,不要經過自己使用new來生成object。全部經set function來傳入你要引用的class object。除非你的class是作為Factory Pattern(工商模式)生產某些object,不然你就不會再有new字眼。 在為自己class編寫test case時,就會可以模擬被『引用』Object的行為。這個object在傳統上可以使用oop中的interface類型來達到模擬又不會影響到原結構的做法。實在不想做interface,java還可以用mackito 這個libraray來硬改Object的行為。 同理,自己class要『引用』一些外部資源,那些設定資源的config,都應該要set function傳入。這樣你在test case中才能起一個臨時的模擬外部資源。 在不使用framework的情況,要全數去自行模擬,當然很痛苦,但至少你可以做一些很簡單的測試。 在使用framework的情況下,還有些教學都是教你mockito繼續模疑。但這會是很痛苦的,因為這樣叫做unit test,單元測試,你要模擬所有東西。在折衷的情況下,應該底層元件做unit test,但上層的元件就做integration test,整合測試。 在做integration test時,就差不多等同使用framework行起部份或必要的資源。而那些必要資源,可能指是的database service, network service。我們可以在test case中設立不同的config,從而把framework指向一些備用資源。 Database好貴,腦細不會付錢set up多一套,自己電腦不夠強,也不能跑起多個開發用Database。好在還有h2 database可以幫你,它是memory可以操作的。只要你的framework支緩就好。在初次使用Framework時,你總會覺得為何Database層要設得這些抽像,其實為的就是讓你可以隨時換Database。不論做測試還是做移植,都會少很多問題。 模擬Network service還是沒有銀彈,要麼就mockito硬改行為,要麼就是提供一套測試用service。筆者曾經為模擬別人的Network Http API,也花了相當時間自己建立dummy server,提供模擬效果。無論dummy的效果有多假,有多局限,例如if id == 1,always return true,也是有一定價值。當你做source code refactoring (重構),又或是做framework升級時,還是讓你可以安心一點。

Design Pattern: Observer / Subscribers - Push vs Pull
手機‧電玩
MacauYeah・2023-09-29

相信一般入行IT不久的朋友,都會知道IT系統更新時,有推和拉push、pull兩種方式。特別是Programer,對於觀察者模式又或者是訂閱者模式Observer Subscriber 會有更多的使用經驗,例如OS programing要處理event bus,Mobile App要做的推送通知Push Notification。 但一般來說,很少人討論推和拉push、pull的問題,筆者就著一些踩過的坑來說說差異。 首先,在一個通訊相對穩定的系統中,Push、Pull都很好用。例如同一個OS內,它的socket或pipe可以看作很穩定,可以假設那些要廣播的消息可以正常傳遞出好。但好用歸好用,這個模式對於越來越複雜的交互系統都有一個無法明確處理的問題:怎樣去處理觀察者訂閱者自己的操作失敗問題。 對於非IT行業的讀者來說,只要你接觸過手機即時聊天程式IM,如whatsapp, wechat, facebook messenger應該都會遇到一個問題就是:你收到OS提示通知,但打開聊天程式卻看不到新的對話內容;又者是你連續收到多個同一個內容的提示通知,那怕你已經讀過了。這些都代表了,手機端當初時沒有好好即時回應是否已經操作成功,不需要重複通知的問題。有可能是手機當時掛了,也有可能是網絡不太好。 上述的例子,對一般人來說,可能影響不太。因為重複收到訊息,又或是漏了訊息,也不會怎樣。但對於業務系統,例如定期收費,多收一次又或是少收一次,都會引起某部份關係者的不滿,即使事後有退費機制,但有些匯率問題,始終會有差異。在傳統架構上,有規模的公司系統都可能會使用內部的中央資料庫等做交易transaction管理,整個過程,都要嚴謹地記錄廣擴是否成功、觀察者自己的操作是否成功。 在近代,分散式系統又或是微服務的出現,令上述的中央資料庫無法實行。如何好好地重新定義好Transaction管理,就是一大挑戰。筆者最近亦實作了一個要在微服務的上廣播的觀察者模式,但雪上加霜的是,在互聯網的環境下,廣播的消息沒法保證可以正常傳遞出好。觀察者訂閱者可能已經正常收到消息,也做了相應的操作,只是來不及回應,網路就斷了。這令重複發送信號的可能增加了。 如果說,要以平民的方式去實作這類廣播,Pull會比較有大的容錯。廣播者只是通知觀察者訂閱者來拉資料,保證廣播當時的資料量可以盡量地少。廣播者開放盡量大的查閱權,觀察者訂閱者可以自由決定事後更新要取得的資料量。但這樣每個觀察者訂閱者都要重做一次同步機制,不過好處是,主動權在於他們自己手上。 相對地,Push的容錯就低一點,但要付出的成本也跟Pull差不多。因為網路環境,大家要重現一個基於TCPIP而有commitrollback的難度較大。當網路出現斷線,廣播者無法確定是否需要重做。在重複收到訊號時,最後還是需要觀察者訂閱者來決定怎樣處理重複記錄。但比Pull好的是,Push可以限制單次訊號的傳送量,也可以確保觀察者訂閱者一定收到特定的記錄。 上述就是筆者在這一年來遇過的坑,如有什麼不足,很歡迎大家一起來作更多討論。

[評] 再評洛克11
手機‧電玩
MacauYeah・2019-01-16

因為自己有錄制攻略 同 研究Speedrun打法既關係,所以整個遊戲都重複玩了很多次。 雖然唔係100%遊玩,但在極限挑戰50小時以後,慢慢就會感到探索的樂趣 上次文章有提到,呢個遊戲係真係為左惡整你而出現。到50小時以後,惡整感覺依然存在,不過又會多出另一份讚嘆:只要用岩方法,呢個遊戲同食菜無乜分別,而且方法唔止一個,想攞金牌話咁易。內建競速模式,可以無限重生,比你同一關試到飽為止。 返到黎遊戲設計方面,今代真係比過去要貼心,一來可以買消耗道具防止即死陷阱,二來還可以選擇不同難度。真係有考慮過比唔同族群去試。最最重要係有額外模式(競速模式、遊樂場),令你可以無責任地重覆挑戰。有些還可以未通關下原遊戲就提前挑戰,比你充足機會去實驗。之後返到正常模式,你會變得好有信心,因為一切都在掌握之中。 花時間玩遊戲,並不代表沉迷。良性遊玩,更會促進策略思考的方式。不過講返現實,大家都仲要搵食,所以打完機開心完之後,記得努力讀書、返工,咁之後先會再有銀彈買新作。 以下,附上我修練50小時後的競速紀錄片。有興趣一齊玩嘅朋友,記得訂閱我地各個頻道。 Mega Man 11 Youtube 攻略存檔 httpswww.youtube.complaylistlist=PLUbYXpKT7aEXrO4Id5LMlplXXn_ihg02w 上期連結 httpslifemag.cyberctm.comzh_TWblogmacauyeah7227%E6%B4%9B%E5%85%8B%E4%BA%BA11%E7%9F%AD%E8%A9%95 如果覺得我地既攻略都睇得下,咁就快啲訂閱埋我地YouTube Twitch Facebook

挑戰高難度 vs 挑戰速度
手機‧電玩
MacauYeah・2018-10-16

原本,有次向身邊好機友問意見,有什麼遊戲值得成為我下一款Speedrun的目標。 但我發現一個重要的誤解,就是普遍認為Speedrun主要靠rdquo;實力rdquo;以及rdquo;手速rdquo;,所以靠自己摸索、提高rdquo;實力rdquo;就可以了。 一般人認為rdquo;實力rdquo;會影響rdquo;輸出rdquo;,這個直觀理解當然不是錯,只是rdquo;實力rdquo;提高,並不是指通過靠練習高難度關卡就提高實力了。 例如:我跑完一輸最高難度的刺客教條,回去挑戰普通難度,是不是會變快? 普通難度當然比最高難度通關快,但再重玩一次普通難度之後,會更快嗎?高難度關卡,只是讓你學會有效防禦迴避策略,但輸出並不提升多少。 Speedrun的重點,其實是Skip,不是Run。不需要的東西盡可能都不要拿,把路線規劃得更順會更有時間效果。形成loop目押,有glitches用glitches,才是最快的通關方式。所以研究各種路線的風險差異,就成為Speedrun策略重要的一環。 所以,當在一個speedrun社群裏,已經有前人把要點寫成指引,你練起來,會輕鬆好多。 如果沒有前人指引,那起碼也要自己寫筆記,在觀看練習不同的冠軍路線時,記下各種不同的前置條件,讓自己有個大概估算有什麼rdquo;選擇rdquo;,亦要準備一下如何一些隨機變數的對策。 另外,怎樣可以重複練習也是一個重點。因為以正常的方式完整跑一次遊戲是很花時間,你也不能練一次就通竅所有skip和目押,所以有效的分段重複練習就變得很重要。 如果遊戲原本就有章節可選,就最好。如果能夠自由Save Load,也不錯。而最難的遊戲,就是那些像Dark Souls系列,自動save,不讓你回頭的遊戲,這個練起上來最痛苦。主機遊戲更什,不是那些容易地作弊式還原存檔。 (所以現在Dark Souls Speedrun 冠軍的人,都是玩電腦版,用些工具來讓自己可以有效果還完save位置) 大家有興趣加入Speedrun行列,可以來youtube 連結 twitch 連結 留言。 想睇我地跑系列遊戲馬拉松的話,快啲follow 我地嘅youtube 同twitch,湊夠觀眾我地就開跑啦。 再後亦要宣傳一下,國外亦有Speedrun馬拉松係10月2729日進行,想睇新舊遊戲speedrun嘅朋友真係唔好錯過

日本變比特幣最大交易市場
科技新知
Trisha・2017-09-22

日本變比特幣最大交易市場!強推虛擬貨幣「JCOIN」搶回 Apple Pay 使用者數據 日本變比特幣最大交易市場!強推虛擬貨幣「JCOIN」搶回 Apple Pay 使用者數據 就在虛擬貨幣發展在中國遭受重創,包括三大交易平台在內的多個平台被叫停之際,日本卻要推出一種新的虛擬貨幣。 日前, 人民網 援引朝日電視台報導,日本大型商業銀行打算與地方銀行聯手,研究發行共同的虛擬貨幣「JCOIN」。9 月,瑞穗金融集團才剛召集 70 多家銀行,包括郵政儲蓄銀行及地方銀行,對新型虛擬貨幣事宜展開研討。 用戶可以把銀行卡內的錢兌換為新虛擬貨幣,再用手機去完成交易,如給店鋪付款,轉帳給個人等。 據人民網了解,日本或將趕在 2020 年東京奧運會召開前把新虛擬貨幣的事落定。 看到這,聰明的讀者小夥伴們肯定不禁會問,為什麼日本要推新虛擬貨幣?會不會有些多此一舉?日本網民也有質疑稱,新虛擬貨幣與電子貨幣及使用銀行卡支付別無二致。 人民網指出, 新虛擬貨幣是日本國內銀行聯盟的對抗策略,日本擔心如蘋果等海外公司通過提供非現金支付服務,掌握日本眾多人口的結算交易數據。 而且,盯著日本市場的除蘋果外,還有支付寶,微信都意圖到此開掘新的領地。 去年 9 月,Apple Pay 正式進軍日本,日版 iPhone 7 開始支持 Felica。雖說還有諸多限制,如僅支持部分信用卡。 支付寶,微信也在日重兵布陣。 澎湃報導 稱,去年 8 月,微信支付,支付寶等快捷支付方式就已進入日本商場,甚至還舉辦了返現了活動,以吸引中國消費者。不僅是商場,連買便當小吃也可以。1 月 23 日 ,便利店巨頭羅森與支付寶宣布,日本近 1.3 萬家羅森便利店將全線接入支付寶,開日本全境接入支付寶連鎖便利店先河。 很有意思的是, 日本政府 還開始推行比特幣交易物品的方式 。3 月,日本內閣會議通過《關於虛擬貨幣交換業者的內閣府令》,宣布 4 月 1 日起, 比特幣具備作為法定支付方式的地位。並且,7 月開始,在日本兌換比特幣將可免去 8%消費稅 ,但如果你作為外國人想在那兌換日元,對不起,交 3%交易費先。 越來越多日本商家奔向比特幣支付的懷抱,如家電連鎖商場 Big Camera,丸井(Marui)ANNEX 百貨等,體驗感類似支付寶,微信,只是二維碼和手機間「流動」的貨幣,成了比特幣而已。今年內,日本能接受比特幣支付的商家將有望達到 2 萬家。 如此來看,無論推行比特幣支付,還是日本眾多商業銀行試圖聯合發行新型虛擬貨幣,最終可能是日本尋求以新技術突出重圍的手段方式。只是日本能否如願成為虛擬貨幣支付交易的先行引領者,還有待時間檢驗。 (本文經合作夥伴 36 氪授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈日本準備搞新虛擬貨幣支付,想懟前來的蘋果支付們〉 以上資料來源科技報橘httpsbuzzorange.comtechorange20170920japanjcoinandbitcoin

惡魔五月哭 馬拉松大挑戰 DMC1 Mission 15-23
手機‧電玩
MacauYeah・2021-04-08

DMC1 Mission 15 命運之輪 Groffin最後一戰要來啦,這次跟之前有點不同,Boss會站在地上,大家把握機會貼面輸出吧。 DMC1 Mission 16 漆黑的惡夢 這個Nightmare只會在亮光的時候週期性地露出弱點,記得定期保持圓盤亮光 DMC1 Mission 17 再見遺物 跟Nelo Angelo的最後一戰,原則上在Boss的最初位置平砍最安全,像Video中走到樓梯並不是一個好的佈署。 平砍打法主要令Boss進行彈反狀態,我方只用平砍第一下的快速出刀,在普通難度下,我方的速度會比Boss快,可以彈反時搶先一步打中Boss DMC1 Mission 18 靈石 雖然得到魔劍斯巴達,但沒有二段跳,更不能魔人化,比拳套的泛用性更低 DMC1 Mission 19 前往魔界 不玩真的不知道,原來怪物「Nobody」早在DMC1就出現了 看來DMC5真的很想套情懷 註:DMC5的Shadow, Groffin, Nightmare, Nobody都有重制,但名字和意義卻套用DMC1的設定 DMC1 Mission 20 與惡夢的決戰 沒有最難的戰鬥,只有更多難的戰鬥,這個挑戰次次真的比幻蛛還要多 之前兩次戰鬥都不用考慮什麼時候上背,但這次Boss的攻擊力很高,不能無腦地上背打光球。 再加上最後一階段Boss全身都是攻擊判定,只能遠距離攻擊,又或者像其他攻略一樣用魔化後的有無敵時間的魔人鑽來解決 DMC1 Mission 21 活生生的洞穴 最後一個隱藏任務,沒有藍石,只有魔力槍。隱藏任務路線比較迷幻,我也重錄了好幾次。 任務入口就在神像的對面,入去之後,每區砍一次怪,每砍完一區,就直走,不要行分支,因為會迷路。打完Nobody區域後,還要打龍骨,很多其他攻略都教你如何直接飛過龍骨。但小弟不才,飛不過去,魔力也不夠,還是穩打穩紮打龍骨。龍骨看似只受冷兵器傷害,用槍是沒有效果的。打完之後有兩小怪出現,都清掉後就能順利向上找到魔力槍。 DMC1 Mission 22 傳說之戰 飛行模式很傷人,如果大家是PS4版,記得用十字鍵來移動,因為這樣才不會上下倒轉。 之前筆者一直用類比鍵玩,上下倒轉,自身腦創傷嚴重。 打完飛行模式,要打白兵戰。若想近身攻擊,需要先存魔力,在Boss身邊魔化再普攻才能有傷害。不然只能在遠處長按攻擊鍵,飛刀做成傷害。另外,Boss的魔球打破後可以回復魔力。 DMC1 Mission 23 母親的引導 最後一關,遊戲制作商的最後的惡意 在最後跟Boss決戰,你可以用任意攻擊削減血量,但在Trish 出現救場後,你必需要夠魔力,魔化後用手槍結束。不然Boss一直無敵,然後Game Over了。

【如何找出由比大市弱剛剛轉為比大市強的股票?】
創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2015-05-18

程式交易除應用在期貨交易上,其實應用在選股上也十分有效,例如我們希望透過程式找出本身一直落後大市的股票,但突然股價開始發力,走勢變得比大市強,這往往是較佳的買入時間。此外,若然非單一股票是這樣,而是整個行業的股票也由比大市弱剛剛轉為比大市強,能獲利的機會便提高。 早前已介紹過HL Indicator,可以將期指與滬深300指數比較,同時又可將期指與國期比較,但其實也可應用在股票分析之上。將股票與恆生指數作比較,先每日從yahoo免費下載全部股票及恆指的數據,然後利用HL Indicator作比較,恆指在yahoo的symbol為「HSI」,公式上前後加減的問題,每當HL Indicator出現,連續五個或以上的「L」變為「H」時,便是股票由比大市弱剛剛轉為比大市強。 按圖可放大 大家可看看2015年3月,港交所0388發力急升的時間便剛好是連續五個或以上的「L」變為「H」的時間圖三,或許大家會問,是否近月的大升市才剛好這樣 我們可再看看較難的例子,2010年9月,港交所0388發力急升由110元升至180元,也是剛好是連續五個或以上的「L」變為「H」的時間圖四。 我們再看看其他股票,騰訊0700今年3月開始急升時的情況也是如此圖五,再看舊一點的數據,去年5月至9月,騰訊0700的表現其實不太好,但期間兩次較大型的反彈,也是出現連續五個或以上的「L」變為「H」的情況圖六,又或馬鋼0323去年3月至7月的走勢也是向淡,但較大型的反彈出現在3月中圖七,當時也是出現連續五個或以上的「L」變為「H」的情況,再看遠一點的數據,即使是2010年,農行1288展開升浪,也是出現類似的情況圖八。 當然沒有任何指標是必勝的,分析方法要先看市況,再選股,選出走勢比大市強的股票,若然整個行業都突然比大市強那便更好,配合當晚美股上升,那獲利的機會便提高,而這種分析方法,有一個好處是,股票剛轉為比大市強,買入後理應在一至兩個交易日便發力,若然沒有,那便可提早止蝕,同時買入數隻股票,只要有一隻「爆上」,已能獲利。

AMIBROKER速成教學 從網上免費下載港股數據
創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2015-03-25

Amibroker是可以每天自行將股票的數據下載至程式中使用及分析,而且完全免費的。 匯入數據到AmiBroker的方法有很多,以下3個方法則最為簡單易用。 使用AmiQuote 使用Import wizard Interactive Broker plugin 使用AmiQuote AmiQuote是一隻可以從各大data網站包括Yahoo, Google, MSN 下載盤後數據的軟體,並且能與AmiBroker整合,下載的數據馬上就可以在AmiBroker的圖表分析視窗顯示。 1.開啟記事本 2.每一行打上你想做研究並下載historical data的股票代號請注意,以香港股票為例,代號開頭以四位數字組成,後加.HK,詳細股票代號請參閱Yahoo 財經 3.完成後按檔案gt;另存新檔,存檔類型揀選所有檔案,存檔路徑請選揀選AmiQuote安裝的folder,例如 CProgram Files x86AmiBrokerAmiQuote,並輸入新檔案名稱例如HSIcomponents.tls,檔案名稱必須以.tls結 尾,最後按存檔。 4.開啟AmiBrokerrarr; File rarr; New rarr; Database,以開啟一個新的資料庫。 5.開一個新的Database 資料夾,如CProgram Files x86AmiBrokerAmiQuoteExample,然後按Create,再按OK。 6.Tools rarr; Autoupdate quotes AmiQuote 7.按停止制 因為AmiQuote預設自動下載某些美國股票的historical data 8.按Filerarr;Open,搜尋位置請揀選剛儲存檔案的位置,然後揀選該檔案,再按開啟。 9.Source請揀選Yahoo Historical,並揀選你想download 那一段時期的Historical Data,例如由112007至382013,再按綠色三角形制開始下載。 10.完成後按右上角關閉制離開AmiQuote的頁面,你會在Symbol的視窗看到你下載的Symbol資料。 11.Double Click其中一個Symbol,你便會看到該Symbol的價格及成交資料。