Google
 

The Posts in ‘Tech articles’

2008-01
14

Flash Filesystems for Embedded Linux Systems

Filed under: Tech articles — woojar @ 2:33 pm
[tag]embedded, linux, filesystem[/tag]
本文转载自: http://linuxdevices.com/articles/AT7478621147.html

Flash isn’t only a hard disk with no moving parts. This article shows you how to combine filesystem technologies to make the best use of Flash.

With the falling cost of 32-bit processors containing a memory management unit (MMU), Flash memory and SDRAM, a new class of embedded devices is evolving in the networking, internet appliance and PDA markets. Typically consisting of a 32-bit processor with an MMU, 4-32MB of Flash memory and 8-32MB of SDRAM, these devices now have the storage capacity needed to take advantage of the many advanced features applications require. The popular Compaq iPaq handheld computer is a good example of such a system.

When implementing a Linux operating system on these devices, the critical issue of how to create a filesystem without a hard drive arises. A number of different types of Flash memory are designed specifically for data storage, such as NAND Flash devices and disk-on-chip devices. However, this article will focus on NOR Flash-based solutions for the iPaq system mentioned above.

Since NOR Flash is usually required for code storage, implementing a filesystem in existing NOR Flash devices is often the most cost-effective solution and conserves PCB board real estate. Several technologies are available for efficiently implementing filesystems on NOR Flash. Before examining these technologies, however, let us examine the critical issues driving the design of NOR Flash filesystems.

The first of these issues is that conventional filesystems, such as the default Linux standard ext2, cannot be efficiently used on Flash because the block size of a Flash device is relatively large (64K to 256K), compared to the 4k block size typically used for ext2 filesystems. Additionally, NOR Flash has a limited number of erase cycles per block, typically in the range of 100,000. Secondly, the cost of NOR Flash is prohibitive, about three times as expensive as SDRAM. For this reason a filesystem with compression is highly desirable. Finally, journaling is an issue with a Flash filesystem, if file writes are to be supported, because it eliminates the need to go through a lengthy power-down procedure.

Another frequently discussed topic related to Flash filesystems is execute in place (XIP), which is often used in embedded operating systems. XIP is a mode of operation where the processor maps pages from the application in Flash directly to its virtual address space, without coping the pages to RAM first. This process can reduce the amount of RAM required in a system. The problem with XIP is that compression cannot be used, and it is very difficult to make a filesystem that is writable. The fact that the processor will only load the working set of pages into RAM for an application also reduces the need for XIP.

There are a number of Linux technologies that work together to implement a filesystem in a Flash-based embedded Linux system. Figure 1 illustrates the relationships between some of the standard components.

figure

Figure 1. Components of a Filesystem in a Flash-Based System

initrd


In the early days of embedded Linux, the initrd (initial ram disk) mechanism was often used to store a compressed filesystem in Flash. The initrd mechanism was originally developed so a small Linux system could be booted from a floppy disk that, in turn, would install a full-featured Linux system to a hard disk. The boot sequence of a system using an initrd is:
  1. Bootloader copies compressed Linux kernel and initrd image from Flash to RAM and jumps to kernel.
  2. The kernel decompresses itself to the correct location and starts the initialization sequence.
  3. The kernel decompresses the initrd image in RAM and mounts it using the ramdisk driver.

Compared with current technologies, there are several disadvantages with the initrd approach. First, the size of the initrd is fixed. It wastes system RAM when it is not full, and the size cannot be increased when additional storage is required. Second, changes made are lost on the next reboot.

Even with its limitations, the initrd mechanism is useful for booting a system before a true Flash filesystem is working. More information on the initrd mechanism can be found in the Documentation/initrd.txt file in the Linux kernel source.

cramfs


cramfs is a compressed read-only filesytem originally developed by Linus Torvalds and included in recent Linux kernels. In the cramfs filesystem, each page is individually compressed, allowing random page access.

A cramfs image is usually placed in system Flash but can also be placed on another filesystem and mounted using the loopback device. cramfs is useful in its efficiency, and it often is desirable to have system files in a read-only partition to prevent file corruption and improve system reliability.

A cramfs image is created using the mkcramfs utility, which creates an image from the contents of a specified directory. mkcramfs can be found in the scripts/cramfs directory of the Linux source tree.

ramfs


ramfs is a filesystem that keeps all files in RAM and is often used with a Flash filesystem to store temporary data or data that changes often. The major advantage of ramfs is it grows and shrinks to accommodate the files it contains, unlike a ramdisk, which is fixed in size. The ramfs filesystem was originally written by Linus Torvalds and is included in recent kernels.

jffs2


jffs2 is a read/write, compressed, journaling Flash filesystem that is designed to be used on Flash memory devices rather than RAM devices. The jffs2 filesystem is currently in development but is extremely useful; it should be stable by publication of this article.

The jffs filesystem was originally developed for the 2.0 kernel by Axix Communications in Sweden. David Woodhouse and others improved jffs and developed jffs2, which supports compression. jffs2 addresses most of the issues of Flash filesystems, in that it provides compression, read/write access, automatic leveling and a hard power-down safe filesystem.

The journaling aspect of jffs2 is quite dynamic and works very well on Flash. The jffs2 filesystem is simply a list of nodes or log entries that contain information about a file. Each node may contain data to be inserted into a file or instructions to be deleted from a file. When a jffs2 filesystem is mounted, the entire log is scanned to determine how a file is to be created. Nodes are written to Flash sequentially starting at the first block. If additional writes are needed, blocks are consecutively written to until the end of Flash is reached, then starts at the beginning again. jffs2 includes a garbage collection thread that combines and copies valid nodes in one block to another block, then erases partially used blocks. Valid data is never erased until it has been copied to another block, which keeps existing data from ever being lost or corrupted. The process of sequentially erasing and writing Flash blocks provides wear-leveling, as it distributes the Flash writes over the entire Flash device.

The jffs2 filesystem is new and in the process of being integrated into the kernel sources. The most recent copy can be obtained via anonymous CVS at www.linux-mtd.infradead.org.

MTD Driver


The memory technology device (MTD) subsystem for Linux is a generic interface to memory devices such as Flash and RAM, providing simple read, write and erase access to physical memory devices. mtdblock devices can be mounted by jffs, jffs2 and cramfs filesystems. The MTD driver provides extensive support for NOR Flash devices that support common flash interfaces (CFIs), such as Intel, Sharp, AMD and Fujitsu. The width of the Flash bus and number of chips required to implement the bus width can be configured or automatically detected. The MTD driver layer also supports multiple Flash partitions on one set of Flash devices.

System Design Issues


Often, the best solution when designing a system is to divide different parts of the root filesystem into different filesystem partitions. The following is one possible implementation scheme:

  • Put anything that does not need to be updated at runtime in a cramfs filesystem. cramfs typically achieves over a 2:1 compression ratio and is very efficient.
  • Directories that are written to often, such as /var, should be placed in a ramfs filesystem to minimize write cycles to Flash. Note that the contents of the ramfs partition are not preserved between system power cycles or operating system reboots.
  • Any part of the filesystem that requires read/write access and must preserve information between reboots is placed in a jffs2 filesystem.

A 16MB Flash system might be partitioned like the one in Table 1.

PARTITION NAME  DESCRIPTION  FILESYSTEM TYPE  SIZE
-----------------------------------------------------------------------------------------
MTD0   Bootloader  None   256K
-----------------------------------------------------------------------------------------
MTD1   Linux kernel  None   1M
-----------------------------------------------------------------------------------------
MTD2   Root filesystem  cramfs   8M
-----------------------------------------------------------------------------------------
MTD3   /usr/local and  jffs2   6.75M
   home directories
-----------------------------------------------------------------------------------------
Table 1. Sample Partition of a 16MB Flash System


One disadvantage of this configuration is unused space in the MTD1 and MTD2 partitions is wasted. Implementing a system with only jffs2 and ramfs is also efficient if there is no concern about overwriting system files. The normal Linux file access permissions apply to files in a jffs or jffs2 filesystem, so read-only attributes can be assigned to selected files and directories to enhance system integrity.

Table 2 shows the typical Flash space required for implementing a full-featured Linux root filesystem that includes networking support and many system utilities. The jffs implementation is given for reference to illustrate the space required if compression is not used.

FILESYSTEM TYPE   SPACE REQUIRED
------------------------------------------------------------------
jffs    5.93MB
------------------------------------------------------------------
jffs2    3.09MB
------------------------------------------------------------------
cramfs    2.85MB
------------------------------------------------------------------

Table 2. Flash Space for a Full-Featured Root Filesystem


With the recent open-source developments of Flash filesystem technology, Accelent Systems has been able to implement embedded Linux systems that have a very robust read/write filesystem on standard NOR Flash. By using the jffs2 filesystem, the Accelent system software solution allows units to be powered off at any time, yet allows the user to write data to the filesystem that is preserved between reboots.

另外, 可参考下述文章:

1, http://www-128.ibm.com/developerworks/cn/linux/embed/embdev/

2,
http://www-128.ibm.com/developerworks/cn/linux/l-jffs2/

3,
http://www-128.ibm.com/developerworks/cn/linux/l-initrd.html

4,
http://www.cyberguard.info/snapgear/tb20020917.html


Technorati : , ,

2008-01
12

Div + CSS:absolute与relative的运用

Filed under: Tech articles — woojar @ 11:03 pm

[tag]css, div, position[/tag]

Div + CSS 进行网页布局,适当地运用 absolute 与 relative,能给布局带来意想不到的效果和方便,达到事半功倍…本文介绍了关于 absolute 与 relative 的运用。

  详细讲解两者的关系,需要配合例子,请先看例子

<div style=”position:absolute; top:5px; right:20px; width:200px; height:180px; background:#00FF00;”>
 position: absolute;<br />
 top: 5px;<br />
 right: 20px;<br />
 <div style=”position:absolute; left:20px; bottom:10px; width:100px; height:100px; background:#00FFFF;”>
position: absolute;<br />
left: 20px;<br />
bottom: 10px;<br />
</div>
</div>
<div style=”position:absolute; top:5px; left:5px; width:100px; height:100px; background:#00FF00;”>
 position: absolute;<br />
 top: 5px;<br />
 left: 5px;<br />
</div>
<div style=”position:relative; left:150px; width:300px; height:50px; background:#FF9933;”>
 position: relative;<br />
 left: 150px;<br />
 <br />
 width: 300px; height: 50px; <br />
</div>
<div style=”text-align:center; background:#ccc;”>
  <div style=”margin:0 auto; width:600px; background:#FF66CC; text-align:left;”>
  <p>1</p>
  <p>2</p>
  <p>3</p>
  <p>4</p>
  <p>5</p>
  <div style=”padding:20px 0 0 20px; background:#FFFF00;”>
    padding: 20px 0 0 20px;
  <div style=”position:absolute; width:100px; height:100px; background:#FF0000;”>position: <span style=”color:#fff; “>absolute</span>;</div>
  <div style=”position:relative; left:200px; width:500px; height:300px; background:#FF9933;”>
    position: <span style=”color:blue;”>relative</span>;<br />
   left: 200px;<br />
   <br />
   width: 300px;<br />
   height: 300px;<br />
   <div style=”position:absolute; top:20px; right:20px; width:100px; height:100px; background:#00FFFF;”>
    position: absolute;<br />
    top: 20px;<br />
    right: 20px;<br /></div>
   <div style=”position:absolute; bottom:20px; left:20px; width:100px; height:100px; background:#00FFFF;”>
    position: absolute;<br />
  bottom: 20px;<br />
  left: 20px;<br />
  </div>
  </div>
  </div>
 </div>
</div>
点击代码测试

absolute:绝对定位,CSS 写法” position: absolute; “,它的定位分两种情况,如下:

  1. 没有设定 Top、Right、Bottom、Left 的情况,默认依据父级的”内容区域原始点”为原始点,上面例子红色部分(父级黄色区域有 Padding 属性,”坐标原始点”和”内容区域原始点”不一样)。

  2. 有设定 Top、Right、Bottom、Left 的情况,这里又分了两种情况如下:

  (1). 父级没 position 属性,浏览器左上角(即 Body)为”坐标原始点”进行定位,位置由 Top、Right、Bottom、Left 属性决定,上面例子绿色部分。

  (2). 父级有 position 属性,父级的”坐标原始点”为原始点,上面例子浅蓝色部分。

  relative:相对定位,CSS 写法” position: relative; “,参照父级的”内容区域原始点”为原始点,无父级则以 Body 的”内容区域原始点”为原始点,位置由 Top、Right、Bottom、Left 属性决定,且有”撑开或占据高度”的作用,上面例子橙色部分。

  通过上面的例子和讲解,相信熟练运用 absolute 与 relative 并不是一件很困难的事,我们周围有不少关于 absolute 与 relative 的好例子,比如”网易163免费邮”首页(http://mail.163.com),里面就有大量的运用。


Technorati : , ,

2008-01
8

VOIP开源列表

Filed under: Tech articles — woojar @ 2:53 pm

[tag]voip, open source[/tag]

通用型

SIP Proxies 代理

  • sipd SIP Proxy
  • SIP Express Router (SER): the SIP router/proxy/jack-in-all-trades from IPtel.org
  • partysip
  • SaRP SIP and RTP Proxy in Perl
  • Siproxd SIP and RTP Proxy
  • sipX The SIP PBX for Linux: Complete, native SIP PBX solution from SIPfoundry
  • Vocal SIP softswitch with H.323 and MGCP translators for non-SIP endpoints
  • Yxa: Written in the Erlang programming language
  • JAIN-SIP Proxy
  • Mini-SIP-Proxy A very tiny perl POE based SIP proxy
  • OpenSER: GPL SIP Server with TLS support
  • MjServer: cross-platform SIP proxy/registrar/redirect, written in java, based on MjSip stack
  • OpenSBC: MPL licensed SIP proxy/registrar/B2BUA with NAT traversal and ENUM

SIP Clients (UA’s) 客户端

Linux clients:

  • Cockatoo
  • Ekiga: SIP, H.323 audio and video softphone for various unices
  • Kphone
  • Linphone
  • minisip cross-platform SIP softphone, Linux, Windows XP and soon Windows Mobile 2003 SE
  • MjUA: simple cross-platform SIP softphone, written in java, based on MjSip stack
  • PhoneGaim
  • PJSUA: Command line SIP UA with SIMPLE, IM, call transfer, RTCP/RTCP, etc.
  • SFLphone, open-source multiplatform multi-protocol VoIP client
  • OpenWengo: a fully SIP compliant multiplatform softphone with many features
  • OpenZoep: GPL telephone and IM messaging client engine
  • Shtoom: SIP softphone in Python, runs on Windows, Mac, Linux
  • sipXphone from SIPfoundry, previously known as the Pingtel phone
  • sipXezPhone (”sipX easy phone”) from SIPfoundry based on sipXtapi
  • Twinkle
  • YATE: YateClient is multiprotocol and multiplatform phone with H.323, SIP and IAX support.
  • YeaPhone: A SIP softphone for the Yealink USB-P1K handset based on the libLinphone backend
  • FreeSWITCH
  • http://www.opensipstack.org MPL licensed SIP stack with ENUM, Presence (XMPP/SIMPLE) and NAT traversal. Reference implementation of Session Border Controller (OpenSBC) available.

MacOS X clients:

  • PJSUA: Command line SIP UA with SIMPLE, IM, call transfer, RTCP/RTCP, etc.
  • FreeSWITCH: Console client for SIP, IAX2, Woomera and Jingle/Google Talk

Windows clients:

  • FreeSWITCH: Console client for SIP, IAX2, Woomera and Jingle/Google Talk
  • minisip cross-platform SIP softphone, Linux, Windows XP and soon Windows Mobile 2003 SE
  • MjUA: simple cross-platform SIP softphone, written in java, based on MjSip stack
  • OpenWengo: a fully SIP compliant multiplatform softphone with many features
  • OpenZoep: GPL telephone and IM messaging client engine
  • PhoneGaim
  • PJSUA: Command line SIP UA with SIMPLE, IM, call transfer, RTCP/RTCP, etc.
  • SIP COMMUNICATOR Java based softphone
  • Shtoom: SIP softphone in Python, runs on Windows, Mac, Linux
  • sipXphone from SIPfoundry, previously known as the Pingtel phone
  • http://www.opensipstack.org MPL licensed SIP stack with ENUM, Presence (XMPP/SIMPLE) and NAT traversal. Reference implementation of Session Border Controller (OpenSBC) available.
  • sipXezPhone (”sipX easy phone”) from SIPfoundry based on sipXtapi
  • YATE: YateClient is multiprotocol and multiplatform phone with H.323, SIP and IAX support.

SIP tools 工具

SIP Protocol Stacks and Libraries 协议栈和库

  • YASS - Statefull SIP stack used in Yate written in C++ usable for client, server or proxy in a multithread or single thread model. It’s working on both Windows and Linux, it’s very small but full featured.
  • MjSip - complete and powerful java-based SIP library for both J2SE and J2ME platforms.
  • oSIP Library SIP Library
  • eXosip - eXtended osip library
  • Vovida SIP Vovida SIP stack
  • reSIProcate SIP stack and sample Application from SIPfoundry
  • NIST SIP Various SIP appications and tools in Java
  • PJSIP: Small footprint, high performance, and ultra-portable SIP stack in C.
  • Twisted Python protocol stacks and applications includes SIP support
  • OSP client protocol stack and SIPfoundry
  • libdissipate SIP stack
  • sipXtackLib an RFC 3261, 3263 complient SIP stack from SIPfoundry
  • minisip includes a SIP stack
  • http://sofia-sip.sourceforge.net Sofia-Sip is SIP stack implementation with STUN and presense support
  • http://www.opensipstack.org MPL licensed SIP stack with ENUM, Presence (XMPP/SIMPLE) and NAT traversal. Reference implementation of Session Border Controller (OpenSBC) available.

H.323 Clients

Linux clients:

MacOS X clients:

Windows clients:

Not OpenSource - Pending Removal Neos

H.323 Gatekeeper

IAX clients

  • IAXComm for Linux, MacOS X and Windows
  • Kiax - for Linux (QT3) and Windows (QT4), based on iaxclient, GPL
  • QtIax from http://www.holgerschurig.de/qtiax.html
  • SFLphone, open-source multiplatform multi-protocol VoIP client (IAX support is planned)
  • MozIAX
  • YakaPhoneSimple, Free, Open Source, Skinnable IAX/IAX2 Softphone from YakaSoftware
  • YATE: YateClient is multiprotocol and multiplatform phone with H.323, SIP and IAX support.
  • FreeSWITCH

RTP Proxies

RTP Protocol Stacks

  • JRTPLIB cUCL Common Multimedia Library inlcudes cross platform RTP stack library for skype add-on platform independent software development. It is platform independent, easy to use, and easy to extend because of the flexible library design, inspired by modern C++ design ideas. Performance is one of the goals.
  • oRTP Written in C, based on glib for unix and windows portability
  • ccRTP C++ library based on GNU Common C++
  • LIVE.COM Streaming Media includes C++ RTP stack
  • Vovida RTP Stack
  • RTPlib C library
  • libRTP part of gnome-o-phone
  • sipXmediaLib RTP + audio bridges, audio splitters, echo supression, tone from generation (e.g. DTMF), streaming support, RTCP, G711 codecs, etc. from SIPfoundry
  • Secure RTP - see;”> SRTP
  • YRTP - Yate RTP stack, that can be used in other projects.
  • FreeSWITCH
  • PJMEDIA: Small footprint media stack with a tiny RTP/RTCP stack suitable for DSP or embedded deployment

Other tools

  • Vovida.org STUN server: A STUN server
  • Vomit converts a Cisco IP phone conversation (recorded with TCPdump) into a standard WAV file
  • Oreka capture and retrieval of SIP, Cisco Skinny (SCCP) and raw RTP sessions with audio compression, rdbms metadata storage and web based user interface.
  • MORCC - automated online Calling Card store. Paypal integrated.

PBX platforms

Some of these include SIP proxy functionality

IVR platforms

  • Asterisk: Open Source PBX with built-in IVR server
  • Bayonne: GNU project IVR server
  • CT Server Perl based Open Source client/server library supporting Voicetronix Telephony hardware.
  • OpenVXI: Implementation of VoiceXML
  • sipX PBX The SIP PBX for Linux (open source) with built-in IVR (voice mail & auto-attendant)
2007-12
30

PHP-CMS的发展方向:简单,易用,美观(转)

Filed under: Tech articles — woojar @ 2:06 pm

看点1,服务器一键安装,鼠标点点就搞定:输入数据库参数,在服务器上点一个按钮就完成全部的安装。简单配置一下网站的属性,设置一下广告, ctrl+c 和 ctrl+v 复制粘贴几篇文章,一个网站就出来了。
看点2,本地安装,直接发布到服务器:在你自己的机器上安装好此CMS,本机调试,生成HTML,此系统自带FTP发布功能(当然还有同步之类的功能),将生成的HTML文件同步到虚拟主机空间上。OK,这就结束了。

国内目前流行的免费的php+cms比较

备注:免费CMS的PHP程序下载都可以在他们的官方网站上下载。(有一些不是开源的,但有免费版)
如果您对cms的概量还不很理解,请看这里: 什么是CMS

1.曼波-MAMBO,一个国外的CMS系统,功能很强大,支持添加很多组件,模块;拥有丰富的模板
官方:http://www.mamboserver.com/

2.凌波-Limbo(Lite Mambo),顾名思义,是从Mambo演化而来。其目的是在继承Mambo一些强大的功能和特性的同时,对原Mambo系统进行简化,使之变得更加轻便小巧。同时,Limbo支持三种安装方式:TXT、Mysql、SQLite。
官方:http://www.limbo-cms.com/

3.HBcms :一个以PHP官方推荐的PEAR+SMARTY技术架构的cms,2006年才推出,完全符合cms的发展趋势,简单,易用,美观。我本地测试了一下,很容易上手,特别适合没经验的新人做网站。起码不会被复杂的功能吓倒。当然,它同样有各种复杂的功能,只是看你是否需要用到了。使用PHP官方推荐的PEAR+SMARTY技术,是这个cms能持续发展的一个重要的特点,很多功能都直接使用PEAR的类库完成。安装一步到位,默认附带了一些模板,值得推荐。值得注意的是,官方网站宣称以后要开源,如果真这样,熟悉pear的PHP程序员就容易上手了。
中文版官方:http://www.hbcms.com/

4.SupSite-一款将论坛资源自动转换成门户网站的php程序系统,使用SupeSite,并利用你现有的论坛,你将自动拥有一个功能完备的,资源丰富的站点系统;由论坛变成网站,一切都是自动完成,你不需要任何干涉。让你轻轻松松实现建立网站的目的。
官方:http://www.supsite.net/

5.phpcms-一个综合的网站管理系统,由PHP+MYSQL构架全站生成html,能够快速高效地应用于LINUX和WINDOWS服务器平台,是目前中国LINUX环境下最佳的网站管理应用解决方案之一
官方:http://www.phpcms.cn/

6.风讯网站内容管理系统(FoosunCMS)-是风讯公司积多年经验、通过设计师们精心设计的符合国际要求的网站信息管理系统。
官方:http://www.foosun.cn/

7.DEDE -这是一款开源的cms。功能也比较完善,但数据量一大就很慢了。因为开源,有较多的玩家和拥护者。
官方:http://www.dedecms.com/

8.php168 -PHP168整站系统,代码全部开源,可方便的进行二次开发,功能模块可以自由安装与删除,个人用户免费使用。
官方:http://www.php168.com/

9.帝国网站管理系统-Ecms全称为"帝国网站管理系统",英文译为"Empire CMS"简称"Ecms".Ecms是基于B/S结构,且功能强大而易用的网站管理系统.
官方:http://www.phome.net/

10. 随易全站系统(Cmsez)-Cmsez集成了丰富的功能模块,包括用户管理、新闻发布、信息发布、产品展示、图片管理、附件管理、在线商店、资料下载、多媒体浏览/播放等。
官方:http://www.cmsez.com/

说到免费的PHP CMS系统,再看看目前国外的CMS状况

国外的cms比较发现:通过Alexa统计的几个主要的CMS(Content Management System)工具的最近三个月网站日浏览的统计,这份统计包括Drupal, Joomla, Mambo, Xoops 和 Typo3,很明显可以看出曾经的CMS老大Xoops已经式微,Mambo在变故之后半死不活,Typo3一直都名声平平(不知道Typo3与Typo是什么关系,Typo是基于Ruby on Rails(ROR)的blog系统,有着非常kool的ajax应用,正准备搭一个Typo看看)而相比较而言,Joomla与Drupal却变得越来越 popular,四月中的那次飞跃估计与Drupal的最终推出关系比较大。当然这只是对于各个CMS的流行程度的一个估测值,会有这样那样的bias,譬如可能因为是Drupal的安装使用过于复杂所以用户才不断的到Drupal.org上去问问题,导致Drupal的网站页面访问上升,而Xoops因为发展历史很长,并且使用简单,所以用户在下载安装之后不用经常的去Xoops的网站寻求帮助(呵呵,GRE逻辑题)。但是不管怎样这份Alexa的Pageviews的统计还是能给我们指一指CMS 的流行风向。点这里查看CMS整站系统介绍

如何选择 最优秀的CMS,最好的CMS

现在每个CMS功能介绍上都会说自己的产品如何强大,比如说什么模板体系如何好,缓存技术如何高明,刷新效率,负载容量如何强,操作如何如何简单,容易上手,跟第三方无缝结合,还有功能模块的如何丰富,生成静态发布,信息采集…… 吹牛谁都会,大家都会写,关键是客户如何认为,不用功能很多。另外,CMS系统SEO搜索优化也是比较重要的因素,适用得当,可以给你带来很多搜索引擎的流量。
一句话,适合自己的就是最好的。

2007-12
4

Python surpasses Perl for the first time in history(from TIOBE)

Filed under: Tech articles — woojar @ 9:38 am

[tag]programming language, Python[/tag]

TIOBE Programming Community Index for December 2007

December Headline: Python surpasses Perl for the first time in history

The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the world-wide availability of skilled engineers, courses and third party vendors. The popular search engines Google, MSN, Yahoo!, and YouTube are used to calculate the ratings. Observe that the TIOBE index is not about the best programming language or the language in which most lines of code have been written.

The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TIOBE index can be found here.







Position
Dec 2007
Position
Dec 2006
Delta in Position Programming Language Ratings
Dec 2007
Delta
Dec 2006
Status
1 1 Java 20.049% +0.14% A
2 2 C 13.173% -3.44% A
3 4 (Visual) Basic 10.219% +1.31% A
4 5 PHP 8.393% -0.14% A
5 3 C++ 7.871% -2.54% A
6 7 Python 4.697% +0.93% A
7 6 Perl 4.383% -2.01% A
8 8 C# 3.994% +0.82% A
9 11 Ruby 3.089% +0.76% A
10 10 JavaScript 2.733% +0.17% A
11 9 Delphi 2.673% +0.10% A
12 14 D 1.633% +0.66% A
13 13 PL/SQL 1.394% +0.05% A
14 12 SAS 1.393% -0.84% A
15 18 COBOL 0.894% +0.29% A-
16 15 ABAP 0.875% -0.03% A-
17 17 Lisp/Scheme 0.841% +0.20% A-
18 20 Transact-SQL 0.817% +0.35% A–
19 19 Pascal 0.791% +0.23% A–
20 46 Lua 0.771% +0.67% A-


Original URL: http://www.tiobe.com/tpci.htm


Technorati : ,

 Page 5 of 26  « First  ... « 3  4  5  6  7 » ...  Last » 
27 queries. 0.527 seconds. Powered by WordPress