以往工作日判斷是週一到週五,不過在臺灣,就沒有那麼適用,連續假期前的補班,還是連續假期中的彈性放假,都讓工作日判斷失準。
找到一個長期運營的公開資料平臺,可以取得行事曆,然後從中判斷該日期是否為臺灣工作日。以往我都是手動key,每年一次,如今找到這個來源,可以變成全自動。
總算解決了臺灣工作日判斷的難題。😂
網路教學與日常學習
網路教學與日常學習
在Home Assistant中,要取得實體的歷史數值,需要有recorder把實體數值保存。
如果確定有一實體有過往數值,那可以使用以下的SQL範例。
範例為 entity_id = ‘<your_entity_id>’ 取30天前的第一筆資料:
SELECT
states.state
FROM
states
WHERE
metadata_id = (
SELECT
metadata_id
FROM
states_meta
WHERE
entity_id = '<your_entity_id>'
)
AND FROM_UNIXTIME(last_updated_ts) >= DATE_SUB(NOW(), INTERVAL 30 DAY)
ORDER BY
last_updated_ts ASC
LIMIT
1;
Home Assistant在保存數值是放入states資料表,而state透過metadata_id去對應entity_id,因此需要先從states_meta去找到entity_id對應的metadata_id,然後再從states找metadata_id符合的記錄。
將著states記錄中的時間欄位為last_updated_ts,使用timestamp格式,需要轉換成datetime類別才能做時間比較。
如果看不出timestamp的時間為某年某月某日,可以將值輸入到此網頁去轉換成時期格式。
DATE_SUB中的DAY,可以換成MONTH或是HOUR,依據使用需要。
從整合中,添加SQL。
在欄位打上state,在選擇查詢將sql語句貼上。
最近在寫預算表,發現這是寫過最難的Excel,因為能想像中的概念跟表達出來的有落差,為了補足落差,只好把概念想得更清楚,這才有了一份結構複雜的Excel。
基於某些計算,項目的預算居然會小於0!(當然要讓概念又要再補充到更詳盡
當然知道
=if(a<0,0,a)
這種很簡單的寫法,但是我的公式長到一行,又不想多一欄,多欄位會破壞美觀。
以下是另外一種寫法,最大的差異是只用一次「a」,這裡是代數。
=NUMBERVALUE(TEXT(a,"0;!0;0;!0"))
以下是我的實際公式為例
如果使用「if」
=if([@粗估預算]-IF([@預算類型]="類別預算",SUM(FILTER(年度預算表[[#資料],[粗估預算]],(年度預算表[[#資料],[類別項目]]=[@類別項目])*(年度預算表[[#資料],[名稱]]<>"預算"),0)),0)<0,0,[@粗估預算]-IF([@預算類型]="類別預算",SUM(FILTER(年度預算表[[#資料],[粗估預算]],(年度預算表[[#資料],[類別項目]]=[@類別項目])*(年度預算表[[#資料],[名稱]]<>"預算"),0)),0))
如果使用「NUMBERVALUE(TEXT(a,”0;!0;0;!0″))」
=NUMBERVALUE(TEXT([@粗估預算]-IF([@預算類型]="類別預算",SUM(FILTER(年度預算表[[#資料],[粗估預算]],(年度預算表[[#資料],[類別項目]]=[@類別項目])*(年度預算表[[#資料],[名稱]]<>"預算"),0)),0),"0;!0;0;!0"))
Excel一旦突破一行一半,可讀性就會大幅下降。建議避免讓同樣的部分二次出現,因此使用「NUMBERVALUE(TEXT(a,”0;!0;0;!0″))」可以優雅地使小於0的值變成0。
因為經常遇到編碼問題,只有統一編碼才不會有問題,最廣泛適用的編碼是「uft8」,以往還有耐心使用記事本開啟,再以utf8保存,現在想直接在Visual Studio上修改。
參考文章多半是使用簡體中文,所以譯名跟繁體中文會不太一樣。如果使用繁體中文的Vitual Studio,名稱是「進階儲存選項」。
開啟Visual Studio,上方「工具」>「自訂」。
「命令」>功能表列選擇「檔案」>「加入命令」> 分類選擇「檔案」 > 「進階儲存選項」,並且按確定。之後將其移置到喜歡的位置。
接著從上方「檔案」就能看到「進階儲存選項」。
按下後如下圖,就能調整編碼。
筆者最近有感而發,檔案好多好雜,為了尋找一個檔案,就要從很多地方去搜尋,反而花時間在樹狀目錄之下,Windows檔案總管是沒有標籤化功能,只有最愛功能,如果有關聯的檔案分在兩處,就得至少開兩個頁籤去處理。
對了,Windows檔案總管有頁籤,也是Windows 11才有的。
我們在找檔案時,最常是基於用途。Windows總管可沒有基於用途的分類,弄得像一點建資料夾再建捷徑,只能做到一層。而今天要介紹的軟體,可以做到兩層,於是就更實用了。
Tablacus Explorer官方網站與下載點
是個小巧且陽春的檔案管理器,支援Windows11跟10。如果只是單純下載就拿來用,會被其陽春的介面嚇到,怎麽跟介紹圖上的介面差這麼多,也沒有標籤化功能。
別著急,標籤功能要在附加元件中下載安裝,才會出現呢。
一開始下載的時候就是繁體中文,雖然能看懂,但是跟Windows原生的檔案總管比,此時可能檔案總管還好些。
接下來照著步驟走,來把標籤功能實裝起來吧。
先從「工具 > 附加元件」。
「附加元件 > 取得附加元件」
在搜尋欄打上「Label」,然後按下搜尋鈕。
安裝「標籤(Label)」、「Label button」、「Overlay label」
「Label」是核心功能,安裝完Label,可以幫檔案或資料夾編輯標籤。
「Label button」可以選擇一個label,顯示出屬於該label的檔案或資料夾。
「Overlay label」在檢視欄位中的名稱中,顯示出該檔案或資料夾的label。
一個檔案或資料夾可以有多個label,要區分多個label,使用「;」區隔。
以我的工具程式資料夾為例,雖然都是工具程式,但是用途有些不同。
我是網路工程師,使用網路相關的工具程式的機率會高些,於是想先把網路相關的工具程式標上標籤。
點擊「Label button」>「編輯」。
輸入「網路」按下確定。
這時候因為「Overlay label」,剛剛輸入的標籤名稱會出現在名稱欄位置右。
這時候,幫另外一個程式上標籤,就選3CDaemon,標籤為「網路;ftp;tftp;syslog」,一次輸入四組標籤「網路」、「ftp」、「tftp」與「syslog」。(為了做範例而分類)
點選「Label button」>「網路」,接著就會呈現具有「網路」label的檔案或資料夾。
點選「Label button」>「ftp」,接著就會呈現具有「ftp」label的檔案或資料夾。
如今已經完成了「標籤化」的功能,如果標籤很多,想將標籤做群組,可以安裝「label groups」。
Label好用,但是Label沒有辦法排序,這時候可以安裝「Color Labels(以背景色標示)」與「Color Label Sort」,就能利用將同一標籤套用相同背景色,然後做排序。
Window 11的檔案總管已經有頁籤功能,在檔案名稱或是在捷徑上做巧思,是能實現標籤化的相似功能,但是很費工。
接下來群組化,就是檔案總管沒有的功能,也是讓 Tablacus Explorer 相比 檔案總管 更好用的關鍵!
在「附加元件」>「取得附加元件」,搜尋「groups」。
安裝完工作區之後,可以看到頁籤上方多了一層頁籤「Group1」,而該層即為工作區。
對工作區按右鍵可以重新命名。
拍照是個人興趣之一,每次拍完照都會處理照片,照片會有原始檔(raw, .cr3)與點陣圖(.hif)或是影片(.mp4)。
如果是好的照片,就會拿RAW檔去開Lightroom去精修。然後因為.hif是無法直接預覽的且多數不支援,需要轉換成.jpg格式,這時候就會開啟Digital Photo Professional 4去將.hif轉jpg。
於是我把這些流程會用到的檔案或資料夾都上標籤「修圖」。
個人電腦經常會用來修圖,於是把工作區跟頁籤都釘選住(滑鼠右鍵>鎖定)。
釘選住的工作區與頁籤不會被關掉跟移動路徑位置,如果點開其中的資料夾,就會長出新的頁籤。
假設我今天要修圖,在 Tablacus Explorer 選擇修圖,就能在一個頁籤把所有會用到的檔案跟資料夾集中,這樣操作起來,就能省去在不同檔案總管切換來去的時間。
雖然檔案總管有頁籤,頁籤沒辦法鎖定位置,或是跳出一個新的檔案總管,實在不好用。
教育訓練對象通常是給入門者,對象在日後執行日常維護或簡易修改等事項。
因此以「基礎網路概念」去設定篇章,範圍以「日常維護」為限,這部份會給與較為詳盡的講說與指令。
後面則呈現設備特有功能,如Aruba Switch VSF(Virtual Switching Framework),如果有使用到再放上較詳細的解說。如果沒有,則以功能介紹帶過。
最後放上參考來源,主要為官方文件中的設定指南與安裝指南,整片教育訓練文件基於此產生也比較嚴謹。
這部份從Install Guide之類的可以找到,如燈號表示的意義、Console Port所在位置等。
以下表格為ArubaOS,實體無線控制器為範例。
連線方式 | 支援 | 備註 |
Console | V | Speed: 9600 |
Telnet | V | 預設關閉 |
SSH | V | |
WebUI | V |
該設備使用的OS名稱與撰寫時參考的OS版本。
篇幅不夠的話可以塞點用同套OS的設備型號。
以下為可選
如果有用到就寫詳盡,如果沒有就功能介紹簡單帶過。
設定指令邏輯不與通用概念相似。
如Aruba Switch的VLAN TAG與UNTAGGED。
如HPE 19xx系列為WebUI,TRUNK設定須知等。
通常為官方文件,撰寫過程有看什麼文件參考,就放上來。
一般來說,只要測線沒問題,線路八成沒問題。
而測線只測線對正確,端到端沒有異常。因為拿網路交換器測線,沒有FLUKE能測線損的功能。一開始推給線損,如果線路損耗(電阻)如果到達臨界值,可能也會時好時壞,線對測試是沒問題。線損可能隨著老化(氧化)而增加,把頭打掉重壓就能去掉老化部分。
測線測試數次都得到同結果,而線路早就完成,前面也正常運作中,突然就變成完全不能使用,實在無語。
觀察該介面,有Up,但是MAC Address Table卻沒有學到任何東西。根據之前的記錄,該Port就是接設備的,應該也不會隨便亂動吧?畢竟動那個很麻煩跟費工,沒事沒人想動。
觀察一下介面的計數,發現該線只發封包無接收封包。
線正常、設備正常,在這前提之下,讓我深思一下。今天如果是光纖就好辦了,一端收一端發,如果只發無收是不是就從對面的發端過來有斷路或是光纖模組損壞。
突然驚覺!那如果線對收對收發對發,是不是就會只發不收!?
線對沒有異常,所以異常的是「MDI&MDX」自動交換!?
基於這點,我先看目前是MDI還是MDX,是MDX,於是強制指定為MDI。
過一陣子,開始收到封包了,然後設備就上線了,非常神奇,又學到了一課。
以往終端為MDI,網路交換器端為MDX,接正線(平行線,兩端線對排序一致),就會使發端對上收端,讓資料能正常收發。
但是如果終端對終端(MDI-MDI)或是網路交換器對網路交換器(MDX-MDX),就如要有個交叉,使發端與收端對上,這種線稱為跳線。
但是網路線長得非常像,為了更通用與方便,於是有了Auto MDIX,具有Auto MDIX功能的介面,可以根據演算法,交換自己的發端與收端,去配合對方的收端與發端。
於是網路線慢慢只剩正線。
今天碰到License啟動失敗,以下為失敗訊息。
Source Admin UI
Level WARN
Category Activation Failed
Action None
Timestamp Apr 26, 2023 10:29:36 CST
Description
Action Status: This Activation Request Token is already in use by another instance
Product Name: Access
License Type: Permanent
User Count: 500
ClearPass的License除了匯入,還要再按「啟動」,否則會當九十天試用版,仍會過期,即便是Permanet Key。
啟動有兩種途徑: 一、連線啟動。 二、離線啟動。
連線啟動需要ClearPass能連上外網,向相對應網站連線啟動。
離線啟動則需要下載「激活请求令牌」,開立「CASE」,等待客服工程師處理完成後的回傳檔案,再選擇檔案「回傳檔案」上傳,就能完成離線啟動。
開立CASE可以從Aruba Support Portal的CASE management進行,標題寫CPPM KEY離線激活,產品選ClearPass。先簡單描述開立好CASE,接著再把激活請求令牌上傳到CASE附件。
啟動失敗的錯誤訊息,上網查也是只找到透過開立CASE解決。如果有碰到啟動失敗,在開立CASE時,一並把License Key附上,就能客服人員就能在後臺進行相對應處理。
固定儲存格(Cell)位置,我們會使用「$」符號,但$符號只適用於英文與數字組成的位置。
對於「表格1[[#資料],[名稱]]」這種表格(Table)位置標示,就沒有辦法標記出$字號。然而這卻是參照時,選擇表格內資料時優先使用的位置標示。
如果欄列大小固定,使用「A$1:A$100」這種方式是能暫時解決。但是往後增加列的話,公式並不會隨著表格列數自動改變,久久可能就忘記自己當初是這樣套了。
就像今天我需要用到,記得過去曾經解決過,卻想不起是怎麽辦到的。
表格1[[#資料],[名稱]]可以得到一個範圍(Range),範圍大小隨表格列數大小改變,因此這是比較好的參照位置,相比於「A$1:A$100」。
如果要固定「表格1[[#資料],[名稱]]」參照位置,可以使用下列公式。
INDIRECT("表格1[[#資料],[名稱]]")
INDIRECT函數是將輸入文字變成範圍。公式自動填入時,若文字末端沒有帶數字,則文字不會隨自動填入而改變,這也使得使用以上公式,向左右向上下填入公式也不會改變參照。
最近有個下訂到到貨快兩年的核心交換器到,適逢最近開始著手大量python網管的構築。如今重新審視,感覺到很多網路的概念被重新理解,發現對概念的理解更加到達根基點或者稱為原理,對網路的理解可能要遠超於公司前輩了。
說到設備更換或遷移,最重要的是什麼?就是將新設備上架與線路重接後,對所有設備而言,自己所屬的網路都是通的。
舊(手動)的思維是什麼?就是我們先取得設備設定檔,將設定同義轉換到新設備上,最後在依(舊設備)順序,重新接在新設備上。
有時候會發現,假設所有Port都同屬一個VLAN,所有Port也沒有Description,那其實線順序亂掉也無妨,也能保證能用。
不過為了美觀與整齊,假設能有功夫作出順序,那作出順序來,能讓後面管理更好理解些。真亂序接回在關鍵點上反而對人來說是一場噩夢,尤其是核心交換器部分更需要有秩序接法。
我們希望網路能通,於是盡可能還原設定與接線順序,盡可能還原之前的樣貌,最好百分之百還原,因為原本的樣貌是沒問題的,如果有問題基本上會在漫長的使用中被發現改正,時間便來到遷移之前。
為了能百分之百還原,可以看成兩個層面: 設定層、實體層。
設定層為自身設備上的設定。
實體層為自身與其他設備的連結關係。
如果設定層的設定能同義轉換,線路只要照原順序接回去,就能達到實體層去配合設定層,而還原網路環境。
假設都每一Port都同VLAN,於是實體層(線路)隨意接,就能達到設定層去配合實體層,而還原網路環境。
最花功夫(人力)的是什麼?就是調查實體線路接線順序與連通情況,接著就是拔線照計劃接回去,第三就是做設定上的同義轉換。這三大環節,都需要具備「細心」,一旦哪個環節錯誤,可能就未能還原網路環境,導致網路不通,倘若IT不熟自身 環境,這時候要排查是非常困難的,因為之前沒有記錄此環節資訊,就是痛苦。
但仔細思考,其實不論是「實體層去配合設定層」或是「設定層去配合實體層」,我們都是要做到一點,實體去對應到其該有的設定,也就是相互連結。
「設定層去配合實體層」則是最節省人力的方式,節省人力也意味著是復原時間最少的方式,即便目前AI生成多麼厲害,對任何需要人力的項目都沒有辦法。
有沒有什麼網路架構,是可以讓設定層去配合實體層?答案是role-based,這在Aurba Total Solution是做得到的。但Aruba Total Solution並不是任何環境都做得到的,因為資源不足,就算資源足,網管人員技術跟知識可能也不足以維持。
Role-based其實就是SDN(Software Defined Network),這是個宣傳常見名詞,但軟體要怎樣定義網路?這其實才是關鍵技術。為了要保證任意接都能通的前提下,勢必要想出任意接能通的方案,就需要對網路基礎有概念,更重要的是角色間的連結與關係,才能寫出泛用的方法。
會講SDN的人,多半對網路基礎沒有深刻瞭解。(?)
回到SDN的立場,要達到設定層去配合實體層,需要關鍵一點,必須從實體層得到資訊,不去限制實體層接、不接或亂接,然後再依實體層來的資訊去讓設定層再去配合實體層。
什麼是設備能從實體層得到的資訊?最通用的就是MAC Address。
在Role-based的網路架構中,可以針對MAC或是802.1x的帳密資訊去得到對應的VLAN跟相關權限。所以SDN的實作,依據MAC去判斷給與對應的相關設定,是個真實存在的做法。
依照SDN的做法,先將MAC Address綁定來源Port的設定,變成對應的,查MAC得到設定就像查字典查詞得到解釋。一旦MAC Address從來源Port來被學到,就把該Port設定給成MAC Address所對應的設定。
這樣人力就能大解放,不用調查本來的實體線路順序與連通情況,也不用按線路記錄順序接回,線路任意接,隨後靠SDN帶對應的設定,使實體與設定的關係跟更換前一致,就如同還原更替前的網路環境。
SDN也可以讓Switch與Switch間自動綁成Link-Aggregation,接兩條就綁兩條,接三條就綁三條。核心算法就是之前的提到MAC Table的空集合去判斷兩Switches各一Interface是否相鄰。
要完成SDN,就需要先有個程式,再蒐集資訊,在更替期間不間斷地跑,使Switch接收到的資訊能影響網路設定。如果設備都是上線那還好,但多半都是在離峰時間像是午休、下班或週末去切換,設備不在線,蒐集不到資訊,使得SDN未能切換完整。
線路有接但未通,人為設定;線路有接有通,SDN設定。
簡單來說「人只要記錄有接線的Port」,其餘交給SDN,就能得到完整轉換的建議。有接沒通,需要讓線路接到對應Port,設定可以由SDN或人為操作。若線路有接有通,就能交給SDN設定。
組織唯一標識符(Organizationally unique identifier,OUI)
組織唯一標識符(Organizationally unique identifier,OUI)是一個24位的數字,用於唯一標識一個供應商、製造商或其他組織。組織唯一標識符由供應商、製造商或其他組織從電氣電子工程師學會(IEEE)的註冊機構那裡購買。組織唯一標識符一般應用於MAC地址等領域[1][2],用於唯一識別特定設備[3]。
在MAC地址中,組織唯一標識符與另一個由供應商分配的24位數字共同組成MAC地址。MAC地址的前三個八位元組為組織唯一標識符。
根據維基百科,MAC Address中的前三個八位元組為OUI,如果是一般的16進位制表示的MAC Address,也就是前六個四位元組。
如果有一組MAC,我們可以上網站MACVendors輸入MAC Address,得到該MAC Address的生產商資訊。
知道生產商資訊,就能設備外觀的生產商LOGO去搜尋目標設備。
在Python中,使用manuf模組,可以辨識出生產商,其資料庫是來自Wireshark OUI Lookup Tool, 可惜不夠完整。
搜尋其他的搜尋套件,回到最初的維基百科上,會發現這個組織唯一標示符(OUI)是IEEE購買,因此,我們可以直接從IEEE得到相關訊息。
IEEE的註冊OUI,可以直接下載txt或csv格式的檔案。
使用從IEEE經過OUI對照到的設備的生產商資訊比起Wireshark的更多。
先安裝XAMPP
而後安裝mod_wsgi,照著官方文件的Quick Install Guide安裝。
apache位置在XAMPP資料夾中。
使用以下指令安裝
set "MOD_WSGI_APACHE_ROOTDIR=C:/xampp/apache"
pip install --no-cache-dir mod_wsgi
測試是否有安裝成功,至python環境,筆者是使用Anaconda3,至環境資料夾/Scripts可以找到mod_wsgi-express.exe。在檔案總管上方輸入cmd後,輸入下方指令。
mod_wsgi-express.exe module-config
如果有報錯,可以從錯誤提示看出來在檔案路徑上使用「\」與「/」,這邊需要一律使用「/」,這時需要重新安裝mod_wsgi。
pip uninstall mod_wsgi
set "MOD_WSGI_APACHE_ROOTDIR=C:/xampp/apache"
pip install --no-cache-dir mod_wsgi