Why I love everything you hate about Java - <AUTHOR> http://magicscalingsprinkles.wordpress.com/2010/02/08/why-i-love-everything-you-hate-about-java/ <comment><USER3> I find it odd that while the article is titled about Java, all of the code examples are in Scala.

The statement "function composition is a degenerate case of the Decorator pattern" in the blog is bizarre to me. OO languages like Java have to resort to the Decorator pattern to handle their lack of composibility; that seems far more degenerate than a language that supports this kind of composition without hacks.

Also this article is 2.5 years old.

<comment><USER4> Agreed. Most design patterns are workarounds around missing features in a language. You can go around and pretend the reverse is true all you want, but it doesn't make it so. Also, looks the author never heard about decorators in Python, which let you do the same thing if you want, just with much less boilerplate.

The article reads like it was written by somebody with experience in Java and Scala, but not much more.

</comment></comment><comment><USER5> _So we set about to re-write Querulous using my favorite modularity techniques: Dependency Injection, Factories, and Decorators. In other words, everything you hate about Java._

Hey there Mr. Strawman.

I write mostly Ruby, and I use dependency injection, factories, and decorators liberally. There's nothing in Ruby that makes these any harder than they are in Java (in fact, I'd argue they're easier.)

Two years ago, when this piece was written, the author had more of a point: some people rejected anything that reminded them of Java out of hand, including design patterns.

These days, I'd argue that interest in classic OO design ideas is experiencing a massive resurgence in the Ruby world.

<comment><USER6> Why would you ever use a "factory" in Ruby?

I'm less certain that DI is "wrong" in Ruby, although it's definitely unidiomatic.

<comment><USER5> I use a factory for the same things you use them for: to build objects.

For example, I use factories to create test objects that are complicated to set up (using a gem named factory_girl, actually).

Also, in Ruby, every class is a factory for its own instances. If I define a class called User, I can assign the class object User to a variable:

factory = User

Then I can call

factory.new

and receive a new User instance.

As for DI, it's not wrong, nor is it unidiomatic. Plenty of folks in the community use it, and often.

A commenter elsewhere in this thread says that DI is unnecessary in Ruby because you can just reopen or redefine a class whenever you want. That's technically true, but isn't a good practice, as it can lead to some rather rapid foot shootery.

If you want to swap in different-behaving dependencies, DI is a straightforward choice. Reopening an existing class and mangling it can cause very confusing behavior, and is generally avoided by experienced Rubyists.

<comment><USER6> I thought you perhaps meant something more than class objects.

Regarding DI: Jamis Buck infamously used DI for net/ssh and posted that he regretted doing so, because DI felt out of place in Ruby. I'm not spoiling for an argument about its virtues.

Regarding "experienced Rubyists" and reopening classes, I think you should have a look at activesupport/core_ext.

</comment></comment></comment></comment><comment><USER7> Just before I saw this post on HN, I realized that the first editor I was presented to when I was being taught Java at university was emacs.

Emacs felt slow, clunky, last-century and everything which could be light, nimble and cool Emacs made feel boring and hard. I did not get to like Emacs back then.

In fact I've gone years and years and years actually never fully liking emacs, beyond it being simpler to use than vim (which I still consider insane) while readily available on most shells. It was a safe haven, although a unpleasant one.

Recently though, I've dabbled in clojure. Eclipse is really not good for clojure development. Especially not so for learning how things works under the hood. So emacs is seemingly the lingo-franco in clojure circles, and I was forced to return to my old Java-related enemy. Or at least so I thought.

Out of the box, almost nothing is optimal for clojure development. So you have to add packages (emacs supports packages? nice!), you may have to tweak init.el to do so (emacs is configurable and programmable through its own lisp- dialect? nice!), oh and you may want to add some repos and map package-install over this collection of useful pacakages (no way!).

Once you're there and getting productive, you might encounter things you don't like. Google it and find ready-made lisp-code to import into your init.el, and your problem is solved.

I guess that's not really directly related to this article, but before heading to HN now, I had the realization that emacs, despite it being the horrible tool which Java made me hate, is actually pretty awesome.

You need the right perspective to fully appreciate something. This is crucial and something Java taught me this, although in the wrong way. And just as I realize this, then I see an article about Java and perspective.

I like cute litle coincidences like that :)

<comment><USER8> Have you considered adding your configurations to a GitHub repo?

<comment><USER7> I'd say it's not warranted and it's not needed. After meddling about for a bit, I did a reset and I did it using "emacs starter kit" by technomancy (of leiningen fame):

<https://github.com/technomancy/emacs-starter-kit>

On top of this I've added some tweaked versions of yank-indent and indent.el from the emacs-wiki:

<http://emacswiki.org/emacs/AutoIndentation>

On top of that, I've just added whatever tweaks and hacks necessary to get screen & emacs behaving properly in a FreeBSD shell, since currently my best and most powerful internet-facing host is a FreeBSD machine.

So as you can see, most of it is repo'd already :)

</comment></comment></comment><comment><USER9> The article explains why closures are a poor man's objects. Be sure to read the comments to see why objects are a poor man's closures.

<comment><USER10> Both are a poor mans structs with name mangling!

<comment><USER11> But really, those are all just fancy names for 'void*' for people who can't remember two things at once.

<comment><USER12> A pointer itself is not a composite data type. It can't remember two things at once.

<comment><USER13> void* is the zombo.com of pointers. It can do anything. The fact that it can do absolutely, utterly anything is precisely why it is useless.

<comment><USER14> Useless? The software running the computer you are typing on is full of void*.

<comment><USER13> All the pointers are void *; and yet, none of them are.

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> Language wars bore me. I've got pretty decent proficiency in C, C++, Java, Python and Javascript and I honestly like them all.

I use C to really get what happens on the metal. I use C++ to leverage C and C++ libraries for perf critical applications quickly. I use Java like C++ where it makes more sense - Android, or availability of libraries etc. I use Python to prototype and quickly express complex ideas and determine their perf characteristics. I use Javascript for frontend web dev which communicates with json back-end APIs that are language/platform independent services that scale out horizontalty.

I have 2 main rules.

If the question is to learn one important thing or another - I learn both. Then when I come across a new problem I solve it with a combination of the tools at my disposal.

Hence this is why I am currently learning Emacs, lisp, clojure, Scala and Haskell to round out my languages with maybe a little Ruby thrown in. This will take me a few years.

In the end programming is just about getting things to screen quickly and correctly. Seen from that viewpoint most languages are very similar at heart.

<comment><USER16> >Language wars bore me

The Haskell vs. everything else language war really is important though. All the languages you mention are basically the same thing with slightly different syntax or a slightly different runtime environment. Haskell, on the other hand, revolutionizes the way you approach code. Or at least it did for me.

<comment><USER15> Yeah I'm not so sure. If Haskell is so great why isn't it dominating? Where are the Haskell phones, apps, services etc?

Don't get me wrong - I enjoy it. But I've learned a few things throughout my life. First, the one true crowd is always wrong. Two, if it's so good - <USER2> it, and prove it.

A lot of functional stuff is a ton of gushing talk - but no product walk.

When Haskell runs on billions of devices or serves trillions of pages or produces trillions in revenue call me. Otherwise, I'll just keep shipping with my lame proven product producing languages.

Functional languages have so far been all talk and no walk.

<comment><USER4> You do have a few cool, real-world products out there in Haskell (eg, git- annex, darcs). But to be fair, there is a fairly steep learning curve.

Once upon a time, at my old company, a guy came to an interview. He was very experienced in PHP, having used it to build websites as a freelancer for something like 10 years. Did he know object-oriented programming? He'd heard about it, it was probably good for larger teams. Because he'd just been working with the same techniques all these years. And the sad truth is, your average programmer is likely to be like this guy. In which case, you want to give him a solid language, which is aimed at preventing him from shooting off his own foot, and does not feature many complicated concepts, like Java.

</comment></comment></comment></comment><comment><USER17> I write in all kinds of languages professionally and have been doing this sort of thing for a long time (since I was 9 and I'm now 31), so, I'm mostly over the language war thing. Yes, I prefer some languages over others. Or certain languages in certain situations. But I try not to let my opinions get out of hand. Everything is pretty much the same anyway.

Java? I can see the appeal. It's really come a long way. The only thing I can't get over about Java is the goddamned verbosity of it. It's _excruciating_ to write anything in Java.

Yes, I know. Use a modern IDE. The namespaces are designed that way for a reason. Just deal with it. It's not a product of Java itself but of the libraries. Blah blah.

It's still a painful environment to deal with and, with developer time several factors more important that just about anything else, I value my time highly and I'm not going to waste it on AbstractSingletonProxyFactoryBean bullshit.

Now, yeah. If you're a huge corporation that is bumping up against the law of large numbers, where most of your developers are mediocre and yet still have to work together, then I guess Java is OK.

<comment><USER18> I've found things like Lombok and LambdaJ to be super helpful as far as verbosity.

One thing that does frustrate me is that the compiler enforces a target bytecode level at least as high as your source version. Meaning that even the simpler syntax for initializing generics isn't allowed even though it's pure syntactic sugar and has no impact on the generated bytecode.

</comment></comment><comment><USER19> This is a gem to remember in the future (from the comments): "Design Patterns are for when you run out of language".

<comment><USER20> Thanks for this. Great quote.

FWIW the original, by Rich Hickey, seems to have been "Patterns mean 'I have run out of language'".

Cited here - [https://google- styleguide.googlecode.com/svn/trunk/lispguide...](https://google- styleguide.googlecode.com/svn/trunk/lispguide.xml) \- but I can't find an original source.

</comment></comment><comment><USER21> Not sure how Java is better than all the "hipster" languages as you say. It doesn't seem like you're just using some design patterns that are present in basically every language.

Clojure has futures too, but the syntax isn't as clunky as Scala or especially Java. All these synchronization primitives are in basically every other language. Maybe I'm missing something but I don't really see what is special about Java here. Has the OP ever tried any "hipster" languages, he might be pleasantly surprised if he did.

</comment><comment><USER22>
        dependency injection : currying
        factories : type constructor
        decorators : higher order functions

there's nothing wrong with DI and the like. what's wrong is the way it's done in idiomatic java. when you do DI in idiomatic scala, there isn't much of a problem.

<comment><USER14> Huh?

How do any of your analogies work?

<comment><USER23> One example of the first one:

[http://mikehadlow.blogspot.jp/2010/03/functional- dependency-...](http://mikehadlow.blogspot.jp/2010/03/functional-dependency- injection.html)

</comment></comment></comment><comment><USER24> I no longer care. Java is overly verbose, but therefore explicit. I'm happier to do concise Scala with more stuff implicit stuff going on, or more explicit stuff in Java with lots of Spring config.

Opinionated frameworks which hide stuff from me are bad. They're good for initial productively, but you pay the price later - you have to understand it to weak it, and may find the architecture doesn't fit your problem.

On the other hand, writing a Spring config file from scratch is a horrific process, especially without the Spring eclipse plug-in.

But now that I understand web.xml's and application-context.xml/*-servlet.xml, and have written plenty of Spring config, my productivity is pretty damn good. So why should I care.

</comment><comment><USER25> FWIW I don't think the Clojure or Scala communities have any kind of "hate" for Java. Clojure views Java as an ally for many of the reasons you discuss. I think you'd be hard-pressed to find people in the Clojure or Scala camps that refuse to acknowledge there's a right time to descend into Java. Likewise, I think any Ruby programmer worth his/her salt would tell you: if you're trying to process 20,000 messages per second, don't rely on Ruby. Moreover, JRuby, Clojure, and Scala are all quite fond of Java interop, so I'm not sure I agree with your opening statement that people who use said languages are "hipsters" who blatantly ignore the benefits of changing the level of abstraction when the situation warrants it.

</comment><comment><USER26> AbstractFactoryFactory seems like an inevitability of object orientation. I have to wonder why we don't see it as often in other OOP languages. I'm not versed in Ruby or Python so I can't comment on those. In JavaScript there isn't the concise class or extends/implements keywords and people tend to hide how a library is implemented behind a closure that prevents you from extending it.

So I wonder if Java just gets the blame because it is the most pure object oriented language. It doesn't put up walls preventing you from doing what OOP really wants you to do. C# is the same way, by the way, you see IThisOnlyExistsToBeGeneric<T> all of the time; AbstractControllerBase is a real class in C# MVC if I remember correctly.

What walls does Ruby and Python have that prevents this? Because I see no reason why people _aren't_ doing it.

<comment><USER27> There reason you don't see interfaces or abstract classes in Ruby or Python is because they are dynamically typed. Interfaces and abstract classes are byproducts that are required for Java and C#'s type systems to work. What use would you have for them in Ruby?

<comment><USER28> I still reason in terms on interfaces when passing arguments to a function though (eg: argument X needs to behave like a string). It will later be verified in runtime and when running the tests but it's how I reason when structuring the code.

</comment></comment></comment><comment><USER29> Java is an excellent language, it has a elegant syntax, but... it's not made for web development. JSP/Servlets development is a joke.

<comment><USER30> Those are 1997 technologies, though. Have you looked at

\- Play Framework <http://www.playframework.org>

\- Jersey [http://codahale.com/what-makes-jersey-interesting- parameter-...](http://codahale.com/what-makes-jersey-interesting-parameter- classes/)

\- GWT <https://developers.google.com/web-toolkit/> or

\- Grails <http://grails.org/products/ggts>

for example?

Not saying any of these are perfect, but it's been 5+ years since anyone had to use JSP/Servlets/Struts.

edit: formatting

<comment><USER31> Mentioning Servlets seems pretty out of place here. The Servlet spec isn't a web framework its an HTTP middleware. Its more similar to Rack than Rails. Both GWT and Jersey are commonly deployed on top of Servlets.

<comment><USER18> Because in the past you had to use servlets directly, or JSPs that you had to do a lot of work manually to separate business logic from the presentation layer.

Source: I worked at a Web startup circa 2000 where we did exactly that. I think people sometimes forget how far we've come.

</comment></comment></comment></comment><comment><USER32> " Our life is frittered away by detail. Simplify, simplify, simplify! I say, let your affairs be as two or three, and not a hundred or a thousand; instead of a million count half a dozen, and keep your accounts on your thumb-nail. " \-- Thoreau

This is pretty much why I find Java (and others at similar levels of complexity) distasteful and try to steer clear of anything related to it. It is also why Go appears to me as attractive: it has simplicity everywhere.

</comment><comment><USER33> My experience at amazon has been that people.drink the config kool aid. They make everything configurable but never end of changing in the lifetime of the app anything from the sensible defaults.

At that point you've just added unnecessary bloat.

There is something nice to be said about code that works right off the bat with sensible defaults.

</comment><comment><USER34> I think people get too caught up on the verbosity side of code. Most devs spend considerable amounts of time debugging, and that's probably the suckiest part of the job. The amount of time spent writing the code (especially for someone who types quickly, as most devs do) is immaterial compared to the pain of trying to debug a nasty bug or perf problem (especially in a complex systems). That's where verbosity helps a lot as you don't have to dig into the library code to understand what's going behind the scenes, because most of the relevant configs and choices made in regards to how to use the framework are laid out in front of you.

</comment><comment><USER35> In Ruby, we often use the middleware pattern (the rack stack, sidekiq or faraday to name a few).

In the article, replace "Factory" with "Middleware" and "apply" with "call" and it's just like what we do in the ruby community.

</comment><comment><USER36> This article doesn't say much about Java, it is mostly about OOP patterns

<comment><USER37> >it is mostly about OOP patterns

It's mostly about why I love Clojure's partial / Haskell's currying.

<comment><USER7> As someone who has spent a little time into F# and other languages where currying are the default behaviour for any function, this is the one thing I find myself missing the most in clojure.

Yes, I see why wee need partials and can't have currying by default. It would seriously mess up destructuring. Yes, I get that. I still miss it though.

<comment><USER37> I'd rather have destructuring.

</comment></comment></comment></comment><comment><USER38> This guy must really love his null pointer exceptions.

</comment><comment><USER39> I think the author of this article has too much exposure to Rails 2.x and not enough core knowledge of Ruby. If he had actually known the language well, then he wouldn't have made any references to the deprecated rails hack alias_method_chain. Instead, he would have used modules to examplify.

The problem is though, when doing it with modules instead then the points he is trying to make totally disappears.

</comment><comment><USER40> tl;dr: "different languages are appropriate for different uses"

<comment><USER41> or different habits, for that matter.

</comment></comment><comment><USER42> I refuse to get drawn in this.again.for the last time.

</comment><comment><USER43> No hire

</comment><comment><USER44> I reject the idea, that because I want to scale, I should have to write thread pools, executors, concurrent queues, and task completion APIs. This is 2012, any idiom, functional or not that doesnt support this as a built in capability is less than worthless. How many times do I have to write, rewrite and debug the obvious just to make a living? And as for the factory pattern, yes you can use it to hide a whole bomb load of configuration and code evil, that you probably should never even have to worry about, if you werent working in such a crap tool

<comment><USER18> Which is why I love working in a Java EE application server like Geronimo where very smart people have gotten paid lots of money to do that boring grunt-work for me, and I can just spend my time building features and deploy a nice scalable system when I'm done.</comment></comment>


Is the Party Over? The Flattening S-Curve of IT Innovation - <AUTHOR> http://blog.agoeldi.com/2009/05/14/s-curve-of-it-innovation/

<comment><USER2> I don't think there's any shortage of places that could benefit from innovation, but there are a lot of roadblocks now.

For instance, _of course_ there's a way to do better than Exchange and Outlook, _of course_ there's a way to improve Office, _of course_ Windows has major flaws. But just try selling the business model of "unseat Microsoft" in any number of areas.

One possible way forward is virtualization. Until recently, it was impractical to run established applications without committing the hardware to one legacy OS, which brought everything else down to the same level of ancient technology. If it is finally feasible to demote Windows to, er, a window, I.T. would finally be free to explore something new in a way that would _not_ break any of their core investment in software.</comment>


Ask HN: Any interest in a CakePHP book? - <AUTHOR>

I've recently read about several people who have been successful in selling their ebooks. Following successful entrepreneur's advice, I'm looking for a topic I know well enough and that has a big enough target audience. I arrived at the idea of making a CakePHP book.
When I was learning CakePHP myself, I suffered because all the available books were old and the framework has changed sufficiently to make them useless as a learning tool. I've found the following pros and cons:
PROS:
- PHP remains one of the most used languages for the web, and CakePHP is one of the most popular PHP frameworks.
- All existing books are really outdated.
- It's a topic I know well, and know common questions people will have when learning it.
CONS:
- Ruby, Python, etc are hipper and probably what more people want to learn.
Would you as a developer be interested in a CakePHP ebook? Any feedback regarding the idea?
Thanks <comment><USER2> I'm actually working on a CakePHP legacy app today and have experienced precisely what you are talking about (the lack of good material out there).

I am actually surprised at how CakePHP can be so popular, yet have so few books to support it.

Ruby and Python might be 'hipper' but with the numbers of people using PHP out there I am sure you would find demand would still be strong enough for something like this.

From a business/money making perspective - I'd assume that the market for Ruby, Python books is very crowded - but the competition doesn't seem strong at all for CakePHP.

<comment><USER2> Further more to this, how about an 'MVP' version of the book - write a chapter and see ifyou can get any interest in it and make a decision from there.</comment></comment>


Should I Take Toyota's Software Update? - <AUTHOR> http://ask.slashdot.org/story/10/02/26/1447213/Should-I-Take-Toyotas-Software-Update?from=twitter <comment><USER2> For what it's worth, my VW has had the "pushing the gas and brake simultaneously disables the gas" functionality since 2001. It's not like this is something new and revolutionary.

(Though that of course doesn't answer the question of whether you think Toyota's implementation is bug free. But I'd wager that if they bricked the ECU, you'd get a new one...)</comment>


Both Windows 10 and Chrome OS are embracing the Linux kernel - <AUTHOR> https://www.pcworld.com/article/3394680/how-windows-and-chrome-quietly-made-2019-the-year-of-linux-on-the-desktop.html <comment><USER2> Maybe technologically, but not so much in spirit. The idea of "the year of the linux desktop", as I understand it, is that people en-mass get the benefits of free software and the free software desktop is a viable replacement for windows/macos.

In this case, though, people are still using their same proprietary software... they just have slightly easier access to the free software world. That's certainly a benefit for a lot of people, but it's possibly a detriment to desktop linux for this reason: Other than freedom/privacy reasons, why would I switch from windows if I can already run most of the linux stack in it and not give up Adobe programs, games, etc.? This removes most of the pragmatic reasons for switching, so I'm mostly left with idealistic ones.

<comment><USER3> I think the impractical goal of free software at any cost has hurt Linux. It's radical and it's a type of gatekeeping around here. There is always a post about Linux tech / adoption that deserves praise and some Stallman acolyte will chime in to remind us it's not a real accomplishment.

This is turning into a rant but has anyone checked out the approved distros on FSF? Many popular distros do not make the cut not because they include nonfree software but make it a little too easy to acquire nonfree software.

<comment><USER4> I am sure you will consider me a "Stallman acolyte" even though i am not

Having said that, I think the compromises the "Open Source" community has given to commercial companies like Microsoft, Apple, Google, and Oracle have done much much much more harm to the community and goals than " Stallman acolytes" ever have.

Nor do i believe the goals of Free Software were impractical and as we move into a more connected world where privacy, censorship, and security are more important than ever due to automation, IoT and the normalization of technology the fact that more or less 4 corporations control the underlying fabric of that technology to the point were even the "open standards" are bought and paid for by them should be terrifying to everyone.

Of course I am just fear mongering Stallman acolyte right....

<comment><USER5> >"Open Source" community has given to commercial companies like Microsoft, Apple, Google, and Oracle

What are some examples of these 'compromises'. From what I have seen, all these companies publish source code and abide by copyright law for any open- source code they use in their products.

Or are you simply against the principle of for-profit companies making money from open-source?

<comment><USER4> Open Source vs Free Software is very simple

The Open Source community only cares about the Source Code, they are generally developer centrist, and generally work with "open sourcing" tools, libraries, languages and components used to build applications.

Looks on github's open source projects, what is the ratio of Full Applications, compared to libraries, tools, and components? Probably over 100 libraries, tools, and components for every 1 application

Open Source community has become a purely developer community that does not give 2 shits about the freedom of users or consumers. Most of the devs in open source today are building SaaS, PaaS and IaaS services that are closed source or non-source distributed "open source" services meaning that is perfectly legal to incorporate open source in to a SaaS product and not release the source code.

Free Software however believe all users of the software have a equal right to the source code as the developers. The recent Nest development of them closing their API is a clear example of the difference, if it was a Free Software based API I would have the ability to run my own Nest API server, but while Nest uses many open source libraries the service itself is Closed Source.

That is main compromise and divergence that happened between Free Software and Open Source.

As to making money off Free Software, I have no problems with that, it is not part of this issue. Open Source advocates like to bring that up as a red herring to divert the conversation from the primary debate. Often claiming that if they can not close their final product "they can not make any money" as an excuse why they do not support Free (Libre) software

<comment><USER5> >The recent Nest development of them closing their API is a clear example of the difference, if it was a Free Software based API I would have the ability to run my own Nest API server.

What changes in GPL / FSF licensing would enforce the changes that you want to achieve?

<comment><USER6> There is no change in licensing that could achieve those changes. Companies will just use other software/rewrite the libraries, and blacklist the license.

[https://opensource.google.com/docs/using/agpl- policy/](https://opensource.google.com/docs/using/agpl-policy/)

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> I don't think this is a good thing at all.

The more Microsoft embraces Linux and makes it work seamlessly in Windows, the more developers are wont to use Windows, rather than Linux as their primary OS.

If not all, this will at-least chip away a good portion of existing developers and most importantly, upcoming developers.

This might lead to Linux being relegated to the background, permanently killing the Linux on Desktop dream.

<comment><USER8> This is indeed likely if windows GUI is significantly more stable, reliable and polished than the Linux GUI, and related GUI apps.

What I'm saying is - for Linux desktop to pose any real threat to windows, it needs to ship a GUI/Desktop comparable in quality, stability, app and driver ecosystem that rivals windows. That ship sailed 20 years ago, when philosophical infighting trumped user empathy.

</comment></comment><comment><USER9> Looks like everyone dislikes the fact that Linux is only popular on an `non- free' Operating System;

But I consider that also as a success to Linux... as that means that people who feel like home at Windows can also develop Linux Software, and that's the big deal.

It's something like Emacs for Windows and Emacs for macOS, allowing gcc running on other (non-free) platforms, because they show other people how free software `tastes'.

Additionally, this makes Microsoft directly benefit from the Linux kernel and the software ecosystem; which will motivate Microsoft to invest resources on Linux.

<comment><USER10> > But I consider that also as a success to Linux... as that means that people > who feel like home at Windows can also develop Linux Software, and that's > the big deal.

The problem is that it does nothing to ensure the viability of Linux as a Desktop alternative. The more people will feel at home "in Windows" even to develop Linux headless applications, the less incentive there will be to run Linux Desktop. It might very well end up being a net negative in terms of alternatives for the end user.

<comment><USER9> What is exactly Linux Desktop? Isn't Linux Desktop = Linux Kernel + Mostly Free Software?

If you run a (free) Linux kernel and (free) Linux software, why can't that be considered as Linux Desktop?

What is the downside of an additionally-running Windows kernel?

Is it the usual everything-should-be-free-and-non-free-is-evil paradigm?

<comment><USER11> They're not just running side-by-side though; the Linux kernel is virtualized, with Windows being the ultimate authority. WSL gives you a little box of software freedom, but outside that box the usual rules apply: you're not allowed to look and you're certainly not allowed to change how it works. And Windows can collect whatever telemetry it wants on the running Linux instance, if MS chooses to do so.

</comment></comment></comment></comment><comment><USER12> I predict that MS will be the ones to finally bring about a Linux desktop with mass market adoption. They'll do it by making it look like Windows, act like Windows, work with Windows files, and run Windows apps through emulation or virtualization.

It's pretty brilliant, really, because it solves both problems: the user doesn't have to change anything and the IT department gets the open source foundation they want.

<comment><USER13> Shipping a Linux compatibility layer in the form of an integrated Linux virtual machine does not in any way equate bringing about a Linux desktop to the masses.

It's shipping a Windows desktop that has a convenient way to do *NIX-style things, largely for developers who are leaving MS for Apple.

It also takes away from the Linux community and future support for desktop hardware on Linux. This is hurting Linux, not helping.

<comment><USER12> It's the first step. No one has successfully deployed a Linux desktop to the mass market and I've outlined how MS could. And I think they will. It's actually a Very Good Thing for Linux because it cements its position as the underlying operating system -- something which is now required by enterprise IT.

As I said, this will result in _more_ desktops running Linux, not fewer. I've never been a big MS fan but I have to say this is quite smart and will very likely be hugely successful.

<comment><USER13> This is going to kill Linux's long-term ability to run directly on consumer hardware if it becomes the primary way people access a Linux userspace.

Without users running Linux on current consumer hardware, its support to do so will atrophy.

What MS is doing is the inverse of what's best for the users. We should be running the Libre kernel+drivers directly on the metal, if you need Windows run that in a VM.

</comment></comment></comment></comment><comment><USER14> Having a containerized Linux inside a non-free box provided by shareholder driven corporations is far away from the ideals and benefits I associate with GNU/Linux and FOSS. I know, this view may be too idealistic but I still feel it is not the right direction.

<comment><USER15> Now people who would otherwise be stuck writing windows-only systems have the option to use, develop against and deploy Linux based applications. I'd call that a win. More linux apps developed and migrated away from Windows-only, means Linux is a more viable option moving forward. Not all legacy software will be replaced/displaced or outright changed overnight.

The all or nothing approach does everyone a disservice. Also, Linux WMs are not nearly as good as Windows or Mac although some are close.

</comment></comment><comment><USER16> I'm a big fan of WSL and ChromeOS but how come nobody talks about the runaway success of OSS Unix on the desktop? That is by far the most successful at this point.

<comment><USER17> runaway success of oss Linux on the desktop? I'm a full time user but I can't tell you how much I hate he constant hardware issues. it's 2019 and I cannot hibernate or sleep my laptop reliably. the backlight doesn't work without fiddling with kernel Params.

<comment><USER4> I manage a crap ton of windows systems... First thing i do is disable Hibernate on all of them. It does not work very well on windows either. So that is not a linux thing. Hibernate should simply not be a power state.

Nor should sleep in IMO but I do keep that on in windows.. On and Off should be the 2 power states. People just putting their windows computers to sleep for months on end causes all kinds of weird shit to happen in windows

>but I can't tell you how much I hate he constant hardware issues

And you believe windows works perfectly on all hardware? I select my personal computers based on Linux hardware support and I have zero issues. Windows has all kind of wierd driver issues, random shit that happens with some hardware.

Every issue you can come up with that linux has a problem around, i can find the same problem in windows. Welcome to General Computing

<comment><USER15> I will suggest that Windows has far fewer problems... and while my next desktop (months away) will likely be Linux, it is definitely not nearly as friendly as either Windows or Mac for _most_ users.

Of course, if you don't manage your own computer and mostly run out of a browser, it doesn't matter nearly as much. It's significantly better today than a decade, or even 2 years ago. About every 2-3 years, I've run Linux as my main OS for anywhere from a month to I think 4 months being the longest. It's not stuck because invariably I hit a sticking point that just gets me to say "fuck it." Running a hackintosh for all its' faults is generally easier than running Linux as a desktop OS, which is a really sad statement.

It's not that Windows doesn't have problems, it's that it has them a lot less frequently. I say this as someone who prefers to develop against Linux (mostly web ui and server backend, etc). I absolutely hate the frustrating windows- isms in Git bash. I find the WSL 1.x isn't sufficient, and the lack of properly performing volume mounts in Docker for Windows very frustrating to say the least.

I, frankly, welcome a more transparent/fast/effective/complete option for linux software development in windows. What has come so far has allowed me to push it as an option moving forward that wouldn't otherwise be there.

</comment></comment></comment></comment><comment><USER10> > Get this: Chromebooks also support Android apps, as Google's mobile > operating system is also built on Linux. Which means that developers could > run software from three different operating systems at the same time on a > Chromebook.

No, two only. ChromeOS runs on the Linux kernel and the rest was merely a thin web client. ChromeOS apps are simply offline web applications.

<comment><USER18> Crostini is The Linux subsystem/container for chrome OS. They have put a very large amount of effort to making this work well (mainly around security so Linux apps can't break the security guarantees that chrome OS provides). They are working exposing USB to it, could aid in Android development.

[https://chromium.googlesource.com/chromiumos/docs/+/master/c...](https://chromium.googlesource.com/chromiumos/docs/+/master/containers_and_vms.md)

[https://betanews.com/2019/04/13/usb-support-linux-apps- chrom...](https://betanews.com/2019/04/13/usb-support-linux-apps-chrome-os/)

<comment><USER15> I'd love to see ChromiumOS expanded into a much larger general Linux platform... it has the best chance of a real Linux Desktop environment for the masses. I don't know that it will ever really happen though.

Canonical could certainly move in that direction for their chosen window manager and ui shell.

</comment></comment></comment><comment><USER19> It might unify development more. Now all developers (Linux, Windows, Chrome, Mac) have access to the same command line tools.

</comment><comment><USER20> The remaining things I wait for on windows: built in gpu pass through from windows to linux and enabling wsl on enterprise licenses by default.

</comment><comment><USER21> I'm curious what the timeframe is for Fuschia to displace Linux in Android, and then maybe ChromeOS.

<comment><USER22> Lel zircon will never replace Linux, Google is acting retarded here, they have not the ressources to make zircon competitive with Linux.

</comment></comment><comment><USER23> Will Microsoft "Linux kernel" devs influence Linux roadmap?

<comment><USER24> Linux never really had a traditional roadmap, it just is the sum of all contributions, mediated by what subsystem maintainers and Linus will accept for merging. So sure, Microsoft devs will influence Linux development just like the other big contributors. Google, Oracle, RedHat, Intel, et.c.

</comment></comment><comment><USER25> Just tried getting docker with wsl + Ubuntu to work on windows 10 yesterday, and it was a horrible, horrible experience.

Couldn't get it to work in the end.

Made me realise how peaceful macOS with brew really is.

Even getting zsh to work with hyper properly was super painful. If you ask me Linux on windows is not usable yet.

Checkback in an year?

<comment><USER15> WSL2 should be available soon and will be a better experience... I've just been running Docker for Windows and using the bash that comes with Git for Windows. It is _not_ great, but the best option(s) I've used so far.

edit: current Docker for Windows does not use _REAL_ volume mounts, don't use it for any live databases in containers, it's good enough for a backup target volume, but live data is too fidgety.</comment></comment>


Guilds, Ethics, and Software Engineering as one of The Professions - <AUTHOR> https://medium.com/@fergiemcdowall/why-isnt-software-engineering-a-profession-68d1900112fc <comment><USER2> We're discussing this a lot on HN these days, and I feel like a bit of a broken record... so I'll summarize quickly: who decides who gets to be a software engineer and who doesn't? I personally consider software to be far from the domain of engineering. It's a different field, as different as actuarial work. Would a math major be allowed to sit for the exam? A CS rather than SE major? Someone who self-studied very thoroughly?

I also really hate the idea that software "engineering" would become one of those fields, like law, that largely coerces people into a three year $150k+ degree paths.

Licensing doesn't bother me in theory - the most important thing, I'd say, is that it remain largely indifferent to how people acquire the knowledge necessary to take whatever entrance exams exist (like the actuarial field). They can be very rigorous (they certain are for actuaries), but they must allow multiple paths that can't be locked down and and converted into brutally expensive degrees by a cartel of gatekeepers.

I am not confident this could be avoided, and it would be much worse than nothing.

I also think that michaelochurch wrote a very insightful essay on "clerks" and why lawyers were historically motivated to "secede" into a profession, with an analogy to present day software developers. I'm fully aware of everything around all this, but I do highly recommend finding a cached copy and reading it, very interesting essay.

<comment><USER3> I think as software creeps into every part of our lives the industry will be heavily regulated. And as that becomes the norm, every developer will be regulated in accordance with the industry standards. This way every software developer can be held responsible for the awfully stupid shit they do these days. Look at the IOT industry right now. Look at the security breaches because of rookie programming mistakes. They keep happening because nobody is liable and responsible. If you get "Sorry our shit is hacked and your SSN and credit card numbers are floating all over black market now" email in your inbox that's pretty much as good as it gets. Sometimes you're not even that lucky. In the end you get screwed and the company that you trusted with your data... Well who knows what they're gonna do. They surely don't feel obligated to disclose anything with you. This is the sad state of our industry.

I don't know if licensing and certification will fix any of this, but I feel like sooner or later some kind of regulation will be enforced.

</comment></comment><comment><USER4> Been beating this drum for years. With a revokable license, with objective quality standards, with specialties, and some sort of objective certifications for software knowledge.

</comment><comment><USER5> Software Engineering is a degree, not a profession.

<comment><USER4> Sotware engineers arent professionals?

<comment><USER6> The article makes the case that it is not a profession.

<comment><USER4> Oh I see. That's rediculous. Not only are we professionals it's one of the hardest professions.

The amount of knowledge it takes to grok a full stack software system is equivalent to the amount of knowledge a doctor has to know easily.

<comment><AUTHOR> Oh for goodness sake- read the article!</comment></comment></comment></comment></comment>


Ask HN: Current state of cellular automata research? - <AUTHOR> Is the field currently active or has it become less popular/active? <comment><USER2> Great question, I've been wondering about this too with all the attention for AI lately.</comment>


Heroku was down - <AUTHOR> http://status.heroku.com/

<comment><USER2> Outage only 14 minutes? Kudos to the Heroku team.

<comment><USER3> Assuming they have only 38 other minutes of outage for the rest of the year, looks like they can keep 4 nines.

Five nines is really hard--that's five minutes of downtime a year.

</comment></comment><comment><USER4> its seemingly back up (at the moment at least)</comment>


Gmail's confidential mode is not confidential - <AUTHOR> https://tutanota.com/blog/posts/gmail-privacy-problem/ <comment><USER2> This blog post could be shortened to:

> Gmail's confidential emails are just standard emails with some extra > features like unprintable, unforwardable, uncopyable, and so on. However, > this will not stop anyone from taking a screenshot from the unprintable > email, just to print off the screenshot.

In fact, this is literally the second paragraph in their help article on the topic[0].

The rest of the blog post is FUD and an advertisement for their E2E email product (which also doesn't protect against someone taking a screenshot or taking pictures with their phone).

Yes, Gmail does have access to the email before and after it's encrypted, and "Google has access to its users emails" is obvious; you'll have to choose who to trust, and gmail users trust Gmail to not personally go snooping through their emails. Google says very few employees have production access to data[1].

0: [https://support.google.com/mail/answer/7674059](https://support.google.com/mail/answer/7674059)

1: [https://gsuite.google.com/learn-more/security/security- white...](https://gsuite.google.com/learn-more/security/security- whitepaper/page-7.html)

<comment><USER3> Shame on you for trying to deliberately mislead the readers here.

You are just trying very hard to trivialize and cast aspersions on the very legitimate concerns raised in the article by very selectively quoting from the article.

In fact, the actual point of the article is the very real and obvious issues of privacy concerns raised and described in the beginning of the article itself:

> Though pretending to offer privacy, Gmail's confidential mode comes with > three major problems:

> 1\. The emails are not end-to-end encrypted.

> 2\. Google retains full access to the email even when you set a self- > destruct timer.

> 3\. If you password-protect an email, Google can link your recipient's phone > number with their email address.

Privacy aware and concerned netizens like me avoid GYM (Google, Yahoo and Microsoft) email services precisely because we do NOT want to be profiled by these corporate so that our personal data is not used by them against us.

In fact, I have made it a policy to always send password protected emails (from services like Tutanota, Protonmail, Mailfence etc.) to users of GYM email services. I do this to ensure that these services have no access to my emails and hence cannot collect data on me through it.

When some users of these services complain to me I explain to them while I have no issues with them using the service or willingly sharing their personal data with them, I refuse to consent to be profiled when I actively AVOID these companies.

I highlight this in particular so that more can be aware that "shadow profiling" of users by GYM and Facebook, all for-profit mega multi-national monopolist corporates is a genuine privacy concern and should not be lightly dismissed, and we need to raise more awareness and demand better laws to be protected against it. Till then, unfortunately, we will have to depend on valuable services like these.

\-----

More on the extent Google (and others) will go to "shadow profile" someone: [https://www.forbes.com/sites/joetoscano1/2019/09/03/google-h...](https://www.forbes.com/sites/joetoscano1/2019/09/03/google- has-my-dead-grandpas-data-and-he-never-used-the-internet/#45652be32b0c)

\-----

The actual context that the quote you highlighted was said to point out something different:

> Information classified as confidential relates by definition to something > very personal or top secret. It must be kept from any and every third party > by all means.

> This form of secrecy can only be achieved with end-to-end encryption. > Encryption guarantees that only the people holding the key to decrypt the > information can gain access to it.

> This is why end-to-end encryption is an absolute necessity when > communicating confidentially.

> When sending an email with Tutanota, you have the option to send a > 'confidential' email - which refers to an end-to-end encrypted email, or a > 'not confidential' email - which refers to a standard email.

> With this definition in mind, Gmail's confidential emails are just standard > emails with some extra features like unprintable, unforwardable, uncopyable, > and so on. However, this will not stop anyone from taking a screenshot from > the unprintable email, just to print off the screenshot.

<comment><USER2> > The actual context that the quote you highlighted was said to point out > something different:

And I addressed the point the blog post made.

Privacy is a different concern compared to confidentiality. The HN title is "Gmail's confidential mode is not confidential", while the blog post only lightly focuses on actual confidentiality (something other email encryption services don't fix either since there are screenshots) and is largely about privacy. Sorry for mistaking what the blog post was going to primarily address based on the HN title.

But, there is a problem with the actual article in terms of what it's saying:

> Gmail as one of the major email services worldwide has realized that privacy > concerns are rising constantly - and this is happening at a global scale. To > meet this new demand for private and secure emails, Gmail has introduced a > new feature: Confidential mode.

Um... no, it was neither created for the purpose of privacy nor security. Nowhere on the support article does it mention the words "private" or "secure", save the actual Privacy Policy footer. Privacy (in terms of Google knowing x and y about me or what's in this email) is not the same as confidentiality (preventing someone from quickly and easily forwarding the email to their friend).

Your privacy concerns are valid in every sense, but attacking confidential mode is effectively clickbait intended to get readers to buy into the encrypted email product and drop Gmail.

</comment></comment></comment><comment><USER4> Is confidential mode actually trying to sell itself as an encrypted email service? Google's articles about confidential mode doesn't mention encryption [1], so I'm not sure why tutanota is focusing so much on the lack of encryption. It seems to me that confidential mode is more about providing proof of receipt via SMS, and making it slightly harder for employees to forward emails to people not meant to receive it.

If wanted to send an encrypted email, I'd do my encryption and decryption client side in my own terminal. Don't ever let the service's email client get access to the plaintext.

1\. [https://support.google.com/a/answer/7684332?hl=en](https://support.google.com/a/answer/7684332?hl=en)

<comment><USER5> Google advertises this stuff as "confidential". You don't get "confidential" without encryption.

This is like a company advertising "our product will make your car use less fuel", and all they give you is a sticker that says "less fuel!" to attach to your car. But that's OK because they didn't say "our product uses 'technology'"?

</comment></comment><comment><USER6> I like the idea of someone tearing down Gmail's confidential email feature, but this article isn't terribly thoughtful. It mostly just repeats the same 2 or 3 points over and over (confidential mode isn't, end-to-end encryption is important, our product does end-to-end encryption). It feels like it was rushed out to get ahead of others who might write the same thing, rather than trying to educate people about what these terms mean to them and why they should be important.

<comment><USER7> It's not even rushing out to get ahead of others. Protonmail wrote basically the same blog post, point for point, three months ago[0].

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

</comment></comment><comment><USER8> Since Google has named it 'confidential mode' and not 'secured mode', it is evident (to me at least, the word `confidential` means `me, you and anyone else you tell`) that there is no encryption. I won't use Gmail anyway if I am paranoid about security. I like this feature, hopefully this mode will also give options to decide longevity of incoming emails.

</comment><comment><USER9> I a major problem for most people (even in tech circles) is the lack of ownership over their email address. E-mail address portability is a real problem.

Edit: Is there a reason for the down votes? Lack of portability/ownership allows Google to change policies with less repercussions. It is because my account is new?

</comment><comment><USER10> There is no such thing as confidentiality, as long as you let someone transfer your data, be it Google, your local network provider, or a mobile operator. The only solution is end-to-end encryption, which obviously Gmail won't allow, since they need our data for their AdWords to target ads better.

</comment><comment><USER11> IMO this is more about audits and lawsuits than about security. Many companies have policies about email retention and this skirts those enabling electronic communications that automatically shred themselves.

</comment><comment><USER12> Exchange/Outlook has had this feature for years.

</comment><comment><USER13> "However, this feature is neither confidential nor private as Google still has unlimited access to its users' emails, even when they use confidential mode."

Yes, that's how databases work.

If we use this same logic, is Apple not being private with your data?

<comment><USER14> Apple uses end-to-end encryption for iMessage, which is the only Apple-related confidential communication I can think of (well I have no idea what the guarantees around FaceTime are).

<comment><USER15> Uhm, Apple also holds emails, calendars, contacts and notes on their servers via iCloud.

<comment><USER14> Beyond explicitly using secure notes (which are encrypted), I don't recall Apple promising "confidentiality" of those things. I mean, I don't expect Apple to give that data to others, but I also don't assume Apple has no way of accessing that given a court order.

</comment></comment></comment></comment><comment><USER16> There's a gap in the way we talk about security in the industry it seems.

On one hand, we have the tools to build cryptographically secure information systems, and on the other hand there's features that simply make most users more secure.

For example, as mentioned in the article, Gmail will allow you to send an email where the recipient can't forward it. Practically this may help protect against careless adversaries, but a motivated user can obviously copy and paste somehow.

Cryptography tends to rely on computationally hard problems, meanwhile this kind of security seems to rely on problems that are seen as cumbersome or impractical from a UX perspective.

The problem I have is masquerading "UX security" (for lack of a better term) as cryptographic security.</comment>


MIT researchers warn that deep learning is approaching computational limits - <AUTHOR> https://venturebeat.com/2020/07/15/mit-researchers-warn-that-deep-learning-is-approaching-computational-limits/ <comment><USER2> I'm desperately waiting for breakthroughs in hardware these days. Imagine the equivalent of AlexNet for NLP for example where something like GPT-3 can run on a laptop. Not only do I hope for Moore's law to somehow continue but also for battery tech to have its breakthrough. We've had lithium-ion for so long now with no further improvements.

Although I'm sure people will figure out how to slow down and drain the batteries of such devices with Electron 2: Electron Boogaloo, software breakthroughs tend to follow hardware breakthroughs and I hope to see some big ones in my lifetime.

<comment><USER3> Lithium batteries have constantly been improving. It's just the changes aren't marketed by manufacturers like the next iPhone. It takes time to develop and change mass production scale chemical goods.</comment></comment>


WaterfallProcess - <AUTHOR> https://martinfowler.com/bliki/WaterfallProcess.html <comment><AUTHOR> Most waterfall i have worked on did not wait to test and integration at the end of the product but at the completion of one milestone typically before it's handed off to another team working on separate module/product.

But then finding pure agile or waterfall in the wild maybe an elusive search</comment>


New Year, New CEO for GitHub - <AUTHOR> https://github.com/blog/1761-new-year-new-ceo-for-github <comment><USER2> GitHub's growth in 2013 has been fascinating to watch. They've been relentless with new functionality, and the overwhelming trend with that new functionality is a marked increase in the scope of their operations: stuff like generic data support, baked-in visualizations, and quality-of-life improvements points to the conclusion that GitHub is going to stop being the "best place to share code with friends, co-workers, classmates, and complete strangers" [1] and start being the best place to share your work and data with everyone.

2014 should be a great year for them.

[1] [https://github.com/about](https://github.com/about)

<comment><USER3> Relentless with new functionality? Yes, no, maybe, I don't know.

I'd love to see things fixed up in their issue tracker, and you still can't apply a label to a pull request while looking at the pull request.

I love GitHub for many reasons, but I question whether the push towards 'managerless-culture' means some less interesting things don't get done sometimes.

I do note the ability to see web traffic prior to someone's implementation of a hack to do it on HackerNews, but on the other hand, I still miss the impact graph. How about being able to see number of clones and updates instead of just web traffic?

The ways to spotlight interesting new projects is great, but I think the social and discovery aspects could be upgraded too.

But #1, the bug tracker needs help. Code review tools seem nice, but are seemingly enterprise only. While I welcome and encourage that kind of business model, large open source projects could benefit the most from that kind of functionality.

So, yeah, GitHub is becoming the standard for code sharing. It's great... but there's a lot of opportunity not being capitalized on too relative to their organizational size.

From the outside, it looks like they are probably dealing more with internal plumbing than new functionality to me. Which is also understandable. It's just a shame that some features that are quite useful (say, impact graph) get cut or uninteresting to work on (issue tracking) don't get worked on.

<comment><USER4> The code review pales in comparison to Crucible. Vertical diffs only, can't ignore whitespace without losing the ability to comment, and there's no fast navigation through files.

<comment><USER5> > and there's no fast navigation through files.

Have you hit the "t" key on the site?

</comment></comment></comment></comment><comment><USER6> Github PLEASE work on some kind of 'Proof Of Activity'

98% of my work is private and all employers get to see is about 100 open- source commits when I have roughly 4,000 commits throughout several private organizations. I know I need more open source contributions but I should be able to prove to an employer that I am a heavy Github user and have more experience than 100 commits.

Sometimes I've been asked to send a screenshot of my total number of commits, and happily oblige to the odd request but a screenshot is not even worth it's weight in the physical world (aka nothing).

<comment><USER7> Using total number of github commits as any sort of qualifier for employment is as bad (maybe even worse) as asking for a wc -l LOC count on your last project.

To be clear, I don't have an issue with github contributions being seen as a plus for hiring... but trying to turn this into something concretely quantifiable via total commit count (especially on commits you can't even see) seems crazy to me.

Please let me know which employers are asking you for this information so I can avoid applying to them in the future!

<comment><USER6> They are not(I hope) judging quality of my work based on # of commits.

-They are assuming I have little to no experience in a service they use every day.

-They are assuming I don't contribute to Open Source in any way (I contribute to private repos that are at the core of several large OS projects but are private for business concerns).

-Github provides an easy metric to see what most of my work is. I can see that 45% of my work is done in Python, and maybe the rest in front-end tech. That would be useful information to an employer if I apply to an Obj-C position.

Actually the work I am most proud of is in my side-projects, which I would much rather employers go on and interact with rather than scour over the github repo. Posted above is not just something I want, but something I see much more value in for Github to become a more friendly intermediary between employer/employee.

<comment><USER8> > They are assuming I don't contribute to Open Source in any way (I contribute > to private repos that are at the core of several large OS projects but are > private for business concerns).

How are those open source? Or are they open source but not open to third party contributions? Or does development not take place on github? Just curious since if the code isn't public I'm curious how it's considered open source.

<comment><USER6> I explained it poorly.

When we can't afford to keep building a feature, we release it as open source and reintegrate it eventually.

</comment></comment></comment></comment></comment><comment><USER9> None of the reports I've seen mention this, but Chris was the CEO before Tom (and became CTO to focus on product) so is already very experienced in the role :-) [http://www.quora.com/GitHub/Why-is-Chris-Wanstrath-no- longer...](http://www.quora.com/GitHub/Why-is-Chris-Wanstrath-no-longer-the- CEO-of-GitHub)

<comment><USER10> I see Zach just responded to his own answer pointing out that the reverse of 2012 is true again.

</comment></comment><comment><USER11> For those of us who are business ignorant, what is the difference between President and CEO? What are the typical responsibilities of each and such?

<comment><USER12> It's different for every business but typically a CEO is the visionary, strategic leader of the company while the president leads the day-to-day operations.

If Github started selling insurance, there's a good chance they would have a president for Github Code and a president for Github Insurance. They wouldn't have two CEO's, though.

<comment><USER13> > while the president leads the day-to-day operations.

How would you characterize the COO then?

<comment><USER14> COOs _manage_ the day-to-day operations.

<comment><USER15> What's the difference between "leading" day to day operations and "managing" them?

<comment><USER16> I know SC2 is probably a poor example but it fits very well here. It's the difference between managing a team strategy in an RTS versus looking at the individual unit deaths/spawns, types of units, etc.

</comment></comment></comment></comment></comment></comment><comment><USER17> As soon as Tom becomes President he gets a Secret Service detail with dark sunglasses! That animated gif is hilarious.

<comment><USER18> It would've been a bit funnier if suddenly his half of the gif was transported to the Github Oval Office replica[1].

1\. [http://thenextweb.com/shareables/2013/09/07/githubs-new- offi...](http://thenextweb.com/shareables/2013/09/07/githubs-new-office- includes-a-replica-of-the-oval-office/#!sOEwr)

<comment><USER19> Is there one person that gets to work in there, or do they rotate it?

<comment><USER20> Typically that's where Haley sits, who is typically the person you'll first meet when you're visiting or if you're dealing with some logistics with the SF office.

(As an aside, the idea behind the Oval Office as a visitor's reception is to turn the notion on its head a little bit. We've all been to companies where the reception area is just an afterthought, and you're stuck awkwardly standing in the middle of an open floor, not knowing what to do next. Our Oval is a tongue-in-cheek jab at that, and an attempt to make things a little more, well, _interesting_ while you're waiting for a GitHubber to meet you.)

<comment><USER21> To add to what Holman said, at most companies the receptionist is considered unimportant, and is treated as such.

GitHub turns that on its head. Haley sits at the president's desk and is entrusted with people's first experience with GitHub's HQ. She's an important part of our culture. It's an big responsibility and a position deserving respect (as all positions are).

</comment></comment></comment></comment></comment><comment><USER22> I love how this is tagged as "New Features". Oh GitHub :)

<comment><USER23> What did you want it to be? A bug?

</comment></comment><comment><USER24> I'm looking forward to GitHub branching out beyond software. Revision control for business, academia, etc.

<comment><USER25> I read this imagining a git reset on actual people. Thanks for the laugh :)

</comment></comment><comment><USER26> We can easily expect GitHub to continue its exponential growth. The timing seems perfect to me...Chris will take on a role that will require him to ensure that the product remains excellent and will implement the innovation that Tom will be responsible for. Both suit their styles.

</comment><comment><USER27> I love Github, but they need to build out more serious features into their issue tracker for it to be useful as a software estimation tool. Specifically I need:

* Time estimation.

* GRANTT charts.

<comment><USER28> GRANNT Chart: A Grantt chart is a type of bar chart that illustrates a project schedule. Grantt charts illustrate the start and finish dates of the terminal elements and summary elements of a project, such that completion of the project qualifies the team for a research and development grant.

Serious answer: Issues are not--to my knowledge--a software estimation tool. I have worked for decades in estimation-oriented development environments, and in my (anecdotal) experience, it is a mistake to use the same tool for both estimation and delivery.

It is seductive for them to be the same thing, as you can feed actual times back into your project, but the conclusion I've drawn is that the estimate reflects a kind of "interface" visible to the outside world, while the issues reflect an "implementation" visible to the team.

When they are the same thing, you end up doing a lot of work fiddling with the estimate to keep it congruent with the internal tasks, even when that congruence is not relevant to the delivery date(s).

I realize that this is heterodoxy.

<comment><USER29> Isn't this type of chart a GANTT chart without the "R" character?

<comment><USER30> (He was making a joke. GRANTT -> R&D Grant)

#jokesAreLikeFrogs

<comment><USER28> And when you poke it with a stick, it falls apart. GANTT isn't an acronym, the chart was invented by Henry Gantt:

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

</comment></comment></comment></comment></comment><comment><USER31> I don't understand how a company could operate for a few months without publicly acknowledging who is really the CEO.

I hope they use a "fork the CEO role" button.

<comment><USER32> I'm curious: to whom does this matter?

The title is a formality, their organization is notoriously flat and being co- founders they probably don't make major initiatives without the other's approval anyways. If anything they're probably just swapping "who sits in the spotlight for this year".

And when you head a tech-oriented company, the difference between CTO and CEO is probably negligible anyways.

<comment><USER31> I think Tom and Chris are doing a fantastic job running and growing github. I'm just curious how this idea of trading CEO roles without making it public for a while works in practice. I think it could potentially matter to their employees, along the lines Ben Horowitz discussed in his post, "Shared Command" [1] - different situation, but analogous potential muddling of the chain of command.

Obviously some companies with both a CEO and a President can be amazingly successful [2], but tend to still be clear about who is ultimately in charge. It's not that I doubt Tom and Chris share a vision for github and clearly communicate and execute on that vision together; I just wonder when and how that model might hit its limits.

1\. [http://bhorowitz.com/2013/07/03/shared- command/](http://bhorowitz.com/2013/07/03/shared-command/)

2\. [http://www.spacex.com/about/leadership](http://www.spacex.com/about/leadership)

</comment></comment></comment><comment><USER33> Least boring upper-management change announcement I have seen all year. More things should be done with gifs.

</comment><comment><USER34> I thought GitHub was a flat organization?

</comment><comment><USER35> Why are they using GIF for video, instead of a proper video file in the video tag?

<comment><USER36> It's not worth invoking a flash container for 4 seconds of video.

<comment><USER35> Did I say anything about Flash? I was talking about a video tag. And are you saying that a 4 seconds video in the video tag will be less efficient than an img tag with an animated GIF?

Personally I see no point in using GIFs, unless on a site which allows embedding images, but not videos. On a site which you control, video tag works just fine.

<comment><USER37> I think they can spend the following required time on better things:

\- Deal with cross browser inconsistencies with html5 video.

\- Create a poster image for the video

\- Save the video format in mp4, ogg, webm

\- Save out and build flash alternative for older browsers

...

...

\- Realize that a gif probably would have been the best option for this post.

<comment><USER35> I'd simply:

\- ignore older browsers (today practically all browsers support the video tag, caring about older browsers in this context is like caring about IE6, i.e. it's bad).

\- stick with a compromise solution (H.264, yeah that's sad, but until Daala will come this mess will remain, but now Firefox already supports H.264 easily, so it's not a problem anymore). If the space allows it, I wouldn't mind encoding in both WebM and MP4, just for the sake of supporting free formats.

</comment></comment></comment></comment></comment><comment><USER38> free private repos?

</comment><comment><USER39> The gif is LOL.

</comment><comment><USER6> Is the sky falling?</comment>


Feedback on our Launchrock Beta Invite - <AUTHOR>

We've been eyeing Launchrock for a while now and we finally think we're in the right place to take the plunge.
I'd love for feedback on our setup. Is the concept clear/ pique your interest? Does the email give away enough? Also most of all, is it not too spammy?
The site is here:
http://www.flamecourt.com
We're planning on beginning to share it on Monday, so any feedback before then would be very helpful. Thanks! <comment><USER2> Clickable Link: <http://www.flamecourt.com>

I agree that it does seem a bit vague. I get the idea of wanting to pique interest, but I'm also loathe to give you my e-mail address with so little information about what you mean by delivering internet justice.

</comment><comment><USER3> It's definitely interesting - the idea is not solid and clear, but I'm not sure that it has to be in this case. The ambiguity might be what makes people sign up!

<comment><AUTHOR> Thanks for the feedback. Yeah, we want to pique interest, but don't want to give it all away. Plus, shorter is sweeter.</comment></comment>


It's time Linux fans open their arms to closed source - <AUTHOR> http://www.techrepublic.com/article/time-linux-fans-open-their-arms-to-closed-source/ <comment><USER2> How about no? We've been in this place and it's not pretty.</comment>


MyCPU – Homebrew Computer from Discrete Logic Gates - <AUTHOR> http://mycpu.thtec.org/www-mycpu-eu/index1.htm <comment><USER2> Ben Eater has a most excellent Youtube series in the same vein.

[https://eater.net/8bit](https://eater.net/8bit)

He even sells a kit with all parts and schematics included. It's easily one of my favorite projects of all time and has inspired me to continue learning more.

It's not close to MyCPU's level of complexity but is great to get you started.

</comment><comment><USER3> Amazing! A computer made without microprocessor... or a processor made of TTL circuits.

He has remade a system similar to the core of the great 1970's Xerox Alto / Xerox Star series :-)

I never thought someone would remake a processor this way. I love that kind of madness !

[edit: use the site backup if it fails to load: [http://mycpu.thtec.org/www- mycpu-eu/index1.htm](http://mycpu.thtec.org/www-mycpu-eu/index1.htm) ]

<comment><USER4> :) There are many (it's a thing):

[https://hackaday.io/projects?tag=CPU](https://hackaday.io/projects?tag=CPU) (Some are FPGA, most are TTL) Including two risc-v implementations (one seems stalled):

[https://hackaday.io/project/18491-worlds-first-32bit- homebre...](https://hackaday.io/project/18491-worlds-first-32bit-homebrew-cpu) (No activity for a while now) and [https://www.youtube.com/playlist?list=PLEeZWGE3PwbansoxKjjMK...](https://www.youtube.com/playlist?list=PLEeZWGE3PwbansoxKjjMKHQqS_2cm8i60)

One I am particularly interested in is the Gigatron:

[https://hackaday.io/search?term=Gigatron&category=project%20...](https://hackaday.io/search?term=Gigatron&category=project%20project) (Especially now that there's real IO being hacked in)

<comment><USER5> [http://www.homebrewcpu.com/](http://www.homebrewcpu.com/) is wire wrap 16 bit computer that in fact serves the web pages and has telnet access.

<comment><USER6> Bill Buzbee is a goddamn legend

</comment></comment></comment></comment><comment><USER7> This is definitely on my "list of things I've always wanted to do but I realized man is mortal and I have to prioritize". I'm a personal computing enthusiast and it doesn't get much more personal than designing and building your own architecture.

<comment><USER8> not to mention the $50~200k on specialized test equipment you will have to buy to even start on this path.

Nobody mentions this.

In every wire rat nest CPU picture, there is always several thousand dollars of digilent and HP gear out of the frame.

</comment></comment><comment><USER9> Previous discussion: [https://news.ycombinator.com/item?id=10615314](https://news.ycombinator.com/item?id=10615314)

</comment><comment><USER10> I love these homebrew CPU projects. I saw one one in person and was amazed (and impressed by the insane dedication as well as the madness of wire- wrapping 1970s-era TTL components into a CPU) - then a year later I saw two of them!! Then I saw a third.

I believe the first two I saw were MAGIC-1 and BMOW (Big Mess o'Wires). I also really liked the MOnSter 6502, a beautiful board-level reimplementation of the 6502 in surface-mount discrete components, with LEDs on the data lines and optional slow/single-step clocking.

Also relevant: the nand2tetris.org course, and Niklaus Wirth's TRM/RISC-3 (not to be confused with Berkeley RISC-I or modern RISC-V) FPGA implementation. Notably TRM/RISC-3 is incredibly simple but can run the whole Oberon system.

In the modern era, I think FPGAs are the killer platform for computer architecture experimentation. There are multiple free MIPS implementations for FPGA and of course there is great OS/compiler support for MIPS.

</comment><comment><USER11> Before I saw the German, I already had a feeling it was --- I'm not sure why, but I've seen Germans use that style of page a lot (another example: [https://www-user.tu-chemnitz.de/~heha/basteln/PC/USB2LPT/ul-...](https://www- user.tu-chemnitz.de/~heha/basteln/PC/USB2LPT/ul-16.en.htm) ). That and the encouragement to build one yourself stood out.

This one looks very similar to a 6502, and seems to be much smaller than another semi-famous discrete homebrew computer, [http://www.homebrewcpu.com/](http://www.homebrewcpu.com/) \--- that one only runs at half the clock speed, but the performance seems comparable.

</comment><comment><USER12> I wonder if dennis-mycpu is still around to answer questions? This is an awesome build, and demonstrating it by serving the site is a fantastic idea.

</comment><comment><USER13> Another similar project in addition to the ones mentioned here is the BMOW: [https://www.bigmessowires.com/bmow1/](https://www.bigmessowires.com/bmow1/)

</comment><comment><USER14> A nice project, there are more homebrew CPUs - physical or FPGA cores. But they are often complex. I was finally able to understand the basics of CPU workings from an awesome book [http://www.buthowdoitknow.com/](http://www.buthowdoitknow.com/) and related video [https://youtu.be/cNN_tTXABUA](https://youtu.be/cNN_tTXABUA)

</comment><comment><USER15> See also: [http://homebrewcpu.org](http://homebrewcpu.org)

</comment><comment><USER16> See also: homebrewcpu [https://www.homebrewcpu.com/](https://www.homebrewcpu.com/) and megaprocessor [http://www.megaprocessor.com/](http://www.megaprocessor.com/)

</comment><comment><USER17> All those fancy-pants semiconductors...

Here's a _real_ computer. [http://web.cecs.pdx.edu/~harry/Relay/](http://web.cecs.pdx.edu/~harry/Relay/)

<comment><USER18> You can now buy one:

[http://relaysbc.sourceforge.net/](http://relaysbc.sourceforge.net/)

(apologies for the self promotion..)

<comment><USER4> I have been looking at your board on Tindie! Alas, I don't think it should be my first major soldering job (if you don't count the board I stuffed 25 odd years ago that my friend had to fix for me)

</comment></comment></comment><comment><USER19> I'm curious does anyone know what the last substantial commercial computer that shipped with CPUs made out of discreet logic chips like this was?

</comment><comment><USER20> Apologies if this is a silly question but how does this differ from other homemade cpus that appear every so often?

<comment><USER21> A big one is that the page is served by the CPU it describes.

</comment></comment><comment><USER22> Web ring is best ring.

</comment><comment> King-Aaron > The website is slow because it is served by a MyCPU

I would imagine now that it's on the front page of HN, that poor MyCPU is now on fire

<comment><USER8> no ssl and a bunch of frames, that ultimately failed to load.

<comment><USER23> HN hug of death at the lowest amount of votes on the post.

<comment><USER24> The post made it to the frontpage, no surprise new visitors get greeted with "Server busy" now.

</comment></comment></comment></comment><comment><USER25> Hugged to death. See [1].

[1] [http://web.archive.org/web/20190516084513/http://mycpu.eu/](http://web.archive.org/web/20190516084513/http://mycpu.eu/)

<comment><USER26> Alternatively, the official mirror [http://mycpu.thtec.org/www-mycpu- eu/index1.htm](http://mycpu.thtec.org/www-mycpu-eu/index1.htm)

<comment><USER27> Thanks! Since it's still down we'll update the link from [http://mycpu.eu/](http://mycpu.eu/) to this.

</comment></comment></comment><comment><USER28> I did this for a living in the 1980s--CPUs from TTL. My artistic side wants to build a small running computer from all TTL inside a plexiglas cube with all the chips glued to the walls and the interconnecting multi-colored wires exposed with a small display of something.

</comment><comment><USER29> [http://archive.is/yZ71a](http://archive.is/yZ71a)</comment>


Gamers beat algorithms at finding protein structures - <AUTHOR> http://arstechnica.com/science/news/2010/08/gamers-beat-algorithms-for-finding-protein-structures.ars?utm_source=rss&utm_medium=rss&utm_campaign=rss <comment><USER2> 10 years ago I worked with a few coworkers on a protein search algorithm through the PDB (finding structure motifs with flexible and more stable components). It was a multi-month effort and our tool eventually vanished into the failed venture backed bio company. This type of problem is trivial compared to energy minimization (simulated structure) efforts.

Mapping problems to an interface where thousands or millions of humans and computers can tackle them generates a sense of awe each time I read about it.

<comment><USER3> I was in a similar situation I worked at a startup (which also went under) writing algos to predict protein structures given a minimal set of information (a very hard problem to solve and computationally expensive). Rosetta first showed up on the scene at that time and was a real shot in the arm for the field. One could argue that the game mechanics of Foldit are the most interesting thing we've seen in the structure prediction field in a long time.</comment></comment>


Superoptimizing Compilers - <AUTHOR> http://superoptimization.org/wiki/Superoptimizing_Compilers <comment><USER2> The GMP (GNU Multi Precision library) guys found that the hand written assembly sequences (which were already 2-6x faster than that produced by a decent C compiler) could be sped up another factor of 2x by superoptimisation, at least of out-of-order CPUs.

Superoptimisation isn't only feasibly, it is actually quite practical. A factor of 2x across an already highly optimised library can cut your supercomputing budget in a grant by half. Whether you need 1 or 2 million CPU hours can make or break entire projects

These days, however, one can often do better with SIMD instructions. These often don't superoptimise well because the individual atomic operations they perform aren't able to be rearranged by the programmer. However, lots of existing supercomputers available for research still don't have chipset revisions with decent SIMD support.

<comment><USER3> The SIMD auto-vectorization is an off-shoot of this research.

But what excites me about super-optimization is to make functional optimization repeatable.

Let me give you an example of why I'd use it for more than HPC libs.

Assume you have a firewall system, which needs to determine whether a tuple of (srcip, dstip, dstport) is a safe one or not.

All 3 variables fit inside registers (assume xmm).

A rules engine as written traditionally would be a hashtable of some sort, always regenerated with a gperf hash (already we're in super-optimal territory partially).

But what if going to RAM is 300x more expensive than a SIMD sequence over 3 registers run a few hundred times?

Then writing a functional chunk of code which produces the same outputs for the same inputs, but without any storage system would be a killer feature.

That is sort of the problem where a super-optimizer can take a huge amount of data and turn it into bit-twiddling checks which find hidden invariants in each data-set.

Being able to take a bunch of rules which say subnet to subnet or port access patterns and compile it into a storage -less ACL mechanism (like bit 11 on port is 1, then DENY).

I'm almost certain these problems were solved in the past using a super- optimized FPGA as well (well, I would if I had the budget).

For me, being able to churn a dumb SWITCH loop through these systems is more interesting than chucking well written code into this.

<comment><USER4> I don't think this will be as successful as you might hope. Consider how many possible sets of rules there are. Call that n. The instruction sequence will need to encode log2 n bits of data, but you have no ability to tune the representation to say which inputs are likely.

Instructions aren't free, they still need to be loaded from RAM like data.

</comment></comment></comment><comment><USER5> There is another way to super-optimize (this is not very related to the approach outlined in OP).

See: "Morte: an intermediate language for super-optimizing functional programs" ([https://news.ycombinator.com/item?id=8308282](https://news.ycombinator.com/item?id=8308282))

TLDR: it trades turning completeness (no infinite loops) for the ability to decide "do these two differently coded functions compute the same thing".

Thus "if two programs are equal then they generate identical executables. Such a language would be immune to abstraction: no matter how many layers of indirection you might add the binary size and runtime performance would be unaffected." (quote from linked article)

<comment><USER6> To rephrase/expand your tl'dr slightly: you can express turing complete programs using Morte. But it only does a certain number of well defined things (like inlining) to reduce an expression and compare it, so some programs that are 'the same' due to a more complex isomorphism could generate different executables. This is fine, because program isomorphism in general is basically the halting problem.

<comment><USER7> > program isomorphism in general is basically the halting problem.

How far does this go? On the face of it, for some system to determine whether program X halts period could be different from finding whether program X halts, given that some program Y halts. The fact that program Y halts I guess would count as an additional axiom in the system, and depending on details of program Y could be more or less helpful in determining that X halts?

<comment><USER8> Yep! If you want to learn a lot more about this stuff, search for the buzzword "codata." Basically, we can start to define type systems which "wall off" a section (which may or may not have all the things you want to compute in practice; we don't know!) which follows simple recursive rules from a base case up. This section is called "data", acting upon it programmatically is called "recursion", and proofs about it are called "induction". This part of the computer is _not_ Turing-complete and therefore we _can_ solve the halting problem. Everything else is "codata" acted upon with "corecursion" and reasoned about with "coinduction".

One super-awesome thing about the "data" used in codata systems is that, once you've proven that something halts, there is no formal distinction between lazy and eager evaluation -- it simply becomes a choice that the compiler makes, perhaps guided by pragmas inserted by a smart programmer.

One not-so-awesome thing: consider the normal model of the natural numbers, `data Nat = Zero | Succ Nat` where every number is either 0 or the successor of another natural number. The obvious definition of _recursion_ involves stripping off a `Succ` structure one level deeper. Anything which follows that pattern is proven to halt, so it's a whitelisted computation that can be used in other data-computations.

But now, consider the usual algorithm for GCD:

        gcd' m n | n == 0    = m
                 | m < n     = gcd' n m
                 | otherwise = gcd' n (mod m n)

Is this corecursive or recursive? It's clearly recursive. But does the computer know that? We have to clue it in. We need to tell the computer that actually, given our definition of recursion here -- "it's recursive if we only go from n to n - 1" \-- holds a larger theorem, "it's recursive if we only go from n to some number strictly less than n". Even then, we have to prove that `mod m n < n` and our system needs to be guided to understand that it's _okay_ if `m` increases as long as `n` is strictly decreasing (the arguments could have been flipped, after all).

So this is your "additional axioms in the system." They come when your "recursion" method is not the most obvious way to traverse the data structure; in this case we're using argument-swaps and jumping through the graph of N to traverse two data structures simultaneously and it creates a bunch of headaches.

<comment><USER7> Wow, thanks a lot for the detail! That is quite a bit more practical than I imagined.

</comment></comment></comment></comment></comment><comment><USER9> The site appears to be down. It's in google cache; looks like just a project description with some linked reports. Here's a cache of the final report [1].

1: [http://webcache.googleusercontent.com/search?q=cache%3Ahttp%...](http://webcache.googleusercontent.com/search?q=cache%3Ahttp%3A%2F%2Fsuperoptimization.org%2Fw%2Fimages%2Ff%2Ff1%2FWp4.pdf&ie=utf-8&oe=utf-8)

</comment><comment><USER10> [http://en.wikipedia.org/wiki/Superoptimization](http://en.wikipedia.org/wiki/Superoptimization) and/or the articles it cites should have been cited and consulted. Where mechanical discovery is not appropriate and you know what you want to accomplish (e.g., division by a constant integer at the cost of a multiplication or computing the number of one bits in a word) the "tricks" described in Warren's _Hacker 's Delight_ can be applied. Some, but not all optimizing compilers, look for sequences for which there is some known "trick".

<comment><USER11> Massalin's paper were surprisingly accessible and inspiring [http://en.wikipedia.org/wiki/Alexia_Massalin](http://en.wikipedia.org/wiki/Alexia_Massalin)

</comment></comment><comment><USER12> I think its worthless to find the "optimal" sequence of instructions these days. The performance of a computer system depends far more on the runtime context then on anything a compiler can infer from compile-time information.

I worked on production compilers at a major chip company, and the best thing we can do is improve the context in which a compiler is deployed. Runtime systems and compilers have to cooperate better. The compiler needs to have an interface that is cheap (low overhead) for the runtime to call into and make changes to programs. The runtime needs to sample more architectural perf counters that matter and send them into the compiler so that it can make smarter decisions.

<comment><USER13> Also worked on compilers at a major chip company. Generally it's better to have clear code than fast code. For that reason I would say that the future of optimization are things like whole-program optimization that exploits language features to improve the asymptotic costs of mechanically provable algorithms. For a primitive example, consider taking a simple Haskell program that is provably correct but needs O(n^3). Put it through some 'equivalent optimal implementation' system that provably spits out an algorithm that does the same task in O(n lg n).

We did stuff like this for simple matrices in Fortran and C, but I think it is generalizable to more problems than that.

And of course, I agree that most of the time no one really cares except HPC.

<comment><USER14> The problem is that the subset of programs which can be proved to be correct (in 2015) is mostly restricted either to uninteresting problems, solved problems, or both.

<comment><USER13> Not always true. For a trivial example, in fortran code, we'd often see people wanting to write code that calls runtime methods directly because it leads to clearer implementations. The language rules were such that we could prove invariants on these runtime calls that were much stronger and farther reaching than the general bitcode optimizer could do, resulting in a class of matrix operations going to n*lg(n) from n^3, and we could also switch the stride direction to make better use of cache because of the algorithm change. This sort of thing was only possible because language knowledge was exploited — generic optimizers will miss this stuff.

I think the future of languages like haskell are bright in terms of performance, because they are so loosey goosey with what gets evaluated when, which gives language-aware optimizers a lot of meat to chew. An aggressive optimizer could turn out versions of the same code that run screaming-fast single-threaded, or that fully exploit massive parallel machines, or even version for all of those.

</comment></comment></comment></comment><comment><USER15> If someone wants to try a real superoptimizer right now, there's the souper ([https://github.com/google/souper](https://github.com/google/souper)) project which does this for LLVM IR code. Although the goal seems to be slightly different: "It uses an SMT solver to help identify missing peephole optimizations in LLVM's midend optimizers."

Still, it does compile some pretty big programs as long as you cache the results (in redis).

</comment><comment><USER16> Ooh, I can write signum in three instructions on PowerPC:

        divw r4,r3,r3
        srawi r3,r3,31
        or r3,r3,r4

The equivalent in C:

        int signum(int x) { return (x / x) | (x >> 31); }

This uses the hilariously fun fact that integer division by zero silently gives you zero on PPC.

<comment><USER17> Probably best to stick to assembly for that, since the C version has lots of undefined behavior (division by zero is UB, as is bitwise shift of a negative number) an optimizing compiler can do what it want with that code. :)

I'm not trying to be annoying, but I think there's value in not publishing broken code without at least noting that it is broken. I realize that the code still communicates _to humans_ how to compute signum(), but it's meaningless if compiled which is kind of important sometimes too.

</comment></comment><comment> Ono-Sendai It's possible to compute the fastest function for a finite domain (see my proof here [http://forwardscattering.org/post/13](http://forwardscattering.org/post/13) )

However for an infinite domain, I strongly suspect it's not possible, due to the fact that it's impossible to tell in general (e.g. it's uncomputable) if two programs compute the same function. This is due to Rice's theorem, and hence ultimately to the Halting problem.

It's possible there may be some kind of constructive proof but I find it unlikely.

So in summary, general superoptimisation is probably impossible.

<comment><USER18> Domains are almost never truly infinite. You tend to be bound by at least the space of memory even in the brute-force case, and the meaningful domain for any meaningful function (especially one small enough to be optimized intensively) is much less.

<comment> Ono-Sendai Domains are not infinite in practice, but I think it's important to establish the theoretical behaviour and possibilities for the infinite case. They can for example give us a good indication of the 'asymptotic' behaviours of algorithms.

</comment></comment></comment><comment><USER19> At first I thought the super-optimizer had made a mistake because the results are not the same but I think the error is in the original where line 6 should be

return -1;

Anyway, using assembler for CPU I made up in my head just now, how about

shl r0,1

and r0,1

<comment> david-given I don't think that'll work. Consider the positive integer 0b01: the shift yields 0b10, then the and yields 0.

I've actually tried to come up with a simpler example. It's tougher than you'd think, and you pretty much have to do weird stuff with flags. The superoptimiser trick is pretty neat.

</comment></comment><comment><USER20> I wonder if superoptimization can be performed more effciently by using statistical techniques based on the input code sequence. And of course, memoization could be used when compiling the same piece of code twice e.g. during development (actually I would expect _that_ feature in today's optimizing compilers).

<comment><USER21> There are superoptimizers that do the first part.

Effectively, build a Markov chain generator from known "fast" executables, then explore that as the input to the superoptimizer.

</comment></comment><comment><USER22> I think the web server could use some superoptimization.

</comment><comment><USER23> Link 404's</comment>


Show HN: Remote – Workers: hire or get hired directly by remote companies - <AUTHOR> https://remoteworkers.dev <comment><AUTHOR> Hi HN, this is my new project.

It's tied to my other site Remote OK which is a job board remote companies post jobs on. Remote | Workers let you create a remote worker profile, with skillset, tags and resume.

Then if you set yourself as available, remote companies and recruiters hiring can browse and send you a message (for that they buy credits).

It also matches new remote jobs posted to Remote OK to fitting worker profiles within seconds.

The big goal is to help get more people (the right) remote jobs. Let me know what you think and what I can improve on!

</comment><comment><USER2> I love this product!

Pieter Levels is rocking!</comment>