Real World Projects using Sterling

Coordinator
Feb 8, 2011 at 1:18 PM

For those of you using Sterling, the latest change set is likely going to be 1.0 unless I receive any other bug reports before release. I'm working on a very comprehensive user guide that once completed will go in conjunction with the 1.0 RTM.

Having said that, I have spoken with many people using Sterling in both enterprise and consumer production applications on the browser and the phone. One thing people often wonder about new technology is, "Is it being used in the field" and this is why case studies are so popular. I'm not at liberty to share these projects without explicit permission from the authors, so I wanted to start a thread and solicit the community to share how you are using Sterling.

Whatever details you can (and are willing) to share about your project, please post here. And feel free to discuss any challenges or issues as well, because these will only help us improve the product and make it work better for you. This thread will definitely help people who are wondering "Is it really being used?" and also may give them some ideas about how to integrate it with their own projects.

Some other news in general is that I'm working on a far more detailed reference application for Sterling on the phone that includes CRUD operations. The user guide will also contain a "recipes" section to demonstrate things like creating identity fields, applying compression and encryption, and even using Sterling to serialize singletons like configuration data without having to create an artificial key on the class.

Stay tuned and please share your Sterling stories!

Feb 8, 2011 at 1:39 PM

I am using Sterling in my published Windows Phone 7 app, HealthCaddy. I am using it as a repository for the data I collect from my app. My needs for storage are simple, at this time, and what attracted me to Sterling was the ease of use, availability of sample code and willingness of Jeremy to drop everything else and help me out with watever trivial issue I encountered.

Plugging in Sterling was very easy and straightforward. ping me at ramesh<dot>sringeri<at>gmail<dot>com if you need any help/information

Feb 8, 2011 at 1:51 PM

Well, I am actually using Sterling in my Open Source "Sharp DropBox Client for .Net" (I know that's a mouthful). This is primarily a WP7 library. One of DropBox' requirements is that I make calls to their backend that could return a 304 (not changed since last time you checked). I use Sterling internally to cache those calls (you can also simply ask the cache for the last result for quicker results in your apps)

I am submitting to the market place today a digital comic book reader that leverages this library.

Jay Kimble
-- The Dev Theologian

Feb 9, 2011 at 2:36 AM

I'm developing an app that is some kind of a "Parking Manager", to control vehicles checkin and checkout. The app is called SilverPark and in a few days it will be online in production on http://www.silverpark.com.br .

Sterling DB is very useful because even if internet connection fails, the app will continue operational because the data will be all at isolated storage, thanks to Sterling Db.

Now I'm trying to implement online backup & restore.

Feb 9, 2011 at 7:15 AM
Edited Feb 9, 2011 at 11:30 AM

Hi,

I am sorry, but maybe I have discovered a little bug that should be fixed before RTW. In my application I need to store several instances of a class with an enum property, It seems, that after deserialization the value of the property is more or less random. I have tried to reproduce the problem in unit tests and the problem seems to be real (or I have a serious misunderstanding how to store and load objects).

Please add another testcase to Wintellect.Sterling.Test.Database.TestEnum and check the results:


[TestMethod]
public void TestMultipleEnumSaveAndLoad()
{
var test1 = new EnumClass { Id = 1, Value = TestEnums.Value1 };
var test2 = new EnumClass { Id = 2, Value = TestEnums.Value2 };

_databaseInstance.Save(test1);
_databaseInstance.Save(test2);

var actual1 = _databaseInstance.Load<EnumClass>(1);
var actual2 = _databaseInstance.Load<EnumClass>(2);

Assert.AreEqual(test1.Id, actual1.Id, "Failed to load enum: key 1 mismatch.");
Assert.AreEqual(test1.Value, actual1.Value, "Failed to load enum: value 1 mismatch.");

Assert.AreEqual(test2.Id, actual2.Id, "Failed to load enum: key 2 mismatch.");
Assert.AreEqual(test2.Value, actual2.Value, "Failed to load enum: value 2 mismatch.");
}



For your case studies: We are using Sterling in a enterprise healthcare application for the german homecare market. We support so called "mobile clinical assistants" (like the panasonic CF-H1) which can be used with and without internet connection. Our SL4 application can run as a trusted out-of-browser application to capture ward rounds, order products, generate prescription requests etc.. We have developed our own persistence layer for the client side since we have to store a lot of data locally (patient data, disease catalogs, product catalogs etc.) - but now we are about to replace it with sterling.


Best regards,
kallocain

 

Coordinator
Feb 9, 2011 at 11:26 AM

Great catch as always! It is fixed so if you pull down the latest you'll see your test will pass. That was a subtle problem having to do with modified closure in lambda expressions. I created an expression to parse the value of the enumeration to the underlying type, but instead of passing the instance variable defined by the lambda expression, I was passing the instance variable defined by the method that was creating the lambda expression - not only was that causing every evaluation to evaluate the original object to go into the method. All of it was fixed with a single line, changing a reference from "instance" to "parent." Let me know if you encounter any other issues!

Also, everyone, I appreciate you sharing your stories of how you are using Stering - very appreciated and I'm sure helpful to others who are evaluating Sterling as well!

Jeremy

Feb 9, 2011 at 1:29 PM

Wow - that was fast! Thank you very much, now everything works fine again.

Best regards,
kallocain

Feb 9, 2011 at 1:36 PM

I am using Sterling on a Windows Phone 7 app that uses a website back-end to show reports. You can see screen shots here:

http://openlightgroup.net/Blog/tabid/58/EntryId/158/Sketchflow-To-Final.aspx

Feb 9, 2011 at 3:13 PM

We used Sterling for a recently published Windows Phone 7 application that records and tracks horse vaccination schedules: http://www.appsfuze.com/applications/windowsphone.productivity/myhorsevaccines,7334.   The first revision of this application stores data locally and Sterling was a great object oriented database.   Sterling is everything that it claims to be: non-intrusive, lightweight, and it performs excellent on the Windows Phone 7.  

Kudos to Jeremy as well.  Over the past few months Jeremy has provided excellent Sterling support.   In every instance he's made fixes and uploaded a new change set, all in a matter of minutes!   This level of support is hardly ever found, and we truly appreciate Jeremy's efforts.

Best wishes,

Patrick

 

Feb 9, 2011 at 6:41 PM
Edited Feb 9, 2011 at 7:13 PM

We are building a global laboratory management system that is a Silverlight 4 desktop application.  We are tackling a unique (albeit complex) set of capabilities:

  • We are incorporating Prism 4 but taking it a step further in that our modules and views are loaded based upon what the user has granted access in a backend database (which is keyed from the client's Active Directory) and set up from a Silverlight-based administration page.
  • We give the user the choice to stay in-browser or go OOB.  Casual users will probably stay in-browser while advanced users will want the OOB.
  • We are using the Telerik docking control to function as the Prism shell, yielding a Visual Studio 2010-like experience of different panes and tools with all the splitter and draggable pane goodness.  As a result, currently each Prism module is wrapped in a Telerik radPane.
  • Modules can use the WCF Service layer that is getting built or choose to use RIA (or other sources) for special needs.
  • We are uploading document/files in a centralized Prism shell service over a HTTPHandler so a back-end process can file the content into the appropriate storage system.  This content is retrieved later via our own service.
  • We are building a enterprise logging mechanism that will allow tracing of application operations from the front-end to the back-end across servers.  The log levels can be set to a minimum for normal use then pumped up when true debugging is required.
  • We are also providing localization capabilities.  The twist here is we have English as the default for each localized item but allow the overseas labs to translate the pieces they want at run-time which will override any particular English value.  Also providing suggestions for the lab translations (using Bing API).
  • We are also providing switchable themes at run-time for the user.

To handle state locally, we are using Sterling.

-Paul

Feb 19, 2011 at 3:31 PM

Just released a cool note taking app for WP7 called QuickNote that uses Sterling. I have had a pretty good experience with Sterling.

Feb 27, 2011 at 10:19 PM

I use Sterling in my Windows Phone 7 applicaton : Stacks For Instapaper: http://wp7wonders.wordpress.com/stacks-for-instapaper/

Mar 9, 2011 at 4:54 PM

Sterling was used to provide persistent data storage for the recently released RunKeeper app for Windows Phone 7: http://blog.runkeeper.com/mobile-app/another-day-another-device-runkeeper-for-wp7-is-here. It was incredibly easy to set up and use and Jeremy was very response and helpful in fixing bugs, improving performance, and adding features that we needed.

If anyone wants to know anything else about how we implemented this for the RunKeeper app and our experiences with it, feel free to get in touch.

Mar 9, 2011 at 6:03 PM

I use Sterling as a caching mechanism for SmugSeven (Smugmug Client). 

I use separate "tables" for Albums and Images.

Huge fan so far, though I wish upgrading wasn't so painful. I would really love a cleaner way to add fields in the future.

Coordinator
Mar 9, 2011 at 6:05 PM

Thanks for sharing those - very cool. Yes, adding fields should be less painful and is something I am brainstorming seriously to work as seamlessly as possible in the future.

Mar 9, 2011 at 6:32 PM

I literally switched from a user error'd use of WP7Contrib's storage to Sterling in probably 3 hours? A large part of that was trying to work out things that are in the user guide like Singletons or using triggers to generate a new key. Sterling's serialization just works and it dropped my crappy BaseNotify'd model into straight auto properties like I'm used to (something about using List over ObservableCollection seems to be a plus in my book).

I suppose I should describe the app. It's a WP7 IRC client obviously not making it to the marketplace soon due to my use of homebrew sockets. I'm also looking to just use the same code to make a silverlight client as well. The only things I'm storing currently is a list of last connections which is just a class with 2 other nested classes beneath it (network and server). I'm also storing the entire client settings object graph which has some general properties, a user class and a list of networks and servers. I'm looking to expand into using it for caching messages per channel as a basic logging mechanism but I'm not really there yet.

I did have some minor pain points due to my n00bness, like forgetting to call Flush after a save in one of my services but I quickly figured it out. I also found the file/directory structure to be a little weird when using IsolatedStorageExplorer to debug the issue I was having but that's minor. The Zune client uses an even weirder naming scheme so as long as it's abstracted away I could really care less.

The main reason I chose Sterling is WP7Contrib already spoiled me to not have to really understand IsolatedStorage and I'm at the point where I could care less now. Sterling has wrapped up the pain rather brilliantly to the point that I'm going to seriously question any other method. 

Mar 9, 2011 at 8:04 PM

We are using Sterling in a Silverlight 4 Out Of Browser application using WCF to connect with a SharePoint 2010 back-end for a salesforce of 1,500 users to store important data when the clients are offline. 

Sterling will get an honourable mention at a SharePoint conference I'm speaking at in April

Really easy to use, completely serves its purpose for what we are using it for, and great documentation (as with all your projects!) 

Thanks, seriously! 

Gus

Jun 9, 2011 at 2:04 PM

We are using Sterling for a free horse application for the reining community, called MyReiningScores. We can't say enough great things about Sterling. It was easy to learn and quick to implement.  

Thanks,

Patrick

 

Dec 8, 2013 at 2:01 PM
I use the Sterling in an Windows Phone 8 App called "PlugFinder". It enables users in Europe (mostly Germany and Netherlands) to search for charging stations for their electric cars. Find the app in the Marketplace:
http://www.windowsphone.com/de-de/store/app/plugfinder/0e8a95ed-47a2-4903-966d-f13286abb41a

Thank you!

TopperDEL