Saturday, August 20, 2005
by Nik Kalyani
Saturday, August 20, 2005 10:00:30 PM (Pacific Standard Time, UTC-08:00)

Most foreigners I encounter know all about Tintin and Asterix, my two most favorite comics, but most Americans have no idea who they are. I am always puzzled by this.

Spielberg owns the movie rights to Tintin and is reportedly working on a trilogy.

Tintin

 

 

#    Comments [2] - Trackback    

by Nik Kalyani
Saturday, August 20, 2005 8:10:21 PM (Pacific Standard Time, UTC-08:00)

This Optimus keyboard is pretty cool. Each key is an OLED display. This would be fantastic for usability. Imagine having the key icon change based on the shortcut depending on which application you are in.

I hope the production release is more ergonomic than pictured, but I am buying it anyway.

Optimus

#    Comments [0] - Trackback    

 Thursday, August 18, 2005
by Nik Kalyani
Thursday, August 18, 2005 11:33:57 AM (Pacific Standard Time, UTC-08:00)

Set Godin made an excellent point about the difference between urgent and important in his blog post today. My takeaway was this gem:  You will succeed in the face of change when you make the difficult decisions first.

Quite insightful. Made me think of the Microsoft Solutions Framework which advocates completing the highest risk elements of a project first to increase the chance of success. Although I do not follow the process, it has become almost second-nature for me to start with the most difficult and challenging aspects of a task first. Then, come crunch-time, the going is a lot less difficult than it would otherwise have been and quality is not compromised.

 

#    Comments [0] - Trackback    

 Tuesday, August 16, 2005
by Nik Kalyani
Tuesday, August 16, 2005 6:24:10 PM (Pacific Standard Time, UTC-08:00)

I am going to PDC05 in Los Angeles. Will you be there?

#    Comments [1] - Trackback    

by Nik Kalyani
Tuesday, August 16, 2005 4:53:06 PM (Pacific Standard Time, UTC-08:00)

ASP.Net supports dynamic code generation and compilation. Sometimes, you just need a quick and dirty solution. This is one such solution. It writes out a control script, loads it and then deletes the file.

string dynamicControlUrl = "~/" + System.Guid.NewGuid().ToString() + ".ascx";
string
dynamicControlPath = Server.MapPath(dynamicControlUrl);
TextWriter tw = new
StreamWriter(dynamicControlPath);
tw.WriteLine("<%@ Control language=\"c#\" %>"
);
tw.WriteLine("<script runat=\"server\">"
);
tw.WriteLine(" protected void Page_Load(object s, EventArgs e)"
);
tw.WriteLine(" {"
);
tw.WriteLine(" Response.Write(\"Hello World!\");"
);
tw.WriteLine(" }"
);
tw.WriteLine("</script>"
);
tw.Flush();
tw.Close();
Control dynamicControl = Page.LoadControl(dynamicControlUrl);
Page.Controls.AddAt(0, dynamicControl);
dynamicControl = null
;
File.Delete(dynamicControlPath);

 

 Sunday, August 14, 2005
by Nik Kalyani
Sunday, August 14, 2005 4:19:59 PM (Pacific Standard Time, UTC-08:00)

Finally decided to download the IE7 beta from MSDN. I am running it side-by-side with IE6 and I see some occasional error dialogs, but not sure if they are related to the fact that I switched it to run in local mode or if they are actually bugs.

BTW, to run IE7 in local mode --

1) Download and extract (using WinZip). Do not install.

2) Delete file shlwapi.dll

3) Create an empty text file IEXPLORE.exe.local

 

 

#    Comments [2] - Trackback    

by Nik Kalyani
Sunday, August 14, 2005 11:22:36 AM (Pacific Standard Time, UTC-08:00)

Alan Turing is largely credited with breaking Enigma and it is quite unfortunate that not many sources give as much credit to Marian Rejewski. Rejewski and his team in Poland had cracked Enigma almost a decade before they shared this with the Bletchley Park code-breakers. Turing was the one who later identified the vulnerabilities of Engima and designed the automated systems to speed up the decipherment.

Yesterday, I spent most of the day at the International Spy Museum. I share everyman's fascination with the spy business and the museum did not disappoint. It has a treasure trove of spy gadgets from all over the world and with some exceptions, does a pretty good job of documenting the exploits of spies throughout history. I especially liked the section on Enigma. Not only is the machine's working explained for the technically proficient, but there are also some nice interactive applications that allow the lay person to be amazed by its magic.

I didn't think much about Rejewski until I passed the Polish Embassy on my way to Starbucks. The museum exhibit had focused quite a bit on Turing, but I seemed to recall from reading on of my favorite books -- The Code Book -- that Poles were involved in cracking Enigma. Looking at the chapter on cracking the Enigma, I found that my memory had served me right for once. Simon Singh does a much better job at giving credit to Rejewski than does the museum. His team did the pain-staking task of developing the techniques that were later used by the Allies.

Unfortunately, that's how it always is, isn't it? History is in the eye of those charged with documenting it. Credit to both -- Rejewski and Turing.

 

#    Comments [2] - Trackback    

 Thursday, August 11, 2005
by Nik Kalyani
Thursday, August 11, 2005 9:28:18 PM (Pacific Standard Time, UTC-08:00)

I had paused my DasBlog conversion to DotNetNuke as Omar had hinted that an upgrade was in the works and had many bug fixes and trackback spam protection. Just saw the post that 1.8 is now Gold. Way to go. Time to get the migration done and crank out the best blog module for DotNetNuke.

[Edit: Installed and worked right-away. Good job DasBlog team.]

 Tuesday, August 09, 2005
by Nik Kalyani
Tuesday, August 09, 2005 9:05:38 PM (Pacific Standard Time, UTC-08:00)

Even though I think Podcasting is great for time-shifting professionally produced material, it's getting a little out of control in Podcast land with everybody taking a shot at being their own radio station.

First of all, not everyone is fun/interesting/tolerable to listen to. Secondly, why would I want to listen to someone drone on about a topic for 10-20-30 minutes when I could have skimmed and digested the same material in a few seconds or a couple of minutes had it been available in written form. Third, how am I supposed to find relevant material within the audio.

Until Google can accurately transcribe and make audio streams searchable, and...

Until the technology can somehow take a person's insipid commentary and make it into an interesting broadcast-quality piece, and ...

Until the technology is there to listen to audio streams at high speeds without the chipmunk effect...

... I will keep my 0.5 sec. attention-span on Podwriters (a.k.a. bloggers).

 

 

 

 

#    Comments [1] - Trackback    

by Nik Kalyani
Tuesday, August 09, 2005 8:11:10 PM (Pacific Standard Time, UTC-08:00)

This morning as I took in the shuttle landing, I did so with a recently acquired sense of amazement and appreciation for this most amazing of human machines.

My young nephews are visiting us in D.C. from Indianapolis and last week we spent a day at the Dulles-based National Air and Space Museum Steven F. Udvar-Hazy Center checking out the huge planes, missiles, rockets etc. that don't fit in the D.C. NASM. I have always loved planes because I grew up in an airline family. (My dad worked for Air-India for 40 years, my sister is currently a stewardess for the same airline, and just about every family friend and many relatives work for an airline.) Given my fascination with planes, the visit to Udvar-Hazy was a special treat. I was especially looking forward to seeing the shuttle as I have constructed many shuttle models ever since I was a kid, but have never seen a real one.

I was not disappointed. Seeing the shuttle close-up I was totally mesmerized. This is truly an awesome piece of hardware. I had to walk around it a few times to take in all the details. The one they have at Udvar-Hazy is the Enterprise (named after the Star Trek ship based on public votes). This shuttle has never been out in space and has only been used for testing on Earth. This in no way takes away from its magnificence. Large, graceful and majestic, I can only imagine how fantastic it must be to ride in one of these after years of grueling work and training. (Sorry the pic is a bit fuzzy...it came off my phone camera.)

At the museum, I also spent some time paying special attention to two other very famous planes.

The first was the SR-71 Blackbird -- the world's fastest and highest flying plane (>2000 mph; 80,000 ft.). I had no idea how big the plane was because I had never really seen any photos of it next to any person or thing. Take a look...the freakin' thing is huge (see people to the left of engine for comparison).

The second was the Enola Gay. Knowing that the anniversary of the day on which this silver monster unleashed atomic fury on Hiroshima from its belly (Aug. 6) was only three days away, I couldn't help but feel an incredible sadness for the innocent lives that this plane had caused to be destroyed. Today is the anniversary of the Nagasaki bombing and I feel even sadder. I was Googling the subject and came across Paul Tibbets website. If you have some time, check it out. It gives some deeper insights into the bombings.

 

 

 

#    Comments [2] - Trackback    

 Monday, August 08, 2005
by Nik Kalyani
Monday, August 08, 2005 8:27:34 AM (Pacific Standard Time, UTC-08:00)

I have not yet released a DNN 3.x-compatible version of my SkinWidgets suite. This is because my vision for this suite exceeds my current ability to do it justice. Ultimately, I want to merge SkinWidgets, Skinergy and a few other skin-related goodies I have as the ultimate skinning toolbox for DotNetNuke along with a large number of high-end skins created by professional graphic designers.

My idea of skins is a little different from most skins found in the DNN realm, so I want to clarify. For me, a skin should be more than just a visual layer for a DNN portal. I think skins should have a personality and the necessary bits to fully support that personality. For instance, if the skin is for a teen portal, it should not only have graphics that appeal to such an audience, but also widgets, doodads, etc. that instantly give the portal U.I. elements that fit the usability requirements of that audience.

Since it will take some time to work on this, I have prepared a DNN3 compatibility release of SkinWidgets. Existing customers can obtain it by emailing support at speerio dot net. It's the same as the DNN2 package except that it works on DNN3.

 

by Nik Kalyani
Monday, August 08, 2005 8:04:40 AM (Pacific Standard Time, UTC-08:00)

It seems like there are widgets everywhere. Apple added widgets to Tiger through the cool Dashboard feature. Yahoo has a whole section of its site devoted to widgets.

I greet widgets with a mixture of emotions. In 1999, when I created my venture-funded startup, my world-changing idea was to bring the web to people in the form of mini-applications that provided identical functionality with a web browser, a mobile device or a telephone. Not only that, the mini-apps had collaboration built-in so you could decide who could view/edit your data etc.

Yes, the mini-applications were called "widgets" and my startup was iWidgets, Inc. Unfortunately, the world wasn't ready for widgets at the time and I didn't know as much about running a startup then as I do today, and so iWidgets joined thousands of other dot bombs when I turned the lights out in early 2001.

But seeing all the buzz about widgets today gives me a good feeling -- I had the right world-changing idea, just at the wrong time and perhaps a little flawed in the execution. I felt nostalgic enough to go digging through the archive DVD's to pull up some promos we had created. Here are four of them, each focused a specific target market.

Janet  |  Hannah  |  Johnsons  |  Rob

 

#    Comments [1] - Trackback    

 Sunday, August 07, 2005
by Nik Kalyani
Sunday, August 07, 2005 10:17:34 PM (Pacific Standard Time, UTC-08:00)
 Thursday, August 04, 2005
by Nik Kalyani
Thursday, August 04, 2005 10:50:19 PM (Pacific Standard Time, UTC-08:00)

As some of you may know, I collaborated closely with Shaun Walker and others on the DotNetNuke® Core Team to develop the DotNetNuke brand identity. It's not quite done and is still evolving, but I am quite proud of my role in the team effort that brought the new DotNetNuke logo to life in a relatively short period of time. I had promised Shaun that I would document the process we went through, and I have started doing that, complete with scans of sketches/doodles etc. that showed how the logo evolved. I will publish the document very soon.

Recently, the official DotNetNuke Trademark Policy and Logo Guidelines were published. Even though we took care to ensure that the policies are sufficiently detailed to cover most situations, and we even provided visual examples, I am baffled by the types of questions that people post or email. It seems as if some people are just plain lazy. They don't want to take the time to read and would prefer to waste your time by asking questions that are already very clearly answered. It sounds a bit harsh, but I cannot think of a better explanation.

Even more perplexing to me is the sheer number of people who just don't get the concept of branding. For whatever reason, these people believe that taking someone else's brand (in this case DotNetNuke) and somehow adding to it their company name or some other graphic element results in a "cool" brand for their use. Again, I am being harsh, but seriously, how can you categorize this behavior as anything else but "clueless?" Don't people realize that this simply demonstrates their unoriginality and their inability to give their company or business its own unique identity? 

Any self-respecting artist prides her/his work, and I am no different. Although legally the DotNetNuke brand belongs to Perpetual Motion Interactive Systems, I am still bothered to see my work bastardized by people. Additionally, it sucks to see the DotNetNuke brand diluted by such leeches. I think the people who do this are quite aware of what they are doing. They are just missing this thing called a conscience.

by Nik Kalyani
Thursday, August 04, 2005 10:02:43 PM (Pacific Standard Time, UTC-08:00)

After seeing someone post "here, here" in the ASP.Net forums for the umpteenth time, I had to find a way to vent my feelings about this annoyance. So I have decided to add a new category to my blog called "Annoyances" where I can discuss some of the things that annoy me.

The correct spelling of the phrase is "Hear, hear!" Quite different from calling someone to come to you, which is exactly what "here, here" is all about.

"Hear, hear" originated in the British parliament in the 18th century as a contraction of "hear him, hear him."

I will save another annoyance -- "their" versus "there" -- for another day.

by Nik Kalyani
Thursday, August 04, 2005 9:46:00 PM (Pacific Standard Time, UTC-08:00)

I am pleased to report that the Baby Edutainment System is now operational and works as expected.

I went against my geek instincts and ended-up getting an eMachines computer. I always viewed eMachines as complete garbage, but it appears that since Gateway bought them, the quality has improved significantly. Here are the specifications of the machine I purchased...nothing phenomenal, but not a wimpy machine either.

CPU: AMD Athlon™ 64 3200+ Processor (512KB L2 cache, 2.2GHz, 1600MHz FSB)
Operating System: Microsoft® Windows® XP Home Edition SP2 1
Chipset: ATI RS480
Memory: 512MB DDR (400MHz)
Expandable to 2GB
Hard Drive: 160GB 2
Optical Drives: 16x DVD±RW multi-format double layer
Media Reader: 8-in-1 Digital Media Manager
Secure Digital (SD), Smart Media, Compact Flash, Micro Drive, Memory Stick, Memory Stick PRO, Multimedia Card, USB 2.0
Video: ATI Radeon® Xpress 200 (PCI-Express®)
128MB DDR shared video memory
Sound: AC '97 audio, Dolby 5.1 (6-channel)
Modem: 56K ITU V.92 ready Fax/Modem
Network: 10/100Mbps Integrated Ethernet LAN
Peripherals: Standard multimedia keyboard, 2-Button wheel mouse, amplified stereo speakers
Dimensions: 14.125"H x 7.25"W x 16"D
Ports/Other: 7 USB 2.0 (2 in front; 4 in back; 1 in Media Reader), 1 IEEE 1394 port (in back), 1 VGA external connector, 1 Parallel, 2 PS/2 (keyboard and mouse)
Pre-Installed
Software:
Microsoft® Works 8.0 1, Microsoft® Office 2003 Trial (60-day complimentary subscription), Microsoft® Money 2005, Microsoft® Encarta Online, Adobe® Acrobat® Reader™, Microsoft® Windows Media Player 10, Microsoft® Internet Explorer, RealNetworks RealPlayer®, CyberLink® PowerDVD, Nero 6 Suite, Napster 3.0, Quicktime, AOL 9.0 (w/3 months membership included), Google Toolbar, Norton Internet Security™ 2005 (90-day complimentary trial)3, McAfee Anti-Spyware 2005 (30-day complimentary trial), eMachines BigFix®

I neglected to check the floor model of the machine thoroughly at the store and only after unpacking it as home did I realize that some bean counter at eMachines had decided to save a few pennies by not attaching the composite and S-video connectors on the video card. The card supports them...it just has empty spaces where the connectors should appear. Arrgh...why do companies do that...penny wise and pound foolish. Well, I pretty much could not have the BES without being able to output to the TV, so this was a problem. I saw this as an opportunity in disguise. I wasn't too happy with the video performance of the ATI Xpress 200, so I ended up getting an ATI Radeon X700 Pro PCI-Express video card on eBay. I like its performance much better and it has every kind of output I would need, including DVI. Nice.

I have grown to really dislike new computers because I have to deal with uninstalling all the garbage software that comes pre-installed. Come on folks, seriously...enough of the free AOL hours and gazillion anti-spyware utilities and photo editors already. Just put a hardware switch on the box OK...two settings...(1) GEEK and (2) CLUELESS. Set the default to (2). If I choose (1), just put the barebones OS and then leave my computer alone. Anyway, where was I...so after messing with the hardware and seeing all the junk that came on the drive, I decided that there was only one way in which I could keep my sanity. Yes, I booted with the Windows XP Media Center Edition 2005 CD, blew away all the partitioned and installed the OS from scratch. Much better. BTW, if you are going to use Media Center Edition, use 2005...everything prior is crap.

After spending a few hours tweaking and tuning things, I finally had the system ready to go. So I ripped out all the electronic components from my entertainment center and dropped in the media PC. I hooked up my WinTV USB2 external TV tuner with DVR support (integrates seamlessly with Media Center Edition). I added the RF receiver for the SnapStream FireFly remote I purchased (Amazon...overnight). This is a sweet piece of hardware. Not only does it control all the MCE features without line of sight (thanks to RF), but it also has a cool mouse emulation mode. Not something I'll use all the time, but nice for the occasional mouse click. What I really like about it is that all the button macros are configurable by editing an XML file. Very well-engineered hardware, intuitive software and extremely usable. Finally, I added two receivers for the Dynex Wireless Keyboard and Optical Mouse. Why two receivers you ask? Well, as I mentioned in my original BES post...the Berchet keyboard overlays a standard keyboard. It basically straps on with some velcro bands. Not the best situation and I hope to someday cleanly attach it to a keyboard, but for the moment, that's what I have. Now, I figured it would be a big pain to attach/detach the overlay each time I wanted to use the regular keyboard, so I added a second keyboard and mouse (I don't use the mouse with the receiver on which the Berchet keyboard runs). Now, I have the best of both worlds...keyboard for baby and keyboard for daddy. When the baby is using the keyboard and messes up, I can co-pilot and fix things on-the-fly.

So the BES is more or less operational with this hardware. Of course, I still have to deal with the display issue since I have this wonderful, hi-resolution output going to my crappy analog TV, but it's OK for the moment. I am still having to fix the occassional glitch, so I'm not sure that the hardware is quite there yet, but I iam ready to tweak the software. In my next BES blog, I'll tell you more about the software setup.

It's all coming together quite nicely and baby is taking to the system quite well as you can see here (will work much better once I can get her to stop sucking on her fingers when using the system) --

Giaberchet

by Nik Kalyani
Thursday, August 04, 2005 9:04:11 PM (Pacific Standard Time, UTC-08:00)

CSS gives you the ability to control HTML presentation with a fair amount of granularity. However, if you take a peek at stylesheets from random websites, you will see that a vast majority of them define styles using Type, Class and ID selectors. This is fine, but only barely scratches the surface when exploring the capabilities of CSS. I'll try and shed some light on the different CSS selectors and hope it will help you create cleaner, more-compliant HTML.

Let's start with Type Selectors. These are the most basic of selectors as they require nothing more than an HTML element.

p { background-color: blue; } will change the background of all <p> elements on the page unless it's overridden with a local style definition or a nested element's style definition.

You can define the style attributes for multiple type selectors by separating them with commas, like this:

p, span, div { font-family: Verdana, Helvetica, Sans Serif; }

Take special note of the comma separator as it is often a hard to debug problem. In CSS, the comma is a separator for multiple selectors to which the style definition should apply, while the space character indicates a descendant selector which we'll examine in a moment. So the following two are completely different:

p, span { font-size: 11pt; }

p span { font-size: 11pt; }

Class Selectors allow you to define style attributes based on the value of the "class" attribute. The most common use of the class selector is like this:

.BorderedBox { border: 1px solid black; }

This would make all elements with a class="BorderedBox" attribute inherit this style. For example:

<div class="BorderedBox">Some text</div>

You can make this more interesting by keeping the class name the same, but varying the elements to which it applies. This gives you the ability to granularly define a style class based on the element to which it is being applied, like this:

p.Highlight { background-color: yellow; }
div.Highlight { background-color: yellow; border: 2px solid black; }

<p class="Highlight">Some text</p>

<div class="Highlight">Some text</div>

Although it is rarely used, CSS does have the capability to define hierarchical class selectors. I suspect it's not used a whole lot because it is not very well-known. In the example below, although there is no style definition for the class "NewHighlight," this class is used in a hierarchical class selector to define the appearance of a headline and body text.

.NewHighlight.Headline { background-color: yellow; font-size: 14pt; }
.NewHighlight.BodyText { background-color: #efefef; font-size: 10pt; }

<p class="NewHighlight">
<span class="Content">

<div class="Kicker">this is a kicker</div>
<div class="Headline">This is the headline</div>
<div class="BodyText">This is the body text</div>
</span>
</p>

This hierarchical class selector technique is very useful for defining zones within your page. You can have a series of standard class definitions used in your markup and completely change their appearance simply by changing the class label of the outermost wrapper element ("NewHighlight" in the example above).

While on the subject of hierarchical selectors, let's tackle the three selectors reserved for applying styles based on an item's position. The selectors are Descendant Selector, Child Selector and Adjacent Sibling Selector.

A descendant selector allows you to apply a style attributes to an item based on its order in a hierarchy. "Descendant" is often incorrectly interpreted to mean "direct descendant." In CSS, this is not the case. An item is selected as long as it is a descendant of the item before it, regardless of whether the relationship is child, grandchild, great grandchild etc. But, I'm getting ahead of myself. Let's first see an example of a descendant selector style definition:

.DescendantExample div a { background-color: red; }
.DescendantExample div span a { background-color: yellow; }

[Note: The DescendantExample class in the hierarchy exists merely to facilitate displaying examples in this blog. If I did not use it, all instances of the hierarchy on the page would be displayed in the style I have picked for the example. This would make the page look quite ugly.]

Recollect that earlier I cautioned against using a space where a comma was intended (i.e. for multiple items). As you can see from the above example, the space character is used for defining a hierarchical relationship. Using a comma would have completely changed the intended definition.

Here's how the above appears in practice:

<div class="DescendantExample">
<div>This is a <a href="#">link</a></div>
<div><span>This is another <a href="#">link</a></span></div>
<div><span><p>This is another <a href="#">link</a></p></span></div></div>

The overall definition is controlled by the wrapper <div> element with a class of "DescendantExample" which is the first in the hierarchy. Then a match is made based on the order of descendant element. For the first <div>, the match is <div> <a>; for the second it's <div> <span> <a> and it's the same for the third. Alert readers might notice that the <div> <a> hierarchy also applies for the second and third examples, however it is ignored in favor of the <div> <span> <a> hierarchy. This is because of how CSS computes specificity. The rules for this, although not very complex, are not simple to understand, so I'll leave it as the topic of a future blog post.

Child selectors are a specialized form of descendant selector. While descendant selectors could care less about what a descendant items level is in the hierarchy and how many intermediate items appeared before the descendant item, child selectors are pickier. In order to match a child selector, the items in the hierarchy must have a direct parent-child relationship without any intervening elements. Child selector hierarchy items are separated by the > symbol.

div.ChildExample  > a { background-color: red; }
div.ChildExample  > div > span { background-color: yellow; }

Here's how it appears:

<div class="ChildExample"><a href="#">This works</a></div>
<div class="ChildExample"><span><a href="#">This does not work because <a> is not a child of <div></a></span></div>
<div class="ChildExample"><div><span>
This works, too
</span></div></div>

(Note: Your mileage with the above example will vary since not all browsers implement this correctly.)

That's it for Part I. In Part II I will explore the remaining selectors: Adajcent Sibling Selector, Universal Selector, ID Selector, Simple Attribute Selector, Exact Attribute Selector, Partial Attribute Selector and Language Attribute Selector. In Part III I will explore pseudo-classes and pseudo-elements. Stay tuned.

 

 

#    Comments [0] - Trackback    

CSS

RSS feed
Search and Links
Bling

View Nik Kalyani's profile on LinkedIn

TechBubble
www.flickr.com
This is a Flickr badge showing public photos from techbubble. Make your own badge here.
Statistics
Total Posts: 216
This Year: 19
This Month: 0
This Week: 0
Comments: 226
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2008
Nik Kalyani
Sign In
All Content © 2008, Nik Kalyani