Sourceforge RSS
Sourceforge now has a RSS feed (at least I just found out):
http://sourceforge.net/export/rss2_sfnews.php?feed
a weblog of thoughts and ideas about software, with a slight bias towards strongly typed languages http://www.stronglytyped.com
Sourceforge now has a RSS feed (at least I just found out):
http://sourceforge.net/export/rss2_sfnews.php?feed
My response to Aaron (actually a quote):
"Oooooo peace be upon you peace be upon you peace you oooooo" cried Zahra Khafi, a 68-year-old mother of five, to a group of American and British visitors who came to the town shortly after Mr. Hussein's army had appeared to melt away. "I'm not afraid of Saddam anymore." [nytimes]
I hate war. It's terrible. But in some cases the ends justify the means.
By the way...do you know what time is it?
"Microsoft Object Spaces is designed to work on all .NET platforms. All .NET platforms - desktop, server, personal, embedded, and card - can use this API to access data.
The ObjectSpaces architecture lets you expose data as objects and lists of objects rather than as tables, columns, rows, or XML elements.
Objects defined within the ObjectSpaces architecture are known as persistent objects.
Once you've defined a persistent object, you can use an ObjectSpace to create instances of the object and to persist the object data to a data store, retrieve and persist objects back to the data store, as well as delete instances of the object from the data store." [link]
"ZakBlog is a Blogging client application for servers that support the metaWeblog API, such as Radio Userland and Moveable Type. This allows you to post / edit / delete items from your weblog in an easy to use application, complete with spell checker (requires Word to be installed). " [Simon Fell]
The "machine" is moving...
Simon asks: "... on your travels through SoapException, did you spot a way to turn off the stack trace ?"
I did sort of by accident. When I was debugging my cfNET app from the emulator the stack trace would appear. But when I ran it on my PDA it wouldn't appear. I did some searching and found this article (scroll to the last question).
So basically it's enabled/disabled by the customErrors element in your web.config file:
<configuration>
<system.web>
<customErrors mode="On"/>
</system.web>
</configuration>
I just noticed that the task "Blow up Saddam Hussein" is still on the task list. We'll have to keep it there until...
As I'm writing my application using bamboo.Prevalence I'm hitting a few stumbling blocks and it's not the prevalence system, it's me. After my first approach I quickly realized I'm not thinking in the right mental paradigm.
First off, my state system has to interact with the database for long term storage. WRONG! That's not deterministic. When the system restores the objects' state database values may change. Inside my state system it has to be a closed box. Even date/time values need to come from the prevalence system's clock. But how do we mesh the two? That leads to the next item.
I wanted to initialize data within the state system. WRONG AGAIN! It's a command driven system. If there's no command there's no log. No log, no persistence. When interacting with the prevalence system you should think in commands. So feed the system with data from the database through commands. Read from the system using queries.
All in all the system I'm building will be easier to develop and maintained (less lines of code) and better performing. I really like how it's unfolding.
So the lesson today: When developing a prevalence system build deterministic objects and think commands.
I haven't found any issues with running the bamboo.Prevalence engine within the HttpApplication object:
public class Global : System.Web.HttpApplication
{
// prevalence engine stuff
public static PrevalenceEngine PsEngine;
public static ToDoList PsSystem;
protected void Application_Start(Object sender, EventArgs e)
{
string prevalenceBase = "{some physical path (C:\data)}";
Global.PsEngine = PrevalenceActivator.CreateTransparentEngine(
typeof(ToDoList), prevalenceBase);
Global.PsSystem = Global.PsEngine.PrevalentSystem as ToDoList;
}
}
<bamboo.prevalence>
<engines>
<add id="tasks"
type="Bamboo.Prevalence.Demo.TaskSystem"
base="c:\tasks" />
<add id="documents"
type="Bamboo.Prevalence.Demo.DocumentSystem"
base="c:\documents"
autoVersionMigration="true" />
</engines>
<bamboo.prevalence>
PrevalenceEngine engine = PrevalenceSettings.GetEngine("tasks");
I built a little task list thingy to test bamboo.Prevalance with ASP.NET. If you have a second could you test it out.
Once I get the bugs worked out I'll post some source code.
http://www.stronglytyped.com/exp/pstask/
"Persisting state and data has always been a problem with object-oriented software. Over the years, developers have stored object data in many ways, including relational databases, flat files,and XML. None of these approaches really managed to keep the software purely object-oriented. The Prevayler team is changing this with the object prevalence concept. This article introduces object prevalence."
http://www-106.ibm.com/developerworks/java/library/wa-objprev/?dwzone=java
Justin blogged about Bamboo.Prevalence. It's a new concept for me but I like what I see:
"Basically, Bamboo.Prevalence aims to provide transparent object persistence and synchronization to deterministic systems targeting the CLR (Common Language Runtime). No relational databases. No object-to-relational mapping goo. No SQL. Just you and your objects, isn't life great? "
Currently I'm working on a system that needs to track the not-so-simple state of a business process. From the start I was thinking in terms of ER diagrams and relationships but as I learn more about prevalence systems the more I see how this might make things quite a bit simpler.
Let's imagine you have a set of business objects who's state is easly stored. With these objects you build a business layer and on a regular interval you take a snap shot of those objects. In addition to the snapshots you log every command to the objects. If the system goes down, to bring it back you just refer to the latest snapshot and apply the changes since. That's essentially what a prevalence system does. Cool thing is all the state is stored in memory...no messy SQL involved.
Duncan Mackenzie just informed me that my RSS feed was out of sync. I'm using BloggerPro with BlogBuddy to do my posts. Problem is with BlogBuddy you can't submit a Title. Without a title BloggerPro won't update the RSS feed. I've gotta keep an eye on things.
"Tonight I converted them all to HREF EXEs. I had a little snag, it turns out that when IEExec hosts your EXE it doesn't run it in the same type of Apartment as when you execute it directly (which doesn't matter for most things, but it screws up COM automation and drag and drop), but just adding
System.Threading.Thread.CurrentThread.ApartmentState = Threading.ApartmentState.STA
to the start of my app fixed that right up. (and, no, just adding the STA attribute wouldn't do it... in case you are wondering)"
[Code/Tea/Etc...]
That's a hot tip! I just recently had a problem with this. I was running an HREF EXE hosting a webbrowser control and got an error because it wasn't running in a STA. I thought just by adding [STAThread] would do it but apparently not.