Amazon EC2的简易教程

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享

 

 

整个教程主要给大家介绍如何从无到有创建一个EC2的实例,并运行一个普通的Apache Web服务,总共包括三大部分:准备帐号、创建实例和启动服务。

准备帐号

在使用EC2的服务之前,需要准备一个已激活EC2服务的AWS(Amazon Web Service)帐号。整个帐号准备的过程有三个步骤组成:

  1. 在AWS的主站点上注册一个账号。
  2. 通过点击帐号确认信的链接,会进入一个名为“Security Credentials”的页面,在这个页面用户会得到和这个帐号相绑定的密钥对、安全访问密钥以及 x.509 安全证书,这些安全凭证将会在SSH访问和API调用等方面使用到。
  3. 导航到EC2的页面,并点击“Sign Up For Amazon EC2”来激活EC2服务。

  阅读全文»

(1个打分, 平均:5.00 / 5)

历代Windows开机音乐欣赏

(8个打分, 平均:4.88 / 5)

未来十年,移动通信,隐患(3)。

+东亚:日本和中国
几乎无处比现代移动通信技术在亚洲的广泛影响更显而易见。从韩国,移动电话插入一个特殊的用户识别模块(SIM)的芯片有助于控制访问用户的银行的自动柜员机,到日本,现代小说作家使用他们的手机写作,到中国,感谢新闻媒体短信发布,手机现在被认为是“第五媒体的形式”,和互联网,广播,电视和印刷一起作为目前可靠的信息来源。显然,移动通信技术的存在众所周知。
也许这种技术为中心的广泛使用是在日本。乘火车旅行?使用手机支付车费。渴望您最喜爱的饮料,希望最新的铃声或电话申请?只要拉拢一Cmode (“shimo”)自动贩卖机,做出您的选择和挥舞您的手机。想更了解关于您的杂志33页的产品?只要用您的手机相机拍张快速反应(QR)代码照并打印,看手机的浏览器上拉出产品的网页。然后还有Mixi (ミクシィ Mikushī),日本只有邀请超过19万用户的社交网络服务,也需要一个积极的手机号码和网站的访问来取得成员资格。
在中国,短信为王,其中超过4.5亿手机用户平均每月花费490分钟访问蜂窝网络通话和文字,根据中国移动,全球最大的移动运营商。此外,在中国流行的是晶片金融卡,允许用户支付各类商品和使用他们的移动电话服务的移动支付解决方案。

+ 中东
在中东,移动设备主要是围绕手机。智能手机LBS服务(如嵌入式GPS导航)现在在中东很普遍而且在未来会变得更加普遍。如单独的GPS和电子书阅读器的附属“独立”的设备主要是微不足道的。书本的读者基本上是闻所未闻的,因为没有很多阿拉伯书刊或容易下载的书籍。此外,在阿拉伯世界审查有争议的书籍使下载热门PDF文件的互联网论坛成为大多数人为电子图书而去的地方。
最近,经过两年的运行,沙特移动电话运营商Mobily公司表示,它已600,000移动宽带用户,比2008年度最终结果的26.6万用户增长了126%和2008年的第二季度业绩相比增长了445%。使用Mobily公司的移动宽带用户使用三种包月方式的任何一种:1千兆字节(GB),5 GB或无限包连接到互联网。 2009年5月,移动数据的日常消费达到37万亿字节,与2008年年底的18.5万亿字节的日常表现相比消费量增加一倍,让Mobily公司举办地球面临的最繁忙的移动数据网络。
在阿联酋,移动电话市场渗透率分析师预计将在2009年底达到235%和在2010年达到251%,尽管谈到人口的减少、临时外籍社区和强大的多种SIM卡所有权的趋势。这家研究公司国际业务监控的(BMI)的研究报告,题为“阿联酋电信公司2009年第二季度报告”,由Etisalat和Du公布声称阿联酋移动市场截至2008年有979.80万移动用户。这反映了34%的全年经济增长,是今年增加的251.10万新客户。
总的来说,中东地区的移动电话用户已达1.945亿,截至2008年上半年末Al Jawwal以1780万占首位。利比亚的Al Madar Aljadid在所有移动运营商中得到最高的增长率,达到57.1%,仅次于阿联酋的53.3%。

+ 俄罗斯
手机电话在俄罗斯联邦的使用非常普遍,1.41亿总人口中有1.9亿的移动电话订阅服务 —这一渗透率使俄罗斯拥有仅次于美国和的中国第三大用户数量。移动电话的使用是不平衡的,在俄罗斯主要城市:莫斯科和圣彼得堡有22%的订阅。更具体地说,这些订阅的3180万人在莫斯科,1060万在圣彼得堡,即居民人均分别是三个和两个。
俄罗斯采取3G技术比较晚(在2007年底),大多数手机仍然是全球移动通信系统(GSM)设备。因此,需要更高带宽的项目,如音乐和浏览,并不像在已经使用3G比较长时间的其他国家,如美国和中国,那么普遍。因此,手机仍主要是电话、短信和彩信的传送设备。例如,俄罗斯最大的运营商(MTS)只有从价值增值如移动浏览和影音流媒体服务(VAS)得到其收入的13%。
俄罗斯的固定电话还有很远的路要走,许多住宅领域还缺乏固定电话服务。互联网服务也同样是不可用,特别是在农村地区,如果有存在的话,缓慢和相对昂贵的拨号上网服务可能是唯一的选择。为此,俄罗斯人往往认为手机技术是一项建设性的服务,这将有助于在欧洲的俄罗斯、在俄罗斯远东符拉迪沃斯托克,莫斯科和圣彼得堡原有的中心以外的发展。虽然3G的普及率,是迄今为止缓慢,有些人还希望,手机将可以补充一些网络覆盖仍然缺乏的地方。
以前三个国家领导人列出该行业本身是相当稳定,因此,直接调控往往把重点放在这个问题上,如这些组织将允许何种电话。例如,在一段时间内,由于法律强制执行黑莓禁止关注这些设备截取通讯。一个特殊关注的领域是手机银行。俄罗斯现在有比自动取款机更多的手机,而且许多俄罗斯人没有信用卡或借记卡(其中一个原因是电子货币和它们之间的合法用户一样受欢迎)。一些商店已经接受通过电话支付,许多银行提供短信提醒和确认。由于这一领域的发展,政府将不得不确保法规和条例保护并不抑制市场。
除了对发展和管理的传统的政府关注,移动通讯给俄罗斯政府带来了为数不多的外交挑战。从一个侧面,它们是有用的工具,直线扩展到乌克兰和亚美尼亚,同时MTS进入和白俄罗斯的初级合作伙伴关系,所有项目为这些前苏联国家增加了连接。例如,MegaFon公司在塔吉克斯坦,乌兹别克斯坦和伊朗也很活跃。
在另一个“有问题”的国家格鲁吉亚而且特别在南奥塞梯MegaFon是活跃的。这种情况导致了其在俄罗斯和格鲁吉亚之间在目前的冲突地区的参与,并给予格鲁吉亚一个契机来进一步抱怨俄罗斯的参与,同时加强其在南奥塞梯的领土要求。
在俄罗斯内丑闻也困扰着MegaFon。另外两家公司,电信,和投资百慕达的姊妹公司,IPOC国际成长基金,拥有MegaFon的39 %。虽然丹麦的律师Jeffrey Peter Galmond是官方所有者而且声称已经对这些公司的全面控制,美国司法部认为,他和这些公司作为俄罗斯前电信部长Leonid Reiman做幌子。 Galmond原先拥有的MegaFon公司的额外股份,目前由俄罗斯寡头Mikhail Fridman的阿尔法集团所有。除了在MegaFon公司的25.1%股份,阿尔法集团拥有44%的Vimpelcom公司,目前涉及与挪威的移动电话公司Telenor公司的商业纠纷。

待续

(没有打分)

龙芯的抱负。。。

(1个打分, 平均:5.00 / 5)

2025年的互联网 。思科的Vision

【陈怀临注:这就是Cisco的厉害和值得尊敬之处。开放的精神;主动引导市场。。。文章主要是围绕如下5个方面来阐述。我个人对第5点最关注。。。】
1. Most growth in the Internet-related market will have occurred outside of today’s high income, or “advanced,”economies.
2. Global governance of the Internet will remain substantially unchanged.
3. “Digital natives” will relate to the Internet in markedly different waysthan earlier generations.
4. Today’s keyboard will not be the primary interface with the Internet.
5. Consumers will pay for Internet connectivity in a much wider range of ways.】

(没有打分)

微软必应正式收编雅虎搜索 成全球第二大搜索

转自http://tech.qq.com/a/20100825/000463.htm
北京时间8月25日消息,据国外媒体报道,根据微软公司官方博客发布内容显示,微软已经将雅虎后台搜索引擎并入必应(Bing)搜索。根据双方去年签署的协议,雅虎将负责两家公司优质搜索广告的全球销售运营业务,而微软必应则承担为雅虎公司提供后台搜索业务。

雅虎搜索产品部门高级副总裁萨特亚·纳德拉(Satya Nadella)当地时间周二发表博客文章称:“我很高兴地宣布,在美国、加拿大的英文版雅虎搜索都已经全部由必应驱动,并且已经开始了AdCenter迁移,有望在今秋完成 AdCenter 客户的迁移。根据 Nadella发表的博客,其他语言的雅虎搜索将在接下来几周或几个月里由 Bing 驱动。

微软公司高管们先前就表示过希望在今年年底前完成双方此前达成协议的最主要部分,其中就包括将雅虎广告和出版业务转移到微软AdCenter平台上。用户使用雅虎搜索时,在雅虎搜索页面的底下将显示“由必应驱动“(powered by Bing)的字样。

纳德拉在博客中写道:“正如我们一直承诺的一样,2010年我们将特别关注假期广告营销,我们的首要目标还是为广告客户提供高质量的广告宣传体验。”

协议的另一方雅虎公司高管们重申,尽管必应搜索已接管雅虎的后台搜索业务,但雅虎网站的核心业务仍将保持强势增长。在过去的一年里,为了留住和吸引用户,雅虎针对其核心业务相继推出了数个新增功能。

雅虎上周就表示,该公司已经开始将搜索服务转向微软的技术。雅虎和微软希望联手挑战谷歌在互联网搜索领域的霸主地位。两家公司希望更多的互联网搜索用户能推动广告价格上涨。雅虎能降低与互联网搜索后台业务相关的成本,微软可以扩大在搜索广告市场的存在。

从理论上分析,双方达成的协议将有助于雅虎将更多的自身资源投入到搜索业务以外的领域,而同时微软也提高了在搜索引擎的市场份额,而新获得的用户数据则使必应能够更好地与谷歌展开竞争。根据数据分析公司Experian Hitwise最近公布的数据显示,7月份必应在美国的市场份额为9.86%,落后于雅虎的14.43%,而谷歌的市场份额则高达71.43%

合并雅虎的搜索市场份额后,必应将有可能会接近达到30%的美国搜索市场份额。然而,争夺谷歌的搜索市场份额可能会令微软公司颇费一番力气。一位分析人士指出,必应的发展将会趋于平稳。

华尔街著名投行Jefferies&Co.的分析师尤瑟夫斯夸利(Youssef Squali)表示:“必应7月的搜索市场份额与6月份持平,并且比3月份少了60个基准点,表明必应的发展势头可能放缓。不过,加上雅虎的市场份额,必应肯定会成为继谷歌之后全球第二大搜索引擎。”

(没有打分)

郎咸平谈中美慈善差异

(3个打分, 平均:3.33 / 5)

Discuz! 也要打上QQ的标签了。。。

腾讯正式宣布收购康盛创想 原有团队保持不变

8月23日下午消息,腾讯与康盛创想今日下午联合宣布,双方达成收购协议,康盛创想将成为腾讯的全资子公司,具体交易将在近期完成。

此外,包括戴志康在内的所有康盛创想创始人、管理团队以及员工将继续在原岗位上保持不变。

以下为公告全文:

2010年8月23日,中国服务用户最多的互联网企业腾讯公司和中国最大的社区软件平台及服务提供商康盛创想(Comsenz)联合宣布,双方已达成收购协议,康盛创想将成为腾讯的全资子公司,具体交易将在近期完成。

作为中国最专业的社区软件平台开发商之一,康盛创想旗下的Discuz!是全球范围内用户量最大、覆盖面最广的社区软件平台,拥有超过140万家网站用户,也是企业和网站主首选的社区与网站建设平台。在Alexa中国排名前1500家网站中,超过70%的网站选择第三方社区平台时采用了 Discuz!的解决方案。

本次交易完成后,康盛创想将保持免费、开源和开放的产品策略不变、对客户和用户的服务承诺不变,并持续加大对技术开发、产品运营和用户服务方面的投入。同时,腾讯将利用自身资金、技术和用户方面的优势,为网站主提供更多有竞争力的产品、服务。康盛创想正在紧张筹备Discuz!新产品的测试和发布工作,并开始着手进行QQ账号与社区账号互通的可行性研究。包括戴志康在内的所有康盛创想创始人、管理团队以及员工将继续在原岗位上保持不变。

康盛创想创始人兼CEO戴志康表示:“作为互联网社区行业的从业者,我们非常高兴与中国拥有最多互联网用户的企业——腾讯合作,在完全尊重网站主和用户自主选择的大前提下,帮助中小网站创造更佳的用户体验。我们的团队、我们经营了9年的产品和服务‘Discuz!’将会在新的舞台和起点上,为互联网社区的发展,进一步贡献自己的力量”。
腾讯公司执行副总裁吴宵光表示:“我们很高兴与康盛创想联姻,这是腾讯执行开放与合作战略的重要一步。互联网产业链是由行业内拥有独特优势的众多合作伙伴所共同建立的,面对广大用户多样化的需求,开放平台与合作伙伴共赢将是腾讯未来重要的公司战略。康盛创想拥有国内最多的社区站长用户群体,他们为广大的互联网用户提供着丰富多彩的互联网生活服务,我们希望未来能进一步发挥双方优势,让广大中国的中小网站和站长群体可以借助腾讯的用户、技术和资金实力创造更佳的用户体验。”

相关阅读:此摘自21世纪经济报道

道康盛创想,腾讯与阿里巴巴即将在草根网站争夺战中展开激烈的正面交锋。

康盛创想,以为中国上百万家中小网站提供建站工具,在业界享有较高声誉。今年6月,当“腾讯将收购康盛创想”消息一经传出,便在互联网圈引起高度关注。

业内人士都认为,借助康盛创想的技术实力和品牌影响力,腾讯不仅将在草根网站中改善独霸形象,还将通过业务合作,将触角延伸到未来极具发展潜力的地方网站和垂直社区等领域。

然而,这则消息一再被康盛创想高层否认,腾讯也无相关公告。

直到两个多月后,这则消息再次被确认。8月23日,根据域名注册信息中心相关信息显示,康盛创想所属的comsenz.com、discuz.net等域名,以及公司名称已经全部过户至腾讯。

至此,“腾讯收购康盛创想”接近尘埃落定。

康盛创想的收购价值

“获悉‘腾讯收购康盛创想’的消息后,公司大部分人都比较乐观、支持,觉得这是一件好事。”8月23日,康盛创想内部人士告诉记者。

康盛创想成立于2001年,其创始人戴志康(博客)曾被誉为中国互联网圈的“80后创业样本”。康盛创想成立至今,先后获得天使投资人周鸿祎、红杉资本、晨兴创投以及谷歌等多家基金及企业投资。

作为中国影响力最大的社区平台与服务提供商,康盛创想曾一度觊觎独立上市。然而,自从2008年5月,其竞争对手杭州德天信息科技公司(以下简称“phpwind公司”)被阿里巴巴集团收购后,在马云不计成本的投入下,康盛创想开始面临巨大市场压力。

腾讯出资收购康盛创想,被视为后者除独立上市之外,另一条可持续发展道路。

记者采访获悉,自六月份以来,虽然康盛创想CEO戴志康一直以“业界炒作为由”否认这则消息,但康盛创想已暗中为未来业务做出准备。

“康盛创想最早筹备的一项业务是团购。”该人士告诉记者,“康盛创想做团购非常容易,只要开发个插件就行,技术上没有任何障碍。”因此,康盛创想曾计划于8月20日推出团购网站,但最终由于公司骨干过于年轻,同时也都是技术人员、缺乏对市场的全局把握,选择放弃。

周鸿祎亦认为:“康盛创想是一家技术服务的平台,其最大的优势是提供工具。同时,团购是难以一家独大的业务模式,需要提供的是地域化的体验服务。因此,由康盛创想为广大团购网站提供技术服务,更为合适。”

目前,康盛创想拥有200多名员工,提供的服务除了建站工具外,还包括相关社区营销平台和游戏运营平台等服务。知情人士告诉记者,“游戏运营平台是康盛创想正在崛起的业务,每天大约有超过10万元收入。”此外,戴志康日前对本报记者透露,康盛创想去年年收入已经达到5000万元。

但康盛创想被腾讯收购后,这些业务将做何调整,尚是个未知数。这在一定程度上了影响了员工正常的工作状态。“销售部门已经停止,其它部门也基本处于不干活状态。”该人士告诉记者,“未来康盛创想的业务、人员也将合并到腾讯,这可能会带来大裁员,这也是康盛创想员工最担心的问题。”

记者致电戴志康,其手机一直处于无法接通的状态。业界相关人士告诉记者,“由于康盛创想与腾讯达成合作时,签订了保密协议,因此,康盛创想高层不便主动对外发布相关信息。”此外,未经确认的消息是,腾讯大约出资3000万美元,全资收购康盛创想。

但可明确的是,收购完成后,康盛创想将在多个业务领域与腾讯合作,其中最重要的是,将腾讯的财付通业务与中小网站进行对接。知情人士告诉记者,未来的地方社区和垂直网站潜力很大,恰巧康盛创想的很多业务都可以和财付通进行合作。“这才是腾讯要收购康盛创想最重要的目的。”

马化腾对垒马云

地方社区和垂直网站正成为冉冉升起的新星,已被越来越多大型互联网公司所关注。

全国性网站虽然具有很大的流量,但这些流量很难都被转化为实际收益。而地方社区和垂直网站若能明确主要的用户群,针对这个群提供完善、互动、参与的服务,其能量不可小觑。这一未来发展前景已经被阿里巴巴集团、腾讯和百度等多家企业看好。

因此,早在2008年5月,阿里巴巴集团主席马云已斥资收购通用型建站软件和服务提供商phpwind公司,并不惜重金与康盛创想在市场展开激烈角逐。

phpwind成立于2002年9月,至今累计已有超过60万网站使用phpwind,覆盖了52类行业。在被阿里集团收入囊中后,通过与淘宝开放平台的打通与对接,陆续发布“淘满意”平台和“淘链接”产品,意在通过电子商务合作为社区带来更多收入。

本月初,phpwind公司推出新版建站工具phpwind8,其目标除延续打造“社区门户”概念外,关键就是全面满足中小网站的“商业运营需求”。phpwind公司副总裁肖睿哲表示,“在这一新平台上,中小网站将有越来越浓厚的电子商务氛围,增收前景可观。”

据肖睿哲介绍,这些建站工具全部是免费向用户提供。“马云对我们的要求就是,先做好产品,不用考虑盈利。”另据知情人士透露,phpwind在市场推广上,除免费策略之外,甚至还动用“银弹策略”,不惜贴金为客户服务使用其产品。目前,这项不计成本的投入,已对康盛创想构成巨大压力。

腾讯收购康盛创想后,有望助力后者在市场上与phpwind展开更强劲的竞争。与此同时,腾讯也将通过财付通工具,更深渗透到地方社区和垂直网站。

“此前,腾讯有个原则,年利润低于1000万元的业务不做,这使得腾讯在地方社区和垂直网站领域的实力落后于阿里巴巴集团。”知情人士说,“但凭借着康盛创想在中小网站的影响力,以及财付通这个工具,腾讯较为迅速切入电子商务这块市场,并能够帮助拍拍摆脱像易趣、百度有啊这样尴尬的局面。”未来马云和马化腾的两“马”交锋,将会更直接体现在支付宝和财付通的竞争。 

除此之外,业界普遍认为,腾讯收购康盛创想还将带来诸多获益。

据中国互联网络信息中心(CNNIC)显示,截至去年年底,中国境内注册的网站总数达323万,其中中小网站占据99%的席位。通过收购康盛创想,腾讯能够影响到遍及全国300多万家社区网站的一半市场,通过这些社区网站的精准营销,对于未来扩大广告市场具有重要的战略意义。

此外,通过收购康盛创想,腾讯QQ号码与论坛ID等捆绑,也无疑将大大增加腾讯产品的粘性。另由于康盛创想在一定程度上引领着国内中小网站的技术发展趋势。业界认为,腾讯也有望结合其资金、人才优势,开拓出更多空间。

(1个打分, 平均:5.00 / 5)

黄光裕从穷小子到中国首富再到阶下囚

【陈怀临注:风流皆为屠狗辈;打工都是读书人。。。】

(5个打分, 平均:2.60 / 5)

Google App Engine 的简易教程

 

本文将通过一个简单的例子,来介绍大家如何创建一个简单App Engine程序,首先,给大家介绍一下Google App Engine。

 

Google App Engine的介绍

Google App Engine 提供一整套开发组件来让用户轻松地在本地构建和调试网络应用,之后能让用户在Google强大的基础设施上部署和运行网络应用程序,并自动根据应用所承受的负载来对应用进行扩展,并免去用户对应用和服务器等的维护工作。同时提供大量的免费额度和灵活的资费标准。在开发语言方面,现支持Java和Python这两种语言,并为这两种语言提供基本相同的功能和API。

 

例子

这个例子非常简单,就是提交一个关于blog的表格,并将这个表格存储到App Engine的Datastore中。如果大家对源代码感兴趣,可以通过这个地址下载。本文将主要关注Python版App Engine,Java版App Engine不在本文的讨论之列。

 

搭建环境

主要有下面三个步骤,其中第三步为可选:

  1. 安装Python的最新稳定版的运行时(Runtime),下载地址。有三个注意点:其一,Linux系统应该自带Python;其二,在Windows上安装好Python之后,需要在系统Path上加入Python的目录;其三,App Engine上应用服务器版本为2.6.5,所以请不要在项目在加入Python 2.6.5版之后引入的特性。
  2. 安装App Engine的SDK,下载地址。有两点需要注意:其一在Windows上安装好App Engine的SDK之后,也需要在系统Path上加入SDK的目录;其二是在Linux上,无需安装App Engine的SDK,只需将其解压缩,并放置在合适的目录即可。
  3. 安装Eclipse和Pydev插件,这步对那些只是想尝试一下App Engine的读者而言,是可选的,但是由于Eclipse成熟的开发环境,在加上Pydev自带的代码加色、自动提示和强大的调试,并且Pydev更是在其1.4.6版上加入了完整地对Google App Engine的支持,所以对那些准备开发App Engine程序的读者而言,则是必须的,如果想了解进一步信息,请点击

虽然如果不熟悉Python,并不会影响大家对本文的理解,但是如果大家想深入学习Python的话,可以点击来阅读《Dive Into Python》的中文版。还有,我个人推荐大家使用Linux作为App Engine的开发平台,因为自带很多工具和完善的命令行。

 

初始化项目

App Engine SDK自带一个名为“new_project_template”的项目模板,在项目样板里面共有三个文件:

  1. app.yaml:这个文件是整个项目的配置文件,比较类似Java Web项目中的web.xml文件。
  2. main.py:这个Python脚本是App Engine的“Hello World”文件,主要是演示如何处理最基本的Web请求。
  3. index.yaml:这个文件里面设定项目所创建的数据模型的索引,要注意的是,这个文件一般由App Engine系统自动维护,当App Engine调试或者部署应用的时候,其会分析应用所包含数据模型,来确定需不需给数据添加新的索引。

我们可以通过复制这个项目模板来初始化项目,接下来,将逐步编辑和创建各个文件,其中第一个被编辑的是app.yaml。

 

编辑app.yaml

就像上面提到的那样,app.yaml是整个项目的核心配置文件,其后缀“yaml”表示这个文件是基于yaml语言,而yaml是可读性非常强的数据序列化语言,和XML相比,其可读性更好,而且支持丰富的数据类型。下面是例子中已经编辑好的app.yaml。

application: sample

version: 1

runtime: python

api_version: 1

handlers:

- url: /.*

  script: main.py

代码1. app,yaml

在app.yaml中主要可以配置下面这些参数:

  1. 应用名:对应的位置是“application”,其是用来设置整个项目的名字,在本地调试时,项目名可以是任意的字符串,但当部署这个项目到云端App Engine平台时,需求确保应用名和之前在App Engine管理界面上新建的应用名一致,所以这时应用名需要是全App Engine唯一的,不能与其他人创建的项目的名字有冲突。
  2. 项目版本号:对应的位置是“version”,用来配置应用的版本号,可以通过它来对应用进行版本管理。由于本例是新创建的,所以其版本号是1。
  3. 运行时:对应的位置是“runtime”,用来设定项目的开发语言,现有的项目有Python和Java两种开发语言可供选择,由于本例是使用python的,所以在此填入“python” 。
  4. API版本号:对应的位置是“api_version”,指的是使用的App Engine API的版本号,目前为1。
  5. 处理Web请求的类:对应的位置是“handlers”,这部分配置了URL和Python脚本之间对应的关系,意味着,当App Engine收到一个Web请求时,它会根据其URL来调用相应的脚本,在上面这个例子中,当URL为“/.*“的情况下,会调用main.py来处理。

 

创建HTML文件

下面是index.html的代码:

<html>

<head>

       <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>

       <title>App Engine Demo</title>

</head>

<body>

      <form method="POST" action="/">

              文章名: <input type="text" name="title" size=30 /><br>

              关键字: <input type="text" name="tags" size=30 /><br>

              内容:  &nbsp;&nbsp;<textarea name="content" cols="30" rows="5"></textarea><br>

              <br>

              <input type="submit" name="submit" value="提交">

      </form>

</body>

</html>

代码2. index.html

这是例子对应的HTML页面,其主要由两个文本框和一个Textarea组成,来让用户输入Blog的文章名、关键字和内容,当用户输入完这三个数据之后,通过点击”提交“按钮,来将刚输入的数据Post给后台的服务器端,并由与URL”/“对应的Python脚本来进行处理,也就是上面的”main.py“

 

编写数据库代码

在讲解例子的数据库代码之前,先给大家介绍一下App Engine的实体模型和数据类型。

实体模型

App Engine主要数据模型被称为”实体模型“,一个实体由一个主键和一组属性组成,实体的模型是通过继承Model类来实现,而且每个属性可在多个数据类型中进行选择。

数据类型

主要的基本数据类型有字符串(String)、基于字节的字符串(ByteString)、布尔(Boolean)、整数(Integer)、浮点(Float)、日期时间(DateTime)、列表(List)、字符串列表(StringList)、文本(Text)、二进制块(Blob)和用于表示实体之间关系的参考类型(Reference)。

除了基本的数据类型之外,用户还可以通过继承Expando类来自定义一个新的数据类型。

Blog表的结构

下面这个表是关于例子中所用的Blog表的结构:

属性名 类型
title String(字符串)
tags StringList(字符串列表)
content Text(文本)

表1. Blog表的结构

Blog表共有三个字段,分别是字符串类型的title属性、字符串列表类型的tags属性和文本类型的content属性,下面是创建Blog表的blogdb.py脚本的代码。

from google.appengine.ext import db

class Blog(db.Model):

    title = db.StringProperty()

    tags = db.StringListProperty()

    content = db.TextProperty()

   def save(self, _title, _tags, _content):

        blog = Blog()

        blog.title = _title

        blog.content = _content

        if _tags:

           blog.tags = _tags.split(" ")

        else:

           blog.tags = []

        blog.put()

代码3. blogdb.py

这个脚本主要有两部分构成;其一是通过继承db.Model这个类来创建Blog这个实体模型,并声明title、tags和content这三个属性;其二是定义一个名为“save”的方法,在这个方法内,首先是创建一个新的Blog实体,之后将输入的_title、_tags和_content这三个参数插入到这个新创建的Blog实体中,并使用这个实体的put方法来在数据库中保存这个实体,其它类可以通过调用Blog类中的这个save方法来存储和Blog相关的数据。

 

添加Web处理方法

在这个例子中,需要添加用于处理两个Web请求的代码:其一是用于显示index.html的代码,也就是用于处理访问URL“/”的GET请求;其二是保存用户在index.html上输入的Blog数据,也就是用于处理访问URL“/”的POST请求,下面是添加上面两个逻辑之后main.py的代码:

from google.appengine.ext import webapp

from google.appengine.ext.webapp.util import run_wsgi_app

from google.appengine.ext.webapp import template

import os

import cgi

from blogdb import Blog

from google.appengine.ext import db

class Main(webapp.RequestHandler):

    def get(self):

        path = os.path.join(os.path.dirname(__file__), ‘index.html’)

        self.response.out.write(template.render(path, []))

    def post(self):

        _title = cgi.escape(self.request.get(‘title’))

        _tags = cgi.escape(self.request.get(‘tags’))

        _content = cgi.escape(self.request.get(‘content’))

        blog = Blog()

        blog.save(_title, _tags, _content)

        self.response.out.write(‘Save Successfully’)

application = webapp.WSGIApplication([('/', Main)], debug=True)

def main():

    run_wsgi_app(application)

if __name__ == "__main__":

    main()

代码4. main.py

从上到下,main.py的代码可分为三个部分:

  1. Get方法:这个方法主要通过python os模块的方法来读取index.html,并将读取好的index.html这个文件的数据通过HTTP Response流来发送给浏览器端,这样会在客户的浏览器上显示index.html。
  2. Post方法:这个方法会从输入的HTTP Request流中获取title、tags和content的输入数据,并调用Blog这个实体模型的save方面来保存,之后,将返回“Save Successfully“的消息给客户端。
  3. 注册Main类:在代码中通过初始化webapp.WSGIApplication这个类,来将Main这个类和URL”/“对应,比如,客户端发送Get请求给URL”/“,系统会调用Main类的Get的方法来处理这个请求,需要注意的是,在这里设定URL和类的对应关系是在app,yaml中的设定之后的进一步设置。

代码部分已结束,下面将介绍如何测试和部署这个项目。

 

测试和部署

主要有下面三步:

本地测试

通过调用SDK中dev_appserver.py脚本来启动本地的开发环境,具体命令格式为”dev_appserver.py sample“,在这里“sample”指代的是项目的名字,如果有Pydev这个插件,可以在Eclipse上启动本地开发环境的调试模式。在环境启动成功之后,可通过http://localhost:8080这个URL来测试这个项目的基本功能。

创建应用

app engine app1

图1.  My Applications

在App Engine的管理界面(https://appengine.google.com/)里面的“My Applications”上点击“Create An Application“这个按钮来进入”Create an Application“的界面。

app engine app2

图2. Create an Application

之后在”Create an Application“这个界面中,在”Applcation Identifier“这个文本框中输入应用的名字或者ID(必须是全App Engine唯一的),在”Application Title“的文本框中输入应用的全称,之后点击”Create Applcation“这个按钮在App Engine上创建这个应用。

发布应用

使用SDK中appcfg.py这个脚本将应用部署到App Engine这个平台上,具体命令格式为”appcfg.py update sample/“,在这里“sample/”代表项目所在的目录,部署之后,可以通过App Engine的管理界面来访问和管理应用。

 

参考资料:

  1. YAML 简介
(4个打分, 平均:3.75 / 5)