Skip Navigation Links
Search site. 
Powered by Google
Darren Neimke (Me)

My Book

Readify

">ASP.NET MVP


Interesting Portals 

NetVibes
This portal feels similar to PageFlakes in many ways but I love their gallery. They also have a feature whre certain chrome elements only become visible when you hover over the web part.

Xtra
A New Zealand news portal. I especially liked the content rotator web part at the top of the middle row. Seems like a nice way to allow a user to browse through data.

 

Posts Archive 

Posts for: Oct 2006

Friendly Url's, Provisioned Pages

I was sitting at Docklands tonight having dinner with Aymeric and talking about our respective web engines - mine: SingleUserBlog and his: AymericWeb smile_regular 

We each had things that we liked about the others' engine.  Aymeric liked the web parts of SUB and I really liked two of the features that he had: Friendly Url's and the ability to provision new pages (ala Wiki's). 

I'm really hoping that I'll get some time later this week to pull down the latest code for SUB from CodePlex and start to think about how these things might get added into the core SUB codebase.  Before I integrate any code changes into the SUB codebase I'll prototype how these changes might fit in.  Basically I see SUB as now having a number of page types (which BlogML supports smile_wink) such as:

  • BlogPost
  • Article
  • Wiki

I think that each page type would derive from a different page template and would be provisioned in a different manner.  For example, to create a new blog entry you would go into the Administration section and choose "New Post" from the menu.  Doing that would:

  • Instance a page from the BlogPost Template
  • Save the content of the page into the Posts data path
  • Save one post file per page

To create a new Wiki page you would embed a special syntax into the content of any page - something like what Aymeric used:

[[pageid|pagedisplayname]]

So, for example, if I wanted to create a Wiki entry for Regex, I could embed the meta tag like so:

[[regex|Regular Expressions]]

In addition to having these Wiki pages provisioned on the fly, they would also:

  • Use a friendly URL format
  • Save historical versions

This means that each version would get saved as a different content file in the Wiki data path - i.e.: Regex, Regex(1), Regex(2), Regex(3), etc.  The reason for saving all historical versions of the Wiki entry is so that you can track the evolution of the thought/idea.

The friendly URL format would probably look something like this:

http://MarkitUp.com/Wiki/Regex.aspx

On the topic of friendly URL's, Aymeric shared this great link with me which discusses some of the benefits of having nice, neat URL's:

http://www.edition3.com/articles/friendly-urls

posted on 10/30/2006 10:55:59 PM ( 2 Comments )


The portal framework

As I mentioned, my book is now fully released and is ready to ship from Amazon or the Manning site. 

Web Parts in Action

Now that the book is "out there" I'm hoping to really get behind it and to support it by doing a bit more blogging about the portal framework and also spending time answering questions in the ASP.NET web parts forum.

I'm particularly keen to start writing more code against the portal framework because that's the part that I really enjoyed the most when I was writing my book.  In Web Parts in Action I show how to create such cool portal extensions as:

  • A CatalogZone which displays in a pop-up dialog
  • Expandible/Collapsible EditorParts in the EditorZone
  • One-click editing of WebParts
  • Recovery page (which I talk about here)
  • and more

I was really "chuffed" to see a review here about my book which said:

"There are numerous functional areas discussed where I said out loud: "I didn't know it could do that!"."

So now I'd like to start creating more killer extensions for the portal framework because I love working with it.  As I get ideas about what sort of extensions to build from the forums or from comments I'll prototype them and then blog about them.  Some of them will probably get rolled into SUB too!

posted on 10/28/2006 12:05:07 PM ( 0 Comments )


Permissions for ASP.NET DB Services

This is a reproduction of a post that I made here earlier today.

You'll notice that when you install the ASPNETDB that there are a bunch of application roles which get created in that database.  There are groups of roles for:

  • membership

  • roles

  • profile

  • personalization

and for each of those, there is a "basic", "full", and "reporting" role.  So, for example, with personalization role there exists:

  • aspnet_Personalization_basic

  • aspnet_Personalization_full

  • aspnet_Personalization_reporting

in order to "enable" the web parts functionality, you should only have to grant your database user access to the aspnet_Personalization_basic role.  Likewise, if you want to use membership, then grant access to the aspnet_Membership_basic role.

Of course that's not the full story, if you want to learn about the exact difference between each of those roles, take a peek at this article:

http://msdn2.microsoft.com/en-us/library/ms164596.aspx

posted on 10/28/2006 5:44:18 AM ( 0 Comments )


The Readify Roundup

People often ask about life at Readify and it's always a tough question to answer smile_regular  Paul does a pretty good job with his Readify Roundup today of showing that there is always something happening:

    http://www.paulstovell.net/Posts/Post.aspx?postId=f6f02ee5-9d87-40ee-ac99-cbf36929cd9e

Just a couple of things to point from Paul's post:

  1. Corneliu is not a real vampire - he'll only suck out your secure strings bat
  2. Yes it is fairly typical to get 40-60 posts on the tech list in an afternoon smile_omg

All-in-all you could say that it's a pretty active place.  And as Paul mentioned in his previous post, the activity is certainly not limited to just technical stuff!

posted on 10/27/2006 10:21:51 PM ( 0 Comments )


Having trouble getting things done?

I remember seeing the following great picture on the Coding Horror blog:

Internet distractions

 

That picture was related to an article titled: Meet the Arch-Nemesis of Productivity: The Internet.

Related to that are some key additions to the Virtual Worker Manifesto which were proposed by Kent Sharkey that I still haven't gotten around to adding (sorry Kent).  In particular Kent offered this gem about getting things done:

If you're really busy, shut off IM (and probably also your e-mail client). Having your IM up, even marked as "busy" seems to just be an invite to people. Similarly, if you use Outlook, shut off the popup notification. You don't need to know the instant an e-mail comes in, it should be able to wait a while (previous manager's management style notwithstanding).

Now I know that this message is very pertinent to anyone working from home and I'll be sure to add it to the existing list real soon! 

Here's the full list of Kent's proposed additions:

    http://acmebinary.com/blogs/kent/archive/2006/09/04/810.aspx

I know that the "Don't eat crap" one especially applies to me - I now make sure that the fridge is full of healthy snackables such as: Carrots, Apples, and sliced **Watermelon. 

 

** The reason for pre-slicing the Watermelon is that it makes it easier to simply go to the fridge and grab a slice.  As opposed to having to cut up a slice whenever you want one - you slice it all in one hit at the beginning.

posted on 10/27/2006 3:27:07 PM ( 2 Comments )


It's here! :-)

My Book

This morning a delivery van pulled into the driveway and out came a man with a very heavy looking box.  He came to the door and my wife signed the acknowledgement form and the box came inside.  On opening the box I was blown away to see a whole pile of books - MY BOOK! - sitting there looking back at me.  It's all very real now smile_teeth   Finally now that I can sit here and hold my book I can honestly say that the days and nights that were spent learning and writing were all worthwhile.

This book has been available for purchase via the Manning site - either in paper format or e-book format - and there are also a couple of sample chapters available from there.  In addition to that the forums have started getting activity as well.

    Web Parts in Action on Manning site

    Sample Chapter 2 - Web Parts

    Sample Chapter 9 - Portal Management

    Manning Forums for Web Parts in Action

 

From what I understand, the book will be available from Amazon by the weekend.

    Web Parts in Action on Amazon site

 

Holding my book for the first time!

A whole box full of my books :-)

posted on 10/26/2006 10:46:39 AM ( 7 Comments )


The Phone Screen - Joel on Software

Link to The Phone Screen - Joel on Software

Not only do we have the Phone Screen at Readify, it is pretty much our entire interview strategy  smile_omg

We normally start with a technical interview which lasts anywhere between 45 minutes to an hour and then follow it up with a shorter HR style interview for successful candidates.  In addition to this I normally ask that people submit a photo of themselves and, sometimes even a snippet of some of their code.

Joel's approach differs slightly from ours but the desired result is undoubtedly the same.  Regardless, reading about Joel's technique has given me some ideas for strengthening how I've been conducting interviews.

posted on 10/25/2006 6:41:43 PM ( 2 Comments )


Just call me Mo Bro

Hi all,

During Movember (the month formerly known as November) I’ll be growin a moustache.

 Mo Bro Darren

That’s right I’m bringing the Mo back because I’m passionate about changing the state of men’s health.

Male health is a major issue, did you know:

  1. Men are far less healthy than women. The average life expectancy of males is 6 years less than females.
  2. Every year in Australia 2,700 men die of prostate cancer – more than the number of women who die from breast cancer.
  3. Depression affects 1 in 6 men…Most don’t seek help. Untreated depression is a leading risk factor for suicide. Rates of suicide are more than double the national road toll.

Help me change the face of men’s health by sponsoring my mo.

Please go to http://www.movember.com.au/au/sponsor, enter my Rego number which is 6935 and your credit card details.

The money raised by Movember will be used to change the face of men's health by creating awareness and funding research into prostate cancer and male depression.

Movember culminates at the end of the month at the Gala Partè where I’ll be parading my Mo on the cat walk for a chance to be crowned the Man of Movember. If you want to be part of this great night you’ll have to purchase a Gala Parte ticket for $33.00 (inc GST).

Cheers

Darren

More info is available at www.movember.com.au

Movember is proudly grown by Motorola, Polaroid, Remington and VB.

Movember is proud partners with the Prostate Cancer Foundation of Australia and beyondblue - the national depression initiative.

posted on 10/25/2006 8:27:58 AM ( 0 Comments )


How to get around internal and private members :-)

As I read Scott's reply to Paul's post I was thinking about the ingenuity of developers and how they will always find a way around such trivial things as access modifiers when I remembered a concrete example of it smile_wink

Fredrik Normen (http://fredrik.nsquared2.com) was one of the real pioneers with the ASP.NET Web Part stuff and I have him to thank for a lot of the stuff that I learned leading up to my book on the subject. This blog post is in no way a slight on Fredrik but instead serves to highlight his ingenuity smile_wink

One of his most popular creations was his Templated Web Part Chrome:

     http://fredrik.nsquared2.com/viewpost.aspx?PostID=248

I wanted to learn how he had managed to recreate the verbs on web parts because rendering verbs is a really tricky exercise. You have to take into account server side verbs, client side verbs, and also different browser types. As I had started to roll my own logic for custom rendering of verbs I just gave up - because it's way too hard.  Spelunking the code through Reflector told me that I was up for many hundreds of lines of code.  So I lolled over to Fredrik's site to see what he had done.  I looked at the tutorial here:

    http://fredrik.nsquared2.com/viewpost.aspx?PostID=...

And then downloaded the code project from here:

    http://www.gotdotnet.com/workspaces/workspace.aspx...

I really had to laugh - mostly because I no longer felt so silly smile_teeth when I saw how Fredrik had implemented it:

 

 

private string RenderVerbs(WebPart webPart) {
    TextWriter writer = new StringWriter();
    HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);

    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Table);

    typeof(WebPartChrome).GetMethod(
        "RenderVerbsInTitleBar",
        System.Reflection.BindingFlags.NonPublic |
        System.Reflection.BindingFlags.Instance).Invoke(this, new object[]         { htmlWriter, webPart, 1 });

    htmlWriter.RenderEndTag();

    TextReader stringReader = new StringReader(writer.ToString());
    return stringReader.ReadToEnd();
}

posted on 10/23/2006 9:38:52 PM ( 1 Comments )


American Dreamz (2006)

We hired American Dreamz on Saturday night: 

Link to American Dreamz (2006)

 

It was a bit of a speculative hire because I hadn't heard of it before but the storyline grabbed my attention - basically American Idol meets Afghanistan.  It was directed by Paul Weitz and it was on that basis that I decided to give it a go.

It turned out to be a hilarious 90 minutes.  My favorite character is the contestant from Afghanistan named Omar.  Whenever Omar finishes his performance he makes a shooting star gesture towards the audience (which I could find a picture of this) and says: "You've been Omarized" smile_regular

 

Highly recommended

posted on 10/23/2006 9:35:48 AM ( 0 Comments )


frankarr - an aussie microsoft blogger : Windows Live Writer - All the kids are using it

Having just read Frank's post: 

Link to frankarr - an aussie microsoft blogger : Windows Live Writer - All the kids are using it

 

I simply had to install the Insert a Spaces Emoticon plugin smile_regular  Let's see if this works fingerscrossed

posted on 10/22/2006 9:42:30 PM ( 0 Comments )


Posting from LiveWriter

I've been wanting to use LiveWriter for a while now but there was a bug in SUB which would not allow me to connect to it from LiveWriter.  Last night Paul sent me a fix which will hopefully work... here goes!

[Click]

 

Update: Here is the fix that Paul sent me:

 

SUB\BlueFenix.MetaWeblog\MetaBlog.cs:

private bool Authenticate(string username, string password) {

    bool result = DataLayer.Instance.Authenticate(username, password);

    if (result == true) {

        HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(username), new string[] { });

            }

    return result;

 }

This was because the SecurityHelper expects there to be a current user in HttpContext when you save a post, but when you login via the MetaBlog API one never gets set.

posted on 10/22/2006 3:42:27 PM ( 2 Comments )


Paul speaks his mind about sealed and internal framework classes

I love reading Paul Stovell's entries because he always challenges the 'norm' and, because he writes very clearly, it generally gets you thinking.  Last night he wrote another gem about his frustration with the current thinking towards making framework classes internal by default:

    http://www.paulstovell.net/Posts/Post.aspx?postId=57b30a69-9cb4-4ed2-bf8c-9ad978d7ef67

He even challenges some of the points raised by Keith Pleas and Scott Hanselmann in one of their Tech.Ed architecture sessions this year. 

I'm with Paul on this because I know exactly how frustrated I was whenever I wanted to extend the portal framework classes - such as Zones, Connections, and Catalogs - when I first started poking around with them.  The fact is that almost nobody will ever use the ASP.NET 2.0 Web Parts framework without needing to extend it.  And as soon as you start customizing parts of it you begin to find all kinds of code that you need to write which already exists within the framework but which is marked as internal, sealed, or private.  Undoubtedly the first thing that you do is to crack open Reflector and start copying and pasting huge slabs of existing code back into your IDE to get the behavior that you need.

One example that I clearly remember is when I first extended the CatalogZone control to do a very small customization and found that I had to re-implement a whole lot of existing methods which were marked as private:

   RenderInstructionText
   SelectedCatalogPart
   RenderCatalogParts
   RenderItems

I think that a lot of these design decisions are based around security and the need to reduce attack surfaces but I think that maybe we've gone too far by creating blanket rules which say that things should be closed by default 100% of the time.

posted on 10/22/2006 1:27:21 PM ( 1 Comments )


Creating a FetchXML 'In' clause for a CRM query

One of the ways to query Crm is to use FetchXML which allows you to send XML queries off to the CRM server and get results back.  There's a page here which shows some Fetch XML Examples:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/CrmSdk1_2/htm/v1d2fetchxmlexamples.asp

As you can see, a simple query might look something like this:

<fetch mapping="logical">
  <entity name="serviceappointment">
    <attribute name="subject" />
    <filter type="and">
      <condition attribute="statuscode" operator="eq" value="4" />
    </filter>
  </entity>
</fetch>


The values that can be accepted for the operator on the condition are:

<AttributeType name='operator' dt:type='enumeration'
    dt:values='lt gt le ge eq ne null not-null in not-in between
    not-between like not-like yesterday today tomorrow
    next-seven-days last-seven-days next-week last-week this-month
    last-month next-month on on-or-before on-or-after this-year
    last-year next-year eq-userid ne-userid eq-businessid
    ne-businessid' required='yes' default='eq' />


Today I was the first time that I'd needed to use the 'In' clause of the condition and was having trouble working it out.  Finally I decided to reverse engineer a solution by writing code which you can then convert to FetchXML format.  Here is the code that I had to write:


CrmService service = new CrmService();
service.Credentials = CredentialCache.DefaultCredentials;

//Create the base query
QueryExpression query = new QueryExpression();
query.ColumnSet = new AllColumns();
query.EntityName = EntityName.serviceappointment.ToString();

// Add an 'In' condition to the query
ConditionExpression condition = new ConditionExpression();
condition.AttributeName = "regardingobjectid";
condition.Operator = ConditionOperator.In;

object[] guids = new object[] {
    new Guid("7522228E-FFFF-DB11-B7BC-00142209BBBB"),
    new Guid("A00007DA-FFFF-DB11-B7BC-00142209BBBB"),
    };
condition.Values = guids;

FilterExpression filter = new FilterExpression();
filter.Conditions = new ConditionExpression[] { condition };
query.Criteria = filter;

QueryExpressionToFetchXmlRequest expression = new QueryExpressionToFetchXmlRequest();
expression.Query = query;
QueryExpressionToFetchXmlResponse queried = (QueryExpressionToFetchXmlResponse)service.Execute(expression);

string fetchXML = queried.FetchXml;

 

And here is the Fetch XML formatted solution that is returned by that query - note that when using the 'In' clause that you need to remove the 'value' attribute and use multiple 'value' child nodes instead:


<fetch mapping='logical'>
    <entity name='serviceappointment'>
        <all-attributes />
        <filter type='and'>
            <condition attribute='regardingobjectid' operator='in'>
                <value>7579A28E-FC3A-DB11-B7BC-00142209B048</value>
                <value>A0A9A7DA-F23A-DB11-B7BC-00142209B048</value>
            </condition>
        </filter>
    </entity>
</fetch>

posted on 10/20/2006 3:24:25 PM ( 4 Comments )


The joys of a live-in Office

At Readify we have what we call a live-in office which is located at Docklands - a couple of modern apartments that overlook Testra Dome and the waterfront and which serve a dual purpose.  During the day these apartments are the offices for any staff which want to use them.  During the evenings and on weekends they serve as accomodation for anyone who happens to be travelling into Melbourne for work or pleasure. 

Having a live-in office changes the dynamics of everything just a little bit.

How many of you can say that you've had a 7:15AM business meeting with your CEO while you were standing at the door and he was lying in bed! :-)

Seriously though, I always love coming down to Melbourne for work.  It's a great meeting point to catch up with the other Readifiarians and spend the night having whiteboard sessions and dreaming about unbuilt software application.

posted on 10/17/2006 8:20:33 AM ( 1 Comments )


New Readify site is live

We've been updating our website to a new DNN engine and with new graphics and the results are in:

    http://www.readify.net/

I like the fresh look and the site is much easier to navigate.  My favorite section is bound to be the Tech Zone because that's where we'll be putting all of the cool toys that we build :-)

Well done to the guys'n'gals who got this site across the line in time for the announcement that we made the BRW Fast 100!

    http://www.readify.net/Default.aspx?tabid=78

Woohoo!

posted on 10/15/2006 11:06:24 PM ( 1 Comments )


Could this be my last blog post ever?

This week I travelled to Adelaide for the funeral of my grandmother and, as with all trips to my hometown this meant spending time with my folks (God bless 'em :))  It's not that often that I get such a saturation of popular opinions about current events and so I always end up doing a retrospective when I leave their company to consider what I've learned.  From discussions with these people and through watching their popular media I have learned that we are in a fair amount of trouble at the moment - so I wanted to take this opportunity to warn my readers to be on the lookout; stock up on supplies; and batten down the hatches.  From what I have learned the human race is soon to become extinct for the following reasons:

  1. Melting polar ice caps will see sea levels rise by anywhere up to 7 meters within the next century - go long beachfront property in Arizona!
  2. Drying climate will see massive droughts dry up the Earth's stocks of drinking water.
  3. Climate change will see devastation through year-round Hurricanes, Cyclones, and Tornadoes.
  4. A nuclear holocaust caused by pre-emptive strikes on North Korea will see the total loss of life on the planet within the next 5 years.
  5. We are about to run out of Oil!

Did I miss any? :-)

posted on 10/13/2006 2:34:33 PM ( 5 Comments )


Other news of the day

Friday is the day that I always buy the AFR and take the time to digest it.  The AFR is primarily a financial newspaper but, through the finance lens you get many interesting articles.  Some of the articles that caught my attention today were:

One for the US
This was an article which told that, sometime this weekend or early next week, the US population will crack the 300 million mark.  It discussed some of the trends that have helped accelerate US population growth towards this milestone - such as immigration.  The article also highlighted the fact that immigrants such as Hispanic etc are starting to gain a much more influential role at the head of US business and politics. 

Track the US and World population growth here.

Day Traders
Day traders have had a significant in the US equity markets for decades but, in Australia it is a relatively new phenomenon - mostly taking off after the advent of online trading.  Today's AFR cites that there are now 20,000 day traders active in the Australian market, "each with access to at least $50,000 credit". 

This $1 billion in capital tends to move very quickly and, as you'd expect, tends to move in a herd-like manner.  The crux of this story was about how speculation on day trading message boards {sigh} had prompted a whole bunch of day traders to do their dingle dangles by moving into a stock which had accidentally been pushed from $6 to $10 in an errant trade.  Usual story, the punters got in at $10, the Stock Exchange suspended trading, and they lost their dough.

Aside from the statistics about the number of day traders in the market, the other fascinating detail in this article was quotes of the conversations that had taken place in these online day trader chat-rooms.  Very interesting insight into how herd mentality works.

My advice is that if you are thinking about playing in the stock market, remember that, at the end of the day there are two drivers: GREED and FEAR.  I've been fortunate enough to witness both first hand.

WA desalination plant ready
Australia's first major desalination plant is now ready to come online.  At a cost of $400 million it is the world's largest plant of this kind outside of the middle east.  It is estimated that this plant will product about 17 per cent of Perth's water supply.

With all Australian states now locked in the grip of a severe drought, I'm sure that the success of this plant will stimulate a lot of conversation over the coming Summer months.

posted on 10/13/2006 1:52:48 PM ( 0 Comments )


Blogger thrown out of Telstra?

As Geoff mentioned, there's an interesting article in this morning's AFR about a contractor who was working at Telstra and got 'released' a week after "seeking permission to become more vocal on his blog".  Throughout the article - which also includes a mention of Cam Reilly's The Podcast Network - the contractor is quoted as talking about his grand blogging vision...

"'...adopting the ethos and standards promoted by famous bloggers such as former Microsoft executive Robert Scoble'.  The plan was to 'tell the truth', 'post fast on good news and bad', 'use a human voice'"

I wonder if, in addition to all of that humanity-saving work that he'd taken ownership of doing that the contractor had also planned to do some of the work for which Telstra had engaged his services? :-)

Unfortunately we are destined to see many more such stories in the coming days.  Maybe my next book might be titled: "Crimes in the name of Scoble" :-)

posted on 10/13/2006 1:25:21 PM ( 0 Comments )


Mitch in The Age

I was sitting in a coffee shop in Melbourne this morning having a morning coffee with Graeme Armstrong when I noticed a very large picture of Mitch Denny in The Age.  The article was in the business section and was about Vista.  Unfortunately I haven't been able to locate the article on The Age's website as yet. 

There's also a comment from Adam Cogan in the article too.

posted on 10/10/2006 1:01:29 PM ( 1 Comments )


Modern Employment - A marriage of modern convenience?

The October 2nd article in the NYT titled "A Reporter Who Scoops His Own Paper" is about Bob Woodward and his latest book "State of Denial".  It certainly makes for interesting reading.  Bob is a senior journalist at the Washington Post but seems to leave a lot of his juicy news for his books.  On this occassion, previews of his latest book were actually leaked to other newspapers before it appeared on the Washington Post. 

The article alludes that regardless of missing the scoop from one of its own reporters, the Washington Post may not be bitter.

"After all, having Mr. Woodward as a hood ornament on the enterprise, even one who husbands his most lustrous scoops for his books, has its compensations"

Woodward is quoted as saying:

“The Washington Post is a great newspaper,” he said. “We have the best owners and the best editors. Being there helps me a lot, and while I focus on books, I do my best to help them in return.”

Finally, the paper postulates that:

"It is a marriage of very modern convenience, an exchange of brands that has little to do with a traditional employer-employee relationship. At a time when newspapers are hurting for attention, a paper will take it where it can get it. “It is an accommodation that The Post has made, and they seem to be happy with the arrangement,” said Edward Wasserman, a professor of journalism ethics at Washington and Lee University. “The important thing is everybody is going in with their eyes open, but the fact still remains that under the arrangement, supremely newsworthy information assembled by one of its senior editors is not going into the paper.”

 

posted on 10/6/2006 10:49:25 PM ( 0 Comments )


Creating physics programs by drawing on a whiteboard

I saw a link to the following movie on Phil's blog this morning.  It's pretty cool.

You can see the original location of this movie here.

posted on 10/6/2006 9:11:38 AM ( 1 Comments )