Goliath v. David, AAC style - <AUTHOR> http://niederfamily.blogspot.com/2012/03/goliath-v-david-aac-style.html

<comment><USER2> Looking at the app's video, it appears to be a directed soundboard with a tree structure, parts of speech, and queueing of words:

<http://www.youtube.com/watch?v=VpafqM1kiNo>

Even if the app got sued out of existence, implementing the same functionality would be fairly trivial.

I'm assuming that the unique, patentable portions are a lot of "when used in this way" clauses, and the speech research to come up with the contents of the soundboards.

The end run around this would be an generic soundboard app with a bunch of silly noises but with the ability to load other soundboards and rulesets in a set data format that would implement the functionality.

</comment><comment><USER3> Yes, because personal anecdotes are exactly what was missing from a reasonable and unbiased re-evaluation of patent rights on a planet-wide scale.

Nothing against you or your daughter (hey, make sure you have the ipa file, IOS app cracking instructions, a copy of AppSync, and a jailbreakable device or three - and you're set for YEARS) but this isn't the kind of discourse that is likely to get anyone's ball rolling in any direction it wasn't already - touching though it is.

Best of luck to you and your family.

<comment><USER4> You may not like it, but to most people a story with a cute kid in it is worth a thousand reports produced by a team of legal and technical experts. We here may not like the appeal to anecdote and emotion, but these things would not be common logical fallacies if they weren't effective.

So this might be just the story that will stick in people's craw about what patent reform could mean to them.

<comment><USER5> On a related note: One of the least popular things about patents is the ability to patent something relatively obvious and then sit on that "invention" for years waiting for someone else to "copy" it. Patent trolls have taken this to an art form.

As a way to fight patent trolls who produce nothing, it's been suggested that a requirement be added to attempt to actually CREATE and MARKET the technology. That you can't just sit on a patent and wait for someone else to stumble on it by accident; in fact, if someone else DOES stumble on it by accident, it should be considered de facto evidence that the patent isn't novel.

How is this related to the article? If you DID have the requirement that a patent owner actually produce a product, then you could add on the additional restriction that the patent would only apply in the market that the patented product is being sold to. If they can but won't sell an iPad version of their product, and they are notified that someone wants to use their patent that way, then (after a reasonable grace period) the patent would lose its ability to prevent competition in that realm.

Remember the Flip video camera? Super cheap video that anyone could use? They were allegedly working on a new version that would allow you to use the camera as an ultra-cheap video conference device. They were bought by Cisco for $590M, and then just before releasing this new product, Cisco shut them down. The Wikipedia article [1] suggests that maybe the purchase was to acquire patents, but since the company was still profitable and they made no move to divest their ownership of Flip, it seems more likely they shut it down rather than allowing the consumer device to compete with their expensive enterprise video conferencing devices.

It's when patents are used to PREVENT a product from existing that they should be null-and-void. That doesn't help "...promote the Progress of Science and useful Arts." [2] IMO, it's only when a patent is used to grant you a temporary monopoly on a product to help you recoup your R&D expenses through sales of the product that it should be valid.

And in the case of an iPad app being able to do the work of a large $9000 piece of hardware -- if they won't produce an app, they should lose patent protection that can be used against someone who CAN produce an app. Protecting their market for $9000 hardware devices shouldn't be done at the expense of "Progress of Science..."; it would be like blacksmiths using a patent portfolio to prevent cars from being manufactured, holding back progress rather than promoting it.

[1] <https://en.wikipedia.org/wiki/Flip_Video>

[2] <https://en.wikipedia.org/wiki/Copyright_Clause>

<comment><USER6> There are a lot of "shoulds" in this comment. I'm no fan of the patent protection racket we have going, but what you lay out would be infinitely worse. All those "shoulds" are decisions that would be made by beurocrats with little real understanding (who really knows whether the $9000 device can really be substituted with an iPad and app?).

Patent reform is tough. The obvious one (no pun intended) is that patents really should be non-obvious. Beyond that, I vacillate between killing them and severely neutering them. I think they could have some value if they protected inventions that were two or more steps ahead of the current technology. Being able to patent the place _everybody_ would put their next foot is inane.

<comment><USER7> i think the simplest and easiest solution to patent reform would be to just scale back the term. 20 years is garbage, i'd say that patents should be granted for a maximum of four years. their purpose is to give innovators a chance to use their invention to build a business, and if you can't build a business in four years you aren't going to. in a fast moving industry like software, the term should be more like 6mo - 1yr.

also, it'd be great to kill licensing of patents. it would turn patents from an IP marketplace to a use-it-or-lose-it incentive for inventors.</comment></comment></comment></comment></comment>


The Xiaomi shock - <AUTHOR> http://www.economist.com/news/business/21645217-chinas-booming-smartphone-market-has-spawned-genuine-innovator-xiaomi-shock

<comment><USER2> What I like about Xiaomi is that, despite their crazy-low prices, they actually put some value in _design_ , both on the industrial side and on the software side.

For example, take the fitness band that another commenter mentioned. Sure, there will are all sorts of similar cheap products (some of which even have OLED screens -- just look up Chinese fitness bands on sites like AliExpress and DX for examples), but the Xiaomi one stands out by being (A) actually kind of nice looking and (B) having software that works well[1]

[1] [https://play.google.com/store/apps/details?id=com.xiaomi.hm....](https://play.google.com/store/apps/details?id=com.xiaomi.hm.health&hl=en)

</comment><comment><USER3> They certainly got the disruptive part down, their pricing is ridiculous. I'm now the owner of a fitness band despite my previous reservations about how useful they actually were, because the Xiaomi MiBand was $17. It's pretty incredible how cheap these guys sell things for.

</comment><comment><USER4> I think this article touches on many good points, but I can't see Xiaomi makes huge gains in America until they distance themselves from the Chinese government.

They are in the same situation as Lenovo. Not many businesses will use their devices because of security reasons.</comment>


Blender green screen VFX of incredible detail – made by a single person - open-source-ux https://twitter.com/DrewCoffman/status/1274743473732632576 <comment><AUTHOR> Very similar one: [https://twitter.com/Mrdodobird/status/1237194284903723014](https://twitter.com/Mrdodobird/status/1237194284903723014)

I also loved his Blender Conference talk about World building: [https://www.youtube.com/watch?v=whPWKecazgM](https://www.youtube.com/watch?v=whPWKecazgM)

Here he talk about how to build very complex environment with very simple shapes/approaches with incredible speed.

</comment><comment><USER2> Clever how they managed to reuse both the light positions and the stairs so the same set could be three different places

</comment><comment><USER3> Been following this guy since seeing a link in another HN comment thread about Blender a couple of weeks ago.

I haven't played with Blender in ages but it definitely makes me want to check out the current version (seems to have come a long way since I last installed it). Doubt I'll end up doing more than tinkering but the price is certainly right.

[https://www.youtube.com/user/mrdodobird/videos](https://www.youtube.com/user/mrdodobird/videos)

</comment><comment><USER4> Thank you; I've been needing a reminder to work blender3d into my NX Realize Shape workflow.

</comment><comment><USER5> Damn nice!</comment>


Reasons to Avoid Using ImmutableJS with Redux - <AUTHOR> https://medium.com/better-programming/3-reasons-to-avoid-using-immutablejs-with-redux-b0109d0123e8 <comment><USER2> I'm a Redux maintainer, and I strongly agree with this post. I've been suggesting that people avoid using Immutable.js for years [0]. There's just not enough benefit.

Instead, we _do_ recommend that folks use the Immer library for immutable updates [1], preferably as part of our new official Redux Toolkit package [2].

[0] [https://www.reddit.com/r/javascript/comments/4rcqpx/dan_abra...](https://www.reddit.com/r/javascript/comments/4rcqpx/dan_abramov_redux_is_not_an_architecture_or/d51g4k4?context=3)

[1] [https://redux.js.org/style-guide/style-guide#use-immer- for-w...](https://redux.js.org/style-guide/style-guide#use-immer-for-writing- immutable-updates)

[2] [https://redux-toolkit.js.org](https://redux-toolkit.js.org)

</comment><comment><USER3> "A nested state is more likely to store duplicate data"

I'm not sure I follow why nested state is more likely to duplicate data.

<comment><USER2> A typical example might be a blogging app where posts reference users. Each separate post might have to have a copy of the same user object, whereas with a normalized state structure [0], the posts reference users by ID, and there is a single copy of each user object stored in a lookup table by ID.

[0] [https://redux.js.org/recipes/structuring- reducers/normalizin...](https://redux.js.org/recipes/structuring- reducers/normalizing-state-shape)</comment></comment>


On the Road to Swift 6 - <AUTHOR> https://forums.swift.org/t/on-the-road-to-swift-6/32862 <comment><USER2> Noble goals but even with Apple's support it's a long shot as Swift is currently a very niche language and has a lot of competitors who are moving quickly to stake-out the territory, eg. Kotlin, Dart, C# and Go.

<comment><USER3> For some reason Apple always moves slow compared to the competition in the software world. Swift is one example but also WebKit compared the Chromium or even iOS compared to Android.

Hardware wise they usually go much faster than the competition.

<comment><USER4> i feel like apple moves fast on software when their hardware requires them too. Once it's not absolutely required they stop getting interested and probably their star software employees move to different companies or projects.

The big question for swift is whether it will manage to get an interesting use case on the server some day. And that probably is a very uninteresting topic to apple.

Now google also has some investment in that language, so we may possibly end up with something nice in the end (maybe with a good mix of concurrency and safety inbetween go and rust). That's my wish..

</comment></comment></comment><comment><USER4> i've recently moved from a frontend / swift job to a backend / go job and i have to say that i don't see swift going anywhere.

i love the language, but it is clearly going towards a very different route from go, which is gaining even more momentum.

As for the client side, i recently had to explain to a colleague the ecosystem of mobile development, and the various options, and going full native using swift really appeared to be a measure of last resort, in case when neither web tech nor cross platform techs were good enough.

And i'm saying that as someone who loves coding in swift. I just don't see the point anymore.</comment>


Ask HN: Changing jobs with excellent prior salary - <AUTHOR>

I'm in a pretty good programming job that pays very well. Salary + bonus is around $200k.
However I wish to do something different technically. I'm started applying to the usual companies. My question is whether this kind of salary range is sustainable for a programmer.
I guess I'll know for sure when I get the offers but I thought I'd ask anyway to set my expectations accordingly. <comment><USER2> The salary you get will depend much, much less on what is "sustainable for a programmer" and more on how skilled you are at demonstrating value to prospective employers and then aggressively negotiating to capture a fraction of that value.

The first step: stop describing yourself as a programmer. You can buy programmers for cheap in India. Can you buy you for cheap in India? No. So don't sell yourself as if you are a close substitute for other code monkeys except you cost ten times as much.

Instead, you offer a virtually unique and _impossible to hire for_ combination of skills which has previously and will continue to make firms lucky enough to employ you huge stacks of money. Exactly what skills you emphasize are up to you, but "I know technology X and Y" is a _lot_ less important than "Knowing X will let me make you several million dollars; here's why. Knowing Y will... You will find it virtually impossible to find X and Y in the same guy because..."

<comment><USER3> AFAIK you do not hire programmers in India, you hire a CMMI level 5 certified "team" having at least 50% Senior Software Architects on board.

More to the point: I doubt that any company paying a salary in the above mentioned range which is also an interesting place to work (the OP obviously doesn't do it for the money) is giving a dime on how you title yourself.

</comment></comment><comment><USER4> Well, I've been in the field, professionally, for about 3 years and have yet to see anything above $70k, so from my perspective you're doing just fine. :)

<comment><USER5> Where are you located? In many markets, your best chance for a significant raise is a lateral move to a new company where your compensation is determined by what you bring to the table, and how ably you can demonstrate that, versus your current company where you can never fully escape the rubrik of past compensation.

</comment></comment><comment><USER6> Generally: No.

If you're willing to work in finance or similar soul-sucking industry that's definitely doable.

If you want to work in most other fields then no. Certainly no (good) startup is paying $200k cash compensation to their programmers.

I'd say $150k is around the ceiling if you value the quality of work/company.

Much more common is $120k-$140k for a good and experienced programmer at a good company.

This all assumes you're in a major US city.

</comment><comment><USER7> I'm hardly an expert but from my experience if all you are coming to the table with are standard programming skills then I think the positions in that salary range are few and far between. You will need to be bringing something special to the table, I would think.

But what do you want out of life? I'm currently looking at halving my salary (which wasn't as high as yours) to enter a field that I just think is fascinating and important to humanity (genetics / biotech). In the end it's more important to me that I can look back on life and think that I did something useful / important than just made a crap load of money.

</comment><comment><USER8> My most recent job transition was from a programming position in a large metropolitan area to one in a very rural area. I moved for lifestyle reasons and took an ~60% pay cut -- so the best answer I have to you is "it depends".

If you want to maintain something close to your existing salary, you must _at least_ look for companies or locations that actually pay that kind of salary to begin with.

This is probably quite obvious advice, but I think we (as developers) sometimes lose sight of the fact that there is not "one true salary range" for any particular set of skills.

</comment><comment><USER9> If you're looking for something more challenging and a change a scenery, perhaps what you should do is bank a significant portion of your income for the next year or so and start the process of creating your own startup or finding partners to build a new startup. That's certainly a challenge.

 _Note: I'm currently looking for a technical co-founder, it's not easy to find someone with great skills willing to work for equity_

</comment><comment><USER10> You likely need to go (or stay) in finance to get that.

Atlanta (BofA needs C++ guys), NY or Raleigh are good bets.

</comment><comment><USER11> You're _building_ stuff as a programmer and your company is doing good at _selling_ it for $200K+expenses+profit+taxes.</comment>


Japan's SS-520 CubeSat Launch Vehicle Achieves Success on Second Try - <AUTHOR> http://spaceflight101.com/japan-ss-520-5-launch-success/ <comment><USER3> This is major success, showing possibilities for launching small satellites inexpensively.

Congratulations to JAXA!

</comment><comment><USER4> Weight and size miniaturization of this thing sound pretty badass to me. JAXA seems in a good position here. Does this havr any effects on Electron, i.e. grab away the low end of their market?

<comment><USER5> This aims for an even smaller-sat market than Electron. Electron is going for about 200kg, for $6M per launch - a bit impractical for cubesat manufacturers unless they're willing to blow a lot of their propellant budget on an initial orbit change. This is aiming at around 5kg to orbit for about 500k - <USER2> expensive per kg, but allows a cubesat customer like Planet Labs to get their preferred orbit per-satellite.

In the space business Electron payloads would be called minisats, while SS-520-4 payloads would be called nanosats.

<comment><USER6> Electron can launch many CubeSats at once with a dispenser. So saying it can't do CubeSat class is not correct. This is what the upcoming NASA ELaNa XIX is doing: [https://www.nasa.gov/content/upcoming-elana-cubesat- launches](https://www.nasa.gov/content/upcoming-elana-cubesat-launches)

It also possible to have CubeSats in different orbits by timing the dispensing of the CubeSats and also the attitude of the launch vehicle at dispensing time.

<comment><USER5> I didn't say it couldn't be used with CubeSats; I said that it could require the customer to use a lot of propellant to change the orbit if they wanted a different trajectory than the main customer or than the rest of the cluster.

That last option you mentioned could be helpful, but only for small orbit variations. If you want 10 cubesats in orbit with wildly different inclinations like many Earth Observation customers do, that's a bit inconvenient.

<comment><USER6> You can do quite a bit with timing on the launch vehicle. A delay of ~45 minutes in SSO is the opposite side of the planet.

And do any of the Planet CubeSats even have propulsion? It looks like the Flock constellation deployed without it.

[http://space.skyrocket.de/doc_sdat/flock-1.htm](http://space.skyrocket.de/doc_sdat/flock-1.htm)

<comment><USER7> Mechanical Engineer working with CubeSats here. No CubeSat launched to date has carried a propulsion system. (Aside from air drag brakes to deorbit, I think someone launched at least one of those)

<comment><USER6> That's interesting none have launched with propulsion yet. I remember talk about the VACCO system when I was doing CubeSats a few years ago but it doesn't look like they are on-orbit yet.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> This is so cool. Is there any information on e.g. transponder frequencies, if available?

</comment><comment><USER9> This got me looking into something, and sure enough they have looked into doing something similar at Andøya in Norway.

</comment><comment><USER10> Is CubeSat like Open Compute for micro satellites?

<comment><USER7> Essentially, yes. The CubeSat standard specifies dimensions, weight, and max stored energy so that satellite users can focus on their payload and hand off the end result to any launch provider without complicated integration/negotiation.

</comment></comment><comment><USER11> Gahh ad that forced me to close the window on mobile "Amazon Gift"

<comment><USER12> If you're on iOS you can install content blockers... [https://itunes.apple.com/us/app/purify-ad-blocking- perfected...](https://itunes.apple.com/us/app/purify-ad-blocking- perfected/id1030156203?mt=8)

</comment></comment><comment><USER13> nice share</comment>


How I use Django, Virtualenv and Buildout together - <AUTHOR> http://www.sophomoredev.com/2012/06/how-i-use-django-virtualenv-and-buildout-together/

<comment><USER2> I don't really understand the purpose of the complex Buildout configuration, when you can just run "pip install -r requirements.txt" in your virtualenv and list your packages in a simple text file? What do you win with Buildout?

<comment><USER3> I have the same question. So far a combination of pip + virtualenv + fabric has been more than sufficient for my deployment requirements.

Is there any inherent advantage of using buildout instead?</comment></comment>


I Lived in a 38-Person Co-Op in San Francisco, and So Can You - <AUTHOR> https://thebolditalic.com/i-live-in-an-intentional-community-in-san-francisco-and-so-can-you-363f91196932 <comment><USER2> Sounds like [a family] with extra steps.

[https://m.youtube.com/watch?v=1kKoqE- sAb8](https://m.youtube.com/watch?v=1kKoqE-sAb8)

</comment><comment><USER3> _Eventually, I burned out on the sheer density of Chateau Ubuntu._</comment>


Ask HN: Compensating SWE interview candidates with $500? - <AUTHOR> SWE interviews used to be an hour or two. Nowadays they're all-day events. This requires candidates to to effectively "work" an entire day for free.
It seems to me that we should compensate candidates for their time.
From an employer's perspective, it seems like it might be a good thing to do regardless of whether it's the right thing to do or not
The $500 push would hopefully result in more in-demand candidates taking interviews.
What does HN think? Is it crazy? Is $500 too much, or too low? Is the risk of non-serious candidates too high? <comment><USER2> Adverse selection.

If they don't get the job, gain is zero. If they do get the job, the gain is their salary. EV = P(job) * E[salary|job]. Someone who believes there is a low probability of them getting the job will be drawn to these sorts of interviews, but the sharp people who want the job are not going to be more interested.

If you're trying to optimize for amount of good candidates, maybe. If you're trying to optimize for share of good candidates, absolutely not.

What could be interesting is a simpler test. How about the following?

* On the first of every month, the company publishes a list of random numbers.

* The job interview consists of a written test on how well you've remembered these, and them some code stuff.

Fast, cheap, efficient. Should be a reasonably good selection criteria.

<comment><USER3> How does memorization of arbitrary numbers help in any capacity in SWE role? Seems like just an absurd hurdle to jump.

<comment><USER2> That's the whole point - you select for people who are interested in jumping over hurdles to get the job, i.e. passion. It also requires intelligence. So already there you are selecting for the two most important traits.

<comment><USER4> > _i.e. passion._

This smells more like desperation than passion.

> _It also requires intelligence._

I agree, but intelligence is a very wide term and I'm not sure that the "intelligence" that you need to find patterns and memorize a few numbers is the same "intelligence" you need to make good programs. I guess it is positively correlated, anyway.

<comment><USER2> > This smells more like desperation than passion.

They are one and the same. If you're a nice company a lot of people want to work for, those who want to are prepared to go through hurdles in order to do so.

> I guess it is positively correlated, anyway.

Memory is very strongly correlated with IQ.

<comment><USER4> Most intelligent people I know hate memorizing noise. (But I have a few friends that memorized a few hundred digits of pi. Good luck convincing them to memorize your random numbers.)

</comment></comment></comment></comment></comment></comment><comment><USER5> In principle it sounds like a great idea, but you're gonna get flooded with low quality candidates.</comment>


A Brief History of the BEAM Compiler - <AUTHOR> http://blog.erlang.org/beam-compiler-history/ <comment><USER2> I'm always surprised and delighted to see so many "first implementations" of languages in prolog. It was described to me in college as "just a novelty" but in fact it's used extensively in the JVM internals [1] and apparently is the starting-point impl for other languages.

But prolog still seems so..awkward. I wonder why langs like Haskell or OCaml aren't more de-facto for these purposes; they seem to have similar expressive power for parser/grammar things and with less inside-out paradigms (imho).

[1] [https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf](https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf)

<comment><USER3> "seem so..awkward"? Sure because you don't understand prolog. it's very easy to implement languages.

Look how simple I can compile down to asm code in 35 lines of pure prolog code.

[https://github.com/segmond/PrologThingz/blob/master/clause_a...](https://github.com/segmond/PrologThingz/blob/master/clause_and_effect/compilation/cg_flatten.pl)

      /*
      	c := 1;
      	r := 1;
      	while c < n do
      	     (c := c + 1;
      	      r := r * c)
      */
      program(1, (
          assign(c,1);
          assign(r,1);
             while((c < n),
      	  (assign(c, c+1);
                 assign(r, r*c))))).

      ?- compile(1).
        movc(1,r(1))
        stm(r(1),c)
        movc(1,r(1))
        stm(r(1),r)
      label(_G3638)
        movm(c,r(1))
        movm(n,r(2))
        cmp(1,2)
        bge(1)
        movm(c,r(1))
        movc(1,r(2))
        add(r(2),r(1))
        stm(r(1),c)
        movm(r,r(1))
        movm(c,r(2))
        mul(r(2),r(1))
        stm(r(1),r)
        br(_G3638)
      label(1)

<comment><USER4> This is great, thank you for sharing this!

Your Prolog compiler is also notable because it can be easily made so general that it not only compiles, but even _generates_ programs.

For example, if I use pattern matching to generalize the first two clauses via:

        cg(i(I), R, [movc(I, r(R))|Z]-Z).
        cg(a(A), R, [movm(a(A), r(R))|Z]-Z).

then we can already use the same code to generate programs and compiled instructions:

        ?- cg(Prog, N, Asm-[]).
        Prog = i(_5354),
        Asm = [movc(_5354, r(N))] ;
        Prog = a(_5354),
        Asm = [movm(a(_5354), r(N))] .

The other clauses can be also generalized, using integer constraints to make them usable in all directions.

For example, if we write:

        cg(X+Y, R, C0-C2):-
                cg(X, R, C0-C1),
                R1 #= R + 1,
                cg(Y, R1, C1-[add(r(R1),r(R))|C2]).

then we can compile an _addition_ whose operands are not even yet fully known:

        ?- cg(i(X)+i(Y), N, Asm-[]).
        Asm = [movc(X, r(N)), movc(Y, r(_8850)), add(r(_8850), r(N))],
        N+1#=_8850.

Still, we can inspect the general pattern that is generated as a result of the compilation, and therefore write for example test cases that subsume many possible concrete cases!

On a general note, one reason why Prolog is so popular for writing compilers is that the language has a built-in mechanism for writing _parsers_ , and in fact describing all kinds of sequences (for example, of tokens, of instructions etc.) in a very convenient way.

For example, the above three clauses can be written equivalently as a so- called _definite clause grammar_ (DCG):

        cg(i(I), R) --> [movc(I, r(R))].
        cg(a(A), R) --> [movm(a(A), r(R))].
        cg(X+Y, R)  -->
                { R1 #= R + 1 },
                cg(X, R),
                cg(Y, R1),
                [add(r(R1),r(R))].

This makes it very easy to see the key aspects of the code. At the same time, the description is so general that it can be used in all directions, to generate, parse and test instructions.

Sample query:

        ?- phrase(cg(i(X)+i(Y), N), Ls).
        Ls = [movc(X, r(N)), movc(Y, r(_2288)), add(r(_2288), r(N))],
        N+1#=_2288.

</comment></comment></comment><comment><USER5> Prolog and Erlang in the same thread - is it Christmas already? Two of my favourite languages, both hugely undervalued.

I remember the moment I first "got" Prolog. Having only programmed in C/C++ to that point, it took some mental contortion. But the "oh!" moment was amazing. Backward chaining & logical variables are just so incredibly elegant. I still use transitive closure as an example of just how powerful the language is:

path(A, B) :- link(A,B).

path(A, B) :- link(A,I), path(I,B).

That's it. Stunningly simple.

As for Erlang - as others have noted - it was conceived right from the start as a language for concurrency. It's had 20 years to mature and robustly solve problems that inherently single-threaded languages have barely even recognised yet (C/C++/Java/C#/python/javascript/rust/...). Supervisors / error handling and threading are two notable examples. It makes me sad to look at the spread of "async". An inelegant sticking plaster that adds yet another concurrency construct and turns it into a tactical decision - on _every method_ \- and at the call site too.

Erlang shows that a single, well-conceived and executed construct is both possible and preferable. Lovely.

<comment><USER6> Can you explain what transitive closure is and how your prolog snippet accomplishes it?

<comment><USER7> [https://en.wikipedia.org/wiki/Transitive_closure#In_graph_th...](https://en.wikipedia.org/wiki/Transitive_closure#In_graph_theory)

> In computer science, the concept of transitive closure can be thought of as > constructing a data structure that makes it possible to answer reachability > questions. That is, can one get from node a to node d in one or more hops? A > binary relation tells you only that node a is connected to node b, and that > node b is connected to node c, etc.

That snippet defines a function path(A, B) by specifying two cases:

1\. a link(A, B) exists

-or-

2\. some element I exists, such that a link(A, I) exists and path(I, B) exists.

</comment></comment></comment><comment><USER8> If you'd like a high-level discussion of why the BEAM was designed as it was, check out my recent post: [https://dockyard.com/blog/2018/07/18/all-for- reliability-ref...](https://dockyard.com/blog/2018/07/18/all-for-reliability- reflections-on-the-erlang-thesis)

The TL;DR is: reliability was the main goal, and using isolated processes which can react to each others' failures, even when running on separate machines, was the way they found to get reliability. This turned out to be nice for scalability also.

</comment><comment><USER9> When I say this out loud, it sounds like a stupid question, but I'm still curious...

Outside of the fact that different programming languages run on BEAM and the JVM, what's the difference between the two?

I believe BEAM ships with supervisors, which is why Elixir can utilize them... what else is different?

<comment><USER10> The BEAM is a preemptive VM. That means that no one long running process can hog resources.

The BEAM was built on a principal of responsiveness since it was originally designed for telephonics.

Here's an in depth article on preemption in the BEAM that I shared with a friend this morning [https://hamidreza-s.github.io/erlang/scheduling/real- time/pr...](https://hamidreza-s.github.io/erlang/scheduling/real- time/preemptive/migration/2016/02/09/erlang-scheduler-details.html)

<comment><USER11> > The BEAM is a preemptive VM.

The BEAM Book shared by armitron disagrees: [https://happi.github.io/theBeamBook/#_scheduling_non_preempt...](https://happi.github.io/theBeamBook/#_scheduling_non_preemptive_reduction_counting)

Though an Erlang programmer never sees this in practice, because compiler inserts yield points appropriately.

<comment><USER10> Maybe on the definition of "preemptive", but it should be treated as a preemptive VM in practice.

<comment><USER12> Nah. You can screw with the BEAM's reduction-scheduling even in pure Erlang code: just write a really long function body consisting only of arithmetic expressions (picture an unrolled string hash function.) Since it contains no CALL or RET ops, the scheduler will never hit a yield point, even after going far "into the red" with the current process's reduction budget.

You just never see this in real Erlang code, because who would code that way? If you want to be idiomatic, use recursion. If you want to be fast, use a NIF. Why ever use an unrolled loop body?

But it _can_ happen, and therefore, the BEAM does not _guarantee_ preemption, even in Erlang. Reduction scheduling isn't a "kind of" preemptive scheduling. It's its own thing.

<comment><USER10> I mean, like i said, it should be treated as a preemptive VM in practice. In reality its not, but for most practical cases, its easier to understand it terms of preemption.

<comment><USER12> As a developer, yes. As an ops person trying to figure out why your deployed release isn't making its deadlines, no.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> BEAM is phenomenal but one area that's still preventing people from adopting it is pure raw performance.

People have to write NIFs far to often to obtain the raw perf they need and in doing so, negates all the tremendous benefits of the BEAM.

I hope more people push BEAMJIT development forward.

[http://www.erlang-factory.com/sfbay2017/lukas-larson.html](http://www.erlang- factory.com/sfbay2017/lukas-larson.html)

Maybe Facebook would fund this effort given their huge BEAM investment from WhatsApp use.

<comment><USER14> I think it depends on project domain. perf. is fine for most web apps for example.

<comment><USER13> >> "perf. is fine for most web apps for example."

That same argument is made for Ruby and look at how many people leave due to slowness

<comment><AUTHOR> The thing is that MRI Ruby is effectively single-threaded (unless you use things like concurrent-ruby which aren't that performant anyway) and threads can be blocked waiting for I/O, in fact they do most of the time, and is in I/O where Erlang really shines thanks to BEAM's nature of lightweight preemptive processes.

<comment><USER15> CRuby is multi-threaded with a GIL. CRuby also supports light-weight cooperative threads called Fibres, which are used to build things like: [https://github.com/postrank-labs/goliath/](https://github.com/postrank- labs/goliath/)

JRuby has no GIL, JIT, and is significantly faster than BEAM.</comment></comment></comment></comment></comment>


Glancee is Joining Facebook - <AUTHOR> http://www.glancee.com/

<comment><USER2> Voting this up because I see that once again, HN users are voting up the TechCrunch writeup of this news instead of the source of the news.

Tired of seeing TC on the front page of HN every time there's an acquisition. They don't add much to the story, and what they do add is questionable. It's getting old.

<comment><USER3> I completely disagree with you.

I have never heard of Glancee before today. Going to their announcement page tells me nothing about what exactly did, or do now, except a generic blurb about bringing people together.

The TechCrunch article, on the other hand, gives me information about exactly what these guys used to do, and who the remaining competitors are, which is a pretty big deal.

<comment><USER2> I didn't actually think the Glancee post was better or more informative. My gripe is that when I read HN I want to read the original source, not the remix. It's not just TC either-- though I singled them out-- it's also Mashable and PandoDaily. These sites regurgitate the acquihire and acquisition news in order to sell ads.

<comment><USER4> They are tabloid newspapers. Repackaging more-or-less widely known facts into articles in order to sell ads has been their business model for decades.

</comment></comment></comment></comment><comment><USER5> Never heard of it, no idea what it does. But good for them

<comment><USER6> I downloaded the press kit to see what they did. They looked to be a "local social network". It looks like if another member was in walking distance from you it would show their profile and you could chat. Seems kind of interesting and right up Facebook's alley.

</comment></comment><comment><USER7> What did they do?

<comment><USER8> From Bloomberg's writeup:

"Glancee lets users explore profiles of people nearby and receive notifications of people who have common friends or mutual interests."

[http://www.bloomberg.com/news/2012-05-05/facebook-buys- glanc...](http://www.bloomberg.com/news/2012-05-05/facebook-buys-glancee- location-based-tool-for-undisclosed-price.html)

<comment><USER9> Isn't that exactly what Highlight does?</comment></comment></comment>


Google Buzz vs. Google Wave - <AUTHOR> http://www.25hoursaday.com/weblog/2010/02/15/GoogleBuzzVsGoogleWave.aspx <comment><USER2> I'm rather unimpressed with both. Wave is really cool technology. I won't deny that. However it's UI screams get lost in me. Buzz it much better but it's still more complicated than twitter and uglier than Facebook. It's this horrible middle ground.

</comment><comment><USER3> Google wave is a godsend for teams of people who work together. We no longer have to exchange a million emails about a project topic. We all keep it into the wave.

Its not an email alternative. Its and adjunct.

<comment><USER4> You said it. Occasionally my team starts to fall back into the old "million emails, cc's and catchup email" pattern when suddenly somebody will say "let's move this to a wave" and suddenly everything becomes very simple and easy to organize.</comment></comment>


The Great Wall of Facebook - <AUTHOR> http://www.wired.com/techbiz/it/magazine/17-07/ff_facebookwall?currentPage=all

<comment><USER2> The difference between Google and Facebook for me: I trust Google (to a certain extent). I trust Facebook in no way. Google's policies have generally showed that they're concerned about privacy and their targeted ads produce information relevant to you, without sharing it with the advertisers. I'm confident that if I give Google my email service, they won't sell my email address to spammers or any of the info in my emails unless forced, etc, etc.

Facebook has never shown itself to be trustworthy. They continually try and control their users data. They made it extremely difficult to delete an account before. Most of their ad providers seems sleazy and trying to trick you. Their stupid 3rd party apps get who knows how much access to your profile, completely unregulated by Facebook. Not to mention them secretly changing terms of service and the like.

I _feel_ comfortable with Google. I never _feel_ comfortable with Facebook.

<comment><USER3> _They made it extremely difficult to delete an account before._

That's an interesting point. How you ever tried to delete your search history at Google? One of the main differences between the two that I see is that everything Facebook knows about you, you have to explicitly tell it. Google quietly logs everything you search for and you don't even notice.

<comment><USER4> Deleting your search history at Google is like three clicks (Web History | Remove Items | Clear entire Web History ) -- however, I've never done this, since I like being able to browse my search history. Now, of course, Google could be keeping the data around even though you've elected to delete it, or may be attempting to anonymize it to use it for a different purpose, but that's another issue.

<comment><USER3> Yeah I've seen this - but the EU's dispute with Google is that they keep history for 2 years regardless, so that implies that clearing your history is merely cosmetic.

<comment><USER4> That implication neither confirms nor denies the "difficulty" of deleting your search history; three clicks means it's as difficult to delete your search history as it is to move a file to the recycle bin in Windows and empty it. Fact is, you can't confirm that it gets deleted, whatever that exactly means, no matter what the UI is, but that has nothing to do with the ease of finding or using the delete functionality.

However, does the fact that a cosmetic delete function exists say that Google wants to allow you to actually delete something or just wants you to think that you are deleting something, and is this better or worse than Facebook, which doesn't even have a cosmetic interface to do so, other than perhaps removing your account all together, and has established and known TOS that say they can do whatever they want with the data you give them?

</comment></comment></comment></comment></comment><comment><USER5> I suppose that I'm kind of an old fart, because Facebook reminds me powerfully of AOL. They are both walled gardens.

While at one point AOL was powerful and rich enough to purchase Time Warner. AOL still hangs on, a shell of what it once was. The main difference, is that AOL had a clear monetization strategy: it charged its users for access. And, it made craploads of money because it simplified computers and getting online for millions of people.

Facebook does a similar thing. It allows people to do interesting things with their computers without having to worry about the dark and scary bits of the internet.

Us older people remember the devastation that occured when AOL unlocked the gate it's walled garden to let people access the internet at large. It's know as the eternal September. Finally, when AOL's users got tech savvy enough to use the wild internet without AOL's hand holding, they left in droves.

I suspect similar things are going to happen to Facebook users. I could be wrong.

<comment><USER6> Some call it a walled garden; some call it privacy settings. I hear the "walled garden" criticism all the time, but I've never really understood it. What would make Facebook not a walled garden to you, while still giving users control of what information they want to share with which people?

</comment></comment><comment><USER7> Another obstacle I think Facebook will eventually run into is the fact that social graphs, to me at least, seem fairly static. I am not a celebrity, and for me, literally ALL of my Facebook friends are people I know in real life.

While it is interesting to learn new tidbits of information about them, I am also very aware of the fact that, for instance, none of them live in Mountain View. If I decided I wanted to move there, the first thing I would do is turn to Google to learn about real-estate, utilities, getting a driver's license, etc. I don't quite see how placing the constraints of a social graph on top of a search for unknown information will make that search more useful. When stepping into uncharted territory, I don't want artificial limitations on what I find.

<comment><USER8> One of the odd things about the social graphs for me is that I have multiple distinct social graphs that overlap little if at all. I expect there are many people that want to really be sure they are keeping their work, personal, and family lives separate.

For example, my high school friends probably hate my updates about programming and computer topics. And honestly I don't care much about their trip to the river.

On the other hand, my more professional friends (who I don't interact with on twitter) could care less that I'm walking the dog but are happy to chat about programming.

For that reason I have multiple communities: Facebook, Twitter, Reddit, HN. They each have different social graphs and I discuss different things with each of them. Facebook's is trying to connect to these other sites to connect usernames to Facebook profiles, but I'm not sure I want all that going back to the same place.

</comment></comment><comment><USER9> Robert Scoble has an interesting perspective on the ambitions of Facebook.

"Phase 1. Harvard only.

Phase 2. Harvard+Colleges only.

Phase 3. Harvard+Colleges+Geeks only.

Phase 4. All those above+All People (in the social graph).

Phase 5. All those above+People and businesses in the social graph.

Phase 6. All those above+People, businesses, and well-known objects in the social graph.

Phase 7. All people, businesses, objects in the social graph."

[http://scobleizer.com/2009/03/21/why-facebook-has-never- list...](http://scobleizer.com/2009/03/21/why-facebook-has-never-listened-and- why-it-definitely-wont-start-now/)

<comment><USER10> Interesting read. However, there's one reason why Facebook and similar social networking applications fail for me, and I'm wondering just how many (or how few) people have the same problem. Consider Scoble's words:

 _You pull out your iPhone or Palm Pre or Android or Blackberry or Windows Mobile doohickey and click open the Facebook application. Then you type "sushi near me."

It answers back "within walking distance are two sushi restaurants that more than 20 of your friends have liked."_

So far, there hasn't been a single social app I tried that managed to give me useful information like that. Why? Because they don't offer me a good way to differentiate and they don't learn. For these apps, all contacts in my network are the same and there's no way to teach them otherwise. On Facebook, I'm "friends" with:

1) People I see daily at work and we're friendly to each other.

2) People I've met in the past few years and we've been friendly back then but now were out of touch.

3) People from my ground school and high school, whom I haven't seen in more than 20 years.

4) A few relatives.

5) A few people with whom I have a lasting friendship.

Depending on what kind of "friend" my contact is, I would treat their recommendations of sushi restaurants differently. The same thing happens to me on the Goodreads site. I've found many great books there, but every time I had to search for hours.

I suppose it's just a matter of time before someone finally does it right, but I just wanted to point out what I find to be missing. And I'm really wondering whether other people feel the same or I'm just too damn picky...

<comment><USER11> I don't know if Facebook has this feature (probably), but on Orkut you can assign friends to Groups, like Family, Co-Workers, Best Friends, etc...

It would probably solve your problem if an option to "Only consider the opinion of these Groups" were present. Of course, we'll fall into the problem of how noteworthy their opinions are depending on the subject. While I would trust my middle brother expertise on digital cameras, the youngest in the house is a chef, so each one should weight differently.

Something so complete will never happen (never is a dangerous word), because that would require other people to constantly input information like "I trust Gustavo's opinion on digital cameras", and even that isn't enough, because my brother is a professional photographer, and isn't the best person to ask if you want a cheap camera.

So, I don't think any of these "other people you know liked XYZ" will manage to give you things that you'll probably like (I enjoy different types of japanese food than my brother, for example), but they will help you socialize more. You'll at least know that your friend went to some restaurant, and tell him later about your experience.

</comment></comment></comment><comment><USER12> What I really find interesting in this article is how some of the Facebookers are already considering Google as a Big Brother of Online world and in most cases, It is. I think Google is to Today's startups what IBM was to 70's & 80's Startups and Microsoft was to 90's Startups, a Gigantic and Monopolistic enemy to fight against.

 _they(Google) don't think Facebook's staff has the brainpower to succeed where they have failed. "If they found a way to monetize all of a sudden, sure, that would be a problem," says one highly placed Google executive. "But they're not going to."_

This is the same kind of Arrogant and cocky attitude which made IBM irrelevant in PC market, Microsoft irrelevant in Online market and Maybe Google in Advertising. History repeats Itself every decade, atleast in Technology.

<comment><USER13> _"Google is to Today's startups what IBM was to 70's & 80's Startups and Microsoft was to 90's Startups, a Gigantic and Monopolistic enemy to fight against."_

That argument makes no sense, _especially_ in comparison to facebook. Google is a set of disconnected services that you can take or leave. You don't like google search or gmail or google maps or google news? Go ahead and use something else. For any service that doesn't require immediate personalization, you don't even need to sign up ever. Even if every single person you interact with uses google search or gmail, it doesn't matter because you have no obligation to use it. As a developer, if you hate google and don't want to use anything by the company all you have to think about is SEO, most of which is basically common sense and regular marketing on non- google sites. Why would you possibly even need to consider "fight[ing] against" google unless you were directly competing?

In contrast, Facebook explicitly wants to be THE monolithic dominating force on the internet. You can't even use it without signing up and joining the whole Facebook thing. If everyone you know is using it, you end up missing out; it's basically vendor lock-in for your entire social life. And as a developer, interacting with Facebook in any meaningful way means dealing with Facebook every step of the way.

Monolithic platforms like Facebook are truly awful. Facebook is defined by locking people into the platform while Google joins together disparate web services and competes on quality and brand recognition. Google has its problems, but Facebook's problems are right at the core of everything it does.

<comment><USER14> _Facebook explicitly wants to be THE monolithic dominating force on the internet. You can't even use it without signing up and joining the whole Facebook thing._

It is the new AOL.

I'm still waiting for the "Internet" of social networking sites to come along and make Facebook, MySpace, etc. things of the proprietary past.

</comment></comment></comment><comment><USER15> "Nobody has the data we have." is somewhat hyperbole. Gmail has more info about me than Facebook will anytime soon. I am confident that Facebook will build a great business. However, this article read like something cooked up by PR firm wanting to paint Facebook vs Google as the next Apple vs. IBM. It's a half baked analogy at best.

<comment><USER16> I agree. Facebook's data on me is not of a particularly good quality. Most of my "friends" are former colleagues or school friends. I wouldn't trust any of them to recommend a restarunt any more then I would trust 300 anonymous reviews on an independant restarunt listings site.

</comment></comment><comment><USER17> I don't think I've ever seen Facebook go after Google so aggressively before - the "surveillance society" language actually made me whistle under my breath.

<comment> brown9-2 I thought that some of the potshots that Facebook engineers took at Google engineers sounded a bit radical, not to mention just... rude.

I'm sure that Facebook works on and solves some interesting problems, but to act like what they do is harder than what Google has accomplished? C'mon now.

I've yet to read an article about Facebook in which Zuckerberg doesn't come off like a jerk

</comment></comment><comment><USER18> I'm not a big fan of either of these companies, so I find myself agreeing with the criticisms from both sides. In today's environment, advertising can obviously be tremendously profitable, and advertising is what the businesses of both Facebook and Google boil down to. But the idea of pushing more and more largely useless crap on people doesn't really interest me, even if it's profitable. (But then, what most people do on Facebook all day doesn't really interest me, either.)

</comment><comment><USER19> One thing I'd never heard before: at least 9 percent of facebook's staff used to work for google

</comment><comment><USER20> Wouldn't it be nice if the need for a centralized, advertising-driven web business were removed from our social graph(s)? It would not take much for a distributed, node based plugin system to house personal sites and friends lists etc. Then we wouldn't feel so constrained by one monolithic corporation that inherently is going to have pressures concerning business revenue, government influence, executive dynasty, et al. My guess is long term we will take ownership of ourselves back.

<comment><USER21> _It would not take much for a distributed, node based plugin system to house personal sites and friends lists etc._

Do you know, I think Opera might agree with you here. Except now they've started it, everyone's laughing at them.

</comment></comment><comment><USER22> Regardless of their ambitions, it's fun for me to see companies in different verticals go after each other. That's where interesting innovation can happen. This is far better to read than another "Google search-engine killer."

</comment><comment><USER23> wait, if facebook becomes the internet, will i be marginalized for not having any friends?</comment>


Using Thrift with Cappuccino - <AUTHOR> http://blog.parallel48.com/using-thrift-with-cappuccino

<comment><USER2> Anyone care to explain what problem thrift solves. I sort of understand what it does but I can't really get where/why one would have to use it?

Thanks.

<comment><AUTHOR> Thrift solves the same problem as pretty much any other remote procedure call (RPC) system. Among RPC systems, I'd say it's notable because it works easily with over a dozen different languages and is fairly transport agnostic (you could use it over TCP, HTTP, or whatever else you like). Some care is also taken to be byte efficient, so it's not as heavy as something XML-based like SOAP or XML-RPC.

But, is your question more why would you use something like Thrift over just plain REST with JSON? You could accomplish the same things with REST/JSON, but in a lot of languages, I think the REST route involves writing more code. Instead of just making a method call and having it all happen for you, you encode some structure to JSON, do some HTTP operation, decode. I like it when that's hidden from me.

<comment><USER3> What I've never understood or appreciated about REST interfaces is that everywhere else in programming, the function / parameter / return paradigm is how we do things. Why do services over the web need to be different? It seems clear to me that something like RPC is what I want. (Which is not to say the particulars of XML-RPC or especially its implementations are anywhere close to ideal.)

<comment><USER4> Well, keep in mind that when most people say "REST" what they mean is a web call that sends or receives JSON/XML.

Personally, I've found that there are some things that fit really well into a fully REST-ful design, but sometimes you just want to deal with JSON over http, and that's okay too.

<comment><AUTHOR> I think I'm guilty of that. :-)

It took me a really long time to figure out what RESTful design meant. As best I can tell, it's CRUD mapped onto the HTTP verbs.

<comment><USER4> As long as you don't call it REST, then the purists shouldn't have a problem with it. I'm not a purist myself, I'm more about getting things done, and sometimes a useful API just doesn't map cleanly onto REST.</comment></comment></comment></comment></comment></comment>


Erlang Factory 2009 Videos - <AUTHOR> http://video.yahoo.com/people/5994799

<comment><USER2> These videos are for the London conference. The slides for the talks can be found here: <http://www.erlang-factory.com/conference/London2009/talks>

<comment><USER3> Thanks mace. It's hard to see the slides they are discussing, and was about to come back to this post to comment about if anybody had a link to them :)</comment></comment>


Show HN: Deuce, a tennis scorekeeper for Apple Watch - <AUTHOR> https://itunes.apple.com/us/app/deuce-scorekeeper/id1189508962?mt=8 <comment><USER2> I imagine you could automatically score a tennis game, using the accelerometer in the watch (detect sudden impulse upon striking the ball, and communicate with your opponent's watch). I assume from reading the app description it's not doing anything like that. Could be a cool enhancement / technical feat.

<comment><USER3> That would be impossible. A shot could go out as an unforced error or be a winner, all without the other player moving his hand.

</comment></comment><comment><USER3> This is an excellent application that's specific to watches, great idea :)</comment>


Ask HN: What company was the most affected by Apple's announcements today? - <AUTHOR>

<comment><USER2> Measuring in dollars, probably Google; in a bunch of subtle ways (which added up to something unsubtle), Apple cut off UX paths that led to Google searches.

Following that, Dropbox is the next most likely to get hit, but I'd be surprised if iCloud got that much Windows adoptions, or any Android adoption; they'll be fine.

<comment><USER3> Funny, no one mentioned Microsoft.

It must be a strange state to pass from most feared and hated to irrelevancy.

<comment><USER4> I wouldn't say that. Swift must be in part an effort to stave off C#/Unity/Xamarin. Imagine if Microsoft got a significant foothold into the iOS development tool chain.

</comment></comment></comment><comment><USER5> I felt Apple really wants to use the network effects to choke Android. If everything works so well with each other in the Apple ecosystem, it is going to make the life difficult for Android. Steve Jobs wanted to go nuclear on Android but I think Tim is really doing it - calmly.

</comment><comment><USER6> I wouldn't say affected per se, but it looks like Apple is treading on Dropbox, Google Voice (SMS/Voice integration), Google itself through the enhanced local client search, Whatsapp (again, SMS/Voice integration), and Evernote/Sketch (mail client markup).

</comment><comment><USER7> If Parse hadn't already been acquired by FB, they would have been my pick (CloudKit is obviously a reaction to that acquisition).

</comment><comment><USER8> CloudKit definitely seemed like it was taking a bite out of the BaaS market share, considering that it's integrated so closely with the SDK and has quite a generous free tier.

</comment><comment><USER9> Apple?

</comment><comment><USER10> [http://www.rubymotion.com/](http://www.rubymotion.com/) ?

<comment><USER11> Swift is a step in the right direction, but RubyMotion is adding support for Android, which will make it more appealing than Swift.

Also, it's ruby. _activate high and mighty language boner now_

<comment><USER12> I've written a response for peoples questions on the future of RubyMotion, ignore the sensationalist title :)

[http://blog.motioninmotion.tv/why-swift-will-never- replace-r...](http://blog.motioninmotion.tv/why-swift-will-never-replace- rubymotion)

</comment></comment></comment><comment><USER13> DuckDuckGo in positive manner</comment>