Go 1.13: xerrors - <AUTHOR> https://crawshaw.io/blog/xerrors <comment><USER2> This (it looks like to me) is an attempt to pull in the best bits of Dave Cheney's errors package (which I love) into the standard library: [https://github.com/pkg/errors](https://github.com/pkg/errors)

Standardising error unwrapping is a great idea IMHO and I think that this has a lot of merit.

I don't like the `fmt.Errorf("more description: %w", err)` though for several reasons.

Firstly it is a lot more opaque than Dave Cheney's original mechanism errors.Wrap(err, "more description"). You've got to check the format string for a `%w` to see if it is wrapping an error or not.

Secondly why is this really important functionality in `fmt` and not in `error`?

And finally we've been encouraged to write `fmt.Errorf("more description: %v", err)` (note `%v` not `%w`), so I think there will be a lot of unwrapped errors.

...

I'm not sure enough has been thought about the backwards incompatibility. With rclone I try to maintain compatibility with the current go release and a few previous ones so that rclone can remain running with distro go versions and gccgo both of which are a bit behind. For something as common as error handling this will cause lots of libraries to suddenly be no longer usable with anything less than go1.13.

IMHO I think this would be better staying as a non standard library package for the time being while more kinks are worked out.

<comment><USER3> > _Secondly why is this really important functionality in `fmt` and not in > `error`?_

`fmt` already depends on `errors`, and Go does not allow cyclical dependencies, so `errors` would have to reimplement string formatting.

<comment><USER4> Or they could move the machinery into a shared module.

Which already exists incidentally, internal/errinternal was added so errors.New and fmt.Errorf could return the same type.

It does make errors pull the entire formatting machinery, but chances are you're probably using string formatting long before errors so meh…

</comment></comment></comment><comment><USER5> It seems like golang designers are totally isolated from what's been happening in the last 30 years in languages design. They still insist on their weird way of error handling just like they were stubborn for years and years on the lack of package management and eventually a very weird and rudimentary way of it. It's sad because I use this language extensively but its weirdly mediocre design is totally unfathomable. It's like they are very stubborn to do anything but the right thing.

<comment><USER6> I've been using Go heavily over the last five years, starting with 1.2. Whatever warts the language has in its design, the error handling being one, it's still an excellent language for getting work done quickly, and correctly. I'm far more productive in it than Java, C++, or Python, and I'm old enough to have done lots of Pascal, Lisp, and more scripting dialects than I can count.

Having been writing software over the 30 years that you mention, it's clear to me that Go has not been isolated from language design, it's just made a choice to stay simple. Java, C++ and Python have exceptions to keep you from littering your code with error handling, and code with exceptions is hard to read. The line of code you are looking at any point in time may instantly jump to another place, effectively, having "goto"'s evil cousin, the "comefrom". Somewhere, in your code, is a "comefrom" statement which runs immediately after the statement you are looking at, you're not aware of its existence. My Java/Python for production code ends up looking a lot like Go in terms of error handling, because you have the most context about an error at the point where it happens, so that is the best place to deal with it. I believe that Go 1.x will have the staying power of C.

<comment><USER7> > Java, C++ and Python have exceptions to keep you from littering your code > with error handling, and code with exceptions is hard to read. The line of > code you are looking at any point in time may instantly jump to another > place, effectively,

Rust and Swift both manage to make error handling easy while keeping this nice "errors are just values" property. Go could easily have added Rust-like or Swift-like error handling backwards compatibly with their existing idioms without falling back on weird special cases of format strings, but have chosen not too.

This does _not_ make the language simple (even though in other ways it is).

<comment><USER8> How is rust error handling better than gos?

<comment><USER9> Okay, I'll bite.

It's better in many ways.

Firstly, rust has sum types, so it's possible to have exhaustive matches and know you've handled every case. This isn't possible in go. For comparison:

        // go
        val, err := doSomething()
        switch err.(type) {
        case *SomeErrorType:
          // handle
        default:
          panic("inexhaustive error check (at runtime, only if that error type is hit)")
        }

        // rust
        let (val, err) = do_something()
        match err {
          Err::SomeErrType(inner) => { /* handle */ },
        }
        // won't compile if the match isn't exhaustive

Note as well that you have to return the error interface, not some more specific type, in go because of the "nil struct is not a nil interface" gotcha. Juggling around structs that are returned as errors is basically impossible to do safely, so everyone returns the error interface. This is another way the language causes error handling to be worse.

Next, generics in rust allow for nicer chaining of computation in the presence of errors. Let me show you two examples. Again, the go and rust code is as identical as I can make it:

        // go
        val1, err := computation1()
        if err != nil {
          return nil, err
        }
        val2, err := computation2(val1)
        if err != nil {
          return nil, err
        }
        return computation3(val2)

        // equivalent rust
        computation1().and_then(computation2).and_then(computation3)

        // also equivalent rust
        let val1 = computation1()?;
        let val2 = computation2(val1)?;
        computation3(val2)

The ability to have a generic 'Result<T, E>' type to chain computation allows for code to be more readable, while still having all the benefits of errors being values.

The ability to have a generic 'Option<T>' instead of 'nil' also is very helpful, but enough has already been written about null pointers that I don't wish to rehash it here.

Finally, in practice, rust's higher level features (namely macros) allows libraries to create very powerful developer abstractions around errors, like those offered in the 'failures' crate, all without having any runtime overhead.

In practice, all of these things also combine to result in libraries offering better error types and allowing callers to handle errors well.

</comment></comment></comment></comment></comment><comment><USER10> From what I have seen, the Go 2 Error Values plan[1] has not received enough exposure to generate the level of feedback necessary to support a go/no-go decision re a major change in 1.13 -- one we cannot opt-out of, at that.

I suspect that the overwhelming majority of Go developers has no idea this is in the works. It was covered once on the blog last August in the Draft Design summary, when there wasn't any code behind it. It was not mentioned in Go 2 Here We Come[2], nor at the start of the below golang-dev thread. It was mentioned on golang-dev when I posted a link to the issue tracker in late January, but my posts would see a fraction of the attention vs those by Rob, Robert, Russ, Ian, et al.

There are outstanding issues with the current draft, specifically its performance[3] and API[4].

If it lands in 1.13, please give it Experimental status, with a build or env flag to disable changes to existing APIs, and perhaps a way to re-enable them on a per-function or per-package basis.

[1] [https://github.com/golang/go/issues/29934](https://github.com/golang/go/issues/29934)

[2] [https://blog.golang.org/go2-here-we- come](https://blog.golang.org/go2-here-we-come)

[3] [https://github.com/golang/go/issues/29934#issuecomment-48650...](https://github.com/golang/go/issues/29934#issuecomment-486503822)

[4] [https://github.com/golang/go/issues/29934#issuecomment-48350...](https://github.com/golang/go/issues/29934#issuecomment-483509242)

.

[Originally posted on golang-dev, in response to "Last call for feedback on Go 1.13..."]

[https://groups.google.com/d/topic/golang- dev/jPY0RYXSvCU/dis...](https://groups.google.com/d/topic/golang- dev/jPY0RYXSvCU/discussion)

</comment><comment><USER11> As others have stated, this seems incredibly odd to me:

> If the last argument is an error and the format string ends with ": %w", ...

This seems like a magic-string kinda hack to me. I like the idea of wrapping errors so that you keep the stack and full context, especially since you may need additional structured data from all errors (e.g. DB error, access error, ...) to produce user facing messages, so IMHO the wrapping should be more explicit than just %w.

<comment><USER12> It is. It's a backwards-compatibility magic string hack. I would suggest new code uses the new, formal ways of obtaining the same result.

(I'm not defending it so much as explaining it. I'm not sure how I feel about it myself.)

<comment><USER4> Backwards compatibility with what? You have to change the code to do anything new, that change could be using a different function entirely.

<comment><USER12> See my apology below. I was wrong.

</comment></comment></comment></comment><comment><USER13> Speaking of errors, here's how i approach writing a good error message.

Fill in the blank "Well basically what happened is ___________"

For example i've found this has helped me to go from "Invalid phone number" to "The phone number needs to be 10 digits"

<comment><USER14> The biggest issue I have with most error messages is that they say things like you have here but don't reflect back the data that caused the error, i.e. show me the phone number you think I sent you.

<comment><USER15> I think this context is really hard to carry around, and if you aren't extra super careful you can end up leaking passwords and other secret bits of memory here to logs. Better to just give me a place to put a debugger breakpoint IMO.

</comment></comment></comment><comment><USER16> Go error handling. Slowly re-inventing Java's exceptions one use case at a time.

<comment><USER17> I agree with the feeling, but I also see this being a debate between an opt-in approach (choose to use an error value with gradually more information enclosed) vs opt-out (throw an Exception, a la C#/Java, that by default stores everything you may or may not need, then maybe figure out a way to stop storing what you don't need). The use cases are not going to magically go away though, which explains why we need the solution to be somewhere in the middle.

<comment><USER16> > then maybe figure out a way to stop storing what you don't need

I'm not sure I understand why this is something you need to do. "Figure out a way to stop storing what you don't need." Who cares if you don't need it, or at least don't need it now, storage is cheap.

<comment><USER18> Exactly. Plus, code that uses exceptions but does not encounter any throws should be faster than code that uses error checks. In the latter, there's always a cost even if there aren't any errors returned. However, the former can optimize for the (hopefully more common path) of no exceptions being thrown and avoid checks altogether.

</comment></comment></comment></comment><comment><USER19> This seems way better than the other proposals. pkg/errors solved every complaint I had about errors years ago.

</comment><comment><USER20> Not sure why people are bashing Go because of it's choices.

Looking forward to shit storm once they introduce generics in near future. I am sure people will still complain that this is not how parametric polymorphism should be implemented.

</comment><comment><USER21> I think this is a positive development and should be cheered by Go programmers. Slowly but surely they progress on the road to implementing Exceptions. ( _ducks and runs_ like a scaredy cat to avoid the wrath of Go Fans)

</comment><comment><USER22> What I'm really looking for is being able to debug any production Go binary by inspecting the stack trace behind an error. Could be gated by an environment variable.</comment>


Making Facebook's software infrastructure more energy efficient with Autoscale - <AUTHOR> https://code.facebook.com/posts/816473015039157/making-facebook-s-software-infrastructure-more-energy-efficient-with-autoscale/

<comment><USER2> Vfx companies have software that turn off renddr farm machines in periods of low load. I helped write software that did this backin 2006.

Basically, we found it was possible to shut down machines in periods of low load and then use "Wake On Lan" to start them up once load picked up again.

I am unsure if the on-off power cycling reduces machine longevity.

Might be something worth exploring at Facebook.

<comment><USER3> > I am unsure if the on-off power cycling reduces machine longevity.

Possibly the disks are the most vulnerable components. I wonder if it would be possible in software to shut down the CPUs and have only disks + network running...

<comment><USER4> A bit late to the party on this one. Check out cpu "c states" and things like intels "speedstep." Modern cpus can reduce/shutdown power to individual packages and cores. This can reduce power consumption from a hundred tdp to tens of tdp.

The downside is latency associated with changing state. Depending on the change it can be hundreds or thousands of micros to go through these states. On a server workload this can introduce huge latency outliers as a request blocks on a core to wake up.

<comment><USER3> I was more after "shut down _everything_ except the disks" to have the absolute minimum running and the disks spinning to reduce wear on the engines.

If you're shutting down, you have massive latency anyway but if it's possible to at least save all the power not required for keeping disks up that 'd be great.

</comment></comment></comment></comment><comment><USER5> This is one of these things where virtualisation can help even more. For example, VMware can dynamically put servers in standby mode when demand is low and power them up again when needed: [http://www.vmware.com/products/vsphere/features/drs- dpm](http://www.vmware.com/products/vsphere/features/drs-dpm)

<comment><USER6> You know that would be trivial to do with bare metal and out of band management cards like Dell Dracs, IBM RSA cards, HP ILOs, or generic IPMI BMCs, right?

Virtualization doesn't really add much of anything for that specific problem other than increased context switching and slightly lower performance.

Disclaimer: building this type of thing (on bare metal) is a chunk of my day job. I see it as unbelievably trivial. In fact, the same ideas are behind Rackspace's "OnMetal" initiative:

[http://www.rackspace.com/cloud/servers/onmetal/](http://www.rackspace.com/cloud/servers/onmetal/)

<comment><USER7> Getting IPMI controllers to do what you want is anything but trivial :)

<comment><USER8> Seriously. A person who would advocate using IPMI at scale has either never owned an IPMI card or has never worked at scale or both. The just don't work, and they erase whatever power savings you're trying to achieve.

<comment><USER9> Real servers can't be bought without IPMI and AFAIK the BMC cannot be turned off, so it's probably not worth worrying about BMC power if there's nothing you can do about it.

<comment><USER8> Sure, but as you're aware facebook, google, et al don't buy "real servers", they buy servers that actually meet their requirements. That's why "real vendors" like HP have missed the boat on selling millions of servers into the cloud.

<comment><USER9> Speaking of Facebook specifically, the evolution is interesting. They replaced BMCs with the reboot-on-LAN hack but then their next motherboard version had BMCs again. It would be interesting to hear the story behind that.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> You could probably get a similar effect by using HAProxy's "balance first" algorithm, which chooses the first available server with an available connection slot (as defined by maxconn). If you did this, you'd want to set maxconn pretty conservatively.</comment>


The Post JavaScript Apocalypse – Douglas Crockford - <AUTHOR> https://www.youtube.com/watch?v=NPB34lDZj3E <comment><USER2> Has anyone got ideas for the Security and Distribution sections? I'd say they're arguably the most important for a new language but he didn't spend time on them.

Back to internet argument territory - as a double quotes user, prettierjs surprised me by changing everything (that could be changed safely) to double quotes and I was glad to discover Crockford likes them better too.</comment>


How Yahoo came up with its new name: Altaba - <AUTHOR> https://www.washingtonpost.com/news/the-switch/wp/2017/01/09/how-yahoo-came-up-with-its-new-name-altaba/ <comment><USER2> _Still the third most visited Web property in the United States_

According to Alexa it's the 5th [1] but I'm sure it's not a huge difference between third and fifth.

Yahoo still makes almost $5BN a year. It's a 24 year old internet behemoth.

I mean by any reasonable measure of a company, those are ungodly numbers. Given how people talk about Yahoo though you'd think it was populated with lepers.

I guess it's all about managing expectations.

[1][http://www.alexa.com/topsites/countries/US](http://www.alexa.com/topsites/countries/US)

<comment><USER3> Part of it is that this is HN, and Yahoo as an internet company has been boring for a long, long time[1].

Another part of it is that it shows the incredible value of inertia. Sports scores and email is with $5B.

And I think a third is just a bit of schadenfreude from the internet insider set. Selling half of yourself to a Baby Bell-revenant and turning the rest into a tracking stock is a sad way for the first internet directory to die.

[1] The last vaguely interesting thing I can remember was Yahoo Pipes.

<comment><USER4> > Part of it is that this is HN, and Yahoo as an internet company has been > boring for a long, long time

It's like the Minnesota Mining and Manufacturing Company ([https://en.wikipedia.org/wiki/3M](https://en.wikipedia.org/wiki/3M)). They make $30 billion in annual sales with 55k products. How often do you hear about them? They're big, profitable, and news is mostly boring to HN interests.

<comment><USER5> Part of why you probably don't hear about "Minnesota Mining and Manufacturing" is that the company is no longer named that. :-) Wikipedia says "formerly known as". But, fascinating, I didn't know that.

<comment><USER4> > no longer named that

And now Yahoo will be Altaba :)

</comment></comment></comment></comment></comment><comment><USER6> This article could be a tweet:

 _The new name is meant to be a combination of the words "alternative and Alibaba," according to a person familiar with the company's thinking, who spoke on the condition of anonymity because the individual was not authorized to speak on the record about the name change._

<comment><USER7> Most articles could be condensed into headlines

<comment><USER8> > Most articles could be condensed into headlines

There really needs to be an app for that

<comment><USER9> There was, it was bought by Yahoo... [http://summly.com](http://summly.com)

<comment><USER10> I remember this. Created by a 16 year old[1].

1 - [https://en.wikipedia.org/wiki/Nick_D'Aloisio](https://en.wikipedia.org/wiki/Nick_D'Aloisio)

<comment><USER11> Now we know what kind of mentality took Yahoo down. Marisa Mayer should have read less HN?

</comment></comment></comment></comment></comment></comment><comment><USER12> Alt + Tabber

Someone particularly proficient in changing between windows

<comment><USER13> In Danish it sounds like "alle taber" which means "everybody loses".

<comment><USER14> spectacular

</comment></comment></comment><comment><USER15> Altavista + Alibaba was my first thought.

<comment><USER16> I was about to comment on the same thing.

</comment></comment><comment><USER17> Altaba is the abbreviation of alibaba's father in China. 阿(A)里(Li)它(Ta)爸(Ba) XD

</comment><comment><USER18> On Chinese Interwebs, it's been called Ali's Dad. You can google for 阿里他爸.

</comment><comment><USER19> As an English speaker this comes across as such a horrible name (for me at least).

A typo: alt-abc?

</comment><comment><USER20> I really do not get it.

Verizon spends a lot of money for what essentially is a widely recognizable brand, popular destination, and an email service, and they change it?

"I saw it on Altaba"???

All these people with emails @yahoo.com is free advertising for yahoo.com, but guess what, no more yahoo.com? Will they try to force a change of email domain over 20 years and kill the email service for good?

I have no clue now why they bought Yahoo in the first place...

Edit: got it all wrong. Thanks all for clarifying which piece is what.

<comment><USER21> There is a lot of misunderstanding about what is going on. The current Yahoo basically exists of 3 main parts:

1\. The Yahoo website and properties that most folks think of when they think "Yahoo". 2\. The 15% share of Alibaba 3\. The share in Yahoo Japan.

Verizon bought part #1. That is not changing its name and will continue to be accessible on yahoo.com. Parts 2 and 3 are being left behind in a company that is being renamed Altaba.

</comment></comment><comment><USER22> Well, one wonders how AOL still strike to survive after all these years. MSN gone. Yahoo gone.

<comment><USER23> We just had this discussion at work.. one of the recent reports stated over 2 million subscribers still pulling in ~600 million a year just from that (pales in comparison to ad revenue and past performance, but still... 2 million!). The average per-account income was something like $21/month.

<comment><USER24> Well, the AARP has 38 million members, so that's not too surprising, I guess. (I'm saying that a lot of old folks don't realize there is an Internet, or email, or online news, etc. without AOL.)

<comment><USER25> My grandparents still use AOL, because they live in the absolute middle of nowhere (aka they drive roughly an hour to be able to do groceries). Their options have been basically dial up, or extremely expensive satellite internet.

Verizon has been promising the little place they live for around 5 years that they will eventually get some sort of service, however last time i was there i could barely get any cell coverage.

<comment><USER24> My previous company built web caching servers for independent ISPs. We served a bunch of providers in rural areas who offered WiMAX to customers that were too far out to get DSL or cable internet, and with lower latency than satellite. It was usually somewhat expensive, compared to DSL/cable, but the ISP could profitably serve individual customers the "last mile" (or last dozen miles, with a repeater or two). A lot of those ISPs died as antitrust regulation in the broadband industry failed and their nearby customers got poached by the telcos and cable operators, making it harder to operate at large enough scale to make it work. So, there was a moment where it looked like a lot of those difficult to reach customers would be reached by ISPs willing to roll out WiMAX with tall antennas and repeaters. But, it didn't work out, and most of them died.

Anyway, I agree with you that there are still stretches of the US that have people but no broadband. And, my primary internet is mobile broadband (from two different carriers, since I travel and often find only one of them works reliably), so I know the pain of it first-hand. But, still, I'd wager that most AOL customers are older folks (even if the reason is also that people living in rural areas tend to be older).

<comment><USER26> Wi-Max or alternatives like DIY long range Wi-Fi, cannot have both 10 miles (~15 km) range and high throughput. At the very minimum because earth curvature, and also because the radio signal has to go right through the moisture in between the sender and receiver. I came up a few years ago with the idea that it would be possible to use the mesospheric layer as a passive relay for communications at 40 miles range in desert areas. This even during daylight. It is inspired by the "laser guide star" in astronomy with coding à la 802.11 (Golay/LDPC).

More about it here: [https://padiracinnovation.org/2017/01/10/mesosphere- light-sc...](https://padiracinnovation.org/2017/01/10/mesosphere-light- scattering-as-cell-tower-substitute/)

<comment><USER27> Sure you can, you just need a bigger tower; you can get gigabit speeds with microwaves, no sweat, very directional too. Signal loss due to moisture? Up the power. It doesn't work? Use more power, or add 5 feet to the tower and try again. Remember, if brute force isn't working, you aren't using enough of it.

BTW: I like how you kinda gloss over the advanced math for atmospheric corrections. The idea is interesting, though.

<comment><USER28> "if brute force isn't working, you aren't using enough of it"

You just made my day with that phrase.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER29> [https://www.aabacosmallbusiness.com/](https://www.aabacosmallbusiness.com/)

With Aabaco being taken by the original spin-off plan, this is simply an alternative company name so that they still get the stock symbol they want for the investment company that will remain behind after all the web assets have been sold to Verizon.

That's it.

</comment><comment><USER30> How do you even pronounce that?

<comment><USER31> Ahl-tah-bah

</comment></comment><comment><USER32> Altabadabadoo!

</comment><comment><USER33> Alt + Tab + A?

</comment><comment><USER34> Did no one ever have the conversation about how Alibaba is a racist stereotype or do we just give Asia a pass on this kinda thing?

<comment><USER35> What "stereotype" does "Ali Baba" invoke? As I recall the story, Ali Baba was a clever man who started out poor but made his fortune by outwitting dangerous thieves with the help of his brother's super-capable slave girl. Is there something bad there? Even if there is, is there something that anyone would have a stereotype about?

There are other characters from literature that could be problematic, but this just isn't one of those.

</comment></comment><comment><USER36> alt+tab it

Alibabers will kill the company, they have no talent running western style dotcoms

<comment><USER37> ?

Neither altaba or Alibaba is a western style dot-com. That part of yahoo is being sold to Verizon. Altaba is just a holding company for Alibaba stock.

<comment><USER36> Well I had an impression that Alibaba was a party to the deal. It appears, they aren't</comment></comment></comment>


JOOQ: an alternative approach to traditional ORMs - <AUTHOR> http://www.jooq.org/ <comment><USER2> Never heard of this before as I mainly use MS stack.

However, my first impression is very positive.

1\. Database First

Great way to distinguish your product from traditional ORMs. I am personally not a fan of code first approach especially as a LOB applications developer. I have been writing code for 15 years and the database/schema has outlived each and every application that I wrote. (I am in full agreement with lukaseder's comment: [https://news.ycombinator.com/item?id=10880942](https://news.ycombinator.com/item?id=10880942)) As an experienced developer, they immediately made their value proposition clear to me and I wanted to learn more.

2\. Examples

Side by side example comparing jOOQ to SQL. A great way for me to quickly see if I like their DSL design.

3\. Convince your manager page.

I absolutely loved this: [http://www.jooq.org/why- jOOQ.pdf](http://www.jooq.org/why-jOOQ.pdf)

We all have worked with 'a technical manager' who isn't really technical. When you need to purchase a tool, you need to convince your manager and this page is as good as I have seen. All commercial software development tool product websites should feature a 'Convince your manager' page.

<comment><USER3> > Side by side example comparing jOOQ to SQL. A great way for me to quickly > see if I like their DSL design.

I'm always astounded how many times this is neglected. It seems pandemic.

I live in the PHP world, and it seems that every hot new framework wants to do its own SQL re-hash. They always seem created by programmers who either hate SQL and want to avoid it as much as possible in favor of OO paradigms, or have never used it beyond its basic features.

Sooner or later, I'll find myself wanting to do something moderately complex, like delete through a join, and all of a sudden the interface breaks down. I'll scour the internet or ask a question, and it either can't be done, or relies on some arcane, poorly documented part of the API, or uses weird, unintuitive syntax that makes you wonder if the API is any improvement over plain SQL at all.

<comment><USER4> > I live in the PHP world, and it seems that every hot new framework wants to > do its own SQL re-hash. They always seem created by programmers who either > hate SQL and want to avoid it as much as possible in favor of OO paradigms, > or have never used it beyond its basic features.

Agreed.

I don't use PostgreSQL and haven't got my head around it fully, but have you seen [http://www.pomm-project.org/](http://www.pomm-project.org/) ?

</comment></comment></comment><comment><USER5> I have been using jOOQ for quite some time. Indeed, it's the _only_ mechanism (definitely not an ORM) to access the database that we use in my company.

From my own experience, and this is general consensus, it's a big win to use it. Its SQL inspired fluent syntax brings you back the power of SQL, including really advanced stuff. But at the same time, in a Java native manner, type safe, by the way.

If you haven't tried it yet, you definitely should.

<comment><USER6> Same. jOOQ is great and makes dealing with databases from Java land simple.

After dealing with some many hibernate WTF issues jOOQ was a breath of fresh air. I could finally write queries again using a simple DSL and get what I was expecting to happen.

</comment></comment><comment><USER7> > type safe SQL queries

Really? So the compiler will catch this error?

        create.select().from(AUTHOR).where(BOOK.LANGUAGE.eq("DE"))

No it won't, because `where` has this type:

        SelectConditionStep<R> where(Field<Boolean> field)

If it was type safe, `Field<Boolean>` would have to mention the type of the records that can be queried.

Type safety is what is being sold on the front page as the main value proposition.

Needless to say, I'm not sold on it.

<comment><USER8> I'm not sure I understand; doesn't

      BOOK.LANGUAGE.eq("DE")

mean something like

      Book.Language = 'DE'

in SQL? That's certainly a boolean expression. I've only started reading the manual, though, so it's possible I got the semantics wrong, but I've had SSMS point out to me this sort of thing before.

<comment><USER7> If we had selected from or joined on BOOK, it would be a Boolean expression. But in this case, BOOK is undefined, so BOOK.LANGUAGE.eq("DE") shouldn't type check at all.

The corresponding SQL is nonsensical:

        select * from AUTHOR where BOOK.LANGUAGE = 'DE'

</comment></comment></comment><comment><USER9> Sorry if I did too much TL;DR but this reads very much like Apache Torque, which has been around for a very loooooooong time.

[https://db.apache.org/torque/torque-4.0/index.html](https://db.apache.org/torque/torque-4.0/index.html)

Apache Torque is an object-relational mapper for java. In other words, Torque lets you access and manipulate data in a relational database using java objects. Unlike most other object-relational mappers, Torque does not use reflection to access user-provided classes, but it generates the necessary classes (including the Data Objects) from an XML schema describing the database layout. The XML file can either be written by hand or a starting point can be generated from an existing database. The XML schema can also be used to generate and execute a SQL script which creates all the tables in the database.

As Torque hides database-specific implementation details, Torque makes an application independent of a specific database if no exotic features of the database are used.

Usage of code generation eases the customization of the database layer, as you can override the generated methods and thus easily change their behavior. A modularized template structure allows inclusion of your own code generation templates during the code generation process.

<comment><USER10> They are not the same and probably many modern ORM's share more in common with jOOQ than Torgue has in common with jOOQ. An example would be schema generation. jOOQ is reverse schema based. You make your schema with whatever schema evolution tools you like (Flyway is the most common) and then run the code generator. Torque is the opposite (notice they say starting point not final) not to mention its also XML based.

Oh and jOOQ has an extremely powerful DSL that is close to 1-1 with SQL and whole bunch of reflection based conversion abilities (including dotted path data binding which I am happy to say I inspired the author of jOOQ to add :) )

<comment><USER9> Torque does code-gen as well. This was before any fancy tools so we basically just had hand generated DDL.

[https://db.apache.org/torque/torque-4.0/documentation/orm- re...](https://db.apache.org/torque/torque-4.0/documentation/orm- reference/running-the-generator.html)

Regen, then fix compile issues. Thats how I used it a long long (10 years?) time ago.

jOOQ DSL is nice, this is just as readable(ABC is a generated class)

      Criteria crit = new Criteria()
        .where(ABC.A, 1, Criteria.LESS_THAN)
        .and(ABC.B, 2, Criteria.GREATER_THAN)
        .or(ABC.A, 5, Criteria.GREATER_THAN);

Working with XML, not the nicest thing, i do agree, but also not the worst thing.

Not a flag-bearer in any way, but I just wanted to point out that if code-gen db access is your thing, there are also other tools to consider. It most certainly had its warts. Like issues handling complicated joins. Or more seriously, whos maintaining it. Its been a long time since i've look at it with any seriousness, not sure if they have fixed them or not.

edit: formatting

<comment><USER11> Here's a jOOQ example from the "PostgresDatabase" class, which is used to reverse-engineer the meta data. How would you write it in Torque?

        .select()
        .from(
             select(
                TABLES.TABLE_SCHEMA,
                TABLES.TABLE_NAME,
                TABLES.TABLE_NAME.as("specific_name"),
                inline(false).as("table_valued_function"),
                inline(false).as("materialized_view"),
                PG_DESCRIPTION.DESCRIPTION)
            .from(TABLES)
            .join(PG_NAMESPACE)
                .on(TABLES.TABLE_SCHEMA.eq(PG_NAMESPACE.NSPNAME))
            .join(PG_CLASS)
                .on(PG_CLASS.RELNAME.eq(TABLES.TABLE_NAME))
                .and(PG_CLASS.RELNAMESPACE.eq(oid(PG_NAMESPACE)))
            .leftOuterJoin(PG_DESCRIPTION)
                .on(PG_DESCRIPTION.OBJOID.eq(oid(PG_CLASS)))
                .and(PG_DESCRIPTION.OBJSUBID.eq(0))
            .where(TABLES.TABLE_SCHEMA.in(getInputSchemata()))

            // To stay on the safe side, if the INFORMATION_SCHEMA ever
            // includs materialised views, let's exclude them from here
            .and(row(TABLES.TABLE_SCHEMA, TABLES.TABLE_NAME).notIn(
                select(
                    PG_NAMESPACE.NSPNAME,
                    PG_CLASS.RELNAME)
                .from(PG_CLASS)
                .join(PG_NAMESPACE)
                    .on(PG_CLASS.RELNAMESPACE.eq(oid(PG_NAMESPACE)))
                .where(PG_CLASS.RELKIND.eq(inline("m")))
            ))

        // [#3254] Materialised views are reported only in PG_CLASS, not
        //         in INFORMATION_SCHEMA.TABLES
        .unionAll(
            select(
                PG_NAMESPACE.NSPNAME,
                PG_CLASS.RELNAME,
                PG_CLASS.RELNAME,
                inline(false).as("table_valued_function"),
                inline(true).as("materialized_view"),
                PG_DESCRIPTION.DESCRIPTION)
            .from(PG_CLASS)
            .join(PG_NAMESPACE)
                .on(PG_CLASS.RELNAMESPACE.eq(oid(PG_NAMESPACE)))
            .leftOuterJoin(PG_DESCRIPTION)
                .on(PG_DESCRIPTION.OBJOID.eq(oid(PG_CLASS)))
                .and(PG_DESCRIPTION.OBJSUBID.eq(0))
            .where(PG_NAMESPACE.NSPNAME.in(getInputSchemata()))
            .and(PG_CLASS.RELKIND.eq(inline("m"))))

        // [#3375] [#3376] Include table-valued functions in the set of tables
        .unionAll(
            tableValuedFunctions()

            ?   select(
                    ROUTINES.ROUTINE_SCHEMA,
                    ROUTINES.ROUTINE_NAME,
                    ROUTINES.SPECIFIC_NAME,
                    inline(true).as("table_valued_function"),
                    inline(false).as("materialized_view"),
                    inline(""))
                .from(ROUTINES)
                .join(PG_NAMESPACE).on(ROUTINES.SPECIFIC_SCHEMA.eq(PG_NAMESPACE.NSPNAME))
                .join(PG_PROC).on(PG_PROC.PRONAMESPACE.eq(oid(PG_NAMESPACE)))
                              .and(PG_PROC.PRONAME.concat("_").concat(oid(PG_PROC)).eq(ROUTINES.SPECIFIC_NAME))
                .where(ROUTINES.ROUTINE_SCHEMA.in(getInputSchemata()))
                .and(PG_PROC.PRORETSET)

            :   empty)
        .asTable("tables"))
        .orderBy(1, 2)
        .fetch()) {

</comment></comment></comment></comment><comment><USER12> Looked interesting until the moment I saw it's not free. Sorry, but in this day and year I'm not gonna consider using a piece of basic infrastructure that is not free and open source, at least not for something as fundamental as ORM layer.

<comment><USER13> That's not quite correct.

It is free if your database is free (using Apache 2.0): [http://www.jooq.org/download/](http://www.jooq.org/download/)

<comment><USER14> It is "free" if you squint, but they kind of screw with you when you don't pay them, to the point where I ditched jOOQ entirely because I didn't feel like I could trust them to deal straight with me. They spam your application output like nagware unless you dig into the code for an undocumented flag (which has a really godawful guilt-trip comment next to it begging you to allow them to continue littering your logs with unparseable garbage that can't even be bothered to go through logback to be piped correctly) and they hide their unit tests (and are real jerks about them, calling them "an enterprise feature", when _in reality_ they're both documentation and verification that the stuff they say works actually _does_ work). It's their prerogative to do that, of course, but it's not behavior I'd support. Team's kind of shitty on Twitter, too, trolling around keyword searches and looking for a fight.

I don't recommend its use, both from a "can I trust this" perspective as well as a "do I want to support these guys" one. If you can use Slick, I recommend it, as its developers have in my experience been uniformly solid people; I haven't needed either recently, as I've switched stacks for the project I was going to use one or the other for, but Slick's developers don't make me feel _icky_ to support.

</comment></comment></comment><comment><USER15> Or you could use Slick[0] for free.

[0]: [http://slick.typesafe.com/](http://slick.typesafe.com/)

<comment><USER16> I think this is not fully comparable, since it's Scala library.

I tried to use JOOQ with Scala in past, it does not feel good solution for it, all that generated code seemed really difficult to keep in order.

JOOQ is clearly Java tool first and foremost.

<comment><USER11> You don't use Slick's code generator? How big is your schema, then?

</comment></comment></comment><comment><USER17> This looks suspiciously similar to SQLAlchemy[1].

[1]: [http://www.sqlalchemy.org/](http://www.sqlalchemy.org/)

<comment><USER18> That is a gigantic compliment, given the restrictions of Java.

<comment><USER17> It's just my first impression. The experience when using it may feel very different.

</comment></comment></comment><comment><USER19> A simple library that is similar (but not multi-database; this said, at least you don't have to learn another syntax for SQL) [https://github.com/l3nz/ObjectiveSync](https://github.com/l3nz/ObjectiveSync)

\- Minimal wrapper over JDBC.

\- Querying done in SQL. You should not be afraid of SQL. If you are, you should not be doing anything above the trivial CRUD.

\- Centralizing object marshaling and unmarshaling - each object should know how to sync itself and its descendents

\- Single syntax for inserting and updating

\- Ruby-like objectivized JDBC fetching with exception handling

\- User-definable deep fetching and updating (almost Hibernate-like).

\- Batch API to avoid round-trips when submitting multiple queries.

\- Stats collection and similar stuff.

</comment><comment><USER20> A fully open source equivalent: [https://github.com/keredson/DKO](https://github.com/keredson/DKO)

I wrote this for Two Sigma's internal use back in 2010.

<comment><USER10> I too wrote my own crappy (anti)ORM-like library a few years back as well [https://github.com/agentgt/jirm](https://github.com/agentgt/jirm) . The most notably difference from other libraries was focusing on immutable objects and embracing real SQL (not a DSL like jOOQ) using a better SQL template language (instead of the JDBC '?') [https://github.com/agentgt/jirm/blob/master/jirm- core/README...](https://github.com/agentgt/jirm/blob/master/jirm- core/README.md) . I guess the closest library would be MyBatis.

The problem with writing your own library is the massive and continuous support that is required. This is where I eventually gave in and used jOOQ. Its an extremely well maintained and documented library. People complain about it not being completely opensource but neither is intellij so I don't have a problem (as well I also only use opensource databases).

<comment><USER20> Massive and continual support? That has not been my experience. Even after leaving TS, it looks like Lynch (who took over internal support: [https://github.com/salynch/DKO](https://github.com/salynch/DKO)) has make only a dozen or so commits. SQL is not a fast-changing target.

<comment><USER10> Well with out extensively using your library I can only guess a couples of things must be true for not needing maintenance:

* Your library has a very limited set of capabilities

* Your library is not extensively tested on all supported databases all the time and thus bugs are not being found.

Also I find the claim of streaming support sort of disingenuous or at least the word streaming misleading. Real streaming that is required for reactive like programming (ie reactive-streams) is not supported by the JDBC drivers because operations are bound to thread/connection. If you are just talking about Iterator like streaming than you do realize you are at the mercy of the database driver itself. For example Postgres and many other databases will almost always preload a certain amount of the ResultSet regardless (and in my experience a rather large ammount).

<comment><USER20> Correct, iterator-based-streaming, as java6 was the norm when I wrote this. And yes, you're obviously at the mercy of your JDBC driver. Though I'd argue if your results are fitting into PostgreSQL's default preload size (whatever it may be) you don't really need to worry about it. But I promise you it does stream. (TS is not known for it's small datasets...)

<comment><USER10> I think you understand this but its more than just handling large datasets memory friendly. True streaming would allow you to keep your connection pool happy. If you stream a large dataset you have to keep the connection open (lets say for a web request which is the common case) and you can't reuse that connection till you retrieve the entire dataset (or I guess read a subset and stop). For batch processing this ok but for web requests this is generally not ok. Asynchronous drivers are push based and are analogous to NIO HTTP like Netty (some non-JDBC async drivers I think even use Netty). But I'm going to gather you understand that and/or either using a very sophisticated pooling technique/drivers.

So if I block too long while reading an iterator like object because the client is taking to long to read... I think you can imagine what happens. This is why so many of the JDBC wrappers (such as Spring JDBC and JDBI ) do not return iterators or at least do not advertise it as an awesome feature.

<comment><USER20> Our pooling was pretty shitty actually, but it didn't need to be fancy as 95% of our code was some sort of batch processing (as you guessed), after which the JVM terminated. But yes, highly tweaked JDBC drivers over all.

Hibernate has iterator methods, but I recall (in 2010) it still loaded the entire result set into memory, with a //TODO comment. I remember thinking "W...T...F..." I can't tell you how many -Xmx16G (or 32/64) flags I deleted...

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> Not too sure what's special about this thing. I also wonder why people keep making DSLs to replace SQL. I was using iBatis back in 2005 (now called MyBatis - [http://blog.mybatis.org/?m=1](http://blog.mybatis.org/?m=1)) and it worked great.

<comment><USER11> ... which is, essentially, an XML-based external DSL

<comment><USER22> No, it's essentially a way to automatically map between manually written SQL and custom object types; you can use MyBatis with annotations only; no XML required.

The advantage is that, as you're writing and embedding actual SQL, you can take advantage of any database-vendor-specific extensions to SQL, plus you can easily run, debug and test such SQL from another tool. Having full control over the actual SQL also means you don't risk potentially horribly inefficiently generated SQL, or risk running into unexpected N+1 scenarios. At the same time, you don't have to deal with JDBC and instead get a DAO layer that uses strongly typed objects.

Of course the disadvantage is that you lose portability; moving for instance a MyBatis/SqlServer app to Oracle will mean verifying, testing and potentially rewriting every single SQL statement in your app. If you're willing to accept that risk though, MyBatis is a great lightweight library to manage your database access layer.

</comment></comment></comment><comment><USER23> Does it "feel" natural to use it with spring boot instead of jpa and hibernate?

<comment><USER11> It depends on the nature of your project. Using JPA as a default is probably a bit of a historic issue. For a lot of time (2005-2010), Hibernate has been the de-facto standard way to access RDBMS from Java, unrightfully so in many cases that would have really fared much better with a SQL-based solution, not an ORM-based one. I'm talking about reporting, analytics, complex queries (outside of reporting), data-centric middle ware, batch processing, i.e. everything that isn't plain old CRUD.

While Spring also often defaults to JPA, it isn't required at all to use JPA with Spring. Spring has always included JdbcTemplate, a JDBC extension for convenience when working with plain SQL.

Apart from that, jOOQ is part of the Spring Boot manual. It cannot be feel that unnatural :)

[https://docs.spring.io/spring- boot/docs/current/reference/ht...](https://docs.spring.io/spring- boot/docs/current/reference/html/boot-features-jooq.html)

</comment></comment><comment><USER24> > jOOQ is SQL-centric. Your database comes "first".

This approach has always seemed completely backwards to me. Isn't the database simply a mechanism for persisting records/objects whose structure is determined by domain modeling?

To me, it would make about as much to say of a GUI framework "foobarWidgets is GUI-centric. Your UI comes 'first'.", as though the application itself was just an afterthought.

Don't get me wrong - I like SQL, and I happily use relational databases to store objects. I just see the database as a means, not an end.

<comment><USER11> Your data will live for the next 30 years. Your UIs are replaced with every new fad. Do you think it is more important to thoroughly design your database or your client domain model?

Of course, projects are different, and some projects are more user-centric, others are more data-centric, but chances are that you're successful and then you'll regret working with a horrible database schema that you didn't properly design 5 years ago, cause all you cared for were your fancy foobarWidgets that you implemented in a tech that no longer exists...

<comment><USER6> > Your data will live for the next 30 years. Your UIs are replaced with every > new fad. Do you think it is more important to thoroughly design your > database or your client domain model?

This cannot be repeated enough. It is an argument I have over and over with people who want to treat the database as a dumb store usually because they do not want to understand databases. Any successful software that stores or generates data will see that data live and used way beyond the original program. The database used will absolutely be the foundation multiple different pieces of software are built on.

</comment></comment></comment><comment><USER25> This is another option: [http://ebean-orm.github.io/](http://ebean- orm.github.io/) sound very nice and complete</comment>


La Dolce Video (2009) - <AUTHOR> https://www.nytimes.com/2009/02/08/nyregion/thecity/08kims.html <comment><USER2> In September 2008, Kim announced he would be closing Mondo Kim's and giving away the film collection to anyone who could fulfill certain criteria, stipulating that the entire collection was to be taken intact and that Kim's members would continue to have access to the collection wherever it resided. In December 2008, it was reported that Salemi, Sicily had made a successful bid for the collection, as part of a village restoration effort.[7][8][9] In 2012, a Village Voice article entitled "The Strange Fate of Kim's Video" reported that the collection, though remaining intact, had essentially disappeared from public view after arriving in Salemi, and that the initiatives promised by Kim and the government of Salemi remained unfulfilled. [10]

[https://en.wikipedia.org/wiki/Kim%27s_Video_and_Music#Histor...](https://en.wikipedia.org/wiki/Kim%27s_Video_and_Music#History)</comment>


Samsung Blockchain - <AUTHOR> https://www.youtube.com/watch?v=vgI1DbH1gFc&feature=share <comment><USER2> The sheer corporate-ness of this is completely antithetical to the typical cypherpunk ethos.

Who does Samsung hope to convince to use this? Unknowing consumers and businesses?</comment>


Jarrett Heather presents: Word Crimes (2014) - <AUTHOR> https://jarrettheather.com/wordcrimes/ <comment><USER2> Creator here. I'm happy to answer any questions about the project.

<comment><USER3> It's a great project, and a wonderful read, thank you.

However, I can't resist pointing out something ironic in a post about a video about grammar:

> The number 27 is referenced at least seven different ways.

"Referenced" should be "referred to", or "The video makes reference to the number 27...".

Although I accept that this misuse of the word is so widespread that it will probably end up being accepted on the "if enough people make the mistake long enough and often enough, it ceases to be a mistake" theory of language...

</comment></comment><comment><USER4> Awesome and probably my favourite example of kinetic typography...

Can I ask how much one could hope to earn from such a project?

First I thought... $5000 on the low-end, as an after-hours hobby project for beer money, beats burger flipping.

Then I thought, well, this is equivalent to a one-time three-months full-time highly specialised consulting gig, has an audience of 50 million people, probably a highly integral part of the success of Al's song, included some subcontracting (to his brother), not a lot of people can do this... so this gotta be worth at least $50k (coming to $100/hour which again, seems just about right or again on the low-end for something like this).

He clearly massively overdelivered, I mean you can watch this thing frame by frame a dozen times and still discover tiny little details and jokes he included in the graphics, that's insane (in an awesome way) and you probably can't expect anyone to do that in a project spec up-front.

But then again, he's not doing this full-time, he's not a specialised business with a dozen GFX artists and if you'd quote $50k on this to a major corporation, they'd probably outsource it to a guy overseas (...) who'd be happy to try his luck for a thousand bucks or so.

What do you think? I'm just curious.

<comment><USER2> Any profit the video makes is shared equally between myself, Weird Al, and Sony. So far that hasn't added up to $50k, sadly.

</comment></comment><comment><USER5> >The result of 500 hours of work in After Effects, Photoshop, Illustrator and Premiere goes by in 3 minutes, 44 seconds.

that's pretty damn impressive. It could be cool to have an indicator that shows how many hours put into something. Gives more context, and a deeper meaning

</comment><comment><USER6> Great video!

All of the crimes outlined in the video are common, annoying, and clear except one: "well" vs "good". Even in the video, the "correct" usage is ambiguous.

IME people who care about grammar use (and correct others regarding) "I am well", but when I diagram the sentence, it seems like "I am good" is actually correct.

I'd really like to know the right usage, and what Weird Al intended here. It's funny, because all the other examples are really explicit.

<comment><USER7> At 2:39 it's saying that "doing good" and "doing well" are both correct, but mean different things: superman is doing good deeds, and scrooge is doing very well. But what to make of "I am good" isn't addressed (unless I missed it).

<comment><USER8> As in Tom Lehrer's song "The Old Dope Peddler", which ends "It's the old dope peddler/Doing well by doing good."

It's not something I heard years ago, but then one heard "I'm OK" and "I'm fine".

</comment></comment></comment><comment><USER9> Love the song and video -- great to see the behind-the-scenes and in-jokes.

One thing I'm still curious about is the lyric: "You should never / write words using numbers / unless you're seven / or your name is Prince" \-- particularly, whether it was an intentional reference to the movie "Se7en". If it was, it seems like a missed opportunity in the video.

<comment><USER10> The actual joke was the reference to Prince -- the only artist to consistently refuse Al's requests to parody his music.

<comment><USER11> Yes but not the point of parent comment.

</comment></comment></comment><comment><USER11> > The result of 500 hours of work in After Effects, Photoshop, Illustrator and > Premiere goes by in 3 minutes, 44 seconds.

1000:1 ratio of input to output.

</comment><comment><AUTHOR> Jarrett Heather is the artist behind Weird Al's "Word Crimes" video released in 2014 (at 48.4 million views now).

Word Crimes: [https://www.youtube.com/watch?v=8Gv0H-vPoDc](https://www.youtube.com/watch?v=8Gv0H-vPoDc)

"Word Crimes" is Weird Al's spot-on parody of Robin Thicke's "Blurred Lines" with T.I. and Pharrell Williams. I think Weird Al's version is better and more educational than the original -- smart and catchy like a modern Schoolhouse Rock.

Blurred Lines: [https://www.youtube.com/watch?v=yyDUC1LUXSU](https://www.youtube.com/watch?v=yyDUC1LUXSU)

Weird Al contacted Jarrett Heather after being impressed by "Shop Vac", his previous work with kinetic text (typographic animation), which he made using animation tools like AfterEffects.

Shop Vac: [https://www.youtube.com/watch?v=y4sOfO8Ei1g](https://www.youtube.com/watch?v=y4sOfO8Ei1g)

This page on Jarrett Heather's web site tells the story and shows the art and technology behind the "Word Crimes" video. He's also published the Animatic storyboard-in-motion that took about 100 hours, to Weird Al's original home- made demo of the song! It's fascinating to compare them, and see how their ideas evolved from storyboard to final video.

Jarrett Heather presents: Word Crimes: [https://jarrettheather.com/wordcrimes/](https://jarrettheather.com/wordcrimes/)

>The Completed Music Video: In November 2013, "Weird Al" Yankovic asked me to direct an animated video for "Word Crimes", a parody of Robin Thicke's "Blurred Lines" about the supposed abuse of proper language.

>The result of 500 hours of work in After Effects, Photoshop, Illustrator and Premiere goes by in 3 minutes, 44 seconds. I hope you find each one of them entertaining.

The Animatic: [https://vimeo.com/102959171](https://vimeo.com/102959171)

>This storyboard-in-motion took about 100 hours. Al signed off on this design on January 25th, 2014, only 3 weeks after he gave me his homemade "demo" for Word Crimes, which you can hear on the animatic soundtrack.

>If you watch very closely, you might notice a gag or two that didn't make it through to final animation or some very subtle changes in the lyrics.

Jarrett originally designed the Live Journal logo back in 2000 or so, and parodied it in the video, with a broken pencil tip.

[https://jarrett.livejournal.com/208198.html](https://jarrett.livejournal.com/208198.html)

Here's a great "Local Boy Makes Good" article and TV interview about Jarrett Heather from around the time the video came out, that was previously posted to HN -- I love his down-to-earth advice:

Elk Grove animator thrives as 'Weird Al' Yankovic's partner in 'Word Crimes':

[https://web.archive.org/web/20140725043615/https://www.sacbe...](https://web.archive.org/web/20140725043615/https://www.sacbee.com/2014/07/17/6564802/elk- grove-animator-captures-spotlight.html)

Common Ground - Jarrett Heather "Word Crimes" Music Video Artist

[https://vimeo.com/103615214](https://vimeo.com/103615214)

>"If I did fail, it would have been Al's fault for hiring a software developer to make a cartoon."

>Word Crimes is 244 seconds long. Each second took two hours at the computer. 500 hours work, in all.

>"Yeah, no classes, just, you know. I think people really underestimate the value of just sitting down and reading the manual."

<comment><USER2> Thank you for the kind words, Don.

<comment><AUTHOR> I'm delighted your stopped by! Thanks to you and Weird Al for all of your dastardly animated criminal words.

Your Shop Vac cartoon led me to discover Jonathan Coulton's other geeky music, like Code Monkey! He makes his songs available via the Creative Commons license, so people have made some really cool videos to them, including yours.

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

[https://www.jonathancoulton.com/](https://www.jonathancoulton.com/)

Shop Vac:

[https://www.youtube.com/watch?v=y4sOfO8Ei1g](https://www.youtube.com/watch?v=y4sOfO8Ei1g)

Code Monkey videos:

[https://www.youtube.com/watch?v=v4Wy7gRGgeA](https://www.youtube.com/watch?v=v4Wy7gRGgeA)

>Jonathan Coulton is a singer/songwriter who releases his songs via the Creative Commons license, which enables projects such as this video. Through his "Thing A Week" podcast, Jonathan has put out a clever, creative song like this one every week for a year.

>Mike Spiff Booth is a Program Manager at Adobe who though this great song really deserved a video.

>Before you ask, since apes, goblins, and night elf receptionists don't tend to interact much in the wild, I couldn't only use captured game footage to make this video. Every frame of this video was composited together by hand using images captured from the WoW Model Viewer, WoW Map Viewer, and the World of Warcraft game itself.

>No monkeys were harmed in the making of this film.

>Please visit www.spiffworld.com for more information about my videos, including info about how I make them.

>The song at the end of the video is "Big Bad World One", another great Jonathan Coulton song.

[https://www.youtube.com/watch?v=qYodWEKCuGg](https://www.youtube.com/watch?v=qYodWEKCuGg)

>This was an animation that was done in about 2 1/2 weeks. My friend Tom Weiser and I wanted to put together a short for a free ASIFA event. We are both fans of Jonathan Coulton so we figured a music video would be fun. I know Code Monkey already has a lot of videos made of it, but having worked as a web design/developer for the government...well how could I not?! I hope everyone enjoys it.

[https://www.youtube.com/watch?v=5W_wd9Qf0IE](https://www.youtube.com/watch?v=5W_wd9Qf0IE)

>This AMV features the song Code Monkey by Jonathan Coulton, using footage from the anime Black Heaven.

[https://www.youtube.com/watch?v=kWrjYdD0Tg0](https://www.youtube.com/watch?v=kWrjYdD0Tg0)

>Code Monkey Jonathan Coulton Lyrics Kinetic Typography (shorter version). Thanks to Jonathan Coulton for releasing his music under the creative commons license!

[https://www.youtube.com/watch?v=j4TnhemCEmc](https://www.youtube.com/watch?v=j4TnhemCEmc)

>Jonathan Coulton in LA -10-Codemonkey

>Tenth song- Code Monkey. Recorded live at Temple Bar Santa Monica CA. October 9 2006. Code monkey like this song. MP3s of this performance graciously made available at spiffworld.com. Check out his amazing JoCo/WoW videos too.

[https://www.youtube.com/watch?v=RUbp_d2DkYU](https://www.youtube.com/watch?v=RUbp_d2DkYU)

>Jonathan Coulton re-recorded Code Monkey for Slashdot's 15th Birthday

>Rob Malda: I was stunned when this arrived in my inbox from JoCo... a huge thanks to him for the song, and of course Happy Birthday Slashdot.

</comment></comment></comment><comment><USER12> I just shared the video with my children who are studying film and animation, it was just great

</comment><comment><USER13> I remember going through my insufferable 14 year old phase where I thought that video was the shit. Now I will gladly deck anyone who thinks it's good.

<comment><USER14> Scorn can feel more mature than enthusiasm to a young person, but if you're lucky that's just a phase too.

<comment><USER13> Given that the video is entirely scornful prescriptivism, I'm glad to be scornful over anyone who likes it.

<comment><AUTHOR> It's like spitting on a fish.

[https://www.youtube.com/watch?v=SMhwddNQSWQ](https://www.youtube.com/watch?v=SMhwddNQSWQ)</comment></comment></comment></comment>


Posterous (YC S08) launches dead simple group blogs, raises angel round - <AUTHOR> http://www.techcrunch.com/2008/12/22/dead-simple-posterous-gets-a-round-of-funding-and-launches-group-blogs/

<comment><USER2> How big of a deal is to raise money from a few angel investors vs. a single VC? If you get one angel investor, do they pull in a few of their friends that usually invest with them?

<comment><AUTHOR> YC startups in general are more well suited for angel rounds than Series A. Angel rounds usually mean less dilution and a ton more flexibility. For us, we're getting a lot more valuable advice, connections and help from real engineers/entrepreneurs/founders who have built lasting companies before.

You talk to as many investors as you can, get a lead angel investor to negotiate terms, then build the round out with other angels who want to invest. Your lead angel(s) will help you find more people as well.

<comment><USER2> I agree with you on the merits; and the connections & advice from many people who have been there, done that -- trumps the other options.

Can you expand a bit more on the flexibility part either here or offline? Did you also consider VC's such as Founders Fund, First Round Capital, Maples, Union Square, etc?

Thanks, and good luck!

<comment><AUTHOR> Definitely, feel free to follow up offline, my contact is in my profile.

</comment></comment></comment></comment><comment><USER3> Awesome. Why is there a limit of 3 blogs per account though?

Also, is there a way to merge two existing accounts (I signed up under different emails so that I could create more than one posterous blog)?

<comment><AUTHOR> We'll be adding ways of getting more than 3 soon, and we'll also roll out an automated way of merging.

We could have waited, but this release was so huge and really one shipped feature is worth two in the Git repo. =)

EDIT: Here's the workaround for now. Just add your other email addresses as contributors. You'll be able to post using both accounts.

<comment><USER3> "One shipped feature is worth two in the Git repo"

Damn straight, couldn't agree more. Thanks for the dynamism :-)

</comment></comment></comment><comment><USER4> Are you guys doing anything to prevent people from forging email headers? It just occurred to me that forging a "from" header is pretty easy, which might allow you to post to someone else's blog...?

<comment><USER5> There is a section on that in their FAQ. If they see one of the telltale signs of a spoof they send you a confirmation email asking if you really posted. Sounds effective to me.

</comment></comment><comment><USER6> How to make a Tumblr account a group blog:

1\. Send all the people who you want to join your unique Tumblr account email address (i.e. email@example.com)

2\. That's it. :)

</comment><comment><USER7> Well done Garry and Sachin. I was always super impressed with how well you guys execute. Congratulations!

<comment><USER8> Thanks! Wait... oh. Sorry.

</comment></comment><comment><USER9> expected. congrat!

</comment><comment><USER10> Congrats guys. That's a large angel round, and the list looks like good people too.

</comment><comment><USER11> Hooray! Now I can be more vocal about new features :) .... twitter integration?

<comment><AUTHOR> We support it through autopost right now. Lots of people use it today just for autoposting to that plus Facebook, Flickr and most major blog platforms.

</comment></comment><comment><USER12> Really great product - well done guys!

</comment><comment><USER13> well played and congrats! loving all the success stories coming out of YC. keep up the solid work.

</comment><comment><USER14> congrats, posterous!

</comment><comment><USER15> congrats sir!</comment>


Ford Fusion Hybrid Is Rated at 41 M.P.G - <AUTHOR> http://wheels.blogs.nytimes.com/2008/12/23/ford-fusion-hybrid-is-rated-at-41-mpg/ <comment><USER2> Its about time that the American auto industry started catching up to what the foreign companies have been doing. I still don't plan on buying an American car, but it is a step in the right direction.

</comment><comment><USER3> 41 miles per gallon is still terrible - even allowing for the small size of the US gallon. Ford do rather better with the cars they sell in Europe - as do the European manufacturers.

<comment><USER4> _41 miles per gallon is still terrible ... Ford do rather better with the cars they sell in Europe_

We don't have to wonder why.

European countries tend to have lax safety and smog-emission standards. If America had those same lax standards, ceteris peribus, fuel economy would be higher there.

European countries also tend to have higher fuel prices. If America had those same high fuel prices, ceteris peribus, consumers there would select vehicles with higher fuel economy.</comment></comment>


Why I recommend Flatiron School - <AUTHOR> https://medium.com/@turingschool/why-i-recommend-flatiron-school-c4695a7894b4 <comment><USER2> See related discussion of the NY Attorney General's press release: [https://news.ycombinator.com/item?id=15490598](https://news.ycombinator.com/item?id=15490598)</comment>


President Obama Claims He Cannot Pardon Snowden; He's Wrong - <AUTHOR> https://www.techdirt.com/articles/20161118/17160636087/president-obama-claims-he-cannot-pardon-snowden-hes-wrong.shtml <comment><USER2> More hand waving. Pardon this patriot.

</comment><comment><USER3> Whether Snowden receives a pardon or not, it's worth reviewing the following two questions:

1) Would the intelligence community have policed itself otherwise? Probably not, intel agencies prefer gathering more data over less.

2) Would Congress have changed its oversight posture otherwise? Probably not, as intel agencies do as much as possible to withold info from oversight committees, including lying; and the public would have remained in the dark, so no pressure from that quarter.

</comment><comment><USER4> Yes, he is wrong for values of "cannot" meaning "not being legislatively capable".

But, you know, why should Obama be motivated to tell the truth when the public has elected an egregious liar to replace him?

And anyway, the America that wants Snowden pardoned isn't that one that elected Trump.

<comment><USER5> I don't see why "trump was elected" would be a reason to not pardon Snowden.

Like, accepting the claim "Trump is an egregious liar" I don't see how that follows.

Trump is terrible and apparently unwilling to do the thing that ought to be done (the pardon), and therefore, ???

That seems like a reason to make the pardon when he still can, not like a reason to not do the pardon.

Can you explain your reasoning?

</comment></comment><comment><USER6> I think the answer Obama gave had some merit to it. If Obama pardoned people left and right, trump would start doing the same. If presidents started behaving above the law it could get dirty very fast.

<comment><USER7> I am sorry but Obama does not mention any of that. He argues that intelligence is needed and that there is nothing you can do about it.

Anyways, I wonder why he still keeps with the story that Mr. Snowden should have contacted his superiors first before going public. We all know what would have happened in that case (i.e nothing); why does he answer like we are stupid?

<comment><USER8> Yes but then he left to Russia and promptly gave them all the intelligence he'd collected. Most had nothing to do with what he'd whistle blew on. If you dump everything you can gather and give it to another nation you're going to have a hard time getting a pardon.

<comment><USER9> [citation needed]

Snowden never intended to go to Russia (it's the fault of the US that that happened). And as far as I know there's no proof that he revealed anything to the Russian government. In fact, he claims to no longer have the documents (he deleted them after giving them to journalists).

</comment></comment></comment></comment><comment><USER10> Expect Obama to forget about this when it comes to pardoning HRC.</comment>


If you want to build something great, it shouldn't matter where you live. - <AUTHOR> http://blog.mexican.vc/if-you-want-to-build-something-great-it-shoul

<comment><USER2> Shouldn't, or doesn't? Because in many if not most fields, great work has not been randomly distributed. There are almost always geographic clusters. If you want to do great work, it really helps to be around other people working on similar things. The hard part is not infrastructure but community. (Which is why we've always paid a lot of attention to community at YC.)

<comment><USER3> Paul, even though you're more experienced than most of us when it comes to building and maintaining entrepreneurial ecosystems, I do feel that the community part of this equation can be accomplished regardless of geographic issues.

For me, the great thing about the web is that it is geographically agnostic. This allows for building great businesses and communities without the need of geographical proximity. Meeting other like-minded individuals physically is great, sure, but the inability to do so shouldn't be an obstacle that hinders working with them and accomplishing great things together imho.

<comment><USER4> _For me, the great thing about the web is that it is geographically agnostic._

I haven't found that to be entirely true for me as an individual. The closest online friendships I have had typically involved a lot of live chat of some sort -- exchanges basically in real time when we are both online at the same time (whether via a chat system or ongoing email exchange or some such). When I moved from West Coast to East Coast, this damaged some relationships. Moving from night-shift to day-shift had a similar impact. I'm prone to insomnia and have had quite a few relationships with people in distant lands who happened to be online at the same time I was when I was up during night. When I start sleeping better again, it can be hard on the relationship. So while where I live is not the only thing which impacts this, it does have an impact.

I don't think it's just me. I've known a couple of Americans who worked with people in India who either kept odd hours to facilitate that (an entrepreneur/consultant) or routinely had their regular sleep schedule interrupted by middle-of-the-night calls (supervisor at a big company with a team in India).

</comment></comment></comment><comment><USER5> "The infrastructure required to launch new, global enterprises is getting cheaper by the day, and the rate these companies can grow has skyrocketed."

That's true, but I think the bottleneck for non-US startups is still access to customer use-cases, problems and painpoints and a advanced enough market that will take solutions. That and the capital to build the solution.

For example, where I live we have branches of MS, SAP, Morgan Stanley, etc. but they don't have the power to make tech decisions, those are made at home in the US. So I can't really sell them anything. So in less developed markets here in E.Europe, consumers and SMBs tend to be poor, multis are only local branches, so everyone tries to milk the government or large monopolistic organizations like the energy or telecom sectors (which used to be gov't).

<comment><USER6> "..consumers and SMBs tend to be poor, multis are only local branches, so everyone tries to milk the government"

That's exactly the same problem with latam. But Mexico has a geographical advantage, we're a short flight from USA and we tend to share their tech culture in virtue of being so close to them and having a lot of their companies around here.

All of this while keeping the operating costs at a fraction.

</comment></comment><comment><USER7> Hi HN, this is a brief blog post collaboratively written by the Mexican.VC team. We intend to increase awareness in our space that access to market opportunities is ubiquitous. Therefore we should be paying more attention to founders working on startups outside SV or in a broader sense, the US. We would appreciate your feedback.

</comment><comment><USER6> It really shouldn't, building a kick ass product is anything that matters. But certainly being based at the core of the biggest market helps.

I'm curious on how american investors look at the outside market. If a big name like Spotify comes looking for founding, they will get it. But what about accelerator-level startups? would you invest on them even if they're not based on SV?

</comment><comment><USER8> In today environment, great companies you be able to happen any where in the world.

Ideas are transformed by people that share a common vison and provide different actions. With skype, a shared blackboard and leadership a team can be assembled in the a matter of minutes. If you are building a software product it can be developed in pieces that are uploaded into a server and with the right social marketing campanign you can put it available to customers.

We really find great projects that are built with great value from a complete distribuited team.

It is tru that the Silicon Valley hacker culture is a great drive, but having a bridge to fill the gap and reach the knowledge great companies can take advantage of the hackers culture and spread the development with great people seating in Mexico, China or Australia without any restriction.

This condition is allowing to have great companies all around the world, may be with a little help fromo somebody seating in the Silicon Valley

</comment><comment><USER9> If it shouldn't matter where you live, why is mexican.vc in silicon valley?

<comment><USER10> Similarly, why do you have to be living in Mexico to apply?

<comment><USER11> Exacto. I'm very excited about their program and totally supportive, but I just left a light-hearted comment/jab about the paradoxical geographical requirement in light of this blog post :D

</comment></comment></comment><comment><USER12> One of the biggest problems to create something with an outside team is the culture, maybe they just don't understand the importance of X or Y aspect you are trying to explain, but in the specific case of Mexico this breach is almost non-existent due the proximity of the two nations.

</comment><comment><USER13> If you build something great, it doesn't matter where you live.

<comment><USER14> The trick is to build something great. By great, I mean something that is seen as great by customers. Unfortunately, for numerous reasons, it is much harder to build something great if you are far from from your customers.

</comment></comment><comment><USER15> This ought to be testable. YC has spawned maybe dozens of imitators and many cities now have deliberately-formed startup ecosystems.

If geography plays no part, then on a per-startup basis, basing in Silicon Valley should not provide a statistically measurable advantage.</comment>


New laser network between NYSE and NASDAQ - <AUTHOR> http://www.extremetech.com/extreme/176551-new-laser-network-between-nyse-and-nasdaq-will-allow-high-frequency-traders-to-make-even-more-money

<comment><AUTHOR> Story is a year old but as of yesterday this new laser device has been added to the primary microwave relay tower at the NYSE: [http://i.imgur.com/Jm0YO82.jpg](http://i.imgur.com/Jm0YO82.jpg)</comment>


How to REALLY Avoid Living a Life of Quiet Desperation - <AUTHOR> http://www.artofmanliness.com/2017/03/20/really-avoid-living-life-quiet-desperation/ <comment><USER2> Sorry but had to stop reading when the author assumed without question that the idea of a man taking a picture of himself on a private jet with women he presumedly bought and thinking objectifying and showing them off as auxiliary objects along with the other items he obtained through some form of wealth was "incongruous" with a quiet life of desperation. I know men like this and they are some of the most insecure and miserable men I know.

Alot of it has to do with the fact that when you view women as objects you can buy and auxiliary items to throw into a picture for decoration on top, it can be very difficult for men like this to actually engage with an intelligent woman or have a meaningful intimate relationship. If that doesn't sound like a life of quiet desperation, I really don't know what does.

<comment><USER3> I read this example as being a stereotypical shallow "aspiration" that is packaged up and sold as being fulfilling in modern culture. The author even points this out:

> Anyone with even a pretty cursory understanding of Thoreau's life and > philosophy knows that such a hedonistic, materialistic, jet-setting > lifestyle isn't exactly what he had in mind with that line.

Given that the article follows up with analysis and praise of Thoreau's approach to finding joy in the day-to-day and taking new, more curious and imaginative perspectives on our everyday surroundings, I hardly think the author is propping up this initial stereotypical example as being a positive role model.

<comment><USER2> actually, per the first paragraph he specifically says he thinks the depiction is incongruous with the quiet life of desperation and the relationship between the two is completely lost on him. Read it again.

<comment><USER3> I think your interpretation is very much your own - I'm not seeing anything that suggests that the author considers such a lifestyle to be positive or a symbol of true happiness.</comment></comment></comment></comment>


Jeff Bezos on the California Gold Rush and the Golden Age of Appliances (2003) - <AUTHOR> https://www.youtube.com/watch?v=vMKNUylmanQ <comment><AUTHOR> For some reason I had never seen this talk until recently, but it's one of the best business/technology presentations I've ever seen, filled with fascinating and insightful points about history, with lots of great details.</comment>


How ICE Picks Its Targets in the Surveillance Age - <AUTHOR> https://www.nytimes.com/2019/10/02/magazine/ice-surveillance-deportation.html <comment><USER2> I found this article to be fascinating.

I loved how the big bad bogeymen we all know (Palantir, Facebook) are mentioned a few times (Google is never even mentioned), but the anonymous organizations that many of us would never give a second thought to- Thomson- Reuters, the DMV, court records, and a bewildering variety of smaller data brokers like Appriss Safety, Vigilant Solutions, R.L. Polk etc. - are the real threats. Reverse engineering how ERO agents found and identified their targets like this is really important for showing how minimal our privacy really is.

<comment><USER3> > I loved how the big bad bogeymen we all know (Palantir, Facebook) are > mentioned a few times (Google is never even mentioned), but the anonymous > organizations that many of us would never give a second thought to- Thomson- > Reuters, the DMV, court records

Outside the HN bubble, Palantir is _far_ less recognized as a intrusive entity from which security services might get your private info than the DMV, court records (and other already-part-of-the-government entities/processes) are...

Heck Palantir is much less recognized as even a thing that exists than those other things are recognized as threats.

<comment><USER2> Google News for top articles on Palantir shows many about some sort of IPO/fundraising round, but also:

[https://www.businessinsider.com/activist-group-targets- palan...](https://www.businessinsider.com/activist-group-targets-palantir- over-controversial-ice-raid-2019-10)

[https://www.forbes.com/sites/michaelposner/2019/09/12/what-c...](https://www.forbes.com/sites/michaelposner/2019/09/12/what- companies-can-learn-from-palantir/#5a2748c216e0)

[https://www.vox.com/recode/2019/9/26/20884182/palantir- ice-p...](https://www.vox.com/recode/2019/9/26/20884182/palantir-ice-protests- campus-family-separation-berkeley-yale-brown)

[https://www.businessinsider.com/mit-stanford-students- palant...](https://www.businessinsider.com/mit-stanford-students-palantir- letter-ice-contracts-2019-9)

[https://www.dukechronicle.com/article/2019/09/duke- universit...](https://www.dukechronicle.com/article/2019/09/duke-university- ethics-in-tech-ice-drop-palantir-abolish-ice-5d912160ae4d6)

That wasn't searching for "Palantir ICE", that was a straight google news for just Palantir, and the first 20-odd hits had 5 specifically about the companies relationship to ICE. No other customer mentioned, it's all IPO and ICE.</comment></comment></comment>


Reddit's Future Is the Future of the Internet - <AUTHOR> http://www.wired.com/2015/07/reddits-future-future-internet/

<comment><USER2> "you know it when you see it"

This is exactly what officials said when they were banning porn due to it being "offensive".

The problem I have is that many communities use this to stifle free speech and push a narrative rather than actually help the community.

For example, if I say I dislike gay marriage in a discussion, will this be considered 'offensive'? How about if I say I don't like Christians?

I will be waiting to see which types of speech they deem offensive and which types they don't.

The real reason they are doing this is because advertisers won't go near it.

<comment><AUTHOR> >For example, if I say I dislike gay marriage in a discussion, will this be considered 'offensive'? How about if I say I don't like Christians?

Because that's totally comparable to /r/coontown, which is what we're actually talking about here.

I note spez's change of tune over the years: [https://np.reddit.com/r/reddit.com/comments/6m87a/can_we_ban...](https://np.reddit.com/r/reddit.com/comments/6m87a/can_we_ban_this_extremely_racist_asshole/c0497kd)

It's almost as if the "free speech means no moderation" ideology was only developed as an excuse to justify not spending money and effort on developing usable moderation tools!</comment></comment>


Confirming Consensus on removing RSA key Transport from TLS 1.3 - <AUTHOR> http://www.ietf.org/mail-archive/web/tls/current/msg12266.html

<comment><USER2> No, you won't need new certificates.

This is great news. The RSA handshake is a relic of the 1990s. It predates forward-secret key exchange. RSA is discernibly weakening over time (1024 bit keys are almost universally believed to be within the practical reach of governments), and the RSA handshake puts all the weight of securing TLS on RSA. Because it uses RSA to encrypt and not just to sign, the TLS RSA handshake also adds significant complexity to the spec; for instance, we're all just living with the fact that TLS uses PKCS1v15 padding and is vulnerable to Bleichenbacher's oracle, and just sort of hoping nobody figures out a way to operationalize the attack. But just a few weeks ago researchers found a way to do exactly that to JSSE.

Good riddance. A protocol competently designed in 2014 would not work the way SSL 2.0 did.

</comment><comment><USER3> What is proposed for removal is using RSA as a key encapsulation mechanism. The reasons are:

a) you don't get forward secrecy,

b) the details of the way it works are just wrong, have been broken several times in the past, and killing it outright is thought preferable to replacing it with something which works, and

c) some deployments do both signing and encryption with the same RSA key, which is terribly dangerous.

d) it requires the holder of the high value certified keys to keep them online, and use them for every handshake. (edit: this is incorrect, see below)

RSA will still be usable with TLS, in the role of long term authenticity keys. For example, my connection to HN now is using ECDHE_RSA. That won't go away.

<comment><USER4> > c) some deployments do both signing and encryption with the same RSA key, > which is terribly dangerous.

I think that just switching to DHE creates its own set of very dangerous problems.

When using RSA the same secret key will be used for all connections. This is a bad idea in case there is a chance the key gets eventually leaked, then you'll be able to decrypt all past communications. But as long as you create and use a sufficiently long key pair, and make sure nobody ever has access to it, communication will be pretty secure.

With DHE the problem is you have to create a new key per connection. This requires high-quality randomness (sufficient entropy) all the time. Now if randomness is just compromised one time, the attacker will be able to decrypt one communication session. You may say, no problem, it's just one session, secrecy will be reestablished the next session. However, compromising a single session is often as worse as compromising all sessions. A single session will give you access to session cookies, maybe to a user's password. It may allow you to inject malicious code and permanently back-door a victim's system.

Since the Dual_EC_DRBG disaster we saw how vulnerable "randomness" can be. Also attacks on a random number generator cannot be detected at all, if done correctly.

There are other caveats: With everybody going for ephemeral keys, people may think, less bits will be just safe enough, as it's just an "ephemeral" key. That's currently the problem with the apache shipped with most older Linux distros: DHE is hard-coded to merely use 1024-bit keys.

Also there may be attacks that work more efficiently if you have many session keys to break: i.e. if breaking a single key takes time N, breaking one out of M keys may just take M/N time. So getting a single session of a user and backdoor'ing his system may actually get easier with ephemeral keys.

Not saying that I'm opposed, but these kind of blunt decisions won't make me feel more secure.

<comment><USER5> 1\. If the RNG that you use for generating the one static RSA key is broken, you aren't secure either.

2\. RSA key transport also transports a(n ephemeral) session key that is used for symmetric encryption and authentication of the payload and that can be used to compromise the connection if it can be predicted.

3\. In a way, encrypting the session data is also done by generating an ephemeral "key" for each byte/block using the symmetric cipher as a CSPRNG (moreso with stream ciphers/modes than with "real" block modes), but you most certainly would not want to use that as an argument for using ECB in TLS.

4\. Such blunt decisions have been long overdue. Complexity is a huge risk, it's about time we get rid of some of the cruft that makes systems vulnerable.

</comment></comment></comment><comment><USER6> Don't almost all installations use RSA? Am I missing something?

<comment><USER2> They're jettisoning the RSA _key transport_ handshake; that is, the part of the protocol where a client generates a session secret all by themselves, encrypts it with the server's RSA key, and sends the RSA-encrypted blob to the server.

The forward-secret handshake uses Diffie Hellman (or, more commonly, ECDH) so that both sides of the connection cooperate to derive the session secret. RSA is still used in the forward-secret handshake, but only to sign the DH handshake, to protect it from MITM attackers.</comment></comment>


New Optimizations Improve Deep Learning Frameworks for CPUs - <AUTHOR> https://www.nextplatform.com/2017/10/13/new-optimizations-improve-deep-learning-frameworks-cpus/ <comment><USER2> This seems like a good study in how to present misleading benchmark numbers.

They have a 72x improvement, great! So, first start with a really crappy baseline not tuned for your high end 68 core machine - which runs slower than the 22 core machine so that you have a tonne of space to improve.

Then pump up the batch size to 2048 images per batch because it's an easy know to twiddle that has nothing to do with the implementation speed and you don't really care about the actual model accuracy and you just want to prove how fast you can make this. (I'm ignoring the recent work on making large batch training work, but the larger point is that batch size is a model hyperparameter that influences more than just speed)

And then ignore the fact that it's performance per $ that people care about, not pure speed.

<comment><USER3> Benchmarksmanship at its finest...

</comment></comment><comment><USER4> What a bad, outdated article. I don't understand how articles from this website keep appearing on the first page here, they are usually badly researched puff pieces.

Aside from the nonsensical performance numbers:

Theano, Neon, Torch, really?

No mention of PyTorch, Theano actually being discontinued..

</comment><comment><USER5> And the least expensive Intel Xeon SP Platinum you can buy is ~$3000. No wonder why there's not a head-to-head benchmark on a cost basis, e.g. epochs/min per $.

</comment><comment><USER6> This seemed like an Intel ad.

<comment><USER7> And a badly written one at that. It stinks of trying to make Intel look good, emphasis on trying.

</comment></comment><comment><USER8> > About the Author: ...Reinders was most recently the parallel programming > model architect for Intel's HPC business...

</comment><comment><USER9> Is Wave Computing shipping yet?</comment>


Spatial: A High Level Programming Language for FPGAs - <AUTHOR> https://spatial-lang.org/ <comment><USER2> An alternative to this in python would be MyHDL: [http://www.myhdl.org](http://www.myhdl.org), which has a less verbose syntax and allows you to use the python scientific stack in testbenches.

Spatial seems to have a HAL though (called the fringe), to handle platform specific details like hardware interfacing, including things like DRAM, which could otherwise be very complex.

<comment><USER3> It is interesting that I haven't seen a reference to CλaSH [1] as well: it is Haskell for FPGA and it has quite interesting results, as well as research work on it.

[1]: [http://www.clash-lang.org/](http://www.clash-lang.org/)

</comment></comment><comment><USER4> If anyone wants to jump straight to the code: [https://spatial-lang.org/hello- spatial/](https://spatial-lang.org/hello-spatial/)

</comment><comment><USER5> Does anyone want to work on a VHDL/Verilog parser for a mixed language (delta time) simulator?

FOSS needs that more than it needs yet another "high level" language with no industry uptake.

<comment><USER6> Yes, I want to work on that. I agree with you 100% that this is what the world needs. GNU succeeded by replacing commercial tools, not inventing new languages or paradigms. There is a ton of existing, legacy Verilog and VHDL code out there being used in current designs and nobody is going to switch to Free tools unless those tools support that legacy code.

<comment><USER5> Ok, let's get started. We need an abstract simulator front end, and to be able to connect that simulator front end to both Verilog and VHDL - almost like a simulator IR language, and have that language cover productions from both VHDL and Verilog. There's some recent Verilator optimazations to look at, but all that stuff comes later. V0.0 should probably just have a simple message pump for delta cycle emissions. I'll start seeing if I can gather some literature on this.

<comment><USER7> Are you going to track the progress somewhere? I'm interested in helping

</comment></comment></comment></comment><comment><USER8> When I click on tutorial, I get a 404 page. Not good. So no info to provide feedback.

<comment><USER9> Links in the tutorial menu work.

</comment></comment><comment><USER10> I find a setup guide, but no code examples whatsoever. Am I missing something?

<comment> ur-whale It seems to be fairly standard on programming language websites that you must dig around in the site for 10mn before you can actually see a chunk of code written in the language itself.

</comment></comment><comment><USER11> First Impression: Looks like a way to turn high-level code (Scala, Java) into low-level FPGA gates / ASIC silicon. If that works for all types of high-level programs, it's absolutely brilliant. If not, it's still a great idea. I wish them much success in the future! (Looking forward to something like Any Language -> LLVM -> FPGA / ASIC...) This is a good step in that direction.

<comment><USER12> Any Language -> LLVM -> FPGA / ASIC

This is much closer than you think. I am aware of quite a few parties embarking on this. LLVM is the common denominator.

<comment><USER13> Well the Intel OpenCL compiler already does LLVM-> FPGA.

</comment></comment></comment><comment><USER14> So this is a level above Chisel [0] seeing that it can emit Chisel as output?

[0] [https://chisel.eecs.berkeley.edu/](https://chisel.eecs.berkeley.edu/)

</comment><comment><USER15> Kunle olukotun who was one of the people behind this has founded sambanova systems which appears to be pursuing more general purpose accelerators.

</comment><comment><USER16> Off topic question: that binary tree image on their site... wasn't that an X screensaver?

<comment><USER17> *ternary

</comment></comment><comment><USER18> Another good framework for high level synthesis for FPGA is SystemC. I haven't looked into all the details of Spatial, but SystemC is basically a C++ library that lets you write your C++ in a way that can be synthesized for FPGA. Plus, it's a good option if you don't want to learn another language!

<comment> ur-whale Is there a free implementation of SystemC somewhere?

If not, that's pretty much a non-starter for learning.

<comment><USER6> There is a free implementation for simulation, but, as far as I know there is no free implementation for synthesis (compiling to FPGA)

</comment></comment></comment><comment><USER19> BTW what is easiest way to start learning programming FPGAs.

<comment><USER20> There was an Ask HN about this yesterday: [https://news.ycombinator.com/item?id=18323236](https://news.ycombinator.com/item?id=18323236)</comment></comment>