Garbage collection thoughts - <AUTHOR> http://sebastiansylvan.com/2012/12/01/garbage-collection-thoughts/ <comment><USER2> With GCs that use some varient of Cheney's algorithm for the nursery, short- lived heap objects are far less painful than you might think, as a nursery collection takes time relative to the amount of live data in the nursery.

</comment><comment><USER3> Regarding your third to last paragraph. This paper is worth looking at (probably the most recent treatment of deferred reference counting): [http://www.cs.utexas.edu/users/mckinley/papers/rcix- oopsla-2...](http://www.cs.utexas.edu/users/mckinley/papers/rcix- oopsla-2013.pdf).

</comment><comment><USER4> > A strongly typed high level language should be immutable by default, or at > the very least track mutability, which means we can statically know that > large object graphs are acyclic (as immutable values must be, in a strict > language) – no need to trace these in any cycle collector.

How would this work? Unless all values are immutable, this isn't generally true. If all values _are_ immutable then you've got a pure functional language and a lot of these ideas don't apply any more.

<comment><USER5> If you disallow mutation of values in a collected context, then it Just Works. The only way to complete a cycle is by mutating a managed value or "tying the knot" via laziness (which is of course just mutation in a hat).

Rust almost has this. Only shared (immutable) references can be obtained to values owned by a reference-counted pointer (which is nothing fancy -- just not implementing mutably dereferencing RCs). Since mutability is inherited, this freezes all reference counted data and everything it can reach.

However Rust also provides types which specifically _can_ be mutated in a shared context (a Mutex being the most obvious case), so you can indeed make reference-counted cycles and leak.

Still, by default you can't leak. You have to opt into these "interior mutability" types.

Basically, "shared XOR mutable" does not necessitate forbidding mutability universally. It just requires a way to freeze data when it _is_ shared. You can even unfreeze it whenever you can prove it isn't actually shared (e.g. reference count = 1).

<comment><USER6> But that means you've just disallowed a whole class of some very efficient data structures (in the collected context). Those are the very same data structures (trees, graphs) that are useful for arbitrary lifetime objects, namely exactly the objects that would most benefit from a GC.

</comment></comment></comment><comment><USER7> As someone who primarily works on iOS, I would have liked to see Apple's ARC mentioned. With the addition of weak pointers, I think it gives a good blend of performance (no GC) and low mental overhead. I think marking pointers strong or weak actually adds semantic meaning to the code.

But maybe that's just rationalization.

<comment><USER8> ARC is one of the oldest (if not the oldest) kinds of GC out there. It's even the subject of one of the famous AI Koans:

[http://www.catb.org/jargon/html/koans.html](http://www.catb.org/jargon/html/koans.html) (see "Moon instructs a student")

It stopped being considered proper garbage collection long ago because of the inability to collect circular references without help, which of course is the subject of that story. Apple is doing decently well with their version of it, but they're essentially reinventing ancient history.

Other GCs often have weak pointers too. You just use them less, because with a GC that can deal with circular references you don't need them nearly as often.

<comment><USER9> You're mixing up Apple's ARC with reference counting in general.

A typical RC implementation suffers from either requiring to do AddRef/Release calls manually (what Apple had in pre-ARC era), or blindly doing too many automatic calls. That's ancient history and can not complete with a moderately decent modern GC.

ARC has neither of those disadvantages and so provides convincing alternative to GC, and AFAIK is the first and unique to do so.

BTW, the correct term to use here is "automatic memory management" (AMM), not garbage collection, and there is no such thing as "proper" AMM. Handling circular references is not a must-have property of AMM, it is just the price RC pays, in GC, that will be pauses and higher footprint, and other approaches exist too: for example, to disallow in compile time to create a structure that can be potentially circular.

<comment><USER4> > ARC has neither of those disadvantages and so provides convincing > alternative to GC, and AFAIK is the first and unique to do so.

I love what Apple has done with ARC: they've taken a very inefficient approach to garbage collection, one which has repeatedly shown to be the "worst case" algorithm with the worst performance characteristics, and then proceeded to convince legions of developers that that same approach is actually the best one.

<comment><USER10> Not only that, they managed to sell the idea they gave up on GC because their engineers didn't managed to make it work with C semantics that didn't crash left and right, but because ARC is way better than GC.

</comment></comment></comment></comment></comment><comment><USER11> > _the language should allow you to express simple memory ownership when you > have it_

The problem is that you only _think_ you have such a thing. If you're wrong, you're screwed. :)

> _The third and maybe most important optimization is to make garbage > collection a per-thread operation. You simply don't allow garbage collected > heap allocations to transfer between threads._

This takes away much of the point of threads, leaving you better off with processes---and process boundaries will better enforce this model. You cannot cons up a message, pop it in a queue, and have another thread pick that object out the other end: thus you have to use some IPC based on bytes in a pipe or shared memory buffer.

In other words, you might as well fork a bunch of children that have not just their own heaps but their own address spaces to enforce the containment of those heaps. There is a lot of good in it: fault isolation, more virtual memory footprint to each little worker. There is a degree of attractiveness in multiple processes with just one thread in each one, and single-threaded garbage collection (which doesn't have to deal with hairy concurrency problems, and so is faster and more robust).

> _To figure out which region a pointer refers to in this scheme, we simply > loop through the different region sizes that our allocator allows, mask the > appropriate number of bits from the pointer to get the start of the proposed > region, read the region index in the first DWORD of this memory area (this > may be garbage if we have the wrong size) use this to index into the region > pointer array (taking care to avoid buffer overruns from garbage indices) > and ensure that the pointer stored in that element refers right back to the > proposed region. We also must ensure that the size of the region at this > address actually contains the original pointer._

The problem of mapping a pointer to a region is already solved very well with existing data structures. For instanc, the Linux kernel uses a red-black tree to map a virtual memory pointer to a "struct vm_area". (These are the regions allocated by mmap). The regions don't overlap and so a binary search tree ordered by their base address works fine.

Solving the problem of "does this pointer refer to a heap, and which one" in a garbage collector is only necessary when we are doing conservative garbage collection: we are given some pointer-sized value from somewhere (like a scan of some raw memory area such as a C stack), and we have no idea whether or not the value is a pointer to an object in the GC world. An always-precisely- tracing garbage collector never has to solve this problem. It starts with root values, which are known to be objects in the GC world. If they are heap values, they point to objects whose structure is known to the collector. They are precisely traversed to reach other objects and so on.

<comment><USER12> > This takes away much of the point of threads, leaving you better off with > processes---and process boundaries will better enforce this model. You > cannot cons up a message, pop it in a queue, and have another thread pick > that object out the other end: thus you have to use some IPC based on bytes > in a pipe or shared memory buffer.

Not really true; a lot depends on the implementation here. In a multi-threaded setup you can often avoid context switches and kernel calls (the really expensive part) and deep copying with a bump allocator is generally cheaper than deserializing/serializing [1]. Often, you can also avoid copying if you do it right.

On top of that, while you can't manipulate pointers on the heap safely under such a concurrency model, you can manipulate integers and floats across heaps (which is relevant for a large number of concurrent algorithms) if you do it right (i.e. by ensuring that you don't deallocate the objects containing the data).

[1] Keep also in mind that any actual shared data that goes from one thread to another will generally go through main memory or the L3 cache at one point or another.

</comment></comment><comment><USER10> Oberon derivatives and Modula-3 are two examples of systems programming languages, using value types by default and GC enabled.

Sadly the market choosed to ignore them.

<comment><USER13> > Sadly the market choosed to ignore them.

Most of the market probably did not know about it, which is different from ignoring something.

<comment><USER10> They were quite known in European universities.

ETHZ also created a spin off, Oberon microsystems, that sold BlackBox Component Builder, based on Component Pascal, an evolution of Oberon-2. Featuring a Delphi style IDE.

</comment></comment></comment><comment><USER6> The author tosses the word "performance" around a lot even though it means different things in different environments, especially when it comes to GC.

First, the main cost a GC -- any GC -- always has is significantly increased RAM overhead. Whether RAM is cheap (and can be traded off for things like throughput/latency or convenience) or not depends a lot on the environment. If RAM is expensive -- a GC is not the answer. If it isn't, it may well be the best answer. OTOH, GCs at least potentially have an advantage that's very hard to achieve by other means, which is compaction. Everything else is a tradeoff.

Second, I think the author jumps the gun when discussing various solutions (ownership, stack allocation, reference counting) without first trying to understand the problem, and the problem is -- first and foremost -- RAM overhead. Whether or not that's a serious problem really depends on the environment.

Also, before discussing solutions, we need to understand the domain. I think that the domain is as follows. Objects belong in one of four lifecycles:

1\. Permanent -- objects live for the duration of the program

2\. Stack -- objects live for the duration of a single function (and the functions it calls, of course)

3\. Arbitrary -- objects live for an undetermined lifetime

4\. Transaction -- objects live for a well-defined, time-bounded domain scope, be it a request in a web server, a frame in a game, or a transaction in a DB.

Now, in spite of what some may think, very little of a serious program's data can live on the stack. Server machines today come with hundreds of GBs of RAM, and if you do the math, only a very, very, small portion of that can be exploited by kernel-thread stacks. Lightweight threads require growable stacks and those stacks are therefore heap objects themselves, with either arbitrary or transaction lifetime. The cost of allocating stack-scoped objects on the heap is quite low, as those are very short-lived objects that don't become tenured by the GC, but allocating on the stack is better because we'd like to avoid triggering young-gen collections, too, of we can help it (and, indeed, Java is getting value types, although _mostly_ for a different reason[1]).

With so much available RAM, the best use an application can make of it is to cache as large a working-set from the DB in RAM. Those objects have an arbitrary lifetime and often require scalable concurrent access (or sharding, but that opens a whole new can of worms). Reference counting is not a good solution here.

Finally, transaction-scoped objects are best handled by arenas. GCs, like HotSpot's G1 can attempt to automatically determine those transaction-scoped objects, but the results are not as good. This is a tradeoff: a global GCs simplicity, vs. arenas' utility and low latency.

Personally, I think that the solution first depends on whether or not you're targeting high-performance in constrained environments (like C/C++ and Rust do). If so, a solution like ref-couting is a great one. If not, I see no room whatsoever for ref-counting (what scope do they target, and what advantage do they have over a GC in an unconstrained environment?)

In _unconstrained_ environments I think the best approach is as follows:

1\. Stack allocation (value objects) where possible.

2\. A global GC for the arbitrary and permanent scope (no need to separate permanent objects as they place a relatively low burden on a GC).

3\. Arenas for transaction scopes, _if_ you're willing to sacrifice some simplicity for latency.

I don't see absolute necessity for ownership types (and certainly not reference counting) in such _unconstrained environments_ , but they may certainly be useful in statically verifying that heap objects never reference an arena object (or arenas with wider scopes never reference shorter-lived arenas).

In _constrained environments_ where manual memory management is required because the GC's RAM overhead is onerous, ownership types are invaluable, as is reference counting. You don't get compaction, but this may not matter as such applications are usually much more careful with managing their allocations and deallocations.

RTSJ -- Java for hard-realtime and safety-critical systems (which is getting a new spec these days) -- makes the simplicity tradeoff, and introduces arenas (scoped memory): [https://www.aicas.com/cms/en/rtsj](https://www.aicas.com/cms/en/rtsj) It also makes permanent objects explicit, because it can't tolerate any additional cost, even if it mostly limited to program startup.

Finally, the author mentions both immutability and large objects, but the two are often at odds. Persistent data structures that are popular in immutable- by-default languages like Clojure rely on small object with lots of pointers to _reduce_ memory and performance costs.

[1]: Cache friendliness of arrays and other data structures.

</comment><comment><USER14> Article is from 2012 which is why it seems a little naive.

Then again, my first interview question is "what's wrong with garbage collection?" and if you can't give me three specific use cases where it's a non-starter then that's usually the end of the loop.

<comment><USER15> If you phrased the interview question like that, I would automatically fail any interview with you. I have been working with GCed languages for 20 years now, and certainly know the ins and outs of GC a bit. So, if your question is, which are problematic situations with GC and which mistakes were made in some popular GC languages, we could have had an interesting discussion. But asking "what is wrong with GC?" suggests to me that you want to hear why GC is a bad idea and asking like that would quickly weed out people who are very knowledgeable in writing good performing programs on GC languages.

<comment><USER14> I have been interviewing candidates for 20+ years now and that precise language has been refined. Any super-strong opinion one way or the other is itself a great bit of information, especially among a candidate who lists both Java/C# and C/C++ on his resume.

If it makes you feel any better, in the early 90s the question was "what's wrong with malloc?" And I'm sure you'd do just fine. Amazing how many people don't, though. Better predictor of success than any of this "walk a tree" nonsense and no whiteboard required.

<comment><USER15> Thats fair, but then you should have your post phrased differently. You are not literally requiring three use cases as an answer to your question or ending the interview, but rather you are using it as a starter for a discussion.

Indeed, it is better to have a more general discussion about the foundations one is to work on, then to solve random riddles.</comment></comment></comment></comment>


Show HN: Unit test Backbone views without headless browser - <AUTHOR> https://github.com/caljrimmer/require-backbone-view-mock

<comment><AUTHOR> I made this today to help speed up and simplify unit testing of backbone views.

It basically just turns a view in to an instantiated object with injected dependencies.

It is very quick and agnostic to test frameworks.</comment>


On joining DigitalOcean - <AUTHOR> http://philcalcado.com/2016/02/02/on_joining_digitalocean.html <comment><USER2> DO definitely sounds like a great company and prefer them as a product compared to Amazon (I just hate the onanism around them, and I prefer to keep things simple and roll my own or a hybrid for many things, not to mention that its cheaper to do so in many cases). Can people use their own diskimages now?</comment>


Twitter kills SMS service in some countries over costs. Will someone kill SMS already? - <AUTHOR> http://venturebeat.com/2008/08/13/twitter-kills-sms-service-in-some-countries-will-someone-kill-sms-already/

<comment><USER2> That's a big lesson for small-scale mobile-based start-ups: Whatever you do in this space, you must start with a sustainable business model.

In my previous start-up we ignored that fact, and we failed. Unfortunately, the mobile space is not as "free" as the Internet. Especially here in the US, we basically have an oligopoly, so don't think you can just build something and "put it out there"... Everything you do will have a cost, and someone will have to eat that -- Either you or your customer.

</comment><comment><USER3> Carriers are making heaps of cash from SMS, no way its going to die soon

<comment><USER4> You're right, they don't want that cash cow leaving anytime soon. But when iPhone gets their act together and allow for background applications, it will be a death knell.

Even now, some of my friends will "ping" me with SMS and then we will switch over to GTalk to save our monthly messages, especially if we plan on having an extended convo.

<comment><USER3> Carriers will do everything they can to get your money have a read: [http://venturebeat.com/2008/08/13/google-ally-t-mobile- looks...](http://venturebeat.com/2008/08/13/google-ally-t-mobile-looks-poised- to-compete-with-apples-app-store/)

They will block apps in a heart beat that will deliver a cheaper way to pass massages.

Please remember that you (bparter) are the minority when talking about SMS

<comment><USER5> Maybe this is why Yahoo Messenger is not on the iPhone? A full iPhone implementation of YMessenger with the push notification would have the exact same functionality as SMS and more. You don't even need background processes for this!</comment></comment></comment></comment>


T-Koa: Node.js Koa Framework Written in TypeScript - <AUTHOR>
 Hi, everyone, I created the T-Koa framework, which presents Koa in TypeScript. Here is the Github Link: https://github.com/tkoajs/tkoa<p>Can you give me some advice or comments? Or help me spread it (T-Koa will get better and better!). Because this is my first time writing a framework using TypeScript, thank you very much for your help!<p>:) <comment><USER2> If it meets the guidelines, this might make a good 'Show HN'. Show HN guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)</comment>


H1-B visa and the need for reform - <AUTHOR> https://medium.com/@fwiwm2c/lets-talk-about-the-h1-b-visa-6e5d5def2b00#.cznxn16s7 <comment><USER2> Let's not mention the consistent gaming of classifications and salaries or the fact that Visas without a quick path to permanent residency are just a legal form of indentured servitude with all the perverse incentives and power imbalances you'd expect.

There shouldn't be a work visa that doesn't lead to a green card/permanent residency within two years. Anything less is merely legalized human trafficking.

<comment><USER3> How does this work in other countries btw? Can an american get a work visa and get permanent residency in EU countries with ease?

<comment><USER4> In Canada, you get an Open Work Permit as soon as you finish your degree. The length of the work permit depends on the type and length of the program. Once you get a proper job (full-time, related to your degree), you file for Permanent Residency, which if all checks out, takes around 6-8 months to process.

Source: did my undergrad in US, spent 5 miserable years on H1B tied to a single employer who kept delaying my PR application, because of which I couldn't travel freely internationally. Moved to Canada, finished my Masters, got my PR in 6 months. Now I can travel whereever I want. Thanks, Trudeau!

</comment></comment></comment><comment><USER5> There is no reference to lots of dubious universities exist only to have candidates from India/China. The students immediately get a CPT and start working at places nothing to do with their fields. They appear mostly for exams and some weekend classes and keep working full time.

Unless higher education criteria defined and universities scrutinized for bad behavior, most of the H1 abuse will shift to F1.

<comment><AUTHOR> That is a fair point - agree that there is no clear threshold on the "quality" of education provided by various universities. Thus admissions into the lower rung of universities is quite easy which can be exploited. I didn't want to get into this as it opens another can of worms on whether US universities should be certified to give an OPT period (which eventually becomes a stepping stone for H1-Bs).

Do you have any suggestions here?

<comment><USER5> Considering the problem has existed for long time and very smart people tried to find solution. I do not think there is really easy solution lurking around.

From my perspective US gives the best combination of features to a very large section of Indians who hold H1 visa. These are (relative)large american salary, a high quality 'Indian' lifestyle which includes large availability of movies, cricket, food etc and other assorted luxuries which in US are called middle class things but they are almost very top end luxuries back home.

The intersection of these features makes it very unique for Indians in US as compared to European/Canadian/Australian in US. If first world person get laid off, or decide to leave, it may be monetary loss but other things back home will compensate. But for most Indians it may a unequivocal loss in term of money and lifestyle.

The only solution I think is massive infrastructure improvement in India affordable at Indian salaries. This is very difficult to achieve. For now it is whining about traffic on US-267 or whatever in a luxury car vs 2-3 hr of soul crushing train and bus ride 1-way. So once things improve drastically back home people will have much less incentive to leave just for money.

</comment></comment></comment><comment><USER6> > Don't read too much into IBM, Accenture, CapGemini as being American > companies — all of them have very large bases in India and they use H1 visa > to get low cost Indian workers on the client side in US.

I've never seen anyone prove the claim that tech firms (or any companies for that matter) use H1B workers for cheap labor. Also, this paragraph is just garbage "Don't read too much into it..." as if we should just trust the author.

<comment><AUTHOR> Author here. Though IBM hasn't officially confirmed this themselves as they have stopped calling out the number of employees in each of their countries, but there have been several pieces out there corroborating the size of its Indian workforce exceed their US ones (and these articles are more than 4 yrs old when IBM US workforce was still large and the recent layoffs hadn't happened): [http://nypost.com/2013/10/05/ibm-now-employs-more-workers- in...](http://nypost.com/2013/10/05/ibm-now-employs-more-workers-in-india- than-us/) [http://www.computerworld.com/article/2493565/it- careers/in-a...](http://www.computerworld.com/article/2493565/it-careers/in-a- symbolic-shift--ibm-s-india-workforce-likely-exceeds-u-s-.html)

IBM, Accenture and CG make a large amount of their revenue from IT outsourcing [1] where their largest competitors are TCS, Infosys etc. They can't win the cost game without having a significant presence in India and getting some of their employees client side.

[1] [http://revenuesandprofits.com/how-ibm-makes- money/](http://revenuesandprofits.com/how-ibm-makes-money/)

<comment><USER7> > Don't read too much into IBM, Accenture, CapGemini as being American > companies —

Nitpick, but yeah, CapGemini is French ;)

</comment></comment></comment><comment><USER8> A simple solution: Auction the visas.

This will raise the price of foreign talent until it reaches a balance point so it will be more difficult to abuse the visa system to bring "cheap labor".

<comment><AUTHOR> This hurts folks from non STEM fields who are also entitled to H1-B visas..

</comment></comment><comment><USER9> The math facts aren't completely correct since we don't know the ratio of Advanced degree vs. non advanced ones.

Also the table includes transferred and renewed H1B, for which the cap does not apply.

What would be interesting is to know the number of _new_ H1B applicant of those big companies. Let's assume it's around 40k for the top 3 in that list: Infosys+Capgemini+Tata, and assume all Advanced degree seats gets filled, then there'd be 236-20 = 216k remaining applicants in the undergrad pool (Advanced degree gets 2 chances: one in the advanced degree pool, where 20k gets picked, then those who didn't get picked in that round fall back in the normal pool. Without knowing the ratio but assuming it's at least 20k Advanced degree applicants, the only thing we can conclude is that there is 216k remaining applicants in the Non-advanced degree pool).

With 65k seats, with I+C+T, there's a 65/216 = _30%_ chance of getting an H1B if you don't have a US Advanced degree. Now let's suppose we completely forbid I+C+T to get H1B visas, then there would be a 65/(216-40) = _36%_ chance of getting an H1B. It's an increase, but 36% remains pretty low.

This is an extreme example where we would completely forbid those to apply, if instead we limit them to 10k as the author suggest, the probability increase of people not in those companies would be even less important.

Regarding exempting the cap for those who studied in the US, I think that would be a great idea, as long as "fake" universities[1][2] do not exist.

[1] [https://en.wikipedia.org/wiki/University_of_Northern_New_Jer...](https://en.wikipedia.org/wiki/University_of_Northern_New_Jersey) \- This one is interesting as it was created by DHS as a bait.

[2] [https://www.nytimes.com/2016/04/06/nyregion/new-jersey- unive...](https://www.nytimes.com/2016/04/06/nyregion/new-jersey-university- was-fake-but-visa-fraud-arrests-are-real.html?_r=1)

<comment><USER10> There are already a few real universities of dubious value that profit from the current situation. I've seen former coworkers work 1-2 years after graduating, save up to be able to afford a Masters in one of those bottom tier universities, and they're now employed on OPT status.

</comment></comment><comment><USER11>
      Say Tata Consultancy Services (TCS) files for 13k visas for in 2016. If the total number of applications were 236k, then the expected number of visas TCS is going to get is (using probability) => (13,000/236,000)*65,000 = 3,580 visas

      Similarly, let us say a startup is filing for an H1-B for 1 of their employees. Their expected probability of securing the visa is => 1/236000*65000=0.27

      As you can see, the current lottery system favors the company which applies for the most number of visas.

How is this favoritism? Isn't the conclusion here just that everyone has similar odds and companies that apply for more visas will get more visas?

<comment><AUTHOR> Yes - everyone has similar odds. But if you are a large outsourcing company such as TCS (which has 350k+ employees), you would simply file a lot of H1-B applications to secure the maximum number of visas. And since the number of visas are limited, each visa you secure is one less that another company would have secured. A startup (which have far lesser number of employees) can't do that.

</comment></comment><comment><USER12> If "cheap labor" from H1-Bs can do your job, you need to get better at your job.

<comment><USER13> It's been predicted 50% of jobs are at risk of being done by robots, so surely cheap H1-Bs could do them as well. Are you saying 50% of people need to just 'get better'? Or that you should move your family to Mexico or some other low cost of living country, just so you can survive at a globally competitive wage?

Edit: I also find the attitude that Americans are SO GREAT, only the worst of them should fear being outdone by a foreigner, very arrogant and not based in fact.

<comment><USER12> Yes. We are not entitled to anything, including being protected from competition of robots and those living in a low cost country.

<comment><USER14> No, but we can vote for politicians who promise to reform or do away with the H1B program altogether.

Are you suggesting Americans shouldn't vote for their own interests?

<comment><USER12> You can try to delay the inevitable but you can't hide from competition forever, especially if you want to live in a country with capitalism.

<comment><USER14> It's not at all inevitable that we have to allow the hiring of mass amounts of immigrants.

Why do you think it's inevitable?

</comment></comment></comment></comment></comment></comment><comment><USER15> The article is good in the sense that it at least tries to consider pros & cons. However specifically from a startup point of view, H1-b is probably a not good fit anyway. Typically h1-b application process starts in Nov-Dec, from Feb-Mar, and the earliest someone who gets the visa can start is Sept. I doubt startups can wait for the minimum 6 month period for their new employees to join.

However the lottery system is indeed unfair for smaller companies.

<comment><AUTHOR> For a new student graduating from undergrad or grad course, the timing works out quite well - especially given the OPT period. Many times, you will notice that a startup literally doesn't hire a candidate from another country but hires international students studying in US universities - which is what I was trying to call out in the article.

</comment></comment><comment><USER16> It always cracks me up when I read H1B suggestions from people who weren't themselves H1Bs. They always focus on the intake, or on "gaming", or wage thresholds, or whatever the hell else their particular side of the aisle told them to worry about.

Yet this problem is in a dire need of a free market based solution. Let me explain.

H1B, for those who don't know, is the indentured servitude visa. While you can theoretically move between jobs, your next job has to match the one you had before nearly exactly, and you have to find it _before_ you leave your current job. Once you leave or lose the job you're currently on H1B for, you have to GTFO of the country in _two weeks_. I.e. if your employer finds out you're looking, and they fire you (which they can), you will have no recourse whatsoever. Same with them firing you if you ask for a raise or promo: GTFO.

You're in this limbo state until you get your green card, a lengthy process which for me took 7 years, and for someone from India or China would take even longer.

Companies abuse this power quite heavily by either not promoting/giving raises to H1Bs (because what are they gonna do, quit?) or hiring vastly more experienced workers into entry level jobs, or a combination of the two.

Here's what should be done to fix this:

1\. Make the grace period between jobs at least 6 months. If people are abused, they should be free to leave their job without leaving the country, and find their next job over a reasonable period of time.

2\. Make it possible for an H1B to move to another job more freely. Any job in the same industry should be acceptable. To make things fair to employers, require repayment of visa related fees if employee moves within the first year.

This alone would fix most of the problems you see on the ground today, including the problem of underemployment of fresh grads. Because movement of H1Bs will be unrestricted, they'll command "market rate". That Eastern European double PhD you hired for your entry level position will be able to move to a job that pays commensurate with her expertise, freeing up the entry level position for a fresh grad. The system will just be much more healthy overall.

However, this will never happen. All those tech CEOs who currently go on ad nauseam about helping people, all of them, without exception, want cheap fresh meat that's not going anywhere. And for as long as H1B existed, they were getting exactly that.

<comment><USER17> > However, this will never happen

As long as capitalists run the government and large corporations.

<comment><USER16> As an immigrant, I _came here_ for capitalism, and you will have a hard time persuading me that Venezuela should be our role model. :-)

</comment></comment></comment><comment><USER18> "Recently, Obama administration also passed a directive to allow the spouses of H1-B visa to apply for employment authorization (or the ability to work at any place). This is a great move as it again encourages more talented people, who are married, to come to US..."

This appears to be a "back door" to displace Americans from STEM jobs and going around the H1-B Visa program requirements and employment limits.

Immigrants should only be able to work STEM jobs in the US if there is absolutely nobody trained to do that job in the US which is the intent of H1-B. As it stands, it is a way for tech firms to depress wage rates and to displace Americans from jobs.

President Obama was serving elites that want to depress wage rates of American STEM workers.

As you might recall, there was recently a legal judgment against Apple, Google, .... for colliding to not try to hire each other's employees.

I hope the Trump administration clamps down on all of these ways that try to keep American STEM workers from receiving their fare wages.

<comment><USER19> Please stop talking about things you have no clue about. I have been in the US for 3+ years now on a H1B visa and during all this time my wife, who has an MBA, is not allowed to work here - which is absolute garbage. The change was the right one in the right direction, but not enough.

You also greatly overestimate the amount of competent people in the US. Most companies, like FB and Google and Uber, and not hiring from abroad because its cheaper. They are doing it because there are not enough competent people in the US to fill the jobs.

The companies abusing H1Bs are a different story, and those should be handled.

<comment><USER18> > "Please stop talking about things you have no clue about. I have been in the > US for 3+ years now on a H1B visa and during all this time my wife, who has > an MBA, is not allowed to work here - which is absolute garbage."

I have lived here all my life and you have lived here "3+ years" and yet you say I don't know what I'm talking about.

The intent of the H1-B visa law is clear: It is meant only for STEM workers when there is no American to fill the role. That's it. Period.

American employment should come first. Sorry if you don't like that, but you can always return to your country and maybe there your wife can find a job.

Do you know that there are Americans with MBAs that can't find jobs? Don't you think they should have priority over immigrants?

> "You also greatly overestimate the amount of competent people in the US. > Most companies, like FB and Google and Uber, and not hiring from abroad > because its cheaper. They are doing it because there are not enough > competent people in the US to fill the jobs."

Where's your evidence, because I completely disagree? You'll note that these firms you mention are not offering the same or higher wages for immigrants than Americans but lower ones.

I wonder if other's on HN believe as you do that there aren't enough competent Americans in STEM.

But since you're so knowledgeable, please cite the reliable evidence of this claim.

<comment><USER20> Just because you've lived in the US for all your life doesn't mean much when talking about something specific scient went through.

Note also, his comment addressed issues he perceived and solutions that would directly affect change in a positive way for you! Let me spell it out for you: if H1-B wasn't as restrictive, then companies couldn't abuse them for lower salaries, making Americans (in your view) more competitive.

Anyway, why _should_ American employment come first? How have you contributed to the country more than a random foreigner, by default? If anything, it _benefits_ a country to have immigrants (who it hasn't invested in) come and provide expertise for free! _That_ free expertise is what H1-B was/is for.

From this, it also follows that it benefits a country to make use of a highly qualified spouse of an immigrant.

<comment><USER18> > "Anyway, why should American employment come first?"

Because we are American citizens. Ask about any American and they will agree as will our President, that immigrants should not be displacing Americans from jobs.

This is true of about any country and I and most agree with this that citizens come first for employment. If there are no citizens to fill the role anywhere in the country, then by all means hire a immigrant.

Many firms could hire more competent workers by locating office where the competent workers live.

For example, Google has a huge office building in NYC and hires many New Yorkers. Microsoft, Amazon, Facebook, Apple do not have such a large presence in NYC for engineering as Google and that is part of the problem those firms may have in terms of hiring competent people.

> "So it follows that it benefits a country to make use of a highly qualified > spouse of an immigrant."

Your wife would be taking the job of an American. I'm sorry, but I don't see how that is a good thing. Maybe your wife can get a job in the country you are from instead of displacing American jobs.

<comment><USER21> >For example, Google has a huge office building in NYC and hires many New Yorkers.

You sound more and more like a closet xenophobe. I have multiple friends that work in that office. Majority of techies there are foreign born, although only a small percentage of them are on H1Bs.

<comment><USER18> > "Majority of techies there are foreign born"

Do you work in human relations at Google? Otherwise how would you know this. It hires many, many engineers.

The issue is the abuse of the H1-B Visa system to hire employees at lower wage rates than Americans. I have absolutely no problem with an H1-B Visa issued for its original intent which is in the case that there is no American to fill the job. Usually, there are Americans to fill the job, but the firm frequently doesn't want to offer the wages necessary to employ them.</comment></comment></comment></comment></comment></comment></comment>


Make Your Own Programming Language - Pirate-of-SV http://mattias-.github.io/2015-01-03/DIY-Make-Your-Own-Programming-language/ <comment><AUTHOR> Great post. Recently I wrote an interpreter for Scheme using Haskell using the guide "Write Yourself a Scheme" [1]. It was great fun, and it seems that it will be fairly straightforward to write a new domain-specific language using Haskell, using the same principles. That said, it was never clear to me how something like that would work in a non-purely-functional language, and so the fact that the OP used Rust is very exciting.

[1] [http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_H...](http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours)

<comment><USER2> This is a great tutorial, although the one complaint I had was the errors in the pdf version (can't remember the specifics).. took me a while to realise the html version was far superior.

Regardless of my complaints, it was an interesting experience.

<comment><AUTHOR> Yes, I came to the same realization. One of the problems I had with the pdf version was that the flags given for compiling the program did not work correctly for my version of GHC.

<comment><USER2> That rings bells, but I think there were some others too - _sigh_ my memory :/

</comment></comment></comment></comment><comment><USER3> I started making a language a few months ago. I found Douglas Crockford's parser from his Top Down Operator Precedence paper pretty useful, which is here: [http://javascript.crockford.com/tdop/index.html](http://javascript.crockford.com/tdop/index.html)

When looking for resources on making toy languages, most of them said not to bother with a parser and use a pre-built solution. I think they're probably wrong - the parser is actually pretty easy (relative to the rest of the process of getting a language working) and at a stretch, fun.

<comment><USER4> The more you do yourself, the more you will learn. If you're just learning and not trying to build the next big programming language, try and do some of the low level stuff yourself. Write a parser, write a garbage collector and a virtual machine, re-write the compiler in the language itself. Go hog wild.

<comment><USER5> > The more you do yourself, the more you will learn.

This is true _once you complete the project_ , but it seems like it can be dangerous: if you start off your mission to make a programming language by soldering components on a breadboard, say, then, you will learn something, to be sure, but you will probably get so embroiled in preliminaries that you will never learn what you _intended_ to learn. (Of course, sometimes learning something other than what you intended is a good thing ….)

</comment></comment></comment><comment><USER6> The author appears to have added a CNAME since this was posted to HN. The updated URL is [http://blog.ppelgren.se/2015-01-03/DIY-Make-Your-Own- Program...](http://blog.ppelgren.se/2015-01-03/DIY-Make-Your-Own-Programming- language/)

</comment><comment><USER7> Server not found error when connecting. Tried removing the "-" but didn't work neither.

<comment><USER8> Apparently the hyphen isn't there by mistake. Here's the blog source repo: [https://github.com/Mattias-/Mattias-.github.io](https://github.com/Mattias-/Mattias-.github.io)

Are you perhaps using a browser or a DNS stack that rejects this type of domain name?

<comment><USER9> The question should probably be: which OS are you using?

It's quite interesting... dig seems to resolve the domain just fine, but neither chrome, curl nor firefox seem to be able to open the page. (tested on Fedora/CentOS/Android)

<comment><USER10> Same here. My dnsmasq server responds with the domain name when I try it with 'host', but curl and firefox fail on Debian and Ubuntu with only that 1 DNS server in resolv.conf. Curl says "curl: (6) Could not resolve host: mattias-.github.io".

However, curl and firefox seem to be RFC-compliant. RFC952 states: "The last character must not be a minus sign or period."

</comment></comment></comment></comment><comment><USER11> Nice article, inspired me to invest time in the future to learn Rust.

Also working on JavaScript native compiler + developing a new language on top as subset for JavaScript: [https://github.com/InfiniteFoundation/dopple](https://github.com/InfiniteFoundation/dopple) (front page info is outdated though).

</comment><comment><USER12> After writing a lexer, parser, compiler and virtual machine in C++ and ported parts to Python, Java and FreeBASIC - I think this is a good starting point.

Most of the concepts are pretty simple - it's when you get into if/while/for statements. Especially if you have nested if/while/for statements. Conceptually easy to implement using recursion but during the compilation phase keeping track of where you are at can be...difficult. I'll be the first to admit my implementation sucked but it worked.

</comment><comment><USER13> Let's add the next thing I won't have time to play with. Anyway, this is a great post and I look forward to the whole guide. Keep it up!

<comment> Pirate-of-SV Thank you! If I can at least make one person interested I'm happy to continue.

</comment></comment><comment><USER14> Fun!

I've been working on Python-like systems language with a compiler in Python targeting LLVM IR, and it's been cool (though so much work to get a halfway usable language!).

[https://github.com/djc/runa](https://github.com/djc/runa) if anyone's interested.

<comment> Pirate-of-SV Did you create an interpreter for the language before you started on the compiler? I think it's not much overhead and you can run tests with it to make sure you get all the lexing and parsing done correctly. Then you just replace the evaluation with code generation and BAM! you've got a compiler.

<comment><USER14> No, I didn't. For my language, being compiled down to machine code has been one of the design goals. Also, it doesn't seem to me like building an interpreter is significantly simpler than building a compiler (at least given the fact that I've left a bunch of the hard stuff to LLVM magic). LLVM IR isn't that hard to write.

</comment></comment></comment><comment><USER15> I would argue that this statement is a mistake that should have been foreseen: "negative integers isn't literals!" Specifically, twos complement signed integers will be a bitch of you continue down that path.

<comment><USER16> On the other hand, having negative integers as literals will cause even harder problems with subtraction (as in "2-2")

<comment> Pirate-of-SV In a language like C the parser is going to try to parse Expr - Expr but not Expr Expr since there's no such construct in the language to put two expressions after each other.

</comment></comment></comment><comment><USER17> Wow. I'm sure I've seen Rust before (in fact, I have it installed) but I'm just surprised how similar it is to Swift.

EDIT: s/is/looks/. I meant the syntax.

<comment><USER8> The design of Swift was influenced by Rust. However, most of the resemblances are superficial or relate only to areas where Rust in turn was heavily influenced by other languages. For example, Rust's memory management model could not work in Swift (because this is an area where Swift remains compatible with Objective-C).

</comment></comment><comment><USER18> I started one a while ago, but I became fascinated by the "middle end" and bought a compiler textbook. Now I have SSA optmizations but no strings still.

</comment><comment><USER19> Very interesting read. I am myself writing a series on the same subject and I was pretty inspired by your way of writing. Your article is paced a lot faster than what I have written so far and I really like the style.

I submitted my own posts to HN also, but I did not get the same attention as you did, congratulations!

I'm looking forward to the next iteration ;)

</comment><comment><USER20> Great read! An effort on a DSL using PLY (Python LEX-YACC implementation): [https://github.com/georgepsarakis/quick- bash](https://github.com/georgepsarakis/quick-bash) .

It is actually a transcompilation to Bash from a functional language, using Python for the intermediate processing.

</comment><comment><USER21> I started creating a language by myself a few days ago, this is a great read. Thanks!

<comment> Pirate-of-SV Nice, what kind of language? I think nice beginner languages are Query languages (like SQL) or markup languages (like Markdown).

<comment><USER21> I'm aming for a scripting language that is a sort of mix between Lua and Go. The project is currently very overambitions, but it is fun! :)

</comment></comment></comment><comment> jmcdonald-ut This was a really cool read :). I'm working on my own DSL for generating code. I'll make a Show HN soon, but it was really cool to see someone else doing something so similar.

<comment> Pirate-of-SV Nice what kind of code is it going to be used for to generate? A specific language or something more generic.

It would be cool with a DSL to generate low level code like X86 ASM, LLVM IR or JVM bytecode. That would be so meta!

<comment> jmcdonald-ut Heh, not so complicated. It's just used to generate boiler plate code. Kind of like data object files in C#, Java, PHP, etc. That would be really cool though :).

</comment></comment></comment><comment><USER22> whitespace sensitivity is a pretty big pain to deal with in the current toolkits available for building out a programming language, unfortunately.

The pain is compared to the absolute and total simplicity of defining a grammar when you're in a whitespace-insensitive setting (parser generators are easy to express and efficient in deterministic grammars).

We have a lot of good parsing tools out there, but we might be missing the right tools for building out good lexers

</comment><comment><USER23> I'm getting started with LLVM, Just downloaded the source and now wondering how to go about things.

</comment><comment><USER24> It would be cool if we could add a "Rust" tag to this entry. I almost didn't give this link a second look because I thought it was an older link. Glad I did give it a second look.</comment>


People labeled "smart" at a young age don't deal well with being wrong - <AUTHOR> http://www.theatlantic.com/education/archive/2015/06/the-s-word/397205/?single_page=true <comment><USER2> Shocker.</comment>


Ask HN: Is there an open standard to replace SMS online? - <AUTHOR>

I think that XMPP is great for instant messaging but doesn't really reflect how people use communications most of the time which is basically asynchronous messaging. Is there something to replace SMS/MMS and be open like email? I feel like Apple, Google and Facebook are trying to control the space right now with iMessage, Hangouts and Messenger respectively <comment><USER2> Whats wrong with email? Everyone has a mail address, it is free and a well understood protocol. ( The only potential problem I see is, that mail clients are perhaps too heavy in comparison with SMS or IM.)

<comment><AUTHOR> Yeah, I think it's a design problem in some ways. Also having the distribution be fast enough so that way it can be almost real time chat would be important.

<comment><USER3> If distribution has to be fast, then what's wrong with XMPP?

<comment><AUTHOR> I feel that XMPP is difficult and doesn't work with mobile as well. I was more thinking on the lines of being able to support GCM and APN

<comment><USER3> You know that GCM and APN are built on XMPP right?

<comment><AUTHOR> I did not. That's really cool!</comment></comment></comment></comment></comment></comment>


Why Your Links Should Never Say "Click Here" - <AUTHOR> http://uxmovement.com/content/why-your-links-should-never-say-click-here/
<comment><USER2> Bad advice, in my experience.

Anecdotally, I did a website recently for a carpet cleaner. Standard wordpress job with his services and things. At the top of the home page, he wanted a link to a form for redeeming living social coupons, which, not wanting to say "Click Here for", I just made as "Reedem Living Social Coupon".

It turned out after a couple weeks that many of his users were not clicking "Reedem Living Social Coupon", but clicking the "Contact Us" link. As a quick fix, I renamed the link to "Click Here to Redeem Living Social Coupon" and bolded the text. He mentioned a week later that this had a noticeable improvement in people clicking the correct form.

People who use the web for scheduling carpet cleanings are not always the same as the twitter crowd. You need to remember who your audience is, not what all your programmer friends prefer.

(And for some closure, I ended up adding a "coupon code" optional entry on the generic contact form for people who still clicked the wrong one anyway.)

<comment><USER3> My cofounder has had similar experiences. I don't have the data handy, but last time I grumbled about a "click here" he told me about a couple of times he A/B tested it and got substantial wins.

I still wouldn't use "click here" in normal writing (e.g., a blog post); I think it's unnecessary and a bit gauche. But I'm happy to do it on landing pages and other places where I really do want people to click there.

</comment></comment><comment><USER4> I've tried to abide by this rule for most of the 17 years I've done web development. There is, however, an exception to this rule: My mom.

My mom (and my dad) belong to the group that - even after a decade of daily computer use - frequently fail to recognize distinct interface elements. They seem to have no general concept of the look / purpose of a link, a window, a modal box etc. Colors and chrome are meaningless to them, but text that says 'click here' is the best of UX there can be.

I've noticed that many web publications that cater to non-savvy users tend to stick with the 'click here'-pattern.

<comment><USER5> "My mom (and my dad) belong to the group"

As a matter of fact I spoke to _your parents_ the other day. They asked me if there was a space between the first and second word of my domain name. They also didn't understand that you can't just send an email to _domainname_ you need an address at _domainname_. They didn't know what a browser bar was they just type my domain name in google and go from there.

In all seriousness you raise an excellent point.

It would be interesting if there was some data and metrics to backup the web saavyness of various audience types and how a particular link style impacts those groups. What works with one group might be a detriment in another group.

<comment><USER6> I think in general, if you are targeting the "general public" or an audience you know is probably not tech-savvy, you're better off with links that say "Click Here" or actually using buttons.

</comment></comment></comment><comment><USER7> Even though the advice is from 2004, useit.com's article "Guidelines for Visualizing Links"

<http://www.useit.com/alertbox/20040510.html>

appears to offer more user-friendly advice (perhaps because it is based on more thorough usability research) than the advice in the article kindly submitted here.

The Top Ten Mistakes in Web Design" article

<http://www.useit.com/alertbox/9605.html>

(updated 2011) says one of the top ten mistakes is "3. Not Changing the Color of Visited Links." I have to agree.

</comment><comment><USER8> This is a fantastic article, and the first time I've ever come across anything addressing these issues.

The only thing I don't entirely agree with is:

1) Wrong: "first Falling Bear _gets run over_ " 2) Right: "first _Falling Bear_ gets run over"

I think they're just different. In the first case, I expect a link to to a photo of Falling Bear as he's getting run over. In the second case, I expect a link to a page on Falling Bear, that may have nothing to do with when he was run over.

But I think the distinction is important to make.

<comment><USER9> I think Wikipedia has done a first class job of destroying peoples trust into "nouns as links". They mention a blog entry in a Wikipedia article, but of course clicking blog just takes you to the Wikipedia article on blogs, instead of the actual blog in question (which you then have to find through the references).

Guaranteed confusion every time.

<comment><USER10> I bet the more common and more frustrating experience has been the ad services that auto-inject hover-ads into common nouns, such as "loans" or "books"

</comment></comment></comment><comment><USER11> The problem is that the article seems to give advices based on the personal opinion of the author and has no data to test his theories. By testing different versions on my web sites I often got better results from "ugly formulations" like "click here to order" than something "pure" that has no call to action. What I found was the most important is that the context must be clear and descriptive of what the user will find the other side of the link but also contain some call to action.

<comment><USER12> I think this may be an important point, but it makes me wonder if "click here to order" would be less effective than "order today." Certainly the latter contains a call to action and perhaps a better one. Again it's a question but one which I have not studied in terms of user behavior.

<comment><USER13> The former is a simpler more immediate action that is easier to induce.

<comment><USER12> The second is more imperative.

As I say, I don't have data on this, but it would be interesting to study.

<comment><USER14> IMHO introducing a time dimension might be contrary to the goal. 'today' means later in the day perhaps (==never, acutally). You could use 'now', but it would still induce a reflection on doing it now or not. Just 'order here' feels like less to parse and less ways it could go wrong.

</comment></comment></comment></comment></comment><comment><USER15> I agree with almost everything in this post, philosophically and intellectually. However, any usability study I remember seeing on this subject has always concluded that "click here" converts better. So until they back up any of their suggestions with data, this article gets relegated to pure brain fodder.

Edit: And I'm sure conversions would probably also depend on the demographics of your user base, so I'd be interested in seeing that included as well.

<comment><USER16> How do we change these behaviors if we don't lead users to it as an industry? Do you want to make the web a better place or just raise your conversion rate? I don't know if there is a "right" answer.

<comment><USER17> I think its pretty arbitrary to claim that "changing these behaviors" would "make the web a better place".

I think if people think and react in a certain way, there is nothing wrong with that, and web design should evolve around how people act as opposed to the other way around.

Then again I don't work in either any sort of UX or web development, so maybe I should keep my mouth shut here :)

<comment><USER16> Yes it is arbitrary, but it's a claim many people have made in this discussion previously. I'm just reiterating it here.

I don't however see how changing these behaviors would make the web a worse place.

<comment><USER17> To what extent do you think its possible to change behaviors like this? That is to say, to what extent do you believe people's reaction to this sort of stuff are innate human behaviors and reactions, and how much is learned through interactions to UIs and can be relearned?

And I agree, I don't see how changing the behaviors would make the world a worse place, but I think if you want to make a case for having the entire industry lead users to certain behavior patterns, an argument should be made for why this is actually improving the web, beyond one person's aesthetic preferences.

</comment></comment></comment></comment></comment><comment><USER18> I've run a bunch of tests on this with 100,000+ email users. In nearly every test, we found that varying the copy of the text link from "Click Here" to "Join Now" or "Get the Video" or "Buy Now" or a bunch of other copy...made almost no difference.

</comment><comment><USER19> I think this example ([http://uxmovement.com/wp- content/uploads/2012/06/clickhere_n...](http://uxmovement.com/wp- content/uploads/2012/06/clickhere_nouns.png)) is absolutely awful. Many websites style text in many ways, if you're going to refuse to have "click here" (or any other call to action) then you absolutely must stick to common patterns: links being blue and underlined.

<comment><USER5> Not to mention that many things (even if styled correctly) that look like links are actually those "vibrant" pop up ads.

</comment></comment><comment><USER20> I'm surprised that no one appears to have mentioned the main reason I was always taught not to use "click here".

From W3C: <http://www.w3.org/TR/WCAG10/#gl-facilitate-navigation>

"Link text should be meaningful enough to make sense when read out of context -- either on its own or as part of a sequence of links."

This is especially true when you consider users who use screen readers.

</comment><comment><USER21> Good post, but it would be more convincing with data. At this point, it seems like the blog post is based on your intuition. None of us have great intuition as to what 90% of web users are doing.

<comment><USER22> I agree, there are a lot of things here that come off as just opinion or speculation but doesn't give any reasons for _why_ that hold up to firm scrutiny. An example:

* Doing so diminishes their experience of your interface because it momentarily takes their focus away from it. Instead of focusing on the interface and its content, "click here" diverts their attention to the user and their mouse. Not to mention, you can also make them feel dumb by suggesting that they don't know what a link is or how to use a mouse.*

Based on what? At this point in time, very few people think about the actual action of moving a mouse and clicking a link, they just do it. It is now an innate action

however

you have to keep your audience in mind here. That second paragraph about making your audience seem dumb? Well what about the group of people who almost never use a computer, the elderly or those who are just not around machines as often? They might read a linked word and think it's something completely different. Telling them to click here engages in the mind "There is more relevant information on the next page".

</comment></comment><comment><USER23> It's more than just links. Anything you want the user to interact with should be self-explanatory.

Buttons shouldn't say yes/no or ok/cancel. They should describe the actual action. "Leave this page" or "stay on this page", "Remove from cart" or "keep in cart", and so on.

<comment><USER8> I'm not convinced -- I find the Vista dialogs really confusing for that reason.

First, I read the question, "Do you want to save this file?"

Then I naturally expect "Yes", "No", "Cancel" -- effortless to understand.

If I see "Save this file", "Don't save this file", "Return to application", it takes a lot longer, because I have to parse each button, which is redundant and annoying since I' already parsed the question.

The only time I've found longer button names to be useful are in rare non- intuitive situations, like when copying files into a directory with files of the same name, and there are multiple options you can take.

<comment><USER23> There shouldn't _be_ a question if it's only going to repeat what your dialog options say -- you don't ask "do you want to save?", you just put up "save file", "exit without saving", or "return to program" without any question at all.

Also, yes/no/cancel are only "effortless" to understand if you read the question first (not everyone does that) and if the question is simple.

An example of doing it wrong: my classroom had an unstable piece of software that would occasionally pop up a long error message that asked "do you wish to continue?" at the end; students wouldn't read the whole thing, but would just click "no", which closed the software.

If the same popup had the error message and then buttons marked "continue" or "close program", it would have been far more straightforward.

<comment><USER24> Similar issue: dialog boxes which ask a question using words like cancel, continue, yes, no, or okay, when the question is followed by buttons using similar or identical words, but whose meanings are the opposite of the question.

Example from a commercial site:

        Are you sure you want to cancel the changes you made?

        [ ] OK   [ ] Cancel

To clarify, 'OK' is "cancel the changes" whereas 'cancel' is "cancel the cancel" :-(

If the dialog question were worded as:

        Do you want to apply the changes you made?

        [ ] OK   [ ] Cancel

with the appropriate logic reversal, it would have been clear.

I view sites with issues like this as I would a corporate office with damaged or out-dated signage - a hint that the products or services offered inside are unlikely to be any better in quality.

</comment></comment></comment></comment><comment><USER25> Without data it's hard to agree with these "conclusions"

At very least if you are planning to change around your links based on this article give a look to Dustin Curtis' data-driven experiment on changing link names:

www.dustincurtis.com/you_should_follow_me_on_twitter.html

<comment><USER13> Every idiot already copied Dustins conclusion and ignored his research. This article deserves an award for the most intelligent thoughtful accurate article that broke the web because its readers are idiots.

<comment><USER26> Not sure why you're getting downvoted, every time I see the obligatory "You should follow me on Twitter" at the end of every blog post or Dribbble submission, the last thing I want to do is follow that person on Twitter. Commanding someone to do something they might not have done otherwise is neither friendly nor approachable and I'm much more likely to click on the Follow button in the sidebar once I'm done reading a few of their entries and getting a more thorough idea of who this person is than the one at the bottom of a single post.

</comment></comment></comment><comment><USER27> I've been a firm "eye-roller" at this idea for a long time. My boss often uses terms like "call to action" and has me change text because he feels it might "confuse" people. I do it, don't get me wrong, but I give an extra strong roll with my eyes as I'm doing it.

I get that there really are dumb people out there, but if "submit" confuses you when you are "submitting an application" (of which the button is "submit your application" rather than "submit") you might not get the job. Likely so even if you are applying to McDonalds.

This article though... Almost turns me to his side, at least on this topic. Nice read.

<comment><USER28> Your statement 'there are some really dumb people out there' could also be phrased as 'there are some really smart people out there who have better things to do than surf the Web all day' and just want to get to the information they are looking for without having to decipher an interface.

<comment><USER27> When you have to "decipher" the difference between "submit" and "submit your application", smart is not a valid descriptor.

edit: I guess I should state that I'm describing the submit button on an actual form, with the title "application" or some such and that the user is entering in data (a lot in this case) and that "submit" is pretty much industry standard for forms

</comment></comment></comment><comment><USER29> Click here to read why you should probably ignore this advice: <http://www.marketingsherpa.com/article.php?ident=30124>

I believe people process text faster than they process visual cues like fancy icons or underlined anchor links. "Click here to view demo" seems to be faster to process, and more explicit than a fancy "View demo" hyperlink (CSS re- styling of links does not help in that respect). This is pure speculation of course, but one might try to do the reaction-time experiment.

</comment><comment><USER30> D Curtis' A/B testing data does not support this:

[http://www.dustincurtis.com/you_should_follow_me_on_twitter....](http://www.dustincurtis.com/you_should_follow_me_on_twitter.html)

<comment><USER31> Amen! From a marketing point of view you're 100% correct. In marketing this is known as a "call to action". This is why all of the terrible meme graphics on facebook say "share this" -- while the usability "expert" may hate this it works. And honestly I may dislike it, but it's not about me -- it's about the user.

</comment></comment><comment><USER32> While semantically this makes sense, and aesthetically it's preferable to some, I would guess that it really doesn't align with actual human behavior.

Theory: When you want someone to do something, they will do it more often if you tell them to than if you just hint at it. When people read text, they assume someone else has written it and subconsciously invent a small narrative in their head. If this narrative tells them to do something, they are more likely to do it than if the narrative just lets them know something exists. And that's essentially what we're getting at. What this article is supposing is that, people will more likely do something if you let them know it exists than if you tell them to do it. I sadly disagree. Am I going to put 'click here' on my own sites? No, it seems kind of trashy and turn of the century. But there is a legitimate use for it.

</comment><comment><USER33> So this advice is as old as the Internet hills.

Does anyone actually have strong evidence supporting it (i.e. quantifiable UX studies)?

I've always found the reasons given for this kind of thing rather vague and arguable:

\- Don't use click: I really doubt users care

\- Don't use 'here': fine, being specific is good where you can

\- Link to nouns: seems arguable. Surely if you're linking to a bear then use the noun. If you're linking to a bear getting run over, 'getting run over' is the action here, and should be the link, _especially_ if you have more than one action to link to.

\- Link to specifics: yeah, you already said that one.

\- End on a link. Hmm.. I'd need to see numbers to believe it

</comment><comment><USER34> Did the author A/B tested this?

<comment><USER35> Nope. Nothing on uxmovement is ever backed up by any data, just vague assertions. The worst part is that they always frame their articles as "why X is true", but then the article is essentially "x is true because x is true".

<comment><USER26> Wish this was its own comment and was upvoted to the top. I stopped going to UXMovement after the author continually attacked visitors in the comments section that questioned his posts to the point of calling them assholes and idiots. He seems to just post his own assertions about what UX is without any valuable data points.

</comment></comment></comment><comment><USER36> I was going to mention SEO and use the example of googling for "click here", but I was surprised how the wikipedia article on the phenomenon in the OP ("Mystery meat navigation"[1]) actually managed to make it to #3, amidst downloads for Acrobat Reader, QuickTime, Java runtime etc. How did Google manage that? I'm impressed.

[1] <http://en.wikipedia.org/wiki/Mystery_meat_navigation>

<comment><USER13> Google downplays link text after the "miserable failure" incident, and only that Wikipedia page has the search keyword on the content page itself.

</comment></comment><comment><USER37> See also the classic advice from the w3c: <http://www.w3.org/QA/Tips/noClickHere>

<comment><USER13> That's very bad advice that misunderstand the distinction between objects and actions and is completely uninformed by psychologically or marketing insights. It's fine for a semantic Web for robot archivists, but poor for human users.

<comment><USER37> Care to clarify what you mean by the "distinction between objects and actions"?

If you mean actions within a web application that cause something to happen, then the w3c didn't misunderstand that at all; they simply didn't take it into account because the web at that time didn't have nearly as much of that as it did hyperlinked static content.

Apart from that, the w3c wrote that advice for for people intending to construct a useful hyperlinked web of information, not for people building deliberately manipulative copy. Consider the target audience.

</comment></comment></comment><comment><USER38> Ive begun writing "Press here" and not "click here" since you cant really click with the ipad/iphone - lets see how that turns out

<comment><USER39> I can think back to the age of onion belts and when "press" _was_ the dominant verb form to refer to activating a button; I'm not sure when that changed.

</comment></comment><comment><USER40> I think it is a practice that probably should fall out of favor but this article is really a great example of what I call "UI designer babble." UI or UX is like the new vogue, designers are the hottest commodities, or so they tell you. They want to give you all this "scientistic" basis for all of their claims but it just falls flat. So here we have: ""Click" Puts Too Much Focus on Mouse Mechanics." Really? When you see a link that says "Click Here" are you really focusing on "mouse mechanics."

If you want to say "click here" is unnecessary and you'd do better by providing a more specific call to action, fine. But don't try to tell me you are using some kind of sophisticated psychology to divine the text of links. Maybe if you had provided a study that used CAT scans or something that show that but honestly that probably just be silly and pedantic.

</comment><comment><USER41> I love uxmovement.com, always fighting the good fight for academic purity (eg. "things should work this way") instead of practical reality (eg. "this is how it really works").

Hopefully they're only 5-10 years ahead of everyone else; imagine the SEO juice they'll have then!

</comment><comment><USER42> It's stupid and ugly, but I've seen studies before where click here simply got more clicks. It's simply more effective to tell people straight out to click something, than to hope they pay enough attention to an underlined noun and have enough interest in it to investigate it without any prompting, etc..

This blogger has mentioned before that he sees no reason to A/B test because he thinks an experienced designer knows better anyway. So I can totally see him recommending something that performs worse in an A/B test like this.

</comment><comment><USER43> This is wrong advice If you are trying to get more people to click. My experience from having Done more banner than I care to remember is that it increases click rate .

</comment><comment><USER44> I think the "here" habit also has to do with cases in which the CSS has failed to demarcate the link from the rest of the text.

The article gives some good advice, but I think it's always worth considering that links should be emphasized in the context of both HTML and CSS (and static images and any JS magic).

Although I think the word "click" should not be a part of any link in 2012, you shouldn't follow this guide unquestioningly in other regards.

</comment><comment><USER45> Fantastic article. That sure, I'm not sure linking purely to nouns is any better than linking purely to verbs. If you're going to make the argument about lack of information, the lone nouns are almost worse, as they don't say _what_ is happening, especially for something like a video. I'd say link both the noun and the verb.

</comment><comment><USER46> Old people don't understand you can click on things, if it's a brick and mortar business that caters to all age groups there must be every indication that a clickable element is clickable. Easiest way is to tell it like it is, or draw some sort of mouse pointer on it.

</comment><comment><USER47> I think this is great advice, but I've been spending a lot of time with my grandparents and although they're only using computers more every day, they definitely do NOT know know what a clickable link is and what to do with it.

</comment><comment><USER48> The author has a point, but 'click here' is reliable for a lowest common denominator call to action. Using it is usually better than trying and failing to come up with a more effective contextually appropriate phrase.

</comment><comment><USER49> I die a little inside when I see a "click here" link.

</comment><comment><USER50> Your links should be tested and you should probably use whatever achieves your goals the best (whether excellent UX, or clickability)

</comment><comment> tea-flow Actually, after the recent Google Penguin update you might want to think about using more 'Click Heres' than you did before...

<comment><USER13> Link with details?

</comment></comment><comment><USER51> This advice is so old, what's next, an article on top of HN on why you should never use tables? ...

</comment><comment><USER52> Also, "click" only makes sense with a mouse. Touchscreens are here to stay.

</comment><comment><USER53> This is exactly what I needed to read today. Thanks :)

</comment><comment><USER54> Oooh Netiquette!

</comment><comment><USER55> Data please.

</comment><comment><USER13> Slashdot had an excerpt section "links in this post". It was ridiculous to see the list of links: "writes", "here", "now", "this article"

</comment><comment><USER56> Why You Should Never Say "UX" For User Experience</comment>


2012 Corruption Perceptions Index - <AUTHOR> http://www.transparency.org/cpi2012/results <comment><USER2> Is corruption actually the problem?

Perhaps nations with high levels of corruption are lacking basic legal institutions that tend to allow open market economies to function effectively. That is, corruption is simply a side-effect of institutional deficiency.

Chris Blattman ([http://chrisblattman.com/2012/11/05/corruption-and- developme...](http://chrisblattman.com/2012/11/05/corruption-and-development- not-what-you-think/)) says: "Most of us fail to imagine that corruption can also grease the wheels of prosperity. Yet in places where bureaucracies and organizations are inefficient (meaning entrepreneurs and big firms struggle to transport or export or comply with regulation), corruption could improve efficiency and growth. Bribes can act like a piece rate or price discrimination, and give faster or better service to the firms with highest opportunity cost of waiting."

Likewise John Wallis (<http://www.nber.org/chapters/c9977.pdf>) wrote an informative economic history paper about American corruption in 2006. The conclusion? "No society with a systematically corrupt political system has limited government. The economic system is always at risk, entry is limited, competition is fettered, and economic policies are shaped by politicians to maintain their political control of the government. Crony capitalism is not a manifestation of venal corruption—it is a symptom of systematic corruption."

</comment><comment><USER3> [http://upload.wikimedia.org/wikipedia/commons/b/bc/GNI_PPP_P...](http://upload.wikimedia.org/wikipedia/commons/b/bc/GNI_PPP_Per_Capita.png)

$

"Corruption" is a structural aspect of our system. It is inherent in the relationship between government, money, and people (in their current forms).

</comment><comment><USER4> What causes the US to be (or at the very least, be _considered_ ) so corrupt? My main theory is lack of political parties. Just like how companies take advantage of the consumer the most when they're a monopoly, the government can take advantage of its people when the party's worst chance of getting elected is close to 48%. However, I'm sure there are many other factors that play into governmental corruption.

<comment><USER5> Since this is a perception index, I think isolation has a lot to do with it. Americans don't travel much, our news generally ignores countries we're not bombing, etc, and so Americans have very little frame of reference for this sort of judgment.

I personally marvel at what an upstanding and civil government we have, but then again my family is from Bangladesh and we left because my dad was sick of having to do things like pay a bribe to get a phone line installed (we went months without phone service in our house because of his intransigence).

<comment><USER6> I think you're exactly right. We have a strong, visceral reaction to corruption, and we detect it in everything.

Living in New Mexico can be a bit of an absurd illustration that this isn't a universal view because we tend to have scandals involving these ancient political family dynasties. Whenever one of them is caught handing over a bunch of state contracts to their nephew (nepotism in its truest sense) we get a few great sound bites like "What's the big deal? He's just my nephew!"

In other countries this kind of corruption is seen as simply taking care of one's own or the cost of doing business. I'm glad we overreact to it.

<comment><USER5> I think it's a good thing too. One of the things I love about Americans is that we're culturally very intolerant of corruption and scandel. I just find it amusing sometimes how people don't know how good they have it.

</comment></comment></comment></comment><comment><USER7> The infographic is not very informative because you can't tell if 100 is bad or good at a glance. Sure, "red" usually means negative. But yellow means?

Also in this case since 100 is "good" it's confusing because again, on the initial read people will think, "This country has a score of 65, does that means 65% corrupt?" (whatever 65% corrupt means, maybe 65% more corrupt than other countries)

<comment><USER8> It helps to have some context. Being moderately aware of global politics, I know that Russia is considerably more corrupt than the United States. Russia is reddish; the USA is yellow-ish. The rest I can figure out, and the numbers and labels make it all a bit more quantitative.

To be fair, the infographic could be better, but I think all the information is there and relatively easy to parse, so calling it "not very informative" is a bit extreme.

<comment><USER6> There's a hilarious scene in _Travels in Siberia_ where the author takes a trip to the Russian far east with a retired couple from California with extremely exacting dietary restrictions. At one point the old man is complaining loudly about all the money he spent on food and lodging—what did it go to? The author replies calmly: bribes. When they finally pass through Russian customs at the end of the trip, he complains to the Russian customs agent, saying the author told him most of the money for their trip went to bribes. The customs agent replies calmly: yes, probably.

</comment></comment></comment><comment><USER9> I did not know that Venezuela was perceived as being so corrupt. I certainly would not have ever thought it to be perceived lower than many african countries. Is it really that much crazier there then other south/central american countries?

<comment><USER10> Well... yes. I mean don't you really know that Chavez has been stealing businesses and companies and giving them to accomplices? The Chavez "nomenklatura" has taken hold of the country and been pillaging it for quite some time. The crime rate is exploding, there have been shortages of food and energy. It is a collapsing country.

<comment><USER9> I did know about Chavez but did not realize it was to the level of Congo/Zimbabwe/Libya being more desirable.

<comment><USER11> At the low end, I'd guess it's probably more about measurement techniques than reality. Venezuela is not the most stable, prosperous, or wealthy society, but it's also not "hyperinflation and broad property seizure", and it's certainly not "armed gangs wandering the country raping and murdering indiscriminately."

<comment><USER12> Venezuela's inflation ->

<http://www.tradingeconomics.com/venezuela/inflation-cpi>

You can search other sources...

Venezuela's crime ->

[http://www.youtube.com/watch?v=i2uoMlBvp2k&feature=youtu...](http://www.youtube.com/watch?v=i2uoMlBvp2k&feature=youtu.be)

<http://www.youtube.com/watch?v=uMP44VR9J-M>

<http://www.vice.com/vice-news/venezuela-body-count-part-1>

[http://www.dailymotion.com/video/xtjiwd_extreme-world- venezu...](http://www.dailymotion.com/video/xtjiwd_extreme-world- venezuela_news)

<comment><USER9> Watched the vice video which confirms my thoughts (Venezuela should have been ranked much higher).

Please watch the below, which shows congo (which ranked higher than venezuela in this study) :

<http://www.vice.com/vice-news/the-vice-guide-to-congo-1>

</comment></comment></comment></comment></comment></comment><comment><USER13> I'm surprised at how well the UAE does (very close to the USA), especially when things like this happen: <http://news.bbc.co.uk/2/hi/middle_east/8450722.stm>

</comment><comment><USER14> This says nothing of where the respondents were from. Did they survey people in every country about their own country, or about others? It's a pretty worthless info graphic without knowing that.

<comment><USER15> Please have a look around the site.

<comment><USER14> I tried, but I couldn't find the info I was looking for, and the drop down menus gave me seizures.

</comment></comment></comment><comment><USER16> What I'd really like to know is: which countries have significantly increased their scores over the past five years or so, and how did they do it?

<comment><USER10> Brazil is getting better: [http://world.time.com/2012/12/06/tale-of-two- corruptos-brazi...](http://world.time.com/2012/12/06/tale-of-two-corruptos- brazil-and-mexico-on-different-transparency-paths/)

The trick here is a judiciary that is beginning to work and an aggressive press.

</comment></comment><comment><USER17> Why do we care about the _perception_ of corruption?

<comment><USER18> Because perception is reality and if people believe the system is corrupt, they will act accordingly. Also, those types of questions are sometimes very predictive[1].

[1] "we probe the value of questions probing voters' expectations, which typically ask: "Regardless of who you plan to vote for, who do you think will win the upcoming election?" We demonstrate that polls of voter expectations consistently yield more accurate forecasts than polls of voter intentions."

<http://users.nber.org/~jwolfers/Papers/VoterExpectations.pdf>

</comment></comment><comment><USER19> Ugh, real nice. The country which I live in is in 72nd position. Given the next elections here, I wouldn't be surprised if we dropped even lower.

Third from last in ALL the EU nations isn't something a country should stand for.

</comment><comment><USER20> You call it corruption. They call it lobbying.</comment>


Facebook bans using the term "Iraqi Revolution" in Arabic as a title to any page - <AUTHOR> http://arabcrunch.com/2014/02/facebook-bans-anyone-of-using-the-term-iraqi-revolution-in-arabic-as-a-title-to-any-facebook-page.html

<comment><AUTHOR> what does that means? facebook and the US government do not want a revolution to American gov. backed government in Iraq what ever it is unjust or criminal. free speech is preserved if you do not try to be against the US government and its allies.</comment>


How to build a totally uncontrolled internet? - <AUTHOR>

My Mexican friend is convinced that the Internet is a tool used by governments to control people.
I tend to believe that it's a tool and everybody uses it for different means: governments to control, people to communicate, oppositions to get organized (e.g. Arab spring) and so on.
Maybe governments in the end prevail and whatever we do online will be used against us when and if needed. If that happens how are we people going to respond? Can we build a private/free Internet not controlled by anyone.
Let aside any conspiracy theory or political discussion, I am just curios about: is this possible and how do we do it?
I assume that the weak link is data transmission. Telecoms and satellite are probably not safe ways to transmit data the governments don't like. So what is left? Airwaves?
These are controllable too, right?
So a free internet will depend entirely on a good encryption method?
I'm sure there's a lot of material online about this but I wanted to ask you guys first as I am interested in the technical details of it and you can give me a very unique perspective.
Thanks! <comment><USER2> Check this out: <http://www.reddit.com/r/darknetplan>

The main issue with transmitting data across the airways is not eavesdropping but jammers and the source being shut down. Encryption takes care of the eves, but with a few radios, you can triangulate the source. Why waste time breaking the encryption key (and if your smart you'll use 2048 Bit Cyphers+) when you can simply walk over to the source and take it directly from the transmitter.

Other than transmission, the hard part is making these systems resilient to attack and failure and for most of them, they want to be fully anonymous.

Now the alternative to full on meshnets are darknets. Darknets are built on existing infrastructure but are designed for resilience, anonymity, and encryption. These exist in popular forms such TOR, I2P and others. Of course the downside to this is that it can be shut down if the physical wiring is removed.

<comment><AUTHOR> So the key seems to be to having many nodes, corrects? They may shut down some but others can be built at the same time. It's good to know that there are some efforts in this sense, but as far as I understand we're pretty far from it right?</comment></comment>


William A. Edelstein, 1944 – 2014 - <AUTHOR> http://www.jeanhannahedelstein.com/william-a-edelstein-1944-2014/ <comment><USER2> Thank you everyone for reading, and for your kind remarks. It means a great deal.

</comment><comment><USER3> I'm one of millions who has reason to be grateful for Dr Edelstein's work and this page reminds me that the technology we use is the product of _people_ with values and feelings. Lovely page.

<comment><USER4> Myself as well, I have been spending time inside an MRI machine lately. Wonderful to read this on the person to whom I am very grateful. A life well lived.

</comment></comment><comment><USER5> That's a really beautiful way to celebrate your Father. Looks like he lived life to its fullest, he's an inspiration.

</comment><comment><USER6> Try reading that and not cry at the end. What a full life. Such a hard worker and still so much time for family.

</comment><comment><USER7> I've always believed that in a Venn diagram, the intersection between 2 circles "Embraces Technology" and "Helps Others" was very large.

Thank you, Jean, for sharing a such a beautiful example.

And thank you, Arthur, for posting this today. You just stimulated my own wonderful memories on an otherwise sad Father's Day.

RIP, William A. Edelstein.

</comment><comment><USER8> I worked in the same department with him at Hopkins over the past number of years. He was honestly one of the most interesting people I have ever met. He had interests in so many different areas (not just MRI).

</comment><comment><USER9> What a wonderfully well-written tribute to a full, productive and and worthwhile life.

</comment><comment><USER10> _Bill was diagnosed with Stage IV lung cancer, in spite of having been a lifelong non-smoker_

Sorry to hear of Mr. Edelstein's passing - his developments in MRI will likely improve the quality of life of millions of people as well as save countless lives.

One thing to consider since he developed lung cancer despite not having ever smoked is that your family may be one of the 3%-8% in the U.S. impacted by a genetic disorder called Alpha 1 Antitrypsin Deficiency.

[http://en.wikipedia.org/wiki/Alpha_1-antitrypsin_deficiency](http://en.wikipedia.org/wiki/Alpha_1-antitrypsin_deficiency)

It is a common genetic disorder in European-derived people but is often undiagnosed despite the people having it being diagnosed with other diseases like emphysema, COPD, lung cancer, etc that A1AD is a risk factor for.

</comment><comment><USER11> Thank you Jean. All I can add is 'Happy Fathers Day'. I pray (despite being agnostic) that i never have to use your dads invention. But grateful that I could. If need be.

Great site. Keep up the memory.

</comment><comment><USER12> Now reading Speed Kills. [http://file.scirp.org/Html/1-8301750_23913.htm](http://file.scirp.org/Html/1-8301750_23913.htm)

Your father was an amazing man

</comment><comment><USER13> A life well-lived, to be sure.

</comment><comment><USER14> He died in February, why is this news now?

<comment><USER15> Immediate news is only one reason why a story might be appropriate here. Just as HN goes beyond hacking, it goes beyond news.

The combined quality of this article and of Mr. Edelstein's work justifies its being on HN, Father's Day or any day.</comment></comment>


Secret Experiment in Alabama Senate Race Imitated Russian Tactics - noir-york https://www.nytimes.com/2018/12/19/us/alabama-senate-roy-jones-russia.html <comment><AUTHOR> Okay, so we've gone from "this is a national disgrace" to "everyone's doing it now" real fast.</comment>


Something appears to be broken with HN - <AUTHOR> http://img.skitch.com/20100812-pptffipp3pmfdsyx6cgik3gnbg.jpg

<comment><AUTHOR> Seeing it in Safari as well. Strange because each link appears to be to the same article, but the votes are all different, but not by much.

</comment><comment><USER2> I know about this; I'll fix it.</comment>


Ask HN: Australian hackers working in the US? - <AUTHOR>

I'm an Australian programmer curious about work in the US. I recently started working at a medium-size company (2k employees, at least 100 other programmers) doing C# web dev and Perl systems stuff. I have 2-3 years prior experience with Python + JS web dev, and a math(s) degree.
I like my job in Australia, but in the future, I want to spend some time living and working in the US — ideally in SF or NYC which I've visited and liked. It seems like I wouldn't have any trouble getting an E-3 visa, bypassing the H1-B lottery, if I could get a job offer.
Are there any Australians who have managed to do this? How did you find a job? I've seen a few positions advertised on HN that look appealing but they tend to require you to already have permission to work in the US. Is it worth applying anyway, since I wouldn't need a H1-B?
Is it realistic for me to ask a company to sponsor me at this point in my career? Reading HN gives me the impression that developers get better pay and more interesting work in SF, but I'm not sure if that's true for more junior developers. Would I be better off working in Australia until I have 5+ years experience under my belt?
Thanks in advance! <comment><USER2> I feel the same about your last statement "Reading HN gives me the impression that developers get better pay and more interesting work in SF", especially since 12 week bootcampers seem to earn nearly double my wage when I have a 3 year degree (in CS from a good uni) and live in one of the most expensive cities in the world...

I have to wonder, to what extent is the whole silicon valley situation overated for us Australias? (I am West Coast so obviously I'm in a much less 'better off' situation with those two points than someone in Melb and Sydney)

Maybe we are just jealous, I sure think I am a lot...</comment>


Virtual Bach in Lisp - <AUTHOR> http://www.computermusicjournal.org/reviews/29-1/handelman-cope.html

<comment><USER2> Dave Cope's work using AI for composition has always been interesting, but this article is 9 years old.</comment>


ES6 Generators Deliver Go Style Concurrency in JavaScript - <AUTHOR> http://swannodette.github.io/2013/08/24/es6-generators-and-csp

<comment><USER2> This is not exactly the same as go's concurrency insomuch as Go allows its concurrency to be across multiple threads/processors and as far as I know node runs on a single thread.

<comment><USER3> Sure, but it provides similar concurrency _semantics_ (putting things on and taking things off of channels), which is what I think David is really trying to emphasize.

<comment><USER4> Does that mean that this could pave the way to automatic spawning of web workers or spawning of child processes (via future native language or engine implementation or library)?

<comment><USER5> To a limited capacity. If you're looking for:

      console.log('this is in the document');
      go(function() { console.log('this is in a web worker'); });

I'd recommend against it. Even if you can toString() the function passed to go() and load that into a worker, you'd not carry the function's closure, which I think is too complex.

      var x = 5;
      go(function() { console.log('x = '+x); });
      // => x = undefined

Could be done, but I'd rather stick with paradigms that fit the language more closely.</comment></comment></comment></comment>


My new site: Fun for all ages (onehaikuaday.com) - <AUTHOR> http://onehaikuaday.com/

<comment><USER2> I like the design. Why don't you open it up for users to add content on the website and not just thru twitter?</comment>