Your SlideShare is downloading. ×
  • Like
2010年02期《程序员》配套源码及相关链接
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

  • 479 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
479
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 2010年02期《程序员》配套源码及相关链接 为了方便大家查阅,现把2010年02期《程序员》杂志中相关链接及代码发布在此: 程序天下事 推荐资源(P16): Linq2Twitter项目:http://linqtotwitter.codeplex.com 可以让.NET程序员使用Linq语法访问Twitter。 Facebook SDK:http://msdn.microsoft.com/en-us/windows/ee388574.aspx 微软发布一个让.NET程序员在各种类型应用程序中访问Facebook的SDK工具包。 Code Contracts:http://msdn.microsoft.com/enus/devlabs/dd491992.aspx 微软开发的一个为.NET代码提供Code Contracts能力的工具包。 推荐资源(P17): 冒号空间:http://blog.zhenghui.org/ 推荐资源(P18): 推荐资源UML工具大全:http://www.umlchina.com/Tools/Newindex1.htm 一套UML 2.2和SysML 1.0的免费Microsoft Visio Stencil: http://phruby.com/index.html 推荐资源(P19): Rails 3核心开发者Yehuda Katz的blog:http://yehudakatz.com/ 推荐资源(P21): Computerworld 开源商务智能产品逐步进入主流应用。 http://www.computerworld.com/s/article/346174/Open_Source_BI_Going_Mainstream_f or_Routine_Uses?taxonomyId=9 推荐资源(P23): 《ShaderX 7》 从名称上就能看出, 它是专注于游戏图形方面的,是开发实时渲染引擎的必读书!此书详细内容请见: http://www.shaderx7.com/
  • 2. 推荐资源(P26): 《The Ruby on Rails Tutorial Book》专为初学者准备的Ruby on Rails免费教程书籍: http://www.railstutorial.org/ 推荐资源(P28): SaaS博士:http://blog.sina.com.cn/saasfun 在SaaS管理软件领域,SaaS博士的博客的知名度是非常高的。 推荐他的Blog,并不代表我赞 同他的观点,事实上我的观点和他有非常大的不同,但是SaaS博士可以让我们从另外一个 角度来看待SaaS管理软件,时刻来提醒自己。 推荐资源(P29): 《如何面试前端工程师》 作者:Nicholas C. Zakas 译者:为之漫笔 http://www.cn-cuckoo.com/2010/01/08/how-nicholas-c-zakas-interviewing-the- front-end-engineer-1332.html 《暗流涌动的开源与自由软件》 资源推荐(P66): 值得阅读的图书:http://one.linuxpk.com 值得访问的开源BLOG:http://blog.sina.com.cn/copu/ 值得访问的技术社区: http://moblin.csdn.net http://www.moblin.org http://www.linuxpk.com http://www.intel.com/software http://www.cnbeta.com 《在硝烟中怒放——2009年Web前端技术回顾》 P69: 2009年给我留下深刻印象的一些技术会议: 2009/3/18-20,Mix09 官网:http://visitmix.com 视频资料:http://videos.visitmix.com/MIX09 2009/4/24-25,JSConf 2009 官网:http://jsconf.us/2009
  • 3. 2009/11/7-8,JSConf(柏林) 2009 官网及会议资料:http://jsconf.eu/2009 2009/6/22-24,Velocity 2009 官网:http://en.oreilly.com/velocity2009 2009/9/14-16,Ajax Experience 2009 官网:http://ajaxexperience.techtarget.com/conference/index.html 会议资料: http://www.slideshare.net/ajaxexperience2009/slideshows 2009/10/28-29,YUIConf 2009 官网:http://yuilibrary.com/yuiconf2009/ 2009/11/20,FullFrontal 2009 官网:http://2009.full-frontal.org/ 2009/12/19,第四届D2前端技术论坛 官网:http://www.d2forum.org/d2/4/ 参考资源(P71): Dynamo http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf 分布式key value漫谈,视频及演讲稿 http://timyang.net/tech/gz-salon-slide/ Tornado Web Server,friendfeed开源的实时Web框架 http://github.com/facebook/tornado Kestrel,Twitter的开源消息队列产品 http://github.com/robey/kestrel 资源推荐(P77): Mobile Crunch www.mobilecrunch.com 毫无疑问,最新的移动动向以及资讯的来源 Engadget www.engadget.com 移动设备的发烧友?那这里就是各种留言和设备的集散地 iPhone Atlas www.iphoneatlas.com CNET的iPhone观察
  • 4. MobClix www.mobclix.com iPhone 应用分析服务网站 AndroiLib www.androlib.com Android 应用分析服务网站 资源推荐(P81): 中国软件和服务外包网:http://www.cnies.com 《愈演愈烈的信息安全》 参考文献(P83): 【1】PDF Most Common File Type in Targeted Attacks http://www.f-secure.com/weblog/archives/00001676.html 《如何消除网站安全的七大风险》 P95 代码段1: 改善:经过调查,发现在程序目录下的crossdomain.xml文件里的配置如下: <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross- domainpolicy.dtd"> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy> 代码段2: 改善 <param name="allowScriptAccess" value="always" /> 改为<param name="allowScriptAccess" value="sameDomain" /> 《NoSQL数据库的查询处理》 P106 代码段1: ......如果不是叶子节点,那么我们将前缀取多一位数,重复一次查找过程。 # Locate the key next to input key def locate(key) leaf = locate_leaf_node(key) return leaf.locate(key) end # Locate leaf node containing input key deflocate_leaf_node(key)
  • 5. for (i in 1 .. key.length) node = DHT.lookup(key.prefix(n)) return node if node.is_leaf? end raise exception End 代码段2: ......注意我们在步进的时候可以沿着叶子节点之间的链接跨越到下一个叶子节点。 def range(startkey, endkey) result = Array.new leaf = locate_leaf_ node(startkey) while leaf != nil result.append(leaf.range(startkey, endkey)) if (leaf.largestkey<endkey) leaf = leaf.nextleaf end end return result End 《微软UI自动化测试的技术演变(下)》 P108 代码段: 下面的代码演示了在对WinForm上实现IRawElementProviderSimple接口,实现自定义UIA Nameproperty和Value Pattern。 public class MyForm : System.Windows.Forms.Form, IRawElementProviderSimple … protected override void WndProc(ref Message m) { const int WM_GETOBJECT = 0x003D; if ((m.Msg == WM_GETOBJECT) && (m.LParam.ToInt32() == AutomationInteropProvider.RootObjectId)) { //MyForm实现了IRawElementProviderSimple接口,直接返回 m.Result = AutomationInteropProvider.ReturnRawElementProvider( this.Handle, m.WParam, m.LParam, (IRawElementProviderSimple)this); return; } … } public Object GetPatternProvider(int patternId) {
  • 6. if (patternId == ValuePatternIdentifiers.Pattern.Id) { //创建并且返回ValuePattern object return new ValuePattern(); } … } public Object GetPropertyValue(int propertyId) { //所有的UIA Property都可以从这里返回 if (propertyId == AutomationElementIdentifiers.NameProperty.Id) { //把当前时间返回给UIA.Name Property return string.Format("{0} {1}", this.Name, DateTime.Now.ToLongTimeString()); } … } [ComVisible(true)] public class ValuePattern : IValueProvider { public bool IsReadOnly { get { return true; } } public string Value{ get { //把当前时间作为Value Pattern的值返回 return DateTime.Now.ToLongTimeString(); }} public void SetValue(string value) { return; } } P109 代码段: 下面通过一个例子演示如何实现UIA客户端接口。 首先写一个最简单的WinForm,里面没有任 何UIA相关的代码: public class MyFormClient : System.Windows.Forms.Form { [STAThread] static void Main() { Application.Run(new MyFormClient()); } public MyFormClient() { this.Name = "testForm"; this.Text = "ClientUIADemo"; } } 把上述代码编译成 WinFormServer.exe。
  • 7. 下面代码是测试端代码和对应的 UIA 客户端实现: //通过RegisterClientSideProviders API注册自定义的UIA Client provider //Client Provider的类型信息保存在ClientSideProviderDescriptionTable数组中 ClientSettings.RegisterClientSideProviders( UIAutomationClientSideProviders.ClientSideProviderDescriptionTable) ; class UIAutomationClientSideProviders { public static ClientSideProviderDescription[] ClientSideProviderDescriptionTable = { new ClientSideProviderDescription( WindowProvider.Create, null) }; } class WindowProvider : IRawElementProviderSimple { internal static IRawElementProviderSimple Create( IntPtr hwnd, int idChild, int idObject) { System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("WinFormServer"); if (processes.Length == 0) return null; //判断目标窗口是否指定进程的窗口 //如果是, 则返回实例表示该客户端实现支持该窗口 if (processes[0].MainWindowHandle != hwnd) return null; else return new WindowProvider(hwnd); } P110 代码段 //自定义的WPF按钮,从默认Button类继承 public class UIAButton : Button { //重载该方法返回自定义的AutomationPeer类 protected override AutomationPeer OnCreateAutomationPeer() { return new UIAButtonAutomationPeer(this); } } //自定义的AutomationPeer类,从默认ButtonAutomationPeer类继承 //同时额外实现UIA的ValuePattern public class UIAButtonAutomationPeer : ButtonAutomationPeer,IValueProvider { //重载该方法,返回自定义UIA Name property protected override string GetNameCore() {
  • 8. string originalName= base.GetNameCore(); return string.Format("{0} {1}", originalName, DateTime.Now.ToLongTimeString()); } //重载该方法,返回ValuePattern //故意没有调用基类的GetPattern,使得默认的Invoke Pattern不会暴露 public override object GetPattern(PatternInterface patternInterface) { if (patternInterface == PatternInterface.Value) { return this; } return null; } public bool IsReadOnly { get{return true;} } //ValuePattern的自定义实现,这里返回控件的长宽信息 public string Value { get { return string.Format("Height={0},Wideth={1}", Owner.RenderSize.Height,Owner.RenderSize.Width); } } public void SetValue(string value) { } } P111 代码段 private static IntPtr CriticalHandleWMGetobject(IntPtr wparam, IntPtr lparam, Visual root, IntPtr handle) 《OPhone平台架构及主要开发组件》 P116 代码段: 例如,从应用程序中调用Phone程序拨打电话的代码如下所示: Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:10086")); startActivity(intent); P117 代码段1: 下面的代码可以从系统中查询存储在SD卡上的歌曲。 ContentResolver resolver =getContentResolver(); //从Content Provider中获得SD卡上的音乐列表 cursor =resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null, null,null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
  • 9. String[] cols = new String[] {MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.ARTIST, }; int[] ids = new int[] { R.id.track_name, R.id.artist }; if (cursor != null) startManagingCursor(cursor); //创建Adapter并绑定到ListView SimpleCursorAdapter adapter =new SimpleCursorAdapter(this,R.layout.songs_list, cursor,cols, ids); setListAdapter(adapter); 代码段2: BroadcastReceiver没有界面显示,它通过AndroidMa-nifest.xml或者在代码中进行注册, 监听应用程序感兴趣的事件。Broad-castReceiver是一个抽象类,定义了一个抽象方法 onReceive(),当广播事件到来时,BroadcastReceiver的onReceive()方法会被调用,开发 者只需要自己实现此方法即可。 void onReceive(Context curContext, Intent broadcastMsg) 使用BroadcastReceiver可以方便地实现开机自启动应用程序,OPhone系统启动后, 会广 播 I n t e n t .ACTION_BOOT_COMPLETED 事 件 , 因 此 只 需 要 在 程 序 中 定 义 一 个 BroadcastReceiver并在AndroidManifest.xml中进行注册。 <receiver android:name=".BootReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 此外,还需在AndroidManifest.xml中增加权限声明,如果不声明应用程序所需权限,程序 运行时会抛出安全异常。 <uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 最后只需要实现一个B r o a -dcastRe-ceiver即可,代码如下所示: public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { if (arg1.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent intent = new Intent(arg0,com.ophone.MusicActivity.class); //在Activity之外调用startActivity() intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); arg0.startActivity(intent); } } }