某Python实现的尾部递归
mailper 在2009年4月26的文章里《Guido认为程序员大多数工作不需要递归》谈及递归不是编程的基础。并且在python中并没有实现尾部递归Tail Recurssion。
但是,今天我们却看见了某Python实现的尾部递归
:)
Glassfish ESB 的教程
OpenESB项目实现了一个运行期企业服务总线(Enterprise Service Bus:ESB)使用JBI(Java业务集成)作为核心基础。OpenESB可以让你集成企业应用与Web Service松散地连接成复合的应用程序。这使得你可以无缝地组合与拆解该复合应用程序,并认识到一个真正面向服务架构(SOA)的优点。
BPEL是一种编程语言,它明确定义了基于Web服务的业务流程。BPEL在支持业务伙伴间的长时间会话方面表现尤为卓越。BPEL将成为基于Web服务的业务流程最广泛采用的标准,这一趋势早在该标准正式发布前就已经非常明显。
BPEL适用于支持业务流程逻辑的“宏观编程”。这些业务流程均是完整而独立的应用,它们将Web服务作为实现其业务功能的“活动”。BPEL不致力于成为通用的编程语言,相反,它的应用设想就是与其他实现业务功能(“微观编程”)的编程语言结合使用。
OpenESB上有一些BPEL教程都是非常有趣的,下面一些教程的例子:
http://wiki.open-esb.java.net/attach/OpenESBIntroductionTutorial/openes ...
编程语言流行度排名
下面的这些排名并不是非常科学的,它们只是从某种方面表现出了编程语言的流行程度。仅供参考。
Yahoo Search
这里,我们使用了Yahoo Search API,简单地搜索了一下相关的编程语言。收搜字样是”language programming”,下面是搜索到的页面结果。也许这能够说明语言的流行程度。
工作相关
接下来,我们来看看与工作相关的页面。也是从Yahoo Search API中从Craigslist.org网站中取得这些数据。搜索模型如下:language programmer -“job wanted” site:craigslist.org。这个结果可以看到全球的雇主在雇佣技术人员的时候所要求的编程语言的数量分布。
技术书籍
下面是由Amason所提供的搜索API中得到的目前出版物中的编程语言相关的统计数据,一般来说,越流行的语言通常会有更多的书籍。我们来看看书籍方面的各语言的书籍数量的排行榜。
Google Code 开源项目
下面的结果取自Googel Code (http://www ...
25个Linux相关的网站
下面是25个最具有影响力,也是最重要的Linux网站,这些网站提供了Linux的分发包,软件,文件,新闻,以及其它所有的关于Linux的东西。关于Linux的分发包历史,可以看看本站的这篇文章《Linux Distribution Timeline》
1. Linux.org
这个站点主要提供Linux相关的新闻、文档、教程,培训,以及其它一切和Linux相关的东西。这是你需要了解Linux开源社区的总入口。
2. Debian.org
如果你想要了解所有关于 Debian 和Linux/GNU 操作系统的相关信息,这个网站是必需要访问的,因为这是Debian的官网。
3. Ubuntu.com
这可能是桌面系统上最流行的Linux分发包了。
4. Fedora.com
Fedora 的官网。Fedora 是一个开放的、创新的、前瞻性的操作系统和平台,基于 Linux。它允许任何人自由地使用、修改和重发布,无论现在还是将来。它由一个强大的社群开发,这个社群的成员以自己的不懈努力,提供并维护自由、开放源码的软件和开放的标准。Fedora 项目由 Fedora 基金会管理和控制,得到了 ...
Guido认为程序员大多数工作不需要递归
Python的创造者Guido在最近一篇关于为什么Python里没有 Tail Recurssion Elimination (暂译:尾递归优化)的文章中提到一个我们可能经常听到的观点“真正的程序员一般不用递归”。
http://neopythonic.blogspot.com/2009/04/tail-recursion-elimination.html
Third, I don’t believe in recursion as the basis of all programming. This is a fundamental belief of certain computer scientists, especially those who love Scheme and like to teach programming by starting with a “cons” cell and recursion. But to me, seeing recursion as the basis of everything else is just a nice the ...
你能做对下面这些JavaScript的题吗?
你能做对下面这些JavaScript的题吗?
原文
你认为你了解JavaScript? 快速的做一下下面的这些题目。并将下面的每一个表达式的值写出。(答案在问题后面)
1. ++Math.PI
2. (0.1 + 0.2) + 0.3 == 0.1 + (0.2 + 0.3)
3. typeof NaN
4. typeof typeof undefined
5. a = {null:null}; typeof a.null;
6. a = “5”; b = “2”; c = a * b;
7. a = “5”; b = 2; c = a+++b;
8. isNaN(1/null)
9. (16).toString(16)
10.016 * 2
11.~null
12.”ab c”.match(/\b\w\b/)
首先,这不是一个入门教程,因此我不会去对每一个答案做单独的解释,如果你觉得你有不理解的地方,我建议你 while (!掌握()) 专研它();
答案:
1. 4.141592653589793
2. false
3 ...
用Python写NCurses UI
Ncurses是一个能提供基于文本终端窗口功能的动态库. Ncurses可以:
可以使用整个屏幕
创建和管理一个窗口
使用8种不同的彩色
为您的程序提供鼠标支持
使用键盘上的功能键
Ncurses可以在任何遵循ANSI/POSIX标准的Unix/Linux系统上运行,除此之外,它还可以从系统数据库中检测终端的属性,,并且自动进行调整,提供一个不受终端约束的接口。因此,Ncurses可以在不同的系统平台和不同的终端上工作的非常好。
mc工具集就是一个用ncurses写的很好的例子,而且在终端上系统核心配置的界面同样是用ncurses编写的. 下面就是它们的截图:
当然,在我们这篇文章中,我们不会教你怎么写NCurses程序,我们只是想告诉你如何用Python来写Ncurses的程序,示例会非常简单,点到为止。
在此之前,我们先简单的回顾一下如何使用Python的一些简单的语法。
先看看一个最简单的Python程序:
print "How easy is this?"
x = 1
y = 2
z = x + y
print "Result of x + ...
Python调用C语言函数
使用Python的ctypes,我们可以直接调用由C直接编译出来的函数。其实就是调用动态链接库中的函数。为什么我们需要这样做呢,因为有些时候,我们可能需要一个性能上比较讲究的算法,有些时候,我们可以在Python中使用已经有了的现成的被封闭在动态链接库中的函数。下面是如何调用的示例。
首先,我们用一个乘法来表示一个算法功能。下面是C的程序:
int
multiply(int num1, int num2)
{
return num1 * num2;
}
如果在Windows下,你可能需要写成下面这个样子:
#include <windows.h>
BOOL APIENTRY
DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
return TRUE;
}
__declspec(dllexport) int
multiply(int num1, int num2)
{
return ...
使用PHP的cURL库
使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。本文主要讲述如果使用这个PHP库。
启用 cURL 设置
首先,我们得先要确定我们的PHP是否开启了这个库,你可以通过使用php_info()函数来得到这一信息。
<?php
phpinfo();
?>
如果你可以在网页上看到下面的输出,那么表示cURL库已被开启。
如果你看到的话,那么你需要设置你的PHP并开启这个库。如果你是在Windows平台下,那么非常简单,你需要改一改你的php.ini文件的设置,找到php_curl.dll,并取消前面的分号注释就行了。如下所示:
//取消下在的注释
extension=php_curl.dll
如果你是在Linux下面,那么,你需要重新编译你的PHP了,编辑时,你需 ...
Linux 的僵尸(zombie)进程
可能很少有人意识到,在一个进程调用了exit之后,该进程 并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所 有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有 任何内存空间。
僵尸进程的来由,要追溯到Unix,Unix的设计者们设计这个东西并非是因为闲来无事想装装酷什么的。上面说到,僵尸进程中保存着很多对程序员和系统管理员非常重要的信息,首先,这个进程是怎么死亡的?是正常退出呢,还是出现了错误,还是被其它进程强迫退出的?也就是说,这个程序的退出码是什么?其次,这个进程占用的总系统CPU时间和总用户CPU时间分别是多少?发生页错误的数目和收到信号的数目。这些信息都被存储在僵尸进程中,试想如果没有僵尸进程,进程执行多长我们并不知道,一旦其退出,所有与之相关的信息都立刻都从系统中清除,而如果此时父进程或系统管理员需要用到,就只好干瞪眼了。
所以,进程退出后,系统会把该进程的状态变成Zombie,然后给 ...
MySQL: InnoDB 还是 MyISAM?
MyISAM 是MySQL中默认的存储引擎,一般来说不是有太多人关心这个东西。决定使用什么样的存储引擎是一个很tricky的事情,但是还是值我们去研究一下,这里的文章只考虑 MyISAM 和InnoDB这两个,因为这两个是最常见的。
下面先让我们回答一些问题:
你的数据库有外键吗?
你需要事务支持吗?
你需要全文索引吗?
你经常使用什么样的查询模式?
你的数据有多大?
思考上面这些问题可以让你找到合适的方向,但那并不是绝对的。如果你需要事务处理或是外键,那么InnoDB 可能是比较好的方式。如果你需要全文索引,那么通常来说 MyISAM是好的选择,因为这是系统内建的,然而,我们其实并不会经常地去测试两百万行记录。所以,就算是慢一点,我们可以通过使用Sphinx从InnoDB中获得全文索引。
数据的大小,是一个影响你选择什么样存储引擎的重要因素,大尺寸的数据集趋向于选择InnoDB方式,因为其支持事务处理和故障恢复。数据库的在小决定了故障恢复的时间长短,InnoDB可以利用事务日志进行数据恢复,这会比较快。而MyISAM可能会需要几个小时甚至几天来干这些事,InnoDB ...
22个不错的CSS技术
我们可以CSS 干很多很多相当不错的事情,你应该知道如何做这些事情。下面列出了一些你必需要知道的用CSS技术,点击链接,你可以看到相关教程。这个技术相当值得你去学习。
目录
1. CSS 地图
2. Css 缩略图 Pop up
3. CSS 3 透明示例
4. 漂亮的半透明菜单
5. 又一个半透明的菜单
6. 带图标的链接
7. 图片滚动
8. 图片地图
9. CSS 表单背景
10.表单重构设计
11. 表单风格
12. 表单检查
13. 漂单的表单
14. CSS 折叠式导航
15. ice Brrg 在线表单生成器
16. Jot Form (一个在线的表单创建网站)
17. Wufoo (相当不错的风格)
18. 表单站点生成器
19. Form logix
20. 免费的CSS tab 页设计者
21. Just style
22. 滑动式Tab页
1. CSS 地图
2. Css 缩略图 Pop ...
Java如何取源文件中文件名和行号
如何取的Java源代码文件中文件名和行号:)
在C/C++的程序,编译器提供了两个宏来支持取得源文件中的行号和文件名,这两个宏是__FILE__,__LINE__
你可以如下的方法打印行号和文件名
#include <stdio.h>
int main()
{
fprintf(stdout,"[%s:%d] Hello World!",__FILE__,__LINE__);
return 0;
}
但是在JAVA下没有这两个宏,那么我们如何来取得文件名和行号,翻阅JDK,我们找到StackTraceElement这个类。这个类可以从Throwable取得,另外也可以从Thread类取得,通过这些我写如下的一个打印行号的测试程序:
public class LineNo {
public static int getLineNumber() {
return Thread.currentThread().getStackTrace()[2].getLineNumber();
}
public static String getFileNa ...
早期XML Schema中的open content模型
摘要:在看SDO的一些规范文档,可能会出现open content这样的词组,上网查了相关资料,发现这是一种XML Schema的模型,本文就描述了XML Schema的Open Content模型的含义,在最新的XML Schema规范中,好像已经没有Open模型,它的等价物是any模型。
早期发布的XML Schema规范中支持一种新的element定义,在这个定义中,你可以将XML的Element的内容定义为开放的。下面我们将会介绍一下XML的Open Content 模型。
在Open Content模型中,如果一个XML的元素在XML Schema中被声明为开放的,那么这个Schema对应的XML文档的实例就可以包含一个没有在Schema中罗列的子元素。例如,一个包含着如下的XML Schema的Schema文件
<element name="Book">
  ...
Google 三维 JavaScript API 发布
O3D 是一个开源的Web API,其可以创建相当牛X的基于浏览器的可交互式的3D应用。这个API在很有可能会形成以后的Web上的3D图形的标准。下面是这个API的主站点: http://code.google.com/apis/o3d/ 。O3D目前支持Windows, Mac和Linux三种平台。
下面是一些简单地使用O3D的API的如何创建一个立方体,更详细的内容请访问O3D的网站。
1)首选我们先创建一个比较原始的立方体。使用createCube()方法。
[javascript]
function createCube(material) {
var cubeShape = g_pack.createObject(‘Shape’);
var cubePrimitive = g_pack.createObject(‘Primitive’);
var streamBank = g_pack.createObject(‘StreamBank’);
cubePrimitive.material = material;
cubePrimitive.owner(cube ...
Oracle成功收购Sun
前段时间还传出IBM要收购Sun的消息,当然,如果IBM收购Sun了,那么IBM真是活雷锋了。呵呵。
今天,Oralce正式宣布成功收购Sun,原文在这里。Oracle以每股9.5美元,总共以74亿美金的天价收购Sun公司,其中,56亿美金付现或购买Sun的债务。现在,Java, Solairs以及MySQL都是Oracle的了。
Oracle的CEO——Larry Ellison说:“The acquisition of Sun transforms the IT industry, combining best-in-class enterprise software and mission-critical computing systems” 。
让我们看看这次收购以后还会发生什么样的事情。
免费电子书:Ruby Complete
这是一本免费的关于教你如何使用Ruby编程的电子书。作者:Huw Collingbourne, SapphireSteel Software 公司的Technology Directory,他也是一个开发 Visual Studio下的Ruby Steel IDE的程序员。这本书给大家提供非常全面的教程,其涵养了几乎所有主要的Ruby编程的东西。
每一章的代码都可以被下载。如果你是一个 Ruby In Steel 的用户,那么,你可以在一个单一的Visual Studio solution 中载入这些代码,并可以在集成的 Ruby Console 上运行这些代码,并调试之。
下面这是这本书的一些特性:
425 页。
20 章节。
超过 84,000 个词。
超过300 个可以运行的示例代码。
100% 的免费!
下载这本书和其所有的源码 (大小2.9MB )
5个不错的Flash的英文教程网
下面的这5个教程纯属个人观点,另外他们还都是免费的。
MrSunStudios– 这是一个非常不错的教程网站。里面有大量大量的关于ActionScript,PHP等等的教程。能教会你做很多很实用的东西。
AwestyProductions– 虽然没怎么更新了,但他还是一个很不错的网站,其教你怎么去做一个小游戏。注意,其只是AS2的
Kirupa– 虽然没有太多的教程,不过这是一个巨大的社区,只要你问问题,你可以很快得得到他们的帮助和答案。当你遇到你无法解决的问题时,这是相当相当的不错的去处。
Flash Explained– 超过9页的非常不错的教程。
Flash Magazine– 并不只是一个杂志,其还有很多教程,那才是这个网站最重要的。
使用Google API做统计图
Google提供了一个的统计图的API。你可以通过构造一个URL链接来获得Google提供的统计图方案。
比如:如果我们使用如下链接:
<img src="http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=酷壳|Cocre" alt="" />
我们就可能通过如下的HTML代码显示一个60:40的饼图:
Google的这个API支持的统计图风格相当的多。
比如:
<img src="http://chart.apis.google.com/chart?chs=200x125&cht=ls&chco=0077CC&chd=t:27,25,60,31,25,39,25,31,26,28,80,28,27,31,27,29,26,35,70,25" alt="Sparkline chart in blue" />
还甚至支持有世界地图式的统计图:
<img src="http://chart.apis.goog ...
Linux设备驱动Hello World程序介绍
by Valerie Henson
07/05/2007
(译者注:本文的例子是只能在linux的2.6内核下使用的,2.6以上的内核,译者没有做过实验,2.4是要修改make文件才能运行。)
本文的出处:这里
自古以来,学习一门新编程语言的第一步就是写一个打印“hello world”的程序(可以看《hello world 集中营》这个帖子供罗列了300个“hello world”程序例子)在本文中,我们将用同样的方式学习如何编写一个简单的linux内核模块和设备驱动程序。我将学习到如何在内核模式下以三种不同的方式来打印hello world,这三种方式分别是: printk(),/proc文件,/dev下的设备文件。
目录
准备:安装内核模块的编译环境
使用printk()函数打印”Hello World”
使用/proc的Hello, World!
Hello, World! 使用 /dev/hello_world
准备:安装内核模块的编译环境
一个内核模块kernel module是一段能被内核动态加载和卸载的内 ...