Generic Cialis

Javascript编程基础

1.null 与 undefined

* 从一个对象中获取某个属性,如果该对象及其 prototype 链 中的对象都没有该属性的时候,该属性的值为 undefined 。
* 一个 function 如果没有显式的通过 return 来返回值给其调用者的话,其返回值就是 undefined 。有一个特例就是在使用new的时候。
* JavaScript 中的 function 可以声明任意个形式参数,当该 function 实际被调用的时候,传入的参数的个数如果小于声明的形式参数,那么多余的形式参数的值为 undefined 。
* null为空对象,注意与空的对象({})的区别。


2.if 表达式

* Null总是为假(false)
* Undefined总是为假(false)
* Number+0,-0 或是 NaN 的时候为假,其它值为真
* String空字符串的时候为假,其它值为真
* Object总是为真(true)

3.Array

JavaScript 中的数组(Array)和通常的编程语言,如 Java 或是 C/C++ 中的有很大不同。在 JavaScript 中的对象就是一个无序的关联数组,而 Array 正是利用 JavaScript 中对象的这种特性来实现的。在 JavaScript 中,Array 其实就是一个对象,只不过它的属性名是整数,另外有许多额外的属性(如 length)和方法(如 splice)等方便地操作数组。 Read the rest of this entry »

使用.NET API加密Config文件片段

有时候为了保护.config文件中的敏感信息,我们需要对其中的部分内容进行加密。在MSDN的一篇文档里,提供了一个使用命令行工具通过DPAPI进行配置文件加密的办法。这篇文章里提供另一个通过.NET API的方法加密配置文件的途径。

所需要编写的代码其实非常简单,如下是一个简单的示例:

  1. Configuration myConfig = WebConfigurationManager.OpenWebConfiguration("/");
  2. ConfigurationSection mySection = myConfig.GetSection("appSettings");
  3. mySection.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
  4. myConfig.Save();

主要使用了ProtectSection这个方法来对指定的配置项进行加密。解密的过程也非常简单,只要调用UnprotectSection方法即可,示例代码如下:

  1. Configuration myConfig = WebConfigurationManager.OpenWebConfiguration("/");
  2. ConfigurationSection mySection = myConfig.GetSection("appSettings");
  3. mySection.SectionInformation.UnprotectSection();
  4. myConfig.Save();

或许你有更多更好的保护配置文件中敏感信息的策略和方法,欢迎与我们交流 ^_^

C# 邮件批量发送程序

前一段时间使用 System.Net.Mail.MailMessage 类写了一个邮件批量发送的程序,在调试和测试中遇到的一些问题和大家共享一下,希望能够对大家有所帮助。

用MailMessage 类发送邮件的方法有很多,但我推荐使用异步方式发送邮件,尤其是发送批量邮件,这是因为程序在向邮件服务器提交多个邮件时,同步方式是等到上一封邮件提交完成并且有发送状态返回,才开始发送下一封,如果这时连接邮件服务器的网络比较慢,没有及时响应,那么程序一直处于等待状态,会影响后面的发送,有时还会产生重复提交,使收件人收到多封重复邮件。

下面是一个异步发送的实例。
Read the rest of this entry »

FOR XML PATH 语句的应用

大家都知道在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例。

DECLARE @TempTable table(UserID int , UserName nvarchar(50));
insert into @TempTable (UserID,UserName) values (1,'a')
insert into @TempTable (UserID,UserName) values (2,'b')
 
select UserID,UserName from @TempTable FOR XML PATH

运行这段脚本,将生成如下结果:
Read the rest of this entry »

在HTML页面中嵌入Flash元素的三个常见问题

1.Flash在form中与JavaScript通信

在HTML页面中嵌入Flash对象,并使用JavaScript与其进行通信(例如调用Flash中的某个方法)时,页面加载Flash之后,在IE浏览器中可能会出现这样的错误:‘flashObjectId’ 未定义。(其中flashObjectId是嵌入flash对象的id)。

这是因为Flash是通过ExternalInterface来与JavaScript进行通信的,当在form标签中使用Flash对象的 ExternalInterface时,是通过window.flashObjectId来获取Flash 对象在JavaScript中的引用的。

但是上面的代码只能获得不在form标签中的Flash对象,而form元素里面的Flash对象只能通过这样的代码来获得:document.forms[0].flashObjectId

Adobe官方提供了一个解决方案:

嵌入Flash对象之后,在页面中加入以下脚本:

window.flashObjectId = document.forms[0].flashObjectId;

2.flash遮挡页面中元素
Read the rest of this entry »

Scrum在互联网开发中的一些体会

互联网开发的特点是什么,用一句很有名的话来说,就是always beta,什么是always beta,直白的翻译,永远的测试版,为什么会这样,因为用户的需求总是在不断的变化,唯一不变的就是变化本身。这种特点的开发特别适合敏捷开发,而强调自组织特点的Scrum又是其中一个值得尝试的开发模式。点评在最近一段时间内做了一些这方面的尝试,在实践的过程中得到了一些粗浅的认识。 Read the rest of this entry »

使用SyndicationFeed构建RSS输出

.NET Framework 3.5中提供了SyndicationFeed来构建RSS和ATOM的输出,其位于System.ServiceModel.Syndication这个namespace下。这使得我们可以使用官方提供的类来组织RSS输出以及获取RSS和ATOM的内容,以下是一段示例代码:

protected override void OnLoad(EventArgs e)
{
 
  
SyndicationFeed feed = new SyndicationFeed("商户信息", "提供商户信息列表", new Uri("http://www.pumaboyd.com/feed"));
 
  
Collection<SyndicationItem> items = new Collection<SyndicationItem>();
 
  
foreach (var shop in RssData.GetShops())
  
{
        
SyndicationItem item = new SyndicationItem();
        
item.Title = new TextSyndicationContent(shop.ShopName + shop.BranchName);
        
item.Content = new TextSyndicationContent(shop.Address);
        
item.Summary = new TextSyndicationContent(shop.Address);
        
item.Links.Add(new SyndicationLink(new Uri("http://www.pumaboyd.com/shop/" + shop.ShopID)));
        
item.Authors.Add(new SyndicationPerson("pumaboyd@163.com",shop.AddUser,"http://www.pumaboyd.com"));
                
item.PublishDate = shop.AddTime;
                
item.Id = "http://www.pumaboyd.com/shop/" + shop.ShopID;
                
items.Add(item);
        
}
 
        
feed.Items = items;
 
 
        
Response.ContentType = "application/rss+xml";
        
var output = new StringWriter();
        
var writer = new XmlTextWriter(output);
        
feed.SaveAsRss20(writer);
        
Response.Write(output.ToString());
 
 
}
}

FireFox下用js给div定位与在IE下的差别

我们知道,如果obj是一个div对象,在IE中要使用javascript给它定位,只需要这样写:obj.left=XXX;obj.top=XXX;

这样的写法在IE里可以顺利的通过,但是到了FireFox和Chrome下,就完全行不通了,因为这并不是标准的写法。在FireFox有规定,给像width、height、 left、top这样的属性赋值,后面必须要定义单位,也就是我们常用的"px"。

因此,如果把上面的语句换成:obj.left=XXX + "px";obj.top=XXX + "px";就可以顺利的在FireFox和Chrome下运行了

C#性能测试扩展函数

我们平时在使用Stopwatch统计时间的时候一般会这样使用。

Stopwatch watch = Stopwatch.StartNew();
for (int i = 0; i < runs; i++)
{
.......
}
watch.Stop();

这样就可以统计到运行的时间,但用过Python的人都知道,Python 社区有句俗语:“Python 自己带着电池” 。Python 2.3以后的版本里, 具备一个叫做 timeit 的完美计时工具。那么其实用扩展函数也可以实现这个类似功能(PS:其实功能还是相差蛮大的,但皮已经画的比较像了)。

先演示如何使用(统计A.Run这个方法运行100次的使用时间)

class Program
{
 
static void Main(string[] args)
 
{
 
A a = new A();
 
Action act = a.Run;
 
Console.WriteLine(act.Profile(100));
 
Console.Read();
 
}
}
 
public class A
{
 
public void Run()
 
{
 
for (int i =0; i < 100000; i++) ;
 
}
}

其中Profile()为Action的扩展方法,用扩展方法来封装运行时间的记录,至少避免了重复写Stopwatch。

public static class FunctionHelper
{
 
public static string Profile(this Action func, int runs)
 
{
 
Stopwatch watch = Stopwatch.StartNew();
 
for (int i = 0; i < runs; i++)
 
{
  
func();
 
}
 
watch.Stop();
 
 
float sec = watch.ElapsedMilliseconds / 1000.0f;
 
float freq = runs / sec;
 
 
 
return String.Format("execute runs:{0};sec:{1};freq",
 
runs//运行次数
 
sec,   // 运行时间
 
freq // 平均运行时间
 
);
 
 
}
}

有了这个扩展方法,你就可以对某些特定的方法自动调用性能函数了。大家平常在检测某段代码或某个函数运行效率时,还有什么更好的方法吗?欢迎大家讨论一下这个问题。^_^

F4何去何从 --- 大视野观察Framework 4.0

Framework 4.0 CTP版发布一个多月了,在此期间稍有闲暇就打开来试试,尝试一下这个新东东。总体感觉微软现在技术大爆炸,一下子往F4里塞了好多东西,有的确实不错,不过有的还是感觉有点粗糙,还经不起实战考验。那以下我会简单和大家过一遍这个新的框架,一起来聊聊F4的前景。

简单回顾下历史,F1.1其实是个试验品,.Net Framework真正走向成熟其实从F2开始的,之后的F3,F3.5其实都是基于F2的扩充,我个人感觉应该定义为F2.1,F2.2。没想到微软喜欢搞大跃进,随便加点东西就变个新版本。

F3+F3SP1除了修正了一些F2的bug之外,主要的扩展是加了3W框架,分别是WPF,WCF,WWF。
F3.5和F3类似,在修正之前的Bug之外,主要的扩展是:LINQ,WF,WCF,Add-in(今后会被MEF替代)
F3.5SP1,又添了几个新东东:MVC,Dynamic Data,Entity Framework,Data Services等

当然这里面我们也不能忽略了F3在语言上进行的改进,例如Linq,Lambda,扩展函数,var类型的使用等等。
Read the rest of this entry »