Monday, August 30, 2010

08/30/10: Debug Sharepiont 2007 Event Handler

 

1. In VS2008 , Compile application in debug mode

2. Run “gacutil /i *.dll” in bin of debug folder to register dll in GAC

3. Map gac folder so that it would not open in under a shell framework with command :

subst L: c:\windows\assembly

4. In L:\GAC_MSIL\ …., copy *.dll and *.pdb file from previous compiled folder

5. IISreset

6. in VS2008, attach processs : w3wp.exe and set break point.

Sunday, August 29, 2010

云计算浅谈之一:云计算介绍(ZT)

 

微软前一段通知,微软的云计算平台windows azure在中国的服务将会于10月1日开通。微软承诺未来90%的开发人员将从事云计算方面的工作。在这个重要的时刻,是时候提醒更多的开发人员做技术上的更新。上月有机会受邀为某培训机构的软件专业暑期班开设云计算讲座,遂将过去的工作总结了一下,发现自己都获益匪浅.现在以连载方式的发表(共五讲),以润读者.

      本讲讲3点内容: 

  • 云计算的产生
  • 云计算架构
  • 云计算服务构成

    1.云计算的产生

     任何一项新的技术产生一定有其背景。现在我们就看看是哪些因素导致云计算的产生。假如你是一个程序员,希望创建新的网站。你会发现为了提供好的服务,你需要花巨资购买硬件,然后是巨资购买系统软件,再之后需要一个维护团队。我的一位朋友为了他的电子传真服务,投入70万的费用。当然这些仅仅是开始,一个网站还要考虑一个头痛的问题,某些服务比如电子商务,可能你的90%的业务就集中在某些大的节日。网址的访问有高峰,低峰,那么传统的网站可能就要以高峰时段的访问量来配置你的硬件设置,以免流失客户,在低峰时段,硬件的资源就处于闲置状态。同时网站还要保证系统的高的稳定性,无论洪水,地震,政治不稳定导致的战争都不影响网站的运行,这些不是一个小公司可以保证的。

     现在换一种思维,如果一个公司提供这样的服务,提供服务器,所有所需软件已经安装好了,他们保证系统99.999%可用。你所做的只是按照你的需要租用这些资源,任何时间修改配置文件,就可以扩展或收缩你占用资源:内存,cpu,空间等。不因为多占用资源而浪费,也不因为资源不够而流失客户。而这个公司都是世界级的大公司,他们在全球建立多个数据中心,你的任何数据都在不同的地方至少有三个备份。无论洪水,地震,政治不稳定导致的战争都不影响网站的运行。同时还由于新的技术革命使得这样的数据中心较传统意义上的数据中心维护成本大大降低,你只需低廉的租金就可以让你的网站拥有与大公司叫板的底气,这样的服务你需要吗?这些服务就是云计算所承诺的。

     那么什么是云计算?其实互联网本身最早就被称为云,现在的“云”只是互联网的子集,用来特指由服务供应商提供的建立互联网应用的软件,平台,架构和消费服务。这两年云计算也很热,很多的概念都出来了,别说年轻的程序员来讲,很多老的程序员也是一头雾水。比如:

  • SaaS 
    软件即服务
  • PaaS
    平台即服务
  • S+S
    软件加服务 
  • DaaS

    数据库即服务

这些每一项都是云计算服务,那么为什么还要分这么多种呢?这里我们可以做一个比喻,一个人赶象,遇到了四个瞎子,每个瞎子摸着象的不同部位,然后各人心中就有了象的不完整印象。正确的答案是,以上四种提法其实都反映了云计算的不同方面。我们在后面的云计算服务构成再细讲。

      我们现在主要讲云计算如何产生的。由四家公司对云计算的产生做出了巨大的贡献:第一个公司是SalesForce.com,这家公司最著名的产品是 CRM(客户关系管理系统)。这家公司发现很多中小型的公司购买不起CRM产品,同时也认为这里存在着巨大的市场。因此,就将他们的CRM产品革命性地实现了软件即服务即SaaS,让千万家中小企业租用他们的在线CRM服务。他们的做法很成功,SaleForce.com目前有几千万的用户。 SalesForce.com的成功使更多的软件公司认识到SaaS的潜力。第二个公司是vmware,他们的贡献在于虚拟机技术,使得操作系统不再倚赖硬件。以前一台电脑中可以安装多个操作系统,但永远只能有一个操作系统在运行。虚拟机技术在可以让多个操作系统同时运行,并且分享计算机的硬件资源。第三个和第四个公司是Microsoft 和Amazon 。他们不仅紧跟技术发展步伐,实现了操作系统,软件的虚拟化,同时将虚拟技术扩展应用于数据中心,最终导致云计算平台的产生。

2.云计算架构

    下面的这张图就反映了云计算的架构。在图中,最核心的当然是数据中心海量的服务器加上负载平衡器,DNS,Switches,Routers,这是传统的数据中心的架构。多出的是管理功能组件(Management Fabric)和计量(Metering),计费(billing),报告(Reporting)功能组件。

     管理功能组件所做的事情是,根据事先准备好的安装了全部所需软件的各种虚拟机(OS Image)镜像,根据用户的配置,自动将用户选定的虚拟机安装到服务器银行中,根据用户配置设定使用的硬件资源,并且管理用户部署应用的整个生命周期。管理功能的自动化大大降低了数据中心的维护成本。

     用户对资源的使用无论上传,下载,占用存储空间,计算等都有计量功能模块记录,最后计费,然后产生每月报告。

     所以最后整个数据中心就成了一个超级计算机,为用户提供云计算服务。

    3.云计算服务构成

如前所述,云计算特指由服务供应商提供的建立互联网应用的软件,平台,架构和消费服务。分如下四个层次:

  • 消费者服务层

这其实是我们每个人都熟悉的一些服务,比如邮件,及时消息,网络查询,网络游戏,手机应用,社会网络,网络地图。这些存在了很多年,现在很多公司将这些服务实现支持更过的标准,并部署到云计算平台上。

  • 企业服务层

今天大部分SaaS应用比如Salesforce.com CRM,Microsoft Dynamic CRM online,国内的阿里软件都属企业服务层。

  • 中间件服务层

Amazon 电子商务系统
Google 搜索服务
Windows Live service( Bing搜索, windows live 标示服务等)
Windows Azure AppFabric

     微软最喜欢的也许就是S+S服务,比如Office软件使用Windows Live Skydrive,分享保存文档。

  • 平台服务层

PaaS:Amazon's Elastic Compute Cloud (EC2),Microsoft Windows Azure
DaaS:Microsoft SQL Azure

    下一讲介绍云计算服务供应商,及SaaS对软件交付模式及产业的影响

云计算实例思维导图工具Mindv  ,了解更多内容访问http://www.mindv2.com/(中国),http://www.mindv.com/(国际)

    声明:本次讲座主要内容参考Tejaswi Redkar所著"Windows Azure Platform"

Sunday, August 22, 2010

08/21: Remove Duplicate Records From SQL Server

 

CREATE TABLE DuplicateRcordTable (Col1 INT, Col2 INT)
INSERT INTO DuplicateRcordTable
SELECT 1, 1
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 1 --duplicate
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2 --duplicate
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4
GO

SELECT *
FROM DuplicateRcordTable
GO

WITH CTE (COl1,Col2, DuplicateCount)
AS
(
SELECT COl1,Col2,
ROW_NUMBER() OVER(PARTITION BY COl1,Col2 ORDER BY Col1) AS DuplicateCount
FROM DuplicateRcordTable
)
DELETE
FROM CTE
WHERE DuplicateCount > 1
GO

SELECT *
FROM DuplicateRcordTable
GO

Friday, August 20, 2010

08/20 : ASP.NET Tempory File Save Setting

 

To save temporary files in a specified folder  for a web project , the following setting is required.

 

  • Right click the specified folder , under security tab, add user named [machinename]\ASPNET if this user does no exist
  • Assign write permission to this user

http://static.asp.net/asp.net/images/acls.jpg

Wednesday, August 18, 2010

08/18 : Call Web Service With Jquery

 

Jquery code In .Net 2.0/.Net 3.5

Need to add .d (data) to get data of return result in .Net 3.5

 

2.0:

$.ajax({
                       type: "POST", //POST
                       url: "GridViewDrillDownjQueryAjax.aspx/GetOrders", //Set call to Page Method
                       data: params, // Set Method Params
                       beforeSend: function(xhr) {
                           xhr.setRequestHeader("Content-type", "application/json; charset=utf-8");
                       },
                       contentType: "application/json; charset=utf-8", //Set Content-Type
                       dataType: "json", // Set return Data Type
                       success: function(msg, status) {
                           alert(msg);
                           $('#progress').css('visibility', 'hidden');
                           $(master).children()[0].src = src;
                          $(detail).html(msg);
                           $(detail).slideToggle("normal"); // Succes Callback
                       },
                       error: function(xhr, msg, e) {
                           alert(msg); //Error Callback
                       }
                   });

3.5

$.ajax({
                       type: "POST", //POST
                       url: "GridViewDrillDownjQueryAjax.aspx/GetOrders", //Set call to Page Method
                       data: params, // Set Method Params
                       beforeSend: function(xhr) {
                           xhr.setRequestHeader("Content-type", "application/json; charset=utf-8");
                       },
                       contentType: "application/json; charset=utf-8", //Set Content-Type
                       dataType: "json", // Set return Data Type
                       success: function(msg, status) {
                           alert(msg);
                           $('#progress').css('visibility', 'hidden');
                           $(master).children()[0].src = src;
                          $(detail).html(msg.d); // d means data
                           $(detail).slideToggle("normal"); // Succes Callback
                       },
                       error: function(xhr, msg, e) {
                           alert(msg); //Error Callback
                       }
                   });

Sunday, August 15, 2010

08/15: SQL Server Row_Number Function(ZT)

 

SQL Server 2005提供了一个新的函数(Row_Number())来产生行号。我们可以使用这个新函数来删除原来表中的重复数据,只用通常的表达方式再加上Row_Number()函数。

 

如果需要删除大量重复数据时,可以使用如下脚本

WITH [EMPLOYEE ORDERED BY ROWID] AS
(SELECT ROW_NUMBER() OVER (PARTITION BY EMPID,FNAME,LNAME ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE)
Delete FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID>=2

 

 

Original Article:

 

我们知道,SQL Server 2005和SQL Server 2000 相比较,SQL Server 2005有很多新特性。这篇文章我们要讨论其中的一个新函数Row_Number()。数据库管理员和开发者已经期待这个函数很久了,现在终于等到了!
通常,开发者和管理员在一个查询里,用临时表和列相关的子查询来计算产生行号。现在SQL Server 2005提供了一个函数,代替所有多余的代码来产生行号。

我们假设有一个资料库[EMPLOYEETEST],资料库中有一个表[EMPLOYEE],你可以用下面的脚本来产生资料库,表和对应的数据。

USE [MASTER]
GO

IF  EXISTS (SELECT NAME FROM SYS.DATABASES WHERE NAME = N'EMPLOYEE TEST')
DROP DATABASE [EMPLOYEE TEST]
GO


CREATE DATABASE [EMPLOYEE TEST]
GO


USE [EMPLOYEE TEST]
GO

IF  EXISTS SELECT * FROM SYS.OBJECTS HERE OBJECT_ID = OBJECT_ID(N'[DBO].[EMPLOYEE]') AND TYPE IN (N'U'))


DROP TABLE [DBO].[EMPLOYEE]


GO

CREATE TABLE EMPLOYEE (EMPID INT, FNAME VARCHAR(50),LNAME VARCHAR(50))
GO


INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2021110, 'MICHAEL', 'POLAND')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2021110, 'MICHAEL', 'POLAND')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2021115, 'JIM', 'KENNEDY')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2121000, 'JAMES', 'SMITH')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2011111, 'ADAM', 'ACKERMAN')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (3015670, 'MARTHA', 'LEDERER')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (1021710, 'MARIAH', 'MANDEZ')
GO


我们可以用下面的脚本查询EMPLOYEE表。



SELECT EMPID, RNAME, LNAME FROM EMPLOYEE



这个查询的结果应该如图1.0



2021110



MICHAEL



POLAND



2021110



MICHAEL



POLAND



2021115



JIM



KENNEDY



2121000



JAMES



SMITH



2011111



ADAM



ACKERMAN



3015670



MARTHA



LEDERER



1021710



MARIAH



MANDEZ



图1.0



在SQL Server 2005,要根据这个表中的数据产生行号,我通常使用下面的查询。



SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME INTO EMPLOYEE2 FROM EMPLOYEE ORDER BY EMPID



这个查询创建了一个新的表,用identify函数来产生行号。我们用下面的查询来看看这个表的数据。



SELECT ROWID, EMPID, FNAME, LNAME FROM EMPLOYEE2


上面的查询结果如图1.1



1



1021710



MARIAH



MANDEZ



2



2011111



ADAM



ACKERMAN



3



2021110



MICHAEL



POLAND



4



2021110



MICHAEL



POLAND



5



2021115



JIM



KENNEDY



6



2121000



JAMES



SMITH



7



3015670



MARTHA



LEDERER



图1.1



这个查询结果很明显EMP=2021110的行是重复的数据。



要删除EMPID=2021110的重复数据,我们必须在EMPLOYEE2表中删除,不能直接在EMPLOYEE中删除。



SQL Server 2005提供了一个新的函数(Row_Number())来产生行号。我们可以使用这个新函数来删除原来表中的重复数据,只用通常的表达方式再加上Row_Number()函数。



让我们用Row_Number()函数根据EMPID来产生ROWID。



SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE



上面的查询结果如图1.2



1



1021710



MARIAH



MANDEZ



2



2011111



ADAM



ACKERMAN



3



2021110



MICHAEL



POLAND



4



2021110



MICHAEL



POLAND



5



2021115



JIM



KENNEDY



6



2121000



JAMES



SMITH



7



3015670



MARTHA



LEDERER



图1.2



在这个结果中,我们可以区别EMPID是2021110的重复数据。



我们可以用通用表查询表达式和Row_Numner()函数来选出重复的那行数据。



WITH [EMPLOYEE ORDERED BY ROWID] AS

(SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE)


SELECT * FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID =4



上面的查询结果如图1.3



4



2021110



MICHAEL



POLAND



图1.3



这一行重复的数据可以用下面这个通用表和Row_Number()函数来删除。



WITH [EMPLOYEE ORDERED BY ROWID] AS

(SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE)


DELETE FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID =4



删除以后,我们可以用下面的查询语句看一下结果。



SELECT * FROM EMPLOYEE



这个查询结果如图1.4



2021110



MICHAEL



POLAND



2021115



JIM



KENNEDY



2121000



JAMES



SMITH



2011111



ADAM



ACKERMAN



3015670



MARTHA



LEDERER



1021710



MARIAH



MANDEZ



图 1.4



这里我们可以看到,重复的数据已经被删除了。



总结



在这篇文章中,我们讨论了SQL Server 2005 的新特性Row_Number()函数,还有通常的表表达式,然后如何使用这两个来删除重复的行。

Thursday, August 12, 2010

08/12/2010: CSS 2.0 Box Model

 

 

image