2011年5月31日 星期二

32bit XP 要使用 3.2GB 以上記憶體

虛擬磁碟(PAE 可達 64GB RAM) ramdisk.exe

裡面有個 ram4g.reg 註冊檔,雙擊後就可以讓 RamDisk 認得 3.2GB 以上的記憶體空間; 還有記得就是要啟動 PAE 功能,在 Windows XP 系統下,是要編輯 C:\Boot.ini,在開機選項內再加上 /PAE 參數
http://www.kenming.idv.tw/a_c_ucsrcmpeusar_4gb_aryac_eu_a_pel_aarc

XP 安裝 SATA AHCI 模式

如果要在安裝XP時,可以認出 AHCI,很麻煩,需要主機板廠商提供的軟碟...

但是在一般已經安裝好的 XP ,反而比較容易...

  1. MSI K9N2G Neo 主機板XP驅動SATA,BIOS啟動AHCI模式,這是Nvida MPC78S 晶片組,效能增加30%。做法是將"標準IDE控制器" 強制更換SATA驅動,在sata_ide目錄,替換後不要重新開機
  2. 改掉REGISTRY 的鍵值....HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10de&dev_0266&CC_0101改為 mcp_x32_mb.zip/XP/IDE/WinXP/sata_ide/nvgts.inf檔,[NVIDIA]裡面的%NVSTOR_DESC%=NVStor_Inst,PCI\VEN_10DE&DEV_0AD4&CC_0106 也就是紅色字,替換即可。
  3. 重新開機,改 BIOS 的 IDE 為 SATA 或是 AHCI (不是 RADE)
  4. 如果出現藍天白雲死當,那就按 F8 恢復上次設定,BIOS 改回 IDE,再進去xp改一次 (可能需要多次嘗試,一共八組,失敗時會重新開機,按F8恢復上次正常開機即可。這也許和STAT位置有關,我第三次就成功)
最後就成功進入xp,會再要求開機一次。

TableAdapter Fill 大量資料出問題

當 TableAdapter.Fill() 一個14萬筆的資料時,如果有新的Request 進來,容易發生嚴重錯誤...
最糟的一次是 mdb 檔案被鎖住,後台關閉網站也沒轍。只能請 Host 客服解決了...
這讓我嚇一大跳,因為 Fill() 還蠻常用在程式裡面的小查詢上,還好都是一千筆以下的 Table。

可是,萬一同時很多人 Request 進來,那麼出問題的機率將大增。
還是,這是 Access 資料庫的老毛病,聽說超過十萬就容易不穩定...

後來改成 OleDB 的 ExecuteScalar() 才避免此問題,速度也快很多。
這表示,Fill() 所讀取的資料量太大而出問題? 可能超出主機商所設定的門檻,結果鎖住程式...

看來以後查詢資料庫要盡量避免使用 Fill()

2011年5月24日 星期二

PHP 改用 utf-8

PHP 改用 utf-8,真有一種無痛升級的感覺。
感覺上,只要 php 檔轉成 utf-8 即可,那些字串,文字檔案處理都是全自動...這實在太神奇啦!! (相對於我以前玩MFC)
http://www.xjcncn.com/school/programme/php/200709/1502.html

不過,還是有些需要指定參數...像資料庫之類的。
http://phorum.study-area.org/index.php?topic=36484.0

應該不會這麼簡單才對,還有許多未爆彈在我程式裡面吧?

2011年5月15日 星期日

手癢想要試試 CPU 升級

AMD CPU 系的主機板,腳位 AM2、AM2+、AM3 常常困擾我,因為通常不同腳位是插不上的,但是這三個是相同的,最大差異是 HT 頻寬,也就是對應到記憶體 DDR2 800、DDR2 1066、DDR3 1600,所以主機板有分,但是 CPU 卻能向前相容,例如 AM3 CPU 可以三種板子都插,只是有些BIOS 認不出新的 CPU,不過應該還能用。可參考:
http://5i01.com/topicdetail.php?f=296&t=1114968&p=1

MSI K9N2G Neo 官網在 2011年5月初突然把 CPU 支援表變更格式,內容比較舊,需要改看英文版的資訊比較新: http://www.amd.com/us/products/desktop/processors/phenom-ii/Pages/phenom-ii-model-number-comparison.aspx

目前 CPU 是4000+,2.1GHz,之前提升FSB 由200MH 升到240MHz,ㄧ天兩次音爆,傍晚就死當了,手癢想要試試不鎖頻的 CPU,把頻率昇到 3.2GHz...

2011/07/04
前兩週成功升級到三核 450,這顆比四核640便宜,時脈卻比較快一些。HT 也達到AM2+ 的極限。45nm 也比較低溫省電。
前天遇到雷擊停電,漸漸不能開機,連BIOS 也看不到,以為是 Power 掛了,因為這顆曾拆過修風扇,天呀! 後還證明是記憶體接觸不良 (有四排DDR2,加上主機有風扇震動聲音,真像是電源不穩定阿)。
這樣推測,之前的音爆也是這個問題嗎?

2011年5月14日 星期六

Access mdb 檔,權限問題

新複製一個 mdb 後,上傳到虛擬主機才發現新增和刪除都不行,錯誤訊息之一:
Operation must use an updateable query.

原來在 localhost 時,權限是很大的,但是上傳到虛擬主機就不一樣了。
錯誤訊息都看不出是權限問題,FTP 上面也得不到權限資訊,這時就麻煩,需要登入管理介面...

以下參考在 http://vbb.twftp.org/archive/index.php/t-9285.html

應該是底下這個帳號
Plesk IIS WP User (IWPD_620(cingjing))
WP: Worker Process ,所以他用的應該是Windows 2003, IIS 6.0
授權這個帳號寫入的權限試試。

Plesk IIS User (IUSR_cingjing) 應該就是我說的 IUSER_MACHINE, MACHINE指的是電腦名稱。

2011年5月9日 星期一

ASP.NET Page.DataBind 導致不想 Bind 的也都 Bind 了

當我用 "下拉式選單" ASP控件(已Bind 到資料庫) 選了某檔案要播放,而這個檔名需透過 Eval 來 Bind 到頁面,結果要 Page.DataBind 時,發現剛剛選的已經又回到第一個,與實際顯示的不一致。
也許 Eval 那種也可以單獨 Bind,有人知道嗎...

2011年5月2日 星期一

取代 Marquee 的跑馬燈程式

下列都是自動捲動,只有滑鼠遊標在上面時才會停...

捲動的是 ul li,每次捲一列 li,每一列都是無法換行的,適合簡短的文字。
http://vlab.info/pages/jquery.scrollbox.html

連續往上捲動 div
http://www.sosuo8.com/article/show.asp?id=318
試後發現,捲兩回合後會閃一下,跳回開頭來繼續捲...
改良 "閃一下" 的問題: 加了新變數 nLastPos...

        var nLastPos = 0;
        var stopscroll = false;
        var scrollElem = document.getElementById("andyscroll");
        var marqueesHeight = scrollElem.style.height;
        scrollElem.onmouseover = new Function('stopscroll = true');
        scrollElem.onmouseout = new Function('stopscroll = false');
        var preTop = 0;
        var currentTop = 0;
        var stoptime = 0;
        var leftElem = document.getElementById("scrollmessage");
        //scrollElem.appendChild(leftElem.cloneNode(true));
        init_srolltext();

        function init_srolltext() {
            scrollElem.scrollTop = 0;
            setInterval('scrollUp()', 25); //延遲時間 ms
        }
        function scrollUp() {
            if (stopscroll) return;
            currentTop += 2; //很妙,改成 1 ,可以變成閒歇性的捲
            if (currentTop == 19) {
                stoptime += 1;
                currentTop -= 1;
                if (stoptime == 180) {
                    currentTop = 0;
                    stoptime = 0;
                }
            } else {
                preTop = scrollElem.scrollTop;
                scrollElem.scrollTop += 1;
                if (preTop == scrollElem.scrollTop) {//捲不動了,表示盡頭
                    //if (CB_Dconsole) console.log(preTop);
                    //scrollElem.scrollTop = 0;
                    //scrollElem.scrollTop += 1;
                    if (nLastPos == 0) {//第一次需要複製一份在後面,好繼續捲下去
                        nLastPos = preTop;
                        scrollElem.appendChild(leftElem.cloneNode(true));
                    }
                    else {//第二次到盡頭時,跳到上一次的盡頭,重新捲
                        scrollElem.scrollTop = nLastPos;
                    }
                }
            }
        }