(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Security.Cryptography; | |
using System.Text; | |
using System.Threading.Tasks; | |
namespace aes_example | |
{ | |
using System; |
(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
Both command sourcing (CS) and event sourcing (ES) rely on determinism for correctness.
The correctness condition for ES is the determinism (purity) of the function State -> Event -> State
. Given that this function is deterministic, aka it always maps the same inputs to the same ouputs, we can rely on it to reconstitute state at any point in time. Determinism is typically achieved by ensuring that the Event
has all required information to make the state transition, ie no side effects. The Event
then is a sort of "closure" of all pertinent information about the event.
The correctness condition for CS is the determinism of the function State -> Command -> Event
. Herein lies one of the distinctions between command sourcing and event sourcing - a program can control its output, but it not its input. Since one can't control the input, aka command, one can't in general, enrich it with all required information to make the above function deterministic. A consequence of this is that you can't simply replay a
Download and install Git from MSysGit or Git SCM.
Download and install getopt.exe
from the util-linux package into C:\Program Files\Git\bin
. (Only getopt.exe
, the others util-linux files are not used). Also install libintl3.dll
and libiconv2.dll
from the Dependencies packages (libintl and libiconv), into the same directory.
Suppose that Git is installed in the folder
c:\bin\git
and GnuWin32 in the folderc:\bin\GnuWin32
.
Clone the git-flow sources from GitHub:
$ git clone --recursive git://github.com/nvie/gitflow.git
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! | |
VAGRANTFILE_API_VERSION = "2" | |
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| | |
# Disable automatic box update checking. If you disable this, then | |
# boxes will only be checked for updates when the user runs | |
# `vagrant box outdated`. This is not recommended. |
public enum Cacheability | |
{ | |
NoCache, | |
Private, | |
Public, | |
} |
package pc | |
import akka.actor.Actor | |
import akka.actor.Props | |
import akka.actor.ActorRef | |
import akka.actor.ActorRefFactory | |
class Parent extends Actor { | |
val child = context.actorOf(Props[Child], "child") | |
var ponged = false |
# delete local tag '12345' | |
git tag -d 12345 | |
# delete remote tag '12345' (eg, GitHub version too) | |
git push origin :refs/tags/12345 | |
# alternative approach | |
git push --delete origin tagName | |
git tag -d tagName |
Configuration NServiceBusServiceDeployConfig { | |
param ( | |
[Parameter(Mandatory)] | |
[ValidateNotNullOrEmpty()] | |
[string[]] $targetNodes, | |
[Parameter(Mandatory)] | |
[ValidateNotNullOrEmpty()] | |
[string] $serviceDeployPath, |