發表文章

小工具開發 - 檔案實序排定器

圖片
最近遇到某些音樂播放器,由其是SONY的車用音響,都出現了這個問題,就是它根本不照我們放置檔案的順序或是其他排序方式(時間)去撥放。而這支程式就是用來重建他的檔案順序用的。 At some Sony music players or car audios,  it read mp3 files order is not follow filename sort or otherwise sort on the USB drive. This program will regenerate file order to the right! 假如我有一個USB隨身碟資料夾,裡面的檔案清單就如下面這張圖: 在 Windows 檔案總管下,看起來就是上面這樣子的,因為檔案總管會預設以檔案名稱來排序,正常得情況我們在 Windows 的播放軟體也會依照這個規則來執行。 然而,目前我在SONY音樂播放器上遇到這個播放順序的問題,它是照下面這種順序去撥放的: 比較前後兩張清單後注意到了嗎? 第二章的清單順序根本不知道它是依循啥麼的啊??事實上這就是我在 SONY音樂播放器上遇到的問題。 經過不斷的檢查後發現,原來第二張的檔案順序是在 FAT 表上的出現順序啊!!!!! 這啥鬼? 原來 SONY 音樂播放器是直接照 FAT 表讀出的檔案順序來播放音樂的,無怪乎我怎麼改檔案名稱,或是檔案時間都沒有用。 要是按照這種方式播放的話,如果要整理檔案,就得把 MP3 檔全部 移出 USB 隨身碟後,再依順序一個一個拷貝(搬移)回 USB 隨身碟。 真是天殺的,如果 USB 隨身碟有滿滿 16 GB音樂檔,那不就搬到天花地老了。這個會死人啊,老兄。SONY,我真服了你們了,東西又不便宜,程式卻寫得這麼爛,真不像 SONY 的產品啊。 索性,自己寫一支程式,專門來做檔案順序『重建』就可以保證在 FAT 上是依照自己訂的順序來跑了。 有興趣的就自己下載看看: 下載檔案/原始碼 這是用 dotNetFramwork 4.5 製作的,所以要執行的話,電腦至少要能支援 dotNetFramwork 4.5 ,或是到 這裡下載 。記得選擇您使用的語系再安裝。 程式載點 (Google drive) 原始碼載點 (...

Arduino 控制 - 使用 L293D 來驅動馬達

圖片
L293D 式一顆用雙路直流馬達的控制器,用這顆 IC 可以用來驅動一般的小型馬達/玩具馬達之類的,相當方便。 其內部結構大概就是一個 4路半H橋式驅動電路。 Pin 2 與 Pin 7 屬於一對,Pin 10 與 Pin 15 也屬於一對。 Pin 1 與 Pin 9 雖然做為 Enable 接腳,但是也可以輸入 PWM 訊號來控制馬達出力的力度。 Pin 8 是提供給馬達的電力,可以獨立供給,也可以和 Pin 16 的 Vcc 共用。 底下是利用 Arduino 做的簡易的控制電路: 藍色 LED 是用來觀察 PWM 的強度用的,可以不接。 我這邊另外用 9V 提供給 L293D 來驅動馬達,速度會比較快。 程式碼方塊如下: 程式源碼如下: int counter; int counter2; void setup() {   pinMode(3, OUTPUT);   pinMode(5, OUTPUT);   pinMode(6, OUTPUT);   pinMode(13, OUTPUT); } void loop() {   analogWrite(3, 255);   digitalWrite(5, HIGH);   digitalWrite(6, LOW);   for (counter = 0; counter < 5; ++counter) {     digitalWrite(13, HIGH);     delay(500); // Wait for 500 millisecond(s)     digitalWrite(13, LOW);     delay(500); // Wait for 500 millisecond(s)   }   analogWrite(3, 64);   digitalWrite(5, LOW);   digitalWrite(6, HIGH);   for (counter...

LED流水燈(方向燈)-電路實驗

圖片
最近看到不少新車的方向燈都配備有流水燈的效果,想說興致來潮,做一個這樣的電路試試看。 這樣的電路當然可以用 attiny85 來做,只是手頭沒有 attiny85 所以就利用傳統電路來製作,順便解析一下原理。 點亮順序原則就是 L1 → L2 → L3 → L4 ,這個週期時間必須在方向燈點亮時間內跑完,推估大約在1秒左右吧。 L1 首先點亮,沒啥技巧,R1、R2 分壓直接給 P3055LDG 閘極偏壓,導通後點亮 L1。 L2大約延遲 0.3 秒點亮,且點亮後維持住,所以這裡我用了 SCR 來控制,時間由 R4、C1 來決定,依照 RC 充電到 63% 大約一個 t 時間。 RC時間常數 = R x C = 10k x 33uf = 0.33 秒 當RC充電到63.2%時,觸發 SCR 導通,R5上出現 較高電壓(接近VCC),藉此導控制 L2 的MOSFET,此電壓並帶往下一個 RC,並觸發下一個 SCR,依此類推,下一個 LED於 0.3 秒後後亮起。 當方向燈停止供電後,SCR 狀態恢復(釋放),待下一次供電啟動。 ○至於模擬方向燈閃爍的電路,就用 555 來完成,如下圖: 555 的第三接腳直接供電給流水燈電路的 VCC ※※請注意,以上電路為模擬電路,使用的電壓為 5V,如果要用在汽車上,部分電阻值需要更動,LED 與其限流電阻部分,可以用 LED 排燈,或是 COB 燈 + 適當限流電阻, P3055LDG 有足夠驅動能力,要注意 P3055LDG背部必須靠電路板的銅箔散熱。

Sybase 資料庫發生 Error: 644, Severity: 21, State: 1

通常此錯誤都是 索引損毀造成,在非資料庫伺服器等級機器上容易出現,官方說法通常是硬體問題引起,但實際狀況不一定。 Error: 644, Severity: 21, State: 1 後通常還會接這樣訊息: Index row entry for data row id (11316867, 0) is missing from index page 11405926 of index id 5 of table ' myTable ' in database ' CURDB '. Xactid is (7099705,6). Drop and re-create the index . 雖然 官方說法 建議使用 dbcc checktable 或是 sp_fixindex 來處理,但是效果不理想,建議還是重建比較好。 但是怎麼知道錯誤是哪個索引檔呢? 先用 sysindexes 列出全部索引 select si.* from sysindexes si,sysobjects so where so.id = si.id and so.type = 'U' and so.name = 'myTable' go 然後錯誤訊息指名 index id 5 ,所以找到欄位 indid 為 5 的索引名稱 'CUST_IDX'。 接下來就是 DROP 索引 drop index myTable.CUST_INDEX go 再來重建,由於此索引不是主索引所以下面使用 nonclustered 建立 create nonclustered index CUST_IDX on dbo.myTable (column1,column2,column3....) on 'default' go ※如果該資料表資料量很大,依照機器速度可能會花上半天左右。 參考: How to find Index List in a Sybase database? Error 644 - Sybase Infocenter

關於WPF裡面動態圖片(Animate Image)和靜態圖片(Static Image)並存問題

圖片
要在 WPF 程式上顯示一般圖片(BMP、JPG、PNG、GIF..) 都不是甚麼太大問題,大概像下面一樣用 image 標籤即可。 <Grid>     <Grid.ColumnDefinitions>         <ColumnDefinition/>         <ColumnDefinition/>         <ColumnDefinition/>     </Grid.ColumnDefinitions>     <Grid.RowDefinitions>         <RowDefinition/>     </Grid.RowDefinitions>     <Image Grid.Column="1" Grid.Row="0" Source="D:\MyImages\Taiwanmap.jpg"/> </Grid> 但遇到動畫圖檔 GIFa 就是一件麻煩事了。 這個 image 標籤遇到 GIFa 就只能顯示第一張畫面,然後也不會有動畫。 <Image Grid.Column="1" Grid.Row="0" Source="D:\MyImages\ cutecoupletogether.gif "/> 我的目的是需要的是在同一種圖像元件標籤下,能夠同時顯示動畫或是靜態圖片的方法。 也就是說如果我要做一個圖片展示區或清單(動態生成),就很難去依照圖片類型一直去更換樣版標籤,所以我希望一種標籤就能夠解決問題。 能夠支援的標籤類型當然不是只有 Image,還有很多種方法: (底下標籤都會加上 Grid.Column 和 Grid.Row 屬性,因為我會放在上面 Grid 版面上的) 1、 MediaElement 標籤 ,他也可放置靜態圖片或動態圖片,但這個標籤早期只能支援U...

WPF 的 MVVM 測試

圖片
甚麼是WPF WPF(Windows Presentation Foundation) 簡單的說是一種把UI跟程式碼拆開來做的windows應用程式,早期UI的設計與動作都會和程式碼扯上關聯(因為程式碼寫在UI裡面),導致做美編的人員要動到畫面設計時,還得小心考慮到每個物件裡面的程式碼。而微軟在2006年的.NET Framework 3.0以後,重新去定義Windows APP設計的方向與概念而訂製了 WPF 架構。 我想有在設計android程式的人大概見怪不怪了,畢竟android程式的設計就是如此的,UI跟程式碼本來就是分開在設計的。當然習慣於舊式Coding的程式設計師還是會有點難以適應的,因為它不是『直覺』去設計程式的,而是透過『分析』→『模組化』→『開發設計』這種方式去進行開發的。 雖然WPF也可以用比較傳統方式去開發(把各種程式碼寫在UI的片段下)。 但由於『模組化』才是WPF的精隨 ,所以一開始就栽進 M-V-VM 的環境,對於將來開發會比較有幫助的。 網路上也有不少資料可以參考,我這邊就以我 自己的想法去解釋 ,如一開始的圖片。 Model : 主要負責資料結構 (Data Model:Data Structure)的建立或與資料庫連結的存取(DAL;Data Access Layer)的各類模組化都是由這一層負責處理。 View : 主要負責畫面的設計與成型 ,它是一個 .xaml 的 XML 描述檔案,這個描述檔案描述了畫面個元件如何擺放與屬性等,通常它會搭配一個 .cs 的程式碼檔案,雖然可以把程式碼寫在 .cs 裡面,但為了把運算邏輯分離,所以盡可能不要寫入任何與畫面無關的程式碼,甚至根輸入有關的互動運算邏輯也不應該寫在這裡。 ViewModel : 這個才是View的邏輯核心 ,通常一個View會搭配一個ViewModel,而這個ViewModel負責 View 的資料保存(輸入或是顯示用)與畫面元件的互動或是指令,例如按鈕的行為、輸入資料後的自動動作等等,都是在這個模組去完成。透過 View 與 ViewModel 進行結繫(Biding)的方式,也可以讓 View 接收 ViewModel 傳回來的事件要求。 基本型: 假如我需要一個可以輸入產品名稱、數量、成本 與計算小計的功能。 所...

由網頁呼叫本機端列印方式

圖片
※本篇會參考使用到  將 RDLC 報表不需預覽直接列印(Print RDLC Report without Preview) 部分程式實作方式,重覆部分不再說明。 現在,很多系統都是開發成為 WEB 型態(也稱雲端平台之類...)。 因此,只需要 Browser (瀏覽器) 即可進行系統操作。雖然有很大的便利程度,但是現實中還是會面臨到一些問題,像是 I/O控制等。這是因為受限於 瀏覽器的安全性不得直接讓程式碼介入系統控制,以免被駭客入侵等.... 但這也造就許多問題 ...... 撇開其它不談,就以我們常見的列印來說好了。 也許大家都知道,瀏覽器也是可以列印的啊,不管是直接列印,或是輸出成PDF列印等等。 但所謂不在其位不知其苦,部分行業或是以目前台灣推行的電子發票的列印格式(奇特格式),基本上瀏覽器列印就做不到了。 目前,有接觸過幾家廠商在做這類的系統,遇到電子發票列印實的做法怎麼處理呢? 當然回歸老路囉........ IE + ActiveX ....... 說真的,我有點語塞了。 怎麼有種回歸到 IE 綁架的時代的 Feel 呢? IE only 都會遇到 Windows 重大改版後導致 IE不支援繼續更新會始操作版面出現怪異現象 ,然後 ActiveX 有無法移植到其它瀏覽器(Chrome/FireFox/Safari/Opera...)的問題存在。 當然不是沒有辦法解決,只是台灣可能很多軟體公司面臨賺錢問題,不太願意花太多時間/金錢做研究是擺明事實(IT行業是個很燒錢的行業,由其它的RD部門更是如此),既有技術能快速上手開發賺錢,憑甚麼不做? 有天,在研究 MIT 開發的 Android App 開發(MIT app inventor) 介面得到了很棒的靈感(外國都已經行之有年了) 技術上,大致就像一開始的圖一般: 那個齒輪狀的東西就是一個本地(使用者電腦上的)一個程式或是服務,它提供了基本的 HTTP 通訊能力用來接收指令,並控制印表機。 通訊圖 所以,我有一台伺服器 www.myweb.com.tw 提供了作業頁面 localprint-test.html <html> <head> <meta http-equiv= ...