25

2010年01期《程序员》配套源码及相关链接

作者: chenqiuge 分类:坊间人语   阅读:10,603 次 添加评论

为了方便大家查阅,现把2010年01期《程序员》杂志中相关链接及代码发布在此:


程序天下事


P15页,推荐资源:

诗剑书生的专栏:http://blog.csdn.net/axman/


P17页,推荐资源

《Java EE 6 Overview》—— Reza Rahman

http://www.theserverside.com/tt/articles/article.tss?l=JavaEE6Overview


P18页,推荐资源

SQL Server Compact 终极性能调校》  ——黎波

http://www.cnblogs.com/upto/archive/2009/11/08/1598470.html


P19页,推荐资源

Eweek.com

微软为SQL Server提供Solo支持

http://www.eweek.com/c/a/Application-Development/Microsofts-Oslo-Becomes-SQL-Server-Modeling-117207/?kc=rss


SQL Server Magazine

关于SQL Azure的七个事实

http://www.sqlmag.com/Article/ArticleID/102766/sql_server_102766.html


P21页,推荐资源

天之虹的新浪博客

http://blog.sina.com.cn/jackiechueng


P23页,推荐资源:

协同软件的思想精髓

http://www.cpw.com.cn/Download/Downfile.Asp?id=539


P24页,推荐资源:

微软云计算提供Ruby on Rails支持环境

http://rubyonrails.cloudapp.net/


P25页,推荐资源:

Xen官方网站:http://www.xen.org/

虚拟化973项目:http://grid.hust.edu.cn/973/


P27页,推荐资源:

Peter-Paul Koch (PPK官网)

PPK是自学成才的世界级JavaScript专家,《PPK谈……》系列书籍作者。

Blog:www.quirksmode.org


世界顶尖运动队教练的成功秘诀

P50:

感谢InfoQ中文站的支持,原文链接:http://www.infoq.com/cn/articles/sport-coaching-and-agile


Rails性能优化之路

P81页,代码段1:

Rails很好地支持了这个原则。比如:

stylesheet_link_tag(“application”)

生成的页面元素是:

<link href=”/stylesheets/application.css?1232285206″ media=”screen” rel=”stylesheet” type=”text/css”/>


P82页,代码段2:

在一个request的生命周期之内,有些数据不会改变,或者我们不关心改变,则可以通过对结果缓存以避免重复计算。


def length

@length ||= end - start

End


P82页,代码段3:

下面的代码是从搜索结果数据集创建产品对象:

records.map { |record| Product.new record }


P82页,代码段4:

避免多次创建transaction的开销(代码如下)

Product.transaction do

search_results.each do |search_result|

Product.create(search_result)

end

end


P82页,代码段5:


正确使用预先加载可以避免n+1查询:


Company.all(:include => :products, :conditions => ”company.kind = ’toy’”)

产生的sql查询是:

SELECT * FROM companies WHERE kind = ’toy’

SELECT * FROM products WHERE products.company_id IN (12, 423, 431…)


但错误使用预先加载是个很危险的事情,它可能不会影响结果的正确性,但会引起很严重的性能问题:


Company.all(:include => :products,  :conditions => ”products.id IS NOT NULL AND

products.weight > 10″)


其实写这个查询的人的目的是为了找出拥有products,并且products的weight大于10的company。但这个语句导致的sql查询是性能低下的:


SELECT companies.id AS t0_r0, …., products.id as t1_r0, … FROM companies LEFT OUTER

JOIN products ON products.company_id = companies.idWHERE products.id IS NOT NULL AND

products.weight > 10


这个sql查询有两个问题:

第一,结果集中的Products信息是不需要的

第二,LEFT OUTER JOIN的性能劣于INNER JOIN


我们可以使用如下的语句来避免这两个问题:


Company.all(:joins=> ”INNER JOIN products ON products.company_id = companies.id”, :

conditions => ”products.weight > 10″)

它生成的sql是:

SELECT companies.* FROM companies INNER JOIN products ON products.company_id =

companies.idWHERE products.weight > 10


P82页,代码段6


View的helper方法生成html元素,比如:


link_to ”My Company”, company_path(@company)# => <a href=”/companies/1″>My Company</a>


微软UI自动化测试的技术演变(上)


P102页,代码段1


首先是启动calc.exe进程,使用WindowOpenEvent捕获新打开的窗口:


Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent,AutomationElement.

RootElement, TreeScope.Children, eventHandler);

System.Diagnostics.Process.Start(“calc.exe”);


在新窗口打开事件的相应函数中,需要判断新打开的窗口是否为计算器窗口,如果是,则开始测试。


void OnWindowOpenOrClose(object src, AutomationEventArgs e)

{

if (e.EventId != WindowPattern.WindowOpenedEvent)

return;

AutomationElement sourceElement =src as AutomationElement;

if (sourceElement.Current.Name == “Calculator”)

{

//开始执行测试

ExecuteTest();

}

}


测试的第一步是通过UIA Condition来找到计算器的按钮:


Condition conditions = new AndCondition(new

PropertyCondition(AutomationElement.AutomationIdProperty,“135″ /*按钮5的AutomationID标识符*/),

new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button));

AutomationElement btn=calcWindow.FindAll(TreeScope.Descendants, conditions)[0];


测试的第二步是调用Button的 Invoke Pattern完成按钮电击:


InvokePattern invokeptn=(InvokePattern)btn.GetCurrentPattern(InvokePattern.Pattern);

invokeptn.Invoke();


测试的第三步是找到计算器输出框,并获取输出框的输入,进行测试结果校验。


Condition conditions = new AndCondition(new

PropertyCondition(AutomationElement.AutomationIdProperty, ,“150″ /*计算器结果Text元素的

AutomationID标识符*/),new PropertyCondition(AutomationElement.ControlTypeProperty,

ontrolType.Text));

AutomationElement btn=calcWindow.FindAll(TreeScope.Descendants, conditions)[0];

//读取Text控件的名字,该名字即为输出字符串

return btn.Current.Name;


《在调试器中品味计算机系统的睡眠过程(中)》


P108页,代码段1


这个函数的原型大致如下:

DWORD WINAPI

NtSetSystemPowerState(

IN POWER_ACTION SystemAction,

IN SYSTEM_POWER_STATE MinSystemState,

IN ULONG Flags);


P109页,代码段2:


第三个参数Flags用来附加本次电源动作的附加信息,是个32位的整数,每个二进制代表一种标志,常用的标志有:


#define POWER_ACTION_QUERY_ALLOWED      0×00000001

#define POWER_ACTION_UI_ALLOWED         0×00000002

#define POWER_ACTION_OVERRIDE_APPS      0×00000004

#define POWER_ACTION_LIGHTEST_FIRST     0×10000000

#define POWER_ACTION_LOCK_CONSOLE       0×20000000

#define POWER_ACTION_DISABLE_WAKES      0×40000000

#define POWER_ACTION_CRITICAL           0×80000000


P109页,代码段3:


下面便是ExRegisterCallback函数的原型:

PVOID

ExRegisterCallback(

IN PCALLBACK_OBJECT  CallbackObject,

IN PCALLBACK_FUNCTION  CallbackFunction,

IN PVOID  CallbackContext

);

《Ophone应用的网络连接管理》


P113 代码段:

OPhone 1.0的网络连接建立过程与OPhone1.5基本一致,但是具体实现的方法有一些差异。OPhone 1.0与OPhone 1.5相比,网络状态改变的监听使用DataConnection.setNetworkStatusListener()。网络连接的建立使用DataConnection.openConnection()。

两个版本下,差异的代码具体如下。

// OPhone 1.0网络连接建立的过程示例

public class ConnectByAp {

// 连接封装类的构造方法

public ConnectByAp(Context context) {

// 获取DataConnection对象的一个引用

mDataConnection = DataConnection.getInstance();

}

// 连接建立

private boolean connect(String apn, String username, String password, long millisec) {

// 设置网络状态变化通知的接受接口

mDataConnection.setNetworkStatusListener(

new DataConnection.OnNetworkStatusListener() {

// 接受连接建立成功的通知

public void onOpenResult(boolean result) {

mNetworkUp = result;

notifyState();

}

// 接受连接建立失败的通知

public void onStatusChanged(int status) {

if (status == DataConnection.NO_RESPONSE)

mNetworkUp = false;

else

mNetworkUp = (status != 0);

}

});

// 判断当前网络连接的状态,如果请求的连接已经建立,则立即返回连接成功,

// 否则首先关闭当前连接

if (mDataConnection.connectionOpened()) {

String currentApn = mDataConnection.getApn();

if (currentApn != null && currentApn.equals(apn)) {

mNetworkUp = true;

return true;

}

else

disconnect();

}

// 设置连接超时

mDataConnection.setTimeOut((int)(millisec / 1000));

// 调用DataConnection的连接建立方法

mNetworkUp = mDataConnection.openConnection(mContext, apn

, username, password);

// 判断连接操作的返回结果,

// 如果连接成功,则等待网络连接状态切换的通知。

if (!mNetworkUp)

return false;

else

waitNotification(millisec);

return mNetworkUp;

}

}


如有需要请下载Word版本:2010年01期《程序员》配套源码及相关链接

转播到腾讯微博

----->立刻申请加入《程序员》杂志读者俱乐部,与杂志编辑直接交流,参与选题,优先投稿

5 Responses to “2010年01期《程序员》配套源码及相关链接”

  1. 李祥 说道:

    收藏先。

  2. north face outlets 说道:

    Technology will change the fate, can also change the life
    http://www.northface-outlets.org/

请评论

preload preload preload
京ICP备06065162