I still wish it would contain a simple JS text editor like JetPack. :) Also, when you bring up the inspector, it often has a list of every JS of every tab you have open. It would be nice if you could group those per-tab. If you write a content-script for Chrome and have 10 tabs open, you'll have 10 separate copies of your script listed in the drop down.
- Ray Cromwell
BTW, can you attach OOPHM to any arbitrary chrome Tab, include those associated with extensions? e.g. the background page of an extension loads a GWT module?
- Ray Cromwell
Ditto. I have every intention of picking up DotSpots again when the Chrome plugin's available. Let me know if you guys need us to ping Chrome team on anything.
- Joel Webber
Joel- if there's a way to debug Chrome content scripts, I'd love to know it :) (the docs seem to indicate that this isn't possible right now). Running into a weird issue where everything works well up to a point, then a window reference is inexplicably set to null.
- Matt Mastracci
I'm pretty sure it's not possible yet, though I'm sure they're aware it's badly needed. @kellegous has done a fair amount of Chrome extension work. Does the window reference problem sound familiar, Kelly?
- Joel Webber
I've figured out what the Chrome issues were. Everything is good to go and we'll be launching this new Chrome extension very soon.
- Matt Mastracci
Chrome uses a bizarre JS parameter form for chrome.extension.connect. It tests the type of parameters for string/object to allow you to omit them entirely: http://src.chromium.org/viewvc...
Doesn't this kind of parameter sniffing make you kind of nauseous? I know that's considered "normal" in javascript, but god it gives me the willies.
- Joel Webber
Yeah, I'm not really a fan of it, since it fails in mysterious ways. Most of the parameters are tested using typeof "blah" == "string" or "object". Of course, typeof null == "object", but none of the checks actually look for that. You have to use function.apply to call it from GWT to make sure you don't throw in a null.
- Matt Mastracci
Interesting note: seems like it would work by announcing that you are targeting "the biggest infringers" as well.
- Matt Mastracci
Trying to figure out Chrome's port/messaging model. There's a raw request with a callback and a Port model (with no callback). Seems like the former is the most appropriate for sending messages that expect responses.
Oh... I missed the whole point of port. If you open a port, you can use it on the other side to send back responses. Open one port per request and you can make sure you always get a callback. Perfect
- Matt Mastracci
Got another call from a "lower your interest rate" phone spammer, so I thought I'd have fun: Me: "I have 150k of debt at 20% interest" Them: "Is it past due?" Me: "Oh yeah" Them: "Ahh, we can't help you then" Me: "Oh, I was just kidding, it's not past due" Them: "Ok, let's get you set up"
Replacements for halogens that is. Until now those were the only low efficiency bulbs in our house. Once these puppies are installed, all of our lighting will be low wattage.
- Matt Mastracci
from iPhone
Nice day in #yyc, considering we're in the run-up to the holidays now. Hopefully it'll stay around zero until 2010.
Awesome, sounds like fun. Need to get some cheese-cutters for our little tyke and take him out with the chair (the winter right of passage).
- Matt Mastracci
The days of server side rendering of dynamic HTML are numbered. It makes a lot more sense to shift the load to the client w/good svr APIs.
So, so true. Plus, rendering any part of your app on the server (except perhaps as a startup optimization) makes offline support damned near impossible.
- Joel Webber
I haven't been following GWT lately, but my main issue with these approaches is they make the latency of first view inherently, significantly worse than simple HTML because you have to load the HTML and JS serially before doing the additional work of rendering the page/fetching the page data. That "flash" we see in all Google apps annoys me quite a bit, and annoys me more for web sites that aren't really "apps" in the Google Apps sense
- Bret Taylor
FriendFeed renders stuff on the server and the client using shared code. I think that approach leads to the best user experience by far for most apps (apps like Gmail and Google Docs are probably special/different in this regard). I just think too many apps start off with this approach when it doesn't really benefit their code or use experience.
- Bret Taylor
I think that the client-only approach is difficult initially because there aren't a lot of good patterns for it. With careful juggling of CSS/script load order, you can get an experience that's faster than that of most server-rendered websites (ie: Digg) without any sort of UI flash. Once you've taken that initial hit, you user experience can be so much better. I'm still working on some code in this area, but I hope to release a GWT library that automates the whole process soon.
- Matt Mastracci
Without using GWT's runAsync, you definitely take a big initial runtime hit. If you hope to run all of your code dynamically, there has to be some sort of incremental load process.
- Matt Mastracci
Another approach is to send the data down with the scripts. In general, GWT reduces the number of HTTP transactions compared to what people usually do by hand (it's had automatic resource bundling/spriteing for a long time). For example, you could write a servlet that bundles the first fragment of a GWT app, along with data, in the initial download, so the major overhead is generating...
more...
- Ray Cromwell
@Bret: I completely agree that "content" and "apps" should be treated differently, and some sites are difficult to place into one of these two pigeonholes. If your site is primarily "content" and you really are just loading one (mostly) static page after another, you're probably never going to be able to write js that outperforms the browser's progressive renderer. I also agree that if...
more...
- Joel Webber
But I'm also looking forward to seeing Matt's library. I think that with really aggressive code splitting, careful precaching of data, and careful rendering (a lot of work, I know), you should be able to get the best of both worlds. And avoid *my* big pet peeve, which is static pages that get into bizarre, inconsistent states because they attempt to perform some logic on the client, some on the server, and have no consistent model.
- Joel Webber
I think you could also enhance server-side selection script by allowing it to combine the initial host "dynamic" HTML page and initial JS fragment in one HTTP request. They'll be no blocking or extra HTTP requests to get the page up and running, assuming you runAsync() on a point after the DOM is stable. This would avoid any flashing, limit serial HTTP requests prior to first render to...
more...
- Ray Cromwell
We are serving all of our big JS from a CDN, making it tougher to customize dynamically. Including the initial RPC fragments in the HTML would probably work, though I haven't experimented along those lines.
- Matt Mastracci
from iPhone
Edge Side Includes may or may not help. e.g. you can deploy your JS to the CDN, and use ESI to inject the JS into the HTML served from the CDN. I think it depends on how 'dynamic' your HTML is if this is a win or not.
- Ray Cromwell
Our current CDN (CloudFront) doesn't support any ESI magic and has a minimum TTL of 24h, so we have to ensure everything served from there is really static. I'll probably revisit most of the choices we've made so far in the near future and put together a set of good practices for highly dynamic web applications that I can offer up for peer review. There's not a lot of public literature on this sort of webapp.
- Matt Mastracci
My YouTube postal code is listed as "H0H 0H0": a Canadian inside joke.
I showed our toddler a picture of the unicode rotary phone (☎) and he said it was a phone right away. No idea where he would have seen one, but it's not entirely dead lore. Of course, he had no idea what a floppy disk was (the 5.25" was a flashlight and the 3.5" was a drawing)
Didn't know what a cassette tape was either, hah. I remember showing him an old VHS tape I dug out of a box a few months ago: he was all "WHAT IS THIS? OOOOH".
- Matt Mastracci
That is hysterical!... I would have bet the floppy should have more staying power (File - Save).
- Bill Grant
He's almost 4, but he's never really used anything with a toolbar besides a web browser. I'm trying to think of other classical tech that I still have around the house.
- Matt Mastracci
My kids recognize a rotary phone for what it is, but when they see icon on a handset, they say 'cellphone'. My daughter now calls a silhouette of a bird 'Twitter', which amuses me. When my son sees 'facebook' or a font that looks like that one used, he calls it 'facetag'.
- Anika
Matt - yeah, I thought about that... But then again I wouldn't expect him to see a rotary phone either. Anika - Interesting about the facebook font, there are at least 3 logos using that f - facebook, flickr and friendfeed.
- Bill Grant
Bill, it's not the lowercase 'f', it's the specfic font. It can say, "rondelle" and he'll still call it 'facetag'. When I was his age, I know I identified fonts with specific items. It's weird to see him do the same thing. My daughter doesn't do that.
- Anika
Anika- that Twitter/bird thing is hilarious.
- Matt Mastracci
It's weird though, Matt. I'm rarely on the Twitter website, so I can only assume she's seen it when my husband pulls the site up.
- Anika
Oh another odd thing, she recognizes Window icons as anything with red/blue/green/yellow in a squarish formation. She recognizes Tux, but she doesn't recognize Apple items for what they are. If she sees an Apple logo she says 'Snow White'.
- Anika
Floppy disks (at 3.5" stylized ones) are still stupidly used as the "save" icon. And I still see iconography of hardline phones in Comcast advertisements. The distinctive feature of the unicode rotary phone is the receiver position, not the rotary circle on it. I think old style cell phones, the bags or bricks they were, stand out more than old style desk phones. Cell phones date movies, for example, much more.
- Andy Bakun
The 12-digit dialpad is so universal now that even the old luggable cell phones are recognizable by our toddler. He can even pick out the Skype dialpad as "numbers for a telephone". You're right about cell styles dating movies. I love how those old flip Moto Star-tac phones with the red LED display used to be the "cool phone" to have.
- Matt Mastracci
@Matt I think those Startacs are pretty cool... Especially when I just need to make a call in the car and my iPhone is lagging trying to get to the contacts screen.
- Bill Grant
Those Star-Tacs did have a big influence on popular culture. The "low battery" sound of every cell phone on TV still uses that iconic "bee doop" sound from that phone.
- Matt Mastracci
And here's another: I held up a CD disc and they said "movie". It was a music disc. I held up a vinyl record, they said, 'music'. When I mentioned that they listen to music on CDs in the house & the car, they both said, "Oh yeah..."
- Anika
"Here is the problem; your program fails at a customer's site with an exception, but you can't (or don't want to) reproduce the problem on your computer, because it's too time consuming. If only you could attach the debugger and collect a few information, you can rapidly proceed on fixing the problem. But running a debugger at a customer's site is practically impossible; if the user isn't a techie, it's out of question. Even if he is, you'd still need the source code loaded up in the IDE, then you have to explain to him where he needs to set breakpoints and what to report back to you. It's just too much work."
- Matt Mastracci
from Bookmarklet
"After all, it would arguably have been more difficult and imaginative to fake a moon landing than it was to actually land on the plain, old moon."
- Matt Mastracci
from Bookmarklet