2022年8月18日 星期四

好站 : Python 3.10 線上解譯器 : CoderPad

今天在測試 Python 的亂數模組時, 在 Python API 文件中看到 random.randrange() 項目下有 "Deprecated since version 3.10" 字樣卻沒仔細看後面內容, 誤以為此函式已經在新版 3.10 版遭到器用, 於是想找個線上 Python 解譯器來驗證一下 (因為手邊不論筆電還是桌電都只有 3.6~3.8 版), 但找了許多個網站都沒上到 3.10 版, 甚至 Python 官網也只有 3.9 版而已 :

# https://www.python.org/shell/

就在想放棄的時候, 所幸找到下面這個網站 coderpad.io : 


用下列程式碼測試它的線上解譯器是 3.10.5 版 :

from platform import python_version
print(python_version())




不需要註冊就可以直接使用其 Python 線上解譯器, 如果註冊並建立一個 team 的話, 會獲得 7 天免費全功能試用, 且程式可以儲存在擋案系統中 :




可見它提供了擋案系統與資料庫, 所以可以在此平台上用 Flask/Django 架站. 




登入後要寫程式就按右上角的 "Create Pad", 提供超過 30 種語言 : 

 


即使沒有註冊也是可以執行程式的. 

我執行下列程式確認 randrange() 在 3.10 版可以正常執行 : 

import random
print(random.random())
print(random.randrange(1, 10, 2))




回去再看一下 Python 文件, 原來它講的 "Deprecated since version 3.10" 是指 randrange() 的傳入參數是浮點數時的處理方式, 我在筆電 (3.7.2) 會觸發 ValueErroe : 

Python 3.7.2 (C:\Python37\python.exe)
>>> import random
>>> random.randrange(1, 5)
1
>>> print(random.randrange(1.2, 10.6, 2))
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
  File "C:\Python37\lib\random.py", line 186, in randrange
    raise ValueError("non-integer arg 1 for randrange()")
ValueError: non-integer arg 1 for randrange()

但在 coderpad.io 則是觸發 TypeError : 




這樣總算是釐清疑惑了, 而且也找到一個很棒的資源, 有空可以用它來測試 Python 3.10 的新功能, 參考 : 


好書 : 一行指令學 Python : 用機器學習掌握人工智慧

上個月從市圖借到這本書, 昨天發現被預約須先還, 但我只看了前三章而已, 所以就想說乾脆買下來唄! 因為此書作者另一本著作 (一行指令學 Python : 用 Pandas 掌握商務大數據分析) 我之前有買, 寫得非常好 (是初學者最佳 Pandas 入門書), 但全華的書折扣都不多, 只找到下面這個蝦皮賣家的較便宜 (85 折) : 





昨天正想下標購買, 卻發現母校圖書館有ㄟ, 那就緩一緩先借, 這個先記下來, 以後有需要再買了. 此書主要是講傳統機器學習, 不包含深度學習, 前面先複習 Pandas 後接著介紹 Sklearn 資料前處理, 迴歸, 支援向量機 .... 等, 徐老師的書都是深入淺出的操作型範例, 非常好懂. 

蝦皮買書一本 : 初學Jetson Nano不說No:CAVEDU教你一次懂

最近整理筆記時找到之前追蹤的一本市圖搜尋到的書, 但卻好久都沒上架, 到底是進書了沒有? 我上母校圖書館也沒找到, 乾脆去書店買一本吧! 去明儀有找到, But, 此書有封膜無法翻閱, 且是紅標只有 85 折, 所以只好上網找看看, 發現蝦皮下面這個賣家最便宜 (66 折) : 





上回錯過了 88 節免運活動, 但昨天晚上發現有 8/18 299 免運, 叫菁菁幫我在蝦皮下標, 還有折價券可用, 結果只付 281 元, 約 59 折! 哈哈哈, 




我的 Jetson Nano 已好久未開機, 等這本書到貨就開工唄. 

2022年8月17日 星期三

明儀買書一本 : Python 股票 x ETF 量化交易回測 102 個活用技巧

上週逛明儀看到這本書, 隨手翻閱覺得很不錯, 想說回來查圖書館有沒有, 或 momo 最近是否有活動, 結果都不如願, 所以又再跑一趟明儀買下來 : 



Source : 博客來


此書作者劉承彥之前的著作 (程式交易與期貨等) 我也買過, 都是跟他的老師酆世昌 (昊瀚資訊老闆) 合著, 但這本卻沒有, 看序言才知酆老師已往生, 公司也因此結束營業, 真的好可惜. 這家公司就位於高雄中山二路, 他們開發的程式交易下單軟體 GOrder 還蠻有名的, 後續可能就無人維護了. 

2022年8月16日 星期二

在網頁中顯示 HTML 原始碼的小工具 html2show

過去兩周在手刻 GitHub 架站教學網站過程中遇到一個很煩的問題, 就是要將 HTML 原始碼在網頁中呈現時, 除了要把 < 改成 &lt; 與把 > 改成 &gt; 外, 還要將空格改成 &nbsp; (這些都是 HTML 定義的實體 entity), 最後還要在最後面加上 <br> 跳行, 這些我都用 EditPlus 去操作, 雖然 EditPLUS 比記事本好用太多, 但還是覺得非常煩. 

我在網路上找到一個可以轉換實體的網頁, 但它只處理 < 與 > 而已, 空格與尾端添加跳行則無支援, 這樣實用性並不高 : 


今天複習了 jQuery 與 Javascript 語法後寫了一個符合自己需求的小工具 html2show :





只要將 HTML 原始碼複製貼到上面的文字框, 然後按 "轉換", 下方就會出現結果了, 按 "複製" 鈕即可複製結果到剪貼簿. 雖然來得晚了點, 但後續也許還用得到 (在 Blogger 貼網頁不須轉換, Blogger 會自動轉換, 但自己寫網頁就需要). 

這個網頁原始碼如下 : 

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>code2html</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/bootstrap-theme.min.css">
    <script src="js/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
  </head>
  <body>
    <br>
    <div class="container">
      <form>
        <div class="form-group">
          <label for="source">HTML 原始碼</label>
          <textarea id="source" name="source" class="form-control" rows="8"></textarea>
        </div>
      </form>
      <button id="trans" type="button" class="btn btn-primary">轉換</button>
      <button id="copy" type="button" class="btn btn-primary">複製</button>
      <form>
        <div class="form-group">        
          <label for="dest"></label>
          <textarea id="dest" name="dest" class="form-control" rows="8"></textarea>
        </div>
      </form>
    </div>
    <script>
      $(function(){
        $("#trans").on("click", function(e){
          var source=$("#source").val();
          var reg=/\S/g;   
          var arr=source.split("\n");
          for (var i in arr) {
            var idx=arr[i].search(reg);
            var nbsp="&nbsp;".repeat(idx);
            var str=arr[i].replace(/</g, "&lt;").replace(/>/g, "&gt;");
            arr[i]=nbsp + $.trim(str) + "<br>";
            }
          $("#dest").val(arr.join('\n'));
          });
        $("#copy").on("click", function(e){
          $("#dest")[0].select();
          document.execCommand("copy");
          alert("已複製到剪貼簿!");
          });
        });      
    </script>
  </body>
</html>

此網頁中的程式主要是讀取 HTML 原始碼後以跳行字元 \n 為界拆分每列為一個陣列, 然後在走訪此陣列的元素時, 先用正規表示法偵測每列最前面有幾個空格, 將第一個字元以前的空格用 &nbsp; 實體取代, 接著分別將 < 與 > 用 &lt; 與 &gt; 取代, 以及在列尾加上 <br>, 最後用 join() 將陣列組合回字串. 

這裡面用到了如下幾個技巧 :
  1. str.search(/\S/g) : 
    這會傳回字串 str 中第一個找不是空格的字元位置, 這可用來傳給 repeat() 方法來產生前面要幾個 &nbsp;. 
  2. str.repeat(n) :
    這會傳回字串 str 重複 n 後的結果字串, 例如 "&nbsp;".repeat(2) 會得到 "&nbsp;&nbsp;".
  3. $("#myid")[0] :
    這會傳回 id 為 myid 元素之 jQuery 物件的原始 DOM 物件, 有時候還是需要用到 DOM. 
  4. $.trim(str) :
    這會將字串 str 左右側的空格去除後傳回. 因為 Javascript 本身沒有 lstrip() 或 rstrip() 之類的字串方法, 所以 jQuery 的內建函數 $.trim() 就是個很好的彌補. 
  5. dom_obj.select() :
    這會選取該 DOM 物件. 
  6. document.execCommand("copy") :
    這會將所選擇的元素之內容複製到剪貼簿中. 
參考 : 

Why is document.execCommand("paste") not working in Google Chrome?

2022 年第 33 周記事

最近兩周忙網頁, 馬不停蹄終於在昨天搞定了, 好累. 但也因為如此, 讓已近兩年沒在刻網頁的我溫習了一遍 jQuery 與 Bootstrap, 想想以前花時間勤寫筆記是對的, 要不然從頭找書要花更多時間, 有現成資料真是太好做事了. 

週五 8/12 中元節要祭拜祖先, 我原本打算請一天假回鄉下, 但因還不熟悉居家上班請假作法, 所以週四下班就回去了, 週五一早就開始準備祭祖事宜, 沒想到現在越來越多人一大早就拜, 才七點鞭炮聲九此起彼落, 可能蠻多人像我這樣, 拜完還要趕上班, 或者田裡還有活要趁太陽不熱時盡早做. 

最近柬埔寨詐騙新聞不絕如縷, 幾乎每節新聞都有, 警察在桃機勸阻還要費相當大的唇舌, 這些詐騙的非常可惡, 我以前接到有時間就玩玩, 玩到他們受不了直接掛電話, 我又沒口出惡言, 只是要聽老師長篇大論上課, 或是倚老賣老的勸世名言, 又或者是政治狂熱者的幹噍, 真是難為他們了. 從新聞中得知, 原來他們業績沒達標還會被毆打與電擊, 那我這樣玩他們又好像太殘忍了. 

菁菁接睫毛的工作八月起開始收費 (七月是免費徵模特兒, 我當了兩次, 哈哈, 我也有過翹睫毛, 而且菁菁說我的眼部照片最美, 年輕時的怨嘆的單眼皮現在居然自然變成好看的雙眼皮), 每天滿檔也就三個客人, 還有人從屏東跑來. 七月打過廣告後到八月底都滿檔, 看她做得蠻高興的, 既然對讀書沒興趣, 那就做自己喜歡的唄. 

跟英國 hostinger 租的 PHP 主機年底將到期, 這三個月要來評估是否續租, 目前傾向不續租, 因為測試網站可以完全用 GitHub 取代, 後端部分可以用 Pythonanywhere 取代, 只是以前寫的 PHP 程式碼沒處放了, 反正現在都改用 Python,  我已經很久沒在寫 PHP 了.

最近很多政治人物風靡飛鏢遊戲, 不意紛紛被迴力鏢所傷, 醜態畢露非常難看. 俗諺云, 仗義多為屠狗輩, 想來還真有道理. 

2022年8月15日 星期一

高科大還書 4 本 (Matlab 數位訊號處理與 R 語言等)

因新借三本書到館, 滿借情況下須至少還三本才能取書 : 
No.4 有人預約, 二哥說已沒在用. R 語言我現在沒時間看也先還. 另外還有一本已有新版書, 等書到再還 :
很努力在看了, 但還書速度還是很慢. 目前借書以 Python 機器學習的較多. 

2022年8月14日 星期日

完成教學網站 "用 GitHub 輕鬆架站"

因下周學會上課需要, 這兩周努力將之前部落格文章關於 GitHub 架站的濃縮整理在新申請的 GitHub 帳號上, 今天終於算是完工了. 雖然有將 CSS, Javascriipt, 與 jQuery 列入教學文件項目, 但這三個部分屬於進階要寫程式的領域, 對於在 GitHub 上架站來說, 只要對 HTML 與 Bootstrap 有概念, 會將模板改成自己的網頁就夠了, 所以以後有空再補充吧. 


雖然兩周前交出簡報檔就算交差了, 但花兩周時間手刻一個網站卻是十幾年前才有的傻勁, 趁這機會又把 HTML 與 Bootstrap 複習一遍也還不錯. 

二哥機車任意險續保

兩周前接到明台簡訊, 說二哥那台山葉電動車保險 8/13 快到期, 可是我上網續保一直跳出強制險不可重複, 今天仔細看簡訊, 原來去年強制險是保兩年, 但任意險只能一年, 故這次到期的是任意險, 我卻勾選強制險, 難怪一直卡關. 明台的任意險只能選保額 500 萬, 今年保費 1184 元較便宜. 

參考 :

# 明台產物保險

2022年8月7日 星期日

2022 年第 32 周記事

上周完成 GitHub 架站講座簡報後, 覺得既然是要架站, 何不將簡報內容直接以 GitHub 網站呈現? 所以本周我又持續改寫為網頁, 哇, 好久沒這樣手刻網站了, 長久以來寫後端有 template 實在太方便, 手刻靜態網頁覺得好累. 

姊姊周五晚上回到高雄, 我則下班後先回鄉下, 因為水某已訂好新光三越三多店的好正點, 我週六就從鄉下載爸來高雄吃飯, 下午再回鄉下. 好正點家附近自由路就有一家, 但水某說新光三越的較大, 用餐時間兩小時, 但 11:30 坐定位點餐, 大概要 15~20 分才會上菜, 這時飢腸轆轆, 覺得還不如去海港隨到隨吃, 且都一小碟一小碟不夠分啊! 一次點 12 道菜, 要等上一半後才能再點, 感覺不太優. 不過他們的烤雞倒是挺好吃的. 

本周都在寫網頁, 所以儲能型太陽能板安裝進度掛零, 下周五七月半拜拜, 我打算請假回去, 不然讓爸自己一人操辦也挺累的. 這樣週五下午就先來油漆亞角鐵, 放兩天周六應該就可以安裝了.