2011年10月28日 星期五

[轉自ptt]繪圖電腦菜單

作者: david429 () 看板: PC_Shopping
標題: [建議] 繪圖、剪輯、後製、3D繪圖、算圖機
時間: Tue Apr 12 18:48:46 2011

這算是小弟一直長久以來想發的文,之所以會發這篇文章,
是因為發現板上比較缺乏對於動畫與繪圖這方面詳細敘述且正確的菜單。
也曾經因此跟不少亂開菜單的板友戰文過。

尤其在看見神龍大也有電腦菜單這方面的需求時,
我不禁滴下了一滴眼淚,了解即使是神也是會有需求的。

便決定好好的寫一篇關於繪圖、3D動畫、算圖,多媒體相關菜單這方面的文章。

文章內容多經過研究與測試才有的結論,
若是有任何敘述不詳盡,不正確的地方,還請各位鄉民指教。

----------------------------------------------------------------------------
以下分為  繪圖、剪輯、後製、3D、算圖(運算) 等五大類電腦菜單機種去說明
----------------------------------------------------------------------------

1.基本繪圖機  PhotoShop  Illustrator

CPU: ★
此類型機種,CPU一般常態負荷量不會太吃緊,四核四執行續 就很夠用了。

記憶體: ★★

繪製大型圖檔、多圖層、或是多開檔案時非常吃記憶體。
在Windows中,當記憶體不夠用時,會將緩存暫存至硬碟上,
硬碟的讀寫與操作時間就是讓電腦運行變慢的主因,所以記憶體越大越好。
當然記憶體不是絕對必須,要看你所繪製的圖檔大小與圖層多寡。

硬碟: ★★

假如常常因為存檔讀檔花很多時間的話,建議可以加一顆SSD,
設為快取專用,與工作檔案儲存用。

顯示卡: ★

顯示卡部分其實中階低階款即可,單純繪圖的話,對這部分不要求。
---------------------------------------------------------------------------
2.剪輯專用機  Premiere  Vegas  Avid  Edius

CPU:  ★★

此類型機種,在輸出時常常會需要壓縮會需要到四核八執行續,或是六核、八核。
但是主要還是看硬碟的速度是否跟得上。

記憶體: ★★

在這些軟體中,有會將Preview的部分,Cache在記憶體中,
記憶體越大,可以Preview的長度越長,但不是絕對必須。

硬碟:  ★★★

大部分影片在輸出時,因為都會剪很多Layer,所以大都是卡在硬碟速度,
尤其是Full HD,隨隨便便就10幾G的檔案,非常吃硬碟。
且影像檔都很大,所以建議硬碟容量要大,速度要快。

可以分兩顆以上的磁碟?[1mA一顆儲存用,一顆放當前工作檔案用,
工作檔案用的那顆磁碟,速度越快越好,可以組 Raid 0,
或是裝SSD,存取速度對於輸出速度上有決定性的影響!

顯示卡:  ★

顯示卡部分其實中階低階款即可,單純剪輯的話,對這部分不要求。
個人建議是 Nvidia家的顯示卡,主要是 CUDA 的技術,
Adobe系列在壓縮輸出方面可以幫助不少,在此就不詳述了。
---------------------------------------------------------------------------
3.後製、動畫機  AfterEffects Nuke Combustion

CPU:  ★★★

此類型機種,在輸出時常常會需要壓縮會需要到四核八執行續,或是六核、八核。
但是主要還是看硬碟的速度是否跟得上。

記憶體:  ★★★

在AE中,Preview的部分,是直接Cache在記憶體中,
記憶體越大,可以Preview的長度越長,建議一定要裝到滿,這方面不能省。

硬碟: ★★

大部分影片在輸出時,因為都會剪很多Layer,所以大都是卡在硬碟速度,
且影像檔都很大,所以建議硬碟容量要大,速度要快。
可以分兩顆以上的磁碟,一顆儲存用,一顆放當前工作檔案用,
工作檔案用的那顆磁碟,速度越快越好,可以組 Raid 0,
或是裝 SSD存取速度對於輸出速度上有決定性的影響!

顯示卡: ★★

顯示卡部分其實中階款即可,單純AE的話,對這部分不要求,
不過AE會吃很多特效,依照外掛不同主要使用CUDA的技術與OPENGL,
顯示卡還是不宜買太差的。

還是老話一句,個人建議是 Nvidia家的顯示卡,

---------------------------------------------------------------------------
4.3D動畫、美術製作、室內設計繪圖機  3dsMax  Maya  Softimage

CPU: ★★★
算圖與操作指令時CPU有決定性的影響,多半的外掛與指令都還是只有支援單執行續,
算圖都有支援多核心算圖,建議執行續越多越好,四核八執行續,或是六核、八核。
以 i5 750(四核四執行續)比i7 860(四核八執行續)同時脈下,算圖效能比約1:1.5。

記憶體: ★★★

在3D中影響到操作上速度主要是  Shader > 貼圖量 > 動畫 > 物件量 > 面數

Shader是指Viewport下的光影顯示,由顯示卡運算,
Viewport時的貼圖顯示量與面數則是儲存在 "顯示卡的記憶體中",
動畫與物件量,則是儲存在電腦的記憶體中,

所以顯示卡越快,顯示記憶體越大,對於操作時的流暢度會有越大的幫助,
而記憶體越大,當物件量,與動畫越多時,越可以提共順暢的操作,
假如當動畫量大到超出記憶體,則會緩存在硬碟上,這時SSD就非常有幫助了。

硬碟:  ★

硬碟建議買越大越好,輸出的圖檔跟分層隨便便就超過100GB以上,
假如有用大量的粒子特效(Cache),會需要高速的硬碟與大量的硬碟空間,
建議有預算的話可買顆SSD當作工作碟來用。
假如只是純粹3D建模,硬碟普通就可以了。

顯示卡:  ★★★

別再相信那些亂開菜單的人,說做3D就要用專業繪圖卡的說法
除非你有確定使用的軟體,對於繪圖卡有全面性且必要性的支援,
不然買中高階遊戲卡就好,面數不高的話中階即可。

做3D一定要用繪圖卡,那已經是五六年前的事情了!
現在很多遊戲卡的效能已經遠遠超越相同價位的繪圖卡了。

顯示卡越快,顯示記憶體越大,對於操作時的流暢度會有越大的幫助,

顯示卡的話,一定要買 Nvidia家的。
對於3D方面,已經有很多決定性的功能,都只有Nvidia家才有完全支援。

首先,Max 2012、Maya 2012都有內建 MassFX (PhysX)
這是一個"即時物理模擬"的系統,Max 2011也有 PhysX 的 Beta 可以使用
這之中 Realtime 的物理模擬,與布料模擬。

即時的模擬會是動畫未來的需求與功能之一。

---------------------------------------------------------------------------
5.3D運算機  3dsMax  Maya  Softimage  Realflow  Houdini

CPU:  ★★★

運算時CPU有決定性的影響,算圖都有支援多核心算圖,
建議執行續越多越好,四核八執行續,或是六核、八核。

但還有許多運算方面,像是 Maya nCloth 或是 Max Hairfarm在模擬時
僅使用單一執行續,不過3D運算機還是越多核心越好。

以 i5 750(四核四執行續)比i7 860(四核八執行續)同時脈下,算圖效能比約1:1.5。

針對算圖而言,買專門的 RenderFarm 機型 是一個浪費錢的決定,
除了可以放在機櫃中,與微乎其微的穩定性差異外,沒有任何的好處,

算圖時CPU超頻,CPU頂多熱當外,是不會"算錯"的,一般錯誤的觀念,以為會算錯圖,
在穩定的超頻狀況下,超頻往往可以用更節省的成本,去達到更高的效益。
以 Intel i7 860 而言,大概可以穩定超頻達1.3倍的效能,當然還是看體質。

記憶體:  ★★

記憶體越大越好,算圖時,所有的貼圖都會預載到記憶體中,
模擬時的動畫,也會儲存到記憶體中。
當記憶體不夠時,就會吃到硬碟上,吃到硬碟上,算圖的效率就會大大降低。

硬碟:  ☆

硬碟影響不大,網路算圖時甚至不吃本機硬碟存取,除非貼圖量超過記憶體能負荷的量。

顯示卡:  ☆

要是不需要操作,單純做運算的話,可以使用內顯即可。
--------------------------------------------------------------------------

 比較圖表
┌────┬────┬────┬────┬────┬────┐
│        │  繪圖  │  剪輯  │  後製  │ 3D繪圖 │  算圖  │
├────┼────┼────┼────┼────┼────┤
│  CPU   │   ★   │  ★★  │ ★★★ │ ★★★ │ ★★★ │
├────┼────┼────┼────┼────┼────┤
│ 記憶體 │  ★★  │  ★★  │ ★★★ │ ★★★ │  ★★  │
├────┼────┼────┼────┼────┼────┤
│  硬碟  │  ★★  │ ★★★ │  ★★  │   ★   │   ☆   │
├────┼────┼────┼────┼────┼────┤
│ 顯示卡 │   ★   │   ★   │  ★★  │ ★★★ │   ☆   │
├────┼────┼────┼────┼────┼────┤
│建議預算│ $20000 │ $25000 │ $30000 │ $30000+│ $20000 │
└────┴────┴────┴────┴────┴────┘

總結:

本篇中並無詳細敘述菜單,主要是針對多媒體動畫這方面類型需求,
給有需要的人一點參考的空間,菜單的話由眾多的鄉民提供則是最好不過了

我做動畫將近六年了,目前在動畫公司,主要是撰寫外掛與解決效能方面的問題。
以上許多都是經過實際測試得到的結果 ,藉以給給裝機的人作為參考。

我並不是 Nvidia 的粉絲,以前也用Ati9200、9550、X800...
不過在 Nvidia 開始重視多媒體這塊市場後,他們寫了許多非常有幫助的系統與支援
因此才會大推 Nvidia。

以往物理模擬要花20個小時運算的東西,如今都Realtime了,等待的時間節省不少。

2011年10月12日 星期三

javasrcipt限制textbox內容為數字

1.body之間:


script language="javascript" type="text/javascript"

 function   NumberText()
  {
  if(!(((window.event.keyCode>=48)&&(window.event.keyCode<=57))||(window.event.keyCode==13)||(window.event.keyCode==46)||(window.event.keyCode==45)))
  {
        window.event.keyCode=0;
  }
  }

/script


2.textbox內

asp:TextBox ID="txtInputChtno" onkeypress="NumberText()"  runat="server"

3.aspx.cs後端程式碼 事件內(ex: PageLoad)
txtInputChtno.Attributes.Add("onkeypress", "NumberText()");

2011年10月4日 星期二

2011年9月29日 星期四

[轉]ORACLE DUAL表详解


ORACLE DUAL表详解

2008-05-06 04:22:01.0      来源:e800数据库频道         作者:
关键词:  数据库     ORACLE     rac     RAC     ORACLE   
看itpub上一个帖子:http://www.itpub.net/viewthread.php?tid=981212&extra=&page=1
想学习以下Oracle dual表。

Oracle Asktom 的解释:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388


下面来源: http://wzhcn.spaces.live.com/blog/cns!FBA7EF989C66522E!515.entry

1、DUAL表的用途
Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中
--查看当前连接用户
SQL> select user from dual;
USER
------------------------------
SYSTEM
--查看当前日期、时间
SQL> select sysdate from dual;
SYSDATE
-----------
2007-1-24 1
SQL> select to_char(sysdate,''yyyy-mm-dd hh24:mi:ss'') from dual;
TO_CHAR(SYSDATE,''YYYY-MM-DDHH2
------------------------------
2007-01-24 15:02:47
--当作计算器用
SQL> select 1+2 from dual;
1+2
----------
3
--查看序列值
SQL> create sequence aaa increment by 1 start with 1;
SQL> select aaa.nextval from dual;
NEXTVAL
----------
1
SQL> select aaa.currval from dual;
CURRVAL
----------
1

2、关于DUAL表的测试与分析
DUAL就是个一行一列的表,如果你往里执行insert、delete、truncate操作,就会导致很多程序出问题。结果也因sql*plus、pl/sql dev等工具而异。
--查看DUAL是什么OBJECT
--DUAL是属于SYS schema的一个表,然后以PUBLIC SYNONYM的方式供其他数据库USER使用.
SQL> select owner, object_name , object_type from dba_objects where object_name like ''%DUAL%'';
OWNER OBJECT_NAME OBJECT_TYPE
---------- ----------------- ------------------
SYS DUAL TABLE
PUBLIC DUAL SYNONYM

--查看表结构,只有一个字段DUMMY,为VARCHAR2(1)型
SQL> desc dual
Name Type Nullable Default Comments
----- ----------- -------- ------- --------
DUMMY VARCHAR2(1) Y

--DUAL表的结构:
create table SYS.DUAL
(
DUMMY VARCHAR2(1)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 16K
next 16K
minextents 1
maxextents 505
pctincrease 50
);

/*
很是困惑,ORACLE为什么要用VARCHAR(1)型,用CHAR(1)难道不好么?从这样的表结构来看,DUAL表设计的目的就是要尽可能的简单,以减少检索的开销。
还有,DUAL表是建立在SYSTEM表空间的,第一是因为DUAL表是SYS这个用户建的,本来默认的表空间就是SYSTEM;第二,把这个可能经常被查询的表和用户表分开来存放,对于系统性能的是有好处的。
有了创建了表、创建了同义词还是不够的。DUAL在SYS这个Schema下面,因此用别的用户登录是无法查询这个表的,因此还需要授权:
grant select on SYS.DUAL to PUBLIC with grant option;
将Select 权限授予公众。
接下来看看DUAL表中的数据,事实上,DUAL表中的数据和ORACLE数据库环境有着十分重要的关系(ORACLE不会为此瘫痪,但是不少存储过程以及一些查询将无法被正确执行)。
*/

--查询行数
--在创建数据库之后,DUAL表中便已经被插入了一条记录。个人认为:DUMMY字段的值并没有什么关系,重要的是DUAL表中的记录数
SQL> select count(*) from dual;
COUNT(*)
----------
1

SQL> select * from dual;
DUMMY
-----
X

--插入数据,再查询记录,只返回一行记录
SQL> insert into dual values (''Y'');
1 row created.
SQL> commit;
Commit complete.
SQL> insert into dual values (''X'');
1 row created.
SQL> insert into dual values (''Z'');
1 row created.
SQL> commit;
Commit complete.
SQL> select count(*) from dual;
COUNT(*)
----------
4
SQL> select * from dual;
DUMMY
-----
X

/*
--假我们插入一条数据,DUAL表不是返回一行,而是多行记录,那会是什么结果呢?
SQL> insert into dual values(''Y'');
1 行 已插入
SQL> commit;
提交完成
SQL> select * from dual;
DUMMY
-----
X
Y
SQL> select sysdate from dual;
SYSDATE
-----------
2004-12-15
2004-12-15

这个时候返回的是两条记录,这样同样会引起问题。在通过使用
select sysdate into v_sysdate from dual;
来获取时间或者其他信息的存储过程来说,ORACLE会抛出TOO_MANY_ROWS(ORA-01422)异常。
因此,需要保证在DUAL表内有且仅有一条记录。当然,也不能把DUAL表的UPDATE,INSERT,DELETE权限随意释放出去,这样对于系统是很危险的
*/

--把表截掉
SQL> truncate table dual;
Table truncated.
SQL> select count(*) from dual;
COUNT(*)
----------
0
SQL> select * from dual;
no rows selected
SQL> select sysdate from dual;
no rows selected

--试着把DUAL表中的数据删除,看看会出现什么结果:
SQL> delete from dual;
1 行 已删除
SQL> select * from dual;
DUMMY
-----
SQL> select sysdate from dual;
SYSDATE
-----------
/*
我们便取不到系统日期了。因为,sysdate是个函数,作用于每一个数据行。现在没有数据了,自然就不可能取出系统日期。
这个对于很多用
select sysdate into v_sysdate from dual;
这种方式取系统时间以及其他信息的存储过程来说是致命的,因为,ORACLE会马上抛出一个NO_DATA_FOUND(ORA-01403)的异常,即使异常被捕获,存储过程也将无法正确完成要求的动作。
*/

--对于DELETE操作来说,ORACLE对DUAL表的操作做了一些内部处理,尽量保证DUAL表中只返回一条记录.当然这写内部操作是不可见的
--不管表内有多少记录(没有记录除外),ORACLE对于每次DELETE操作都只删除了一条数据。
SQL> select count(*) from dual;
COUNT(*)
----------
2
SQL> delete from dual;
1 行 已删除
SQL> commit;
提交完成
SQL> select count(*) from dual;
COUNT(*)
----------
1

/*
附: ORACLE关于DUAL表不同寻常特性的解释
There is internalized code that makes this happen. Code checks that ensurethat a table scan of SYS.DUAL only returns one row. Svrmgrl behaviour is incorrect but this is now an obsolete product.
The base issue you should always remember and keep is: DUAL table should always have 1 ROW. Dual is a normal table with one dummy column of varchar2(1).
This is basically used from several applications as a pseudo table for getting results from a select statement that use functions like sysdate or other
prebuilt or application functions. If DUAL has no rows at all some applications (that use DUAL) may fail with NO_DATA_FOUND exception. If DUAL has more than 1 row then applications (that use DUAL) may fail with TOO_MANY_ROWS exception.
So DUAL should ALWAYS have 1 and only 1 row
*/

DUAL表可以执行插入、更新、删除操作,还可以执行drop操作。但是不要去执行drop表的操作,否则会使系统不能用,数据库起不了,会报Database startup crashes with ORA-1092错误。

3、如果DUAL表被“不幸”删除后的恢复:
用sys用户登陆。
创建DUAL表。
授予公众SELECT权限(SQL如上述,但不要给UPDATE,INSERT,DELETE权限)。
向DUAL表插入一条记录(仅此一条): insert into dual values(''X'');
提交修改。
--用sys用户登陆。
SQL> create pfile=’d:\pfile.bak’ from spfile
SQL> shutdown immediate
--在d:\pfile.bak文件中最后加入一条:replication_dependency_tracking = FALSE
--重新启动数据库:
SQL> startup pfile=’d:\pfile.bak’
SQL> create table “sys”.”DUAL”
( “DUMMY” varchar2(1) )
pctfree 10 pctused 4;
SQL> insert into dual values(‘X’);
SQL> commit;
SQL> Grant select on dual to Public;
授权成功。

SQL> select * from dual;
D
-
X

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL>

--OK, 下面就可以正常使用了。 

2011年9月28日 星期三

BACKGROUNDWORK

BACKGROUNDWORK REF
http://www.dotblogs.com.tw/yc421206/archive/2009/02/15/7174.aspx

2011年9月23日 星期五

[轉]C#-.NET計算運算時間


C#-.NET計算運算時間

進行研究、程式、演算法的開發時,
常常會需要計算運算時間,
.NET提供了不錯,且方便的類別工具(Stopwatch)來進行時間的計算。


2011年9月1日 星期四

[轉]在Oracle Form中,如何实现自动编号(行号)的功能


在Oracle Form中,如何实现自动编号(行号)的功能

方法一、
只需要将序号定义成公式,并将公式设置为:get_block_property('block_name',current_record) 就可以实现了,或者把这行语句放到“When-Create-Record”触发器中。
缺点:增改删时,行号不能自动刷新。
方法二、
block的三个触发器中添加相应的代码:
Key-Crerec:
DECLARE
LINE NUMBER;
BEGIN
LINE := :SYSTEM.CURSOR_RECORD;
LOOP
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN 
EXIT; 
ELSE
NEXT_RECORD; 
:blk.ID := :SYSTEM.CURSOR_RECORD + 1; 
END IF; 
END LOOP;
GO_RECORD(LINE);
CREATE_RECORD;
:blk.ID := :SYSTEM.CURSOR_RECORD;
END;
Key - Delrec:
DECLARE
LINE NUMBER;
BEGIN
DELETE_RECORD;
LINE := :SYSTEM.CURSOR_RECORD;
LOOP 
:blk.ID := :SYSTEM.CURSOR_RECORD; 
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN 
EXIT; 
ELSE 
NEXT_RECORD; 
END IF; 
END LOOP;
GO_RECORD(LINE);
END;
When - Create - Record:
:blk.ID := :SYSTEM.TRIGGER_RECORD;
缺点:对于记录数很少的table适用,当table中的记录很多时,由于使用了循环操作,所以会影响效率。