NET 4特性聚焦:并行编程
作者: Jonathan Allen 译者: 朱永光
通用语言运行时(Common Language Runtime,CLR)以锁、线程和线程池的形式为并行编程提供基本的支持。不过,随着多核CPU重要性的逐步增加,大家又重燃构建高级并行编程函数库的热情。
很多人现在都投身于函数式编程的世界,由于它们具有不可变的对象,以及与生俱来的线程安全属性。基于F#语言的Haskell和OCaml可以归入此类。其他例如Erlang这样倍受大家偏爱的语言,是基于消息传递和轻量级进程的。除了支持F#外,微软也尝试了几种不同的方式,以需求并行编程的准确提炼。
最先公布的产品是并行LINQ(Parallel LINQ),也即所谓的PLINQ。类似对SQL的处理一样,并行的版本通过语言本身来处理,而无需开发人员的努力。通过把AsParallel附加到查询上,就能正常工作了。不过正如SQL一样,在这里通常还是需要设定很多额外的选项。
下一个出现的是结构化并行性语法(Structured Parallelism),这种技术会让人想起OpenMP。不过它不像OpenMP那样,使用编译器指令标记;微软的解决方案是基于匿名委托。最直观的反应就是代码只需作细微的修改;在“for”语句内的代码块,可以作为参数传递到“Parallel.For”函数中。
如果代码无法轻易地表示为查询或迭代循环,则可以选择任务并行库(Task Parallel Library)。乍看之下,它似乎是另外一种线程池,但它却支持任务之间的父子关系。
为了对应用程序进行更好地控制,微软提供了协调一致的数据结构(Coordination Data Structures)。它们为未来提供了线程安全的集合以及改良过的同步对象。
摘自:InfoQ
搜索机器人的PHP代码
/**
* 判断是否为搜索引擎蜘蛛
*
* @access public
* @return string
*/
function is_spider($record = true)
{
static $spider = NULL;
if ($spider !== NULL)
{
return $spider;
}
if (empty($_SERVER['HTTP_USER_AGENT']))
{
$spider = '';
return '';
}
$searchengine_bot = array(
'googlebot',
'mediapartners-google',
'baiduspider+',
'msnbot',
'yodaobot',
'yahoo! slurp;',
'yahoo! slurp china;',
'iaskspider',
'sogou web spider',
'sogou push spider',
'feedfetcher-google',
'yahoofeedseeker'
);
$searchengine_name = array(
'GOOGLE',
'GOOGLE ADSENSE',
'BAIDU',
'MSN',
'YODAO',
'YAHOO',
'Yahoo China',
'IASK',
'SOGOU',
'SOGOU',
'Feedfetcher-Google',
'YahooFeedSeeker'
);
$spider = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach ( $searchengine_bot AS $key => $value)
{
if (strpos($spider, $value) !== false)
{
$spider = $searchengine_name[$key];
if ($record === true)
{
// do something
}
return $spider;
}
}
$spider = '';
return '';
}
ffmpeg的安装及使用
ffmpeg是一个类似Imagemagick的工具,两者最大的区别在于:ImageMagick是转换图片,而ffmpeg主要提供视频的转换。同时两者也有一个非常相似的优点就是支持的格式很多,基本涵盖了所有流行的图片和视频格式。
不过ffmpeg有一个非常不方便之处,就是安装比较麻烦,在Linux系统中并非默认安装,特别是想在一些共享空间(Virtual Host)里使用可能非常的困难。
那 我们首先来讲如何在Windows系统里安装它,网上很多文章都洋洋洒洒写了很多,教你怎么编译这样ffmpeg。其实在Windows系统中进行 ffmpeg的编译是难得最高的,毕竟它是Linux的产物,在Windows下编译难度不言而喻。其实有很多替代方案可以使用,毕竟Internet是 个热心人的时间,通过Internet可以减少很多重复的工作。
- 你可以从http://sourceforge.net/project/showfiles.php?group_id=205275&package_id=248632下载已经编译好的版本。
- 你也可以安装ImageMagick,其中也包含了一个ffmpeg的binary执行文件。
如果想在Linux中编译,可以参考官方的说明。我们这里再介绍如何在虚拟空间(Virtual Host)中进行编译,其实编译的过程也非常的简单。可以参考DreamHost的Wiki中的一篇文章的介绍,http://wiki.dreamhost.com/index.php/FFmpeg ,按照步骤如果编译无错应该就没问题,不过国外的虚拟空间技术都比较成熟,不清楚国内的虚拟空间支持了如何。
最后讲2个ffmpeg的视频转换命令:
1.把视频转换成flv文件(这个用得最多,现在Flv基本上已经成了网络视频的标准了)
ffmpeg -i source -s 320×240 -b 700k -aspect 4:3 -y -f flv dest.flv 。
其中:
- source:是原始文件的名字,可以是mov,mpeg,avi,wmv各类格式,ffmpeg基本都支持。
- -s wxh: 指定视频的宽和高
- -b : 设定视频的比特率
- -aspect: 保持视频的比率。如4:3或者16:9
- -y : 如果目标文件存在时,直接覆盖原有的目标文件。
- -f : 指定转换的文件格式,这里是flv格式。(其实如果不指定文件格式,ffmpeg也会按文件的后缀名来进行转换)。
- dest: 转换的目标文件名字,并不一定需要是flv,可以是mov,mpeg以及其他的常用格式。
2. 截取视频的某一帧保存为图片。
ffmpeg -i source -ss 00:00:06 -t 00:00:01 -r 1 -s 320×240 -f image2 -y dst.jpg
网上也提到了很多保存视频,但很难找到如何从指定的位置开始保存,很多视频的第一帧都是黑屏,所以如不指定起始位置容易造成保存了一副黑的图片。
- -ss : 指定其实视频的时间: hh:mm:ss.xxx 其实还可以指定到毫秒级,不过看了下手册没找到怎么从指定的帧开始,不过这个可以通过换算实现。
- -t: 指定保持时间长度,因为是图片,所以固定设为00:00:01。如需保持为gif动画,可以设定为其他值,具体实现官方文档有说明。
- -r: 指定帧,这里指定为第一帧。
- -s: 图片的宽和高
- -f: 指定为图片格式
- dst: 图片的名字。
先分享到这里,如有问题大家可以一起讨论。
Image MIME 参考
| image/bmp | bmp |
| image/cis-cod | cod |
| image/gif | gif |
| image/ief | ief |
| image/jpeg | jpe |
| image/jpeg | jpeg |
| image/jpeg | jpg |
| image/pjpeg | jpeg pjpeg |
| image/pipeg | jfif |
| image/png | png |
| image/svg+xml | svg |
| image/tiff | tif |
| image/tiff | tiff |
| image/x-cmu-raster | ras |
| image/x-cmx | cmx |
| image/x-icon | ico |
| image/x-portable-anymap | pnm |
| image/x-portable-bitmap | pbm |
| image/x-portable-graymap | pgm |
| image/x-portable-pixmap | ppm |
| image/x-rgb | rgb |
| image/x-xbitmap | xbm |
| image/x-xpixmap | xpm |
| image/x-xwindowdump | xwd |
IBM Page Detailer
一个类似FireBug中的功能,用来分析网站性能。个人一直觉得Firebug内嵌在Firefox中,可能即是它的优点同时也是他的缺点,使用起来很多的屏幕被Firebug占据。现在有这个工具后,就可以对网页进行独立测试了。
下载地址:http://www.alphaworks.ibm.com/tech/pagedetailer/download
使用说明:http://www.ibm.com/developerworks/cn/web/wa-lo-pagedetailer/index.html
Microsoft Silverlight 2 RTM 正式发布
Microsoft Silverlight是一个跨浏览器的、跨平台的插件,为网络带来下一代基于.NET的媒体体验和丰富的交互式应用程序。Silverlight提供灵活的编程模型,并可以很方便地集成到现有的网络应用程序中。Silverlight可以对运行在Mac或Windows上的主流浏览器提供高质量视频信息的快速、低成本的传递。
包括以下新功能
- .NET Framework支持完整.NET Framework的一个兼容子集
- 内置了一些控件,包括DataGrid、ListBox、Slider、ScrollViewer、Calendar等等很多控件
- 支持换肤和模板
- Deep Zoom,能实现更具交互性和导航的超高分辨率图像应用
- 更好的网络支持。开箱即支持对REST、WS*/SOAP、POX、RSS和标准的HTTP服务的调用
- 广泛的.NET Framework语言支持,包括Visual Basic、C#、JavaScript、IronPython和IronRuby
- 支持内容保护,包含基于PlayReady技术的Silverlight DRM
- 提高了服务器可伸缩能力,广泛的广告商支持,包括新的流式和渐进式下载功能,出众的搜索引擎优化技术,以及内容流内的广告支持
安装路径:http://www.microsoft.com/silverlight/resources/install.aspx?v=2.0
中国明星的外国籍
| 郎朗 | 中国香港 |
| 邬君梅 | 美国 |
| 李云迪 | 中国香港 |
| 顾长卫 | 美国 |
| 章子怡 | 中国香港 |
| 蒋雯丽 | 美国 |
| 刘璇 | 中国香港 |
| 宁静 | 美国 |
| 汤唯 | 中国香港 |
| 王姬 | 美国 |
| 胡军 | 中国香港 |
| 蒋大为 | 加拿大 |
| 李连杰 | 美国 |
| 徐帆 | 加拿大 |
| 刘亦菲 | 美国 |
| 陈明 | 加拿大 |
| 陈凯歌 | 美国 |
| 张铁林 | 英国 |
| 陈红 | 美国 |
| 斯琴高娃 | 瑞士 |
| 陈冲 | 美国 |
| 韦唯 | 德国 |
其实中国一天天的强大,何必羡慕外国国籍呢。
ActionScript 3 libraries
- as3ebaylib is a library for accessing eBay’s XML API through ActionScript.
- as3corelib is a collection of classes and utilities that make ActionScript development easier.
- as3flexunitlib is a unit testing framework for Flex development.
- as3odeolib is an ActionScript library for retrieving podcasts from the Odeo service.
- as3youtubelib is a library for accessing the YouTube data API.
- as3syndicationlib provides a single interface for dealing with RSS and Atom feeds.
- as3flickrlib is a library for consuming the Flickr API.
- as3mapprlib provides access to the Mappr API that combines Flickr and geo-tagged information.
- Cairngorm is a framework for developing Flex-based rich Internet applications.
Flash Open Source 相关站点
- OSFlash: http://osflash.org
- OSFlash Mailing List: http://osflash.org/mailman/listinfo/osflash_osflash.org
- The GAE SWF Project: http://gaeswf.appspot.com
- Google App Engine: http://code.google.com/appengine/
- Papervision3D: http://osflash.org/papervision3d
- Red5: http://osflash.org/red5
- SWFAddress: http://www.asual.com/swfaddress/
- PyAMF: http://pyamf.org/
- Fuse: http://osflash.org/fuse/
- GoASAP: http://osflash.org/goasap/
- SWX: http://swxformat.org
- AMFPHP: http://www.amfphp.org/
- MTASC: http://mtasc.org
- swfmill: http://osflash.org/swfmill
- AMES: http://osflash.org/ames
- FlashDevelop: http://osflash.org/flashdevelop
- ASDT: http://osflash.org/asdt
- PureMVC: http://puremvc.org/
- Arp: http://osflash.org/arp
- Cairngorm: http://labs.adobe.com/wiki/index.php/Cairngorm
在Debian/Ubuntu上安装Trac系统
如何在Debian系统中安装Trac系统?Debian还真的不错,可以非常方便的进行安装。
1.快速安装
Debian 4.0 Etch系统已经包含了Trac系统,不过版本不是很新,使用的是Trac 0.10的版本。不过安装非常的方便,apt-get install Trac。虽然版本不是最新,但至少经过测试的版本。
2.手动安装
不过既然安装为何不选择最新的版本呢?其实Python已经提供了一套完整安装机制,安装最新0.11版本同样非常方便。
1. sudo apt-get install python-setuptools,安装Python安装工具包。
2.使用setuptools进行Trac安装。输入sudo easy_install trac,setuptools会自动寻找最新Trac版本进行安装。
3.关于Apache、ModPython的配置信息可以查看Trac官方网站的说明:http://trac.edgewall.org/wiki/TracFeisty和http://trac.edgewall.org/wiki/TracOnDebian