分类目录
文章索引模板
20071114 xml xlst WML c# 动态 - 八月 22, 2008 by yippee

20071114 xml xlst WML c# 动态
http://www.yippeesoft.com

xlst~~~~~
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"
   indent="yes"
   media-type="text/vnd.wap.xml"
   omit-xml-declaration="no"
   doctype-public="-//WAPFORUM//DTD WML 1.1//EN"
   doctype-system="http://www.wapforum.com/DTD/wml_1.1.xml"
/>
  <xsl:template match="/">
    <wml>
      <card id="main1" title="main card">
        <onevent type="ontimer">
          <go href="http://localhost:8080/jsp/mainmenu.jsp"/>
        </onevent>
        <timer value="60"/>
        <do type="accept" label="next">
          <go href="http://localhost:8080/jsp/mainmenu.jsp"/>
        </do>
        <do type="prev">
          <noop/>
        </do>
        <p>
          Welcome <xsl:value-of select="/name/first"/>
          <xsl:text> </xsl:text>
          <xsl:value-of select="/name/last"/> to AirBank!
        </p>
      </card>
    </wml>
  </xsl:template>
</xsl:stylesheet>

~~
wml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.com/DTD/wml_1.1.xml">
<wml>
  <card id="main1" title="main card">
    <onevent type="ontimer">
      <go href="http://localhost:8080/jsp/mainmenu.jsp" />
    </onevent>
    <timer value="60" />
    <do type="accept" label="next">
      <go href="http://localhost:8080/jsp/mainmenu.jsp" />
    </do>
    <do type="prev">
      <noop />
    </do>
    <p>
          Welcome 123  to AirBank!
        </p>
  </card>

</wml>

代码:
 //定义XMLDocument
                XmlDocument xmlDocument = new XmlDocument();

                //定义XML文档头文件
                XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "utf-8", null);
                //增加XML文档头
                xmlDocument.AppendChild(xmlDeclaration);

                //定义XML的根
                XmlElement xmlRoot = xmlDocument.CreateElement("name");
                //添加XML的根
                xmlDocument.AppendChild(xmlRoot);
                //定义节点
                XmlNode xmlElement;

                //循环创建节点
                //创建XML根的节点
                xmlElement = xmlDocument.CreateElement("first");
                xmlElement.InnerText = "123";
                xmlRoot.AppendChild(xmlElement);
                XslCompiledTransform xls = new XslCompiledTransform();
                xls.Load(ctx.Server.MapPath("~/welcome.xslt"));
                MemoryStream stream = new MemoryStream();
                xls.Transform(xmlDocument.CreateNavigator(), null, stream);
                stream.Position = 0;
                //the encoding attribute specified in the xsl:output node is utf-8,
                //so here we read the output stream using the System.Text.Encoding.UTF8 correspondingly
                StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
                ctx.Response.Write(reader.ReadToEnd());
                reader.Close();
                stream.Close();

标签:, , , ,
20070704 linq 查询 动态组装 - 三月 20, 2008 by yippee

20070704 linq 查询 动态组装
http://www.yippeesoft.com

sql语句都是字符串,因此可以方便的进行组装
现在LINQ是
using (Northwind db = new Northwind(ConStr))

    &leftsign;

         IQueryable<Customer> CustomerQuery = db.Customers;

         //Append filter condition to Customer Table

         CustomerQuery = db.Customers.Where(p => p.City == "London");

如果动态组装
资料:

~~~~~~~~~~~
http://www.agilelabs.cn/blogs/woody/archive/2007/03/10/ado-net-ef-dynamic-query.aspx
核心的思路还是摒弃Lamdbas表达式(尽管他出奇的方便和紧凑),要动态的构造一棵Expression Tree,然后可以动态的增加,删除节点,最后在运行时动态编译这棵树,然后执行查询,从而得到动态结果.

Ado.net Entity Framework动态查询

    刚刚接触Ado.net vNext一段时间后,我就觉得他在动态查询方面将会有巨大用途……
    在我们现有的很多项目中,设计到很多联合查询,用户自定义查询等等动态类型的查询.例如,在一个人事系统中,想要查询某一位员工,我可能提供诸如姓名,性别,籍贯,所在组织,所属领导,工作类别,薪水…等等的查询条件,用户可以任意选择,组合查询条件.而我们通常的做法都是通过判断用户选择的条件,拼凑一段SQL语句,然后交由数据库执行(我不知道在一个纯ORM方案中怎么解决).这样做,繁琐,易出错,难调试…缺点不用再多列.

~~~~~~~~~~~~~~
8.Expression trees(表达式树)
这个原文中没有做过多的介绍,里面说还有一篇文档是专门介绍这个主题的

基本大意是对于 λ表达式
Func<int,int> f = x => x + 1; // Code

可以使用 System.Query中的一个模版类 Expression<D> 把表达式转成数据
Expression<Func<int,int>> e = x => x + 1; // Data

也就是对于 f 这个其实是一个可以运行的代码,执行 x = x+1;
对于 e, 则是一个描述代码 f 的一个数据结构

~~~~~~~~~~~~~~~~~
微软替我们实现的 Where 子句对应的扩展函数实际是如下的定义:

namespace System.Linq
&leftsign;
    public delegate TResult Func(TArg0 arg0, TArg1 arg1);
    public static class Enumerable
    &leftsign;
        public static IEnumerable Where(this IEnumerable source, Func predicate);
        public static IEnumerable Where(this IEnumerable source, Func predicate);
    &rightsign;
&rightsign;

其中红色字体的那个扩展函数,就是我们上面代码实际使用的扩展函数。

我们这个扩展函数参数:Func predicate 的定义看上面代码的绿色delegate 代码。

~~~~~~~~~~~~~~~~

启用 LINQ 的 API 用于实现具有“延迟执行”的序列运算符。延迟执行意味着在枚举结果之前不计算查询。对于 LINQ to SQL,这意味着在请求结果之前不会将查询远程传输到 SQL。这意味着,将查询分离到多条语句中并不表示会多次找到数据库。因此,在 SQL 中通常是嵌套查询,而在 LINQ 中就变成了组合查询。

SQL 缺少组合性的一个原因是,基础关系数据模型本身不是组合的。例如,表不能包含子表;换句话说,所有表都必须是平面的。因此,SQL 程序员编写其结果为平面表、适合于 SQL 数据模型的单一表达式,而不是将复杂表达式分解为更小的单元。由于 Visual Basic 基于 CLR 类型系统,因此没有限制哪些类型可以作为其他类型的组件出现。除了静态类型规则外,对可以作为其他表达式的组件出现的表达式类型没有限制。因此,不仅行、对象和 XML,而且 Active Directory、文件、注册表项等在查询源和查询结果中都是一流成员。

~~~~~~~~~~~~~~~~~~

Another way might be to use some delimiter, say backquote, to allow variables to be injected into expressions at the lexical level.

string foo = “Name”;
Expression x = c => c.`foo` + d.`foo`

Wouldnt work in anything but expressions assigned to Expression, but…

~~~~~~~~~~~~~~
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1745163&SiteID=1
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1706161&SiteID=1
http://www.albahari.com/expressions/
Dynamically building LINQ expression predicates

http://www.ayende.com/Blog/archive/7055.aspx
 Anyway, the problem with this kind of fomrs is that they are complex beasts. I have seen search forms that were two pages long, and were accompanied with a manual (just for the search form) that was bigger than the entire system specification. The real kicker here is that there isn\’t a single path that the user is going through, the system should be able to handle any combination of search terms, and ignore any that isn\’t relevant.

There is additional complexity added by the fact that this data is not sitting in the same table, actually, just from the rough data modle above, it looks like it is sitting in no less than 6 tables.
This is also the place where the Stored Procedure approach hurts the most, in my experiance.

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1706161&SiteID=1
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=97159&SiteID=1

http://blogs.msdn.com/mattwar/archive/2006/05/10/594966.aspx
 DLINQ\’s query mechanism has been generalized and available for all to use as part of System.Query.  It implements the Standard Query Operators for you using expression nodes to represent the query. Your queries can now be truly polymorphic, written over a common abstraction and translated into the target environment only when you need it to.

 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1752078&SiteID=1
 Check out the DynamicQuery example in the LINQ samples. It allows you to write code like the following:

 

Code Snippet

var query =
    db.Customers.
    Where("City = @0 and Orders.Count >= @1", "London", 10).
    OrderBy("CompanyName").
    Select("new(CompanyName as Name, Phone)");

 

The example includes fairly extensive documentation and is really easy to incorporate in your app.

http://msdn2.microsoft.com/en-us/bb330936.aspx
C# LINQ Samples and content for Beta 1

标签:,
20070626 动态语言 枚举 - 三月 2, 2008 by yippee

20070626 动态语言 枚举
http://www.yippeesoft.com

程序库往往决定了一种语言应用难度,纵观历史,凡是具有优 秀程序库的语言生命力都很顽强,反之则多销声匿迹。目前几种流行的动态语言,都具有丰富的程序库,在python中,不仅具有诸如网络应用,多线程,图像处理,科学运算之类的库,甚至还拥有多套不同量级的Framework来辅助Web开发。事实上,任何需要的功能几乎都能找到相对稳定的库,大部分程序员仅仅需要组合这些库就能编写出强大的应用–这也正是动态语言开发程序代码量较少的原因之一。

动态语言程序员有几乎无尽的库资源可用,比起其他语言的开发者,这是莫大的幸运,可惜郁闷往往环绕在幸运周围。前面说过,任何需要的功能都能找到相对稳定的库,而且不仅是一个,而是多个。哪个库好用,哪个库适合你的项目,每个库的特点是什么?要搞清楚这些问题也要颇费一番时间。至于要决定用哪个,不用哪个,往往让人左右为难。幸好,在开源社区,有众多参与者的项目往往不会太差,代码和文档齐备的代码都值得一试。

除了众多的程序库,动态语言本身的种类也远远大于静态语言,同样,每种 语言也各具特点。Python,Ruby,Lua,Perl是四种颇具代表性的语言,按照一般的看法,这些语言适合用来黏合不同的系统和模块,素有“胶水”的之称。现当然,后来人们发现胶水不仅仅能粘合其他模块,本身也具有强大的功能,在性能问题不那么重要的场合,动态语言看起来无所不能了,无论是网站还是应用程序,都能看到动态语言的身影。动态语言成了不可小看的一股势力。对这个时代的程序员来说,掌握一种动态语言很有必要,虽然你不一定能够靠单单一种动态语言找到一份喜欢的工作,但适时的采用动态语言,一定可以让你的工作变的简单许多。

了解动态语言和常用的程序库的特点,是开始动态语言编程的第一步。下面我们将介绍Python ,Ruby,Lua和Perl四种典型动态语言的程序库。

Python 不仅在所有主流操作系统上都能运行,而且得到了很多工业控制和嵌入系统的支持,除了各种unix-like的系统,Python还能运行在Palm,索尼 的游戏机PSP,nokia的手机操作系统Symbian,风河的嵌入操作系统VxWork上。Python被称做最强的脚本语言,无论开发web应用还 是普通应用程序都十分方便。Python诞生了10多年,积累了大批忠实用户,也存在了众多成熟的应用成功案例。

Ruby语言特点类似Python,但发展相对较慢。Ruby最近因为Rails框架而成为了最炙手可热的动态语言,Ruby on Rails适合企业应用,大量java用户对Rails产生了浓厚的兴趣,他们甚至认为Ruby on Rails会对java造成冲击。

Lua小而快速,目前多用来编写游戏引擎所需要的脚本。Lua代码精巧,比起Python或Ruby,Lua小的多。暴雪的著名网络游戏魔兽世界的配置脚本和插件都是采用Lua编写的,这也令Lua开发者迅速增加。

Perl是最古老的动态语言,强于数据分析和计算,也是unix平台上可以用做shell script用做的语言之一,系统管理员都很喜欢这个出色的工具,虽然近年风头被python抢去很多,但拥有CPAN程序库的Perl,仍然是最强大的语言之一。

按照现在的一般开发需求,我们需要的程序库通常是这样几类:web开发框架,GUI界面库,其他辅助工具,至于XML解析,字符串处理函数之类大路货,已经随处皆是,不值得开篇专门介绍了。

1 web开发框架

web如此流行,不仅仅是网站,企业信息化软件和部分个人桌面网站也采用了web界面。web界面成了和普通GUI并行的一种选择。如此众多的应用,使web开发框架变的如此重要,几乎所有语言都有了不错的web开发框架,而且还不止一套。

python 的web开发框架多的足以让人挑花眼,比较有名的就有类似 Ruby On Rails的django 和TurboGear,模仿tomcat的webware,轻量级的Quixote,karrigell,更轻量级,用apache模块实现的 mod_python和vampire。所有框架都各有特点,当然这也可以换个角度看作个有缺陷。总之,要挑选适合的框架,就要先仔细读文档,看成功案 例,对比自己的项目需要,仔细找。

Ruby简单的多,Ruby on Rails风头正劲,甚至已经让人说不清是Ruby成就了Rails还是Rails成就了Ruby,总之,用Ruby开发web应用,非Ruby on Rails莫数。无论是整个框架的结构还是界面的Ajax支持,Rails都是水到渠成了。事实上,也确实没有相同成熟度的项目可以选择了。

Perl的MASON名气很大,也很成熟,不过开发起来的思想和Perl原本的思路差距很大,如果能适应,这倒是个不错的选择。其实perl本身就很适合做web开发,只要有fastcgi,利用CPAN库,大部分应用都能轻松解决了。

Lua用来做web开发有点怪,毕竟不是为了这个目的设计出来的。但是也有一个叫做Kepler的项目提供了web框架,用起来也方便。不过Lua最好的用途还是写脚本,何必用来做web呢?

2 GUI界面库

能够跨平台的GUI界面库,比较成熟的大概只有两个,wxWidgets或是GTK。wxWidgets的可用性和美观程度都优于GTK,很受欢迎。

wxPython,wxLua,wxRuby ,都是不同的语言下对wxWidgets的封装,虽然成熟程度不一,但是无一例外的受到了开发者欢迎。

3 其他辅助工具

此类的库实在太多,每个程序员都有自己喜欢的一套工具。这里只列举一些比较有特点的程序库。

Python的RPC库Pyro,类似C++ ACE库的Twisted,本地编译工具Psyco

Ruby的图形处理库Rmagick,类似于tomcat的Mongrel

Perl仍然不得不提起CPAN,这个库太庞大,无所不包,以至于任何其他的程序库都显得黯然失色。

Lua中调用COM的LuaCOM,JIT 编译器LuaJIT

 编程语言介绍

作者:yuanqingfei  2004-10-24 1:48:39  CSDN

 

 

各种语言的介绍(第二版)

在介绍编程语言之前,先说说开放源代码的必要性。现在,在软件生产领域存在巨大的智利浪费,大家把大量的精力用在编写别人已经实现的程序代码上。看看,文本编辑器有多少,看看ftp程序有多少,看看字处理程序有多少,这些程序虽然有差别,但主要的功能都是一样的。要实现个性化的功能,在已有的软件基础上修改会节省多少时间呀!而每个程序各编一套,又浪费多少时间?如果,没有这些重复的工作量,世界上的程序员至少可以节省80%的工作量。同时,开放源代码也方便了大家的交流,阅读源代码应该是最直接最有效的学习途径。尤其是比较专业 的领域。

要开放源代码,下面几点比较重要: ×、语言要流行。 ×、语言的函数和类库统一。 ×、语言的语法和编译器要统一。 ×、编译器是否开 放源代码。 ×、API是否开放源代码。 ×、语言的可重用性、功能、友好性。

语言统一的必要性:如果大家都用一种编程语言,都用同样的函数,同样的类库,那么,大家的共同语言就会很多。大家只要学会一种语言,一套函数,一套类库,就可以相互读懂源代码,这样,学习量是最少的。学习新的API浪费程序员大量的时间和精力,尤其是当这个API有大量和其他API重复的功能的时候。

要增加代码的可重用性,要从下面几点着手: ×、代码的可读性。如格式、是否接近英语语法和单词。 ×、代码的表达能力,也就是简单性 ,能用最少的语句和单词实现同样的功能。 ×、代码的结构性,如函数、模块、类。

语言功能的强大从下面几点来说: ×、是否拥有大量的库支持。这是最重要的,要求编写任何功能的程序都有强大的库支持。 ×、语法功能 是否强大,比如是否有出错处理。是否有指针。

语言的友好性: ×、语言包的大小,语言包越小,学习越简单。 ×、语言是否有友好的编辑调试环境。 ×、语言的可视化和集成编程环境。

c语言:

  从性能上说,除了汇编语言,c语言是最接近机器的语言。各种操作系统的编程接口的默认语言都是c语言。因此,用c语言编程,可以最大限 度发挥操作系统的能力。同时,由于绝大部分的商品软件都是c实现的,都有c编程接口,可以说,没有c不能实现的功能。

  在linux环境中,c具有很好的开放源代码的条件,它有统一的编译器gcc,有强大但比较难掌握的编程环境emacs,有统一的API:posix和 linux接口。并且编译器和API是开放源代码的。

  在linux上编写图形界面程序,有两个选择KDE和gnome,KDE更成熟,gnome支持多语言和面向对象的程序间的协同。

  在windows环境中,现在统一到了vc上,但有一个缺点,windows的升级换代太快,从dos环境到windows31

,从windows31到windows95,到windows2000,到.net。API常常变换,这样,在windows上的程序代码的寿命会比较短。并且vc的编译器和API 太复杂,难于掌握。

  同时,由于c具有现代语言的大量特征,现在常常代替pasical作为教学的编程语言。

  实际上,如果不深入学习,c也是一种很简单的语言。不学basic,直接学c完全没有问题。

  和其他语言相比,c有多种编译器,多种操作系统API,多种语法和函数。学习的难度大,统一性差。

  和java相比,c的语法不够丰富、现代。

java:

  相对c,java作为现代语言,具有非常丰富的语法特征,如模块和类,不像c随操作系统和编译器的不同有极大差异,java是一个公司的产品 ,具有唯一的API,因此,java程序员没有语言隔阂。

  相对跨平台的语言来说,java具有最好的图形界面编程API。

  java所有的API都是类库,相对c的函数来说,是非常大的进步。java具有现代语言几乎所有的特征。

perl:

  perl的最大特点是有强大的字符串模式匹配,是最好的文本文件的读取和生成语言。

  perl具有很大的自由性,象英语一样有很大的随意性,

  perl有一个强大的数据库接口和其他各种接口。

  perl有最大量的程序库。

  perl不适合编写大程序。

  perl有一个著名的缺点是难懂,也有一个著名的优点是简练。

php:

  我感到php是个怪胎,本来perl加嵌入html的功能就完全能实现php的功能,还要另创一种语言,加重了大家的学习负担。

  php可以嵌入html,更容易编写服务器端程序。

  php天然和web服务器以及mysql数据库相结合。

  php可以动态生成图像。

python:

  首先,python是和basic一样面向初学者的语言,和英语一样容易懂。

  python具有和java一样的最丰富的语法。

  python有和perl类似的简单性,但没有模式匹配。

  python适合编写大程序。

  python有和lisp相似的地方,它有将字符串作为程序执行的eval函数,可以对一个对象的所有数据进行保存,可以把函数作为参数传给另一 个函数。

  python具有非常好的扩充性,python程序可以和c程序,以及java程序很好地结合。

tcl:

  tcl具有最简单的语法,最好的和其他程序交互的能力,有编写图形界面程序的tk。

javascript:

  编写动态网页的最佳工具。

lisp:

  lisp的语法非常简单,只有简单的函数和参数的语句结构。

  lisp数据和程序的界限模糊。

  lisp可以深度嵌套。

prolog:

  prolog是一种专门的语言。专门用来处理知识。

  我感觉prolog是一种数据库的处理工具。

  也是根据一些知识衍生出更多知识的推理工具。

basic:

  现在最著名的basic是vb,

  basic是简单的初级语言。

  vb是快速的界面生成语言,是快速的数据库程序开发语言。

  vba是vb的应用版,嵌入在offic中。编写offic上的程序很好用。

  vbscript是vb的脚本语言,可以产生服务器端和客户端的动态网页。

  basic的丑陋在于参数还是默认传地址。太危险。

delphi:

  和vb一样是快速开发环境,但性能更好,功能更强大。

.net:

  支持多种语言的统一的API类库,

  可以编写webform程序,即所有的逻辑都在服务器端,传到客户端的是标准的html3.0,可以被各种浏览器支持。各程序组件间通过soap交换 消息。

2002-04-12新增内容:

除了汇编语言外,c是最接近系统底层的语言,因此它是大部分程序的编程语言。c的缺点是没有统一的函数库,标准不统一,因此,同样是c程 序员,相互看不懂代码是很平常的事。

ada 的出现就是为了解决统一标准的问题。有一个国际组织专门进行严格ada语言的认证来保证ada的统一。因此,ada编译器有很多种,但ada语言程序用任何ada编译器编译都能通过。同时,ada的执行程序的效率和c比较接近。有人说比c要快,我想不可能,除非c用的库有问题。ada比c 排错能力更强,但c也有类似的功能。ada还有一个缺点,就是语言罗索,象cobol一样非常难看。

java是对c的大大的改进。有统一的标准,丰富的库,完全的面向对象。也继承了c的一些特点,无所不包的全功能,深入系统底层的编程的灵活性。但因为java学习了c的深入系统底层的特点,它的语言就严格、呆板、罗索。另外,java要跨平台,它的速度就非常令人不满意,只能局限在高级应用方面。在速度上,可以选择微软的.net和苹果的coco(可能拼写有错误)。他们也同样是底层的面向对象语言。

作为高级的应用程序,如果没有保密要求,脚本语言是最合适的。脚本语言因为不用编译,因此开发速度会比编译语言快很多。

basic和perl都是古老的脚本语言。basic被微软发扬光大了,但它的缺点是没有完整的面向对象特性,因此编写大型程序很困难。另外,微软 的产品肯定是“肿件”。perl被特别设计来进行文本的处理,文本处理能力非常强,但不适合编写大程序,语言风格也比较令人费解。

python定位于入门的编程语言,是basic的代替品,它具有和basic同样的简单性,并且编程语句更优雅。python有比较完整的面向对象特性, 可以用来编写大程序,因此有些大型的实用程序是python完成的,从加快开发速度的角度,可以代替c和java。python的另一个巨大的应用领域 是用来操作定制其他程序,这个能力basic也有,从这个角度说,python就是unix世界的basic。但python更进一步,和c的沟通能力非常好,任 何为c编写的接口能够很容易转化为python的接口。和java的接口有专门的python的java版,就是jython,jython可以和java本身一样使用各种 java资源。

ruby首先是smalltalk的替代品。有彻底的面向对象特性。另外,也努力作为perl、php、basic、python的替代品。

rebol是lisp的替代品,同时作为脚本语言的一员,有自己的独特之处,他的网络编程和图形用户界面编程是最强大的。

语言解析语言yacc、 html、xml、xlt、xul等也可以算作语言。

[edit]

各种语言的选择

  如果编写对性能要求苛刻,或和操作系统结合紧密的程序,必然选择c。

  如果编写到处可用的程序,选java。

  如果编写大程序,可能的化尽量用python,不行了再用java和c。因为python带来了生产力。

  编写文本的处理程序用perl。

  编写知识的处理程序用prolog。

  编写最灵活,最模糊的程序用lisp。

  编写office程序用vba。

  编写服务器端程序,php、perl、python、asp都是选择。

  编写数据库程序用vb或delphi。

[edit]

各种语言的选择

如果要追求性能和程序的能力,要完全发挥操作系统的能力,使用c语言是合适的。在windows环境下用vc,在linux环境下用gcc。

如果不是追求和操作系统完美结合,而只是性能,又要追求跨平台性,那么仍然选择c,但可以选择跨平台的库,如qt、gtk、fox、wxwindows 。如果要编写游戏也有跨平台选择:SDL。

如果不满意c领域标准的不统一,不满意c的容易出错,不满意c的面向对象特征不彻底。如果不在乎跨平台,windows平台可以选择c#,mac平台 可以选择coco。如果需要跨平台,可以选择java。

如果需要跨平台,又要广泛的支持的话,选择java。

如果不在乎商业机密,应用目标也不是太苛刻的话,编写大型跨平台程序还有一个选择就是python或ruby。脚本语言,但是具有全面的库的支持,有和c语言的方便的交互能力。他们和java相比,编程效率更高。同时因为没有编译,程序更方便修改。因为他们的库都是c实现的,也比 java有更高性能。同时,他们都是开源的,都是对商业应用友好的,也是简单的、方便定制的。也是不满意java的不可控制的越来越庞大的库的又一个选择。

在linux下,最方便的工具语言是perl,它有强大的社区和代码库的支持。

如果只作为简单应用的工具语言,python和ruby是更好的选择,他们的跨平台移植性好,应用也比较广泛。其中python更适合入门和交流,长 期使用也不错。ruby是对python不满意的另一个选择,它提供了很多额外的功能。

如果要选择一个程序的嵌入语言,原来有lisp、basic和java,现在还可以选择python和ruby。

如果在要求动态解释执行语言,而又不想学其他语言的话,c程序员的选择是pike,java程序员的选择是beanshell。

在java平台,又想用脚本语言的话,可以用jython。

最正统的基于文档的语言或叫动态页面语言是javascript。

最专门的服务器端语言是php,当然也有很多其他选择。

xml语言以xul为最著名,dtml也算一个,你自己也可以用xml作为自己特殊用途的语言。比如jedit就用xml作为一种模式定制语言。xml语言是 一种比较先进的趋势,比现有的语言在特殊领域更高效。

要找容易实现的语言,lisp和tcl是选择。

lisp的数据和程序融为一体的能力和自由是其他语言都没有的。现在出现了一个lisp的现代化的变种:rebol。

如果有基于事实的编程的需要的话,prolog和clips是必然。

[edit]

我为什么选择了python

首先声明,我编程只编应用程序,就是代替自己工作的小程序。如果编写系统程序总会用到c或java的。

我喜欢脚本语言,脚本语言不用编译就可以运行,非常便于修改,而编程序是一种经常性的活动,程序编完后总在不断的修改中,没必要搞的 很隆重,还要编译。另外,脚本程序每个使用的人都可以随手拿来修改,不会出现还要去找源代码的情况。因此,c和java就被排除了。

我喜欢简单的语言,不喜欢为了编写简单的程序而去学习大量复杂的规定,需要大量的学习才会的语言不是好语言,是把人当机器看。c和java 都有严格但罗索的语法,有永远学不完的函数、类、库。让人看到就头大。而perl有各种怪里怪气的速记符号,程序常常让人头晕。简单的含义除了容易学,还要功能丰富,常用到的东西要早就准备好,不用每个人都去写同样的数据结构程序等。python有丰富的数据类型,有完备的 面向对象的结构,有规则表达式等各种方便编程的模块。这个逻辑就是程序做的多,人做的就少,如果程序做的少,就要人做的多。这就是界 面友好的问题。容易上手,功能丰富是程序设计的很重要的目标,windows就是靠这个流行的。而python也很好的体现了这点。而perl象unix的 emac之类其它工具一样,功能强大,但太难学,太难懂。是比较违背人性的。

关于性能。现在cpu已经很强大了。除了很大的程序和系统程序,没必要关心性能。

关于功能。如果不是编写系统程序和贴近系统的程序,没必要使用操作系统特别提供的功能。c是可以干任何事情,但它编程效率低,复杂。

至于我为什么不用vb,因为vb太庞大了。我没必要实现一个小功能启动这么庞大的程序。太夸张。另外,vb没有类继承,虽然是应用编程,但 如果要编稍微大的程序,总会用到类继承的。

python得强大得扩展能力使对python得学习不会浪费。python经过简单得处理能使用各种得c和c++库,也可以被c和c++调用。python可以直接 使用java得类,也可以直接被java调用。这样,对python、java、c得学习和使用经验都不会被浪费,还能相互补充。python可以提高java和c 得编程效率,java和c可以补充python功能上得不足。python还可以和tcl直接交互,这种功能是内置得。期待python能简单的调用perl和php得 功能。能使用lisp和prolog更好。

[edit]

ruby 吸取了所有语言精华的语言 第二版

ruby 语言还是杂耍 ruby?:O ruby 日本人的玩意

ruby有

 * perl的正则表达式

 * python的语言的简单性可读性、最容易的扩展能力,强大的可移植性。

 * php的嵌入功能和多种客户端

 * smalltalk的纯面向对象语法和单继承

 * lisp的无穷嵌套的语法,也就是函数式的语法。

 * 用“块”来实现更快捷的数据结构的处理。不知道是不是scheme的宏功能。用块能更清楚的实现python的表处理功能。

 * java和ada的线程编程

 * java的安全编程

不得不承认ruby确实是个精彩的语言,它完全学会了lisp的所有编程都是函数的思想,smalltalk的所有东西都是对象的思想,perl的一个目的 多种手段的方法,python的简单化的“最少惊喜”的原则,java的多线程和安全控制的功能,tcl的容易扩展的功能,php的嵌入功能和强大客 户端的功能,最方便的shell命令的调用。

[edit]

ruby和python的比较

[edit]

python和ruby的相同点

 * 都强调语法简单,都具有更一般的表达方式。python是缩进,ruby是类basic的表达。都大量减少了符号。

 * 都是动态数据类型。都是有丰富的数据结构。

 * 都具有c语言扩展能力,都具有可移植性,比perl的可移植性更好。也都可以作为嵌入语言。

 * 都是面向对象的语言,都可以作为大项目的开发工具。

 * 都有丰富的库支持。

 * 也有最宽松的版权许可,除了一些工具属于GNU世界。

 * 都有lisp特色的eval函数,也都能把函数作为参数。

 * 也有图形界面的ruby的专门编辑器。

 * 都获得了广泛的c库的支持。如qt、gtk、tk、SDL、FOX等,ruby计划实现SWIG接口。

 * 都有完善的文档。

[edit]

和python相比ruby的优点

 * 具有正则表达式和嵌入html的功能。python也有正则表达式,但没有ruby的应用方便和广泛。python的嵌入html项目才刚起步。ruby还有 apache的mod模块。ruby本身也实现和很多unix工具,如racc,doctools。比python更亲近linux。

 * 比python功能更完整的面向对象的语法。

  * ruby的整个库都是具有类继承的结构。

  * 他的基本的数据类型和运算符都是可以重载的。

  * ruby主要的功能都是通过对象的方法调用来实现的,而不是函数。python也在向这方面发展,但没有ruby做的彻底。

  * ruby的类是更规范的单继承,还有接口等概念的实现。

 * python可以实现在列表内的条件语句、循环语句,而ruby用“块”的方式来实现这个功能,比python的更灵活,更具有通用性。

 * ruby具有类似lisp的彻底的函数方式的条件语句、循环语句等。语句的表达能力更强。

 * 附带一些unix工具,如racc等。

[edit]

和python相比ruby的不足

 * 最大的不足正是因为ruby的强大所引起的。它没有python的简单性好。比较复杂的面向对象语法、“块”语法的引入、正则表达式的引入、 一些简写标记都增加了语言的复杂性。

 * python的缩进表达方式比ruby的basic的表达方式更让人悦目,ruby程序的满眼的end让人不舒服。当然,ruby认为end的方式比python更先 进。

 * ruby还没有python的“自省”的能力,没有从程序文件中生成文档的能力。

 * ruby没有国际化的支持。国际化支持在ruby的计划中。这是因为ruby的历史比python要短造成的。

 * ruby没有类似jython的东西。

[edit]

python和ruby的语言的选择

 从简单的就是好的来说,选python是没错的。python适合寻找简单语言的人,这很可能造成python更流行,因此也有更多的支持。但如果要追 求更强大的语法功能,则ruby是好的选择。因为ruby和python的哲学有很多相似的地方,先从python入手,尽量用python,如果python的能力 不足了,可以在找ruby。

ruby和python的比较,就像五笔和拼音输入法的比较。拼音作为入门的输入法和长久使用的输入法都没有问题。五笔适合更高要求的情况。如 果追求性能的不妨学学ruby。对编程语言感兴趣,想了解各种编程概念的学ruby也会很兴奋。

[edit]

php有什么好处

我一直认为php是一个垃圾,因为它只是实现了脚本语言得嵌入,却单独实现一种语言、实现大量得函数库,浪费了大量得开发人员得宝贵时间 来重复其他脚本已经实现了得功能,也浪费了php开发人员得大量学习时间,还要单独学一种只能存在于web服务器得语言,浪费了perl、 python得已有得使用经验。相似得还有pike,一种c得脚本语言,没什么新东西,还不如仍然用c编译器。

但我最近看书才了解php得独特得开发目标。

php为什么不直接用perl作脚本语言。是因为perl是一种unix语言,带有unix传统得字符神秘高深,让人难于学习。而编动态网页得人不见得会 用perl这种unix工具,他们可能只有html知识。php就简化了perl得语言,变成了一种简单友好得语言,免去了人们学习perl得困难。

php为什么不选python作脚本。因为python是一种面向对象得语言,大量得功能都要涉及面向对象概念,而web应用只是简单得实现客户机逻辑 和显示功能。没必要涉及面向对象得复杂概念。函数是最简单,最容易理解得,因此,php倾向于所有得功能都用函数来解决,而不是用对象来 解决。这有点象c和c++之争。应该承认,函数在实现简单功能得时候是最有利得工具,它得语句量最少。

php定位于以html为用户界面,充当各种服务器得客户端,实现得是传统得客户端编程得任务。它有pop、smtp、ftp、多种数据库等各种服务器 得客户端得函数,也有图片、pdf生成,xml处理等这种必要得功能。这些都是其他脚本比不上php得地方。

我几乎没用过php,说得不对,请指教。

[edit]

ada语言草述

ada语言我看了他的介绍。

ada语言和c一样是一种编译语言,他们最后编译出的执行文件的机器码都很小。因此现在众多的语言只有c很ada能比较。

和c相比,ada的特点是可靠、可移植。

他的可靠是通过比其他语言都强大的类型,每种类型还都可以象数据库字段一样进行强类型、范围的检查。以此来保证在编译中就发现错误。

它有强大的标准化组织,严格认证ada编译器的标准。有多线程能力。

适于编写实时程序。

但和c相比太复杂、罗嗦,因此注定不能流行。

[edit]

多脚本语言的大统一及疑问

现在各种脚本语言太多了,有必要进行整合,parrot是一个好的想法。.net也是好的想法。它为各种脚本提供了一个统一的虚机,为各种脚本 语言提供了基于“类”的相互调用,为各种脚本提供了统一的类库。

现在各种脚本语言只是提供了对c语言的交互性,这种交互也是费劲的和效果不好的。比如python、perl、 ruby等都提供了对c的交互功能。脚本语言之间的交流障碍重重。而类似.net的东西,提供了非常容易的各种脚本的相互利用的途径,避免了很多的代码的重复编写。这种标准平台的力量是很大的,这种标准平台为什么没有在开源领域首先出现呢?众多的脚本正是开源的特点和优势,为什么这种问题要微软来解决呢?前面有人提出了类似的问题,在linux中为什么至今没有好用的类似ODBC的东西呢?

可能这种整合只有商业公司有能力实现吧。

我的理解是,如果有创新思想的人都拿他的想法去卖钱了,因此,在开源中只剩下了模仿的人。kde是模仿windows,koffice是模仿office, linux是模仿unix,gcc、bash等也全都是模仿,以及gstep等,还有freedos、atheos等也是模仿,wxwindows、 SDL也是模仿。我想知道开源社 区有没有自己的创新?我所知道的创新是zope,但zope最初也是商业产品,后来才开源的。perl是创新,python是创新,但还有什么呢?是不 是开源领域只有hack,没有creator?

[edit]

.net介绍

.net所实现的java的功能

可控代码 跨平台的虚机和伪码免费赠送命令行编译器 纯面向对象语言 对xml和xml web services的支持 和jsp对应的asp.net 网页上的程序 一套统一的中间件环境。

asp.net跟jsp不是同一个层次上的web技术, asp.net使用完善的事件响应机制,WinForms类似的 WebForm技术,只有JSF跟Asp.net有可比性。

.net未实现的java功能

免费的集成开发环境 多厂家支持,跨平台的成熟度

免费的IDE, #develop , ASP.net 的有MS的WebMatrix 而免费开源的CLR实现,有MS自己的XP,FreeBSD,MacOS下的实现(原理演示不能进行商 业应用), Novell下的Mono项目,已经发布了Beta1版本,在2004-6-30 将会发布Release1; 还有GNU的一个.net实现!!

[edit]

.net实现的java不具备的功能

多语言支持 强大的集成开发环境。在windows上媲美本机程序的速度。 对COM的支持,对vs的继承 对widows form 、web form、服务器端程序 的图形直观编程。

[edit]

相对vs6的改进

统一了集成开发环境,使c++程序也具有了vb的友好性。

[edit]

xml各种技术介绍

xml:

  xml是统一格式的结构化数据的文本文件。

  基于xml的程序,数据结构是开放的,方便不同程序处理同一种文件,这样,程序之间可以达到高水平的协作。

  xml现在成为了各行各业统一数据格式的基础。

  xml发展出了完善的语法,它用DTD或scheme来界定xml的标记语言。用uri来唯一确定一个xml格式。用css或XLT来转换xml格式,xlink和 xpointer等来建立xml的链接,用xpath来定位xml中的数据。

xhtml:

  是严格符合xml格式的html。

RDF:

  基于xml的元数据描述语言。方便交换结构化数据。方便交换知识。

  RDF是用主语、谓语、宾语来描述知识的。

SVG:

  xml格式的矢量图形格式。

SMILE:

  xml格式的各种多媒体在时间线上的协同。

xmath:

  xml格式的公式描述语言。

xml-rpc和soap:

  以http协议和xml格式来进行网络程序之间的消息通讯。

xul:

  netscape的mazilla使用的程序界面语言,基于xml格式,比html强大的多的描述图形界面的xml语言。它用css来换肤,用DTD来实现多语言界面,用javascript来实现程序逻辑,以此编写跨平台的可方便定制界面的程序,现在这个程序API功能已经很强大了,整个mazilla程序就是基于xul的。

xaml:

   MS在LongHorn平台的最新编程语言,将统一Windows与Web编程,直接使用

LongHorn下的浏览器进行执行, 跟XUL有类比性

[edit]

最先进的xml格式图形界面程序开发工具-xul

大家知道netscape程序,一个仅次于ie得浏览器,也有很多人知道mozilla,netscape得开放源代码版本。但很多人只是使用 mozilla,不知道 mozilla另一个重要得功能--程序开发。在netscape开放源代码后三年mozilla得1。0版还没有问世,很多人讥笑他的超慢得开发速度,实际 上,mozilla酝酿出了一个超酷得新产品,可以看作是软件开发工具发展得另一个里程碑。

现在基于浏览器得三层开发结构非常流行,微软得.net得思路就是基于这个结构得。另外,不考虑服务器结构,就是基于网页得javascript小程序也对人很有吸引力,这些产品得思路都是以html为用户界面,但开发人员常常苦恼于html太简陋。而mazilla得xul解决了这个问题。

xul 是对html得扩展,完全兼容于html,xul基于xml格式对html进行了扩展,实现了完整、强大得图形用户界面设计功能。可以设计出复杂得图形界面程序。实际上mazilla整个就是由xul设计得。xul用css来控制界面风格、用DTD来替代字符串,方便的实现本地化,用 javascript来对用户界面的操作作出反应,提供基本的逻辑编程,javascript通过对象文档接口DOM来动态控制用户界面。同时javascript通过调用 mozilla提供的丰富的底层API来实现强大的功能。mozilla提供了功能强大的API可以进行文件操作、网络操作、图形操作等各种操作,并且这种API是完全跨平台的。最后,mozilla用RDF格式来存储独立于界面的数据。

总结:xul由于兼容html,提供了最强大的用户界面的定制,DTD提供了最方便的本地化。xul、javascript、RDF提供了显示、逻辑、数据的分 离。mozilla的底层API提供了跨平台的强大编程能力。

希望大家都来关心mozilla。

 

[edit]

最接近人类语言的编程语言-rebol

rebol的详细资料见www.rebol.org。这里谈一下我得印象。

rebol 的缺点是明显的。它是一个商业公司的产品。它只是象java一样免费使用。但不开放源代码。并且它的数据库连接的函数库是收费的。但它的优点也十分明显,如果因为不是开放源代码软件而不能放心使用,也可以欣赏和借鉴它的种种特点,并且了解了rebol肯定还会忍不住使用 它。

首先rebol是一个lisp语言的替代品,它能实现lisp的所有能力。他具有lisp语言的数据和程序同等处理的特点,也有语句和表达式的统一。但大大打破了lisp的局限。它允许中缀运算符的形式,没有满眼的括号,和一般编程语言的表达方法完全一样。同时具有丰富的库,有完全的图形界面库,完全的网络库。因为是一个公司的产品,也保证了库的统一。

rebol自称为网络编程语言,它的网络编程能力很强,一般一个语句就可以下载一个文件,或下载一个网页,或接受一个邮件。

rebol一个神奇的特点是它的图形界面设计,它的界面编程非常简单,完全不用语句和函数,而是和html一样只要表达核心内容就行了。这得益 于rebol的“方言”能力。

rebol内置了“方言”能力。就是象yacc一样的语言解析能力。可以随时扩展“子语言”。

rebol内置了几十种数据类型,用它编程,语句肯定是最精炼的。

rebol 可以实现java一样的网络下载程序运行的能力,也有砂箱功能。它比java更进一步,有自己的桌面,在桌面上可以任意启动各个rebol程序,它的桌面象html一样有丰富的表达形式和超链接。链接到有rebol功能的网站上就可以象浏览网页一样使用各种程序。由于rebol语言比 java要简练的多,同时是不用编译的脚本语言,它的程序文件非常小,更适合网络传输。因为rebol有这样神奇的功能,它自称internet操作系 统。因为rebol是脚本语言,因此它天然是跨平台的。它有很多操作系统的实现。

还有一个特点,rebol语言自身只是一个几百k的可执行文件,因此rebol程序的发布是非常简单的。

 

[edit]

一个小巧强大的脚本语言lua

第一眼看到lua的介绍,感觉它象tcl的替代品,因为它的主要目的是作为脚本语言。但接下来就看到它不是象tcl那样是命令行式的函数语言, 它和其它语言一样有语句结构。它实现和c程序互动的方式和python类似,具有和python一样的和c结合的能力。并且lua全部是用ansi c实现的 ,可以实现完全的跨平台。

然后,看到lua的一个显著的特点就是具有对象数据库功能,可以实现变量的永恒存储。这个特点让人首先联想到fish,fish的最重要的特点也是语言内含一个对象数据库,不过fish有outline的可视界面,和数据库浏览能力。但fish不是开源的,因此,如果需要一个非内存的变量存储空间可以选择lua。这种对象数据库都是不但能存储数据,也能存储操作数据的函数。实际python也具有一个将整个内存存储在一个磁盘文件的功能,另外,还有zope的zodb可以实现专业的永恒变量功能。另外,scheme天然具有永恒存储能力,它只要把表变量输出到一个文件中就可以了。因为scheme是不分数据和程序的,因此可以实现将程序和数据同样存储在文件中。

lua和python相比规模比较小,因为它是和c紧密结合的,可以完全使用各种c库,就不需要有自己的库。lua给人的印象是小规模的python。lua 也是动态数据类型,也有内存管理功能。只是python自带强大的库,而lua只携带一个小型的库,具有字符串和数学计算能力,同时lua标准携 带一个对象数据库。另外,可以把c库随时编译到lua中。lua引以自豪的是它的速度很快。

lua的语法比较简单,它把数组、字典、结构等复杂的数据结构都统一为表。另外,lua具有正则表达式功能。

 

[edit]

最具有现代感的lisp解释器drscheme

lisp是一个古老的计算机编程语言,给人的印象是速度慢,输入输出能力弱,没有图形界面,自身携带的库太少,很多功能不能实现。这一切 在drscheme手中改变了。

drscheme 具有大量的现代语言具有的功能,比如作为嵌入脚本的能力,图形界面的编程能力,面向对象的能力,组件编程能力,正则表达式能力,xml能力,作为web服务器和客户端来输入输出能力及其它网络能力,产生独立可执行文件的能力。一个集成的编辑调试环境。不过它的程序执行速度还是稍慢。

当然,它具有所有scheme的优点,语法的宏定义能力,命名空间能力,数据和程序不分的能力,堆栈式内存管理,无穷嵌套,用“表”来表现所有语句和数据的简单方式,也天然带有程序环境的永恒存在能力。这些特点好像正在最新出现的编程语言中出现。好像目前的编程语言的发展趋势是从c语言的方式向具有更多lisp特点的方向发展。就像windows逐渐具有了越来越多的unix早已实现的功能。

才知道lisp的编程环境已经这么好了。

eiffel语言印象

印象深的是它是全开发周期的语言,并且是在开发周期可回溯的。它的contract和ada类似。eiffel是和c++类似的编译的面向对象语言,不过 更简单,能够多继承。eiffel是c语言的面向对象编程的代替物。

[edit]

mozart oz语言

oz介绍它是面向对象的、能够逻辑编程的、并发分布的语言。我对oz印象最深的是它的多线程能力。一个简单的case语句,就可以启动多个线 程。另外,它也是一个prolog的代替物,可以编写分布并发的人工智能程序。

[edit]

一般是使用什么软件,就用什么软件的语言

就拿我用的软件举例:

使用excel,就用vba编程。

使用autocad就用autolisp编程

使用zope就用python编程

如果使用gimp就用python或scheme编程

使用gnome office就用python或basic编程

使用blender就用python编程

[edit]

然后看处理什么样类型的数据

如果处理文件的操作就用shell语言。比如bash

如果处理文本文件,就用perl或awk,如果喜欢perl的风格,又象编大程序,就要用ruby

如果处理数据库,简单的用sed。否则用sql。

如果是对象数据库,可以使用python+ZODB、或lua、fish

如果一般的数据库不能满足要求,需要做专家系统,就用prolog

如果处理结构化文本,如xml,就用xslt。

处理html,客户端用javascript,服务器端用php

如果处理类似语言分析的文本,就用yacc

如果处理出来的结果是打印文档或屏幕文档,就用tex

如果是图像、动画或其它二进制的文件,一般用c语言。

如果处理的问题和操作系统底层打交道,用c语言

[edit]

从语言特点来说

如果极端要求运行中的多线程的并发和分布,可以考虑oz语言。

如果极端重视文档,希望把程序的文档写出来了,程序也几乎就完成了,那么用cweb

复杂的程序,在编写之前需要做uml的文档。

如果要编写规模较大的程序或打算只学一种编程语言,就要用python

如果编写程序来处理复杂的数据结构和算法,就用lisp和scheme (喜欢lisp的风格,并希望更简单,用rebol)

如果想最简单的实现一个语言来作为嵌入语言,就用tcl,如果tcl有局限,就用lua

[edit]

c语言是最普及的语言,但c语言有一些缺点,因此,就产生了很多改进c的语言

因为c不能编写大程序,就产生了c++

因为c++还有指针等缺点,就产生了java

如果不喜欢c++的各种缺点,又想使用一个编译型语言,就选择eiffel

c 语言的一个缺点是标准库规模小,不能解决所有的问题,就产生了大量不兼容的库,导致了很多不可移植的程序。如果想要一个和c用样级别的可移植的编程语言,就选择ada。ada的图形用户界面库和各种和操作系统相关的库都是标准化的,可以选择不同卖家的解决方案。是军队要求的标准编程语言。

如果不喜欢c语言的繁琐,希望常做的事编程能够简单,那么可以用python。完成同样的工作,python代码行数是c的几分之一。

c风格的脚本化语言是javascript,pike

[edit]

关于图形用户界面的选择

最简单的图形界面接口是tk,可以在各种平台上可用

如果有更高的要求使用gtk。gtk移植性差些。

一个以移植性为目标的开源c库是wxwindow

如果希望简单的编程,要求不很高,可以用xul

跨平台的图形用户结构是java的awt和swing。如果不跨平台,还有ibm的java解决方案。

如果对商业编程语言不排斥,可以用qt,因为qt的程序,如果商业使用是要付费的。

如果要编写全屏的文本界面程序,emacs是最权威的。我们可以回忆,turbo c的编程环境和图形用户界面一样友好。它就是全屏的文本用户界 面。

如果编写office家族类似的程序,在open office上也是可以考虑的选择。gtk也可以。

 

>如果处理结构化文本,如xml,就用xslt。 xml本身也算吧. >处理html,客户端用javascript,服务器端用php php不是唯一. >如果处理出来 的结果是打印文档或屏幕文档,就用tex 超强. >如果是图像、动画或其它二进制的文件,一般用c语言。 >如果处理的问题和操作系统底层打 交道,用c语言我会在c/c++里面选c++ >如果极端要求运行中的多线程的并发和分布,可以考虑oz语>>言。 20年以后的语言. >如果编写程序来处理复杂的数据结构和算法,就用lisp和>scheme Lisp也是让人喜欢.

>如果要编写全屏的文本界面程序,emacs是最权威的。我们>>可以回忆,turbo c的编程环境和图形用户界面一样友好。它>就是全屏的文本用 户界面。哈,Emacs.

也许,语言是用来超越的.许多应用就需要不同语言混合. 把Python嵌到应用程序中,我觉得很诱人.

 

 ====再补充说一下web服务器编程====

在商业开发中流行的是java和.net,其实zope也是选择之一,zope的特点就是全部开源,层次少,简单。并且集成一个内容管理器和众多的附加产品。附加产品多是开源软件必然的优势。zope之前的一些缺点在zope3中将得到解决。另外,zope的组件架构和cmf开发架构,并不必java 的组件开发环境差多少(我没接触很多java,只是评感觉说,其他人可以有不同意见)。

php虽然看起来不适合大程序开发,但在php平台上已经有了很多大规模的程序,比如puke。tiki。

另外,web服务器已经被很多程序缺省支持,用很多语言都能编写出独立的web服务器程序。

 

文学编程和CWEB介绍

CWEB 是tex的作者创立的一种编程语言。tex是主流的文档打印标准和文档生成工具。tex及相关的metafont就是用cweb编写的软件,同时tex体现了cweb的编程特点。CWEB的编程思想叫“文学编程”。实际应该叫“文章编程”,因为和文学关系不大,反而和学术著作类似。主要思想就是:编程应该象写学术著作那样,有整体构思,以部、章、节、子节、子子节那样逐级丰富。这实际和我们说的“自顶向下”的编程方法类似。但“自顶向下”只是一种软件工程的方式,它是以编写文档的方式实现的,没有和编程语言结合起来。CWEB用我的说法是用编程语言实现了 “自顶向下”。

CWEB 的实现方式是“宏替换”,就是逐级用更具体的内容来代替较概括较简略的内容。我们使用的编程工具“maker”实际就是一种宏替换工具(我没用过maker,只是听说)。zope的TAL语言是一种替换工具,但不是宏替换工具,因为它的内容不是可执行的,如果内容是可执行的,那么它也可以叫宏替换。

标签:,
20070521 mpx220 上网 设置 动态 绑定 DataGridView - 一月 28, 2008 by yippee

20070521 mpx220 上网 设置 动态 绑定 DataGridView
http://www.yippeesoft.com

          try
           &leftsign;
               string ConnStr;
               SqlConnection Conn = new SqlConnection();
               SqlCommand Command = new SqlCommand();
               SqlDataAdapter Da;
               DataSet dt = new DataSet();
               SqlDataReader SqlReader;
       

               ConnStr = "Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI";
               Conn.ConnectionString = ConnStr;
               Conn.Open();

               Command.Connection = Conn;
               Command.CommandText = "Select [Orders].OrderID  as 订单号 ,Quantity as 质量 From Orders,[Order Details] where Orders.OrderID=[Order Details].OrderID";
               //MessageBox.Show(Conn.State.ToString());
               //SqlReader = Command.ExecuteReader();
               Da = new SqlDataAdapter(Command);
               
               Da.Fill(dt, "MyTable");
               dataGridView1.DataSource = dt;
               dataGridView1.DataMember = "MyTable";
               textBox1.DataBindings.Add("Text", dt, "MyTable.质量"); //数据绑定
               comboBox1.DataSource = dt;
               comboBox1.DisplayMember = "MyTable.订单号";
               comboBox1.ValueMember = "MyTable.订单号";
               dt.WriteXml("c:\\\\test.xml");
           &rightsign;
           catch (Exception ex)
           &leftsign;
               throw ex;
           &rightsign;
           finally
           &leftsign;
               //m_Reader.Close();
               //m_Conn.Close();
           &rightsign;
     
     
     string   connectionString   =   "Integrated   Security=SSPI;Persist   Security   Info=False;Initial   Catalog=FreightBusiness;Data   Source=FTT;User   ID=sa";  
                         SqlConnection   conn   =   new   SqlConnection(connectionString);  
                         conn.Open();  
                         SqlDataAdapter   myda   =   new   SqlDataAdapter("select   jobno,jobtype,khbh   from   jobse",   conn);  
                         DataTable   dtTable   =   new   DataTable();  
                         myda.Fill(dtTable);  
                         dataGridView1.DataSource   =   dtTable;  
                         this.dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);  
                         conn.Close();  
                         dataGridView1.Columns[0].HeaderText   =   "工作编号";  
                         dataGridView1.Columns[1].HeaderText   =   "   业务类型";  
                         dataGridView1.Columns[2].HeaderText   =   "客户编号";
 MPx220手机是移动心机的,都内置全球通客户服务和全球通网站快捷方式 。而在手机的菜单 设置-数据连接 中已经设置好了上网的连接参数。但这些参数并不完美。例如使用GGTV和QQ时会做成连接错误情况。

下面介绍下上网连接设置参数。

  打开手机的开始-设置-数据连接 “右键菜单”-编辑连接-代理服务器连接
  WAP2.0 Port Setting
  连接方: WAP网络
  连接到: 安全WAP网络
  代理服务器: 10.0.0.172:80
  类型: HTTP
  下面不用填
  ☆ 按下图设置☆

  下一步返回打开“右键菜单”-编辑连接-GPRS连接
  GPRS连接互联网
  连接到:Internet
  访问点:CMWAP
  下面不用填
  ☆按下图设置☆

  下一步返回GPRS连接
  wap2.0门户(GPRS)
  连接到:WAP网络
  访问点:CMWAP
  下面不用填
  ☆按下图设置☆

  下一步返回手机的开始-设置

  数据连接
  Internet连接:GPRS连接互联网
  工作连接: 自动
  WAP连接: wap2.0门户(GPRS)
  安全WAP连接: wap2.0门户(GPRS)或(自动)
  WAP PROXY: 自动
  MMS网络: 彩信
  安全WAP PROXY:wap 2.0Port Setting
  ☆ 按下图设置☆

  再打开手机开始-设置-数据连接-“右键菜单”选项-我的桌面机连接到:Internet
  ☆ 按下图设置☆

  在打开IE浏览器-菜单-选项-连接-自动检测设置“去掉划勾”–选择网络:安全WAP网络
  ☆ 按下图设置☆

  注: 以上仅供参考

标签:, , , , , ,
LINUX ZIPMAGIC 动态文件名 - 九月 27, 2005 by yippee

软件开发误区之三-操作系统之争 http://www.yippeesoft.com/blog/p/mydevsoft3.php 我写到:

第一:后台老板,WINDOWS的后台是微软,LINUX的后台增加了IBM等,不论LINUX的初衷如何,现在也是商人在弄,商人的目的是什么,是利润。大家都不会只是守在自己的得势地盘的。只要能够赚钱,不断的会扩充的。IBM当年的名言:全世界有几天IBM的大型计算机就足够了。自从当年决策失误,让微软得势,一直耿耿在怀,所以IBM自己操作系统Ohttp://www.yippeesoft.comVER后,一直对桌面系统有兴趣。它的兴趣目前只是在于推出自己硬件设备,卖自己的系统服务,而我觉得它的目的是先用LINUX打击WINDOWS,然后再逐步扩充自己的系统。而我们吵来吵去,都是给人家当枪使唤。

平时我总是认为:微软最伟大的地方就是创造了程序员这个职业,把它从大学研究室、大机构信息中心等象牙塔中解放出来;我们鼓吹LINUX开源,实际上是 剜得心头肉,补缺眼前疮;而我们争论微软、LINUX正如两个虫子争论是被乌鸦吃掉还是喜鹊吃掉高尚一些好一些~~ www.yippeesoft.com

今天看到这个:[quote]IT时代周刊:生或死 中国Linux必须作出抉择 IT时代周刊》记者/宋保强(发自北京)
此前,中国政府支持Linux的做法的确受到诸多质疑。8月底,有业界人士提交报告呼吁政府重新考虑“优先选择开源软件”的政策。该报告指出:中国政府对开源Linux平台的“过度偏爱”正在伤害民族软件产业,因为其免费和低费用销售导致软件价值普遍被低估,Linux商业模式存在的缺陷正在影响Linux供应商的收益,使其陷于经营亏损的怪圈。据业界猜测,这份报告可能就是2005年8月23日,中国软件行业协会出台的《有关开放源代码软件与商业软件知识产权的研究报告》。

决定世界Linux生死的幕后操盘手

  张先民出身于在幕后大力支持Linux发展的IBM公司。业界认为,IBM对任何Linux公司能否成功发展起着至关重要的作用。

  当微软从IBM手里夺过世界软件业霸主的王座后,很多人以为IBM支持Linux发展是基于长远战略的考虑,一位资深的Linux人士却并不这样认为,他告诉本刊记者:“是在进攻IBM已经不能说,他们支持Linux实质是一种防守行为。”他举例说,IBM的数据库跑在Windows平台上非常慢,原因很简单,微软也在卖自己的数据库。“这只是一个例子,背后的东西更多。”他意味深长地说。

  事实上,甲骨文公司也是最早大力支持Linux的厂商之一,但经过一段时间的摸索后,他们通过并购Peoplesoft等商务软件公司,完成了向软件与咨询业产业链上游转移的目标,伴随中间件等技术的不断完善,其不再拘泥于与微软的操作系统平台之争,而将竞争的注意力转向SAP、IBM的传统大型商务软件市场,因此甲骨文已慢慢淡化了其与微软的直接交锋和对Linux的狂热拥护。

  此外,Sun也同样是初期开源世界和Linux的重要鼓噪者,并提出了“高端Solaris+低端Linux”的双层产品计划,可经过一段时期的市场发展,Sun逐渐认识到Linux的异军突起并没有给微软以打击,反而逐步吞噬了包括Solaris在内的传统UNIX的份额,造成UNIX大幅度下滑的尴尬局面。有鉴于此,他们立即与微软达成和解,并马上掉转枪口指向Linux。但归根结底,Linux幕后真正的较量者依旧是IBM和微软。

  微软本是Linux最大的敌人,以IBM为首的Linux军团也确实在短期内纠集了大量知名IT巨头,发动针对微软的、谋求世界IT霸权的“圣战”。一时间,微软风声鹤唳,从盖茨、鲍尔默到微软操作系统部门都“谈Linux色变”,而微软虽贵为软件皇帝,但要同时对抗如此多的诸侯,也是件不可能完成的任务。可是,在IBM扭亏、甲骨文别恋、Sun投诚的时候,微软意识到Linux并非想象中的可怕,因此也就随即软化了原本对Linux恶毒诅咒的强硬态度,发出可与开源世界和解、共存的和平信号。

  而像英特尔、惠普、戴尔和NEC等,原本就是微软的忠实伙伴,要么是一同统治世界的坚定战友,要么是跟随微软发家致富的利益同盟,他们表态支持Linux无非是希望以此限制微软不断膨胀的市场野心,并在与微软的合作中谋求更多利益。

  如此一来,原本泰坦林立的众神之战,已经蜕变为IBM支持的红帽、Novell,与微软支持的Sun之间的“代理人”之战,而战争局势也由微软一力对抗整个IT世界转变为微软盟军围剿IBM与Linux。

  IBM在支持Linux的时候没有和微软直面交锋,而是躲在幕后积极扶持红帽公司。IBM最初的Linux战略是单一支持红帽,但红帽做大后并不甘心扮演“蓝色巨人”的跟班。在IBM洞悉此事后,开始转而支持Novell收购SuSE,并力促Novell成为世界第2大Linux厂商,还同时支持拓林思抢占中国高端市场,从而形成商业Linux的三驾马车,分别割据北美(红帽)、欧洲(SuSE)和亚太(拓林思)。不过,由于在全球范围内与微软竞争需要消耗IBM大量资源,IBM放弃了3家中最弱小的拓林思,改为着重扶持红帽和Novell,并通过大力推动“开源开放实验室”(以下简称OSDL)实现间接影响全球Linux趋势。这也就是目前Linux业界的现状——红帽和Novell掌握了世界开源系统市场话语权。
[/quote]

阿甘,你真他妈的是个天才! www.yippeesoft.com

QQ2005 Beta3软件安全性的声明
3、 为了给用户最好的体验,提高运行速度和减少响应时间,“QQ地址栏搜索”插件采用了Windows标准的接口,随着操作系统启动自动运行。同时,该插件还采用了“动态文件名”技术,以防止一些恶意插件和程序的强行修改和删除。该插件在运行中与服务器的通讯仅为自身升级所用,绝对不会收集和发送任何有关用户隐私的信息,不会侵害用户的任何利益,不会修改用户的任何安全设置。

我不懂什么东西,不过作为一个八年经验的开发人员,第一次听过:“动态文件名”技术 长见识 www.yippeesoft.com

今天看到一个 RARFS软件 可以让资源管理器把RAR文件当作文件夹处理…
不禁让我想起以前的zipmagic ZipMagic将压缩文件包当成Windows中文件夹来看待,每一个压缩文件都是一个文件夹。注意,当安装了ZipMagic后,Windows系统都将ZIP压缩文件包认为是一个文件夹,并具有文件夹的属性。但在某些时候,例如选择文件时,就不会把ZIP文件当成一个独立的数据文件,这时候,就要使ZipMagic休眠,ZIP文件才会成为一个独立的数据文件。

不过现在已经没有什么声音了,我觉得太占用资源了,而RAR相比ZIP,解压压缩速度更加慢,不知道这个软件如何? www.yippeesoft.com

说到ZIPMAGIC,不禁想起以前做的ISDN配置程序,就是仿照它的配置对话框,左边是一个LISTVIEW小ICON列表,右边是对话框,通过ICON切换。当时我硬是在右边放了一百多个控件然后逐个进行显示控制 ,真是土啊~~ www.yippeesoft.com

标签:, , , , ,
iwas2-动态变量名 PHP代码优化 变量的变量 - 八月 22, 2005 by yippee

3.2.5 动态变量名
PHP允许用户动态的创建变量名。当程序运行时,使用特殊的符号可以创建新的变量名:

// store the name of the dynamic variable.
$scl_dynamic = \’\’str_name\’\';

// assign a value to the dynamic variable.
$$scl_dynamic = \’\'John\’\';  www.yippeesoft.com

echo "\\$str_name = $str_name\\n";

此程序将显示  www.yippeesoft.com

$str_name =John  www.yippeesoft.com

尽管动态变量名存在一些吸引使用的方面,但是我在二十年的编程经历中,从没有发现有使用它们的需要。数组的灵活性应该足以解决大多数有可能需要使用动态变量名的问题。  www.yippeesoft.com 我立即就发现使用它的必要了~

什么叫作变量的变量?根据PHP手册,变量的变量是指取得一个变量的值并把它作为另一个变量的变量名。这表述显得相当的直接,容易和那些在一个句子中使用“变量”这个词弄混淆。给一个简单的例子,你定义一个变量 — x 等于 this — 然后定义一个变量的变量,意味着你把 x 的值作为新变量的名, www.yippeesoft.com

这是原来的代码:

$username_=$db->GetParam("username");
        $password_=$db->GetParam("password");
        $sitename_=$db->GetParam("sitename"); www.yippeesoft.com
        $siteaddr_=$db->GetParam("siteaddr");
        $siteart_=$db->GetParam("siteart");
        $hotnum_=$db->GetParam("hotnum");
        $intronum_=$db->GetParam("intronum");  www.yippeesoft.com

var $params=array("username"," www.yippeesoft.com password","sitename","siteaddr","siteart",           
    "hotnum","intronum","newnum","pnum","sortnum","height","width", "style",);

function Show()
 &leftsign;  www.yippeesoft.com
  global $db; www.yippeesoft.com
  foreach ($this-> www.yippeesoft.com params as $varr)
  &leftsign;
   $varrr=$varr.\’_\’;
   $$varrr =$db->GetParam($varr);
  &rightsign; www.yippeesoft.com

省了多少事情~~~~~

标签:, , ,