2011年3月28日 星期一

善用API

除非有比API更快速的演算否則請善用底層API
以下將會慢慢紀錄收集下去


養成習慣

  • 當你對API不熟時,養成一種習慣,遇到問題實,可以先看API文件,別急著實作演算出來。
  • 有些API演算效能不好,這些需要經驗,如Math系列的取絕對值,這些是可以在網路上搜尋。
  • 這些都是可以做實驗驗證的。
  • API利用得當將使你少寫很多碼,也使你程式簡潔許多。

計算兩點距離
 Point.distance(pt1, pt2);



String的API應用得好遠比你自己寫for迴圈還快,內層API是開發flashPlayer的語言寫出來的,若你用AS3來跑等於多了一層包覆,將會慢了許多。

Pixel Bender RGB 調整Demo

//Pixel Bender 檔名 RGB.pbj

<languageVersion : 1.0;>
kernel RGBFilter
<   namespace : "jt.com.tw";
    vendor : "jt";
    version : 1;
    description : "";
>
{
    input image4 src;
    output pixel4 dst;
    //parameter的<>是可無的,有的話是限制輸入數值
    parameter float amount
    <
     minValue: 0.0;
     maxValue: 1.0;
     defaultValue: 0.5;
    >;
    parameter float red
    <
    minValue: -1.0;
    maxValue: 1.0;
    defaultValue: 0.0;
    >;
    parameter float green
    <
    minValue: -1.0;
    maxValue: 1.0;
    defaultValue: 0.0;
    >;
    parameter float blue
    <
    minValue: -1.0;
    maxValue: 1.0;
    defaultValue: 0.0;
    >;
    
    void
    evaluatePixel()
    {       
        //取樣32bit       
        //old method
        dst = sampleNearest(src,outCoord());       
        dst.r +=  (red*amount);
        dst.b +=  (green*amount);
        dst.g +=  (blue*amount);        
    }
}
//Flex 程式碼如下

2011年3月26日 星期六

Pixel Bender 核心規格 - Kernel metadata

Kernel的後設標籤(Kernel metadata)
原文:
The first portion of the kernel definition is the kernel metadata, a series of name-value pairs enclosed in angle brackets:
  • 第一部分定義的是kernel的metadata部分,由一系列的name:value構成。
<
 name1 : value1;
 name2 : value2;
 ...
>;

Pixel Bender 核心規格 - Kernel Syntax

核心語法(Kernel Syntax)
  • Pixel Bender Kernel Syntax是由<>加上一些字串所組成。
<languageVersion : 1.0;>
 kernel name
<
 kernel metadata pairs
>
{
 kernel members
}
原文:
Every kernel must begin with the languageVersion statement, which identifies the version of the Pixel Bender kernel language in which this kernel is written, followed by the kernel definition.
  • 每一個核心需要在languageVersion中宣告Pixel Bender Kernel語言的版本。

使用Piex Bender 運行在Flash Player上注意事項

Using Pixel Bender with Flash Player
將Piex Bender使用在Flash Player上需注意:

原文:
  1. The preprocessor symbol AIF_FLASH_TARGET is defined to be 1.
  2. Flash Player always uses 1x1 square pixels. The function pixelSize() always returns (1.0, 1.0), and pixelAspectRatio() always returns 1.0.
  3. The selection operator (?:) can be used only to select between two constants or variables.
  4. Pixel Bender images have 32 bits per channel, but graphics in Flash Player 10 have only 8 bits per channel. When a kernel is run in Flash Player, the input image data is converted to 32 bits per channel and then converted back to 8 bits per channel when kernel execution is complete.
  5.  The only available flow-control statements are if and else.
  6. The following are not supported:
   Region functions .
   Custom support functions and libraries.
   Dependent values.
   Arrays.
   The Pixel Bender graph language.
  1. 預先處理符號 AIF_FLASH_TARGET 需被定義為1。
  2. Flash Player只會使用 1x1方形像素。pixelSize()總是回傳(1.0,1.0)而 pixelAspectRatio() 總是回傳1.0。
  3. 運算子 ?:只能用於選擇常數或是變數。
  4. Pixel Bender圖像每一通道有32bit,但圖形在Flash Player 10每通道只有8bit。當Kernel運行在Flash Player時,輸入圖像的資料將轉換成每通道32bit,當kernel執行完成將會轉回成每通道8bit。
  5. 用於Flash Player上時,流程控制只能使用if 與 else
  6. 下列是不支持的
  Region函式。
  客制化函式與類別庫。
  Dependent values。
  陣列。
  Pixel Bender的圖形語言。


Pixel Bender 簡介

Pixel Bender簡介
Pixel Bender核心語言是一種C語言的延伸,使用於圖像處理。他是基於GLSL,而GLSL又是基於C語言的,任何C語言的程式員因該會很熟悉。如果你有OpenGL/GLSL的背景你會發現一個Pixel Bender的程式,他類似一個fragment shader(片段著色器)。

  • Pixel Bender一定要有一個evaluatePixel() function,運行是由此開始的。
Piexl Bender 執行時期引擎是集成客戶端的應用,能將Piexl Bender引入Photoshop 、After Effects、Flash Player。
  • Piexl Bender編寫好程序後可以存成PBK檔,這個PBK檔可以用於Photoshop、After Effects。
  • PBK編譯後成為PBJ能用於Flash Playerm。

2011年3月23日 星期三

關於字串處理

有一段URLhttp://www.blogger.com/index.htm

l請取出index.html這段字串。

做了一些測驗,測驗的程式碼如下:

2011年3月14日 星期一

JAVA開發中常見名詞

JAVA開發中常見名詞

在學習JAVA知識領域中,遇到了許多名詞,常常讓自己搞不懂,其實時如果直接看到程式碼時就會,啊~原來是這個喔!但由於在閱讀其他Java FrameWork常常讓人搞不懂這個名詞到底再說什麼東西,因此將這些名詞其紀錄下來。


JavaBeans
  • JavaBeans只是一個形容詞,指的就是符合Java開發規範的Class。
  • 在JavaSE中符合JavaSE的規範就是JavaSE的JavaBeans,在JSP有JSP裡的JavaBeans,EJB有EJB的JavaBeans。
  • 簡單說就是照Java規定寫出來的Class就稱做JavaBeans。
參考資料
 維基百科
 蔡煥麟先生的網站

POJO (Plain Ordinary Java Object ,簡單平常的JAVA物件)
  • POJO普通的Java類別,其實他就是JavaBean。
參考資料
 維基百科


CGI(Common Gateway Interface) 公共閘道介面
  • 簡單說是一個介面,提供Server的服務給其他應用程式操作,一般常指伺服器提供給瀏覽器操作的介面程式。

Java Servlet,(改良的CGI)
  • 因傳統CGI效能不彰,因此JAVA設計Servlet用來替代傳統CGI的後端服務。
參考資料
維基百科Servlet


JSP (Java Server Pages),Servlet的模板
  • 因Servlet處理HTML頁面標籤上不理想,因此出現了JSP。
  • 其實JSP也是一種Servlet。

Servlet、JSP運行容器
  • Java Servlet、JSP運行需要容器,這個容器有如JBoss、Tomcat、EJB。

JDBC (Java Database Connectivity),資料庫基礎連接
  • JDBC是Java規定的存取資料庫API。
  • 目前大部分主流資料庫都有資源JDBC,如MySQL。
  • 使用JDBC存取MySQL需要MySQL的驅動,可以從MySQL官網取得,這個驅動是一個.jar檔。
DBCP (Database Connection Pool),連接池
  • 一種資料庫效能的處理方式。

DDL (Data Definition Language),資料庫定義語言
  • 涉及資料庫結構、表結構的SQL敘述。
  • 如 CREATE DATABSE、CREATE TABLE、DROP DATABASE、DROP TABLE。
DML (Data Manufacture Language)資料庫操作語言
  • 涉及資料操作的SQL敘述。
  • 如 INSERT、DELETE、UPDATE、SELECT。

DAO (DataBase Access Object),資料庫操作物件
  • 一個Class,內容只負責資料庫操作。
DAO層
  • 泛指資料庫物件操作的層次。


B/S模式 (Browser/Server Model)
  • 指的是不需要在用戶端安裝單機程式,操作都是透由瀏覽器執行的應用程式。

C/S模式(Clinet/Server Model)
  • 須在用戶端安裝RCP程式,透由該PCP程式與遠端Server交換資料,如QQ、MSN。
RCP (Rich Client Program)
  • 豐富用戶端程式,又稱桌面程式(Desk Program)。
I18N (Internationalization) 資源國際化
  • 因字首字母為I,開頭I與結尾N之間共18字母,因此又稱I18N。
L10N (Localization)資源在地化
  • 字首L與結尾N之間共10字母,因此稱l10N。

PureMVC文件閱讀整理

PureMVC閱讀整理一


PureMVC結構
  • PureMVC的目標是幫助你將應用程式分成三層架構,即Model、View、Control。 
  • Model、View、Control為獨體類,由這三者構成核心層。 
  • Facade為獨體類,負責實體化Model、View、Cntrol,且是核心層溝通的接口,簡單的說Facade負責注入相依性,在Facade注入相依有助於核心層彼此間鬆綁。

2011年3月11日 星期五

SQL閱讀整理五

ALTER 改寫歷史
想對資料表修正,而又不想刪除資料 !
  • 使用ALTER TABLE
ALTER 相關使用項目
  • CHANGE:修改現存資料欄的名稱型別
  • MODIFY修改現存資料欄的型別位置
  • ADD:新增一各欄位。
  • DROP:移除某欄。
  • RENAME TO:改變表名稱。
ALTER 與 關鍵字 FIRST、LAST、AFTER、BEFORE、SECOND、THIRD...

原始表結構
contacts_info
nameagebirthdaygendercity

使用FIRST
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50) FIRST;

contacts_info
addressnameagebirthdaygendercity

使用LAST
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50) LAST;
contacts_info
nameagebirthdaygendercityaddress

使用AFTER
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50)
AFTER birthday;
contacts_info
nameagebirthdayaddressgendercity

使用BEFORE
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50)
BEFORE brithday;
contacts_info
nameageaddressbirthdaygendercity

使用SECOND
ALTER TABLE contacts_info
ADD COLUMN address VARCHAR(50) SECOND;
contacts_info
nameaddressagebirthdaygendercity


更改資料表名稱
ALTER TABLE contacts_info
RENAME TO contacts_lis;


ALTER與CHANGE
//原始範例表結構
drinks_lis
numbernametypeprice

ALTER TABLE drinks_list
CHANGE COLUMN number drink_id INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (drink_id);

drinks_lis
drink_idnametypeprice

  • CHANGE 可以修改資料欄的"名稱"與"型別"。
  • 把資料改成另種型別有可能會遺失資料。
  • 欲改變的資料型別與原始型別不相容,則指令不會執行。


只改型別
drinks_lis
drink_idnametypeprice

ALTER TABLE drinks_list
CHANGE COLUMN type VARCHAR(50);


只改欄位名稱
drinks_lis
drink_idnametypeprice

ALTER TABLE drinks_list
CHANGE COLUMN name drinkName;

drinks_lis
drink_iddrinkNametypeprice


修改兩各欄位
drinks_lis
drink_idnametypeprice

ALTER TABLE drinks_list
CHANGE COLUMN name drinkName VARCHAR(20),
CHANGE COLUMN type drinkType VARCHAR(20);
dirnks_lis
drink_iddrinkNamedrinkTypeprice


DROP COLUMN 刪除欄位
dirnks_lis
drink_iddrinkNamedrinkTypepricecost

ALTER TABLE drinks_lis
DROP COLUMN cost;

dirnks_lis
drink_iddrinkNamedrinkTypeprice


一些便利的字串函式
  • RIGHT(欄位 , 字元數量) FROM tableName;
  • SUBSTRING_INDEX(欄位, ',' , 1) FROM tableName;
example:
SELECT RIGHT(location , 2) FROM my_contacts;
  • RIGHT,表示從右側開始
  • 函數中第一各參數表,目標欄位。
  • 函數中第二各參數表,右側開始選擇的字元數量。
example:
SELECT SUBSTRING_INDEX(location, ',', 1)FROM my_contacts;

這段敘述是說從location欄中,取回第一個豆號前所有的字串。
  • SUBSTRING_INDEX,找尋由第二參數中所給的符號開始,然後取出符號前面的所有東西。
  • 第二各參數,要找尋的符號。
  • 第三各參數,表該欄位中第幾各符號開始。

SQL閱讀整理四

第四章 聰明的資料表
具有唯一性資料的表

//不具唯一性的資料表
employees_info
nameagegendercity
江小魚20台北
林瀨瑤20東京
古小三22台北
古小三22台北
塵在天26高雄
表4-1

  • 表4-1出現同名的古小三,這兩筆資料無法辨識,簡單的說該表沒有唯一性。
  • 修正方式加入一各欄位使其每一筆資料都具有唯一性。
//修正成具有唯一性的資料表
employees_info
employeeIDnameagegendercity
00001江小魚20台北
00002林瀨瑤20東京
00003古小三22台北
00004古小三22台北
00005塵在天26高雄
  • 如此加上employeeID之後我們可以辨識出兩筆古小三是不同筆的資料。
而加入的這一個欄位,就是Primary Key。


Primary Key的規則
  • 主鍵不可為NULL
  • 插入新紀錄時,也必須指定主鍵值
  • 必須簡潔
  • 主鍵值不可修改
什麼是Primary Key? 
  • 資料表中的某各資料欄位,它可以獨一無二分辨每一筆紀錄
第一階正規劃的步驟之一
  • 具有Primary Key的資料表,是資料表第一階正規化的步驟之一。

關於正規劃將於後面章節將會談論


查詢已存在資料表當時建立的SQL敘述碼
  • SHOW CREATE TABLE yourTable;

建立一各不具Primary Key的資料表
CREATE TABLE employees_A
(
  name varchar(20) NOT NULL,
  age INT default NULL,
  gender char(4),
  city varchar(20)
)

建立一各具有Primary Key的資料表
CREATE TABLE employees_B
(
  employeeID INT NOT NULL,
  name varchar(20) NOT NULL,
  age INT default NULL,
  gender char(4),
  city varchar(20),
  PRIMARY KEY (employeeID)
)
  • PRIMARY KEY (columnName),用於指定Primary Key。
建立一各具有具有Primary Key並且會自動增加的資料表
CREATE TABLE employees_C
(
  employeeID INT NOT NULL AUTO_INCREMENT,
  name varchar(20) NOT NULL,
  age INT default NULL,
  gender char(4),
  city varchar(20),
  PRIMARY KEY (employeeID)
)
  • AUTO_INCREMENT,讓employeeIDy自動遞增數值。

其實不用重新建立具有Primary Key的資料表,可以使用ALTER來修正
ALTER TABLE employees_A
ADD COLUMN employeeID INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (employeeID );
  • FIRST要求將該欄位安至於最前面。
  • ADD COLUMN,用於加入一各欄位。
  • ADD PRIMARY KEY,設定主鍵。

SQL閱讀整理三

第三章 DELETE 與 UPDATE
DELETE 刪除紀錄
※注意DELETE記得要加上WHERE使用,否則會刪掉整張表的資料。
※DELETE用於刪除一列或多列,無法刪除單一欄。
※使用DELETE必須小心,每次執行都有可能意外刪除掉必要的資料。
※使用時定要確認WHERE所下的條件精確與否。
※由於DELETE不精準,因此刪除前最好先SELECT確定刪除對象是否正確。
example:
//原始資料表
employees_info
nameagegendercity
江小魚20台北
林瀨瑤20東京
古小三22台北
塵在天26高雄

//刪除name欄位為江小魚的資料。
DELETE FROM employess
WHERE name = '江小魚';
employees_info
nameagegendercity
林瀨瑤20東京
古小三22台北
塵在天26高雄

example:
//原始資料表
employees_info
nameagegendercity
江小魚20台北
林瀨瑤20東京
古小三22台北
塵在天26高雄

//刪除年齡20歲且為女性的資料。
DELETE FROM employess
WHERE age = 20 AND gender = "女";
employees_info
nameagegendercity
江小魚20台北
古小三22台北
塵在天26高雄


回憶一下INSERT,INSERT 與 DELETE
example:
//原始資料表
employees_info
nameagegendercity
江小魚20台北
林瀨瑤20東京
古小三22台北
塵在天26高雄

//插入一筆資料
INSERT INTO employees_info
VALUES('吳英雄', 27, '男', '高雄' );
employees_info
nameagegendercity
江小魚20台北
林瀨瑤20東京
古小三22台北
塵在天26高雄
吳英雄27高雄

//刪除前先用SELECT確定要刪除的資料是否正確。
SELECT * FROM employees_info
WHERE name = '林瀨瑤' AND gender = '女';
nameagegendercity
林瀨瑤20東京

//刪除資料
DELETE FROM employees_info
WHERE name = '林瀨瑤' AND gender = '女';
employees_info
nameagegendercity
江小魚20台北
古小三22台北
塵在天26高雄
吳英雄27高雄

閱讀階段心得:
資料庫規劃在實做上其實會有Primary Key,來代表資料表中唯一的一筆資料,確保不重複,而在employess_info設計上通常會加上一各員工編號來做Primary Key,以便識別,關於PK後面在來敘述。

閱讀到此,我想,像關於員工資料,在實際情境下,能夠刪除員工資料的人員,必定是具有管理權限的人事單位,而刪除員工資料在搜尋上因該是會以員工身分證號來找出員工編號,再以員工編號來執行刪除,若是有誤之處請指正之。


UPDATE 改變資料
※UPDATE可以修改已存在的資料。
※UPDATE可以搭配WHERE使用。
※UPDATE能夠只調整需要改變的欄位。
example:
//原始資料表
drinks_info
nametypeprice
可樂汽水25
芒果汁果汁40
黃色淺水艇酒精100
台灣啤酒酒精40
香蕉冰沙冰沙60

//SET用來指定將改調整的欄位與值。
UPDATE drinks_info
SET price = 35
WHERE name = '可樂' AND price = 25;
drinks_info
nametypeprice
可樂汽水35
芒果汁果汁40
黃色淺水艇酒精100
台灣啤酒酒精40
香蕉冰沙冰沙60

※UPDATE若沒加上WHERE使用,則所有SET提到的欄位全部都會被修改。
如上例,若沒加上WHERE則所有的price都會被改成35。


example:
//SQL中可以對欄位套用基礎數學運算。
//原始資料表 
drinks_info
nametypeprice
可樂汽水35
芒果汁果汁40
黃色淺水艇酒精100
台灣啤酒酒精40
香蕉冰沙冰沙60

//修改所有酒精類飲料的價格,原本價格再加五元
UPDATE drinks_info
SET price = price +5
WHERE name = '酒精' ;

drinks_info
nametypeprice
可樂汽水35
芒果汁果汁40
黃色淺水艇酒精105
台灣啤酒酒精45
香蕉冰沙冰沙60

2011年3月10日 星期四

SQL閱讀整理二

第二章 SELECT 進階使用
輸出整張Table
SELECT * FROM TableName;

SELECT:選擇欄位,做輸出。
FROM:來源資料表。
*表示全部欄位。


SELECT + WHERE 條件
SELECT [輸出欄位] FROM [來源資料表]
WHERE [欄位] = [比對條件];

WHERE 指定特定條件。 

example:
SELECT * FROM phome_table
WHERE phomeNumber = "28825252";


SELECT 特定資料
SELECT drinkName, type, price
FROM drinkTable
WHERE type= 'alcohol';


SELECT + 邏輯運算子
SELECT drinkName, type, price
FROM drinkTable
WHERE type = 'alcohol' AND price = 100;

如此會列出類別為酒精且售價為100元的飲品。

邏輯運算
AND
OR
//邏輯運算子可以一直連接使用,但這是硬來的方式。

比較運算
=  等於
>  大於
<  小於
>= 大於等於
<= 小於等於
<> 不等於


找NULL欄的資料,IS NULL
SELECT drinkName, type, price
FROM drinkTable
WHERE price IS NULL;
NULL無法使用比較運算子找出,需使用IS NULL來找尋,
因為NULL代表不存在所以無法比較。


LIKE 與 %
SELECT * FROM Customers
WHERE location LIKE '%縣';
//表示尋找所有以"縣"結尾的資料。
LIKE :像。
%萬用字元,代表任何字串


LIKE 與 _
SELECT first_name FROM my_contacts
WHERE first_name LIKE '_J';
//會找出如TJ,AJ,BJ,等,_代表一各字元。
_:萬用字元,代表一各字元

BETWEEN關鍵字,兩者之間
SELECT drinkName FROM drinkTable
WHERE
price BETWEEN 30 AND 100;
//選出價格在30~60間的飲料。

//不使用BETWEEN的寫法
SELECT drinkName FROM drinkTable
WHERE
price >= 30 AND price <= 100;


IN,包含
SELECT drinkName
FROM drinkTable WHERE type IN ('Alcohol','soda');
//會找出type屬於alcohol與soda類的飲料。

等價方式
SELECT drinkName
FROM drinkTable
WHERE type = 'Alcohol' OR type = 'soda';


NOT IN , 不包含
SELECT drinkName
FROM drinkTable WHERE type NOT IN ('Alcohol','soda');
//會找出type非alcohol與soda類的飲料。


WHERE 與 NOT
SELECT drindName FROM drindTable
WHERE NOT price BETWEEN 30 AND 100;

//會找出 "非" >=30 ~ <=100 之間的飲料。



寫入有'號的資料
寫入字串中含有 ' 號時需使用 \ 。  
example:
INSERT INTO contacts
(location)
VALUES
('Grover\'s Mill');