Ask HN: Interview Process 2017 – You too are getting rejected? - <AUTHOR> I've been applying for jobs since early January and I keep getting rejected after the 1st or sometimes 2nd technical phone screen. I'll be honest by saying it took me a few weeks to warm up. I'm now super hot and on top of my game, but I'm still getting rejected. I have +10 years of experience in the field, worked for the most "prestigious" companies in the field, studied hard for the last month on CS and basic interview questions. Despite nailing most of my interviews, I'm still getting kicked out for no reasons! I can't pass the first phone screen! Again, I've switched jobs a few times in the past and landed gigs at the best companies. I'm honestly not Resume-over-rated... I took a year break and now I'm back on the market, what happened since last year?? I don't get it.
As I mentioned in another topic, I often get a 9/10 score on a technical phone screen. I got 10/10 sometimes but still got rejected. 1-2 years ago I would have had 10 offers by now. So my question is, am I the only one getting randomly rejected in 2017?
Thanks for any info! <comment><USER2> How do you know you're nailing most of your interviews? How do you know that you're getting these specific scores -- are the companies that reject you giving you a score afterwards? Which field are you in? Which companies do you consider "prestigious" (or if you can't name them specifically, what makes them so)? The answers to these questions could give us insight on your situation and help us help you better.

<comment><AUTHOR> I've been interviewed many many times in my career. I switched jobs about 7 times always going through the standard hiring process. Looking for better opportunities and higher challenges. So, this is based on my knowledge and experience I'd say. It's subjective indeed, but I've interviewed candidates as well from junior to staff and I know when an interviewer is happy or not. Still subjective though.

prestigious = Google/FB etc.

Most of the questions I get lead to a "you know it" or "you don't know it" kind of answers. If you know it then you explain how it works. If not, I personally consider that a failure. Sometimes we go into edge cases, same scenario... you know when you give the right answer or if you doubt then it's a failure. In terms of coding challenges on a shared code collaboration tool, I would say that I come up with a working solution, on time, using a great approach. I might have failed one or 2 coding challenges (fail = needed a tip to move forward), but I knew right away I wouldn't count on these interviews. Some interviewers would verbally approve my solution, some would simply move on to the next question.

From what I've been doing in the past, this would easily move the process to the next step or onsite interview.

<comment><USER2> Have you considered looking for jobs that require more skill and pay more than what you got before? It sounds counterintuitive, but a while back, I was going through a lot of interviews and not getting hired. I then started looking for jobs that paid significantly more. These seemed more concerned about how I would preform on the job than how I would preform on some random irrelevant task that proves how much I studied for random irrelevant tasks. There could be a number of other hidden factors at work here and I can't guarantee that it will work, but if you are currently not getting paid, it's worth a shot.

</comment></comment></comment><comment><USER3> I am a developer back in the job market and find frustration with tech industry hiring as well.

I've read that a lot of passing these interviews is just preparedness through practice. If you ever want to schedule a mock interview with a fellow dev, shoot me an email: email@example.com ( ill send my resume )</comment>


How Andy Sack's Revenue-Based Financing Company Could Disrupt VC, Startups - <AUTHOR> http://www.xconomy.com/seattle/2010/06/07/andy-sack-flush-with-6m-builds-revenue-based-financing-company-that-could-disrupt-venture-capital-startup-ecosystem/

<comment><USER2> This is for companies that have $500k to $5m in revenue and will loan them between $100-500k.

1) This is only a small percent of the 'startup' market by definition.

2) That is not a lot of money.

Anyone with little to no revenue needing hundreds of thousands or millions of dollars is not helped by this. It is certainly an interesting and useful service, but the headline is sensational at best.</comment>


How to Resolve Subversion Conflicts? - <AUTHOR> http://ariejan.net/2007/07/04/how-to-resolve-subversion-conflicts/ <comment><USER2> We usually have the two programmers who worked on that file consult on which lines of code to merge or use, since neither of them knew what the other was coding.

We pushed very short-term changes to the staging server through Dreamweaver "puts". Then at the end of the day, we'd perform an update, resolve any conflicts, and then commit our stuff.

At times, it felt like a waste of time to do all of the versioning and committing, and some of the updates were overwriting some files I had made changes to, without warning me. I wonder if Dreamweaver's integrated check in/check out system is better for smaller teams.

</comment><comment><USER3> Sorry this doesn't answer your question but you might find this relevant or at least interesting (and just maybe slightly amusing). <http://www.youtube.com/watch?v=4XpnKHJAok8></comment>


Tsuru 1.4.0 released, with volumes, improved Kubernetes support and more - <AUTHOR> https://blog.tsuru.io/tsuru-1-4-0-released-with-volumes-improved-kubernetes-support-and-more-4cb5bba1321c <comment><USER2> Tsuru 1.5.0 on the way, with even better kubernetes support!</comment>


Inside the Apple Watch: Technical Teardown - <AUTHOR> http://www.chipworks.com/en/technical-competitive-analysis/resources/blog/inside-the-apple-watch-technical-teardown/ <comment><USER2> Nearly every chip in there is a WLCSP (wafer level chip scale package). Seems like the industry is trending toward no package is the package. Also, it will be interesting to see if there are any fan-out packages, like eWLB. Several IDMs have started integrating several ICs horizontally--usually things like audio codecs or USB transceivers. With multi-die fan out, you save a lot of PCB real estate. In small form-factor devices like the iWatch, packaging is a huge differentiator.

<comment><USER3> I pointed this trend out to a guy who was whining about the "good old days" of through hole components and how hard it was to use surface mount stuff. There are a lot of motivations to go with chip on board tech, mostly the chips can be cheaper as you have removed an entire chunk of steps and fallout out of the production process. Interestingly for me, the _reason_ this is becoming more popular is that because feature sizes are so small, the silicon cost of these parts is dominated by the pin pads, not the logic. So making the pads big enough to put solder balls on them for COB assembly doesn't materially increase the cost of the die, and yet saves packaging, bondout, and post packaging testing.

<comment><USER2> Solder ball size is definitely a factor in modern packaging cost! Silicon area is really expensive. That's why places like where I work are developing fan- out wafer level CSP. It has all the benefits of water level processing cost, but extra area for solder balls is made of cheap mold, not expensive silicon.

These WLCSP parts are definitely not solderable at home though. But, with the rise of low cost PCB and assembly services, I'm not sure that matters as much as it used to. For example, one project I'm working on with a 384 ball BGA cost me twenty dollars to have placed and reflowed locally. And, new projects involve way fewer chips because of the scale of integration. As an analog engineer, it makes me sad, but I appreciate what I can make at home now!</comment></comment></comment>


Ask HN: Do you drink alcohol? - <AUTHOR> <comment><USER2> I do not drink anymore.

I use to be quite an alcoholic(about 14-16 beers or .5 to .75 liters of whisky) and it caused me quite a few problems in my life. A few months ago for my two year sober-versary, I wrote a little bit about it, and alcohol culture in development.

[https://dev.to/samuraiseoul/alcohol-and-developer- culture-19...](https://dev.to/samuraiseoul/alcohol-and-developer-culture-19b8)

</comment><comment><USER3> Yes, but it's hitting me harder the older I age.

I wonder if I'm on the wrong side of history sometimes; I wonder if our children will consider drinking to be similar to how most of us view smoking today.

</comment><comment><USER4> Yes, smoke too... Are you looking for an excuse to drink? Don't look for excuses from others to enjoy some vice. Enjoy it for yourself.

</comment><comment><USER5> Nope, never have. I'll be 31 in a few months. Proud teetotaler! I have no temptation to drink at bars/clubs with friends.

<comment><USER6> Same except that I'm a bit younger.

</comment></comment><comment><USER7> I gave it up for 2019 -- I'm a social drinker, nothing bad, but I was liking my post-drinking sleep less and less. (It seems to have side effects on me in the aftermath even when I don't drink enough to actually get drunk... or I'm getting old... whichever...)

Several of my coworkers are either completely abstinent or the "don't like it will sip 5ml of this beer" type and I've seen firsthand it can be rough socially. I'm going to just ignore the haters mostly.

</comment><comment><USER8> Nope! I'm on a number of meds to treat my Ehlers-Danlos syndrome, so abstaining helps me avoid interactions. Honestly though, I never enjoyed the effects. Somehow alcohol _causes_ me anxiety, as the mental whiteboard I rely upon vanishes and I can't escape into my mind.

If I want to get fucked up, I rabbit hole on cosmology and particle physics. Once I read about what the "local group" really means. My partner found me in the throes of an existential crisis. I then explained entropy to zir and neither of us could sleep that night.

The universe is a _trip, man._

</comment><comment><USER9> Yes, but I avoid getting drunk.

Also I enjoy it but like any rich food feel worse for it.

</comment><comment><USER10> I enjoy a nice red wine or a nice liquor in moderation. But I don't drink beer or cheap alcohol.

I'm drinking for the tastes so I don't care to get drunk or drink lousy stuff.

Why do you ask?

</comment><comment><USER11> I'm grateful that my body refuses to take more after 2 or 3 drinks. I feel bad for people that just can't stop. Why the question?

</comment><comment><USER12> Nope. Never gonna taste at all.

</comment><comment><USER13> I used to, but quit completely around three years ago.

</comment><comment><USER14> Yes but dislike the aftermath more and more.

</comment><comment><USER15> Yes, but I don't like drinking alone.

</comment><comment><USER16> [https://en.wikipedia.org/wiki/Ethanol](https://en.wikipedia.org/wiki/Ethanol)

</comment><comment><USER17> Yes. I am drinking now.

</comment><comment><USER18> absolutely, but never alone at home

</comment><comment><USER19> nope, it tastes awful to me.</comment>


Is Microsoft trying to get rid of partners through Office 365? - <AUTHOR> http://blog.williamhilsum.com/2011/08/office-365-partner-experience-is.html

<comment><USER2> _I feel that Microsoft are really screwing partners... the new hosted Exchange solution costs less and offers more than any hosted solution from any partner I have seen - I simply do not know why any partner will want to offer their own hosted Exchange going forward._

In simpler words, partners that offer hosted Exchange no longer add any value to the customer experience or to Microsoft's business other than as a sales channel. Given the direction SaaS is going, into massively centralized clouds, this shouldn't surprise anyone at all.

It doesn't feel like Microsoft is being predatory here, I'd say this is simply an instance of a larger market force acting on everyone in the space. A vendor who makes a hosted software solution is either going to host it themselves in a ginormous and expensive cloud or host it in a cloud utility like Amazon or Google. There simply isn't extra fat in the "supply chain" to support an intermediary host.

This explains why Microsoft's own solution is cheaper and better. It has to be. My conjecture is that the only reason it has taken so long to be cheaper and better is because of internal politics over hosting their own Office competing with desktop license revenues.

<comment><USER3> Does Microsoft offer migration services directly? I'm sure that's a huge requirement for most enterprise and SMB customers. While the partners are going to lose their hosting windfall, they still have a chance to build a third party services market for migration/backup similar to what you see on Google Apps, no?

I know next to nothing about Office 365 offerings, BTW. I looked at them briefly, and gave up trying to figure them out. Also, I've read Microsoft's terms for BPOS and they scare me.

</comment></comment><comment><USER4> They're not getting rid of their managed or gold partners, or even really the small ones... they're just not going out of their way to avoid hurting the "partners" with an online presence like this: <http://www.ezpcltd.com/>

<comment><AUTHOR> I do not understand what you are trying to achieve by a comment like that, I get my clients through personal recommendations and other means... I never said I was the biggest partner or made any claims. I however am like thousands of other small Microsoft partners and these are simply my experiences. That being said, I am not trying to promote my company anywhere here (or even on the blog), and do not really see how it is relevant. All points from the blog post still stand.

</comment></comment><comment><USER5> Just a comment for fellow HNers who peruse the comments before hitting the url:

1\. The HN submitter is the linked post's author.

2\. I fail to see how this has anything to do with startups or hackers, but I've been wrong before. Raganwald's comment sums it up.

<comment><AUTHOR> Sorry if you feel like that! Not trying to hide anything... I read similar posts all the time... Cloud/Microsoft/Company v Company...

I found out about this place after someone else submitting one of my articles and have since submitted my own posts a few times simply because I felt they would be a good fit.

<comment><USER3> As long as we're OT, I want to address your other article: [http://blog.williamhilsum.com/2011/07/my-take-on-google- apps...](http://blog.williamhilsum.com/2011/07/my-take-on-google-apps-vs- office-365.html)

Using Google Apps with Outlook is a recipe for disaster. I use Google Apps IMAP (for local backups) via Apple Mail, Postbox, Swallow and other clients. I've never had the slightest issue.

On the other hand, I've supported IMAP users in Outlook and hated every second of it. Outlook generally is a mess when it comes to playing nice with other non-MS tools. For example, .ost files that fail to back up properly, etc. It's definitely 90% my ignorance of Outlook, but I can't be bothered to learn the nuances of Outlook when everything else just works. The other 10% is due to the Google vs. MS rivalry.

I realize you had no choice, given the client's use of a plug-in. I just wanted to point out that using Outlook with Google Apps is asking for trouble.

<comment><AUTHOR> hehe - Thanks for reading! I have mixed feelings about Outlook Data Files (.ost or .pst). These are great when they work, but, I think they show their age for large modern mailboxes.

As for Imap, I don't really know what to say above what I wrote in that article - It is clear that Outlook is built for Exchange... That being said, I have one client (and myself) that runs IMAP from a Hmailserver box and have never had a problem.

Going over slow links/VPN when abroad has given me a lot of problems with Outlook, which I do not see whilst using a mobile device (I<device> or Android) when set to only download the last 50 messages - so, again, I agree that Outlook's handling could be a lot better.

But... On top of that, Gmail has just given me so many problems weather using Oulook, Thunderbird or a few other mail clients. If you only use Gmail through their website, it works great - but, I personally think that the way they use labels instead of folders along with a few other things (deletion etc.) made a mess when they tried to implement the IMAP protocol.

<comment><USER3> Yes, migration from Exchange doesn't work well because of the fundamental difference between search vs. sort. I'll never use Exchange again, personally. It feels like time traveling back to 2002. I'd never use 365, but I know a lot of people are wedded to the MS platform now.</comment></comment></comment></comment></comment>


Ask HN: How to learn Cybersecurity? - <AUTHOR> What sites/resources/advice would you give someone who's interested in learning about cybersecurity. Every other day there's a new breach announced and there's an increasing demand for security engineers <comment><USER2> You need to roughly know desktop security (especially memory corruption, C/C++ insecurities), web application security, mobile application and networking security. Those are (again, roughly) the domains.

If you want cybersecurity with web application testing (with overlap to mobile application testing), begin with The Web Application Hacker's Handbook. Best single treatise on the subject.

You should look through this entire thread:

[https://www.reddit.com/r/netsec/wiki/start](https://www.reddit.com/r/netsec/wiki/start)

I also highly recommend the OSCP (Penetration Testing with Kali Linux) course and Cody Brocious' (daeken's) course called Breaker101, at breaker101.com.

Good luck.

</comment><comment><USER3> dylangs1030 comment is a good start.

For a little more complete reference I point folks to 'tptacek's list at [http://amzn.to/cthr46](http://amzn.to/cthr46)

</comment><comment><USER4> For web applications:

[https://www.hackthissite.org](https://www.hackthissite.org)

[http://www.enigmagroup.org/](http://www.enigmagroup.org/)

For offensive computer security:

[http://www.cs.fsu.edu/~redwood/OffensiveComputerSecurity/lec...](http://www.cs.fsu.edu/~redwood/OffensiveComputerSecurity/lectures.html)

</comment><comment><USER5> [https://www.reddit.com/r/netsecstudents/comments/2k03lk/befo...](https://www.reddit.com/r/netsecstudents/comments/2k03lk/before_starting_in_netsec_what_all_should_i_know/cllwsfy)

This is a very nice reddit comment that explains some of the various foundational, necessary knowledge and where to learn more about them.

</comment><comment><USER6> How about, if I can add to the question without changing it, ideas/paths to marketable skills and/or certs? What would a potential employer look for as essential foundations (before any obvious specialty offshoots)?</comment>


Production algorithm tricks anyone? - <AUTHOR> For solving the problem of proportioned distribution of ads into sites at internet-scale, we had used a random number generator within a segmented number range. It was elegant and distributed synchronization and such complexities. Any more of such elegant tricks in production software? <comment><USER2> Using the HyperLogLog algorithm to estimate the number of unique elements in huge datasets: [http://blog.notdot.net/2012/09/Dam-Cool-Algorithms- Cardinali...](http://blog.notdot.net/2012/09/Dam-Cool-Algorithms-Cardinality- Estimation)

Very cool algorithm used in (among other things) redis.

</comment><comment><USER3> I've always been a fan of the Fast Inverse Square Root hack.

      float Q_rsqrt( float number )
      {
        long i;
        float x2, y;
        const float threehalfs = 1.5F;

        x2 = number * 0.5F;
        y  = number;
        i  = * ( long * ) &y;                       // evil floating point bit level hacking
        i  = 0x5f3759df - ( i >> 1 );               // what the fuck?
        y  = * ( float * ) &i;
        y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
        // y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

        return y;
      }

[https://en.wikipedia.org/wiki/Fast_inverse_square_root](https://en.wikipedia.org/wiki/Fast_inverse_square_root)

</comment><comment><USER4> SPITBOL/370 is a SNOBOL4 implementation for IBM mainframes. The following Dr. Dobbs articles describe some of the tricks used in the code. Elegant is the wrong word but both of these techniques are clever hacks.

[http://www.drdobbs.com/cpp/misusing-floating-point- arithmeti...](http://www.drdobbs.com/cpp/misusing-floating-point-arithmetic- for-f/232300544)

[http://www.drdobbs.com/cpp/some-programs-are-poorly- designed...](http://www.drdobbs.com/cpp/some-programs-are-poorly-designed-on- pur/232300070)

</comment><comment><USER5> 99% of the cool, elegant "tricks" I've seen have been applications of the following computer science concepts:

[https://en.wikipedia.org/wiki/B-tree](https://en.wikipedia.org/wiki/B-tree)

[https://en.wikipedia.org/wiki/Hash_table](https://en.wikipedia.org/wiki/Hash_table)

[https://en.wikipedia.org/wiki/Paxos_(computer_science)](https://en.wikipedia.org/wiki/Paxos_\(computer_science\))

</comment><comment><USER6> For scaling view counters on the pages of popular videos Youtube increments the counter by N views with 1/N probability for each actual view. Or so I've been told.

<comment><USER7> I've seen similar approaches used to enforce rate limit checks on APIs that get lots of traffic and are distributed amongst many different servers.

</comment></comment><comment><USER8> >"we had used a random number generator within a segmented number range."

Could you describe your current implementation and its elegance?

<comment><AUTHOR> Ad 1 has to be shown 30% of the traffic Ad 2 has to be shown 40% of the traffic Remaining has to be given to RTB

generate a random number between 0:100 if the number is 0-30 the Ad 1 has to be shown if the number is 30-70 the Ad 1 has to be shown else RTB is to be called

The servers can be now independent and no need to share the state, or have a lock based counter. For large number of requests, and with a good random number generator, you will get good results.

<comment><USER9> Yeah not to be an ass but that's pretty standard. And cool too I admit.

<comment><AUTHOR> It might seem standard among some circles. And i have learnt them on the floor. But could never find a book or blog which describes some more examples. I was curious if others had any ideas to share.

</comment></comment></comment></comment><comment><USER10> There's a bunch in Hacker's Delight.

One that comes to mind is XOR-swap. It's cute, but it's likely slower than using a temp var.

Some of the integer population count algos (1's counting) are clever.

Also, original Doom source has some neat tricks.

<comment><AUTHOR> Aah finally a good clue about reading material. Thanks a ton.</comment></comment>


New York Searches for Its Anchor Tech Company - <AUTHOR> http://www.nytimes.com/2016/05/03/technology/daily-report-new-york-searches-for-its-anchor-tech-company.html <comment><USER2> > _Likewise, a high-tech region needs an anchor company, that giant or at > least influential company that draws in technical talent and generates the > know-how and cash for another generation of start-ups and — just maybe — the > next big thing to come along._

Is this actually the case?</comment>


What colour are your bits? - grey-area http://ansuz.sooke.bc.ca/entry/23

<comment><AUTHOR> Adding a "(2004)" to the title might be an idea. This article came after the range of controversies related to the Dmitry Sklyarov case (he was pursued for his role in creating software to bypass Adobes e-book DRM) as well as DeCSS, that prompted a number of attempts to engineer systems to "bypass" copyright, one of which was Monolith - mentioned in the article - which basically xor's random data with a copyrighted work, which the authors then believed might somehow make someone distributing the files separately immune to copyright infringement claims.

<comment><USER2> It does lead to an interesting plausible deniability claim. If ten people come forward with chunks that XOR to a copyrighted file, they can all show to 90% certainty that they aren't the one with the derived/infringing chunk.

Dealing with the conspiracy claims would be tricky, though.

<comment><USER3> _> Dealing with the conspiracy claims would be tricky, though._

That's exactly why conspiracy laws were set up. Engineers/information activists aren't the first people to have these ideas - you can probably find ideas like that going all way back to the beginning of human storytelling.

Using this scheme to evade copyright law is relatively recent but breaking things apart to create plausible deniability is ancient.

</comment></comment></comment><comment><USER4> This article is great because it doesn't argue for piracy or against it. I do feel that it is missing a discussion about the colour of bits being amalgated by other bits. IE, if I buy a movie and then I torrent that same movie, is the torrented copy still illegal? Cloudy at best, I'd say.

<comment><USER5> Legally speaking, I believe it is not cloudy; it is still illegal because you have bought a copy of the movie, but you do not have the copyright of it so don't have the right to copy it (as the name suggests!).

Morally, I think most people probably feel that it _is_ cloudy and in such a case often justifiable, but that has little bearing on the legal situation.

<comment><USER6> This depends a bit on the jurisdiction. In Germany for example we have a right to a Privatkopie (i.e. a personal copy of something we bought in case something happens to the original that renders it unusable). The problem is that this is trivial for CDs, books, and other non-DRMed media, but there is a conflict in case you have to break copy protection first which itself is illegal. Technically however, this is only legally pursued if you do that on a large scale and distribute the copies, so _de facto_ you can still make copied for your own personal use.

For your right to a private copy there are numerous fees on devices that can make copies as well as media that can hold them, so we have to pay 17 ct per blank CD and something close to 10 € per DVD writer, etc. Basically you're paying for your allowed breach of copyright there, irregardless of what you actually use those things for.

</comment></comment></comment><comment><USER7> This is interesting for its main points, but also just to look at a familiar argument from an unfamiliar viewpoint.

There are some places where the analogy to color didn't ring true for me, but it was still worth reading.

Like the difference between the _reality_ of a digital file and the "color" of it -- how these particular bits were obtained -- there's a hard line that you can draw between the _reality_ of any situation and the many layers of stuff that we construct on top of it.

There are lots of concepts that we think of as "reality" when they're pretty much just conventions that we've built on top.

Arguments about ownership get fuzzy and confusing because ownership _itself_ is not real; it's a complicated set of rules we generally agree on, but the details vary among cultures. If you observe a group of people without knowing their language, there's almost no way you can figure out who "owns" all of the things they interact with, and even asking the people themselves you'll get varying answers.

Human rights are an invention. They aren't a _thing_ , they can't be inherent to anyone, and you can't even _have_ them in the first place, though we talk about them as if they worked that way. Rights are rules that one person can _agree to follow_ respecting another person.

If you're alone on Earth, your "human rights" are meaningless, aren't they? You need at least two people before one can violate/respect the human rights of the other -- by following the rules or not. And of course the rules are not universally agreed upon, because they are not real things to be discovered; they are constructions.

The flip side of learning where that line goes (between reality and our constructed ideas on top of it) is the realization that a lot of this "fake" stuff is still really, really important.

<comment><USER8> I agree that it is a construct. The most important thing about that realization is that it can be discarded if broken, or reconstructed in a totally different way. In the case of copyright and patent law, thorough reconstruction is needed to eliminate the vast absurdities of law that have arisen which simply put do not benefit us, and actively harm us.

</comment></comment><comment><USER9> On a tangent:

What happens if p2p systems start requiring proof that a new peer violated some copyright (that copyrighted work can be something explicitly created for that purpose - a guy's family pictures, anything)...

I'm pretty sure the technical side of managing the proofs, verifying them etc. is feasible, if not trivial. Wondering about the legal ramifications, would love to hear your opinions.

<comment><USER10> This is a great idea, it would make it impossible for any nongovernment entity to gather up lists of users to sue without opening themselves up to a lawsuit.

I had a similar idea that before receiving any torrent data each peer would have to send a message like:

As an agent of the copyright holder of works represented in aaaaa.avi, the user at [ip address] is working under my supervision and is authorized to distribute and reproduce the works contained in aaaaa.avi.

</comment></comment><comment><USER11> Ignoring the substance of the article for a moment, the delivery is masterful.

This is a very entertaining read.

</comment><comment><USER12> Would be nice to have a [2004] appended to the article.

<comment><USER13> Also the link to Paranoia (which is an entertaining game) should probably be

[http://www.mongoosepublishing.com/rpgs/paranoia.html](http://www.mongoosepublishing.com/rpgs/paranoia.html)

Or just the wikipedia

[http://en.wikipedia.org/wiki/Paranoia_(role- playing_game)](http://en.wikipedia.org/wiki/Paranoia_\(role-playing_game\))

this works too

[http://www.paranoia-live.net/news.php](http://www.paranoia-live.net/news.php)

If you read the wikipedia you'll see that since '04 there's been a bankruptcy sale followed by two release cycles. The lifecycle of the paranoia franchise is almost as interesting as the ancient political article. For example Microsoft gave then a C/D (or sued them?) for the release of "Paranoia XP" which you'd think would be covered under some kind of satire provision... It is possibly true in that how you only get as many rights as you can afford, they simply couldn't afford to keep their rights, I donno the details.</comment></comment>


Introducing Neo4j Bloom: Graph Data Visualization for Everyone - <AUTHOR> https://neo4j.com/blog/introducing-neo4j-bloom-graph-data-visualization-for-everyone/ <comment><USER2> I have requested access but I'm wondering if anyone knows where I can just start using it rather than waiting.</comment>


Showing the plug, not the cable - <AUTHOR> http://www.37signals.com/svn/posts/602-showing-the-plug-not-the-cable <comment><USER2> The Common Craft (<http://commoncraft.com/>) video linked from the article is pretty awesome. I love the style. Incidently, I noticed this presentation company for the first time yesterday -- they did one for Google about Presently:

[http://googleblog.blogspot.com/2007/09/our-feature- presentat...](http://googleblog.blogspot.com/2007/09/our-feature- presentation.html)</comment>


Meet the 20-Year-Old Who Built a YouTube Product Review Empire - X-combinator http://www.wired.com/2014/11/marques-brownlee/?mbid=social_twitter

<comment><AUTHOR> He has a wonderful voice and his reviews are enlightening which makes him one of the best Youtubers alive! but I also like www.youtube.com/user/DetroitBORG</comment>


A curated list of Terminal frameworks, plugins and resources for CLI lovers - <AUTHOR> https://www.producthunt.com/posts/movies-for-hackers <comment><USER2> [https://github.com/k4m4/movies-for-hackers](https://github.com/k4m4/movies- for-hackers)

</comment><comment><USER3> Your link and title don't match?</comment>


Desktop HDD vs SSD for Postgresql - <AUTHOR> http://it-blog.5amsolutions.com/2010/08/performance-of-postgresql-ssd-vs.html <comment><USER2> SSD firmware needs to do clever things with caching and write combining to avoid premature wear. These algorithms are black boxes whose behaviour is very poorly modeled by the usual tuple of contiguous transfer rate / random 4K access rate / seek time etc. measured by artificial benchmarks. You don't know how the drive is really going to react until you hit it with the mix of operations that match your real workload.

Personally I've found the Intel SSDs to work best at the primary use case, speeding up small random reads, even when other drives have appeared to exceed them in random read. Bulk contiguous transfer looks really impressive, but mechanical drives with high data density are pretty fast at that too. What you really need the SSD for is random reads, and ensure that the random read performance holds up when mixed with other use patterns.

<comment><USER3> > SSD firmware needs to do clever things with caching and write combining to > avoid premature wear.

This has not been an issue for several years now. SSDs last at least as long as spinning platter disks. Especially the server-grade SSDs from the big brands. I've never heard of anyone running into this SSD wear-leveling issues in a production environment.

<comment><USER2> Unless I'm mistaken, you've completely missed the point of what I wrote. The reason wear leveling is not an issue is because the firmware is smart enough to avoid the problem, and those smarts interfere with the presumed model used by simplistic artificial benchmarks.

<comment><USER3> Sorry you are correct. I misunderstood.

I don't think the wear leveling will affect the benchmarks that much though - even if it's horribly inefficient your drives will still beat the snot out of any spinning platter drive on the market today.

<comment><USER2> I fully agree, in competition with a mechanical drive, but it's an important consideration when looking at _which_ SSD to buy.

</comment></comment></comment></comment></comment><comment><USER4> Nowadays I use SSDs in all my home machines (MacMini, laptop, gaming desktop). It really speeded them up, since seek times are so much faster. My unix server runs with a SSD for more than a year now, and I haven't had any problems with it.

Just for fun, I once configured two Intel SSDs in a stripe to see how fast it would be. After tweaking the stripe block size a bit (this made a huge difference!) the stripe maxed out at 400 megabyte/sec sustained read. That's almost a CDROMs' worth of data, each second ;-)

<comment><USER5> > That's almost a CDROMs' worth of data, each second ;-)

Hmmm, since when does ~ .6 == 1? ;-)

It would be more accurate to say: "That's over half a CD-ROM's worth of data, each second ;-)"

<comment><USER6> >Hmmm, since when does ~ .6 == 1? ;-)

After engineering or physics school. Try factor of 10 to get my attention :)

</comment></comment></comment><comment><USER7> I've been looking in to this recently (ref: <http://news.ycombinator.com/item?id=1567330>)

I just tested the speed of the elastic block storage on my EC2 instance with HDTune: <http://i.imgur.com/Lbgjy.png>

vs crap assed 64GB SSD I bought for my netbook last fall: <http://i.imgur.com/r2eaw.png>

I've been frustrated with IO speeds on EC2 the last few months, but this pushed me over the edge. I'm buying components to roll my own server.

<comment><USER8> I'm curious if you'll end up saving money.

</comment></comment><comment><USER9> In short -

> _SSD storage devices are five to fourteen times faster than their rotational > brothers using a default 8.4.X Postgresql configuration_

This should've really been at the top of the article ;)

</comment><comment><USER10> Not related to the article: the typography on this page gives me a headache (I'm on win7/chrome5). Ten different font size, random kerning and line space, serif mixed with sans-serif, bold/italics/bold-italics without a ratio. Argh.

<comment><AUTHOR> I'm VERY sorry about that.

This was my first stab at Blogger as a blogging platform. The 'compose' interface was a real pain to use so I typed the whole thing in OpenOffice first. The move from OpenOffice to Blogger was not smooth thus all the weird spacing, font size changes, etc.

Also, our CSS template is sort of funky too. We are going to fix all that stuff in the next week.

<comment><USER11> Try doing something to the line-height CSS attribute. It probably needs a bit more spacing between the lines of text for easier reading.

</comment></comment></comment><comment><USER12> Though the tests were conducted with Postgre, I suspect these results will be interesting to anyone running a database.

This is the sort of thing that causes me to inquire about the possibility of accessing external hardware from my VPS on Linode. VPS hosts should really consider offering SSD options for a premium, IMHO.

<comment><USER13> Perhaps you're not familiar with how tight the margins are in the VPS business. SSDs may be small when you're sticking one in your desktop but when you're running 40 VPSs on a 1U box, they're huge. Density is king in VPS land, and adding an extra drive for each customer (or simply having to have the ability to add an extra drive for each customer) would kill that density.

I'd you special hardware, get a dedicated box.

<comment><USER12> You're quite right about my unfamiliarity. Still, it seems that you could have only a few boxes with this option and, as i said, charge quite a premium. I suppose if I really believed this, I would execute on it...

<comment><USER13> "A few boxes" of anything isn't worth it. Standardization is critical to having any sort of profitability. As soon as you start spinning up a small number of custom boxes, you're adding a lot of work. Enough work that the "premium" you mention would be pretty large (large enough that it would probably wipe out any price advantage in the first place).

If you really need super fast i/o, then why are you using a VPS in the first place? Virtualization adds a non-trivial amount of overhead to i/o, and there's really no way around that (technologies like VT-d and virtio are helping, but virtualization is still virtualization)

<comment><USER12> What you say makes perfect sense. For me the decision to use VPS was motivated by cost and simplicity. But when it comes to my database server, IO will bottleneck me long before CPU or bandwidth or other such concerns. That will probably lead me to some sort of single-master, multi-slave setup — but I suppose I just feel like that could be substantially delayed if I were to have my DB on an SSD.

</comment></comment></comment></comment></comment><comment><USER14> 1\. You can kill a consumer-grade SSD surprisingly quickly if its being hammered with writes all day in a server. (Or at least, you can exceed the manufacturer's recommendations, and do you really want to do that in a server?)

2\. SSD should be compared to a RAID of HDDs for a realistic test

3\. The article says that they want to use it to store operational stats and log files - in this case I'd spend time testing PostgreSQL's transaction and sync tunables and probably arrive at some acceptable settings which work fine on a HDD.

With this sort of workload, it is easy to make Postgres combine multiple transactions into fewer I/Os.

</comment><comment><USER15> The first SSD tested reaches 130MB/s reading and writing. IMHO it is running in SATA-1 mode (jumper? BIOS setting?) and that's what kills its performance. Any SSD should reach a much higher read throughput.

<comment><AUTHOR> I didn't include this in my post but here is the deal: the first time I ran the raw read / write test the results were pretty close to the manufacturer's claim. On the 2nd try (and the next 20 after) i got EXACTLY what is presented in the post.

Weird.

<comment><USER16> Doing a sequential write to the entire disk probably made the SSD think the disk was full of data. Unless you ran the ATA secure erase command after each benchmark or turned on TRIM, that will hurt performance. <http://www.anandtech.com/print/2738> explains why, around page 6.

<comment><AUTHOR> The other (or 'fast) SSD did not have this issue though. I re-ran the raw read / write test at least 15 times over two days and I got very consistent (and very good) results.

<comment><USER16> The second SSD probably has better* firmware or flash or both. It's basically maxing out the SATA II bus no matter what you throw at it.

* By "better" I mean it performs better in the benchmarks you used. A firmware that wins benchmarks often doesn't do correspondingly well in the real world. For example, Intel's SSDs are sub-par in sequential read/write benchmarks, but they perform much better in most application benchmarks.

</comment></comment></comment></comment></comment><comment><USER17> What are the implications for the web and Tim Berners-Lee's vision for linked data once the cloud switches to SSDs? Won't sites like reddit see a lot fewer problems since the DB access won't bring the hard drives to their knees?</comment>


Helium.js - discover unused CSS on your site - <AUTHOR> http://github.com/geuis/helium-css

<comment><USER2> There is a Firefox extension called dust me selectors that accomplishes the same thing. I have been using it for years.

<comment><USER3> I had problems with that after some Firefox version upgrade, and haven't looked into it after.

I kept expecting someone to make this extension as part of Firebug.

</comment></comment><comment><USER4> Neat and all, but why is this written in JS? CSS selector support is great in html parsers (nokogiri, for instance.) Seems like a hassle to add the script tag, onload, etc. just for a run-once-and-only-in-dev kind of script.

<comment><AUTHOR> I upvoted because this is a good question that other folks will have, and I wanted to provide my motivations.

Finding the unused css selectors among several stylesheets among dozens of pages is tough. Before I wrote Helium, I tried many other attempts. This included:

 _Google Pagespeed exports: There's a cool feature of this Firefox extension that lets you export a json-encoded file showing all kinds of stats about the page. This includes a section of unused css selectors. The problem is that there is no way(currently) to pass it a list of urls to load, check, and produce a final report. At one point, I exported over 40 individual reports and struggled for several days to write a Python script to parse the results out. While this was a perfectly valid way to solve the problem, one of the big issues I found was the amount of time it took to generate the reports. It was a vary manual process.

_ Cross-browser support: There were only 2 projects that I found that came close to the kind of data exports that I needed, Pagespeed and DustMe Selectors. They were both Firefox-only tools, and don't help when trying to analyze any other browsers. It will only take a minimal amount of work and testing to get it running in IE8, so that's next. It will eventually also work in older IE versions, but that is going to take more work.

 _Existing solutions just don't work(at least for me): In particular, I'm talking about DustMe Selectors. I monkeyed with this tool for 2 full days and could never get it to work correctly. The absolutely vital component I needed was the ability to get reports on many different pages. Once I figured out how to get it to read a sitemap XML formatted file of my links, I could never get it to finish a full report. I let it run all night and came back the next day and it was just hung up. I spent a 2nd day and each test would just hang, no matter what I did. I really wish it had worked as advertised, because it would have saved me a lot of time.

_ Client-side tool: I thought about this problem for a long time. Yes, there are server-side tools like the ones you mentioned. However, to be truly accurate a tool like this needs to be able to analyze pages as they are actually rendered in the browser.

So these are the main reasons that I built Helium.

</comment></comment><comment><USER5> What would be really awesome if this tool could run in the background somehow and log selector usage. The reason for that is that on dynamic pages, the original HTML served doesn't really reflect all the selectors that are actually used on the page.

</comment><comment><USER6> _Its incredibly important to web developers to be able to test IE, too. Helium needs a lot of extra work to support the older Internet Explorer browsers to patch around the missing features required. It will get done._

I cannot see why you should develop this for IE. This tool is no going to be used by end users. Developers are going to have Chrome/Safari or Firefox installed in their machines. Are there so many IE CSS hacks used in websites?

<comment><USER5> Because IE has "special needs". Very often different stylesheets or even different markup is served for IE. This could be circumvented by faking IE with the user-agent string but ideally it would just support IE out of the box.

<comment><USER6> I guess you are correct. It is incredibly painful to know that even tiny developer tools should support IE.

</comment></comment></comment><comment><USER6> This is a nice tool. Waiting for the XML sitemaps support.

</comment><comment><USER7> Deadweight is a very well written Ruby script that performs the same kind of task. Give it a try:

<http://rdoc.info/projects/aanand/deadweight>

</comment><comment><USER8> What about those of us that use add CSS classes dynamically, based off user events? I could definitely use a tool like this, my CSS sheets get long very fast.</comment>


Why ClojureScript Matters - <AUTHOR> http://blog.juxt.pro/posts/why-clojurescript-matters.html <comment><USER2> I think that the main argument presented in this blog -- "avoiding splitting" is wrong :Splitting the development into frontend and backend is essential for developing maintainable code for large projects. Having a well defined communication api between backed and frontend defines responsibility for front end and backend developers and also enable better (j)unit test cases. The communication overhead and associated documentation is beneficial in the long run as the code that is produced will be better understood by all , not just the lone developer; it also makes code reviews easier and allows new developers to take over existing code base when necessary. It is immature to think developers will only feel pride in their when they own the entire codebase, the ui-to-db stack; The idea that "Lovingly crafted aesthetics in a codebase is key" is silly; code needs to be testable, well documented and highly optimized and re-usable.The "jostling of positions" are design discussions and they are important part of the software development cycle.

I like Clojure and I am interested in learning ClojureScript but this blog post makes a poor case for it.

<comment><USER3> Sure, any large code base needs to be modular, but why impose an arbitrary split?

We've got a large Node.js codebase. Some of the code runs only on the server, some runs only on the client, but the majority runs on both. Our code is split into modules for functional reasons.

<comment><USER4> > but the majority runs on both

What does this mean exactly? What kind of code needs to run on both?

<comment><USER5> I tend to agree with you, but there are things that can/should run on both - validation of input for one. But I'd like to hear other things - I hear "use the same code on the server and client" all the time, but I haven't found a lot of use for that personally.

<comment><USER6> Turning a reactive web application into a regular "web site" \-- ie. allowing you to use the bulk of the application without Javascript enabled. Great for SEO, too, at least until Google gets Javascript execution further along (which it's certainly doing, and getting better every day).

</comment></comment></comment></comment></comment><comment><USER7> I disagree with some of the statements about developer pride. I was reading [https://speakerdeck.com/garann/code-is-a- job](https://speakerdeck.com/garann/code-is-a-job) this morning and it's a position I have a lot of sympathy with.

Not having the backend developer/fronted developer split is good; while each will have its own specialities, they shouldn't be siloed into separate teams.

<comment><USER8> Thanks for sharing. Good read.

</comment></comment><comment><USER9> As a data point, I've just written a significant ClojureScript application, using React (Rum for bindings, Datascript for client-side db). It's amazing how quickly one can create complex apps with impressive performance out of the box.

If you haven't used ClojureScript, it is _definitely_ worth looking at.

<comment><USER10> How did you select your components? I've never heard of Rum or Datascript, for example.

<comment><USER11> Nikita Prokopov has presented a pretty cohesive vision for front-end programming in the cljs community. Even if you don't agree with all of his opinions, he's one of the only people assembling a big picture about how to write apps in this way. It's worth reading his blog:

[http://tonsky.me/](http://tonsky.me/)

An emphasis on low-level tooling and not enough discussion around high-level architecture/examples has hurt the react+cljs combo adoption from my point of view. It's the nature of Lisp to come up with your own abstractions around application architecture, but the community would be wise to talk more about solving common web patterns and how to cleanly break away from those patterns when necessary.

<comment><USER12> Thanks for pointing me to his blog. He's a great read. Got anything else by him I should read/watch/listen?

</comment></comment></comment></comment><comment><USER13> If Om hurts your brain, I can't recommend Reagent enough: [http://reagent- project.github.io/](http://reagent-project.github.io/)

<comment><USER14> Can you explain why Om hurts your brain? I've heard other people say similar things, but I've never quite understood why. Is it cursors? Local component state?

<comment><USER15> OM components are complex. There are global transaction/message channels, component local state, an OO backpane, lifecycle functions, functional zippers, hierarchy organised data, etc. I can't understand how anyone could claim it to be simple.

Look at this example code, apparently held in such high regard that it is referenced off the front page of OM: [https://github.com/swannodette/om- sync](https://github.com/swannodette/om-sync) To me that is a ghastly, inexcusably complected hairball.

Don't get me wrong. I really like clojurescript. I program in it daily, on purpose. It is just that I'm shocked at the level of devotion and adulation for OM when there are really lovely alternatives like Reagent and Rum.

<comment><USER16> Some inaccuracies here about Om. There are no message channels. There are no functional zippers. Component local state and lifecycle are critical React integration points. Hierarchy organized data is not required - people have succeeded at integrating DataScript. om-sync isn't even an official thing, just got tired of people asking me about a basic example :)

If you don't like Om, that's really OK. The real goal of Om was always to inspire people to consider and research alternatives to traditional client- side MVC. 16 months in I would say with the large number of excellent alternatives, Om very much succeeded.

I hope Om Next accomplishes the same broad goal and convinces people to seriously consider the big ideas behind Relay/GraphQL, JSONGraph/Falcor, and Datomic.

<comment><USER17> I also feel that Om is very complex. I'm sure I've spent over 20 hours trying to wrap my head around it but didn't manage to do anything.

From the people that know it well, they all love it. But I don't seem to have the required knowledge to understand it. I feel somehow dumb by that. The docs aren't good also.

After that, I've tried reagent for 30 minutes and ended up with a lot of progress and I'm currently writing my first cljs small app. Everything seems to work and it's like clojure.

You have an atom and just have to write views in a hiccup style, everything magically works.

Maybe I will try Om later and get it, but it's not simple. I've been able to wrap my head around a lot of concepts with easy in my life, but Om felt too much.

<comment><USER18> Pairing with someone who's built a few Om apps should get you up to speed in no more than 45 minutes. I've done it a few times now, and it just takes a few examples, building some components, and composing them together.

<comment><USER17> I don't know anyone with interest in Om/clojure though :(

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> _Taking the 'splitting' argument head on, I don't believe that having a planned split between 'front end' and 'back end' developers is a good idea at all._

I don't like that he seems to have to concoct that argument to sell ClojureScript. The argument seems artificial.

There's lots of reasons to decouple the front-end development from backend development. In fact, once you start using a client framework and use the backend as a service layer you can really decouple your layers. Doing web stuff, I primarily work in ASP.NET MVC and I'm trying to get rid of razor completely.

In fact, If I had my way, I'd have css/photoshop jockeyes (with a little angular/whatever knowledge) in charge of the client, a javascript/Typescript guy doing the client MVC, and a data guy doing Web API.

Agile tends to frown on these distinctions. I don't buy it , just like I don't buy a lot of the Agile dogma. Oh well.

</comment><comment><USER20> I notice the author employing a bit of jiu-jitsu I see sometimes -- basically, that you shouldn't worry about designers not understanding ClojureScript (or whatever), because that is insulting to the designers.

But how about designers have 18,000 other things to deal with and maybe they aren't interested in learning (in their estimation) the latest wacky-ass way web developers invented to generate HTML. The point isn't that they couldn't understand it if they tried, the point is that they would have to try, perhaps to the exclusion of something they would consider more useful.

<comment><USER21> I agree with this. The author should've mentioned enlive (you got a similar library that supports om) which allows html to be html, which should make designers happy.

</comment></comment><comment><USER22> So I tried Clojurescript and I liked it as a language. In terms of fit for a compile-to-Javascript language, it is probably the best implementation out there, partially due to Javascript's dynamic lispy origin. But it has a a major problem: It's not Clojure. It might be a Clojure-like language, but its not Clojure. So you still end up "splitting", but when you split you have to squint harder at the details. As far as fidelity to the native language, I've found Scala.js to be much better.

I can't wait for WebAssembly though... it will be a game changer for people that prefer strong static typing for managing logical complexity.

<comment><USER23> I haven't used Scala.js, but I find Clojure and ClojureScript to be so damn close to identical I'm surprised at this comment. When I'm doing ClojureScript, everything I use from syntax, sequences, persistent data structures, core.async, protocols and records (the list seems endless) is the same as Clojure. The only thing that trips me up is regular expressions. In fact, I find there's a great deal more difference in the Scala written by any given two Scala developers than between Clojure and ClojureScript.

</comment></comment><comment><USER24> I've come to appreciate some of the new ES6 features (anonymous functions, lets) much more after using their equivalents in ClojureScript.

Also, The interactive REPL based workflow that a lot of the LISP languages utilize is extremely appealing. I've been thinking a lot about how to bring this back into the JS world. I have yet to find any good literature on it, but I will be exploring this area more.

For those curious, here are some blogs that convinced me to finally give Clojure a spin:

\- [http://rigsomelight.com/2014/05/01/interactive- programming-f...](http://rigsomelight.com/2014/05/01/interactive-programming- flappy-bird-clojurescript.html) (seems like this is the stereotypical "you should try ClojureScript because... " post)

\- [http://thinkrelevance.com/blog/2013/06/04/clojure- workflow-r...](http://thinkrelevance.com/blog/2013/06/04/clojure-workflow- reloaded) (a bit code-heavy, but an admirable workflow)

\- [http://swannodette.github.io/2013/11/07/clojurescript-101/](http://swannodette.github.io/2013/11/07/clojurescript-101/) (dealing with asynchronous code)

I'm curious HN, anyone out there making strides in interactive JS development, akin to the 2nd blog post I referenced above?

<comment><USER25> Honestly this is the part I hate most about Clojure. The tooling is always so convoluted to setup and by the time you start your next project something has changed again, requiring more changes which might break your tool chain. ClojureScript is especially guilty of this right now with all the recent repl changes.

I appreciate the The CS team trying to work with 3rd party repl developers right now, but it doesn't seem to be helping much. It's pushed me back to simple gulp based es6 dev using ramda, rxjs, immutablejs, etc - basically the parts of clojurescript I like. The only thing I sort of miss from Clojure are macros and homoiconicity - it sure is nice to look so uniform, but the tooling just drives me away.

<comment><USER26> I can agree with that with clojurescript, but I disagree that clojure itself has this problem.

Clojurescript -should- be calming down soon. It is in a stage of changing constantly ATM but that should calm down once some of the underlying tech is stabilized (like clojurescript bootstrapped from clojurescript).

<comment><USER18> I get the same impressions. Even working with ClojureScript professionally for ~3 years, contributing to the compiler (a tiny, tiny bit), and diving deep into a lot of the libraries... the tooling story is way too chaotic for me.

But I'm somewhat OK with it, as the changes generally seem to be positive, and I have hope that the stability will coalesce around a good, rather than rotten-but-papered-over, core.

<comment><USER27> I feel the same way. The ClojureScript compiler routinely makes the conceptually sound choices even in the face of breakage. This leads to unstable tooling but the quality of the underlying code allows for bigger and better conceptual improvements.

</comment></comment></comment></comment></comment><comment><USER3> Much more relevant than WASM in 2015 is that modern Javascript development is also moving towards compilation. There's little fundamental difference between compiling ES7 via babel.js vs compiling clojurescript.

<comment><USER20> I had a similar thought, though for me that's a reason to keep using Babel and ES.next rather than ClojureScript. I find lispy syntax difficult to read.

</comment></comment><comment><USER28> One thing Clojure/ClojureScript desperately needs is an answer for progressive-enhancement.

<comment><USER29> No it doesn't. You can literally do the same thing you did with PHP in 2007 if you want to (have a controller that outputs xml to be transformed into jquery commands if an ajax call or renders html if not ajax). You could also do something less silly like share your templates (maybe via hiccup and its many cljs implementations or via enlive/enforce/kioo (or via Soy, or anything else really)). If you want to get really fancy, you can actually just render your js server side via nashhorn and then rebind whatever modern rendering library you choose (React, Ember, etc) onto the rendered html at runtime. This is all ignoring the fact that nothing prevents you from serving html from server-side templates and keeping your cljs codebase completely separately ala most web apps (then progressively enhancing with whatever you normally would).

<comment><USER28> It really does. Isomorphic is the new standard. Doing it in a very manual way is not good enough. Every new JS framework is expected to do this out of the box and the older frameworks are scurrying to gain support.

<comment><USER29> React literally does this out of the box. Om does it (based on react). Reagent does it (based on react). Using js/React (raw js interop) does it. There is actually nothing to do. You exec your js in a nashhorn thread. That gives you some html. You ship it your browser on initial GET, then initialize react on it.

This is identical to what you'd be doing on react+node. With a macro or two, it's easier than anything node provides.

As an aside, isomorphic isn't a new anything. We were rendering pages on the server, rendering updates on the server with the same templates, sticking them in xml representing jquery dom manipulation, and pipelining those in a single request since at least 2007 (when I first encountered the technique and shipped with it, I believe we used a javascript library called Taconite, maybe since 2005 from looking at the sourceforge account). Progressive enhancements were rendered off the same templates and inserted asynchronously, automatically, based on whether the controller on the server detected it was an ajax request or a bare GET. This incidentally made things very cacheable.

<comment><USER30> Do you have a link to these macros?

<comment><USER31> Here's a spot to start from: [https://github.com/DomKM/omelette](https://github.com/DomKM/omelette)

EDIT: The example in the link provided builds on the now deprecated CLJX, so it's not entirely up to speed. (CLJX was the way to write clj/cljs in the same codebase until "reader conditionals" came along).

</comment></comment></comment></comment></comment></comment><comment><USER32> By the time JavaScript is being compiled down to WebAssembly you'll probably also be able to have the full Clojure, Scala, Java and other JVM based languages (also .Net languages) compiled down there as well.

<comment><USER33> That's going to be long time coming. To be a suitable target for higher level languages wasm is going to have to gain GC, method dispatch instructions (preferably with the sort of machinery invokeDynamic on the JVM provides, because method dispatch isn't identical across languages), dynamic code loading, threads, and probably a bunch of other stuff.

Wasm is definitely a good start, but it is only a start right now. It's a good target for AOT languages, but really not suitable for interpreted or JITed ones right now.

<comment><USER34> I'm not sure why you say that a traditionally JITed language won't benefit from this. We've had AOT compilers for the JVM and for .NET for years.

The perf may be slightly worse, but we've had good-enough perf forever.

</comment></comment></comment><comment><USER35> I'm still waiting for stable tooling support. With Clojure 1.7, the introduction of Reader Conditionals via `.cljc` is a step in the right direction.

The tooling still isn't quite ready yet. I've tried porting some `.cljx` code over, but it's not quite working for me yet with leiningen.

</comment><comment><USER36> Really enjoyed reading this, Jon, thanks for sharing it :-)

If nothing else it has added another unit of weight to the idea that I need to adopt CljS quickly before I am left completely behind. Now all I need is a project and more free time than I currently have... ;-)

</comment><comment><USER37> While clojureScript is awesome and gets you to think differently when writing javascript, I think a more interesting thing people should check out it es6 (or ecmascript 6, or es 2015, w/e it's called now.). It brings many new things to javascript that people from other languages will be used to...likes the "class" syntax. Right now you can write near 100% es6 standard with a pre- compiler. Most use babel. Soon it will run on all the latest browsers without though, making it far better to write then a language that compiles to JS. JS is nice now, I know I know, just give it a try =p

Also, another thing to look at is eithe Facebook's flow or Typescript. It adds some type checking, really great. Especially if you are writing server side in Node.

<comment><USER38> 'class' is one of the most commonly mentioned but least useful constructs available in ES6. Things that win out over it? Destructured assignment, sane module syntax, arrow functions, true block scope variable declaration, and constants.

<comment><USER37> Yes, but people coming from java or c# or something will like it. Despite it being just syntactical sugar. I wasn't about to list out all the benefits of es6, that would take several entire blog posts.

<comment><USER39> I would rather see ES6 with no class support whatsoever and having people learn to code without them instead of adding features to satisfy the lowest common denominator.

I've used classes in CoffeeScript and regretted it every single time. Once your web project starts to grow in scale classes quickly become your first pain point. Especially given how functional JS libraries have become nowadays.

<comment><USER38> Composition over inheritance wins, so hard.

(edit: downvote for a typically well-thought-of idiom, especially with regard to a language like js? .. if you disagree, why not talk about it?)

<comment><USER28> Classes are unavoidable in JavaScript if you care about performance. Recreating redundant functions inside a closure in performance critical code is a sure way to have slow apps.

<comment><USER39> Creating an object and creating a closure both need to allocate memory in the VM, but the closure doesn't need to expose its internals the way an object does and therefore can be further optimized by the runtime.

If you need to write performance critical JavaScript, then allocating new objects will be just as slow as creating new closures. In either cases you should allocate them ahead of time and then closures are still the clear winner.

<comment><USER38> > Creating an object and creating a closure both need to allocate memory in > the VM, but the closure doesn't need to expose its internals the way an > object does and therefore can be further optimized by the runtime.

Actually... creating an object instance via a constructor lets the runtime use an internal class, which improves performance (as long as you don't modify its properties post-construction). This is a well-known aspect of V8 performance.

<comment><USER39> Even with an internal class you're still doing lookups for properties. A closure can instead use local variables which are accessed by index. Why do you think its good practice to pull properties out of objects and into local variables before a tight loop?</comment></comment></comment></comment></comment></comment></comment></comment></comment>


Risk of Misplaced Arguments in Java - <AUTHOR> https://lilit.dev/blog/misplaced <comment><USER2> This is available in intellij too. Kotlin supports named parameter which makes the problem go away alltogether.

<comment><AUTHOR> Yes, Scala also supports named parameters, though there is still risk when we don't use it. A while ago, I actually made a Scala compiler plugin ([https://github.com/GIVESocialMovement/scala-named- argument-c...](https://github.com/GIVESocialMovement/scala-named-argument- compiler-plugin)) that enabled us to selectively enforce which method required named parameters.

Anyway, Lilit brings IntelliJ's awesome features to your browser, directly on github.com (i.e. within pull request) :)

Please let me know if you are interested to try it with your Java repo.

<comment><USER2> Didn't mean to sound grumpy, Lilit looks like a cool product that solves a real problem.

<comment><AUTHOR> Oh no. I didn't read your comment that way at all. But thank you anyway for being proactively courteous about it.</comment></comment></comment></comment>