Please update links... now using my own blog software.

http://www.simplegeek.com has the latest entries. Comments didn't get ported.


 Sunday, February 16, 2003

Note This is the last post to my old RSS feed or Radio site.

Wahoo! BlogX is now my primary software. I think this is good enough. You can get to the old homepage here, and all the comments, etc, are still live there - however I won't be adding new entries.

My new RSS feed is here.

I just tried (for the first time) using my WinForms front end across the internet. Queries are a bit slow. Running off local host is almost instantaneous, so I have to imagine that this is due to network issues. I'll probably have to tweak the application to do more automatic caching.

I'll post new source once I get the bugs ironed out from my live dogfooding!


4:58:28 PM    comment []

Lots of changes here... Added a CRUD web service front end and a query web service front end. There are now 7 projects in the sources:

  1. BlogCmd - command line radio to blogx converter
  2. BlogXRuntime - data model, shared by all
  3. BlogXServiceProxy - hand tweaked web service proxy
  4. WeblogX - ASP.NET front end & web services
  5. WinBlogX - WinForms front end (talks to web services)
  6. WinBlogXControls - Shared controls between WinBlogX and WoodBlog
  7. WoodBlog - "Legacy" WinForms front end

WoodBlog was done to directly whack on the XML files. This was more effiecient but it introduced the problem of two places you can edit (through the web and client). I decided to just go with a single data store, on the server, and then rewrite the client to talk through web services.

BlogXServiceProxy was needed because I wanted the objects seen on the client to be from BlogXRuntime. Since all the data model is XML Serializable, I just removed the XSD generated data classes and viola!

The WinBlogXControls currently contains an HTML editor and viewer. Both are actually the same control, and require VS.NET to be installed to use. I'm going to search around for the write code to do these correctly, but for now it works for me.

I have two web services exposed now - BlogXEditing and BlogXBrowsing. The browsing service is basically all the entry points you would need to write a browsing application. Including categories, etc. Right now it is still missing a "post a comment" on the browsing service. The editing service is a simple CRUD api set for manipulating the blog entries. Today it is secured with a crappy password argument on all the methods. I'll work on real security later.

Once I can get reliable FTP working for uploading new versions, I am ready to switch from Radio. My plan will be to keep the existing Radio HTML files up on the server so that permalinks work, but all new content will be on the BlogX version. However, I still can't make the switch because I'm having difficulties uploading my software.


1:14:57 PM    comment []
 Saturday, February 15, 2003

Dare asked a good question in the comments below. What is the license for BlogX? I put a copyright at the top of each file, but I didn't think about enough of what I really want here. I guess I'm looking for a license that provides the following:

  • Free (no charge) use by anyone with or without modification (free)
  • Anyone using the source or binaries I provide must hold me harmless (no warranties)
  • Any product that uses the source or binaries can use any license they wish (no viral licensing)
  • No limitations on usage in acedemic or commercial spaces (for your use anywhere)

Given that it only took me ~15 hours of coding, I can't imagine there is all that much IP in the source, but I don't want this to come around and bite me in the ass. :)

Any suggestions on a good license? GPL won't work because of the viral stuff... MS Shared Source won't work because of the acedemic limitations... other suggestions?


10:32:26 AM    comment []

Gary makes an interesting point... at a minimum why don't I use RSS 2.0 as the native XML format for my blogging tool... hmm...

At this point i'm convinced that the "per-day" or "per-entry" debate is largely moot... either way I'll end up with a cache for the other direction...


3:20:52 AM    comment []

I'm not happy with the source, it's mostly slapped together on various late nights, but I figure there is nothing like a little peer review to clean your act you. You can download the source and binaries (one zip).

There are no instructions, almost no comments, no support, and no warrenties on any of this - it works on my machine, and that's all I can say :)

Please post feedback in the comments for this, or, of course, on your blog! :)


2:56:24 AM    comment []

More web frontend work... referrers are now being tracked. I just write out the UrlReferrer and Url from the request when pages are hit. This seems like the wrong model... is there a better way to track referrers?

Also did some minor HTML cleanup (more divs, etc.) and also added support for navigation links like Radio has.


2:46:35 AM    comment []

One of the designs that I'm not happy with is how i'm handling file path resolving. Right now I've got a static (re: global) delegate that is called to resolve files. This allows me to map this to a Server.MapPath in the web case, and a Path.Combine on the client. The problem is that the "map" ends up being per app domain - which works great for ASP.NET, but sucks for WinForms... At this point I'm not going to rewrite it, but I'm just not happy with the design.

Note I've created a BlogX category for tracking progress and comments on this specifically.


2:42:12 AM    comment []
 Friday, February 14, 2003

Thanks to Jorge I got my HTML for BlogX better for accessibility... before I was using spans with classes on them for everything... now I'm using H1...H7 for headings...

Also, I switched the calendar navigation from being a viewstate postback to links with a querystring... better bookmark-ability and navigtion expierence... also F5 isn't broken anymore...


7:12:11 AM    comment []
 Thursday, February 13, 2003

Fixed a minor issue with comment view (wasn't showing the comment author)... I guess the last things that is preventing me from switching over is some utility for bi-directional synchronization... i want to be able to edit on the client or server and have both get updated... that seems like it's going to be a bit tricky...
11:39:05 PM    comment []

Added comment support to the web frontend for BlogX... wahoo!
11:22:02 PM    comment []

Hmm... I tried to have BlogX save everything as UTC, however for some reason Xml Serialization seems to have no way to serialize as UTC, so I ended up losing 8 hours between serialize and deserialize... anyone have any thoughts here?

If not I'll ask someone at work tomorrow...


10:21:01 PM    comment []

Restructured the UI to use a lot more user controls (such as a single control for viewing an entry) and also fixed the CSS for floating the right pane (thanks!).

Also added basic editing (requires write access for the ASP.NET account on the server to the file system). You can see my first entry that I did with the web front end here.

I tried to follow Michael's advice for using WSYSIWIG HTML editing, but I couldn't get the HTML posted back to the server, so the editing is done via raw HTML. Of course I have great editing in the WinForms front end :)


10:15:37 PM    comment []
 Wednesday, February 12, 2003

... but I've got BlogX look a bit nicer... and it's all done with CSS, no tables! :)

Don't know how it looks in anything but IE...


11:58:47 PM    comment []

I'm still using the unpopular day-per-file data model, however I've added web support for categories, permalinks, and history browsing.

Here is the latest.

Next steps...

  1. Category view in winforms
  2. Comments in webforms
  3. Web UI that doesn't look like crap :)

9:42:13 PM    comment []

I find it humorous that Dare thinks that our APIs are too "RAD". We continually get feedback that our APIs aren't easy enough. I think that having large "cliffs" between APIs (i.e. having a distinct expert vs. RAD API) is the wrong design. 

The problem here is that developers are never just a RAD or expert developer. Personally I like to use RAD tools and APIs at the start of a project, then dig into the expert APIs as I need them. The problem is that when you have two completely different APIs (like VB for RAD, and MFC for expert) you can't easily move between the two. If you start with the wrong technology there is a huge cost to try and switch - and more often than not it can mean completely scrapping a project.

Good API design means serving many different masters.


7:53:56 PM    comment []
 Tuesday, February 11, 2003

Syndirella can read my RSS feed without errors... wahoo! In addition I got comment adding working in the winform front end.

Next steps:

  1. Browsing to more than just today in the web viewer
  2. Comments in the web viewer
  3. Permalinks
  4. Category browsing in both viewers

I'm going to try and not make any progress on this for the rest of the week... I need more sleep... and I've got to start working on work projects at night instead of blog software :)

Work life bal... nevermind.


11:04:26 PM    comment []

Brian got me hooked up with the right error messages and I got my BlogX web view working... still fairly limited. For some reason the RSS feed is coming off as text/html, even though I do:

Response.Clear();
Response.ContentType = "text/xml";

In my Page_Load... this works on my local machine and when hitting the machine with localhost at the site... however when we hit it from the machine name it reports text/html... hmm...


10:53:59 PM    comment []

rchildress talks about scalability of xml vs. dbms, etc... just as an example, my test data for BlogX was some dummy data with 24 months of data, 28 days per month, 17 entries per day, average of 8 comments per day... overall it was several hundred megs of data. The system was still fast in the winforms front end...
9:36:13 PM    comment []

I have a friend that digs MJH... watching an episode of "That 70s Show" with her as a guest... he would be in heaven...
9:31:10 PM    comment []

All contingencies have been dropped! Wahoo! The buyer of my house is happy (well, they signed didn't they <G>) and I'm happy (same goes) with the seller's offer to me. Basically at this point the final hurtles are pure financing (getting the bank to give all parties enough cash) and then time.
9:10:24 PM    comment []
 Monday, February 10, 2003

I'm running into lots of ASP.NET errors with my blog stuff... it works great locally, but when I let Radio FTP it up to the server it gets hosed... i'll have to follow up with my admin tomorrow (that's you Brian! <G>)
10:33:28 PM    comment []

Still not ready to release my source for my blogging stuff i'm playing with, but I did get a brain dead simple RSS feed working... (again, this is all temporary, so don't subscribe)...

I thought I'd get some feedback from my architecture...

There is one XML file (*.dayentry.xml) per date. There are multiple entries per date. This allows for queries about what days have logs without ever parsing any files. This means the calendar can be populated with a simple file system query. In addition there is an "extra" file (*.dayextra.xml) per date that contains the user editable stuff (comments, trackbacks, etc.). Each entry can have n categories associated with it, and the system auto-generates a categoryCache.xml file when any entry is modified.

One thing that I need to do is have a mapping from the entry id (guid) to a URL. I figure that I could either change my architecture to have a single file per entry (like Radio), or build some cache. I'm trying to figure out the frequency of hits. I'm guessing that 80% of the hits are on the homepage, so I want to optimize around populating the home page entries and calendar. However, it seems that permanent links are often followed... hmm...

The basic layout for a "dayentry" file is:

<DayEntry>
  <Date>GMT date</Date>
  <Entries>
    <Entry>
      <Content>...</Content>
      <Created>GMT date/time</Created>
      <Modified>GMT date/time</Modified>
      <UniqueId>GUID</UniqueId>
      <Title>...</Title>
      <Categories>semicolon demlited list</Categories>
    </Entry>
    <Entry>...</Entry>
  </Entries>
</DayEntry>

 


10:26:26 PM    comment []