Was this page helpful?

Denim (1.4)

    Table of contents
    No headers
    • Miscellaneous:
      • General
        • BREAKING CHANGE: replaced '-Yield()' suffix to '-Async()' (e.g. PostYield() is now PostAsync()); this makes the Dream API more self-consistent
      • Core
        • BREAKING CHANGE: replaced IDreamEnvironment references with Plug (better decoupling)
        • BREAKING CHANGE: all internal uris now use local://; they get converted automatically on exit
        • replaced many occurrences of XDoc 'Start().Value().End()' with 'Elem()'
      • Dream
        • replaced many occurrences of XDoc 'Start().Value().End()' with 'Elem()'
        • removed all Cue classes and interfaces
        • moved all classes from 'MindTouch.Tasking' into 'MindTouch.Dream' namespace
    • APITest
      • changes to parameters are now automatically reflected in the url (no need to hit Update Url)
      • the radio button next to Use File/Use Test gets automatically selected when either field is changed
      • header values are now displayed as part of the request results
      • fixed xpath escaping issue
    • ArrayUtil
      • added 'Resize()' method
    • Async
      • BREAKING CHANGE: renamed 'Wait()' methods to 'Sleep()' and 'WaitHandler()'
      • create new static class for Asynchronous methods
      • 'CopyStream()' detects memory streams to avoid unnecessary asynchronous calls
      • remove timeout on 'CopyStream()' method since it contains inner timeouts for the chunks
    • AtomService
      • new service added
      • fixed errors due to type change on XAtomBase
    • Bench
      • added Mindtouch.bench utility to benchmark/stress test a batch of uris using Apache Bench (ab)
    • ConsoleHost
      • BREAKING CHANGE: deprecated 'root-uri', used 'path-prefix' instead
      • BREAKING CHANGE: renamed 'path-prefix' to 'server-path' ('path-prefix' is still recognized though)
      • added 'G' as console key-press to force garbage collection
      • apikey is now generated automatically if not present and printed on the startup screen
      • DreamHost needs to be deinitialized before the transports are shutdown (since the transports are needed to conduct the shutdown!)
      • removed transport-level apikey, username, password settings
      • added 'H'-key for interactive help
      • automatically assign server-name if none is provided
      • added new command line option 'capture-stack-trace' for debugging
      • added new interactive shell commands (D: toggle stack capture, P: show pending rendez-vous events)
      • 'P' will now show the stack trace for pending rendez-vous events, if the stack trace has been captured
      • 'D' now cycles through debug-levels (none, task-state only, task-state & stack-trace)
      • 'I' shows pending DreamContext instances when task-state is captured
      • added timer and activity details to system information output
      • check for 'services' folder and automatically load assemblies contained in it
    • Cue
      • BREAKING CHANGE: removed class
    • CueYieldDoneHandler
      • BREAKING CHANGE: removed delegate
    • DataCatalog
      • added data access classes
      • added 'ConnectionStream' property (using this property is not recommended and shows a warning during compilation)
      • added TestConnection to catalog.cs
    • DataCommand
      • added data access classes
      • added usage documentation to methods; finalized most methods
      • added 'Read()' method for reading a single string value
      • added more verbose logging of db calls
    • DataFactory
      • added data access classes
      • added lots of error checking during factory creation (checks for types and constructors)
      • workaround to Mono on Linux with SMP issue causing deadlocks under high volume
    • DebugUtil
      • removed DEBUG_STACKTRACE compiler flag; we can control this now with a command-line flag
    • DirectoryService
      • added 'filestorage-path' which is used to store directory info on the filesystem
    • DreamContext
      • BREAKING CHANGE: removed 'Passthrough()'
      • BREAKING CHANGE: 'Close()' and 'KeepOpen()' have been removed (no longer applicable)
      • BREAKING CHANGE: renamed 'RootUri' to 'BaseUri'
      • BREAKING CHANGE: renamed 'BaseUri' to 'PublicUri'
      • BREAKING CHANGE: 'Redirect()' is now a coroutine
      • BREAKING CHANGE: renamed 'Redirect()' method to 'Relay()'
      • add 'Feature' property to identify invoked feature
      • fixed bug where context state was reset for each stage in a feature request
      • added 'Env' property
      • initialized immediately when received
      • added 'ServerUri' which is based on <server-name> config setting
      • added method to convert URIs to local representation
      • added 'Request' property that holds the current client request message
      • Enums can now be used in 'GetParam<EnumType>()'
      • added stopwatch
    • DreamContextCollection
      • 'Add()' now requires the DreamContext and return Stream object
      • removed unnecessary serialization overhead when doing streaming
    • DreamFeature
      • added 'HitCounter' and 'ExecutionTime' properties
      • exposing the main DreamFeatureStage from DreamFeature
    • DreamFeatureChain
      • service features access privileges are now enforced
      • major bug in error recovery was fixed (could cause leaking DreamContext objects)
      • fixed bug where exceptions would skip a handler
      • refactoring to hide stack trace during debugging
      •  show URI of feature which failed to respond
    • DreamFeatureDirectory
      • 'ListAll()' now returns an XDoc instead of List<string>
    • DreamFeatureYieldAsyncHandler
      • BREAKING CHANGE: delegate type removed
    • DreamHost
      • BREAKING CHANGE: 'POST:shutdown' has been replaced by 'DELETE:'
      • BREAKING CHANGE: 'POST:start' has been replaced with 'POST:services', make sure to update all deki.startup.xml files
      • fixed bug with api-key not being checked properly
      • removed 'Submit()' and 'IPlugFactory.Invoke()' from the debugger call stack
      • added additional logging for failed deinitialization
      • request is now always added to DreamContext state as DreamMessage type
      • initializes DreamConte.RootUri when request arrived over a standard port and the path-prefix header is set
      • added 'GET:activities' to show open connections (and potentially more in the future)
      • added mapping from external aliases to local:// uris (preserves cookies and so on)
      • changed default storage path for services
      • don't invoke cusomt proloque/epliques for '/@config' features since these are system calls that happen for initialization and shutdown operations
      • don't log "service stopped" message, since it could be the log service that was stopped (oops)
      • support for private-storage provider
      • added 'GET:status' to provide system & host status information
      • added 'count' attribute to activities
      • additional debug output during shutdown
      • 'SubmitRequest()' is processed on separate worker thread
      • 'GET:status' now shows up-time, host aliases, services, and features with execution time
      • 'StartService()' now returns message from failed service startup
    • DreamKernel
      • BREAKING CHANGE: merged into 'DreamHost'
    • DreamMessage
      • BREAKING CHANGE: changed 'Stream', 'Document', 'Text', 'TextReader', and 'Bytes' properties to 'AsStream()', 'AsDocument()', 'AsText()', 'AsTextReader()', and 'AsBytes()' methods
      • added 'ContentDisposition' property
      • added 'ForStreaming()' method which create a new message with a pipe stream
      • error messages are now returned as XML with a XSL tranform
      • made XSLT href smarter for error messages (now based active host environment)
      • fixed annoying bug that would cause the error xslt to have the wrong uri
      • fixed bug in 'InternalError()' that caused an exception to be raised when 'exception' was null
      • changed 'Memorize()' method into a coroutine
      • fixed deserialization bug in 'ContentDisposition' property
    • DreamNoMessageException
      • BREAKING CHANGE:class removed (use DreamResponseException)
    • DreamProcessing
      • content transforms are now also applied to non-succesful responses when the response is XML
      • fixed bug in 'EpilogueDreamOut()' that prevented conversion of error messages to PHP/JSON
      • returning correct response-uri header (instead of local://...)
      • added 'host.exit' epilogue to gather feature timing information
    • DreamRequestException
      • BREAKING CHANGE:class removed (use DreamResponseException)
    • DreamService
      • BREAKING CHANGE: switched child logging service from EventsService to AtomService
      • BREAKING CHANGE: 'Start()' and 'Stop()' are now coroutines
      • BREAKING CHANGE: removed 'GetParam()' methods (used 'DreamContext.GetParam()' instead)
      • features can now be 'public', 'internal', and 'private' (based on access modifier of implemented method)
      • at creation time, all services get cryptographically strong private and internal access keys
      • added 'Prologues' and 'Epiloques' properties used during service initialization
      • made all '@config' features 'private'
      • added 'apikey'  as a configuration option for all services
      • added <autosave> configuration property to trigger automatic saves for services with state
      • made DetermineAccess virtual
      • use List<Cookies> to store cookies (instead of CookieContainer)
      • use HttpUtil to manage cookies
      • enumerate blueprint attribute and add them to the blueprint
      • changed "POST:grant" to "POST:@grants"
    • DreamServiceBlueprintAttribute
      • class added
    • DreamUtil
      • BREAKING CHANGE: removed 'CloseAllMessages()'
    • HostService
      • BREAKING CHANGE: merged into 'DreamHost'
    • HttpHandler
      • added ability to post a startup script by specifying <add name="script" value="startup.xml"/> in web.config
      • changed the web.config vhost and port parameters to be deki-uri (just like mindtouch.dream.host)
      • create the logger as a HttpHandler not a HttpTransport
      • use the correct requestUri for processing provided by mod_mono
      • removed transport authentication since feature access is now controlled by reflecting member access modifier
      • no longer overwriting 'host' header
      • uri replacement of index.aspx changed to /index.aspx to reduce unwanted matches
      • build our XUri from the RawUrl rather than the Url to prevent additional Uri decoding
      • convert response to stream before setting headers (forces 'Content-Length' header to be created)
      • fixed inconsistency with HttpTransport
    • HttpOutCue
      • BREAKING CHANGE: removed class
    • HttpPlug
      • should now always respond with a DreamMessage and never throw an exception
      • rewrote 'Invoke()' to take advantage of the coroutine capabilities
    • HttpPlugFactory
      • added fix for double messages on authentication (thx to Vincent D. for submitting the patch)
      • made 'GetResponse()' asynchronous
      • replaced use of 'ThreadPool.RegisterWaitForSingleObject()' with 'Async.Wait()' method
      • don't use KeepAlive and use HTTP/1.0 (avoids 'connection closed: An unexpected error occurred on a send')
    • HttpTransport
      • now handles both receiving and responding to requests
      • made response handler asynchronous
      • injects 'path-prefix' header before submitting it to DreamHost
      • moved 'DreamMessage.Close()' call into "finally" handler
      • don't timeout on long http connections
      • serialize output before sending it to generate the proper 'Content-Length' header
      • use object as key instead of 'httpContext' to log activities
    • HttpUtil
      • added 'GetCookie()' to bypass a mono bug
      • added FetchCookies() and UpdateCookies()
      • fixed cookie value parsing
      • ignore casing when fetching cookies
      • fixed cookies in IE by not enclosing cookie path with quotes and moving path to last parameter
      • added 'ParseNameValuePairs()' method for parsing headers
      • fixed username/passwords being url encoded when containing irregular chars issue
      • using 'expires' absolute date for set-cookie header and parsing this on incoming cookie header
    • IDreamEnvironment
      • BREAKING CHANGE: 'Submit()' now takes a DreamMessage and TaskYield<DreamMessage> instead of cues
      • BREAKING CHANGE: renamed 'RootUri' to 'LocalUri'
      • BREAKING CHANGE: renamed 'Submit()' to 'SubmitRequest()'
      • BREAKING CHANGE: renamed 'AddActivityMessage()' to 'AddActivityDescription()'
    • IDreamResponseFormater
      • BREAKING CHANGE: fixed encoding bug (was always UTF8)
    • IDreamService
      • BREAKING CHANGE: 'SubmitRequest()' does not take a timeout parameter anymore
      • removed 'Uri' (use 'Self' instead)
    • IDreamTransprot
      • BREAKING CHANGE: removed interface
    • IPlugFactory
      • BREAKING CHANGE: 'Invoke()' now takes a DreamMessage and TaskYield<DreamMessage> instead of cues
      • BREAKING CHANGE: 'Invoke()' is now a coroutine
      • BREAKING CHANGE: removed 'timeout' parameter from 'Invoke()' method (it's redundant since ResultBase already has a timeout)
      • added 'ResolveAlias()' method to support multiple host names
    • ITask
      • BREAKING CHANGE: renamed to 'IYield'
    • Lock<T>
      • added class for managing non-blocking access to exclusive resources
    • MimeType
      • added NOTHING type (doesn't match any type)
      • changed PHP mime-type to 'application/php; charset=utf8'
      • added DREAM_EXCEPTION mime-type (application/x-dream-exception+xml)
      • changed HTML to UTF-8
      • added 'IsXml' property for easy identification of xml mime types
      • loosened 'IsXml' check
      • fixed error when fetching CharSet surrounded by double-quotes
    • ParserUtil
      • better parsing of 'Cookie' and 'Set-Cookie' headers
    • PhpUtil
      • switched php serialization to serialize to bytes instead of characters
      • added 'ConvertToFormatString()' function
    • PipeStream
      • class added
    • Plug
      • BREAKING CHANGE: renamed 'InvokeYieldEx()' to 'InvokeAsync()'
      • removed 'InvokeYield()' from the debugger call stack
      • all 'Invoke()' and 'InvokeYield()' methods now read the response stream to memory making 'Close()' optional to call (use 'InvokeYieldEx()' for streaming)
      • don't try to add cookies without a value (avoids unnecessary exceptions)
      • uses 'ResolveAlias()' to retrieve correct cookies for uri
      • forward host and path-prefix information to local:// uris
      • increased default timeout to 60 seconds
      • use HttpUtil methods for adding and fetching cookies
      • set _timeout on Result object
      • use global cookie container when not running inside a service
    • PlugYield
      • BREAKING CHANGE: class removed (use TaskYield<DreamMessage> instead)
    • RendezVousEvent
      • added RENDEZVOUS_IN_PLACE define; when not set, succesful rendez-vous continue on a new thread instead of in-place
      • removed 'Signal()' and 'Wait()' from the debugger call stack
      • added a global 'Pending' counter for unsignaled events
      • capture stack trace into central table for all rendez-vous events
      • allow capturing of task-state
    • ResourcePlugFactory
      • allow 'type=' query parameter to specify the mime-type of the resource
      • changed 'type' query to 'dream.out.type' for consistency
      • added support for HEAD requests
    • ResultBase (formerly TaskBase)
      • BREAKING CHANGE: 'Wait()' was renamed to 'WhenDone()'
      • added support for timeouts
      • added back support for timeout on asynchronous operations using the new TaskTimer
    • Result (formerly TaskYield)
      • added missing 'Wait()' method
      • added 'TryReturn()' method which provides a two-phase commit mechanism for results
    • Result<T> (formerly TaskYield<T>)
      • added 'TryReturn()' method which provides a two-phase commit mechanism for results
    • StorageService
      • changed date schema for file entries and added expiration date
      • added caching headers and conditional retrieval handling
    • StreamUtil
      • BREAKING CHANGE: removed 'CopyStream()', use 'Async.CopyStream()' instead
      • added 'CopyToMemoryStream()' and 'DupStream()'
      • increase buffer size to 4KB (recommended size)
      • 'EscapeString()' was not escaping single quotes
      • removed 'PadStream()' method (use 'Async.PadStream()' instead)
    • StringUtil
      • added MD5 hash method
      • renamed 'EncodeString()' to 'QuoteString()' as it was causing too much confusion with 'EscapeString()'
      • added 'EncodeHtmlEntities()' and 'DecodeHtmlEntities()'
      • added missing escape sequences to 'EscapeString()' and 'UnescapeString()'
      • minor optimization for 'EscapeString()'
    • SysUtil
      • class added, contains a special 'ConvertType()' method that can convert to nullable types as well (e.g. int?)
      • added 'ExecuteProcess()'
      • added 'ChangeType<T>()'
      • added try..catch around asynchronous piping of data into std-in for 'ExecuteProcess()' as it might throw an exception when the process is terminated before completion
      • 'ChangeType()' now supports conversions from/to string and XUri
      • put a try..catch around the kill command in ExecuteProcess(), and release Process resources when done
      • removed 'ExecuteProcess()' (use 'Async.ExecuteProcess()' instead)
    • Task
      • BREAKING CHANGE: 'Async(Enumerator, ...)' renamed to 'Iterate(Enumerator, ...)'
      • BREAKING CHANGE: moved 'Fork()' methods to Async class
      • better handling of exceptions
      • added asynchronous 'CopyStream' method
      • added 'New()' to create a new task context
      • added a few more methods to the debugger hide list (makes the call stack shorter)
      • added logging for 'Fork()' methods
      • moved Async class into its own file
    • TaskBehavior
      • fixed regression where exceptions where not properly forwarded
      • added a few more methods to the debugger hide list (makes the call stack shorter)
    • TaskTimer
      • class added
    • TaskYield
      • BREAKING CHANGE: renamed to Result
      • 'Wait(...)' methods now return 'this' to allow chaining
      • added 'Return(TaskYield)' for chaining async responses
    • TaskYield<T>
      • BREAKING CHANGE: renamed to Result<T>
      • 'Wait(...)' methods now return 'this' to allow chaining
      • added 'Return(TaskYield)' for chaining async responses
      • added 'Return(delegate)' for on-demand responses
      • added exception handlers around 'BeginRead()' and 'BeginWrite()'
    • TaskYieldBase
      • BREAKING CHANGE: renamed to ResultBase
      • added 'ReturnType' property
    • TimerQueue
      • BREAKING CHANGE: removed class (use TaskTimer instead)
    • TimeSchedule
      • BREAKING CHANGE: class removed (use TaskTimer instead)
    • VoidClosure
      • added stronger checks for misuse
    • XAtomBase
      • class added
      • added support for GeoRSS
      • made protected methods public
      • 'Id' is an element, not a attribute
      • changed 'Id' type to XUri
      • removed 'xmlns' atom namespace attribute (causing too many issues)
    • XAtomEntry
      • class added
    • XAtomFeed
      • class added
    • XDoc
      • BREAKING CHANGE: renamed 'Count' to 'ListLength'
      • BREAKING CHANGE:'LoadFrom()' is now 'XDocFactory.LoadFrom()'
      • BREAKING CHANGE:'From()' is now 'XDocFactory.From()'
      • BREAKING CHANGE:'FromData()' is now 'XDocFactory.FromData()'
      • BREAKING CHANGE:'ToJson()' is now 'JsonUtil.ToJson()'
      • BREAKING CHANGE:'ToVersit()' is now 'VersitUtil.ToVersit()'
      • BREAKING CHANGE:'ToXSpan()' is now 'XSpanUtil.ToXSpan()'
      • BREAKING CHANGE:'ToPhp()' is now 'PhpUtil.ToPhp()'
      • BREAKING CHANGE: changed 'AsText' to return null if element is empty or does not contain a #text node as it first child node
      • BREAKING CHANGE: renamed 'AppendsNodes()' to 'AddNodes()' for consistency
      • fixed XHTML output
      • added 'ToBytes()' method
      • 'ReplaceValue()' now also works on attributes
      • 'ToXhtml()' properly handles EMPTY html elements
      • added 'Parent' property
      • added 'AppendNodes()' method
      • added 'PrependNodes()' method
      • added 'Rename()' method
      • added 'WithXslTransform()' method
      • added support for namespaces when creating elements and attributes
      • added 'this[XmlNode]' property to initialize an XDoc at a given node position
      • added 'Tranform(XUri)' and 'Transform(XslCompiledTransform)' methods
      • XDoc constructor now looks for the first Element node (skipping processing elements and comment nodes)
      • added more null argument checks
      • fixed bug in 'ToXHtml()' method
      • added 'ReplaceWithNodes()' method
      • adding XUris to an xdoc converts them to public uris when appropriate (using DreamContex.AsPublicUri)
      • fixed bug with #text and CDATA nodes
      • added special xml serialization rules for 'bool' so that it always produces 'true' and 'false'
      • 'AsUri' now converts URIs to local representation when possible
      • 'Value()', 'Attr()', and 'Elem()' methods now acts as no-ops when the value is null (no more exceptions!)
      • added 'ReplaceValue()' methods for all value types with special handling
      • added 'ToInnerXHtml()' method (like 'ToXHtml()' but without the enclosing element tag)
      • changed 'this[XmlNode]' so that it returns an XDoc with only 1 element rather than all its siblings (much, much faster!)
      • store list of nodes as array instead of List<XmlNode> (less overhead)
      • XDoc(XDoc) constructor now initializes the new xdoc as a rooted document (i.e. it will be used as the starting point for xpath queries)
      • removed 'Transform(XUri)'
      • added 'CDataSection()' method
      • added 'RemoveNodes()'
      • removed 'Normalize()' call from 'ToXHtml()' as it was crashing from time to time on MONO
      • added support for inserting xml comments
      • add 'ConditionalComment()' method
      • default namespace can only be set when parsing an xml document (this fixes the Atom generation bug)
    • XDocCop
      • added class to validate XDoc documents
      • don't apply rules to root node
      • allow for shorthand notation to add rules
      • convert CDATA sections into plain text elements
    • XDocDiff
      • new class to create diffs of XDocs
      • fixed bug when diffing empty documents
      • changed word boundary parsing to not include symbols into alphanumeric names
      • count only terms beginning with a letter or a digit as words
      • start diff at the current node, rather than the owner document
      • provide an optional memory limit for diffs
    • XDocFactory
      • added DTD caching for SgmlReader
      • fixed whitespaces munging bug when parsing HTML (bug #2037)
      • added 'From()' method to create XDoc for enumeration of key-value pairs
      • removed 'FromData()' methods
    • XDocWord
      • added class to describe words in XDoc
      • added 'IsWord' property
    • XHtmlTextWriter
      • use commented-out CDATA section inside <script> elements
      • better support for automatic CDATA encoding of <script> elements
    • XPostUtil
      • xdoc serialization to key-value pairs was seriously messed up
    • XUri
      • BREAKING CHANGE: removed support for segment parameters (they were causing issues; instead parse manually for segment parameters if desired)
      • fixed typo in method name
      • fix bug in 'TryParse()' method
      • allow empty segments in path if there are segment parameters
      • 'TryParse(string)' now returns XUri instead of bool (if result is null, TryParse failed)
      • added '^' to the legal set of path characters
      • added 'Encode()' method as a shortcut for 'EncodeSegment()'
    Was this page helpful?
    Tag page
    You must login to post a comment.

    Copyright © 2011 MindTouch, Inc. Powered by