筆記

擲骰子程式

日前有些剛唸大一的小朋友會問 DR 關於寫程式方面的問題,而 DR 往往會建議對方可以參考 DR 在舊網站上所留的程式碼,但這也因此讓 DR 突然回想到,其實當中有一支程式用了效率極差的寫法,為免誤人子弟,DR 決定做點說明,就是那個 Windows 平台上的「猜數字遊戲」(DR's Number Guess),它的效率問題發生在 AI 擲骰的部份,程式內容簡述如下:

  1. 用數字 1 到 9 的骰子去隨機產生 AI 的答案
  2. 若猜錯則將該數字送入排除庫
  3. 再次用數字 1 到 9 的骰子隨機產生 AI 的答案
  4. 比對答案是否與排除庫相符,若相符則回到步驟 3 重新產生

 

看出問題了嗎?如果 9 個數字中已經有 8 個被送入排除庫,程式不會變快,反而變慢,因為它還是用相同的骰子面數。正確的寫法是將猜過的數字直接從骰子中刪除,並重製骰子的面數,比方說第一回是 9 面骰、第二回是 8 面骰,以此類推,而實際程式的概念如下:

分類: 

11/24/2011 筆記

如果各位的 Windows 系統發生下列狀況:

  • MSN Messenger(Windows Live Messenger)無法登入
  • AVG Free 防毒軟體怎麼樣都顯示病毒碼過期
  • WGA 正版驗證(Windows Genuine Advantage)莫名其妙顯示驗證未通過

 

那麼第一時間應該檢查的是「系統時間」是否正確……話說 DR 昨天處理某台使用 Windows XP 的電腦上,花了太多時間想搞清楚為什麼 WGA 驗證沒過、為什麼手動驗證都會當掉。最後在搞不定的情況下回頭去看防毒軟體到底怎麼了,才發現系統時間的年份根本是錯的(2012 年),調回來就一切正常。

 

話又說回來,這其實不是 DR 第一次遇到系統時間的問題,在好幾年前,DR 也曾經遇到某安全軟體怎麼樣都無法順利啟動,後來也發現是系統時間錯誤,而錯誤的肇因則是主機板電池沒電了。

分類: 

Windows XP 修復安裝失敗之解法

Windows 的「修復安裝」(repair install)向來是許多人解決系統詭異問題常用、並且好用的解法之一,因為它和「乾淨安裝」(clean install)不同,所有已安裝的軟體、使用者檔案都可以保留下來。但若修復安裝程序到一半失敗了怎麼辦?這很有可能把問題導向更棘手的狀態,因為修復安裝無法被取消,也無法重新回到原本的作業系統,而 DR 最近就碰到了這麼一次……

 

整個過程 DR 總共遇到三種錯誤,分別是:

  1. BSOD:DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS,出現不到一秒隨即重開機
  2. 在「正在安裝各項裝置」這個步驟到一半隨即重開機,setuperr.log 沒有可用訊息。
  3. BSOD:亂碼,無法判讀

 

在第一種錯誤發生後 DR 將硬體個別做了些檢測,但除了光碟機略有挑片問題外,其它硬體可說是完全正常(包含記憶體)。至於第二、第三種錯誤則是在嘗試關閉、拔除一些硬體後,再執行修復安裝時發生的。最後 DR 搜尋了一下,找到這個頁面:

分類: 

Windows 無法載入光碟機驅動程式之解法

這類問題好發在 Windows 系統升級或執行了「修復安裝」後,導致光碟機無法正確驅動,並且裝置管理員中的光碟機項目出現驚嘆號圖示。事實上驅動程式本身是沒有問題的,只要在登錄機碼中做修正即可,微軟官方的操作程序如下:

  1. 執行 regedit
  2. 至 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}
  3. 刪除 UpperFilters 和 LowerFilters 這兩組項目
  4. 重開機後,光碟機應可回復正常

 

參考來源:

http://support.microsoft.com/kb/314060

分類: 

OGV 影片格式轉為 MP4:使用 FFmpeg

話說今日 DR 在 Linux(Fedora 15)上使用 recordMyDesktop 錄製了一段軟體操作的影片,輸出的格式是 *.OGV,但這個格式卻沒有辦法成功上傳到 YouTube,於是打算再用 FFmpeg 轉檔,不過 FFmpeg 在沒有加參數的情況下,輸出的影片品質不是很理想,所以 DR 上網查了一下,用兩組指令轉成品質還不錯的 MP4 格式:

分類: 

WD SATA 硬碟之「叫不醒」事件

其實,本站主機從三月啟用到六月之間,所使用的 WD SATA 硬碟(Caviar Blue 系列)一直會不定時掛掉,所謂掛掉指的是系統(Fedora 14)的本機畫面會密集顯示硬碟的錯誤訊息,並且所有服務停擺,最終要重開機硬碟才能再度活過來。這個問題一直讓 DR 很難判斷出病因,難以判斷的原因主要有三點:

  1. 問題出現的間隔不定(長則十幾天、短則數分鐘內)
  2. log 缺乏可用資訊
  3. 另有一台桌機(二號機)使用完全相同的硬碟,一切正常,但兩台主機的軟硬體環境差異甚多

 

後來 DR 仔細聽硬碟掛掉時所傳出的聲音,發現裡頭會發出那種「欲轉又止」的聲音,再跟兩個網路上的討論串做比對:

分類: 

使用 FreeDOS 更新主機板 BIOS

今天打算更新三號機主機板 BIOS 的韌體(firmware),首先上網查查看是否有可直接在 Linux 系統內重刷 BIOS 的工具,於是找到了 flashrom,不過測試後發現它尚未支援 DR 所用的晶片組,殊為可惜。由於主機板官網所提供的更新工具是純 DOS 程式,於是 DR 使用 UNetbootinFreeDOS 裝進隨身碟裡,FreeDOS 是古典 DOS 作業系統的重製暨改良版本。然後將更新工具與 ROM 檔放進隨身碟裡,重開機進 FreeDOS 後,切換至 C: 目錄即可找到放進去的檔案。

 

執行更新工具時,被工具判定不是在 MS-DOS 下執行而終止,有點詫異,因為許多人都用 FreeDOS 跑 BIOS 更新。摸索了一下,想起古典 DOS 的檔名不能超過8個字元,於是把更新工具跟 ROM 都重新命名為較短的檔名,之後就可以正常執行了。

分類: 

[Firmware Bug]: powernow-k8: No PSB or ACPI _PSS objects

在三號機(Fedora 14,AMD Sempron 140)上跑 dmesg 看到的訊息,進 BIOS 設定開啟 Cool'n'Quiet 即可……DR 一直以為它是開著的。

分類: 

EVENT_TCPIP_TCP_CONNECT_LIMIT_REACHED

話說,過去兩個星期 DR 在跟朋友打 LoL 有時會突然斷線(顯示「網路纜線已拔除」,但隨即又恢復),那時都沒多想什麼,頂多覺得遭天譴吧。然而至期中考前夕,載大量講義之時竟然斷線,逐孰不可忍……

 

分類: 

Pygame 範例影片

過年期間 DR 用 Pygame(Python + SDL)幫朋友寫了一支簡單的賽馬程式,所錄製的影片放置在 YouTube 上。錄起來的影片雖有些延遲,但程式實際執行時是很順暢的。

 

DR 自己對程式碼的評價是:慘不忍睹,部份原因也許是因為當時 DR 還在當兵,只能用總計二到三天的休假日研究、作業。至於賽馬的連續圖形(sprite sheet),則是 DR 請表弟畫出來的。

分類: 

頁面

Subscribe to RSS - 筆記