Hacker Newsnew | past | comments | ask | show | jobs | submit | skotzko's commentslogin

Was gonna ask the same — had a really good experience w/ IceComm when I tested it out a few weeks ago


I'm a contributor on the Akka.NET project (http://getakka.net) and one of the things we made that has really helped people understand the framework was a Bootcamp (https://github.com/petabridge/akka-bootcamp).

Sure, there is a lot of code in the Bootcamp, but most of it is clearly explaining concepts and helping developers understand what is really going on, with no jargon.

Anything you can do like that is a MASSIVE help to an OSS project.


Great question, thanks for asking it. We'll also be reworking the docs on the way to 1.0 to make a lot of this much clearer.

The short answer is that these things enable various nice features of the framework, like automatically scaling out your actors, safely managing actor restarts, and managing message delivery for you.

Just to cover a few of those briefly:

What is an ActorRef?

An ActorRef is a reference or handle to an actor. The purpose of an ActorRef is to support sending messages to an actor through the ActorSystem. You never talk directly to an actor—you send messages to its ActorRef and the ActorSystem takes care of delivering those messages for you.

What are Props?

Think of Props as a recipe for making an actor. Technically, Props is a configuration class that encapsulates all the information needed to make an instance of a given type of actor.

One of the reasons Props encapsulate the entire recipe for making an actor (including deployment info) is so the system can manage restarts/lifecycle safely. It also can be serialized so that you can remotely deploy actors to other machines in a cluster -- BUT, this is invisible to you (location transparency, AKA you don't care if your actors are all in one process or on 10 machines spread around the planet).

What is an ActorPath?

Actor path == actor position in hierarchy.

Actors form intrinsic supervision hierarchies. This means there are "top level" actors, which essentially report directly to the ActorSystem itself, and there are "child" actors, which report to other actors.

Every actor in this hierarchy has an address. To send a message from one actor to another, you just have to know it's address (AKA its "ActorPath"). This is what a full actor address looks like: akka.tcp://MyActorSystem@localhost:9001/user/a1/b2.

What is ActorSelection?

This is using the actor path to get an ActorRef (handle to an actor). So instead of getting a handle to an actor by creating it, you're "looking up" the handle by its address. Kind of like looking up someone on Skype by their username.

####

You may find this post interesting to go in depth on actor hierarchies / paths / supervision: http://petabridge.com/blog/how-actors-recover-from-failure-h...

Also, if you're interested in learning Akka.NET, we're launching a free, self-paced bootcamp this Saturday. Details are here: http://learnakka.net

Hope this helps.


I should elaborate on ActorSelection: while this is how you look up an actor reference, it's not inherently a 1-1 lookup to a single actor.

Technically, ActorSelection does not point to a specific ActorRef, it points to every ActorRef that matches the expression given. Wildcards are supported in this expression. So it's an expression that selects 0+ actors

ActorSelection will also match two different ActorRefs with the same name if the first one dies and is replaced by another (not restarted, in which case it would be the same ActorRef).


Thank you explaining! I understand it better now. This comment would make a great doc entry.

It looks like ActorRef is equivalent to Erlang's process ID's (PIDs). As there a message is sent to an actor's PID.

Props sound very powerful. I like the idea. With Erlang one can do it but with extra work. With live code-reloading and access to the module loader.

Do Actor hierarchies imply a global registration mechanism. If it does, wondering what kind of consistency/availability trade-offs it makes. Erlang's clusters do not handle network partitions too well sometimes and there are few custom registration/leader-election libraries for it. (locks, gproc, pg2)


> Do Actor hierarchies imply a global registration mechanism?

No, all registration is done locally underneath the parent actor - i.e. if one parent creates three children, the only place where that state is registered is the parent itself. The root actor on each node can quickly figure out by traversing the tree whether or not a child at a given path exists or not.

The only exception to this convention are remote-deployed actors - if ActorSystem A deploys an actor remotely onto ActorSystem B, the RemoteDaemon (a system-level actor) keeps a record of who has actors deployed onto each other. That way if ActorSystem B dies (crash, network goes down, etc...) ActorSystem A can notify all of the local actors who depended on remote-deployed actors that those actors are effectively dead.


I didn't see an announcement but I've been waiting for the MX Clears to be available for like 3 months. Figured HN would want to know.


(author here) A) Thanks for sharing this @mdsandler. B) I added a lot of resource links and downloads in the FAQ at the end. If I've missed something good, let me know and I'll add it.


2 main reasons why I thought it was necessary:

1) It's not clear at all by reading minified code that this is what's going on -- I could only really see it when I got my hands on unminified code. Since not covered in the docs, it's just hard to know.

2) It has tightly coupled queueing and loading of the library, which I don't want: the snippet links instantiation / fetching of the library with the queueing function and wraps them all together so they can't be separated in the overall page load sequence. Combined with the fact that Mixpanel does not use as simple of a data structure as something like GA (simple array), I wanted a way to separate queueing (what my wrapper does) from later instantiation. Granted, the Mixpanel snippet is async but at the time of writing this, we didn't want to source our external JS in the head of our pages if at all possible. So even with the built in async / queueing structure, the Mixpanel snippet still doesn't fully meet what we're looking for (separation of queuing / instantiation).


This is my first open-source project. I was frustrated that Mixpanel did not natively include a queueing system for events (a la Google Analytics, KISSmetrics, etc) so I built one. Hope others find it useful and welcome any feedback.


You should probably use the magic arguments array in your function to avoid the ugly array you are using as the second argument.

    _meq.push("track",["event_name",{property_name: "value"}])
becomes

    _meq.push("track","event_name",{property_name: "value"})
By changing the top of the mixpanel function to:

    mixpanel: function() { 
        var mixPanelArgs = Array.prototype.slice.call( arguments );
        var functionName = mixPanelArgs.shift();


Ah, great point. Missed that. Updated and going to push update shortly. Thank you.

[EDIT] Pushed. Great catch, thanks again.


A poetic manifesto. Well done.


Although you have browser support covered on a doc-by-doc basis, I would find it useful to have a rollup page by browser of gotchas. e.g. all the common JS gotchas for IE8 (e.g. no go on client.innerWidth), IE9 not supported opacity, etc.

Here's a ghetto example of a reference file I started after recent project that drove me nuts which would give you the sense of what I mean: https://docs.google.com/spreadsheet/ccc?key=0ApBq5nqLSn9MdER...


Good question that most people face and are afraid to ask :)

Here are some resources to check out that have covered this well:

* Rand wrote a great post (http://moz.com/rand/understanding-stock-options-at-startups-...)

* Solid overview: http://www.danshapiro.com/blog/2010/11/how-much-are-startup-...

* This is a good book that doesn't get enough love (http://www.amazon.com/Engineers-Silicon-Valley-Startups-eboo...)

* Good high-level notes about equity in startups (part of an incredible series, read it all if you can - http://blakemasters.com/post/21742864570/peter-thiels-cs183-...)

* Venture Hacks on the "Option Pool Shuffle": http://venturehacks.com/articles/option-pool-shuffle


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: