These are chat archives for akkadotnet/akka.net

2nd
Feb 2016
Adam Friedman
@tintoy
Feb 02 2016 03:07
@Zetanova fair point; this was why I was wondering if there was a more systemic solution to the problem. Then again, for something like Terminated, it might be tricky to determine the causality of the actor's termination in a way that would be useful in logs
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 08:45
@tintoy in PreRestart lifecycle event you have arguments for both Exception and message, so you can write them down directly - no Terminated will be needed
Zetanova
@Zetanova
Feb 02 2016 08:55
@Horusiath he needs a ambient value, thats travels with the operation. WebAPI => Akka => EF and back and maybe even into the Exception.Data of the PreRestart. He currently archieve it with a Message-Base class. To make a base class a requirment for the hole system will lilly not going to work well. The optimal point would be to copy the ambient value with the envelope in akka. In other technologies like WCF this value would be in the head and the in the OperationContext, in normal code in the CallContext, in WebAPI in the http-header and pushed into the CallContext with a filter ... This ambient value (post likly a guid) can be used in logs or pushed into Exception.Data to correlate a operation over servers and tasks.
Zetanova
@Zetanova
Feb 02 2016 09:14
https://msdn.microsoft.com/en-us/library/system.diagnostics.correlationmanager(v=vs.110).aspx to be honest never used it, but there it is the ActivityId support
Would be very very usefull, if akka can support it. The dispatcher "just" need to restore the ActivityId with the ActivityId stored over the message envelope
Kevin McFarlane
@kevinmcfarlane
Feb 02 2016 10:49

I have some shutdown code in a parent actor that looks like this...

Console.WriteLine("Finished processing {0} source folders, shutting down actor system...", _numberOfFolders);
Logger.Info("Finished processing {0} source folders, shutting down actor system...", _numberOfFolders);
Context.System.Shutdown();

Then in my Main method I have the usual AwaitTermination(). However, the logging code (NLog) does not get written unless I insert a short Thread.Sleep before calling Shutdown. Is there a better way of doing this?

Adam Friedman
@tintoy
Feb 02 2016 11:09
Does Akka even have the concept of envelopes for messages?
I know there's something called an actor cell which from memory holds some ambient data but messages don't have any metadata on them that the system propagates for them does it
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:12
@tintoy akka wraps every user message in object called Envelope, which contains message Sender - but even this is something we would like to get rid of eventually.
If you need an envelope for the message, you can simply create your own and send your message in it
Adam Friedman
@tintoy
Feb 02 2016 11:14
Yeah - the problem with user-space solutions is that, even if it does work, it'll only tell half the story (since messages such as Status and Success don't have anywhere to stick stuff like that unless you subclass them) :)
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:15
what status/success messages are you talking about?
Adam Friedman
@tintoy
Feb 02 2016 11:15
@Horusiath out of curiosity, what will you replace envelopes with?
Ah, I mean Akka.Actor.ActorBase.Status.Success and Failire
Failure
Those are used by a fair number of built-in facilities including Ask - do I have that right?
In the end I can cobble something together that'll probably do 70% of what we need
But I'll keep thinking about it because I think this sort of thing would be helpful in many cases
Eapecially with actor systems whose topology is only known at runtime
For those, diagnostics is painful - was with JVM Akka, too
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:19
with nothing - we want to get rid of them, as the Sender in many cases is not necessary and introduces burden of additional message size over the wire + allocation. Also with sender as default you'll never know if you're supposed to send a reply or not
Adam Friedman
@tintoy
Feb 02 2016 11:19
Interesting - so sender will disappear and message would need to contain a reply-to?
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:20
you can replace status success/failure with your own messages
yes
Adam Friedman
@tintoy
Feb 02 2016 11:20
Hmm
I think there's a bit of a problem with this approach - Akka framework consumers don't always control every message type they have to interact with
So in order to add my own activity Id (just as an example) I'd need my own version of pretty much every message type I want to use
I guess as long as no framework designers seal their message types it could work
But it does feel a little dodgy...
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:23

I'd need my own version of pretty much every message type I want to use

Why not a single one?

Adam Friedman
@tintoy
Feb 02 2016 11:23
@Horusiath - sorry, I don't understand?
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:24
maybe provide some example when you see potential problem?
Adam Friedman
@tintoy
Feb 02 2016 11:24
Let's say I want to use Akka HTTP and some library for connecting Akka to azure service bus
They have their own message types (e.g. SendMessage[T])
So, if I am trying to pass additional information around
(let's assume for example that service bus library logs an ETW transfer when you send s
a message)
With some jiggery-pokery, I can sub-class their wrapper messages to add extra properties
But that's a lot of bloilerplate
This sort of thing makes sense in Scala whee you have a form of multiple inheritance
But not in the CLR
Mind you, it's still tricky because I also don't control those libraries' implementations
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:28
can't you create i.e. WithProperties<T> message and use it to encapsulate your custom message?
Adam Friedman
@tintoy
Feb 02 2016 11:29
To my mind, ETW is something built in and low-level enough that most important libraries (especially Comms ones at boundaries) tend to emit them
Sure I can
But the actor I'm sending it to would have to be willing to accept a different message type
Or I'd have to stick some sort of facade actor in front of it
which is just passing the buck :)
I already have a mechanism that works for us but only very narrowly
I'm creating a sub-class of BusLogging
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:31
tbh. I've never had a problem, you've mentioned
Adam Friedman
@tintoy
Feb 02 2016 11:31
overrides log methods to create
subtypes of normal log events
And some loggers understand enhanced log event format (additional "ambient" data)
@Horusiath depends on your use case I guess
I work for a cloud provider - lots of SaaS and IaaS stuff
Our systems are fairly distributed and have a fair number of moving parts.
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:35
@tintoy one of the akka's mantra, Typesafe is repeating all the time is that Akka is toolkit not a framework. It's not mentioned to solve every case (it's impossible and introduces additional cost for each case not used) but instead gives you tools so you can solve your particular case
Adam Friedman
@tintoy
Feb 02 2016 11:35
I've only recently started moving some of our stuff to Akka because it's a lovely model for some of our more complex scenarios (e.g. Provisioning engine that allows tuning of resources per customer)
hmm
I get where you're coming from and I respect that.
I'll see what I can do about
making our solution public once it's all up and running
If anyone else finds that useful then great
either way, I still have to get it working on our end
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 11:37
it's always easier to talk about some specific problems in cases like that
Adam Friedman
@tintoy
Feb 02 2016 11:37
Yeah - hence the activity Id thing
It's OK - I can see you guys have good focus and I don't want to distract from that.
I'll get back to you when we have something concrete to show and discuss. That'll be after our next release so for now I'll close the issue.
Zetanova
@Zetanova
Feb 02 2016 11:51
@Horusiath Imagine an actor system is running with some actors that trace the most processes over ILogger to the console. If one client is telling one message for an interaction, it will result in 5-7 log entries. Now if 3 clients making this interaction at the same time, how to get only the log-messages for the second client?
John Nicholas
@MrTortoise
Feb 02 2016 11:53
isnt this a discussion about commands vs events and tracking between them?
Zetanova
@Zetanova
Feb 02 2016 11:54
not only
its tracking the logical call context for telemetry and error handling
John Nicholas
@MrTortoise
Feb 02 2016 11:55
i kind of meant that as an analogy. We have a very similar situation where we are sending results of an internal process to multiple clients - but each client is only really interested in success/failures of their changes to the result
we use somethign similar to an activity id to track
but also considering how that gets broekn into events helped a ton ... but the point is when you get into these processes you want to go back to the origional suggestion and ask are you really logging is the sense of Context.GetLogger()? i dont think so.
Zetanova
@Zetanova
Feb 02 2016 12:03
yes, with the activityId in the message this behaivior of a logical callcontext can be achieved. But it will break instantly when the operation needs to talk to not owned actors / components
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 12:07
@Zetanova I understand the context. I'was using CorrelationId to keep track on logical context by myself.

But it will break instantly when the operation needs to talk to not owned actors / components

This need a concrete example.

Zetanova
@Zetanova
Feb 02 2016 12:09
Journal
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 12:10
you can keep corellation id in event
Zetanova
@Zetanova
Feb 02 2016 12:10
yes in the event, but not in the operation
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 12:10
what do you mean?
Zetanova
@Zetanova
Feb 02 2016 12:11
ReadHighestSequenceNrSuccess
ReadHighestSequenceNrFailure
SaveSnapshotFailure
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 12:12
these are internal messages
Zetanova
@Zetanova
Feb 02 2016 12:12
yes
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 12:14
so?
Zetanova
@Zetanova
Feb 02 2016 12:14
the CorrelationId / ActivityId would be lost
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 12:24
Sorry for mistakes in type signatures - my VS gone mad. This one is simplified, but you can get the idea:
public class TrackingPersistentActor : PersistentActor
{
    private readonly List<Guid> correlationIds = new List<Guid>();

    public override bool AroundReceive(object message, Receive receive)
    {
        var c = message as ICorrelated;
        if (c != null) correlationIds.Add(c.CorrelationId);

        try
        {
            base.AroundReceive(message, receive);
        } 
        catch(Exception e) 
        {
            ExceptionDispatchInfo.Capture(new CorrelatedException(e, correlationIds)).Throw();
        }
    }  

    public override void ReplaySuccess()
    {
        correlationIds.Clear();
    }
}
voltcode
@voltcode
Feb 02 2016 12:34
Does anyone know of a way to find all messages BY a particular user on gitter? This chat is such a goldmine for a akka.net newbie like me, I'm now trying to find an old tip Aaron gave a couple of weeks ago. I remember it was something about config bootstrapper, search in gitter doesn't find it, moreover it doesn't even show entries in chronological order. Does anyone have similar experiences regarding gitter usability ? From "evangelical" point of view, it would be useful if knowledge accumulated here was easier to discover by new akka.net users.
Zetanova
@Zetanova
Feb 02 2016 12:40
@Horusiath if multiple clients talk to this actor it will store more then one correlationId and if it needs a result of an other/nested actor and this actor responses with a message without ICorrelated, how to respond to the sender with the correct colletionId or just log the result with the correct correlationId ?
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 12:48

if multiple clients talk to this actor it will store more then one correlationId

Yes, because while recovering, it might received messages from more than one actor.

if it needs a result of an other/nested actor and this actor responses

This is highly unlike while recovering, don't you think? ;)

respond to the sender with the correct colletionId or just log the result with the correct correlationId

This case is about logging/monitoring - as actor fails, it usually doesn't respond to senders, but calls a supervisor instead. If you really need to reply to all message senders - which sounds more like very bad design decision anyway - you can store sender along with CorrelationId on the list.

Zetanova
@Zetanova
Feb 02 2016 13:03
@Horusiath maybe to none sender at all. To use it in the logger or pass it to an external service for sure. what i want to make clear is that when "ICorrelated" is not possible to implent, then to correlate the correlateId will be very hard. Event if the sender is saved with the correlationId, the sender could push multiple messages with different correlationId's into the actor.
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 13:12
@Zetanova the problem I see, is that your statement is very broad and can be used for basically any feature X.
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 13:19
and sorry, if that sounded offensive, I didn't mean that
John Nicholas
@MrTortoise
Feb 02 2016 13:46
@voltcode couldnt find any info about it its a good idea though. I cant see anything in the apis that directly allow you to query by user either.
@voltcode id suggest that maybe a good alternate entry point would be via issues?
morganski
@morganski
Feb 02 2016 14:26
Hi guys - looking for some guidance on hosting Akka.Net in Azure. I'm considering one of two approaches and wondered if anyone had some input. The first, and most traditional, is to simply create a Virtual Machine, install a Windows Service on it that we've written and then connect to that service using Akka.Remote from our web app. The other option would be to create the same executable, but deploy it as an Azure WebJob - most likely in a separate Azure Web App of its own, so I end up again with a singleton service that I can connect to. Can any of you who have done this already give me some guidance as to which option you took (and maybe there was another!), and any pitfalls you came across. Thanks in advance!
Aaron Stannard
@Aaronontheweb
Feb 02 2016 14:42
@morganski I've done the former route before and had great success with it, but it was on AWS
same principle applies though
I've never personally used Azure WebJobs so I'm not qualified to comment on those :p
@Horusiath did you see the comments on #1676 about downgrading the version of System.Collections.Immutable we're using?
voltcode
@voltcode
Feb 02 2016 14:51
@Aaronontheweb @Horusiath @rogeralsing is MrTortoise's advice about building a "knowledgebase" via issues OK with you ? Should questions be posted via issues, risking that RTFM was sometimes the answer?
kind of "ask the expert" tag ?
Aaron Stannard
@Aaronontheweb
Feb 02 2016 14:54
@voltcode StackOverflow is probably the better place to do that since that's more likely to be found by other users in the future
however, that's only really applicable to "how do I do X?" questions
the issues should really be reserved for reporting bugs, proposing design changes, etc
does that make sense?
voltcode
@voltcode
Feb 02 2016 15:08
yes it does, I wasnt sure if SO was on core team's radar
at least that was my doubt after comparing knowledge to time ratio on SO and Gitter ;)
John Nicholas
@MrTortoise
Feb 02 2016 15:10
@voltcode you will find it hard to find an akka.net question without a good answer on there
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 15:30
@Aaronontheweb I can do that, once I'll finally find some spare time :) (and that won't be easy)
Aaron Stannard
@Aaronontheweb
Feb 02 2016 15:30
I'm sure another contributor could do it easy - just wanted to know if you approve of the idea
I'd even propose doing an Akka.NET 1.0.7 release where the primary goal was getting that downgrade out ther
there*
since that breaks our commitment to .NET 4.5 due to some insanity on the part of the Microsoft BCL team
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 15:31
yes, it sound good for me
Aaron Stannard
@Aaronontheweb
Feb 02 2016 15:31
ok, sounds good - I'll create an issue and mark it as up for grabs
good work item for a first-time contributor to tackle :p
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 15:32
the more I'm sitting on .NET stack, the less sane it seems to be
Aaron Stannard
@Aaronontheweb
Feb 02 2016 15:32
hehe
I have a working prototype of an actor that dynamically loads code
wraps an AppDomain and loads a serialized DLL from memory - pretty neat stuff
this one is very application-specific but I wonder if there's a more generalized way of doing this
I like this concept much better than the idea of dynamically deploying entire actors wholesale via DLL - this is much cleaner from a message-handling perspective
transparently works like a behavior switch
only issue is that it will become very memory-intensive if AppDomains are expensive, which I think they are
and if there's a lot of deep-copying of the DLL
so it's probably not something you could deploy millions of instances of per machine
voltcode
@voltcode
Feb 02 2016 15:38
that's quite erlang-ish @Aaronontheweb , next hot code reloading/upgrading ;)
on the road to 99.999999% uptime for Akka.net deployments
Aaron Stannard
@Aaronontheweb
Feb 02 2016 15:38
@voltcode I've had some thoughts on how to do that
involves fun stuff like AppDomain partitioning with named pipes between a dedicated "deployer" group of actors and then the other dynamically run bits of code
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 15:39
@Aaronontheweb you should take a look into Vagabond - they have some tricks around that
Aaron Stannard
@Aaronontheweb
Feb 02 2016 15:40
sounds good - I'll definitely take a look at it
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 15:40
also talk with Eirik Tsarpalis (Roger already did), who is major person behind this hot-load design
Aaron Stannard
@Aaronontheweb
Feb 02 2016 15:44
he's someone I've wanted to meet anyways, so yeah that sounds like a good idea
for now I've got what I need covered
but yeah, for doing a generalized hotload system I'd want to use something like Vagabond
hotloading could potentially solve a huge pain in the ass problem for cluster users
from a devops perspective
Michel van den Berg
@promontis
Feb 02 2016 15:49
@morganski I would pick Azure VM
Marc Piechura
@marcpiechura
Feb 02 2016 15:54
I have something else in mind, what I want to build is a etl service based on Akka-streams were you can write your transformations, filters ... In scriptcs or maybe fsharp which then get compiled and replaced at runtime. Would love to replace our current xslt solution
So if there would be an actor that dynamically loads code that would be super useful ;-)
Arjen Smits
@Danthar
Feb 02 2016 15:56
@Silv3rcircl3 I think the use case @Aaronontheweb has in mind is something different.
What you are describing could be done fairly easy right now.
To completely load an entire app domain to parse some scriptcs or fsharp file, seems like overkill to me :P
Marc Piechura
@marcpiechura
Feb 02 2016 15:59
Yeah I know it's more about deploying on a new node.
Arjen Smits
@Danthar
Feb 02 2016 16:00
But i get your use-case though. Got several ETL processes myself. Akka-streams would allow me to throw away alot of boilerplate code... should i ever get around to rewriting those things :P
Marc Piechura
@marcpiechura
Feb 02 2016 16:01
Yeah not really ;-) what I want is that you can put your Akka-stream blocks together and build workflows where you can modify some parts with scriptcs. And all that on customer side and not manually in vs ;)
Yeah exactly :)
Arjen Smits
@Danthar
Feb 02 2016 16:03
Sounds like something the workflow designer from Windows Workflow Foundation would solve nicely
Marc Piechura
@marcpiechura
Feb 02 2016 16:04
Maybe, haven't thought about the details, it's just something in my head because I need it and didn't find a solution that worked for me
Arjen Smits
@Danthar
Feb 02 2016 16:04
i think ETL is the one problem space that has the highest NIH ratio
there are so many solutions. its not even funny, and even then somehow most of the time you end up writing your own :P
Marc Piechura
@marcpiechura
Feb 02 2016 16:07
Yep so maybe someday there will be another one or I give up and stick with the current solution ;-)
Arjen Smits
@Danthar
Feb 02 2016 16:08
Its never wasted time though :) Even if it doesn't pan out, its always a good learning experience.
Marc Piechura
@marcpiechura
Feb 02 2016 16:12
Yep and since that was the reason for me to work on Akka-streams, it already paI'd out :)
*paid
Alex Achinfiev
@aachinfiev
Feb 02 2016 16:44
Hi folks. I have a question regarding Akka.Persistence.Cassandra. I ran into an issue where I get cassandra-snapshot-store actor name is not unique when I try to create several persistence actors at the same time . E.g. manager, product, subscriber are all persistence actors and are modeled as AggregateRoots and I do a tell to each AggregateCoordinator which spawns a new instance of the root based on persistenceId. As soon as I try to start them all at the same time the C* extension gets initialized multiple times and I get the failure. Is the expected usage to initialize one persistence extension during startup? I tried this on 1.0.5 and 1.0.6 version. Thank you.
Aaron Stannard
@Aaronontheweb
Feb 02 2016 16:45
@aachinfiev can you submit a PR upgrading the Akka.Persistence dependency inside Akka.Persistence.Cassandra to depend on the latest version of Akka.Persistence? It has not been updated for 1.0.6 and I believe that issue was fixed in that release, right @Zetanova @Horusiath ?
Alex Achinfiev
@aachinfiev
Feb 02 2016 16:51
@Aaronontheweb Where do you manage that dependency?
nickgodsland
@nickgodsland
Feb 02 2016 17:13
Hello Everybody. Does anybody know if you can retrieve the port that an ActorSystem has chosen to use? I want to pass this on to a client process. I don't want to use a fixed port so that I can run my integration tests concurrently on the same machine.
Alex Achinfiev
@aachinfiev
Feb 02 2016 17:35
@Aaronontheweb I created a PR with bump to 1.0.6 version. Please let me know if it looks right. Thanks.
voltcode
@voltcode
Feb 02 2016 17:41
Re recent tracing discussion http://opentracing.io
Christian Sparre
@christiansparre
Feb 02 2016 18:05
Anyone have experience with EventStore (geteventstore.com)?, we currently use our own simple MongoDB based one, that works ok. But we are looking at other options.
Chris Martin
@trbngr
Feb 02 2016 18:06
@christiansparre what do you want to know about EventStore? It's a very solid project. I don't think our single node has been down in over a year.
voltcode
@voltcode
Feb 02 2016 18:08
What's your volume of data/ write rate? @trbngr
Christian Sparre
@christiansparre
Feb 02 2016 18:09
I'm just like 10 minutes into seriously reading about it. Have looked at it for a couple of years without really taking the time to get into it.
Chris Martin
@trbngr
Feb 02 2016 18:09
I've never measured. It's very busy though. Sorry. That's all I got ;)
Christian Sparre
@christiansparre
Feb 02 2016 18:09
Was just wondering if anyone in here used it and if they were happy with it :)
Chris Martin
@trbngr
Feb 02 2016 18:10
Aside from it being a pain to cluster it in Azure (they've since solved the issues), I've had zero issues with it.
That said, we're moving to Cassandra for our next version. Less moving parts.
not because of anything with EventStore though. I still think it's super reliable
voltcode
@voltcode
Feb 02 2016 18:13
What do you mean?
Chris Martin
@trbngr
Feb 02 2016 18:13
which part?
voltcode
@voltcode
Feb 02 2016 18:15
Moving part's
Soz auto correction
Chris Martin
@trbngr
Feb 02 2016 18:16
Ohhh. that...
I mean less moving parts for our application. Cassandra fits our needs for darn near everything.
Not using ES is one less dependency / server to run
voltcode
@voltcode
Feb 02 2016 18:17
Oh so you already use Cassandra for sth else?
Chris Martin
@trbngr
Feb 02 2016 18:17
yeah. And with Akka.Persistence, we get cassandra support out of the box.
going with it ;)
Christian Sparre
@christiansparre
Feb 02 2016 18:21
I think EventStore looks nice, I'm not sure from a day to day development standpoint though. With MongoDB on the dev's machine it very easy to clear events during development if something was not quite right. With EventStore it's a soft delete or files that need to be deleted etc.
Erlend Wiig
@Erlord
Feb 02 2016 18:37
hey, I've started looking into using the akka-monitoring project with statsd/graphite. The wiring up is fine and I get the basic out-of-the-box stuff, but I'm struggling with custom stuff. I'm using F# and all my actors are functions created with the spawn function. The examples use the context object inherited from Actorbase, but that is not available to me. I can use the ActorMonitoringExtension class directly and pass it around to my functions, but that does not seem so elegant. Any tips?
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 18:51
@Erlord context object is not inherited from ActorBase, naming can be missleading. I think, that Monitoring extension was not created in F#-friendly way. Probably the best option would be to abstract monitoring through function composition
Erlend Wiig
@Erlord
Feb 02 2016 19:03
@Horusiath I have access to the mailbox.context which is of type IActorContext, but none of the monitoring methods are there
@Horusiath agree with composition though, in the same vain as logging is already implemented in the F# api
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 19:06
yes, because those monitoring exposes them as extension methods.
Bob Reselman
@reselbob
Feb 02 2016 19:10
I have a question about best practices for throwing exceptions and using Supervision Strategy. Anybody care to field?
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 19:12
@reselbob just ask. Sure there will be somebody eager to help :)
Bob Reselman
@reselbob
Feb 02 2016 19:12
In terms in business rule violation (exception) is it best to handle such error within my message semantics. For example, have a business rule violation message that I pass about.
And not throw an exception
And throw exceptions only for system level stuff, that is beyond the control of the given application?
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 19:15
yes - failure messages for business rule violations, exceptions for unexpected errors
Bob Reselman
@reselbob
Feb 02 2016 19:16
Great minds think alike, or near alike
thank you
Bartosz Sypytkowski
@Horusiath
Feb 02 2016 19:16
np :)
Troy
@bbqchickenrobot
Feb 02 2016 21:03
you guys are cool.
and so is suave and helios. Fun stuff to build a system!