iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
4
自我挑戰組

中年失業大叔的耍廢日記系列 第 1

第一天:雖然失業...還是有工作要做

  • 分享至 

  • xImage
  •  

因為在家裡會忍不住開冷氣,也不能一直宅著,所以早上還是出來「工作」一下。先找個比較方便的地方,之前有發現某家星巴克超多插座,不過今天先去最近的一家就好。

早上要處理Asset Administration Shell相關的東西,其實還只是個雛形,目前已經用一個sample xml測試過加入assetAdministrationShell、asset、submodel的支援,接下來要處理conceptDescription的部分。xml本身不複雜,但是看了一下一些文章 https://res.mdpi.com/d_attachment/computers/computers-09-00028/article_deploy/computers-09-00028-v2.pdf (只提到幾頁)...恩,處理起來可能沒有我想的簡單,需要多做一些動作。還是要更熟悉Asset Administration Shell規格書中的模型架構才比較放心。理想狀況是剖析xml之後可以用上下文無關的方式呼叫node-opcua-coreaas的api來處理,不過不太可能XD

這家星巴克的問題就是插座少,結果就是筆電快沒電了,趕快轉移陣地到有插座的地方...

下午來輕鬆一下,看一下之前嘗試在前端處理zip檔案格式的東西。處理zip檔案結構的部分已經可以跑了,inflate處理目前是透過 pako,寫了簡單的網頁來跑跑看:
https://ithelp.ithome.com.tw/upload/images/20200916/20000108DiV16lJ4Zf.png

恩恩,last modified date跟last modified time看起來怪怪的,要再研究一下這兩個欄位怎麼處理(先猜測last_modified_date位移後跟last_modified_time相加就是timestamp)...

查了一下規格:https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT ,從「4.4.6 date and time fields: (2 bytes each)」這一節可以知道,zip的日期時間是dos格式...不是簡單計算就好,正確的格式在msdn上面可以找到:https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-dosdatetimetofiletime 可以找到,所以是5 bits的日,4 bits的月,7 bits的年構成last_modified_date,好煩...寫一個函數來處理好了

    function formatMSDOSDate(n) {
        let y = (n >> 9) + 1980;
        let m = (n & 0b0000000011100000) >> 5;
        let d = n & 0b0000000000011111;
        return `${y}-${(m).toString().padStart(2, '0')}-${(d).toString().padStart(2, '0')}`;
    }

這樣輸入19004就會輸出2017-01-28,跟zip軟體裡面顯示的日期一致。

時間的格式是5 bits的秒,6 bits的分,然後是5 bits的時,秒的精度是兩秒,所以還要乘以二。也寫一個函數來處理:

    function formatMSDOSTime(n) {
        let h = n >> 11;
        let m = (n & 0b0000011111100000) >> 5;
        let s = (n & 0b0000000000011111) * 2;
        return `${(h).toString().padStart(2, '0')}:${(m).toString().padStart(2, '0')}:${(s).toString().padStart(2, '0')}`;
    }

這樣輸入40233就會輸出19:41:18,也跟zip軟體裡面顯示的時間一致。

先賣個關子,明天再來看到底怎麼處理zip檔案格式(湊字數)。總之改良結果:

https://ithelp.ithome.com.tw/upload/images/20200916/20000108M31FHS5YcB.png

總算可以看到日期跟時間。


下一篇
第二天:既然不是假日,還是稍微工作一下
系列文
中年失業大叔的耍廢日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
我思故我在
iT邦研究生 2 級 ‧ 2020-09-17 09:02:49

失業...是因為疫情嗎?!
太震驚了,連這麼強的前輩都這樣

還是其實前輩只是存夠錢,提早退休而已

fillano iT邦超人 1 級 ‧ 2020-09-17 09:40:51 檢舉

其實不關疫情,公司不賺錢,沒辦法,而且我原本負責的就不是核心業務...不然這家公司很少裁人的。

沒退休啦,只是想稍微輕鬆一陣子,接接案。

明白,支持前輩這系列文章!

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-09-18 18:42:41

/images/emoticon/emoticon47.gif

我這個散戶買的股票
由短線變成長線
都是不得已的
/images/emoticon/emoticon10.gif

我要留言

立即登入留言