2010年4月28日 星期三

C# UserControl 動態產生並傳值

Control customerInfoCard = Page.LoadControl("CustomerInfoCard.ascx");

customerInfoCard.GetType().GetProperty("CustomerID").SetValue(customerInfoCard, ”..." , null);}
User Control 是這樣子:
public string CustomerID
{
set
{
this._customerID = value;
...
}
}

Javascript的IE和Firefox相容性

以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox
1. document.form.item 問題
(1)現有問題:
現有代碼中存在許多 document.formName.item("itemName") 這樣的語句,不能在 MF 下運行
(2)解決方法:
改用 document.formName.elements["elementName"]
(3)其它
參見 2

2. 集合類物件問題
(1)現有問題:
現有代碼中許多集合類物件取用時使用 (),IE 能接受,MF 不能。
(2)解決方法:
改用 [] 作為下標運算。如:document.forms("formName") 改為 document.forms["formName"]。
又如:document.getElementsByName("inputName")(1) 改為document.getElementsByName("inputName")[1]
(3)其它

3. window.event
(1)現有問題:
使用 window.event 無法在 MF 上運行
(2)解決方法:
MF 的 event 只能在事件發生的現場使用,此問題暫無法解決。可以這樣變通:
原代碼(可在IE中運行):


<input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit()"/>
...
<script language="javascript">
function gotoSubmit() {
...
alert(window.event); // use window.event
...
}
</script>


新代碼(可在IE和MF中運行):


<input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit(event)"/>
...
<script language="javascript">
function gotoSubmit(evt) {
evt = evt ? evt : (window.event ? window.event : null);
...
alert(evt); // use evt
...
}
</script>


此外,如果新代碼中第一行不改,與老代碼一樣的話(即 gotoSubmit 調用沒有給參數),則仍然只能在IE中運行,但不會出錯。所以,這種方案 tpl 部分仍與老代碼相容。

4. HTML 物件的 id 作為物件名的問題
(1)現有問題
在 IE 中,HTML 物件的 ID 可以作為 document 的下屬物件變數名直接使用。在 MF 中不能。
(2)解決方法
用 getElementById("idName") 代替 idName 作為物件變數使用。

5. 用idName字串取得物件的問題
(1)現有問題
在IE中,利用 eval(idName) 可以取得 id 為 idName 的 HTML 物件,在MF 中不能。
(2)解決方法
用 getElementById(idName) 代替 eval(idName)。

6. 變數名與某 HTML 物件 id 相同的問題
(1)現有問題
在 MF 中,因為物件 id 不作為 HTML 物件的名稱,所以可以使用與 HTML 物件 id 相同的變數名,IE 中不能。
(2)解決方法
在聲明變數時,一律加上 var ,以避免歧義,這樣在 IE 中亦可正常運行。
此外,最好不要取與 HTML 對象 id 相同的變數名,以減少錯誤。
(3)其它
參見 問題4

關於CSS對各個瀏覽器相容的其他作法

關於CSS對各個瀏覽器兼容是個非常讓人頭疼的事情了, 網路上的教學方法很多。在discuz.net上發現了一篇不錯的東西,就轉載過來和大家共享。

註:
IE都能識別*;

標準瀏覽器(如Firefox,Opera,Netscape)不能識別*;

IE6能識別*,但不能識別 !important,IE7能識別*,也能識別 !important;

FF不能識別*,但能識別 !important;

寫兩句代碼來控制一個屬性,區別Firefox與IE6:
background:orange; *background:blue;

這一句代碼寫出來時,你用firefox或其它非IE瀏覽時,會發現,寫了該代碼的區域背景是橙色的,如果用IE瀏覽,卻是藍色的,這是因為IE都能識別*;標準瀏覽器(如Firefox,Opera,Netscape)不能識別*;

寫兩句代碼來控制一個屬性,區別IE7與IE6:

background:green !important; background:blue;

這一句代碼寫出來時,你用IE7瀏覽,會發現,寫了該代碼的區域背景是綠色的,如果用IE6瀏覽,卻是藍色的,這是因為IE7能識別! important*,一但識別了,就執行,忽略了後面的那一句,但IE6卻不能識別!important,所以前面部分跳過,直接執行了後半部份。

寫兩句代碼來控制一個屬性,區別Firefox與IE:

background:orange; *background:green;

這一句代碼寫出來時,你用Firefox瀏覽,會發現背景是橙色的,而IE裡卻是綠色的,很簡單,因為Firefox不能識別*,而IE6,IE7都可以識*

寫三句代碼來控制一個屬性,區別Firefox,IE7,IE6:

background:orange; *background:green !important; *background:blue;

這一句會使在Firefox在,背景呈橙色,IE7中為綠色,IE6中為藍色,道理和前面一樣,Firefox不能識別*,所以後面兩句都不執行,直接執 行第一句,IE7當然也能執行第一行代碼,但是因為第二句,他也能識別,所以就執行了第二句代碼,把前面的效果給過濾了,而最後一句,IE7是不能識別 的。IE6不能識別!imprtant,本來運行了第一句代碼了,第二句不能識別,那就理所當然的執行了最後一句。

注意事項:

1、float的div一定要閉合。

例如:(其中floatA、floatB的屬性已經設置為float:left;)
< #div id="floatA" >
< #div id="floatB" >
< #div id="NOTfloatC" >

這裡的NOTfloatC並不希望繼續平移,而是希望往下排。
這段代碼在IE中毫無問題,問題出在FF。原因是NOTfloatC並非float標籤,必須將float標籤閉合。

< #div class="floatB">
< #div class="NOTfloatC">
在之間加上

< #div class="clear">

這個div一定要注意聲明位置,一定要放在最恰當的地方,而且必須與兩個具有float屬性的div同級,之間不能存在嵌套關係,否則會產生異常。
並且將clear這種樣式定義為為如下即可:

.clear{clear:both;}

此外,為了讓高度能自動適應,要在wrapper裡面加上overflow:hidden;

當包含float的box的時候,高度自動適應在IE下無效,這時候應該觸發IE的layout私有屬性(萬惡的IE啊!)用zoom:1;可以做到,這樣就達到了兼容。
例如某一個wrapper如下定義:

.colwrapper{overflow:hidden;zoom:1;margin:5px auto;}

2、margin加倍的問題。

設置為float的div在ie下設置的margin會加倍。這是一個ie6都存在的bug。
解決方案是在這個div裡面加上display:inline;
例如:

< #div id="imfloat">

相應的css為

#IamFloat{
float:left;
margin:5px;/*IE下理解為10px*/
display:inline;/*IE下再理解為5px*/}

3、關於容器的包涵關係

很多時候,尤其是容器內有平行佈局,例如兩、三個float的div時,寬度很容易出現問題。在IE中,外層的寬度會被內層更寬的div擠破。一定要用Photoshop或者Firework量取像素級的精度。

4、關於高度的問題

如果是動態地添加內容,高度最好不要定義。瀏覽器可以自動伸縮,然而如果是靜態的內容,高度最好定好。(似乎有時候不會自動往下撐開,不知道具體怎麼回事)

5、最狠的手段 - !important;

如果實在沒有辦法解決一些細節問題,可以用這個方法,FF對於「!important」會自動優先解析,然而IE則會忽略,如下

.tabd1{
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}

值得注意的是,一定要將xxxx !important 這句放置在另一句之上,上面已經提過

常見兼容問題:

1. DOCTYPE 影響 CSS 處理

2. FF: div 設置 margin-left, margin-right 為 auto 時已經居中, IE 不行

3. FF: body 設置 text-align 時, div 需要設置 margin: auto(主要是 margin-left,margin-right) 方可居中

4. FF: 設置 padding 後, div 會增加 height 和 width, 但 IE 不會, 故需要用 !important 多設一個 height 和 width

5. FF: 支持 !important, IE 則忽略, 可用 !important 為 FF 特別設置樣式

6. div 的垂直居中問題: vertical-align:middle; 將行距增加到和整個DIV一樣高 line-height:200px; 然後插入文字,就垂直居中了。缺點是要控制內容不要換行

7. cursor: pointer 可以同時在 IE FF 中顯示游標手指狀, hand 僅 IE 可以

8. FF: 鏈接加邊框和背景色,需設置 display: block, 同時設置 float: left 保證不換行。參照 menubar, 給 a 和 menubar 設置高度是為了避免底邊顯示錯位, 若不設 height, 可以在 menubar 中插入一個空格。

9. 在mozilla firefox和IE中的BOX模型解釋不一致導致相差2px解決方法:
div{margin:30px!important;margin:28px;}

注意這兩個margin的順序一定不能寫反,據阿捷的說法!important這個屬性IE不能識別,但別的瀏覽器可以識別。所以在IE下其實解釋成這樣:

div{maring:30px;margin:28px}

重複定義的話按照最後一個來執行,所以不可以只寫margin:XXpx!important;

10. IE5 和IE6的BOX解釋不一致

IE5下

div{width:300px;margin:0 10px 0 10px;}

div的寬度會被解釋為300px-10px(右填充)-10px(左填充)最終div的寬度為280px,而在IE6和其他瀏覽器上寬度則是以300px+10px(右填充)+10px(左填充)=320px來計算的。這時我們可以做如下修改

div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}

關於這個/**/是什麼我也不太明白,只知道IE5和firefox都支持但IE6不支持。

11.ul 標籤在Mozilla中默認是有padding值的,而在IE中只有margin有值所以先定義

ul{margin:0;padding:0;}

就能解決大部分問題!

[CSS Hack]解決IE6、IE7、IE8、Firefox的瀏覽器相容性問題!

每次調CSS最令人頭痛的就是瀏覽器校正問題,因為每個瀏覽器對CSS的解釋都不太一樣,Firefox本身算是比較照規矩來,處理上比較簡單,但是遇到微軟的IE系列頭就大了,雖然都是IE,但是IE6、IE7、IE8各版本對CSS的解釋又不一樣,就算你本身已經在IE6調整好,但是在IE7看起來又是不一樣,這時我們就得來對各個瀏覽器設定不同的數值來解決版面移位的問題。

網路上有非常多關於CSS Hack的教學文章,當然處理方法也有很多種,接下來要跟大家說明的是屬於比較簡單的方法,但是以下的校正確無法通過W3C檢測,雖然無法通過檢測,但是針對各個瀏覽器校正確是有效的喔!

目前瀏覽器大宗還是屬於IE6的天下,這原因主要是因為XP本身內建IE6,而且很多使用者很喜歡重灌XP,因此IE6仍占走了大半的瀏覽器天下,不過隨著Windows7的出現,倒是有非常大的機會解決過氣的IE6,因為Windows7本身是內建IE8,微軟的IE8對CSS的解釋已經越來越標準,當然標準程度仍是不及Firefox。

另外,如果要處理IE各版本瀏覽器的相容性問題,那一定要有各版本的IE瀏覽器可以瀏覽,但是微軟作業系統內並沒有讓多版本的IE共存,為了讓自己電腦內存在多種版本的IE瀏覽器,那就趕快下載IETester來使用吧!另外,也別忘記下載Firefox來修正網頁CSS喔!

——————————–我是分隔線——————————–

區別IE和Firefox
【辨識符號】:「\9」


【範例練習】:

#tip {
background:blue; /*Firefox 背景變藍色*/
background:red \9; /*IE6、IE7、IE8背景變紅色*/
}

【說明】:因為IE瀏覽器看得懂「\9」,但是非IE的瀏覽器一律看不懂,因此就可以用這個語法來區分IE和Firefox(非IE瀏覽器,像是Opera、Google Chrome、Safari等),因此以上CSS範例中,非IE瀏覽器是顯示藍色背景,IE系列瀏覽器是顯示紅色背景。

——————————–我是分隔線——————————–

區別IE6、IE7、IE8、Firefox
【辨識符號】:「\9」、「*」、「_」


【範例練習】:

#tip {
background:blue; /*Firefox 背景變藍色*/
background:red \9; /*IE8 背景變紅色*/
*background:black; /*IE7 背景變黑色*/
_background:orange; /*IE6 背景變橘色*/
}

【說明】:因為IE系列瀏覽器可讀「\9」,而IE6和IE7可讀「*」(米字號),另外IE6可辨識「_」(底線),因此可以依照順序寫下來,就會讓瀏覽器正確的讀取到自己看得懂得CSS語法,所以就可以有效區分IE各版本和非IE瀏覽器(像是Firefox、Opera、Google Chrome、Safari等)。

——————————–我是分隔線——————————–

區別IE6、IE7、Firefox (方法 1)
【辨識符號】:「*」、「_」


【範例練習】:

#tip {
background:blue; /*Firefox背景變藍色*/
*background:black; /*IE7 背景變黑色*/
_background:orange; /*IE6 背景變橘色*/
}

【說明】:IE7和IE6可讀「*」(米字號),IE6又可以讀「_」(底線),但是IE7卻無法讀取「_」,至於Firefox(非IE瀏覽器)則完全無法辨識「*」和「_」,因此就可以透過這樣的差異性來區分IE6、IE7、Firefox,

——————————–我是分隔線——————————–

區別IE6、IE7、Firefox (方法 2)
【辨識符號】:「*」、「!important」


【範例練習】:

#tip {
background:blue; /*Firefox 背景變藍色*/
*background:green !important; /*IE7 背景變綠色*/
*background:orange; /*IE6 背景變橘色*/
}

【說明】:IE7可以辨識「*」和「!important」,但是IE6只可以辨識「*」,卻無法辨識「!important」,至於Firefox可以讀取「!important」但不能辨識「*」因此可以透過這樣的差異來有效區隔IE6、IE7、Firefox。

區別IE7、Firefox
【辨識符號】:「*」、「!important」


【範例練習】:

#tip {
background:blue; /*Firefox 背景變藍色*/
*background:green !important; /*IE7 背景變綠色*/
}

【說明】:因為Firefox可以辨識「!important」但卻無法辨識「*」,而IE7則可以同時看懂「*」、「!important」,因此可以兩個辨識符號來區隔IE7和Firefox。

——————————–我是分隔線——————————–

區別IE6、IE7 (方法 1)
【辨識符號】:「*」、「_」


【範例練習】:

#tip {
*background:black; /*IE7 背景變黑色*/
_background:orange; /*IE6 背景變橘色*/
}

【說明】:IE7和IE6都可以辨識「*」(米字號),但IE6可以辨識「_」(底線),IE7卻無法辨識,透過IE7無法讀取「_」的特性就能輕鬆區隔IE6和IE7之間的差異。

區別IE6、IE7 (方法 2)
【辨識符號】:「!important」


【範例練習】:

#tip {
background:black !important; /*IE7 背景變黑色*/
background:orange; /*IE6 背景變橘色*/
}

【說明】:因為IE7可讀取「!important;」但IE6卻不行,而CSS的讀取步驟是從上到下,因此IE6讀取時因無法辨識「!important」而直接跳到下一行讀取CSS,所以背景色會呈現橘色。

——————————–我是分隔線——————————–

區別IE6、Firefox
【辨識符號】:「_」


【範例練習】:

#tip {
background:black; /*Firefox 背景變黑色*/
_background:orange; /*IE6 背景變橘色*/
}

【說明】:因為IE6可以辨識「_」(底線),但是Firefox卻不行,因此可以透過這樣的差異來區隔Firefox和IE6,有效達成CSS hack。

參考 http://space.baidu.com/h5163/blog/item/d2fdc7d41dc2a10aa08bb71d.html

C# userControl LoadControl 動態載入並存在Session

if (Session["c3"] == null)
{
c3 = LoadControl("_UC/Uc_aaaa.ascx");
Session["c3"] = c3;
}
else
{
c3 = (Control)Session["c3"];
}
Panel2.Controls.Add(c3);

2010年4月23日 星期五

javascript dojo.indexOf 說明與範例

dojo.indexOf 是 dojo 的陣列處理函數之一,用來取得指定字串在陣列中第一次出現的位置,如果找不到指定的字串時,會傳回 -1 表示,用法如下:

var 字串位置 = dojo.indexOf(陣列名稱, "搜尋字串");

程式範例如下:
<script type="text/javascript">
dojo.addOnLoad(function(){
var arrSample = ["apple", "dog", "book","book","desk"];
var position = dojo.indexOf(arrSample, "book");
alert(position);
});
</script>

如何讓IE8在瀏覽網頁時都可以正常顯示(IE8相容性問題)

針對IE8排版亂掉的問題

Internet Explorer 8 預設是以 CSS2.1 為標準,為考量可顯示舊語法的網頁,IE8 引進了相容性模式,可以輕鬆將舊版標準轉換成以下三種文件模式:

1. Quirks模式
2. IE7標準模式
3. IE8標準模式

其是以HTML中開頭的DOCTYPE去判別要採用的模式,遇到沒有定義DOCTYPE的HTML網頁或定義陳舊HTML版本的網頁,就會採用Quirks Mode。

◎ 修改每個網頁:在每一個網頁加入相容性模式中繼標籤(放到各網頁的 HEAD 項目中),強制 Windows Internet Explorer 8 以 Windows Internet Explorer 7 的方式呈現網頁。
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>

IE=EmulateIE8 IE8的自動判斷
IE=EmulateIE7 IE7的自動判斷
IE=5 Quirks Mode
IE=7 IE7標準模式
IE=8 IE8標準模式

在IIS6.0可以這樣做

若要設定 IIS 6 和更舊的版本,使其包含自訂 HTTP 回應標頭,請依照下列步驟執行:

1. 按一下 [開始],再按 [執行],鍵入 inetmgr.exe,然後按一下 [確定]。
2. 展開您要的伺服器,然後展開 [網站]。
3. 以滑鼠右鍵按一下您要的網站,然後按一下 [內容]。
4. 按一下 [HTTP 標頭] 索引標籤。
5. 按一下 [自訂 HTTP 標頭] 底下的 [新增]。
6. 在 [自訂標頭名稱] 方塊中,鍵入 X-UA-Compatible。
7. 在 [自訂標頭值] 方塊中,鍵入 IE=EmulateIE7。
8. 按兩次 [確定]。

如果 Web 伺服器指定的是預設文件相容模式,您可以在特定網頁中指定另一種文件相容模式,以覆寫該設定。在網頁中指定的模式 ,會優先於伺服器指定的模式。

參考資料
Internet Explorer 8
如何立即修正我的網站?
在 IIS 上實作 META Switch

2010年4月20日 星期二

「Fortigate」如何封鎖經由Web傳檔或使用Web Mail傳送檔案?

使用Fortinet的Fortiguard類別封鎖Web Mail網站及網頁磁碟機

javascript 滑鼠事件

事件       說明
onabort     圖片下載被中斷時
onblur     當游標離開元件時
onchange     當使用者更改欄位內容時
onclick     滑鼠單擊物件時
ondblclick   滑鼠雙擊物件時
onerror     載入文件或圖片發生錯誤時
onfocus     當游標定位在元件上時
onkeydown    當鍵盤的按鍵被壓下時
onkeypress    當鍵盤的按鍵被壓下再放開時
onkeyup     當鍵盤的按鍵被放開時
onload      當網頁或圖片載入完成時
onmousedown   滑鼠按鍵被壓下時
onmousemove   滑鼠指標移動時
onmouseout   滑鼠指標離開物件時
onmouseover   滑鼠指標移到物件上時
onmouseup    滑鼠按鍵被放開時
onreset     當reset按鍵被點擊時
onresize    當視窗或框架被改變大小時
onselect    當文字被選取時
onsubmit    當sumbit按鍵被點擊時
onunload    當使用者離開畫面時

2010年4月19日 星期一

[C#]將數字前面補0,補足設定的長度

// 將數字前面補0,補足長度為6 
String snum = "123";
String pnum = snum.PadLeft(6, '0');
String fnum = String.Format("...{0:000000}",Convert.ToInt16(snum));
MessageBox.Show( "原始字串 : " + snum + "\n 透過 PadLeft : " + pnum + "\n 透過 String.Format : " + fnum);

2010年4月16日 星期五

(錯誤訊息)Runtime error 216..解決方案

解決辦法:

步驟一:
按開始>>執行>>輸入regedit (接著慢慢點選打開左邊資料夾)
HKEY_LOCAL_MACHINE SOFTWARE / Microsoft / Windows / CurrentVersion / Explorer / ShellExecuteHooks
到這裡右邊\會出現AEB6717E-7E19-11d0-97EE-00C04FD91972(檔名),還會有其它的檔,把其它的都刪除(別刪預設值),(我照本文說明做..但我的電腦沒有AEB6717E-7E19-11d0-97EE-00C04FD91972這檔..所以我只留預設值..把其他檔刪了)

步驟二:
按開始>>執行>>輸入cmd按Enter輸入:
for %1 in (%windir%system32*.dll) do regsvr32.exe /s %1
建議用複製的貼上時不能用鍵盤(ctrl+v)貼上,要用滑鼠右鍵貼上

複製好了它會自動一直跑...慢慢等它跑完,別做其它事,可能要幾分鐘時間,等它跑完後,最後只要重開機就ok了,開機完還要重新設定時間喔,解決!!

2010年4月14日 星期三

iPad殺手?德WePad改革缺點踢館

兩台機種入門款價格差不多,而所有iPad有的的缺點,WePad都沒有,比方iPad不能外接USB,iPad沒配備webcam攝影機,WePad通通都行,因此網友稱WePad為iPad殺手。WePad生產商則說,「WePad不是殺手啦,只是提供大家不同選擇。」

另外,WePad支援Google Android系統及Flash程式,能玩臉書小遊戲,都贏過iPad,而且WePad不需要特殊軟體就能播音樂,不像iPad得仰賴iTunes放音樂,相對方便;WePad要說真不如iPad,就是螢幕11.6吋大了些(iPad9.7吋),待機時間也少了4小時。

蘋果不只iPad面對挑戰,iPhone手機也迎戰微軟自有品牌手機Kin;照相功能一直是iPhone的弱項,而微軟Kin手機分為攝影鏡頭500萬畫素、800萬畫素兩種,可能比iPhone未來四代機種還要了得,蘋果現在腹背受敵。

由Neofonie推出的WePad,採用的觸控螢幕尺寸為11.6吋,1366 x 768解析度,比iPad略大;配備Atom N450處理器,時脈較快;內建 WebCam能拍照,iPad沒有;兩個USB連接埠,能外接印表機,有讀卡槽能擴充記憶體容量,iPad沒有。此外,與蘋果產品需要iTunes軟體的作法不同,使用WePad時,不需要任何特殊軟體即可播放音樂。

此外,WePad的作業系統是Android Linux作業系統,可支援所有的Flash,而iPad不支援Adobe Flash,早已為人所知。WePad同時將有Android Market支援軟體應用;另外有WeMagazine發表平台,為支援電子書閱讀做準備。雖然WePad的電池續航力只有6小時,但是也已達主流筆電的水準。

據美聯社報導,WePad Wi-Fi、16 GB基本款售價為449歐元,約為600美元;3G數據機、32 GB版本則售價569歐元。而iPad4月底在德國開賣的行情則是,Wi-Fi、16GB版售價為499美元,Wi-Fi+3G、32GB版則為629美元。

2010年4月13日 星期二

[CSS]word-wrap: 讓英文字元自動斷行


是否有遇到英文不齊行的問題,由於英文字為半行字元,因此常會出現二種情形,一種則是畫面被撐開,另一種情形則是英文無法左右齊行,雖然html裡面有左右齊行的語法,但是一旦使用了左右齊行,則會發現英文字的間距被強制拉開的現象,但解決方法卻是如此的簡單,只要入將下列的語法加入,就可完成英文左右齊行的夢想。
word-wrap: break-word;
word-break: break-all;
不過我告訴大家,把英文字換行是最笨的行為,不要再做傻事了,不然你就是CD(想問我CD是什麼意思嗎?不告訴你)

2010年4月12日 星期一

去你的蘋果 (Go to your Apple)

蘋果堅決不支援Adobe的Flash,雙方惡言相向已久,剛發表的iPhone OS 4.0 SDK測試版被發現對Adobe的Flash限制更嚴格。讓Adobe Flash主管Lee Brimelow氣得嗆聲指,這是蘋果發動「對抗Adobe的聖戰」,大罵「去你的蘋果」,不過粗話脫口後,他也謹慎多加一句,不代表Adobe發言。

iPhone 4.0 SDK測試版釋出後,科技部落格Daring Fireball的John Gruber隨後發現,蘋果的iPhone開發人員協議中,禁用API的條款中規定更加嚴格,包括禁止使用Adobe的Flash-to-iPhone編譯器。

過去幾個月來曾數度公開批評Flash的蘋果執行長Steve Jobs對Gruber修改開發人員協議的做法,大力讚揚。Jobs認同Gruber的分析論點,蘋果是要打造到處皆美的系統,而Adobe的意圖並非是要協助開發人員撰寫iPhone應用程式,而是鼓勵開發人員撰寫可在iPhone上執行的Flash應用程式,因此與蘋果的宗旨與利益互相矛盾。

Gruber強調,跨平台的軟體套件永遠無法造就iPhone平台的原生程式,而App Store一定會為保障程式品質把關。

蘋果公司的新人氣商品iPad,不支援繪圖設計軟體業者奧多比(Adobe Systems)的Flash功能,令消費者怨聲載道。這兩家公司曾是合作夥伴,但商場上沒有永遠的朋友,以iPhone改寫手機產業版圖的蘋果,不能容忍對手分食商機,現在對待敵人的手段已越來越粗暴。

iPhone和iPad都不支援Flash,蘋果執行長賈伯斯曾批評Flash漏洞太多。衝突升高的關鍵是,奧多比將推出的旗艦軟體Flash CS5,能讓軟體開發者編寫程式後,對應原本不適用Flash的蘋果產品。但蘋果隨即祭出狠招,修改iPhone軟體開發套件(SDK)協議。

原先規定,只要使用蘋果認可的「第三方應用程式設計介面」(API)即可,但新條款規定「應用程式只能以蘋果認可的程式語言撰寫,以上述程式語言撰寫的程式,才能直接連接蘋果規定的API」。

這顯然是衝著奧多比而來。奧多比平台工程師布里梅洛,在部落格怒飆「去你的蘋果!」。另一位員工在「推特」留言:「我知道蘋果有很多好人,你們如果想找個有品一點的企業,奧多比正在招兵買馬」。

應用軟體業者TaoEffect執行長葛魯伯認為,利益是蘋果對奧多比下重手的主因。奧多比的Flash CS5可能會讓程式開發者,寫出可在iPhone上執行的Flash應用程式,蘋果不可能坐視利益被分食。

搜尋引擎霸主Google原本和蘋果惺惺相惜,但一旦開發Android作業系統,推出自有手機Nexus One後,也成為蘋果的眼中盯。賈伯斯曾在員工會議大罵Google,「我們沒跨足搜尋引擎產業,他們卻進入手機業,擺明想宰掉iPhone,我們絕不讓他們得逞。」

蘋果上月控告宏達電(HTC)手機侵犯iPhone專利,但真正目標是Google。蘋果iPhone新版作業系統,也已把Safari瀏覽器的「Google」鍵改成「搜尋」(Search)。

對於蘋果長期堅決不支援Adobe Flash的做法,Adobe Flash平台科技推廣師Lee Brimelow最近在部落格發表文章大罵,蘋果改變軟體開發套件(SDK)協議,是有敵意、而且卑鄙的舉動。

但是他強調,有些人擔心,蘋果的舉動可能導致Adobe停止開發某些軟體,包括即將推出的CS5,不過,Adobe不會為了企圖傷害另一家公司,而利用自己的忠實使用者,讓他們淪為兩軍交戰中的人質。

Lee Brimelow還在貼文中大罵,「去你的蘋果」,除非蘋果公司換人掌舵,否則自己不打算再買蘋果的產品。不過,他還是加了一句,他並不代表Adobe發言。

2010年4月11日 星期日

facebook社群行銷熱- OPEN將衝上人氣第一

目前台灣操作facebook行銷活動最成功的案例。

這是7-ELEVEN為了推廣冷凍食品而專門設計的行銷案。主導這檔行銷活動的整合行銷部經理陳飛龍說,
10天活動期間內,7-ELEVEN總共增加6萬名粉絲,送出近3萬份商品試吃,另外估計活動訊息有80萬 ∼100萬人次瀏覽。

網路行銷達人、FunP執行長邱繼弘分析,送贈品是行銷常見手法,但是方法高下有別。一般人送贈品,頂多是訊息曝光,消費者把贈品拿走就結束。但7-ELEVEN的設計不僅讓粉絲會主動把訊息分享給好友,擴散訊息,還能吸引網民加入粉絲。除此之外,還能鼓勵網友留下產品試吃心得,留下龐大的商品口碑資料庫,一檔活動同時達到三種目的。

即使計算3萬份商品試吃成本,這檔活動花費約100萬,投資報酬率很高。陳飛龍笑著說,活動效果好到主管開始把注意力放在facebook經營上,立刻訂下一個「遠大」目標。「主管開始問:什麼時候粉絲破100萬?」

速度 5個月成為粉絲人氣王
目前國內粉絲專頁中,粉絲數最高的就是7-ELEVEN,從去年11月開始正式經營,短短5個月已經有30萬名粉絲。「我們官網經營10年,才累積到120萬會員。」有7年網路行銷操作經驗的陳飛龍認為facebook的連結性、互動性跟即時性都遠甚於之前的網路工具,要破百萬粉絲根本不是問題。

傳統的網路行銷,通常是先將活動頁面放在官網上,然後利用電子報或投放其他網路廣告導進流量,才把訊息散播出去,一檔活動走下來通常要3∼4週時間,才能達到預設目標。但同樣的訊息透過facebook傳播,陳飛龍認為,2∼3小時就能達到傳統網路活動效果。

在實際操作facebook之前,7-ELEVEN已經有大量使用網路工具的經驗,例如:官網、電子報、部落格、MSN機器人,其實每使用一個網路工具,背後就有大量的維護工作產生。也因此當網路界開始注意facebook平台時,「我們並沒有立刻跳下去,而是觀察研究我們到底可以在上面做什麼?」陳飛龍說。

經過一段時間研究,7-ELEVEN已經訂出facebook的短、中、長期三個不同階段目標,希望藉此一步一步拓展facebook效益。雖說是短、中、長期,但其實長期目標也將在今年7月推出,距離他們真正經營facebook還不到一年。

陳飛龍說,第一個階段就是發揮平台基本的功能,利用貼文跟粉絲互動。這階段的經營目標以粉絲數以及貼文回應數為主。

第二階段則增加跟粉絲互動的多元性,開發一些行銷活動應用程式,讓粉絲可以從回應貼文到玩活動,跟企業品牌深度溝通,像之前提到的「粉絲小天使」活動,就是這個發展階段的案例。

陳飛龍進一步分析,對企業來說,要進展到第二階段,粉絲數最好有20萬。因為開發一支活動應用程式,通常需要10多萬預算,如果粉絲數太少,報酬率就不高。

第三階段,就可直接在平台上經營金流事業,譬如:電子商務。陳飛龍說,目前他們已經著手正在規畫產品,預計今年7月可以正式對外營運。

精準 每兩天貼一次文
每一個階段都有它的經營重點,為了研究facebook基本的貼文,陳飛龍花了一個多月測試。去年十月,他跟同事開始研究貼文效果,觀察的重點主要放在:第一,什麼貼文形式讀者最買單?第二,一天24小時,什麼時候貼文最恰當?第三,最適合的貼文頻率是什麼?試出最適合方案後,7-ELEVEN的粉絲專頁才在11月開始對外正式公布。

2010年4月7日 星期三

SQL Server CLR 整合簡介

做為 Microsoft .NET Framework 核心的 Common Language Runtime (CLR) 提供了所有 .NET Framework 程式碼的執行環境。CLR 中執行的程式碼稱為 Managed 程式碼。CLR 提供程式執行所需的各種功能及服務,包括 just-in-time (JIT) 編譯、配置及管理記憶體、強制使用型別安全性、例外處理、執行緒管理及安全性。

利用 Microsoft SQL Server 中裝載的 CLR (稱為 CLR 整合),您能夠以 Managed 程式碼撰寫預存程序、觸發程序、使用者定義函式、使用者定義型別及使用者定義彙總。因為 Managed 程式碼在執行前會編譯成原生程式碼,所以在部分案例中可大幅提升效能。

Managed 程式碼使用程式碼存取安全性 (CAS)、程式碼連結及應用程式網域,來防止組件執行某些作業。SQL Server 2005 使用 CAS 來協助保護 Managed 程式碼,並防止損害作業系統或資料庫伺服器。

CLR 整合的優點
Transact-SQL 是專為在資料庫中直接存取及操作資料而設計。儘管 Transact-SQL 擅長資料存取及管理,但它並不具有可簡化資料操作及計算的程式設計建構。例如,Transact-SQL 不支援陣列、集合、for-each 迴圈、位元移位或類別。在 Transact-SQL 中可模擬其中的部分建構,而 Managed 程式碼具有這些建構的整合支援。根據案例的不同,可能因為這些功能而必須在 Managed 程式碼中實作特定資料庫功能。

Microsoft Visual Basic .NET 及 Microsoft Visual C# 提供物件導向功能,如封裝、繼承及多型。現在可將相關程式碼輕鬆組成類別及命名空間。當使用大量伺服器程式碼時,這可讓您更方便地組織及維護程式碼。

Managed 程式碼比 Transact-SQL 更適合於計算及複雜執行邏輯,並具有對許多複雜工作的廣泛支援,包括字串處理及規則運算式。利用 .NET Framework 程式庫中的功能,您可以存取成千上萬預先建置的類別及常式。可透過任意預存程序、觸發程序或使用者定義函式輕鬆存取這些項目。基底類別庫 (BCL) 中包含的類別可提供字串操作、進階數學運算、檔案存取、加密等多項功能。

完整說明及操作
SQL Server CLR 整合簡介

2010年4月4日 星期日

iFixit知名拆解專家拆解iPad

知名的線上維修教學公司iFixit創辦人溫斯與索爾斯,在蘋果開始接受iPad訂單時就下單,而且刻意挑選多個可能最快送抵的地點作為交貨地址。iPad到手後,兩人開始動手。他們希望搶得拆解說明先機,配上圖像處理,鉅細靡遺的在網路(www.ifixit.com/)公開。

供應商坦承,對於iFixit及其同業拆解iPad樂觀其成。這些令人瞠目結舌的拆解過程無異向世人宣揚,製造商要夠優秀才能打進蘋果產品。

原文網址有詳盡的拆解過程喔 http://www.ifixit.com/Teardown/iPad-Teardown/2183/1#top




2010年4月3日 星期六

職場專家邱文仁也會被fire

Timwang wrote:
唉,人可以無恥,但不要顛倒是非..

畢竟自己也曾經號稱是狗屁職場專家,那就不要教壞小孩了,我這看不下去的路人,不小心知道了整件事情的本末,就來替104將事實公布一下

邱文仁之所以會被fire,不是因為他在外面兼差,而是他藉由職務之便,濫用公司資源圖利自己!

相信有在104刊登過徵才廣告的人都知道,104人力銀行每年過年都會送客戶一本桌曆
這本月曆以前是由負責求才的部門美編設計,而不知從何時開始開始由邱文仁負責的行銷部門負責設計

過去每年桌曆裡的插圖都是以當年度的生肖為主題,由104美編自己繪製,好不好看是一回事,但還蠻有親切感的
今年的月曆,突然改變了插圖風格,使用外面某一家插畫公司的插畫

怪的是,桌曆的每一頁都印上了該插畫公司的網址,幫該插畫公司宣傳,卻都看不到半個104銀行事業群的網址
104的法務人員覺得這整件事很怪就詢問邱文仁為何可以不用付對方版權費就使用對方公司的插畫,日後不會有版權糾紛嗎?

邱文仁辯說,因為桌曆上印上了該插畫公司的網址,算是廣告交換,所以不用付版權費,但這一切說法都沒有任何合約可以證明

104的法務人員仍覺得有些不妥,沒有合約萬一日後對方來後悔怎麼辦,於是堅持還是應該付版權費,至於最後該插畫公司有沒有
拿這筆版權費,這細節我就沒聽說了

重點來了,同時104也開始調查這家插畫公司的背景,發現邱文仁跟這次負責桌曆設計的美編竟然是這家插畫公司的股東之一

104一年至少會印製幾萬本桌曆,說穿了就是出錢印桌曆幫邱文仁在外面投資的公司打免費廣告
簡單來說,邱文仁利用他的職務之便,圖利自己私人在外面投資的公司

放眼全世界,稍微有規模一點的公司都會要求員工簽署利益迴避協定,請問邱文仁這種明顯圖利自己的行為不該被公司fire嗎?

另外,跟大家爆一個料

104法務在進行調查時,也同時調了邱文仁跟該部門美編的即時通通話記錄,發現其中有很不堪的一段對話

意思大概就是「在這家公司工作,不把這家公司的資源吃乾榨盡怎麼對得起自己..」

我想說到這裡,整件事的是非網友們心中自有公斷了

我跟邱文仁無恩無仇,也不是幫104辯解,只是看不下去邱文仁不知反省,還上電視甚至在自己部落格發言顛倒是非、哭爸哭母的惡劣行徑!

104算是對得起邱文仁了!
以他在104的職位及年資,104上市時他被分到的股票應該不少,但以邱文仁對104的貢獻,已經是既得利益者,該惜福感恩了

再回頭想想,邱文仁這幾年真的有在替104做好公關與行銷嗎?

對公關貨行稍這領域稍微有些了解的人都知道,104這幾年的品牌聲音是很微弱的,幾乎快被1111,Yes123,518人力銀行趕過去

104這幾年賣的是過去累積的形象老本,若在公關與行銷這兩塊再不努力遲早有一天會被其他人力銀行超越的
而過去累積的形象老本是誰建立的,是104的創辦人楊基寬先生,是他讓104人力銀行的正面形象深植在許多求職者的心中..

而邱文仁,這個口口聲聲說自己替104立下多少汗馬功勞的人..

說穿了,這幾年他也只是利用104在經營自己的個人品牌吧...恕刪)

轉 http://www.wretch.cc/blog/elt1225/13008919

再熟的老闆 還是老闆

前104人力銀行的行銷總監邱文仁,在JET的談話節目「新聞挖挖哇」當中,
坦承被服務11年的公司炒魷魚,導火線據說是因為公司發現她架了一個自己的網站,
雖然她已經有跟公司老闆提過,但是公司覺得『她在做自己的事』,請她一週內走人。

因為她是知名人物,職場達人,所以這一個事件也在當天變成Google搜尋關鍵字的第一名。
這樣的事件帶給上班族什麼啟示?
她不是認真而又負責,而且又是公司的一級戰將嗎?
為什麼會被自己逆轉?

從節目當中,有幾個血淋淋的實例
誤把老闆,同事當家人
邱文仁在電視節目中提到,
她一直把老闆,同事當作自己的家人。
這是一個蠻危險的心態。
親兄弟都要明算帳了,何況還不是親兄弟?

我們常說,商場如戰場,你怎麼可以跟拿刀拿槍的人稱兄道弟搏真情呢?
所謂刀槍無眼,就算不是故意(條剛)的,偶爾還是會擦槍走火,只要一動刀動槍,那有人可以不受傷的呢?

老闆只有在需要你的時候,會「很像」家人,不需要你的時候,老闆會選擇當機立斷,
無論你服務了10年,20年,甚至30,40年。
老闆說沒關係,不一定真的沒關係

邱文仁自己在外面架一個站,她有跟老闆提過,她說,老闆覺得沒關係,這個網站不必關起來。
(聽到不必關的時候,心裏就要有警覺,那可能是一個暗示:你是要關起來還是要躺下去?)
於是,她也不以為意,沒想到公司以這個為理由,要她打包走人。
也許她心中能夠分得很清楚,何時是下班,何時是做自己的事,但是老闆並不一定這麼認為。

這裏告訴我們,
老闆說沒關係,不一定真的沒關係。
如果你跟老闆有關係,那才是真的沒關係


記得有一次,週五晚上7-8點,我跟老闆開完會之後,我問老闆,「沒事了嗎?」,老闆說, 「OK了」。

於是我帶整個部門去聚餐,酒過三巡之後,老闆夫人打電話來,要我把整個部門帶回公司。
我問老闆夫人什麼事,老闆夫人就是不肯說,她只是說老闆有話沒說完。
我覺得沒有必要把整個部門的人再度帶回公司,如果很重要,我可以一個人回公司。
這下子老闆夫人火了,
她要求我第二天,帶整個部門的人到公司,跟老闆開會。
ok,周六早上到了公司,一早所有的人都在等老闆來,我們以為是有什麼重要的事,結果
並沒有,純粹是要給我們訓話。
這意思是告誡我們,以後隨時叫我們回公司,我們不要抗命。

知道了嗎?再複習一下,老闆說沒關係,不一定真的沒關係。如果你跟老闆有關係,那才是真的沒關係。

喧賓奪主
這是我覺得邱文仁被開除的真正理由。
老闆心裏面,希望邱文仁打的是人力銀行的品牌,但是我們可以發現,邱文仁的個人品牌比 人力銀行還高。
有人認為這是功高震主,我反而覺得這比較像是喧賓奪主。

這裏面沒有大是大非,沒有誰對誰錯,因為要創業,或是要兼職,打自己品牌的人,總有一天都會遇到這個問題。
(如果真相是如邱文仁所說的話)
有時我們還沒準備好,但是12道金牌已經發下來。

我不認為邱文仁自己開一個網站是錯的,相反的,

我認為上班族都要準備好第二份工作,下一份工作。

無論是投資,合夥,準備創業都好。因為花無百日紅。

在一個公司待了11年的職場達人,必須要面對在一周內走人。
那麼,平凡的上班族呢?是不是該多為自己想一想?

2010年4月2日 星期五

javaScript substr和substring的差異

javaScript substr和substring的差異如下:

String.substr(N1,N2) :從N1(指定位置)截取N2(所要截取之字元長度)
String.substring(N1,N2) :從N1(指定位置)截取到N2(指定位置)

PS. javascript的起始位置是0

2010年4月1日 星期四

C# 常用的數學運算 (亂數)

// 顯示數學常數
double a = Math.E ;
double a = Math.PI ;

// 指數和對數函數
double x = 15.536;
double y = 3.37;

double a = Math.Exp(x);
double a = Math.Log(x);
double a = Math.Pow(x, y);
double a = Math.Sqrt(x);

// 三角函數
double deg = 60.0;
double rad = deg * Math.PI / 180.0;

double a = Math.Sin(rad);
double a = Math.Cos(rad);
double a = Math.Tan(rad);

double angle = Math.PI * degrees / 180.0;
double sinAngle = Math.Sin(angle); // 俓度
double cosAngle = Math.Cos(angle);

// 建立System.Random物件
Random rd = new Random();

// 取得亂數值
double a = rd.NextDouble();
int a = rd.Next(1, 50); // 亂數值 1 ~ 50
int a = rd.Next(50, 100); // 亂數值 50 ~ 100
int j = rnd.Next(16); // 取得 0 ~ 15 的亂數