Adobe Acrobat Reader DC 造成的記憶體不足

最近買了一條記憶體,跟我電腦上的是同樣大小8GB。原因是電腦出現記憶體不足崩潰的現象。

記憶體比兩年前便宜很多,順便一看SSD也是,這題外了。

查了一下解法,既然記憶體便宜許多,那就多裝一條不就解了?我看我的記憶體使用率普遍達70%以上,一個要認真操起來,絕對爆掉。

遺憾是沒有因為裝上一條新的記憶體而解決問題。

尋找根源,我學習到一些找出真兇的方法。可是那時我並沒有找到出來,狀況也隨裝上記憶體好轉。

今天再發生一次,很幸運的是,這次只有提示「記憶體不足」,沒有像之前整台電腦崩潰,看來裝新記憶體還是有幫助的。

在工作管理員的「效能」頁面
記憶體「使用中」的部分沒有全滿。
記憶體「已認可」的部分達到上限!

這樣子,推論出只要「已認可」用罄就會造成記憶體不足的現象發生。

尋找「誰」吃掉記憶體的方法:
打開工作管理員,開啟資源監視器,留意誰是吃爆記憶體的元兇。

有一個程式,吃掉1GB的量,叫做「AcroRd32.exe」。
程式全名叫 Adobe Acrobat Reader DC,是開 .pdf 的程式,可以用來看看文件或是電子書等。

只要用它打開特定電子書,就會發現記憶體「已認可」不斷上升!只要把這程式關掉,狂吃記憶體的現象就會馬上解決。

回想有甚麼怪異之處?

當我打開電子書時,它通知,大概是這樣的意思:

「文件內有些部分需要下載字體才能正常顯示。」

那時我沒有下載,因為關掉通知後,一切看起來很正常,沒有亂碼或缺少會影響閱讀。

試了新版本與用edge打開文件,edge打開是沒有狂吃記憶體。而新版本也一樣會跳通知,吃記憶體的現象會發生。綜合判斷,需要下載字體了。

下載完字體安裝之後,再打開那本電子書,沒有跳通知,也沒有吃記憶體的問題發生。

問題已解決。

話說從需要下載字體的通知下載的安裝檔,會跑出當前的Adobe Acrobat Reader DC版本不能安裝,雖然我是從官網上下載也從程式內檢查更新過都是最新了,版本號還是不符合字體檔要求的。得找過去的字體安裝檔,就能解決。

為什麼我新購記憶體前沒有發現?因為那時一旦出現記憶體不足,整個電腦就會崩潰無法使用,只剩重新開機一途,當然也就沒有辦法開工作管理員及時觀察。也因為有裝新記憶體,才給我能及時找到兇手的機會。

Python pyqt5 與 matplotlib 結合示範之範例1

對於寫 python 的人來說,為了讓程式更方便使用,會想要寫點圖形化介面。

對於 python 來說,最基本的圖形化介面是 tkinter ,網路上也有許多相關教學。不過用程式碼去定義視窗與物件排版,是需要比較學習與辛苦的。

之前我寫過 c# ,用 visual studio 去寫。按鈕、標籤可以直接拖曳到版面上,效率是比較高的,也易懂執行出來的成果會長怎樣。

對於 python 來說,有 qt 可以直接設計界面的,用 qt designer 也生成一個版面,將按鈕、標籤等拖曳到版面中排版,基本樣貌可以直接反應出來。

想要學習 pyqt ,建議直接找書,按部就班,基本上就能學習到讓 python + pyqt 搭配 qt designer 設計。

寫這範例,並不是手把手從零教學,而是展示一些搭配的效果。適合給初學者想再進階的人。

像是將 matplotlib 的繪圖鑲入,並且可以用qt物件去操控繪圖。

如果想要寫股票走勢,用選單選取股票,就能讓繪圖區跑出折線圖或K線圖,甚至可以做即時走勢,如果有辦法弄到即時資料就絕對可以。

以下是範例1:程式碼(github) 、 展示(youtube)

敘述:

有一個介面,繪圖區有兩條sin線,第一條為 sin(x)*2,第二條為 sin(x)*-1,兩條線在不同的軸上。看起來兩條線對稱於 y=0,但實際上兩條線的y值並沒有,兩條線分處的軸上的y軸範圍是不同的。

介面上有按鈕,可以控制 qtimer,qtimer每跑過一個intetval,兩條線就會新增一個值。所以按下 start按鈕,就可以看到兩條線動起來。而按下 stop按鈕,就可以停住qtimer。

介面有一條scrollbar,可以移動圖表X軸範圍,可以看舊的資料,也可以看新的資料。
也有 +按鈕 與  -按鈕 ,可以改變範圍寬度,最短 1 最長 30。

有一個追蹤最新的qcheckbox,勾選後,會以最新資料的x為範圍上限。如果開啟qtimer時有勾選,就可以保持在圖表能顯示最新資料。

滑鼠在圖表區,可以查詢線名、所在軸名、x值與y值。

滑鼠在圖表區,會有一條水平虛線輔助線追蹤滑鼠位置,可以按下 顯示輔助線 切換。
(這代表能夠讓使用者選擇想要顯示甚麼線在圖上)

Python win32gui LoadImage Error 一個很容易解決的情況

ERROR:root:Some trouble with the icon (檔案位置): (0, 'LoadImage', 'No error message is available')

吃到這個消息,如果又想用自製 ico 檔的,將原圖片透過這個網站將圖片轉成 .ico 就可以解決了。

JPG轉ICO – 在線轉換圖標文件

本來我也認為是 ico 類的檔案,不過卻是用小畫家隨便畫了個 16*16 的圖片,然後將 副檔名 改成 .ico ,結果卻過不去,依然報錯。改回 .jpg 報錯。

上網搜尋,遇到問題不多,畢竟這是很小問題,哈哈。網路上的解法大多認為所用 .ico 是正確格式,有人用了網路大神的方法依舊無法解決問題,跟我一樣。

印象中 .ico 也是圖片檔,於是直覺用小畫家弄一個,但 .ico 需要有有固定格式,所以得透過轉換程序才能正常使用,不能用修改副檔名的方式。

Python, Matplotlib, 中文字體顯示的問題

雖然網路上有許多篇文章探討,不過最近再碰到這個問題的時候,仍舊看得有點似懂非懂的。

這裡綜合整理一下個人的看法,並且添上一些說明。

關於中文字體的顯示這是新手關卡,幾乎會碰到也幾乎需要解決。

要解決這個問題,首先可對兩個地方進行改善。

一、 系統磁碟:\\使用者\使用者名稱\.matplotlib
二、python環境\Lib\site-packages\matplotlib\mpl-data (如果使用anaconda,環境就是anaconda的資料夾。如果使用visual studio,可以從python環境打開檔案管理員進入資料夾。)

【如果你想增加字體,一定要做的步驟】

首先第一個地方,進入後會發現一個 fontList.json 的檔案,簡單來說,就是 matplotlib 讀取字體的紀錄。如果想要加入新的字體在 matplotlib 的繪圖中顯示,就得刪除  fontList.json ,讓 matplotlib 重新讀取並生成新的 json。萬一沒有刪,這個檔案就不會變更,新增的字體就不會被讀取到。(如果刪了matplotlib的字體,該json檔也會被變更。)

想顯示中文字,也不一定要新增中文字體,你可以用記事本打開來看,其中有一行「”C:\\WINDOWS\\Fonts\\kaiu.ttf”,」這表示它讀取到系統字形的 kaiu.ttf,也就是知名的「標楷體」,於是在程式中只要指定字體為標楷體,就可以正常顯示中文。

plt.rcParams['font.sans-serif'] = ['DFKai-SB'] #可以直接用上此行顯示中文字,如果不嫌棄標楷體的話

“”” 一定要使用「字體名稱」,不是字檔名kaiu。可以從新生的 json 檔搜尋字檔名(如: kaiu.ttf),會看到有一項 “name”: “DFKai-SB”,其餘字體也可以找到對應的name。”””

【新增字體】

從第二地方 mpl-data 進入 fonts 再進入 ttf 資料夾,這裡可以丟上你喜歡的字體,從網路上下載的也行。

假設我有一個喜歡的字型,範例字型,把它的 ttf 檔放進來後,去第一地方刪除 fontList.json 然後重載(import matplotlib),然後打開 json 搜尋字檔名 I.Ngaan.ttf ,就會找到該字體的 “name”: “I.Ngaan”。

plt.rcParams['font.sans-serif'] = ['I.Ngaan']

這樣就能讓 matplotlib 以這個字體顯示。

【一勞永逸,懶得在程式裡加上那一行】

第二地方有個名為 matplotlibrc 的檔案,可用記事本打開它。搜尋「font.sans-serif」,把字體名,注意!是字體名!要怎麼得知字體名?可由【新增字體】這一部分去了解。在該行的冒號後面加入字體名(範例: I.Ngaan, 或是 DFKai-SB,),然後刪除前方註解(#)。

font.sans-serif     : I.Ngaan,  DFKai-SB,  DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

至於其他很像的「font.cursive」或是「font.fantasy」,從這裡可以了解他們的意思。

!!接著這裡也可以順便解決另外一個常見的matplotlib的問題「負號無法正常顯示」。

找到解決方法通常是加上一句:

plt.rcParams['axes.unicode_minus']=False

在這個 matplotlibrc 的檔案中,搜尋「axes.unicode_minus」可以找到一句

#axes.unicode_minus  : True

將其改成

axes.unicode_minus  : False

就可以一次解決負號顯示的問題。

會特別紀錄這篇,是因為字體名的關係,網路上有教學如何添加字體,給了範例,卻沒有說為什麼字體名是這個。於是我嘗試用[‘標楷體’]卻失敗,用字檔名[‘kaiu’]也失敗,可是,一定得有一個可以找到對照的地方,搜尋方法,最後從json檔找到答案,。
這些方法與說明是目前我在網路沒有找到的,也許日後還會碰到這問題,到時來到在這裡就能找到解答。
個人是不推薦第三種一勞永逸的解法,因為換台電腦就要再去改寫,實在麻煩。所以推薦使用 [‘DFKai-SB’] (標楷體),因為對繁體中文的系統都會自帶這個字體,這樣就不需要額外再改動任何檔案。

群益API,PYTHON,錯誤代碼2017

按下登入,得到錯誤代碼2017,查表之後得到解釋:

「SK_WARNING_REGISTER_REPLYLIB_ONREPLYMESSAGE_FIRST」

這邊是給無法順利從其他正規解決方法的人,一個解法。即便順利回報OnReplyMessage,用範例都會得到錯誤代碼2017的替代方案

使用舊版的SKCOM.dll(64位元)。下載連結

印象中這是去年我找到的方法,不過今年卻找不到出處,於是在此紀錄。因為今天剛好又再一次碰到。

以下是替換成舊版的SKCOM.dll的步驟:

一、按照群益API說明,從解壓縮後資料夾中元件裡的Uninstall.bat,解除註冊COM元件。
(依照自己的電腦位元版本選擇x86或是x64)

二、將下載來的舊版SKCOM.dll複製過去,替換同資料夾的SKCOM.dll。

三、按照正常的註冊流程,重新註冊元件:
1.用系統管理員身分執行 cmd ,進入到舊版SKCOM.dll所在的資料夾(cd 資料夾路徑),然後輸入「regsvr32.exe SKCOM.dll」。
2.用系統管理員身分執行 install.bat 。

群益API可以下載新版的,只要裡面的SKCOM.dll替換成舊版的就可以,不一定要找到舊的API才能執行。

這招大概只能撐到舊版不被支援的那一天,姑且就先將就吧。

Pyqt5 calendarWidget 標註特定日期

加入一個calendar時,除了周末之外,平日為黑色字。今天一月一日這世界普遍放假的日子,卻是黑色字標示,而不是紅色字。

除了固定日期的日子,其他像是五月第二個星期天這樣有特定序數的日子,如果能用calendar標記出來那該多好。

標記第三個週三與一月一日

首先,要先決定什麼是「特別」的日子,弄成一份表並將其讀入。
「2020/01/01, 元旦, 假日, 國定假日」
「2020/01/24, 除夕, 假日, 國定假日」如此類的格式

個人是用字典型式,以日期為鍵,其他資料包裝成List為該鍵的內容。

接著回到Pyqt上面,calendar為「QCalendarWidget」,繪製每cell時,呼叫「paintCell」。

為了分離功能與介面,所以定義了新類別「MyCalendarWidget」並繼承QCalendarWidget,之後就在新類別下編寫功能。

class MyCalendarWidget(QtWidgets.QCalendarWidget):
    def __init__(self, parent=None):
        super(MyCalendarWidget, self).__init__(parent)

在定義MyCalendarWidget類別,來修改def paintCell,當碰到特定日期時,用特別的繪製。

    def paintCell(self, painter, rect, date):
        QtWidgets.QCalendarWidget.paintCell(self, painter, rect, date)
        if date.toString(“yyyy/MM/dd”) in 特定日期字典.keys():
            painter.setPen(QtGui.QColor(255,0,255))
            painter.drawText(QtCore.QRectF(rect), QtCore.Qt.TextSingleLine|QtCore.Qt.AlignCenter, str(date.day()))

特別注意,這裡傳入的date是QDate類型。用toString(“yyyy/MM/dd”),可以得到類似”20200101”的日期字串。用此字串去搜尋特定日期字典,如果有,就看自己想要怎麼標註吧。

這邊我是上了紫色(255,0,255)。

如果想上紅底之類的,可以去尋找Qpainter,然後加入相關程式碼。

【MyCalendarWidget.py】
from PyQt5 import QtWidgets, QtGui, QtCore
class MyCalendarWidget(QtWidgets.QCalendarWidget):
    def __init__(self, parent=None):
        import calendarLoad #讀取特定日期表(dict),需要自定義
        self.calendar = calendarLoad.calendarDict
        super(MyCalendarWidget, self).__init__(parent)

    def paintCell(self, painter, rect, date):
        QtWidgets.QCalendarWidget.paintCell(self, painter, rect, date)
        if date.toString(“yyyy/MM/dd”) in self.calendar.keys():
            painter.setPen(QtGui.QColor(255,0,255))
            painter.drawText(QtCore.QRectF(rect), QtCore.Qt.TextSingleLine|QtCore.Qt.AlignCenter, str(date.day()))

【calendarLoad.py】
calendarDict = {“2020/01/01”: [“元旦”, “假日”, “國定假日”]}

如果想要第三個周三之類的,個人認為將計算後直接存成資料較好,往後直接取出來用,不用每次都經過計算才能得到資料。

PYTHON MATPLOTLIB 折線圖線條隨公式變色之心得

關於matplotlib的顏色設定實在是不上手,最初的發想是要由「公式」去決定線條各段的顏色,不過官方文件看了兩三遍也不太懂,於是無法精簡地有效率地達成所想。
搜尋一下作法,九成不太合個人胃口,終於找到一篇對味的,是以土法煉鋼的方式,即把一條長線以只有兩點相連的短線的方式依序拆開,這樣就能在畫短線時分別設定顏色。
缺點就是速度慢,但對於初學者來說,這個方法是最好理解的。不論想依照值的大小、值的相對大小、是該點的斜率或者是其他自定義的公式,只要多產出一串跟xy同大小的c(顏色),就能清楚掌握顏色使用,也能針對某段的顏色作調整。

Python Plot 雙Y軸對齊任一值(如:對齊0)

用Plot做圖時,覺得雙Y軸對齊會好看多了,但是網路上沒有令人滿意的正解,最接近的是找到這一篇《Python – dual y axis chart, align zero》。

仔細詳讀,可能是個人理解能力衰退了,也不明白是如何運算,直接套用也會讓部分數據被新設的最大值或最小值被切掉。

回到數學,要左右Y軸對齊在某點上,首先要讓第一軸的V1點對到第二軸的V2點出發,之後再做延伸。

接下來,選一軸(通常是AX1)為主,依照AX1對應V1的比例,以V2為中心點,以AX1的比例延伸直到涵蓋AX2的原範圍,確保數據能不被切除。

不過,在此情況下,V1對到AX1最大或最小值,調整AX2會是無解的。此時換成去調整AX1。若再調整AX1也無解,可能是無法對齊或是不需要對齊。

最後,若V1不在AX1內,圖表的Y軸當然不會顯示V1,自然也無法對齊。所以在計算之前,得先確保V1與V2都出現在AX1與AX2內。


def align_yaxis(ax1, v1, ax2, v2):
    # 取得AX1和AX2的範圍
    miny1 , maxy1 = ax1.get_ylim()
    miny2 , maxy2 = ax2.get_ylim()
    print(“調整前”, miny1, maxy1, miny2, maxy2)
    # 確保 v1 一定出現在AX1
    if v1 > maxy1: maxy1 = v1
    elif v1 < miny1: miny1 = v1
    # 確保 v2 一定出現在AX2
    if v2 > maxy2: maxy2 = v2
    elif v2 < miny2: miny2 = v2
    # 與V上下距離
    upy1 = abs(maxy1 – v1)
    downy1 = abs(v1 – miny1)
    upy2 = abs(maxy2 – v2)
    downy2 = abs(v2 – miny2)
    print(“調整中”, miny1, maxy1, miny2, maxy2)
    # 有解
    if upy1 > 0 and downy1 > 0:
        up_ratio = upy2 / upy1
        down_ratio = downy2 / downy1
        # 調整AX2
        if up_ratio > down_ratio: # 如果上方需延伸較多,則對齊最大值,依上方比例去調整最小值。
            miny2 = v2 – downy1 * up_ratio
        elif down_ratio > up_ratio:
            maxy2 = v2 + upy1 * down_ratio
        else:
            pass
    # 調整AX2無解,則調整AX1。注意比例是AX2/AX1,故調整AX1時,調整比例需要變成倒數。
    elif upy2 > 0 and downy2 > 0:
        #因為upy1或downy2為0才會來到這裡,若除其中一項將會發生除零的錯誤。
        up_ratio = upy1 / upy2
        down_ratio =  downy1 / downy2
        if up_ratio > down_ratio:
            miny1 = v1 – downy2 * up_ratio
        elif down_ratio > up_ratio:
            maxy1 = v1 + upy2 * down_ratio
        else:
            pass
    # 調整AX1與AX2都無解,則不調整
    else:
        print(“無法調整或不需調整”)
        pass
    # 重新調整AX1和AX2
    print(“調整後”,miny1, maxy1, miny2, maxy2)
    ax1.set_ylim(miny1, maxy1)
    ax2.set_ylim(miny2, maxy2)
    return None

ACCESS如何移除完全重複的資料

在用python做回測時,發現同樣時間的資料點有兩個,仔細檢查,原來是access的資料表有重複資料。

一般教學是教只有一項重複,但是,因為是用python寫入,結果重複資料全部欄位皆相同。

每次用access都有一種水土不服的感覺,明明就是用python或sql很好理解的解法,但是access的使用者介面卻讓自己用不出來。

如何移除完全重複並只保留一項,這花了不少時間才找出解法,在此紀錄一下。

最大的問題是「兩筆資料完全重複」,直接用SQL篩選就一定會同時篩出兩筆。

如果讓兩筆資料不完全重複,至少一欄,那就能用SQL篩出刪除重複。

如果不熟的朋友,建議先備分資料表。

步驟一:替有完全重複資料表新增一欄「自動編號」。

步驟二:「建立」→「查詢精靈」→「尋找重複資料查詢精靈」→選擇該資料表。

步驟三:選擇「應唯一」含有重複值的欄位(如日期或ID),下一步 

步驟四:選擇「自動編號」附加查詢,下一步  ,完成。

步驟五:選取該查詢「設計檢視」。

步驟六:在「自動編號」新增準則,如果是輸入一次兩筆完全重複資料,則是「mod 2 = 1」,除二餘一或二都可以。如果是連輸兩次,則篩選開始重複的標號。

步驟七:「設計查詢」右邊按下「刪除」,然後按下「執行」。

步驟八:跳出警示視窗,詢問是否要刪除,選擇「是」。

步驟九:回原資料表,刪除「自動編號」欄位,即大功告成。

當初想快破頭,現在仔細想想,都是因為sql沒有能選擇其中一個重複資料,代條件選取會同時選中所有重複資料。直到看到用自動編號,才破解了這個難關。

PTT八卦版爆文分析 教你如何發『秒』爆文

最近看到了一篇文章《[爆卦] 大量帳號行為異常》,激起我的研究心。公關公司到底要怎麼認定?是否看到的情勢都是砸錢買出來的風向?要如何找出那些刻意帶風向的帳號呢?


我覺得這行為很不公平,就像中國玩家因為遊戲語言或是一些敏感因素就刷爆大量負評,即使水準不高的只占一小部分,但是「基數」高,那就會變得很可怕,並且可以掩蓋掉其他聲音。 公關公司帶風向也是如此,只要花錢買,就能讓特定聲音的基數增加,但那並不是真實地反映社會人民觀點。這樣的利弊就像獨裁政權,好能到很好,壞就無法與之抗衡,社會一起沉淪。 怕的不是做對的事,而是怕拿去做壞事。 本文不是要揪出那些帳號,因為是否背後為公關公司實在難以認定,此外,板規也沒有不允許這樣的現象。 不論怎麼防,只要存心要帶風向,都可以繞過去。 所以做點愉快點地分析,教你如何發『秒』爆文,一分鐘內就『爆!』文。 →在地震發生當下,東部在震,北部還沒震時就要發起來,搶得首篇發。 PTT八卦版的尖峰時間:10:00 – 13:00、 15:00 – 19:00。 即使沒有搶到地震,也可以用「發錢」,來吸引鄉民近來幫你推。 本次數據是在2019年3月1日晚間取樣, 樣本是2019年1月1日到3月1日的八卦版30推以上的文章,共有約7900則。 以及其留言,共有約184萬則。 爆文的定義是:推 – 噓 >= 100。 其中『秒爆!』發文後不到一分鐘內就爆文的有七篇。 這些文章的最大相似點就是「地震」。留言內容大多為「有感、超大、台北」。 「你媽知道你地震不逃命,還急著上ptt發文推文嗎? = =」 接下來『五分鐘內的爆文』,共四十篇。 這些文章的主題是「發錢、紅包、新年」,總而言之就是發p幣收買推文。 『十分鐘內的爆文』,共九十篇。
文章的主題是「發錢、紅包、小魏、蔡英文、新年」,這次多了小魏跟蔡英文。小魏是時下熱門,但這小魏相關的十分鐘內爆文,內容也是「發錢」。 如果有發錢求推文,很有可能十分鐘內就會被推爆! 『三十分鐘內的爆文』,共四百六十篇
文章主題又洗了牌:「蔡英文、發錢、柯文哲、中國、韓國、台灣、總統、有沒有、還願、八卦」。 三十分鐘內的爆文,政治味就濃厚許多了。 留言內容共313461則,前十五大字詞:「台灣、中國、真的、XD、笑死、小英、9.2、崩潰、總統、柯粉、美國、垃圾、國民黨、支那、一堆」,基本上可以隨機組合「台灣真的XD」、「中國笑死9.2」,八九不離十就是這些。 『六十分鐘內的爆文』,共九百三十五篇
文章主題:「蔡英文、台灣、柯文哲、中國、韓國、發錢、總統、高雄、還願、華航、柯P、網友、共識、有沒有、習近平」 六十分鐘內,幾乎只剩下政治相關了。 蔡英文地震發錢! 留言內容共313461則,前十五大字詞:「台灣、中國、真的、XD、笑死、9.2、柯粉、崩潰、美國、小英、總統、垃圾、國民黨、一堆、支那」。與三十分鐘內的幾乎無異。


『爆文冷知識─統計數字』


【爆文速度】


平均一篇爆文,用上192.58分鐘,才被推爆。
有一半的爆文,不用到48分鐘,就已經被推爆。
每三篇爆文,其中有一篇會在30分鐘以內,被推爆。

【爆文時間分布】


合計
04:00
1
2
1
4
0
4
3
15
05:00
3
4
4
3
2
3
2
21
06:00
6
9
3
8
10
7
2
45
07:00
7
8
20
7
11
9
16
78
08:00
13
24
18
18
19
13
6
111
09:00
16
16
13
20
20
16
15
116
10:00
18
27
33
19
21
13
20
151
11:00
19
20
30
33
22
16
11
151
12:00
23
39
30
21
24
10
11
158
13:00
19
21
23
23
20
27
12
145
14:00
22
23
20
15
21
18
16
135
15:00
15
27
30
17
27
18
21
155
16:00
32
30
27
14
21
22
14
160
17:00
21
22
27
22
21
27
13
153
18:00
29
18
22
23
22
18
22
154
19:00
20
23
22
26
22
13
11
137
20:00
28
23
24
28
28
24
28
183
21:00
27
15
23
29
22
18
23
157
22:00
24
20
27
19
16
23
24
153
23:00
33
23
23
15
11
20
19
144
00:00
18
26
11
15
19
19
19
127
01:00
10
17
8
11
10
14
8
78
02:00
8
6
6
3
3
6
7
39
03:00
3
4
5
4
6
6
6
34
合計
415
447
450
397
398
364
329
2800


【三十推以上的文章留言時間分布】


合計
04:00
2080
2332
2174
2195
1904
2541
3419
16645
05:00
1436
1864
1786
1906
1683
1900
1105
11680
06:00
2237
2680
2640
2333
2869
2562
1864
17185
07:00
4905
6227
6326
5724
6447
5143
4061
38833
08:00
8273
11296
11264
10523
10792
8044
6600
66792
09:00
10243
13819
12422
11904
12619
10703
9438
81148
10:00
11263
17029
15081
14891
14078
11619
11024
94985
11:00
11936
18383
16294
17384
15013
12302
11129
102441
12:00
16213
20723
21712
18521
16479
12340
12603
118591
13:00
13792
17016
18863
16171
15599
12477
11278
105196
14:00
12319
15159
14949
13404
12816
12393
10562
91602
15:00
12407
15617
15468
13675
14710
11775
10791
94443
16:00
14035
17776
17889
14227
13650
13369
11149
102095
17:00
15012
17633
17650
15348
14908
13864
11763
106178
18:00
16018
16504
16339
13960
16065
12980
12689
104555
19:00
14764
15173
14794
14808
14082
12100
12386
98107
20:00
14258
13773
13475
15302
11787
11598
12043
92236
21:00
14850
12928
13741
15860
13178
12718
11717
94992
22:00
16714
12288
13521
13980
13242
13878
13017
96640
23:00
16874
13710
14418
13459
11578
13558
12074
95671
00:00
10721
16255
11073
11551
12318
10001
12738
84657
01:00
8549
10428
8881
8229
8782
8222
9018
62109
02:00
6229
6330
5093
5490
5415
6282
6208
41047
03:00
4167
3350
3818
3720
2874
3843
4457
26229
合計
259295
298293
289671
274565
262888
236212
223133
1844057

舊家電換節電家電之選購技巧

舊換新划算公式
新家電的價格 – 補助款 <= 舊與新家電每年耗電差距 * 平均每度電費 * 電器平均壽命
※新家電會有許多入選名單,從中選價格越高的越好。

夏天到了,用電量也即將面臨高峰。面對上千多元的電費帳單,一方面抱怨怎麼那麼貴,一方面也在怎麼想著節電。如果家裡有超過十年的老家電,冰箱、冷氣、開飲機、電視、洗衣機等,現在更是時候該好好思考了。

近來JN也想到了節電,開始先調查家裡最耗電的電器。
全年:1.電冰箱。2.開飲機。3.電腦。
前兩名因為是全天運作,所以很容易被注意到,也因為是全天運作,所以節能的效果會更是明顯。

家電會有各自的平均壽命,如冰箱壽命至少要10年以上,熱水壺則是4年以上。在計算完每年能節省多少之後,乘上電器預期壽命,如果能超過省下超過購買時的電費,那就代表現在就換其實相當划算。

像是JN家,家中的舊冰箱已經超過20年,開飲機也已經好幾年了。JN第一個目標就是換掉舊冰箱。舊冰箱除了出廠很久,而且我們家沒有習慣去換過膠條,光是每日冰箱用電,可能就佔4度以上,我猜。看了帳單以後,JN家一天平均用10度電以上,有可能就是舊冰箱佔將近一半的貢獻。

電價是有級距的差別,如果懶得計算平均,計算省電費率時,直接一度電代2.6元計算。不過可以預期是低估,因為夏天時冰箱比較耗電,節能就能剩下更多電費,平均也應該會比2.6元還高。

20年舊冰箱換新冰箱,每天省下3度的話,一年能省下近2850元,十年省下28500元,剛好就能買一台新冰箱。如果未來電費調漲,那就可以預期省下更多錢,所以現在就是個換冰箱的好時候呢!

不過不同家電的耗能會因為一些形式不同而有差異,如容量。換購新節能家電的同時,要記住新家電的容量要大於等於舊家電的容量,這樣子才能確保不會換了反倒不適用。

JN建議可以直接從節能標章的網站看起,除了有產品分類可以快速查到各類節能產品,還有產品比一比可以比較節能效率。最重要的是能從續約間接看出家電出廠時間(出廠越久,價格理論會折舊),續越多代表出廠越久。從這裡開始是最能看得一目了然的。

節能標章網址:http://www.energylabel.org.tw/index.aspx

接下來從產品型號去搜尋價格,預期正常壽命能省下的電費超過售價,就能列入考量,這是最優先的條件。再過濾使用習慣(如:舊家電容量)之後,會有便宜的家電與稍貴的家電,建議選擇較貴的家電,一方面價位高的家電能預期料材好更耐用,或是有更多好用的功能,最重要的,也代表它省下的電更多,如果電費調漲,它帶來的效益就會更多。

近年來智慧家電與節能技術的成熟,10年前更換不划算,5年前更換可能也不划算,然而,現在則是今天不馬上更換才是真的不划算。如果以投資報酬率來看,十年以上老家電換新,能達到10%以上的年報酬率,這比定存或是績優存股還高出許多,換句話說,與其存錢倒還不換新家電來得有利。

Win10下排程執行Python。

Win10下排程執行Python
有時候,人因為有事或是其他因素,無法親自開機並執行程式。JN因為有需求,所以上網學習了要如何定時開機、定時執行程式、定時關機,本文將會分成這三部分教學。

定時開機

能夠持續開機,自然就不會有這問題。但是如果一定要關機的話,定時開機就會被需要。
定時關機需要兩塊的配合:WIN10的設定、BIOS的設定。(JN的主機板是ASUS Z370
必須要把WIN10的快速啟動給取消掉,BIOS的定時啟動才會正常作動
「WIN10的設定」
1.搜尋「電源與睡眠」,進入設定。
2.從右側的相關設定,進入「其他電源設定」。
3.左側控制台首頁下方,點選「選擇按下電源按鈕時的行為」。
4.把「開啟快速啟動」關掉。若無法變更,則選點上方「變更目前無法使用的設定」再嘗試關掉快速啟動。
「BIOS」
1.進入BIOS,找到高級電池管理。(※其他BIOS幾乎也在電池管理
2.開啟「由RTC喚醒」。
3.設定定時喚醒時間。 
※如果沒有先取消「快速啟動」,直接設定此部分可能會無法正常運行。

定時執行程式

定時執行程式會分成兩部分:系統設定、Python程式碼注意事項。尤其是Python程式碼注意事項,常常一個疏漏,就無法如預期地順利執行,但是因為在編寫程式(JN用Visual Studio)上卻是沒有任何問題的。所以,請務必要仔細再仔細地檢查需要定時執行的程式碼。
「系統設定」
1.搜尋「排程工作」,進入排程工作。
2.點選右側的「建立工作」,在「一般」分頁下的安全性設定,勾選「以最高權限執行」。
3.在「觸發程序」,建立自己想要執行程式的時間。
4.在「動作」,「新增」→「瀏覽」自己想要定時執行的程式(.py),按下確定。
※在其他Blog有看到需要設定引數,但是JN此篇沒有設定,因為設定引數方式,是以「python.exe」去執行。如果沒有設定,就是以「cmd」執行。
#2019-07-07:建議輸入引數,在「程式或指令碼」輸入「python」,在「新增引數」輸入完整位置。若不輸入引數,若有用到requests套件則會挑出。只要輸入引數之後,就能正常運作。
兩者的差別在於偵錯與速度,不過會出錯的地方兩者都是一樣的,所以JN會選擇效能較優的「cmd」也就是直接執行.py檔案而不設定引數的方式。
要注意JN有提到的「出錯的地方」,因為使用定時執行程式的環境下,常常是人不在電腦前面的時候,若是有錯,往往只能看到程式已經停止運作而消失在工作列,便無從得知是哪一部份出了問題,建議使用「logging」模組去紀錄程式的運作情形。
「Python程式碼注意事項」
1.不要使用「from XXX import YYY」,也建議不要使用「import YYY as ZZZ」。
※要特別留意到引入的其他自製套件,它們也不能有「from XXX import YYY」
2.不要使用相對路徑,請使用絕對路徑。(Ex: C:\abc\def\mypy.py      不要mypy.py
3.不要包含中文路徑,請使用英文路徑。(Ex: C:\asd\fgh\mypy.py      不要 C:\我的程式\asd
※建議使用「logging」去紀錄程式運作,因為使用排程工作的程式碼出錯會直接終止程式,不會在出錯的地方停住。所以使用logging,萬一程式碼出錯,還能從log去尋找蛛絲馬跡。

定時關機

定時關機有兩種作法,一種是使用「cmd」打上「shutdown -s -c “-s 關機。 -c 顯示提示字串。 -t 設定逾期秒數” -t 300」,然後會在三百秒後關機。另外一種是在python程式碼,引入「os」模組,打上「os.system(‘c:\\windows\\SysWoW64\\shutdown -s -c “-s 關機。 -c 顯示提示字串。 -t 設定逾期秒數” -t 300’)」
使用cmd的方法,可以搭配排程工作,能更精準的在指定時間關機。直接在「排程工作」「動作」「新增」,把關機指令「shutdown -s  -t 300」貼上到指令或程式碼去,它會提示似乎已包含引數,點選「是」。最後在「觸發程序」設定要執行的時程。
使用python的方法,可以搭配「time」模組去取得當前時間,或是在程式結束之前執行關機指令。

後記

這篇文章是已經閱覽過數篇相關,JN覺得可以寫一篇集大成的,給有需要的人直接的參照。JN加註了一些細節,都是JN在嘗試時有用到的,並不是網路教學都有寫到的,也希望能讓人在嘗試時更快找到哪個環節出了問題。