Archive

Archive for September, 2011

September 27, 2011 Leave a comment

20 JavaScript Frameworks Worth Checking Out

The number of web applications being created and used has grown rapidly since the new millenium. And importantly, so has the sheer complexity of them — specially on the front end. No more static pages, no sir!

You have a ton of sections each interacting with each other and the server and yes, it’s as complicated as it sounds and just as hard to pull off. Today, I’d like to talk about a few, choice JavaScript frameworks that aim to simplify front end application development.


Why We Need Frameworks Like These

If you think jQuery is the answer, you lose a cookie and get an F grade!

Creating responsive, fluid, and maintainable interfaces for web apps isn’t as easy as one would imagine — there is data to be sent back to the server and the results parsed, data stores to be updated, views to be re-rendered and so much else that needs to be done in the background. Desktop developers have it much easier with robust tools and well defined workflows. Us, poor web devs? We’ve been twiddling DOM elements, creating models by hand and pulling our hair out trying to keep everything synched.

The monstrous rise in the number of web apps being built recently has really made it apparent that we need better tools and frameworks and the devs have responded with a staggering amount of solutions. Today, we’re going to go over just a few of these. A couple of these are quite old but I’m certain you can learn a lot from perusing their code base.

Sure, a few of these may be a little old but their code bases have lots of lessons to teach.


Sproutcore

Nettuts+ -- JavaScript Frameworks

Sproutcore powers a lot of high profile apps including MobileMe amongst others. Sproutcore has a steeper learning curve compared to the other options but makes up for it with developer productivity once he/she has learned the ropes.

This framework boasts a UI framework, the market standard MVC architecture and well written documentation.

Related links:


Cappuccino

Nettuts+ -- JavaScript Frameworks

Cappuccino was created by the 280North team, now owned by Motorola. This framework gained significant coverage with the release of the 280Slides — built completely with Cappuccino.

This framework varies dramatically from the others in that a developers doesn’t need to understand or work with any of the front end trifecta — HTML, CSS or the DOM. All you need to master is the framework!

Related links:


JavaScriptMVC

Nettuts+ -- JavaScript Frameworks

Built on jQuery, JavaScriptMVC is a veteran in the front end frameworks battlefield, dating back to 2008. Featuring a familiar, and obvious, MVC architecture, this framework is quite full featured with support for code generators, testing and dependency management.

Related links:


Asana Luna

Nettuts+ -- JavaScript Frameworks

Luna is one of those hush-hush private frameworks that people have been talking about. And for good reason, I must admit.

The framework features a lot of niceties including an evolved MVC architecture, pubsub, caching, routing and authentication.

Related links:


Backbone.js

Nettuts+ -- JavaScript Frameworks

Backbone supplies structure to JavaScript-heavy applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing application over a RESTful JSON interface.

Related links:


qooxdoo

Nettuts+ -- JavaScript Frameworks

qooxdoo is a universal JavaScript framework that enables you to create applications for a wide range of platforms. With its object-oriented programming model you build rich, interactive applications (RIAs), native-like apps for mobile devices, light-weight traditional web applications or even applications to run outside the browser.

Related links:


Spine

Nettuts+ -- JavaScript Frameworks

Spine is a lightweight framework for building JavaScript web applications. Spine gives you a MVC structure and then gets out of your way, allowing you to concentrate on the fun stuff, building awesome web applications.

Related links:


ActiveJS

Nettuts+ -- JavaScript Frameworks

ActiveJS is a JavaScript application framework that provides local and REST based data modeling and pure DOM view construction with back button and history support along with framework agnosticm and lack of external dependencies.

Related links:


Eyeballs

Nettuts+ -- JavaScript Frameworks

eyeballs.js is a slim javascript library designed to sit on top of a javascript framework, such as jQuery or Prototype. eyeballs.js can sit on top of an already implemented web app with a well thought out object model. It can also be used to build standalone javascript apps, backed by HTML5 local storage or something like CouchDB.

Related links:


Sammy

Nettuts+ -- JavaScript Frameworks

Sammy.js is a tiny JavaScript framework developed to ease the pain and provide a basic structure for developing JavaScript applications.

Sammy tries to achieve this by providing a small ‘core’ framework and an ever-growing list of plugins for specific functionality.

Related links:


Choco

Nettuts+ -- JavaScript Frameworks

Choco brings the MVC to the client side! A Choco app consists of only one HTML page, all the interactions are managed by Javascript. Your UI only uses HTML and CSS!

Related links:


Agility

Nettuts+ -- JavaScript Frameworks

Agility.js is an MVC library for Javascript that lets you write maintainable and reusable browser code without the verbose or infrastructural overhead found in other MVC libraries. The goal is to enable developers to write web apps at least as quickly as with jQuery, while simplifying long-term maintainability through MVC objects.

Related links:


Angular

Nettuts+ -- JavaScript Frameworks

Angular supports the entire development process, provides structure for your web apps, and works with the best JS libraries. With angular, the view and data model are always in sync — there is no need for manual DOM manipulation.

Angular is small, weighing in at 60kb, is compatible with all modern browsers and works great with jQuery.

Related links:


ExtJS

Nettuts+ -- JavaScript Frameworks

Ext JS 4 brings a whole new way to build client applications, by introducing the popular model-view-controller pattern to Ext JS. By allowing the separation of data management, logic and interface elements, Ext JS 4 makes it easier for even large development teams to work independently without worrying about stepping on each other’s toes. Ext JS 4 ships with a helpful MVC guide to get started.

Related links:


Knockout

Nettuts+ -- JavaScript Frameworks

Knockout is a JavaScript library that helps you to create rich, responsive display and editor user interfaces with a clean underlying data model. Any time you have sections of UI that update dynamically (e.g., changing depending on the user’s actions or when an external data source changes), KO can help you implement it more simply and maintainably.

Related links:


Jamal

Nettuts+ -- JavaScript Frameworks

Jamal is a set of conventions and small javascript libraries to archieve a complete separation of html, css and javascript in your web application. Jamal is built on jQuery and inspired by MVC frameworks like Ruby on Rails, CakePHP and its derivatives.

Related links:


PureMVC

Nettuts+ -- JavaScript Frameworks

PureMVC is a lightweight framework for creating applications based upon the classic Model, View and Controller concept.

Based upon proven design patterns, this free, open source framework which was originally implemented in the ActionScript 3 language for use with Adobe Flex, Flash and AIR, is now being ported to all major development platforms.

Related links:


TrimJunction

Nettuts+ -- JavaScript Frameworks

The open source Junction framework is a conventions-over-configuration, synchronizing web MVC framework for JavaScript. TrimPath Junction is a clone or port of the terrific Ruby on Rails web MVC framework into JavaScript.

Related links:


CorMVC

Nettuts+ -- JavaScript Frameworks

CorMVC is a jQuery-powered Model-View-Controller (MVC) framework that can aide in the development of single-page, web-based applications. CorMVC stands for client-only-required model-view-controller and is designed to be lowest possible entry point to learning about single-page application architecture.

Related links:


batman

Nettuts+ -- JavaScript Frameworks

batman.js is a full-stack microframework extracted from real use and designed to maximize developer and designer happiness. It favors convention over configuration, template-less views, and high performance by simply not doing very much. It all adds up to blazingly fast web apps with a great development process; it’s batman.js.

Related links:


That’s a Wrap!

And we’re done here. The number of options here might border on overdoing things at first glance but each of these are a little different in how they tackle this problem and given a problem, different solutions and choices are always a welcome addition.

As I mentioned earlier, if you think a framework should be here but isn’t, just drop us a line below and we’ll update this roundup accordingly. Thank you so much for reading!

http://feedads.g.doubleclick.net/~ah/f/8olmjno1k05rb1som1frr6u854/300/250?ca=1&fh=280#http%3A%2F%2Fnet.tutsplus.com%2Farticles%2Fweb-roundups%2F20-javascript-frameworks-worth-checking-out%2F


from Nettuts+: http://net.tutsplus.com/articles/web-roundups/20-javascript-frameworks-worth-checking-out/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+nettuts+%28Nettuts%2B%29

Categories: Uncategorized

September 26, 2011 Leave a comment

为什么说很多NoSQL的Benchmark是扯淡?

正如原作者所言,本文有标题党之嫌,但确实道出了一个众所周知的问题。就是很多NoSQL产品的官方 benchmark 过高。虽然本人并不完全同意作者的观点,但是其不盲从轻信较劲的态度还是值得学习。

抱歉我用了这么一个标题党的题目做为标题。

写这篇文章只是想引起大家的注意:在选择NoSQL产品时,达到标称性能,需要诸多限制条件,例如本文主要讨论的磁盘I/O。

现在NoSQL的产品已经很多了,很多都宣称“我们的QPS可以达到十万,甚至百万”,但是当我们在生产环境中使用的时候,却明显的感觉到,随着数据文件不断增大,NoSQL的性能却指数下降,问题处在哪里了?

这些NOSQL的Benchmark的量都有一个前提“你得内存足够放下你的全部数据文件”

Case1:有人说,我内存16GB,那只能说明你得数据规模还不够大……我已经经历被无数上百GB的数据库折磨过了。此外,你可能需要在1GB内存的虚拟机上支撑数10GB的数据,比如我现在的情况。

继续讨论,一旦内存放不下全部的数据,会怎么办呢?
有很多策略,但无非都是访问磁盘,将数据Cache到内存中。

我们先讨论最坏的情况,假定每条记录的偏移是放在内存中,但所有数据都放在磁盘,我们使用fseek等操作来查询磁盘。

来看下面的测试代码。

#相关代码, [四号程序员] http://www.coder4.com
void test_fseek_set()
{
    long offset;
    FILE*fp = NULL;
    long i;

    fp = fopen(FILE_NAME, "r");
    if(!fp)
    {
        printf("Open file fail.\n");
        printf("%s\n",strerror(errno));
        exit(-1);
    }   

    for(i=0; i<TIMES; i++)
    {
        //Because random max is 1<<30 - 1
        offset = random() * 10 % MAX_FILE;
        if(fseek(fp, offset, SEEK_SET))
        {
            printf("fseek error.\n");
            printf("%ld",offset);
            printf("%s\n",strerror(errno));
        }
    }   

    fclose(fp);
}

好了,你猜猜上述随机fseek的程序在一个7200转的硬盘上,针对一个4GB的文件随机访问,能跑多块?

答案是QPS<=80。

有人说你骗人,我跑的能到1XXX,那么请你执行下述命令清空你内存中的磁盘缓存。

#相关代码, [四号程序员] http://www.coder4.com
sync; echo 3 > /proc/sys/vm/drop_caches

很多时候,之所以我们能在小数据时达到NoSQL官方标称的QPS,而大数据量却指数下降,都是这些缓存在作怪。说白了,我们很Happy的Benchmark半天,实际是在玩系统的缓存,当然快了。

一旦你的数据文件大于内存磁盘缓存,那么速度会马上像我列举的这样,不会多余80QPS,在一个4GB的文件上。

有人说mmap,我曾经也是这样YY的,但根据我的测试,事情不是这样。
我有一个120GB的Tokyo Cabinet数据文件,把内存开满,它默认会用mmap,然后你会发现top中“VIRT”一列,会显示为120GB+(换算后),而我得机器内存却只有32GB。这时,当你访问恰好不在内存中的那部分数据时,操作系统会进行非常耗时的换入换出操作(首先就需要fseek等)。在这台24核、32GB的机器上,QPS勉强能达到3000(这已经远远低于标称的QPS),而一旦清空缓存,QPS会迅速跌落到70左右……

可能还会有人说:我没事闲的为啥要自己清空缓存?

机器不是给你一个NoSQL进程服务的,很多系统其他服务都需要访问磁盘,读取文件,渐渐的就会把你Cache起来的内存全部换掉,根据实际测试的情况,一台完全闲置的机器,开TT能达到3000, 闲置放置48小时(不开其他服务), 性能就会骤降到1000左右,再放置72小时左右,就回归到70的qps了,此时Cache已经基本完全换出。

综上,mmap不是神,因为你的内存不够,而其他进程也会争夺内存来做自己的Cache。

如果你想充分发挥NoSQL的性能,建议用支持集群的NoSQL产品,尽量将全部数据放入内存中。

或者你没钱购置很多Moster内存的服务器,像我一样,就不要期望NoSQL能有很惊人的性能了。此时,NoSQL所能带来的提升,只是关系数据库所剪掉的那部分开销,如果你基本没有什么join,那么可能还会不如关系数据库。

分析性能,我们不能仅仅看官方的数据比较,要考虑机器的实际情况和自己的数据规模,最终才能分析出瓶颈出在哪里。

对于原作者的观点,本人提出两点看法:

  • 1.要充分发挥NoSQL性能,并不是一定要尽量把所有数据放到内存,实际上只要保证了热数据都能装在内存中就够了。(这里的热数据,包含了索引数据及系统开销)
  • 2.作者举例中的程序,主要用了磁盘seek,磁盘的seek速度慢,原本就是磁盘物理结构的硬伤,所以许多NoSQL存储采用了变随机写为顺序写的方式,减少磁盘seek操作,也是提升IO性能的良方。

来源:www.coder4.com

相关文章:

Redis并发性能测试benchmark

LevelDB、TreeDB、SQLite3性能对比测试

MongoDB、HandlerSocket和MySQL性能测试及其结果分析

来自Riak的LevelDB与InnoDB的性能测试

关于NoSQL的思考-为什么我们要优化存储的写性能?

无觅


from NoSQLfan: http://blog.nosqlfan.com/html/3086.html

Categories: Uncategorized

September 23, 2011 Leave a comment

回答下在bugs.php上的一个问题

今天在bugs.php.net上, 有一个用QQ邮箱的用户发了一个问题(#55731).

他问, 为什么, 如下的代码, 会调用俩遍getter:

<?php
class Example{
    private $p1;
    private $p2;
    function __construct($a){
        $this->p1=$a;
    }
    function __get($elmname){
        echo "Call_get()";
        return $this->$elmname;
    }
    function __isset($name){
        return isset($this->$name);
    }
    function __unset($name){
        unset($this->$name);
    }
}
$example = new Example("v1");
unset($example->p1);
echo $example->p1;
//输出
//Call_get()Call_get()

一开始, 我只是简单的回答了下, 和他在__get中再次获取$this->elmname有关系. 后来这个同学又要追问原因, 我只好用我那糟糕的英语给他解释.

可能用英语没太讲明白, 我现在用中文解释下吧.

(补充: 文章发出以后, 有不少同学认为我把简单问题搞复杂了, 他们认为unset($example->p1)也会触发一次getter. 所以我先解答下这一点: “非”读”上下文不会触发对__get的调用”. 这一点也很容易验证, 大家可以试试. 要不然我也不会专门写这个文章来讨论这个问题.)

首先. 这个问题的关键原因是, unset掉一个private的变量.

在我们获取一个对象的变量(“读”上下文)的时候, 其实是首先被翻译成ZEND_FETCH_OBJ_R中间指令(opcode), 那么到了真正执行期的时候, 这条opcode会导致最终调用到zend_read_property, 我把关键代码罗列如下:

.....
    /* make zend_get_property_info silent if we have getter - we may want to use it */
    property_info = zend_get_property_info_quick(zobj->ce, member, (zobj->ce->__get != NULL), key TSRMLS_CC);

    if (UNEXPECTED(!property_info) ||
        ((EXPECTED((property_info->flags & ZEND_ACC_STATIC) == 0) &&
         property_info->offset >= 0) ?
            (zobj->properties ?
                ((retval = (zval**)zobj->properties_table[property_info->offset]) == NULL) :
                (*(retval = &zobj->properties_table[property_info->offset]) == NULL)) :
            (UNEXPECTED(!zobj->properties) ||
              UNEXPECTED(zend_hash_quick_find(zobj->properties, property_info->name,
                property_info->name_length+1, property_info->h, (void **) &retval) == FAILURE)))) {
        zend_guard *guard = NULL;

        if (zobj->ce->__get &&
            zend_get_property_guard(zobj, property_info, member, &guard) == SUCCESS &&
            !guard->in_get) {
            /* have getter - try with it! */
            Z_ADDREF_P(object);
            if (PZVAL_IS_REF(object)) {
                SEPARATE_ZVAL(&object);
            }
            guard->in_get = 1; /* prevent circular getting */
            rv = zend_std_call_getter(object, member TSRMLS_CC);
            guard->in_get = 0;

上面的代码解释如下:

1. 首先调用zend_get_property_info_quick, 尝试在对象对应的类(zend_class_entry * zobj->ce)中寻找该属性的声明信息(public, protect, name, hash), zend_get_property_info_quick会在找不到, 或者找到了, 但是不容许访问(外部访问私有,保护变量)的时候, 返回NULL

2. 如果找到对应的属性信息, 则将依照属性信息中的属性名作为接下来查找的属性名(在PHP中, 私有属性的命名为”class_nameproperty_name″, 保护属性的命名为:”*property_name″, 公有属性的命名为”property_name″)

2. 如果没有找到相关的声明信息(未定义属性), 则尝试直接从对象的属性集中寻找(zobj_properties, 这是因为PHP是一个很灵活的语言, 你可以动态的给一个对象则加属性), 如果找到, 成功返回.

3. 如果在对象的属性集合中也没有找到, 则判断对象是否申明了__get魔术方法, 如果没有则报告找不到返回失败.

4. 如果有__get魔术方法, 为了避免发生嵌套递归, 首先查询是否已经存在该属性名的guard, 如果有判断guard->in_get是否为真, 如果为真表示发生递归了,则失败返回. 如果没有, 则设置一个名为属性名的guard(请注意这里), 然后调用__get

5. 调用__get如果找到则成功返回, 否则失败结束.

现在, 让我们来看看文章开头的例子.

1. 调用zend_read_property, zobj是$example, member是p1

2. 调用zend_get_property_info_quick查询p1属性信息, 因为此时的作用域是全局作用域, PHP不容许直接访问对象的私有属性, 所以zend_get_property_info_quick返回NULL

3. 尝试从zobj->properties中寻找p1, 因为p1被unset掉了, 所以不存在, 没找到

4. 发现$example有__get魔术方法.

5. 查找是否有为”p1″设置的guard, 没有.

6. 设置一个名为”p1″的guard, 然后调用$example->__get (输出Call_get())

7. 在$example->__get中, 我们尝试获取$this->p1, 于是再来一次::

8. 调用zend_read_property, zobj是$example, member是p1

9.调用zend_get_property_info_quick查询p1属性信息, 因为此时的作用域是example, 所以zend_get_property_info_quick返回成功

10. 将返回的属性信息中的属性名”examplep1″作为要查询的属性名

11. 尝试从zobj->properties中寻找p1, 因为p1被unset掉了, 所以不存在, 没找到

12. 发现$example有__get魔术方法.

13. 查找是否有为”examplep1″设置的guard, 没有.

14. 设置一个名为”examplep1″的guard, 然后调用$example->__get (输出Call_get())

15. 在$example->__get中, 我们尝试获取$this->p1, 于是再来一次::

然后重复8,9,10,11,12.

16, 查找是否有为”examplep1″设置的guard, 发现有递归产生, 报告错误, 失败返回.


Comments

  • 2011/09/22, showframework writes: 没这么复杂吧..
    unset($xample->p1);echo $example->p1;
    这本身就是两次__get啊
    unset语句里面那个语句一次__get
    echo 后面一次__get
  • 2011/09/22, 雪候鸟 writes: @showframework 呵呵,你可以试试unset($example->p1), 看看有没有调用…
  • 2011/09/22, wynn writes: 楼上这个说法不对,unset的执行过程中不调用__get的,这一点很容易验证,直接沿用正文这段代码,把__get里面的return那行注释掉就可以用来测试了。
  • 2011/09/22, 萝卜青菜 writes: 没细看,对象的定义中有一个变量是用来防止__set,__get方法递归调用的
  • 2011/09/22, rainkid writes: 楼主扩展研究太多了,简单的事情搞复杂了。

    使用一次$example->p1就调用一次__get方法

    unset($example->p1);
    echo $example->p1;

    这里明显使用的两次,当然会输出两次“Call_get”;

  • 2011/09/22, 雪候鸟 writes: @rainkid sigh, 发表意见前, 一定动手验证下.
  • 2011/09/23, 風之紫色 writes: 楼主说的没错,把unset($this->$name);这行注释掉,就很容易看出来了

Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)

Related Posts:

from 风雪之隅: http://www.laruence.com/2011/09/22/2152.html

Categories: Uncategorized

September 15, 2011 Leave a comment

谷歌中国发布 Google 时惠,聚合所有大陆团购网站信息

今天Google时惠开始beta测试(这不是错别字,时惠应该表示的是限时的实惠,虽然这个名字透着点小聪明,但给人感觉并不是很正式),目前汇集了10家大陆的团购网站信息,包括:

在汇集这些团购信息的同时,你也可以按照团购网站、团购分类、价格区间和折扣程度来在众多团购里筛选出符合自己的。团购聚合在国内外都不新鲜了,谷歌现在进来凑热闹还是晚了一步。根据源代码里description字段可以看出这个产品的特点:

Offer Aggregator is to aggregate all the available deals on the market, and provide a friendly interface to
users.

优惠聚合是一个聚合了所有市场上优惠信息的网站,并以友好的界面呈现给用户。

虽然 Google 拥有强大的语义分析资源,但面对团购网站的花言巧语也显得力不从心。由于很多景德镇团购网站连 sitemap 都没有提供,所以初期发布的Google时惠尽管过滤比较多,但其索引到的内容精准度还比不上景德镇市场上其它的团购汇聚网站,比如百度团购,因为人家有各个团购网站的专用接口。

当然未来Google可以针对团购网站指定专门的元数据索引规范,并利用富文本摘要形式显示在Google搜索结果里,但这还需要时间。目前Google时惠还在beta测试阶段,也还没有作为第四个Google.cn下面的本地服务出现在Google.cn首页里。

另外这也透露出了一个信息:谷歌中国已经开始关注本地的团购市场,那么Google Offers是否会进入中国呢?

Via TNW


© musiXboy 发表于 谷奥——探寻谷歌的奥秘 ( http://www.guao.hk ), 2011. |
5 条评论 |
永久链接 |
关于谷奥 |
投稿/爆料
Post tags: , ,


from 谷奥——探寻谷歌的奥秘: http://www.guao.hk/posts/google-china-shihui.html

Categories: Uncategorized

September 15, 2011 Leave a comment

Google+ API 初出茅庐,暂时只专注于公开数据

千呼万唤始出来,今天Google+ API终于揭开了面纱,不过目前这第一步还只专注于公开数据上。

如果你想获得一个人的profile信息,可以发出HTTP请求:

GET https://www.googleapis.com/plus/v1/people/108189587050871927619?key=yourAPIKey

然后即可获得JSON输出:

{
 "kind": "plus#person",
 "id": "108189587050871927619",
 "displayName": "Chris Chabot",
 "image": {
  "url": "https://lh5.googleusercontent.com/-cQNLOQzkGpE/AAAAAAAAAAI/AAAAAAAAEjo/M9_pXL-ra4Q/photo.jpg"
 },
 "organizations": [
  {
   "name": "Google+ Developer Relations",
   "title": "Developer Advocate & Manager",
   "type": "work"
  }
 ]
}

利用类似的方法你可以得到某个人最近的公开信息流:

GET https://www.googleapis.com/plus/v1/people/108189587050871927619/activities/public?key=yourAPIKey

目前你必须注册自己的应用才可以发送请求。另外还有几点:

  • 目前的API只支持RESTful HTTP请求,通过JSON返回
  • 输出的信息为标准语法(个人信息是PoCo ,活动是ActivityStrea.ms
  • 使用OAuth 2安全而可信的访问用户数据

关于Google+ API的具体信息可以参考:developers.google.com/+

Via Google Plus Plaform


© musiXboy 发表于 谷奥——探寻谷歌的奥秘 ( http://www.guao.hk ), 2011. |
没有评论 |
永久链接 |
关于谷奥 |
投稿/爆料
Post tags: , ,


from 谷奥——探寻谷歌的奥秘: http://www.guao.hk/posts/getting-started-on-the-google-plus-api.html

Categories: Uncategorized

September 8, 2011 Leave a comment

报道称广电总局要颁发新版限娱令
《南方周末》报道,有传闻称广电总局将针对卫视娱乐节目颁发“加强版限娱令”。 “限娱令”指的是广电总局历年来针对卫视娱乐节目颁布的限令。比如省级卫视的选秀类节目“原则上每年不超过一项,每项活动播出时间不超过两个月,播出场次不超过10场,不得在黄金时段播出,每场播出时间不超过90分钟”、“电视剧一般不能超过30集(四大名著及其翻拍除外)”等,总共10条。传闻即将颁发的“加强版限娱令”,会从10条变成16条,增加了“17时至22时之间,娱乐节目每周播出不得超过三次”、“邀请港台嘉宾需严格报批手续”等等。

from Solidot: http://hardware.solidot.org/article.pl?sid=11/09/08/0240216&from=rss

Categories: Uncategorized

September 6, 2011 Leave a comment

iPhone移动电子商务应用盘点
继2010年电子商务出现投资热潮之后,今年移动互联网逐渐进入大众的视线,这个由手机发力、未来具备无限可能的新行业正逐渐渗透到人们生活…
Tags:iPhone  移动应用  电子商务  
from 草根网:互联网界的读者文摘: http://www.20ju.com/content/V175729.htm

Categories: Uncategorized