2020年1月31日 星期五

Excel 函數學習筆記 (一) : 試算表基本操作

我在市圖借到一本 Excel 函數的好書 :

# Excel 公式 + 函數超級辭典


Source : 博客來


很久之前就想好好鑽研 Excel 的妙用, 心動不如行動, 就從 2020 的新春開始行動吧! 計畫是每周回鄉下時學 3~6 個函數, 此書總共有 360 個函數介紹, 所以明年的此時應該就可以學完了.

我手上還有如下幾本 Excel 函數書, 都放在辦公室書櫃, 作為參考用 :


1. 輸入公式與函數 :

Excel 的函數可看成是一種特殊的公式, 點試算表的任一儲存格, 在上方 fx 右方框裡先輸入 "=", 這是開始輸入公式的標記, 這時左方會出現函數下拉式選單可選擇要呼叫的 Excel 函數, 預設是 SUM() :




照其提示輸入要加總之參數後按 Enter, 結果會顯示在儲存格中 :






2. 運算元 (資料型態) :

Excel 的運算元 (資料型態) 有下列四種 :
  • 數值
  • 布林值
  • 錯誤值
  • 字串
這四種資料型態可以用字面值 (常數), 儲存格參照位址 (reference), 或函數產生. 由於 Excel 主要是用儲存格 (cell) 來儲存資料, 因此 Excel 公式中最常存取儲存格參照位址所存放的資料.

數值資料可用符號如下 :

0 1 2 3 4 5 6 7 8 9 + - / . , () E e % $

用法摘要如下 :

  • 數值資料在儲存格中一律靠右顯示 (字串為靠左).
  • 逗號用來表示千分位 (每三位數一個逗號), 注意, 若逗號後面超過三位數, 則Excel 會自動校正; 但若不足三位數則會被視為字串. 
  • 小數點用來表示浮點數, 但若小數點多於一個則視為字串. 
  • 數字需連續, 中間若有空格會被視為字串. 但表示分數時則需使用一個空格隔開整數部分與真分數部分, 例如帶分數一又四分之一應該用 1 1/4 表示, 其值為 1.25; 而 1/4 必須用 0 1/4 表示 (前面要有 0 與空格), 其值為 0.25, 若中間無空格將被視為字串, 只用 1/4 則會被視為當年的日期 1 月 4 日.
  • E 與 e 為科學表示法符號, 表示 10 的次方數, 例如 1234 可表示為 1.234E3 或 1.234e3. 每一個儲存格都有預設字元寬度, 超過寬度時會自動改成科學表示法, 例如輸入 123456789012 會顯示 1.23457E11.
  • 日期與時間在 Excel 也是數值, 雖然輸入 2020/1/31, 其實 Excel 內部會轉成自 1900/1/1 至該日之日數儲存; 而輸入 16:04:17 則會轉成零時零分零秒至該時間的秒數儲存. 
布林值只有 TRUE 與 FALSE 兩個值. 錯誤值用來表示錯誤訊息, 例如 #VALUE!, #NAME!, #NUM! 等.

只要不是數值, 布林值, 與錯誤值等就是字串, 用法摘要如下 :
  • 字串在儲存格中一律靠左, 每一個儲存格最多只能容納 32000 個字元. 
  • 如果要將數值當成字串儲存, 則須在數值前面加單引號, 例如 '123456. 
  • 若要在公式中使用字串當運算元, 必須用雙引號括起來, 例如 "DAY".


3. 運算子 :

Excel 公式中的運算子也有四種 :
  • 參照運算子 (傳回數值, 布林值, 或字串)
  • 算術運算子 (傳回數值)
  • 比較運算子 (傳回 TRUE/FALSE 布林值)
  • 字串運算子 (傳回字串)
參照運算子用來參照儲存格, 以取得儲存格內之資料; 算術運算子對數值運算元進行計算; 比較運算子用來判斷運算式之真偽; 字串運算子用來串接字串.


 Excel 參照運算子 說明
 : (分號) 儲存格起迄範圍
 , (逗號) 儲存格範圍之聯集
   (空格) 儲存格範圍之交集

 Excel 算術運算子 說明
 + 加
 - 減
 * 乘
 / 除
 % 百分比
 ^ 次方

 Excel 比較運算子 說明
 = 等於
 > 大於
 < 小於
 >= 大於等於
 <= 小於等於
 <> 不等於


這些運算子混合運算時有如下之優先順序 (注意, "-" 身兼負號與減法運算子), 但可以用小括號 () 改變預設之優先順序 (括號內優先) :


 順序 運算子
 1. : (儲存格參照) ,  (參照聯集與交集)  
 2. - (負號)
 3.  % (百分比)
 4.  ^ (次方)
 5.  *, / (乘除)
 6.  +, - (加減)
 7.  & (字串串接)
 8.  =, <, >, <=, >=, <> (比較)


可見在預設無括號下, 參照運算子優先權最高, 其次依序是負號, 百分比, 次方, 乘除, 加減, 比較運算子優先權最低. 注意, % 在 Excel 中為百分比運算子, 不是求餘數; 不等於是用 <>, 不是 !=. 例如 :





另外還有一個字串串接運算子 & (傳回字串), 例如 :




4. 儲存格參照 : 

上面範例是直接在公式中輸入運算元, 但 Excel 以試算表為資料儲存與運算區域, 因此公式與函數中的運算元主要是參照 (定位) 試算表中的儲存格內容.

Excel 試算表為 2D 陣列 (矩陣) 結構, 橫軸索引 (欄) 為英文字母 A, B, C, D ..., 縱軸索引 (列) 為整數 1, 2, 3, 4, ..., 儲存格的參照就是利用前橫 (欄) 後縱 (列) 索引為座標來定位, 其方式有三種 :

  • 絕對參照 :
    座標以 $ 開頭表示絕對參照, 例如 $A$1, 複製到其他儲存格時不會改變其位置. 
  • 相對參照 :
    座標不是以 $ 開頭表示相對參照, 例如 A1, 複製到其他儲存格時會改變其相對位置.
  • 混合參照 :
    座標中一個以 $ 開頭, 另一個不以 $ 開頭稱為混合參照, 例如 $A1 表示固定在 A 欄, 而 A$1 表示固定在 1 列. 複製到其他儲存格時有 $ 者不會改變其相對位置, 沒有 $ 者不會改變其位置. 

例如上面範例中的公式 =SUM(1,2,3) 可以將運算元 1, 2, 3 放在 A1, A2, A3 儲存格內, 然後在 B3 儲存格輸入公式 =SUM(A1, A2, A3), 使用相對參照存取儲存格 A1, A2, A3, 結果為 6 :




接著在 B1 與 B2 分別輸入 5 與 4, 然後將 B3 複製到 C3 儲存格, 結果為 15, 且 C3 的公式變成 =SUM(B1, B2, B3), 可見相對參照在複製時會改變其參照位置 :




這是因為 B3 是參照其前一欄位的前三個儲存格, 所以把 B3 複製到 C3 時, C3 也秉持此相對性, 參照前一欄之前三個儲存格, 即 B1, B2, B3.

如果將 B3 的公式改為絕對參照 =SUM($A$1,$A$2,$A$3), 則將 B3 複製到 C3 時參照位置不變, 仍然參照到 A1, A2, 與 A3, 所以 C3 結果仍然是 6, 其公式仍為 =SUM($A$1,$A$2,$A$3) :





混合參照時也是同樣原理, 絕對的部分參照索引固定不動, 相對的部分則會移動參照索引位置.

2020年1月30日 星期四

高科大還書 2 本

有兩本書到館, 先還這兩本去取書 :
  1. 網站擷取 : 使用Python
  2. D3.js數據可視化實戰手冊
Python 基礎書籍尚未整理完, 反正這兩本目前沒時間看.

還有一本 2/19 要還 :
  1. 深入淺出Python
希望在那之前能看完.

2020年1月29日 星期三

好書 : Elements of Numerical Mathematical Economics with Excel

今天看到一本 EXCEL 的好書 :

Elements of Numerical Mathematical Economics with Excel

Mathematical economics (數理經濟學) 是應用數學理論來分析經濟問題的學問, 牽涉的數學工具包括微積分, 微分方程式, 矩陣與線性代數等, 參考 :

https://en.wikipedia.org/wiki/Mathematical_economics

此書全部使用 EXCEL 來做計量分析, EXCEL 是我工作中不可或缺的強大工具, 但我充其量也只會其中的一小部分試算表功能而已, 事實上它的函數, VBA, 以及繪圖等功能都非常好用, 有空要要好好地來學學.

其實去年底我在市圖也借到一本 EXCEL 函數的好書 :

# Excel 公式 + 函數超級辭典


Source : 博客來


此書為強國資深微軟 MVP 王國勝所著, 鉅細靡遺地介紹 EXCEL 的每一個函數的數學原理與用法, 是我看過最棒的一本 EXCEL 函數書籍.

可惜這本書使用新版 Office 2016, 而我還在使用老掉牙的 Office 2003! 有些函數可能無法使用, 這讓我想要買一套最新的 Office 2019, 目前最便宜是 UDN 的促銷價 4190 元 !

★快速到貨★Microsoft 微軟 Office 2019 家用版(中文盒裝版)  $4190

2020年1月28日 星期二

2020 年第 4 周記事

年前最後一周只上三天班, 週四起便開始放春節連假了, 但年終大掃除工作只完成了七八成, 時間不夠, 就湊合湊合過年吧. 現在春節對我而言意義不大, 不過就是另一種長假而已, 除了上廟裡祈福外, 通常都是用來讀書. 因年後要還學校圖書館的 Python 書, 所以過年期間都在閱讀整理 Python 筆記, 以及消化市圖所借之書.

初一早上去廟裡拜拜, 行程是先到五穀廟, 再去山腳下的土地公與水仙王伯公廟上香, 最後再去文昌帝君廟, 原本下午要去獅子頭伯公那邊, 但延至初二下午. 久未往來只在每年家族掃墓才會碰面的族兄初二下午突然來訪, 暢談了一個下午. 小時候兩家感情沒有很好, 似乎祖母那代有些紛爭, 倒是搬離大家族三合院後才較有來往.

昨日初三晚上接到愛心通知說阿蘭發燒要送診需家人到場, 因近日中國武漢肺炎爆發, 大家都很緊張, 做了各種檢查原來是尿路感染, 需住院兩天. 晚上急診室擠滿了各種病患, 有突然吐血的老人, 被公婆家狼犬咬傷手臂的婦人, 還有酒醉後送醫吵著要離開的大叔, 醫護們忙得不可開交, 這種工作對我們是驚奇, 但卻是他們的日常.

這禮拜看完一部 2013 年的舊韓劇 "聽見你的聲音", 描述一個擁有讀心術的高中生朴修夏 (李鍾碩飾) 與公設辯護律師張慧星 (李寶英飾) 的愛情故事, 劇情從還是高中生的慧星目擊朴修夏與父親的車禍事件開始, 朴父被肇事司機閔俊國持大型鈑手打死, 慧星前往法庭指證閔俊國殺人, 導致閔俊國在獄中策劃出獄後的連串報復計畫.

春節期間除了買豆腐外, 幾乎不用買青菜, 還好上個月狂種波菜, 大陸妹, 以及茼蒿與牛皮菜, 剛好趕上過年使用. 但五株高麗菜則慘不忍睹, 完全被菜蟲啃光無法結球, 不灑農藥根本無法收成, 以後不再買高麗菜苗了, 一株 10 元可以買大陸妹 10 株, 而且不灑農藥也不怕蟲咬.

2020年1月23日 星期四

好書 : 自律就是自由

本書的書名 Discipline Equals Freedom 看似矛盾, 自律是一種約束, 怎麼會是自由呢? 其實自律是邁向真正自由的手段, 無法自律的人生活將會一團糟, 根本毫無自由可言. 德國哲學家康德認為完全隨心所欲的人無法獲得精神上的自由, 能夠自律的人才能獲得超越外在限制的精神自由.

作者 Jocko Willink 出身美國海軍三棲特戰海豹部隊, 在 20 年軍旅生涯中從一個普通招募士兵逐步晉升為軍官, 曾在伊拉克戰爭中擔任海豹三隊指揮官, 協助美國陸軍第一裝甲師收復伊拉克城市布魯瑟, 後來成為負責訓練美國西岸所有海豹部隊的訓練官, 獲頒銅星與銀星等勳章. 退役後成立管理顧問公司 "前線部隊", 將戰場上學到的自我管理與團隊管理技巧傳授給客戶, 協助其領導團隊邁向成功.

自律就是自由 :輕鬆取巧純屬謊言-唯有紀律才是王道


Source : 博客來


筆記摘要如下 :
  1. 紀律來自內心, 是內在的力量. 真正的紀律無法外求, 外在的紀律不強, 不會持久. 也無法自給自足. 
  2. 自給自足的紀律分成思考與行動兩個層面, 我們的目標是從思考活動開始對自己的腦袋宣布戒嚴, 控制自己的心, 別讓它反過來控制你, 接著採取行動, 目標純粹只是為了遵循既定紀律而非外在利益. 
  3. 康德認為精神上的支撐點來自純粹理性建構的自動自發 (autonomous), 人有尊嚴與精神上的自由正是來自這種自律能力.
  4. 完全被他律擺布的人就像自由落體中的身體一樣, 完全受制於他律, 是不自由的. 
  5. 自律並非要強硬地去對抗慾望, 我們還是得滿足基本的生理需求, 例如睡眠與營養.
  6. 心理學家蔡志浩 : 找回人生的主導權就從建立紀律開始, 關鍵的第一步是運動. 不管做甚麼都得訓練自己, 而運動就是所有訓練的原型.
如同投資一樣, 無法遵守投資紀律的人不可能邁向財務自由.

2020年1月21日 星期二

好站 : Python 程式交易 30 天新手入門系列

今天在 IT 幫幫忙看到 Python 程式交易的系列教學文章非常棒 :

# Python 程式交易 30 天新手入門系列

程式交易主要有兩大部分, 一是交易程式, 二是交易策略, 策略才是關鍵, 但交易資訊系統則是根本, 作者這份教學真是造福投資大眾. 此系列文章以元大期貨 API 為交易管道, 利用下列 Python 套件來建構交易系統 :
  • loguru : 輸出 log
  • requests : 抓取金融資料
  • chardet : 判斷資料編碼
  • pyquery : 解析 HTML 資料 (用法類似 jQuery)
  • js2py : 修整代理伺服器取得之 IP (避免被封鎖)
  • sqlalchemy : 資料庫介面
  • plotly : 2D 繪圖
  • wxpython : 視窗 GUI
其中 pyquery 套件我之前沒聽過, 其用法類似 jQuery, 用來解析 HTML 比 Beautifulsoup 更方便. 我在 Day 7 教學文章中找到下載盤後資料的網址格式, 我之前用的是 HTML 格式, 這裡則用 JSON, 應該更好解析 :

https://www.twse.com.tw/exchangeReport/MI_INDEX?response=json&type=ALLBUT0999&date=20190904  (全部每日)
https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=csv&date=20190401&stockNo=1101  (個股每日)

以前用 PHP 製作爬蟲與解析 HTML 撈資料比起 Python 要累多了, 而且網頁格式一改又要修改程式, 沒做註解就頭大了.

關於 Mac Mini 與 Swift 5 版本問題

昨天逛明儀時看到下面這本書, 突然對 Swift 語言有了興趣 :

iOS 13程式設計實戰:Swift 5.1/SwiftUI框架

但是 Swift 必須在 MacOS 的 XCode 上編譯, 這讓我想起多年前差點買下去的 Mac min (當時是 C2D 機種), 於是上露天去看看現在還有沒有便宜的二手 Mac mini, 結果找到下面這台 2011 Mid 的 A1347, 要價 9000 元 :

Apple Mac Mini i5 A1347 /8G記憶體/ SSD240G $9000

我看有人發問要買 2012 年的, 與 2011 年的有差很多嗎? 根據下面這篇文章, 其實差距不大 :

你所不知道的蘋果電腦年份與硬體效能相關性




但又覺得 2011 已經是 9 年前的產品了, 要不要多花幾千元買 2014 的呢? 看了下面這篇更傻眼, 原來 2014 以後的 Mac mini 電腦把 DRAM 焊死在主機板上, 根本沒辦法自行升級, 而且效能還倒退嚕, 真的超傻眼 :

# Mac Mini 2014年款購買前請注意其限制及優缺點 NOT User friendly




參考 :

Apple Mac 電腦 使用 SSD,安裝Bootcamp
Raid 0 SSD高速運算時代來臨-舊 Mac 使用者福音
Thunderbolt 還是 UASP USB3.0
https://zh.wikipedia.org/wiki/MacOS
Xcode 10.2 on High Sierra – Step by Step
2012 late mac mini i7與 2014 mac mini選擇

不過露天賣家這款 2011 mid 的 Mac mini 只能升級到 MacOS 10.13.6 (High Sierra), 亦即最高只能到 Xcode 10.1, 所以無法使用 Swift 5 (Xcode 10.2 開始支援), 而最新的 Xcode 11 需要 macOS 10.14.3 Mojave :

"Apple has updated Xcode to only work with the latest Mac OS Mojave (10.4.4), this means that developers who have old Macs won’t be able to update their OS and develop in Swift 5 using Xcode 10.2.1."
"Xcode 11 requires a Mac running macOS Mojave 10.14.3 or later."

參考 :

Is it possible to install Xcode 11 on High Sierra (10.13.6)?
Swift 5 Release Notes for Xcode 10.2
Version Compatibility

不過還是有人想辦法在 High Sierra 上跑 Xcode 10.1 (Swift 5.0), 雖然可能造成系統不穩定, 參考 :

Swift 5 on macOS High Sierra

看來要用 Swift 5/Swift UI 最好還是買新的 Mac mini 為宜, 目前最便宜也要 24479 元 (momo) :

Mac mini 3.6GHz i3四核心第八代/8G/128G(MRTR2TA/A) $24479

我之前有在 Inhon 筆電上用 Virtualbox 安裝 High Sierra 映像檔, 但不知甚麼原因卡住而失敗, 參考 :

在 Win10 機器上安裝 VirtualBox 執行 MacOS 虛擬機器

有空再來玩一次, 改安裝 Mojave 映像檔看看能否成功, 參考 :

在VirtualBox虛擬機器內安裝並使用 macOS 10.14 Mojave 吧!
如何製作蘋果作業系統 macOS 10.14 Mojave 的安裝映像檔(ISO 下載)?
How to Install macOS High Sierra in VirtualBox on Windows 10

Python 學習筆記 : Django 2 測試 (五) : 在虛擬環境中佈署網站

一直以來我都直接在 Win10 系統下使用本機安裝的 Python 3.7 與 Django 2 測試 Django 網站, 但最近安裝測試 Django 的 CMS 應用程式 Mezzanine 時, 發現它會將本機的 Django 2 移除改成 Django 1.11.27 版, 參見 :

Django CMS Mezzanine 測試 (一) : 安裝與系統設定

這才發覺虛擬環境的好處, 測試時用虛擬環境才不會改變本機的執行環境. Python 虛擬環境操作相關指令如下表 :


 虛擬環境指令 說明
 pip install virtualenv 安裝虛擬環境套件
 virtualenv venv 在目前目錄下建立虛擬環境子目錄 venv
 cd venv 切換至虛擬環境子目錄 venv
 Scripts\activate 啟動虛擬環境
 pip install django==2.2.9 在虛擬環境下安裝 Django 2.2.9
 deactivate 關閉虛擬環境


1. 安裝 virtualenv 套件 : 

Python 的虛擬環境套件是 virtualenv, 我之前就已在 Swift5 Win10 筆電上安裝過, 所以用 pip3 instal 加 -U 選項安裝新版 : 

C:\Users\User>pip3 install virtualenv -U   
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/05/f1/2e07e8ca50e047b9cc9ad56cf4291f4e041fa73207d000a095fe478abf84/virtualenv-16.7.9-py2.py3-none-any.whl (3.4MB)
Installing collected packages: virtualenv
  Found existing installation: virtualenv 16.7.5
    Uninstalling virtualenv-16.7.5:
      Successfully uninstalled virtualenv-16.7.5
Successfully installed virtualenv-16.7.9

安裝好 virtualenv 套件後就可以利用它來建立虛擬環境了.


2. 建立虛擬環境 : 

安裝好後就可以建立虛擬環境了, 以下測試將在 D:\tmp 下建立一個虛擬環境目錄 venv (自訂名稱) :

D:\tmp>virtualenv venv         (建立一個虛擬環境目錄 venv)
Using base prefix 'c:\\python37'
New python executable in D:\tmp\venv\Scripts\python.exe
Installing setuptools, pip, wheel...
done.

此指令會在當前目錄 D:\tmp 下建立一個虛擬環境目錄 venv, 切換到 venv 子目錄, 其結構如下 :




其中的 Scripts 子目錄下有操作虛擬環境的相關指令檔, 主要是 :

  • activate (啟動虛擬環境)
  • pip/pip3 (安裝套件)
  • deactivate (退出虛擬環境)

整個虛擬環境目錄初始大小約 24MB 左右 :




然後切換到虛擬環境目錄 venv 下, 執行 Scripts\activate 指令啟動虛擬環境 :

D:\tmp>cd venv 
D:\tmp\venv>Scripts\activate   

(venv) D:\tmp\venv>

這時路徑前面會出現 (venv) 表示目前是在虛擬環境中.

接著可用 pip install django 安裝最新版 Django, 由於 Django 在 2019 年底發布了第三版, 只要差異是支援了非同步 ASGI 以及 MriaDB 等, 另外在語系設定上也與第二版不同, 第二版最後版本為 2.2.9, 因此若要使用第二版與指定版本, 例如 :

(venv) D:\tmp\venv>pip install django==2.2.9 
Collecting django==2.2.9
  Downloading https://files.pythonhosted.org/packages/cb/c9/ef1e25bdd092749dae74c95c2707dff892fde36e4053c4a2354b2303be10/Django-2.2.9-py3-none-any.whl (7.5MB)
Collecting sqlparse
  Using cached https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl
Collecting pytz
  Using cached https://files.pythonhosted.org/packages/e7/f9/f0b53f88060247251bf481fa6ea62cd0d25bf1b11a87888e53ce5b7c8ad2/pytz-2019.3-py2.py3-none-any.whl
Installing collected packages: sqlparse, pytz, django
Successfully installed django-2.2.9 pytz-2019.3 sqlparse-0.3.0

可見除了安裝 Django 2 之外, 還會安裝 pytz 與 sqlparse 這兩個相依套件. 用 pip list 檢視虛擬環境中已安裝套件 :

(venv) D:\tmp\venv>pip list 
Package    Version
---------- -------
Django     2.2.9
pip        19.3.1
pytz       2019.3
setuptools 45.1.0
sqlparse   0.3.0
wheel      0.33.6

這就是架設 Django 最純淨的環境, 安裝完 Django 2 之後虛擬環境目錄 venv 大小約 48.3MB. 如果需要用到爬蟲功能, 可再用 pip install 安裝 requests 與 beautifulsoup 等套件.


3. 在虛擬環境中建立 Django 專案 :

接下來就可以在此虛擬環境中建立 Django 專案了, 過程與在本機 Python 環境中的作法一樣,  參考 :

Python 學習筆記 : Django 2 測試 (一) : 請求與回應處理

首先在虛擬環境目錄 venv 下用 django-admin startproject mysite 建立一個名為 mysite 的專案 :

(venv) D:\tmp\venv>django-admin startproject mysite    (建立專案)

(venv) D:\tmp\venv>cd mysite     (切換到第一層專案目錄)

(venv) D:\tmp\venv\mysite>python manage.py runserver   (啟動伺服器)
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 21, 2020 - 00:34:03
Django version 2.2.9, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

可見開發伺服器已順利啟動, 開啟瀏覽器連線 http://127.0.0.1:8000/ 即可看到預設之專案網頁了 :




另外參考下面這篇, 將之前在本機中的 mysite 專案目錄複製到 D:\tmp\venv 目錄下覆蓋上面的初始 mysite 專案目錄 :

Python 學習筆記 : Django 2 測試 (三) : 模板的匯入與繼承




結果與在本機環境一樣, 虛擬環境的好處就是可以在特定之 Python 與 Django 環境下開發專案, 而不會受到本機的版本限制.


4. 退出虛擬環境 : 

先按 CTRL+C 終止開發伺服器, 然後用 deactivate 指令即可退出 Python 虛擬環境 :

(venv) D:\tmp\venv\mysite>deactivate   
D:\tmp\venv\mysite>

前面的 (venv) 消失了, 表示已退出 Python 虛擬環境. 如果測試完不再使用這個虛擬環境, 只要將整個目錄刪除即可.

2020年1月20日 星期一

2020 年第 3 周記事

第三周? 不是才剛跨年嗎? 怎麼 2020 的 1 月就快見底了? 過去的一周主要在學習 Git 的用法, 目的有二 : 用 GitHub 來儲存已往所做的測試程式碼, 以及在 Heroku 上架設網站. 但 Git 的學習有點牛步, 其實為了這兩個目的只要學會 Git 基本用法即可, 其他進階用法例如協同開發需要的分支合併等以後用到再慢慢學即可.

年關將近開始進行大掃除, 周六已完成外浴室清理; 姊姊與菁菁則整理客廳與紗門紗窗; 這兩天要清洗前後陽台. 昨天下午擦洗鄉下的客廳與兩間廁所, 比較傷腦筋的是堆在書房的兩三箱衣服與雜物, 只能小年夜那天回去再整理了. 整理堆置於客廳酒櫥上面的厚厚一疊文件時, 清出過去多年的喜宴請帖, 翻閱之後頗覺物換星移, 有些已人事全非, 人生真是太令人驚奇的旅程.

上個月種的波菜已可採收, 昨天摘了四把來煮晚餐, 不知是心理作用還是怎樣, 總覺得自己種的比較好吃ㄟ, 其餘請小舅採收回去. 種菜不只是蔬菜自給自足而已, 每周回去看到菜又長高了, 心裡有一種滿滿的成就感, 而且也可增進與小舅家的往來. 週六晚上婷婷用剛買的科帥氣炸鍋炸雞翅與雞塊叫我過去品嚐, 我原本要大掃除說不去了, 後來覺得還是去好了, 結果在小舅家聊到 10 點過才回, 預定地大掃除隨時可以做, 但感情的交流稍縱即逝.

小貓兩萬來我家已月餘, 剛開始時整天躲椅子下, 最近已可以讓我抱與撫摸了, 但牠與小咪的關係還是處於敵對與劍拔弩張狀態, 小小咪又很白目常去招惹小咪, 弄得小咪也是神經質發作, 走進客廳時都躡手躡腳四處偵查慢慢走, 而且最近都撤退到姊姊的床上, 而不是窩在客廳的小斑馬寶座上. 小小咪則是以客廳長椅為棲息地.




過年回鄉下要把牠們兩個帶回去嗎? 鄉下家這麼大, 小小咪會躲在哪也不知道, 若要關起來又要帶籠子回去很佔空間, 放在高雄長達 6 天飼料要怎麼處理? 真傷腦筋. 看來要設計一個自動飼料機才行!

2020年1月17日 星期五

好站 : 愛智者書窩

今天在搜尋占星術資料時找到愛智者書窩這個部落格, 版主是個心理諮商師, 也是神祕學的愛好者, 看來讀書量頗豐, 經常推介心理分析, 心理治療, 塔羅牌, 占星術等領域的好書, 值得追蹤 :

愛智者書窩(哲學 ‧ 心理 ‧ 神秘學)

作者有一篇占星術歷史問答值得一讀 :

【星空下的心理學-占星的歷史與問答】

心理諮商師? 我最近常感覺莫名奇妙的憂心忡忡, 以前午覺 5 分鐘內必定進入打呼狀態, 但最近卻睡不著, 總覺得有世界末日般的大事要發生, 該不會是恐慌症吧? 或者憂鬱症? 還是創傷後壓力症候群?

以前服預官役帶兵時也常有這種恐慌的感覺, 值星時總是擔心阿兵哥晚上躲在陣地喝酒鬧事, 衛哨兵是否會因為感情問題想不開而開槍或攜械逃亡; 到外點駐點時又擔心長官突然視察, 為此常常揣揣不安, 因為當年剛下部隊還是菜鳥排長的我, 初次值星便遇到震撼教育.

有一天一輛吉普車駛進營區停在連集合場門口, 我聽到衛兵吹哨後馬上跑過去, 先下車的是一個三條槓的上尉, 我馬上敬禮, 接著下車的是一位著陸軍制服身形矮壯頗有威嚴的長官, 我看到領章是三顆星, 哇, 將軍! 我馬上立正站好敬禮並呼長官好, 這時那位上尉向我說這是司令官, 我馬上再補喊司令官好! 因為到金門後馬上就被接到團部去報到, 沒有去擎天廳聆聽司令官訓話, 我哪知道金門最高階的軍官是三顆星星呢?

因為連長休假, 所以我就陪他巡一下營區, 然後他說要去看戰備道, 由副連長在前面引導沿著窄窄的山路往下走, 因為梅雨季剛過, 往小徑戰備道的山路很滑, 走到一半時司令官突然往後滑一跤, 幸好我跟那位上尉侍從官走在他後面急忙扶住, 否則後果難料. 到了底下戰備道往上瞧就是我那位於大樹根底下的排長室, 幸好他沒上去看, 因為終年潮濕的碉堡我都整日開著兩盞 60 瓦燈泡, 除了除濕也是壯膽.

小徑戰備道經過一周梅雨沖刷實在慘不忍睹, 我皮張得緊緊的等候發落, 他看了看轉頭交代說一個月內要補好, 臨上車前問我是不是預官, 我說是預官 36 期, 然後掀開我的值星帶查看被蓋住的名條與兵籍號碼, 沒說甚麼就走了. 看著急馳而去的吉普車尾, 我腦中一片空白, 心中惶惶不安, 他為什麼要看我名條? 我想這下完蛋了, 但出乎意料的是, 居然甚麼處分也沒有, 就只是接下來的一個月帶弟兄補路補到快累斃了.

我後來才知道這位特意看我名條的司令官, 原來是陸軍二級上將趙萬富 :

https://zh.wikipedia.org/wiki/%E8%B5%B5%E4%B8%87%E5%AF%8C

或許是這個陰影一直藏在潛意識裡面也說不定.


2020-01-20 補充 :

我在 Youtube 看到郝廣才關於三七事件的報導 (2016 年) :

金門誤殺事件 20條無辜人命白白犧牲




此事件發生在民國 76 年 3 月 7 日, 地點是小金門 (烈嶼) 東崗, 當時我才剛到金門下部隊一個月 (76.2.5 日至庵前營部報到, 當日派往小徑) , 加上消息封鎖, 所以我甚麼都不知道.

趙上將來連部視察日期我日記中未記載 (補路累壞了還是嚇壞了), 不過梅雨季是 5 月開始, 據郝柏村總長日記所述, 趙將軍等人於 5 月底被撤換 (司令官換成黃幸強我倒是有印象), 所以推測趙將軍來部視察日期應該是在五月中下旬.

買 Numpy 書與申辦 momo 卡

晚上去逛明儀時發現一本日本人寫的好書 :

# NumPy 高速運算徹底解說 (旗標, 2019)

因旗標的書明儀 VIP 只打 85 折, 上網查 momo 是 79 折, 2/17 前再打 9 折, 相當於打 71 折, 實在划算, 馬上行動 !




滿 500 還能登記一次 66 折機會 :




另外還辦了 momo 卡, 有 5% 優惠 :




# momo 台北富邦聯名卡優惠

高科大還書 1 本

因為二哥要我預約的 "微積分之倚天寶劍" 已到館, 滿借的情況下必須先還一本書才能取書, 挑下面這本先還, 反正這本市圖也有 :
  1. Python錦囊妙計(第三版) (楠梓分館)
二哥說下學期要修工程數學, 叫我幫他向市圖借兩本書寒假要先看. 我可能也需要重讀工數, 不然沒辦法應付他提出的問題.

Git 學習筆記索引

進入 2020 年後我開始測試很久以前就想學習的 Git, 以便能管理自學 IT 技術時所撰寫的大量程式碼以及自己開發的小型專案的版本, 同時也可以將成是碼寄存到遠端儲存庫例如 GitHub 或 Bitbucket, 以下是學習筆記索引 :

Git 學習筆記 (一) : 安裝 Git
Git 學習筆記 (二) : Git Bash 基本操作
Git 學習筆記 (三) : 註冊 Bitbucket 帳號
Git 學習筆記 (四) : 註冊 GitHub 帳號
Git 學習筆記 (五) : GitHub 檔案管理
Git 學習筆記 (六) : 利用 GitHub 架設靜態網站
Git 學習筆記 (七) : GitHub 刪除資料夾的方法

占星術 App : Astrological Charts Lite

幾年前偶然機會裡接觸何鼓的占星術後, 覺得這與我之前的看法大異其趣, 其占星方法牽涉統計學與天文學, 而且純粹以行星為依據, 而不是傳統的 12 星座, 似乎較有學理根據, 參考 :

【何鼓電腦占星術】別具特色的行星推命占星術

不過我短暫涉獵後就一直沒有時間研究.

何鼓的書附光碟裡有占星軟體可以取得即時的行星位置資料, 但沒有 App 版. 最近在 Play Store 上找到一款俄羅斯人寫的 App : Astrological Charts Lite, 可以在手機上即時取得完整星盤資訊, 操作介面也很簡約好用 :

Astrological Charts Lite






占星相關資料網站參考 :

https://astro.cafeastrology.com/natal.php

Medium 上有一篇探討占星與資料科學的文章, 蠻有趣的 :

Connecting the Dots: Astrology and Data Science 

某種程度上, 資料科學被視為一種新型的占星術, 資料科學的研究最重要的不就是預測 (prediction) 嗎? 這很有意思, 參考 :

Why data science is simply the new astrology

2020年1月16日 星期四

Git 學習筆記 (四) : GitHub 基本用法

GitHub 是最有名的遠端 Git 儲存庫, 原本免費用戶必須是 public (公開) 的, 亦即所有人都能存取原始碼, 但在 2019 年初 GitHub 已經取消了免費用戶只能建立公開儲存庫的限制, 儲存空間是 500MB, 允許三人共同協作. "為自己學 Git" 作者高見龍對於 GitHub 有很棒的線上教學, 參考 :

GitHub 是什麼?


一. 註冊 GitHub :

https://github.com/

按右上角的 "Sign Up" 鈕, 輸入使用者名稱, 郵件信箱 (即帳號), 設定密碼 (至少為 8 個字元, 須含一個數字與小寫字母) :



按 "Sign up for GitHub", 進入帳號驗證畫面, 按播放鈕, 將所念的數字填入 "接受挑戰" 底下的輸入框, 按 "驗證" 鈕, 證明自己不是機器人, 再按最底下的 "Next Select a plan" 鈕 :




選擇左邊的免費方案 :




免費方案內容如下, 主要是允許三人協作, 儲存空間 500MB :




然後回答一份簡單問卷 (例如申請目的等) 即顯示確認郵件訊息 :




到郵箱收取確認信, 按信中的確認鈕後會開啟 GitHub 網頁, 並傳送設備驗證碼, 輸入所收到的驗證碼後即完成註冊.


二. 新增儲存庫與建立新分支 : 

有了 GitHub 帳號後就可以建立一個儲存庫 (repository) 專案了. 首先在登入 GitHub 後按 "Start a project" 鈕新增專案, 此專案我是要用來放置我的測試程式碼之用, 故取名 test :




在 Repository name 欄中填入儲存庫名稱, 同一個帳號下不可重複, 勾選 Public (預設公開) 或 Private (私人用) 後按 "Create repository" 鈕即可 :




因為有勾選在建立儲存庫時同時產生讀我檔做初始化提交 (initial commit), 所以預設會顯示 README.md 的內容 :




在左上角的 "Code" 頁嵌下方的下拉式選單顯示 "Branch: master", 表示這是 README.md 這個檔案的預設主分支 (Master branch), 可以點此下拉式選單, 輸入新分支名稱, 例如 READ.ME_new_20200303, 然後點一下底下的 "create branch: READ.ME_new_20200303" 超連結, 這會從主分支的 README.rd 複製一份拷貝到新分支 :




完成後會顯示新分支的 README.md 檔案, 內容與主分支的一樣 (拷貝), 但 "Branch" 頁嵌底下變成有 master 與 READ.ME_new_20200303 這兩個分支, 目前顯示的是新分支的 README.md 內容, 而不是主分支 master 的 README.md 內容 :




建立 README.md 檔案的新分支其實就是建立該檔案的一個副本 (測試版本), 主要用來進行測試或編輯, 等程式或檔案測試或編輯結束, 我們可以將其合併 (Merge) 到主分支上, 完成版本更新.

點右邊的那支筆可以編輯此新分支的 README.md 檔案 :




GitHub 內建編輯器 (附行號), 此處添加新的一行  :




然後在底下的 Commit changes 欄填入改變的註解後, 按 "Commit changes" 更新檔案 :




可見這個新分支的 README.rd 內容已經被改變了 :




按 "History" 按鈕會顯示版本變更的歷史 :




以上操作也可參考 "為自己學 Git" 一書作者高見龍的線上教學 :

Git教學:如何 Push 上傳到 GitHub?


三. 拉取要求 (pull request) 與合併到主分支 :

上面我們已透過建立新分支 (測試版) 複製了 README.md 的副本, 並且在此副本上進行了修改, 完成確認無誤後想要讓它回歸到主分支 (原始版) 呢? 這必須利用 Pull Resquest (PR) 功能, 從某個新分支做 PR 後再合併到主分支去. 首先選取要 PR 的新分支, 按右邊的 "New pull request" :




輸入 PR 的主旨與內容後按右下角的 "Create pull request" 鈕 :




這時會切到 Pull requests 頁嵌, 顯示剛剛我們所 PR 的結果, 可以點擊裡面有修改的檔案超連結, 確認是否可允許合併到主分支, 沒問題的話就按底下的 Merge pull request 鈕將新分支合併到主分支來 :





合併動作需要確認, 按 "Confirm merge" 即開始進行合併, 完成後顯示合併結果如下 :




切到 Code 頁嵌可見主分支的 README.md 內容已經更新為新分支的 README.rd 內容了 :




參考 :

Merge Branches into Master Branch in GitHub using Pull Requests

Pull request 其實還有更廣大的用途, 就是用在多人協作, 任何人可用 Fork 功能複製整個專案到自己的 GitHub 帳戶中進行修改, 改完後用 Pull request 通知原作者表示你已對此專案做了一些貢獻, 主分支的擁有者 (原版) 在確認這些新版檔案的價值後, 可以將其合併到主分支中, 參考高見龍非常棒的教學影片說明 :

與其它開發者的互動 - 使用 Pull Request(PR)




參考 :

GitHub 入門(一) — 如何建立Git專案
# GitHub Guide : Hello World project
网页版github上新建文件夹
https://www.youtube.com/watch?v=pytolws6aiE


2020-03-08 補充 :

我在 Stack Overflow 看到 GitHub 其實硬碟使用空間是 1GB, 單檔最大 100MB, 超過 1GB 會發信提醒.



參考 :

Repository size limits for GitHub.com

伺服器應用程式 Web server for Chrome

我在 "Learning JavaScript Data Structures and Algorithms (3rd Edition)" 這本書裡看到它介紹了一個 Chrome Web Server Extension 擴充應用程式, 在 Chrome 中安裝後會提供一個 192.168.xxx.xxx 網址, 手機可連線同一個基地台後存取此 IP, 方便做手機網頁測試 (主要是 Javascript).


Source : 天瓏


在 Chrome 中連接下列網址 "Web Server for Chrome" :

https://goo.gl/pxqLmU 




按 "Add to Chrome" 後再按 "新增應用程式" 鈕安裝即可 :




安裝好後 Chrome 會開啟應用程式頁面 (網址 chrome://apps/), 其中 "200 OK Web Server" 這個應用程式即 Web server for Chrome, 點按會開啟伺服器管理視窗, 顯示伺服器已經預設開啟 localhost (127.0.0.1) 的 8887 埠 :





按上方的 "CHOOSE FOLDER" 鈕開啟網站專案目錄 (即要測試之網站), 然後點底下的網址 http://127.0.0.1:8887 即開啟網站之首頁 :





不過 127.0.0.1 網址只是筆電的 localhost, 手機無法存取, 必須勾選管理視窗中的 "Accessible on local network", 然後移動 "CHOOSE FOLDER" 底下的滑桿重新啟動伺服器, 底下就會出現 192.168.XXX.XXX 的內網 IP :






連接到同一基地台的電腦或手機存取此 192.168.XXX.XXX 網址也可看到網頁, 用 ping 指令可檢查連線是否可通 :

C:\Users\User>ping 192.168.43.14

Ping 192.168.43.14 (使用 32 位元組的資料):
回覆自 192.168.43.14: 位元組=32 時間<1ms TTL=128
回覆自 192.168.43.14: 位元組=32 時間<1ms TTL=128
回覆自 192.168.43.14: 位元組=32 時間<1ms TTL=128
回覆自 192.168.43.14: 位元組=32 時間<1ms TTL=128

192.168.43.14 的 Ping 統計資料:
    封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
大約的來回時間 (毫秒):
    最小值 = 0ms,最大值 = 0ms,平均 = 0ms

參考 :

將Chrome瀏覽器變成「Web Server」方便行動裝置實機測試