Publishing to Graffiti CMS from Diarist, Redux

At the end of November, I posted on how to publish (post) to Graffiti CMS from Kevin Daly’s Diarist application on Windows Mobile Professional Edition via the MetaWeblog API.  Kevin replied with a great tip on an even easier way to configure Diarist!

Kevin’s reply:
Actually, there’s something you can do to avoid typing the endpoint: since Graffiti CMS supports RSD (I just had a look) Diarist will do endpoint discovery – just enter your blog url in the erm, Blog URL field and select Menu->Find API (which should be enabled if there is no value in the API field), and Diarist should retrieve the appropriate value and populate the API field with the endpoint itself. This works for any blog that supports Really Simple Discovery (RSD)

I greatly appreciate Kevin taking the time to drop a comment and verifying that Graffiti supports RSD (which neither its existence nor its support by Graffiti was I aware of). Here is an illustration of Kevin’s method:

After launching Diarist, click the Menu soft key, then Weblog –> Add –> Generic MetaWeblog

 

Enter in the Username, Password, and Blog URL fields, then click the Menu soft key, then Find API.  (note: I have also found that this works without providing credentials.)

Diarist_FindAPI

 

Diarist will then, via RSD, discover your MetaWeblog endpoint and populate the API field after just a moment or two.  From there, click Confirm and you are on your way.

Graffiti CMS 1.2 Released

The folks at Telligent have released version 1.2 of Graffiti CMS.  If you are already running v1.1, the upgrade is dead simple – it is just a file overlay.  As fast as you can copy/ftp the files, you are upgraded. 

Granted, it took me a few more minutes because I put my entire website under source control (and usually don’t version binaries, but made an exception here), so I had to perform a check-out and check-in as well as the FTP up to my site host.  ..and the upgrade worked without issue (as one would expect).

Here’s the fix list (which is also on the page linked to above):

· Corrected Gravatar markup

· Dictionary references (%{}) in macros now work correctly

· PostsByTagAndCategory no longer returns an exception if no posts are found or an invalid tag or category is passed

· Now trapping invalidly formatted email addresses on the Contact form

· Time settings in error log now reflect the time zone offset

· Deleting navigation links containing special characters now works correctly

· Control Panel post category filtering is now maintained when “older posts” and then “newer posts” are clicked

· Updated VistaDB database engine to current version

· EveryoneRole no longer counts as a content publisher when it doesn’t have edit/publish rights.

· Search results now respect permissions

· Categories tree sidebar item in Control Panel now reflects posts correctly with same-named sub categories.

· Revision dropdown in Control Panel now shows the correct time/date stamp for each revision

· Corrected Comments paging in the Control Panel

· Corrected the XSS issue

Note that we also had these bugs logged, but our testing showed that the fixes were already present in Graffiti 1.1:

· Directory Path not found for FileBrowser in Mono

· Dashboard – GetFeeds throwing object ref not set

· Case sensitivity issue in TagCloud

· Bug posting with special characters in title with Live Writer

Graffiti Post Comments On January 23

On a recent post, an astute reader (and commenter) noticed that his comment (and all comments on that post) were appearing as ‘January 23, 2008’.  I looked. Yikes! He was correct.  Hmmm.

I hit the Graffiti forums and found a few threads that mentioned it, but no fixes. Time to take a peek on my own.  Once in the control panel, navigate to Presentation > Themes > Personalize (for the current theme). Next, click post.view to bring up the markup template behind an individual post.

At this point I thought the first step would be to just perform a search for the string ‘January 23’.  Makes sense, correct?  You bet.  So, I did; I found the string. And then I was sad. Here is what I found:
<a href=”#comment-$comment.Id” title=”Permanent link to this comment” rel=”bookmark”>January 23, 2008</a>

Hard-coded. That certainly explains it. Goofy theme author.

Next, I pulled up the post.view for the default Graffiti 1.1 theme. Oh, it is hard-coded here, too. More sadness.  Not the theme author’s fault. Well, not entirely.

Enough being sad, let’s get happy.  The fix for this faux pas is simple:

1) locate ‘January 23, 2008’ in your post.view template.  delete.

2) replace with: $macros.FormattedDate($comment.Published)    
     My comment link now looks like this:
     <a href=”#comment-$comment.Id” title=”Permanent link to this comment”  rel=”bookmark”>$macros.FormattedDate($comment.Published)</a>

3) Click the Save Changes button.

This will now list the date for a comment using a format that appears like this: ‘Tuesday, December 02 2008’. Spiffy!  Fixed.

Next steps?  Ask your favorite Graffiti 1.1 theme author to verify that, if they copied some parts of the default theme, they fixed this item in their theme.  Also, you will need to check this (and perhaps fix it) for any other theme that you use as well.

Oh, and what is so swell about January 23? Not certain, but a few things have happened on January 23.

Publishing to Graffiti CMS from Diarist

Some folks out there (like me, on occasion) prefer to use a client application for blogging from their Windows Mobile device, as opposed to using a web interface.  The client I like to use (which I have also used with Community Server) is Diarist  Diarist (download here) (note: requires .NET Compact Framework 2.0) from Kevin Daly.

I recently had cause to hard reset my Windows Mobile 6.1 Professional Edition device, so I needed to reinstall all of my apps.  Diarist, of course, being one of them.  It is also telling that I have not blogged from my device since before I switched from Community Server to Graffiti CMS, but that’s another story.

After launching Diarist for the first time, click the Menu soft key, then Weblog > Add > Generic MetaWeblog as in Figure 1.

GenericMetaWeblog

Figure 1

Once on the screen for entering blog information, enter in the API URL, username, password, and blog URL (see Figure 2).  For Graffiti CMS, the MetaWeblog endpoint is at /api/MetaBlog.ashx.  If your site is at http://yoursite.com, the URL for the MetaWeblog endpoint (i.e. API URL) would be http://yoursite.com/api/MetaBlog.ashx. After entering this information, click the Confirm soft key and you are ready to post to your blog!

APIInfo

 

Update: Check out my additional post on this topic for an even easier way to configure Diarist

And now, with Graffiti CMS power

Telligent Community Server is a good product, but a bit overkill for a single blog instance like this.  I have been looking for a turnkey solution to replace it, and I have found that in Telligent’s Graffiti CMS (1.1).

For my readers who subscribe to my feed (powered by FeedBurner), you will be blissfully ignorant of any changes; visitor’s to my site will notice some changes in layout.  They will also notice that my file downloads are currently unavailable – I will have this addressed shortly. 

After some trial and error (and re-reading the documentation <gasp!>), I achieved a flawless import of all my existing posts in CS to Graffiti (well done, Telligent).  I have set up redirects (so everyone using the old CS-based URLs won’t get lost, but the old-old URLs I was redirecting in CS are now toast) using James Avery’s Graffiti.Redirect (0.2).   Also, I have installed Graffiti Extras; however, I’m having some trouble getting the Windows Mobile theme selector to work correctly, but that seems to be an issue with this extension – stay tuned for some updates there.

Having gone through several CS version upgrades, I will say that the migration to Graffiti was painless by comparison (and frankly, painless overall).  Nice to see the product quality improvement, Telligent. Seriously, I wanted to love CS (2.x, 2007.x) with all my heart, but, damn it, there was some cruft in there that was just painful to deal with.

This time, it’s all milk and honey.  <AustinPowersVoice>Yeah, baby.</AustinPowersVoice>     Well done, Telligent, and I look forward to the 2.0 release.

 

Note: I was not bribed, threatened, blackmailed, blackballed, coerced, spammed, given the evil eye, or otherwise influenced by Telligent or their employees (even the ones here in Ohio) to write this ‘review’. I’m just seriously happy with this product.

MVP Summit 2008 and CODoDN 2008 wrap-up

I’ve fully returned to Eastern Daylight Time and gotten caught up on sleep, so now I can write a blog post and actually make some sense.

MVP Summit

Although I have now received the MVP award three times (2006, 2007, 2008), this year is the first time I have made it out to Redmond for the MVP Summit. And wow, very glad that I did attend!   In sum, MVP Summit 2008 rocked!

Sure, being briefed by the product teams on future directions was great, but even better was the great conversations between MVPs and with the product teams. At times, the discussion was heated very passionate, but only because we care so very much about these products and technologies.

It was great to see people I hadn’t seen in a while, like Drew Robbins, Ginny Caughey, Bill Ryan, Rob Miles, Alex Feinman, Darren Shaffer, Amit Chopra, and, of course, my MVP Lead Mike Fosmire. It was also great to meet some people for the first time like Alberto Silva, CJ Craft, Loke Uei Tan, Rob Tiffany, Peter Nowak, Nick Randolph, Richard Jones, Jim Wilson, Steve Lasker, and Mike Saffitz.  (and I’m certain my aged memory has forgotten someone – apologies).

CODoDN

After spending the better part of the week under information overload at the MVP Summit, I hopped the red-eye home Thursday night.  Friday was a bit of a blur as I didn’t get much sleep on the flight home. Saturday started bright and early as I headed up to Wilmington, OH for the Central Ohio Day of .NET 2008. Walking in the door, I ran into some friends from a past life (Keith, MikeL, Ben) and then I saw Joe Fiorini who was talking to Sarah and introduced me to her. 

Later, I ran into some folks I hadn’t seen in a while like Jason, Josh, Joe, Justin, Jay, and Jim (ok, I ran into Jim and Jason at the MVP Summit, so it hadn’t been that long).  I also got to meet a number of people from the region I have been Twittering with like Leon, Michael, Michael, James, Carey, Dan, Dan, and Amanda (F# it!).   I also got to meet two developer evangelists for Heartland district: Jennifer Marsman and Jeff Blankenburg.  And, of course, I couldn’t forget to mention seeing Brian at both the MVP Summit and CODoDN.

Oh, and I gave two talks, too.  If you attended either my Microsoft Sync Framework or Windows Mobile development in VS2008 talk, I’d like to hear from you. Either click the contact link on my blog to email me or leave an anonymous comment (I won’t publish it).  Was it good? Did it suck? Was the speaker bad but the content good?  Whatever your thoughts, let me know!  Thank you!

And last but not least, Mike deserves a lot of credit and praise for a well-organized and well-run event.

Check out Andy Erickson’s video clip, too.

Installing VMWare Tools on an Ubuntu Linux Guest

I was preparing a new virtual machine this weekend and ran into some troubles getting VMWare Tools installed (I repeatedly received errors about the vmhgfs module).  I am using VMWare Workstation 6.0.2, and the guest OS was Ubuntu Linux 7.10.  After quite a bit of futzing about, I turned to the Ubuntu Forums, where I found this gem of a thread.  A bit frustrating that the whole thing was caused by having “<” instead of “<=”.  Thanks to Ubuntu Forums poster aNyBosZ.

Post #2 by aNyBosZ gives the fix:

Software necesario
- sudo aptitude install build-essential linux-headers-$(uname -r)
vmwaretools
- cd /tmp
- tar -xzvf VMwareTools-6.0.2-59824.tar.gz
- cd vmware-tools-distrib/lib/modules/source
- cp vmhgfs.tar vmhgfs.tar.old
- tar xvf vmhgfs.tar
- cd vmhgfs-only
- chmod 644 compat_slab.h
- vi compat_slab.h
Search-> #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22) || defined(VMW_KMEMCR_HAS_DTOR)
Fix-> #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 22) || defined(VMW_KMEMCR_HAS_DTOR)
Save Chages
- chmod 444 compat_slab.h
- cd ..
- rm vmhgfs.tar
- tar cvf vmhgfs.tar vmhgfs-only
- cd /tmp/vmware-tools-distrib
- sudo ./vmware-install.pl

Feel free to sub in your favorite text editor for vi on the line “vi compat_slab.h”.  I used gedit.  (yesh, I’m a vi hater).

Scott Watermasysk’s CS modules

I recently found some very sweet modules that Scott Watermasysk has put together for Community Server 2.0.  Here’s the thread on them: http://communityserver.org/forums/518790/ShowThread.aspx  The download link is in the first post. I’m particularly stoked about the MetaBlog Extender which allows  should allow* me to declaratively set things like the name of my post and the categories in the body of the post.  Very handy for naming my posts from within BlogJet.

..and yes, I recompiled them under 2.0.

-Nino

*Unfortunately, this doesn’t work on my production (hosted) server in a medium trust environment. It doesn’t work because metablog.ashx doesn’t work in a medium trust environment.

My laptop transmogrifies into a hair dryer and other Vista installation tales

After I rolled off of my last project, I decided that it was time to flatten my laptop and start anew as it was getting a bit crufty (and, if for no other reason, to rid me of the evil known as ClearCase). I decided (as evidenced by the title of this post) to go with Vista [Enterprise] instead of another WinXP install. So, I made the usual preparations and then updated the BIOS (required for running Vista on this model) and set the boot device to the optical drive.

I then put in the DVD, rebooted and subsequently reformatted the drive, exorcising the demons from my laptop (or so I thought).  After installing the OS and OS components (e.g. IIS, MSMQ, etc), I disabled UAC.  I did so because some applications (Exhibit A: Windows Mobile 5.0 SDK) will silently fail otherwise.  The next thing I did was join the laptop to the corporate domain via VPN. After a few failed attempts and subsequent research, I discovered that I needed to make the registry edits described in this KB article for RPC.  That done, I started down my list (yes, I maintain an ordered list (I have OCD, what did you expect?!?)) of items to install which numbers around 100 entries. This includes applications, utilities, SDKs, service packs, and patches.

..fast-forward several hours...   My installations complete, I re-enabled UAC and then logged on with my domain account (which does not have adminstrative privileges – my choice).  Think I’m crazy?  I ran as non-admin on WinXP for years – doing development, no less. Yes, really. Am I masochistic, you ask? Perhaps. I happen to think that it is the RightWay to do things. 

As I’m getting things tidied up in my profile and letting Outlook rebuild its .ost file, my CPU gets busy. As a direct result, the fan gets busy too.  Unfortunate, but it is to be expected.  After this was complete and my machine was at idle, it had somehow transmogrified into my wife’s hair dryer.  Yep, the cooling fan was screaming and I was ready to flip out. As friends and family can attest, I’m an absolute freak when it comes to quiet and computers (more on that in an upcoming post).

A quick digression: On my last XP image, I installed the Toshiba PowerSaver utility craplet. Worthless. Caused my ears constant discomfort. I even brought my Targus ChillHub into work (which was an extra pain in the ass because ‘work’ was in another state and that was one more damn thing I had to haul around in my bag/on the plane). Not much help. I finally uninstalled that and instead installed the excellent SpeedSwitch XP utility. Life got much better very quickly.  Ok, back to the story…

Clearly, something was driving the CPU hard which triggered the fan to create such a ruckus. So, I opened Task Manager and then selected show tasks from all users (which as non-admin with UAC trigged an elevation prompt).  Task Manager goes away and then reappears (this is both disconcerting and annoying) displaying the processes from all users. Sorting on CPU reveals our serious offenders [in order]:

SearchIndexer.exe, SearchHostProtocol.exe, Outlook.exe, and MsCam32.exe

Well, well.  Vista was indexing – like a file clerk who just did an eight ball.  Outlook was..busy (hrmph). And MsCam32 was being stupid (and with no cam connected -wtf?!?). I then broke out three more tools from my toolbox: Process Monitor, FileMon and RegMon as I wanted to see _what_ these processes were doing (note: As noted by Grant in the comments, ProcMon replaces FileMon and RegMon. I realized that soon after I opened up the three but I still blogged that I opened all three – and yeah, I haven’t spent much time with ProcMon, yet).  These are three excellent SysInternals utilities (get the troubleshooting suite).  In the process of sorting this all out, I found another soul who was experiencing similar pain: read Mike Fullerton’s post. I agree with Mike, I would like to schedule SearchIndexer.

Ok, so Vista wants to index; let’s let it be.  I broke out the ChillHub (why not try to help out the cooling fan?) and sequestered my laptop to another room for the night.  When I returned to it in the morning, I was pleasantly surprised to find my laptop much quieter.  Still, the volume level of the fan was higher than, oh, near silence, so I was not yet happy.  

I then went to Control Panel > Power Options > Edit Plan Settings and selected ‘Change advanced power settings’.  This opens the Advanced settings dialog. In which, I located the ‘Processor power management’ entry. I changed the minimum and maximum processor states (I ended up doing this a few times over the course of several days to get it to where I was happy). This helped a bit more. If you change these, don’t forget to edit these for _all_ power plans, although you may wish to maintain different values for each power plan. 

While I am pretty happy where things are from a noise perspective when my laptop is plugged in (and not being stressed by say, lengthy compilations in VS2005), when it is on battery, I’m less than happy and I haven’t yet found the magic formula.  Still tweaking and trying to avoid being on battery.  And yes, I did install the PowerSaver utility for Vista. Again, worthless, but I tried.

I’m still searching for the magic formula to keep the fan quiet while I’m on battery; I’ll update this post if/when I do. Part of me thinks that I should be grateful that I can even run Vista on my M3; the other part of me is bitter about the fan noise.  Someday, I might actually have a laptop whose fan I won’t *** about. Right. Not bloody likely.

Update (200703150850): I found Notebook Hardware Control, but all I get is a blue screen (noting Reference by Pointer).  Oh, and did I mention that Speedswitch XP does not run under Vista?

Blog changes – Part II (the joys of medium trust)

Earlier this month, I signed up with FeedBurner in order to have a better syndication experience for my readers.   That was Part I of the changes. Part II took a bit longer than the additional time I had allowed for it. 

“The plan” for Part II was to move off of Community Server (hereafter, CS) 2007 and onto Subtext.  Things didn’t go quite as planned – imagine that. 

Why move off of CS?  CS has a lot of functionality, more than I need or use. And, it is slow sometimes (in fairness, I think that a bit of this is due to the fact that I run it on a shared server).   So, once this decision was made, off to find a new blog engine.  I quickly arrived at two options: Subtext and dasBlog.   Both of these are excellent options in my opinion.   To keep it brief, I opted for Subtext because I wanted to keep the SQL Server back end.   Ok, fair enough. 

As noted, I host nino.net at Server Intellect on a shared server (i.e. shared web and database servers). As many (most?) web hosting companies do these days with ASP.NET 2.0 in a shared environment, they mandate a state of Medium Trust.   Many things break under medium trust, if you’ve not designed for it. Keyvan discusses this here.

Since support exists in both CS and Subtext for BlogML, I decided to use this to do the data transfer.  For the export from CS, I used Keyvan Nayyeri’s BlogML converter.  For the import, well, Phil and the Subtext team have baked that in. And the import worked flawlessly save for one post (The Mobile Minute 50), which I removed from the XML and need to figure out what is wrong with it (XML Spy says that the full BlogML export is compliant with the BlogML schema, so that’s not it).

I then created “blog” directory on my root and then went to my control panel and set this directory up as both a virtual directory and virtual application. Afterwards, I installed all the spiffy Subtext bits into there.  I also followed Phil’s guide for configuring Log4Net (used by Subtext) under medium trust.   Mind you, gentle reader, I ran through this exact scenario on my development server and it worked flawlessly, so I expected the same here.  (Granted, I had not yet realized that I had not actually tested under Medium Trust). 

Once I realized the issue (I first revisited Phil’s post on Log4Net under ASP.NET 2.0 Medium Trust to verify I had things set up correctly), I also realized that I then, recalling from prior research, had two quick options to resolve this: move my blog to the root, or create a blog sub-domain.  I was not fond of either option.  Not to mention the fact that well, my blog was down. Feh.   I rolled back to CS (just had to whack the /blog dir and its settings) and settled in for further research.

My options at this point:
1. Put Subtext on the root (i.e. http://nino.net) or sub-domain it (i.e. http://blog.nino.net).
2. Contact my host and ask them for an exception to the medium trust, please. (btw, my problem was with FileIOPermission).
3. Keep with CS and dedicate some future time to resolve the issue.

Given a time crunch, I optioned for option 3.  Now, that said, I still wanted to change my URL to http://nino.net/blog from http://nino.net/blogs/nino since this is the only blog here – and let’s face it, I was delusional when I thought I might have other blogs at this site. ;-)

So, how to do that?  CS config goodness and some URL rewriting to keep things all search engine friendly.

I queried the CS forums (specificially Blogs and Setup and Installation) and did a little searching elsewhere. I particularly recommend Jayson Knight’s post on CS Config File Overrides and this thread, started by Scott Watermasysk, on converting CS to single blog. A note of thanks to Ken Robertson for his assistance in getting me to see the obvious in the siteurls_override.config.  Speaking of overrides, one could simply edit the communityserver.config and siteurls.config files directly instead of leveraging override files, which I just may do now that I understand what needs set.

To see how I converted my CS installation to a single-blog setup and implemented URL rewriting, see my post about it.

For Part III of my blog changes, which I won’t blog about other than this mention, the changes are all superficial – skinning and theming – which most of you, if my stats are correct, won’t see as you get here via RSS.  Those of you who do visit the site via your browser will see some changes shortly.

In sum, blog URL is now: http://nino.net/blog  and syndication is: http://feeds.feedburner.com/NinoBenvenuti