2011/06/29

電子商務之十大勝算與十大敗筆

E-commerce has evolved since the late 1990s. Companies and individuals have been using e-commerce to do business; furthermore, it allows people to do shopping online. Many have succeeded, and many have failed as well. Let us now look at the reasons for the success and failure.

10 reasons for successful e-commerce EC十大勝算

1)Target the Un-Targeted 找到競爭者沒看到的客戶需求。

  • Know your customers thoroughly
  • Target needs that are unseen by your competitors.

2)Strong Business Planning 強而有力的業務計畫:掌握收入來源與策略細節。搞定想達到的目標。一步一步前進。

  • Know your source of revenue, break-even and the strategic details
  • Decide on the future goals that you want to achieve

3)Business Friendly Ecommerce Software 有簡單好用的軟體。

  • Choose software that is easy to manage and allows you to focus on core business activities

4)Create a Web Store with a Difference 品牌的建立非常重要。創造有吸引力的區塊名,建立不一樣的網路商店。

  • Branding is important for the success of your online business
  • Attractive domain name can play an important role in branding

5)Make your “Hot Sellers” most Visible 找到自己的銷售強項。把熱購的商品放在最顯眼處。

  • Create your specialty
  • Show your best product/service first

6)Do not let your Customers forget you 不要讓顧客忘記你:剛開始就要建立一個永久的客戶名單。對客戶百般愛護,他們就會長久消費。

  • Customer Relationship Management is important (especially small and building a permanent customer base)
  • Pamper your customers to generate permanent sales

7)Increase your Web Presence:增加能見度:在搜索引擎上做最大露出。並且儘量連結相官網頁。

  • Perform search engine optimization for your site.
  • Associate with web sites that provide complimentary products or services (help to increase web presence for search engines and customers)

8)Build Robust Backend Operations:後台要強。

  • Backend operations are the backbone of the online shop
  • Choice of e-commerce solution would determine the strength of the backend operations

9)Learn Faster and Better 隨時學習,改善機制,更正錯誤。 

  • Be prepared to spot your mistakes and assess the business with no biasness
  • Learn the loopholes and mistakes and rectify them

10)Surprise your Customers 讓你的客戶嚇一跳:給他們贈品或優惠;但所有的改變不要遠離顧客心目中的品牌形象。

  • Have incentives by providing offers, discounts etc
  • Make changes that do not sway away from the brand image that has been created in your customers' mind



Top 10 e-commerce mistakes EC十大敗筆

1)Trying to sell the wrong product online。銷售錯誤的產品:太便宜的、鄰近的超商就可買到的,和需要試穿試用的產品都不適合網路上銷售。

There are products that are not appropriate to be sold online. Products which are inexpensive, and could be easily bought from the local store are not worth selling on the Internet. Products that need trying would be difficult to sell.

2)Lack of marketing 缺乏行銷:網路與實體行銷皆不可少。一定要找出競爭優勢,提供客戶最優的價格。

Marketing of the site is needed for both online and offline. Identify your competitive advantage, and to show the customers the best price that can be offer.

3)A poorly designed website 設計很遜的網頁:塞車是一大問題。一個專業的網站定要圖文清晰,而且不能顏色雜亂,又是flash又是圖示,減緩了下載速度。

Overcrowding is a major issue for this. A professional website needs to feature the items clearly with photos and descriptions. Another issue is too much color, flash animation or graphics that slowed down the downloading process.

4)Falling behind time 過時:隨時update網頁是很重要的。不只是貨品,還有消費新聞。

The infrequent updating of website would be easily overtaken by competitors, and customers' visitation would fall. In order to stay at the top, updating is needed to feature any new products or news.

5)Poor checkout procedures 結帳過程爛:絕對要讓客戶簡單又輕鬆地付款。

When a customer has decided to purchase an item, it should be easily linked to the shopping cart and pay with ease.

6)Not testing your site 不做試車:試車過程非常重要,可以保障功能順暢。

Testing of links are important to make sure that they are functioning properly.

7)A hard-to-find or nonexistent privacy policy 快要找不到或沒有個資安全辦法:雖然大部分人都不去看個資訊息,但總有人很在乎他們資料的安全。

Most people would not read the privacy policy, but there would be some who want to know whether their privacy is protected.

8)Poor order fulfillment 送、退、換貨流程差:網路口碑如野火。不滿的話語如果在網路傳開,就會惡名遠播。一定要留給顧客好印象。

Information on the Internet spreads like wild fire. If words of unhappiness are being spread around to potential customers, the reputation would be damaged. Therefore, do leave a good impression on your customers.

9)Straying from your objective 失焦:絕對不要失焦。要緊守自己的強項。

Do not lose your primary focus. Stick to your area of expertise.

10)Poor customer service 不良客服:不良客服能讓客戶一去不回。好的客服不但能滿足客戶,還能引來潛在客戶喔!

Poor customer service would send your customers running away. Provide excellent service would not only satisfy your customer, but also bring in potential customers.


2011/05/18

ASP.Net MVC2 AuthorizeAttribute 的自訂用法

許多 Web 應用程式都需要使用者登入,再授權讓使用者存取受限制的內容。在某些應用程式中,對於登入使用者也可能會限制可檢視的內容或可編輯的欄位。

若要限制對 ASP.NET MVC 檢視的存取,您可以限制存取呈現檢視的動作方法。為了達成此目的,MVC 架構提供了 AuthorizeAttribute 類別。

基本上,MSDN只有這篇AuthorizeAttribute類別

http://msdn.microsoft.com/zh-tw/library/system.web.mvc.authorizeattribute.aspx

還有這篇:「ASP.NET MVC 應用程式中的動作篩選」有提到

http://msdn.microsoft.com/zh-tw/library/dd410209.aspx

MSDN範例如下,雖然使用方式很簡單,但是初學者應該會有很多疑惑;例如:

1. 掛上[Authorize]屬性,就可以限制使用者了嗎?

2. [Authorize(Users = "Betty, Johnny")]可以用來限制特定使用,那使用者身分如何取得?

3. [Authorize(Roles = "Admin, Super User")]可以用來限制角色存取,那如何給定使用者的角色身分?

4. 為何只要給字串(Users = "Betty, Johnny")(Roles = "Admin, Super User")就有效了?

如果上述問題,對你來說,都可以回答,那基本上,你已經是很嫻熟ASP.Net MVC AuthorizeAttribute的機制。

public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}

public ActionResult About()
{
return View();
}

[Authorize]
public ActionResult AuthenticatedUsers()
{
return View();
}

[Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
return View();
}

[Authorize(Users = "Betty, Johnny")]
public ActionResult SpecificUserOnly()
{
return View();
}
}

但是這種寫法,遇到要增加角色或使用者的時候,就要去每個Controller,甚至每個Action去修改這個Attribute,相當不便。而且萬一打錯字,就無效了,所以想能不能使用列舉或其它方式來避免這種錯誤?

於是,我們可以利用繼承AuthorizeAttribute的方式,自己做一個,例如:

首先,定義一個使用者角色的列舉:

public enum EnumPMRole
{
PMAdmin = 0,
PMSupervisor = 1,
PMUser = 2
}

public class PMOnlyAttribute : AuthorizeAttribute
{
public PMOnlyAttribute()
{
var authorizedRoles = new[] {EnumPMRole.PMAdmin.ToString(), EnumPMRole.PMSupervisor.ToString(), EnumPMRole.PMUser.ToString() };
Roles = string.Join(",", authorizedRoles);
}
}

這種做法是在建構式當中,將所要允許的角色,指定到AuthorizeAttribute.Roles的屬性中,利用AuthorizeAttribute本身對於角色的處理功能,就可以輕易達到限制特定角色存取特定功能之目的了。

如果想要限制另外的角色群,例如,限制只有最高管理員(PMAdmin)才能使用的功能,那要如何修改這支Attribute

一般來講,權限設計的架構,是呈金字塔型的,所以最低權限的功能,就掛上允許最多角色使用的AuthorizeAttribute;越高權限的功能,則掛上較少的角色。

同樣地,可以利用建構式,初始化的時候,指定允許使用的角色,我們可以再次繼承AuthorizeAttribute類別,另外設計一個過濾器來用,不過這次,我們可以直接繼承PMOnlyAttribute就可以了,原因後面再說明。

//限制最高管理員才能使用
public class AdminOnlyAttribute : PMOnlyAttribute
{
public AdminOnlyAttribute()
{
var authorizedRoles = new[] { EnumPMRole.PMAdmin.ToString() };
Roles = string.Join(",", authorizedRoles);
}
}
//限制最高管理員、主管級別才能使用
public class SupervisorOnlyAttribute : PMOnlyAttribute
{
public SupervisorOnlyAttribute()
{
var authorizedRoles = new[] { EnumPMRole.PMAdmin.ToString() };
Roles = string.Join(",", authorizedRoles);
}
}

用起來,就像下面這樣

public class AdminController : Controller
{
//使用者列表:僅最高管理員可用
[AdminOnly]
public ActionResult PMList()
{
return View();
}

//賣場統計資訊,主管級別以上可用
[SupervisorOnly]
public ActionResult MarketCount()
{
return View();
}
}

眼尖的你,可能會發現AdminOnlyAttributeSupervisorOnlyAttributePMOnlyAttribute沒啥不同,都是只修改了建構式而已,為什麼要讓AdminOnlyAttributeSupervisorOnlyAttribute去繼承PMOnlyAttribute呢?

原因是有關AuthorizeAttribute還沒講完,有兩個重要的方法,必須要瞭解。

那就是OnAuthorizationHandleUnauthorizedRequest

HandleUnauthorizedRequest

處理授權失敗的HTTP 要求。

OnAuthorization

在處理序要求授權時呼叫。

通常,我們繼承類別,自行撰寫之目的,就是要對系統行為多一些控制權,例如,使用者的角色沒有權限操作某些功能,或已經登出系統後,再試圖操作時,系統應該出現提示,將使用者導向說明頁面,或是登入頁面。

而這種設計,在AdminOnlyAttributeSupervisorOnlyAttribute也同樣會用到,既然PMOnlyAttribute是所有角色都會用到的,那就把這段程式碼寫在這,讓之後衍生的類別,都可以享用到。

public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);

var thisUser = filterContext.RequestContext.HttpContext.User;
//確認已通過驗證
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
//用父類別的驗證,判斷是否在角色內
if (!AuthorizeCore(filterContext.HttpContext))
{
filterContext.Result = new RedirectToRouteResult("MyArea_default",
new RouteValueDictionary
{
{ "controller", "Home" },
{ "action", "NotAllow" },
{ "id", UrlParameter.Optional }
});
}
}
else
{
// 未登入,轉至登入頁面
string rtURL = "";
rtURL = filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
{
{ "controller", "Home" },
{ "action", "Login" },
{ "ReturnUrl", rtURL }
});
}
}

///
/// 處理未授權的要求,導到登入頁面
///

///
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult("MyArea_default",
new RouteValueDictionary
{
{ "controller", "Home" },
{ "action", "Login" },
{ "id", UrlParameter.Optional }
});
return;
}


最後,是最基本,也是最重要的,就是在Global.asax中,必須設定好授權委派的程式區段,讓授權的使用者,在過濾器作用之前,能得到角色,繼而讓過濾器檢查。

範例如下:

public MvcApplication()
{
AuthorizeRequest += new EventHandler(MvcApplication_AuthorizeRequest);
}

void MvcApplication_AuthorizeRequest(object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
///確認已通過驗證
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
//建立FormsAuthenticationTicket物件
FormsAuthenticationTicket ticket = id.Ticket;
//取得角色資料
string userdata = ticket.UserData;
var roles = userdata.Split(',');
//授予該使用者新的角色
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
}
}
}
}

2010/07/03

2010-2014全球娛樂和媒體市場發展趨勢

廿一世紀第一個十年過去了,拜科技進步之賜,數位媒體的時代來臨了,傳統媒體面臨重大轉型,「特許行業」的光環逐漸消失,每個人都能透過網路發表消息,並靠社群的力量影響更多的群眾。

媒體也越來越多,但我們能知道的事情似乎變少了?本文試圖透過觀察過去,來預測娛樂與媒體未來的走向。


一、媒體的界線越來越模糊

除了既有的傳統媒體之外,更多其他行業的公司開始滲透進入媒體行業。如Google、微軟、蘋果這樣的技術公司,都在積極與綜合性媒體集團建立合作關係,都有成為綜合性媒體集團的想法。

反之,傳統媒體,報紙、雜誌、電視、廣播電台、電影,也都加速與網路媒體平台的整合,並且出現跨媒體形式,如紐約時報也播放影音新聞。http://video.nytimes.com/

圖為2010/4/2紐約時報技術專欄作家David PogueApple iPad上市當天回答觀眾問題的影片

自從2000年,AOL美國線上與Time Warner時代華納合併後,在21世紀第一個十年,此項趨勢越發明顯。

2007年,英國的路透(Reuters)以172億美元賣給加拿大的湯姆森公司(Thomson Corp.

2009年,旺旺集團購併中視、中天、中國時報。

2009年,台灣大哥大買下市佔率第一的凱擘有線系統。

2009123日,美國最大有線電視提供商Comcast宣佈,已經與奇異公司達成協議,預計將以137.5億美元的代價,買下奇異公司手中美國電視電影 NBC環球的51%股份,加入寬頻網路時代的媒體娛樂事業。

我們可以看到,原本只是內容和通訊的分銷商與通路企業,也都在跨足媒體事業,甚至其在經營上還會更為有利。

二、娛樂是專屬個人的小宇宙

如今手機新聞、手機小說以及各種基於手機的商業、生活及文化服務早已成為人們日常生活的一部分;更進一步說,無線通訊技術應用的普及,已經讓各種娛樂的數位內容更加容易被遞送與取得。個人行動裝置的強大,可以讓人隨時瀏覽網頁、E-Mail、與朋友聊天、看照片影片和讀電子書。

如今年受到矚目即將出貨的Apple iPad,以及繼行動作業系統Android的成功,Google也將以Chrome OS鞏固其雲端運算霸主的地位。

隨著消費電子的跨界潮流與技術成長,家庭娛樂中心已經逐漸普及,在未來,更將朝個人娛樂中心邁進。網路電視與行動電視,隨著全球頻寬基礎建設的成熟與政策的通過,也將成為主流,手機電視台可能是未來最大的電視台,全球有多少人口,就有多少收視戶。電視手機銷售量將是一般電視的好幾倍,還能衍生廣告、內容、互動、娛樂、購物等龐大商機。

根據一份《2009年全球3G業務與運營市場發展研究報告》在中國的推動下,2009年即增加了7946.7萬用戶,在2009年,粗估全球3G用戶規模增加了1.9億達到9.88億,預計到2011年全球3G用戶將達到17.25億,全球3G用戶將佔所有移動電話用戶40%以上,且在未來3-5年內世界上一半以上的3G用戶將集中在亞太地區。

2010年美國無線通訊展(CTIAWireless 2010)中,據易利信透露,全球所有地區即時網路,在去年12月,全球行動資料流量已首度超越語音流量。

全球資料流量在過去的 2年內,以每年280%的速度成長,預計未來5年,每年還將以兩倍增加。

隨著數位電視的推行,未來個人喜好的節目清單、電影類型等習性,將可能儲存在裝置或雲端中,加上人體感測與生物辨識技術的成熟,情境智能的實現,在未來五年內也變得可能,讓你在想要取得娛樂時,能更方便有效地得到需要的目標。

我們現在可以看到的是,微軟Xbox Live線上提供的遊戲和影片,以及即將看到Project Natal所帶來的次世代操縱體驗。

2010/3/14日消息,據國外媒體報導,微軟Xbox及娛樂部門主管史蒂芬·麥基爾(Stephen McGill)日前表示,Xbox 360不會採用藍光DVD光碟機

麥基爾說:“目前還沒有計劃為Xbox 360配置藍光DVD光碟機。其實,家庭娛樂的未來在於高解析度串流媒體,而Xbox 360早於去年就開始支持1080p串流媒體高解析度電影。”

電子遊戲預計到2011年產值將增長為490億美元,年複合增長率9.1%。其中,亞太地區市場份額最大。

三、分眾化趨勢明顯,細分市場並聚焦

未來的數位內容,不論影像、音樂、文字,都將益發傾向免費提供。

壞消息是對一般閱聽大眾來說,這些內容就會像垃圾食物一樣,除了打發時間,幾乎毫無價值可言;好消息是,對生產內容的產業來說,若能製作出高品質的內容,消費者亦更有意願付出更多的成本取得。另一方面,廣告主也越來越不在意觀眾或聽眾的人數多寡,而是這些閱聽的群眾的樣貌究竟為何?越能夠幫廣告主找到精準的客戶,獲利就會越大。

2009第一季,第一大網路搜尋公司Google獲利14億美元。同一時期,第一大報業公司甘奈特(Gannett)公布總營收14億美元,獲利僅5800萬美元。

娛樂和媒體全球化帶來的是,更多異文化的新鮮感,但同時也帶來在地化內容的商機。一般閱聽人注意的是與之切身相關的內容,無怪乎,三立台灣台的戲劇節目收視率總是居高不下;而Discovery頻道也和新聞局合作製作一系列以台灣為主軸的節目,在台灣觀眾的問卷調查中也顯示,Discovery雖然收視率遠落後於三立台灣台這樣的本地電視台,卻也連年成為第四名台灣觀眾最喜愛的頻道。

圖:DISCOVERY亞洲電視網在台年度廣告營收(2001-2005)

資料來源:政治大學傳播學院碩士論文(鄭淑文, 2007)

四、免費。先發行,再編輯

在網路上發行內容的成本,比起發行實體紙本的成本要低得太多了,而且製作一次,可在許多不同地方發行多次,加上長尾理論,這些內容可能在一段時間之後,都還會有人使用。

根據PewResearchCenter的一項調查,40%的美國人現在將網際網路列為平日的全國和全球新聞來源,首次超越報紙(35%)。三十歲以下美國人,有59%將網路列為主要新聞來源。

現在可以感受到,不是我們去找新聞,而是無處不在的新聞找上我們,在未來,此一現象將更為明顯,但卻不一定是由報社提供的消息,更多的是來自朋友以及我們自願追蹤的部落格、微網誌等。

這跟上述談到的趨勢亦有關,除了網路媒體之外,現在是「專業的業餘人士」在提供內容,發行幾乎已經沒有門檻,但問題是,讀者的時間仍是固定的,這樣會排擠掉報紙的空間,而太多的內容,也讓讀者無所適從。

但是通常人們還是需要別人的意見與看法,因此會有人專門為這些內容做過濾與摘要,也就是所謂的「網摘師」將會漸漸取代編輯的地位。

五、重點是高接觸而非高科技

科技越進步,人類卻越覺得時間不夠用。在忙碌的生活中,身邊被爆炸的資訊所圍繞,真正會吸引人們注意的事物,究竟是甚麼?最新的手機?還是最快最炫的3C設備?

人們所想要得到的,其實是可以幫助他們放鬆心情,以及幫助他們找到其他人(包括親朋好友),並與對方加強互動的產品。

廿一世紀的第二個十年開始,娛樂和媒體將要真正面對一場革命,這不只是為了生存而戰,也是人們心中所潛藏的渴望。

2010/02/23

終於搞懂了,預編譯頭文件(precompiled header)

預編譯頭文件

今天在改一個很大的程序,慢慢看,慢慢改。突然發現一個.c文件,裡面什麼也沒有,

就幾個頭文件,我一看,我靠,這不是把簡單的問題搞複雜了嗎,隨手刪掉那個c文件。

結果不能編譯了,我靠:

fatal error C1083: Cannot open precompiled header file: \'Debug/v13_3.pch\':

No such file or directory

怎麼rebuild all都不行。

上網查了一下,才搞懂了:

----------------總結------

如果工程很大,頭文件很多,而有幾個頭文件又是經常要用的,那麼

1。把這些頭文件全部寫到一個頭文件裡面去,比如寫到preh.h

2。寫一個preh.c,裡面只一句話:#include "preh.h"

3。對於preh.c,在project setting裡面設置creat precompiled headers,對於其他

.c文件,設置use precompiled header file

//

哈哈

我試了一下,效果很明顯,不用precompiled header,編譯一次我可以去上個廁所,用

precompiled header,編譯的時候,我可以站起來伸個懶腰,活動活動就差不多啦

---------轉載的文章----------

預編譯頭的概念:

所謂的預編譯頭就是把一個工程中的那一部分代碼,預先編譯好放在一個文件裡(通常是

以.pch為擴展名的),這個文件就稱為預編譯頭文件這些預先編譯好的代碼可以是任何的

C/C++代碼--------甚至是inline的函數,但是必須是穩定的,在工程開發的過程中不會

被經常改變。如果這些代碼被修改,則需要重新編譯生成預編譯頭文件。注意生成預編

譯頭文件是很耗時間的。同時你得注意預編譯頭文件通常很大,通常有6-7M大。注意及

時清理那些沒有用的預編譯頭文件。

也許你會問:現在的編譯器都有Time stamp的功能,編譯器在編譯整個工程的時候,它

只會編譯那些經過修改的文件,而不會去編譯那些從上次編譯過,到現在沒有被修改過

的文件。那麼為什麼還要預編譯頭文件呢?答案在這裡,我們知道編譯器是以文件為單

位編譯的,一個文件經過修改後,會重新編譯整個文件,當然在這個文件裡包含的所有

頭文件中的東西(.eg Macro, Preprocesser )都要重新處理一遍。VC的預編譯頭文件

保存的正是這部分信息。以避免每次都要重新處理這些頭文件。

預編譯頭的作用:

根據上文介紹,預編譯頭文件的作用當然就是提高便宜速度了,有了它你沒有必要每次

都編譯那些不需要經常改變的代碼。編譯性能當然就提高了。

預編譯頭的使用:

要使用預編譯頭,我們必須指定一個頭文件,這個頭文件包含我們不會經常改變的

代碼和其他的頭文件,然後我們用這個頭文件來生成一個預編譯頭文件(.pch文件)

想必大家都知道 StdAfx.h這個文件。很多人都認為這是VC提供的一個「系統級別」的

,編譯器帶的一個頭文件。其實不是的,這個文件可以是任何名字的。我們來考察一個

典型的由AppWizard生成的MFC Dialog Based 程序的預編譯頭文件。(因為AppWizard

會為我們指定好如何使用預編譯頭文件,默認的是StdAfx.h,這是VC起的名字)。我們

會發現這個頭文件裡包含了以下的頭文件:

#include // MFC core and standard components

#include // MFC extensions

#include // MFC Automation classes

#include // MFC support for Internet Explorer 4

Common Controls

#include

這些正是使用MFC的必須包含的頭文件,當然我們不太可能在我們的工程中修改這些頭文

件的,所以說他們是穩定的。

那麼我們如何指定它來生成預編譯頭文件。我們知道一個頭文件是不能編譯的。所以我

們還需要一個cpp文件來生成.pch 文件。這個文件默認的就是StdAfx.cpp。在這個文件

裡只有一句代碼就是:#include 「Stdafx.h」。原因是理所當然的,我們僅僅是要它能

夠編譯而已?D?D?D也就是說,要的只是它的.cpp的擴展名。我們可以用/Yc編譯開關來指

定StdAfx.cpp來生成一個.pch文件,通過/Fp編譯開關來指定生成的pch文件的名字。打

開project ->Setting->C/C++ 對話框。把Category指向Precompiled Header。在左邊的

樹形視圖裡選擇整個工程 

Project Options(右下角的那個白的地方)可以看到 /Fp 「debug/PCH.pch」,這就是指

定生成的.pch文件的名字,默認的通常是 <工程名>.pch(我的示例工程名就是PCH)。

然後,在左邊的樹形視圖裡選擇StdAfx.cpp.//這時只能選一個cpp文件!

這時原來的Project Option變成了 Source File Option(原來是工程,現在是一個文件

,當然變了)。在這裡我們可以看到 /Yc開關,/Yc的作用就是指定這個文件來創建一個

Pch文件。/Yc後面的文件名是那個包含了穩定代碼的頭文件,一個工程裡只能有一個文

件的可以有YC開關。VC就根據這個選項把 StdAfx.cpp編譯成一個Obj文件和一個PCH文件

然後我們再選擇一個其它的文件來看看,//其他cpp文件

在這裡,Precomplier 選擇了 Use ⋯⋯⋯一項,頭文件是我們指定創建PCH 文件的stda

fx.h

文件。事實上,這裡是使用工程裡的設置,(如圖1)/Yu」stdafx.h」。

這樣,我們就設置好了預編譯頭文件。也就是說,我們可以使用預編譯頭功能了。以

下是注意事項:

1):如果使用了/Yu,就是說使用了預編譯,我們在每個.cpp文件的最開頭,我強調一遍

是最開頭,包含 你指定產生pch文件的.h文件(默認是stdafx.h)不然就會有問題。如

果你沒有包含這個文件,就告訴你Unexpected file end. 如果你不是在最開頭包含的,

你自己試以下就知道了,絕對有很驚人的效果⋯..

fatal error C1010: unexpected end of file while looking for precompiled

header directive

Generating Code...

2)如果你把pch文件不小心丟了,編譯的時候就會產生很多的不正常的行為。根據以上

的分析,你只要讓編譯器生成一個pch文件。也就是說把 stdafx.cpp(即指定/Yc的那個

cpp文件)從新編譯一遍。當然你可以傻傻的 Rebuild All。簡單一點就是選擇那個cpp

文件,按一下Ctrl + F7就可以了。不然可是很浪費時間的哦。

//

呵呵,如果你居然耐著性子看到了這裡,那麼再回到帖子最開始看看我的總結吧!

2008/12/06

Visual Studio 2008中文版如何使用ASP.Net 3.5 MVC beta的專案

最近公司要改用.Net Framework,正好也來摸一下,上個月才推出的ASP.NET MVC beta。
這邊有MSDN的介紹
http://msdn.microsoft.com/zh-tw/magazine/cc337884.aspx
MVC這個Pattern已經行之有年,微軟的開發工具,直到最近才算是將之真正納入其中。
由於目前還在beta階段,所以下載回來安裝後,測試結果,並不直接支援Visual Stduio 2008中文版。但是,新增的專案範本是可以正確執行的。
我所謂的「不直接支援」,指的是,當我要新增Controller, Model, View項目的時候,並無法找到相對應的類別範本。
看來是安裝的時候,AspNetMVCBeta-setup.msi 沒有將.vstemplate安裝到正確的地方。我想正式版推出的時候應該會解決這個問題吧!

不過,無論如何,使用中文版又想嚐鮮的話,要怎麼辦呢?
其實很簡單,如果使用C#開發的話
只要在安裝目錄下找到
\Common7\IDE\ItemTemplates\CSharp\Web\MVC\1033
將底下的檔案複製到
\Common7\IDE\ItemTemplates\CSharp\Web\1028

依此類推,用VB者,也可以在\Common7\IDE\ItemTemplates\VisualBasic 路徑下找到上述檔案

然後執行 "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" /setup
算是欺騙Visual Studio 2008 吧!

這樣就可以在新增項目的時候,看到Web MVC Controller, Model, View的項目了

2007/12/21

開關CodeIgniter之PHP錯誤訊息

參考CI之Error Handle說明文件
在index.php的第一行程式碼

error_reporting(E_ALL);
這樣即預設為全部回報

若要關閉錯誤回報,則輸入參數0即可
error_reporting(0);

下面為錯誤回報等級

value constant
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
6143 E_ALL
2048 E_STRICT
4096 E_RECOVERABLE_ERROR

PHP原文參考處

2007/04/03

失散多年的來喔!

今天突然在MSN上,收到了一個超過十人的聊天邀請。
原來是大學時,風騷一時,喔不!是風雲一時的金毛學妹,想念大家,要召開同學會。
想不到當年的俏姑娘,如今都是兩個孩子的媽了...
不過,大家的時間都很難喬,現貢獻一個分享日曆,讓大家可以瞭解彼此的時間

這樣應該還蠻方便的:


用這個連結,就可以訂閱這個日曆了。

(什麼!你沒有Google帳號?)
(拜託~現在不用邀請就可以自行申請了!快去「搞」一個吧~)
(嗯~杜正勝部長,說「搞」是大陸用語,有兩岸對立意識者,請自行馬賽克。不過現在,好像還蠻流行向大陸靠攏的喔?所以,我個人也頗欽佩部長那種「雖千萬人,吾往矣!」的勇氣滴!)


至於,要怎麼用?
很抱歉!還讓你點選進來看,不過本文並不打算寫這麼多......
等哪天有空再來介紹。

但是,有問題,歡迎一起來研究討論喔!