2020年9月30日 星期三

病情中一些想法

從前的自己常常迫自己諗野,諗到傻左,以下是我發病時寫來開解自己的總結:


情況1

完全諗唔到野,一片空白(感受)

從前的自己會如何面對:皺眉頭 > 嘆氣 > 個人好急 > 好辛苦

開解後的自己:眼放空 > 諗交托


情況2

唔知人地諗乜野

從前的自己會如何面對:估佢諗乜野 > 亂估 > 亂諗野 > 諗埋曬D唔知乜野 > 諗埋一邊 > 控制唔到自己諗乜野 > 繼續亂諗野,諗埋一面

開解後的自己:控制唔到自己諗乜野 > 眼放空 > 交托 > 繼續亂諗野,諗埋一面 > 唔好諗野 > 睇細節,睇其他野 > 轉移視線 > 轉眼仰望耶穌 > 交托 > (諗唔到野)諗交托神


情況3

唔想俾人望住

從前的自己會如何面對:逃避 > 唔想自己亂諗野

開解後的自己:控制自己個腦諗乜野 > 想神 > (諗唔到野)諗交托神



[開發實務日常記錄] 病情中的教導記錄(珍貴記錄)

以下是我發病時,在腦袋中向那位想像出來的人介紹我的工作,所寫的一份記錄。手寫原稿寫得很整齊,在這裏表達不盡,因為對我的意義重大,很想把它記錄下來。

--------------------------------------------------------------------------------------------

Task:
我想係sku page入面既#areaTitleBox (id="areaTitleBox")的CSS入面將 font-weight:600 呢一行line刪除佢

--------------------------------------------------------------------------------------------

Procedure:

1. 打開sku page:

url: _____/sku 

即係 product_details.php 呢個file

為何?

 因為在uri.php (控制所有頁面url, 如

sku = product_details.php

orders = order_main.php

promotion_manager = PromotionManagerController

都是在uri.php 內define出來)

Ctrl-P:Sublime 程式中打開新分頁

Ctrl-W:關閉分頁(通用)

2. 找"areaTitleBox"

Ctrl-F:尋找字串(通用)

3. 刪除 font-weight:600 呢行中line 

4. 在 C:/xampp/... 資料夾中的空白地方按滑鼠右鍵,

找tortoiseSVN > Check for modifications > 按下

顯示出在這個...資料夾中所有曾經修改的檔案

5. 指向product_details.php,按滑鼠右鍵

找compare with base,檢閲曾修改的檔案改動的比較

左邊:未改動前

右邊:改動之後 font-weight:600 已刪除

6. 確定改動正確後,可關閉分頁

7. 在這已修改的product_details.php按下滑鼠右鍵,然後按"commit"

Commit 就是將自己電腦檔案的改動,上傳到repository,即是一個統一儲存程式碼的地方

8. svn 就是 subversion source control system,它把一個系統的源程式碼,儲存到同一個地方,不同的程式開發人員可以"checkout"提取源程式碼,由儲存源程式碼的地方(repository)提取到自己電腦進行修改,再commit放回repository上。

9. Recent message 就是每次commit改動的大約描述,描述後按commit,就能把改動放回到repository。


--------------------------------------------------------------------------------------------


[開發實務日常記錄] 加入新的sample templates

 Task: 我想在「template designer」加入新的「sample templates」

Sample templates包括:

  1. 名稱
  2. 圖片
  3. 類別
  4. json codes
------------------------------------------------------------------------------------------

Sub-task 1) 
我想在template.php中加入圖片、名稱、類別等array指令,和把圖片放到css/img/sample_templates/ folder之中,名稱為 xxxxxx-800.jpg 或 xxxxxx-small.jpg

Step a) 將圖片放到css folder之中
Step b) 修改圖片名稱附合格式
Step c) 把圖片名稱放到template.php裏記錄分類
Step d) 把圖片分類放到template.php

Sub-task 2)
從twist server中export模版JSON源碼

Step a) > cd .../bot/template
Step b) > php template_export.php export.json 1234 4567 ...
Step c) 這將此export append到src中的export.json
Step d) edit setting_template_name @ export.json file
Step e) > php template_import.php 0 C:/.../export.json

Sub-task 3)
Add Chinese translations

2020年9月24日 星期四

[開發進程] Image Processor

總結一下Image Processor的製作流程:

  1. 想出如何實現用戶需求
  2. 依據需求編制程序
  3. 優化所寫程序
  4. 錯誤處理
  5. 系統整體優化


例子: [用戶需求] 在模版中把文字貼在shop banner上

由不知道->知道 (User requirement)

嘗試找出用什麼技術可以實現用戶需求


開始編制 (Development)

一步步實現用戶需求、由UI Frontend到Backend, 或由Backend到UI Frontend皆可, 一步步擴充功能, 再進一步優化logic, 來來回回

例如: 使用php function imagettftext()能把需求實現; 用OO比function為佳; 先以jpeg為試驗, 和以少量text-font選擇作為測試, 再擴充功能


錯誤處理 (Error Handling)

處理報錯, 但不要用die

(因为die的意思是程序终止,如果合成banner失败,我的任务不应该影响客户的操作(sync up, listing, verify ebay items),而且die()也不会返回错误消息,网页就是一片空白,queue job也显示中断退出。这样会给客户造成很大的困惑。)

  • 可以用 return ['result' => false, 'error_message' => '...']; 返回, 再使用 log file 記錄錯誤
  • 可以在不同地方用 isset 檢查資料是否正常存在
  • 其他處理方式, 例如在我的case, 若果error就返回用原來的圖片加文字分開的方式顯示


程序及資源優化 (Optimization)

試試整個流程用法, 想想在什麼地方可以更優化系統

例如在我的case, 把圖片 url save 到 datasheet 可以把功能實現, 卻浪費資源; 假如把圖片 url save 到 template 比 save 到 datasheet 為佳, 因為可以重覆使用, 減少 generate 時間, 和圖片伺服器資源

又例如原本設計是 template 有修改, 圖片連結就會重新記錄, 因為有機會改動 shop banner 的一些參數; 但日常很少機會修改template shop banner, 所以系統修改成更改 template 時如沒有修改與 shop banner 有關的fields, 就會保留圖片連結

=====================

Commit list:

  1. UI 加入 shop_banner_stick_text_to_image option (User requirement)
  2. 加入genTextedImage function (support jpeg only) (support 3 google fonts only) 
    use php function imagettftext() to put text on top of image (Development) 
  3. 加入所有text font files (Development) 
  4. save to datasheet extra data (Development) 
  5. 加入genTextedImage (support jpeg & png) (Development) 
  6. move logic to HTImageProcessor (Development) 
  7. don't use die, use return for error handling (Error Handling)
  8. store texted shop banner to template instead of datasheet (Optimization)
  9. error handling when generate error (return result = false) (Error Handling)
  10. 加入genTextedImage (support jpeg, png & gif) (User requirement)
  11. error handling (Error Handling)
  12. revised image output image size logic (User requirement)
  13. move HTImageProcessor to Helper folder (Development)
  14. change text font file relative path (Development)
  15. make font path array compatible when sync up template (Development)
  16. image processing error enhancement (Error Handling)
  17. image processing error enhancement (if error , fall back to original text + image display; write error to template designer error log) (Error Handling)
  18. error handling for cdncloud upload error (use isset($cdnurl[$realfilename]['url']) ) (Error Handling)
  19. error handling check (use isset($data['shop_banner_url'][$shop_idx]) ) (Error Handling)
  20. added [Template Designer]: retain shop_banner_url if shop banner-related fields do not change; else clear to generate text-combined image next time  (Optimization)

2020年9月3日 星期四

[Debug 進程] Could not connect to host

 花了2天時間fix一個issue

事源是datasheet bulk verify job (利用SoapClient->doRequest webservice處理多條工序)大於1000條的話, 約到第800條左右就會出現"Could not connect to host" exception。


起初以為是對方Server限制了到達指定數量的工序時就會block了(eBay VerifyAddItem Document: https://developer.ebay.com/DevZone/XML/docs/Reference/eBay/VerifyAddItem.html)

但看上文是會返回errorCode 21919144的內容, 在var_dump exception 時卻找不到這個error code, 只是說SoapClient->doRequest 出現問題。

這個問題處理得很困難, 源於exception只有"Could not connect to host"這一句, 而每次測試這1000條bulk job都要花上我2個小時……


奇怪的是大約跑了800條左右(2小時花掉), 它會不斷很快地返回"Could not connect to host"這一句, 所以不像是對方server的返回資訊, 而更像是內部的error返回。

再看會發現soapClient本身也返回"Could not connect to host" error。網上找有可能是cache問題, timeout問題, 可是都沒有方向如何處理。

https://stackoverflow.com/questions/4318870/soapfault-exception-could-not-connect-to-host

我們的問題是起初可以"Connect to host", 直到800條才不行, 而不是一開始就不行了, 所以有很多Google results 也似乎不像我們的情況……

及後繼續Google和看Log, 事情的確只發生於soapClient->__doRequest 會出現exception……

之後找來了:
https://stackoverflow.com/questions/43947872/soapclient-error-could-not-connect-to-host-on-php-7-0-and-laravel

發現有機會是php version的問題, 原來問題在php 5.6 上不會發生, php 7.2 上就會出現。這是個重大發現! 測試又多花了2個小時……

判斷了是php version 問題後, 再經上司幫了一下忙找到:

https://stackoverflow.com/questions/40884866/could-not-connect-to-host-soapfault-exception-after-some-requests/40927519#40927519

這個情況跟我們的很像, 因為它像我們的一樣, 直到第500-1000條calls 時就會出現"Could not connect to host" , 而我們還是可以成功連去對方server的。

結果原來是因為我們開了太多connections所引起的, 依據答案加入'keep_alive' => false, 把用完的connections關掉, 再花2個小時run一次, 1000條運行成功, 問題在php 7.2上也解決了。




總結遇到問題解決方向:

  1. 嘗試print exception / error 看線索
  2. 嘗試記錄log / 看log找線索
  3. 嘗試重現問題發生規律
  4. 嘗試釐清問題因由, 重點
    (Code 的問題? Setting 的問題? Network 的問題? Server 的問題? 例如版本問題? )
  5. 從重點列出關鍵字, 再Google找解決方案
  6. 重複以上步驟, 直至問題解決

[康復路] 試完又試

見了醫生,因為血色素又變低了,醫生想檢查是否「缺鐵」為成因,檢查又檢查…… 感覺有些麻煩……又抽血,又要留樣本…… 令我回想起當日入院的時光,因為一些原因,留樣本只需留一次,免卻留三次的麻煩;現在每天都要留一次,連續三天。每天早上就要跑醫院一趟再上班。 幸好也完成了。 第二次抽血...