V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  keakon  ›  全部回复第 52 页 / 共 53 页
回复总数  1042
1 ... 44  45  46  47  48  49  50  51  52  53  
2010-11-17 20:15:17 +08:00
回复了 FRHong 创建的主题 Project Babel 默认头像 - bug?
2010-11-17 20:05:31 +08:00
回复了 Livid 创建的主题 Google App Engine 关于 dev_server 的 datastore 保留问题
不建议使用SQLite,存在很多bug(可以去GAE的Google Code搜索issue),例如cursor就被无视掉了。

而且有次我试过一个包含1万条实体的模型,从里面fetch 5条,原方式大概2~5秒,SQLite超过3分钟…
2010-11-17 19:57:51 +08:00
回复了 keakon 创建的主题 Project Babel 稍微提几个可改进之处
@c
这样就不得不多占用存储空间了。而且正如前面所说,假如你的实体生成以后,突然发现slug里有错别字,不得不更改,你就只能删掉重新创建一个实体了。而如果这个实体还是根实体的话,整个实体组可能都得重新创建。

@darasion
在构造实体(准确来说是它的key)时可以指定一个实体为它的父实体。而且这个实体也可以作为其他实体的父实体。
由于一个实体最多只能有1个父实体(但是可以有多个子实体),所以一直向上总能找到一个没有父实体的实体,它就是这个实体组的根实体。
在单个事务中,你只能更改1个实体组里面的实体。

举例来说,如果把Reply的父实体定为Topic的话,用户在post一个reply时,就能在事务中完成创建Reply实体并将它的父实体Topic的reply字段加1。
而如果它们不在一个实体组,你就只能先put一个Reply实体,然后再找到对应的Topic实体,再给它的reply+1。而如果你Reply实体put成功,Topic实体put失败,那么就存在不一致了。
Google给出的方式是分离事务,也就是用一个task来执行Topic的保存,因为task在失败时会自动重试,直到成功。

更常见的例子,如果不使用事务的可能造成这种情况:
1.一个用户a的访问使得你得给Topic的hit加1,于是你取出了这个topic。
2.同时,另一个用户b也要编辑这个Topic的content字段,于是也取出了这个topic
3.b编辑完了,保存成功。
4.a的hit += 1执行完了,也进行保存,但是这个topic的content字段是a取出来时的内容,于是这次保存就让b的编辑无效了。

而单个实体本身就是一个实体组,因此自然可以使用事务,它就可以保证2个人取出数据到保存成功这个过程是串行的,相互之间不会覆盖。
2010-11-17 19:29:46 +08:00
回复了 keakon 创建的主题 Project Babel 稍微提几个可改进之处
只能说效率几乎是一样的,但是key_name生成的key比较大,因此实体及其索引(每个索引都包含key)也会多占用一些空间

此外key只能get,在query时基本上没什么用处,所以如果想取key name是'1'开头的实体就很难了,至少文档里没有介绍__key__比较是否能用于这种情况
2010-11-17 19:19:32 +08:00
回复了 keakon 创建的主题 Project Babel 稍微提几个可改进之处
@c 不一样,你用get_by_id()和get_by_key_name()取一下就会发现,1和'1'都可以存在,并且表示的是2个不同的实体。

此外用key_name构造的key会比id要大,且随key_name长度而增长,而id是定长的int64。

实际上我习惯用key_name来减少一个唯一字段,找不到这种字段时,我才会用id

例如用户类,id对我来说没有任何作用,那么我就会拿用户名或email这种唯一字段来做key_name;而文章类虽说可以强制要求URL唯一,但URL是有可能去改动的,所以仍然只能选择id
2010-11-17 18:55:56 +08:00
回复了 keakon 创建的主题 Project Babel 稍微提几个可改进之处
@Livid

key id可以自定义,例如构造一个Topic实体,id为123:
Topic(key=db.Key.from_path('Topic', 123))

不过,非要以1递增不知道有什么用意,似乎排序时不需要按id来排列,都是以时间来排序的

不使用事务或加双重锁的话,2个人同时post 2个topic时,很可能会覆盖掉其中一个
2010-11-16 22:36:37 +08:00
回复了 reorx 创建的主题 Google [ Gmail ]filter过滤多个关键词,关系为"or"而不是"and"
说个简单的方法,创建2个filter

Matches: to:([email protected])
Do this: Apply label "zqtech"

Matches: to:([email protected])
Do this: Apply label "zqtech"

然后访问zqtech标签
2010-11-15 23:59:19 +08:00
回复了 napoleonu 创建的主题 Google Chrome地址栏不显示"http://"之后应该再不显示"www."
我只想说删掉http都让我很恼火了,想复制域名时,自动就把http带上了,还得手动去删

想把http改成https还得敲https://,你就不能只让我敲s么?
2010-11-14 12:44:31 +08:00
回复了 chone 创建的主题 问与答 appengine直接绑定域名国内是不是不能访问?
目前有3个IP可以直接访问(限电信,联通上周末挂了),还有3个免费反向代理

多搜索下ghs什么的就知道了
2010-11-13 21:45:23 +08:00
回复了 xhacker 创建的主题 问与答 求推荐一本 C++ 入门书……
新手的话推荐这2本:
You Can Do It!——C++编程新手互动教程
Accelerated C++

经典的书别去看,篇幅太长是学不进去的,纯粹就是当手册翻翻语法而已
2010-11-13 14:38:00 +08:00
回复了 darktiny 创建的主题 Google App Engine GAE上的博客系统
@xinzhi
写程序是要有重心的啊,我不可能像CPU一样分时完成所有功能,也不可能像居委会大妈一样每天有48个小时写程序。
对我来说访客是最重要的,因此优先完善前台。后台的主题还在制作中,估计这2天就能做完。
2010-11-13 13:19:09 +08:00
回复了 darktiny 创建的主题 Google App Engine GAE上的博客系统
https://bitbucket.org/keakon/doodle
演示已经不是最新版了,不过对游客来说差异不大,只是少了些特效而已
2010-11-13 13:17:17 +08:00
回复了 notmaybe 创建的主题 DNS 建议V2EX DNS 增加一项功能
@est
这个问题解决后,这个dns就在墙外了
2010-11-13 05:30:31 +08:00
回复了 TookiQ 创建的主题 Python 诚征 Windows 平台 Python 开发环境
PyCharm +∞

可惜1.0比测试版多了几个bug,而且是收费的
2010-11-12 19:43:17 +08:00
回复了 ooof 创建的主题 Project Babel 2.4 升级 出错提示 app.yaml", line 169, column 1
很明显是你自己的问题…

builtins是1.3.8新增的功能,你GAE SDK版本太低了
2010-11-08 22:50:54 +08:00
回复了 billychow 创建的主题 Google App Engine 关于 Datastore 的一个限制
数据量不大的话,全部取出来自己在内存里排序吧

我是基本上不用不等于操作和排序,这样就不需要建复合索引了
2010-11-08 20:51:23 +08:00
回复了 hisky 创建的主题 Google App Engine 比较奇怪v2ex.appspot.com怎么申请下来的
08年刚发布时,有几个月是不限制的
2010-11-06 18:22:05 +08:00
回复了 kim 创建的主题 问与答 用如何的方式学来好一门计算机语言
对我来说,看完这篇《悟透JavaScript》就弄懂它了。之后只是让它去操作DOM,更改CSS什么的而已。
http://www.cnblogs.com/leadzen/archive/2008/02/25/1073404.html
因为Chrome限制了字体最小为12px,你用开发者工具加上这条css,就会发现变成11px了:
-webkit-text-size-adjust:none;
2010-11-01 16:51:43 +08:00
回复了 Livid 创建的主题 Project Babel 关于多语言版本
习惯zh-cn的原因是浏览器认得,例如Firefox:Accept-Language: en-us,zh-cn;q=0.7,en;q=0.3

这样我就无需处理转换问题了:
for lang in langs:
if request.accept_language.lower().find(lang)
return lang

否则还得维护一个langdict,再return langdict[lang]
1 ... 44  45  46  47  48  49  50  51  52  53  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2827 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 11:44 · PVG 19:44 · LAX 04:44 · JFK 07:44
Developed with CodeLauncher
♥ Do have faith in what you're doing.