Thursday, December 30, 2004
Sunday, December 26, 2004
Monday, December 13, 2004
developerWorks : Blogs
Microsoft and Domain Specific Languages
M$ just issued the concept of software factory and Domain Specific Languages that will be a big impact to some existed design language such as UML, the author of this article is one of 3 founder of UML & Rose, he said that he is quite disappointed with it.
M$ just issued the concept of software factory and Domain Specific Languages that will be a big impact to some existed design language such as UML, the author of this article is one of 3 founder of UML & Rose, he said that he is quite disappointed with it.
Sunday, November 28, 2004
Some delphi guys complain that there are no class reference in java and .net, such as
type
BaseClass = class constructor Create; virtual;
...
end;
BaseClassRef = class of BaseClass
DerivedClass1 = class (BaseClass )
DerivedClass2 = class (BaseClass )
RegisterClass(DerivedClass1);
RegisterClass(DerivedClass2);
...
var
AClassRef : BaseClassRef ;
begin
//the class name can be stored in a configuration profile
AClassRef := BaseClassRef(FindClass('DerivedClass1'));
...
end;
Now, we could do the similar thing with a java IOC framework PicoContainer.
Interface BaseIntf
class DerivedClass1 implements BaseIntf
class DerivedClass2 implements BaseIntf
public void () {
MutablePicoContainer pico = createPicoContainer(null);
pico.registerComponentImplementation("DerivedClass1",DerivedClass1.class);
pico.registerComponentImplementation("DerivedClass2",DerivedClass2.class);
...
//the class name can be stored in a configuration profile
BaseIntf t = (BaseIntf) pico.getComponentInstance("DerivedClass2");
assertNotNull(t);
}
PicoContainer has .net portion too.
type
BaseClass = class constructor Create; virtual;
...
end;
BaseClassRef = class of BaseClass
DerivedClass1 = class (BaseClass )
DerivedClass2 = class (BaseClass )
RegisterClass(DerivedClass1);
RegisterClass(DerivedClass2);
...
var
AClassRef : BaseClassRef ;
begin
//the class name can be stored in a configuration profile
AClassRef := BaseClassRef(FindClass('DerivedClass1'));
...
end;
Now, we could do the similar thing with a java IOC framework PicoContainer.
Interface BaseIntf
class DerivedClass1 implements BaseIntf
class DerivedClass2 implements BaseIntf
public void () {
MutablePicoContainer pico = createPicoContainer(null);
pico.registerComponentImplementation("DerivedClass1",DerivedClass1.class);
pico.registerComponentImplementation("DerivedClass2",DerivedClass2.class);
...
//the class name can be stored in a configuration profile
BaseIntf t = (BaseIntf) pico.getComponentInstance("DerivedClass2");
assertNotNull(t);
}
PicoContainer has .net portion too.
Sunday, November 21, 2004
Friday, November 19, 2004
Tuesday, November 16, 2004
Spring.NET - Application Framework
http://www.springframework.net/doc/reference/index.html
This release contains a lightweight container with IoC / Dependency Injection functionality comparable to that found in the Java based Spring framework. Highlights include
- Constructor and Setter based Dependency Injection
- Factory method creation
- Inheritance of object definitions
- Support for .NET application configuration files
- Event wiring
- Autowiring of collaborators
- Singleton/Prototype creation modes
Friday, November 12, 2004
pinvoke.net: the interop wiki!
It is a site that attempts to address the difficulty of calling Win32 or other unmanaged APIs in managed code
It is a site that attempts to address the difficulty of calling Win32 or other unmanaged APIs in managed code
Thursday, November 11, 2004
use IOCP in thread
use IOCP in socket
IOCP is most efficient method in Win32 thread and Socket programming, but it requires much more work.
use IOCP in socket
IOCP is most efficient method in Win32 thread and Socket programming, but it requires much more work.
Contexts in .NET: Decouple Components by Injecting Custom Services into Your Object's Interception Chain -- MSDN Magazine, March 2003
Aspect-Oriented Programming Enables Better Code Encapsulation and Reuse
ContextBoundObject is a nice way to implement AOP in DotNet, but it is a little expensive.
Aspect-Oriented Programming Enables Better Code Encapsulation and Reuse
ContextBoundObject is a nice way to implement AOP in DotNet, but it is a little expensive.
DHTML Menu 4 (WebFX)
version 3 allowed menus to cover windowed controls,
version 4 can be displayed outside the physical boundaries of the browser window.
version 3 allowed menus to cover windowed controls,
version 4 can be displayed outside the physical boundaries of the browser window.
Wednesday, November 10, 2004
Monday, November 08, 2004
URLDownloadToCacheFile
A very useful Windows platform API, it Downloads data into the Internet cache and returns the file name of the cache location for retrieving the bits. it is widely used by auto-upgrade of rich client application.
A very useful Windows platform API, it Downloads data into the Internet cache and returns the file name of the cache location for retrieving the bits. it is widely used by auto-upgrade of rich client application.
Sunday, November 07, 2004
ActiveWidgets :: dhtml grid, javascript tables, .net datagrid, asp controls, php widgets
This controls set includes a scrollable javascript grid that looks like win 32 grid, it could be used in open source project for free, but not in commercial project.
This controls set includes a scrollable javascript grid that looks like win 32 grid, it could be used in open source project for free, but not in commercial project.
Thursday, November 04, 2004
Open-Source ADO.NET XML Provider -- WilsonXmlDbClient v1.0
Although the regular ADO.net DataSet has some methods such as ReadXml, WriteXml, but they are not good enough to handle complex XML document
SOA Editor from capescience.com
a tools to edit WSDL file, but it seems as if this tools doesn't support asp.net web service
Although the regular ADO.net DataSet has some methods such as ReadXml, WriteXml, but they are not good enough to handle complex XML document
SOA Editor from capescience.com
a tools to edit WSDL file, but it seems as if this tools doesn't support asp.net web service
Wednesday, November 03, 2004
Tuesday, November 02, 2004
Monday, November 01, 2004
Sunday, October 31, 2004
Saturday, October 30, 2004
Friday, October 29, 2004
Wednesday, October 27, 2004
I did a little bit survey about the Microsoft reporting service tools; Here is the detail.
1. This tools need a SQL server instance to store some application Meta data for internal use. But it can use oracle as data source for reporting. It is basically free if we have an sql server license.
2. This tools includes a simple query builder and a report layout designer, we could use report layout designer to visually adjust the report layout and some format stuffs such as the column width, Font. The report layout designer will generate a RDL (report definition language) script based on the outcome of designer GUI, the report query is embedded into RDL script too, and we could modify the RDL script manually or Programmatically.
3. This tools includes a report server that do the query&format based on the RDL script we made by report layout designer, the server will retrieve the data and format the report according the output type we specified, output type could be web page, excel or PDF.
4. This tools use RDL script as the interface between the report design GUI and report build&format engine, this way would improve and shorten the process of the design and creation of a brand new report.
But the RDL also bring some drawback, the first thing is that this tools only provide some basic RDL syntax, (RDL is a kind of extensible script, the different development tools vendor could add their own predefined syntax into it). So the reporting build&format engine can only recognize the syntax they have, if we have some complex reports that need some special format effect, this tools cann't accomplish it.
There are a simple workaround for this issue, we could use this tools to do the basic layout and simple formating, and develop another module to do the complex formatting based on the excel file built by this tools.
Introducing the Microsoft reporting service in MSDN TV
Reporting Services Programming
1. This tools need a SQL server instance to store some application Meta data for internal use. But it can use oracle as data source for reporting. It is basically free if we have an sql server license.
2. This tools includes a simple query builder and a report layout designer, we could use report layout designer to visually adjust the report layout and some format stuffs such as the column width, Font. The report layout designer will generate a RDL (report definition language) script based on the outcome of designer GUI, the report query is embedded into RDL script too, and we could modify the RDL script manually or Programmatically.
3. This tools includes a report server that do the query&format based on the RDL script we made by report layout designer, the server will retrieve the data and format the report according the output type we specified, output type could be web page, excel or PDF.
4. This tools use RDL script as the interface between the report design GUI and report build&format engine, this way would improve and shorten the process of the design and creation of a brand new report.
But the RDL also bring some drawback, the first thing is that this tools only provide some basic RDL syntax, (RDL is a kind of extensible script, the different development tools vendor could add their own predefined syntax into it). So the reporting build&format engine can only recognize the syntax they have, if we have some complex reports that need some special format effect, this tools cann't accomplish it.
There are a simple workaround for this issue, we could use this tools to do the basic layout and simple formating, and develop another module to do the complex formatting based on the excel file built by this tools.
Introducing the Microsoft reporting service in MSDN TV
Reporting Services Programming
Tuesday, October 26, 2004
Monday, October 25, 2004
Sunday, October 24, 2004
Saturday, October 23, 2004
Thursday, October 21, 2004
Wednesday, October 20, 2004
Tuesday, October 19, 2004
Monday, October 18, 2004
I figure out a way about getting the distinct store count from the summary table, and here is the detail.
We have a summary table like it
We normally use the following Query to run against the summary table and get the
distinct store count
If the summary table has lots of rows, this query would be running long time.
We only need to know the position of each store in store lookup table when we are calculating the distinct store count, so we could come out the following structure
The store lookup table doesn’t have too many records, so we could just use a
column which type is varchar2 to store the resulting bit string for store key.
Once we need to get the distinct count of store, we could just do BIT_OR operation
on this column, and get the distinct store count by counting the amount of 1 bit inside the final bit string for store key. there are an existing Oracle function UTL_RAW.BIT_OR that could do BIT_OR operation to two strings, and it is quite fast, there are some code snippets.
There are another problem raised that UTL_RAW.BIT_OR could only do the BIT_OR on
two strings, it couldn’t do the BIT_OR on a column in a table. It is not convenient for us to write SQL,
Fortunately oracle 9i has a great feature named as User defined aggregate functions, you could do any aggregate operation with it, just like the regular oracle aggregate functions such as sum or count. First all, we need to create a new oracle type that includes a set of oracle pre-defined member function. such as ODCIAggregateInitialize, ODCIAggregateiterate. Then we could write the code to override these functions. The following is code snippets.
And I created two functions to get the distinct store count, the first one is a User
defined aggregate function raw_bit_or_agg(input varchar2) that is used to do the BIT_OR on a column in the table, this function is just like other aggregate function. Another is count_bit_in_str that could get the bit count from a string, so the Query that getting count will be like this,
I wrote a unit test app to compare the difference, the method using BIT_OR is
500 times faster than the one using count(distinct store_key).
We have a summary table like it
period_key item_key store_key
20030102 1 1
20030102 1 2
20030102 1 5
20030102 1 7
20030102 1 9
..
20030302 1 2
20030302 1 5
20030302 1 6
20030302 1 8
We normally use the following Query to run against the summary table and get the
distinct store count
Select count(distinct store_key) from [summary table]
Where period_key between ? and ?
And item_key = ?
If the summary table has lots of rows, this query would be running long time.
We only need to know the position of each store in store lookup table when we are calculating the distinct store count, so we could come out the following structure
Bit Position 1 2 3 4 5 6 7
Store key 1 2 5 6 7 8 9
{1,2,5,7,9} 1 1 1 0 1 0 1
{2,5,6,8} 0 1 1 1 0 1 0
The store lookup table doesn’t have too many records, so we could just use a
column which type is varchar2 to store the resulting bit string for store key.
period_key item_key store_key_raw
20030102 1 1110101
20030302 1 0111010
Once we need to get the distinct count of store, we could just do BIT_OR operation
on this column, and get the distinct store count by counting the amount of 1 bit inside the final bit string for store key. there are an existing Oracle function UTL_RAW.BIT_OR that could do BIT_OR operation to two strings, and it is quite fast, there are some code snippets.
PROCEDURE test_raw_or IS
lvc_cursor ref_cursor;
lvn_counter BINARY_INTEGER;
lvs_a VARCHAR2(4000);
raw_a RAW(4000);
raw_b RAW(4000);
raw_c RAW(4000);
BEGIN
-- get the bit string for store key
OPEN lvc_cursor FOR
SELECT store_key_raw
FROM store_bitmap;
-- use loop to do the bit_or for all of rows
lvn_counter := 0;
lvs_a := '';
LOOP
EXIT WHEN lvc_cursor%NOTFOUND;
lvn_counter := lvn_counter + 1;
FETCH lvc_cursor
INTO lvs_a;
raw_a := utl_raw.cast_to_raw(lvs_a);
IF lvn_counter > 1 THEN
raw_c := utl_raw.bit_or(raw_a, raw_b);
raw_b := raw_c;
ELSE
raw_b := raw_a;
END IF;
END LOOP;
CLOSE lvc_cursor;
-- get the final bit string for store key
INSERT INTO calc_store_bitmap
VALUES
(utl_raw.cast_to_varchar2(raw_c));
-- get the distinct store count by counting the amount of 1 bit inside the
final bit string for store key
....
End;
There are another problem raised that UTL_RAW.BIT_OR could only do the BIT_OR on
two strings, it couldn’t do the BIT_OR on a column in a table. It is not convenient for us to write SQL,
Fortunately oracle 9i has a great feature named as User defined aggregate functions, you could do any aggregate operation with it, just like the regular oracle aggregate functions such as sum or count. First all, we need to create a new oracle type that includes a set of oracle pre-defined member function. such as ODCIAggregateInitialize, ODCIAggregateiterate. Then we could write the code to override these functions. The following is code snippets.
-- define a temp variable to store the middle value
total raw(4000),
--override the function that is doing the Iteration
member function ODCIAggregateIterate(self IN OUT str_agg_type,
value IN raw )
return number
is
begin
self.total := utl_raw.bit_or(self.total, value);
return ODCIConst.Success;
end;
--override the function that returns the final result
member function ODCIAggregateTerminate(self IN str_agg_type,
returnValue OUT raw,
flags IN number)
return number
is
begin
returnValue := self.total;
return ODCIConst.Success;
end;
And I created two functions to get the distinct store count, the first one is a User
defined aggregate function raw_bit_or_agg(input varchar2) that is used to do the BIT_OR on a column in the table, this function is just like other aggregate function. Another is count_bit_in_str that could get the bit count from a string, so the Query that getting count will be like this,
SELECT count_bit_in_str(raw_bit_or_agg(p.store_bitmap))
FROM [summary table] p
WHERE p.period_key BETWEEN ? AND ?
And p. item_key = ?
ORDER BY p.period_key
I wrote a unit test app to compare the difference, the method using BIT_OR is
500 times faster than the one using count(distinct store_key).
Saturday, October 16, 2004
I did some survey on MS .net rich client automated upgrading solution recently, here is the detail
1 MS Updater Application Block
It is a open source framework that supports .net 1.1 framework and VS.2003, it includes a simple start app and a configuration file in the client side, the configuration file stores the address of file server that might be FTP, web, or shared file folder. There is a ServerManifest.xml that is located in the root folder of file server; this file includes all of files that need to be upgraded and their latest version number.
When the start app is launched, it will check the info inside the ServerManifest.xml, and compare with current application files in the client side, if the version # is not matched, and there are new version available, the start app will pop up a window to ask if you‘d like to upgrade the current application files, and the start app will do all of file downloading and replacing automatically if you client YES.
MS Updater Application Block
2 DotNet No-Touch Deployment (NTD)
DotNet No-Touch Deployment is a zero deployment application solution (smart client).
it supports .net 1.1 framework and VS.2003 too, it includes two methods.
the first method is that hosting the winform application into a web server, so user can lanuch it with a URL in IE or commend line. the app will be downloaded from web and setting into local internet cache, it doesn't require download every time unless there are new version in server side. and it could use the web service to connect with database, so the client side doesn't need install the oracle client. it requires a little changes in start section of winform app to make it work.
another method is embeding the .net winform coltrol into a web page, and put them to web server. it is similar to some original methods such as activex, but MS made some improvement, such as the size of control is much smaller than before.
DotNet No-Touch Deployment (NTD)
3 ClickOnce
ClickOnce is part of .net 2.0 framework, and supports VS.2005; it will be available in 2005.
It provides a home page for every application, the user could access the application by a URL inside this home page, you could choice to install the app in client machine or run the app in client cache, and it also support automated upgrading if you install the application in the client machine.
ClickOnce
4 Avalon
Avalon will be with the windows longhorn that was scheduled to be released in 2006, and it will support the Windows XP too. its start app is a XAML file that could be located in the client PC or server side such as a web server, this XAML file is similar to web page, but it doesn’t require IE, Avalon also support automated upgrading.
There are also some third party solutions available such as updated component suite; they are similar to MS Updater Application Block.
1 MS Updater Application Block
It is a open source framework that supports .net 1.1 framework and VS.2003, it includes a simple start app and a configuration file in the client side, the configuration file stores the address of file server that might be FTP, web, or shared file folder. There is a ServerManifest.xml that is located in the root folder of file server; this file includes all of files that need to be upgraded and their latest version number.
When the start app is launched, it will check the info inside the ServerManifest.xml, and compare with current application files in the client side, if the version # is not matched, and there are new version available, the start app will pop up a window to ask if you‘d like to upgrade the current application files, and the start app will do all of file downloading and replacing automatically if you client YES.
MS Updater Application Block
2 DotNet No-Touch Deployment (NTD)
DotNet No-Touch Deployment is a zero deployment application solution (smart client).
it supports .net 1.1 framework and VS.2003 too, it includes two methods.
the first method is that hosting the winform application into a web server, so user can lanuch it with a URL in IE or commend line. the app will be downloaded from web and setting into local internet cache, it doesn't require download every time unless there are new version in server side. and it could use the web service to connect with database, so the client side doesn't need install the oracle client. it requires a little changes in start section of winform app to make it work.
another method is embeding the .net winform coltrol into a web page, and put them to web server. it is similar to some original methods such as activex, but MS made some improvement, such as the size of control is much smaller than before.
DotNet No-Touch Deployment (NTD)
3 ClickOnce
ClickOnce is part of .net 2.0 framework, and supports VS.2005; it will be available in 2005.
It provides a home page for every application, the user could access the application by a URL inside this home page, you could choice to install the app in client machine or run the app in client cache, and it also support automated upgrading if you install the application in the client machine.
ClickOnce
4 Avalon
Avalon will be with the windows longhorn that was scheduled to be released in 2006, and it will support the Windows XP too. its start app is a XAML file that could be located in the client PC or server side such as a web server, this XAML file is similar to web page, but it doesn’t require IE, Avalon also support automated upgrading.
There are also some third party solutions available such as updated component suite; they are similar to MS Updater Application Block.
Friday, October 15, 2004
Thursday, October 14, 2004
Friday, October 08, 2004
Wednesday, October 06, 2004
Tuesday, October 05, 2004
Monday, October 04, 2004
Sunday, October 03, 2004
Tuesday, September 28, 2004
Monday, September 27, 2004
Sunday, September 26, 2004
Friday, September 24, 2004
Thursday, September 23, 2004
Wednesday, September 22, 2004
Sunday, September 19, 2004
Thursday, September 16, 2004
The difference among different DotNet data provider for oracle
There are three major data provider from Oracle, Misrosoft and Borland
1) if we run a query to return same amount of rows, the ODP.net would take the shortest time, while BDP.net would take the longest time.
2) All of three providers are based on ADO.NET, this means they have same basic classes and methods,
If we are going to replace MSDP.NET with ODP.NET, what we need to do is changing the library reference and the units in uses section,
But they also have some slightly difference, for instance, the oracle data type for ref cursor in MSDP is OracleType.cursor, and
the oracle data type for ref cursor in ODP is OracleDBType.RefCursor
3) All of three providers support Ref Cursors returned by Oracle stored proc
4) Both of MS data provider and Oracle data provider support database connection pooling, but Borland Data Provider doesn't support it
5) MS data provider offers an OracleLob object that handles all Oracle LOB database objects in the same fashion, while the Oracle data provide offers
specific objects for both Oracle BLOB and CLOB database objects. This means ODP.NET provides better support for these Oracle datatypes.
For instance, the OracleClob object overrides the read method to populate a char array. This feature is especially useful when dealing
with Unicode and other multibyte characters.
6) The MS data provider come with DotNet framework, and the DotNet framework is part of in windows XP professional and windows 2003 server .
whereas Oracle data provider or Borland Data Provider need to be installed separately
There are three major data provider from Oracle, Misrosoft and Borland
1) if we run a query to return same amount of rows, the ODP.net would take the shortest time, while BDP.net would take the longest time.
2) All of three providers are based on ADO.NET, this means they have same basic classes and methods,
If we are going to replace MSDP.NET with ODP.NET, what we need to do is changing the library reference and the units in uses section,
But they also have some slightly difference, for instance, the oracle data type for ref cursor in MSDP is OracleType.cursor, and
the oracle data type for ref cursor in ODP is OracleDBType.RefCursor
3) All of three providers support Ref Cursors returned by Oracle stored proc
4) Both of MS data provider and Oracle data provider support database connection pooling, but Borland Data Provider doesn't support it
5) MS data provider offers an OracleLob object that handles all Oracle LOB database objects in the same fashion, while the Oracle data provide offers
specific objects for both Oracle BLOB and CLOB database objects. This means ODP.NET provides better support for these Oracle datatypes.
For instance, the OracleClob object overrides the read method to populate a char array. This feature is especially useful when dealing
with Unicode and other multibyte characters.
6) The MS data provider come with DotNet framework, and the DotNet framework is part of in windows XP professional and windows 2003 server .
whereas Oracle data provider or Borland Data Provider need to be installed separately
Tuesday, September 14, 2004
Sunday, September 12, 2004
Joel on Software - How Microsoft Lost the API War
I don't think the Web page will be instead of Win GUI, although some web pages are fancy enough, but please just take a look the JavaScript code, it is extremely long, and quite badly organized.
whereas I think that Avalon and Indigo will be instead of Web page if M$ could do their work well, what my desired GUI is that it has no round trip, no overall refresh, and no deployment.
the thing I worry about is M$ current GUI project strategy, WinForm semms as if to be stillborn. infopath, a very cool stuff, but nobody use. Avalon need to wait at least two years. why M$ can't focus on one thing.
I don't think the Web page will be instead of Win GUI, although some web pages are fancy enough, but please just take a look the JavaScript code, it is extremely long, and quite badly organized.
whereas I think that Avalon and Indigo will be instead of Web page if M$ could do their work well, what my desired GUI is that it has no round trip, no overall refresh, and no deployment.
the thing I worry about is M$ current GUI project strategy, WinForm semms as if to be stillborn. infopath, a very cool stuff, but nobody use. Avalon need to wait at least two years. why M$ can't focus on one thing.
Thursday, September 09, 2004
Wednesday, September 08, 2004
Tuesday, September 07, 2004
Saturday, September 04, 2004
Thursday, September 02, 2004
Tuesday, August 31, 2004
Thursday, August 26, 2004
Wednesday, August 25, 2004
Tuesday, August 24, 2004
Saturday, August 21, 2004
Thursday, August 19, 2004
Friday, August 13, 2004
Wednesday, August 11, 2004
Tuesday, August 10, 2004
Sunday, August 08, 2004
Friday, August 06, 2004
Thursday, August 05, 2004
Monday, August 02, 2004
Sunday, August 01, 2004
Wednesday, July 28, 2004
Monday, July 26, 2004
Saturday, July 24, 2004
Thursday, July 22, 2004
Monday, July 19, 2004
Friday, July 16, 2004
Thursday, July 15, 2004
Wednesday, July 14, 2004
Sunday, July 11, 2004
Let’s see the history of java web development, there are four major steps,
1, Java Servlet - use java code to generate the all of html content, developers need to take a lot of time to do the coding for both of html content and server side business logic, and very hard to maintain the html content and java code.
2. Jsp – embed the java code into html content by using java bean that is used to generated the dynamic html content, it solve the problem of maintenance the static html content, and it bring some other problem, the java code is separated to everywhere, the presentation view and business logic are mixed together, it is easier to cause the system mass up when the system is getting bigger.
3.Struts framework – Java code do not generate the html content directly, and html content do not include the java code directly, it use html tag-lib to combine the code and content together, the html tag-lib permits java developers to boil down complex server-side behaviors into simple and easy-to-use elements that content developers can easily incorporate into their html pages
,html tags are capable to implement some simple programming logic such as branch (if else ) and loop(for), and the html tag-lib can be re-used and extended.
The struts separates the presentation view and business logic very well, so it meet the need of most of web system and become more and more popular, so far the problem for html tag-lib is the management and customizing, the content developers need to take some time adjust the properties of html tag to achieve the visual effect they want, and java developers are not easy to customize new html tag..
4. JSF (similar to asp.net) - it is the newest method to do the web development. It uses visual component technology to help java developers to customize the html tag, and the content developers could quickly and visually reference the html tag. It greatly increases the productivity of web development.
1, Java Servlet - use java code to generate the all of html content, developers need to take a lot of time to do the coding for both of html content and server side business logic, and very hard to maintain the html content and java code.
2. Jsp – embed the java code into html content by using java bean that is used to generated the dynamic html content, it solve the problem of maintenance the static html content, and it bring some other problem, the java code is separated to everywhere, the presentation view and business logic are mixed together, it is easier to cause the system mass up when the system is getting bigger.
3.Struts framework – Java code do not generate the html content directly, and html content do not include the java code directly, it use html tag-lib to combine the code and content together, the html tag-lib permits java developers to boil down complex server-side behaviors into simple and easy-to-use elements that content developers can easily incorporate into their html pages
,html tags are capable to implement some simple programming logic such as branch (if else ) and loop(for), and the html tag-lib can be re-used and extended.
The struts separates the presentation view and business logic very well, so it meet the need of most of web system and become more and more popular, so far the problem for html tag-lib is the management and customizing, the content developers need to take some time adjust the properties of html tag to achieve the visual effect they want, and java developers are not easy to customize new html tag..
4. JSF (similar to asp.net) - it is the newest method to do the web development. It uses visual component technology to help java developers to customize the html tag, and the content developers could quickly and visually reference the html tag. It greatly increases the productivity of web development.
Friday, July 09, 2004
Sunday, July 04, 2004
Saturday, July 03, 2004
Wednesday, June 30, 2004
Tuesday, June 29, 2004
Monday, June 28, 2004
Sunday, June 27, 2004
Friday, June 25, 2004
Thursday, June 24, 2004
Wednesday, June 23, 2004
Tuesday, June 22, 2004
Monday, June 21, 2004
Sunday, June 20, 2004
Friday, June 18, 2004
Thursday, June 17, 2004
Wednesday, June 16, 2004
I wrote a small copy file routine that support overlaped reading and writing, it suppose to has better performance.
procedure RSICopyFile(ASourceFileName, ADestFileName: string; ABuffSize: integer; AOverLaped: boolean);
const
MaxBufSize = 1024 * 1024 * 50; // 50mb
var
FReadhandle: THandle;
FWritehandle: THandle;
FBuffer: Pointer;
BufSize, FBytesInBuff, FFilePos, FBytesRead, FBytesWrite: Integer;
FFileSize: Integer;
FRead_os, FWrite_os: TOverlapped;
ErrorFlag: Dword;
begin
//open the source file
if not AOverLaped then
FReadhandle := CreateFile(PChar(ASourceFileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0)
else
begin
FReadhandle := CreateFile(PChar(ASourceFileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0);
FillChar(FRead_os, SizeOf(FRead_os), 0);
FRead_os.hEvent := CreateEvent(nil, True, False, nil);
FRead_os.Offset := 0;
FRead_os.OffsetHigh := 0;
end;
if FReadhandle = 0 then
begin
raise exception.create('Cannot open the readding file');
end;
// get the size of source file
FFileSize := GetFileSize(FReadhandle, 0);
//open the dest file, create anew one if not exist
if not AOverLaped then
FWritehandle := CreateFile(PChar(ADestFileName), GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
else
begin
FWritehandle := CreateFile(PChar(ADestFileName), GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0);
FillChar(FWrite_os, SizeOf(FWrite_os), 0);
FWrite_os.hEvent := CreateEvent(nil, True, False, nil);
FWrite_os.Offset := 0;
FWrite_os.OffsetHigh := 0;
end;
if FWritehandle = 0 then
begin
raise exception.create('Cannot open the writting file ');
end;
//Set the buffer size
if ABuffSize > MaxBufSize then
BufSize := MaxBufSize
else
BufSize := Integer(ABuffSize);
FBuffer := VirtualAlloc(0, BufSize, Mem_ReServe or Mem_Commit, PAGE_READWRITE);
try
if FFileSize > 0 then
begin
if FFileSize > MaxInt then
FFilePos := MaxInt
else
FFilePos := FFileSize;
while FFilePos > 0 do
begin
if FFilePos > BufSize then FBytesInBuff := BufSize else FBytesInBuff := FFilePos;
//clean up before read
FillChar(FRead_os, SizeOf(FRead_os), 0);
//Read file to buff
if not AOverLaped then
begin
if not ReadFile(FReadhandle, FBuffer^, FBytesInBuff, LongWord(FBytesRead), nil) then
begin
raise exception.create('file cannot be read');
end;
end
else
begin
if not ReadFile(FReadhandle, FBuffer^, FBytesInBuff, LongWord(FBytesRead), @FRead_os) then
begin
ErrorFlag := GetLastError;
if ErrorFlag <> 0 then
begin
if ErrorFlag = ERROR_IO_PENDING then
begin
if WaitForSingleObject(FRead_os.hEvent, INFINITE) = WAIT_OBJECT_0 then
if not GetOverlappedResult(FReadhandle, FRead_os,
LongWord(FBytesRead), False) then
begin
ErrorFlag := GetLastError;
if ErrorFlag = ERROR_HANDLE_EOF then
begin
exit; // The end of the stream was hit.
end;
end;
end
else if ErrorFlag = ERROR_HANDLE_EOF then
begin
exit; // The end of the stream was hit.
end
else
begin
raise exception.create('file cannot be read');
end;
end;
end;
inc(FRead_os.Offset, FBytesRead);
end;
//Write buff to file
if not AOverLaped then
begin
if FBytesRead = 0 then
begin
exit; // The end of the stream was hit.
end;
if not WriteFile(FWritehandle, FBuffer^, FBytesInBuff, LongWord(FBytesWrite), nil) then
begin
raise exception.create('file cannot be written');
end;
end
else
begin
if not WriteFile(FWritehandle, FBuffer^, FBytesInBuff, LongWord(FBytesWrite), @FWrite_os) then
begin
ErrorFlag := GetLastError;
if ErrorFlag <> 0 then
begin
if ErrorFlag = ERROR_IO_PENDING then
begin
if WaitForSingleObject(FWrite_os.hEvent, INFINITE) = WAIT_OBJECT_0 then
if not GetOverlappedResult(FWritehandle, FWrite_os,
LongWord(FBytesWrite), False) then
begin
ErrorFlag := GetLastError;
if ErrorFlag = ERROR_HANDLE_EOF then
begin
exit; // The end of the stream was hit.
end;
end;
end
else if ErrorFlag = ERROR_HANDLE_EOF then
begin
exit; // The end of the stream was hit.
end
else
begin
raise exception.create('file cannot be writeen');
end;
end;
end;
Inc(FWrite_os.Offset, FBytesWrite);
end;
//Change the position
Dec(FFilePos, FBytesRead);
end;
end;
finally
VirtualFree(FBuffer, BufSize, Mem_DeCommit or Mem_Release);
CloseHandle(FReadhandle);
CloseHandle(FWritehandle);
end;
end;
procedure RSICopyFile(ASourceFileName, ADestFileName: string; ABuffSize: integer; AOverLaped: boolean);
const
MaxBufSize = 1024 * 1024 * 50; // 50mb
var
FReadhandle: THandle;
FWritehandle: THandle;
FBuffer: Pointer;
BufSize, FBytesInBuff, FFilePos, FBytesRead, FBytesWrite: Integer;
FFileSize: Integer;
FRead_os, FWrite_os: TOverlapped;
ErrorFlag: Dword;
begin
//open the source file
if not AOverLaped then
FReadhandle := CreateFile(PChar(ASourceFileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0)
else
begin
FReadhandle := CreateFile(PChar(ASourceFileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0);
FillChar(FRead_os, SizeOf(FRead_os), 0);
FRead_os.hEvent := CreateEvent(nil, True, False, nil);
FRead_os.Offset := 0;
FRead_os.OffsetHigh := 0;
end;
if FReadhandle = 0 then
begin
raise exception.create('Cannot open the readding file');
end;
// get the size of source file
FFileSize := GetFileSize(FReadhandle, 0);
//open the dest file, create anew one if not exist
if not AOverLaped then
FWritehandle := CreateFile(PChar(ADestFileName), GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
else
begin
FWritehandle := CreateFile(PChar(ADestFileName), GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0);
FillChar(FWrite_os, SizeOf(FWrite_os), 0);
FWrite_os.hEvent := CreateEvent(nil, True, False, nil);
FWrite_os.Offset := 0;
FWrite_os.OffsetHigh := 0;
end;
if FWritehandle = 0 then
begin
raise exception.create('Cannot open the writting file ');
end;
//Set the buffer size
if ABuffSize > MaxBufSize then
BufSize := MaxBufSize
else
BufSize := Integer(ABuffSize);
FBuffer := VirtualAlloc(0, BufSize, Mem_ReServe or Mem_Commit, PAGE_READWRITE);
try
if FFileSize > 0 then
begin
if FFileSize > MaxInt then
FFilePos := MaxInt
else
FFilePos := FFileSize;
while FFilePos > 0 do
begin
if FFilePos > BufSize then FBytesInBuff := BufSize else FBytesInBuff := FFilePos;
//clean up before read
FillChar(FRead_os, SizeOf(FRead_os), 0);
//Read file to buff
if not AOverLaped then
begin
if not ReadFile(FReadhandle, FBuffer^, FBytesInBuff, LongWord(FBytesRead), nil) then
begin
raise exception.create('file cannot be read');
end;
end
else
begin
if not ReadFile(FReadhandle, FBuffer^, FBytesInBuff, LongWord(FBytesRead), @FRead_os) then
begin
ErrorFlag := GetLastError;
if ErrorFlag <> 0 then
begin
if ErrorFlag = ERROR_IO_PENDING then
begin
if WaitForSingleObject(FRead_os.hEvent, INFINITE) = WAIT_OBJECT_0 then
if not GetOverlappedResult(FReadhandle, FRead_os,
LongWord(FBytesRead), False) then
begin
ErrorFlag := GetLastError;
if ErrorFlag = ERROR_HANDLE_EOF then
begin
exit; // The end of the stream was hit.
end;
end;
end
else if ErrorFlag = ERROR_HANDLE_EOF then
begin
exit; // The end of the stream was hit.
end
else
begin
raise exception.create('file cannot be read');
end;
end;
end;
inc(FRead_os.Offset, FBytesRead);
end;
//Write buff to file
if not AOverLaped then
begin
if FBytesRead = 0 then
begin
exit; // The end of the stream was hit.
end;
if not WriteFile(FWritehandle, FBuffer^, FBytesInBuff, LongWord(FBytesWrite), nil) then
begin
raise exception.create('file cannot be written');
end;
end
else
begin
if not WriteFile(FWritehandle, FBuffer^, FBytesInBuff, LongWord(FBytesWrite), @FWrite_os) then
begin
ErrorFlag := GetLastError;
if ErrorFlag <> 0 then
begin
if ErrorFlag = ERROR_IO_PENDING then
begin
if WaitForSingleObject(FWrite_os.hEvent, INFINITE) = WAIT_OBJECT_0 then
if not GetOverlappedResult(FWritehandle, FWrite_os,
LongWord(FBytesWrite), False) then
begin
ErrorFlag := GetLastError;
if ErrorFlag = ERROR_HANDLE_EOF then
begin
exit; // The end of the stream was hit.
end;
end;
end
else if ErrorFlag = ERROR_HANDLE_EOF then
begin
exit; // The end of the stream was hit.
end
else
begin
raise exception.create('file cannot be writeen');
end;
end;
end;
Inc(FWrite_os.Offset, FBytesWrite);
end;
//Change the position
Dec(FFilePos, FBytesRead);
end;
end;
finally
VirtualFree(FBuffer, BufSize, Mem_DeCommit or Mem_Release);
CloseHandle(FReadhandle);
CloseHandle(FWritehandle);
end;
end;
Tuesday, June 15, 2004
Monday, June 14, 2004
Sunday, June 13, 2004
Thursday, June 10, 2004
Tuesday, June 08, 2004
Tuesday, June 01, 2004
Sunday, May 30, 2004
Wednesday, May 26, 2004
Some code shows how to manage transaction in multiple database system
we create a table test_log in remote database, and a procedure test_log_pkg.insert_log to insert log into this table
create or replace package body test_log_pkg is
procedure insert_log(pvs_log in varchar2) is
begin
insert into test_log values (pvs_log);
end;
end test_log_pkg;
we create a procedure test_dblink_pkg.insert_remote_log in local database which invoke the insert_log in remote database by database link. we added PRAGMA AUTONOMOUS_TRANSACTION in declaration section, and commit the insert at the end.
create or replace package body test_dblink_pkg is
procedure insert_remote_log(pvs_log IN varchar2) is
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
insert_log@remote_db(pvs_log);
commit;
END;
end test_link_pkg;
then we create a table test_log in local database, and we create a test procedure which insert log into test_log in local database, and
invoke insert_remote_log to insert log into test_log in remote database, at the end, we rollback all of operations.
procedure test(pvs_log IN varchar2) is
BEGIN
insert into test_log values(pvs_log);
insert_remote_log(pvs_log);
rollback;
END;
after we run test, test_log in remote database has a new record, but test_log in local database has nothing.
It shows that the transaction for local database is rolled back, but the transaction for remote database is commited
we create a table test_log in remote database, and a procedure test_log_pkg.insert_log to insert log into this table
create or replace package body test_log_pkg is
procedure insert_log(pvs_log in varchar2) is
begin
insert into test_log values (pvs_log);
end;
end test_log_pkg;
we create a procedure test_dblink_pkg.insert_remote_log in local database which invoke the insert_log in remote database by database link. we added PRAGMA AUTONOMOUS_TRANSACTION in declaration section, and commit the insert at the end.
create or replace package body test_dblink_pkg is
procedure insert_remote_log(pvs_log IN varchar2) is
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
insert_log@remote_db(pvs_log);
commit;
END;
end test_link_pkg;
then we create a table test_log in local database, and we create a test procedure which insert log into test_log in local database, and
invoke insert_remote_log to insert log into test_log in remote database, at the end, we rollback all of operations.
procedure test(pvs_log IN varchar2) is
BEGIN
insert into test_log values(pvs_log);
insert_remote_log(pvs_log);
rollback;
END;
after we run test, test_log in remote database has a new record, but test_log in local database has nothing.
It shows that the transaction for local database is rolled back, but the transaction for remote database is commited
Tuesday, May 25, 2004
Monday, May 24, 2004
Thursday, May 20, 2004
Tuesday, May 18, 2004
Monday, May 17, 2004
Sunday, May 16, 2004
Friday, May 14, 2004
Thursday, May 13, 2004
Wednesday, May 12, 2004
Tuesday, May 11, 2004
Sunday, May 09, 2004
Saturday, May 08, 2004
Friday, May 07, 2004
Thursday, May 06, 2004
Wednesday, May 05, 2004
Tuesday, May 04, 2004
Monday, May 03, 2004
Sunday, May 02, 2004
Tuesday, April 27, 2004
Sunday, April 25, 2004
Friday, April 23, 2004
Thursday, April 22, 2004
Tuesday, April 20, 2004
Sunday, April 18, 2004
Making web forms easy with InfoPath and "InfoView"
Nice idea, the tools to converting the InfoPath XML form to be ASP.NET web form.
Nice idea, the tools to converting the InfoPath XML form to be ASP.NET web form.
ASP.NET and Struts: Web Application Architectures
Good article, seems like the author prefer the ASP.net, but I have to say the struts is more suitable for large web site since the structure of java struts could help the developer be able to have a better feel to the entire sytem.
Good article, seems like the author prefer the ASP.net, but I have to say the struts is more suitable for large web site since the structure of java struts could help the developer be able to have a better feel to the entire sytem.
ObjectSpaces and Whidbey
ObjectSpace will be come later than Whidbey, the reason seems like that ObjectSpace use some new feature in WinFS, such as a new Query syntax(hybrid-SQL-and-XPath),
is that means ObjectSpace only for Sql Server because WinFS use Sql server
ObjectSpace will be come later than Whidbey, the reason seems like that ObjectSpace use some new feature in WinFS, such as a new Query syntax(hybrid-SQL-and-XPath),
is that means ObjectSpace only for Sql Server because WinFS use Sql server
FTPOnline - VSLive! SF 2004 - Model Apps More Effectively
It is hard to keep the code and Model in synchronization. MS case tools is going to make it easy.
It is hard to keep the code and Model in synchronization. MS case tools is going to make it easy.
Unit Testing a Windows Forms or Console Application
Separating the business logic code with Winform units is the key
Separating the business logic code with Winform units is the key
Friday, April 16, 2004
Thursday, April 15, 2004
Tuesday, April 13, 2004
Monday, April 12, 2004
Office Developer Center: Lab 1: Editing Forms and Working with Form Data in InfoPath 2003
10 Lab to introduce the infopath.
10 Lab to introduce the infopath.
Sunday, April 11, 2004
Friday, April 09, 2004
Java Studio Creator: An IDE to Create Web Applications
The JSF web developement IDE from sun, is it as easy as Asp.net?
The JSF web developement IDE from sun, is it as easy as Asp.net?
Thursday, April 08, 2004
Continuous Integration with CruiseControl.net and Draco.Net
the Draco.Net is for small project, and the CruiseControl.net is for big.
the Draco.Net is for small project, and the CruiseControl.net is for big.
Tuesday, April 06, 2004
Monday, April 05, 2004
Essential Delphi 8 for .NET
There are a preview chapter available for downloading.
Something I got from this charper,
1. Initialization in D.net become the Static Class Method and called from Class Constructors
2. sets in D.net become the enumeration class (marked as sealed) that inherits from System.Enum.
3. the difference between record with methods and class in D.net is the way the use memory, the record is in stack and the class is in heap, so the record is a little bit more efficient.
4. StringBuilder is for increasing the performance of string concatenation. it is much faster than common string concatenation.
5. the Direct type cast became more restrictive in D.net. Integer (anObject) is no longer allowed
6. protected symbols defined in another unit are accessible only within the same assembly/package, but not across package boundary
7. ECO framework use Class Helper too, the Class Helper in D.net looks like the partial class in c#
8. published property in D.net become the BrowsableAttribute in CLR
9. Any class needing resource clean-up should implement the Dispose method of the IDisposable interface,
and add the 'using' clause in c#. the VM will free the object and resource in the the score of 'using' clause, this way eliminate the delay of GC.
in D.net, the Destroy() method becomes an implementation to Dispose. nice
10. However the Delphi 8 compiler cannot impose the presence of a specific metaclass for classes not
compiled by Delphi but imported from assemblies written in other languages.
There are a preview chapter available for downloading.
Something I got from this charper,
1. Initialization in D.net become the Static Class Method and called from Class Constructors
2. sets in D.net become the enumeration class (marked as sealed) that inherits from System.Enum.
3. the difference between record with methods and class in D.net is the way the use memory, the record is in stack and the class is in heap, so the record is a little bit more efficient.
4. StringBuilder is for increasing the performance of string concatenation. it is much faster than common string concatenation.
5. the Direct type cast became more restrictive in D.net. Integer (anObject) is no longer allowed
6. protected symbols defined in another unit are accessible only within the same assembly/package, but not across package boundary
7. ECO framework use Class Helper too, the Class Helper in D.net looks like the partial class in c#
8. published property in D.net become the BrowsableAttribute in CLR
9. Any class needing resource clean-up should implement the Dispose method of the IDisposable interface,
and add the 'using' clause in c#. the VM will free the object and resource in the the score of 'using' clause, this way eliminate the delay of GC.
in D.net, the Destroy() method becomes an implementation to Dispose. nice
10. However the Delphi 8 compiler cannot impose the presence of a specific metaclass for classes not
compiled by Delphi but imported from assemblies written in other languages.
Saturday, April 03, 2004
Oracle Technical Interview Questions Answered - Part1
A Oracle DBA or developer must read this article
A Oracle DBA or developer must read this article
WinForms is dead misconceptions are misplaced
how soon will you have 100% Longhorn coverage? Here's my guess: 2012 to 2014. so learning the winform will keep your job up to 10 years.
how soon will you have 100% Longhorn coverage? Here's my guess: 2012 to 2014. so learning the winform will keep your job up to 10 years.
Friday, April 02, 2004
The .NET Show: Longhorn and WinFS
WinFS intergrated the Hiberarchy Files System, Relational Database and Rank based web search engine togeather, it sounds excited, but I am not sure if M$ could make the entire system easy to use, even for common people who has no IT knowledge.
WinFS intergrated the Hiberarchy Files System, Relational Database and Rank based web search engine togeather, it sounds excited, but I am not sure if M$ could make the entire system easy to use, even for common people who has no IT knowledge.
How to design good APIs and Why they matter
Good article, the author wrote the effective java before,
Good article, the author wrote the effective java before,
Thursday, April 01, 2004
The Code Project - XButton control for .NET - C# Controls
there are some GDI+ function in the source code, such as making the gradient effect
there are some GDI+ function in the source code, such as making the gradient effect
java thread model
A chinese article about the synchronized, DCL, lacyload, it introduces some important idea to all of developers who even are not java guy
A chinese article about the synchronized, DCL, lacyload, it introduces some important idea to all of developers who even are not java guy
Wednesday, March 31, 2004
Continuous Integration
we are using the visual build professional right now, but the tools here are free.
we are using the visual build professional right now, but the tools here are free.
Visual Studo 2005 and ASP.NET 2.0 made it simple ... way too simple
VS.Net is very easy to use comparing to other development tools such as java, but it also tied the developers with the MS's framework, is it good or bad?
VS.Net is very easy to use comparing to other development tools such as java, but it also tied the developers with the MS's framework, is it good or bad?
Monday, March 29, 2004
The Code Project - SourceGrid - Open Source C# Grid Control - C# Controls
compared to data grid, it is not dataset oriented thing in which I don't like,
compared to data grid, it is not dataset oriented thing in which I don't like,
Friday, March 26, 2004
Paging with Repeater control in ASP.NET
Repeater is a replacement of array or list in ASP.net, could it be used in somewhere else?
Repeater is a replacement of array or list in ASP.net, could it be used in somewhere else?
Thursday, March 25, 2004
Exception Handling in C#
using clause is used to do the exception handling,
and the class inside the using clause have to implement the IDisposable interface
using clause is used to do the exception handling,
and the class inside the using clause have to implement the IDisposable interface
Tuesday, March 23, 2004
ONJava.com: Effective Unit Testing with DbUnit [Jan. 21, 2004]
the good thing for DBUnit is that it could put the testing data into a XML file,
and use its API to load into database, so you could change the testing data
without changing code. there are another nice stuff called MockObject.
it has DotNet portion.
the good thing for DBUnit is that it could put the testing data into a XML file,
and use its API to load into database, so you could change the testing data
without changing code. there are another nice stuff called MockObject.
it has DotNet portion.
How to Shoot Yourself in the Foot with Code Coverage? (Part I)
Writing the unit test case could eliminate the bugs? who can make sure the test case is correct, I only wrote test case when I think it is necessary,
striving for 100% code coverage is kind of time wasting.
and the unit testing is only for developer, it could not reduce the work load of QA.
Writing the unit test case could eliminate the bugs? who can make sure the test case is correct, I only wrote test case when I think it is necessary,
striving for 100% code coverage is kind of time wasting.
and the unit testing is only for developer, it could not reduce the work load of QA.
Monday, March 22, 2004
Feedroll...freshly rolled news feeds for your site
a free blog tools to show your Blog item list on the web page
a free blog tools to show your Blog item list on the web page
Are memory mapped files (MMFs) always faster than normal file I/O techniques?
Danny wrote it, talking some compiler's I/O performance issue, very deep, worthy to read
Squaretwo.Blog - Avalon Performance Tip: Inheritable Properties, Resources, and Replacing Styles
it introduce the use of a configurable property trigger, it could replace the event handler and the changing the properties in code, the reason he metions is because setting inheritable properties is expensive. I didn't get the point, anyway, this method is flexible.
it introduce the use of a configurable property trigger, it could replace the event handler and the changing the properties in code, the reason he metions is because setting inheritable properties is expensive. I didn't get the point, anyway, this method is flexible.
In love with InfoPath
the infopath is a new member of MS office, it make the web service more useful, and will be a big impact to web based application.
the infopath is a new member of MS office, it make the web service more useful, and will be a big impact to web based application.
The .NET Show: Longhorn Indigo
WSE and remoting will be outdated, the change is just too quick and very hard to catch up
WSE and remoting will be outdated, the change is just too quick and very hard to catch up
Sunday, March 21, 2004
Tim Bray joins Sun, explains .NET's "three flaws"
A long thread about the DotNet Vs Java, I would say that it is a kind of time wasting, the success is not due to the technology but the money, just take a look the point of Nasdaq.
I really like some comment here. such as
Microsoft will lie, cheat, steal, or maybe just work very, very har. whatever it takes. That's the most intimidating realization of all for competitors.
A long thread about the DotNet Vs Java, I would say that it is a kind of time wasting, the success is not due to the technology but the money, just take a look the point of Nasdaq.
I really like some comment here. such as
Microsoft will lie, cheat, steal, or maybe just work very, very har. whatever it takes. That's the most intimidating realization of all for competitors.
QDocuments.net
it is a free chinese version Delphi IDE expert for generating the document based on the comment in the source code, just like JavaDoc in java, unfortunately the english version is not available.
it is a free chinese version Delphi IDE expert for generating the document based on the comment in the source code, just like JavaDoc in java, unfortunately the english version is not available.
ObjectDataSource Sample:
this articel shows how to bind the Business Object with Webform control by web config profile, nice way to separeate the presentation layer with domain layer
this articel shows how to bind the Business Object with Webform control by web config profile, nice way to separeate the presentation layer with domain layer
The Code Project - Multi Dimensional Arrays using Template Meta Programming - C++ / MFC
This code is written by c++, not c#, since the c# 2.0 supports generic programing, so understanding the template in C+ is good for understanding the generic in c#
This code is written by c++, not c#, since the c# 2.0 supports generic programing, so understanding the template in C+ is good for understanding the generic in c#
Saturday, March 20, 2004
which language feature in .net could be used in a OR mapping framework
1: Attribute, it is very good for creating the different database access adapter in the data access object.
2: partial class, it is good for separating the business logic code from Value Object code.
3: CodeDom, it could be used to generate the Value Object code according to the XML mapping file during the runtime. just like CGLib in hibernate.
1: Attribute, it is very good for creating the different database access adapter in the data access object.
2: partial class, it is good for separating the business logic code from Value Object code.
3: CodeDom, it could be used to generate the Value Object code according to the XML mapping file during the runtime. just like CGLib in hibernate.
Sysinternals Freeware - Utilities for Windows NT and Windows 2000 - Process Explorer
A great tools for system administrator and developer, you could see the DLL and resource that are used by the system process, it could help you looking for the maliced threads who are concealing in some sytem process, or debuging the application.
A great tools for system administrator and developer, you could see the DLL and resource that are used by the system process, it could help you looking for the maliced threads who are concealing in some sytem process, or debuging the application.
AskTom "Running procedures dynamically."
Good article, I really need this kind of feature since we treat stored procedure as a major development method considering its performance, but the parameter of stored proc is always a problem for us to make the generic data access object class.
the method this acticle introduced bring some advantage but losing some benefit such as compiling time type checking. so the tradeoff is everywhere
Good article, I really need this kind of feature since we treat stored procedure as a major development method considering its performance, but the parameter of stored proc is always a problem for us to make the generic data access object class.
the method this acticle introduced bring some advantage but losing some benefit such as compiling time type checking. so the tradeoff is everywhere
Java "Beats .NET for Processing XML," Report Claims (SYS-CON)
I can't beceive it, the MSXML is simple enough for me.
I can't beceive it, the MSXML is simple enough for me.
Subscribe to:
Posts (Atom)
Blog Archive
-
▼
2004
(352)
-
►
November
(20)
- systemwebmail.com good site to introduce the webm...
- Some delphi guys complain that there are no class ...
- ASP.NET: 10 Tips for Writing High-Performance Web ...
- MyGeneration - Home A very good open source code ...
- a good chinese article about hibernate and spring
- ODP.NET Tip of the Month
- Spring.NET - Application Framework http://www.spri...
- pinvoke.net: the interop wiki! It is a site that a...
- use IOCP in thread use IOCP in socket IOCP is mo...
- Contexts in .NET: Decouple Components by Injecting...
- DHTML Menu 4 (WebFX) version 3 allowed menus to co...
- MyXaml - Home a Open source XAML framework, it is ...
- Debugging Memory Problems Performance Counters fo...
- URLDownloadToCacheFile A very useful Windows plat...
- Manageability - Open Source Workflow Engines Writt...
- ActiveWidgets :: dhtml grid, javascript tables, .n...
- Open-Source ADO.NET XML Provider -- WilsonXmlDbCli...
- Accessing and managing MS Excel sheets with Delphi...
- Microsoft products using the .NET Framework
- MicroStrategy vs. Cognos Quick Tour
-
►
October
(39)
- ASP.NET Development Center Home: Using HTTP Module...
- PicoContainer - Five minute introduction to PicoCo...
- .NET Tools: Ten Must-Have Tools Every Developer Sh...
- MSDN TV: Using the WS-I Test Tools Understanding ...
- GC Performance Counters
- Code Generation with Codesmith
- I did a little bit survey about the Microsoft repo...
- Web Services Developer Center: An Introduction to ...
- System Unit: Why is Delphi 2005 the "must have" up...
- All Things Distributed: HPTS Day 2: How are databa...
- Wiki software - Wikipedia, the free encyclopedia
- Object Relational Tool Comparison
- benjaminm's blog - How to send attachments with We...
- Understanding Oracle OLAP Dimensions And Cubes
- GMail Drive shell extension-Converting GMail to Fi...
- Are web services too slow?
- Data Access and Storage Developer Center: Comparin...
- DHTML and .NET: Host Secure, Lightweight Client-Si...
- Boise Software Developers Group: Language Metrics
- EJB 3, the new JavaBeans
- Backwards Breaking Changes from version 1.1 to 2.0
- Basic Authentication in Delphi 7 SOAP
- TheServerSide.com - Simplifying EJB Development wi...
- I figure out a way about getting the distinct stor...
- I did some survey on MS .net rich client automated...
- Walkthrough – Generating RDL Using the .NET Framework
- MSDN TV: .NET Smart Client Applications
- FIX: ASP.NET Does Not Work with the Default ASPNET...
- Design a simple service-oriented J2EE application ...
- EJB 3.0 Tutorial
- oracle reference
- Numeric Functions
- Visual C# Developer Center: Tools
- Borland Blogging Community
- What is new in the Delphi Compiler - Danny Thorpe
- Altering the SOAP Message Using SOAP Extensions
- Securing XML Web Services Created Using ASP.NET
- Aspect# - An AOP framework for the .NET
- Raible's Wiki: AppFuse
-
►
September
(30)
- JValue, a framework for Value Objects in Java
- Association
- Inheritance
- Aggregation
- .NET Framework Tools
- a chinese novel
- ADO.NET Oracle 9i
- Oracle Tips and Tricks of the Week Part 5
- How to: Bind an Array to an ODP.NET Database Command
- C# 2.0: Create Elegant Code with Anonymous Methods...
- Servlet Performance Report
- Applying Design Issues and Patterns in Web Services
- CSDN???? Delphi.NET internal (2)
- Initializing code in c#
- The Data Warehousing, CWM and MOF Resource Page
- Java Function Programming
- The difference among different DotNet data provide...
- WS Spec
- Inversion of Control Containers and the Dependency...
- Joel on Software - How Microsoft Lost the API War ...
- .NET Architecture Center: : Secrets of Great Archi...
- web security
- ASP.NET 2.0 new feature
- Java HashMap
- AskTom "Dynamic SQL vs Static SQL"
- Interface inconsistencies between ASMX Web service...
- Office Developer Center: Using the XML Features of...
- DelphiForFun Home
- Pascal Script™ in remobjects.com
- .NET Architecture Center: : Secrets of Great Archi...
-
►
August
(29)
- The long transaction and work management integration
- VCL message
- memory fundtion
- The Fastcode Project
- Delphi Memory Manager Test
- OLAP link
- Top Ten Tips for Web Services Interoperability
- MSDN TV%3A WSE 2.0 Adapter for BizTalk Server 2004
- My favourite tools and controls - a list of links
- Java Programming with Oracle JDBC Chapter 19 Perfo...
- Visual Studio Home: Product Pricing Primer
- Search and Download Oracle Database, Application S...
- JDocs.com
- Invoking MSIL Functions Under Loader Lock
- Introduction to GDI+
- Some link about the cert test iTeBooK CertCity sha...
- Pluggable architecture
- A+ Certification MCSE Training CCNA Network+ CISSP...
- ImageFast: A stand-alone library for quickly loadi...
- MSDN .NET Framework Developer Center: Regional Dir...
- Java News Brief::OCI::April Issue
- .NET Matters: How Microsoft Uses Reflection -- MSD...
- .NET Quiz
- report service
- TheServerSide.NET - Tech Talks
- Visual JSTL
- Jamie Cool - Demo of ClickOnce
- english magaine
- BitTorrent Protocol Specification
-
►
July
(25)
- ASP.NET Home: ASP.NET Whidbey: Data Access in ASP....
- Data Access and Storage Developer Center: ADO.NET ...
- ASP.NET Home: ASP.NET Whidbey: Creating Custom Web...
- Web Services: Capturing and Analyzing Client Trans...
- What is ECO?
- ASP.NET Session State FAQ
- nhibernate
- english BT
- [Chapter 5] 5.3 Bulk Querying with the BULK COLLEC...
- D7 Ent/D8 Arch component migration list - by Serge...
- N/Direct - The .NET Interoperability Resource Center
- Calling constructors at runtime in .NET and Win32
- Multi-file Assemblies: What and How
- Programmingtutorials.com - delphi Tutorials
- Avalon OP
- ASP 2.0 callback
- Visual C# Developer Center: Refactoring C# Code Us...
- Let’s see the history of java web development, the...
- a chinese article about the web tech(fastm
- Free Pascal supplied units : Reference guide.
- 23 The TYPINFO unit
- Regular Expression
- A IT FTP site
- MCSD.net
- Mastering Delphi 6 Source Code- XML
-
►
June
(58)
- .NET Designers - part 1
- Stress Testing Web Application using Microsoft's W...
- Paging in J2EE: Manage Large Result Sets Efficiently
- Building Services Today
- Performance Quiz #3
- What's new in System.Reflection (and friends)
- Another attempt at Functions as objects.
- Hijack Session Variables in ASP.NET Robbe Morris
- A chinese article about the hibernate
- Processing XML with Java
- a chinese article about Java and XML
- Java Stored Procedures
- Using Oracle SOAP
- use jdeveloper to do the web service
- Database Web Services Samples and How-To
- Java Stored Procedures
- Creating the Java Axis Client
- Implementing a Java Stored procedure
- Developing Microsoft ASP.NET Server Controls and C...
- Windows Service Administration with .NET Part 3 - ...
- Visual Studio 2005: Bridge the Gap Between Develop...
- A chinese article about the thread
- Office Developer Center: Creating Charts in Micros...
- Netcoole Migration Services
- I wrote a small copy file routine that support ove...
- lib kernel32.dll reference for Windows Api program...
- overlapped
- a robot app that is written by java script
- TheServerSide.com - The State of Workflow
- The Code Project - Create Desktop Widget Using Emb...
- C# 2.0 Specification | hosting by ferca.com
- 15 Seconds : Introducing .NET Generics
- Writing n-Tier Applications
- Can Web Services Inherit HTTP Compression?
- benjaminm's blog - WSE 2.0 Web service security in...
- .NET tip: Getting the Users Home, Temp or My Docum...
- Programming Contest: Open Tools for C#Builder has ...
- BabelCode Web Service
- Aaron Johnson: Hibernate: Deleting Objects
- The Code Project - Transactions in ASP.NET WebServ...
- good project management
- Sysinternals Freeware
- CodeCentral: Code converter for C# Builder and Del...
- The benefits of Windows 2003 clustering with Excha...
- Create a Self-Updating WinForms App with the Appli...
- .Net singleton pattern multi-threading issue...
- Exploring the Singleton Design Pattern
- good chinese article- use AOP in Dot Net
- Use web service to implement the Auto Update of Wi...
- use Mutex to ensure the single instance of applica...
- How to retrieve text under the cursor (mouse pointer)
- Crossing the process boundry with .NET
- Checking if an application is already running
- Microsoft Windows Media - Windows Media Player 10 ...
- 282402 - How to Configure Internet Explorer to Hav...
- CTS400 Using Web Services Enhancements v2.0 for Me...
- TechEd: CTS405 Connected Systems: Choosing a Hosti...
- Server-Side Unit Testing in ASP.NET How to create ...
-
►
May
(46)
- CSDN_C#:Web Service exception handling
- Handling and Throwing Exceptions in XML Web Services
- 3 Leaf: Web Services Resources
- Encrypting one parameter on a WebMethod with WSE
- Building Robust and Reliable Software
- Web Services Developer Center: Web Services Enhanc...
- Undocumented Delphi 8 property access specifiers P...
- Integrating Help in Delphi 8
- The Oracle at Delphi: Delphi Win32: Why packages a...
- Ebook download
- DEV410: Inside the ASP.NET Runtime
- Some code shows how to manage transaction in multi...
- DBAsupport.com : Oracle 9i Central : Autonomous an...
- DEV310: Top 10 Tricks for a Killer ASP.NET Web App...
- MSDN TV: Developing Applications Using SQL Server ...
- Report Definition XML Diagram
- .NET Architecture Center: : Service-Oriented Archi...
- Visual C# Developer Center: C# Language
- ASP.NET: Application level data caching with callb...
- Visual C# Home: Wonders of Windows Forms: Extendin...
- Web service standard Basic Profile - Version 1.0 (...
- Deconstructing ASMX
- .NET: Safe Thread Synchronization -- MSDN Magazine...
- asp.net csdn FAQ
- Oracle and .NET, a tough one...
- A macro to automatically attach to aspnet_wp.exe
- XML extensibility, xsi:type, XmlSerializer and con...
- AskTom "Return values from a PL/SQL table into a r...
- about Oracle type
- Manage C# Objects
- Data Access and Storage Home: Accessing Oracle 9i ...
- debug skill in c#
- Logs and Traces in .Net
- UI Consistency: Title Bar Help Buttons
- 10. Chief Programmer Teams
- OutOfMemoryException and Pinning
- .NET Architecture Center Home: Integration Pattern...
- Writing High-Performance Managed Applications : A ...
- Radek's Newspaper Styles for FeedDemon
- . WinForm 2.0 Features
- MSDN TV: Generic APIs in the Visual Studio 2005 .N...
- The Scope of Hibernate Three
- Improving .NET Application Performance and Scalabi...
- Deconstructing Remoting
- No title
- chinese article : weak reference in c#
-
►
April
(46)
- ANN: Improve your "Contract First" Web services de...
- .NET: Safe Thread Synchronization -- MSDN Magazine...
- Delphi and C# comparison
- write self modify code by delphi
- The Code Project - Full-featured Automatic Argumen...
- Instantiating New Objects From Generics generic i...
- Build this XAML Rendering Engine for Your .NET App...
- A Vote: 10 Things Developers Currently Do w/ SQL T...
- WinForms: How to Use Mono to Get Microsoft .NET GU...
- TreeView ASP web control
- Object-relation mapping without the container Goo...
- Making web forms easy with InfoPath and "InfoView"...
- ASP.NET and Struts: Web Application Architectures ...
- ObjectSpaces and Whidbey ObjectSpace will be come...
- FTPOnline - VSLive! SF 2004 - Model Apps More Effe...
- Unit Testing a Windows Forms or Console Applicatio...
- InfoPath and XAML! Friends or foes?
- convert the connect by clause from Oracle to MS SQL
- DevCentral - - Thread Synchronization in Java Code
- Use java open source to develop web application
- Excel automation (interop) with the .NET Framework
- A chinese article about ASP.Net tree view
- Office Developer Center: Lab 1: Editing Forms and ...
- XML Developer Center Home: Efficient Techniques fo...
- Some chinese ASP.NET article-Http Handles
- Java- Use Reflection to enhance Visitor pattern
- Longhorn Developer Center Home: Longhorn Concept V...
- Outputting to native Excel try it later
- Java Studio Creator: An IDE to Create Web Applicat...
- Visual Studio Magazine - Database Design - Access ...
- Continuous Integration with CruiseControl.net and ...
- Office Developer Center: Using the Excel 2003 Obje...
- Web Services Developer Center Home: Java/.NET Inte...
- Office Developer Center: Lab 7: Performing Calcula...
- Office Developer Center: Lab 3: Adding Functionali...
- MF Bliki: SpecificationByExample
- Essential Delphi 8 for .NET There are a preview c...
- Oracle Technical Interview Questions Answered - Pa...
- XP flow Chart
- WinForms is dead misconceptions are misplaced how...
- MSDN TV: Windows Forms and Non-Rectangular Applica...
- The .NET Show: Longhorn and WinFS WinFS intergrat...
- How to design good APIs and Why they matter Good ...
- CS CODEDOM Parser I might use CodeDom sometime in ...
- The Code Project - XButton control for .NET - C# C...
- java thread model A chinese article about the syn...
-
►
March
(55)
- Continuous Integration we are using the visual bu...
- To GAC or not to GAC? it is not my first time see...
- FxCop Team Page it is a tools that could make your...
- Visual C# Home: C# 2.0: Create Elegant Code with A...
- Visual Studo 2005 and ASP.NET 2.0 made it simple ....
- The problem with Multi-Cast Delegates delegation ...
- Test-Driven C#: Improve the Design and Flexibility...
- The Code Project - SourceGrid - Open Source C# Gri...
- Enumerators and boxing.. the interface IEnumerato...
- Research Services need to check it out sometimes.
- CodeGuru: C++ Tip: Receiving & Converting Numeric ...
- GUIdebook > Interfaces The desktop snapshot of ev...
- The New Delphi 8 Help System
- chinese FTP download site
- Design Guidelines Update: Generics introduce the...
- Paging with Repeater control in ASP.NET Repeater ...
- COCOON's Tech some DotNet book download
- Exception Handling in C# using clause is used to ...
- A Brief Synopsis of C# Class and Method Modifiers
- microsoft effective functional specification-chine...
- 5 The Oracle Data Provider
- The VS7.X Debugger doesn't work, What can I do? g...
- ONJava.com: Effective Unit Testing with DbUnit [Ja...
- Changes to Functionality in Service Pack 2 for Mic...
- How to Shoot Yourself in the Foot with Code Covera...
- Avoid the GAC
- CLR Hosting some link about CLR Hosting
- Encrypting SOAP Messages Using Web Services Enhanc...
- Feedroll...freshly rolled news feeds for your site...
- Are memory mapped files (MMFs) always faster than...
- TestRunner for NUnit A nice thing for Nunit is tha...
- Squaretwo.Blog - Avalon Performance Tip: Inheritab...
- In love with InfoPath the infopath is a new memb...
- The .NET Show: Longhorn Indigo WSE and remoting w...
- C# Team Bloggers
- PermaLink the demo about the Avalon and XAML, the ...
- Tim Bray joins Sun, explains .NET's "three flaws" ...
- QDocuments.net it is a free chinese version Delphi...
- Some chinese IT E-book
- COM thread model chinese article, simple and clean
- ObjectDataSource Sample: this articel shows how t...
- The Code Project - Multi Dimensional Arrays using ...
- The Code Project - Multi-monitor programming in C#...
- which language feature in .net could be used in a ...
- divil.co.uk - Windows Forms Controls A free librar...
- Sysinternals Freeware - Utilities for Windows NT a...
- Some interview question from M$ China
- Installers for GIMP for Windows A open source tool...
- .NET Resource Generator: Home
- AskTom "Running procedures dynamically." Good art...
- Java "Beats .NET for Processing XML," Report Claim...
- The Code Project - Super Combo Box - combo-box wit...
- Awesome ASP.NET V2 tip: specifying the assembly na...
- Coding Best Practices Using DateTime in the .NET F...
- Export data in a web application to Excel includin...
-
►
November
(20)