Static與Auto之不同處

2012年12月21日 星期五

auto由程式自動控制變數的生命週期,通常指的就是變數在進入其作用範圍的時候被分配,離開其作用範圍時被釋放;而static就是不auto,變數在程式開始時被載入記憶體,直到程式退出前才被釋放;也就是static是按照程式的生命週期來分配釋放變數的,而不是變數自己的生命週期。

範例:

public class EditPicture
{
public static EditPicture getInstance()
{
return new EditPicture();
}

public void Edit(int id)
{
//修改圖片方法
}

public void Add()
{
//新增圖片方法
}

}


 



如果只會用到處理圖片可以這樣寫



public class Product
{
public void ProductEdit(int id)
{
//處理圖片
EditPicture.getInstance().Edit(id);
}
}


若需要用到add及edit則要用以下方式寫



public class Product
{
public void PictureProcess(int id)
{
EditPicture obj = new EditPicture();
obj.Add();
obj.Edit(id);
}
}


這樣寫會佔用太多記憶體資源是不對的



public class Product
{
public void PictureProcess(int id)
{
EditPicture.getInstance().Edit(id);
EditPicture.getInstance().Add();
}
}


 



參考來源:http://www.dotblogs.com.tw/darren.net/archive/2008/08/12/4870.aspx

Read more...

Lambda表示式

2012年12月17日 星期一

(input parameters)  =>  { expression }

左邊想成傳入方法的參數,用  " => " 運算子連接,右邊是 方法的內容。

 

var list  = db.user.where(p=>p.userID = "neil").Select(vo=>
{
vo.name = "蔡小明";
return vo;
}

Read more...

簡易克服 CSS 被瀏覽器快取(Cache)的問題

2012年12月11日 星期二

今天同事遇到了,在測試機上直接修改了xxx.js確發生沒有作用這可能是因為被proxy或是waf快取,所以才會發生這樣的問題

只要在後面加入日期即可 例: xxx.js?20121212

 

 

詳細可參考 http://blog.miniasp.com/post/2008/02/03/Avoid-browser-cache-problem-on-css-or-javascript-file.aspx

Read more...

日期相加

2012年11月8日 星期四

javascipt之日期相加

常用到所以做個筆記

 

//日期相加
function addDate(dateObj,days)
{
var tempDate = dateObj.valueOf();
tempDate = tempDate + days * 24 * 60 * 60 * 1000;
tempDate = new Date(tempDate);
return tempDate;
}

Read more...

取至小數點第二位,不足補零 for javascript

2012年10月12日 星期五

var total =10
(total).toFixed(2);


 
結果為10.00

Read more...

強制固定表格寬度

2012年10月11日 星期四

今天遇到talbe裡的內容因為輸入字串太長,雖然table有設定長度,但是還是會發生不會自動換行

這種情況都是在輸入一連串英文會發生,這時候如果加上以下語法則可避免此問題

style= "word-break:break-all; "

不過呢?此語法不支援firefox喔,請注意!!

<html>
<head>
<title>html測試</title>
</head>
<body>
1.
<table border="1">
<tr>
<td width="100px">長度100px</td>
</tr>
</table>
2.
<table border="1">
<tr>
<td width="100px">長度100px 這是會自動換行的</td>
</tr>
</table>
3.
<table border="1">
<tr>
<td width="100px">長度100px 被亂搞aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</td>
</tr>
</table>
4.
<table border="1">
<tr>
<td width="100px" style= "word-break:break-all; ">長度100px 被亂搞aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</td>
</tr>
</table>
</body>
</html>

1.正常





長度100px

2.輸入正常中文





長度100px 這是會自動換行的

3.輸入不正常英文





長度100px 被亂搞aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

4.修正後





長度100px 被亂搞aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Read more...

10個超好用的撰寫jQuery技巧

2012年8月30日 星期四

請參考


http://ithelp.ithome.com.tw/question/10021702

Read more...

location.href與location.replace差異

2012年8月29日 星期三

今天在處理asp.net 程式,當送出頁面後用script導頁

如果用
location.href方式,導頁成功後,在按回上一頁,會出現頁面無資訊顯示問題
因為送出頁面會postback,這時瀏覽器的hristory會記錄這一頁
所以用location.href 會發生問題

要改用location.replace方式,則可避免這樣的問題
用replace可把postback這頁消除,所以頁面就正常啦



Read more...

Store Procedure 執行錯誤

2012年8月23日 星期四


今天遇到使用Oracle Store Procedrure會出現錯誤,但在Oracle SQL Developer管理工具執行是ok的,

在測試 Store Procedure過程中,遇到以下的錯誤訊息:
(1)ORA-01036: 變數名稱?號碼無效,因為參數前面多加一個@符號的緣故 oracle_command.Parameters.Add("@return_value", OracleType.VarChar, 3)
   解決之道:針對 SQL Server資料庫,執行預存程序時,參數前面要多加一個@符號,但 Oracle卻不需要,因此將@符號刪除,即可解決。

(2)ORA-06550: 第 1 行, 第 7 個欄位:
    PLS-00201: 識別字 'test_proc' 必須被宣告
    ORA-06550: 第 1 行, 第 7 個欄位:
    PL/SQL: Statement ignored
   解決之道:
   1. 賦予使用者有執行 test_proc預存程序的權限。
   2. 如果使用 test帳號建立 test_proc預存程序,而執行 test_proc預存程序的帳號為 test2,則 oracle_command.CommandText的內容要由 test_proc變成 test.test_proc。

參考來源:
http://blog.xuite.net/sugopili/computerblog/26446766-Oracle+%EF%BC%8D+Store+Procedure%E5%85%A5%E9%96%80

Read more...

各家SQL連線

2012年8月5日 星期日

不同的資料庫得使用不同的連線字串來連接,以下網站可以參加各種資料庫連結字串。
http://www.connectionstrings.com/

Read more...

在string.format裡呈現{}大刮號

2012年8月3日 星期五

在串字串時,遇到用string.format裡會有{}大刮號,但是一直無法成功,接下來直接看範例吧:

string str = string.Format(@"
$(document).ready(function(
{{
  alert('錯誤訊息:{0}');
}}
);",errormsg");


結果是只要用二次大刮號就可以在頁面上呈現喔,試試看吧。

Read more...

正規式

2012年8月2日 星期四

正規式用在表單驗證是很好用的東西,接下來看範例吧。

例:
/^[0-9]+$/
/^代表字串開始
$/代表字串結束

電話方式驗證,只允許[#,-,(,),0-9]

1.javascript方式:

d代表的是數字,\#代表允許#符號
var reg = /^[\d\#\-\(\)]+$;


 



 







2.C# 數字型態除了用d外也可用0-9,\\#代表允許#符號



string reg = "^[0-9\\#\\-\\(\\)]*$";






資料參考


http://neural.cs.nthu.edu.tw/jang/books/webprog/03jscript/reg1.asp?SessionCount=13

Read more...

做個能解決問題的人

2012年7月10日 星期二

看完這篇文章後,真的要去醒思自已工作的目的是什麼,要怎麼往上提升做個可以解決問題的人,而不要做個只懂寫code的人,以下文章寫的很不錯喔,建議大家看看


http://www.dotblogs.com.tw/jimmyyu/archive/2012/07/06/be-a-solution-provider-not-just-a-coder.aspx

Read more...

JSON教學

2012年7月8日 星期日

JSON( JavaScript Object Notation )在近幾年使用的人數已經越來越多了,早期使用AJAX時都是用XML資料,使用上比較沒這麼直覺,JSON是一個不錯的方式,這是在網路上找的JSON教學,還詳細的可以參考看看喔:

http://blog.kkbruce.net/2011/01/json.html

Read more...

jQuery.parseJSON問題

2012年7月5日 星期四

今天遇到一個問題,就是在ASP.NET後端產出json格式的資料,要在前端使用一直會出錯,查了一下發現,原來json格式外面要用單引號裡面的內容才是用雙引號,我把它反過來了,難怪會一直取不出來,以下為範例:


錯誤寫法
var obj = $.parseJSON("{'name':'neil'}");
alert(obj.name);
正確寫法
var obj = $.parseJSON('{"name":"neil"}');
alert(obj.name);

在javascript裡的宣告以下二種方式宣告都可以,不過在jQuery的JSON裡就不行囉,這點要注意啊

var name = "neil";
var name = 'neil';

Read more...

VS2010 ReportViwer 設定Tablix的RepetaterColumnHeaders為True,仍無法在每一頁重複標頭資料行?

2012年6月19日 星期二

今天利用Report Viewer工具做報表時遇到了,在做分頁時我想要固定表頭,設定了Tablix工具的RepeatColumnHeaders=True及RepateRowHeaders=True相關屬性都設定了,但是標頭永遠都只會固定在第一頁,google一下原來這是此項工具的Bug。


找到的解決方法:
在.rdlc的Xml原始檔案裡加入
RepeatOnNewpage



  
          
      After
      true //加入此設定
    
  


參考網址:http://blog.csdn.net/xfblue/article/details/6550632

Read more...

VMware 無法開啟 出現Exception 0xc0000006 (disk error while paging) has occurred.訊息

2012年6月17日 星期日

今天上班開VM 時發現無法開啟,出現以下訊息:

 VMware Workstation unrecoverable error: (vmx) Exception 0xc0000006 (disk error while paging) has occurred. A log file is available in "D:\VMPlayer\vmware.log". A core file is available in "D:\VMPlayer\vmware-vmx-2184.dmp". Please requst support and incl? the contents of the log file and core file. To collect data to s mit to VMware support, select Help > About and click "Collect Support Data". You can also run the "vm-support" script in the Workstation folder directly. We will respond on the basis of your support entitlement. 

 解決方法為:
 刪除或修改虛擬機目錄下拓展名為.vmss文件,再次啟動即可,即系統關閉後啟動。


後記:經過這樣的處理就可以了,呼...真是虛驚一場,之前一直想說VM應該是穩定性很高的產品,還是平常要做好備份以晚發生這樣的問題囉!!

Read more...

CustomValidator自訂驗證控制項

2012年6月10日 星期日

目前驗證控制項有很多,其實大部份都可以應付一般的需求,但是總是會有特別的需求,這時候就需要用到自訂驗證控制項了(CustomValidator),自訂驗證控制項可以在Client端及Server端做驗證。

接下來就以驗證mail格式實例在說明吧

1.Client端做驗證
以下是我先建立好一個TextBox以及一個必填欄位驗證(RequiredFieldValidator),都要驗證mail格式所以一定要是必填欄位,第二個證驗我加入了自訂驗證(CustomValidator)。
屬性設定說明
controltovalidate:需要驗證哪一個控制項的設定,此屬性一定要設定否則會報錯
errormessage:不通過的錯誤訊息
clientvalidationfunction="CheckMail": 要做自訂驗證的function名稱,這裡要填的是Client端的function名稱。
function裡面的驗證是在網路上找來的正規式驗證,做好這樣的設定就大功完成啦!!
在function裡面的接受參數source, args都是跟ASP.NET的驗證控制項用法一樣喔。





mail:



    


2.Server端做驗證
屬性設定說明
與Client不同之處在於,onservervalidate設定。
後端驗證裡的args.IsValid為回傳的驗證結果。

後端cs Code
    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (CheckMail(args.Value) == false)
        {
            args.IsValid = false;   //驗證結果
        }
    }

    private bool CheckMail(string ck_string)
    {
        //加入驗證內容

        return true;
    }
以上就可以做到前/後端一起驗證輸入的資料是否正確,好的驗證控制項可以阻擋垃圾資料的輸入,造成資料庫的負擔,所以這是很重要的喔!!

Read more...

== 與 === 的差異

2012年6月4日 星期一

這是javascript很特別的地方

var str="";
var boo=false;

if(str==boo)
{
  alert(true);
}
else
{
  alert(false);
}
以上程式結果為true 但是如果把程式修改成
if(str===boo)
{
  alert(true);
}
else
{
  alert(false);
}
則結果為false 這是因為三個等於是精確的比對,他連型態也會一起比對。

Read more...

int?型態

2012年5月31日 星期四

一般大家都知道int是整數型態,但是加了'?'之後就是什麼型態呢?
問號表示的是null值
 例: int x; 預設值為0 int? y; 預設值為null 應用:抓取從Xml來的資料取id

int? x = int.TryParse(doc.SelectSingeNode("id").InnerText);

if(x.HasValue)
{
  //...程式處理
  Response.Write(x.Value);//取值
}
注意: 只有宣告加?,才有HasValue屬性可用喔!!

Read more...

避免槽狀迴圈

2012年5月21日 星期一

一般我們在撰寫都習慣用

if(i!=1){
 處理事件....
}
如果遇到很多需要這樣判斷的情況,都用此方式則會造成不易閱讀 可以改成
if(!=1)
{
  break;
}
處理事情... 儘量讓程式保持在同一階層閱讀也較容易。
補充:
 contiune :跳過這段繼續往下面執行
 break:中斷這個迴圈不繼續往下執行

Read more...

[ASP.NET]Page Life Cycle整理

2012年5月11日 星期五

[ASP.NET]Page Life Cycle整理 找到二篇還不錯的文章,先筆記下來 一個ASP.NET Webform工程師,一定得知道的東西,就是頁面生命週期的順序,以及在每個事件該放什麼樣的code。 http://www.dotblogs.com.tw/marcus116/archive/2011/05/16/25156.aspx http://www.dotblogs.com.tw/hatelove/archive/2009/12/18/pagelifecycle.aspx

Read more...

asp.net重構觀念

2012年5月10日 星期四

對於初學者是很棒的文章,不可錯鐹喔,裡面有介紹到如何將程式精簡,更容易維護喔。 http://www.dotblogs.com.tw/hatelove/category/5036.aspx

Read more...

[ASP.NET] 無網址的檔案下載 - 進階研究

[ASP.NET] 無網址的檔案下載 - 進階研究 ASP.NET檔案下載總共有四種方式,分別為 1.HttpResponse.TransmitFile 2.HttpResponse.WriteFile 3.HttpResponse.BinaryWrite 4.HttpResponse.Redirect 請參考:http://gogo1119.pixnet.net/blog/post/27407222

Read more...

表單驗證方式 MICROSOFT ANTIXSS LIBRARY

http://blog.kkbruce.net/2010/11/microsoft-antixss-library-31-upgrade-40.html#.T6tmKuhDu8A

Read more...

如何讓DropDownList的第一位是空白值

2012年5月8日 星期二

DropDownList值從資料庫取出時,如果是搜尋用條件需要加入搜尋全部條件,這時就需要讓第一位是空值

使用方式:
在DataBind()之後加入

DRList.Items.Insert(0,new ListItem("--請選擇狀態--","string.Empty"));

這樣就可以順利在第一個位置加入空值囉。

Read more...

[ASP.NET] 驗證控制項 / Validation Control

2012年5月7日 星期一



1.使用驗証控制項提供使用者輸入資料驗証,使用者控制項分為以下:
CompareValidator使用比較運算子,將使用者的資料與固定數值相比。此外,也可以與相同網頁內其他控制項的屬性數值相比。
CustomValidator利用程式定義之驗證邏輯來檢查使用者資料的正確性。當其他的驗證元件無法執行所需的驗證,以及當你想要使用自訂的程式碼來驗證輸入的時候,便可以使用這個驗證元件。
RangeValidator確保使用者的資料落在指定的範圍內。上限和下限可以數字、字串或日期加以表示。
RegularExpressionValidator使用規則運算式所定義的樣式來驗證使用者的資料。
RequiredFieldValidator確保使用者為必要欄位填入數值。


Read more...

ASP.NET安全程式寫作

2012年4月25日 星期三

ASP.NET安全程式寫作http://knowledge.twisc.ntust.edu.tw/doku.php?id=3%E4%BC%BA%E6%9C%8D%E7%AB%AF%E5%AE%89%E5%85%A8:3-3%E5%AE%89%E5%85%A8%E7%A8%8B%E5%BC%8F%E7%A2%BC%E5%AF%AB%E4%BD%9C:ASP.NET%E5%AE%89%E5%85%A8%E5%AF%AB%E4%BD%9C

Read more...

資料庫連結四大步驟

這四大步驟,任何跟資料庫連結的語法都適用喔


第一, 連接資料庫(Connection)。
第二, 執行SQL指令(又分成兩大類:取出資料、或是寫入資料)。
第三, 自由發揮(通常這一段是畫面或流程的設計)。
第四, 關閉資源(如:關閉資料庫的連接)。



參考連結http://www.dotblogs.com.tw/mis2000lab/archive/2008/08/15/4918.aspx

Read more...

C# ref/out 關鍵字與傳遞參考型別參數

C# 有 ref/out 關鍵字可以用來改變方法參數的傳遞機制,將原本的傳值(by value)改為傳址(by reference),因為有時候會碰到這樣的需求,提供給某方法的引數會希望輸出處理過的結果並回存到原本的變數上,此時就得用傳址參數 -- ref 或 out 參數來完成,兩者極為相似但有些許不同和需要注意的地方,以下摘錄自 MSDN Library:

以 ref 參數傳遞的引數必須先被初始化,out 則不需要。
out 參數要在離開目前的方法之前至少有一次指派值的動作。
若兩個方法僅有 ref、out 關鍵字的差異,在編譯期會視為相同方法簽章,無法定義為多載方法。



詳細內容請參考
http://www.dotblogs.com.tw/hunterpo/archive/2010/05/02/14978.aspx


Read more...

.net資料型別

2012年4月16日 星期一

.NET 資料型別

簡短名稱
.NET類別
型別
寬度
範圍(位元)
byte
Byte
不帶正負號的整數
8
0255
sbyte
SByte
帶正負號的整數
8
-128127
Int
Int32
帶正負號的整數
32
-2,147,483,6482,147,483,647
uint
UInt32
不帶正負號的整數
32
04,294,967,295
short
Int16
帶正負號的整數
16
-32,76832,767
ushort
UInt16
不帶正負號的整數
16
065,535
long
Int64
帶正負號的整數
64
-922,337,203,685,477,508922,337,203,685,477,507
Ulong
UInt64
不帶正負號的整數
64
018,446,744,073,709,551,615
float
Single
單精度浮點數型別
32
-3.402823e383.402823e38
double
Double
雙精度浮點數型別
64
-1.79769313486232e3081.79769313486232e308
char
Char
單一Unicode字元
16
用於文字中的Unicode符號
bool
Boolean
邏輯布林型別
8
truefalse
object
Object
所有其他型別的基底型別


string
String
字元的順序


decimal
Decimal
29位有效數字表示十進位的精確小數型別或整數型別
128
±1.0×10e-28至±7.9×10e28

Read more...

javascript取得今天日期

2012年3月14日 星期三



var getDate  = new Date();
var toDay = getDate.getYear() + "-" +  (getDate.getMonth()+1) + "-" + getDate.getDate() + " " + getDate.getHours() + ":" + getDate.getMinutes() + ":" + getDate.getSeconds() ;
getDate(): 一月份中的第幾天
getMonth(): 一年中的第幾月(從0開始計算,所以要加1)
getYear(): 西元年份
getDay(): 一星期中的日期
getHours(): 一天中的小時數
getMinutes(): 一天中的分鐘
getSeconds(): 一天中的秒數
getTime(): 從1970年一月一日以來的千分之一秒數

Read more...

用sql語法檢視TABLE大小

2012年3月11日 星期日


declare @id int
declare @type character(2)
declare @pages int
declare @dbname sysname
declare @dbsize dec(15,0)
declare @bytesperpage dec(15,0)
declare @pagesperMB dec(15,0)

create table #spt_space
(
objid int null,
rows int null,
reserved dec(15) null,
data dec(15) null,
indexp dec(15) null,
unused dec(15) null
)

set nocount on

-- Create a cursor to loop through the user tables
declare c_tables cursor for
select id
from sysobjects
where xtype = 'U'

open c_tables

fetch next from c_tables
into @id

while @@fetch_status = 0
begin

/* Code from sp_spaceused */
insert into #spt_space (objid, reserved)
select objid = @id, sum(reserved)
from sysindexes
where indid in (0, 1, 255)
and id = @id

select @pages = sum(dpages)
from sysindexes
where indid < 2
and id = @id
select @pages = @pages + isnull(sum(used), 0)
from sysindexes
where indid = 255
and id = @id
update #spt_space
set data = @pages
where objid = @id


/* index: sum(used) where indid in (0, 1, 255) - data */
update #spt_space
set indexp = (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
- data
where objid = @id

/* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */
update #spt_space
set unused = reserved
- (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
where objid = @id

update #spt_space
set rows = i.rows
from sysindexes i
where i.indid < 2
and i.id = @id
and objid = @id

fetch next from c_tables
into @id
end

select TableName = (select left(name,60) from sysobjects where id = objid),
Rows = convert(char(11), rows),
ReservedKB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),
DataKB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),
IndexSizeKB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
UnusedKB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')

from #spt_space, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
order by reserved desc
drop table #spt_space
close c_tables
deallocate c_tables

Read more...

xpath,namespace用法

2012年3月7日 星期三

local-name()用法是忽略namespace
ldims:extension
.SelectSingleNode("//*[local-name='extension']")

在抓xml節點時如果有namespace會需要一些技巧才抓的到節點
sample.xml




方法1.

        XmlDocument oXmlLOMDoc = new XmlDocument();
        oXmlLOMDoc.Load("sample.xml");
        XmlNodeList oLOMList = oXmlLOMDoc.SelectNodes("//*[local-name() = 'lom'] ");
        foreach (XmlNode oList in oLOMList)
        {
            Response.Write(oList.OuterXml);
        }


方法2.
XmlDocument oXmlLOMDoc = new XmlDocument();
        oXmlLOMDoc.Load("sample.xml");

        XmlNamespaceManager xnmgr = new XmlNamespaceManager(oXmlLOMDoc.NameTable);
        xnmgr.AddNamespace("xmlns", "http://www.imsglobal.org/xsd/imsmd_rootv1p2p1");
        XmlNodeList oLOM = oXmlLOMDoc.SelectNodes("/XT_LOM/lom", xnmgr);


多節點


----
......
抓取lom pk



抓取manifest裡identifier值
oList.Attributes["identifier"].Value;


Read more...

使用Report Viewer 2008列印報表時,出現Unable to load client print control的錯誤訊息

2012年2月10日 星期五

今天遇到了用Report Service開發出來的報表不以列印,會出現Unable to load client print control的錯誤訊息
查了一下,原來是微軟更新檔的問題,我找到的作法是

  1. 檢查報表伺服器的版本是否為9.00.3073 或 9.00.3282 或更新版本。
    • 若版上比上述還舊,需安裝953752 SQL Server 2005 Service Pack 2 的累積更新程式套件 9。
  2. 檢查Report Viewer控制項的版本。作法如下:
    • 在用戶端開啟報表並檢視原始碼。
    • 於原始碼中搜尋Reserved.ReportViewerWebControl.axd字串,確認版本是否為Version=9.0.30729。
    • 若版本比上述還舊,需於報表伺服器上安裝Report Viewer 2008 SP1的可轉散發套件,安裝完畢之後必須執行iisreset重新啟動IIS。
  3. 在用戶端重新列印報表試試看,若能無法列印,繼續下列步驟。
  4. 更新用戶端的Report Viewer控制項。作法如下:
    • 於命令式窗中直行regsvr32 C:\Windows\system32\RSClientPrint.dll。
    • 刪除C:\Windows\system32\路徑中RSClientPrint.dll 和 RSClientPrint*.rll檔案。
    • 刪除C:\Windows\Downloaded Program Files中RSClient*.rll。


Read more...

jQuery學習筆記連結

2012年2月1日 星期三

最近要開始來學jQuery了
這是在網路上找到的教學的網址:http://www.dotblogs.com.tw/topcat/archive/2009/12/03/12276.aspx

Read more...