Enter 2010.03 coupon code after following any of "Buy now" links on this page to get it.
Monday, March 29, 2010
"Can ORM make your application faster?" series
In March I started to write a series of posts called "Can ORM make your application faster?". 6 posts are already there, although the whole sequence isn't finished yet (planning to do this in two weeks).
I hope it will be interesting for anyone who uses ORM tools or considers this.
DataObjects.Net: upcoming changes and plans
Recently I made two important posts related to DataObjects.Net future:
Discount and subscriptions on DataObjects.Net
We updated "License" page in DataObjects.Net Wiki - now it reflects some changes we're planning to implement. There are:
- Discounts: right now we offer 15% discount for new orders, and 10% - for subscription prolongations. The offer is intact till March 31, 2010.
- Subscriptions: now you can pay for SMB and Enterprise licenses by ordering a subscription with 2-month billing period. So totally there are 6 payments, 20% of pay-at-once license cost each, thus total license cost is about 20%. But imagine: 99 USD per month - it's cheaper than VPS, and there is 15% discount! Conditions will never be more attractive. I wrote we'll adjust the prices in June, mainly to properly position the product relatively to its competitors. Check out e.g. this one, and think which of such functional can be covered by DO4 with DisconnectedState.
- Internal license is not available now.
Saturday, March 06, 2010
New posts in blogs
- Simple audit logging with DO4: code + some analysis of DO4 brains :)
- Default logging mode in DO4 is changed
- Thoughts: what must be done ASAP to improve v.4.2?
- Link: "Volatile keyword in C# – memory model explained"
- DataObjects.Net v4.2 is released!
- Help Server v3.0.1 is released!
- News & links to new topics in furum
- Alternative DataObjects.Net download location
- Versions and locking tests (code samples for Manual): the links
- DataObjects.Net v4.2 RC2 is available
- My Google Buzz feed
- X-tensive.com is updated (warning: beta version!)
- DataObjects.Net v4.2 RC is available
- Test pass results
- Support for connection strings and new way of setting default schema
- I'm back ;)
- The purpose of ProxyKeyGenerator
- Quest of the day
- New chapter in Manual: "Hacker's guide to DataObjects.Net"
- One more Manual update
- Why there is no [DebuggerSkipThrownException(typeof(...))]?
- Preliminary version of DataObjects.Net Manual in PDF
- DisconnectedState, OperationSet, events and operation logging
- Happy New Year!
- LINQ is nice: the same problem solved by different LINQ queries
- Testing new version of Help Server
- Denis Krjuchkov vs. Oracle
- DataObjects.Net 4.2 RC’s health status
- Google URL shortener for everyone
- Microsoft Sql Server CE 3.5 provider for DataObjects.Net 4
- File sync problem and possible solutions
- A code quality assessment concept
- Ayende on Dependency Injection
- Updates on the development process
- A frank confession
- Query preprocessors, Inversion of control & Localization support LINQ translator extension
- Logging, part 3. Configuring logging through log4net
- Logging, part 2. Architecture & configuration
- Logging, part 1. Introduction
// Actually I did this just to add some colors. And I know they don't read comments.
Online web help: industry standards, help browsers \ converters and help authoring tools
Abstract: this article might be helpful for you, if you ever considered publishing product help on the web. It provides a short review of online help browsers used by market leaders, as well as widely adopted commercial and freeware solutions allowing to publish product help on the web. So if you're planning to publish help files for your product on the web, you'll be aware of all the options, as well as of standard user expectations.
Online help browsers used by market leaders
Microsoft MSDN LibraryURL: http://msdn.microsoft.com/en-us/library/default.aspx
Nice features:
- 3 versions – Classic, Lightweight Beta, ScriptFree
- Search with hints, but only in Classic version!
- Good URLs
- Good print version
- Community content (comments), "Rate the article".
- No index - likely, because it must be incredibly large there
- I don't understand why it always reload the whole page. In general, this makes impression of slower operation.
- Open TOC nodes get closed on navigation (except the ones in current navigation path).
Adobe Online Help
URL: http://help.adobe.com/en_US/Acrobat/9.0/Professional/index.html - for Adobe Acrobat
- Comments, rating - with RSS
- Good design
- Good URLs (but see the notes below - it looks like plain HTML everywhere)
- No need for Print button :)
- TOC disappears when you click on a TOC link
- TOC always gets completely loaded.
- No AJAX, no frames
- No index
- Search there relies on global search at Adobe.com.
Autodesk Online Help
- Top frame URL does not change. It seems there is no way to get link to current page.
- Keyword and search indexes are fully loaded into the browser on navigation to corresponding tabs. Chrome process immediately eats ~ 200Mb.
- It seems search is implemented in JavaScript.
- No "Print" button.
- Buggy splitter (IE8, Chrome, Firefox 3.6).
- I'd say, design looks a bit ancient ;)
JetBrains WebHelp
URL: http://www.jetbrains.com/resharper/webhelp/ - for ReSharper
Nice features:
- AJAX TOC with sync on navigation
- Search on the right is good solution for wide screen (now it is the most frequent case, especially for developers).
- No URLs. Permalinks are available, but they lead to pages without header, TOC and Search.
- No highlighting of search results
- No index (probably, JetBrains help does not contain it)
- No "Print" button, but permalinks bring you to pages that are ideal for printing.
- Built with ExtJS.
ComponentOne NetHelp
URL: http://helpcentral.componentone.com/Documentation.aspx - for all C1 products
Nice features:
- "Previous page" and "Next page" buttons available at toolbar.
- Top frame URL does not change. It seems there is no way to get link to current page.
- TOC, keyword and search indexes are fully loaded into the browser on navigation to corresponding tabs.
- Most likely, search is implemented in JavaScript.
- All the features I expect to see (based on e.g. MSDN library experience) are available there.
- No good URLs, but there are permalinks.
- Animation of left pane is slooow... Completely unclear, why they use it at all there.
- Design must be improved (my own opinion = very subjective).
Eclipse Documentation
URL: http://help.eclipse.org/galileo/index.jsp
Nice features:
- All the features I expect to see are available there.
- Good search results (with quotations).
- No URLs, no permalinks.
- Index search returns paged results. Looks a bit strange from the point of UX.
- Really ancient design.
Mono Documentation
URL: http://www.go-mono.com/docs/index.aspx
Nice features:
- AJAX TOC
- It works noticeably faster than other help browsers - at least, from our office. Most likely, they properly tuned up content caching headers there.
- No search
- No index
- No URLs
- Clicking on "permalink" closes all the nodes in TOC
- 1px splitter - I noticed it only by occasion :)
Other examples:
- PHP Help: http://www.php.net/manual/en/
- MySQL Help: http://dev.mysql.com/doc/refman/5.5/en/
- Maple Help: http://www.maplesoft.com/support/help/AddOns/view.aspx?path=MaplePortal
This part contains just a list of them: usually product web site provides all the necessary information (supported features, browsers, etc.).
Supported help formats (.CHM, .HxS, etc.) and server platforms are mentioned here. Products are listed alphabetically.
A!K Research Labs chm2web
Product page: http://chm2web.aklabs.com/
Online demo: http://chm2web.aklabs.com/helpfr/
Supported help file formats: .CHM
Supported server platform: any (generated web sites use only HTML and JavaScript).
Herd Software Development WinhelpCGI
Product page: http://www.herdsoft.com/linux/produkte/winhelpcgi.html
Online demo: http://www.herdsoft.com/ti/winhelpcgi/
Supported help file formats: WinHelp (.HLP)
Oracle Help Technologies
URL: http://www.oracle.com/technology/tech/java/help/index.html - there is a link to demo.
Supported help file formats: Microsoft Help 1.x (.CHM) and 2.x (.HxS), plain HTML
Supported server platform: Windows, IIS 6.0/7.0 with ASP.NET 3.5.
Tools listed below are capable to generate web site from help project. They do not support standard help formats, but if you're building a documentation using one of these tools, it can can be converted to a website exposing it on the web.
Adobe RoboHelp
Product page: http://www.adobe.com/products/robohelp/
- Using FlashHelp output format. An example is here (official).
- Using WebHelp output format. An example is here (not official - unfortunately, I was unable to find an official one at Adobe.com, so I took one from this list).
- Using DocSite Templates for Docproject. Example output screenshots are here (I couldn't find real web site, so there are just screenshots). Generated web site requires IIS 6.0 with ASP.NET 2.0 to run.
- Using Sandcastle Website output. Examples of such documentation: first, second, third (not official, Sandcastle authors currently don't maintain official example site).
Discontinued, although you still can use this tool to build documentation for .NET 1.1 projects.
Tuesday, March 02, 2010
DataObjects.Net v4.2 is released!
DataObjects.Net v4.2 is our first official release after v4.0.5 (August 2009) - a bit more than 6 months have passed after that moment, and as you will find, we didn't waste the time during this period:
What's new
- Manual. It's still a work in progress, but I admit most important 80% of it are already written.
- Entity versions API: VersionInfo, [Version] attribute and a set of related classes allowing to track version changes and validate optimistic locking conditions.
- DisconnectedState API capable of switching any Session to true "offline" mode. DisconnectedState objects act as moveable and cloneable caches that can be attached to and detached from sessions. They can be serialized, are capable of providing optimistic locking for entities they cache, moreover, the operation log they maintain can be serialized and sent to another machine separately. So this is really a huge improvement enabling DataObjects.Net to operate in disconnected or occasionally connected scenarios.
- Full-text search working natively on MSSQL and PostgreSQL. Example queries are here; there is still no documentation for this feature, although its usage is really simple. Full-text search support isn't available for Oracle yet.
- Support for SQL Azure, SQL Server CE, Oracle and standard connection strings.
- Object-to-object mapping API. Again, uncovered in Manual, but you can look at code we're planning to use while describing this API.
- Unified API for registration and activation of persistent types and services. IoC framework we use now is much more flexible; there is no dependency on Common Service Locator, but container we use is fully replaceable - e.g. you can use Unity instead of it (test is here - again, this isn't covered in Manual yet).
- Future (delayed) queries, prefetch API and uber-batching provide much better performance almost for free.
- Unified provider-independent exceptions.
- Lots of LINQ provider extensions, including projections to custom types (POCO objects in LINQ queries), local collections in queries, custom LINQ compiler extensions and even custom query pre-processors allowing, for example, to automatically convert your queries to "localized" ones.
- Richer Session-level events.
- Much faster Entity or graph removal. Likely, you know DataObjects.Net (as before) supports pretty complex Entity removal process. It recursively discovers the graph of references to removing entities and finally removes nodes (Entities) and nullifies the edges (associations) in the whole graph. This ensures removal happens safely and every affected entity gets notified. But such a siscovery process is pretty complex: in DataObjects.Net v3.9 complex removal was the slowest operation (~2 times slower then entity creation). But now we've involved the whole bunch of new APIs to make this efficient: future queries and prefetch API are used to discover the graph faster, statement batching helps to "join" query operations with removals together. So I'm ready to bet complex removals are now at least 5-10 times faster than in v4.0.5.
- A set of integrated services allowing to study the state of DataObjects.Net caches, invalidate them and execute such low-level operations on entities as direct field modification (w/o property setter invocation). DirectSqlAccessor is, likely, one of the most useful services among them.
- Significant improvements in schema upgrade API. And yes, now there are move (to another type) and copy field hints.
- New DomainUpgradeMode.Legacy allows to use DataObjects.Net with legacy schemas. There are still some limitations, but in many cases they must not act as show stoppers.
- New SessionManager type simplifying usage of DataObjects.Net in web applications.
- Support for custom type discriminators (use [TypeDiscriminator] and [TypeDiscriminatorValue] attributes).
- TypeId column is created only when it's necessary.
- Install.bat \ Uninstall.bat files must be executed with Administrator permissions on Windows Vista and above. Of course, this is important only if you'll use them. Standard installer already does this (you'll be requested to provide Administrator permissions for it by UAC prompt on its start).
- Oracle support for 10g is temporarily broken in the current version, so you can use it only with Oracle 9i and 11g.
- A set of sections must be added, including "Disconnected operations", "Full-text search", etc.
- We should remove the whole System namespace (earlier I wrote Xtensive.Core publishes some of its types there) from it because of Sandcastle bug - it was listing the types from mscorlib.dll there, but wasn't listing our own ones. Not really important (there are mainly extension methods), but unpleasant.
- OrderAccounting project is buggy. Frankly speaking, we were unable to fix all the issues there during last days. The cause is DissconnectedState key remapping behavior on ApplyChanges, which is relatively new. All the issues there will be fixed shortly; for now we recommend you to study WPF - it fully relies on DisconnectedState as well now.
- Improve Manual and samples further releasing minor updates 1-2 times per month.
- Migrate to .NET 4.0 and PostSharp 2.0. Or, more precisely, provide .NET 4.0 version - so far we aren't going to fully leave .NET 3.5.





















