星期六, 12月 26, 2009

取出資料庫特定範圍的資料

最近做專案遇到一個不錯的問題,就是如何可以在database裡取出一段特定範圍的record,這樣的敘述看這樣看起來沒啥感覺,我們舉個例子好了,像無名的相簿這樣..

image

程式是由pk來抓取出前兩筆record跟後兩筆record,加上目前的一共抓出5筆,這樣一解釋大家就懂啦..現在我們現在拿NorthWind的Orders來當範例吧(如果有無名的database我就拿無名的給大家分享..哈)..直接看code吧..

with temp as(
select row_number() over (order by OrderDate) as rn, *
from Orders
)
,RealOrder as(
select rn
from temp
where OrderID = '10261'
)
select *
from temp
where rn between ((select * from RealOrder)-5) and ((select * from RealOrder)+5)

這樣就可以取出指定的Orders前5筆跟後5筆record啦..簡單吧..

ps:這是在mssql2005以上才支援的語法啦,自己看著辦吧..

星期四, 12月 03, 2009

動態聯繫 anonymous types 的 class

anonymous types 在 .net framework 3.5 才有的功能..我也常常用它來處理臨時資料的問題..一直覺得 anonymous types 是個好東西..今天寫程式的時候遇到了一個問題..就是要把 anonymous types 動態去塞入repeater 控制項內..忽然不知怎麼去處理..想了一下原來是腦袋打了結..休息一下..看看外面灰灰的天空..通啦..^^||..紀錄一下..

.aspx

<form id="form1" runat="server">
<div>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Literal ID="litName" runat="server" />,
<asp:Literal ID="litUrl" runat="server" /><br />
</ItemTemplate>
</asp:Repeater>
</div>
</form>

.cs

protected void Page_Load(object sender, EventArgs e)
{
var data = new[] {
new{name="Bibby",url="http://bibby.be"},
new{name="Yahoo",url="http://tw.yahoo.com"},
new{name="Google",url="http://google.com"}
};

Repeater1.ItemDataBound +=
new RepeaterItemEventHandler(Repeater1_ItemDataBound);
Repeater1.DataSource = data;
Repeater1.DataBind();
}

void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
object o = e.Item.DataItem;
Literal litName = e.Item.FindControl("litName") as Literal;
Literal litUrl = e.Item.FindControl("litUrl") as Literal;

litName.Text = DataBinder.Eval(o, "name").ToString();
litUrl.Text = DataBinder.Eval(o, "url").ToString();
}

不過話說..DataBinder.Eval 方法在 msdn 裡面有說它校能不是很好啦..省著點用吧..

參考:

星期五, 11月 20, 2009

達爾文之麥當勞理論..

達爾文理論..還出現麥當勞..哈哈..蠻有趣的一段對話..

陶子最後說了一句.."所有女人fire"..那男人呢..^___^||..

星期三, 11月 04, 2009

運算子 ?? 的應用例子

昨天看書看到一個還不錯的技巧..現在分享給大家..我們直接用例子來說故事吧..需求是..

-----------------------------------------------------------------------------------------------------------------------
資料庫有 name, nickname ,lastname 這三個欄位..我們需要取出值來運算..
如果 name 欄位有值我們就拿 name 當作 user 的名稱..
如果 name 是空值(null)而 nickname 欄位有值我們就拿 nickname 當作 user 的名稱..
如果 name 跟 nickname 都是空值只 lastname 有值我們用 lastname 來當作 user 的名稱..
如果都是空值..我們就用一個字串來代替..
-----------------------------------------------------------------------------------------------------------------------

把上述的需求轉成下面程式..

//取得資料
var dr = GetData().AsEnumerable().First();
//抓取個別資料塞到變數裡
string name = dr.Field<string>("name");
string nickname = dr.Field<string>("nickname");
string lastName = dr.Field<string>("lastName");
//顯示結果
string username;
if (!string.IsNullOrEmpty(name))
{
username = name;
}
else
{
if (!string.IsNullOrEmpty(nickname))
{
username = nickname;
}
else
{
if (!string.IsNullOrEmpty(lastName))
{
username = lastName;
}
else
{
username = "某某";
}
}
}
Console.WriteLine(username + " 先生");
Console.Read();

上面這段程式看起來露露長..看起來就不怎麼好看..我們可以用"??"這運算子的技巧來很方便的簡化這段程式..看code吧..

//取得資料
var dr = GetData().AsEnumerable().First();
//抓取個別資料塞到變數裡
string name = dr.Field<string>("name");
string nickname = dr.Field<string>("nickname");
string lastName = dr.Field<string>("lastName");
//顯示結果
string username= name ?? nickname ?? lastName ?? "某某";
Console.WriteLine(finalName + " 先生");
Console.Read();

很簡單吧..這樣看起來順眼多啦..有問題再討論吧..

ps:運算子只能用在 reference type 阿 value type 沒有 null 的啦..

星期三, 10月 28, 2009

用Linq to SQL亂數取一筆

今天遇到一個問題..話說..想要在一個 table 裡亂數抓一筆出來..我們用 t-sql 都會這樣下..

"SELECT TOP (1) *, NEWID() AS rowsNumber FROM dbo.訂貨主檔 ORDER BY rowsNumber"

這樣就可以取出來了..那Linqㄟ..可以很簡單的做到嗎..可以的不過要轉個彎..看code吧..

using (var db = new DataClassesDataContext())
{
int total = db.訂貨主檔s.Count();
int skipRecord = new Random().Next() % total;
var data = db.訂貨主檔s.Skip(skipRecord).Take(1);
GridView1.DataSource = data;
GridView1.DataBind();
}

一點都不難吧..雖然說還是沒有直接下tsql來的爽快..不過轉個彎來達到答案..也是蠻不錯的感覺..^__^||..

參考:
http://msdn.microsoft.com/zh-tw/library/bb386976.aspx

星期三, 10月 21, 2009

(題目)取亂數不重複

今天在網路上逛阿逛..看到了一個題目【取亂數不重複】..感覺蠻有趣的..以我這沒學過演算法的人來說..一定會寫出鳥鳥沒效率的程式..所以直接找了一下goolge..原來有"洗牌演算法"這東西喔..哈..邏輯大概是這樣..

1.先準備好一個陣列a(n)..裡面就是你要取出的數字..
2.用亂數取出陣列的某值a(n)..然後再把最小的a(0)去補a(n)的位置..
3.然後在用亂數去從a(1)~a(n)去取值a(n)..然後再把最小的a(1)去補a(n)的位置..
4.同樣動作繼續下去..就可取出你想要的東西啦..

c#實作..

public class RandomCreator
{
public static int[] GetRandomNumber(int min, int max, int count)
{
if (max - min < 0)
throw new Exception("請輸入正確的範圍");

if ((max - min + 1) < count)
throw new Exception("請輸入想取得的正確數字");

Random r = new Random();
int[] tempArr = Enumerable.Range(min, max - min + 1).ToArray();
int[] resultArr = new int[count];
for (int i = 0; i < count; i++)
{
resultArr[i] = GetRandom(i, r, ref tempArr);
}
return resultArr;
}

private static int GetRandom(int start, Random r, ref int[] array)
{
int v = r.Next(start, array.Length);
int number = array[v];
array[v] = array[start];
return number;
}
}

測試一下..感覺還不錯..有空大家來討論一下吧..

參考:
http://social.msdn.microsoft.com/forums/zh-TW/236/thread/a239d85a-24cc-48a3-9196-00d99bb01e3e/

星期四, 10月 15, 2009

搜尋資料夾內符合"字串"的檔案

最近在處理一些文字的檔案..常常都要在檔案中找到某些關鍵字..我處理的方法是用 dos 裡面的 FINDSTR 的個 command..說真的這真是好用的東西..又支援資源規則運算式..下面有些資源..大家看了就會用啦..

http://www.computerhope.com/findstr.htm
http://freetoad.pixnet.net/blog/post/23437477

不過今天重點不是要講這個..今天是想說..那如果自己寫要怎麼寫阿..剛剛就想了一下..用簡單的方法就可以做到啦..看code吧..

//搜尋的檔案位置
string position = txtPosition.Text;
//搜尋的字
string searchWord = txtSearchWord.Text;

//用linq去處理,這裡是用SelectMany去做..這樣效能會好一點..
var aaaa = Directory.GetFiles(position, "*")
.SelectMany(a => File.ReadAllLines(a), (a, b) => new { FileName = new FileInfo(a).Name, b })
.Where(a => a.b.Contains(searchWord))
.GroupBy(a => a.FileName, b => b.b);

//組出字串
string str = string.Empty;
string br = "\r\n";
foreach (var a in aaaa)
{
str += string.Format("*********{0}*********{1}", a.Key, br);
foreach (var b in a)
{
str += string.Format("{0}{1}{1}", b, br);
}
}
txtContent.Text = str;

結果就是這樣啦..

image

這是用很簡單的方法去做啦..如果要改善..可能就用遞迴去搜尋..再多加一點可調整的參數..這樣就可以騙吃騙吃啦..^_____^||..

參考:
http://msdn.microsoft.com/zh-tw/library/bb534336%28VS.95%29.aspx

星期五, 10月 09, 2009

.net 輸出 Excel 的報表

今天在輸出 excel 報表..發現怎麼輸出中文都變成亂碼..網路上找了一堆資料..零零碎碎的東湊西湊的..終於解決問題..這裡紀錄一下..以後有需要的人可以輕鬆解決這個問題..看 code 吧..

protected void Page_Load(object sender, EventArgs e)
{
string encoding = "utf-8";
Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=Report.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding(encoding);
Response.Charset = encoding;

using (DataClassesDataContext db = new DataClassesDataContext())
{
GridView1.DataSource = db.訂貨主檔s.Take(10);
GridView1.DataBind();
}

StreamWriter sw = new StreamWriter(
Response.OutputStream, System.Text.Encoding.GetEncoding(encoding));
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
GridView1.RenderControl(hw);
sw.Write(tw.ToString());
sw.Flush();
Response.End();
}

不過上面的code會產生一個錯誤..如下..

Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server.

這意思是說..我必需要把 gridview 這個 control 這放在 form 裡面..由於我要產生 Excel 報表..當然會有問題..所以要把 Page 檢查 control 是不是有在 form 那個 method 覆寫掉才行..

public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}

解決..收工..

參考:
http://msdn.microsoft.com/zh-tw/library/system.web.ui.page.verifyrenderinginserverform%28VS.80%29.aspx
http://www.w3schools.com/media/media_mimeref.asp
http://msdn.microsoft.com/en-us/library/ms525405.aspx

星期六, 10月 03, 2009

Email Sender Library

最近需要寫一個寄發 email 的程式, 記得網路上有一堆範例, 所以就 goolge 一下, 找到一個 liberary, 看了一了裡面的 source code, 這個 liberary 有支援 smtp ,gmail 和附件的寄發該有的基本功能都幫你寫好了, 直接拿來測試使用, 看 code 吧..

EmailSender.SmtpSender gs = new EmailSender.SmtpSender("totalbb.net.tw");
EmailSender.Message msg = new EmailSender.Message();
msg.Subject = "EmailSender測試";
msg.From = "Bibby <nstl388812@yahoo.com.tw>";
msg.To = "bibby <nstl388812@yahoo.com.tw>;bibbyGmail <bibbynet@gmail.com>";
msg.Bcc = "bibby <nstl388812@yahoo.com.tw>";
msg.Cc = "bibby <nstl388812@yahoo.com.tw>";
msg.Body = "EmailSender測試<br />EmailSender測試";
msg.Format = EmailSender.Format.Html;
EmailSender.MessageAttachment attachment = new EmailSender.MessageAttachment(
System.Net.Mime.MediaTypeNames.Application.Zip,
Server.MapPath("~/EmailSender/aa.rar"));
msg.Attachments.Add(attachment);
msg.Encoding = System.Text.Encoding.GetEncoding("Big5");
gs.Send(msg);

很簡單, 這樣該有個功能都有啦, 不過話說還是有點小缺憾啦 ,這liberary的"副本"和"密件副本"不能有多個 mail address, 我修改一下SmtpSender.cs 這一隻檔案, 就可以多個 mail address 啦..

if (!String.IsNullOrEmpty(message.Cc)) {
mailMessage.CC.Add(message.Cc);
}

if (!String.IsNullOrEmpty(message.Bcc)) {
mailMessage.Bcc.Add(message.Bcc);
}
//---------------------修改成下面---------------------------
if (!String.IsNullOrEmpty(message.Cc))
{
//修改成可以加入多個email address
string[] addressArr = message.Cc.Split(new char[] { ';', ',' });
foreach (string address in addressArr)
{
mailMessage.CC.Add(address);
}
}

if (!String.IsNullOrEmpty(message.Bcc))
{
//修改成可以加入多個email address
string[] addressArr = message.Bcc.Split(new char[] { ';', ',' });
foreach (string address in addressArr)
{
mailMessage.Bcc.Add(address);
}
}

最後感謝一下寫這 liberary 的作者啦..乾溫乾溫..

參考:

星期五, 9月 25, 2009

Dictionary 如何排序

最近在工作上遇到小問題,就是 Dictionary 麼排序,有些高手一看到就很直覺得想,阿就用 Linq to Object 就好啦,10秒鐘搞定..一_一||..話說是沒錯啦,如果有 Linq to Object 這把屠龍刀在手上,管他天皇老子,砍下去就好啦..問題就是,我的環境是 2.0 啦..還是要想一個辦法來解決一下,看code吧..

先貼一下2.0是怎麼苦命的解法..

Dictionary<string, string> s = new Dictionary<string, string>();
s.Add("1", "aItem");
s.Add("2", "cItem");
s.Add("3", "bItem");

List<KeyValuePair<string, string>> myList = new List<KeyValuePair<string, string>>(s);
myList.Sort(delegate(KeyValuePair<string, string> firstPair, KeyValuePair<string, string> nextPair)
{
return firstPair.Value.CompareTo(nextPair.Value);
});

Dictionary<string, string> dic = new Dictionary<string, string>();

foreach (KeyValuePair<string, string> myKey in myList)
{
dic.Add(myKey.Key, myKey.Value);
}

foreach (KeyValuePair<string, string> a in dic)
{
Console.WriteLine(a.Key + " " + a.Value);
}

Console.Read();

再貼一下3.5的Linq to Object是怎麼逍遙的隨筆..

Dictionary<string, string> s = new Dictionary<string, string>();
s.Add("1", "aItem");
s.Add("2", "cItem");
s.Add("3", "bItem");

var aaaa = s.OrderBy(a => a.Value);
foreach (var a in aaaa)
{
Console.WriteLine(a.Key + " " + a.Value);
}

Console.Read();

客官阿..你說說看阿您說說看阿..^____^||..

參考:
http://msdn.microsoft.com/zh-tw/library/xfhwa508%28VS.80%29.aspx

星期二, 9月 15, 2009

在 MS-SQL 裡用 Like 來取代 IN

今天看到一篇文章SQL Dynamic In..裡面內容是在講怎麼把 ms-sql 裡面的運算子 in 換成 like 取得同樣的結果..讓我忽然想到我之前的一篇文章解決Sql Parameter碰上SQL Where In問題,馬上測試一下..

在有索引下執行..

select *
from Orders as o
where ',10254,10257,10261,' like '%,' + ltrim(rtrim(str(o.OrderID))) + ',%'

select *
from Orders as o
where o.OrderID in (10254,10257,10261)

image

有index果然還是in效率有好..

無索引下執行..

select *
from Orders as o
where o.ShipCity in ('Reims','Bern','Graz');

select *
from Orders as o
where ',Reims,Bern,Graz,' like '%,' + ltrim(rtrim(o.ShipCity)) + ',%'

image

沒索引下..就差不多啦..

各位看官參考一下..服用前請確認有副作用..在慢慢服下阿..^______^..

參考:
http://msdn.microsoft.com/zh-tw/library/ms189826%28SQL.90%29.aspx

星期五, 9月 11, 2009

(題目)畫出數字山..

今天在網路看到一個有趣的面試問題..問題是..

問.試設計出如下顯示的排列方式。(不限任何程式,要用c要用php要用vb隨你)
1
22
333
44
5

花了一點時間..寫了下列的class去處理..

public class StringPrinter
{
public void PrintResult(int maxShowNumber)
{
int maxPosition;
if (maxShowNumber % 2 == 1)
{
//單數
maxPosition = (maxShowNumber + 1) / 2;
PrintUpDown(maxShowNumber, maxPosition, true);
}
else
{
//表示他是偶數
maxPosition = (maxShowNumber) / 2;
PrintUpDown(maxShowNumber, maxPosition, false);
}
}
/// <summary>
/// 從上到下畫出來
/// </summary>
/// <param name="maxShowNumber"></param>
/// <param name="maxPosition"></param>
private void PrintUpDown(int maxShowNumber, int maxPosition, bool isOdd)
{
bool hook = isOdd;
//畫出前半部
int showNumber = 0;
for (int i = 1; i <= maxPosition; i++)
{
showNumber++;
PrintLine(showNumber, i);
}
//畫出後半部
for (int i = showNumber; i > 0; i--)
{
if (hook)
{
hook = false;
continue;
}
showNumber++;
PrintLine(showNumber, i);
}
}
/// <summary>
/// 畫出每行該出現的數字
/// </summary>
/// <param name="number"></param>
/// <param name="position"></param>
private void PrintLine(int number, int position)
{
string strTemp = string.Empty;
for (int i = 1; i <= position; i++)
{
strTemp = string.Concat(strTemp, number);
}
Console.WriteLine(strTemp);
}
}

結果如下面..

輸入9..

image

輸入8..

image

感想..

一開始看到這題目感覺不難..在寫的過程中..其實要很清楚自己在做什麼..因為邊寫邊看電視..寫到一半迷路了..哈..
可以養成習慣先畫圖..大綱抓出來..在寫..就不容易迷路了..

星期四, 9月 03, 2009

開啟 Windows 7 休眠模式

大家都在用 Windows 7 了ㄇ..最近把 Windows 7 裝上了..發現還真的不錯用..哈..不過今天不是要來褒 Windows 7 的..今天是要來寫一篇..如何開啟 Windows 7 的休眠模式..在我的 notebook 裡面..裝好 Windows 7 的時候..就已經開啟休眠模式了..可是我的桌機就沒有..因為一直以來都是使用休眠模式的習慣..所以找不到還真變扭..話不多說..直接看圖教學ㄅ..

1.開始 → 打上 cmd (打 ctrl+shift+enter 進去 administrator 模式)

image

2.打上 powercfg /hibernate on

image

3.開始 → 控制台 → 系統及安全性 → 電源選項 → 更變計畫設定 → 更變進階電源設定

去把"允許混和睡眠"設定成"關閉"

image

這樣就可以看到"休眠"了

image

參考"
http://www.intowindows.com/how-to-enable-hibernate-option-in-windows-7/

星期六, 8月 22, 2009

T-SQL 找出上個禮拜的訂單

剛剛看到我朋友遇到的問題"T-SQL找出上個禮拜的訂單"..記得網路好像有看過類似其他的解法..這問題因該也是大家也常常遇到的問題..所以搜尋消化一下提供解法給大家參考一下..

SELECT    
DATEADD(wk, DATEDIFF(wk, 0, GETDATE()) - 1, 0) AS 上週一,
DATEADD(ms, - 3, DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0)) AS 上週日

這樣就可以很簡單的找出上個禮拜訂單了..

ps:如果需要了解怎麼出來的..看下面的參考連結ㄅ..

參考:
http://www.cnblogs.com/terry52/archive/2005/12/28/306271.html

http://msdn.microsoft.com/en-us/library/ms186819.aspx

http://msdn.microsoft.com/en-us/library/aa258269%28SQL.80%29.aspx

星期三, 8月 19, 2009

動態新增 Repeater

今天需要動態加入 Repeater 這個控制項..在這紀錄一下..讓有需要的人可以參考一下..

這裡是主要程式碼..

//動態加入reapeater
Repeater r = new Repeater();
r.ItemTemplate = new RepeaterTemplate();
r.DataSource = GetData();
r.DataBind();
form1.Controls.Add(r);

我們要寫一個 class, 這個 class 必需要實做 ITemplate 才行, 我們在裡面加入我們動態產生 Repeater 內容所需要的東西..

public class RepeaterTemplate : ITemplate
{

#region ITemplate Members

public void InstantiateIn(Control container)
{
//加入hyperlink
HyperLink hyp = new HyperLink();
container.Controls.Add(hyp);
hyp.ID = "lbtnID";
hyp.Text = "我是連結";
hyp.NavigateUrl = "http://bibby.be";

//加入textbox
TextBox txt = new TextBox();
container.Controls.Add(txt);
txt.ID = "txtID";
txt.Text = "我是TextBox";
}

#endregion
}

然後剩下那個 GetData() 就是你自己的資料來源..一般來說 collection 或是 datatable 都可以的..就這樣..很簡單吧..DevilDevilDevilDevilDevilDevil..

星期三, 8月 12, 2009

幫 Nullable<T> 寫個 TryParse

不知大家常不常用 TryParse 這個 method, 最近在用時發現 Nullable<T> 沒有 TryParse 的 method..心裡想來寫一個好了..不過話說太陽底下沒有新鮮事..所以要寫前先 google 一下..確保不會做人家做過得白功..survey後發現..哈..已經有 Steve Michelotti 前輩先寫好了..所以拿他出來介紹給大家..跟著用就行了..

public static class utility
{
private delegate bool TryParseDelegate<T>(string s, out T result);
private static bool TryParseNullable<T>(string s, out Nullable<T> result,
TryParseDelegate<T> tryParse) where T : struct
{
if (string.IsNullOrEmpty(s))
{
result = null;
return true;
}
else
{
T temp;
bool success = tryParse(s, out temp);
result = temp;
return success;
}
}

/// 接下來就照著呼叫上面寫你需要的mothod就行了..我先寫一個int?的
public static bool TryParseInt(string s, out Nullable<int> result)
{
return TryParseNullable<int>(s, out result, int.TryParse);
}
}

使用這樣就可以用了..

int? temp;
string str = "";
utility.TryParseInt(str, out temp);
Response.Write(temp.HasValue ? temp.Value : 10);

要感謝幫我們寫好又放出來的前輩..可以讓我們可以省很多時間..

星期日, 8月 09, 2009

窮人的大眼睛 Canon EF 50mm f/1.8 II

8月7號颱風假..我跟我女友在家裡看這外面的風雨..感覺好像不大..兩個人在家也悶了..想著我的DSLR還有一個50mm的定焦定鏡還沒有買..敗家這個東西..就是要靠"衝"這一個字..所以我跟我女朋友提議..去博愛路走走晃晃..看看我們那個50mm的定焦鏡跟我們有沒有緣..兩個人都雨衣短褲加拖鞋..就往台北出發了..一路上風好像越來越強雨也越來越大..騎上橋時還要歪一邊才可以騎..騎到了漢口街..哈..真的有幾家都開著ㄟ..隨便找一家人多的店..就帶一顆回家了..Tongue out..

型號

Canon EF 50mm f/1.8 II

開箱圖

DPP_0001

這一顆好多人都拿來當鏡頭蓋喔..

DPP_0002

很輕幾乎都塑膠的..像玩具..不過很輕很輕..

DPP_0003

f/1.8大眼睛..讚阿..

費用

2700..不含稅..Canon最便宜的一顆ㄅ..Hot..

拍拍看

DPP_0005

DPP_0006

DPP_0007

DPP_0008

試用的效果還真不錯..新手好像開始使用DSLR都喜歡把背景用的糊糊的..哈..我就是..Open-mouthed..

星期四, 8月 06, 2009

Canon 500D - 我的第一台DSLR

出來混總是要還的”..

哈哈..該敗的還是要敗..話說我從大二就開始拿消費機了..第一台相機是FinePix F601那台..跟著我5年..因為用太久性能等因素汰換了一台Panasonic FX01..這台相機跟著我一年多..不過在一次的朋友的婚禮被人家摔到了..所以只好又去買一台Panasonic FX03來代替..不過FX03目前是被我家女王擄走了..At wits end..所以我手上現在只有簡單容易的消費機Pentax A10..Clown..

回到主題..其實想買單眼相機很久了..只是一直沒有那個點..讓我起衝動去敗..原因是..沒辦法像消費機這樣隨便拍隨隨便ok..輕鬆輕鬆帶紀錄生活..但是最近身邊一堆人在那勸敗單眼..讓我又重新拾起當初的念頭..開始去了解開始去搜尋..最後還是擋不住一群惡魔的魔音..敗了..DisappointedDisappointedDisappointedDisappointedDisappointedDisappointedDisappointedDisappointedDisappointedDisappointed...

廢話不多說..開箱文開始..

敗家規格

Canon 500D(平行輸入) + 18-55mm IS kit鏡 + 8G apacer + 副廠電池(日本蕊心) + 二合一拭鏡筆 + 水晶保護貼 + 高速SD讀卡機

圖片

IMGP5528

開箱文一定要有箱子..Big Hug..

IMGP5531

相機正面..XD..閃光好像開太大了..只剩下logo清楚..Party

IMGP5526

開腸剖肚..高科技阿..

IMGP5527

相機屁股..仔細看一下Live View上面的液晶是用水晶貼ㄟ..店家說很耐刮..下次誰拿鑽石借我..我來試試看..

IMGP5520

18-55的kit側面..低調中的低調..

IMGP5521

18-55kit的大眼睛..不過好像沒有很大..

IMGP5530

吹氣球 + 二合一拭鏡筆

IMGP5532

高速SD卡可容到32G..

IMGP5529

正廠電池 + 副廠電池 + 8GApaccer記憶體

試用隨便拍

IMG_0003

IMG_0015

IMG_0019 IMG_0020 IMG_0022 IMG_0032

體重

不到一公斤

成交價

25650台幣..好像忘了跟他說去掉零頭喔..SurpriseSurpriseSurpriseSurpriseSurpriseSurprise..

以上就是開箱文啦..不過還有一些該有的都還沒有..例如包包..定焦鏡..等等等..哈..以後有錢再敗ㄅ..Time out...

不過話說..照這些圖片搞這篇文章..還花蠻多時間的ㄟ..對於那些網路上常常發表的開箱文的大大..感到欽佩啦..但是精彩的一定在後面..偷偷借了一台5D2得來跟我的500D合照..看看吧..

IMG_4427 IMG_4428 IMG_4429

真是大小漢差很多阿..Rolling on the floorRolling on the floorRolling on the floorRolling on the floorRolling on the floorRolling on the floor..((完))