Today we launched an all-new version of Feed My Inbox. Since you have an account, we wanted to pass along some important information and tell you about all the cool new features that are now available.
You have a new password
Moving to an all-new system behind-the-scenes means we had to reset all account passwords to keep your personal information 100% secure.
Upon logging in for the first time, you will be asked to change your password to something unique that only you know.
Your Plan
You are currently subscribed to five or fewer feeds.
Your account will continue to be free and will function as usual. If you would be interested in some of the advanced new features below or would like to subscribe to more than five feeds, you can enjoy a 30-day free trial of any paid account by upgrading.
New Paid Account Features
Real-time updates - You have the choice of getting emails as they happen, or continue receiving updates no more than once per day.
HTML/text format - Choose whether you would like to receive updates in HTML (fancy) or plain text format for each feed.
Email summary options - Instead of getting the full update, you can choose to receive a brief summary of each or titles only and a link to read more.
Customize the send time - Choose what time you would like emails to be sent to you each day.
This is simple – provided you understand that the reference the keyword this refers to changes depending on when it is called.
When called during initialization, this refers to the widget you're initializing. When the event itself is triggered, this refers to the DOM node node and not the widget.
As such, we need to introduce a new variable during initialization which the jQuery.UI library calls self which is, of course, equal to the initialization this, not triggered this. (Those of you familiar with Object Oriented Programming and by-reference calls should have no issue with this concept).
<$.widget("ui.clicker",{ _init:function(){ self =this;this.element.click(function(){ self.increment(self); self.render();});this.render();}, increment:function(target){ target.value(target.value()-1);//The exact handling of target.value will be shown another day}, render:function(){this.element.text(this.value());}, value:function(val){ … }});
You'll note that we have to pass self to the increment method or the widget won't actually be able to find itself, but the render method, which was called during initialization, is henceforth always able to correctly reference this (the widget)!
Can you think of some times you might want to disable the right click context menu? Or better still, insert your own behavior or application specific context menu?
If you don't return false, the normal context menu will appear, which could actually be desirable, depending on what exactly you want it to do (say, exiting a field and recording it as dirty).
Adobe AIR continues to win developers over with it’s ease of leveraging standard web technologies to build cool desktop apps. But it’s not without it’s drawbacks, especially in terms of memory consumption and debugging. Thankfully, Adobe listened and included better CPU and memory profiling in the latest version of the SDK, Adobe AIR 2.
One of the biggest challenges our team continued to hear from JavaScript developers using Adobe AIR 1.5 was that it was too difficult to track down CPU and memory issues within their HTML-based AIR applications. To help JavaScript developers detect and resolve these issues, we have introduced new runtime support for CPU and memory profiling of HTML-based AIR applications in the Adobe AIR 2 beta.
Aptana jumped all over this and updated their AIR plugin to leverage the debugging capabilities. Apatana CEO Paul Colton created a video demonstrating how it works:
In addition, AIR product manager, Rob Christensen told me that AIR 2 includes an updated version of WebKit that includes feature support for JavaScript profiling, SquirrelFish Extreme JavaScript engine which performs 50% faster using SunSpider tests, CSS3 Module support (2D transformations, transitions, animations, gradients, zoom and WebKit CSS selectors), styling scrollbars via CSS and Canvas enhancements.
We received an email from Joesph Huckaby about his new JS-based game rendering engine and I have to admit that when I first read about it, I was a little skeptical about it mainly because I’ve been disappointed with many that I’ve seen in the past. As I dug into his site, Effectgames.com, my whole opinion changed as I saw some very robust demos that clearly demonstrated the capabilities of this engine.
The games are powered by the “Effect Engine”, Joseph’s JavaScript/DHTML library that provides the framework for displaying and animating all the graphics, playing all the sounds & music, handling the keyboard & mouse, and sprite collision detection. It can smoothly render multiple layers of parallax scrolling tiles and sprites using pure DHTML. HTML 5 Audio is used where supported (currently Safari on Mac OS X 10.5 only, 10.6 and Firefox coming soon), and 3rd party extensions used elsewhere. All modern browsers and platforms are supported, including IE 6+, Firefox 3+, Safari 3+, Chrome 1+, and Opera 9+.
The team has also created a suite of online tools to allow developers to prepare and design their game online including managing graphics & audio, creating levels for their games and manipulating graphics in real-time using non-destructive filters (scaling, rotation, and a number of other transforms).
Developers can build their games locally on their Macs or PCs, and don’t have to upload any code until they are ready to publish. Once ready, developers can compile their code automatically using Google Closure, and receive a unique URL and embed code to share the game on their own site, blog, or anywhere they want.
I didn’t find anything that discussed licensing or a potential pricing model so that’s something that you may want to look into before diving into this but from what I’ve seen, the engine looks very promising.
OOP wrapping allows you to chain together computations: _([1, 2, 3, 4, 5]).chain().map( ... ).flatten().reduce( ... ).value();
Added speed comparisons with jQuery to the test page. Because Underscore delegates to the native implementations whenever available, its “each” function is over 5 times faster than jQuery.each in Safari, and over 3.5 times faster in Firefox. Your mileage may vary, so you can use the test page to check it in your browser of choice.
Added reduceRight / foldr, to go along with reduce / foldl.
Added first / head, and rest / tail for car and cdr enthusiasts. It turns out that they’re immensely useful on JS arguments objects.
Added a “range” function, identical to Python’s range(), for easy array initialization.
A slew of other minor improvements, to get Underscore working out-of-the-box on Rhino, to use the native StopIteration object to break out of loops where available, and so on.
The latest Underscore.js 0.5.0 includes a couple of API cleanups, a couple of speedups, and a more comprehensive isEqual() function, with Date, NaN, and RegExp support.
Marcus Irven has ported the commonly-applicable Underscore functions to Lua, and released an Underscore.lua library this weekend.
Some very exciting news coming from the jQuery project yesterday. The jQuery JavaScript library won .net Magazine's "Open source application of the Year for 2009″. This was a pretty amazing accomplishment when you consider that both WordPress & Firefox 3.5 were the runner-ups. Simon Willison was on hand to accept the award for the project.
I think the impact of this reaches further than just the jQuery project and validates how important well-managed JavaScript frameworks such as jQuery, Dojo, MooTools et al. have become to application development. With the focus shifting heavily to increasing performance of JavaScript browser engines (V8, TraceMonkey, SquirrelFish) and streamlining the delivery methods for our source code (SPDY, LabJS), the importance of these frameworks to help mitigate the complexities of cross-browser development, DOM nuances and provide best practices is finally becoming recognized and appreciated as the demands for complex features in web applications increases exponentially.
Blackbird, G. Scott Olson's JavaScript logging library, truly has a catchy slogan. The slogan "Say hello to Blackbird and 'goodbye' to alert()" definitely captures what the Blackbird library aims to do; make logging messages in JavaScript extremely easy. And setup is very easy. By incorporating the following lines of code, you've now added the ability to set checkpoints which will display specific data you're interested in:
From there, its a simple matter of using Blackbird's methods to send results to the console: JAVASCRIPT:
1. 2. log.debug( 'this is a debug message' ); 3. log.info( 'this is an info message' ); 4. log.warn( 'this is a warning message' ); 5. log.error( 'this is an error message' ); 6.
The nice thing is that each of these public methods uniquely displays the data to make it easy to determine the type of message being sent:
Blackbird has been tested in:
* Internet Explorer 6+ * Firefox 2+ * Safari 2+ * Opera 9.5
Brian Dillard was one of the first to announce this release and has also done a nice writeup of Blackbird.
1. Setting Equal Heights (jQuery example: $("#col1, #col2").equalizeCols();) 2. IE6 PNG Alpha Transperancy support 3. Changing CSS Classes in JavaScript 4. Browser selectors in CSS ($('html').addClass($.browser);) 5. min-/max- height & width support 6. Center Elements Vertically / Horizontally 7. Display Q tags in Internet Explorer 8. Increase the size of click targets and get more call-to-action conversions 9. Lazy loader 10. bgiframe: Helps ease the pain when having to deal with IE z-index issues. 11. ieFixButtons: fixes the buggy behavior of the element in Internet Explorer 6 and 7 12. Fix Overflow
As you will see, most of the solutions are jQuery plugins, but you could roll your own.
Ryan Stewart of Adobe joined us for episode 5 of the Open Web Podcast. We really want to be pragmatic Open Web citizens, so thought it would be good to hear from Ryan and get his point of view on what Adobe, and he, are thinking with respect to the Web as a-whole.
We had a really fun chat, which had us discussing:
* Adobe's view of the Web * Silverlight, and Alex's quote of the show: "Microsoft can't write JavaScript." Ah, come on, what about Scott Isaacs! * Ctrl/Cmd-R is the "Make All" of the Web, and Flex * ECMAScript, ActionScript, and the path forward * Video: A huge Flash advantage. Where does the video tag fit in? John pointed us to the experimental vorbis support via haXe * AIR: Ryan talked about how he sees AIR fitting into the landscape, and how he personally would love to see Geolocation APIs added * Open Source: Ryan shares his insight on the experience Adobe has gotten from their Open Source projects (Tamarin, Flex, ...)
It was a real pleasure to have Ryan come into the lions den. He is very honest with what he does and doesn't know from within, and doesn't hold back on his own thoughts.