I've now been running Linux as my primary OS for nearly 13 days, with no major complaints. Thought I would illuminate another sticky point that might cause one trouble if you're not careful. If you followed my tips from Day 11, your VM is probably using /tmp for some temporary files. I made the mistake of putting /tmp on a partition that really didn't have a lot of free space. Consequently, as I was using my VM's throughout the day, VMware would complain about not enough disk space in /tmp and that the memory of my VM's might get corrupted as a result.
The solution to this was to use GParted to resize my partitions. I made one smaller and one bigger. Now I have a lot more free space in /tmp, and everything seems to be moving along just great.
Moral of the Story: The size of your /tmp partition matters.
I will say that, after these past two weeks, I'm ready to strike the MacBook Pro off my list of future laptop contenders. I will admit that part of this bias does it's origins in the commie-inspired DRM that is iTunes. The vast majority of my music collection is MP3, which I ripped from my CD's. The stuff that I foolishly bought from iTunes, is of course, locked away as safe as a virgin in a nunnery. As well, it doesn't help the MacBook Pro cause that I can get a white-box PC for cheaper (or, alternately, more hardware for the same amount).
Today I'm about 11 days into my experiment with openSUSE as my primary OS. So far, so good. I've been using my client's Windows XP VMware image for a few days now, and really the only major problem is, as mentioned, that VMware doesn't seem to want to share the sound card with the VM. Not a big deal.
Keith Elder has an excellent post on build a Windows 2008 server VMware image, I highly recommend it. I would like to expand on his post just one teeny tiny bit.
Offically, Windows 2008 Server and Windows Vista are not supported on VMWare Workstation 5.0 or on VMWare Server 1.0.x. This doesn't mean much, but if you're setting up a VMware image that you'd like to share between Workstation and Server, make sure that when you are creating the image you specify VMware Workstation 5.0 (see images below). If you try to "Upgrade or Change Version..." from VMware 6 to VMware 5, you will clobber your NIC real good and lose and not be able to recover it short of some act of God. Not even tech support at VMware can help you. Ask me how I know.
Also, just after you create your VM image, you might want to edit your .VMX file, and add these three lines:
mainMem.useNamedFile=FALSEsched.mem.pshare.enable = "FALSE"MemTrimRate = 0
The first line is pretty important if you're going to be using VMware under Linux. If you're running under Windows, this isn't as much of an issue. Under Linux, a temporary file for the RAM will be created which then gets deleted when the VM shuts down. If you're running your VM's off a USB disk, this file is typically in /tmp, which is probably a local disk, and so will therefore have faster disk access (being that you don't have to go over the USB2 cable). If you don't have this line, it seems that VMware will spit up a nasty, obscure message to you about not being able to open the VM because it is corrupt and/or VMware doesn't have access to it.
The second and third lines Keith explains in his post one Step 14. Go read there.
We have just released Moonlight 0.7 to the public.
Get your copy here.
This new version of Moonlight works on both Firefox 2.0 and 3.0 and sports some significant changes from 0.6:
As a software developer I've worked with a lot of APIs and developer tools over the years and had many good experiences and a few bad ones. The bad ones are where you waste a lot of time trying to get something to work and it just doesn't do what its supposed to. These kinds of things make you angry and make you resent the vendor because they make you look bad as a developer and they cost you a lot of time, and time is money. The worst cases are those where you have no real choice, you have to use the vendors products or APIs. The latest bad experience I've had is with PayPal. Their developer sandbox just doesn't work and its been eating up my time trying to make it work. I have followed the API documentation closely and am 100% sure I'm doing the right things in my code but it doesn't work. Yet, how can I ignore PayPal if I want to implement ecommerce? I can't because they are the most popular provider. I simply have to get it working. Maybe I will have to test on their production site and then issue refunds. This is what some others have resorted to if you read their forums. You end up paying the transaction fees though even if you do issue refunds. Its a wonder to me that PayPal is so dominant given these shortcomings. I've implemented google checkout and Authorize.NET and they both worked as expected using their sandboxes.
I've created a Camtasia movie here showing the problems, but to summarize:
PayPal offers 2 products, PayPal Express and PayPal Pro/ Direct Pay. The Direct Pay allows you to charge the customer right from your own site by letting them enter their credit card info, this costs you $30/month to enable the service. Express checkout doesn't have this monthly fee but requires the user to pay at the paypal site with their paypal account.
Using the NVP (Name Value Pair) API to process Express checkout, the process is.
1. Make a call to the PayPal NVP web service using the SetExpressCheckout call. You recieve back a paypaltoken and then you redirect the user to paypal passing this same token. This call works as expected, you get the token and you redirect.
2. After the customer pays at PayPal, PayPal redirects them back to your designated page and passes the paypaltoken again. Its the same token as the one returned from the previous call to SetExpressCheckout. Next you are supposed to call GetExpressCheckoutDetails passing the same token back to PayPal. This call fails with the error "Security header is not valid". When you look this up or google it, its supposed to mean that you did not pass the correct API credentials, but believe me, I'm passing the right credentials and its the same credentials that worked fine in the call to SetExpressCheckout. If the call to GetExpressCheckoutDetails worked as its supposed to, the next step would be to call DoExpressCheckoutPayment which is where the order would be completed.
To use the DirectPay API you need to accept the billing agreement which would cost you $30/month on production but should be free on the sandbox. However, when you click the I Agree button in the sandbox account it doesn't work so you can't get your sandboz account enabled to use the DirectPay API.
So, in short, the PayPal sandbox just doesn't work. You can't reliably test the Expess Checkout or the DirectPay API. You would think the so called industry leader in payment processing could do a better job with this. PayPal are you listening? Please please please fix this crap and stop making me waste my time. Are you really going to make me use the production site for testing? Is that some angle to help you squeeze me for $30/month or are you just incompetant?
UPDATE: In case you think I'm being too hard on PayPal, I captured another little video to show how difficult it is to file a support ticket. I have not figured out how to do it yet. I had this same problem yesterday which is why I resorted to blogging in hopes of getting some attention from PayPal to address the sandbox problems.
Last night (Thursday, June 26th) Rod Paddock gave a talk on using Silverlight 2.0 to the Edmonton .NET User Group. I'd say that Rod did a pretty good job, despite the fact that the beta of both Silverlight and Expression Blend didn't exactly want to play nice all the time. It's definitely perked my interest in the technology, and I can see a lot of business potential for it.
The rich user experience that Silverlight brings to the web-browser, will, I think raise the bar for what web applications will do for businesses. Forget all the buzz about ASP.NET MVC or MonoRail or ASP.NET 3.5. This is just another layer of makeup on the tired, old, hooker that is application development in .NET. Silverlight is what will make business users oh and ah and get excited about web apps again.
Those who were at last night's talk will remember that Rod was using a fairly large database that he got from freedb. It's fairly large, not quite 7GB of data. I did get a copy of it, in MS-SQL Server format. When I compressed it (tar.gz), I got it down to 2GB in size. If you're interested in a copy of the database for your own purposes, leave me a comment here and we'll work something out.
Note: I would like to state that Don is usually drunk, and as such you shouldn't believe some of the wild things he said last night, especially about me.
Back in October of 2006 when I first launched my company, Source Tree Solutions to work full time on mojoPortal, I had kind of a fuzzy business plan with the main idea being that I would make revenue by offering consulting around the free mojoPortal product. I guess in my wide eyed optimism I thought that doing this kind of consutling would improve mojoPortal and in fact it did to some extent. A few customers actually sponsored development for things that improved mojoPortal for everyone. But most of the consutling was really for things that were not of any general benefit beyond the customer's needs, so in some cases I felt like taking on this work was actually slowing me down from progress on improving mojoPortal. Forming a business around consulting means you always have to be taking on more projects to keep the business going because you don't make any money unless you are doing billable work. Now I am in the process of shifting my strategy to sell some premium features on top of the free mojoPortal core product. I think that selling some products in order to generate revenue will be better because it will pay for the free time I need to keep improving the mojoPortal. Consulting will remain a part of my business model but my plan is to keep it very limited goig forward.
So with this changing strategy in mind I've been working feverishly to get my first product completed so that I can open up a Store here on mojoPortal.com in early July and begin selling it. The first feature for sale will be a more advanced Event Calendar that allows selling tickets to events. Following that I plan to build a Form Wizard that allows users to easily create forms to capture arbitrary data. I also plan a Fund Raiser feature and an add on package for Web Farm support. I have a lot of ideas for premium features, but my main goal is to just get enough revenue rolling in to allow me to keep improving the core. There are a lot of planned improvements for the core that I'm eager to complete, like built in support for tagging, comments, and content versioning so that they can easily be enabled for any feature with little effort. Eventually I'd like to open the store up so that other developers can also sell products there too, so that it can be a market place something like snowcovered.com which sells add ons for DNN.
One of the reasons I chose to implement a commerce enabled feature as my first product was so that I could figure out which pieces of the commerce architecture need to b re-usable. We already have a WebStore project that I will be using to sell my premium products and this WebStore is one of the free open source features of mojoPortal. So far the WebStore is very rudimentary, it can only sell download products and its really a bare bones implementation for the product catalog at the moment. The project was originally started under a sponsorship by BrainBeacon but was never completed fully because they went out of business before ever opening a store. Its hard to really polish up a complex feature like ecommerce unless you are actually using it for business or supporting a customer who is using it. So using it to sell my own products will lead to a lot of improvement in the WebStore feature. I've been doing a lot of re-factoring in the WebStore to get the re-usable pieces built into mojoPortal core so they can be used across features. For example, Country List, State List, Currency List, Language List and their administrative features were originally in the WebStore projects but I've moved them into the core of mojoPortal because they will be needed by other features. Support for Payment gateways like Google Checkout and PayPal are also being moved into the core so they can be re-used by any feature that wants to implement ecommerce. Since my first product will be an Event Calendar that allows selling tickets it will need to leverage a lot of the same ecommerce code that the WebStore does. Rather than re-implement it in every feature it has forced me to think about the best way to make most of it easily re-usable.
Implementing this more advanced Event Calendar has also led me to other improvements in the core of mojoPortal. For example one of the features in my new Event Calendar is support for recurring events. When you create a recurring event it actually creates event instances going out x number of years. Since events are also searchable using the site search, you have to update the search index for each created event as well. What I found was that creating events in rapid succession due to recurrence could lead to some problems due to the way I was handling the indexing of items. The indexing was triggered by the saving of the event then code to update the index was spawned on a new thread so that it doesn't block the UI. Under some circumstances the writing to the index was not in the proper sequence and errors could occur. So I implemented a queue in the database so that items to be indexed could be queued and then processed in batch on a background thread while keeping the sequence correct because everything is processed in queue sequence.
Another thing that got improved in the core as I implemented this new Event Calendar is module settings, which is just a place to store feature specific settings for instances of a feature. In a number of the mojoPortal features we have support for google maps, but some of the settings needed for google maps were not well supported by module settings. For example the google maps api defines some constants for the Map Type like G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP, etc. When I first enabled support for specifying the map type, it was done in module settngs by entering the constant in a textbox like this:
pretty yucky and not user friendly since its easy to put something incorrect there and nothing to tell the user what is acceptable. So as much as this bothered me I could not conceive of shipping a paid product with this kind of setting so I implemented ISettingControl as a way to introduce a possibility to use a custom UserControl for this setting and now for all features that use the google map the setting looks like this:
much better implemented as a dropdown list! Actually not shown in the screen shot is I also implemented a dropdown for the zoom level so that it is limited to the range of acceptable values.
So, in short, developing features to sell has made me think more deeply about what is needed in the core of mojoPortal to support 3rd party feature development more easily, because its made me think more like a third party.
I haven't blogged much this month because I've been so busy working to get this feature completed and to get the store opened, but thught I should go ahead and post this to let people know what I'm doing. Several people have asked recently what happened to the store demo site as it is currently off line. I will have that site back up soon. I just have a little more re-factoring of the WebStore code to do and I will setup the demo store again.
I'm very excited about the new store opening soon and will announce it here in the blog as soon as its open. There will also be anew release of mojoPortal soon with the improvements I've mentioned above as well as a few bug fixes and skin tweaks to better support Firefox 3.
Just a quick recap of days 3 & 4 of running with openSUSE 11 as my primary OS. By far and large, not a lot of complaints. As I do most of my work on a laptop, I tend to keep my VM's on external HDD's connected via USB2. I've been doing this for a while now, under Windows.
I'm not to sure I'm a big fan of how openSUSE mounts (or tries to mount) my external HDD. It just doesn't seem as...seamless...as how Windows XP does it. I'm use to just plugging in my external HDD, and not worrying about it until it's time to disconnect. openSUSE seems to get a big confused with automounting, and I always seem to have to help it along. It's something I can live with for now.
The other thing I notice is that openSUSE doesn't seem to want to share the sound card with VMware. I'm getting more than a few alerts from VMware that the sound card is not available and can't be used. Again, nothing to critical - for now.
The third thing I'm noticing is that some HDD enclosures seem to work better than others. I'm noticing that at least one HDD enclosure (a SmartDisk FireLite with a 250GB HDD inside) doesn't seem to want to consistently and reliably work. I did have VMware (and openSUSE) complain that they could not write that particular HDD as it could no longer be found.
So far, I am pleased with how Linux is handling NTFS as well. I remember back five or six years ago that NTFS support for Linux was pretty much read-only. Read-write was for people who were delusionally insane or who go to the same hair stylist as Justice Grey.
A couple of lessons learned:
As I indicated yesterday, I'm doing a little experiment to try and see if I can reduce my dependency on Window. Yesterday I installed OpenSUSE 11, today I was going to install some extra stuff into OpenSUSE, and see if I can get VMware Workstation up and running.
First thing that that I did wrong was install the wrong version of OpenSUSE. Silly old me wasn't paying attention when I downloaded the ISO, and I grabbed the 32-bit ISO. I wanted the x64_86 edition. So, I downloaded that DVD, and then re-installed from scratch.
With that out of the way, I preceeded to install the following:
Now VMware Workstation 6.04 is kind of what I'm after, so that was the recent focus. Installing VMware on OpenSUSE 11 isn't that hard. Basically, I did the following:
One thing you might find when you try to open up your VM's. You might get a wacky error message like: VMware Workstation unrecoverable error: (vcpu-0) Failed to allocate page for guest RAM! Best to just follow the advice in this blog post.
Next on the TODO list is to try, on some test VM's, developing on Linux. If no problems after some undisclosed amount of time, then I guess maybe I'll trying working full-time under Linux.
And, if that works, then the true test/question: can I get World of Warcraft working on Linux?
I've decided to try a little experiment, and see how things will go, computing-wise, if I minimize my dependence on Windows. Now, I don't want to run out and buy a Mac (not yet, anyway), so I'm taking a middle ground.
I first repartitioned my hard drive (thanks gparted), and set aside a 15GB partition. On this partition, I installed OpenSUSE 11.
My plan is to run OpenSUSE 11 as the host OS, and then use VMware to run VM's for my work and such.
I'm curious as to how it will work out. I know the one hurdle I would like to come is the stupid DRM that Apple iTunes uses. Anybody have some suggestions, so I can do this while it's still legal to format-shift in Canada (or perhaps I should spell it Kanada if bill C-61 passes).
Okay, this scenario might not be all that common, but in case someone else out there needs some tips on getting this to work, I hope this helps. I spent quite a bit of frustration on this one.
I have an ASP.NET web application that uses Microsoft AJAX UpdatePanels and embedded User Controls. In this particular case, I wanted to try out jQuery in one of my User Controls. The User Control uses an UpdatePanel, and the User Control itself is dynamically loaded in an UpdatePanel on the parent page. Here are the things I ended up doing in order to get jQuery and UpdatePanel to play together.
Registering jQuery Scripts
Since I'm not planning to use jQuery everywhere in the Web application, I need a way to register the scripts I need from the User Control. In my search, I came across a Rick Strahl post Implementing a jQuery-Calendar ASP.NET Control that was exactly what I needed. This post led me to his earlier UpdatePanels and ClientScript in custom Controls for the necessary ClientScriptProxy code, which is a great utility class for registering any client scripts, not just jQuery. However, I started getting a Sys.ScriptLoadFailedException, which led me to Sys.ScriptLoadFailedException when adding ScriptReferences. To work around this, I added the following to the end of my jquery.js script file (and other script files I was registering).
if( Sys && Sys.Application ){ Sys.Application.notifyScriptLoaded(); }
Client Script for the User Control
My User Control is dynamicaly loaded, so simply putting a script block in the .ascx template doesn't work in this scenario. Also, the standard jQuery $(document).ready doesn't work. I believe it's because of the way the DOM is manipulated by the UpdatePanel. So, borrowing a couple of ideas from Giving Precendence to a Specific Asynchronous Postback and jQuery Event Binding vs. ASP.NET AJAX UpdatePanel, I created another script file named init.js that contains the following code:
function ApplicationLoadHandler(sender, args) { // InitScript is a custom function // registered from the User Control if(typeof InitScript == 'function') InitScript(); } if( Sys && Sys.Application ){ Sys.Application.add_load(ApplicationLoadHandler); Sys.Application.notifyScriptLoaded(); }
In my User Control's code-behind, I need to override the OnPreRender to register my script files and custom script block.
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); // *** MS AJAX aware script management ClientScriptProxy p = ClientScriptProxy.Current; // *** Register resources this.RegisterResources(p); } private void RegisterResources(ClientScriptProxy p) { p.RegisterClientScriptInclude(this.Page, this.GetType(), "_jqueryjs", this.ResolveUrl("~/client_scripts/jquery.js")); p.RegisterClientScriptInclude(this.Page, this.GetType(), "_initjs", this.ResolveUrl("~/client_scripts/init.js")); StringBuilder sb = new StringBuilder(); sb.AppendLine(@" function InitScript() { // control-specific code goes here } "); p.RegisterClientScriptBlock(this.Page, this.GetType(), "_init_" + this.ID, sb.ToString(), true); }
Now all I have to do is customize the InitScript() in my code-behind to do useful things with jQuery.
Hope this helps!
Recently I upgraded the family computer. Well, I upgraded the hardware and changed the operating system to Windows Vista 64bit. This is the computer that my kids play their games on, my wife does her work and her post-graduate work on. I use it to play the odd bit of World of Warcraft and surf the web. To me, it's not that important. To my family, not being able to play Freddie Fish or using bloated crap-ware to keep in touch with colleagues and friends is pretty close to catastrophic.
Today, I've decided to repave the family PC with good old Windows XP, and turn my back on Vista 64bit. The straw that broke the camel's back was when I went to setup the kids U.B. Funkeys, and much to my dismay the driver that this toy needs aren't supported under Vista 64. Simply put, to much of my kid's software and gizmos just don't work under Windows 64 bit. Now, some of you might say, "Wait - it's the responsibility of the vendor to ensure compatibility". Yes, it is. However, for the here and now, my kids and wife don't care who should be supporting what. Stuff doesn't work, they yell/whine/cry at me.
I'm sure Windows 64 bit is fine for other roles, but as an O/S for a home PC that need to run older games and such, it FAILS.
Pragmatism wins, Windows 64 bit loses. Windows XP gets reinstalled.
CSA - Martian Weather Report
Now this is kind of neat: weather reports from Mars. Now, some of you might think, BORING. Think about this first: This isn't a "stick your head out the window" kind of thing. This involved placing a man-made object tens of millions of kilometres away on another planet, and then transmitting that data back to Earth where big, wrinkly, brains can interpret that data and where you and I can see this with a simple click of our mouse. Smooth, little, brains like mine boggle at the thought of this.
Anyway, I guess the latest weather report kind of makes our Canadian winters seem not so bad. At least the Martian cold is a dry cold.
For the longest time, almost three years now, I've been running mojoPortal for my website. My basic criteria at the time was pretty simple: open-source, Mono compatible, and supports either MySQL or PostgreSQL for a database, and something that seem to be supported/actively developed. I settled on mojoPortal. Joe Audette, the author of mojoPortal, has been spending the past 4+ years working on mojoPortal, and as done a pretty good job getting it to work with a variety of databases, and on both Linux and Windows.
Lately, I've been thinking that perhaps mojoPortal is getting a bit to big/bloated for what I need. Don't get me wrong, I still like mojoPortal. However, after the past three years, I've learned that all I really need is a simple blogging engine, with Windows Live Writer support (as an aside, I'm working on WLW support for mojoPortal. Hoping to merge the code into trunk soon - really). mojoPortal seems to have all that, and then more. It's a lot of stuff I don't really need, and I'm sure that most security types will tell you that you just don't install stuff you don't need on your PC's - the less there is to hack, the better.
Now, what criteria would I have for a new blog engine? Well, in no particular order:
Ideally, I think it would be nice if there was a blog engine that uses MonoRail, or perhaps ASP.NET MVC. However, I really haven't found anything yet that fits the bill. I suppose if I was independently wealthy, I'd take the time and just write my own, but, honestly, I just don't see the point to that.
If you have any suggestions, I'd like to hear about them. Feel free to speak up.
This is just a test post, please feel free to ignore. In fact, you are encouraged to ignore this blog post. Just checking to see if the error that pops up when users post a comment is fixed.
Update: Well, it looks like the problem is fixed. And, to boot, it looks like I have the editing of posts with Windows Live Writer working too.
I'm in the process of setting up a new box to run some virtual machines for me, it's nothing to fancy, but it is adequate for my needs. It's a humble little PC with scads of RAM (8GB) and a big hard drive (750GB). I figured that setting this up would be a snap, as I had done it several times before - well for Ubuntu 7.10 Gutsy Gibbon. Installing Linux these days is pretty simple and quick, compared to say, install Windows.
Turns out that things were quite as straight forward as I thought it would be. The first glitch happened when I booted from the CD. I went through the first bit of the Ubuntu install, at which point I was informed that the CDROM could not be mounted. Somewhat confusing, as I had just booted from the CD no problem.
Seems that there is a bug in the installer, and when you try to install on a PC with more than 8GB of RAM, the CD ROM gets "lost". The work around is that when you're booting, you modify the startup so that only 4GB of RAM is used. You do this by appending mem=4G at the end of the boot parameters. Of course, when you're done installing, you have to edit the boot parameters and remove the mem=4G so that you get all your RAM back. Of course, be aware that when you do this, you loose your CD-ROM drive.
This had to have been one of the most painless installations of anything I have ever done - truly. Installing VMware on Ubuntu isn't a big deal, you just have to make sure that you have all your dependencies up to date. And, when you're on x86_64 there are a couple extras that you don't normally need on i386. However, on the Ubuntu Forurms, someone (a Canadian it seems) went to the effort of putting together a nice little bash script that does everything for you. Well, not everything, you still have to get the serial number for VMware server. Grab the script, make sure you read the directions posted, and away you go. It's nice when things are that simple.
Now the next great adventure is to move my VM's onto the new server. Shouldn't be a big problem, as I do have some external HDD's for just this type of thing.
Rumors of my demise have been greatly exaggerated. I've had several ideas for blog posts recently, but just haven't sat down and wrote them out.
My outdated video camera is nearly 10 years old, so I've been thinking about getting a replacement. The Flip Ultra has been on my radar screen for quite a while. With Scott Hanselman's glowing review and the release of the 2nd generation Flip Mino, I was finally convinced. As an early Father's Day gift, I ordered one online and it arrived today.
Wow. I just can't get over how much I like this gadget. It's no bigger than a point-and-click camera, it's ridiculously simple to use, and the software to manage your movies is right on the camera. You just plug the camera into any PC (or Mac, apparently) and go. Within minutes of opening the box I had recorded my first short videos and transferred them to my PC. I like the fact that it comes with a TV RCA audio/video cable so I can show videos when visiting friends or family. I haven't tried all the features, but it appears that you can easily convert, upload and share videos online, too.
As other reviewers have stated, the light sensor does an excellent job of quickly adjusting to any light conditions. Video quality is passable, but it's certainly good enough for casual use. To me, the built-in rechargeable battery in the Flip Mino is well worth the premium over the Flip Ultra. I'm not too crazy about the touch-sensitive buttons surrounding the big, red record button, but that's not a show-stopper. I'm also impressed with the short time it takes to power up the device and start recording.
So far, I am absolutely thrilled with this purchase. I once read (regarding photography) the best camera is the one you have with you. With the Flip Mino's small form-factor and easy-to-use features, I see my family and I recording and sharing a lot more memories in our future.
I followed the Apple WWDC keynote today and I'm sold, hook line and sinker, I want an iPhone.
And I can justify it too because its not as expensive as it was and I'm a web developer so I have to be able to test the mojoPortal experience on an iPhone since a lot of people are viewing the web with it and more will be soon with 3G. Yeah thats the ticket, I "have to" have one for work. See how easy that was.
Only problem now is July 11 seems a long time to wait, I'm impatient, I want it now :-D
Just a quick post to point out some new documentation for mojoPortal developers.
Setting Up Your Projects - has notes about how to work with mojoPortal from our repository and your own code from your own repository.
Using The Installation System - talks about how to leverage the mojoPortal installation system to install your own features.
Using The Task System - discusses a little framework we have for managing long running tasks on a background thread. You can implement your own and plug them in. I built it for sending the news letter emails. It can chug through a long list effectively because it can resume even if the thread is killed by recycling the app pool. When the app starts again it picks up where it left off.
This seems interesting: an NHaml view engine has been implemented for MonoRail. One thing about this that I find neat is that the NHaml view engine for the ASP.NET MVC was ported back to MonoRail.
Great to see such cross-pollination of ideas and code between the two projects.
Today is the 64th anniversary of D-Day. If you are a Canadian, take a moment today and read up about 3rd Canadian Infantry Division and the 14, 000 Canadians which went ashore at Juno Beach (the 2nd most heavily defended beach of the invasion).
Likewise, if you're British, I would suggest taking a moment today and reading up on Sword and Gold beach.
And, if you are American, then perhaps read up on Utah and Omaha beach (the most heavily defended beach of the whole invasion). And no, watching Saving Private Ryan doesn't count.
Granted military history (which I read a lot of) can be kind of boring and slow sometimes, but D-Day was a very important day in the 20th century, and some of the troops involved had been training for almost a year for just this one day.
Okay, this is just a test of the new build of mojoPortal that I just threw up on my web server.
This should now allow for editing of blog posts via Windows Live Writer. Hopefully, I can merge with the trunk and then Joe can do an offical release.
<rant> It might just be cranky old me whining and complaining, but I'm finding it harder and harder to understand, why, in this day of Web 2.0 and all things wonderful on the internet, companies still serve up PDF's as their primary form of communication. I mean really, it's not that hard to serve up an HTML page that I can read in my browser. Why force me to download and look at a PDF?
Provide me with a link that I can download the PDF from, but if I'm taking my time to visit your corporate website to find out about some product or to look at a schedule or an item in your inventory, don't waste my time or my bandwidth with some bulky, bloated PDF. Show me what I want to see.
</rant>
I'm happy to announce the release of mojoPortal 2.2.5.8, its available now on the download page.
Friendly urls for the blog as mentioned in my previous post.
The Folder Image Gallery now works in Medium Trust
Bug fixes for SQLite and pgsql and other various minor bugs as reported in the forums since the last release.
As always, be sure and backup your site and database before upgrading, and report any problems in the Forums.
Web-based forums for Mono discussions have been added at http://www.go-mono.com/forums
Most active Mono community members participate in on-line discussions through our mailing lists; however, many Mono users have expressed a preference for web forums based discussions.
In order to address this demand for an official forums for Mono, while keeping the community engaged in our mailing lists, we have embedded nabble.com into our site to create a bridge between the two groups. So, you can now use whichever method you prefer participate in the community.
With all the nice looking new skins from my recent skinning campaign, I decided it was time to give mojoPortal.com a makeover. The previous design was about 2 years old and was starting to look a little dated. I also wanted to reduce the clutter on the home page and try to have a more succinct marketing message. I think in the past I've thought that most of my audience were developers so I was packing in a lot of technical information on the home page, but over time I've come to realize I should be targeting more towards business people and emphasizing the business value of mojoPortal more than the technical merits, at least on the home page. So I hope you like the new look!
I put a little more love into the mojoPortal blog feature in the last few days.
We now have friendly urls for blog posts. Instead of the previous ~/BlogView.aspx?pageid=2&mid=19&ItemID=258, we now have ~/the-title-of-your-post.aspx
I also added a Next Previous, navigation to make it easier to page through the posts.
There is also a new Site Map for blog posts to make it easier for google and other search indexes to crawl your blog posts and improve your SEO. You can ad your blog site map to google webmaster tools as yoursiteroot/BlogSiteMap.ashx
This is available in svn trunk now for developers and will be in the next release for everyone else.