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()'
Tag page
You must login to post a comment.
Powered by MindTouch Deki v.8.08.1a