The high-level summary and complete transcript of the February 3rd
edition of the IRC office hours is pasted below. Please join us on the
first and third Wednesday of every month in the #appengine channel on
irc.freenode.net. On the first Wednesday, we meet in the channel from
7:00-8:00 p.m. PST (evening hours), and on the third Wednesday, we're
available from 9:00-10:00 a.m. PST (morning hours).

- Jason

--SUMMARY-----------------------------------------------------------
- Most of the chat took place in another IRC channel because the usual
channel was closed to unregistered users. As a result, the chat
started later than usual. The next chats should take place in the
regular channel: #appengine on irc.freenode.net. If you can't post,
please register your nick by following the instructions at
http://freenode.net/faq.shtml#registering. [7:12-7:15]

- Discussion on datastore cursors, a premiere feature of the 1.3.1
release, which enable developers to work with result sets larger than
1,000. [7:16-7:22]

- Q: As a developer of an app allowing users to upload content, what
level of policing should I do to make sure the uploaded content does
not violate App Engine's terms of service? A: You should not encourage
or openly permit content in violation of the terms of service. This
means that should you spot such content, you take care to remove it,
and you also take care to do the same if a member of the App Engine
team contacts you about any violations. For this type of violation, we
will reach out to you first to give you an opportunity to remove the
content before taking your application offline. [7:22-7:25, 7:27]

- Q: Are there any plans to allow for larger URL fetch requests, up to
5+ MB? A: No plans at present, but please star this issue if you're
interested: http://code.google.com/p/googleappengine/issues/detail?id=2735.
It's possible that we could implement this feature similar to the way
we increased the maximum image data size that could be operated on via
the image service functions: by allowing blob keys to be passed rather
than the raw data directly. Another idea is making the URL fetch
service work with a callback, similar to blobstore. [7:25-7:29,
7:31-7:33, 7:39]

- If multiple writes occur in a single transaction, they must be
processed sequentially. This is because a transaction can only apply
to entities in the same entity group, and an entity group cannot be
updated while another update is taking place. Use entity groups only
when necessary -- try to keep them as small as possible to maximize
write throughput. [7:30-7:31, 7:33-7:34]

- Follow-up on index inconsistency issues (issue 2481): we are taking
this issue very seriously, and have devoted many hours so far tracking
down the cause. For most apps that we have identified as being
affected, we have manually corrected the problem indexes, but we're
still working on the root cause. The team is making substantial
progress and the timeline for a fix is "weeks" and not "months". If
you continue to see this problem, please add a comment to
http://code.google.com/p/googleappengine/issues/detail?id=2481. [7:35,
7:38-7:40]

- Discussion on google.appengine.tools.bulkloader.IncrementId
implementation, whether it's hardened enough to prevent conflicts of
auto-generated IDs, and whether a better implementation is coming.
[7:42, 7:46]

- Discussion on authentication using the Google Accounts service, how
it's implemented and security mechanisms in place. [7:44-7:48]

- Q: What are transactional tasks? A: Simply put, tasks that are added
to queues when there is an active datastore transaction will be
automatically enlisted in the datastore transaction so most of the
time you won't actually need to get ahold of the active
com.google.appengine.api.datastore.Transaction. [7:49, 7:53]

- Discussion on pre-releases and need for a production sandbox where
new back-ends can be released and tested without (potentially)
breaking production apps. [7:54-7:55, 7:57]

- Cool app which compares the performance of the different Java
datastore APIs: http://gaejava.appspot.com/. The low-level API
outperforms JDO/JPA, even though JDO and JPA are technically using the
same underlying implementation as the low-level API, likely due to the
ORM-layer overhead. [7:58-8:04, 8:10-8:11]

- Poll: For developer-to-developer support, do you prefer Google
Groups or Stack Overflow? [8:05-8:11]


--FULL
TRANSCRIPT-----------------------------------------------------------
[7:11pm] apijason_google: Ha ha. Anyway, we'll be here for the next 50
minutes at least. Ikai and I are here, Wesley is coming soon. Sorry
for the technical difficulties.
[7:12pm] _tmatsuo: perhaps you can register your nick on the net.
[7:12pm] _tmatsuo: *on freenode.net
[7:13pm] apijason_google: Yeah, after today's incident, we just might
do that.
[7:13pm] ikai_google: registered, no dice
[7:13pm] ikai_google: I still can't post in the other forum
[7:13pm] ikai_google: err channel
[7:13pm] lambo4jos: hello everyone
[7:13pm] ikai_google: oh wait
[7:13pm] moraes: i'll ask nickjohnson to give power to some of us
[7:13pm] ikai_google: gotta click some email link
[7:13pm] Wooble: page nickjohnson, wake him up.
[7:13pm] ikai_google: hah, nick doesn't carry a pager anymore
[7:14pm] Wesley_Google: Greetings everyone! Congrats on finding the
new room. I couldn't post in the original room either. We'll get a
hold of nickjohnson one way or another.
[7:14pm] ikai_google: http://freenode.net/faq.shtml#registering
[7:15pm] lambo4jos: do all scheduled chats happen in this room?
[7:15pm] ikai_google: they should happen in appengine
[7:15pm] ikai_google: BOOM. One question answered
[7:15pm] ikai_google:
[7:15pm] Wooble: no, freenode suffered a spam attack and lots of
channels are +R now.
[7:15pm] lambo4jos: haha!  thats what i was assuming.  is this just
temporary?
[7:15pm] moraes: lambo4jos, no. #apoengine is registered members only
and the google people is not registered
[7:15pm] ikai_google: yeah
[7:15pm] ikai_google: I registered
[7:15pm] moraes: guys, do you know about the new cursors?
[7:15pm] lambo4jos: got it
[7:15pm] ikai_google: so I am in the other room now
[7:15pm] ikai_google: yeah, the 1.3.1 stuff
[7:15pm] ikai_google: pretty exciting
[7:15pm] moraes: lambo4jos, because of recent spam waves
[7:15pm] ikai_google: the docs aren't online yet
[7:16pm] ikai_google: but you can look at the docs that come with the
SDK
[7:16pm] moraes: yes, i tried them. like, months ago
[7:16pm] ikai_google: in the case of python you ... unfortunately need
to grep
[7:16pm] moraes: then agian a couple of hours ago
[7:16pm] ikai_google: they shouldn't work in prod yet on a deployed
app
[7:16pm] lambo4jos: what are cursors?
[7:16pm] Wooble: moraes has been excited about cursors since they
first appeared in the roadmap.
[7:16pm] moraes: and i got it working.
[7:16pm] ikai_google: cursors are a way for you to work with datasets
larger than 1000
[7:16pm] ikai_google: they're coming in 1.3.1
[7:16pm] ikai_google: you get preview access in our prerelease SDK
[7:17pm] moraes: so. what when you reach last set of results. it still
returns a valid cursor. can you detect that it is the last set?
[7:17pm] lambo4jos: ooh!  where can i get a preview release sdk?
[7:17pm] jason_google: Doh
[7:17pm] jason_google: OK, I think I'm set.
[7:18pm] Wesley_Google: download here: http://bit.ly/cmqXGT
[7:18pm] enigmus: ikai_google: Using a cursor, do the first results
get retrieved as well from the datastore? Is there a performance
difference wrt offset?
[7:18pm] lambo4jos: thanks.  checking it out now.  be back in a sec
[7:18pm] _tmatsuo: looking through the source, Query class has a
lovely cursor() method now. presumably we can serialize a half-way
queries with this method.
[7:19pm] _tmatsuo: for later use
[7:20pm] ikai_google: enigmus: I'm not completely sure about the exact
characteristics of cursors at the moment, so I couldn't tell you. As
far as performance goes, no, there shouldn't be a difference
[7:20pm] ikai_google: I have a bit of an admission here, I'm no expert
on cursors yet
[7:21pm] ikai_google: I've seen some early docs but not the final
ones, but if you have any questions I can't answer, feel free to ask
on the mailing list
[7:21pm] jason_google: enigmus: I need to ramp up on it myself, but I
believe you should only retrieve results from the cursor, so it should
have better performance than using offset.
[7:21pm] ikai_google: and I'll take some time to research and get you
guys some answers
[7:21pm] moraes: _tmatsuo, http://paste.pocoo.org/show/173706/
[7:21pm] ikai_google: enigmus: what I mean is, the further you are in
the dataset it shouldn't take longer
[7:22pm] Wooble: I have a TOS question.  Let's say I'm building a
photosharing site; just how much policing of user-contributed content
am I expected to do?  Is it enough to have my own terms of use forbid
the same stuff the Google ones do, and take action if I'm notified of
violations, or am I expected to view every uploaded photo?
[7:22pm] enigmus: jason_google: That would indeed make sense. offset
is very limiting that way.
[7:22pm] lambo4jos: what is the new transactional task creation for
python?
[7:22pm] moraes: you guys know why cursors return a valid cursor when
you are in the end of the dataset? is this expected?
[7:23pm] ikai_google: Wooble: You should be responsible for your
content, since we will not be reviewing it
[7:23pm] jason_google: Wooble: I am not a lawyer, but your sites
should not explicitly permit content that is not permitted in the App
Engine TOS and you should take measures to remove it if it's reported
to you.
[7:23pm] jason_google: With content violations that we spot, we'll
generally report it to you first before taking your app down.
[7:23pm] ikai_google: Wooble: But if we receive reports that you have
violating content, yes, we can shut you down. Though in most cases
we'll contact you first
[7:24pm] _tmatsuo: Looking through App Engine Product Roadmap, there
is 'mapping operations across datasets' is on Deck. What doesit
exactly mean?
[7:24pm] ikai_google: Wooble: Now, if it's really bad stuff, we will
shut you down first and ask questions later.
[7:24pm] ikai_google: _tmatsuo: Map/Reduce
[7:25pm] lambo4jos: any info on the # Datastore dump and restore
facility that is listed on the roadmap?
[7:25pm] jason_google: Wooble: We'll generally always contact you
first unless it's clear that your violation is malicious (e.g. you're
phishing) or your app is seriously impairing our back-end.
[7:25pm] _tmatsuo: ikai: cool. with task queue like mechanism?
[7:25pm] ikai_google: lambo4jos: Nothing for you yet
[7:25pm] skot: Has there been any talk of increasing the urlfetch
size? I have need to upload 5+ Mb items.
[7:25pm] lambo4jos:
[7:26pm] jason_google: lambo4jos: Have you seen
http://code.google.com/appengine/docs/python/tools/uploadingdata.html?
[7:26pm] Wooble: well, I'm more concerned about users of an app that
allows user-contributed content being abusive then me doing evil
stuff.  I know I can trust myself
[7:26pm] ikai_google: _tmatsuo: I don't remember. I saw an early demo
using that type of interface (HTTP action), but it was just a proof of
concept
[7:26pm] jason_google: skot: Can you just split this request into
smaller requests?
[7:26pm] ikai_google: _tmatsuo: My expectation is "yes" since we've
kind of been following that pattern
[7:26pm] skot: Not on uploads, I can do range requests on downloads.
[7:26pm] _tmatsuo: ikai: thx
[7:27pm] lambo4jos: jason_google: yeah, i have been working with app
engine for a while, but have never attended this chat
[7:27pm] ikai_google: Wooble: Yeah, that's tough. We won't police your
content, but if it's reported we may take action.
[7:27pm] jason_google: By "take action", we'll probably report it to
you first though.
[7:27pm] skot: jason_google: I'm passing images through, and they
would be relatively large
[7:27pm] ikai_google: Wooble: Wish we had a better solution for you.
I've seen solutions like: require approval, mechanical turk, etc
[7:27pm] lambo4jos: the articles such as the one you have posted are
very useful.. great documentation by you guys
[7:28pm] jason_google: lambo4jos: That page has some basic information
on how to do a dump and restore.
[7:28pm] _tmatsuo: I've reported an issue about InboundMailMessage. We
have difficulties on decoding message body because of this issue.
Could you please take a look and notify this the team?
http://code.google.com/p/googleappengine/issues/detail?id=2326
[7:29pm] jason_google: skot: What's more likely than increasing the 1
MB limit is allowing you to pass a blob key, which is similar to what
we're doing for some image service functions. But I'm not sure if this
is planned at the moment. It's certainly a good request.
[7:29pm] Wooble: Flickr's solution seems to be require approval and
then ignore everything after approval, which is great if you own the
hardware and can ignore your own TOS
[7:29pm] ikai_google: _tmatsuo: I'll take a look at it.
[7:30pm] lambo4jos: i actuall attended to get some clarifications on
transactions
[7:30pm] lambo4jos: i am under the impression that transactions on a
single entity or single entity group happen sequentially, and not
concurrently.
[7:30pm] lambo4jos: is my thinking correct?
[7:30pm] moraes: Wooble, just add a little flag for others report. no
worries.
[7:30pm] moraes:
[7:31pm] jason_google: lambo4jos: Transactions that result in a write
do occur sequentially, yes.
[7:31pm] _tmatsuo: ikai: thx!
[7:31pm] jason_google: lambo4jos: Two updates to the same entity/
entity group cannot occur in parallel. Which is one reason we
encourage you to keep your entity groups as small as possible.
[7:31pm] skot: jason_google: that is good for collection of the data
into appengine, but if you have to use a public service that doesn't
allow "chunked" uploads you can never push it on to that service (like
flickr, or picasa-web)
[7:32pm] skot: jason_google: does that make more sense?
[7:32pm] jason_google: skot: Yes, it makes sense. Have you filed a
feature request? Like I said, the blob key implementation is more
likely, given the direction the team took with the image service
functions, but it's worth filing.
[7:33pm] lambo4jos: jason_google:  thanks for the clarification.  i
had a tough time understanding how to model my data, but just realized
thats how transactions work
[7:33pm] skot: jason_google: no, I haven't filed a request; I will.
[7:33pm] lambo4jos: in regards to a transaction failure, or any
datastore failure, does a failure consume datastore quota?
[7:34pm] jason_google: lambo4jos: You're probably charged with the
datastore CPU time it took to make the initial calls, yes. But not
with the storage unless the write actually succeeded.
[7:35pm] moraes: did you guys ordered an iPad already?
[7:35pm] • moraes runs
[7:35pm] jason_google: moreas: Still trying to convince the wife.
[7:35pm] bthomson: timeouts at least don't cost any api_cpu quota
anymore
[7:35pm] enigmus: Alright, burning question: issue 901 and 2481? To
use an analogy, returning wrong results for a database is like faulty
gas pedal on a Toyota: you would expect a recall and a shutdown of the
production facility until the problem is resolved. 901 is 1 year old.
What's going on?
[7:35pm] AreEmmKay: is there a fix yet for the "doing anything in the
SDK console breaks Django 1.1" issue?
[7:35pm] lambo4jos: how about if the datastore succeeds but returns
'None'.  does that consume datastore api call quota?
[7:36pm] skot:  jason_google: looks like issue 1365 covers this need
for larger urlfetch sizes (both directions) Do you want me to create
another issue?
[7:36pm] moraes: lambo4jos, sure.
[7:36pm] moraes: api call was spent after all.
[7:37pm] moraes: enigmus, are those issues still valid? i had similar
ones, but it's been quite a while...
[7:38pm] ikai_google: enigmus: I need to double check, but the issue
is that indexes are incorrectly created
[7:38pm] jason_google: enigmus: I need to look at 901 a bit more.
Regarding 2481, I've been meaning to update that stream since I know a
lot of people are still seeing it. We're taking it extremely
seriously, but it's taken awhile to both find the core issue, find it,
and correct the data in the datastore. I've been told that it should
be relatively soon, "weeks" but not "months". I realize that isn't
very satisfactory, but we are working on it.
[7:38pm] ikai_google: enigmus: So what ends up happening is that for
small datasets, a single put one by one will fix it
[7:38pm] lambo4jos: from the docs: 
http://code.google.com/appengine/docs/quotas.html
under datastore it says "The total number of times the app retrieved,
created, updated or deleted an entity, or performed a query in the
datastore."
[7:38pm] lambo4jos: if a db.get returns none, it didn't retrieve
anything, but moraes, you are saying it consumes quota?
[7:38pm] lambo4jos: but i guess it is a query?
[7:39pm] moraes: lambo4jos, yes, i guess so. it used a rpc call.
doesn't make sense?
[7:39pm] AreEmmKay: Random thought-- URLFetch should be more like
cron, task queue, and even blobstore-- you request a file and provide
a callback URL, Google fetches the file and posts it (or a proxy
object, like BlobInfo) to the URL.
[7:39pm] ikai_google: ikai_google: But we've got two other issues:
making it so our mass index update works so we can build large indexes
without issues, and fixing retroactive datasets. This is in addition
to finding the problem
[7:39pm] jason_google: lambo4jos: The query still occurs, even if
doesn't return any entities, right?
[7:39pm] ikai_google: oops responded to myself
[7:39pm] jason_google: Ha ha
[7:39pm] moraes: moraes: haha
[7:39pm] moraes: oops
[7:40pm] lambo4jos: it should not consume 'Data Received from API'
though if it is None?  or am I incorrect?
[7:40pm] ikai_google: enigmus: We've found the problem and are fixing
it, but the fix isn't rolled out yet
[7:40pm] jason_google: lambo4jos: I believe that's true, yes.
[7:40pm] _tmatsuo: lol
[7:40pm] ikai_google: lambo4jos: It still takes data to return a null
value
[7:40pm] lambo4jos: jason_google:  yeah it is a query.  i was hoping
it wasn't.
[7:41pm] ikai_google: lambo4jos: Well, a query has to happen for us to
find out nothing is there
[7:41pm] skot: AreEmmKay: sure, but some of us need synchronise
access, without a callback. I am just proxing some data from one
service to the client (in a secure fashion) without the need to store
it.
[7:41pm] jason_google: lambo4jos: As Ikai notes, maybe you're charged
but I would think it would be negligible. Much smaller than returning
actual entity results with StringProperties, TextProperties, etc.
[7:41pm] Wooble: I'm guessing the overhead for serializing "None" and
sending it back is fairly small
[7:41pm] lambo4jos: ikai_google:  ok. got it.
[7:41pm] jason_google: Wooble: Me too.
[7:42pm] _tmatsuo: This question might be too detailed but, I've
glanced through an implementation of
google.appengine.tools.bulkloader.IncrementId method. I feel like in
most cases, this implementation is sufficient for preventing conflicts
of autogenerated IDs, but not perfect. Is there any plan for improving
this implementation?
[7:42pm] moraes: can we use same protocol buffer library used
internally?
[7:42pm] AreEmmKay: skot: OK, then my idea supplements rather than
replaces URLFetch. Call it FetchLater
[7:42pm] moraes: ^ random question, i'm thinking on doing something,
could research a bit rather than ask.
[7:42pm] jason_google: AreEmmKay: Python has asynchronous URL Fetch
and Java is getting it soon. Not quite what you have in mind but it's
better than synchronous requests, especially if your handlers have a
lot of logic or other API calls.
[7:42pm] skot: _tmatsuo: I would tend to agree. I had to write my own.
[7:43pm] ikai_google: moraes: Yeah, you can take a look at any of our
stuff that is exposed and use it. The only thing is that it is subject
to change. There was a framework - I think it was a blog framework -
that did this, and it broke when we did an SDK update
[7:43pm] skot: AreEmmKay: As jason_google said, it is now in the java
sdk for 1.3.1.
[7:44pm] jason_google: _tmatsuo: I wish Ryan was here. I'm not
completely sure about the implementation, but I would expect it to be
pretty hardened against producing duplicate IDs given that that would
result in data loss/corruption.
[7:44pm] enigmus: What are the details behind is the User API? Is it
cookie based? And if so, how can it possibly be safe from various
types of XSS? (like B.com using a <script src="A.com/auth/rpc/call">
[7:45pm] moraes: auth has to be cookie based
[7:45pm] ikai_google: enigmus: Making it safe from XSS is your
responsibility
[7:45pm] ikai_google: enigmus: We protect the login page
[7:46pm] jason_google: enigmus: I believe it is cookie-based, yes. The
cookies are for the particular appspot.com domain (or Google Apps
domain) that you're on, which is why you have to sign in to all App
Engine apps individually.
[7:46pm] ikai_google: enigmus: But after that, on form submissions and
such
[7:46pm] ikai_google: enigmus: It's up to you to place CSRF tokens,
etc
[7:46pm] Wooble: it would be kind of nice if I could sign out of an
app engine app without losing my gmail session, since the login has to
be done separately.
[7:46pm] _tmatsuo: jason: afaic, our data will be safe, the datastore
API raise an error when newly generated ID is already in use.
[7:47pm] jason_google: Wooble: As a regular Gmail and App Engine app
user, I agree.
[7:47pm] enigmus: ikai_google: makes sense. I'm not sure the doc is
clear enough on that, however. Maybe I missed it.
[7:47pm] moraes: the protocol buffer implementation in python has
decent performance? or the one used internally is not public?
[7:48pm] ikai_google: enigmus: I think we may need to write a security
article in general, but it would apply to all websites and not just
App Engine. You have the same problems if you are using Facebook
Connect, Twitter Auth, etc
[7:48pm] jason_google: moreas: I believe we use the same
implementation that's open source -- same optimizations and so forth.
[7:48pm] jason_google: moreas: Or, at least, I don't know otherwise.
[7:49pm] lambo4jos: for 1.3.1 sdk, can someone please share what
transactional tasks are?
[7:51pm] manster: hey whats the difference between this grp and the
other one
[7:51pm] manster: appengine
[7:51pm] moraes: also, why nexus got multi-touch? everybody is
wondering about the apple patent.
[7:51pm] Wooble: manster: this one works at the moment, and that one
was borked.
[7:51pm] • moraes only asks silly questions
[7:52pm] manster: i seee
[7:52pm] ikai_google: lambo4jos: There's a lot of different things
happening in transactional tasks, but it was a feature we created to
deal with a lot of errors where a task would blow up mid-execution.
I'd wait for the final documentation to see everything it does, but a
big part of it is just making task queues more reliable in general
[7:52pm] manster: so any ideas
[7:52pm] manster: http://pastie.org/808800
[7:52pm] Wooble: lambo4jos: from a post to the java group last week, I
*think* it means you can enqueue a task inside a transaction and it
will take place within that transaction, but then again I think the
java API uses Transaction in some confusing ways.
[7:52pm] ikai_google: manster: We have a temporary issue with the
other group
[7:53pm] jason_google: lambo4jos: I found a reference in a recent post
from Max Ross:
[7:53pm] skot: For the new urlfetch async in java, is there a limit to
the size of the class (for serialization) that implements Future?
[7:53pm] jason_google: lambo4jos: Once the feature is enabled, tasks
that are added to queues when there is an active datastore transaction
will be automatically enlisted in the datastore transaction so most of
the time you won't actually need to get ahold of the active
com.google.appengine.api.datastore.Transaction.
[7:53pm] moraes: manster: the other si the official one. however
because of spam it is set to registered only and people coming to the
chat didn't had account so we created this one.
[7:53pm] ikai_google: manster: This is a GWT question? you may want to
ask in the GWT forums
[7:53pm] moraes: it is not like app engine version 2 or something.
[7:53pm] moraes:
[7:54pm] _tmatsuo: A prerelease process is very nice, it helps me a
lot for developping my own framework, but currently its restricted in
local dev server. When will it be applied to the real server
environment?
[7:54pm] lambo4jos: jason_google, Wooble, ikai_google:  nice,  i am
looking forward to reading the documentation on it
[7:54pm] ikai_google: _tmatsuo: Soon
[7:54pm] moraes: "soon"
[7:54pm] _tmatsuo: "soon"
[7:54pm] ikai_google: _tmatsuo: Sorry, we'll let you know ASAP
[7:54pm] moraes: couple of weeks you can bet.
[7:54pm] jason_google: skot: I'm not exactly sure, but I would think
that it should work sufficiently for most classes.
[7:55pm] jason_google: Yes, moraes has the right idea.
[7:55pm] Wooble: it's more fun to RTFS and figure out what it does,
but I haven't downloaded the pre-release yet.
[7:55pm] _tmatsuo: ikai: thx! dont get it wrong.
[7:55pm] moraes: guys, any new exciting app engine project you saw
recently?
[7:55pm] jason_google: But, in the meantime, if you find any bugs in
the SDK, let us know about them now so we can fix it before 1.3.1
lands for real.
[7:55pm] ikai_google: Is it a couple of weeks? Thought it would be
sooner. This is maybe the 2nd time we are trying prereleases
[7:56pm] jason_google: ikai_google: Within a couple of weeks, assuming
everything goes well with the pre-release.
[7:56pm] lambo4jos: i was watching the video from google i/o by Max
Ross, Softer side of schemas, and he mentions a safe write throughput
for a single entity group is about 1 to 10 per second.
[7:56pm] skot: ikai_google: I like the pre-releases, but I like them
even better when they work in dev and prod.
[7:56pm] lambo4jos: any idea what the size of such an entity group
would be that could get this kind of write throuhgput?
[7:57pm] ikai_google: skot: We can't put them into prod until we have
some level of confidence. Maybe the long long term solution is to have
a Beta prod server with low quotas
[7:57pm] skot: ikai_google: sure, let us choose our level of danger.
[7:58pm] ikai_google: lambdo4jos: A lot of these numbers are very
soft. It's not just hte size of the group, it's also the size of the
index update
[7:58pm] enigmus: Any comments on: http://gaejava.appspot.com/? JDO
looks a lot smaller than the low-level Java API
[7:58pm] Wesley_Google: download the prerelease of SDK 1.3.1 at
http://bit.ly/cmqXGT
[7:58pm] Wesley_Google: or at least, *read* about it b4 u download it
[7:59pm] ikai_google: lambdo4jos: So it's really up to you to
benchmark.
[7:59pm] jason_google: enigmus: Interesting app, I hadn't seen it
before. Technically, JDO and the low-level API are using the same
implementation. JDO is just a wrapper.
[8:00pm] jason_google: enigmus: I'm seeing the low-level API
outperform JDO actually, which makes sense.
[8:00pm] jason_google: Due to all the DataNucleus overhead
[8:00pm] takeru: Can I know api cost for each call? 1put=48api_cpu_ms,
1index=16api_cpu_ms, etc....
[8:00pm] enigmus: jason_google: sorry, I meant "JDO looks a lot slower
than..."
[8:00pm] lambo4jos: ikai_google:  got it.
[8:01pm] enigmus: jason_google: yeah, that's my question. Is the JPA
overhead lower?
[8:01pm] manster: how can you use appengine and not know gwt? i dont
understand
[8:01pm] jason_google: enigmus: Right. Technically, the actual low-
level calls are the same, but I'm guessing the ORM layer adds some
overhead. JPA would likely be similar.
[8:01pm] skot: enigmus: where is the source for that app? I'd love to
provide another framework for comparison (another wrapper on the
datastore api).
[8:01pm] enigmus: jason_google: A factor of 7x between JDO/low-level
is a bit scarry.
[8:01pm] skot: manster: LOL
[8:01pm] enigmus: skot: it was posted on the mailing list at some
point I believe
[8:02pm] skot: enigmus: cool, I'll search.
[8:02pm] jason_google: enigmus: I'd have to know how it's implemented,
e.g. if the low-level is using batch puts. It's possible to do
batching with JDO but it's not automatic.
[8:02pm] moraes: manster, you know pyjamas?
[8:02pm] manster: what other kind of app would you be making?
[8:03pm] moraes: manster, there're lots of ways to make web apps
besides gwt.
[8:03pm] skot: manster: web service with no UI
[8:03pm] moraes: not all apps have user interface.
[8:03pm] manster: oh snap
[8:03pm] enigmus: jason_google: I believe the author is doing batches,
at least he claimed so, if I recall.
[8:03pm] manster: almost forgot. and thats no fun
[8:03pm] lambo4jos: moraes:  have you used pyjamas? if so, what are
your thoughts?
[8:03pm] jason_google: enigmus: I'll look into it a bit more. Thanks
for sharing it.
[8:03pm] Wesley_Google: does anyone have any Python-specific questions
(App Engine or otherwise)?
[8:04pm] enigmus: jason_google: but even for the a single put, there
is still a factor of 7x.
[8:04pm] moraes: lambo4jos, i didn't! i want to play with gwt
actually. maybe after my android adventure.
[8:04pm] manster: if you dont build an app with gwt i did not think
you could deplow to the appengine
[8:04pm] _tmatsuo: Currently, taskqueue is in the lab, when will it
graduate, and how?
[8:04pm] manster: deploy*
[8:04pm] ikai_google: manster: Nope, standard JSP will work
[8:04pm] moraes: Wesley_Google, i do.
[8:04pm] lambo4jos: moraes: looks pretty cool
[8:05pm] Wooble: manster: you can actually have plain old python CGI
applications.  basically anything that responds to HTTP requests will
work fine.
[8:05pm] jason_google: We've reached the end of the chat! Sorry for
starting late -- we'll work on getting the issue with the other
channel sorted out. I'll be in the channel for the next few minutes,
and I'm sure Wes will be also, in an unofficial capacity.  The next
formal Chat Time is in two weeks, Wednesday, February 17th from
9:00-10:00 a.m. PST.
[8:05pm] ikai_google: Hey, informal poll here: do you guys like using
groups for questions? Or does something like StackOverflow work better
for everone?
[8:05pm] manster: well thats hella good to know
[8:06pm] enigmus: ikai_google: group's good.
[8:06pm] moraes: i have 150 points in stack overflow.
[8:06pm] _tmatsuo: ikai: group+
[8:06pm] jason_google: enigmus: Do you use all 3 groups or just 1 in
particular.
[8:06pm] jason_google: Would you guys use Stack Overflow more if we
were more active in answering questions there?
[8:06pm] bthomson: group > stackoverflow
[8:06pm] Wooble: ikai_google: I like both; stackoverflow works great
for simpler questions, but for involved discussions the group works
better.
[8:07pm] lambo4jos: i agree with Wooble:  groups == discussions,
stackoverflow == simple_solution
[8:07pm] Wooble: I can beat nickjohnson and alex martelli to an answer
like once out of every 10 questions.  that's probably active enough
[8:08pm] ikai_google: Well, I ask because there are a lot of questions
in the groups
[8:08pm] ikai_google: where stackoverflow would be a better place to
answer
[8:08pm] moraes: i hate that when i google something i find those
osdir.com before google groups. i downvote them, always
[8:08pm] enigmus: jason_google: the java one and the main one. It can
be a problem as most technically involved discussion concern both Java
and Python, reallu.
[8:08pm] ikai_google: now, discussion type things
[8:08pm] ikai_google: should belong in the groups
[8:08pm] _tmatsuo: Wooble: makes sence
[8:08pm] enigmus: ikai_google: Yeah, it's true. A kind of "dynamic"
FAQ, like stack overflow provides, would make sense from that point of
view.
[8:08pm] skot: ikai_google: is there a plan to take some of the group
discussions and make them into FAQs or articles?
[8:08pm] ikai_google: anyway, we're thinking about it since the
Android guys are toying with StackOverflow
[8:08pm] jason_google: Ikai's right. I'd say that the majority of new
topics are questions, actually. If we ever moved to Stack Overflow,
we'd keep at least one group open for discussions on data modeling,
etc. Do you think that breakdown would work?
[8:09pm] Wesley_Google: the interesting thing is that SO is crowded by
daily app engine developers while the groups are monitored by us, who
aren't necessarily app engine developers as a profession...
[8:09pm] moraes: ikai_google, are you thinking to do with SO the same
that you've done with android?
[8:09pm] Wooble: moraes: I agree, but of course if you have google
searches favoring google groups, people would start to scream about
bias.  uh, even though that's where the original posting was
[8:09pm] ikai_google: Maybe, and maybe all Google Developer Programs
in general
[8:09pm] ikai_google: I know Google Wave uses Waves for stuff
[8:10pm] moraes: So is a great source anyway
[8:10pm] moraes: i frequesntly search using site:stackoverflow.com
[8:10pm] ikai_google: I mean, the best, most ideal solution is this:
you have a problem, you connect your brain to the hive mind, and we
all solve it together
[8:10pm] enigmus: jason_google: The source code for
gaejava.appspot.com was posted on
http://groups.google.com/group/google-appengine/browse_thread/thread/7930b99e57cc59d9/bce350a287713ed7
(at least an early version of it)
[8:10pm] jason_google: We're just brainstorming at this point. I like
the idea of Stack Overflow more than groups personally. It's a lot
better for searching for old questions and determining when a question
has been answered or is still waiting on an answer.
[8:10pm] Wooble: I got sort of disillusioned with wave's performance
early on, but I think when it's working well it would be great for
this sort of thing.
[8:10pm] ikai_google: but in the absence of that technology, what's
better for that? Groups, in a serial post format? Or stackoverflow
with the question, comment, comment, dedup model?
[8:10pm] jason_google: Thanks enigmus.
[8:11pm] enigmus: ikai_google: stack overflow kind-of-thing, I would
say.
[8:11pm] ikai_google: anywaym thanks for the feedback guys
[8:11pm] lambo4jos: i have found many answers to programming errors on
stack overflow.  google groups have been more theoretical solutions
and suggestions for approaches
[8:11pm] ikai_google: I'm popping out of here. See you guys in the
groups/next time
[8:11pm] moraes: both. why groups need to not exist. SO is more a big,
useful wiki.
[8:11pm] moraes: thansk for coming, guys
[8:11pm] enigmus: jason_google: looks like it's not the version
running right now, though. Maybe the author can be contacted by email.
[8:11pm] ikai_google: moraes: understood. I actually think what the
Android folks do is point more specific code questions to SO
[8:12pm] ikai_google: and design questions to groups
[8:12pm] jason_google: Thanks Everyone. I'm ducking out too. Sorry
again for all the trouble earlier. Have a good evening/morning/
afternoon, depending.
[8:12pm] lambo4jos: thanks for you help everyone.  keep up the good
work
[8:12pm] _tmatsuo: thanks guys!

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to