88250

Java

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  82 随笔 :: 0 文章 :: 5 评论 :: 0 Trackbacks

#

“我说我是警察,也是执法 人员,应该文明执法,但还是被打断腿!”昨天,躺在病床上,昆明市 公安局民警张俊(化名)说起事发当天的情形时,依然有些愤怒!当天他接到母亲的电话,说辖区城管要强行拆除小区内的违章建筑,让他回家收拾东西。不料,张 俊刚到门口表明自己身份时,却遭到拆迁执法人员的围殴。据小区目击者称,张俊被殴打时,对方扬言“打的就是警察!”。

“我还以为身上有警械,就能够证明自己身份。”昨天下午,在解放军昆明总医院骨科住院部,记者见到了被打伤的张俊,他向记者讲述了事发经过。

“我是警察,也是执法人员。”张俊说,为了阻止自己被继续殴打,他一边表明自己的身份,一边准备从身上掏证件。慌忙中,张俊只摸到了自己随身携带的一根伸缩警棍,这一摸不要紧,更是遭了对方一顿暴打。

当 时现场执法人员叫张俊放下警棍,然后将他的警棍拿走。张俊说,第一次被打之后,自己的鼻子和嘴角已经被打出血了。但噩运还没有结束,之后,他被4名城管反 绑着双手押到邻居家的门前。他再次向执法人员提出要回家收拾东西,但没有人理他。听到他的反复要求后,一名执法人员转头对他说:“你拿警棍打我,怎么可能 让你上去。”张俊表示,他拿出警棍根本没有打到人。“我是市公安局的,也是执法者,执法要文明。”张俊说完时就听到对方一句狂喷:“你敢用手指头指我,兄 弟们,拿下。”

张俊说,他只感觉周围的20多名城管全部围了上来,用警棍和铁棍将他打倒在地,还有人上前用脚踩他。当时他感觉自己的右腿很疼,他大声恳求:“求求你们别打了,我的腿断了。”随后,他被打晕在地。

现 场很多小区业主都目睹了张俊被殴打的过程,“总共被打了两次。”张俊的邻居老邢说。同样目睹事情经过的程先生也说,张俊大概被殴打了10多分钟,他远远看 着张俊满脸都是血,倒在地上。他听到在场的一位执法人员对着几乎快晕厥过去的张俊喊道:“装死。”张俊的好友陈小姐说,现场就有执法人员带去的救护车,但 没有对他进行救治。

而对此,当时执法拆除违章建筑的昆明市综合行政执法局盘龙分局负责人称,是张俊先挥舞警棍导致冲突发生。

据知情人称,事件发生之后,已经有一名参与冲突的执法队长被拘留,但此说法未得到有关部门的证实。

转自:http://news.qq.com/a/20110103/000492.htm?qq=0&ADUIN=845765&ADSESSION=1294033435&ADTAG=CLIENT.QQ.3187_.0



本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/articles/2011/01/03/1294035696457.html
posted @ 2011-01-03 14:22 88250 阅读(162) | 评论 (0)编辑 收藏

过去与今天
词 \ 黄家驹. 曲 \ 黄家驹. 主唱 \ 黄家驹.

夜雨街中里宁与静
雾色灯影照我身
在我的心里常会问
幻变的都市四周
可知我已放弃旧日的理想
知否我也有个梦 要我醉倒
就像 就像 就像
像那方的星光闪动 眼也会发光
仰望浮云常变不定 暗里叹一声
冲出他朝崎岖道上 哪怕会退倒
试问谁人曾会考虑 过去与今天
踏破这黑暗宁与静
谁会管失意冷风
幻变的都市谁问过
让暖风紧靠我身



本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/articles/2010/12/31/1293811895091.html
posted @ 2011-01-01 00:12 88250 阅读(143) | 评论 (0)编辑 收藏

EverBox LogoEverBox 是一款由盛大创新院推出的网盘产品,提供数据存储和同步服务。EverBox 提供了 10GB 超大免费存储空间,支持文件同步、文件分享、在线浏览照片、在线听音乐等功能,并支持数据同步客户端。需要邀请的朋友可以改我留言 :-)

 

主要功能:

支持数据同步客户端:安装 EverBox后,您所需的文件都将自动同步到设备上,可以随时、随地的使用手边的任意一款设备访问文件了。目前提供了 Windows 客户端程序,支持 Windows XP,Windows Vista 和 Windows 7。在以后的版本中,EverBox 将会陆续推出其他客户端程序,如: Android,iPhone,iPad,Mac,Linux 等。

容灾备份服务:EverBox 会自动的、实时的备份文件数据到 EverBox 安全服务器,因此,当您本地的设备坏损或丢失时,不必担心由于数据丢失造成的损失,恢复数据易如反掌!

在线音乐播放:EverBox 支持在线音乐播放功能,几乎支持所有常用的音频格式,使用简单、便捷,无需操作即可连续播放 EverBox 当前目录中的歌曲,很适于一边使用电脑一边听歌时使用。

在线浏览图片:EverBox 支持在线浏览图片功能,几乎支持所有常用的图片格式,操作简单、便捷,并支持自动播放 EverBox 当前目录中的图片文件。

EverBox 功能特性

  1. 10GB 超大免费空间

    成功注册 EverBox 即可获得 2GB 免费空间,完成指定任务可升级空间到 10GB!EverBox 在随后的版本中将会有更多的奖励措施,赠送活跃用户更多空间,敬请期待!

  2. 支持数据同步客户端

    您是不是经常遇到以下的情况?“我喜欢在外出时用 iPhone 听歌,但是我需要从 PC 下载歌曲再用数据线将 MP3 导到 iPhone”;“我经常出差,但是程序和文件都在笨重的 PC 上,而我只带着笔记本”;“我到 XX 会议做演讲,但是保存 PPT 的 U 盘坏掉了”。

    现在有了 EverBox,这些问题将迎刃而解!只需安装 EverBox,您所需的文件都将自动同步到设备上,您就可以随时、随地的使用手边的任意一款设备访问文件了。当然,使用浏览器一样可以访问到您需要的文件。

  3. 容灾备份服务

    硬盘损坏?数据无法访问?笔记本电脑被盗?完了,重要的数据丢失了!

    不用担心,有了 EverBox,这一切都不会再是问题。EverBox 会自动的、实时的备份文件数据到 EverBox 安全服务器,因此,当您本地的设备坏损或丢失时,不必担心由于数据丢失造成的损失,恢复数据易如反掌!

  4. 在线音乐播放

    EverBox 支持在线音乐播放功能,几乎支持所有常用的音频格式,使用简单、便捷,无需操作即可连续播放 EverBox 当前目录中的歌曲,很适于一边使用电脑一边听歌时使用。

  5. 在线浏览图片

    EverBox 支持在线浏览图片功能,几乎支持所有常用的图片格式,操作简单、便捷,并支持自动播放 EverBox 当前目录中的图片文件。

     



本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/everbox-invite.html
posted @ 2010-12-31 10:09 88250 阅读(198) | 评论 (0)编辑 收藏

B3log LogoGAE 博客 —— B3LOG Solo 0.2.5 Beta1 发布了。

该版本除了修复 Bugs,还增加了草稿夹、多人写作、改进了缓存,以及加入了新皮肤 community。

借此机会,祝大家圣诞节愉快,一切平安 :-)

新特性

  • 多人写作
  • 链接排序
  • 新皮肤——community(多人写作皮肤)

Bug 修复

  • 缓存多实例不一致
  • 文章访问次数统计失效
  • IE8 下 Feed 不能显示

改进

  • 存储对象缓存
  • 自定义页面排序方式
  • 改进了页面缓存

具体改动看这里

升级

如果您是 0.2.1 的用户,那么请在部署完 0.2.5 Beta1 后登录后台,访问 http://${application-id}.appspot.com/upgrade/v021-v025.do 进行升级。

项目

如果在使用、测试中发现任何问题,如果您有任何意见或建议,请告知我们 :-)

发布计划

  • 2011 年 1 月 21 日发布 0.2.5 Beta2
  • 2011 年 2 月 14 日发布 0.2.5

作者博客

发布历史

  1. GAE 博客——B3log Solo 0.2.1 发布了!
  2. GAE 博客——B3log Solo 0.2.0 发布了!
  3. GAE 博客——B3log Solo 0.1.1 发布了!
  4. B3log Solo 0.1.0 发布了!
  5. B3log Solo 0.1.0-preview2 发布了!
  6. Solo 0.1.0-Preview1 发布了


本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/b3log-solo-release-025-beta1.html
posted @ 2010-12-24 21:31 88250 阅读(142) | 评论 (0)编辑 收藏



本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/netbeans-chinese-newsletter-130.html
posted @ 2010-12-23 15:36 88250 阅读(183) | 评论 (0)编辑 收藏

GAEAmazon WS

最近一个潜在客户要求我们比较一下 Amazon EC2 和 Google App Engine,正好我们刚刚在 EC2 和 Google App Engine 上完成了两个相对来说规模较大的项目,因此有必要做一下总结。

我打算从三个角度来对比这两大云计算平台:技术,业务和未来发展趋势,本文是技术方面的对比,ok,准备好咖啡,我们开始吧!

 

如果按平台类型来分,大家可能已经知道Google App Engine属于PaaS(平台即服务),而Amazon EC2属于IaaS(基础设施即服务),Amazon EC2给你一个安装了操作系统的“盒子”,你可以自己安装应用程序,也可以使用AMI(Amazon Machine Image),如果你想构建一个高度复杂的定制应用,Amazon EC2是不二之选,它允许你控制环境参数,底层操作系统,存储和网络需求,从技术上讲,它属于很底层的服务,你可以调整你需要的大部分东西。

Google App Engine给你一个完整的平台,包括完整的SDK(以及Eclipse插件)和服务,你可以构建和部署你自己的应用程序,但你不能很好地控制操作系统, 硬件和存储,诸如写文件系统,使用线程等操作都有限制,这样设计的目的是为了确保平台不会被某个应用程序绑架。

简单起来就是:

IaaS:原始硬件(处理器,网络和存储)

PaaS:操作系统,系统软件,开发框架和虚拟机。

下面从技术角度来比较一下这两个平台。

1、提供的服务

Google App Engine凭借丰富的服务击败Amazon EC2,Google App Engine提供的服务可以让开发人员快速进入开发状态。如 Blobstore,Images,Mail,Memcache,Multitenancy,Oauth,Task Queues,URL Fetch,Users,XMPP这些服务在Amazon EC2上是需要自己安装的,为了便于比较,假设你已经为Memcache,Mail和多租户搭建好了基础设施,看看在EC2上你用了多长时间安装,我敢打 赌你会超过一个小时,使用Google App Engine时,这些服务都是现成的,就象果盘中插好牙签的水果一样,你可以随时享用。

2、管理

Google App Engine再次胜出,因为一旦你的应用程序部署成功后,它几乎不需要管理,当你的应用程序负载变大时,你不需要向服务注入新的实例,Google App Engine可以自由扩大负载能力,新实例是实时剥离的。使用Amazon EC2时,你必须时刻跟踪通信流量(现在可以通过脚本自动跟踪了),新实例是在你的配置基础上剥离的,因此,如果我的峰值负载是2x+y,那么需要剥离2 个以上的应用程序服务器。

此外,使用Google App Engine升级应用程序服务器实例,安装新的负载均衡器时,没有管理开销,这一切都是自动执行的。

3、抽象水平

和上一条联系紧密的是抽象水平,Google App Engine抽象得比较好,你只需要关心你的应用程序和业务逻辑,不用担心底层基础设施的管理,正如Nick Johnson所说的那样,抽象水平应作为挑选云计算平台的一个基本原则,你需要做的是驾驶,不需要研究引擎盖以下的东西。在我看来,如果你的核心业务是 货物运输,那么你应该买一辆卡车,它能高效地把你的货物从A地运输到B地,相反,你不应该考虑如何购买零部件自己组装一辆卡车。

在软件开发领域,我们看到有Grails,RoR等框架,它们大受欢迎,是因为它们提供了高水平的抽象,如果你是一名泥瓦匠,它们就象是脚手架,你可以踩在它们上面干你的工作。

4、可靠性

从我个人的认识来讲,两者都很可靠,这一点从它们的用户数量就可以知道一二,用户可以时刻查看Google App Engine的状态,它是透明的,但从历史数据来看,Amazon EC2的正常运行时间比Google App Engine要好。

5、可移植性

从使用的底层操作系统和开发框架来看,Amazon EC2具有更好的可移植性,但也不要担心你会被Google App Engine给锁住,Google已经给出了迁移指南,指导你如何从转移出Google App Engine平台,当然包含你所有的数据在内。还有AppScale这样的程序可以帮助你将Google App Engine上的程序转移到Amazom EC2或其它云平台上,AppScale已经可以支持EC2,Eucalyptus,Xen和KVM。

6、存储

Google App Engine目前严重依赖于BigTable,开发人员需要从一个完全不同的角度来认识和学习它,特别是对于那些特熟悉关系数据库,被关系数据库理论束缚 的人更需要洗洗脑,它提供了一个JPA&JDO访问接口,但它不支持所有的JPA&JDO功能,特别是关系部分,Google最近也高调 宣布要让Google App Engine支持传统的SQL数据库。Amazon EC2已经支持SQL数据库,你可以使用Oracle,MySQL等你所熟悉的关系数据库。

7、应用程序维护和升级

对Google App Engine来说,应用程序维护和升级是件轻而易举的事,它为各种应用程序提供了一个详细的管理面板,包括日志查看器和数据查看器,一个程序可以有多个版 本,当新版本经过测试,可以用于生产环境时,你可以将其设为默认的版本,而Amazon EC2就麻烦多了,因为它属于IaaS类型,所有维护和升级相关的事情你必须亲力亲为。

8、开发限制

使用Google App Engine时,你必须受到平台的限制,如果你的查询处于僵死状态,很难将其杀掉,此外,Google App Engine没有线程,提供的SDK也是受限的,有些类和功能被列入黑名单,因此不能被使用,也不能写文件系统等等。

从表面上看这些限制是不可理喻的,但如果有朝一日你也要提供PaaS类型的平台时,你就能理解为什么Google要做这些限制了,这样才能确保运行 在平台上的应用程序不会违反平台的规则,否则平台就可能被应用程序绑架,从而变得不可使用,平台上的其它应用程序就会收到牵连。

即便有这些限制,90%的商业应用程序仍然可以在Google App Engine上正常运行,但对于那些要使用线程,或写文件系统的应用,最好还是选择Amazon EC2,因为它提供了所有底层访问和控制权。

9、语言支持

截至目前,Google App Engine支持Java和Python,但任何可以转换成字节码,可在JVM上执行的任何编程语言都可以在Google App Engine上运行,如果你喜欢其它编程语言,最好选择Amazon EC2,因为你可以在它的操作系统上面安装语言运行时环境,你拥有几乎完整的硬件和操作系统控制权,还有什么不能做的呢?在Amazon EC2上也托管了许多有趣的C#,.NET,ASP.NET MVC/Visual Studio项目,具有讽刺意味着的是,尽管还有Microsoft Azure,但许多以MS技术开发的项目却托管在Amazon EC2上。

概括地说,Amazon EC2是进入云计算的早期尝试者,它利用互联网标准和开放平台创建了一个非常灵活的云计算平台,Google则利用了它在大型数据库方面的研究成果和它内 部实现的一些技术创建了一个强大,但有更多限制的云计算环境。从核心技术来讲,Amazon EC2允许你扩展任何计算机实例到多个实例,因此你拥有每个虚拟盒子的完全控制权,Google App Engine从操作系统抽象而来,没有计算机实例的概念,如果你的Web应用程序不需要操作系统相关的功能,那么Google App Engine无疑是最好的选择,如果需要更好地控制你的系统环境,特别是操作系统相关的控制,那么最好选择Amazon EC2。

原文名:Comparing Google App Engine and Amazon EC2 on Technology 作者:Vikas Hazrati



本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/ec2-vs-gae.html
posted @ 2010-12-22 15:21 88250 阅读(149) | 评论 (0)编辑 收藏

有人在Stack Overflow上发问,动手开发网站之前,需要知道哪些事情?

不出意料地,他得到了一大堆回答。

通常情况下,你需要把所有人的发言从头到尾读一遍。但是,Stack Overflow有一个很贴心的设计,它允许在问题下方开设一个wiki区,让所有人共同编辑一个最佳答案。于是,就有了下面这篇文章,一共总结出六个方面共计61条"网站开发须知"。

我发现,这种概述性的问题,最适合这种集合群智、头脑风暴式的回答方式了。这也是我第一次觉得,Stack Overflow做到了Wikipedia做不到的事。(难怪它最近挤进了全美前400大网站。)

在我的印象中,关于网站开发,这样全面的概述性文章非常少见,因此也就非常有用。大家不妨看看,61件事情中你做到了多少?

(更新:刚刚发现,一共应该是62条建议,我先前数错了,这个......太窘了。)

=============================

网站开发人员应该知道的61件事

原文网址:http://stackoverflow.com/questions/72394

译者:阮一峰

一、界面和用户体验(Interface and User Experience)

1.1

知道各大浏览器执行Web标准的情况,保证你的站点在主要浏览器上都能正常运行。你至少要测试以下引擎:Gecko(用于Firefox)、Webkit(用于SafariChrome和一些手机浏览器)、IE(你可以利用微软发布的Application Compatibility VPC Images进行测试)和Opera。同时,不同的操作系统,可能也会影响浏览器如何呈现你的网站。

1.2

除了浏览器,网站还有其他使用方式:手机、屏幕朗读器、搜索引擎等等。你应该知道在这些情况下,你的网站的运行状况。MobiForge提供了手机网站开发的一些相关知识。

1.3

知道如何在基本不影响用户使用的情况下升级网站。通常来说,你必须有版本控制系统(CVS、Subversion、Git等等)和数据备份机制(backup)。

1.4

不要让用户看到那些不友好的出错提示。

1.5

不要直接显示用户的Email地址,至少不要用纯文本显示。

1.6

为你的网站设置一些合理的使用限制,一旦超过门槛值,就自动停止服务。(这也与网站安全相关。)

1.7

知道如何实现网页的渐进式增强(progressive enhancement)。

1.8

用户发出POST请求后,总是将其重导向(redirect)至另外一个网页。

1.9

不要忘记网站的可访问性(accessibility,即残疾人如何使用网站)。对于美国网站来说,有时这是法定要求WAI-ARIA有一些这方面很好的参考资料。

二、安全性(Security

2.1

阅读《OWASP开发指南》,它提供了全面的网站安全指导。

2.2

了解SQL注入(SQL injection)及其预防方法。

2.3

永远不要信任用户提交的数据(cookie也是用户端提交的!)。

2.4

不要明文(plain-text)储存用户的密码,要hash处理后再储存。

2.5

不要对你的用户认证系统太自信,它可能很容易就被攻破,而你事先根本没意识到存在相关漏洞。

2.6

了解如何处理信用卡

2.7

在登录页面及其他处理敏感信息的页面,使用SSL/HTTPS

2.8

知道如何对付session劫持(session hijacking)。

2.9

避免"跨站点执行"(cross site scripting,XSS)。

2.10

避免"跨域伪造请求"(cross site request forgeries,XSRF)。

2.11

及时打上补丁,让你的系统始终跟上最新版本。

2.12

确认你的数据库连接信息的安全性。

2.13

跟踪攻击技术的最新发展,以及你使用的平台的最新安全漏洞。

2.14

阅读Google的《浏览器安全手册》(Browser Security Handbook)。

2.15

阅读《网络软件的黑客手册》(The Web Application Hackers Handbook)。

三、性能(Performance)

3.1

只要有可能,就使用缓存(caching)。正确理解和使用HTTP cachingHTML5离线储存

3.2

优化图片。不要把一个20KB的图片文件,作为重复出现的网页背景图案。

3.3

学习如何用gzip/deflate压缩内容(deflate方式更可取)。

3.4

将多个样式表文件或脚本文件,合为一个文件,这样可以减少浏览器的http请求数,以及减小gzip压缩后的文件总体积。

3.5

浏览Yahoo的Exceptional Performance网站,里面有大量提升前端性能的优秀建议,还有他们的YSlow工具。Google的page speed则是另一个用来分析网页性能的工具。两者都要求安装Firebug

3.6

如果你的网页用到大量的小体积图片(比如工具栏),就应该使用CSS Image Sprite,目的是减少http请求数。

3.7

大流量的网站应该考虑将网页对象分散在多个域名(split components across domains)。

3.8

静态内容(比如图片、CSS、JavaScript、以及其他cookie无关的网页内容)都应该放在一个不需要使用cookie的独立域名之上。因为域名之下如果有cookie,那么客户端向该域名发出的每次http请求,都会附上cookie内容。这里的一个好方法就是使用"内容分发网络"(Content Delivery Network,CDN)。

3.9

将浏览器完成网页渲染所需要的http请求数最小化。

3.10

使用Google的Closure Compiler压缩JavaScript文件,YUI Compressor亦可。

3.11

确保网站根目录下有favicon.ico文件,因为即使网页中根本不包括这个文件,浏览器也会自动发出对它的请求。所以如果这个文件不存在,就会产生大量的404错误,消耗光你的服务器的带宽。

四、搜索引擎优化(Search Engine Optimization,SEO)

4.1

使用"搜索引擎友好"的URL形式,比如example.com/pages/45-article-title,而不是example.com/index.php?page=45。

4.2

不要使用"点击这里"之类的超级链接,因为这样等于浪费了一个SEO机会,而且降低了"屏幕朗读器"(screen reader)的使用效果。

4.3

创建一个XML sitemap文件,它的缺省位置一般是/sitemap.xml(即放在网站根目录下)。

4.4

当你有多个URL指向同一个内容时,在网页代码中使用<link rel="canonical" ... />

4.5

使用Google的Webmaster Tools和Yahoo的Site Explorer

4.6

从一开始就使用Google Analytics(或者开源的访问量分析工具Piwik)。

4.7

知道robots.txt的作用,以及搜索引擎蜘蛛的工作原理。

4.8

将www.example.com的访问请求导向example.com(使用301 Moved Permanently重定向),或者采用相反的做法,目的是防止Google把它们当做两个网站,分开计算排名。

4.9

知道存在着恶意或行为不正当的网络蜘蛛。

4.10

如果你的网站有非文本的内容(比如视频、音频等等),你应该参考Google的sitemap扩展协议

五、技术(Technology)

5.1

理解HTTP协议,以及诸如GET、POST、sessions、cookies之类的概念,包括"无状态"(stateless)是什么意思。

5.2

确保你的XHTML/HTMLCSS符合W3C标准,使得它们能够通过检验。这可以使你的网页避免触发浏览器的古怪行为(quirk),而且使它在"屏幕朗读器"和手机上也能正常工作。

5.3

理解浏览器如何处理JavaScript脚本。

5.4

理解网页上的JavaScript文件、样式表文件和其他资源是如何装载及运行的,考虑它们对页面性能有何影响。在某些情况下,可能应该将脚本文件放置在网页的尾部

5.5

理解JavaScript沙箱(Javascript sandbox)的工作原理,尤其是如果你打算使用iframe。

5.6

知道JavaScript可能无法使用或被禁用,以及Ajax并不是一定会运行。记住,"不允许脚本运行"(NoScript)正在某些用户中变得流行,手机浏览器对脚本的支持千差万别,而Google索引网页时不运行大部分的脚本文件。

5.7

了解301重定向和302重定向之间的区别(这也是一个SEO相关问题)。

5.8

尽可能多得了解你的部署平台(deployment platform)。

5.9

考虑使用样式表重置(Reset Style Sheet)。

5.10

考虑使用JavaScript框架(比如jQueryMooToolsPrototype),它们可以使你不用考虑浏览器之间的差异。

六、解决bug

6.1

理解程序员20%的时间用于编码,80%的时间用于维护,根据这一点相应安排时间。

6.2

建立一个有效的错误报告机制。

6.3

建立某些途径或系统,让用户可以与你接触,向你提出建议和批评。

6.4

为将来的维护和客服人员撰写文档,解释清楚系统是怎么运行的。

6.5

经常备份!(并且确保这些备份是有效的。)除了备份机制,你还必须有一个恢复机制。

6.6

使用某种版本控制系统储存你的文件,比如SubversionGit

6.7

不要忘记做单元测试(Unit Testing),Selenium之类的框架会对你有用。

(完)

转自:http://www.ruanyifeng.com/blog/2010/11/61_things_every_web_developer_should_know.html



本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/61_things_every_web_developer_should_know.html
posted @ 2010-12-21 17:05 88250 阅读(197) | 评论 (0)编辑 收藏

Memcached Banner
Martin Brown, 自由撰稿人, Freelance Developer

简介: 开源 memcached 工具是一个用来存储常用信息的缓存,有了它,您便无需从缓慢的资源,比如磁盘或数据库,加载(并处理)信息了。该工具可部署在专用的情况下,也可作为用完 现有环境内的多余内存的一种方法。尽管 memcached 十分简便,但有时它仍被不当使用,或被用在错误的环境类型中。在本文中,了解使用 memcached 的最佳时机。

简介

memcached 常被用来加速应用程序的处理,在这里,我们将着重于介绍将它部署于应用程序和环境中的最佳实践。这包括应该存储或不应存储哪些、如何处理数据的灵活分布以 及如何调节用来更新 memcached 和所存储数据的方法。我们还将介绍对高可用性的解决方案的支持,比如 IBM WebSphere® eXtreme Scale。

所有的应用程序,特别是很多 web 应用程序都需要优化它们访问客户机和将信息返回至客户机的速度。可是,通常,返回的都是相同的信息。从数据源(数据库或文件系统)加载数据十分低效,若是每次想要访问该信息时都运行相同的查询,就尤显低效。

虽然很多 web 服务器都可被配置成使用缓存发回信息,但那与大多数应用程序的动态特性无法相适。而这正是 memcached 的用武之地。它提供了一个通用的内存存储器,可保存任何东西,包括本地语言的对象,这就让您可以存储各种各样的信息并可以从诸多的应用程序和环境访问这些信息。


基础知识

memcached 是一个开源项目,旨在利用多个服务器内的多余 RAM 来充当一个可存放经常被访问信息的内存缓存。这里的关键是使用了术语缓存:memcached 为加载自他处的信息提供的是内存中的暂时存储。

比如,考虑这样一个典型的基于 web 的应用程序。即便是一个动态网站可能也会有一些组件或信息常量是贯穿页面整个生命周期的。在一个博客站点内,针对单个 blog post 的类别列表不大可能在页面查看间经常性地变更。每次都通过一个对数据库的查询加载此信息相对比较昂贵,特别是在数据没有更改的情况下,就更是如此。从图 1 可以看到一个博客站点内可被缓存的页面分区。


图 1. 一个典型的博客页面内的可缓存元素
此图显示了可缓存的 blog 元素及其布局:顶部是 Page Header,左边是当前的 Current post lists,右边是 About、Post History、External Links 和 Category list

将这种结构放在 blog 站点的其他元素,poster 信息、注释 — 设置 blog post 本身 — 进行推断,可以看出为了显示主页的内容很可能需要发生 10-20 次数据库查询和格式化。 每天对数百甚至数千的的页面查看重复此过程,那么您的服务器和应用程序执行的查询要远远多于为了显示页面内容所需执行的查询。

通过使用 memcached,可以将加载自数据库的格式化信息存储为一种可直接用在 Web 页面上的格式。并且由于信息是从 RAM 而不是通过数据库和其他处理从磁盘加载的,所以对信息的访问几乎是瞬时的。

再强调一下,memcached 是一个用来存储常用信息的缓存,有了它,您便无需从缓慢的资源,比如磁盘或数据库,加载并处理信息了。

对 memcached 的接口是通过网络连接提供的。这意味着您可以在多个客户机间共享单个的 memcached 服务器(或多个服务器,如本文稍后所示的)。这个网络接口非常迅速,并且为了改善性能,服务器会故意不支持身份验证或安全性通信。但这不应限制部署选项。 memcached 服务器应该存在于您网络的内部。网络接口的实用性以及可以部署多个 memcached 实例的简便性让您可以使用多个机器上的多余 RAM 来提高您缓存的整体大小。

memcached 的存储方法是一个简单的键/值对,类似于很多语言内的散列或关联数组。通过提供键和值来将信息存储到 memcached 内,通过按特定的键请求信息来恢复信息。

信息会无限期地保留在缓存内,除非发生如下的情况:

  1. 为缓存分配的内存耗尽 — 在这种情况下,memcached 使用 LRU(最近最少使用)方法从此缓存删除条目。最近未曾使用的条目会从此缓存中先删除,最旧的最先访问。
  2. 条目被明确删除 — 总是可以从此缓存内删除条目。
  3. 条目过期失效 — 各条目均有一个有效的期限以便针对此键存储的信息在过于陈旧时可从缓存中清除这些条目。

上述这些情况可以与您应用程序的逻辑综合使用以便确保缓存内的信息是最新的。有了这些基础知识后,让我们来看看在应用程序内如何能最好地利用 memcached。


何时使用 memcached

在使用 memcached 改进应用程序性能时,可以对一些关键的过程和步骤进行修改。

在加载信息时,典型的场景如图 2 所示。


图 2. 加载要显示的信息的典型顺序
此图显示了从加载数据到处理/格式化数据再到发送数据至客户机的流程

一般而言,这些步骤是:

  1. 执行一个或多个查询来从数据库加载信息
  2. 格式化适合于显示(或进一步处理)的信息
  3. 使用或显示格式化了的数据

在使用 memcached 时,为配合这个缓存,可对应用程序的逻辑进行稍许修改:

  • 尽量从缓存加载信息
  • 如果存在,使用信息的被缓存版本
  • 如果它不存在:
    1. 执行一个或多个查询来从数据库加载信息
    2. 格式化适合于显示或进一步处理的信息
    3. 将信息存储到缓存内
    4. 使用格式化了的数据

图 3 是对这些步骤的总结。


图 3. 在使用 memcached 时加载适合于显示的信息
此图显示了如果所请求的数据位于缓存内,它就会跳过所有处理步骤,节省了时间

数据加载成为了至多三个步骤的一个过程,从缓存加载数据或从数据库(视情况而定)加载数据并存储在缓存内。

当这个过程首次发生时,数据将正常地从数据库或其他数据源加载,然后再存储到 memcached 内。当下一次访问此信息时,它就会从 memcached 拉出,而不是从数据库加载,节省了时间和 CPU 循环。

问题的另一个方面是要确保如果更改了要存储在 memcached 内的信息,在更新后端信息的同时还要更新 memcached 的版本。这会让图 4 内所示的这个典型顺序发生稍许变化,如 图 5 所示。


图 4. 在一个典型的应用程序内更新或存储数据
此图显示了从更新数据到处理/格式化数据再到发送更新了的数据至客户机的流程

图 5 显示了使用 memcached 后发生了变化的流程。


图 5. 在使用 memcached 时更新或存储数据
此图显示了拓展了的流程:从更新数据到处理/格式化数据,再到将数据存储在 memcached 内,最后到发送更新了的数据至客户机

比如,仍以博客站点为例,在博客系统更新数据库内的类别列表时,更新应该遵循如下顺序:

  1. 更新数据库内的类别列表
  2. 格式化信息
  3. 将信息存储到 memcached 内
  4. 将信息返回至客户机

memcached 内的存储操作是原子的,所以信息的更新不会让客户机只获得部分数据;它们获得的或者是老版本,或者是新版本。

对于大多数应用程序,这两个操作是您惟一需要注意的。在访问他人使用的数据时,它会自动被添加到这个缓存内,而且如果对该数据进行了更改,此缓存内也会自动进行更新。


键、名称空间和值

memcached 另一个需要重点考虑的因素是如何组织和命名存储在缓存内的这些数据。从之前博客站点的例子中,不难看出需要使用一种一致的命名结构以便您能加载博客类别、历史和其他信息,然后再在加载信息(并更新缓存)时或者在更新数据(同样也要更新缓存)时使用。

使用的何种具体的命名系统特定于应用程序,但通常可以使用一种与现有应用程序类似的结构,并且这种结构很可能基于某种惟一识别符。当从数据库拉出信息或在整理信息集时,就会发生这种情况。

以 blog post 为例,可以在一个具有键 category-list 的项中存储类别列表。与此 post ID 对应的单个 post,比如 blogpost-29 相关的值都可以使用,而该项的注释则可以存储在 blogcomments-29 内,其中 29 就是这个 blog post 的 ID。这样一来, 您就可以将各种各样的信息存储在缓存内,使用不同的前缀来标识这些信息。

memcached 键/值存储的简便性(以及安全性的缺乏)意味着如果您想要在使用同一个 memcached 服务器的同时支持多个应用程序,那么就可以考虑使用其他格式的量词来标识数据属于某种特定的应用程序。比如,可以添加像 blogapp:blogpost-29 这样的应用程序前缀。这些键是没有格式的,所以可以使用任何字符串作为键的名称。

在存储值的方面,应该确保存储在缓存内的信息适合于您的应用程序。比如,对于这个博客系统,您可能想要存储被博客应用程序使用的对象以便格式化博客信息,而不是原始的 HTML。如果同一个基础结构用在应用程序内的多个地方,这一点更具实用性。

大多数语言的接口,包括 Java™、Perl、PHP 等,都能串行化语言对象以便存储在 memcached 内。这就让您可以存储并随后从内存存储恢复全部对象,而不是在您的应用程序内手动重构它们。 很多对象,或它们使用的结构,都基于某种散列或数组结构。对于跨语言的环境,比如在 JSP 环境和 JavaScript 环境间共享相同信息,可以使用一种架构中立的格式,比如 JavaScript Object Notation (JSON) 甚或 XML。


填充并使用 memcached

作为一种开源产品以及一种最初开发用来工作于现有开源环境内的产品,memcached 受大量环境和平台支持。与 memcached 服务器通信的接口有很多,并常常具有针对所有语言的多个实现。参见 参考资料 以获得常用的库和工具箱。

要列出所有受支持的接口和环境不太可能,但它们均支持 memcached 协议提供的基础 API。这些描述已经被简化并应用在不同语言的上下文内,在这些语言中,使用不同的值可指示错误。主要的函数有:

  • get(key) — 从存储了特定键的 memcached 获得信息。 如果键不存在,就返回错误。
  • set(key, value [, expiry]) — 使用缓存内的标识符键存储这个特定的值。如果键已经存在,那么它就会被更新。期满时间的单位为秒,并且如果值小于 30 天 (30*24*60*60),那么就用作相对时间,如果值大于 30 天,那么就用作绝对时间 (epoch)。
  • add(key, value [, expiry]) — 如果键不存在就将这个键添加到缓存内,如果键已经存在就返回错误。如果您想要显式地添加一个新键而又不会因它已经存在而更新它,那么这个函数将十分有用。
  • replace(key, value [, expiry]) — 更新此特定键的值,如果键不存在就返回一个错误。
  • delete(key [, time]) — 从缓存中删除此键/值对。如果您提供一个时间,那么添加具有此键的一个新值就会被阻塞这个特定的时期。超时让您可以确保此值总是可以重新读取自您的数据中心。
  • incr(key [, value]) — 为特定的键增 1 或特定的值。只适用于数值。
  • decr(key [, value]) — 为特定的键减 1 或特定的值,只适用于数值。
  • flush_all — 让缓存内的所有当前条目无效(或到期失效)。

比如,在 Perl 内,基本 set 操作可以如清单 1 所示的那样处理。


清单 1. Perl 内的基本 set 操作

				
use Cache::Memcached;

my $cache = new Cache::Memcached {
'servers' => [
'localhost:11211',
],
};

$cache->set('mykey', 'myvalue');

 

Ruby 内的相同的基本操作如清单 2 所示。


清单 2. Ruby 内的基本 set 操作

				
require 'memcache'
memc = MemCache::new '192.168.0.100:11211'

memc["mykey"] = "myvalue"

 

在两个例子中可以看到相同的基本结构:设置 memcached 服务器,然后分配或设置值。其他的接口也可用,包括适合于 Java 技术的那些接口,让您可以在 WebSphere 应用程序内使用 memcached。memcached 接口类允许将 Java 对象直接序列化到 memcached 以便于存储和加载复杂的结构。当在像 WebSphere 这样的环境内进行部署时,有两个事情非常重要:服务的弹性(在 memcached 不可用时如何做)以及如何提高缓存存储量来改进在使用多个应用程序服务器或在使用像 WebSphere eXtreme Scale 这样的环境时的性能。我们接下来就来看看这两个问题。


弹性和可用性

有关 memcached 最常见的一个问题是:“若缓存不可用了,会发生什么情况呢?”正如之前章节中明示的,缓存内的信息不应该成为信息的的惟一资源。必须要能够从其他位置加载存储在缓存内的数据。

虽然,无法从缓存访问信息将会减缓应用程序的性能,但它不应该阻止应用程序的运转。可能会发生这样几个场景:

  1. 如果 memcached 服务宕掉,应用程序应该回退到从原始数据源加载信息并对信息进行显示所需的格式化。此应用程序还应继续尝试在 memcached 内加载和存储信息。
  2. 一旦 memcached 服务器恢复可用,应用程序就应该自动尝试存储数据。没有必要强制重载已缓存了的数据,可以使用标准的访问来用信息加载和填充缓存。最终,缓存将会被最常用的数据重新填充。

再次重申,memcached 是信息的缓存但并非惟一的数据源。memcached 服务器不可用不应该是应用程序的终结,虽然这意味着在 memcached 服务器恢复正常之前性能会有所降低。实际上,memcached 服务器相对简单,并且虽然不是绝对无故障的,但它的简单性的结果就是它很少会出错。


分配缓存

memcached 服务器只是网络上针对一些键存储值的一个缓存。如果有多台机器,那么很自然地会想要在所有多余机器上设置一个 memcached 的实例来提供一个超大的联网 RAM 缓存存储。

有了这个想法后,还有一种想当然是需要使用某种分配或复制机制来在机器之间复制键/值对。这种方式的问题是如果这么做反而会减少可用的 RAM 缓存,而不是增加。如图 6 所示,可以看出这里有三个应用程序服务器,每个服务器都可以访问一个 memcached 实例。


图 6. 多重 memcached 实例的不正确使用
此图显示了 memcached 的三个独立的 1-GB 实例,支持三个应用程序服务器,各产出 1 GB 的缓存空间

尽管每个 memcached 实例都是 1 GB 的大小(产生 3 GB 的 RAM 缓存),但如果每个应用程序服务器只有其自己的缓存(或者在 memcached 之间存在着数据的复制),那么整个安装也仍只能有 1 GB 的缓存在每个实例间复制。

由于 memcached 通过一个网络接口提供信息,因此单个的客户机可以从它所能访问的任何一个 memcached 实例访问数据。如果数据没有跨每个实例被复制,那么最终在每个应用程序服务器上,就可以有 3 GB 的 RAM 缓存可用,如图 7 所示。


图 7. 多重 memcached 实例的正确使用
此图显示了三个交互的 1-GB memcached 实例,支持三个应用程序服务器,导致总体 3 GB 的共享缓存空间

这个方法的问题是选择哪个服务器来储存键/值对,以及当想要重新获得一个值时,如何决定要与哪个 memcached 服务器对话。问题的解决方案就是忽略复杂的东西,比如查找表,或是寄望 memcached 服务器来为您处理这个过程。而 memcached 客户机则必须要力求简单。

memcached 客户机不必决定此信息,它只需对在存储信息时指定的键使用一个简单的散列算法。当想要从一列 memcached 服务器存储或获取信息时,memcached 客户机就会用一个一致的散列算法从这个键获取一个数值。举个例子,键 mykey 被转换成数值 23875 。是保存还是获取信息无关紧要,这个键将总是被用作惟一标识符来从 memcached 服务器加载,因此在本例中,“mykey” 散列转化后对应的值总是 23875

如果有两个服务器,那么 memcached 客户机将对这个数值进行一个简单的运算(例如,系数)来决定它应将此值存储在第一个还是第二个配置了的 memcached 实例上。

当存储一个值时,客户机会从这个键确定出散列值以及它原来存储在哪个服务器上。当获取一个值时,客户机会从这个键确定出相同的散列值并会选择相同的服务器来获取信息。

如果在每个应用程序服务器上使用的是相同的服务器列表(并且顺序相同),那么当需要保存或检索同一个键时,每个应用程序服务器都将选择同一个 服务器。现在,在这个例子中,有 3GB 的 memcached 空间可以共享,而不是同一个 1 GB 的空间的复制,这就带来了更多的可用缓存,并很有可能会提高有多个用户情况下的应用程序的性能。

这个过程也有其复杂性(比如当一个服务器不可用时会怎样),更多信息,请参见相关文档(参见 参考资料)。


如何能不使用 memcached

尽管 memcached 很简单,但 memcached 实例有时候还是会被不正确地使用。

memcached 不是一个数据库

最常见的 memcached 误用就是把它用作一个数据存储,而不是一个缓存。memcached 的首要目的就是加快数据的响应时间,否则数据从其他数据源构建或恢复需要很长时间。一个典型的例子就是从一个数据库中恢复信息,特别是在信息显示给用户前 需要对信息进行格式化或处理的时候。Memcached 被设计用来将信息存储在内存中以避免每次在数据需要恢复时重复执行相同的任务。

切不可将 memcached 用作运行应用程序所需信息的惟一信息源;数据应总是可以从其他信息源获取。此外,要记住 memcached 只是一个键/值的存储。不能在数据上执行查询,或者对内容进行迭代来提取信息。应该使用它来存储数据块或对象以备批量使用。

不要缓存数据库行或文件

虽然可以使用 memcached 存储加载自数据库的数据行,但这实际上是查询缓存,并且大多数数据库都提供各自的查询缓存的机制。其他的对象,比如文件系统的图像或文件的情况与此相同。很多应用程序和 web 服务器针对此类工作已经有了一些很好的解决方案。

如果在加载和格式化后,使用它来存储全部信息块,就可以从 memcached 获得更多的实用工具和性能上的改善。仍以我们的博客站点为例,存储信息的最佳点是在将博客类别格式化为对象,甚至是在格式化成 HTML 后。博客页面的构造可通过从 memcached 加载各个组件(比如 blog post、category list、post history 等)并将完成的 HTML 写回至客户机实现。

memcached 并不安全

为了确保最佳性能,memcached 并未提供任何形式的安全性,没有身份验证,也没有加密。这意味着对 memcached 服务器的访问应该这么处理:一是通过将它们放到应用程序部署环境相同的私有侧,二是如果安全性是必须的,那么就使用 UNIX® socket 并只允许当前主机上的应用程序访问此 memcached 服务器。

这多少牺牲了一些灵活性和弹性,以及跨网络上的多台机器共享 RAM 缓存的能力,但这是在目前的情况下确保 memcached 数据安全性的惟一一种解决方案。


不要限制自己

除了不应该使用 memcached 实例的情况外,memcached 的灵活性不应忽视。由于 memcached 与应用程序处于相同的架构水平,所以很容易集成并连接到它。并且更改应用程序以便利用 memcached 也并不复杂。此外,由于 memcached 只是一个缓存,所以在出现问题时它不会停止应用程序的执行。如果使用正确的话,它所做的是减轻其余服务器基础设施的负载(减少对数据库和数据源的读操 作),这意味着无需更多的硬件就可以支持更多的客户机。

但请记住,它仅仅是个缓存!


结束语

在本文中,我们了解了 memcached 以及如何最佳地使用它。我们看到了信息如何存储、如何选择合理的键以及如何选择要存储的信息。我们还讨论了所有 memcached 用户都要遇到的一些关键的部署问题,包括多服务器的使用、当 memcached 实例消亡时该怎么做,以及(也许最为重要的)在哪些情况下不能使用 memcached。

作为一种开源的应用程序并且是目的简单而直白的应用程序,memcached 的功能和实用性均来自于这种简单性。通过为信息提供巨大的 RAM 存储空间、让它在网络上可用,然后再让它可通过各种不同的接口和语言访问到,memcached 可被集成到多种多样的安装和环境中。

 

参考资料

学习

获得产品和技术

讨论

关于作者

Martin Brown 成为专业作家已有七年多的时间了。他是题材广泛的众多书籍和文章的作者。他的专业技术涉及各种开发语言和平台 —— Perl、Python、Java™、JavaScript、Basic、Pascal、Modula-2、C、C++、Rebol、Gawk、 Shellscript、Windows、Solaris、Linux®、BeOS、Mac OS/X 等等,还涉及 Web 编程、系统管理和集成。Martin 是 Microsoft® 的主题专家(SME),并且是 ServerWatch.com、LinuxToday.com 和 IBM developerWorks 的定期投稿人,他还是 Computerworld、The Apple Blog 和其他站点的正式博客。您可以通过他的 Web 站点 : http://www.mcslp.com 与他联系。

转自:http://www.ibm.com/developerworks/cn/opensource/os-memcached



本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/articles/2010/12/21/1292901251292.html
posted @ 2010-12-21 11:14 88250 阅读(462) | 评论 (0)编辑 收藏

“比心情更好的是你的选择!”这条挂在“天骄北麓”售楼部房顶上的广告词极其充满诱惑,与之形成鲜明反差的是上百准业主半月来的维权,比其心情更糟的是“天骄北麓”背后“那点房事”。12月18日,位于红云路上的“天骄北麓”在准业主们的不满和遭遇鸡粪洒门中迎来了开盘。

这 场被媒体和市民高度关注的房事,其实是一场赤裸裸的利益纷争,以及一个企业在市场经济下,面对市场风险如何做到诚实守信?对于准业主们来说,需要思考的是 在市场经济下,如何用法律来保障自己的权益。市场经济就是法治经济,道德、诚信这些没有落在纸上具有法律约束力的字眼,在利益面前显得苍白无力。

为防不测,防暴警察也来到现场

昨天上午,“天骄北麓”迎来开盘。由于上百准业主的不满和抗议,让这次开盘显得格外谨慎和受到外界广泛关注。数十警察赶到现场维持秩序,为了防止不测,防暴警察也来到现场。

中 午12点39分左右,准房主们把早已准备好的两箱鸡粪洒在了售楼部的门口。顿时,现场出现了一点骚乱,在旁边维持秩序的警察开始前去阻拦。就在这时,一矿 泉水瓶砸向售楼部大门,站在门口的一名保安拿着警棍朝着准业主们指了指,几个情绪激动的准业主向保安冲去,被维持秩序的警察拦下,在其他保安的劝说下,该 名保安走进了售楼部。

56岁的代阿姨,是这次“天骄北麓”团购房的一名准业主,交了20万元。维权15天以来,代阿姨有着不少的委屈和不满。为了换一套大一点的房子,代阿姨把原来的房子卖了,手里攥着60多万元,本想把这60多万投向“天骄北麓”,买大一点的房子,等待她的却是一场纷争。

“比心情更坏的是花言巧言设下的陷阱,一个没有出口、巷道林立的购房迷宫。”代阿姨说。

说起购买“天骄北麓”的房子,患有高血压的代阿姨苦不堪言,当她7月初从中介公司获知4800元一平方米就可以购买天骄北麓的房子时,义无反顾地交了1.7万元的转让金,并与这家中介公司签下合约。7月10日选房时,她交了20万元。

本以为可以圆一个住房梦的她,每天都在盼着房子开盘,日子就这么一天天过去,代阿姨也没感到有什么烦恼。

当12月1日获知她交了20万元参与团购的“天骄北麓”价格比当初和中介公司签下合约的房价高出一倍时,代阿姨蒙了。自12月4日起,代阿姨和上百团购者开始了维权。由于身体不好,上了年纪,每天的维权之路,代阿姨还是吃不消。

和代阿姨一样的购房者还有来自四川的周女士。周女士交了6万元的购房意向金,结果也陷入了这场纷争。欲哭无泪的周女士昨天上午后悔不已,当初不该草率地卖了房子来购买“天骄北麓”。在这起购房中,还有她的10多个老乡。

“开发商的一小步,维权者的一大步”

在这些准业主提供的协议中,记者没有看到一份真正的购房合同,听到和看到的只是团购、意向金,这些不明不白的词语,让人眼花缭乱。

在“天骄北麓”售楼部,一张由云南伦华房地产有限公司贴出的通告里称,对未选中房子的购房客户,公司愿意现金一次性补偿,以中国人民银行公布的现行两年定期存款率3.25%为计算标准。

对于此,准业主霍先生把其称为“开发商的一小步,维权者的一大步”。霍先生说,在各方压力和他们准业主的努力下,开发商愿意为返还意向金支付利息,来之不易。

代阿姨说,她交了20万元的意向金,可以得到6500多元的利息,对于她来说,这点利息已经对其没有多少用处,因为这几个月来,看着往上涨的房子,她付出去的更多,已经耽误了她买房。

中午12点51分,准业主们开始从售楼部撤离,环卫工人开始打扫门口的鸡粪。下午1点10分左右,“天骄北麓”恢复了暂时的安宁。挂在售楼部西边“所有关于生活的梦想从这一刻开启”的广告词,是否会因为一些准业主们的离开而开启更多准业主们生活的梦想呢?

背景

“天骄北麓”团购风波

2009年11月,由云南伦华房地产有限公司开发的“天骄北麓”项目开始认购,打出的广告上称项目房源最低售价3660元/平米,均价4300元/平米,并承诺如正式开盘时提价,团购房源价格不变,上万的团购者缴纳了2至30万元不等的意向金预订房源。

2010年12月1日,“天骄北麓”项目公布了每套房源价格,均价上调。开发商称所有房源按照公布价格出售,不想买房的,无息返还意向金。

当 准业主们获知这个消息后,犹如五雷轰顶,当初不是说好了3660元到4300元吗?怎么会有这么大的差距呢?一种不满的情绪开始在准业主中蔓延。12月1 日,因开盘价格远远高于已经交了认购金的购房者的心理底线,这些准业主们一气之下砸了售楼部的沙盘模型。12月4日、5日,准业主们聚集售楼部,用番茄鸡 蛋来招呼开发商,表达对开发商行为的不满。

记者秦聪俊(都市时报)

 

转自:http://news.qq.com/a/20101219/001080.htm?qq=0&ADUIN=84588990&ADSESSION=1292750641&ADTAG=CLIENT.QQ.3073_.0

 



本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/articles/2010/12/19/1292773828916.html
posted @ 2010-12-19 23:50 88250 阅读(174) | 评论 (0)编辑 收藏

腾讯微博开放平台API开放啦,使用腾讯微博开放平台提供的API创建自己的应用,需要首先填写个人资料,通过联系邮箱验证,获取开发者资格,就能 创建自己的应用。腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台。广大开发者和用户登录平台后,就可以使用平台 提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整个微博系统中,丰富多样的API接口和应用,加上你的智慧,将创造出无穷的应用和乐趣。

平台使用说明:

腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台。广大开发者和用户登录平台后,就可以使用平台提供的开放 API接口,创建应用从微博系统获取信息,或将新的信息传播到整个微博系统中,丰富多样的API接口和应用,加上你的智慧,将创造出无穷的应用和乐趣!

平台介绍 — 在微博开放平台能获取到的资源及优势

应用开发说明 — 说明如何成为一个开发者并创建应用

应用审核流程 — 审核应用的来源字段能获得的好处,以及如何审核

开发者协议 — 在此查看腾讯微博开放平台开发者服务协议

如何开发微博应用?(马上成为开发者)

你只需要按照如下步骤操作:

第一步:填写你的开发者信息;

第二步:联系邮箱通过验证;(电子邮箱将作为我们联系你的重要方式,请提供常用邮箱地址)

第三步:填写要创建的应用信息。

就能马上获取到微博App Key和App Secret,调用微博API,进行应用开发。 查看详细说明

----

代表着中国最先进的互联网技术的腾讯终于走出了开放的第一步 :-)

转自:http://www.oschina.net/news/13863/tencent-open-micro-blogging-api



本文是使用 B3log Solo简约设计の艺术 进行同步发布的
原文地址:http://88250.b3log.org/tencent-open-micro-blogging-api.html
posted @ 2010-12-17 09:08 88250 阅读(197) | 评论 (0)编辑 收藏

仅列出标题
共9页: 上一页 1 2 3 4 5 6 7 8 9 下一页