Motorola just won a customer for life for outstanding customer service. I know their products are sometimes over priced and sometimes have their issues, but this time around they did a great job.
I recently purchased a set of Motorola Bluetooth™ Active Headphones S9 and on the very first day of using them, the larger sized ear-buds fell off when they were around my neck. This was probably more my fault than a design flaw. Well, I wrote to Motorola customer support and explained the situation. I was fully willing to pay for new ear-buds (maybe up to $5), but Motorola was kind enough to send me a free set of ear-buds. I received them in the mail a couple days later. That is impressive. I’ve written to many companies for various issues with products or service, and this is one of the few times that I’ve gotten a satisfactory resolution with little pain on my part. Many companies don’t even bother responding (Looks in TGIF’s direction).
I know it’s bad that I am so impressed, but I am. So I figured the least I could do for such good customer service was to write favorably about it and hope that other companies start to follow suit. Kudos to Motorola for handing the situation as well as they did.
addthis_url = 'http%3A%2F%2Fthew0rd.com%2F2008%2F05%2F10%2Fmotorola-now-that-is-great-customer-service%2F'; addthis_title = 'Motorola%3A+Now+That+Is+Great+Customer+Service'; addthis_pub = 'thew0rd';Tags: motorola,, bluetooth,, bluetooth, headphones,, mobile
reading
firebird
performance
news
developer
Articles
Technical
In qooxdoo 0.8 we will introduce the concept of widget decorators. This has already been described in an earlier blog article. Decorators allow a widget's background to be styled independent of the widget's content. To demonstrate the flexibility of the decorator concept I have written a decorator, which uses native CSS rounded borders in Firefox and Safari/Webkit and emulates the same behavior in Internet Explorer. The screenshot shows the same qooxdoo 0.8 application in Internet Explorer 7, Firefox 3 Beta 3, WebKit r30082 and Firefox 2.0.11.
The widget shown in the screen shots is generated by the following snippet of qooxdoo code:
doc = new qx.ui.root.Application(document); var border = new qx.ui.decoration.RoundedBorder().set({ radius: [10, 20, 30, 40], width: [3, 10, 20, 5], color: ["red", "green", "yellow", "blue"], backgroundColor: "gray" }); doc.add(new qx.ui.basic.Label().set({ html: qx.bom.client.Engine.NAME, decorator : border, width: 140, height: 100, padding: 20 }), 10, 10);
I think the most interesting question is about the IE implementation. Since IE has no native CSS rounded border support, the borders must be rendered using a different technique. A common approach is to render the borders using pixel-sized DIV elements like e.g. RUZEE.Borders does. We have used a different and in my opinion much more powerful approach.
We use VML to render the background including the border. The VML code is dynamically created and inserted into the decoration DIV using plain innerHTML. Since the decorator is informed about size changes by the qooxdoo layout engine, it can update its borders accordingly. The rendering quality is amazing and looks pretty much like the best native browser implementation of Firefox 3. This is the code automatically generated and applied by qooxdoo:
<style>v\: * { behavior:url(#default#VML);display:inline-block }</style> <xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v" /> <div style="left: 10px; width: 140px; position: absolute; top: 10px; height: 100px"> <div style="z-index: 10; left: 25px; width: 85px; position: relative; top: 23px; height: 37px" usehtml="true">mshtml</div> <div style="z-index: 5; left: 0px; position: absolute; top: 0px"> <v:group style="left: 0px; width: 140px; position: absolute; top: 0px; height: 100px; antialias: true" coordsize = "140,100"> <v:shape style="width: 140px; height: 100px" coordsize = "140,100" fillcolor = "gray" path = " m10,1 ns l120,1 qx139,20 l139,70 qy110,99 l40,99 qx1,60 l1,10 qy10,1 x e"></v:shape> <v:shape style="width: 140px; height: 100px" coordsize = "140,100" fillcolor = "red" path = " m10,3 ns at5,3,15,13,10,3,5,3 wa0,0,20,20,0,0,10,0 wa100,0,140,40,120,0,140,0 at110,3,130,23,130,3,120,3 x e"></v:shape> <v:shape style="width: 140px; height: 100px" coordsize = "140,100" fillcolor = "green" path = " m130,13 ns at110,3,130,23,130,13,130,3 wa100,0,140,40,140,0,140,20 wa80,40,140,100,140,70,140,100 at110,60,130,80,130,80,130,70 x e"></v:shape> <v:shape style="width: 140px; height: 100px" coordsize = "140,100" fillcolor = "yellow" path = " m120,80 ns at110,60,130,80,120,80,130,80 wa80,40,140,100,140,100,110,100 wa0,20,80,100,40,100,0,100 at5,40,45,80,5,80,25,80 x e"></v:shape> <v:shape style="width: 140px; height: 100px" coordsize = "140,100" fillcolor = "blue" path = " m5,60 ns at5,40,45,80,5,60,5,80 wa0,20,80,100,0,100,0,60 wa0,0,20,20,0,10,0,0 at5,3,15,13,5,3,5,8 x e"></v:shape> </v:group> </div> </div>
Generated HTML for Internet Explorer
The first two lines are required to enable VML support and are only added once into a page. Note that only one of the DIV elements contains VML code. The rest is typical HTML code generated by the qooxdoo GUI toolkit, which does all the layouting itself, just using JavaScript. It consists of a couple of nested, absolutely positioned DIV elements with the appropriate CSS styles applied.
The code for Firefox is much simpler and just sets the browser-specific CSS styles:
<div style="position: absolute; z-index: 0; left: 10px; top: 10px; width: 140px; height: 100px;"> <div style="position: relative; z-index: 10; left: 25px; top: 23px; width: 85px; height: 37px;">gecko</div> <div style="border-style: solid; border-color: red green yellow blue; border-width: 3px 10px 20px 5px; z-index: 5; position: absolute; left: 0pt; top: 0pt; -moz-box-sizing: border-box; width: 100%; height: 100%; background-color: gray; -moz-border-radius-topleft: 10px; -moz-border-radius-topright: 20px; -moz-border-radius-bottomright: 30px; -moz-border-radius-bottomleft: 40px;"></div> </div>
The quality of rounded border implementations differ a lot between browsers. The CSS3 draft defines the property border-radius and a property for each corner like border-top-left-radius. These properties take two values, one for the horizontal radius and one for the vertical radius. That way it is possible to define (quarter-)elliptical borders. If only a single value is given, the border is (quarter-)circular.
Current browser implementations
-moz-border-radius and -moz-border-radius-topleft, respectively. -moz-border-radius supports the CSS shorthand mode. If only one parameter is given, the radius of all four border is identical. If four parameters are defined, the radius for all four corners is set individually. The rendering quality is very poor since Firefox 2 does not use anti-aliasing to render the border (cf. screen shot).-webkit-border-radius and -webkit-border-top-left-radius). Besides that, WebKit implements pretty much the CSS3 standard. Rendering looks fine as long as all border widths are equal. If they differ, the rendering looks quite ugly (cf. screen shot). This has already been reported in the WebKit Bugzilla and hopefully is going to be fixed soon.
Development
Firefox
safari
internet
qooxdoo
Technical
issues
qooxdoo 0.8 - the next major release that includes an exciting rewrite of the GUI toolkit - will also offer a powerful animation layer with a wide range of effects. qooxdoo animation, as we call it, is to a large extent derived from the well-known effect library script.aculo.us.
To give you a small example, I will demonstrate how easy it is to build a typical One Second Spotlight in qooxdoo:
Imagine your website has an info box with the current number of your product's downloads:
Downloads today: <span id="dlAmount">10</span>.
Every time a user starts a download, a function should be called to update the box. Using the Highlight effect on the element containing the number of downloads, you can easily get the user's attention:
var element = document.getElementById("dlAmount"); var attention = new qx.fx.effect.core.Highlight(element); function update(amount) { element.innerHTML = parseInt(amount); attention.start(); }
See the development version of the demobrowser for some early animation demos. Please note that the animation API might still change before the final 0.8 release. The current animation layer is a low-level DOM layer that will later also be used internally to animate the high-level qooxdoo widgets when they are available in 0.8.
I never thought what i did was as boring as these guys make it. Now to a certin degree its all about the equipment but to me it was always about the sound.
YouTube - Technical Maintenance Minute: Pro Tools