AWS Data Pipeline - <AUTHOR> http://aws.amazon.com/datapipeline/ <comment><USER2> AWS is slowly becoming the Oracle of our generation, in the sense that they have found a way to lock startups and large companies into a software/services ecosystem that is really really hard to stop using once you get started.

You start with regular open-source instances, but that's just the hook. Once you have EC2, it's really easy to get started with AWS 'magic' services like Elasticache and RDS. It's easier than setting up a memcache cluster or mysql right? But once you get comfortable with those services, it's just so easy to keep going down that road and making your software reliant on proprietary services like SimpleDB, S3 and AWS Data Pipeline. And then you wake up at some point and find that you're 100% dependent on AWS.

By that point, if you're lucky your monthly AWS bill gets you an invite to speak at the next AWS conference. :-) You might even get a personal customer support rep that calls you when your servers go down.

A website/service cannot by definition be HA if it's reliant on one service or infrastructure provider. AWS has so many proprietary parts now that you really need to be careful which ones to use so that you don't wake up one day and realize that you're completely dependent on AWS.

I'd stay away from this with a 30-foot pole, but if we really did need to use it, I would only use the features that I felt comfortable building internally at some future point if we chose to move off of AWS.

It's important to keep your software stack as flexible and open as possible, and for risk-management you should plan on using (or least having the option of using) multiple vendors and service providers.

<comment><USER3> "A website/service cannot by definition be HA if it's reliant on one service or infrastructure provider." you seem to be conflating highly available with a diverse supply chain. A _lot_ of highly available systems are "locked" in to one provider, whether it's broadcom/citrix/intel/etc.

<comment><USER4> Does all Citrix hardware for a region go down simultaneously?

<comment><USER3> Actually, yeah. How about worldwide nxos crashes due to the leap second bug? Or the various poison bgp updates that've made the rounds? Or overrunning an ospf domain? Anyways my point, if you read the sentance after my quote, was there's a distinction between sole source provider and "ha". Multi source supply is due diligence. But it's not a perquisite for or solution to high availability systems.

</comment></comment></comment></comment><comment><USER5> A whole lot of glue-job VMs just became unnecessary.

</comment><comment><USER6> Just this week I was looking for a better solution that would back up my RDS database to S3. I'm currently using mysqldump, but the RDS instance size has grown extremely large and so, it has become unwieldly. Hopefully this will help with that.

<comment><USER7> It might not be appropriate for you, but a good way to handle MySQL backups is to maintain a mirror. This has the added benefit of being available as a fail- over and as a secondary instance where you can run reports or test long- running queries on current data without the risk of taking prod down.

<comment><USER8> > _It might not be appropriate for you, but a good way to handle MySQL backups > is to maintain a mirror._

        DELETE * FROM business_critical_data; WHERE obsolete = true;

You were saying? :D

<comment><USER9> You can run your daily/hourly backups on the mirror and not impact performance on your main database.

<comment><USER8> Right. But the grandparent comment was suggestive of the possibility that he or she wanted the mirror to fulfil multiple roles, including being the backup.

</comment></comment></comment></comment></comment><comment><USER8> It's a mainframe in the cloud.

</comment><comment><USER10> Dear AWS hire a designer. Thanks.

<comment><USER11> The AWS Management Console was recently redesigned with Bootstrap.

</comment></comment><comment><USER12> ETL-as-a-Service

</comment><comment><USER13> You shouldn't really be trusting Amazon with your datawarehouse or paying that much for the storage, but from a technical convenience standpoint AWS is probably the best solution for some of the horrid little inept kinds of organizations that I have encountered.

<comment><USER3> Totally. I know I create lots of business value when I spend a day dicking around with mysqldump and rsync and inotify and scp and hfds. Who would want to use this kind janitorial service when the could do it themselves?</comment></comment>


Why doesn't every company buy developers the best hardware? - <AUTHOR> http://programmers.stackexchange.com/questions/93983/why-doesnt-every-company-buy-developers-the-best-hardware/ <comment><USER3> Good questions to ask when being interviewed:

\- What is your standard developer hardware configuration?

\- How often is it refreshed?

You get bad answers to those questions and it's a definite warning sign (IMHO).

If you're working for a cash-strapped startup (possibly bootstrapped), you may want to negotiate a deal whereby you supply your own hardware (in exchange for higher salary and/or stock/option grants) if they're only in a position to provide substandard hardware.

One side note: what constitutes good hardware depends on what you're doing. If all you're doing is writing PHP/Python/Ruby in vim/emacs and running a local Apache/nginx and possibly a MySQL server then it almost doesn't matter what hardware you have... _apart from the monitor_.

But if you're compiling huge C++ (or even Java) projects then you probably want good I/O (possibly an SSD, preferably in RAID1 config for redundancy), lots of RAM and a good CPU.

As one data point: I have a 6 core machine with 12GB of RAM and 2 24" monitors (some opt for 1 30") plus a Macbook Pro 15" with SSD. You can refresh your hardware every 18 months if you want to (but most don't unless they have a pressing need; I know some people with 4-5 year old workstations because those are fine for what they do).

<comment><USER4> _"But if you're compiling huge C++ (or even Java) projects then you probably want good I/O (possibly an SSD, preferably in RAID1 config for redundancy), lots of RAM and a good CPU."_

For huge builds it makes sense to go with a compile farm. Working on a god box that sits idle 99% of the time is a bit wasteful.

<comment><USER5> Quick aside: does ESXi still impose too much overhead to move a compile farm onto VMs?

A friend of mine tested it 3 years ago and it was something like 300% slower (no idea about the disk config, but he's a smart guy). It would have been worth it at anything under about a %50 hit...

<comment><USER6> What exactly would be gained by using VMs, assuming that there were no performance problem?

<comment><USER7> The boss gets to put "lead the conversion to a virtualized environment" on his resume. True story.

</comment></comment></comment></comment></comment><comment><USER8> I empathize with you, the developer. I still want the best machine money can buy.

But I have also been on the other side. Let me give you a simple question to ponder: assuming an engineering team of 50, and the cost of 2% to upgrade machines, would you rather upgrade everyone, or hire one more developer? As the manager, I can tell you that everyone is asking for an extra headcount: "we need a full-time person to handle builds", "Tom could really use an extra hand with the XYZ module". Etc.

It happens to cost the same: hire an extra developer, or upgrade. So, as a manager, you handle the trade-off. Life is all about trade-offs, not absolute. I'd love to have a faster machine. I'd love to have more engineers. I can't have both.

<comment><USER9> Give each year/month credits to your engineers to buy a new computer and give them a way to 'buy' extra credits. So some of them will wait longer, some will buy a new machine each year.

Give them the liberty to choose!

<comment><USER10> There are certainly benefits to having everyone upgrade at the same time, though. From a technical standpoint, it seems better to have everyone on the same setup so that you only have to deal with the same set of problems. You might also be able to get a deal for buying in bulk.

Additionally, it would be frustrating to use your credits too soon and then the guy next to you gets something twice as good one month later. So just play it safe by keeping everyone on the same playing field.

<comment><USER11> Or suddenly all the machines in the office are bluescreening at the same obscure graphics driver bug and nobody can do any work...

</comment></comment></comment></comment><comment><USER12> To any development manager who wishes they could offer better hardware within their budget: If you haven't already done this, buy an SSD for every workstation. Nowadays, you can get 128GB for $200 or less.

Do that, and make sure the system has 4GB+ RAM, and 2 monitors at high resolution, and your hardware will feel brand new to the guys on your team.

I did this a couple years ago as one of my first acts after being promoted, and it worked great. I paid a bit more to get the drives that came with an upgrade kit (that is, an enclosure and imaging software). Gave them to each dev to take care of themselves.

I didn't have to wait on and work with the bureaucratic IT department, and a dozen SSDs was cheap enough I could put it on my card without needing CFO approval.

You don't need "The Best" hardware. In fact, it reminds me of the saying that "People buy horsepower, but they drive torque."

What matters to developers isn't how many FLOPs you can do, but how quickly can you load your VMs and start Eclipse and grep your local filesystem.

<comment><USER13> Echoing this. Most workloads don't need dual Xeons, or even more than 4GB of RAM, but an SSD and two big monitors can make even a low-end machine feel like an absolute Ferrari when you're not waiting for Outlook to launch or wasting time otherwise. SSDs are the best productivity upgrade you can buy: $100, maybe $200 per developer and suddenly no one's sitting around just waiting for their IDE to launch.

<comment><USER14> I'm not a developer, and I still think an SSD is the most significant marginal upgrade I've seen in the last 10 years. If you told me I could use a machine with Core Duo and an SSD or a modern Xeon and a standard HD, for almost all of what I do, I'd choose the former.

</comment></comment></comment><comment><USER15> I have mixed feelings that the best hardware yields better productivity.

I worked with a Macbook Pro, top of the line, with 2 x 24 inch monitors attached, with an ergonomic keyboard and wireless mouse and all that crap.

Now I work with a $500 ASUS that doesn't even lit my keyboard, with Ubuntu Linux installed and I'm using it directly (no external monitors or keyboard) since I'm on the move a lot.

As far as my productivity is concerned, I still get things done at the same pace. Hardware is not my bottleneck.

Of course, this has more to do with my other preferences. I like keeping my toolchain as light as possible. I don't use bloated IDEs, even when working with languages that require an IDE, such as Java. I don't do heavy processing often and when I do, I prefer offloading that work on AWS. I am also proficient with manipulating virtual desktops.

As far as startups go, I think that spending money on expensive hardware is not frugal spending. If you're my boss, I would rather prefer a bonus than the latest and shiniest crap -- if I want shiny crap, I can buy it myself while respecting my own priorities.

<comment><USER16> My meager single-core 1.6GHz laptop has been fine for development, until the time I had to use Eclipse instead of Vim. Why, oh why, does it freeze while I'm just writing code!

<comment><USER17> Eclipse shows you build errors by compiling your code in the background as you type. I believe you can disable this, or make it happen less frequently. This is the cost of red wavy underlines for compile errors. I don't remember the exact setting, as I haven't used Eclipse in years, but it's in there.

<comment><USER16> But the Right Thing™ would be for Eclipse to lower the priority for such checks, so that they wouldn't conflict with the interface. I often have processes using all my available CPU time, but since they run at a 'niceness' value of 19, they don't affect the interactive tasks.

<comment><USER15> It's easier said than done -- whatever Eclipse is doing in the background, it also has to update the interface to reflect the latest results, which means synchronization with the UI thread.

Also, a big project is hard to optimize, especially when threads are involved; so whatever shortcuts you take to make it work at first does come back to hunt you in a big way and you can't fix it easily.

For example people are telling me that Eclipse should run fine, but on my laptop it freezes a lot, even for small projects; while IntelliJ IDEA works flawlessly. So I'm not sure what the problem is, but it does something on my box that it shouldn't -- and throwing more money on hardware (instead of searching for a better alternative) just seems like the wrong approach to me.

<comment><USER18> I am under the impression that async UI updating is a rather solved problem. I'd wager Eclipse has even done it since.. probably forever. No, I suspect the real issue is that it doesn't 'renice' it's compilation processes correctly or sufficiently.

<comment><USER15> Not necessarily -- if you're pushing thousands of update events in a short time, those events will also trigger a waterfall of other events triggered by UI components and so the effect gets multiplied; the end result being that it doesn't matter if the operations themselves are async as the UI will get sluggish.

Another problem is that some operations are blocking in nature. Consider the case when an intellisense dialog is triggered (after typing a dot or pressing Ctrl-Space) -- to give you intellisense, Eclipse has to compile your code, make guesses about your intent in case the code has errors (since intellisense also has to function in case of simple errors, otherwise it is useless) and then present you with a dialog with options available for completion. This is not something that can be done async.

Of course, this opinion was just some random guess. I have no idea why Eclipse has the tendency to freeze the UI on my machine.

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> My company proactively offered to upgrade hardware for whoever needs it. Even bought a huge monitor for everyone, which I didn't need and doesn't fit on my desk.

But a $99 software license I asked for 4 months ago that will make me more productive every day, I'm still waiting for it.

One time I was at a large company that gave all developers ridiculously fast and powerful machines. By far the highest specs I'd ever used. But the machine crawled because of all the million background processes IT put on there, and the crappy tools in our software chain.

Software is so much more important than hardware.

<comment><USER5> Is that $99 for tasktop? I've been waiting a week for that one, and will just buy another license myself if it hasn't come through by Thursday. Just as I did for Fusion and Igor...

Now, if I could just afford a CX1...

<comment><USER19> No, it's an SSH client.

<comment><USER5> Ah, interesting - never considered paying for one of those...

<comment><USER19> SecureCRT has some really nice features. I spend a lot of time in terminal sessions and never liked Putty.

<comment><USER20> I spend 90% of my day in terminal sessions (python development on remote servers), and while I like Putty, I'm open to anything that can help me develop faster. What features of SecureCRT do you feel would help you the most?

<comment><USER19> SecureCRT has tabbed windows, so I can have 5 sessions on one machine in one window, 5 sessions to another machine in another window, and so on. I can find and navigate to the right session with the least effort.

It can automatically keep logs of all sessions. Grepping through these logs to find a complicated bash command or sql query or the output of a query/command that I ran in the past has been invaluable.

And there are little things it handles better than other clients I've used. It restores broken connections better. The session profile management is easier to use. Quickly opening an SFTP tab for the current session is handy. Resizing a window does the right thing. It has a million other options, far more than other clients, but doesn't feel bloated at all.

I'm sure other clients have some of these features but this is the only one that has what I think is the best implementation of all of them, and they add up to a great experience.

<comment><USER20> Thanks for the feedback. Looks like they offer a free trial, giving it a shot.

<comment><USER21> If $99 is a little steep (and for me, it was), PenguiNet is a pretty good, mostly-modern SSH client. I purchased a license and it's been worth it.

<http://www.siliconcircus.com/>

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER22> Doesn't it seem that everyone is avoiding the "elephant in the room" here? Virus scanners are a severe drain on productivity. Perhaps I'm in the minority by running a Windows box, but when I open up Process Monitor (<http://technet.microsoft.com/en-us/sysinternals/bb896645>) it sickens me to see how much I/O is going toward stupid virus scanning operations. Not to mention the 500MB of real memory that the various scanner binaries are consuming. My virus scanner consumes more memory and I/O than my IDE (Visual Studio 2010).

Maybe I'm in the minority here, but I would expect that a developer should know enough about computing to not get a virus. This, of course is assuming the organization has a competent IT department and is "securing the perimeter" with firewalls/proxies, and only allows approved software loaded on machines.

Sure, this would be a radical approach to IT, but I think it's a policy that needs to be implemented.

<comment><USER23> IT here who has tried this. Completely agree, av tools are pigs and they never seem to stop viruses. Intuitively virus writers must test vs common av tools before releasing.

A locked down network without av on the endpoints worked _better_ in my experience, and the users loved it. The only reasons I still use av for some offices is this:

1\. A manager will inevitably ask "omg why wasn't there AV on this users station?! Are you negligent!?"

2\. Locking down the network can get in the user's way too. Just because I have good network practices doesn't mean that the software you require does too. All it takes is one business need/damn the damn the risks, and you are left scrambling.

</comment></comment><comment><USER24> I worked for a huge company in their IT dept. We tried to convince our management to upgrade all the development machines using some of the arguments already mentioned in this thread. They did not want to believe that a hardware refresh would actually improve productivity ("show us the ROI"). A couple of us decided to build a tool to gather some metrics on how long it took to build and deploy our app on localhost (if you're interested see <http://lopb.org>). We then compared results before and after a simple RAM upgrade on a few machines. We were able to show hard numbers to support the claim that better, faster hardware would save time waiting for build & deploy to complete.

Although building in less time did lead to happier developers, it did not lead to more features getting built in the given time frame. We did eventually all get RAM upgrades at least, but the development process and technology stack we were using were the real time sucks that we could not fix with better hardware.

</comment><comment><USER25> I've made this comment before on here. I purposely develop on older hardware because of performance concerns. Pretty much any code you write performs well on an i7 but will it perform well when it gets to your clients who are all stuck running Celerons? I always keep my development machines back a few levels so that I know if it runs well for me, it will for the end user.

<comment><USER26> Surely the best way to do it is to develop on the best machine available but then occasionally test it on inferior hardware just to make sure you're still on track?

Intentionally crippling the entire dev environment seems a bit drastic to me.

<comment><USER25> I don't see it as crippling at all... I don't develop on a 486 :) But you also don't _need_ to sit on an i7 either which was the thought in the article. If your target audience is using typical hardware then most of the time you can easily use typical + 1 to develop. Then you can spot issues as they arise and not later when you kick to the test environment. The more you can catch in- process is less you have to re-architect later. Of course every situation will vary. Just my thoughts anyhow.

<comment><USER27> That doesn't really work when you have a complex system that spans servers, clients, databases, custom libaries,etc. And a large large test suite.

</comment></comment></comment></comment><comment><USER28> In a lot of organizations, software development is secondary, so the machine you get is going to come out of some system that does a mediocre job of procuring machines for salespeople and secretaries. If you're lucky you get a new mediocre machine, if you're not you get a hand-me-down laptop from a salesperson who couldn't sell.

It doesn't make any sense, but 70% or so of people who hire developers don't seem to look at this rationally. On the other hand, they usually don't provide you good specs either.

<comment><USER29> Even in shops where software is the business I've been given a standard Dell laptop for development. The IT folks didn't want to bother with procuring different laptops for different business functions, so everybody got the same thing.

</comment></comment><comment><USER30> What constitutes 'best hardware'?

I have a friend in high finance whose desktop is a (dual?) quad core with 12GB ram which he regularly maxes out. I have a colleague that writes firmware on windows XP, which with his various drivers and Eclipse problems causes a BSOD about once a fortnight. I keep offering him to get a new computer, cards, whatever, and he refuses because of the cost to him in terms of getting his environment set up 'just right' again - he's quite picky (at my previous workplace, a digital circuit designer on six figures didn't want to move from his PIII to a Core 2 for the same reason).

Another colleague runs a quad core on an SSD and complains that his CAD program runs slow... but when we run it through its paces, it doesn't seem to hit any bottlenecks bar the initial load (which isn't his complaint); it just 'feels' slow.

as with all things computery, the answer is: "it depends"

<comment><USER31> >I have a colleague that writes firmware on windows XP, which with his various drivers and Eclipse problems causes a BSOD about once a fortnight. I keep offering him to get a new computer, cards, whatever, and he refuses because of the cost to him in terms of getting his environment set up 'just right' again - he's quite picky (at my previous workplace, a digital circuit designer on six figures didn't want to move from his PIII to a Core 2 for the same reason).

I've seen this before (and was guilty of this kind of thinking a few times) and I believe this is simply misguded. No matter how good of an "old-school" developer someone is, she needs to keep her tools fresh. To me this is no different than having a very manual build or deployment process (maybe not as bad but still).

I believe when it comes to HW + toolset for development, you simply must consider:

-Computers break - you need to be able to set up a new one in a matter of hours (or 10s of minutes). Maybe it does not need to be this drastic everywhere, but if your computer breaks and it takes you a few working days to get it just right - something is wrong - you need to automate it or reconsider the tools (which may not be always possible especially in embedded/hardware design world). If you get this right - upgrading will not be (such) a problem.

-You need to keep up with the tools - maybe more than you need to keep up with the libraries. With this I don't mean only the newest versions, but to constantly be on the lookout for the better alternatives - blogs, forums etc. there is simply no excuse for not doing this if you are a developer other than laziness. This will help you get rid of some stuff on your machine you don't actually need because you may end up with better alternatives. I am a firm believer in getting rid of clutter in your life.

Not all devs in all companies can follow these, of course, due to policies, the nature of work, "legacy stuff" and whatnot, but it helps a lot if you can, and point 2 means you are learning - so you are not bored.

</comment></comment><comment><USER32> I don't care so much about the hardware as long as it does its job and there are no crazy wait times. Having good and recent software on the other hand is very important to me.

I simply hate having to put up every day with bugs that have been solved five years ago. And especially if there is no reason beyond simply the slowness and conservativeness of the IT dept that causes this.

</comment><comment><USER33> My philosophy.

Buy a nice monitor (2 if you can afford it).

Buy whatever hardware is reasonable for ~1k or less. Repeat yearly.

This will always keep the developer with a good machine without spending too much money. With the way HW is nowadays, it's possible to go 2 years on each machine.

The story changes if you need laptops. After using LOTS of laptops over the years, if given a choice I'll only use MBPs now.

<comment><USER34> I concur with all the above. It doesn't take a fortune to keep developers in really nice machines. I do prefer to get my developers laptops, though (unless they explicitly prefer not). Convenience is just too nice (not too mention the occasional time at home always pays for the extra cost).

<comment><USER33> I agree and will personally never buy another desktop. With laptops I budget them to last 3 years as my primary machine. I've owned 2 other MBPs, all of which are still in use by the people who I either old them to or gave them too. The original G4 PB is still kicking strong with a guy from work, my mom loves my old SR MBP, and my current i7 runs great to the point where I could see it lasting 5 years by simply replacing the HD with an SSD when prices are right.

</comment></comment></comment><comment><USER35> Something I always wanted to do as a manager was to offer not just great hardware, but essentially an allowance. That is, the developer is expected to buy and maintain their own hardware, but they get a budget. Say, $3000 at signing, $1500 annual refresh, and you have to pay it back if you quit or get fired for cause within the first 12 months. Coder gets to use whatever hardware they please, and keep it. I have predictable support costs, and in the grand scheme of things, it's a pretty cheap perk.

Never could convince my superiors. But maybe when I start my own...

<comment><USER36> Sounds like a good idea, but I would not want to risk getting stuck paying $3,000 for a machine I don't need anymore.

<comment><USER35> Don't... need? What? ;)

So, if you already have hardware you like, use that and take the money as bonus. Or get a big monitor.

</comment></comment></comment><comment><USER37> If you're working in an in-house IT dept. then giving the staff of a cost- centre better equipment than the "people who make all the money" is a big issue.

If you're working in a big company then central IT probably have a standard PC supply agreement and standard image and will oppose allowing anything non- standard on the network until someone signs off on 2 or 3 extra support engineers to "support" this non standard stuff.

If your company isn't making much money, any capital expenditure like this is hard to justify.

So, you really want to work for a small software company that's making lots of money.

</comment><comment><USER38> Another important 'hardware' that doesn't get enough attention is the chair & desk. I believe that having an ergonomically designed and adjustable chair and desk is as important as the PC specs to programmer productivity. In my current job I have a bad chair/table and it is breaking my back. Probably this issue also gets worse with age. Investing in good furniture might also save the company on health care costs. From personal experience I have spent quite a bit on fixing my back.

</comment><comment><USER39> From the other side, as founders, when did you switch everybody over from using their personal laptops to company laptops? A funding event? Certain size of the team?

<comment><USER40> Even before paying for salaries, we buy hw for founders or employees as needed -- early on, pretty flexible (I got a desk and chair for home so I could wfh; cofounder got a new mbp 2011to replace a 2009, but since I have a 2010 personal, I didn't feel any need to upgrade myself.

One of the big advantages of being a small startup is flexibility -- no need to have policies for stuff like this, just handle it on an ad hoc basis.

</comment></comment><comment><USER41> Am i the only one who thinks developers asking for good hardware is an extremely bad idea? All the greatest software ever written has been developed on extremely slow hardware (especially by today's standards). Fast compile times is an oft-cited reason, but you can always work on the program while it compiles. Are 'developers' these days really that perfect and busy that they need to build their 10GB codebase in 10 seconds? And they have /nothing/ else to do while it builds ?

According to me, all programmers should be given absolutely the bare minimum hardware to program on. This way we can eat our own dogfood and hopefully reduce program bloat. The primary reasons programs suck these days is because 'developers' have terabytes of RAM on their development boxes and consuming 1G of memory for an applet isnt a big deal for them.

I say give all these developers asking for more hardware a 386!

<comment><USER42> Devs should be required to _test_ on that older machine, and benchmarks should be recorded and distributed, to keep everyone aware of the base-supported- config performance.

The software can also suck from hundreds of hours of time being wasted by the older gear. If your competitors don't think the same way, you have a problem.

<comment><USER43> It would be way to easy to ignore and rationalize away numbers on a table, making it personal for them means automatically fast for every user.

</comment></comment></comment><comment><USER44> In the past I have been content with hardware which is several years old. One advantage with slower machines is that benchmarking becomes easier, such that any slow operations are really obvious at the development stage. The other advantage is that customers are also often using similarly aged hardware. Older hardware forces you to make your algorithms efficient, rather than relying upon faster machines to hide the bloat.

In my case I was also often developing for embedded target hardware which was a good deal slower than a typical PC, so older PCs were more realistic for testing.

The advantage of always being on the latest hardware is if you're developing large software systems which take a long time to compile, or if you're doing something which fundamentally requires significant number crunching - such as games or computational chemistry.

</comment><comment><USER45> I work with 135,000 of my co-workers and we all get rather slow, outdated, Windows 7 boxes with 2GB of ram. It's the standard config regardless of what you do. Supposedly it's much cheaper to manage for the IT dept than if we got our own stuff individually and I imagine it's much cheaper to buy 50,000 of the same computer from Dell than order a whole bunch of variety.

Seeing as developers are a small percentage of the total workforce, even if all of them complained, it would be drowned out by the mass of people who have computers good enough for their jobs. The cost of having to deal with ordering and supporting different computers (beyond just laptop versus desktop) is not 0. The quantifiable gain from having some people have better computers is very difficult to calculate. Thus, it's easy to just give developers the slow boxes and listen to them complain.

Related, I've previously emailed to ask why my company has a policy that every PC must be shutdown every night even though it can take up to 8 minutes to start up in the morning (we have a lot of required anti-viri/spam/malware and disk scanners that run). I was told that the company expects us to not be fully efficient all the time, go get some coffee while your computer boots. Also, different budgets cover PC cost versus payroll.

<comment><USER46> "I was told that the company expects us to not be fully efficient all the time, go get some coffee while your computer boots."

Who told you that? Well, actually, it doesn't much matter to me, but if you were told that by IT, you may discover that forwarding that email up to management will have exciting and entertaining consequences. As long as you don't mind making an enemy or two.

On a more practical note, some machines can be set to turn on at a certain time, via BIOS settings, or hardware that takes advantage of Wake-On-LAN or other such things. If you're really personally bothered, you may be able to take advantage of that. You may also want to consider trying to simply suspend the machine. It'll mostly look and be off, but should come up more quickly... if it works.

<comment><USER45> Management told me that ;)

Our IT is some low paid people answering the phones in a foreign land. They don't much care if I complain. The IT managers higher up who make the decisions aren't any better at listening to employee complaints. Their motivation appears to be save as much money (that they decide to count) as possible. Their impact to costs outside of the IT budget aren't high on their priority list.

My laptop gets locked in a cabinet at night, I just suspend it and everything appears to be off. If you have a desktop, that's not necessarily possible, and the Dell's we have usually have some blink'en lights still going when the machine is asleep.

BIOSes are generally locked down so employees can't change them. Laptops have mandated full disk encryption that uses the MBR in special ways, so dual booting is not possible.

I actually was told once that I had left my 21" CRT on overnight. The little stand-by light was still on when I left one day. That's a big no-no. There's somewhat random checks for these types of things. Fun, eh?

Thankfully, the work I'm doing is interesting and the pay's good. The politics and budget antics are rather annoying but I get the impression that's the way the world works at large companies. Maybe I'm wrong?

</comment></comment></comment><comment><USER47> Real question: I know these are huge companies with diverse teams and projects but can anyone share what type of hardware Google, Apple, and Microsoft provide for their devs?

<comment><USER48> Don't trust me at all but I've read about Microsoft's machines (probably here on HN) and as I recall they have really top-end hardware.

I think Google has a lot of MacBooks but I don't know where I get that from.

<comment><USER49> I spoke with a Google sys admin a few months ago. He said he had a MacBook and a Lenovo Thinkpad with Ubuntu. It was in the news a while ago, that they only use Mac or Ubuntu. Any Windows OS has to have some type of signoff from management.

<comment><USER50> That's what I've heard too. Also, according to this article, 70% of the laptops run OS X and 30% run Ubuntu. Most desktops are Linux, though.

<http://digitizor.com/2011/07/12/google-android-linux-dream/> and <http://news.ycombinator.com/item?id=2755050>

</comment></comment></comment></comment><comment><USER51> The economics in the article are faulty because they do not include the considerable amounts of staff time entailed in swapping coumputers out. Those include not just the obvious time spent acquiring a computer such as determining what is available, comparing specs and pricing, ordering, receiving and physical installation, but also all the productivity losses which configuring a new computer entails - e.g. installing and configuring all the various pieces of software for the new OS installation which invariably accompanies those Macbooks which the author advocates (the same would hold true for Windows machines as well and even the drivers on Linux would have to be tweeked for new hardware). And lest we forget, there's handling and disposing of the old computer which also takes time.

It's the sort of thing which can easily consume 40 person hours - even without the considering the inevitable time lost playing around with the new toy.

Finally, there's dealing with the inevitable pissing and moaning which accompanies any change - some people just want their damn computer left alone because it works fine, thank you very much. Other's wanted the 15" MBP not the 17", while the OSS fanbois cannot believe that they were once again thwarted in favor of commercial software.

</comment><comment><USER52> As well as just the hardware speed, I think for some it would also improve their motivation, and you may gain more from an employee in that.

It also depends what your doing, if you are after someone to produce great pixel perfect designs, get them some decent screens. If you have an app where the latest i7 and SSD can cut compilation time in half you can probably make a good gain there by not having the programmer get distracted each time they compile.

</comment><comment><USER53> This is a reason why I'm interested in "Bring Your Own Computer" idea. I mean I still bring my laptop to work anyway. Normally my personal computer is more powerful than what I have at work anyway. And if the company would pay or give me some bonus for it I'd be really happy.

[http://www.zdnet.com/blog/sybase/the-year-of-bring-your- own-...](http://www.zdnet.com/blog/sybase/the-year-of-bring-your-own-computer- to-work/113)

<comment><USER54> IANAL, but in the modern world, that can result in a lot of potential legal hassles. E.g. company gets sued, and suddenly your personal computer gets subpoenaed in the process. You're without your laptop AND other people are looking at potentially embarrassing personal data, etc.

</comment></comment><comment><USER55> If you work at a big company, it's because most people are bad at programming, and the assumption is that you are too. Therefore, doing anything other than the bare minimum to prevent employees from burning down the building is a waste of money: a new computer is never going to increase productivity if the person using it doesn't know how to program.

The reality is that organizations don't change, and if programmers are considered code monkeys at yours, you need to GTFO if you aren't one. The reason your coworkers don't do more to change the status quo is because it's great for them: no real obligations and a nice bump in titles every five years. They don't need a better computer because they don't do any work. If you actually want to program computers, though, then you need to look for other opportunities.

<jedi hand wave> This isn't the employment opportunity you're looking for.

If you work for a small company and have this problem, it's simply because they're cheap.

</comment><comment><USER56> Another point to make: if you're a developer, don't be afraid to _ask_ for the best hardware.

I've seen many developers sit around staring at laptop screens while I'm working on my 2x24" monitors.

Do not feel like you're being greedy. Ask your boss. The most he can do is say no, but the likely thing he'll do is 1) ask why, 2) say yes.

</comment><comment><USER5> I once had to watch a startup skimp on dev hardware, only to splurge on 'launch' parties and (no kidding) billboards...

The founder, a marketing major, had a hard time explaining things to their investor once the inevitable end was clear.

I'd ask the question: why wouldn't a company trust the developers' specs for adequate hardware?

</comment><comment><USER57> Those few seconds of delay between performing actions can mean the difference between keeping focus on your work, and getting annoyed and distracted. I simply can't understand why anyone wouldn't want to give their developers at _least_ a fast CPU, plenty of RAM, and an SSD.

</comment><comment><USER58> I've been reading a lot of Paul Graham's works and one of the big things he points out is being cheap is good.

"8. Spend little.

I can't emphasize enough how important it is for a startup to be cheap. Most startups fail before they make something people want, and the most common form of failure is running out of money. So being cheap is (almost) interchangeable with iterating rapidly. [4] But it's more than that. A culture of cheapness keeps companies young in something like the way exercise keeps people young."

<http://paulgraham.com/13sentences.html>

Take those few moments of lag or downtime or whatever and enjoy your day--do something else that's productive or have a drink or something; make the best out of life.

</comment><comment><USER40> Due to all the costs of adding extra developers (management overhead, communications complexity, inertia), spending $20k per person (every year or two) on hardware (desk/chair, home and office setups, laptops, phones, etc.) is still a win, if it lets you have smaller teams for the same overall productivity.

The bigger hassle for me is that upgrading machines causes some downtime, so it's better to buy loaded boxes and replace them slightly less frequently (every 18-24mo) vs. a new machine of lower spec every year.

Tools also are a great place to spend money; having a great build/provisioning/tinderbox/etc. system saves developer time, and doesn't add communications complexity.

</comment><comment><USER59> I don't know if it's anyone else's motivation, but developers should have machines that approximate the machine of their software's customer base. Otherwise what runs OK on a developer machine can be painful to use out in the field.

<comment><USER60> Remote debugging works pretty well on Windows, and I imagine it's the same story on anything Unix-like. You can work on your decent PC, debugging your program as it runs on some rubbish old castoff PC that was destined for landfill. If the budget isn't even enough for the necessary peripherals, you can get away with just a kettle lead and a network cable and then use Remote Desktop to interact with it.

The remote debugging setup process isn't very slick, but it doesn't take long to figure out, and with a bit of folder-sharing you can keep all the files on your work PC so that it's all nice and convenient. I did this for quite a while, working on Windows, and it worked well. I don't recall any significant problems with it.

If cost is what's preventing you getting a nice PC, then that's one thing, but the issue is just ensuring that slow code doesn't go unnoticed, this approach will probably keep you/your programmers happier...

</comment></comment><comment><USER61> Definitely a no-brainer. Always buy the best machine you can get.

I'm surprised that most developers don't take the same approach to tools. If you're using Eclipse or (god forbid) a _text editor_ to write code, spend a minute and tally up all those 5-second chunks of your life you've spent this year looking up the names of variables, objects, whatever, and running into runtime errors from typos. Multiply by $$$/hour and see what you could have spent on a decent IDE.

JetBrains makes IDEs for pretty much every language out there by now, and any one of them will pay for itself in about four days.

<comment><USER62> > If you're using Eclipse or (god forbid) a text editor to write code, spend a > minute and tally up all those 5-second chunks of your life you've spent this > year looking up the names of variables, objects, whatever, and running into > runtime errors from typos. Multiply by $$$/hour and see what you could have > spent on a decent IDE.

This is a bit of FUD. There are plugins for most text editors that give them features that most IDEs have. For example, my Vim setup has tab and code completion, snippet management, syntax error highlighting in real time, code folding, document and file search, etc. I can also traverse a file faster in Vim than an IDE, my fingers do not ever need to leave the keyboard, and it's completely free (as in beer and freedom).

<comment><USER63> I use Vim and don't really need all the fancy code/whatever completion things, but how on earth do you get them? It seems complicated enough that I haven't bothered.

<comment><USER62> It's not to difficult, There are a ton of plugin's listed on the Vim site, and some on github. Most of them are just dropped into your .vim directory and some need to be set to startup in your .vimrc. Command-T(this one can acutally be kind of a pain to setup if your vim was not compiled with Ruby support), SuperTab, SnipMate are the three I recommend the most.

<comment><USER63> Thank you, I'll give them a shot now.

</comment></comment></comment></comment></comment><comment><USER64> My work dev laptop is bitchin fast, but runs slower than my 3 yr old personal.

Because of useless software (cya-ware) installed by corporate IT.

Useless anti-virus crap (ever hear of sudo?), ridiculous hard drive encryption, remote monitoring/management stuff.

Just working in Eclipse, I often wait every single keystroke. Yes, Eclipse is mostly a pig, and I've disabled/closed everything I could. But I have zero hassles working on my personal laptop, even when I have video (or audio) running too.

</comment><comment><USER65> I had to buy myself a couple of SSDs. When building your project takes 2-3 hours of time, every improvement really matters.

Our management just tells us to go context switch onto something else, there's always lots of thrilling email answering and documenting to do. At other times you can switch to fixing bugs or working on another feature, even though I personally cannot stand continuous context switching as it decreases the quality of my work.

<comment><USER66> well. if it is 2-3 hours task - i believe 15 minutes wasted for context switch is still better then 2-3 hours lost waiting =)

Questions is - will 2-3 hours task become 30 minutes task with SSD drives?

</comment></comment><comment><USER67> Minimum two large monitors, say, 24in 1920 x 1200. Preferably three. This, in my opinion, enhances productivity far more than the difference between a 3GHz and 4GHz machine.

That said...fast is good...faster is better...ridiculously fast is just fine!

All of our workstations have a minimum of two monitors, some three. A few are overclocked and use fluid cooling to keep them from going up in flames.

</comment><comment><USER68> You're a programmer making $100K/year. If you're confident that a new whatever will demonstrably increase your value to the company, spend $1K/year on the new whatever and make the case later that you are more valuable and should be paid more.

And, yes, this doesn't take into account that the company might not want to support your idiosyncratic hardware choices.

</comment><comment><USER69> Not everyone can do it, but for smaller purchases, it's much easier to just get it on your own and file an expense for it. 8GB memory SODIMM kits are about $75 and probably have the biggest impact on performance. I used to upgrade company-issued hardware all the time -- IT never knew and my manager didn't care.

</comment><comment><USER70> It's probably easier for smaller companies to make hardware refreshes but in big corporations there's the whole issue of "standardised desktops" and so on to get around.

Getting a new machine isn't just a case of plonking a new one on your desk, I'd imagine a lot of red tape goes on in the background

</comment><comment><USER71> As long as your machine provides reasonable performance, I doubt the marginal return of a better machine amounts to much additional productivity. I'd rather spend that money on 2 or 3 monitors, better software tools, or a quiet work environment.

</comment><comment><USER72> I'd rather have developers use slow machines. This prevents a lot of foolish performance problems. The developer's laptop should not be faster and have 5x faster storage than the servers that will host the app.

</comment><comment><USER73> I believe that most developers will gain 1 hour per day of productivity by having at least 2 monitors. Any company that isn't paying for multiple monitors is making extremely foolish management decisions.

</comment><comment><USER74> Do you think John Resig needs the latest hardware to run VIM and Firefox?

<comment><USER75> Do you think all developers are running VIM and Firefox and developing JavaScript?

</comment></comment><comment><USER76> I believe real cause that managers don't know math, bureaucracy or disability to see the big picture. Simple rule in our company we buy the best tools (software / hardware) that money can buy, because mathematically it make sense (there are a few exceptional cases)

</comment><comment><USER77> I got the best machine they have at Alienware because I got fed up with managers and customers sending me 200mb pdf containing 8 raw bitmap files. I don't regret it although I still have my indy from silicongraphics for nostalgic reasons.

one of the best benefits? I can look something up in no time.

</comment><comment><USER78> A rather silly post - there are a lot of reasons why companies don't buy the best hardware - the comments on the thread do a great job of listing them.

<comment><USER16> Isn't that the point of the question - to get those answers? It's a Stackexchange site, not a blog.

<comment><USER78> Even then, it's still a silly post. The reasons for not buying the latest hardware are rather obvious.

<comment><USER79> If the productivity gains outweigh the cost is it still obvious?

<comment><USER78> The point is that productivity gains are only one obvious metric - <USER2> constantly battle capital spending vs. productivity.</comment></comment></comment></comment></comment>


Show HN: Blotter.js - <AUTHOR> https://blotter.js.org/ <comment><USER2> A JavaScript API for drawing unconventional text effects on the web.

</comment><comment><USER3> Interesting. What is your plan with it?

<comment><AUTHOR> No real plan. I've found myself wanting unique glitch type effects for texts on personal projects over the years and that, when I'd search around for answers for how to achieve these effects, I'd only find others asking the same question or answers suggesting gifs or combinations of CSS.

If a few art kids found this and experimented with it on thei sites I'd be happy.</comment></comment>


Archaeologists Just Beginning to Reveal Secrets Hidden in Ancient Manuscripts - <AUTHOR> https://www.smithsonianmag.com/history/archaeologoists-only-just-beginning-reveal-secrets-hidden-ancient-manuscripts-180967455/?no-ist <comment><AUTHOR> This motivated me to finally look up the etymology of _palimpsest_ as I never remember how to spell it.

 _ORIGIN mid 17th cent.: via Latin from Greek palimpsēstos, from palin 'again' + psēstos 'rubbed smooth.'_

Same _palin_ as _palindrome_. I wouldn't be surprised if the Latin _pist_ (to pound) from where we get _pestle_ is a cognate (maybe a step removed, given the difference between rub/scrape and pound) for _psēstos_ , but I couldn't find evidence for that in the short time I looked.

<comment><USER2> [https://www.etymonline.com/word/pestle](https://www.etymonline.com/word/pestle) says of pestle:

> mid-14c. (as a surname late 13c.), from Old French pestel, from Latin > pistillum "pounder, pestle," related to pinsere "to pound," from PIE _pis- > to-, suffixed form of root_ peis- "to crush" (source also of Sanskrit > pinasti "pounds, crushes," pistah "anything ground, meal," Greek ptissein > "to winnow," Old Church Slavonic pišo, pichati "to push, thrust, strike," > pišenica "wheat," Russian pseno "millet").

[https://www.etymonline.com/word/palimpsest](https://www.etymonline.com/word/palimpsest) futher adds:

> verbal adjective of psen "to rub smooth," which is of uncertain origin.</comment></comment>


10gen is now MongoDB, Inc. - <AUTHOR> http://www.mongodb.com/press/10gen-announces-company-name-change-mongodb-inc <comment><USER2> Far more interesting blog post by their CEO here:

[http://www.mongodb.com/blog/post/whats- name](http://www.mongodb.com/blog/post/whats-name)

</comment><comment><USER3> I'd love to know the rationale for this and especially how they will enforce their trademark. In particular, I've heard that open source projects named after their company find their trademark hard to enforce, and trademark enforcement sometimes causes a new name for the "community edition" of their products.

<comment><USER4> This is a little different though, as the company is named after the product now.. I don't know of any for-profit companies that have done this but the Blender Foundation has gotten on just fine.

<comment><USER5> Actually, Blackberry Ltd did this very recently (used to be called Research in Motion)

<comment><USER6> I think the reference was to companies supporting open source projects.

</comment></comment></comment></comment><comment><USER7> This is a smart move if they intend to really focus on _just_ MongoDB. For a company that wants to ship more than a product in the same area to have an "upper level" brand makes more sense IMHO.

<comment><USER8> I don't see it hurting Oracle that much.

The can just name their new products "MongoDB this" and "MongoBD that".

And 10gen wasn't much of a brand name to begin with. Very few people knew it or remembered what it was, whereas tons have heard of "MongoDB".

<comment><USER9> Oracle? =)

Initially I had the same thought as the parent post, but this is a good point. No one ever really heard about 10gen; it was always MongoDB. Their events were always Mongo titled (MongoDB Days) and even their emails are @mongodb.com. In a way it was already their primary brand, might as well make it official.

</comment></comment></comment><comment><USER10> In other news, all documents pertaining to the name change have disappeared after being stored away in a MongoDB cluster.

</comment><comment><USER11> I'll probably buy a support subscription sooner or later. Feels nicer to buy it from MongoDB "itself" than from some unknown 10gen :-) Psychology is a strange beast.

<comment><USER12> I would hazard to say that a support contract is essential if you plan on using MongoDB at any sort of scale. I speak from vast experience.

</comment></comment><comment><USER13> In Norwegian, "Mongo" is a (ugly) slang word that means the same as "retarded".

</comment><comment><USER14> Also an amusing blog post from the CTO: [http://blog.mongodb.org/post/59489943730/todays- news](http://blog.mongodb.org/post/59489943730/todays-news)

</comment><comment><USER15> Should have take a play from Snoop and gone with MongoLion.

</comment><comment><USER16> i am surprised they didnt just go for mongo i notice they already own mongo.com

<comment><USER17> because mongo is an offensive word in a lot of countries

<comment><USER18> really - which ones? (just curious)

<comment><USER19> It's very offensive in German.

<comment><USER20> So how does that affect its usage in Germany? It's hard to imagine English speaking companies being comfortable with using, say, RetardDB.

</comment></comment></comment></comment></comment><comment><USER21> This may be related. [https://twitter.com/fritzy/status/367532797356826624](https://twitter.com/fritzy/status/367532797356826624)

I found it odd (not wrong, just unusual) that an open source project would purchase ad promotions like promoted tweets, rather than the company itself. This may be a move to make things like this less awkward.

</comment><comment><USER22> There's a notion that companies named after their open source project are more likely to succeed commercially than those that are not. So from that perspective, good for MongoDB. Of course I can come up with a number of counter examples....

<comment><USER23> I don't think it's confined to just open source projects.

E.G. RIM is now BlackBerry Ltd. There are a many reasons why this is the case, but chief among them is that usually the product outpaces the clout of the company/organization (for better or for worse). When that happens, it does make some sense to adopt the product name.

</comment></comment><comment><USER24> This is great, I'm tired of typing tengen instead of 10gen into the search bar...

</comment><comment><USER25> Sort of like RIM -> BlackBerry.</comment>


Erlang and XMPP at the Major League of Baseball - <AUTHOR> http://www.process-one.net/en/news/article/mlb_processone_xmpp_chat_system/

<comment><USER2> This sounds more like a press announcement or a tooting of a company's own horn more than anything informational. I'd like to have seen some discussion of their implementation or design other than "we used erlang and we rocked."

</comment><comment><USER3> The source code and other information about the process-one server is available here: <http://www.ejabberd.im/></comment>


Show HN: Proof of concept – Realtime single page apps - <AUTHOR> https://github.com/socketcluster/sc-sample-inventory

<comment><USER2> That's really nice. I had faced a similar problem a while back and didn't solve the network layer as neatly as you have. But one feature I would miss from this implementation is event "bubbling."

My approach is here: [https://www.npmjs.com/package/giza](https://www.npmjs.com/package/giza) . It would just parallel your storage engine (whatever that is) and not the rest of the project. But I'd encourage you to consider how to subscribe to a channel hierarchy. I find that many of the event-driven projects I touch have at least some components that can be more neatly modeled under a bubbling pub/sub system like this.

</comment><comment><USER3> Curious what OP's general thoughts on Meteor are—obviously this is more modular and less tied to a specific (arguably monolithic) design model. It'd be really nice if [ungendered personal pronoun] made an ultra-simple walkthrough tutorial a la Meteor's ;)

</comment><comment><USER4> Oh, this is great! I'd been trying to get started with SocketCluster, but I didn't have much to go on. I could figure out lots of things, but examples are great!

</comment><comment><USER5> The Proof of concept isn't new, having in consideration MeteorJs and other recent frameworks.

<comment><USER6> If you take the time to read the wall-of-text you'll find out that it's based on pub/sub and not RPC-esque like Meteor (which he also acknowledges in his wall-of-text). New? Probably not. Valuable? Not sure, pubsub is expensive but when you need it you really need it.

<comment><AUTHOR> Well observed. The problem with client to server RPC is that it's difficult to scale horizontally. When using pub/sub, on the other hand, you are giving control to your data consumers (frontend clients) so you don't run into issues of having to get references to specific users from your server (what if that user is connected to a different process/machine and not the current process?). I did a presentation a few weeks ago at my local JS meetup group which explained the issue better: [http://slides.com/grosjona/realtime#/](http://slides.com/grosjona/realtime#/)

<comment><AUTHOR> I'm not sure about the details of Meteor's RPC implementation so I can't comment on it specifically.</comment></comment></comment></comment>


Show HN: Add the Missing "My Posts" & "My Comments" Links on Top of HN Website - <AUTHOR> https://gist.github.com/prahladyeri/e38ba5ff6ea1c71edebd71105713c9d8 <comment><USER2> This really doesn't require a heavy jQuery dependency. I also don't know why the font related style changes are necessary.

You could rewrite this script to be as simple as:

        const me = document.querySelector("a#me").innerText;
        const header = document.querySelector("span.pagetop");
        header.innerHTML = header.innerHTML + "| my posts |";
        header.innerHTML = header.innerHTML + " my cmts |";

Much more efficient and does the job without the heavy jQuery dependency.

I do commend your initiative though, and I'm sure many users will get much use of this.

</comment><comment><USER3> Probably worth looking into this existing project: [https://github.com/etcet/HNES](https://github.com/etcet/HNES)</comment>


What the New York Times  gets wrong about California's water crisis - <AUTHOR> https://medium.com/matter/let-it-rain-ac793178d51c

<comment><USER2> TL;DR The last paragraph. As most the water crisis articles are pointing. Crisis is due to farming.</comment>


The cryonics craze in Silicon Valley - <AUTHOR> http://fusion.net/video/256864/real-future-episode-9-cryonics/ <comment><USER2> Almost completely off-topic, but this is somewhat hilarious to me to be reading a couple hours after I watched this week's episode of Gotham.</comment>


Oracle owns "JavaScript", so Apple is taking down my app - <AUTHOR> https://www.reddit.com/r/javascript/comments/8d0bg2/oracle_owns_javascript_so_apple_is_taking_down_my/ <comment><USER2> I knew that Microsoft had to call their ECMAScript implementation JScript, but it never dawned on me that Oracle is the current owner of the "JavaScript" trademark:

[http://tsdr.uspto.gov/#caseNumber=2416017&caseSearchType=US_...](http://tsdr.uspto.gov/#caseNumber=2416017&caseSearchType=US_APPLICATION&caseType=DEFAULT&searchType=statusSearch)

Between this and Oracle's ongoing lawsuit against Google for their use of Java in Android, I have a pretty low opinion of Oracle.

<comment><USER3> If I had to explain Oracle to anyone I would only say that their motto is simply "Do all evil."

<comment><USER4> It's more accurately "take money" — don't anthropomorphize them: [https://news.ycombinator.com/item?id=5170246](https://news.ycombinator.com/item?id=5170246)

<comment><USER3> Heh and adding on to that... "the love of money is a root of all kinds of evil"

</comment></comment></comment></comment><comment><USER5> I'm surprised that "JavaScript" has not become a generic trademark [0]. Examples from the Wikipedia article include Thermos, Chapstick, and Dumpster.

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

<comment><USER6> A test case might be needed. If Oracle were to sue a deep-pocketed competitor over the trademark, then we might find a court reaching the conclusion that the trademark has been diluted and the name is now generic. But if Oracle does no such thing, and sues only shallow-pocketed "nobodies", then the legal status of the mark will remain unclear.

My guess is Oracle would only do the latter, and that they're doing it because some lawyer thinks that Oracle has to do this to demonstrate that it is defending the mark even though that's nonsense if they don't go after notable unlicensed uses of their mark.

Never attribute to malice what you can attribute to a corporate lawyer.

<comment><USER7> I love your riff on Hanlon's Razor:

"Never attribute to malice what you can attribute to a corporate lawyer."

Shall we call it Cryptonector's Razor? You invented it, you name it :)

edit: someone else (not me) should name the principle that explains why so few people on HN have any sense of humor whatsoever.

<comment><USER8> > _edit: someone else (not me) should name the principle that explains why so > few people on HN have any sense of humor whatsoever._

I think lots of people have sense of humor, but it's accepted here in very limited amount (and preferably when it's clever humor). I'd attribute this to HN being one of the few remaining places on the Internet where you can discuss serious/interesting stuff without immediately drowning in effort-free jokes and memes - and people want to _keep it that way_. Hence, the word I'd be looking for might be "oversensitivity".

<comment><USER7> I agree with everything you said, but c'mon, down-voting nerd-humor is just wrong. If you don't "get" the joke, just move on; only down-vote if the humor is inappropriate. In this case, I thought my nerd-humor was welcome, and in the worst case, someone who didn't know about Hanlon's Razor would be educated and maybe have a laugh. It's not like this was toilet humor. Have a heart, HN :)

</comment></comment></comment></comment></comment><comment><USER9> Is anyone else bothered by the likelihood that the writer of this sentence doesn't believe it's true?

 _The unauthorized display of our client 's intellectual property is likely to cause consumers encountering this app to mistakenly believe that it emanates from, or is provided under a license from, Oracle. _

<comment><USER10> Let's not go overboard with the criticism. It's a standard phrase expressing a _probability_ , because it's impossible to predict with absolute certainty.

(I have my doubts regarding that probability, but that's a different matter)

<comment><USER9> Yes, "likely" is expressing a probability. Substitute "unlikely" into their sentence and it would still be expressing a probability, except it would be a believable one.

I stand by my original comment. There's nothing overboard about it, and nothing demanding absolute certainty.

</comment></comment></comment><comment><USER11> Should we actually start calling it "Yavascript"?

ref: [https://www.destroyallsoftware.com/talks/the-birth-and- death...](https://www.destroyallsoftware.com/talks/the-birth-and-death-of- javascript)

<comment><USER12> Another comment pointed out that Netscape originally planned to call it LiceScript but was encouraged by Sun to change it JavaScript so I say if we're going to change the name we go with the original one. Either that or argue that the original holder of the Java trademark essentially blessed the use of its mark and continue calling it JavaScript.

<comment><USER13> > _LiceScript_

Ahem, "LiveScript": [https://en.m.wikipedia.org/wiki/JavaScript#History](https://en.m.wikipedia.org/wiki/JavaScript#History)

<comment><USER14> Fitting. The direction the JavaScript community has been going in for the past half decade has left me scratching my head often.

</comment></comment></comment></comment><comment><USER15> It is unfortunate that "ECMAScript" is simply a terrible name. I understand why the term is used, but that doesn't make it inherently good, easy to say, or memorable.

Fortunately the ES shorthand is more workable (e.g. ES6, ES2017, etc).

<comment><USER16> I can't see what's wrong with ECMAScript. ['ek.ma] script. Javascript is just as long.

<comment><USER17> ECMAScript sounds like a disease and it's unpleasant to pronounce.

</comment></comment></comment><comment><USER18> Nobody tell Oracle! [https://github.com/WebKit/webkit/search?q=JavaScript](https://github.com/WebKit/webkit/search?q=JavaScript)

</comment><comment><USER19> Fuck it, let's just call it ECMAScript and be done with it. JavaScript was a purposefully horrible name to begin with (as other commenters have pointed out). One less thing Oracle can jerk us around on.

I'm just going to call it ES or ECMAScript from now on. If enough people do it the matter will be settled.

<comment> yoz-y Havent dug into this but can you actually? Will browsers accept type="ecmascript" and will editors accept .es extension without much fuss?

</comment></comment><comment><USER20> It makes my head hurt a little bit to think that everything after the slash in the Mime type of open web standard "text/javascript" is a trademark Oracle is actually trying to enforce

</comment><comment><USER21> I wonder what would happen if he actually asked Oracle permission to use the name. Would Oracle allow it? Would he be required to pay a fee?

<comment><USER22> > Would Oracle allow it?

Yes, but only after:

> Would he be required to pay a fee?

Yes, it's Oracle. It will be a hefty one.

</comment></comment><comment><USER23> Wow, Oracle is now even more evil than they were just yesterday.

<comment><USER24> Another day ending in "y"... :)

</comment></comment><comment><USER25> What is the name of the app? It is unclear if the OP uses "JavaScript" in the title of the app, or just "JavaScript" appears in the description or the content of the app. I guess they are quite different cases.

<comment><USER26> App author here, the name is: "HTML5, CSS, JavaScript, HTML, Snippet Editor".

The app was written long time ago and I'm surprised to receive an email from Apple about it at all.

Here is the link so you can see how it's shown in the App Store, I don't think anyone would associate this app with Oracle!

[https://itunes.apple.com/us/app/html5-css-javascript-html- sn...](https://itunes.apple.com/us/app/html5-css-javascript-html-snippet- editor/id448999049?ls=1&mt=8)

<comment><USER27> It's in the (unwieldy) name? Have you considered changing the name to, say, Snippet Editor?

<comment><USER26> This was done long time ago when we game the appstore ranking by adding all the keywords to the app name. I haven't touched the app since like many years.

<comment><USER28> Maybe stop trying to game the system? If your product is worth anything, people will buy it without the need for tricky bullshit.

</comment></comment></comment></comment></comment><comment><USER29> I guess it depends on what your app "Javascript" does.

The key idea in trademark disputes/claims is that you are probably ok as long as your mark isn't confusingly similar to a widely known valid mark by another entity/owner. So if your Javascript app has nothing whatsoever to do with the programming language or computer in general, Apple shouldn't take down your app.

Eons ago Apple Computer was sued by Apple Corp (Beatle's record label) for trademark infringement. I wouldn't be too surprised if the Steve's deliberately named their computer company after the Beattles's corporate creature, being that Jobs was an ardent Beatles fan. They settled and agreed not to enter each other's business (ie, music and computer), so as not to confuse consumers. Apple is a bit hypocritical in this regard though -- in one trademark lawsuit, the company sued a mom-and-pop grocer in Poland whose website, A.pl, Apple claimed, violated Apple's trademark, not too long ago and was criticized for their insanely absurd legal tactics.

<comment><USER30> From the head of the linked Reddit discussion:

 _Just received this email from Apple about my app(Html, css, javascript snippet editor)._

In other words, it appears to be an app that's an IDE for various syntaxes, and JavaScript is one of them. IMHO (not a lawyer, but just observation) simply mentioning a trademark in reference to your product having something to do with it is completely legit. Otherwise we'd be seeing companies like Apple go after all the smartphone case manufacturers that mention "iPhone" since that's what their product is for.

<comment><USER14> > Otherwise we'd be seeing companies like Apple go after all the smartphone > case manufacturers that mention "iPhone" since that's what their product is > for.

Apple does that. They have a "Made For i" accessory program, and go after third-party accessory distributors (not manufacturers) who use their trademarks without permission: [https://developer.apple.com/programs/mfi/](https://developer.apple.com/programs/mfi/)

</comment></comment></comment><comment><USER31> Finally, the ultimate reason to kill off JavaScript once and for all!

<comment><USER32> Meh, I learned modern JavaScript and dove deep into how JS works over the last year and I think it's probably one of my favorite dynamic languages if not my most favorite one. The syntax is a nice sweet spot, the semantics make more sense in most situations than Ruby or Python, the lacking standard library has been more than made up for by third part packages. I'd love to work in JS in the future which isn't something I'd have said 10 years ago and especially not 20 years ago.

<comment> xkcd-sucks Try maintaining and extending a codebase founded on all those third party packages, over a period of several years

<comment><USER33> Dunno, small stdlib-like extensions are the absolute most trivial 3rd party dependencies. Like let's say they use Lodash.

Definitely not the hard part of maintaining a legacy dynamically-typed application. And I'd say it's the most trivial part.

And your assertion suggests that it's somehow rare to have to maintain code? I'm sure the person you replied to has maintained code for more than a year and is drawing part of their post from that experience.

</comment></comment></comment></comment><comment><USER34> Because "Ecmascript" sounds like a job for the Ghostbusters.

<comment><USER35> Or perhaps a skin rash.

</comment></comment><comment><USER36> ES seems like a decent enough alternative to me.

</comment><comment><USER37> Is this Apple just doing pre-emptive due-diligence or did Oracle actually raise a flag?

</comment><comment><USER38> IANAL, but why does he not just change the name to "JS" and be done with it?

Edit: looks like he was suggested this in the Reddit thread and thought it was a good idea.

</comment><comment><USER39> This was probably an automated script and just a precaution from Apple. I think it's safe to use the name JavaScript. For me JavaScript is ES5, eg before 2015 and EcmaScript is the new JavaScript from ES6 2015 and onwards.

</comment><comment><USER40> Given the formatting, I can't help but wonder if the trademark is for "JAVASCRIPT" and _not_ "JavaScript"/"Javascript"/"javascript"...

<comment><USER41> Trademarks are case insensitive

</comment></comment><comment><USER42> Reading this article makes me want to speed up on a project where I am migrating an application away from Oracle DB and Forms.

</comment><comment><USER43> Oracle is just acting as expected. Nice of Apple to stand up for their developers.

</comment><comment><USER44> It needs a new name (that isn't "ECMAScript").

</comment><comment><USER45> [deleted. Netscape licensed "Java" name from Sun.]

<comment><USER46> Except that Oracle owns both the JavaScript and Java trademarks via the Sun acquisition.

And Sun _requested_ the name change:

 _in early December, Netscape and Sun did a license agreement and it became JavaScript. And the idea was to make it a complementary scripting language to go with Java, with the compiled language._ [1]

So it's kind of the opposite of chickens coming home to roost. More like a term plan finally paying off.

[1] [https://www.infoworld.com/article/2653798/application- develo...](https://www.infoworld.com/article/2653798/application- development/javascript-creator-ponders-past--future.html)

</comment></comment><comment><USER47> We can still call it ES6 right?

</comment><comment><USER48> Boycot "Javascript"!

<comment><USER49> Sure: [https://addons.mozilla.org/en- US/firefox/addon/noscript/](https://addons.mozilla.org/en- US/firefox/addon/noscript/) (Just don't go poking around the addon internals, might be written in The-Language-That-Shall-Not-Be-Named)</comment></comment>


Modern SQL: With – Organize Complex Queries - <AUTHOR> https://modern-sql.com/feature/with <comment><USER2> Markus Winand is a great SQL expert. I'm really grateful for everything that he shares with us. He writes well, explains us the differences between the different SQL engines. And his books are fantastic references.

I highly recommend his "No to offset" tutorial [http://use-the-index- luke.com/no-offset](http://use-the-index-luke.com/no-offset) Should be common knowledge, but I still see offset being used way to often, even in core ORM frameworks :-(

<comment><USER3> A summary: "don't use offset unless you need to be able to navigate to specific pages, in which case you have to use offset". That "navigate to specific pages" use case is pretty common.

<comment><USER4> If page numbers are important to you, then you have to find a different method anyway because of the drifting issue.

<comment><USER3> Or just accept that the page won't be exactly "right", but close. The solution proposed in the article doesn't have a "good enough" option for pages, as far as I can tell.

<comment><USER5> If you can use cursor-based pagination, then definitely do so—but as you point out, you can't always do that. Further, unless you're using bigserials (i.e. incrementing ints), you can't check $last_seen_ID either. With UUIDs (whether v4 or a custom impl.) there's no way to check `WHERE id > $last_seen_id`.

</comment></comment></comment></comment></comment><comment><USER6> If your query is complex enough to warrant a (non-recursive) CTE, it's probably complex enough to warrant breaking that CTE out into a separate view (or function, if it performs a write). Now you can independently test and reuse that view, which you can't do with a CTE.

(Bonus if you're in Postgres: Postgres optimizes across views, but not across CTEs. Go figure.)

<comment><USER7> Allow me to disagree. Before CTEs I would have agreed, but CTEs gain you the same in clarity (decomposition _really_ helps with comprehensibility of complex queries) without the loss of having to chase down 5 different views in order to understand the one you're looking at.

My rule is to refactor into a view when _and only when_ it's going to be reused.

> Postgres optimizes across views, but not across CTEs

Sadly true, and one of the few big gripes I have with Postgres. I half recall reading that they are reconsidering this decision, so there's hope.

<comment><USER8> > Sadly true, and one of the few big gripes I have with Postgres. I half > recall reading that they are reconsidering this decision, so there's hope.

I've read quite a few people on the email lists claiming that this is a benefit of CTEs. How they justify that, I don't know. Sure, you get predictability of performance, but I have never once written a query worried about how predictably it performed, instead of how fast it performed.

<comment><USER7> It's a bizarre side-effect of lacking query hints. This is my interpretation of the sequence of events:

1\. Postgres will never implement query hints, because query hints are evil

2\. In the real world people need them anyway, so they (ab)use implementation details that offer some control over the query plan (WITH is one example, see also OFFSET 0 and other hacks)

3\. Everyone starts relying on these implementation details, e.g. you'll find people actually recommending this as a way to optimize queries in the mailing lists

4\. Now when someone asks to fix the planner, someone else will point out this will break all the queries that have been "optimized" by depending on the old behavior

Postgres is generally a fairly sane project though, so I have some confidence they will come to their senses. Eventually.

</comment></comment></comment></comment><comment><USER9> Updatable CTEs are great, for example if you want to set a column to 1 where the date is the latest day for each value in a different column, you would do something like this

      ;WITH cte AS(SELECT
            ROW_NUMBER() OVER(PARTITION BY SomeVal
                      ORDER BY SomeDate DESC) AS row,
                    * FROM SomeTable)

      UPDATE cte
      SET id =  CASE WHEN row = 1 THEN 1 ELSE 0 END

Here is the DDL and DML in case you want to play around with this

      CREATE TABLE SomeTable(id int,SomeVal char(1),SomeDate date)
      INSERT SomeTable
      SELECT null,'A','20110101'
      UNION ALL
      SELECT null,'A','20100101'
      UNION ALL
      SELECT null,'A','20090101'
      UNION ALL
      SELECT null,'B','20110101'
      UNION ALL
      SELECT null,'B','20100101'
      UNION ALL
      SELECT null,'C','20110101'
      UNION ALL
      SELECT null,'C','20100101'
      UNION ALL
      SELECT null,'C','20090101'

<comment><USER10> So I've never come across INSERT table SELECT values UNION ALL SELECT values.

Any reason to prefer that over INSERT INTO table (col, col) VALUES (v1, v2), (v1, v2), ... ?

<comment><USER11> No reason, I do use Row Value Constructor/Table Value Constructor, these were introduced in SQL Server 2008, while CTEs were introduced in SQL Server 2005, I think when I created this example initially SQL Server 2008 was just released so this would not have worked for a lot of people on 2005

</comment></comment></comment><comment><USER12> Wow, what I liked on this website is that you can turn off social plugins, why not more websites do that...

<comment><USER13> It's actually "opt-in" (=default off) and common in Europe.

A German IT media website (heise.de) pioniered that approach in 2011: [https://web.archive.org/web/20150318081341/http://www.heise....](https://web.archive.org/web/20150318081341/http://www.heise.de/ct/artikel/2-Klicks- fuer-mehr-Datenschutz-1333879.html) ; the newer code: [https://web.archive.org/web/20150424102213/http://www.heise....](https://web.archive.org/web/20150424102213/http://www.heise.de/ct/artikel/Shariff- Social-Media-Buttons-mit-Datenschutz-2467514.html)

</comment></comment><comment><USER14> The optimization fence in PostgreSQL is usually bad for SELECTs but it has it's own benefits. See this thread [http://www.postgresql.org/message- id/201209191305.44674.db@k...](http://www.postgresql.org/message- firstname.lastname@example.com)

</comment><comment><USER15> What I really want from SQL is the ability to do a single select with one or more parts of each returned record being an array (defined by a one-to-many join) and others simple scalars.

It looks like Postgres can do it [1] with its JSON capabilities, and to be honest its being a little while since I've dug into it, so things might have changed (I'm actually not even sure I'm phrasing the question correctly), but the old way of doing a single select and then looping over it in whatever code is calling the SQL and doing N more selects, one for each row to get the sub- array is horrible.

[1] [http://bender.io/2013/09/22/returning-hierarchical-data- in-a...](http://bender.io/2013/09/22/returning-hierarchical-data-in-a-single- sql-query/)

<comment><USER16> Recursive CTE can be very fast in Postgres. I can create a closure table of 2 Million rows for indirect and direct relations i.e. All paths from 15000 source direct relations in about 12 seconds on my MBPro 1Tb ssd 16 Ram. The makes it practical to just recreate all paths as a materialzed view refresh instead of worring about complicated incremental graph logic such as moving branches. With such a closure view - any graph traversal query is lightning fast - no need for neo4j !

<comment><USER17> Can you post the code for this somewhere? Thanks!

</comment></comment></comment><comment><USER18> Very interesting site, but does anyone know why Oracle and mysql have a so poor support of the standard ? It looks as if postgres was the only one trying to comply.

<comment><USER13> Have you read the SQL99 or even 2003 spec? No database supports everything. It's a matter which features one cherrypicks. If you want to use lots of XML and ORMs inside your database or use Java as stored procedures than SQL 2003 spec is great. The enterprise grade database software Oracle, DB2, MSSQL and Postgres are all somewhat comparable.

MySQL with e.g. its InnoDB storage engine is very fast and web scale. Whould a materialized view or other advanced features be useful in MySQL? Sure. But it's a tradeoff. And many devs are willing to go with MySQL for websites.

And SQLite is different than the rest too. And then there are a bunch of NoSQL databases for various usecases.

<comment><USER19> I think you're glossing over some important differences there. Some databases really are more standards-compliant than others, and that Postgres would be more standards-compliant than Oracle or MySQL is 100% consistent with my experience.

For some use cases that's fine, sure. But I've also seen many developers come to regret choosing MySQL when, months or years down the line, they ran into issues that hadn't been apparent at first. And honestly I don't see how it's a "tradeoff" when Postgres can offer performance that's every bit the equal of MySQL.

</comment></comment></comment><comment><USER20> with has completely changed my usage of PostgreSQL. I am a newbie and being able to split queries into logical small steps with this has made SQL much more fun.

<comment><USER21> But don't you still get big long queries. Or can you make separate statements?

<comment><USER22> A long query written with CTEs is eminently more readable than the logically equivalent query written with nested sub-queries.

Just like a pipe operator makes long strings of function calls more readable than the semantically identical nested function calls.

</comment></comment></comment><comment><USER23> Sometimes SQL looks like a good spot to break out the old CWEB literate programming tools...

<comment><USER24> [https://modern-sql.com/use-case/literate-sql](https://modern-sql.com/use- case/literate-sql)

</comment></comment><comment><USER25> A common pattern I still haven't solved is this: I have table _A_ , and now I want to add table _B_ and give it one row for each row in table _A_. Then I want to add a foreign key column to table _A_ pointing at the row I just added.

Of course this is easy to do with a loop, but can you do it all in pure SQL? If you have a solution I would love to see it.

Here is my history of attempts:

        DROP TABLE IF EXISTS dogs;
        DROP TABLE IF EXISTS doghouses;
        DROP SEQUENCE IF EXISTS dogs_id_seq;
        DROP SEQUENCE IF EXISTS doghouses_id_seq;

        BEGIN;

        CREATE SEQUENCE dogs_id_seq;
        CREATE SEQUENCE doghouses_id_seq;

        CREATE TABLE dogs (
          id INTEGER PRIMARY KEY DEFAULT nextval('dogs_id_seq'),
          name TEXT NOT NULL
        );

        INSERT INTO dogs
        (name)
        VALUES
        ('Sparky'),
        ('Spot')
        ;

        -- Now we want to give each dog a doghouse:
        CREATE TABLE doghouses (
          id INTEGER PRIMARY KEY DEFAULT nextval('doghouses_id_seq'),
          name TEXT NOT NULL
        );
        ALTER TABLE dogs ADD COLUMN doghouse_id INTEGER REFERENCES doghouses (id);

        /*
        -- ERROR:  syntax error at or near "INTO"
        UPDATE  dogs AS d
        SET     doghouse_id = (
          INSERT INTO doghouses
          (name) VALUES (d.name)
          RETURNING id
        )
        ;
        */

        /*
        -- ERROR:  WITH clause containing a data-modifying statement must be at the top level
        UPDATE  dogs AS d
        SET     doghouse_id = (
          WITH x AS (
            INSERT INTO doghouses
            (name) VALUES (d.name)
            RETURNING id
          ) SELECT * FROM x
        )
        ;
        */

        /*
        -- ERROR:  missing FROM-clause entry for table "dogs"
        WITH homes AS (
          INSERT INTO doghouses
          (name)
          SELECT  name
          FROM    dogs
          RETURNING doghouses.id AS doghouse_id, dogs.id AS dog_id
        )
        UPDATE  dogs
        SET     doghouse_id = homes.doghouse_id
        FROM    homes
        WHERE   dogs.id = homes.dog_id
        ;
        */

        -- ERROR:  syntax error at or near "INTO"
        UPDATE  dogs AS d1
        SET     doghouse_id = h.id
        FROM    dogs d2
        INNER JOIN LATERAL (
          INSERT INTO doghouses
          (name) VALUES (d2.name)
          RETURNING id
        )
        ON true
        WHERE d1.id = d2.id
        ;

        COMMIT;

<comment><USER26> This script works in SQL Server - I would think you could do the same in Postgres, but I'm not as familiar as I'd like to be with Postgres.

Note that it does require 2 separate steps rather than 1 as you appear to desire, so may not work for you:

        IF OBJECT_ID('dbo.dogs', 'U') IS NOT NULL
            DROP TABLE dbo.dogs
        GO

        IF OBJECT_ID('dbo.doghouses', 'U') IS NOT NULL
            DROP TABLE dbo.doghouses
        GO

        CREATE TABLE dogs (
            id INTEGER IDENTITY (1, 1) PRIMARY KEY
           ,name VARCHAR(MAX) NOT NULL
        );

        -- Now we want to give each dog a doghouse:
        CREATE TABLE doghouses (
            id INTEGER IDENTITY (1, 1) PRIMARY KEY
           ,name VARCHAR(MAX) NOT NULL
        );
        GO

        ALTER TABLE dogs ADD doghouse_id INTEGER REFERENCES doghouses (id);
        GO

        INSERT INTO dogs (name)
        VALUES
            ('Sparky'),
            ('Spot')
        ;

        DECLARE @DogsAndHouses TABLE (
            doghouse_id INT
           ,name VARCHAR(MAX)
        );

        INSERT INTO dbo.doghouses (name)
        OUTPUT INSERTED.id, INSERTED.name INTO @DogsAndHouses
        SELECT
            d.name
        FROM
            dbo.dogs d;

        UPDATE d
        SET
            doghouse_id = dah.doghouse_id
        FROM
            dogs d
            JOIN @DogsAndHouses dah ON d.name = dah.name;
        GO

<comment><USER27> Yup, the OUTPUT keyword is the key to making this work. Before this was added to TSQL, the only way I knew of to make this work was by using a cursor and handling each record independently.

</comment></comment></comment><comment><USER28> Wow, never knew this. I've been fine with just doing nested subqueries but this is definitely easier to read. Great to learn a helpful piece of everyday syntax before I've had my coffee.

</comment><comment><USER29> Typically I advise people to use CTE's for ad hoc queries and to avoid CTE's for production code. CTE's are easily abused.

<comment><USER30> Easily abused and can throw the optimizer for a loop, especially if using them to reference within the CTE (not a recursive CTE but joining back).

</comment></comment><comment><USER31> One of the most useful things about CTEs is PostgreSQL's support of having DELETE ... RETURNING and UPDATE ... RETURNING in the the WITH clauses. This way you can easily implement moving rows from one table to another.

</comment><comment><USER32> Nice reference.</comment>


"If Higher Ed Doesn't Adapt, It Will Be Ripe for Disruption" by Tom Goldenberg - <AUTHOR> https://www.linkedin.com/pulse/higher-ed-doesnt-adapt-ripe-disruption-tom-goldenberg <comment><USER3> My experience with attending a coding bootcamp was this: I'd been working as a video producer/editor and photojournalist since the mid-2000's, and slugged it out in a tough-to-advance-in industry. Got to the top of the field, seeing my work on network television and on the front page of newspapers you'd know by name, and picked up two Emmy awards... but I was still freelancing, paying for my own gear, my own health insurance, and spending 80% of my time looking for clients vs 20% of my time doing creative work for them.

I wanted a career change, and I enjoyed/had an aptitude for programming - so I decided to attend Dev Bootcamp (DBC) in NYC. I looked at it as "Well, it's the same price as a semester of college, and the same time commitment - and if I want to invest in another bachelor's degree afterwards, I'll have a solid idea on if I'll enjoy/do well with the curriculum."

DBC was a rigorous academic program and covered a lot of ground, provided that you covered the optional reading materials, and tried to build ambitious projects along the way... there were definitely those among my peers who did the bare minimum, and others who pushed themselves.

Not all 'bootcamp' programs are created equal - I've met developers from other accelerated coding courses who could barely create a user-authenticated blog using gems for all of the functionality... and I've met others who - <USER2> myself - jumped into stacks way outside of what we knew, taught ourselves what we needed to know, and can generally find high level and standards-based solutions in the docs on our own.

It was a tough hunt for my first job afterwards. I found that a lot of companies don't understand the difference between what a bootcamper should know vs. what a CS student should know: intermediate execution without knowing the 'why' vs. CS theory without knowing above an entry level of the 'how'. After about 5 months of job hunting, I got hired in the industry.

Presently I'm at a startup, building a client/server application using Elixir/Phoenix for the API, and C++/11 and Qt for a cross platform client. I'm making 33% more than I did at the top of my prior field - and enjoying the heck out of coding... and it just took 8 weeks of my own coding self-teaching, 19 weeks at a bootcamp, and about the same in job hunting/interviewing/reviewing offers afterwards.

</comment><comment><USER4> I have had a hell of a time convincing my son to attend Uni. He just turn 17 and is finishing up High School. When he looks at the first 2 years of what he has to do (mandatory course work) and then the next 2 years of course work that is somewhat related to what he would like to do (Cyber Security Field), it seems like a waste of time and money.

He would much rather work on his SANS Certs and work toward OSCP Certification. Growing up with Linux/Networking and teaching himself to code has created a situation where he feels there is little they can offer him. He looks at the curriculum and wants to cry.

<comment><AUTHOR> That's really interesting. When I interviewed senior software engineers for this piece, they told me that much of the coursework was not practical or useful. Operating Systems 101, Compilers...

</comment></comment><comment><AUTHOR> Would love to hear thoughts regarding the boot camp vs. higher ed question. In many cases it's not one or the other, but I'm curious where people think education is headed.

<comment><USER5> So far I haven't been impressed with Boot Camp graduates, but people said the same thing about early mobile phones, GUIs and other technologies.

<comment><USER6> People say that boot camp graduates are not impressive, but you could say the same thing about new college grads, as well, IMHO. Many of them have little / no real experience, except for a few unambitious projects. This is not the case at all schools, but I've definitely seen some expensive CS programs like this.

<comment><USER5> This is my subjective opinion...

Generally you can trust decent grades in a CS program no matter what the reputation of the school is. If someone can write a compiler, or operating system, or whatever else they specialize in, they can be free-standing with their learning. I haven't found this to be the case with "Non-technical degree plus bootcamp." Maybe the hit rate for boot camp grads is 1/3 that of CS? Perhaps it's not a fair comparison, but it's been my experience.</comment></comment></comment></comment>