<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-276471452374881368</atom:id><lastBuildDate>Wed, 07 Apr 2010 06:04:45 +0000</lastBuildDate><title>Extensioneering</title><description>A journey of learning that runs through various web and desktop applications and technologies, as seen through the eyes of a Adobe Dreamweaver extension developer.</description><link>http://blog.extensioneering.com/index.asp</link><managingEditor>noreply@blogger.com (Danilo Celic)</managingEditor><generator>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-6147606098459848663</guid><pubDate>Tue, 23 Mar 2010 16:18:00 +0000</pubDate><atom:updated>2010-03-23T11:33:13.726-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Media Queries</category><category domain='http://www.blogger.com/atom/ns#'>CSS</category><category domain='http://www.blogger.com/atom/ns#'>Dreamweaver</category><title>Dreamweaver Next: CSS Media queries</title><description>A while ago I commented on a possible future Dreamweaver feature that allows moving content from &lt;a href="http://blog.extensioneering.com/2009/10/copy-and-paste-future-of-adobe.html"&gt;Illustrator into Dreamweaver via copy and paste&lt;/a&gt;. There's also an updated video: &lt;a href="http://blogs.adobe.com/designandweb/2010/03/canvas_for_designers.html"&gt;Canvas for Designers&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Adobe's putting out showing off some potential Dreamweaver features at a new blog: &lt;a href="http://blogs.adobe.com/designandweb/"&gt;Design and Web&lt;/a&gt;. One post shows how we may be doing as part of a workflow that assists with development for multiple screen sizes:&lt;br /&gt;&lt;a href="http://blogs.adobe.com/designandweb/2010/03/multiscreen_authoring_with_css3.html"&gt;Multiscreen authoring with CSS3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm excited to get my hands on this feature as mobile is getting ever bigger. Adobe and Macromedia before that have been crowing over the coming of mobile, and the tools seem to be finally trying to sing the same tune.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-6147606098459848663?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2010/03/dreamweaver-next-css-media-queries.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-2264010998618947118</guid><pubDate>Wed, 10 Mar 2010 22:26:00 +0000</pubDate><atom:updated>2010-03-10T16:35:03.144-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>bubbles</category><title>You may have heard of event bubbling, but now there are Code Bubbles too</title><description>While roaming around today on &lt;a href="http://news.ycombinator.com/news"&gt;Hacker News&lt;/a&gt;, I ran across &lt;a href="http://codebubbles.org/"&gt;Code Bubbles&lt;/a&gt;, which is an interesting way to handle navigating through your code by displaying relevant portions of the code you're looking through in bubbles that allow you to blow up new bubbles as you drill down into your code. Be sure to watch the video on the main page as it will show you a bit more about what these code bubbles really are. It's quite interesting.&lt;br /&gt;&lt;br /&gt;If you're a Java developer, then you may want to sign up for their &lt;a href="http://www.cs.brown.edu/people/acb/codebubbles_beta_signup.htm"&gt;beta program&lt;/a&gt;. I don't do much Java (maybe 200-300 lines in the last couple of years), but I'd certainly like to see more about how this type of viewing of code will work, especially if could be expanded into the JavaScript realm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-2264010998618947118?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2010/03/you-may-have-heard-of-event-bubbling.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-7510169348525793272</guid><pubDate>Sun, 31 Jan 2010 23:24:00 +0000</pubDate><atom:updated>2010-01-31T17:53:40.083-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>JavaScript</category><category domain='http://www.blogger.com/atom/ns#'>Node.js</category><title>January 2010 Chicago JavaScript Meetup: I had a great time</title><description>So I had been meaning to go to a (relatively) local &lt;a href="http://www.meetup.com/js-chi/"&gt;JavaScript Meetup&lt;/a&gt; for several months, but it always seemed to be scheduled when I was on a business trip, out of town on vacation, or some other event that I needed to be at. But on January 28th, 2010 I was able to attend. The format was supposed to be a few lightning presentations (10-15 minutes) followed by a more in-depth presentation. Unfortunately the person that was supposed to give the longer presentation on &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt; (a built for scale database that uses JSON like structures to store data) wasn't able to make it so one of the event organizers (Zishan Ahmad) stepped up and gave a quick overview from some links provided by the original presenter.&lt;br /&gt;&lt;br /&gt;I especially liked the quick presentation done by &lt;a href="http://saucelabs.com/about/team"&gt;Jason Huggins&lt;/a&gt; on &lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt;. It wasn't a dive dive by any means, nor was it meant to be, but I had heard about Node.js a while ago, and never really took the time to look at it. I could tell that Jason was pretty excited about Node.js and because of that excitement I have since read up a bit more on it. While it is focused on being a Server side implementation of JavaScript, it can be used to perform local processing as well from its own console application. I'm thinking about finding a fun little project to explore what Node.js has to offer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-7510169348525793272?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2010/01/chicago-javascript-meetup.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-8830315077918069132</guid><pubDate>Tue, 12 Jan 2010 02:38:00 +0000</pubDate><atom:updated>2010-01-11T20:59:27.213-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>bookmarklet</category><title>Bookmarklets: Which do you use?</title><description>I've been interested in &lt;a href="http://en.wikipedia.org/wiki/Bookmarklet"&gt;bookmarklets&lt;/a&gt; for quite a while now, starting with a bookmarklet that takes the current page you're at and jumps up a folder which is quite nice when Google drops you a number of levels deep in a site and you want to see what's up a level especially if you end up on a 404 page (An example of this bookmarklet is called "Up a Directory" which can be found on the &lt;a href="http://www.bookmarklets.com/tools/navigation/index.phtml"&gt;Bookmarklet.com's Navigation category&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;With the advent of &lt;a href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt;, I've generally been stopped using them less and less often. I do keep &lt;a href="http://getfirebug.com/lite.html"&gt;Firebug Lite&lt;/a&gt; around for working with IE and Safari, and I will pull out &lt;a href="http://westciv.com/mri"&gt;MRI&lt;/a&gt;, &lt;a href="http://westciv.com/xray"&gt;XRAY&lt;/a&gt; from time to time and when I have some layout issues I may use &lt;a href="http://www.sprymedia.co.uk/"&gt;Spry Media's Grid and Crosshairs&lt;/a&gt; bookmarklets (not to be confused with &lt;a href="http://labs.adobe.com/technologies/spry/"&gt;Adobe's Spry JavaScript framework&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;And there's even some bookmarklets out there specifically for working with the &lt;a href="http://getfirebug.com/console.html"&gt;Firebug console&lt;/a&gt;. For example, there's &lt;a href="http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet"&gt;jQuerify&lt;/a&gt; which dynamically adds the latest version of the jQuery library to the page so that you can run some jQuery selector searches (or anything else jQuery) from the Firebug console.&lt;br /&gt;&lt;br /&gt;Are there any bookmarket's that you use and what you use them for? Please share a link to the hosting site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-8830315077918069132?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2010/01/bookmarklets-which-do-you-use.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-5248779304767294391</guid><pubDate>Thu, 24 Dec 2009 19:58:00 +0000</pubDate><atom:updated>2010-01-11T21:22:55.947-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>WebAssist</category><category domain='http://www.blogger.com/atom/ns#'>contest</category><category domain='http://www.blogger.com/atom/ns#'>swag</category><title>Pick the next WebAssist t-shirt</title><description>Maybe you don't know it, but I work at &lt;a href="http://www.webassist.com/"&gt;WebAssist building Dreamweaver extensions&lt;/a&gt;, and it's been a while since we've had any WebAssist swag. It seems that that's about to change what with a contest where you get to help decide what the next WebAssist t-shirt will be. I won't try to sway you at all on which is my favorite, so head on over to the &lt;a href="http://blog.webassist.com/2009/12/the-webassist-wut-t-shirt-contest-vote-now-and-win/"&gt;WebAssist blog entry and cast your vote&lt;/a&gt; for one of 6 different t-shirt styles and you could a $50 Amazon gift certificate. &lt;br /&gt;&lt;br /&gt;Note: contest ends 12/31/09 at midnight&lt;br /&gt;&lt;br /&gt;Update: &lt;a href="http://blog.webassist.com/2010/01/t-shirt-contest-winner-nina-of-sylvaticasolutions/"&gt;Winner of the the t-shirt contest announced&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-5248779304767294391?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2009/12/pick-next-webassist-t-shirt.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-1368485697286944963</guid><pubDate>Thu, 08 Oct 2009 02:35:00 +0000</pubDate><atom:updated>2009-10-07T21:58:43.913-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>MAX</category><category domain='http://www.blogger.com/atom/ns#'>Sneak Peak</category><category domain='http://www.blogger.com/atom/ns#'>Dreamweaver</category><title>Copy and Paste: The future of Adobe application interaction?</title><description>So I wasn't able to make it to MAX 2009 due to another project I was working on  ( which I'll try to be better at posting and talk about more that later), so I've been hitting all of the Adobe related blogs and aggregators for any tidbit of information I can get my hands on. I was perusing &lt;a href="http://blogs.adobe.com/jd/"&gt;JD's&lt;/a&gt; &lt;a href="http://twitter.com/jdowdell"&gt;twitter feed&lt;/a&gt; and I saw a mention of "Smart Paste" in Dreamweaver that intrigued me. He links to the &lt;a href="http://www.youtube.com/watch?v=v69S22ZBBqA"&gt;Smart Paste&lt;/a&gt;video posted on YouTube.&lt;br /&gt;&lt;br /&gt;The idea is interesting, intercept the pasting of content and insert some other content that can then manipulate the pasted content. In the video, they show a vector graphic of a chart copied from Illustrator and pasted into Dreamweaver. What gets inserted is a dynamic CANVAS tag that has its content drawn from a FXG file. They then link up the chart to some data and when viewed in a browser, the chart renders the chart with the data from an XML file. They then show a copying of an animation from Flash and pasted into Dreamweaver. Again a CANVAS tag is dynamically manipulated to display the animation.&lt;br /&gt;&lt;br /&gt;As someone that makes his living building &lt;a href="http://www.webassist.com/"&gt;Dreamweaver extensions&lt;/a&gt;, I'm pretty impressed in how they were able to bend Dreamweaver to their will. I know that pasting Fireworks HTML is processed via teh Dreamweaver extensibility layer, so I'll be sure to investigate how something like this can be done within Dreamweaver. As with all Sneak Peaks, there's the devilish caveat that some things may not make it into any coming release, but it serves well to open the eyes to what the possibilities are with Dreamweaver.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-1368485697286944963?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2009/10/copy-and-paste-future-of-adobe.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-4278152541641887872</guid><pubDate>Thu, 23 Apr 2009 17:24:00 +0000</pubDate><atom:updated>2009-04-23T12:40:47.523-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>WebAssist</category><category domain='http://www.blogger.com/atom/ns#'>RoadMaps</category><category domain='http://www.blogger.com/atom/ns#'>Dreamweaver</category><title>Dreamweaver Design Time Style Sheets and Diagnostic CSS</title><description>From time to time &lt;a href="http://www.webassist.com/"&gt;WebAssist&lt;/a&gt; ( my employer) in releases some free web development related training/education material called &lt;a href="http://www.webassist.com/training/roadmaps/"&gt;RoadMaps&lt;/a&gt;. Recently I contributed to this effort by writing an article on how to use Design Time Style Sheets for page diagnostic purposes. Essentially, what this means is that you can use CSS to visually determine how well your page is doing from a standards/best practices perspective. This is especially useful when taking over pages created by others.&lt;br /&gt;&lt;br /&gt;One example discussed in the article uses CSS to cause all links that have an event attached to them, say onclick, to be rendered with a thick red border. This allows you to quickly identify when you may want to move to an unobtrusive method of applying JavaScript on your page. To read more up on the subject, take a look at &lt;a href="http://www.webassist.com/training/roadmaps/"&gt;Diagnostic CSS Styling&lt;/a&gt; (Issue 7).&lt;br /&gt;&lt;br /&gt;Let me know if you have any questions about the article.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-4278152541641887872?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2009/04/dreamweaver-design-time-style-sheets.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-6697177443510326112</guid><pubDate>Wed, 04 Mar 2009 05:36:00 +0000</pubDate><atom:updated>2009-03-03T23:55:14.887-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Spry</category><title>Bottom and top Spry tabbed panels on one page</title><description>I posted a while back about how to create a &lt;a href="http://blog.extensioneering.com/2008/07/how-to-create-spry-tabbed-panels-with.html"&gt;Spry tabbed panel with the tabs at the bottom of the panel&lt;/a&gt;. The changes I suggested will cause other tabbed panels to be broken. I should have warned about that happening in that post, and suggested a different way that allows bottoms and tops to co-exist peacefully. Someone ran into the issue when they wanted to have top and bottom tabs on the same page. Here is what should work to allow both:&lt;br /&gt;&lt;br /&gt;1). Add the following code to the head of your document. The styles and functions will be used to make sure that the bottom tabs look and work properly.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;style type="text/css"&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;.TabbedPanelsBottomTab {&lt;br /&gt;position: relative;&lt;br /&gt;top: -1px;&lt;br /&gt;float: left;&lt;br /&gt;padding: 4px 10px;&lt;br /&gt;margin: 0px 1px 0px 0px;&lt;br /&gt;font: bold 0.7em sans-serif;&lt;br /&gt;background-color: #DDD;&lt;br /&gt;list-style: none;&lt;br /&gt;border-left: solid 1px #CCC;&lt;br /&gt;border-bottom: solid 1px #999;&lt;br /&gt;border-top: solid 1px #999;&lt;br /&gt;border-right: solid 1px #999;&lt;br /&gt;-moz-user-select: none;&lt;br /&gt;-khtml-user-select: none;&lt;br /&gt;cursor: pointer;&lt;br /&gt;}&lt;br /&gt;.TabbedPanelsBottomTabSelected {&lt;br /&gt;background-color: #EEE;&lt;br /&gt;border-top: 1px solid #EEE;&lt;br /&gt;}&lt;br /&gt;--&gt;&lt;br /&gt;&amp;lt;/style&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;var getBottomTabGroup = function()&lt;br /&gt;{&lt;br /&gt;    if (this.element)&lt;br /&gt;    {&lt;br /&gt;        var children = this.getElementChildren(this.element);&lt;br /&gt;        if (children.length)&lt;br /&gt;        return children[1];&lt;br /&gt;    }&lt;br /&gt;    return null;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var getBottomContentPanelGroup = function()&lt;br /&gt;{&lt;br /&gt;    if (this.element)&lt;br /&gt;    {&lt;br /&gt;        var children = this.getElementChildren(this.element);&lt;br /&gt;        if (children.length &gt; 1)&lt;br /&gt;        return children[0];&lt;br /&gt;    }&lt;br /&gt;    return null;&lt;br /&gt;};&lt;br /&gt;--&gt;&lt;br /&gt;&amp;lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2). Next modify your bottom tabs to look similar to the following code. Note that the main changes from a top tab  is that the tabs UL is at the bottom, and that the LIs now have a class of "TabbedPanelsBottomTab" (defined in the STYLE block above):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;div id="TabbedPanels2" class="TabbedPanels"&gt;&lt;br /&gt;    &amp;lt;div class="TabbedPanelsContentGroup"&gt;&lt;br /&gt;        &amp;lt;div class="TabbedPanelsContent"&gt;Content 1&amp;lt;/div&gt;&lt;br /&gt;        &amp;lt;div class="TabbedPanelsContent"&gt;Content 2&amp;lt;/div&gt;&lt;br /&gt;    &amp;lt;/div&gt;&lt;br /&gt;    &amp;lt;ul class="TabbedPanelsTabGroup"&gt;&lt;br /&gt;        &amp;lt;li class="TabbedPanelsBottomTab" tabindex="0"&gt;Tab 1&amp;lt;/li&gt;&lt;br /&gt;        &amp;lt;li class="TabbedPanelsBottomTab" tabindex="0"&gt;Tab 2&amp;lt;/li&gt;&lt;br /&gt;    &amp;lt;/ul&gt;&lt;br /&gt;&amp;lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3). Next, in the constructor for the bottom tabbed panel, change it to (all one line of code if you like):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var TabbedPanels2 = new Spry.Widget.TabbedPanels("TabbedPanels2",&lt;br /&gt;    {&lt;br /&gt;        tabSelectedClass:"TabbedPanelsBottomTabSelected",&lt;br /&gt;        getTabGroup : getBottomTabGroup,&lt;br /&gt;        getContentPanelGroup: getBottomContentPanelGroup&lt;br /&gt;    }&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The options being passed in tell the bottom tabbed panel to use the "TabbedPanelsBottomTabSelected" CSS class as the class when a tab is selected (this class is defined in the STYLE block added in step 1), as well as override the getTabGroup and getContentPanelGroup methods of the Spry Tabbed panel object to use the functions defined in the SCRIPT block added in step 1.&lt;br /&gt;&lt;br /&gt;Now preview your page. The bottom and top tabs should work correctly. Note: The bottom tabs will not look correct in Dreamweaver's design view due to how Dreamweaver handle's the display of Spry widgets is not compatible with the changes made above. In particular, in design view you will likely see the content of each tab, and only see the first tab displayed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-6697177443510326112?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2009/03/bottom-and-top-spry-tabbed-panels-on.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>7</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-5591387759970165517</guid><pubDate>Wed, 18 Feb 2009 17:15:00 +0000</pubDate><atom:updated>2009-02-18T23:37:53.899-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>JavaScript</category><category domain='http://www.blogger.com/atom/ns#'>Rockstarapps</category><category domain='http://www.blogger.com/atom/ns#'>minify</category><category domain='http://www.blogger.com/atom/ns#'>jsLex</category><category domain='http://www.blogger.com/atom/ns#'>JSLint</category><category domain='http://www.blogger.com/atom/ns#'>Eclipse</category><category domain='http://www.blogger.com/atom/ns#'>compress</category><category domain='http://www.blogger.com/atom/ns#'>Spry</category><title>Picking out the lint, and other JavaScript handling</title><description>A while ago I stumbled across a helpful &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; plugin called &lt;a href="http://www.rockstarapps.com/"&gt;jsLex&lt;/a&gt; that helps with working with JavaScript within your applications, and I thought that I should mention it in case someone comes along that is interested in work with Eclipse (and Eclipse based editors) and are doing work in JavaScript. Among the features in the current release that I've found especially interesting are:&lt;br /&gt;Compress/Minify/gzip multiple JavaScript&lt;br /&gt;Concatenate multiple JavaScript (with the ability to specify the order of the files)&lt;br /&gt;&lt;br /&gt;But there are a number of other features that I haven't dug into much that could be useful, such as &lt;a href="http://www.rockstarapps.com/joomla-1.5.8/products/javascript-profiling.html"&gt;JavaScript Profiling&lt;/a&gt; which allows you auto-inject profiling code into your existing JavaScript files. As I said, I've not played with it, mainly as it's not really clear exactly how to go about adding the profile code from the docs. I know that Bob is working on adding documentation for the project so I'm sure that this will be made clearer down the road.&lt;br /&gt;&lt;br /&gt;jsLex also includes some "Cloud" functionality, but I'm not there yet, so haven't touched that portion of it at this time, maybe in the future as it seems that a lot of folks are moving in that direction.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.rockstarapps.com/joomla-1.5.8/products/downloads.html"&gt;beta version of the plugin&lt;/a&gt; also adds Linting JavaScript files with &lt;a href="http://www.jslint.com/"&gt;JSLint&lt;/a&gt;. As pat on my back, I suggested this feature to Bob Buffone (the developer of jsLex) and he saw the value in it, and was able to add it pretty quickly to jsLex as part of the beta. FWIW: the site lists 1.2.2 as the beta, but the downloaded files indicate 1.2.5 as the beat.&lt;br /&gt;&lt;br /&gt;I did run into an issue with jsLEx linting feature when installed into &lt;a href="http://aptana.com/"&gt;Aptana Studio&lt;/a&gt; ( 1.2.1.020234 if it matters) where the Problems panel would randomly remove entries when an entry was double clicked in the Problems panel. Bob tells me that this is Aptana specific, and I do hope that there is a workaround found within jsLex, or an update to Aptana that stops this issue from happening, as it can be annoying when you're trying to nail down some of the issues reported by JSLint. As all things beta, I expect to have a couple of issues here and there, but overall the feature is fairly robust at this point.&lt;br /&gt;&lt;br /&gt;I have noticed that the files I've tried linting from &lt;a href="http://labs.adobe.com/technologies/spry/home.html"&gt;Adobe Spry framework&lt;/a&gt; will choke JSLint to the point where it will stop reporting "errors". This appears to be mostly due to the coding style the Spry library was written with, not due to functionality issues. As the JSLint site says, it may hurt your feelings, so I do hope the &lt;a href="http://blogs.adobe.com/spryteam/"&gt;Spry team&lt;/a&gt; isn't crying now. ;-)&lt;br /&gt;&lt;br /&gt;I had a conversation with &lt;a href="http://nate.koechley.com/blog/"&gt;Nate Koechley&lt;/a&gt; from the Yahoo YUI team when I was at Adobe MAX back in November, and he says that as part of their build process, they always run JavaScript files through JSLint. Perhaps future versions of Spry will consider making JSLint happy part of the coding for future versions of Spry. I'm not religious about JSLint, by any means, but it may be worthwhile to make the effort for Spry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-5591387759970165517?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2009/02/picking-out-lint-and-other-javascript.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-3476837700519135552</guid><pubDate>Wed, 21 Jan 2009 16:32:00 +0000</pubDate><atom:updated>2009-01-21T11:08:52.919-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>podcast</category><title>Web development podcasts, what do you listen to?</title><description>I've been listening to a few web/software development podcasts recently and I wanted to share a few that I find that I make sure to listen to as soon as I find out there's a new one out:&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt;: covers software design/development, mostly in an interview format with informative guests as well as thoughtful questions/comments by Scott.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt; conversations between &lt;a href="http://www.codinghorror.com/blog/"&gt;Jeff Atwood&lt;/a&gt; and &lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; generally covers the design, development, and progress of the Stack Overflow site, but generally spins away from that pretty quickly, as well as discussion about some interesting questions asked at &lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://boagworld.com/"&gt;Boagworld&lt;/a&gt;: web design news/commentary from a couple of funny guys: Paul Boag and Marcus Lillington both of &lt;a href="http://www.headscape.co.uk/"&gt;HeadScape&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Of course, working at home and being in front of a computer all day, I've yet to move any podcast onto a pod, but who's to question the coining of a new term, it's not like I've ever been accused of using &lt;a href="http://www.urbandictionary.com/define.php?term=fauxcabulary"&gt;fauxcabulary&lt;/a&gt;, right? ;-)&lt;br /&gt;&lt;br /&gt;So tell me, what podcats do you listen to that you'd recommend to another developer?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-3476837700519135552?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2009/01/web-development-podcasts-what-do-you.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-1488263441683338266</guid><pubDate>Fri, 19 Dec 2008 04:18:00 +0000</pubDate><atom:updated>2009-01-15T19:24:54.827-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Spry</category><title>Getting the "skinny" on skinning Spry menus</title><description>Massimo Foti is ever tweaking code he runs across and is probably the biggest reason I ever got into Dreamweaver extensions in a big way. Lately it seems that some of his spare time has been turned on Spry. &lt;a href="http://www.adobe.com/cfusion/webforums/forum/messageview.cfm?forumid=72&amp;catid=602&amp;threadid=1411820&amp;enterthread=y"&gt;He recently announced&lt;/a&gt; in the &lt;a href="http://www.adobe.com/cfusion/webforums/forum/categories.cfm?forumid=72&amp;catid=602"&gt;Adobe Spry forum&lt;/a&gt; that he is releasing a set of &lt;a href="http://www.massimocorner.com/spry/menubar/"&gt;skins for the Spry menu bar&lt;/a&gt; in Office 2003 styles: &lt;a href="http://www.massimocorner.com/spry/menubar/index.htm"&gt;Silver&lt;/a&gt;, &lt;a href="http://www.massimocorner.com/spry/menubar/green.htm"&gt;Green&lt;/a&gt;, and &lt;a href="http://www.massimocorner.com/spry/menubar/blue.htm"&gt;Blue&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've thought a good bit recently that skinning Spry widgets would be quite useful, as nobody likes out of the box styles these days. I mean, imagine a Spry version of &lt;a href="http://ui.jquery.com/themeroller"&gt;Themeroller&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-1488263441683338266?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/12/getting-skinny-on-skinning-spry-menus.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-2775956419259045903</guid><pubDate>Tue, 16 Dec 2008 19:39:00 +0000</pubDate><atom:updated>2008-12-16T13:53:42.811-06:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Spry</category><title>Spry 1.7 feature preview updates SpryData for basic xpath functionality</title><description>Looks like some action on the &lt;a href="http://labs.adobe.com/technologies/spry/home.html"&gt;Adobe Spry Framework&lt;/a&gt; front and a preview of a change that the 1.7 release will bring. Better basic xpath support in the Spry Data sets are set in the &lt;a href="http://labs.adobe.com/technologies/spry/preview/"&gt;preview&lt;/a&gt; that can allow users to avoid including xpath.js which can save ~72kb according to the &lt;a href="http://blogs.adobe.com/spryteam/2008/12/new_spry_feature_preview.html"&gt;post&lt;/a&gt; on the &lt;a href="http://blogs.adobe.com/spryteam/"&gt;Spry Team's blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm looking forward to seeing what else might be included in the 1.7 release. I think that it would be good if the Spry team could post a roadmap for the Spry framework so that we can see what sort of widgets and functionality are being planned. This would allow people to be able to comment on what is proposed, as well as give Spry widget developers some ideas on what to avoid working on so as to prevent duplicate work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-2775956419259045903?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/12/spry-17-feature-preview-updates.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-6404455820781865630</guid><pubDate>Sat, 20 Sep 2008 15:13:00 +0000</pubDate><atom:updated>2008-09-20T11:42:47.872-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>JavaScript</category><category domain='http://www.blogger.com/atom/ns#'>watch</category><title>Pesudo Threading in JavaScript: Watch what you're doing</title><description>I was working on some debugging and I wanted to do some logging of some variables that were going through numerous changes. However I didn't want to be littering my code with all the debug/logging code, you just know that I'd leave some of it in and cause me to do more searching and potentially have additional errors down the road.&lt;br /&gt;&lt;br /&gt;Anyway, I ended up using the JavaScript object &lt;a href="http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/watch"&gt;watch method&lt;/a&gt; when working with simple values by adding the watch to the parent object. This allowed me to keep my debugging/logging code in just a couple of places. The watch method also allows you to perform data validation by intercepting changes to values.&lt;br /&gt;&lt;br /&gt;A basic example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// Basic logger object&lt;br /&gt;function Logger(){&lt;br /&gt;    this.loggedItems = [];&lt;br /&gt;    this.logItem = function(itemToLog){&lt;br /&gt;        this.loggedItems.push(itemToLog);&lt;br /&gt;    }&lt;br /&gt;    this.showLog = function(){&lt;br /&gt;        alert(this.loggedItems.join('\n'));&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;// Create an instance of the logger object&lt;br /&gt;var myLog = new Logger();&lt;br /&gt;&lt;br /&gt;// Basic object&lt;br /&gt;function Person(){&lt;br /&gt;    this.age = 0;&lt;br /&gt;   &lt;br /&gt;    // add watch on age property&lt;br /&gt;    this.watch('age',&lt;br /&gt;               function(prop, oldVal, newVal){&lt;br /&gt;                   myLog.logItem('setting ' + prop + ' to ' + newVal);&lt;br /&gt;     return newVal;&lt;br /&gt;               }&lt;br /&gt;    );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Create new object&lt;br /&gt;var p = new Person();&lt;br /&gt;// set value&lt;br /&gt;p.age = 80;&lt;br /&gt;// drink from the fountain of youth&lt;br /&gt;p.age = 70;&lt;br /&gt;p.age = 60;&lt;br /&gt;p.age = 50;&lt;br /&gt;// Let's see that log&lt;br /&gt;myLog.showLog();&lt;br /&gt;// result:&lt;br /&gt;// setting age to 80&lt;br /&gt;// setting age to 70&lt;br /&gt;// setting age to 60&lt;br /&gt;// setting age to 50&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So what this does is to react any time that age is changed. So when age is changed, a function intercepts that change and is passed three parameters, the name of the property that was watched, the old value of the property, and then the new value of the property. This function then returns the value that will be used as the value that is actually assigned to the property when it is changed. In this example, we aren't doing any validation (you know a person can't be -12 years old right?), so we could check the value and if it isn't a valid value being assigned to the property, then we can return the old value and effectively not make any change to the property.&lt;br /&gt;&lt;br /&gt;What we are doing instead is logging the new value. This allows us to track the changes to this property as the application runs. In this simple example, we just just show the log after a couple of changes. You could expand this to more of your simple value properties.&lt;br /&gt;&lt;br /&gt;When I'm done debugging I just pull the code from the parent objects rather than from many places within the application. Still prone to leaving in some logging code, but it seems less so than logging at every point the property is changed.&lt;br /&gt;&lt;br /&gt;A caveat: Changes to an object or adding an element to an array aren't handled with the watch method as the "value" of the property being watched isn't changing, that is, the array contents are changing, but it's still that same array, and it's the array that is being watched, not the contents of the array, same thing with an object.&lt;br /&gt;&lt;br /&gt;Of course there are other ways to log and may be some better ways to add the logging in that would even further limit any issues when the debugging is over, but I just wanted to get across the basic usage of the watch method.&lt;br /&gt;&lt;br /&gt;So what's with the "pseduo threading" in the post title? Well that is basically from the processing that occurs, it steps through executing each line as it reaches it, until the assignment of the watched property, the processing then breaks off to the function passed into the watch method, does what ever processing needed, then execution picks up where it left off on the next line after the property assignment. So it's sorta "threaded" in that the other code gets executed without being directly called in the code, but it's pseduo in that it's actually executed inline.&lt;br /&gt;&lt;br /&gt;Alright, I think that's enough rambling for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-6404455820781865630?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/09/pesudo-threading-in-javascript-watch.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-5226162260913224583</guid><pubDate>Sat, 16 Aug 2008 16:16:00 +0000</pubDate><atom:updated>2008-08-16T11:52:40.595-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>explorers</category><category domain='http://www.blogger.com/atom/ns#'>transitions</category><category domain='http://www.blogger.com/atom/ns#'>Spry</category><category domain='http://www.blogger.com/atom/ns#'>effects</category><title>Help for creating custom Spry transitions</title><description>I've mentioned one way to add more transitions to Spry in &lt;a href="http://blog.extensioneering.com/2008/06/upping-your-transition-count.html"&gt;Upping Your Transition Count&lt;/a&gt;, but that assumes that you have pre-created easing equations. What if you none of the ones you've found meet your needs? Well you can create your own...if you know how to write one. All I've seen in my research is that your function needs to work like f(0) = 0 and f(1) = 1, but really what does that mean to someone that doesn't work with math functions much, and what is the 0 and 1 in this case when easing equations take 4 parameters (at least that's the case with Spry and &lt;a href="http://www.robertpenner.com/easing/"&gt;Robert Penner's equations&lt;/a&gt;)?&lt;br /&gt;&lt;br /&gt;To be honest, I really don't know (at least not yet), but I have found a tool that can be useful in creating a custom equation. Check out the &lt;a href="http://timotheegroleau.com/Flash/experiments/easing_function_generator.htm"&gt;easing function generator&lt;/a&gt;, a Flash application that allows you to use drag and drop or directly enter in some values to see what your easing equation will look like. For use with Spry, make sure to select the F5/FMX radio button at the top of the application. Drag and drop the numbered boxes at the bottom which will change the graph of the curve on the left. Then to see how the new equation changes the movement of an object, click on the red ball, then click elsewhere in the movie and the ball will move to that second location using your equation. Rinse lather, repeat as necessary to get an transition equation that you like.&lt;br /&gt;&lt;br /&gt;Once you have an equation, copy the text of the function and paste it into SpryEffects.js at the end of the built in equations. Make sure to give the equation a unique name, and put a comma at the end of the previous equation. growSpecificTransition is the last transition in the default SpryEffects.js file (at least in 1.6.1), and the resulting code would look similar to:&lt;br /&gt;growSpecificTransition: function(time, begin, change, duration)&lt;br /&gt;{&lt;br /&gt;if (time &gt; duration) return change+begin;&lt;br /&gt;var pos = time/duration;&lt;br /&gt;return begin + (5 * Math.pow(pos, 3) - 6.4 * Math.pow(pos, 2) + 2 * pos) * change;&lt;br /&gt;},&lt;br /&gt;&lt;br /&gt;myNewTransition: function(t, b, c, d) {&lt;br /&gt;var ts=(t/=d)*t;&lt;br /&gt;var tc=ts*t;&lt;br /&gt;return b+c*(17.495*tc*ts + -42.84*ts*ts + 35.695*tc + -11.2*ts + 1.85*t);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once you add that to your copy of SpryEffects.js, then you can use your new transition like you would any other transition. For example, an accordion could be written as:&lt;br /&gt;var Accordion1 = new Spry.Widget.Accordion("Accordion1", {transition: Spry.Effect.Transitions.myNewTransition});&lt;br /&gt;&lt;br /&gt;Or because SpryEffects.js automatically adds all transition off of the Spry obejct, youc an use:&lt;br /&gt;var Accordion1 = new Spry.Widget.Accordion("Accordion1", {transition: Spry.myNewTransition});&lt;br /&gt;&lt;br /&gt;You can also try to integrate your new equation into the Spry Effects Transition Sample (&lt;a href="http://labs.adobe.com/technologies/spry/samples/effects/transition_sample.html"&gt;online&lt;/a&gt;, or within the &lt;a href="http://labs.adobe.com/technologies/spry/home.html"&gt;Spry download package&lt;/a&gt;: /samples/effects/transition_sample.html). Just add your equation to the SpryEffects.js for the sampler and add the name of your equation to the transitions select list, and you should be good to go.&lt;br /&gt;&lt;br /&gt;Please post a link to any examples of any fun easing equations you've come up with. Also, if you happen to know how to write easing equations and can explain how in layman's terms, please do post your explanation, thanks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-5226162260913224583?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/08/help-for-creating-custom-spry.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-8585517472994620101</guid><pubDate>Wed, 30 Jul 2008 18:08:00 +0000</pubDate><atom:updated>2008-07-30T13:17:55.947-05:00</atom:updated><title>Speaking at MAX 2008: Extending Spry Framework</title><description>&lt;blockquote&gt;&lt;/blockquote&gt;I added the speaker badge a few days ago, but forgot to mention that I'll be speaking at MAX 2008 in San Francisco in November. The title of the session if Extending the Spry Framework, and I'll be giving it on Wednesday, November 19&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;/span&gt;th at 9:30 am - 10:30 am. Check out the &lt;a href="https://max.adobe.com/na/sessions/browser/"&gt;session browser&lt;/a&gt; select Spry from the Product list to see the Spry related sessions. Here's the session description:&lt;br /&gt;&lt;blockquote&gt;Move beyond the standard widgets, transitions, and effects available with the Spry framework. We’ll explore how both novices and power users can enhance their work by extending existing widgets to add new functionality, building new widgets with custom transitions from powerful Spry base components, and combining multiple visual effects to enhance the user experience.&lt;/blockquote&gt;If you have any thoughts on what widgets you'd like to see added to the framework, please do leave a comment so I can try to work it into the presentation.&lt;br /&gt;&lt;br /&gt;If you're coming to &lt;a href="https://max.adobe.com/"&gt;MAX&lt;/a&gt;, please stop by and we can talk Dreamweaver and Spry!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-8585517472994620101?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/07/speaking-at-max-2008-extending-spry.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>4</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-2009048824856717521</guid><pubDate>Wed, 02 Jul 2008 22:41:00 +0000</pubDate><atom:updated>2008-07-02T17:50:57.373-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Conceptual condensation</category><title>Conceptual condensation: meaning scales</title><description>Well, I guess that didn't take long, only about 10 minutes since the &lt;a href="http://blog.extensioneering.com/2008/07/conceptual-condensation-choice.html"&gt;last one&lt;/a&gt;, so here's another in the series.&lt;br /&gt;&lt;br /&gt;Hitting one of my frequent blog stops I ran into "&lt;span style="font-style:italic;"&gt;meaning scales&lt;/span&gt;" on &lt;a href="http://www.gapingvoid.com/"&gt;gapingvoid&lt;/a&gt;, in particular this quote:&lt;br /&gt;&lt;br /&gt;&lt;blockquote cite="http://www.gapingvoid.com/Moveable_Type/archives/004593.html"&gt;The size of the endeavor doesn't matter as much as how meaningful it becomes to you. &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://www.gapingvoid.com/Moveable_Type/archives/004593.html"&gt;Meaning Scales, People Don't&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-2009048824856717521?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/07/conceptual-condensation-meaning-scales.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-402881853750960954</guid><pubDate>Wed, 02 Jul 2008 21:48:00 +0000</pubDate><atom:updated>2008-07-02T17:40:28.446-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Conceptual condensation</category><title>Conceptual condensation: choice architechs</title><description>Every once in a while I run into a word or term that just seems to resonate with me, and not necessarily because I agree with the concept the words are trying to convey. Find the term for the first time will just make me sit back and think for a while. I've already blogged about one such term: &lt;a href="http://blog.extensioneering.com/2008/05/all-that-and-kitchencognitive-heatsink.html"&gt;cognitive heatsink&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I ran across another resonating term this afternoon. I've tracked &lt;a href="http://www.perceptualedge.com/blog/"&gt;Stephen Few's blog&lt;/a&gt; for a bit now. He has an opinionated view on data visualization. I don't know about you, but I like it when folks have a strong passion for something and can articulate that passion, especially if they are strong opinions weakly held. That is, no "staying the course" just because you decided on the course and no amount of new information can ever cause you to change your mind. Anyway, when I read his &lt;a href="http://www.perceptualedge.com/blog/?p=239"&gt;review of &lt;span style="font-style:italic;"&gt;Nudge: Improving Decisions About Health, Wealth, and Happiness&lt;/span&gt;&lt;/a&gt; I ran into the term: "&lt;span style="font-style:italic;"&gt;choice architects&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;It's not clear if the term is pulled from the book itself, or is just Few's way of discussing the book, but it just seemed to strike a chord with me regardless of its source. I think that it has stuck with me because I'm finishing up the specification stage of a project where I feel that we've put quite a lot of effort into balancing the huge number of potential choices that could be made by the user against the much smaller number of choices that most folks will want to be able to make most of the time. So I'll be thinking of myself as a choice architect in future projects, and I hope that keeping this new concept in mind will make me better at what I do. That's one reason I'm blogging it today as I can go back later and see if this term really has stuck with me, or if it is just another passing fancy.&lt;br /&gt;&lt;br /&gt;As this is the second time I've blogged about a term that rolled around for a while in my brain, I think that I'll make "conceptual condensation" a recurring post topic. If you have a term that just seems to stick with you for a while, even if you don't know why at the time you first ran into it, please post the term, your thoughts on why it resonates, and if appropriate include a link to where encountered the term.&lt;br /&gt;&lt;br /&gt;Please note: I didn't say or mean condescension in the post title. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-402881853750960954?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/07/conceptual-condensation-choice.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-4152297816693998891</guid><pubDate>Wed, 02 Jul 2008 15:06:00 +0000</pubDate><atom:updated>2008-07-02T11:53:58.603-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Spry</category><title>How to Create Spry Tabbed panels with the tabs at the bottom</title><description>Spry Tabbed panels in 1.6.1 allow you to have your tabs at the top or on the left. Dreamweaver CS3 &amp;amp; CS4 (&lt;a href="http://labs.adobe.com/technologies/dreamweavercs4/"&gt;try the CS4 beta&lt;/a&gt;)  will allow you to insert the tabs on the top, but it's pretty easy to change to vertical tab on the left by swapping out the class for the widget wrapper from TabbedPanels to VTabbedPanels. See the &lt;a href="http://labs.adobe.com/technologies/spry/samples/tabbedpanels/tabbed_panel_sample.htm"&gt;Spry Tabbed Panels documentation&lt;/a&gt; for more info on how the default tabbed panels work.&lt;br /&gt;&lt;br /&gt;However, if you want you tabs to appear on the bottom of the panels, then you're outta luck, by default that is. Fortunately the Tabbed Panels are pretty easy to tweak to allow you to have your tabs on the bottom, by making three small changes. The first is to reorder the code that comprises the widget such that the container for the tabs is after the container for the panel content. So you move from:&lt;br /&gt;&amp;lt;div id=&amp;quot;TabbedPanels1&amp;quot; class=&amp;quot;TabbedPanels&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;ul class=&amp;quot;TabbedPanelsTabGroup&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;li class=&amp;quot;TabbedPanelsTab&amp;quot; tabindex=&amp;quot;0&amp;quot;&amp;gt;Tab 1&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class=&amp;quot;TabbedPanelsTab&amp;quot; tabindex=&amp;quot;0&amp;quot;&amp;gt;Tab 2&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class=&amp;quot;TabbedPanelsTab&amp;quot; tabindex=&amp;quot;0&amp;quot;&amp;gt;Tab 3&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class=&amp;quot;TabbedPanelsTab&amp;quot; tabindex=&amp;quot;0&amp;quot;&amp;gt;Tab 4&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContentGroup&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContent&amp;quot;&amp;gt;Content 1&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContent&amp;quot;&amp;gt;Content 2&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContent&amp;quot;&amp;gt;Content 3&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContent&amp;quot;&amp;gt;Content 4&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;To:&lt;br /&gt;&amp;lt;div id=&amp;quot;TabbedPanels1&amp;quot; class=&amp;quot;TabbedPanels&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContentGroup&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContent&amp;quot;&amp;gt;Content 1&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContent&amp;quot;&amp;gt;Content 2&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContent&amp;quot;&amp;gt;Content 3&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;TabbedPanelsContent&amp;quot;&amp;gt;Content 4&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;ul class=&amp;quot;TabbedPanelsTabGroup&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;li class=&amp;quot;TabbedPanelsTab&amp;quot; tabindex=&amp;quot;0&amp;quot;&amp;gt;Tab 1&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class=&amp;quot;TabbedPanelsTab&amp;quot; tabindex=&amp;quot;0&amp;quot;&amp;gt;Tab 2&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class=&amp;quot;TabbedPanelsTab&amp;quot; tabindex=&amp;quot;0&amp;quot;&amp;gt;Tab 3&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class=&amp;quot;TabbedPanelsTab&amp;quot; tabindex=&amp;quot;0&amp;quot;&amp;gt;Tab 4&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;This change allows for easy display of the tabs at the bottom, because the tabs are now below the content panels.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then you need to tweak the CSS a bit. You can change the code in the SpryTabbedPanels.css, but you may need the default for some other tabbed panel instance. So if you add the following style block to your page (or add it to a separate CSS file):&lt;br /&gt;&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;!--&lt;br /&gt;  .TabbedPanelsTab {&lt;br /&gt;  position: relative;&lt;br /&gt;  top: -1px;&lt;br /&gt;  float: left;&lt;br /&gt;  padding: 4px 10px;&lt;br /&gt;  margin: 0px 1px 0px 0px;&lt;br /&gt;  font: bold 0.7em sans-serif;&lt;br /&gt;  background-color: #DDD;&lt;br /&gt;  list-style: none;&lt;br /&gt;  border-left: solid 1px #CCC;&lt;br /&gt;  border-bottom: solid 1px #999;&lt;br /&gt;  border-top: solid 1px #999;&lt;br /&gt;  border-right: solid 1px #999;&lt;br /&gt;  -moz-user-select: none;&lt;br /&gt;  -khtml-user-select: none;&lt;br /&gt;  cursor: pointer;&lt;br /&gt;  }&lt;br /&gt;.TabbedPanelsTabSelected {&lt;br /&gt;  background-color: #EEE;&lt;br /&gt;  border-top: 1px solid #EEE;&lt;br /&gt;  }&lt;br /&gt;  --&amp;gt;&lt;br /&gt;  &amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;If you compare the selectors to the matching styles in SpryTabbedPanels.css (.TabbedPanelsTab selector lines 67-83, and .TabbedPanelsTabSelected selector lines 105-108), you'll note that there are only two changes, moving from "top:1px;" to "top:-1px" for .TabbedPanelsTab and moving from "border-bottom: 1px solid #EEE;" to "border-top: 1px solid #EEE;".  These changes will allow the bottom tab to overlap the bottom of the content making it look seamless for the "selected" tab.&lt;br /&gt;&lt;br /&gt;So two down, one to go. The next change is in the JavaScript to allow the Spry Tabbed Panales widget to recognize the reordered tabs and content panels. As with the CSS, I'm putting this code into the page itself rather than modify the Spry files. Add the following to your page (pulled from SpryTabbedPanels.js lines 124-133 and lines 144-153):&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;!--&lt;br /&gt;  Spry.Widget.TabbedPanels.prototype.getTabGroup = function()&lt;br /&gt;  {&lt;br /&gt;  if (this.element)&lt;br /&gt;  {&lt;br /&gt;  var children = this.getElementChildren(this.element);&lt;br /&gt;  if (children.length)&lt;br /&gt;  return children[1];&lt;br /&gt;  }&lt;br /&gt;  return null;&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;Spry.Widget.TabbedPanels.prototype.getContentPanelGroup = function()&lt;br /&gt;  {&lt;br /&gt;  if (this.element)&lt;br /&gt;  {&lt;br /&gt;  var children = this.getElementChildren(this.element);&lt;br /&gt;  if (children.length &amp;gt; 1)&lt;br /&gt;  return children[0];&lt;br /&gt;  }&lt;br /&gt;  return null;&lt;br /&gt;  };&lt;br /&gt;  --&amp;gt;&lt;br /&gt;  &amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;The only changes here are moving from "return children[0];" to "return children[1];" in Spry.Widget.TabbedPanels.prototype.getTabGroup.&lt;br /&gt;&lt;br /&gt;Both changes reflect the change in order of the tabs and the content panels within the Tabbed panel wrapper div (&amp;lt;div id=&amp;quot;TabbedPanels1&amp;quot; class=&amp;quot;TabbedPanels&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;).&lt;br /&gt;&lt;br /&gt;Save and preview your page and viola, bottom tabs on your Spry Tabbed Panels.&lt;br /&gt;&lt;br /&gt;A couple of things to keep in mind. Dreamweaver won't properly display your tabs and content panels in design view, so you'll lose a bit there, and if your content panels are of differing heights, sat tab 1 content is 200 pixels high and tab 2 is 50 pixels high, then switching tabs will cause the bottom of the tabbed panels to move up and down (taking with them the tabs too).&lt;br /&gt;&lt;br /&gt;The former issue can't be worked around without mucking about a good int in Dreamweaver's internals, the second probably can be worked around by setting specific heights for the content areas and then maybe setting an overflow:scroll to allow for content that is too tall to the height you set. I haven't tested that type of change, but should be something like that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-4152297816693998891?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/07/how-to-create-spry-tabbed-panels-with.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>31</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-1843110001353503597</guid><pubDate>Wed, 18 Jun 2008 02:35:00 +0000</pubDate><atom:updated>2008-06-17T22:43:06.324-05:00</atom:updated><title>Upping Your Transition Count</title><description>No, I'm not becoming all health conscious, just looking at adding more transitions to those already present withing Adobe Spry's effects library.&lt;br /&gt;&lt;br /&gt;Spry includes a few transitions which you can check out in the &lt;a href="http://labs.adobe.com/technologies/spry/samples/effects/transition_sample.html"&gt;Effects Transitions Sampler&lt;/a&gt;, such as Linear, Sinusoidal, and Pulsate. For a complete list of build in transitions, check out Working with &lt;a href="http://labs.adobe.com/technologies/spry/articles/effects_coding/index.html"&gt;Spry Effects&lt;/a&gt;, and scroll down to the "Transition overview" section.&lt;br /&gt;&lt;br /&gt;Transitions are within the Spry.Effect.Transitions namespace object located in SpryEffects.js within the Includes folder in the &lt;a href="http://labs.adobe.com/technologies/spry/home.html"&gt;Spry download&lt;/a&gt; package. Once that file is open, you'll see the supported effects defined as functions attached to the Spry.Effect.Transitions object. This functions are commonly referred to as easing equations, and are in a specific format, so unless you're familiar with the math involved in creating an easing equation { f(0)=0 and f(1)=1 }, then I suggest you do what I've lazily done and look for pre-exisiting easing equations to play around with. And for that, we have &lt;a href="http://www.robertpenner.com/easing/"&gt;Robert Penner's&lt;/a&gt; to work with, or at least start from. So you could take the equations you find at Penner's site and then modify them for JavaScript, but handily, a number of folks have already done that, and one such example is at &lt;a href="http://developer.yahoo.com/yui/docs/Easing.js.html"&gt;YUI&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now, the YUI code has the equations in a YAHOO.util.Easing name space, so you don't want to copy that out, so near the beginning of the code sample drop:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;YAHOO.util.Easing = {&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and at the end, drop:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So if you grab all of the code that lies between the two snippets listed above, and then you paste it into SpryEffects,js between lines 81 and 82, then you'll have the listed easing equations available for use in transitions for your effects and widgets. &lt;span style="font-weight: bold;"&gt;Important&lt;/span&gt;: give credit where credit is due, make sure to copy the copyright info for the easing equations along with the equations themselves! As the equations and Spry are both BSD licenses, they mix together well, but pay attention when mixing open and closed source code.&lt;br /&gt;&lt;br /&gt;Please note that by default, all of the transitions are added to the Spry object directly (As of Spry 1.6.1 that is done in SpryEffects.js lines 83-86), so if you write your own equation, or use someone else's, please make sure to check the name of the function and ensure that there's no naming conflict because of the potential for overwriting another Spry object's, or for your transition to be overwritten by some other code. For example, naming an easing function Effect, would cause your function to be assigned to Spry.Effect, which would cause an issue for you (or anyone else) that needs the default Spry.Effect object.&lt;br /&gt;&lt;br /&gt;So if everything has gone correctly, you can now enjoy 16 new transitions along with the original 8 that are part of Spry 1.6.1.&lt;br /&gt;&lt;br /&gt;If you have run across any other transitions or effect tidbits, trivia, or interesting findings for Spry, or that you feel might apply to Spry, please leave a comment so we all can press forward!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-1843110001353503597?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/06/upping-your-transition-count.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-9033995495606943130</guid><pubDate>Tue, 03 Jun 2008 23:31:00 +0000</pubDate><atom:updated>2008-06-03T18:40:21.839-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Spry</category><title>Nested Spry Collapsible Panels</title><description>I ran into a project where I wanted to be able to use nested &lt;a href="http://labs.adobe.com/technologies/spry/home.html"&gt;Spry&lt;/a&gt; &lt;a href="http://labs.adobe.com/technologies/spry/articles/collapse_panel/index.html"&gt;collapsible panels&lt;/a&gt; in Spry 1.6.1 but I saw that when I expanded the child panels that they expanded over the border of the parent panel. I'll try to get a sample up soon to show how it didn't work correctly for me. But in the mean time, you can fix it by opening up  SpryCollapsiblePanel.js  (within a SpryAssets folder is you added the panel via Dreamweaver) and go to line 431, which reads:&lt;br /&gt;this.content.style.height = this.toHeight + "px";&lt;br /&gt;&lt;br /&gt;Change that to:&lt;br /&gt;this.content.style.height = "auto";&lt;br /&gt;&lt;br /&gt;And you should be good to go. The first fix I had tried set the height to an empty string which worked for any panel that doesn't have a height set in the CSS for the content. If you do have a height set in the CSS for the content, then setting the height to an empty string causes the CSS to take effect and if the CSS height is different than the height that Spry determined the content of the panel to be when the panel opens, then you could get some jumping as the animation finishes and then the height adjusts to the value set in the CSS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-9033995495606943130?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/06/nested-spry-collapsible-panels.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>7</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-157382633047593724</guid><pubDate>Wed, 28 May 2008 21:35:00 +0000</pubDate><atom:updated>2008-07-02T17:55:29.983-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Conceptual condensation</category><title>All that and the Kitchen(Cognitive Heat)sink</title><description>I saw a fascinating keynote speech (&lt;a href="http://blip.tv/file/855937/"&gt;video&lt;/a&gt;, &lt;a href="http://www.shirky.com/herecomeseverybody/2008/04/looking-for-the-mouse.html"&gt;transcript&lt;/a&gt;) the other day by &lt;a href="http://www.shirky.com/"&gt;Clay Shirky&lt;/a&gt;   author of &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2Fexec%2Fobidos%2FASIN%2F1594201536%2F&amp;amp;tag=extensioneeri-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;Here Comes Everybody&lt;/a&gt; where he discusses what he terms cognitive heatsink. Checkout what he as to say about Gin, TV and &lt;a href="http://wikipedia.org/"&gt;Wikipedia&lt;/a&gt; and where exactly people do find the time. I've been thinking about this speech for a few days now and just the name of the concept really struck home for me and I have it in my notes widget in my Vista sidebar as a constant reminder until I get struck with the next &lt;a href="http://en.wikipedia.org/wiki/Meme"&gt;meme&lt;/a&gt; to flow through me.&lt;br /&gt;&lt;br /&gt;For more on Clay check out &lt;a href="http://www.codinghorror.com/blog/archives/001122.html"&gt;Coding Horror's take on him&lt;/a&gt; which has a video where Clay discusses some of the concepts in his new book. I especially like how some technology becomes so important to our social interactions that it practically becomes invisible to what we are doing.&lt;br /&gt;&lt;br /&gt;If you've seen either or both, what are you thoughts on what Clay talks about?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-157382633047593724?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/05/all-that-and-kitchencognitive-heatsink.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-4440500002740935170</guid><pubDate>Wed, 28 May 2008 20:59:00 +0000</pubDate><atom:updated>2008-05-28T17:34:48.920-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Ajax</category><category domain='http://www.blogger.com/atom/ns#'>MooTools</category><category domain='http://www.blogger.com/atom/ns#'>Dojo</category><category domain='http://www.blogger.com/atom/ns#'>Spry</category><category domain='http://www.blogger.com/atom/ns#'>Google</category><category domain='http://www.blogger.com/atom/ns#'>Script.aculo.us</category><category domain='http://www.blogger.com/atom/ns#'>Prototype</category><category domain='http://www.blogger.com/atom/ns#'>jQuery</category><title>Are CDNs for JavaScript libraries a good idea?</title><description>I was reading &lt;a href="http://ajaxian.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-googles-infrastructure"&gt;Ajaxian&lt;/a&gt; and I see that &lt;a href="http://code.google.com/apis/ajaxlibs/documentation/"&gt;Google has launched what seems to be a CDN (content delivery network) for JavaScript libraries&lt;/a&gt;, in particular the following libraries are currently supported:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jquery.com/" alt="jQuery.com"&gt;jQuery&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.prototypejs.org/" alt="prototype"&gt;prototype&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://script.aculo.us/" alt="script.aculo.us"&gt;script.aculo.us&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mootools.net/" alt="MooTools"&gt;MooTools&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dojotoolkit.org/" alt="dojo"&gt;dojo&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;The discussion over at Ajaxian has it's share of folks in favor as well as detractors and I understand the potential issues where you'd now be dependent on Google's goodwill and server uptime for your site to function properly, but that you could get a potential speed boost as well some caching benefits as well. I knew that dojo was available via a &lt;a href="http://dev.aol.com/dojo"&gt;CDN from AOL&lt;/a&gt; already, so it seems at first to be a good idea to "prime the pump" of user browser caches, but I'm wondering if this is really it's cracked up to be.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://googleajaxsearchapi.blogspot.com/2008/05/speed-up-access-to-your-favorite.html"&gt;Google Ajax API entry&lt;/a&gt; specifically calls out speed as a benefit of this service, but the &lt;a href="http://code.google.com/apis/ajaxlibs/documentation/"&gt;Google Ajax Libraries API&lt;/a&gt; doesn't list any real world, or theoretical usage stats. I'm sure Google's data centers are plenty fast, but if anyone has done any testing to back this up, I'd really like to see it so we all can see the potential in this. And if it is a Good Idea™ then I'm wondering if &lt;a href="http://labs.adobe.com/technologies/spry/"&gt;Adobe's Spry&lt;/a&gt; should jump on that bandwagon too.&lt;br /&gt;&lt;br /&gt;So if you have any thoughts on JavaScript libraries, especially any testing done with CDNs, it would be good to hear from you. Comment away!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-4440500002740935170?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/05/are-cdns-for-javascript-libraries-good.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-3075545816499625871</guid><pubDate>Wed, 28 May 2008 15:00:00 +0000</pubDate><atom:updated>2008-05-28T10:58:10.331-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>MAX</category><category domain='http://www.blogger.com/atom/ns#'>extensions</category><category domain='http://www.blogger.com/atom/ns#'>Adobe</category><category domain='http://www.blogger.com/atom/ns#'>Dreamweaver</category><title>MAXin' and likely not relaxin'</title><description>Registration for &lt;a href="http://max.adobe.com/"&gt;Adobe MAX&lt;/a&gt; North America has been opened and they have posted a bit of information about the tracks and pre-event labs. From folks that I've talked to it seems as this event is going to be quite big, bigger than previous years, where it was damn big. Check out the latest information about the San Francisco event: &lt;a href="http://max.adobe.com/na/"&gt;http://max.adobe.com/na/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've not been able to make MAX for a few years now, not even when it was in my backyard so to speak last year when it was in &lt;a href="http://www.adobemax2007.com/na/"&gt;Chicago&lt;/a&gt;, but I did enjoy the 2005 event in &lt;a href="http://www.adobe.com/devnet/max2005/"&gt;Anaheim&lt;/a&gt; (check out video #5, that's me, boy is it painful watching yourself speak, I hope I don't use that many ums and ahs all the time!). I gave a low level view of getting started with Dreamweaver extensions. It is a large event so it can be tough making sure you're able to attend all the sessions and speak with all of the presenters that you'd like to, but it's quite the experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-3075545816499625871?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/05/maxin-and-likely-not-relaxin.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-5480276356542292372</guid><pubDate>Wed, 28 May 2008 04:03:00 +0000</pubDate><atom:updated>2008-05-27T23:25:50.554-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>CS4</category><category domain='http://www.blogger.com/atom/ns#'>beta</category><category domain='http://www.blogger.com/atom/ns#'>Fireworks</category><category domain='http://www.blogger.com/atom/ns#'>Dreamweaver</category><title>Beta get a bucket</title><description>Looks like the Dreamweaver and Fireworks teams are taking a more open approach to validating the work they've done so far with the updates for the CS4 release and have put out to the world beta offerings of &lt;a href="http://labs.adobe.com/technologies/dreamweavercs4/"&gt;Dreamweaver CS4&lt;/a&gt; and &lt;a href="http://labs.adobe.com/technologies/fireworkscs4/"&gt;Fireworks CS4&lt;/a&gt;. I also see that there are some videos on &lt;a href="http://tv.adobe.com/"&gt;Adobe TV&lt;/a&gt;, take a look at the &lt;a href="http://tv.adobe.com/#v=http%3A//adobe.edgeboss.net/flash/adobe/adobetvprod/dreamweaver_cs4_public_beta/62_dwb_001.flv%3Frss_feedid%3D1194%26xmlvers%3D2"&gt;Dreamweaver CS4 feature videos&lt;/a&gt;.  I've not looked much at the Fireworks offering just yet, but the Dreamweaver feature descriptions look intriguing and what was shown in the videos offers a great look into what has been cooking up in the &lt;a href="http://labs.adobe.com/"&gt;labs of Adobe&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm not overly impressed with the new look of the application, but I knew that they would be going that way given what was done with I think Photoshop and Flash among others in the CS3 releases. I hope that I grow used to the all gray all the time look.&lt;br /&gt;&lt;br /&gt;I think that of the features called out in the "New Features" list I'll be most interested in the JavaScript code hinting as I've often turned to &lt;a href="http://labs.adobe.com/technologies/jseclipse/"&gt;JSEclipse&lt;/a&gt; an Eclipse plug in for editing JavaScript files when I'm working with some library code with lots of objects that I don't know intimately, or that have a good bit of nested object namespacing such as &lt;a href="http://developer.yahoo.com/yui/"&gt;YUI&lt;/a&gt; or &lt;a href="http://labs.adobe.com/technologies/spry/"&gt;Spry&lt;/a&gt; . I'll also be playing around with Live View, Related files, and  HTML data sets, which I assume Spry uses as it has &lt;a href="http://labs.adobe.com/technologies/spry/samples/htmldataset/index.html"&gt;HTML data sets&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So grab a &lt;a href="http://en.wikipedia.org/wiki/Mr._Creosote"&gt;bucket&lt;/a&gt; and go check out the &lt;a href="http://labs.adobe.com/"&gt;betas&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-5480276356542292372?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/05/beta-get-bucket.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-276471452374881368.post-1146452688909659001</guid><pubDate>Wed, 28 May 2008 02:50:00 +0000</pubDate><atom:updated>2008-05-27T23:27:15.374-05:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>AIR</category><category domain='http://www.blogger.com/atom/ns#'>WebAssist</category><category domain='http://www.blogger.com/atom/ns#'>Adobe</category><category domain='http://www.blogger.com/atom/ns#'>Spry</category><category domain='http://www.blogger.com/atom/ns#'>Flex</category><category domain='http://www.blogger.com/atom/ns#'>Script.aculo.us</category><category domain='http://www.blogger.com/atom/ns#'>jQuery</category><category domain='http://www.blogger.com/atom/ns#'>Dreamweaver</category><title>Starting out on the curve</title><description>I've been involved with &lt;a href="http://www.adobe.com/products/dreamweaver/"&gt;Dreamweaver&lt;/a&gt; since I got a copy of Dreamweaver 1.2 ( for free on a CD that came with a British technology magazine that I don't recall the name of). I think that Dreamweaver 3 was about to come out or that it was just out and the 1.2 freebie was the incentive was to get 3 with an upgrade price. I was immediately struck with how lacking my then svelte  Notepad-Netscape 3 driven development seemed so lacking. :-)&lt;br /&gt;&lt;br /&gt;From there thinking back a bit, it seems that the learning curve really hasn't flattened out.&lt;br /&gt;&lt;br /&gt;After getting Dreamweaver 4 and Fireworks 4 studio I really started looking more at the way that Dreamweaver was truly built to be extended and I rooted around in the configuration folder and learned a ton. I struck up some friendships on the Dreamweaver forums and on the recommendation of &lt;a href="http://dwmommy.com/"&gt;Angela Buraglia&lt;/a&gt; I volunteered and was accepted to join Team Macromedia for Dreamweaver in early 2002 or so (has it been that long already?).  With the Adobe purchase of Macromedia a couple of years ago I became part of the &lt;a href="http://www.adobe.com/communities/experts/"&gt;Adobe Community Experts&lt;/a&gt; with my primary focus still being Dreamweaver. Along the way I've written a number of articles and tutorials at &lt;a href="http://www.communitymx.com/"&gt;CommunityMX&lt;/a&gt; a great resource site for all things Adobe, &lt;a href="http://www.amazon.com/Macromedia-Dreamweaver-MX-2004-Magic/dp/0735713782"&gt;contributed a chapter to a book&lt;/a&gt; and have been the technical editor for quite a few Macromedia and now Adobe product related books.&lt;br /&gt;&lt;br /&gt;I'm working at &lt;a href="http://webassist.com/"&gt;WebAssist&lt;/a&gt; (3 years June 1st this year, time files) where I mainly build extensions for Dreamweaver using the fantastic extensibility layer as well as coding ASP (JavaScript &amp;amp; VBScript),  &lt;a href="http://www.adobe.com/products/coldfusion/"&gt;ColdFusion &lt;/a&gt;and &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But as with all things, nothing stays the same; so I'm always looking for something to learn to stay on the up good side of the curve (notice a trend here? I'm parenthetical)(he says parenthetically). I've been doing a good bit of playing around and reading up on JavaScript libraries including Adobe's &lt;a href="http://labs.adobe.com/technologies/spry/"&gt;Spry&lt;/a&gt;, &lt;a href="http://script.aculo.us/"&gt;Script.aculo.us&lt;/a&gt;  &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;, and &lt;a href="http://mootools.net/"&gt;MooTools&lt;/a&gt; among many many others and how they can be used to enhance the user experience. When WebAssist had their latest redesign I helped put in some &lt;a href="http://moofx.mad4milk.net/"&gt;Moo.fx&lt;/a&gt; flavored actions. Intriguing also are content replacement/enhancements such a &lt;a href="http://novemberborn.net/sifr3"&gt;sIFR&lt;/a&gt;, &lt;a href="http://www.swfir.com/"&gt;swfIR&lt;/a&gt; and &lt;a href="http://www.schillmania.com/projects/soundmanager2/"&gt;SoundManager&lt;/a&gt;.  I've also been thinking a bit about the possibilities that Adobe &lt;a href="http://www.adobe.com/products/air/"&gt;AIR&lt;/a&gt; (and by extension &lt;a href="http://www.adobe.com/products/flex/"&gt;Flex&lt;/a&gt;) offers to web developers like me by bringing the technologies I know to the desktop.&lt;br /&gt;&lt;br /&gt;I hope to be able to keep on learning new and interesting technologies as well as learn about new ideas and trends, both in the realm of the technology I work with and the greater world at large. So join me and I'll join you in this fantastic learn experience that is life.&lt;br /&gt;&lt;br /&gt;Well I guess that's enough linking around, so I'll sign off this initial post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/276471452374881368-1146452688909659001?l=blog.extensioneering.com%2Findex.asp' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.extensioneering.com/2008/05/starting-out-on-curve.html</link><author>noreply@blogger.com (Danilo Celic)</author><thr:total>2</thr:total></item></channel></rss>