顯示具有 Win32 標籤的文章。 顯示所有文章
顯示具有 Win32 標籤的文章。 顯示所有文章

2024年9月14日 星期六

bleachbit

這個其實是我在找 avira 留下的 C:\Windows\Temp\sentry_temp 裡一大票垃圾檔怎麼辦時找到的工具, 不過先說在前面, 它沒解 avira 垃圾檔的問題.

官網
https://www.bleachbit.org/

它的清掃能力跟 dism++ 差不多, 不過 dism++ 很久很久沒再維護了. 還有就是 freespace 別勾選, 這個相當於 freespace wipe 也就是軟體做 TRIM, 如果你是在虛擬機裡想減少壓縮備份後的空間, 這功能才有用處.


update: 這個目錄是被 avira 的一個 SentryEye.exe 使用中, 每一個被執行的東西都會存個大小不一的記錄在這裡面, 剛剛想說移除掉後對 sentry_temp 動點手腳, 再重新裝回去... 很奇怪的, 這個功能就不見了....





2024年4月10日 星期三

Windows update without driver

我想這已經很多人都知道了. 除了 AMD GPU driver 以外, 有安裝 Intel 官方網站下載的 driver 也建議打開, 例如 vmware workstation/player 會因為 M$ windows-update 給的 driver openGL 有問題, 開起來直接藍底白字. (個人沒很信任 WHQL 的品質, intel driver 品質江河日下的今天它可以比 intel 或 AMD 都還要糟糕....)




2024年3月7日 星期四

rustdesk windows build note

 date: 2024/03/07

reference: https://rustdesk.com/docs/en/dev/build/windows/

install: (install by administrator)

VS2022: community, with c++ development package, win10sdk 10.19041 (ps. no account)

git: https://git-scm.com/download/win

rust: https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe

llvm: https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.2/LLVM-15.0.2-win64.exe


install vcpkg:

git clone https://github.com/microsoft/vcpkg cd vcpkg git checkout 2023.10.19 cd .. vcpkg\bootstrap-vcpkg.bat export VCPKG_ROOT=$PWD/vcpkg vcpkg\vcpkg.exe install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static

setup VCPKG_ROOT in user environment.

set LIBCLANG_PATH in system environment.


build rustdesk:

git clone https://github.com/rustdesk/rustdesk cd rustdesk mkdir -p target\debug curl https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll --output target\debug\sciter.dllcargo run


rustc.exe 跑一跑會無法終止我就不知道什麼原因了.

2022年3月26日 星期六

Windows 10 低音重導向

 這裡用的是 Equalizer APO 這個軟體, 可以支援 vista (6.0) 一路到 win10.

這個軟體功能很厲害, 甚至可以每個聲道都設一個專有等化器, 但我今天要的功能沒那麼複雜, 就只要把 stereo 的低音重導向到低音喇叭而已. 這個功能很多音效卡都有, realtek 也有附個軟體可以錐加這個功能, 但如果是 USB audio 就沒了.

於是來看到這裡有介紹怎麼使用. 以下範例我給它改成 7.1 用的, 其它我不知道有沒有差.

但文中的設定檔我改到程式安裝目錄裡才有效, 原因不明. 我把這檔改名改地方:

C:\Program Files\EqualizerAPO\config\iir_lowpas2.txt
# This shows how to create a lowpass biquad filter using the IIR filter type
# The result should be equivalent to the command
Eval: crossfreq=120
Copy: BASS=L+R+C+SL+SR+RL+RR
Channel: L R C SL SR RL RR
Filter: ON HP Fc 120 Hz
Filter: ON HP Fc 120 Hz
Channel: BASS
Filter: ON LP Fc 120 Hz
Filter: ON LP Fc 120 Hz
Copy: LFE=LFE+-10dB*BASS

然後在 EqualizerAPO configuration-editor 中去修改 config.txt 裡 include 那邊, 指到 iir_lowpas2.txt, 就立即生效.

這軟體太複雜了, 其它功能我就懶的研究了....




2021年11月9日 星期二

web browser

這裡講的是瀏覽器的預設啟動方式. 由於有在用 RAMdisk, 也會習慣性的把 browser cache 指到 RAMdisk 去, 這種簡單的動作在捷徑或 taskbar pin 上都可以透過下達 --disk-cache-dir (chrome 家族 browser) 完成. 但如果是透過超聯結直接開 (例如直接開 .html 檔) 時, 這個參數就無法同時套用. 
這個修改方式是無意間找到的, 這裡預設 RAMdisk 指到 b:\user, 將以下存成一個 .txt 檔, 再 rename 為 .reg 檔:
----
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\BraveFile\shell\open\command]
@="\"C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe\" --disk-cache-dir=b:\\user\\brave --single-argument %1"
[HKEY_CLASSES_ROOT\BraveHTML\shell\open\command]
@="\"C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe\" --disk-cache-dir=b:\\user\\brave --incognito --single-argument %1"
[HKEY_CLASSES_ROOT\ChromeHTML\shell\open\command]
@="\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" --disk-cache-dir=b:\\user\\chrome --single-argument %1"
[HKEY_CLASSES_ROOT\MSEdgeHTM\shell\open\command]
@="\"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe\" --disk-cache-dir=b:\\user\\msedge --inprivate --single-argument %1"

----
firefox & vivaldi browser 的 registry 也在 HKEY_CLASSES_ROOT\下, 但因為這兩個 browser 安裝時是 by user 各別安裝, 所以沒有固定路徑, 要手動進去 regedit 裡改. 
firefox 為 HKEY_CLASSES_ROOT\FirefoxHTML-<USERID>\shell\open\command, 
vivaldi 為 HKEY_CLASSES_ROOT\vivaldi 為 vivaldiHTML.<USERID>\shell\open\command,

指定 defaults 工作目錄: chrome / chromium / brave / vivaldi / edge (firefox 為內定) 為 --disk-cache-dir= 
指定無痕模式 chrome / chromium / brave / vivaldi 為 --incognito, edge 是 --inprivate, firefox 是 -private-window
chromium like (chrome, chromium, brave, vivaldi) 用的其它參數可以參考這裡, edge 雖然系出 chromium 但有改掉一些東西, 不完全相同. 至於 firefox 我沒再用了不知道..

這樣可以直接開網頁時就是無痕+工作目錄指定到 RAMdisk, 個人習慣.

ubuntu linux (xubuntu 20.04) 是修改 application 敘述, 如 brave:
nano ~/.local/share/applications/brave-browser.desktop
[Desktop Entry]
...
Exec=/usr/bin/brave-browser-stable %U --disk-cache-dir=/dev/shm/brave

[Desktop Action new-window]
...
Exec=/usr/bin/brave-browser-stable --disk-cache-dir=/dev/shm/brave

[Desktop Action new-private-window]
...
Exec=/usr/bin/brave-browser-stable --incognito --disk-cache-dir=/dev/shm/brave

桌面或 panel bar 執行直接參考這裡, 改一個就完工了.
vivaldi desktop 檔案則是:
 ~/.local/share/applications/vivaldi-stable.desktop
edge 或 firefox 我不知道, 猜想應該是一樣的改法...

2020年4月24日 星期五

NFS for Windows XP (續)

上次 NFS client for windows XP 算是寫到一半, 在這裡補上一些上次沒寫的

  • 首先是安裝. 安裝不能只單純裝 client for NFS, 因為少一個看起來很多事的 uid/gid mapping service 要裝. 所以記得, 安裝時請用正常步驟, 頂多拿掉 NFS server 的選項, 也不能一開始就用 "msiexec /I C:\SFU35SEL_EN\sfusetup.msi /qb addlocal="NFSClient"" 安裝
  • 要照 https://superuser.com/questions/359968/nfs-mount-in-windows-xp 裡的說明多做一步 uid/gid 設定轉換工作. 不過不同的是, /etc/passwd 或 /etc/group 並不需要給全部, 只要留下 NFS server 端預設使用的使用者名稱 (ubuntu 裡一般使用 uid/gid 1000 這一個, 也就是安裝時使用的自訂帳號) 就好, 假設 server 端用的是 ubuntu nfs-kernel-server, 那 /etc/passwd 只要留下 :1000: 那一行餵給 Windows NFS 管理工具就好. 全丟給它它也不收.

以上測試到可以正常連線讀寫後, 會有第二個問題, 如何讓它一開機進來就自動掛載?

在做這個動作之前, 請先做一個動作, 檔案管理員裡把剛剛連線的 NFS 磁碟代號等全部離線.

在 Windows XP 下, NFS client 是屬於 user app 層級的服務, 啟動順序遠較原本的正常服務要低, 往往都是進桌面後才會開始啟動它, 沒意外的話 Windows 2000 也是這樣. ( 後面版本的 windows 有開始內建 NFS service 後有沒有解決這問題, 對不起我不知道.... ), 而這樣的啟動順序會造成 windows 開機途中跳個 dialog 說 NFS client service 沒有起來所以沒辦法使用, 然後就停在那等人點下去....

會造成這個問題的原因, 除了如 dialog 所說 NFS client service 沒起來以外, 另一個原因是 windows 本身的網路磁碟機掛載機制, 當你用手動掛載, 但沒有手動中斷時, windows 會在下次開機時嘗試再掛載起來, 但在較早版本的 windows 裡這個階段 NFS client 是還沒起動的, 也就所以會跳這個錯誤出來.

解決方式是 net use drive: server:/sharringname/ 後面多個 /p:no 或 /persistent:no
這樣就不會把這次的連線方式記憶起來.

為解決這些較早期版本 Windows 的 NFS client 問題, 個人建議自動掛載交給一個 batch 處理, 從等待服務啟使完. (ps. "Client for NFS" 是在 XP 上的名字, 在其它 windows 上會不同)

-----
@echo off
:loop
for /F "tokens=3 delims=: " %%H in ('sc query "Client for NFS" ^| findstr " STATE"') do (
if /I "%%H" NEQ "RUNNING" ( goto loop )
)

REM /persistent:no 或 /p:no 為不要在下次開機時自動掛入, 非常重要.
net use d: 172.16.128.1:/docs /persistent:no
net use x: 172.16.128.1:/shm /persistent:no
-----

會寫這篇文章是因為 samba 從 4.10 (ubuntu 20.04) 開始預設將 smb v1 關掉, 雖然後來有找到如何在 samba 4.10 上強制開啟 smb v1 的設定方式, 但後來想想覺得, smb v1 被徹底移除大概也只是時間早晚問題, 不如全改用 NFS 掛載算了....
至於 Win9x 嘛.... 另外再開個小 vm 裝個 samba server / nfs client 做個小小 bridge 轉接過去吧...

2019年9月17日 星期二

ImDisk

這是一個 RAMdisk 軟體, 出很久了但我現在才知道它, 在這之前用的是 DataRAM.
https://sourceforge.net/projects/imdisk-toolkit/

它有幾個我之所以換掉 DataRAM 的功能..

  • 它可以動態 alloc 大小, 跟 tmpfs 一樣, 用多少請多少
  • 可以指定 RAMdisk 不被丟去 pagefile (swap..)
  • 可以超過 4G (DataRAM 限制是 4G 後來改 1G, Radeon 版 6G)
  • 免費.
  • 可以支援關機時儲存
  • 可以多個 RAMdisk.

然後 XP 到 Win10 x64 都可以用.
設定好完後按取消即可, 這是 UI 較奇怪的地方:


update: 已確認這軟體會造成 windows 10 update 80070001 與其他更新無法安裝的錯誤,win10 的用戶我建議先不要用..
update200312: ImDisk 目前的版本 (20191126) + Win10 1909 AMD64 使用時, 把代號設定到所有硬碟機的後面, 建議直接設定到 z:, 設定成 b: 會出現 0x80070001 的錯誤. 另外有些 windows 更新非常的能吃記憶體, 建議最少保留給系統 4GiB...

2018年8月19日 星期日

Windows 10 傳統注音輸入法

這裡要講的不是加 registry 把隱藏的純注音輸入法叫出來, 那種方法會僅只能在桌面 app 使用, 像 win10 專用的 app 如 LINE 就無法使用 (至於僅只能在桌面 app 使用的輸入法有沒有關係呢....? 對我來講僅只有 LINE 受影響而已, 關係不大), 而我自己是用 yahoo 輸入法, 這個輸入法很好用, 但再也沒人維護的情況下, 終就不是長久的解決之道, 也就是說, 一直沒有我滿意的解決方案.

而這個問題直到我發現 PIME 輸入法可以切換輸入法碼表 (也就是選字順序) 開始有了點改變..

PIME 怎麼樣就不是本篇重點不再介紹 (安裝時預設沒有傳統注音, 要自己勾選), 這裡我只寫出個人的設定筆記, 以下沒列的就是我沒改.
一般設定 -> 打字行為:
預設狀態 -> 預設以英文模式啟動
行為設定 -> 使用 Shift 快速切換中英文
候選清單 -> 使用空白鍵作為候選清單換頁鍵
候選清單 -> 優先以聯想字詞排序候選清單 (X) (勾掉不要)
輸出設定 ->
輸出設定 -> 允許內建符號輸入方式連續輸入
其它設定 -> 隱藏不必要的提示訊息

界面外觀 -> 界面設定:
每列顯示候選字個數: 10
每頁顯示候選字個數: 10

碼表設定 -> 輸入法碼表:
輸入法碼表: 傳統注音


最後一個對我很重要, 因為預設是泰瑞注音, 選字順序有很多都跟傳統注音不同, 對一個傳統注音用的很習慣, 早就把選字表背的牢牢的我來說, 改選字順序跟叫我換一個輸入法幾乎沒有差別,

PIME 這個輸入法有個好處, 你的主要語系如果是英文, 也不受影響.

2018年6月21日 星期四

sdelete for windows

簡單的說這個工具專門清洗非使用中磁區的, 對 SSD 有沒有用我不確定, 但如果你是 VM, VM 裡跑的又是較老舊的 OS 如 WinXP, VM 檔案又是放在有壓縮功能的檔案系統如 btrfs, zfs, 這個清除工具就可以幫你清出一些不用的空間出來.
https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete

2018年3月10日 星期六

Windows 10 update

〔Win〕+〔R〕並輸入「gpedit.msc」後再按下〔確定〕鈕。 進入了「群組原則編輯器」畫面後,請展開左邊「電腦設定」→「系統管理範本」→「 Windows元件」→「Windows Update」,並點選兩下右邊的「設定自動更新」。 預設值是「尚未設定」,請點選「已啟用」後在選項上指定2或4
來源

Win+R -> gpedit.msc -> LocalComputerPolicy->ComputerConfiguration->AdministrativeTemplates-> WindowsComponents->WindowsUpdate->ConfigureAutomaticUpdates->Enable->Select 2

在噓你機器上有確定要手動按才會更新,暫時不會亂搞了。

update 2018/05/01: 功能更新 (RS4) 不會擋, 看來必需要有更強制的手段

2018年1月17日 星期三

Windows Services for UNIX 3.5

我因為還有些拉檔軟體要跑所以還有在使用很老舊的 Windows XP, 使用它的理由也很簡單, 512MiB RAM 就可以跑的好好的. 裝這個沒什麼目地, 就只是給老舊的 Windows XP 可以連 NFS 而已. 檔案來這裡找:
http://www.filewatcher.com/m/SFU35SEL_EN.exe.228178504-0.html

怎麼用可以參考這篇
https://technet.microsoft.com/zh-tw/library/cc754350(v=ws.11).aspx

唯需注意的是在 windows 下使用的路徑一樣, 所以 NFS 跟 samba 共用的資源名稱最好不要一樣, 以方便 windows 去認哪個是哪個. 使用 NFS 我主要的目地只是拿來取代原本的 SMB 而已, NFS 有比 SMB (網芳) 要快嗎? 沒有, 略慢於 SMB.. 但 Windows 端最主要的 performance issue 會在 NTFS + 有開啟檔案壓縮上, 只要有開壓縮就會變的奇慢, 這個問題一直到 Windows 10 (build 1709) 上都存在.
而 btrfs 跟 zfs 即使有開啟檔案壓縮, 也並不會像 NTFS 掉速剩 1/4 如此誇張.

Windows 的 disk IO 能力大家都知道, 別 complain 它了..

2017年4月16日 星期日

debug

ACPI/PNPA000
這是 alcohol 52% virtual device (alcohol iSCSI), 所以一定找不到它的 driver...

google 能找到答案的問題都不叫問題, google 找不到答案的問題一樣一堆, 叫我去 google 我他媽的一定翻臉給你看

2017年3月31日 星期五

[Win32] 阻止 winsock.h

compile 多加一個定義 _WINSOCKAPI_
可以有效阻止 include windows.h 時順路把 winsock.h (不是 winsock2.h) include 進來 -_-
王八蛋......

2016年12月8日 星期四

USB hub driver (Windows 7)

有些人覺的 USB hub 沒有 driver, 這個說法表面上算對, 但其實是錯誤的. 以 linux kernel 來說它包在 USB core driver 裡一起, 但在 windows 裡卻可以拆離成分開的檔案, 這個檔案叫 usbhub.sys 跟 usbd.sys (root hub).
%SystemRoot%\system32\drivers\usbd.sys
%SystemRoot%\system32\drivers\usbhid.sys
安裝時的參考檔 usb.inf
%SystemRoot%\inf\usb.inf (不可以是別的路徑)
一般來說是 usb.inf 很常不見, 原因不明, 可能跟我用過 USB oblivion 這個軟體有關係, 總之以上這三個檔案不見的第一時間是無法發現的, 等到

  • USB 裝置換孔位
  • 新裝 USB hub
  • 新裝 USB UART device (如 FTDI2232 這類的東西)
  • 接上 Android device PC端說找不到 driver

裝不起來時才會發現. USB UART (特別是多 port 的像 FTDI2232/4232) 跟 Android device 的症狀會比較明顯, 因為這些都是 USB device 認的到但是路徑不正確.
正確:
USB\VID_04E2&PID_1424&MI_00
有問題的:
USB\VID_04E2&PID_1424
後面 &MI 的部份會完全不見, 所以認不到, 在裝置認不到的第一時間都會以為 driver 有問題, 通常不會懷疑到是不是 Windows 本身的 USB host 是不是有問題.

如果是檔案不見, 從另一臺電腦 copy 出來是比較直覺的方式, 但通常出狀況時你只有你面前出包的這臺電腦而已, 所以找這裡面:
%SystemRoot%/winsxs (不一定是 c:\windows, 特別是你系統修不只一次過時)
的 usb.inf 這個檔, 先貼回 %SystemRoot%/inf/ 裡試試看, 如果成功就不需要費時去貼回 driver 檔案.
如果這樣不行, 首先你要找一個工具叫 unlocker , 用這個工具, 先將
usbd.sys (如果你是連 roothub 都抓不到就要動它)
usbhub.sys rename 成 _usbhub.sys 後 (刪除或直接蓋掉會說你沒有權限), 再把檔案貼回去.

步驟有點麻煩也有點囉唆, 但如果不想重灌系統的話, 就努力一下吧.

2016年8月4日 星期四

[轉] Windows 10 UAC

沒實驗過
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]

EnableLUA=DWORD:0

2016年6月1日 星期三

Microsoft Azure IoT certification

筆記一下做 IoT device 認證的流程. 在這裡先說我的結論: IoT device 認證硬體所需要的, 就是可以連 internet 的 ethernet 界面 (ethernet 可能是模擬的那也可以, 但一定要可以連 internet, 因為最後要連去 azure cloud server 做認證), 其中最主要的部份是加解密, 你 device 送出的加密資料 iot device explorer 可以解, device explorer 送出的加密資料你 device 可以解的開, 這樣才可以完成認證. 我認為對 Microsoft 來說它的重點在加解密.
至於 internet 連線能力最好是 raw package 不是靠 TCP/IP stack, 有沒有在 NAT 後面無所謂.

1. Azure 相關環境的建置:


整體流程參考文章..
https://azure.microsoft.com/zh-tw/documentation/articles/iot-hub-tested-configurations/
  • 首先你要有 microsoft 的帳號, hotmail.com 還是 outlook.com 這類的都可以.
  • 這個帳號要綁信用卡... (這點可以說是整個流程裡最棘手的部份)
至於帳號怎麼用信用卡付費, 還有一套跟 Microsoft 申請的流程要跑, 因為這個流程會隨 Azure portal 界面更改而小有變動, 目前不寫在這裡. 目前 (2016/06) 以它免費帳號附贈的 6300NTD 額度來說, 只是做這個認證, 完全花不到裡面的額度. 即使是如此, 我還是去申請了發票請款...

在申請完 azure 帳號後, 要照這個文件設定一個 azure 端的 iothub service
https://github.com/Azure/azure-iot-sdks/blob/master/doc/setup_iothub.md
如文件所述, 記得把 primary key copy 下來, 會用在 device explorer 上.

device explorer 有可以直接安裝的 .msi 檔 (它有 source-code, 但重編它意義不大) 可用:
https://github.com/Azure/azure-iot-sdks/releases
目前 device explorer 僅能在 windows 下執行. 安裝好後執行它, 參考設定文件:
https://github.com/Azure/azure-iot-sdks/blob/master/doc/manage_iot_hub.md#device-explorer
把剛剛從 azure portal 上 copy 下的 primary key 貼在 configuration 中, 再從 device explorer 裡新增你要認證的 IoT device 型號, 此時你會再得到另一組新 key, 選到 "Copy connection string" copy 下這個字串.

這個字串很重要, 就是你日後要改 c#, 改 c sample code 裡的那個關鍵字串. 以下就是 code work.

Device Explorer 雖然目前只能在 Windows 上跑, 但對於認證並不影響, linux iot device 測試一樣要連到這台裝了 Device Explorer 的 Windows 機器上, Windows 也是.

2. Ubuntu linux 14.04.4 LTS armhf (for C)

先講 ubuntu 是因為拉它的 sample code 用 git 比較方便, 有 linux / windows 雙修的人我建議先用 linux git 把整包 code 拉下來後再分給 linux 或 windows 機器去編.
  • git clone --recursive https://github.com/Azure/azure-iot-sdks.git
以下是在板子上做編譯的動作, 我沒有試過拿 linaro 的 gcc 4.9 tool-chain 去 cross-compile 這個 sample code, 因為它只要對應的 SSL library 那些東西版本不對, 就算編的過也過不了測試.
需要安裝這些東西:
  • sudo apt-get update
  • sudo apt-get install -y curl libcurl4-openssl-dev build-essential cmake git libssl-dev uuid-dev

再檢查版本是否合乎需求
  • cmake --version
  • gcc --version
因為這包 sample code 需要 cmake 2,8,12 以上, gcc 4.9 以上才能正常工作, 裝 cmake 時就會強迫把 gcc 4.8 相關套件也全裝上去. 裝 gcc 4.9 需要這些步驟:
  • sudo apt-get install -y software-properties-common
  • sudo add-apt-repository ppa:ubuntu-toolchain-r/test
  • sudo apt-get update
  • sudo apt-get -y install gcc-4.9 g++-4.9
  • sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9
  • (update 2016/09/12 see update note)

如同參考文件:
https://github.com/Azure/azure-iot-sdks/blob/master/doc/get_started/ubuntu-ankaa-c.md
一樣, 修改以下三個檔案
  • azure-iot-sdks/c/iothub_client/samples/iothub_client_sample_amqp/iothub_client_sample_amqp.c
  • azure-iot-sdks/c/iothub_client/samples/iothub_client_sample_http/iothub_client_sample_http.c
  • azure-iot-sdks/c/iothub_client/samples/iothub_client_sample_mqtt/iothub_client_sample_mqtt.c

  • static const char* connectionString = "[device connection string]"; 
的部份, [device connection string] 就是用前面講的 Device Explorer 中 Copy connection string 出的字串.
再來才是
  • sudo azure-iot-sdks/c/build_all/linux/build.sh

最後它會做些測試, 只要看以上三個 sample code self-test 沒過, 大部份就是 ssl library 之類的套件不合需求所致. 例如我在 debian 8.4 上做同樣的事, debian 8.4 有原生的 gcc 4.9.2, 但編出來的東西就是不能用.

測試時有裝 Device Explorer 的 Windows 機器要開機開著, 選好 device 後, 點選 monitor 開始監聽來自這個 iot device 發的訊息, 跟送出給這個 iot device 的訊息, 就可以完成測試.

ps1. 因為 ubuntu 14.04 base-core 只有 armhf, 所以我不知道 armel 能不能編的過.
ps2. 如果確定 target ARM 是 ARMv7 的機器, 可以試著使用 ubuntu 14.04 base-core 套件
http://cdimage.ubuntu.com/ubuntu-base/releases/14.04/release/
的 rootfs 掛起來後, 再去編譯. 如前面所述, 此時的 kernel 只要打通 UART (for debug) 跟 ethernet 就可以測試,
ps3. 三個 sample code 預設都不會 printf 出它送出的訊息, 只能靠從 Device Explorer 接收到的訊息判斷是否可以正常溝通. 需要進一步資料正確性驗證工作的請自己改 code. Device Explorer 收到訊息的樣子請參考下圖 Windows 10 的範例, 送出的嘛............... 因為訊息太亂我不想貼了 sorry (重點是根本無從驗證正不正確)

3.Windows 10 (for C#)

目前編譯環境 Windows 僅能支援 10. (ps. 按照原始的文件, 你必需要在要認證的裝置上跑那個 code builder, 但實際上個人實驗的結果是根本不需要, 只需要執行編譯出來的 binary 就可以)

首先的要裝一個 Windows 10, 專業版或個人版都可以, 試用就可以不需要正式版 (正不正式看你需要...). 裝好後第一件事情就是 setting, security and update, developer mode 打開.
安裝 visualstudio 2015 (community 版即可)
https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx
只知道需要幾樣元件有:
  • Programming Languages
    • Visual C++
      • Common Tools for Visual C++ 2015
  • Windows and Web Development
    • Microsoft SQL Server Data Tools

安裝網路版 SDK:

網路版安裝有一個好處, 它會幫你檢查 vs2015 有沒有欠缺元件.

下載前面講的檔案
https://github.com/Azure/azure-iot-sdks
(Windows 用戶可以點選旁邊的 "clone or download" 再 download zip 下載, 可是個人比較信任它的 git clone 能力...), 解開壓縮檔.

如同文件
https://github.com/Azure/azure-iot-sdks/blob/master/doc/get_started/windows10-aaeon-up-csharp.md
所述, 修改 program.cs 中 private const string DeviceConnectionString = "replace";, "replace" 就是用前面講的 Device Explorer 中 Copy connection string 出的字串. 然後 build solution.

要測試時, 進 console, 到 project 的 release folder 下執行該 .exe 檔...
azure-iot-sdks-master\csharp\device\samples\DeviceClientAmqpSample\bin\Release\
送出成功會像這樣:
Device Explorer 收到會像這樣:


ps1. 如果此時提示 Microsoft.Zaure.Devices.Client.DLL 找不到, 請先嘗試 build Microsoft.Zaure.Devices.Client 這單一個 project 試試看. 如果這一個失敗, 後面三個 sample code 就算編的起來也不能使用.

ps2. 用 vs2015 打開 iothub_csharp_client.sln, 打開後 vs2015 會提示是否要安裝欠缺的套件, 如果沒有出現, 可以嘗試看看 solution explore 那邊有沒有 "install missing feature(s)" 的選項, 安裝欠缺的套件. 個人建議 android SDK 跟 iOS SDK 可以不用裝, 因為此時的重點是 C#.

最後, 要把 build log 存起來, 寄給微軟時會要用到.

added note 2016/06/23 根據這篇文
http://www.inside.com.tw/2016/06/21/connecting-to-microsoft-azure-iot-hub-using-mqtt
所述, Device Explore 給的 key 有可能只有 24 小時的效力, azure portal 看到 iot hub 的那個 primary key 我則是確定可以用很多天 (其實是我沒換...) 都還有效. Device Explore 配發給 device 的 ssh key 是不是只有 24 小時內有效, 我不知道, 等有機會我再試...
update 20160912:
今天看到 ubuntu 14.04.5 LTS 更新裡有 gcc 4.9 (不是只有 base 而已) 可用, 看來可以直接裝.

2016年5月29日 星期日

[Windows] 傳統注音

是的, 我就是那種一點都不喜歡新注音, 用了十餘年傳統注音到今天那種人...
新增以下的 registry 進去後, 就可以有新增傳統注音的選項 (Windows 10 有效)

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CTF\TIP\{B115690A-EA02-48D5-A231-E3578D2FDF80}\LanguageProfile\0x00000404\{761309DE-317A-11D4-9B5D-0080C882687E}]
"Description"="Chinese (Traditional) - Phonetic"
"Display Description"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,\
  52,00,6f,00,6f,00,74,00,25,00,5c,00,53,00,59,00,53,00,54,00,45,00,4d,00,33,\
  00,32,00,5c,00,69,00,6e,00,70,00,75,00,74,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,35,00,30,00,36,00,36,00,00,00
"IconFile"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
  74,00,25,00,5c,00,53,00,59,00,53,00,54,00,45,00,4d,00,33,00,32,00,5c,00,69,\
  00,6d,00,65,00,5c,00,49,00,4d,00,45,00,54,00,43,00,5c,00,49,00,6d,00,54,00,\
  43,00,54,00,69,00,70,00,2e,00,44,00,4c,00,4c,00,00,00
"IconIndex"=dword:00000000
"Enable"=dword:00000000
"ProfileFlags"=dword:00000004

原始資料:
http://miktung.pixnet.net/blog/post/442036265-windows-10-%E6%96%B0%E5%A2%9E-%E5%82%B3%E7%B5%B1%E6%B3%A8%E9%9F%B3%E8%BC%B8%E5%85%A5%E6%B3%95(%E3%84%85%E5%8D%8A)-(win8%E9%81%A9%E7%94%A8)


2014年6月23日 星期一

Windows 7 "語言列"

簡單的說就是輸入法 icon 不見
參考
http://byo123456789.pixnet.net/blog/post/30664262-%E3%80%90%E6%95%99%E5%AD%B8%E3%80%91windoes-7-%E8%AA%9E%E8%A8%80%E5%88%97%E6%B6%88%E5%A4%B1%E4%B8%8D%E8%A6%8B%EF%BC%86%E6%89%93%E4%B8%8D%E5%87%BA%E6%B3%A8
的做法(也是出處. 我有註明出處了喔)

備份一下做法:

  • 工作列按右鍵 -> 工具列 -> 新增工具列
  • 在左上主要的那條 full path 那直接貼上 "c:\windows\system32\ctfmon.exe"
  • 直接按下 "選擇資料夾"
這樣就可以還原原本的 "語言列".

這應該只有亞洲語系國家需要特別修這個問題, 所以項目名稱全用繁中的稱呼..

20140723 update: 欠缺的是 cftmon.exe 沒有被執行, 所以解決方法分兩個 1. 執行 cftmon.exe 2.將 cftmon.exe 擺到開機就會自動執行的地方.

2012年6月23日 星期六

另一種 system();

就是用 CreateProcess 取代.
不過一般 CreateProcess 是開一個 task 以多工的方式跑另一個執行檔, 和 system() 不一樣, system() 會等待那個執行檔執行結束.

CreateProcess 也可以在該執行檔結束時發一個 event 通知, 像這樣:


    PROCESS_INFORMATION tPI =   { 0 };
    CreateProcess(TEXT("exe.exe"), 0, 0, 0, 0, 0, 0, 0, 0, &tPI);
    WaitForSingleObject(tPI.hProcess, INFINITE);

exe.exe 就是要執行的, 這樣就會無限時等待 exe.exe 執行完畢.

會寫這篇是因為 1.太久沒更新 2.CE 上沒有 system() 可用.

2012年4月8日 星期日

[Win32] Disk raw data read/write

會特別寫這篇就是因為, raw data 讀寫在 linux 下是很簡單的工作, 在 windows 下我卻找了很久才找到方法.

讀寫方法要用 CreateFile/ReadFile/WriteFile/DeviceIoControl 的方法下去操作, 而 CreateFile 要用
\\PhysicalDriveN
這個名字, N 從 0 開始, 而哪一個數字代表哪一個磁碟機, 可以在 windows 管理裡看的到:
理想上 PhysicalDrive 號碼是連續的, 但實際上通常不是, 所以最好還是依號去掃描看看哪一個是可以用的.
抓出 PhysicalDrive 後, 就可以用 ReadFile 跟 WriteFile 讀寫每一顆硬碟的 MBR 跟實體磁區資料, 但這樣做太危險了, 所以這裡只對可熱插拔 removable 的下手. 而要知道哪一個 physicaldrive 是 removable disk, 就要用 DeviceIoControl 搭 IOCTL_DISK_GET_DRIVE_GEOMETRY 去查, 如這一頁寫的 code:
DISK_GEOMETRY 裡的成員 MediaType 值如果是 11(dec), 就是可移除的.

至於怎麼抓出被 mount 到哪一個 label, 重改 MBR 時怎麼 unmount, 那就再研究....


[後記 2012/04/26]
直接去找 PhysicalDrive 有好有壞, 好處是即使不被 OS mount 起來也可以找的到 (例如檔案系統如果是 ExtFS 或 linux swap 時), 壞處是無法直接推得它被 OS mount 到哪一個 driver letter 去. 在後者, 比較好的做法, 是從已被 mount 上 OS 後的 driver letter 去回推它是哪一個 physical driver. 如果要知道目前有哪些 driver letter 是有效的, 可以用:
DWORD GetLogicalDrives(void);
的回傳值取得, 因為 windows 只能 A: ~ Z: 共 26 個代號, 所以分別是 bit 0 ~ bit 25, 該 bit 為 1, 就表示這個 driver letter 存在.
然後再用
DeviceIoControl 的
IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
命令取得有多少 physical driver 被 mount 到這個 driver letter 來 (因為在 NTFS 裡可以這樣做),
VOLUME_DISK_EXTENTS[0].DiskNumber 就是被找出的第一個 PhysicalDrive 數字代號.


嗯, 然後回到原來的文章, 這樣就可以從指定 driver letter 去做實體層磁區的讀寫動作.

[後記 2012/11/18]
如果是對 SD 卡讀寫, 而且 SD 卡要被用在非 windows 族 OS 上讀寫的話, 可能要注意一下 SD 卡對應 c/h/s 參數的問題, 因為在 windows 下會被統一設定成 255 heads, 63 sectors by track. 但 linux 或 BSD 底下看到的就不一定是這樣的數字...
解決方法嘛... 個人會建議把整張卡 geometric 重做, 當然, 重做之前要記得備份...
重設 geometric 的方法:
http://processors.wiki.ti.com/index.php/SD/MMC_format_for_OMAP3_boot