imuslab
托比的實驗記錄部落格
ArOZ Online 的 WebSocket 伺服器與 JWT 登入方法
ArOZ Online 一向也被人吐槽說沒有 Database 只能用 PHP 怎樣做即時通訊的 Web APP 呢?對,這真是一個好問題。 現在處理即時資料的方法 現在的 Web Desktop 模式即時更新方式 沒錯,這可能比你想像中的還要簡單,現在在 ArOZ Online 上處理即時資料的方法就是每隔一段時間做一次 AJAX Request 問伺服器的 php script 要一次資料。簡單來說就是每一個需要即時資料的模塊裡都會出現一段類似這樣的代碼: setInterval(function(){ $.ajax({url: url, success: function(data){ doSomething(data); }}); },1000); 這有甚麼不好嗎? 不好,這十分不好。首先, ArOZ Online 系統並沒有標準的 Database,所以 SQL 甚麼的都不能用。而且大部分模組開發者也不會這麼有空把 SQLite 塞進去,不少模塊也是直接拿 JSON 或 CSV 檔來儲存資料,就結果而言這種存取方法只會讓系統被 IO 速度卡住,想快也快不了。 所以 AOBWS 就出現了 甚麼是 aobws? aobws 就是 ArOZ Online 基礎系統的 WebSocket 伺服器。這系統有以下幾個特點: 支援 ArOZ Cluster 的 JWT 登入模式類 Minecraft 式指令模式以 Channel 分隔的 Broadcast 模式支援單用家多視窗登入 要用它的話跟一般 WebSocket 的使用方法很接近,簡單來說就是使用 ao_module 的 ws 模塊進行 init() 即可。以下是一個簡單的例子 aobws 網頁端啟動 function 例子 完整例子: https://github.com/aroz-online/aobws_demo/blob/master/index.php 那作為開發者 JWT 的部分我要怎樣處理? 這系統的好處就是你可以不用處理,只要填入 token = "" 即可自動彈出視窗讓使用者輸入 JWT token 值,是不是滿方便呢? JWT 請求授權界面 就是這樣,你的模組就能很方便的使用 aobws 作即時通訊了。 備注:如果我想用 aobws 作其他用途怎辦? 可以喔,你也可以在同一個 aob 主系統下使用多個 aobws 作其他用途。你可以在 SystemAOB/system/aobws 下找到啟動檔然後自行更改啟動設定。(主要是更改啟動的 port 跟 登入授權檢查的 URL)。以下為 aobws 的啟動參數: Usage of aobws.exe: -cert string Certification for TLS encription (default "server.crt") -endpt string ShadowJWT Validation Endpoint (default "http://localhost/AOB/SystemAOB/system/jwt/validate.php") -key string Server key for TLS encription (default "server.key") -port string HTTP service address (default "8000") -tls Enable TLS support on websocket (aka wss:// instead of ws://). Reqire -cert and -key
在 Raspberry Pi 上使用 PHP 啟動 Miniconda 環境並運行 Tensorflow + keras 模型的方法
在做 FYP 時難得一次預上連在 StackOverflow 也找不到問題,結果被我試出來了。 問:如何在 Debian Linux 上用 www-data 權限運行屬於 pi 使用者的 miniconda 環境並運行 Tensorflow 答:shell_exec 以下指令: "echo raspberry | /bin/su -s /bin/bash -c './runmodel.sh {其他需要傳進去的參數} ' pi" (解釋: 第一個 echo raspberry 是帳戶密碼,後面的 pi 是帳戶名稱。) 然後在你要執行的 bash 檔裡面加上: cd /home/pi/miniconda3/bin/ source activate {環境名稱} (我想找不到的原因應該是沒有人拿 Raspberry Pi 跑神經網絡吧?🤔🤔🤔)
山寨 NodeMCU 上傳設定
最近因為準備開發 Home Dynamic 家居自動化系統,所以入手了一塊 ESP8266 的 NodeMCU 0.9。實際上就是中國的山寨版而已。 http://arduino.esp8266.com/stable/package_esp8266com_index.json 首先把上面的連接加進去 Board Manager,然在再選擇 Install ESP8266。之後就跟一般的新模塊 / 開發版設定沒甚麼分別,但是得留意的是在這塊中國制的 Node MCU 上面,其上傳設定是這樣的: 因為網上面並沒有甚麼教學,只好自己全部試一次好了。 這篇東西先留著,遲點有需要再用作參考吧。 更新: NodeMCU 版本應該是 1.0 才對(如圖),不然在 9600 bandwidth 的時候會讀取出亂碼
ArOZ Online BETA 版開發中
ArOZ Online Alpha 版早在 2016 年就完成並運作好幾個月了。 Alpha 版用起來還算方便但是有很多想要的功能卻沒有,好像說看不到漫畫,傳不了信息還有多多少少很多不同的不方便。於是這樣的話就乾脆把 ArOZ Online 系統改成移動式雲端就好了。你想想看,如果有一個雲端處理系統能夠放在背包裡,然後用手機連上去之後就能夠看到自己的庫存漫畫、動漫、玩到小遊戲、也能夠做基本的文書處理和圖像處理(好像小畫家、筆記本之類的感覺),最重要的是把自己整個音樂庫也帶在這個移動雲端裡面,就不用每次聽歌都要上網到真正的雲端伺服器慢慢的下載下來了。 嘛,想是這樣想,可是要支援所有 OS 和平台的使用者界面…應該就只有 HTML 吧? 於是, ArOZ Online Alpha 這個多媒體串流網站計劃就這樣變成了 BETA 版的移動雲端網站應用系統了。 好吧,到底雲端怎樣移動呢?是要背一台伺服器上街麼?才不啦w 最近不是有那個甚麼 Raspberry Pi Zero W 嗎?這麼迷你的一台東西裡面已經包含了CPU, RAM, USB Port, Storage 之類伺服器需要用的資源了。所以在這裡面 Host 個 Web Server 就可以了吧。 然後再加上一塊聚合物鋰電池,一塊 Micro USB 的 Hub 擴展板,然後兩塊 64GB 的 USB 電路板(對,是要打開 USB 手指裡面把電路板拔出來),把兩塊 USB 做成 RAID 0,那樣就能夠把READ / WRITE 速度 x2了,又或者做成 RAID 1 的話也能更確保資料安全性。不過既然是放音樂、動漫之類不見了也不要緊的東西,當然是 RAID 0 較好用吧。 ArOZ Online BETA (實驗版) 雖然說還在開發中,可是基本上能用的實驗版已經出來了。大致上長這樣子: 全部的 Module 採用 Grid 的型式來顯示,找起來還算方便。每個 Module 也能自定封面和 description text。所以自由度非常大。 延續 ArOZ Online Alpha 版的傳統,ArOZ Online 系統必要有的 Module: 音樂,影片 和 相片 系統。這次的音樂庫做成了 Web App 的形式,在手機上看到這個網站也是跟一般的播放應用程式無異,就是不用安裝直接能用。 (下面的是 ArOZ Online Alpha 版的音樂播放界面) 相片模組的界面也不是變得太多,只是新系統加入了相片管理頁面,能夠把不同時間或是標題的相片分類儲存。 (下面的是舊版) 而影片播放器還沒寫好,所以留待下次更新再寫吧。 在 ArOZ Online BETA 之下新增了不少新的模組,包括有移植自 IMUS 實驗室標淮網頁服務的 Quick Send 和 Q/9 輸入法 新加入的模組就包括了 Home Dynamic (家居自動化控制器)、Manga Cafe (漫畫應用)、ArOZ Chat 、Memo 等 (Manga Cafe 應用) (Memo 牆) 而系統控制模組方面,現在已準備了 Pi DB(輕量化資料庫),Upload Manager (上載 API),Virtual File System,HELP 模組(Read me 收集器)等 (使用了 Upload Manager API 的 Audio Module) (HELP 模組會收集其他模組裡的 READ ME 然後整理顯示出來。) 待更新…
MA5887 USB 快速充電模擬 IC
這東西其實真的超爛,不知道是誰想出來的。 部分充電器可能因為廠商不想用家使用別家的充電器來充電,所以想出了在充電器裡面加入辨識裝置,如果不是自家的產品就減少輸出的電流量。也是因為這個原因,這粒 IC 就出現了。 這粒 IC 只要接上 USB 對應的 D+ 和 D- 就可以運作了。簡單來說就是「破解」所有品牌充電器的辦識機制,讓每個充電器都以為這是自家品牌的手機,於是全力輸出最高的電流量。可真是一山還有一山高啊。
鋰電池升壓模塊 5V 1.2A 升壓 IC HXN=AP
HXN=AP ,又稱 HX3242 ,是一款超浪費電力的升壓IC(沒錯,它的發熱量出奇的大),但是也有它的好處,就是這粒 IC 能輸出高達 5V 1.2A。 那即是說,相比起其他能夠在一粒 IC 內完成升壓,不必加入另外的 MOSFET 的電路來說,是流量輸出最高的一款 IC 了。 起初的電路圖長這個樣子,可是後來發現即使跟據這個電路圖來設計,也是會出現一點問題的。而最主要的是不知為啥這個設計無法像外面在賣的升壓模塊一樣用到這塊 IC 的最大輸出電流量。 外面賣的模塊(圖片只供參考) 就結論而言,理應是因為畫線不夠粗而導致的問題吧?於是在後來的改版中,另外特別為這一塊IC 重新設計過一塊電路板,而這次是使用單面半工藝板(即是說上面沒有那層綠色的油漆,只有一層銅的電路層),所有零件在焊上板之後再用錫線加厚電路,結果電流量還是不足 1.2A。之前也試過有幾塊 HXN=AP 的板子因為過熱而燒掉了,所以結論:不再使用 HXP=AP 作為升壓IC 了。
使用 MMD 模型在 Blender 內遇上「Bone heat weighting: failed to find solution for one or more bones」解決方法
如果你在 Blender 內 Import 了 MMD 模型之後,想替它加上動作,首先你需要加上骨架 (Bone),但是若你跟隨著網上的教學,你可能會遇上一個問題就是: 「Bone heat weighting: failed to find solution for one or more bones」 這個問題在網上基本上找不到答案,但是在幾經辛苦後終於找到一個日文的 Blog 說到解決方法: ※エラー「Bone heat weighting: failed to find solution for one or more bones」がでたら、結合前に戻し、次を行う。 Editモードでメッシュを全選択 → 左のパネル「Mesh Tools」 → 「Remove Doubles」 → 再度結合してみる http://teamian.blog.fc2.com/blog-entry-8.html 圖解如下: 1. 在 Object Mode 下選擇剛剛匯入的 MMD 模型 2. 選擇 Edit Mode,在 Mesh Tool 下面找到 "Remove Doubles" 3. 在 Remove Doubles 的選單下,把 Merge Distance 調高,但也不要調太高,不然會影響模型解像度 4. 回到 Object Mode,先點選模型,再點選骨架,按 Ctrl + P,選擇 Armature Deform,並選擇 With Automatic weights。 5. 選擇骨架,點選 Pose Mode 即可調整 MMD 模型的動作。 6. 之後就能夠按平常的方式使用 Timeline 製作動畫了。
3D 打印機除錯清單
如果你家裡 或者 學校擁有一台 3D 打印機而又出現了問題,在聯絡維修人員之前,你可以參考這一份除錯清單來自行檢查一下自己的打印機。 注意,這份除錯清單只適用於 Rep Rap 開源之下的打印機。 啟動相關問題 無法開動 請檢查電源供應是否正常,如果你的變壓器上有開關制,請檢查開關是否已經打開。如果電源已經打開,而且也無法開機,請更換一個變壓器或插頭再試一次。 液晶屏無反應(或白屏) 如果你在供電之後液晶屏有亮燈但是無顯示任何文字,你可以嘗試調轉連接到打印機主板的兩條排線。如果依然不行,很有可能你的 Arduino Mega (或控制板)內的控制程式因不知明原因而被消除了,你需要重新灌入驅動程式。 液晶屏顯示正常,可是步進電機不動 請確認已插入 12V 電源及所有步進電機已經接上主控制板 X / Y / Z 步進馬達相關問題 步進馬達只能向其中一個方向移動 如果以 Rep Rap Delta 為例,如其中一個馬達只向下移動而無法向上移動,請檢查位於滑軌最上方的 End Switch 是否卡住或電線接觸不良。 如果以 pursa i3 為例,如其中一個馬達只能順時針轉動,請檢查位於滑軌左右方之 End Switch 是否被卡住。 打印時某一層會移位 這個問題是因為負責 X / Y Axis (或 Z Axis 如果你是在用 Delta)的同步輪與步進馬達間的螺絲鬆脫,導致傳動出現問題。只要把螺絲上緊即可。 自動調平時即使擠出頭已經撞到平台,馬達仍不會停止 這是因為擠出頭上的 End Switch 安裝的位置不良,請嘗試調較 End Switch 與 平台間的距離(一般是用螺絲調整)。 掉步(Skipping Steps) 這是因為步進馬達的信號不良,或許是因為步進馬達的接頭還沒完全插進主控制板或者馬達的電線接觸不良,如果重新接線後仍無法解決建議買一個新的步進馬達。 E 步進馬達 (擠出機)相關問題 Hot End (擠出頭)沒出料 Hot End 沒有出料的問題有很多個,以下為除錯步驟: 先檢查噴頭有沒有加熱(不要用手碰,可以噴一點水上去看看噴頭是否高於 100度) 如噴頭是熱的,檢查在進料時 E 步進馬達是否有轉動 如果有轉動,檢查用作送料的同步輪是否有鬆脫 如沒有鬆脫,請檢查散熱器(噴頭上方)裡是否有「卡料」 如果以上全部檢查後都沒有問題,就需要更換噴頭或使用小火槍把噴頭加熱清理。 打印件表面不平 如果你是使用 ABS,請檢查是否已開啟所有風扇。 如果與風扇無關,可以按以下步驟進行除錯: 檢查傳動帶有沒有鬆動。如有,請調整螺絲使它收緊。 檢查擠出機的同步輪是否有鬆動。 如與硬件無關,請留意 Cura 裡 layer height 的設定。一般是於 0.1-0.3 之間的,大於此值會使打印表面不平。 無法換料(新料無法推進管子裡) 由於管子的快速接口處有一個凸位,所以如換料的時候先把快速接口拔出來,先把料穿過擠出機,再把快速接口套到新料的頭段。這會使換料的時候更方便。 熱床相關問題 熱床不夠熱 可能是你的電源供應 W 數不足,導致加熱速度較慢。建議更換電源。 打印機無法黏住熱床玻璃 請提高熱床的溫度,又或者在加熱後待玻璃表面溫度漸漸提高了再打印。 Cura 沒有熱床溫度設定 可能是因為你的機器本身不支援熱床,所以 Cura 不會顯示熱床設定。不然,部分賣家會提供一個特別版本的 Cura 給使用者,內裡包含了啟用熱床的設定,詳情請向你的供應需查詢。
3D 打印 PLA 表面平滑化處理及上色用底漆之相關研究
相信大家有在使用 3D 打印的話應該也聽過 PLA 和 ABS 這兩種材料。 後者可以使用 Acetone 來進行表面平滑化處理,而前者因為其溶劑並不常見,因此很難對 PLA 打印件用化學溶解的方式進行表面平滑化。所以,這次就這個原因展開了一次研究,看看到底哪一種常見的物料能對 PLA 表面進行填補,並做到最佳的平滑化處理。 有關的研究報告可以在這裡看到: [pdf-embedder url="http://123.203.74.171:8080/wordpress/wp-content/uploads/2017/03/PLASmoothingResearchReport.pdf"]
SAB 獨立電池充電架構 2.0
Stand Alone Battery Charging Architecture 2.0 開發目的 SABC1.0 由於二極管的關系,其能量流失量很大。間接帶出開發 SABC 2.0 的必要。 架構原理 SABC2.0 使用一個 AMS1117-5.0,把輸入電壓降至 5V 之後,再輸入到 TP4056 內給聚合物鋰電池充電。同時間,電路板背面有兩粒 肖克利二極管 (Shockley Diode) ,使能量流失減至最低。然而,雖然更改了二極管的種類,但是電流經過二極管之後依然有 Voltage Drop 和能量流失的情況發生。同時間,在輸入端(即電流經過線性穩壓器之後)加了一粒22 uF 的電容,加上本身SAB 系統電路板的特性(每塊電池獨立輸出,每塊電池之間不會互相影響),使這塊電路板適合用作音響裝置以分隔其他升壓模塊帶來的噪音。 由於使用了 AMS1117 和跟足 datasheet 在 TP4056 輸入端加了 0.4 Ohm 的限流電阻的關系,這個模塊充電速度只有 0.23A,因此建議在安裝的時候,如不需要降壓功能及限流功能,可以直接繞過 0.4Ohm 電阻及不安裝 AMS1117,直接把腳位用錫接上。 電路圖 成品圖 [caption id="attachment_142" align="alignnone" width="398"] SABC2.0 模塊全貘[/caption] [caption id="attachment_140" align="alignnone" width="150"] TP4056[/caption] [caption id="attachment_143" align="alignnone" width="150"] AMS1117 -5.0 線性穩壓器[/caption] [caption id="attachment_141" align="alignnone" width="150"] SS34 肖克利二極管[/caption] 改良方向 預計於 SABC 3.0 推出的時候,將會在這幾方便進行改善: 走線由現在的 1mm 再加粗到 3mm 移除 AMS1117 的降壓功能 嘗試以 Transistor 代替現時 Diode 的功能