Stable Diffusion, Counterfeit v2.5 跟 656408761
有在用 SD 生 waifu 的人對前兩個應該是滿熟悉的,可是最後那串數字是甚麼? 那是一個滿好看的 SEED 沒錯,這篇文章大概就像一些 Minecraft forum 一樣在分享好看的地圖,這篇 blog 是用來分享一個好看的 SEED。以下是我用來生這些圖的參數: positive weight: ((masterpiece,best quality)),1girl, solo, blue eyes, (indoor), (blue sky:1.9), long hair, ((white hair)), hoodie, shiny hair, pleated skirt, front view, high detail background, (sunlight: 1.1), happy face, smiling, look at viewer, (ahoge), ((hands in pocket:1.3)), streaked hair, hair ribbon, blurry background, close up, summer, green house, high tech, ((glass wall)), grass field, ((white cloud)) negative weight: ((nipple)), ((((ugly)))), (((duplicate))), ((morbid)), ((mutilated)), (((tranny))), (((trans))), (((trannsexual))), (hermaphrodite), [out of frame], extra fingers, mutated hands, ((poorly drawn hands)), ((poorly drawn face)), (((mutation))), (((deformed))), ((ugly)), blurry, ((bad anatomy)), (((bad proportions))), ((extra limbs)), cloned face, (((disfigured))). (((more than 2 nipples))). [[[adult]]], out of frame, ugly, extra limbs, (bad anatomy), gross proportions, (malformed limbs), ((missing arms)), ((missing legs)), (((extra arms))), (((extra legs))), mutated hands, (fused fingers), (too many fingers), (((long neck))), (((background))), ((((big breast)))), EasyNegative, extra fingers,fewer fingers, ((keyboard)), (door), Sampling method: DPM++ 2MSize: 1024 * 768Sampling Steps: 25CFG Scale: 7Seed: 656408761Variation seed: 3600373764 (或隨機,但是我都在這範圍附近)Variation strength: 0.3 以下為一些產出來好看的圖(部分經過 Photoshop 做微調整) 有興趣生類似感覺的圖的話歡迎抓來使用喔!
初嘗 CH552G 與 Macro-pad 鍵盤
在一段時間之前,我無意中發現了 CH552g 這一片超便宜的 Arduino IDE 相容開發板。由於它實在太冷門了,冷門到幾乎沒有用它的 DIY Project,所以我就來自己做一個當實驗了。 可是如果只把 CH552G 做成一個類似 arduino 這樣的開發板,我猜應該也不能引起甚麼 Makers 圈的關注,作為一個喜歡 reinvent the wheel 的開發者,我就想到一個能盡用這顆 IC 的功能的小 project -- 4 key macopads keyboard 甚麼是 Macropad Keyboard? Macro-pad (我也不知道中文是甚麼),簡單來說就是一堆快捷鍵,讓你在按下去的時候它幫你自動對電腦輸入一連串的按鍵動作。目標不一定是電腦,例如說也有可以控制 IoT 裝置的 macro-pad,也有可以配合 auto hotkey 控制軟體界面的 macro-pad 等等。但是我這裡做的是最基本的款式:hot-key type macropad 外面有很多類似的東西啊,你設計的有甚麼特別? 講到這個就有趣了。因為 customize mechanical keyboard 這東西是一個很特別的領域,就如迷你版的「HiFi 音響隨便看都上千上萬元一套」領域一樣,市場上有類似的東西價格都是一兩百港幣起跳的,貴的到幾千都有。不過他們貴的原因有很多,有的是用鋁合金電鍍外殼、有的是用上最貴的機械開關(軸)、有的有訂做的鍵帽、螢幕與 RGB 等等。可是作為一個 macropad,這些東西本來就只是 value-added 的附加品,不知道為甚麼弄著弄著就變成了成本最貴的東西(? 在移除了這些附加的東西之後,剩下來的就是鍵盤最基本的部分: 按鍵電路板MCU / Keyboard IC輸出接口 而這個 project 最特別的地方就是: 低成本 我做的這個 macropad 用了以下一大堆神奇的方法來節省成本: 使用更便宜的機械按鍵使用最便宜的 PCB 生產方案(3 HKD / pcs)使用 Mini USB 取代較常見的 type C 接口,省去兩顆 5.1K 電阻盡量減少零件種類(RLC 部件只使用了 10k 電阻跟 0.1uF 電容)以 CH552G 替代常用的 32u4 大部分外面的 DIY 鍵盤都是在用 32u4 作為控制器。這顆 MCU 畢竟是 Atmel 的,說貴不貴但是也不便宜。這顆 4 港幣左右的 CH552G 跟 32u4 一樣內置有 USB HID 裝置,所以能被電腦識別為鍵盤,同時間又因為它需要的外圍零件真的超級少,所以我們只要很簡單的這樣那樣就設計好板子了。 看著這個板子這麼空的時候我都懷疑自己是不是畫漏了零件 背面一樣零件都沒有,只有走線 如果你是不需要 MODE A / B 切換的話連那個物理開關也能省下,但是因為我打算平用來音樂控制器,在做 Youtube 影片時來當 Adobe PR 的 hotkey keyboard,在只有四個按鈕的設計下只好做 multiplex 了。 軟體方面使用了 CH55X Arduino 的 library 與一些 C code 來做到鍵盤機能 https://pastebin.com/Hb0AQzpY 底座 然後因為都做這麼完整了,那就順便幫它做一個鍵盤底座吧? 這軟體是我自家公司開發的 Aprint Editor 成品
AI 產圖與魔法 #淡淡杯
話說最近 FB 上出現了這麼一個有趣的比賽,但是作為技術系開發者,當然是要用最原始的 stable diffusion 來產,於是這就是作品: 魔法如下(Positive weight 跟 negative weight) ANIME GIRL, FEMININE,((PERFECT FACE)),((SEXY FACE)),((DETAILED PUPILS)).(ARTIST),ARTIST,ARTIST,(ARTIST). OIL PAINTING. ((NO BREAST)), SMIRK,LOOK AT VIEWER, (((WHITE HAIR))).(INTRICATE),long hair, asian, (loli), (HIGH DETAIL),SHARP, GREY EYES, 14, ((maid)), cherry blossom, ((sakura)), leaf, (flower), nature, ((blue sky)), white cloud, black cat ((nipple)), ((((ugly)))), (((duplicate))), ((morbid)), ((mutilated)), (((tranny))), (((trans))), (((trannsexual))), (hermaphrodite), [out of frame], extra fingers, mutated hands, ((poorly drawn hands)), ((poorly drawn face)), (((mutation))), (((deformed))), ((ugly)), blurry, ((bad anatomy)), (((bad proportions))), ((extra limbs)), cloned face, (((disfigured))). (((more than 2 nipples))). [[[adult]]], out of frame, ugly, extra limbs, (bad anatomy), gross proportions, (malformed limbs), ((missing arms)), ((missing legs)), (((extra arms))), (((extra legs))), mutated hands, (fused fingers), (too many fingers), (((long neck))), (((background))), ((((big breast)))), (((hand))) #淡如盃 技術細節 可能看到這裡的你會在想,到底 stable diffusion + pre-train model 跟外面的 midjourney 之類的差別在哪?雖然我也不清楚其他系統的做法,但是我猜的是他們也是基於一個 pre-train model 並加入一堆 preset 的 rule / theme 來讓它產出那模型的獨有風格。舉例說,上面的 negative weight 中,除了最後幾個(background)、(hand) 之類用作減少背景雜亂和手部生產錯誤的 negative weight 以外,其他基本上也就是固定的了。因此我猜可能其他的服務也是透過類似的方法來實現。 嘛當然,如果能避免直接出現手部(例如用 hands in pocket、hands out of frame 的 positive weight)的話那效果會更好。 手指與手套 加入黑色手套 (black glove) 不知道為甚麼,有時候好像也能改善手指數目和動作生成的問題(我猜可能只是看不見而已),以下是兩張例子: 色系與背景 特別強調背景的物品或色系看來有時候也會讓整體的繪圖質素有所提升(可能是因為通常背景畫得好的繪師,人物也畫得不錯?),例如說當我特別定義了 blue sky, white cloud, sunlight 等大自然的感覺的字眼之後,整個產出的氣氛也變得特別悠和 加入其他現代化的字眼如 future, glass wall, minimalist 之類的也可以做到類似效果 不過我覺得最特別的是加入了 (((hong kong))) 為背景所產出來的,不知道為甚麼有一種未來城市的感覺(?…
Golang 程序連續執行一個月之後一定會出錯之神奇原因及除錯
話說半年前我開發了一個叫 imusutm 的 Simple Up Time Monitor。它是一個很簡單的程式:每隔 5 分鐘去 ping 一次 json 設定檔案裡面的網址,然後把它 buffer 到 RAM。同時提供一個 RESTFUL API 給 php script 來 call 並回傳最近一天的狀態。 可是不知道為甚麼,這程式很固定每隔一個月就會出現全部斷線的狀態,連帶用這系統的 Telegram bot 也一律全部報錯 在無論如何都沒辦法在本地端 reproduce 之後,在上一個月我把所有 error 裡都加入了 error message print-out 來協助除錯。結果被我發現問題了: 2023/02/24 20:20:34 Get "{某個要 ping 的 IP 地址}": dial tcp {某個要 ping 的 IP 地址}: bind: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full. 一看到這個我就明白了,原本是 socket 用光了。可是一台主機的 socket 有這麼多怎可能能全部佔用? 原來是忘記了 resp.Body.Close() 於是我去看整段 code 唯一有用到 socket 的部分:http.Get(url),發現忘記了寫 resp.Body.Close() 了(222 行是新加入的),所以難怪會出現這個問題。 可是,又為甚麼是大約一個月會出現一次? Windows 的 Dynamic Port 與 ArozOS Windows 的 dynamic port range 是由 49152 到 65535。雖然有一些間中會被佔用,但是大部分都是用完之後就會被釋放出來。這兩個數字相減之後便能得出 16384 個能用的 dynamic port。 至於為甚麼是一個月?因為 每小時有 12 個 5 分鐘 x 一天 24小時 x 30天 = 8640 個 connection,然後由於 ArozOS 使用的 Go net/http 會自動斷開,而這數字又差不多是可用 port 數的一半,再加上列表上又剛好只有兩個 connection 是能維持的,我好像猜到點甚麼的樣子(? 總括而言 相信加入了 resp.Body.Close() 之後就能解決 utm 不穩定的問題了,如果下一個月再出現類似的問題我還是整個砍掉重寫好了(畢竟這只是一個我在等上飛機時的小作品,出現這些奇怪的 bug 也不怎麼意外就是了)
ArozOS 的相容性存取模式
在開發 ArozOS 這個計劃的時候,其實大部分的時間我都不是用來寫功能性的東西,而是開發前端,以提升使用者體驗(UX)的東西。從網頁桌面到簡單易用的設定與管理系統,從 FTP 到 WEBDAV 接口等,都是讓不同的用戶及自己能在不同的裝置與環境下使用到自己的伺服器。然而自從 1.0 版 ArozOS 開始開發之後我們一直都還沒有放進去的,就是相容模式了。 新版的硬碟掛載界面 新版的檔案伺服器界面 從 Aroz Online Beta 起相容模式就一直是我們堅持的功能之一。其一是為了一些極端的使用裝置(例如 DSi 的瀏覽器、快譯通之類的嵌入式裝置)可以使用 ArozOS 為資料傳輸用之外,也可以用在一些很惡劣的網絡環境下,讓相容模式變成遠端使用 ArozOS 的最終手段。 AOB 下的相容登入模式 相容模式下只能勉強執行一些簡單的 WebApp 可是 AOB 的相容模式下真的沒辦法做甚麼,除了 Music 跟 Setting 幾個 WebApp 之外幾乎甚麼都沒辦法做(特別是連 File Manager 都開不了這點最讓我覺得奇怪),所以我猜當時開發相容模式就只是為了可以產生伺服器端的 session 然後用同一組 session 來存取伺服器上其他的服務而已。 ArozOS 2.0 的 相容模式 ArozOS 2.0 新加入的 Directory Server 相容存取模式 去到 ArozOS 2.0 之後,相容模式的登入界面也被直接改成有一定年代歷史的 Basic Auth 處理,也把界面盡量減少到只使用最基本的 HTML5 及顯示最基本的虛擬檔案系統層 ArozOS 2.0 的 file system abstraction ,以 compatibility mode 顯示 這樣的設計不但能相容最多的裝置,作業系統等,也能在極為惡劣的網絡環境下(Kbps 速度)存取到你放在伺服器的資料,對於在緊急需要下載個文件之類的還是有點用途(我猜) 如果你有一定年紀的話你會發現這界面好像在哪裡看過。沒錯,這是參考 Apache 的 list dir 界面設計的。簡單、直接的設計怎樣說還是參考前人設計為佳。 Apache 預設的 list dir 界面 結論:實用性有時候比技術重要 現在的前端都太複雜了,不是依靠 Virtual DOM 就是依賴一大堆 HTML5 attribute tags。有時候當你開發的系統是以實用性和高相容性為主的時候,不妨考慮一下以機能而非技術先行,採用 server side 直出 HTML 的做法還比較實際。
Marktext VS MDEditor 還是自己寫的好用
最近我在用 MarkText 來寫 Final Exam 的筆記,由於這是一門非常複雜的課,所以筆記也超級無敵的長。直到突然去到一個位置 MarkText 就開始出現一些怪怪的情況。例如說一按 Enter 就會自動在其他位置加入新項目之類的: 一看就知道又是開源項目的通病。這些小 bug 往往就是讓人覺得「開源的東西不好用啊」的部分。這也是為甚麼我在開發 ArozOS 系統的時候都特別注重這些細節的位置,東西不是生不出來就是一定要做得好用易上手的。 由於這軟件又增加了我對別人寫的 Markdown Editor 的不信任,所以我決定用回那個我使用多年,超級無敵穩定可靠的 WebApp:ArOZ Markdown Editor (現在叫 MDEditor,但是核心都是一樣的) ArozOS 2.008 的 MDEditor 跟 PDF Viewer ArOZ Online Beta LTS 的 WriterA 跟 PDF Viewer 用自己寫的東西的好處大概就是相信自己寫的東西夠穩定吧。說實話我現在已經開始發現到「 相信別人不如相信自己,相信自己不如戰勝自己。 」的道理。從 Beta 到現在這個編輯器還在而且還能夠在檔案系統虛擬化後能完全穩定運作,讓我能在今晚完成這份筆記,完全就是這句說話的例子啊(
ESP8266 讀取 SD 卡太慢?要試試全速 SPI 嗎?
我看到日本技術宅的 Blog ,覺得奇怪這裡為甚麼他可以在 SD.begin 後面設定一個指定的速度(? https://www.mgo-tec.com/blog-entry-esp8266-wroom-spi-speed-up.html 於是我跑去翻 ESP8266 Arduino Core 的源碼,原來 ESP8266 比起原生的 Arduino core 在 SD.begin function call 多了一個可選擇指定的 uint32_t 參數,預設是 SPI 一半速度(4 Mhz),但是如果你的 SD 卡夠快(例如說現在大部分 A1 Class 10 的卡)都可以上到 8Mhz (SPI Full Speed) 或以上(這裡日本部落格用的是 40Mhz,為了資料安全好孩子不要隨便超頻你的 SD 卡) https://github.com/esp8266/Arduino/blob/313b3c07ecccbe6fee24aa9fa447c4aed16ca499/libraries/SD/src/SD.h#L35 嘛不過 ESP8266 的 WiFi 速度極限也就 4Mbps,如果要用來做網頁伺服器的話 SPI 速度設定到全速(8Mhz)已經足夠盡用它的網絡速度了。 備注:如果要設定速度的話可以用 ESP8266 SD library 內預設的常數 uint32_t const SPI_FULL_SPEED = 8000000; uint32_t const SPI_HALF_SPEED = 4000000; uint32_t const SPI_QUARTER_SPEED = 2000000;
在 Raspberry Pi Zero 2W 上設定 WiFi AP 作為 WiFi 中繼器
因為不知道為甚麼網上沒有 Raspberry Pi Zero 2W 以外接 WiFi USB 作為 WiFi 中繼器的教學,所以我就來自己研究出一個方法囉 材料 Raspberry Pi Zero 2WRaspberry Pi OS 用作 wlan1 的 USB WiFi 模組 安裝所需 Package sudo apt-get update sudo apt-get upgrade sudo apt-get install hostapd sudo apt-get install dnsmasq sudo systemctl stop hostapd sudo systemctl stop dnsmasq 設定網絡界面卡 sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig sudo nano /etc/dnsmasq.conf 寫入以下內容 interface=wlan1 dhcp-range=192.168.0.11,192.168.0.30,255.255.255.0,24h 固定 wlan1 的 IP 地址 sudo nano /etc/network/interfaces 把 source /etc/network/interfaces.d/* 加上 comment: #source /etc/network/interfaces.d/* 寫入以下內容 auto lo iface lo inet loopback auto wlan0 iface wlan0 inet dhcp allow-hotplug wlan1 iface wlan1 inet static address 192.168.0.10 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.254 設定 Hostapd sudo nano /etc/hostapd/hostapd.conf 寫入以下內容(記得更新 WiFi 名稱與密碼) interface=wlan1 hw_mode=g channel=7 wmm_enabled=0 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP ssid=[WiFi SSID 名稱] wpa_passphrase=[WIFI 密碼] 之後編輯預設設定 sudo nano /etc/default/hostapd 把原本的 #DAEMON_CONF="" 改成 DAEMON_CONF="/etc/hostapd/hostapd.conf" 設定 wlan1 -> wlan0 的 forwarding sudo nano /etc/sysctl.conf 把 #net.ipv4.ip_forward=1 改成 net.ipv4.ip_forward=1 新增 iptables 規則 如果你是用 Lite 版沒有 iptables 可以先透過以下指令安裝 sudo apt-get install iptables 然後輸入 sudo iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE sudo sh -c "iptables-save > /etc/iptables.ipv4.nat" 編輯 rc.local 在啟動時自動應用規則 sudo nano…
再見 Typora,你好 MarkText!
話說我自大學開始我就很喜歡用 Typora 來做筆記,但是最近它開始要收費了然後 Beta 版本的 Typora 連啟動都啟動不了。 嘛,軟體要收費我覺得是沒問題,但是像 Typora 這種一點預先通知都沒有,直到前幾天突然急用要啟動它的時候才彈出不能用的通知,真的超級沒良心。由於是急用所以我就先用一個開源的 keygen 來應付一下,連接在下面: https://github.com/taozhiyu/TyProAction 但是,由於按照它的條款,使用這 keygen 產出的授權只能夠使用 24 小時,所以在處理完手上的工作之後我就把用了快 3 年的 Typora 刪除掉正式找替代品了。在幾個小時後我找到了一個完美的代替開源方案: MarkText https://github.com/marktext/marktext 我覺得這個應該就不用多說了,就是一個很好用的開源 Markdown Editor 軟體。 它可以支援自定的字體(這裡我把它預設的換成了 Noto Sans HK Medium),也能夠透過 Ctrl + J 叫出旁邊的 title list。 至於怎樣把它設定到跟 Typora 的 hotkey 一樣,你可以到 File > Preference 那邊,在 Key Bindings 下找到以下功能並把 hotkey 改成 Ctrl + {號碼} 這樣你就可以直接無痛轉用到 MarkText 了!
便宜又好用的 SOP8 IC 清單
這裡收集了一些最近我發現的 SOP-8 IC,如果剛好你在找一些簡單的替代 IC 可能會在這裡找到喔! 型號用途備注 TC118S 單馬達驅動 IC (類 H 橋)1.8A MaxLM386音頻放大器TC4056A鋰電充電管理器,可替代 TP4056AO4496N-Channel MOSFET30V / 10AAO4435P-Channel MOSFET30V / 10ANE555DR就 555 啊,但是在 SOP8 包裝TP4333鋰電池充放同步升壓管理器 4.2V 1A XPT8871 LTK5128音頻功放5WM62429數字電位器(需接 MCU 使用)XL1509降壓3V / 5V/ 12V 版本CN5711LED 驅動(使用 PWM 調光暗)MOC213R2M光電耦合元件TP8485ERS-485 / RS-422 接口
目前第 2 頁,共有 10 頁