Sorry, there can only be one zombo.com
HN user
slevcom
It's a reasonable suggestion about the naming of demands and supplies. We landed on those names because they had some of the correct connotations, and it was easy to be clear with each other what we were talking about. A "Demand" is a very specific thing when using Behavior Graph. "Dependency" is a common term that means half a dozen things in a program at any given time. "Supplies" is just a reasonable opposite to "Demands".
That being said, we do often consider renaming them and other parts to feel more mainstream reactive. But honestly, I secretly suspect that fiddling with names won't make a difference to anyone.
I do also agree that there is some appeal to visual programming paradigms. It's pretty easy to look at the examples you linked to and get some quick sense of understanding. But those typically work well when there are a handful of nodes and edges. The software we maintain at work can have 1000's of nodes at runtime with more than 10000 edges. There's no visual representation that won't look like a total mess. Whatever their faults, text based programming languages are the only approach that have stood up at scale so far.
So our library is just a normal programming library. You can use standard javascript/swift/kotlin to write it.
Thanks for your feedback! :)
I think you are absolutely correct. In this simple example, it's not easier to comprehend. Especially for someone who already understands how composing software out of function calls works.
My goal with that example was to point out how there are implicit dependencies between validateFields() and networkLogin() and updateUI(). They need to be called in the correct order to make the program work. Our library makes those dependencies explicit and calls things for you. It's not a big deal when we have a 3 function program. But when we have dozens or hundreds of interdependent instances of state, those implicit dependencies become a real struggle to navigate.
Now we're convinced our library works well. We use it every day. But it's also very reasonable for you to be skeptical. As you say, there's cognitive load. As a potential user, you would need to spend your time to read the docs, try a few out ideas, and understand the tradeoffs. That's a lot of work.
I'm glad you took a look at the project, though. The fact that we've failed to make a case for it is certainly on us. Which gets back to my original point. I don't know how to sell a solution to complexity.
The author does a lovely job of covering a number of the interesting ideas in this space. But reactive programming is such a tough sell. I know from experience.
I maintain a reactive, state management library that overlaps many of the same ideas discussed in this blog post. https://github.com/yahoo/bgjs
There are two things I know to be true:
1. Our library does an amazing job of addressing the difficulties that come with complex, interdependent state in interactive software. We use it extensively and daily. I'm absolutely convinced it would be useful for many people.
2. We have completely failed to convince others to even try it, despite a decent amount of effort.
Giving someone a quick "here's your problem and this is how it solves it" for reactive programming still eludes me. The challenge in selling this style of programming is that it addresses complexity. How do you quickly show someone that? Give them a simple example and they will reasonably wonder why not just do it the easy way they already understand. Give them a complex example and you've lost them.
I've read plenty of reactive blog posts and reactive library documentation sets and they all struggle with communicating the benefits.
I regret taking antibiotics for years in high school as a treatment for acne. We just did what the doctor recommended without giving it much thought. My gut has been a mess ever since and it really impacted my quality of life during the “healthiest” years of my life.
I use beeminder
Hi. Thanks for the reply. (Pardon my drawn out response. I can nerd out on this all day.)
I'm not aware of sub-state-machines as a standard concept. There are State Charts which are a superset of state machines and have their own notions of composition (XState is an implementation).
A sub-state-machine may feel like an intuitive concept but it does lead to a number of design decisions and related tradeoffs.
For example:
- We can have "State Machine A" influences "State Machine B". In order to make that happen there needs to be code in A that notifies B. Perhaps we do this with an explicit function call B. That's not too bad, but we are introducing a tight coupling between them.
- We can also have "State Machine A" influences a number of downstream state machines. Now we need many function calls or instead implement some observable or event protocol. That's also not too bad but its certainly not out of the box.
- Or we can have "State Machine A" and "State Machine B" both influence "State Machine C". In order to avoid updating C twice (glitches) we need some coordinating code that understand the dependency graph. I know from experience that is definitely not easy or obvious.
- And additionally we can address what it means for state machines to come and go over time which changes the dependency graph.
Behavior Graph is our implementation of those ideas in a slightly more general sense (we aren't restricted to _finite_ state machines and we have a generalized notion of events and observers).
I know talking about things this abstractly can make people's eye's glaze over so I won't belabor it too much, but that's what I mean by "don't compose easily out of the box".
State machines are cool but they don't compose well out of the box. Behavior Graph let's you build a composable network of them so they become a practical software architecture. (Disclaimer, I am a coauthor) https://github.com/yahoo/bgjs
This is well said.
I always suspect that many people who have a hard time relating to TDD already have experience writing these class & method oriented tests. So they understandably struggle with trying to figure out how to write them before writing the code.
Thinking about tests in terms of product features is how it clicked for me.
That being said, as another poster above mentioned, using TDD for unstable or exploratory features is often unproductive. But that’s because tests for uncertain features are often unproductive, regardless if you wrote them before or after.
I once spent months trying to invent a new product using TDD. I was constantly deleting tests because I was constantly changing features. Even worse, I found myself resisting changing features that needed changing because I was attached to the work I had done to test them. I eventually gave up.
I still use TDD all the time, but not when I’m exploring new ideas.
Here it is on YouTube https://youtu.be/oa0qq75i9oc
Number of times I've regretted quitting a job: 0 Number of times I've heard of anyone regretting quitting a job: 0
ie its never a bad time
That being said, I interview engineers at a larger tech company. I view it as a negative for a candidate to have multiple short term stints (less than a year).
Total man crush on Elon here. He's like a science fiction author except he makes the spaceships for reals instead of writing about them. Meanwhile a large chunk of the entrepreneurs continue to optimize ad delivery and photo sharing (myself included), just sayin.
I'm liking Mozilla more and more these days. I'm seriously considering thinking about trying out this wacky browser of theirs. ;)
cool concept
Most apps, particularly games are limited to a few dollars, which requires them to basically be hits. Reaching out to tons of people to make a hit, is difficult and expensive.
Giving a game away for free seems like an easy way to gain some marketshare. In practice it isn't enough. In other hit based businesses, companies use multi-faceted marketing strategies to get the word out, each one a lead bullet.
Unfortunately for app developers, measuring marketing efforts through the iTunes funnel is almost impossible. Where do they come from? What's working? Nobody knows. Its difficult for marketing pros, let alone a pair of developers who spend all their time developing and not marketing.
They just need to keep at it. Being an indie developer requires more than just developing. Marketing is part of the job. If they are determined enough they will get there. Its just tough to put 2 years into a project, thinking you are finished, and only realize you're at the halfway point.
Someone who isn't me once ate some funny mushrooms and Van Gogh's paintings appeared to him as though they were made with magic pixie paint that actively ebbed and flowed right before his eyes. That was the day he saw Van Gogh's genius in a new light. Does that mean Van Gogh only painted after eating similar funny mushrooms?
I'd like to be able to browse random people easier. A big "Show me another!" button would be cool. Then I could just sit there and while away the hours reading random thoughts from random people.
I smell a troll.
I'm happy to go on record here and the unerasable archives of internet history, risking my own reputation and that of my entire line of descendants, in saying that I am convinced this particular dog and pony show is a hoax.
Was fffallback.com taken already?
Nice site.
A few years ago I got decent at a similar method so I could memorize a list of 20 items pretty quick. I thought I was the cat's pajamas for awhile until it dawned on me that I had never used it once outside showing off the trick. I've since lost the skill from non-use. Not to troll against the post or the poster, just my personal experience data point. But hey, I love seeing and learning new party tricks, so don't let me discourage anyone from trying out interesting things.
I still have that recurring dream that I've entirely forgotten about some college class, panicking, certain to fail and not graduate. Then I wake up to realize, "I'm not in school. Awesome!"
In the same vein, rich people are collectively waking up from this recession to realize, "Ha Ha! I'm still so loaded even my kids will never figure out how to spend it all. Awesome!"
Those people have to put their money somewhere. Wall Street is a decidedly less interesting choice these days.
Programming Perl
Larry Wall is a mad genius, I don't care if anyone says otherwise. Plus its frequently laugh out loud funny.
Probably along the lines of "...as soon as I open the app it crashes..."
Most likely due to the memory manager issues mentioned above. I've seen some quality apps get massive numbers of one star reviews for this type of problem.
The star rating system really irks me for this reason. Something that could be fixed to perfect condition in less than 24hours permanently carries the baggage beyond its relevance.
There is no second place in the current political system. That's where I see the problem. The best ideas in the world don't mean squat if you don't get elected. So if I really believed that I could make a difference I would have to beg, borrow, steal, promise, and backroom deal my way to the finish line or the other guy will. Highlander: There can be only one.
If I had a magic political wand, I'd make it so the top two people win with everyone getting to vote for two different people-- double sized districts represented by two people and the Senator races are for both at once. Make primaries be all party inclusive with the top four moving on to battle it out for the two winning spots.
More political hubub at once would compel voters to pay more attention. Extremists on both sides would look ugly in comparison to the sensible ones. And third party people with a mix of ideas might actually have a shot of getting a word in because voting for one doesn't mean risking a complete loss to your party of choice.
Now where did I put that magic political wand again?