Top 5 online wireframing tools for startups - <AUTHOR> http://startupworks.co/blog/2014/03/07/top-5-online-wireframing-tools-for-startups/

<comment><USER2> 11 tools, all free...

[http://codecondo.com/free-wireframe-tools/](http://codecondo.com/free- wireframe-tools/)

<comment><AUTHOR> Too long didn't read :D

In the link I submited not the price is criterion but features. Thanks for your link, though. Some day I may have a use of it.</comment></comment>


Zero Marginal Cost of Digital Technology - <AUTHOR> http://continuations.com/post/170801220375/world-after-capital-digital-technology-zero <comment><USER2> I wrote a similar article without the bold claim that marginal cost IS zero - [https://ckluis.com/the-marginal-cost-of-software- approaches-...](https://ckluis.com/the-marginal-cost-of-software-approaches- zero-7fda166f219f)</comment>


Drug Traffickers Seek Safe Haven Amid Legal Marijuana - <AUTHOR> http://abcnews.go.com/US/wireStory/drug-traffickers-seek-safe-haven-amid-legal-marijuana-36564435 <comment><USER2> I see a bit or irony here.

FTA: _The Obama administration last month urged the Supreme Court to reject the suit, saying that the leakage was not Colorado 's fault._

But just a few weeks ago, the same President argued that gun crime in Illinois is Indiana's fault for having less restrictive gun laws.

<comment><USER3> No one's vape ever ricocheted off a wall into a child's chest cavity...

Prosecutors have full discretion on the most important cases they choose pursue. This would be an exercise of that discretion.

<comment><USER4> The argument isn't one of severity, but of responsibility so your comment doesn't really address the argument being made.

</comment></comment></comment><comment><USER5> This is one of the least surprising "negative" outcomes of legal marijuana in selective states. I put negative in quotes just as a signal that it's not exactly optimal, but there's an argument that by moving their growth operations somewhere legal, it reduces the likelihood of violence in that particular aspect of the black market marijuana industry.

<comment><USER6> In CA, making grows legal has just made the illegal grow problem _worse_ , since the legal crop masks the illegal crop in the supply chain. We have huge problems with illegal grows on public lands (or other people's private lands out of easy view) and the concomitant adverse effects (toxins, erosion, dumping, workers imported illegally, violence against neighbors and enforcement agencies, price pressure on legal operations, ...).

<comment><USER7> Interesting - do you have a reference for this?

<comment><USER8> [http://journals.plos.org/plosone/article?id=10.1371/journal....](http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0120016)

</comment></comment></comment></comment><comment><USER9> I personally can't stand weed, mostly for the smell and allergic potential of public or shared-wall-dwelling smoking. At some level, it was a joy to move out of Colorado, to an "illegal" place where public and apartment smoking is much more rare.

Even to me, with this admitted bias, this article is another great argument for 50 state legalization. Chasing legal weed across state lines is a huge resource-sink which wins us exactly nothing as a society. Just get it over with and legalize it everywhere, and use the funding you saved to step up enforcement of DUI laws, substance abuse help programs, and hell, fixing bridges and laying fiber.

<comment><USER10> You really think there's less weed smoking where it's illegal? How does that work? Drug laws work so it's next to impossible to obtain them? Fear of getting caught?

<comment><USER6> <You really think there's less weed smoking where it's illegal?>

On this same thread, you wrote: "restrict gun sales and you reduce gun crime." So, why are the economics of banning guns vs. banning weed such opposites in your view?

<comment><USER10> I don't see the connection between guns and drugs.

</comment></comment></comment></comment><comment><USER11> Colorado to other states: sounds like a you problem.

</comment><comment><USER12> It seems there's a very simple solution to this problem....

</comment><comment><USER13> > _That "is really hard to curb," he said. "We can't essentially babysit > adults and their behavior."_

We need more people like this in government.

</comment><comment><USER14> I would think that all of the ins and outs of these different-legality-by- state issues were mostly sorted during Prohibition. So, it's fun to speculate about who won the 'exporting devil alcohol' legal debates of the 1920s. We definitely would not benefit as a Union from having export controls implemented by states, which of course just shows up some of the weirdness of having a federated legal system.

</comment><comment><USER15> Url changed from [http://www.latinpost.com/articles/112868/20160202/marijuana-...](http://www.latinpost.com/articles/112868/20160202/marijuana- legalization-colorado-killing-mexican-drug-cartels.htm), which points to this.

<comment><USER16> thanks for this. wondering what was the motivation for the change!

<comment><USER15> The site guidelines:

 _Please submit the original source. If a post reports on something found on another site, submit the latter._

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)</comment></comment></comment>


Don't rely on algorithms to make life-changing decisions - <AUTHOR> https://www.ft.com/content/f32b3124-6b77-4b33-9de1-7dbc6599724b <comment><AUTHOR> Non paywall link: [http://archive.is/JGQiH](http://archive.is/JGQiH)</comment>


Apple removes Flash CS5 export restrictions, should I stop learning Objective-C? - <AUTHOR> http://www.sosuke.com/index.php/2010/09/09/apple-removes-flash-cs5-export-restrictions-should-i-stop-learning-objective-c/

<comment><USER2> I _guessing_ that you'll be much happier with your apps written in Objective-C. They will be snappier, they will have instant access to new APIs as Apple releases them (as opposed to being tied to Adobe's flash engine update release cycle), they will probably consume less power and thus will make your users happier, and I'm not 100% sure the user experience is as good with flash apps in general. But, it's great to have a choice and it makes it plausible to "just get it out there" and then rewrite in objective-c if needed/required.

</comment><comment><USER3> I wouldn't bet on Flash CS5 apps being accepted anytime soon. You're still required to adhere to the iOS look and feel, apps that behave differently will be rejected.</comment>


The power of a 'not-to-do' list - <AUTHOR> http://www.bbc.com/capital/story/20170919-the-power-of-a-not-to-do-list <comment><USER2> I had a 'not to do list' a few years back and it helped me immensely.

* Don't step on someone's ego (people are very egoistic and I have or had a habit of cracking worst jokes, without an ounce of remorse)

* Don't get emotionally involved with takers (there are givers and takers in the world... it's so much better to give to givers)

* Don't make important decisions when tired (prevented me from sending emails when I was too tired and silly ones)

I have been a freelance developer and an entrepreneur for last few years. They might seem silly but did help me out become better at managing things. :-) Does anyone else wants to share theirs.

<comment><USER3> What are yoir definitions of "takers" and "givers"?

<comment><USER4> There is a bestselling book "Give and Take: Why Helping Others Drives Our Success" about these concepts by Adam Grant[1]. From the description:

> It turns out that at work, most people operate as either takers, matchers, > or givers. Whereas takers strive to get as much as possible from others and > matchers aim to trade evenly, givers are the rare breed of people who > contribute to others without expecting anything in return.

[1] [https://www.amazon.com/gp/product/0143124986](https://www.amazon.com/gp/product/0143124986)

<comment><USER5> Sounds like pseudo-science and arbitrary categories defined by the book author.

I wonder how that's defined at work, considering intellectual knowledge work isn't something you can physically give, match or take.

<comment><USER6> Actually, I have a co-worker (database guy) who is very much a giver of his intellectual knowledge. Awesome to work with.

</comment></comment></comment></comment></comment><comment><USER7> Skip reading this article and go straight to one referenced within it [https://medium.com/@awilkinson/the-power-of-anti- goals-c38f5...](https://medium.com/@awilkinson/the-power-of-anti- goals-c38f5f46d23c)

<comment><USER8> Original article is much better. The "Not To-Do" List was inspired by Charlie Munger's idea of inversion.

 _"Problems frequently get easier if you turn them around in reverse. In other words, if you want to help India, the question you should ask is not 'how can I help India,' it's 'what is doing the worst damage in India and how do I avoid it?"

"A lot of success in life and business comes from knowing what you want to avoid: early death, a bad marriage, etc."

"It is remarkable how much long-term advantage we have gotten by trying to be consistently not stupid, instead of trying to be very intelligent."_

<comment><USER9> where is this quote from? I want to learn more about Charlies thoughts. What should I read?

<comment><USER10> Surely you need to ask what you _shouldn 't_ read?

</comment></comment></comment></comment><comment><USER11> Crappy article, but the concept is powerful and particularly relevant for startups.

Prioritization is key for making meaningful progress every day. Your list of 'to-dos' will seem endless so you must learn to pick and choose only the most valuable activities. And sometimes that means saying no to other valuable but not as critical ones.

</comment><comment><USER12> "Focus is a matter of deciding what things you're not going to do." \- John Carmack

</comment><comment><USER13> Not really anti-goals but I think one of the great side of David Allen's GTD is that you are reviewing things you are not doing but you would like to (someday/maybes, incubation) on a consistent basis. So you won't feel bad about it and can be conscious with not doing.

</comment><comment><USER14> I like the idea of anti-goals, will have to try that. So far I've had a lot of luck with the following:

\- Recognizing "anti-matter-blocks" on my calendar: Letting go of blocks of time in which I _should_ be productive and constructive, but am not. I kept a log and found that the 1-3:30 p.m. time block was ridiculously unproductive and typically filled with high self-pressure, so I decided to completely let it go. Now I use that block as a rest period and do whatever I want. Watch a movie? Great. Two-hour hike? Done, many times. This is still an experiment to which I make little tweaks (going on about 3 years now) but it taught me to accept my roadblocks for what they are and use them to some other advantage (in this case, mental health / recuperation). To top it off, as a stress response I was feeding a bad habit during that block of time for about 10 years, and as of two years ago, it's completely gone.

\- Intuitive task priority. I fill my to-do list with fun things and not-so- fun things, and start with whatever "speaks to me." If nothing on the list speaks to me, chances are I have neglected to add fun things. And if my work items do not seem fun _ever_, I need to alter my work and seek out different forms of work or set firmer boundaries. This latter fact is difficult but worth facing up to.

\- Verbalizing my problems with the day to other people. This is hard for me because I don't want to sound like I'm whining, but has worked surprisingly well. Sometimes I get feedback like, "well, why don't you just do X instead," where X is an idea I hadn't considered. Other times there's no one around so I consult with a person I deeply respect as if they're present & ready to help me (the cabinet of invisible counselors idea) or even say a prayer. I've had amazing results with these last methods, somehow even better if I'm typing them out as I experience them.

\- Blocking in things I really look forward to. This is mentioned in the article. I enjoy achievement and find that it helps reverse feelings of exhaustion. For me, little achievements peppered in here and there throughout the year are where it's at. I blocked in the ARRL amateur radio licensing exams as a personal challenge and downloaded an app to help study. I blocked in a couple of conferences that are outside of my field but very interesting. I block in webinars in various fields and even ended up pursuing and earning certificates in those fields. I built a new website to help those who are interested in one of those fields and challenged myself to add 1,000 new items of content before the end of the year. I'm at 250 so far after 2 weeks (I count links! The currency of the web...but it's a niche field so it's still hard).

Well, this went longer than I thought. But with some serious achievements finally under my belt, with bad habits conquered and work going better than ever, I figured it might help someone to share.

<comment><USER15> Another technique that helps me is always holding back a few smallish productive tasks that you can do if you are stuck on another project. More often than not, switching projects for a few hours clears my head for the original project and accomplishing a small task reduces my frustration level significantly.

</comment></comment><comment><USER16> Wouldn't meeting only with people that one likes lead to reinforcing one's echo chamber?

<comment><USER17> Is that always bad? People often advise to be around people with the same goals and ambitions as you to keep you motivated and on the right path.

It's that echo chamber of "you can do it" that often leads to people actually doing it.

<comment><USER18> The situation I see this happen the most is Company wants to encourage high morale with positive internal messaging, which gets the echo chamber treatment from management. This messaging minimizes self-critical/negative feedback, which results in problems going unhandled, which results in them developing into worse problems until Company becomes embarrassed into taking them seriously.

But I can see how a positive echo chamber could help get something off the ground.

</comment></comment></comment><comment><USER19> So it's really about setting clear boundaries.

Contrary to the Medium post, I schedule each meeting as first thing of the day, so it's out of the way and doesn't cockblock deep work I want to do. Even better is no meetings, but sometimes they're just unavoidable.

<comment><USER20> I typically work best in the morning. I have my most productive hour the first hour I work. If I'm able to get flow on my project then it will carry me a couple hours into the day. Once I'm pulled out of my flow or I tire, I find it hard to get back in. This is the time I'd like to spend having conversations and/or meetings, with other people helping to spur my imagination.

I can't always control my schedule to this degree, because I work for others, but it's ideal for me.

I suppose it works this way for "morning people".

<comment><USER21> I only book external meetings Wednesdays and during lunch. If next Wednesday is full, the meeting goes on to lunch date or the week after. We're a small shop and all of our employees have to do this (noone is only sales, everyone is part of our code base). Works great for us.

Internal meetings are kept short. 30 minutes each morning, 30 minutes after lunch.

<comment><USER22> I do something similar and try to get all meetings on the same day(s). Of course this doesn't always work given others schedules, but does help because most of the time nothing is so critical it can't wait a few days to be discussed.

</comment></comment></comment></comment><comment><USER23> If you understand German, you might enjoy Volker Strübing's song on this topic: [https://youtu.be/T4DWCJfkyzk?t=333](https://youtu.be/T4DWCJfkyzk?t=333)

<comment><USER24> Which is inspired by Marc-Uwe Kling and the kangaroo respectively.

</comment></comment><comment><USER25> The title and idea are great, the post itself not so. However, one part of my 'not to-do list' ist my /etc/hosts file. All the worst time wasters go there and redirect to 0.0.0.0.

</comment><comment><USER26> When we are approaching new somewhat abstract project idea we do a IS and IS NOT exercise and get the sponsor to sign off on the lists. This has been helpful in the last 15 years of my career.

</comment><comment><USER27> I can see how this can go wrong.

* Don't look at porn for more than 30 minutes today.

* Don't eat any chocolate or other unhealthy food.

* Don't work on that side project.

<comment><USER28> I don't follow - how is this "wrong"? If those are things you want to eliminate, why not eliminate them.

<comment><USER27> Because having a list of things reminding you what you should not do will often trigger the impulse to do it. I knew a friend who had such a list, she would immediately do everything on the list then vow not to do it again tomorrow. At some point, it became a habit to do those things on 'break' days.

</comment></comment></comment><comment><USER29> "the power of rules"

</comment><comment><USER30> I wish I could read this on android. It just redirects to a single ad.

<comment><USER31> Android is entirely useless without Adguard (or equivalent)

<comment><USER32> how is that an android problem?

the internet is borderline unusable without proper adblocking. Its the same on all platforms.

<comment><USER31> Sure. This just happened to be a comment about android.

</comment></comment></comment></comment><comment><USER33> This is just a waste of time. First, you must have common sense before you put your pants on in the morning.</comment>


The Problem of the Traveling Politician: a TSP around Iowa - <AUTHOR> http://campaignstops.blogs.nytimes.com/2011/12/21/the-problem-of-the-traveling-politician/

<comment><AUTHOR> The author is one of the world's experts on the Traveling Salesperson Problem (TSP). He has a new book on the TSP written for the general audience coming soon. <http://press.princeton.edu/titles/9531.html>

</comment><comment><USER2> I've always wondered about this sort of political touring - does it pay off in the polls? How many people see the politicians at a rally versus reading about them or seeing them on TV? Or is it that they get a lot of press from the tour? Or perhaps they meet people who become fired up to be their grassroots support?

I'm spitballing, but hopefully someone here has some data or knows a bit more about this?</comment>


Perez Hilton Calls for Facebook "Boycott" Amidst Content Controversy - <AUTHOR> http://ryanspoon.com/blog/2009/02/16/perez-hilton-asks-for-facebook-boycott-amidst-content-ownership-controversy/ <comment><USER2> Do internet-called boycotts ever have any measurable impact?

Even if it is measurable, do they ever last long enough to do any damage?

I'm really curious; does anyone know of a case study?

</comment><comment><USER3> Perez = The New Arrington?!

<comment><AUTHOR> Perez's traffic is bigger than TechCrunch + Techmeme And then a few multiples...

<comment><USER4> Not if compete is even in the ballpark.

[http://siteanalytics.compete.com/perezhilton.com+techcrunch....](http://siteanalytics.compete.com/perezhilton.com+techcrunch.com/?metric=uv)

<comment><USER5> It's not. Quantcast's direct measuring gives Perez 5.3m people a month.</comment></comment></comment></comment>


Do It For Denmark No one has solved Denmark's falling birthrate. Until now. - <AUTHOR> http://do-it-for-denmark.dk <comment><USER2> Nobody has solved the "problem" of a falling birthrate in a culture where there's easy access to birth control and general overall prosperity in an economic system where children are financial drains rather than financial assets, and they will continue to not solve it because it's not actually a problem?

<comment><USER3> Declining birth rate is not actually a problem? OK then. Also, referring to children as "financial drains" makes them look much worse than they really are. I wonder if you've ever had children..

<comment><USER4> Yes, and we've stopped at one because children are a financial drain.

As an example: if we both continue to work, weekday childcare will consume 70% of my wife's income.

Add to that all the other costs of raising children, and the potential income lost through not being able to take advantage of new opportunities as they arise, and I understand the Danish situation.

<comment><USER3> I guess I forgot an important thing inherent in Western society: children leave home and never come back, in most cases. From that perspective, I understand your decision, and I think it's logical in many ways. Your investment is an near-guaranteed loss, so why make it, right?

Where I'm from, things are different. It's the responsibility of the children to take care of their parents, especially during old age. In some cases, all of the children decide to live with their parents along with their families. I know it sounds weird, but it works in practice. This, I believe, makes raising children worthwhile, because there is a chance, even if it isn't that large, that your children will return the favor when you become old.

Sorry for the long rant by the way. I wish you and your wife good luck :)

</comment></comment></comment></comment><comment><USER5> I have a fantasy that birthrates continue to fall in the developed world, while urbanization continues to rise. Then we can demolish the empty suburbs and turn them into national parks.

A guy can dream, can't he?

<comment><USER6> This slightly reminds me of the movie named idiocracy.

</comment></comment><comment><USER7> I love that Google Translate converts this to "Do It For Ireland"

<comment><USER8> you can switch to the english version by clicking the union jack in the upper right corner ;)

</comment></comment><comment><USER9> Japan needs one of these!

</comment><comment><USER10> twitter message:

 _" Take a Spies city-trip. Make a baby. Stop Denmark's declining birth rate and win baby gear. #doitfordenmark [http://do-it-for-denmark.dk/"*](http://do- it-for-denmark.dk/"*)

</comment><comment><USER11> Any Danish care to comment?

<comment><USER12> Ugh yes, and someone just posted an ad for a travel agency to HN. I hope they're proud or at least in some sort of referral program. ;)

</comment></comment><comment> E-for-Endetta Why is this on HN?</comment>


Searching 20 GB/sec: Systems Engineering Before Algorithms - <AUTHOR> http://blog.scalyr.com/2014/05/06/searching-20-gbsec-systems-engineering-before-algorithms/?updated=true <comment><USER2> This comes up in my work modestly frequently, generally with a slightly different scenario for the tradeoff between "complicated and considered" versus "cheap and dirty but gets the job done."

e.g. We could spend 3 weeks using feature vectors and backtesting against prior data to figure out what signals accounts which are likely to churn send (for the purpose of proactively identifying them and attempting to derisk them, like by having the customer success team help them out directly)... or we could write a two-line if statement based on peoples' intuitive understandings of what unsuccessful accounts look like. (No login in 30 days and doesn't have the $STICKY_FEATURE enabled? Churn risk!)

The chief benefit of the second approach is that it actually ships, 100% of the time, whereas priorities change and an emergency develops and suddenly 75% complete analysis gets thrown in a git repo and forgotten about. Actually shipping is a very useful feature to have.

<comment><USER3> I get the feeling this is more "era-defining" than that...

What hit me was the "Processors are so fast now we can Brute force grep over 100GB in a second".

We are entering a world where 20TB on a magnetic disk is viable, but randomly accessing that data could take months to extract. So how we store data on disks will become vitally important to how we use the data - not unlike tape drives of pre-1980s era where rewinding to the front of the tape cost you several minutes of (expensive) waittime.

Imagine a scenario where these guys design how to stream logs to the disk to maximise streaming reads, then optimise reading that out to SSD thence to RAM and L2 and so forth. All designed to drive text past a regex running at bazillions of times a second.

Lets call it the New Brute Force, where its just as much effort to get out the door as elegant algorithms, but it is much much much simpler. And of course, sells more hardware.

Expect to see Intel Inside wrapped around the New Brute Force any time soon :-)

Edit: And they used Java ! I was expecting low-level C optimisations all over the place

<comment><USER4> _What hit me was the "Processors are so fast now we can Brute force grep over 100GB in a second"._

Ironically, this may only be because grep uses very well tuned, not immediately straightforward algorithms. See in particular [http://lists.freebsd.org/pipermail/freebsd- current/2010-Augu...](http://lists.freebsd.org/pipermail/freebsd- current/2010-August/019310.html)

<comment><USER5> Awesome read, thanks for sharing! Almost worth a HN post in itself if you ask me.

<comment><USER4> I think it was posted a while back; it was an interesting enough article that it stuck in my head and I was able to find it pretty easily by googling "why is grep so fast?".

Ah, here it is:

[https://news.ycombinator.com/item?id=2393587](https://news.ycombinator.com/item?id=2393587)

And again!

[https://news.ycombinator.com/item?id=6813937](https://news.ycombinator.com/item?id=6813937)

And duplicate submissions are listed in those postings.

</comment></comment></comment></comment></comment><comment><USER6> I wrote a simple code search tool a number of years ago that had the ability to run arbitrary regex queries on a codebase, much like a recursive grep. I was working on a medium sized codebase and our primary platform was Windows. The problem with grep was that opening and scanning lots of small files apparently wasn't something that Windows was optimized for. If the file cache was cold, a simple search could turn into minutes of waiting.

My approach was to, essentially, concatenate all files into a single blob. The search tool would then let the regex loose on the contents of that single file. I had a simple index on the side to map byte positions to filenames. To get a line number from the position I would simply count the number of newlines from the start of the file to the regex match position.

Add some smarts to avoid duplicating work, compression and multithreading and I had a tool that could find all lines that contained "int(8|16|32|64)_t" in the Linux kernel source in a third of a second. This was about 20 times faster than grep (with a hot file cache).

It was a simple solution that scaled well enough to handle the codebases I was working on at the time without problems. I later read Russ Cox's article[1] on how Google code search worked. I recommend that article to anyone who's interested in running regular expressions on a large corpus.

Edit: The source[2] is available on github. Tested on Linux and Windows.

[1] [http://swtch.com/~rsc/regexp/regexp4.html](http://swtch.com/~rsc/regexp/regexp4.html)

[2] [https://github.com/kalven/CodeDB](https://github.com/kalven/CodeDB)

<comment><USER7> > The problem with grep was that opening and scanning lots of small files > apparently wasn't something that Windows was optimized for.

It's something _hard disk drives_ were not optimized for.

<comment><USER6> Windows is (or at least was) a dog when it comes to this even if the files are in the cache. Like barrkel said, the number I quoted was for the case when the OS doesn't hit the drive.

<comment><USER8> Random rant time!

You have to code for Windows just so. Dear POSIX people in general, there is more to cross platform coding than being able to build it with cygwin.

Every grep I've used on Windows handles wildcards, so it must be doing the expansion itself. The right way to do this sort of thing on Windows is to call FindFirstFile/FindNextFile, which is a cross between readdir and stat in that each call returns not only the name of one directory entry that matches the pattern (as per readdir+fnmatch) but also its metadata (as per stat). So, if you were going to call readdir (to get the names) and then stat each name (to get the metadata), you should really be doing all of it in just this one loop so that each bit of data is retrieved just the once.

But this is exactly what POSIX programmers would seemingly never, ever do. Probably because doing it that way would involve calling a Win32 function. Well, more fool them, because getting this data from FindFirstFile/FindNextFile seems pretty quick, and getting it any other way seems comparatively slow.

I cobbled together a native Win32 port of the_silver_searcher a while ago and it was about twice as fast as the stock EXE thanks to retrieving all the file data in one pass. In this case the readdir wrapper just needed to fill in the file type in the dirent struct; luckily it seems that some POSIX-style systems do this, so there was already code to handle this and it just needed the right #define adding. (I have absolutely no idea why MingW32 doesn't do this already.)

Prior to switching to the_silver_searcher, I used to use grep; the grep I usually used is the GNU-Win32 one ([http://gnuwin32.sourceforge.net/packages/grep.htm](http://gnuwin32.sourceforge.net/packages/grep.htm)), and it looks to call readdir to get the names, and then stat to get each name's details. I checked that just now, and after all those years I can finally imagine why it's so slow.

GNU-Win32 find is really slow, too.

<comment><USER9> Aside to the discussion, can you point out a link to the changes you did? I'd like to get silver searcher faster as well on windows.

<comment><USER8> Sure. Here's a binary: [https://github.com/tom- seddon/the_silver_searcher/tree/_vs20...](https://github.com/tom- seddon/the_silver_searcher/tree/_vs2012/bin)

The source code is there too, but I wouldn't look too closely. "Cobbled together", like I said. Though I've been using it all the time, in conjunction with ag-mode - [https://github.com/Wilfred/ag.el](https://github.com/Wilfred/ag.el) \- and haven't noticed any obvious problems.

</comment></comment></comment></comment></comment></comment><comment><USER10> A friend of mine does a lot of work that often boils down to neighborhood searches in high-dimensional spaces (20-200 dimensions). The "Curse of Dimensionality" means that trees and tree-based spacial data structures are ineffective at speeding up these searches because there are too many different paths to arrive at nearly the same place in 150 dimensional space.

Usually the solutions end up to use techniques like principle component analysis to bit-pack each item in the dataset as small as possible. Then to buy a bunch of Tesla GPUs with as much RAM as possible. The algorithm then becomes: load the entire dataset in the GPUs memory once, brute force linear search the entire dataset for every query. The GPUs have enormous memory bandwidth and parallelism. With a bunch of them running at once, brute forcing through 30 gigabytes of compressed data can be done in milliseconds.

</comment><comment><USER11> _modern processors are really, really fast at simple, straight-line operations_

Also really tiny loops; what slows them down is having to make lots of conditional branches/calls.

This related article could be interesting for those who are curious to know how fast plain C (not even inline Asm) can do string searches: [http://www.codeproject.com/Articles/250566/Fastest-strstr- li...](http://www.codeproject.com/Articles/250566/Fastest-strstr-like- function-in-C)

I do wish Intel/AMD would make the REP SCASB/CMPSB instructions faster, since they could enable even faster and efficient string searches limited only by memory bandwidth. (Or they could add a new instruction for memmem-like functionality, although I'd prefer the former.)

</comment><comment><USER12>
        I'd certainly seen this at Google, where they're
        pretty good at that kind of thing. But at Scalyr,
        we settled on a much more brute-force approach: a
        linear scan through the log

Art of Computer Programming mentions this methodology, and the importance of learning about it. There are entire sections of "Tape Algorithms" that maximize the "brute force linear scan" of tape drives, complete with diagrams on how a hypothetical tape drives work in the situation.

Few "fancy algorithms" books actually get into the low level stuff. But Knuth knows: modern computers are extremely fast at linear data, and accessing data linearly (as well as learning algorithms that access data linearly) is a good idea.

I'll bet you that a B-tree approach would be fastest actually. B-Trees are usually good at balancing "massive linear performance" with "theoretical asymptotic complexity". IIRC, there is some research into this area: (look up cache sensitive search trees)

<comment><USER13> Why would you need a B-tree when you only append to the end of the logs?

<comment><USER12>
        We use some special tricks for searches that are executed
        frequently, e.g. as part of a dashboard. (We'll describe
        this in a future article.)

And...

        (You might wonder why we store log messages in this
         4K-paged, metadata-and-text format, rather than
         working with raw log files directly. There are many
         reasons, which boil down to the fact that internally,
         the Scalyr log engine looks more like a distributed
         database than a file system. Text searches are often
         combined with database-style filters on parsed log
         fields; we may be searching many thousands of logs at
         once; and simple text files are not a good fit for our
         transactional, replicated, distributed data
         management.)

It sounds like they're doing more than just "appending to the end of the log". If you're going to make an index of any kind, the index will likely be fastest with some sort of B-Tree.

</comment></comment></comment><comment><USER14> They're not using any fancy algorithms...except when they implement a customized version of Boyer-Moore for better string searching in a critical section of their algorithm. Not to mention all the fancy algorithms optimizing their brute-force code underneath their immediately visible program.

A better title would be, "How we determined when to use brute force."

<comment><USER15> Say what you will, but while Boyer-Moore can be tricky to implement, it's not exactly a fancy algorithm.

<comment><AUTHOR> Exactly; "fancy" is relative. It's a bit tricky, but it's nothing like the complexity of maintaining and using a keyword index. The reference implementation given in the article we linked to is thirty-odd lines of code. What we're using in practice is somewhat larger, in part because Java is more verbose for this kind of thing, but still reasonable. (If there's interest, we'd be happy to post the code.)

<comment><USER16> Would love to look at your code...

</comment></comment></comment></comment><comment><USER17> _modern processors are really, really fast at simple, straight-line operations_

Exactly.

Especially given the overhead of the network: for most apps, if the user notices anything else, you've screwed up.

KISUFI [kiss-you-fee]: Keep it simple, you fantastic individual!

<comment><USER18> Canadian version of KISS?

<comment><USER17> Or the PG version of what I really mean. ;)

<comment><USER19> You are referring to the fantastically challenged?

</comment></comment></comment></comment><comment><USER20> I don't know that this is simple. There is a lot of fancy work going on getting data in and out fast.

I think it's more that memory is getting slower relative to CPU, as we all know, so complicated data structures that involve lots of random access to memory aren't so efficient anymore vs linear scans through memory that can benefit from cache. It's still engineering, just the tradeoffs have shifted.

</comment><comment><USER21> Interesting product. Have you considered writing an output plugin for Heka ([https://github.com/mozilla-services/heka](https://github.com/mozilla- services/heka)), so that people could use the parsers and client side aggregators etc written for Heka with your service?

<comment><AUTHOR> We'd certainly be open to that if asked. We practice Complaint Driven Development [0] when it comes to API integrations and the like -- we prioritize what our customers ask for.

For our core experience, we went with a custom agent because that allowed us to viciously simplify the setup process. But we're very much open to working with other tools as well.

[0] [http://blog.codinghorror.com/complaint-driven- development/](http://blog.codinghorror.com/complaint-driven-development/)

</comment></comment><comment><USER22> It's taught sometimes that the simple method is never the "good" approach, and that the fancier and more elaborate you are, the better the solution will be. I'm not just talking about code, either.

When did "simple" become such a dirty word? Simple isn't synonymous with lazy.

</comment><comment><USER23> Look at their pricing. The best gb/$ public plan, is 500$ month for (worst case scenario) 300gb of data at all time.

With that price, you can keep most of the data in memory-ssd and don't care to use fancy-algorithm.

But what if the pricing was 10x lower ?

<comment><USER24> 300 GB of ram, is going to cost ~ $3000/month.

Reading 300GB from an SSD is going to be way too slow. It will take minutes per search. In a simple test on linode, the SSD seems to read at about 1GB/s.

Their pricing seems like a bargain to me.

<comment><USER25> 300GB of ram might cost $3000/month on AWS. There are a few dedicated server providers that offer 384GB or even 512GB configs for less than 1000$/month.

<comment><USER26> lz4 typically compresses logs 6:1 (note: the "high compression" mode allows fast searching.)

</comment></comment></comment></comment><comment><USER27> This randomly reminded me of an ancient kuro5hin article that I found interesting back in the day. Where the proposal was to use brute force to implement comment search on kuro5hin.

[http://www.kuro5hin.org/story/2004/5/1/154819/1324](http://www.kuro5hin.org/story/2004/5/1/154819/1324)

</comment><comment><USER28> In BI, a similar tradeoff between lots of fancy preaggregation, versus optimizing search across the raw, un- (or lightly-) processed base data comes up quite frequently.

Commonly, the choice of approach is dictated by the number of end users querying the same data. If it's relatively specific queries ran frequently by many users, the aggregation approach can be made snappier and save lots of processing power.

But for power users, it becomes a nuisance real fast to be limited not only by stored base data, but also by the somewhat arbitrarily chosen aggregate structures. I'm assuming people doing log analyses of server logs fall within "power users" in most shops. At least I'd hope so :)

As an aside, the Go language (that I'm currently flapping between loving and not so much), versus Python at al., seems to be born of somewhat similar thinking.

</comment><comment><USER29> The article's title is: "Searching 20 GB/sec: Systems Engineering Before Algorithms".

Current title on Hacker News is misleading as the "simple code" is not compared against any "fancy algorithms". This is about not spending time devising fancy algorithms when the simple O(n) approach is good enough.

<comment><USER30> Thanks. We missed that one.

Submitters: It's against the guidelines to rewrite titles to put your own editorial spin on things. Please don't.

</comment></comment><comment><USER31> I've implemented a brute-force search with an exponential algorithm, in a context where the user would want instant results. Basically, I implemented a bipartite graph producing algorithm that took the "obvious, low hanging fruit" first, and only worked for a set amount of time. This produced a "sloppy matching" tool that did most of the user's busy work for matching natural gas coming from "upstream" and going to points "downstream." Then the user could eyeball a few optimizations and put those in by hand.

I've also implemented a "web search" that was just a complete scan through a text file. But this was back in 1997, and the amount of data we had didn't justify anything more complicated.

</comment><comment><USER32> Reminds of the way LMAX achieve high throughput and low latency on their trading exchange. One of the key points is that they use parallelism but not concurrency. Keep your threads busy doing one thing only and avoid synchronising with other threads. No blocking, no queues and they achieve >100K messages/s.

Where they do need pass messages between threads they use the famous LMAX Disruptor which keeps data copying and blocking to a minimum.

</comment><comment><USER33> I did a similar thing when holding a forum in Redis - generating a keyword index for searching took up 3x the amount of space of the raw text and, whilst faster for single whole word searches, fetching each article and grep'ing it in Ruby was plenty fast enough for my needs. Plus no overheads of index maintenance (new posts, expiring posts) and search limits ("only posts by X", "last 7 days") etc.

</comment><comment><USER34> Why not building on top of existing full text index/search engines? Why would I choose this over something like Kibana ([http://rashidkpc.github.io/Kibana/](http://rashidkpc.github.io/Kibana/)) that provides me with all this and more, is built on top of existing capable, scalable open source products, and is itself free and open source?

</comment><comment><USER35> Simple is an algorithm more or less. Simple and in-memory is something I've used in a number of cases. The other benefit of simple is reliability. 20-30 years ago this type of solution wasn't really possible but with today's 64 bit CPU's, tons of ram, (and if you have to ) SSD's a lot of what used to require cleverness can now be done with simple.

</comment><comment><USER36> In order to facilitate sub-word or wildcard searches can't you use a keycharacter index instead of a keyword index?

<comment><AUTHOR> Yes, you can go down that road [0], and in some applications it's a good approach. However, it adds quite a bit of complexity, and the cost for creating and storing the index is substantial. For us, it doesn't pencil out to a win.

[0] [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.362...](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.362.2207&rep=rep1&type=pdf)

<comment><USER37> I wonder if bitap [0] would be a good fit for the 4K search algorithm. It would let you do linear-time regexp matching for relatively short patterns (32 characters on a 32-bit machine, 64 characters on 64-bit, etc).

[0] [http://en.wikipedia.org/wiki/Bitap_algorithm](http://en.wikipedia.org/wiki/Bitap_algorithm)

</comment></comment></comment><comment><USER38> Who is the author of this? Byline please!

</comment><comment><USER38> Title should be, "Searching 20 GB/sec: Systems Engineering Before Algorithms"

</comment><comment><USER39> Herb Sutter gave a talk somewhat recently going over the basics of working intelligently with the cache. He had some kinda surprising results where naive algorithms on vectors/arrays outperformed the intuitively better list/tree approaches. Circumstances where you'd think all the copying elements and re- sizing std::vector would be expensive turn out not to matter.

[http://channel9.msdn.com/Events/Build/2014/2-661](http://channel9.msdn.com/Events/Build/2014/2-661)

The basic take-away is to always prefer std::vector and boost::flat_set/flat_map unless you have evidence to the contrary.

<comment><USER40> Heard the same thing from Bjarne Stroustrup. The cache properties of vectors are incredible.

</comment></comment><comment><USER41> How fancy and efficient the underneath runtime library, memory management, process scheduling, network stack, block I/O, device drivers have been designed and implemented so that someone can just write naive code to achieve such a high performance and think himself a genius.

</comment><comment><USER42> Always.

<comment><USER43> One can name thousands of examples (literally) where the simple code doesn't beat the fancy algorithm. What's your point?

</comment></comment><comment><USER44> Isn't this answered quite simply by "when they get the job done to your satisfaction?"

</comment><comment><USER45> @Author: First of all simple code and fancy algorithms are not opposites. Actually a very simple code (elegantly and concisely written) can be have a really fast performance on the order of O(1). What you're suggesting is a very naive way of looking at the problem.

Secondly, you need to understand Algorithm analysis in little more detail. If you look at run time analysis of your brute force algorithm, you can determine, of it grows in linear time, logarithmic, exponential etc and how to improve upon the core algorithm. Anyone can add more machines, more memory, faster processor which will obviously help in improving performance but in comparison to order of growth of 'n' all of that pales in the background.</comment>


Ask HN: Coming to the USA for a study exchange, where are the tech hubs? - <AUTHOR>

As the title hints at, I am studying software engineering at UNSW in Sydney. In the 1st semester of 2016 (my final semester) I want to go on exchange to the USA, and use that opportunity to have a fantastic college experience and to meet potential future employers.
What would you call the tech hubs of the USA? Silicon Valley is obvious, Seattle also comes to mind, and I have heard that Austin and New York (although is that just due to the size of the city, not density of tech companies) also are 'tech hubs'. Are there any other areas that I should consider that have a lot of larger companies that would be willing to sponsor the visa for a software engineering grad?
So apart from asking where should I go, the other question is 'what are the grad recruitment patterns in the American tech industry?' Are companies willing to help bring international graduates to them? Am I limited to large companies, or are smaller organisations also in a position to hire overseas applicants? Are there fixed intakes once a year for new grads (common in Australia) or is the door open year round? Thanks, just trying to weigh up my options here <comment><USER2> If you are working for work after graduation I would consider the school rather than the location. It is easier for a large company to sponsor a visa than a small one and a large company will visit all the good schools. Plus if you network with your fellow students, who knows where they may take you. It will be easier to network with your fellow students than with people already in the industry. And attending a good school will go further than being in the right location.

</comment><comment><USER3> I am not sure whetehr you qualify for 12 months OPT program (optional pratcical training). This OPT program helps you get the employment authorization document for 12 months, which can be extended for another 17 months (so-called STEM extenstion).

First, you need to worry about the authorization to work. If you get such an authorization, yes, you can find an internship or a job. There is another authorization document called CPT, curricular pratcical training or something that is issued by the school itself.

The other visa ya shud look for is E3 visa.

</comment><comment><USER4> University of Texas has an exchange partnership with UNSW I believe. Austin is a great tech city and also just an awesome place to enjoy life as a college student.

</comment><comment><USER5> There have been a lot of companies opening up offices in Phoenix, AZ. Specifically Scottsdale. If I remember correctly Weebly and Yelp have offices on Scottsdale Rd. Usually Phoenix is known for it's Real Estate investing but tech companies have been getting more more and more recognition. I think we're calling it Silicon Desert.

</comment><comment><USER6> I was under the impression that with a student visa (is it [https://en.wikipedia.org/wiki/F_visa](https://en.wikipedia.org/wiki/F_visa) ?) you can't go out and work everywhere. Maybe somebody in this thread can correct me.

<comment><USER7> You can work anywhere regardless of your/company's physical location as an F-1 student. The restriction is placed on the company's and position's type. The nature of the job must be related to your major, and the employment is subject to approval from USCIS in the form of CPT and/or OPT.

Source: [http://www.uscis.gov/eir/visa-guide/f-1-opt-optional- practic...](http://www.uscis.gov/eir/visa-guide/f-1-opt-optional-practical- training/f-1-optional-practical-training-opt)

and I'm an F-1 student myself.

</comment></comment><comment><USER8> Tech Hub: Cambridge, Massachusetts

</comment><comment><USER9> Only Manhattan and the SF bay area. Forget everything else.</comment>


What Are the Most Disliked Programming Languages? - <AUTHOR> https://stackoverflow.blog/2017/10/31/disliked-programming-languages/ <comment><USER2> > Git might be a source of frustration to many developers (it certainly is for > me!), but it's rare that people admit it on their resume ...

That statement doesn't make a lot of sense. The "dislike" tag is understood to be the list of things you don't want to work with (as in, "don't contact me about jobs if the job involves using xxxx tool/tech/language"). Resumes don't generally have a section for "sometimes frustrating/tricky stuff that I don't even question that I'll be using."

You just can't ignore the alternatives (or lack thereof) to any of the "disliked" stuff in the article.

The running theme in the strong dislikes are languages and tech that were once popular but have been surpassed by newer, easier to use or work with alternatives. That may happen one day to git, but it would seem a long way off.

There's also a running theme of the dislikes often representing working with older legacy code. So the listed languages might just be the devs' proxy for disliking working with legacy projects (vba strikes me as an example of this, since it was hugely popular but no one is really using it in anything new).

</comment><comment><USER3> The article defines "like" vs "dislike" in terms of what developers list as preferences on their jobs profile. For example, Perl is the most "disliked" language; what that really means is that developers have actively listed it as a job opportunity they don't want.

The analysis shows that there is a correlation between a language's "liked- ness" and its growth as a tag on Stack Overflow. Correlation-is-not-causation and all that, though it seems that what developers will take for a job is similar to what they actively use. This, of course, is rather cyclic.

<comment><USER4> > For example, Perl is the most "disliked" language; what that really means is > that developers have actively listed it as a job opportunity they don't > want.

In the specific case of Perl, this makes the analysis highly skewed. I liked using Perl (I no longer write in it because my current team already knew Python well and not even a bit of Perl), but almost all the job ads around me that mention Perl come from big, old corporations. I wouldn't want to maintain a corporate internal tool written in Perl, because Perl in such an environment means a very old and overgrown script (virtually all newer are written in Python) in a complex and complicated system that cannot be updated to modern architectural standards, and Perl from '90s and early '00s has a history of being used mainly by dilettantes who couldn't tell global and local variables apart.

<comment><USER5> We have rewritten a web app that used CGI.pm and ported it to Mojolicious. It also uses JavaScript on the front end. I'll choose Perl any day over JavaScript/ES/Node.js. There is still innovation going on in the Perl5 community, like Mojolicious, Promises, Moo, MOP, Moxie etc. Most tooling is sane and you don't end up with competing package managers, a plethora of build tools, transpilers, frameworks and an endless chain of dependencies.

</comment></comment></comment><comment><USER6> Earlier in my career we moved to Ruby over PHP because Ruby was "cool" and PHP was not. Now it is interesting to see them lumped in the same group. Incidentally, PHP has improved greatly because of the rivalry with Ruby because the competition inspired PHP and PHP Frameworks to step up their game in the early 2000s / 2010s.

Python's continued popularity surprises me. While I like Python and it is good for data science I don't understand why people use it for websites. The PHP and Ruby ecosystems are far more mature if you consider ease of use and if you are going for performance, Go and Java based frameworks are better. Even in the data world, I kind of like R over Python.

I'm also glad to see Javascript highly ranked. I was under the impression that Node.js in particular was going the way of PHP and Ruby. But personally I like working with Node.

Edit: I wonder how much of this is due to popularity too. PHP is insanely widely used. Which attracts more entry level coders than a language that is broadly used for specialty / high performance / niche languages.

<comment><USER7> > While I like Python and it is good for data science I don't understand why > people use it for websites.

This is the reason, actually. Python is NOT ONLY GOOD FOR WEBSITES.

In fact, the only thing that have stopped python for total global domination is to be poor for mobile apps.

Do not underestimate the power of make a "full stack development" with just one language.

<comment><USER6> > Python is NOT ONLY GOOD FOR WEBSITES.

PHP, Ruby, Node.js all have excellent tooling for making command line applications as well as websites. While none of them have focused much on having a GUI, projects do exist.

Ruby in particular is very widely used as a system automation language.

<comment><USER7> But not _as strong as with python_. And certainly PHP/Node is biased heavily for web-apps. Python is a bit more broad.

</comment></comment></comment></comment><comment><USER8> I remember writing a cross-platform library for web authentication that worked with signed cookies. You would log in through a PHP form and then I wrote modules to check the cookie and refresh it in just about every language used in web development in the early 2000s. That included PHP, Perl, Java, C#, Cold Fusion, and others.

Of all the authentication modules, the one in Perl was the shortest and sweetest.

<comment><USER9> I think of it a bit like some huge regexs, you only arrive at the final point by building up to it in small (succinct) steps, and if you need to revisit it later, the old grey decompiler has to work harder.

Perl coders I knew prided themselves on illegible but powerful one liners in a smug/elitist way ("Ha! You can't read that?? That'd be _three lines_ in C. Ha idiot."). I prefer readable code.

</comment></comment><comment><USER10> There might be a bias in this analysis. The programming languages listed in the no-no list are the one people dislike AND know. I can't say if I dislike a language if I don't know it. This is visible with r language.

<comment><USER11> Yet number of people who dislike Perl much large than number of people who can write code in Perl.

<comment><USER12> Yeah, but a lot of people have passing familiarity with perl or have at least been tainted by the sheer number of "I hate perl" sentiments around the web.

The list as presented is obviously biased. When I see that fewer people dislike MATLAB than C#... I don't know what to say to that.

</comment></comment></comment><comment><USER13> The most fascinating section of this, in my opinion, is the "Rivalries" at the bottom that show the relationship between liking X and disliking Y.

However, what isn't clear to me is whether this is one-directional or a blended bi-directional rivalry. For example, the third item from the bottom is iOS : Android. Is this the coefficient of liking iOS and disliking Android _or_ is it a coefficient of liking either and disliking the other? Can anyone clarify that?

<comment><AUTHOR> OP author here: the rivalries there are directional, "if you liked X, you probably disliked Y", but not vice versa. (One thing I find interesting is that most rivalries really are directional: you see git users disliking svn, but not svn users disliking git).

Perhaps there's a way I could make that clearer in the post!

<comment><USER14> The ":" implies bidirectionality (or at least, non-directionality), you could clarify it in the graph by replacing ":" with "dislikes" or "->".

<comment><USER15> As a coder, : is pretty directional in my head.

A greater than sign would be explanatory tho.

</comment></comment></comment></comment><comment><USER16> > One tag that stands out is the functional language Clojure; almost nobody > expresses dislike for it, but it's still among the most rapidly shrinking > (based on question visits, it only started shrinking in the last year or so)

That's an interesting observation. Having learned Clojure this year without asking a single StackOverflow question, I don't think this means Clojure is shrinking. I suspect that Clojure's crazy good stability means no new questions are really required for core things.

Also, Clojure tends to not be anyone's first language, if Clojure Conj is any indication. Most Clojure developers I've ever met have been programming for > 10 years. Experienced programmers don't tend to ask as many "how do I do this in language X" questions.

<comment><USER17> It's also shrinking on Github participation, which I don't think is good. Are you saying that Clojure is growing, but it's growing with people who feel like giving back less?

Meanwhile, Scala is skyrocketing. I would imagine that this is because Clojure somehow missed the big data race.

<comment><USER16> I'm not making a judgement call about whether Clojure is growing or shrinking. Just saying that StackOverflow isn't a good gauge for the reasons I listed.

Github is a better gauge. I wasn't aware that it was trending downward. My impression was more that it was slowly accreting instead of following a sharp curve, which is just fine by me.

</comment></comment></comment><comment><USER18> R is the most liked! I have to say that over the past 5 years the language has really just been getting better and better.

I know a lot of people have a bad taste with R but I blame the bad non- programmers that used the language but Hadley Wickham and his tidyverse has turned this DSL into one of the best languages to use for its purpose.

<comment><USER19> I probably have written more lines of R than any other language, but I wouldn't say I like it. It is just so useful because of how much stuff is implemented in it already. From time to time I get fed up with it and try to use Python or Julia, but while I like both better as _languages_ , there is always something I would have to spend a week implementing that there already exists an R package for, so I return.

<comment><USER18> I have talked with several people who were in your steps and then I mentioned that "hidden" inside of R is a scheme influenced part of the language. I ended up learning Racket, a fork from Scheme, and I have to say my enjoyment of R has grown, especially using it within the tidyverse family.

</comment></comment></comment><comment><USER20> I'm surprised by JavaScript results. I expected it to rival Perl for top place.

<comment><USER21> I really wonder how much this is tainted by being at SO?

There's a huge JS audience there vs other sites, IME.

Additionally, I'm kind of a JS hater, but I really only hate it because it is just too often mis-used, not because it is actually bad itself.

<comment><USER22> Misused? How so? Are you referring to those that give advice with "just import lodash and use ___" or "you can do this easily in jQuery like _____"?

I find that a lot of the JS answers are pretty good, and there are many 2-3+ year old answers that are edited with ES6 updates to the answer, which is pretty amazing/nice.

<comment><USER21> I'm not saying that the advice is misused, but that JS itself is misused by most of the sites that implement it.

</comment></comment></comment></comment><comment><USER23> On a positive note for a language to be hated on that list it had to be successful and big enough at some point to be useful ;)

<comment><USER24> And opened the field of programming to many. Delphi, PHP and VB/VBA were the first languages of many of my friends back then who then went on to study computer sciences. They were easy to understand and to create basic functionalities, despite the shortcomings.

</comment></comment><comment><USER25> The next step is obviously to take the most-disliked technologies and combine them into something so bad it's good, like "the most unwanted music" ([https://www.youtube.com/watch?v=-gPuH1yeZ08](https://www.youtube.com/watch?v=-gPuH1yeZ08)).

<comment><USER26> So a Perl webapp for Internet Explorer (with a SOAP API, and some pages using Flash), hosted on IIS, developed with Subversion?

<comment><USER27> Heh. We had something really close to that until about a year ago. And yeah, nobody wanted to work on it.

</comment></comment></comment><comment><USER28> I love javascript, it's basically the language I like working in the most after python, yet I expected it to be near the top of the disliked tags. Good, I guess, even if it does appear anyway.

Loving that postgresql, docker and python are so uniformly liked.

The backend/frontend rivalries I found hilarious for some reason.

</comment><comment><USER29> I'm surprised!

This would definitely not be my top, I guess someone's top is mostly influenced by their own path.

I would definitely not list Ruby as a language I wouldn't work with, it reads nicely and is very close to Python for me. Perl and PHP are somehow similar and reads nicely as well imo.

What I would have put up there are things like Lips and Scheme that are just a succession of parenthesis.

Probably Java would be the #1 thing I would refuse to work with.

</comment><comment><USER30> Putting examples in the entry fields in the questionnaire seems like a leading question to me. When it says, "Tech you prefer not to work with: e.g., javascript, c#, php", one is immediately going to thing, "Well of course people hate javascript! So do I" as opposed to letting the respondent decide for themselves which they least prefer.

</comment><comment><USER31> Delphi is the one the surprised me most. Primarily because I can't remember the last time I even encountered it.

<comment><USER32> I'm going to guess that's because using Delphi _today_ means "legacy Win32 project I deeply resent maintaining".

The general principle of a programmable RAD with a nice IDE and a visual designer is still very popular. I'd wager Delphi would also appear on a list of "most-missed" languages, because using Delphi _back then_ meant a pretty nice developer experience.

<comment><USER33> Nowadays it can be used for cross-platform dev too: iOS, Linux, Android, macOS.

Still a pleasant language to use, IMO :)

</comment></comment></comment><comment><USER34> I have to admit I never learned Lisp or any of its descendants. Its prefix operators seem nice because they can make your code more concise, but its endless parentheses make the language literally looks like ())

</comment><comment><USER35> So a decline in language is causing people to avoid/dislike it or a dislike of a language is causing the decline in popularity ?

<comment><USER32> There's also an age effect. If you're maintaining a Delphi or VB or PHP codebase now, you're probably working on an older system, which means you spend a lot of time stepping on rakes that someone left in the code ten years ago. If you're writing something in Elm, it _can 't_ be more than a couple of years old, and you're probably still in the green-field honeymoon period.

This emotional response probably transfers onto the languages themselves, which means any language in decline will naturally attract resentment.

</comment></comment><comment><USER36> Sad to see coffeescript so disliked. It has some bad choices, like the time- bomb-scoping, but it was a promising era for programming language syntax when coffeescript was in fashion.

But I guess most programming is mindless IDE-bingo where the least-common- denominator churns megabyte after megabyte of same repeating crap badly solving the same repeating problems, so it doesn't really matter that the syntax is in your face hiding the logic all the time.

</comment><comment><USER37> 2nd chart seems more driven by fashion/geek-cred than intrinsic language qualities.

Never met a Delphi expert who didn't love it. Never met a C++ expert who didn't have grave reservations about it. It's like, "Here's your bag of infected needles. You can make really slick games with them, but _be careful_!"

bash... WTF?

<comment><USER38> I suspect some people use the "like" list as a "here are the 5 things I know how to do best" list.

</comment></comment><comment><USER39> interesting outliers: csharp and bash should swap places, otherwise reaonable.

</comment><comment><USER40> Why is ruby so disliked D:

<comment><USER41> We're moving away from a Ruby codebase now. Everytime I have to grep the codebase to find where a method magically came from, I die a little on the inside.

I won't say it is a bad language, but it allows and seems to encourage some bad habits.

<comment><USER42> I pretty strongly disagree with the idea that _Ruby_ encourages those bad habits. But _Rails_? Specifically, _ActiveSupport_? Yeah, totally. But, effectively, Rails is building a context-specific DSL for web apps that happens to be leaking methods into _your_ code. This is much, much more a Rails problem than it is a Ruby one.

My standard web stack is grape, grape-swagger, grape-entity, and Sequel (with some handy libraries like Ougai kicking around) and I don't run into any problems like that.

<comment><USER43> ActiveSupport does that because Ruby encourages it.

<comment><USER42> Ruby _allows_ it. Ruby _allows_ a lot of things. So does C++. So does JavaScript. So does _Java_.

Deciding to do it is a question of taste.

<comment><USER43> I think it goes further than that unless you don't consider the documentation and standard library sufficiently encouraging.

</comment></comment></comment></comment></comment></comment><comment><USER44> C++

</comment><comment><USER45> I could see myself using VBA more if the "IDE" was not a 20yo piece of crap that pops a MessageBox every time you have an error (I seem to always forget to add the "then" when writing an "if").

Just underline the error but let me continue to code dammit.

<comment><USER31> I don't mind VBA in its native habitat, I just usually don't like its native habitat.

There are several languages on this list like that. I wonder if C# for example has that as a factor.

<comment><USER46> That has to be why C# is ranked below Java. I don't understand a world in which people would prefer Java, the language, over C#, the language, all else being equal.

Working with C# likely means working in an MS-centric environment which is probably what this is measuring more.</comment></comment></comment>


How did mainstream media get the NSA PRISM story so hopelessly wrong? - <AUTHOR> http://www.zdnet.com/how-did-mainstream-media-get-the-nsa-prism-story-so-hopelessly-wrong-7000016822/ <comment><USER2> Sometimes I wish HN had the author of the referenced article in the summary, rather than just the domain name. This article is from Ed Bott, and it's worthless. His claim is essentially that no experts vetted the Washington Post and Guardian articles, so WaPo and The Guardian got things somewhat wrong.

That's really presumptuous, given that we've seen 5 slides of a 41-slide PPT deck. Now, if Bott had claimed that we should be grateful we only saw 5 slides of an insanely poorly-produced deck, and that to watch all 41 would be to risk PPT poisoning, maybe. But pleading "let the experts decide" is insulting rubbish. That's just a milder form of authoritarianism.

Not everyone is a sheeple, Mr Bott. Give us the info and let us decide for ourselves.</comment>


How does power corrupt? It starts by corrupting rational thinking - <AUTHOR> http://trueslant.com/wrayherbert/2009/08/11/how-does-power-corrupt-it-starts-by-corrupting-rational-thinking/ <comment><USER2> "How intoxicating for someone just 32 years old."

Maybe. Asshole thing to say, though.

<comment><USER2> There are many young kings throughout history, for young =< 32\. The difference may have been that this was acceptable and even expected at the time. So I stand by what I said; this is age discrimination on false grounds.</comment></comment>


Ask HN: What are some productivity hacks for remote employees? - <AUTHOR> I'm working remotely since last year. There's a major productivity issue, some days I don't feel like working. Acquiring new skills are hard, with so many distractions around how do you guys manage to work from home/remote? <comment><USER2> Hey, my friend and I run a remote company called 'The Remote Trip' and we were dealing with the same productivity challenges while she was working from Costa Rica and I from Thailand. We found 7 tools that helped us boost our productivity as a remote worker and shared them on our blog, check it out if you're interested:

[http://www.theremotetrip.com/2016/10/21/7-tools-will- boost-r...](http://www.theremotetrip.com/2016/10/21/7-tools-will-boost-remote- workers-productivity-road-every-day/)

</comment><comment><USER3> It helps to have a location in your home or elsewhere that is _only_ for working. A separate room that serves as your office can help.

If you're in a city, you might try working out of a co-working space a few days a week. It would also give you a chance to socialize with other developers when you need a break from working. This can be a good thing, as long as your don't spend the whole day socializing. :)

If you live in a house and have a decently sized property, you could try building a 'Shedquarters' (Google it, there are some pretty amazing examples out there). Alternatively, you could park a camping trailer on your property and work from there.

At the end of the day, nothing will be a substitute for good work habits. And make no mistake, staying focused and on task _is_ a skill you can develop and improve over time. Getting started is the hardest part.

In the past, I've found it helpful to ban myself from using the internet after my work hours are done for the day. Pick up some good books, and spend a couple of weeks worth of evenings just reading non-stop. It'll be hard at first, and you'll be tempted to go online. Keep on reading regardless, even if you really don't feel lie it. I've found that after a week or two, the urges to go waste time diminish. And interestingly, the strength to avoid distraction and keep plowing forward even when I don't feel like it carries carries over to the work day. I realize that this might _only_ work for me and nobody else. But it might be worth a try if you're looking for a starting point.

<comment><AUTHOR> I live in a countryside small town, so no co-working space available. Will definitely try that offline habit.

Thanks

</comment></comment><comment><USER4> First, discipline is critical to what you mentioned. Figuring out how to develop habits that avoid procrastination or other problems with your productivity are wildly different for each individual. Some people work well with a TV on, while others are completely distracted by it, and up paying attention to the TV instead of being productive. Some people take 15-20 minute naps and wake up ready to rock. Others, fall asleep for long periods of time, don't reboot and waste a day. You have to know which one you are and tailor your routine around you.

Having a routine is important.

Additionally, here are a couple of things that you might consider hacks that have worked for me:

1) Front-load your day - I start my day at 4am and I start work immediately. This has a couple of benefits. For me I know I am most productive the first half of my day. Starting early eliminates a long list of distractions and interruptions simply because no one else is up to bother me. Plus, if I find myself dragging between 4pm and 6pm I don't feel guilty about cutting out because I have already put in a pretty solid day overall. This is something I read not to long ago that validated what I was already doing: [https://news.ycombinator.com/item?id=12346307](https://news.ycombinator.com/item?id=12346307)

2) Walk - Any time I am feeling distracted or stressed I take a walk outside. It reboots my mind and I come back refreshed. If something was eluding me before the walk it typically reveals itself quickly after returning from the walk.

3) Diet - This is from my response to this post ([https://news.ycombinator.com/item?id=12684180](https://news.ycombinator.com/item?id=12684180)): "In order of volume and priority...Coffee, leafy greens(in all forms, especially cabbage - all types, kale, napa, green, etc.) and protein in all forms, diversity is important, animal and vegetable sources. I mix in other fruits and vegetables for flavoring and variety. Also, I eliminated salt and that relieved my stress in a significant, noticeable way. I start my day at 4am, if I eat heavier, carb-based items, I notice a crash somewhere around 3 or 4 pm and the last few hours of my day are a struggle. If I stick to what I listed above, I power through the afternoon and feel more balanced when I end my day."

</comment><comment><USER5> I've found that a 'fake commute' works well to make me feel like I want to work; travel to your nearest coffee shop and enjoy a morning hot drink and head to work.

<comment><USER6> I work from coffee shops a lot too. For me the better ones to work from are generally quiet or have consistent background noise.

If this is something you do regularly, you want to try the free app Work Hard Anywhere [1] which lets you find the best nearby to work from. I use it every week.

[1]: [http://workhardanywhere.com](http://workhardanywhere.com)

</comment></comment><comment><USER7> I found the Pomodoro technique to be even more effective when working remotely. It forces me to work hard at manageable stretches as well as to write down what constitutes a 30 minute chunk of work. I'll write out a list of items that fit within these chunks at the end of my day including items from my backlog. These can even be learning new skills.

Distractions are usually a consequence of being burnt out. That means you need to take more _effective_ breaks and/or work out your discipline muscle, meaning you can go longer and more effectively.

</comment><comment><USER6> Taking a break and going outside for a short walk. Having a short conversation. Jason Fried and DHH discussed this more in Remote [1], and I really think isolation is the biggest challenge of fully remote work.

(Then again, my "problem" is the opposite and I think it's something a lot of remote workers experience — you work even more hours and even harder than in a typical office environment.)

[1]: [https://37signals.com/remote](https://37signals.com/remote)

</comment><comment><USER8> Open a videochat window, shrink it down, put it in a corner, and ask your buddy to ignore you unless you're goofing off, in which case administer moral support. Also, [https://google.com/search?q=virtual- coworking](https://google.com/search?q=virtual-coworking) is a thing.

</comment><comment><USER9> Take 15-30 minutes before starting your day to meditate. I don't work remotely, but really _any_ series of tasks that involves effort I've found tends to be easier to transition into and focus on if I've meditated beforehand.

<comment><USER10> What sort of meditation do you practice? (Are there different types)

What is the general idea behind it - and how would one get started at this practice?

<comment><USER9> Vipassana Meditation is the one I initially looked at and believe it's what I'm currently practicing, check out this meddit recommendation thread:

[https://www.reddit.com/r/Meditation/comments/2ixjq7/meddits_...](https://www.reddit.com/r/Meditation/comments/2ixjq7/meddits_book_recommendations/)

It's really as simple as sitting down in front of an empty wall, closing your eyes (or not), and counting each breath 10 times (I like to count one full breath as "one count" rather than counting an inhale as one and exhale as two), then repeating back to the beginning. Whenever your thoughts go elsewhere you remind yourself to focus on the current number you're on. Really helps clear the mind and can even occasionally experience a state of euphoria in the process.</comment></comment></comment>