2010年3月27日 星期六

wii常用到的軟體工具整理

最近買了一部二手的wii,這段時間都在研究這台wii。單單一台wii如果只是拿來用光碟玩遊戲,實在是沒什麼好說的。但是就有很多人,會把一台wii的功用發揮到極致,於是有人把它拿來改機,什麼是改機呢?就是在原本的wii裡面,加上一個晶片,用來避開原來wii對正版光碟的檢查,這樣這台改過機的wii就可以用來玩所謂的台片。

改機還分軟改及硬改,如同字義,硬改,就是會動到wii的內部硬體,就是將改機晶片,焊到wii的內部,這樣當然要拆開wii的盒子,也同時會失去保固。而軟改則是利用一些軟體工具,將某些程式植入wii的記憶體內。

這篇文章主要的不是要談改機,畢竟這方面,我不是這方面的專家,而且這涉及智慧財產權的問題。寫這篇文章的目的,只是把我知道的wii所有相關軟體工具,整理並列出。因為關於wii網路上的資料相當多,但也相當混亂,老實說,一開始接觸wii,真的被一大堆名詞,軟體,工具弄得頭昏眼花。

wii可以玩的花樣還真不少,例如可以安裝某些工具,利用usb裝置來玩,將你要玩的遊戲,放到usb隨身碟或行動硬碟裡。這樣就可以不必用到wii的光碟機,也一樣可以玩,而且載入程式的速度更快,也不用頻繁的換片。就因為wii可以玩的東西很多,所以相關的工具軟體也特別多,所以我就列出我所知道的相關工具,說明它的用途,並提供下載點。

WiiBrickBlocker
用來「過水」,拿掉光碟片中的自動更新的部分,避免改機的wii,更新到不同區的更新檔,因而「變磚」。

同樣的工具,還有WiiISOUpdateRemover,WiiISOUpdateRemover能讀取的ISO檔比WBB(WiiBrickBlocker)還要多,有部分遊戲片會因為拿掉更新而無法正常進入遊戲,可以先把更新備份,如果不能玩,還可以再還原。如果執行WiiISOUpdateRemover後出現"應用程式正常初始XXXXXX失敗"的相關錯誤訊息,請到微軟網站下載.NET Framework 2.0,安裝完以後就可以正常使用。(以上截自http://kissjojo99.pixnet.net/blog/post/14840849,詳細請參考該教學)

Wii_Rom_checker
用來查看分辨wii遊戲版本的軟體,使用方法:把燒好或者iso檔先掛載到虛擬光碟機,然後開啟此工具程式選擇光碟機後,就可以知道遊戲版本是日版,美版或歐版,同樣可以避免改機的wii,更新到不同區的更新檔,因而「變磚」。

Wiiscrubber+WiiPatcher
有時有些遊戲會出現Error #002,這是因為遊戲需要某些 IOS (e.g. IOS 53, 55, ....),而你部 Wii 無提供,解決Error 002問題的方法如下: (任何一個方法均可)
1.用 hbc 的wad manager 安裝 FreeTheBug版 IOS37、38、53、55
2.以HBC搭配SoftChipR87,即可不經修正ISO檔而進入遊戲
3.以HBC搭配Backup Channel Gamma 002fix,即可不經修正ISO檔而進入遊戲
4.以HBC搭配GeckoOS 1.07b 002fix,即可不經修正ISO檔而進入遊戲

另外一個方法是使用WiiScrubber + WiiPatcher V1.2,這兩個工具軟體來把error #002的檢查拿掉。
先用 WIIScrubber_V13.exe 取出遊戲內的main.dol,再用Generic WiiPatcher.exe 把 Error #002 remove掉。使用方法可參考http://kissjojo99.pixnet.net/blog/post/23190822

WBFSManager3.0
如果你的wii是用硬碟或usb碟來讀取,那就必須用到WBFS 格式的硬碟,WBFS Manager可以對硬碟或usb碟,進行格式化。也可以把wii的遊戲iso檔裝進到這個硬碟或usb碟裡,也可以將之移除。簡而言之,這個工具就是wbfs硬碟的管理軟體。不過我在使用時,有些行動硬碟的外接盒,似乎有相容性的問題,而無法正當在wii中讀取。
用法請參考http://angler.twbbs.org/read.php?80

Read more...

2010年3月19日 星期五

mysql join的效率問題,子查詢與explain分析

以前學習sql server的時候,不知在那兒得知,先在一個很大的table中篩選資料,得到一個暫存的小檔,再用此檔去進行其他運算,如join,效率會比較好。在mysql中,我使用類似的作法,就是先用子查詢,得出一個暫存的table,再進行處理。


EXPLAIN
SELECT a . * , b . seq , b . weight AS tWeight , b . loss
FROM batch_detail a
LEFT OUTER JOIN scription_main b ON a . prodSeq = b . seq
WHERE a . accSeq = 1
AND a . bNo = 3

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE a ref accSeq,bNo bNo 4 const 1 Using where
1 SIMPLE b eq_ref PRIMARY PRIMARY 4 cook.a.prodSeq 1


第二個表使用子查詢,可以看到mysql對子查詢用where篩選,先產生一個暫存檔derived2(DERIVED是一個子查詢的型態)。再和table b join。
EXPLAIN
SELECT a . * , b . seq , b . weight AS tWeight , b . loss
FROM ( SELECT prodSeq , weight AS totWeight
FROM batch_detail
WHERE accSeq = 1
AND bNo = 3 ) a
LEFT OUTER JOIN scription_main b ON a . prodSeq = b . seq


id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
1 PRIMARY b const PRIMARY PRIMARY 4 const 1
2 DERIVED batch_detail ref accSeq,bNo bNo 4 1 Using where

但使用子查詢,在經過explain分析的效率,感覺並沒有比較好。第一個表中,可以看到mysql自動對where進行優化處理,得出一個row之後,再和另一個表去join。 第二個作法,經explain分析以後,反而多出一個row。



EXPLAIN能夠分析SELECT命令的處理過程。這不僅對於決定是否要為表加上索引很有用,而且對於瞭解MySQL處理複雜連接的過程也很有用。

Read more...

2010年3月7日 星期日

開機光碟製作及軟碟、usb開機碟製作方法及下載

前一陣子,使用還原軟體還原系統,還原之後,電腦又莫名其妙的無法正常開機了,因為這種情況不常發生,所以以前曾經製作的開機光碟,經常是不知丟到那裡去了,找了半天也找不著。於是每次遇到這種情況,都必須用別台電腦,找到開機光碟下載點,再重新製作開機光碟,再開到dos模式,再使用工具來檢查並修復電腦。以前都用nero來燒,但nero需要可開機的軟碟,才可正常燒錄,而我的軟碟機早故障了,現在都是找可開機的iso檔,直接燒開機光碟,可是一時之間總很難找到可下載的iso檔。於是乾脆把所有開機碟的製作方式整理列出來,並提供下載的地方,方便自己也方便別人。

雖然目前的windows系統,從windows 98以後,大概都不支援dos的模式了,可是有些時候,我們還是有在dos命令模式下的作業需求,例如系統毀損,無法正常開機到windows 系統,需要使用dos下的修復工具或還原軟體,如ghost。或者新電腦或新硬碟買來,還沒安裝windows之前,需要先格式化或分割硬碟,要用到如format、fdisk或spfdisk等工具。

因為種種原因,我們還是必須將電腦開到dos模式。這樣就有開機光碟製作,或是usb開機碟製作的需求。本文主要整理出各種儲存媒體開機碟製作的方法。

軟碟機的開機片製作

目前最新的方法,是用usb開機,再早期一點就是開機光碟製作,使用軟式磁碟的電腦,恐怕是很舊很早期的電腦才有。但是您可別認為軟碟機已經從歷史消失了,據我所知,現在很多銀行的薪資轉帳系統,還是靠3吋半的軟碟片,還有一些政府機構的系統,也靠軟碟片來存放憑證資料,因此這裡也附帶提一下製作軟碟機開機磁片的方法,方法相當簡單,如果您的電腦是windows 98的系統,或是更早的dos系統,只要在命令列模式下,將軟碟片放入a槽磁碟機,再執行format a:/s的指令即可。另外還有一個方法,就是下載磁碟影像檔,直接將此影像檔寫入到磁片即可。

軟碟影像檔下載點:
http://www.mediafire.com/file/zif4vhzcmrd/fdboot.zip

將以上載點下載的檔案解壓縮,內有兩個執行檔,分別是dos6.22.exe及Windows98_se.exe,一個是dos6.22的dos版本,一個是windows98 se的dos版本,雙擊任一個執行之。

出現以下視窗,按確定。
20100111000.jpg


將磁片放入軟碟機,再按「確定」。
20100111001.jpg


開機光碟製作

開機光碟製作的方法,以前我都是用nero再加上dos的開機磁片,但現在3.5的磁碟機已經壞掉了,所以直接在網路上找到已經製作好的ISO檔,直接將ISO檔燒到光碟片即可用來開機了。

開機光碟下載:

http://www.mediafire.com/file/euqcntcdmnj/bootdisk.zip

usb開機碟製作

因為usb隨身碟愈來愈普遍,而且不必使用燒錄機即可製作,所以比起製作開機光碟,更方便更容易,但是要注意的是太舊的電腦,可能不支援usb開機的功能。製作usb開機光碟,我常用的兩個工具分別是hp公司出品的hpusbfw及usboot這兩個工具。

hpusbfw使用方法
下載HPUSBFW

將下載下來的檔案解壓縮,執行HPUSBFW.EXE出現如下的畫面。
請在device項目,請選擇你要做成用usb開機的那個隨身碟。
並將"Creat a DOS startup disk"打勾。
然後在底下指定系統開機檔案,將路徑指向任一存在dos開機檔案的資料夾。( hpusbfw.zip解壓縮後,有一個同名的hpusbfw的資料夾,將路徑指定在此一資料夾即可,這個資料夾內含dos開機所需的檔案 。),接著按下 start就開始格式化了。

將格式化好的usb碟,放入電腦,並將電腦的bios開機順序,設定優先使用usb開機,這樣就可以從usb開機了。

1-12.jpg


usboot的使用方法

注意使用時,會有隨身碟容量變小的問題,請小心。如果發生此一情況請參考 http://save-coco.blogspot.tw/2014/01/usb.html


hpusbfw會將usb格式為硬碟的格式,開完機會出現c:,如果執行一般的維護工作,當然是沒有問題,但如果使用在特殊情況,就不如usboot提供更多的模擬方式,例如在沒有光碟機的電腦安裝windows xp時,當然無法用開機光碟來安裝,必須使用磁片安裝,這樣就必須將usb碟格式化成軟碟機的格式才行。usboot,它可以將usb碟格式化成硬碟、zip碟及軟碟的不同模式。

下載usboot繁體中文版:下載


使用步驟如下:

  1. 解壓縮後,執行Usboot170_CHT.exe,會出現警告訊息,請先確定usb隨身碟內是否有重要資料。
  2. 出現如下主畫面之後,請先選取您要格式化的usb碟,千萬不要選錯了,否則下場會很悽慘喔!
  3. 再選擇欲格式化的模式,HDD(硬碟)、ZIP磁碟或FDD(軟碟)模式。
  4. 按下開始,即開始格式化。
    1-13.jpg
  5. 操作過程中,會要求拔出usb碟再插入。
    2009-01-13 08-53-34.jpg
  6. 完成後一個usb開機碟就完成了。
  7. 2009-01-13 08-54-49.jpg

結論

以上是就我所知道的軟碟開機片製作,開機光碟製作,及usb開機碟製作的方法,也許還有我不知道的其他方法。因為有時久久一次,會有使用到DOS的需求,就要到處去找相關的工具及下載點,所以乾脆就寫成一篇文章,提供開機光碟下載點,方便自己下載使用,也方便網友製作開機光碟片等需求。

Read more...

2010年3月3日 星期三

javascript onload事件的用法(個人自習筆記)

onload事件觸發的function,可以寫在body的onload事件中。

例如:
<body onLoad="init();">
<div id="content">It is a book !</div>
</body>


也可以寫在javascript中:
window.onload = onloadHandler

如下:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><!-- InstanceBegin template="/Templates/main.dwt.php" codeOutsideHTMLIsLocked="false" --><head>
<!-- InstanceBeginEditable name="doctitle" -->
<title>建立原料名稱</title>

<script type="text/javascript" language="javascript">

var LaunchElement = null;
var SortColumn = -1;
var SortOrder = 1;

if (document.addEventListener)
{
document.addEventListener("DOMContentLoaded", onloadHandler, false);
}
else
{
window.onload = onloadHandler;
}

function onloadHandler()
{


tSeq=getQueryString("modseq");

if (!empty(tSeq)){
try
{
parent.document.getElementById("dtable").style.visibility="hidden";
parent.document.getElementById("extable").style.visibility="hidden";
parent.document.getElementById("metable").style.visibility="visible";
parent.document.getElementById("modCancel").style.visibility="visible";
}
catch (ex) {}
} else{
try
{
parent.document.getElementById("dtable").style.visibility="visible";
parent.document.getElementById("extable").style.visibility="visible";
parent.document.getElementById("metable").style.visibility="hidden";
parent.document.getElementById("modCancel").style.visibility="hidden";
}
catch (ex) {}
}

try
{
document.getElementById("TagTable").style.width = window.frameElement.parentNode.clientWidth + "px";
document.getElementById("FileTable").parentNode.style.width = window.frameElement.parentNode.clientWidth + "px";
}
catch (ex) {}

document.getElementById("se_cat").onchange = function (e) {onchangeHandler(e);};
}

function onchangeHandler(e)
{
var srcElement = window.event ? window.event.srcElement : e.target;
if (srcElement.tagName == "SELECT")
{
doSubmit();
}
}

function doSubmit()
{
var QueryString = "?";
QueryString += "se_cat=" + encodeURIComponent(document.getElementById("se_cat").value);
window.location.replace("new_material.php"+QueryString);
}
</script>

Read more...

Back to TOP