**~考慮舊版*.*相容性的***APP~設計 ------- **!!^
***
**iOS每年推陳出新,不斷地冒出各式各樣**
新鮮有趣的新類別,新method,讓我們可以--
--天馬行空地發揮想像力,設計更多令人耳目--
--**一新的App。但是,世界並沒有想像中美好,
不可能每個人的iPhone都升級到最新的iOS。
因此,我們還是要考慮到這些舊版iOS--
--使用者的相容性**~!!^
**以最新推出的iOS 6為例,MKMapItem是個**
**全新的類別,提供我們更方便的地圖應用
可能。但是舊版的iOS就不支援了,因此我們在--
--設計App時,最好能夠聰明地判斷,當使用者--
--機器為iOS 6時才使用MKMapItem, 當機器為--
--舊版的iOS時則採用另外的配套方案 **&^
**判斷的方法很簡單,只要以下2行程式碼 :
**
**
Class itemClass = [MKMapItem class];
if([itemClass respondsToSelector:@selector (openMapsWithItems:launchOptions:)])
{
}
說明:
不管使用者的機器是否為iOS 6,
都可以建立MKMapItem類別物件。
但只有iOS 6機器所建立的,才真正具有--
--執行MKMapItem所定義method的能力。
因此只有在iOS 6,以上的if敘述才會成立 **~!! ^^
****
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
seriously Disclaimer: This blog is for knowledge sharing in the required software and who, after the download is complete, please delete files on round the clock. Do not miss think there is anything about "sex" or anything .- resulting in what message the people of color, but today I had to make a statement = do not leave "what's up?..".. not reply,& also bring you turned away. filthy sharer spirit!! 29 / 8.Thankyou! [Thanks of the BLOGGER TEAM~!]2014
2013年6月23日 星期日
*~電腦突然就~~不能開機了 ?!!**^
*~
電腦突然就~~不能開機了 ?!!**^
**原本前一天電腦還可以正常開機,為什麼 ?!!
今天忽然就不能開機了?~~
一般使用者所謂的「不能開機」很籠統,只要沒有進入到Windows裡,他們都稱
「不能開機」,其實不能開機有很多種情況,
每種解決的方法都不一樣,一般所謂的
「不能開機」有以下幾種情形:
1. 「按下電源開關後,沒有反應,
也就是沒有電源」。
2. 「一打開電腦沒有螢幕畫面,
但主機的燈有亮」。
3. 「畫面停在黑黑、一堆英文字的
地方(BIOS POST階段)」。
4. 「進入到Windows後,也就是已經--
--看到Windows XP的商標後,又跳開重開機」 。
而這一篇文章要探討的是屬第三種:
「畫面停在黑黑、一堆英文字的地方
(BIOS POST階段)」及第四種 ---
---「進入到Windows後,也就是已經--
--看到Windows XP的商標後,又跳開重開機」
的這種不能開機 **~!
「畫面停在黑黑、一堆英文字的地方
(BIOS POST階段)」
會停在BIOS POST階段,多半是硬體--
--的狀態有改變到,而最常見的狀況都是出在
「硬碟」,狀況有下列兩種:
1. 開機裝置的順位(硬碟)沒有指定好。
一般來說,硬碟的開機順位設定不會無故跑掉,
一定有原因,大部份都是電池沒電的關係,
所以主機板沒有辦法記憶你所設定好的資料,
主機板電池的位置及長相你可以參考
「msn即時通無法登入,錯誤碼80048820」;
還有一種比較嚴重的情況就是 -----
----「硬碟已經壞掉」了,所以主機板在---
--開機時沒有抓到它,才造成無法開機的情況,
這種情況的解決方法當然是換硬碟就好了 **
2. 開機裝置有指定好,但是開機區--
--資料損壞。
就算你開機裝置的設定正確無誤,
結果還是不能開機,就很有可能是開機區--
--資料損毀,通常開機區損毀在開機時都會-
-有「NTLDR is missing」的訊息,開機區的-
-資料也不太可能會無緣無故的就損毀,
多半是因為不正常關機、木馬病毒程式或是--
--硬碟壞軌的關係,除了壞軌的情況你有--
--可能需要去更換硬碟之外,若是因為其它--
--因素而造成開機區資料損毀,你可以嘗試
稍後下一段「修復主控台」來做修復 **~!*
「進入到Windows後,也就是已經--
--看到Windows XP的商標後,又跳開重開機」
若是進入Windows後又跳掉重開機的--
--情況,最常見的是「記憶體」、
「CPU散熱的問題」、「硬碟壞軌」及
「開機區資料損壞」的問題,同樣的若是
「開機區資料損壞」的情況請參考以下的
「修復主控台」的修復教學 !!~
使用復原主控台來修復WindowsXP安裝
我曾經在「電腦中毒了要怎麼辦?處理流程教學總整理」的這篇文章上有提到
「復原主控台」這個東西,那時由於篇幅的
關係所以沒有辦法很詳細的介紹進入的方法,
接下來就讓我示範一下如何進入「復原主控台」。
要進入復原主控台之前,你需要準備--
--幾個東西,「WindowsXP原始光碟」、
「最高系統管理者Administrator的密碼」,
當你準備好打開主機電源,立即將
「WindowsXP原始光碟」放進光碟機中吧 !
當你將「WindowsXP原始光碟」
放進光碟機,且有設定「光碟機」開機的話,
你應該會看到以下這個訊息
「Press any key to boot from CD..」,
意思就是要你隨便按鍵盤上任一個按鍵,
電腦即會從光碟片上開機: **
**等約一至兩分鐘,會來到Windows XP 的
安裝程式畫面,這時有三個選項讓你選擇
1. 如果您要立即安裝Windows XP, 請按ENTER。
2. 如果您要使用復原主控台來修復
Windows XP安裝,請按R。
3. 如果您不想安裝 Windows XP,
請按F3。
這時當然是請你按下「R」來使用
復原主控台 **
**
**按下「R」之後會來到以下這個畫面,這時候請不要隨便亂按
鍵盤上的Enter鍵,請你先等約5秒鐘,如果你有注意到的話,
最下面有一行訊息是這麼寫著「如果您要選取非預設的鍵盤格式,
請現在按ENTER」,由於我們都是要選擇預設的鍵盤格式,
所以請你先什麼都不要按,直到出現下一段文字訊息 **
**緊接下來,會要你選擇要登入哪個Windows,如果你的電腦只*
*安裝了一個Windows,當然是只有「1:C:\WINDOWS」一個選擇,*
*所以就請你按「1」,並且按下ENTER,接下來馬上就會要你*
*輸入Administrator的密碼,請輸入你的Administrator的密碼,*
**這個Administrator是當初在安裝Windows時所設定的,
所以如果你的Windows不是你自己安裝的,很有可能這個密碼是空的**
*所以可以試一下直接按ENTER,看看是否可以通過密碼的驗證***
(註:當你這個Administrator的密碼是空的時候你要注意這個帳號**
(註:當你這個Administrator的密碼是空的時候你要注意這個帳號**
**最好要設定一個適當的密碼,才不容易被駭客入侵,
或是被木馬程式所利用)**
**進入復原主控台後,在每行可以輸入指令之前會有一個**
**命令提示字元,就好像在DOS一樣,你可以鍵入「HELP」來看一下*
*有哪些指令可以使用,之後可以按「HELP 指令」來了解到這個指令**
*要如何的使用,在這裡我們要使用到的指令有三個,「fix boot」、
「fixmbr」及「chkdsk」 ,以下是這三個的使用說明: **
**fixboot 在系統磁碟分割上寫入新的開機磁碟分割 : **
**fixmbr 修復開機磁碟分割上的主開機記錄: **
**chkdsk 檢查磁碟並顯示狀態報告 : **
**這時候你可以鍵入「fixboot」,來將新的開機寫入磁碟分割,
當你一執行指令後,即會詢問你要寫入的磁碟分割是C:嗎?
請按鍵入「y」,即代表yes **
**再來我們要來重新寫入一個新的主開機記錄(MBR),
請你執行「fixmbr」這個指令,也一樣,它會停在一個詢問訊息,
「您確定要寫入一個新的MBR嗎?」,請你按「y」**
**最後一個我們要用的指令是「chkdsk」,
這個指令要代一些參數一起使用,請輸入「chkdsk c: /r」**
*~注意:每一個參數都要用「空白」隔開,即會開始檢查磁碟區C,
並且並到有問題的區域時會立即做修復的動作**
**最後要離開「復原主控台」時,請你鍵入「exit」 **
*~!電腦即會立即的重新開機**
**執行這三個指令,在非真的壞軌的情況下,
可以挽救一些磁區損毀的問題,不保證一定可以,
但是值得一試的好方法 **~!*
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
**網頁介面開發**拖拉元素~調整排序**~!
拖拉元素~調整排序**~!
**網頁介面開發技巧是--拖拉元素調整排序**
**網頁上會顯示五個<span>方塊,
假設其排序有特定意義(例如: 出場順序,
決定先用皮卡丘之後再派妙蛙種子之類的),
使用者可用滑鼠或手指直接拖曳方塊--
--改變其排列順序,當某個方塊被拖到另一個方塊上,就對調兩個方塊的位置,
藉此自由調整所有方塊的排列順序**
****
****
**有興趣了解程式開發細節的*來看看程式裡用到的技巧: *
**
- 產生五個<span>方塊的部分,採用的--
- -- MVVM的做法。宣告了一個viewModel函數,
- 透過ko.observableArray()保存資料物件陣列,
- <div id="dvList" data-bind="foreach: items">
- 將資料物件陣列的每個元素對應成一個<span>
- ,用<span data-bind="text: name">可將屬性
- 當成<span>的內容。 viewModel函數中,
- var self = this;的做法可視為knockout.js中
- 的Best Practice **
- 為突顯knockout.js可即時反應資料變化的特性,
- 我刻意每隔0.5秒塞入一筆資料,讓我們可--
- --觀察到Player0到Player4逐一出現的過程。
- 而由於setTimeout塞入資料為非同步作業,
- 為了確保在全部完成後才執行下一步驟,
- 再次使用$.Deferred()的技巧處理同步化 ~!**
Drop功能。實測發現,用Kendo UI所開發的拖拉 -
-功能,不管在PC使用滑鼠操作或在行動裝置進行
手指觸控操作都很順暢,不需針對不同裝置特意
改寫,十分便捷。(但有些小眉角,例如: 有多個--
--放置目標時如何取得當時的放置目標,需要點--
--小技巧,細節可參見程式註解) ***
**至於方塊對調位置的動畫效果,則是--
--將<span>元素先轉成position: absolute,
再靠.animate({ left: 新座標 })搞定,對
-不過小菜一碟。
移動過程為了讓使用者有方塊是浮起來在空中-
-飛移的錯覺,
借用了CSS3的transform:
scale(1.1,1.1)讓<span>放大10%,此時早先介紹的HTML5/CSS3瀏覽器
支援速查工具派上用場,
查詢結果顯示要IE10, FF16才支援不加-ms-,
–moz-的寫法,Safari/Chrome則仍需要-webkit-,
所以乖乖加上-ms-, –moz-, –webkit-寫成三筆 **
**<span>對調順序的部分,用jQuery的.after()就
可以解決,但為了定址方便,我偷偷加放了
一個空白<span class='item-pos'>,
程式碼瞬間簡化許多**
**完整程式碼如下,已內含不少註解,
但坦白說,因涉及不少進階技巧,
程式碼並不好懂,希望註解夠清楚 ~!!
**
**
排版顯示純文字複製文字
<!DOCTYPE html>
<html>
<head>
<title>Drag to Swap Demo</title>
<script src="../Scripts/jquery-1.7.2.min.js"></script>
<script src="../Scripts/kendo/kendo.web.js"></script>
<script src="../Scripts/knockout-2.1.0.js"></script>
<link href="../Content/kendo/kendo.common.min.css"
rel="stylesheet" type="text/css" />
<link href="../Content/kendo/kendo.metro.min.css"
rel="stylesheet" type="text/css" />
<script>
//定義ViewModel類別
function viewModel() {
//將this另指派給self變數,之後以其代表View Model本體,
//避免與函數中的this所指的對象混淆
var self = this;
//定義一個集合存放資料
self.items = ko.observableArray();
//定義加入item的方法, 在items中加入具有name及score屬性的物件
self.addItem = function(name, score) {
self.items.push({ name: name, score: score });
};
}
$(function () {
//建立ViewModel
var vm = new viewModel();
//每隔0.5秒加一筆以觀察knockoutJs讓UI即時反應資料變化的效果
//使用jQuery.Deferred處理實現完成時機的同步
function job(i) {
var df = $.Deferred();
setTimeout(function () {
vm.addItem("Player" + i, i * 100);
df.resolve();
}, i * 500);
return df.promise();
}
//建立延遲0-4秒執行的加入item作業
var jobs = [];
for (var i = 0; i < 5; i++) {
jobs.push(job(i));
}
//等待所有job執行完畢,掛上Kendo UI拖拉功能
$.when.apply(null, jobs).then(function () {
var $items = $("span.item");
//加上拖曳特性,hint事件回傳拖曳過程顯示的元素
$items.kendoDraggable({
hint: function (e) {
return e.clone().addClass("drag-item");
}
})
.each(function () {
//由於kendoDropTarget事件中,
被放置對象this非亦無事件屬性可存取
//故使用Closure方式將元素存入$item供drop事件存取
var $item = $(this);
//加上放置目標特性才能接成為拖曳的目標
$item.kendoDropTarget({
//拖曳到目標元素上方及離開
時改變CSS,提供使用者可以放置的提示
dragenter: function (e)
{ $item.addClass("drop-item"); },
dragleave: function (e)
{ $item.removeClass("drop-item"); },
//在目標元素上方鬆開滑鼠或
手指離開觸控螢幕時觸發drop事件
drop: function (e) {
//透過以下方式取得拖曳元素及放置元素
var $drag = e.draggable.element;
var $drop = $item;
$drop.removeClass("drop-item");
//拖曳對象與放置目標相同時不處理
if ($drag.text() == $drop.text()) return;
//顯示位置交換動畫
//先將全部元素轉為絕對座標
$items.each(function () {
//先記下座標值,以.data()保存
var $elem = $(this);
$elem.data("pos", $elem.position());
})
.each(function () {
//維持座標位置,但換成絕對座標
var $elem = $(this);
var pos = $elem.data("pos");
$(this).css({
position: "absolute",
top: pos.top + "px",
left: pos.left + "px"
});
});
//$drag與$drop交換位置,使用animate
var dragLeft = $drag.data("pos").left + "px";
var dropLeft = $drop.data("pos").left + "px";
var $moving = $drag.add($drop);
$moving.addClass("move-item");
$drag.animate({ left: dropLeft }, 1000);
$drop.animate({ left:
dragLeft }, 1000, function () {
$moving.removeClass("move-item");
//交換位置
var $dragPos = $drag.prev(".item-pos");
$drop.prev(".item-pos").after($drag);
$dragPos.after($drop);
//改回相對座標
$items.css
({ position: "", left: "", top: "" });
});
}
});
});
});
//將ViewModel與UI結合
ko.applyBindings(vm);
});
</script>
<style>
html,body { font-size: 9pt; }
.item
{
font-family: Segoe UI; display: inline-block;
border: 1px solid gray;
margin-left: 5px; padding: 5px;
width: 80px; height: 25px;
background-color: #0099FF; color: white;
text-align: center;
}
.drag-item
{
opacity: 0.5;
background-color: #FF3300;
}
.move-item
{
z-index: 9;
-ms-transform: scale(1.1,1.1); /* IE 9 */
-webkit-transform: scale(1.1,1.1); /* Safari and Chrome */
-moz-transform: scale(1.1,1.1); /* Firefox */
}
#dvList { margin-top: 20px; }
.drop-item
{
background-color: Purple;
}
</style>
</head>
<body>
<div id="dvList" data-bind="foreach: items">
<span class='item-pos'></span>
<span class='item'>
<span class='item-name' data-bind="text: name"></span>
(<span class='item-score' data-bind="text: score"></span>)
</span>
</div>
</body>
</html>
**
****
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
**EXCEL*轉Data Table的NPOI簡單範例**~**
**簡單範例**~**
**開始改用NPOI來處理Excel檔案的讀寫輸出,
感覺上比Excel DOM、OLE DB for JET、
甚至CSV法來得穩定輕巧,而NPOI功能的齊全--
--程度更是讓我驚喜連連**
**以下為使用NPOI讀取表格EXCEL檔,
自動轉成Data Table的簡單範例:**
**複製文字
using System.Data;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
public class NPOIHelper
{
public static DataTable
ReadExcelAsTableNPOI(string fileName)
{
using (FileStream fs =
new FileStream(fileName, FileMode.Open))
{
HSSFWorkbook wb =
new HSSFWorkbook(fs);
Sheet sheet = wb.GetSheetAt(0);
DataTable table = new DataTable();
//由第一列取標題做為欄位名稱
Row headerRow = sheet.GetRow(0);
int cellCount =
headerRow.LastCellNum;
for (int i =
headerRow.FirstCellNum; i < cellCount; i++)
//以欄位文字為名新增欄位,
此處全視為字串型別以求簡化
table.Columns.Add(
new DataColumn
(headerRow.GetCell(i).StringCellValue));
//略過第零列(標題列),一直處理至最後一列
for (int i =
(sheet.FirstRowNum + 1);
i < sheet.LastRowNum; i++)
{
Row row = sheet.GetRow(i);
if (row == null) continue;
DataRow dataRow = table.NewRow();
//依先前取得的欄位數逐一設定欄位內容
for (int j =
row.FirstCellNum; j < cellCount; j++)
if (row.GetCell(j) != null)
//如要針對不同型別做個別處理,
可善用.CellType判斷型別
//再用.StringCellValue
.DateCellValue, .NumericCellValue...取值
//此處只簡單轉成字串
dataRow[j] =
row.GetCell(j).ToString();
table.Rows.Add(dataRow);
}
return table;
}
}
} **
**範例假設Excel第一列視為標題列,讀取各欄位值
當成DataTable的Column名稱,建立欄位後,
逐一讀取各列的資料新增為Row,其中欄位內容一律視為字串處置**
**排版顯示純文字複製文字<%@ Page Language="C#" %>
<script type="text/C#" runat="server">void Page_Load(object sender, EventArgs e){System.Data.DataTable t =NPOIHelper.ReadExcelAsTableNPOI(Server.MapPath("~/App_Data/Koobe.xls"));
GridView1.DataSource = t;GridView1.DataBind();}</script><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><body><form id="form1" runat="server"><asp:GridView ID="GridView1" runat="server"></asp:GridView></form></body></html> ****補充一點,因為Excel檔案中儲存的是資料的原值加格式、***或是計算公式內容,並非套用格式及運算後的最終結果****故可能與Excel中看到的有點誤差。如下例中的第一列備註就由2011/5/12變成5/12/11,在應用時需留意 ******
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
**WIN7系統~開機**右下角語言列突然消失~*!*只能輸入英文??! **~**
*右下角語言列突然消失~*!
*只能輸入英文 ?!**~**
**開機時要打字都只能打英文,無法切換輸入法**
*找谷哥處理一下*
網路上有二種解法:1.
到系統目錄「C:\Windows\System32」下--
--找到ctfmon.exe檔點兩下即可!!
*藤有測試,執行ctfmon.exe後,輸入法就會出來了,
但是重開機之後還是一樣不行,得再去點ctfmon.exe。
所以這方法打槍~**
**2.
開始 - 搜尋程式及檔案 輸入 regedit
找到 HKEY_CURRENT_USER\Software\Microsoft\
Windows\CurrentVersion\Run
新增 字串值
字串值名稱 ctfmon
內容為 C:\Windows\System32\ctfmon.exe
重開機,就能正常用輸入法**
**所以,這種情況,是不需要重灌的。
但若是客戶送到缺錢的店家,應該也是重灌一途!**
訂閱:
文章 (Atom)