2017年11月22日 星期三

皮帶輪 (Pulley) 的製作方法

最近在設計我的小型水力發電站, 主要結構是木製水車附帶皮帶輪, 以大輪帶小輪方式將轉速放大, 帶動三相交流發電機發電. 小輪有現成的金屬製帶齒的可用, 例如 :

【愛研】GT2 2GT 30齒 內徑8mm 同步輪 同步齒輪 皮帶輪 $49
【UCI電子】2GT 同步帶輪 16齒 20齒 帶寬6mm 內孔5 內孔8 GT2 16Z傳動皮帶輪 $45
【UCI電子】2GT-6mm橡膠開口同步皮帶S2M GT2 MXL 同步帶 $6 (10cm)
[3DPW] 同步輪GT2 20齒 內8mm 皮帶寬度9mm 時規皮帶用 $95
【3DPRT 專賣店】★876★ 2GT GT2 寬 9MM 周長 500 到 599 多種規格 閉口皮帶 環狀皮帶

但是要裝在水車上的大輪找遍露天商場都沒有合意的, 只能自己木做一個了. 今天在 Youtube 看到下面這部自製皮帶輪的影片非常值得參考 :

Making Wooden Step Pulleys




作者用線鋸機先裁出三塊圓形木板, 膠合後用木工車床修邊並切出皮帶溝, 最後軸心鑽洞再噴漆.

下面這部影片則是金工的, 作者利用回收的飲料鋁罐熔化後做成鋁餅, 再用車床車出皮帶溝 :

Homemade Pulley Made From Beer Cans - Melting Aluminum #3




總之, 有車床的話一切都好辦.

Opera 的新功能 : 網頁快照

昨天 Opera 瀏覽器升級為 49.0.2725.39 (PGO) 版, 新增了網頁快照功能, 直按 Ctrl+Shift+5 就可以框選網頁中要擷取的區域, 按 "捕捉" 鈕擷取圖像後自動開啟 Opera 的圖片編輯器, 可畫線, 加上箭頭, 小圖示, 或局部模糊化等等 :






按 "儲存圖片" 可將編輯後的影像存成 png 檔. 雖然編輯功能沒有 Picpick 強, 但也不失為一個方便好用的小工具.

2017年11月20日 星期一

J.Fla 翻唱的 Shape of You

上週三菁菁的同學芸菁與怡蓉來家裡討論學校作業, 一邊聽音樂一邊討論她們的劇本, 其中有一首蠻好聽的, 是 J.Fla 翻唱自英國歌手 Ed Sheeran 的 Shape of You  :

Ed Sheeran - Shape Of You ( cover by J.Fla )




J.Fla (金貞花) 是韓裔美國人, 是最近在網路以翻唱聞名, 人氣直線竄升的網紅, 參考 :

https://zh.wikipedia.org/wiki/J.Fla
3位不能錯過的新生代 Cover 網紅!

聽聽這首 Shape of You 原唱者 Ed Sheeran 的官方 MV :

Ed Sheeran - Shape of You [Official Video]




感覺不一樣齁! 不知道是不是先入為主的關係, 我怎麼覺得好像 J.Fla 唱得比較好聽呢. 不過, 這部 MV 劇情很有意思, 只是不解為何女主角要不告而別呢?

2017年11月19日 星期日

2017 年第 45 周記事 : 木瓜粄作法

週六下午小舅媽又 Line 我, 叫我晚上回去別煮, 載爸一起去她家吃牛肉麵, 哇, 連續兩個周末都給舅媽請, 只好叫爸將退冰的吳郭魚再冰回去. 剛好婷婷也放周末假, 把已到貨的安博盒子帶回鄉下了, 順便把貨款親自交給她.

吃過晚餐舅媽說要示範木瓜粄的做法, 材料如下 :

木瓜 : 2~3 顆
麵粉 : 適量 (約 100 g)
太白粉 : 適量 (約 3~5 匙)
油蔥酥 : 2~3 匙
胡椒 : 2~3 匙
鹽 : 一匙 (不加亦可)

醬汁
蒜頭 : 2~3 片
醬油 : 適量 (約 3~4 匙)

先將木瓜刨絲, 放 2~3 匙油蔥酥熱鍋 (中火), 倒入木瓜絲, 加入 2~3 匙胡椒粉, 加一碗水拌炒至熟後, 倒入盆中加入麵粉, 太白粉攪拌成糊狀 (不要太水). 平底鍋加油熱鍋, 舀 2~3 球木瓜麵糊至平底鍋中壓平煎至兩面呈金黃色即可.


油蔥酥與木瓜絲放入鍋中

加水拌炒

炒熟後倒入盆中加入麵粉太白粉攪成糊狀

放入鍋中壓平煎至兩邊呈金黃色

煎好後, 將蒜頭切小丁, 加入醬油與少許醋做成醬汁淋在木瓜粄上, 那甜中帶鹹酸的滋味, 沒吃過是無法體會的.

今日下午料理做完之後開始進行水車製作先前準備, 早上去買菜時路經五金行買了 3 張砂紙 (一張 10 元) 回來, 下午拿出上周拆下來的廢棄腳踏車輪框磨去鏽蝕, 由於銹得很深, 磨到手都痠了還是不夠亮, 只好下周繼續 :




這兩天屋旁的小水圳水量大增, 湍急的河水聲表示能量不斷地釋出, 如果能架個小水車發電多好, 這可是 24 小時不斷地發電喔! 不像太陽能只有白天才能發電. 下午勘查了一下, 我覺得蓮霧樹旁的圍牆外的水流最湍急, 最適合架小水車, 發電機與變壓器則可鎖在圍牆上, 水車透過皮帶或鍊條帶動發電機轉動 :




我量了今天的水位大約 10 公分深, 足夠帶動水輪機, 其實只要有 4 公分以上就行了.

安裝 XAMPP PHP 架站工具包

由於在載入從 Hostinger 備份下來的 .sql 檔後發現我筆電 AppServ 裡的 phpMyAdmin 無法正常運作, 原本想重裝 AppServ, 但想到如果原因是 AppServ 裡面的 phpMyAdmin 版本太舊的話, 重裝應該也無法解決問題, 既然要重新架設本機伺服器, 何不試試看很受歡迎的 XAMPP 工具包?

我找到下面這篇文章, 依照其描述下載了 XAMPP 免安裝版, 解壓後放在 E 碟 (我筆電資料碟分割是 E 不是 D), 據作者說這樣就可避免因為安裝版預設安裝在 C 帶來的 UAC 權限困擾. 也對, 這樣就不用每次做測試都要複製檔案到 C:\Appsserv\www 下了.

XAMPP 網頁伺服器架站工具設定與使用教學

XAMPP 官網如下 :

https://www.apachefriends.org/zh_tw/index.html

按首頁最上方 Appache Friends 後面的 "下載" 連結, 會看到 Windows 目前都只有 32 位元版本 :




但這些都是安裝版, 下載免安裝的 zip 檔要按下方的 "更多檔案" 進入 SourceForge 檔案下載網站 :

https://sourceforge.net/projects/xampp/files/

點選 XAMPP Windows 連結 :



點選最新的 7.1.11 版連結 :




會發現有三個免安裝檔案 (portable), 由上而下分別是 .exe, .7z, 與 .zip 壓縮檔, 都可以用, 我下載的是第一個 .exe 壓縮包, 它會導引整個解壓縮過程 :




執行下載的 xampp-portable-win32-7.1.11-0-VC14-installer.exe 壓縮包會先看到如下提示訊息, 因為偵測到我的電腦有啟用 UAC, 為了避免權限問題不要將 XAMPP 解壓縮到 C 碟下面 :




 所以接下來指定解壓縮路徑時要改為非 C 碟 (此處為 E:\XAMPP), 注意, 路徑名稱要全部是英數字, 千萬不要有中文字 :




選擇全部元件 :




這樣就完成解壓過成了, 接下來要先點選 XAMPP 路徑下的 setup_xampp.bat 檔執行路徑設定, 它會打開一個 DOS 畫面, 執行完直接關掉即可 :




如果將此 XAMPP 放到隨身碟或複製到其他電腦, 第一件事情便是執行這個 setup_xampp.bat 更新路徑才能使用 XAMPP.

接下來就可以點選 xampp-control.exe 進入 XAMPP 控制面板, 首先會出現語言選擇, 只有英語與德語, 預設英語即可 :




按 Save 即顯示 XAMPP 的控制台, 但預設似乎隱藏了右邊一排按鈕, 這時要按住視窗右下角向右拉即顯示全景如下 :




按右上角的 Config 按鈕可設定 XAMPP 的文字編輯器, 預設的記事本不好用, 我將其改為習慣的 EditPlus, 也可以設定為 Notepad++ :




在啟動 Apache 與 MySQL 伺服器之前還要將資料庫認證模式從預設較不安全的 "Config" 模式改成較安全的 Cookie 模式或最安全的 http 模式, 按 Appache 第三個按鈕 "Config", 點選 "phpMyAdmin(config.inc.php)" :




這時會用上面設定的預設編輯器開啟 config.inc.php 檔, 將 $cfg['Servers'][$i]['auth_type'] 改為 cookie 或 http 存檔即可. 以上即完成所有設定, 可以按 Appache 與 MySQL 的第一個按鈕 "Start" 開啟伺服器了. 這時會跳出 Windows 安全性警訊, 都必須按 "允許存取" 才會啟動這兩個伺服器 :






看到 Apache 與 MySQL 的第一個按鈕都變成 Stop 即表示兩個伺服器都起來了, 可見 Apache 打開了 80 (HTTP 用) 與 443 埠 (HTTPS 用); 而 MySQL 預設打開 3306 埠, 參考 :

常用 TCP Port作用(各種Port介紹)

這時在瀏覽器輸入 localhost 或 127.0.0.1 應該會顯示 XAMPP 的 dashboard 網頁 :




按右上角的 PHPInfo 顯示 PHP 資訊; 按 phpMyAdmin 鈕則進入 MySQL 資料庫管理網頁 (現已改名為相容之 MariaDB), 輸入管理帳號 root, 預設無密碼直接按執行鈕即可 :




若要設定密碼, 登入後按上方的 "使用者帳號" 鈕, 點選欲設定密碼之帳號右邊的 "編輯權限" :




然後按上面的 "修改密碼" 鈕 :




輸入密碼按執行即可 (我慣用的密碼 mysql 竟然是即弱) :




這樣登出後再登入就必須輸入密碼了, 若要取消密碼就選最上方的 "無密碼", 一般在本機測試其實不需要設密碼. 接下來就可以把自己的 PHP 專案目錄放在 xampp 的 hdoc 目錄下, 例如我的是 E:\xampp\htdocs, 在瀏覽器中輸入 http://localhost/myproject 即可測試專案網頁矣.

What's the difference between utf8_general_ci and utf8_unicode_ci

2017年11月18日 星期六

phpMyAdmin 載入資料庫逾時問題

今天繼續進行 PHP 主機改版, 在對 MySQL 資料庫進行大改版之前, 先備份 Hstinger 上的資料庫, 我想把它重建於本機 AppServ 下備查. 10MB 左右的 ZIP 檔解壓後大約是 76MB 的 .sql 檔, 剛好還在 phpMyAdmin 可載入的 81MB 範圍內. 開啟 localhost 下的 phpMyAdmin 點選載入, 選擇解開的 .sql 檔後按執行 :




結果執行一段時間 (約 5 分鐘) 卻出現下列錯誤訊息 :


Fatal error: Maximum execution time of 300 seconds exceeded in C:\AppServ\www\phpMyAdmin\libraries\import\sql.php on line 83


我找到 sql.php 的第 83 行, 是 while 迴圈中的一個呼叫 strpos() 的敘述 :

$p5 = strpos($buffer, '--', $i);

我以為是 php.ini 的設定太小所致, 所以就去 C:\AppServ\php5 下找 php.ini 檔, 但是卻找不到 php.ini, 而是找到 php.ini-dist 和 php.ini-recommended 這兩個檔, 到底 AppServ 的 php.ini 是哪一個呢? 後來在下面這篇看到, 原來在 Windows 下真正載入的 php.ini 位於 C:\Windows 下面 :

請問appserv v2.5.10 的php.ini在哪呢?

這可以在 http://localhost/phpinfo.php 訊息中搜尋 "Loaded Configuration File" 得知 :




開啟 C:\Windows\php.ini 檔後搜尋 max_execution_time (大約在 254 行左右) 可以找到 PHP 的程式最大執行時間限制, 預設是 30 秒 :

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 30     ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 24M   




我把它改成 1000 秒後重啟伺服器再執行 .sql 載入還是一樣 300 秒就逾時了. 咦? 原先預設是 30 秒, 錯誤訊息怎會報 300 秒, 而被我改成 1000 秒後不是應該報 1000 秒嗎? 可見這跟 max_execution_time 無關. 後來在下面這篇發現, 原來 phpMyAdmin 自己有一個計時器, 其預設值就是 300 秒 :

Maximum execution time in phpMyadmin

這個設定檔是 C:\AppServ\www\phpMyAdmin\config.inc.php, 開啟此檔搜搜尋 $cfg['ExecTimeLimit']  (大約在第 129 行左右), 即可看到其預設值正是 300 秒 :




/**
 * Other core phpMyAdmin settings
 */
$cfg['OBGzip']                  = 'FALSE'; 
$cfg['PersistentConnections']   = FALSE;  
$cfg['ForceSLL']                = FALSE;  
$cfg['ExecTimeLimit']           = 300;    // maximum execution time in seconds (0 for no limit)
$cfg['SkipLockedTables']        = FALSE;  


我把它改成 6000 秒 (100 分鐘) 後存檔, 重新執行 .sql 載入即順利完成了. 




這樣就能放心地進行大改版了.

2017-11-19 補充 :

雖然調整計時器後順利載入備份的 .sql 檔, 但是開啟 phpMyAdmin 時卻出現 "#2003-伺服器並無回應" 頁面 :




但專案網頁又可正常顯示, 表示 MySQL 伺服器其實有在跑, 只有 phpMyAdmin 異常而已. 參考了下列幾篇文章試圖恢復 phpMyAdin 運作仍然無效 :

【MySQL問題解決方案】#2003-伺服器並無回應
[appserv] #2003 -伺服器並無回應
安装mysql服务出现Install/Remove of the Service Denied!错误

看來只好重裝 AppServ 工具包了.

2017-11-19 補充 :

我今天改用 XAMPP 工具包, 因為想試試看不一樣的介面, 而且 XAMPP 有一直在更新. 不過 XAMPP 的 phpMyAdmin 預設上傳 .sql 檔限制只有 2MB, 更改上傳設定須編輯 xampp\php 下的 php.ini 檔, 參考 :

How to Increase Import Size Limit in phpMyAdmin using Xampp server?
http://localhost/phpmyadmin/doc/html/faq.html#faq1-16

我照其設定 :

post_max_size = 800M
upload_max_filesize = 800M
max_execution_time = 5000
max_input_time = 5000
memory_limit = 1000

結果有成功匯入, 但可能我資料表太多, 而上面 max_execution_time 設 5000秒可能還是不夠, 結果只匯入了 245 個資料表 (到 w1907). 後來我在 phpMyAdmin 的 FAQ 裡看到下面這段話 :

If you have shell (command line) access, use MySQL to import the files directly. You can do this by issuing the “source” command from within MySQL:

source filename.sql

原來 MySQL 還可以利用命令列操作資料庫, 以前都沒用過, 其語法參考 :

mysql命令行的基本用法(通用linux和windows)
https://dev.mysql.com/doc/refman/5.7/en/mysql-commands.html

由於我下載的是免安裝版的 XAMPP,  其 MySQL 可執行檔路徑在 xampp\mysql\bin 下, 因此匯入 .sql 資料檔的指令如下 :

E:\xampp\mysql\bin>mysql -uroot -pmysql twstock < e:\hostinger\project\twstock.sql

這裡第一參數 -uroot 表示 user 為 root; -pmysql 表示 password 為 mysql; 第三參數 twstock 為要匯入之資料庫名稱 (我預先建立的一個空資料庫). 指令執行了大約十幾分鐘就結束了, 進入 phpMyAdmin 檢查確定全部資料表都有完整匯入. 一道指令就可完成的事, 費了這麼多功夫繞遠路竟然還徒勞無功! 或許之前的 AppServ 中的 MySQL 用命令列就能搞定了. 不過我覺得還是改用 XAMPP 好, 因為 AppServ 實在太舊了.

2017年11月17日 星期五

證交所信用額度總量管制餘額表

最近這一個月每周六載二哥去學校上 APCS 課, 我就去附近家樂福看書, 連續看了三本理財書後, 想起因為證交所網站改版而停擺超過半年的爬蟲專案, 所租的 Hostinger 主機變成閒置資產實在浪費, 因此這周突然有了動手改版的動力, 接下來的一段時間要集中全力在網站改版上.

今天要盤點的對象是信用額度總量管制餘額表, 其舊網址格式如下  :

# http://www.twse.com.tw/ch/trading/exchange/TWT93U/TWT93U.php?input_date=104/05/20

現在連過去會看到如下說明 :

您好:

本公司全球資訊網已於106年5月23日改版,您目前瀏覽使用的網址並不正確,建議您自首頁(http://www.twse.com.tw/)重新瀏覽,並更新瀏覽器「我的最愛」或「書籤」設定。

如須進一步協助請參閱本公司官網改版問答集(http://www.twse.com.tw/downloads/zh/home/TWSE_QA.pdf),或洽投資人服務中心專線:(02)2792-8188
錯誤代碼為:8348613256455828716
事件代碼為:62855325295449445

TWSE revised the official website on 23rd May, 2017. The URL address you were trying to reach seem to be incorrect or outdated. Please update your browser bookmark(s), thank you.

TWSE official website: http://www.twse.com.tw/
Page Error Code:8348613256455828716
Event ID:62855325295449445

新版網址已改為 :

http://www.twse.com.tw/zh/page/trading/exchange/TWT93U.html

但這是分頁式網頁, 需選取下拉式選單中的 "全部" 才會能取得全部上市股票與 ETF 的信用交易資料. 如果要取得全頁式網頁則要按左上角的 "HTML" 超連結 :




其網址格式為 :

http://www.twse.com.tw/exchangeReport/TWT93U?response=html&date=20171110

可見雖然網頁標題使用民國紀元 但 URL 卻用西元紀元. 這日期若傳入非交易日的話會得到一個只有表頭的空表格 (有日期); 若傳入未來日期則顯示 "查詢日期大於今日,請重新查詢!".

信用交易資料放在一個唯一的 tbody 表格中, 而且表格相當乾淨, 沒有任何 inline 的屬性, 所以相當容易剖析, 只要用下列指令去除多於 1 個的空格 :

$data=preg_replace("/([\s]{2,})/","",$data);

然後逐列逐行拆解即可 :

            <tbody>         
                <tr>                 
                        <td>0050</td>                 
                        <td>元大台灣50</td>                 
                        <td>216,000</td>                 
                        <td>1,000</td>                 
                        <td>0</td>                 
                        <td>0</td>                 
                        <td>217,000</td>                 
                        <td>119,000,000</td>                 
                        <td>2,716,000</td>                 
                        <td>0</td>                 
                        <td>160,000</td>                 
                        <td>0</td>                 
                        <td>2,556,000</td>                 
                        <td>940,467</td>                 
                        <td></td>                 
                </tr>

此網頁對應的爬蟲程式為 fetch_twse_daily_debit.php, 除了擷取的網頁網址要改外, 還有網頁表格的起迄信標也要改為如下 :

  $start="<tbody>";  //起始字串
  $end="</tbody>";   //結束字串

除此之外的程式碼都不用修改.

這張表格中需要擷取的欄位有四個 :

融券賣出 : bearish_sale=$brr[3]
融券餘額 : bearish_balance=$brr[6]
借券賣出 : short_sale=$brr[9]
借券餘額 : short_balance=$brr[12]

都寫入個股的 zxxxx 日報表欄位中. 由於證交所每天 20:30 與 22:30 各更新一次, 因此只要在這兩個時間之後去 query 即可.

"股價持續上漲但借券賣出也同時增加時要注意高點可能已近, 但借券賣出餘額減少卻可能是多頭訊號. 借券餘額增加表示有潛在賣壓, 但借券不一定會賣出, 若借券賣出也增加就要小心了."

參考 :

# http://www.cmoney.tw/notes/note-detail.aspx?nid=15403