Show HN: Our Vancouver based web agency just launched. We'd love your feedback. - <AUTHOR> http://redstamp.ca

<comment><USER2> This page is proof you can make pretty websites. Sadly, it might also evidence that you may stink at marketing. Its way to busy for me to follow a distinct line, and there is abosolutely no structured copy for me to read. Plus you put the very little copy you have in a carrousel and made it hard to read with some weird color choices.

Now, luckily for you, I'm not your target market ( I think, there is no way for me to know ). Which makes me ask the following question:

Who is your target market? If you answer with _every business in Vancourver who wants/needs a website done_ , then you are taking the wrong route here.

 _Note: I'm not trying to rain on your parade. So dont take it as an insult, but as real feedback from someone who does copywriting/marketing._

<comment><AUTHOR> Thanks for your insight and time.

</comment></comment><comment><USER3> _Dead Links_ : Privacy Policy and TOS link in the footer [1]

 _Landing Page_ : changed on me while I was reading the first slide, suggestion: on hover pause slideshow

 _Contact Form_ : Major pop in due to the form element shifting in place when animating, suggestion: avoid the .toggle and use CSS3 transitions, specifically I would use a _linear 350ms_ transition on the _top_ property and move from -400px to 0px. (fallback to JS animation if the browser doesn't support CSS3 transitions).

 _Seeded Comments_ : Your DISQUS integration has a number of 5 month old "test" comments, suggestion: get rid of those :) [2]

 _Unoptimized Static Assets_ : I know you're using Wordpress, but IMHO it always rubs me the wrong way when marketing sites brag about "dev prowess" and fail to concatenate, minify and optimize CSS, JavaScript and Images; suggestion: do all those things. Also, use ImageOptim and you can compress your site images and net some performance [3]

[1] <http://cl.ly/image/3J3d1F2r0P2f>

[2] <http://cl.ly/image/1q3f1D440H1J>

[3] <http://cl.ly/image/0N3d3H0m2803>

<comment><AUTHOR> I appreciate the time you've spent on your response. We will be using your feedback as we tweak the site tomorrow (especially the stale comments :/).

Thanks

<comment><USER3> You're welcome, good luck with the site and with the new customers! :)

</comment></comment></comment><comment> dylan-m The first thing I noticed was that your header text is part of the same JPEG image that has each background image: [http://redstamp.ca/wp- content/themes/redstamp/images/layout/...](http://redstamp.ca/wp- content/themes/redstamp/images/layout/baner-developmentSlide.jpg). This is especially visible with the red text, which is thoroughly mangled by the compression, but it's just as obvious with the white lettering if you're used to being grouchy about how browsers all render text differently poorly ;)

Speaking as a nerd / web developer, I would of course be delighted if you managed to use @font-face (via Typekit or whatever) with something clever to draw the strikethrough, or an SVG, since that would scale really nicely with high resolution screens and mobile browsers (which use funny DPI numbers). For a simple and widely portable solution, though, please please please just move the text from those images to transparent PNGs. It's making my eyes hurt.

Of course, I'm hoping you fix it because I expect to see more of your website. Good luck! I live here, so Vancouver-based web developers are my favourite :)

<comment><AUTHOR> I do hear what you're saying and I can see how it would improve our site.

Thanks for the feedback.

</comment></comment><comment><USER4> Great looking site, and I love the strike-through approach you used in your marketing copy.

However, I did notice a couple issues:

1\. There seems to be a few problems with the font you are using, as some of the words seem to run into each other, at least on Chrome. Some of the sub- headings on this page are borked, for example: <http://redstamp.ca/design/>

2\. I like the carousel, but found it fairly annoying when it would continue to auto-scroll after I had clicked on one of the Design, Development, or Marketing links. I eventually noticed the pause button, but I think it would be far more intuitive if you automatically paused the auto-scroll when a user clicks one of those links, as with that action they are showing an interest in that particular service, and probably need time to read the content on that carousel panel.

:)

<comment><USER5> Regarding 1, enabling Javascript fixed that for me, Chrome Version 23.0.1271.101 with ScriptSave v220.127.116.11 on OSX 10.7.5.

</comment></comment><comment><USER6> It's a wonderfully designed site; I love how the splash page draws your eyes to where they belong, without being overly obtrusive. One criticism: on <http://redstamp.ca/development/>, you may want to change the menu that changes position as you scroll. Maybe keep it fixed to the top of the screen as you scroll down, but when you scroll up, it should stay in position until it hits the bottom of the screen, and then begin to move up once it's out of the viewable area. When you're at the top of the page, it can move back to its home. That's just a suggestion on top of what's already very nice work.

<comment><AUTHOR> Thanks for your suggestion and wonderful words!

</comment></comment><comment><USER7> Looks like you may be loading three separate instances of modernizr.

[http://cdnjs.cloudflare.com/ajax/libs/modernizr/2.0.4/modern...](http://cdnjs.cloudflare.com/ajax/libs/modernizr/2.0.4/modernizr.min.js)

[http://cdnjs.cloudflare.com/ajax/libs/modernizr/2.0.4/modern...](http://cdnjs.cloudflare.com/ajax/libs/modernizr/2.0.4/modernizr.min.js)

[http://redstamp.ca/wp- content/themes/redstamp/js/modernizr.c...](http://redstamp.ca/wp- content/themes/redstamp/js/modernizr.custom.js)

<comment><AUTHOR> Thanks for catching that.

</comment></comment><comment><USER8> In your contact form, you're using ticks, but you can't choose more than one. This is inconsistent with the way radio buttons usually look.

Would also be good if your Google Map linked to the Google Maps site, rather than just an image.

Might just be me, but I find the two column layout of your blog bizarre to read, especially as the first column doesn't end cleanly before it goes onto the next.

I wonder if the "Contact" is prominent enough (knowing how dumb some potential clients can be...) maybe have it in red too?

<comment><AUTHOR> Thanks for your feedback. I hear what you are saying about the check marks, however it's consistent with the rest of our site and our order forms (<http://redstamp.ca/marketingplanv5/> still very WIP, but might give you an idea of the application).

</comment></comment><comment><USER9> "We're full-service, Vancouver-based, work-proven, and incredibly lovable."

Sounds like an Escort Service.

Am I correct in assuming you're all under 25-years old? Hey, there's nothing wrong with that. But I would suggest a little bit more _gravitas_ for the website.

And the stock photographs make the website look like a travel guide.

Having said that, I think the website is very well done, if somewhat "busy", and I predict you'll soon have more work then you can handle.

<comment><AUTHOR> We do escort old websites into fabulous new ones!

Thanks for the feedback!

</comment></comment><comment><USER10> there is no 'people' or 'about us' link. i can't find a single person's name.

<comment><AUTHOR> That's a consistant feedback we've been getting. We're going to add a new section in the near future.

Thanks for your time.

</comment></comment><comment><USER11> Your contact form doesn't look right for me in Chrome (the "email" and "pm" options are pushed down a line). Also at 1024x768, the page wiggles when I scroll down by dragging the middle mouse button, but the extra horizontal content is just unintentional-looking whitespace.

<comment><AUTHOR> Thanks for the feedback, we're going to do some additional bug checks over the next few days.

</comment></comment><comment><USER12> In chrome, the "Email" label is pushed down, below the checkbox.

<comment><AUTHOR> Thanks for reporting this bug

</comment></comment><comment><USER13> Beautiful! If i still lived in Vancouver I'd come work for ya :) I would however recommend a responsive design considering you do mobile web development.

<comment><AUTHOR> Portions of our site are responsive. We'll be launching a separate mobile presence in the coming weeks. We just felt fully responsive was not the best way to get our message/story across.

Thanks for your time!

</comment></comment><comment><USER14> We're also about to re-launch our website and we have very similar service offerings. Reading the critiques and praises here is helpful for us also :).

</comment><comment><USER15> The carousel at the top rotates too quickly. I didn't have time to read a single complete block of text.

Otherwise the site looks great.

<comment><AUTHOR> That has been a consistent concern in our feedback. We will adjust this shortly.

Thank you!

</comment></comment><comment><USER16> There are quite a few CSS bugs in chrome/windows. You see it a lot with the titles overlapping themselves and with the link hovers.

<comment><AUTHOR> We will be looking further into the chrome/windows issues tomorrow. Thanks!

</comment></comment><comment><USER7> Domain in html title tag is: RedStamp.caredstamp.ca

Could that be your dev domain since it doesn't match production?

<comment><AUTHOR> Great catch! It was actually Yoast SEO plugin forcing the domain name at the end of every title.

We've fixed it - thank you!

</comment></comment><comment><USER17> Typo on 'both' in /marketing/ "To E or not to E ... in btoh direct mail and e-mail campaigns..."

<comment><USER18> Well spotted. Missing period in "[...]campaign We're experts [...]"

Really stunning work on the whole. Full props.

<comment><AUTHOR> Thanks for your kind words and your grammar check. Appreciated and fixed!

</comment></comment></comment><comment><USER19> Always great to see new agencies in Vancouver. Site looks really nice as well.

<comment><AUTHOR> Thank you :)

</comment></comment><comment><USER20> lots of roll-over issues in chrome. Especially in the footer. <http://i49.tinypic.com/35jf6zc.jpg>

good luck in Vancouver, eh.

<comment><AUTHOR> Thanks for the bug shot, and thanks for the wishes :)

</comment></comment><comment><USER21> No mobile version of the site?

<comment><AUTHOR> It's in development right now, and will be ready in about 2 weeks.

Thanks for checking our site out.

</comment></comment><comment><USER22> In your headings, my eyes were immediately drawn to the block letter text. It was only after I processed it and realized that your message _couldn't_ be "we do mundane things" that it occurred to me to re-read it. Then I found the strikeout and scribblings.

You might consider beefing up the strikeout line and using a stencil font with a more fetching shade of red. Perhaps laid _over_ the revoked text.

Or just drop the idea altogether -- I mean, what's the message there? _"We were going to tell you how ordinary we are, but at the last minute we decided we're actually pretty extraordinary after all."_

I would not call that your best foot.

<comment><AUTHOR> Thanks for your honest feedback, I appreciate it.

</comment></comment><comment><USER23> I don't have anything constructive to say, except that if I had to leave New York I would love to live in Vancouver. How hard is it to find talent/clients there?

<comment><AUTHOR> We'd love to have you here :). It's a fairly big city with an upcoming tech scene. I guess we will find out soon enough!</comment></comment>


RxJS is great. So why have I moved on? - <AUTHOR> https://medium.com/@puppybits/rxjs-is-great-so-why-have-i-moved-on-534c513e7af3#.h482688wk <comment><USER2> Discovering and mastering bacon.js/FRP completely changed the way I think about programming. It hugely increased the quality and stability of my code in ways that continue to surprise and amaze me. I cannot recommend it enough, but this article definitely has me curious about ClojureScript.

In the meantime, the biggest issue I've had with bacon is figuring out what are the best practices in organizing the code. One does end up with a lot of streams or variations/combinations on streams used for different purposes. Eventually it does become hard to follow, as the author mentions, though because all state is self-contained you can change any one part with a high degree of confidence that it won't break other features.

Still there must be some ideas out there that don't involve incorporating a full blown framework/SPA architecture. The author of bacon has a blog post on the subject but it seemed to me that there could be better ways still. Anyone have any suggestions?

<comment><USER3> I wrote a 20k LoC bacon app in 2014 and had the same issue with being able to understand all the pieces individually but having trouble comprehending the whole system.

I don't have non-architecture answers for how to organize code since that's pretty much the point of an architecture. Most of the application organization patterns around the React space are only ~200 lines of code and a description of how the pieces fit together. You don't have to adopt the whole thing immediately but you don't get the full benefits of a pattern until everything works the same way.

For my part, I got a job writing clojurescript full time and migrated the app to re-frame [1][2] this year in pieces over the course of a couple months and it's the first frontend architecture that's made me happy in over a decade of continuous searching. The js version is Redux but I think Redux is missing middleware as a concept.

[1] [https://github.com/Day8/re-frame/](https://github.com/Day8/re-frame/) [2] [https://github.com/binaryage/pure-frame](https://github.com/binaryage/pure- frame) <\- Fork with no global atom

What this provides is a complete event cycle of completely pure functions (the state swap happens in the framework) with all the data in an immutable map in a single atom. By namespacing my subscriptions and events I can see a problem, look at the component, and know immediately where my problem is within ~10 lines of code. It's not perfect but it's pretty good.

One thing that doesn't get mentioned often enough when talking about Clojurescript is the potential for doing server-side rendering of the app without having to run node. [3]

[3] [http://yogthos.net/posts/2015-11-24-Serverside- Reagent.html](http://yogthos.net/posts/2015-11-24-Serverside-Reagent.html)

<comment><USER4> > The js version is Redux but I think Redux is missing middleware as a > concept.

Redux totally has middleware (you actually need middleware for async actions).

<comment><USER3> Happy to hear that. I'm not actively using it and I find the the docs are fairly good but written from the implementor's perspective so they tend to bury the lede. I didn't think it had the equvalent of Reagent's reactions until I got towards the bottom of the react-redux page, which was the third or fourth time I looked at the docs. I'm not sure if I just missed it or it got added after I last looked.

<comment><USER4> I started recently, but I find them fairly decent. And there is not much to it, really.

> I didn't think it had the equvalent of Reagent's reactions until I got > towards the bottom of the react-redux page

Is that the subscription mechanism? I have yet to find a use for it...

<comment><USER3> > And there is not much to it, really.

The two use the same model but are organized differently so it throws me off a bit.

Re-frame chooses to hide the actual reduction step so instead of the big switch statement you have a bunch of registered event handlers, which are pure functions take the state and event and return the new state. The middleware is HoF around these so it's done per-handler as well as at the base reducer level, which turns out to be really good for code reuse.

> Is that the subscription mechanism? I have yet to find a use for it...

I think they call it selections. Reactions let you transform a normalized data model into a shape that's useful for the components. They also let you build up chains of reusable calculations/conditions to shift complex conditionals out of the components and into the model code so its co-located with the handlers, which are split up by the part of the app they work with (credentials, search, nav, etc).

<comment><USER4> This sounds like an interesting approach, though I'm not really fan of events (it's easy to see when they fire, but less easy to make sure anything is listening).

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> The Clojure, and ClojureScript, hype train is effective. I've been interested in learning Clojure for several years. Every other week, or so, I'll see a tweet or blog post that makes me want to drop JavaScript and move over to ClojureScript. The community looks like a great one to be part of, from an outsider's perspective. With that said, I've never been able to break beyond that learning curve, or have that "ah hah!" moment. I've been able to learn a lot of different languages over the years, and I so want Clojure to be one of them but it just hasn't happened for me, yet. This blog post puts my issue into words very well, it feels like I'm trying to program in mandarin and I struggle to be efficient at what seem like the most basic of tasks. A script that I could knock out in 20 minutes, with C# or JavaScript, will take me hours or days in Clojure because of the lack of muscle memory or something. My excitement always fades back into thoughts of "meh is it really worth the effort", at which point I usually just revert back to JS. :(

</comment><comment><USER6> RxJS has a steep learning curve and is quite hard to really understand beyond basic examples that fit on a presentation slide. It might be a great tool for really smart developers, but I wouldn't share any large RxJS code in a developer team where all developers are not at least 200% geniuses.

The whole thing reminds me of C++ years ago, where the language allowed for really smart and efficient coding style, but many less skilled developers at the time had problems with deep understanding of templates, operator overloading, multiple inheritance, various constructors and such. Pragmatic companies (e.g. Mozilla) thus decided to ban all the advanced features and stick just to basic ones so that the code would be maintainable.

I think RxJS is facing similar fate. I've spent quite some time learning it and I think it is one of the more complex paradigms on the market today. In addition there isn't much useful documentation. Feel free to check stack overflow and find out about the struggles people are going through tying to extend basic examples (e.g. google for rxjs mousedrag).

</comment><comment><USER7> Building complex things is hard. Every tool breaks down when enough complexity is thrown at it.

The answer is to build less complex things.

</comment><comment><USER8> I don't fully understand the argument against FRP here. It seems like the author has passed on FRP in favor of coroutine-like asynchronous programming. I don't view one as replacement for the other, but as different layers of an asynchronous programming system. Coroutines are great for async and imperative tasks, while FRP is great for async and functional tasks with persistent data. My own FRP implementation [0] in Guile Scheme is built _on top of_ a coroutine implementation [1], which in turn is built on top of Guile's first-class delimited continuations. [2]

That said, the author specifically talks about RxJs and Bacon.js, both of which have two major problems for me:

1) They don't satisfy the closure property. They both have two fundamental data types: event streams and properties. Certain combinators expect streams, and others expect properties. Compare this with API's like Elm's which just have a single type: the signal. The closure property is satisfied here and programming is much more pleasant.

2) They both deal with stream/property life cycles. Objects need to explicitly unsubscribe from other objects, and streams may have a beginning and an end (i.e. they may be marked as having no value or marked as being done producing values). I think this is a mistake that complicates the API. FRP objects should _always_ have a value, have no notion of being done, and not require the equivalent of manual memory management to clean up. My Scheme implementation uses weak references to automatically unsubscribe signals when they are no longer referenced, which is basically only during development when changing things at the REPL. Bacon and RxJS can't do something like this because (and correct me if I'm wrong), no JS standard prior to ES6 has weak data structures. Anyway, after all the hacking, the final program has a static signal graph, just like Elm, which I think is the right way to do things.

[0] [https://git.dthompson.us/sly.git/blob/HEAD:/sly/signal.scm](https://git.dthompson.us/sly.git/blob/HEAD:/sly/signal.scm)

[1] [https://git.dthompson.us/sly.git/blob/HEAD:/sly/coroutine.sc...](https://git.dthompson.us/sly.git/blob/HEAD:/sly/coroutine.scm)

[2] [https://www.gnu.org/software/guile/manual/html_node/Prompts....](https://www.gnu.org/software/guile/manual/html_node/Prompts.html)

<comment><USER9> RxJS will automatically dispose/unsubscribe in composition scenarios: for instance, if you flatMap from one "underlying" observable to a sequence of observables, when you unsubscribe from the "underlying" observable it will observe any remaining (if any) hot observables that were kicked off by the flatMap.

RxJS also automatically disposes resources when an observable _completes_ and maybe that's a part of what you are missing in the observable lifecycle and part of why you've felt that RxJS has an equivalent of "manual memory management"?

Yes, lots of streams are effectively infinite in nature, but that doesn't mean that all of them are, and a completion signal can still be useful and informative, including in lifecycle management. (It also helps keep the duality between Enumerable/Iterator worlds and Observable/Observer worlds.)

One obvious case that I see a lot in applications where finite streams/observables show up in great number is that Promise (Task/Future) is essentially an observable that produces one result and completes.

<comment><USER8> >RxJS will automatically dispose/unsubscribe in composition scenarios

But it still requires manually unsubscribing from something in the first place. I just think that's the wrong approach to FRP. The graphs are actually static, but dynamic behavior is needed for developing at the REPL.

<comment><USER9> Thus far I've only had to manually dispose a single RxJS observable, and that turned out to lead me to a better composition strategy and I got rid of the manual dispose.

If I'm working in a REPL I set things up to "naturally complete" with some useful sample set, just as if I were working with potentially infinite enumerables. In RxJS that would typically be something like myObservable.take(5).

</comment></comment></comment></comment><comment><USER10> Core.async is not a substitute for Rx.

As a disclaimer I'm the author of an Rx-inspired library for Scala [1] and that also works for Scala.js in the browser. Shameless plug aside, Scala also has Future/Promise in its standard library and now due to macros support it got scala/async [2], a library that gives you the "await" keyword in Scala, so in Scala you also get this kind of M:N multithreading that looks like synchronous code. This in addition to Akka and other possibilities.

In other words I've worked with both approaches and Core.async is not comparable with Rx. I do understand the author's woes, as sometimes the Rx model is misapplied, plus it's hard to understand for the unfamiliar.

One of my colleagues was complaining once that " _but I don 't know what the debounce operator does and it's hard for me to read that_". And I told him: _yeah dude, but try implementing the logic in debounce by yourself and see how readable that is_.

And that's exactly why Rx is problematic. On one hand because stream processing is fundamentally hard, no matter what model you choose. And on the other hand Rx comes with a lot of useful operators that do a lot for you, but then you have to learn about them.

For the naysayers, I'll just leave this piece of code with a challenge for implementing it with core.async and compare in terms of readability and note this is a copy paste from actual production code ...

        commands
          .groupBy(w => (w.assetID, w.commandID))
          .mergeMap { gr =>
            gr.timeout(30.seconds, Observable.empty)
              .throttleLast(1.second)
              .distinctUntilChanged
              .echoRepeated(5.seconds)
              .whileBusyBuffer(DropOld(30))
          }

What it does is to split the signals for each asset and command, for each of these it's supposed to sample the signal by 1 second, but in case the same value is repeated over and over again or in case the channel goes silent, then the last value will end up signaled every 5 seconds (reducing the traffic to our OpenTSDB). Finally for each key we close the stream after 30 seconds of inactivity. And then for each such key it does buffering of at most 30 elements and in case the consumers are too slow, then these buffers start dropping older elements on overflow. And then we merge everything back.

I would also show you how we are modeling state machines with the "scan" operator, state machines that are evolved from signals coming from multiple sources, but the sample would be too long. In any case "scan" allows you to use pure functions and data-structures, so you can test your business logic without interactions to third party services, mocks, stubs or whatever.

I have to deal with such code all the time. And I've seen such code implemented in a classic fashion as well. You basically end up with Maps storing stuff and with ifs and whiles and with manual timers in an unholy dance of mutation so hard to understand and debug that it would make grown men cry.

But then such solutions are not silver bullets. Rx, CSP, futures, actors are not silver bullets to be applied everywhere, with all of them having a sweet spot for which they excel. I'm actually using Rx, actors, futures, scala/sync in the same project and it's great.

Also, one last note: Rx is not FRP ;-)

[1] [https://github.com/alexandru/monifu/](https://github.com/alexandru/monifu/)

[2] [https://github.com/scala/async](https://github.com/scala/async)

<comment><USER11> As soon as OP started talking about Go and Clojure and Core.async, I wondered if Scala.js would give him the same sort of benefits in this case as ClojureScript. But I don't know a lot about Scala.js yet and if you can actually run an actor system on the javascript frontend.

<comment><USER10> You can run an actor system in Javascript of course and there are partial ports of Akka available, but are not meant for production use. I wouldn't use Akka in the browser though, as it's too heavy and I feel that the kind of tasks meant for Akka do not happen in the browser, though for Node.js that would be another story.

</comment></comment></comment><comment><USER12> If you feel that RxJS is a bit hard, but don't want to go all crazy and switch to ClojureScript; then Redux is pretty good. It's not as "powerfull" as RxJS and it has some guidelines on how you should structure code. It also have very good tooling integrations, and debug-ability.

</comment><comment><USER13> Once I found flyd [0] I never looked back at any of the other streams libraries. It's very simple, easy to jump into, and doesn't have the stream/property split. There's not a lot of code, so it doesn't make debugging any harder.

Also, there is js-csp [1] if you want to use CSP without having to make the jump to ClojureScript. Works great.

[0] [https://github.com/paldepind/flyd](https://github.com/paldepind/flyd) [1] [https://github.com/ubolonton/js-csp](https://github.com/ubolonton/js-csp)

</comment><comment><USER14> The article mentions that async/await functionality hasn't landed in Javascript yet. I wonder if you can get the same functionality today using scala.js [0] and the scala/async [1] library.

I believe it should work. The scala/async library is just a set of macros that transform blocks of code using async/await into for comprehensions.

[0] [http://www.scala-js.org](http://www.scala-js.org) [1] [https://github.com/scala/async](https://github.com/scala/async)

<comment><USER15> I have been using yortus' async/await library[1] for a simple personal project and honestly it works fine. I don't know if it's "serious/production" ready but it has a extensive README and examples.

[1] [https://github.com/yortus/asyncawait](https://github.com/yortus/asyncawait)

</comment></comment><comment><USER16> What do you think of something like [http://mweststrate.github.io/mobservable/](http://mweststrate.github.io/mobservable/) ?

<comment><USER17> That looks to me, a lot more complicated than it needs to be. I think that has combined two separate things - atoms and cursors. Here they are in javascript:

[https://github.com/cjohansen/js- atom/blob/master/atom.js](https://github.com/cjohansen/js- atom/blob/master/atom.js)

[https://github.com/dustingetz/react- cursor/blob/master/src/C...](https://github.com/dustingetz/react- cursor/blob/master/src/Cursor.js)

Vastly less code than [https://github.com/mweststrate/mobservable/tree/master/src](https://github.com/mweststrate/mobservable/tree/master/src). Cursor+Atom has nothing to do with Rx or core.async, of course, and is probably not the future. (I say this as the maintainer of react-cursor)

<comment><USER18> It looks like react-cursor is 1300 loc [1], mobservable is 1900 [2]. How is that "vastly less code"?

1 - [https://github.com/dustingetz/react- cursor/blob/master/dist/...](https://github.com/dustingetz/react- cursor/blob/master/dist/react-cursor.js) 2 - [https://github.com/mweststrate/mobservable/blob/master/dist/...](https://github.com/mweststrate/mobservable/blob/master/dist/mobservable.js)

<comment><USER17> The essential idea of a cursor can be implemented in about 10 lines, and because I actually looked through the source code of mobservable, I understand what they are essentially doing and how it requires a couple hundred lines. Since we're talking ideas here and not implementations, measuring artifacts is not helpful.

</comment></comment></comment></comment><comment><USER19> My personal experience was that there is not a one-thing-fits-all solution. There are things that can be beautifully implemented with Rx, and there are other things were I found that using Promises (probably in combination with async/await) makes things clearer. My current project (which involes quite a bit of Typescript code) uses everything from Rx, Promises up to plain old node EventEmitters and streams, and I'm actually really happy with all of it.

</comment><comment><USER20> RxJS is not designed to be pull-based which makes it hard to use it for something else than UI code. I hope this will change with RxNext.

<comment><USER21> I just built something using RxJS that is pull-based. The easiest way I found was just to have a timer that calls subject.next(), and the subject calculates its next value and calls this.onNext(value) which pushes to the subscribers.

I was expecting more pull based support.

Is this what you are talking about ? [https://github.com/ReactiveX/RxJS/pull/138](https://github.com/ReactiveX/RxJS/pull/138)

It looks like its already merged in.</comment></comment>


John Carmack: My Steve Jobs Stories - <AUTHOR> https://m.facebook.com/permalink.php?story_fbid=2146412825593223&id=100006735798590 <comment><USER2> John mentioning his NeXT computer in this post reminded me of his NeXT computer purchase story from _Masters of Doom_ :

"On a cold winter day, Carmack laced up his shoes, slipped on his jacket, and headed out into the Madison snow. The town was blanketed in the stuff, cars caked in frost, trees dangling ice. Carmack endured the chill because he had no car; he'd sold the MGB long before. It was easy enough for him to shut out the weather, just like he could, when necessary, shut Tom and Romero's antics out of his mind. He was on a mission.

Carmack stepped into the local bank and requested a cashier's check for $11,000. The money was for a NeXT computer, the latest machine from Steve Jobs, cocreator of Apple. The NeXT, a stealth black cube, surpassed the promise of Jobs's earlier machines by incorporating NeXTSTEP, a powerful system tailor-made for custom software development. The market for PCs and games was exploding, and this was the perfect tool to create more dynamic titles for the increasingly viable gaming platform. It was the ultimate Christmas present for the ultimate in young graphics programmers, Carmack."

<comment><USER3> How many people will spend that money today? I see folks refusing to spend $10/$20 of their own money to get better. It's the weirdest thing. I told someone to spend $100 and run an experiment this past weekend, they looked at me like I lost my mind.

<comment><USER4> Developers outside of the machine learning PHD world don't make that huge an income, especially if you live in a high rent area and are single they tax the heck out of you in california today. Back then people could afford to drop these large amounts on projects because rent was like $125 a month and taxes were very low compared to say modern california. It actually goes to show how an economy that benefits the rentiers has a way of shutting down innovation and experimentation as all resources go to cover the basics.

<comment><USER5> There is a pervasive idea that developer salaries in sf and other tech cities only cover the rents, etc. Not at all true. Thousands and thousands of career developers making great wages. It's not VCs driving real estate prices.

<comment><USER6> It is true, the salaries keep going up and the rent goes up to match it.

<comment><USER7> There's a saying that wage increases are absorbed by landlords.

</comment></comment></comment></comment></comment></comment><comment><USER8> "I did think it was cool to trade a few emails with Steve Jobs."

Funny he should write that. Many, many years ago I wrote an email to John Carmack asking something about his .plan postings which must have seemed fairly mundane looking back on it now. He was nice enough to write me back. And I thought that was pretty cool too.

I guess it just goes to show that even the people you respect or admire have people they respect and admire themselves.

<comment><USER9> Years ago, my friends and I got drunk while celebrating my 20th birthday

As a joke, I emailed Gabe Newell and asked if he'd wish me a happy birthday

Much to my surprise, he actually replied! [https://i.imgur.com/n0BvCPS.png](https://i.imgur.com/n0BvCPS.png)

I can only imagine the amount of garbage he gets in his inbox every day. So to get that email back (on a Sunday for him, as well) was pretty heart warming

<comment><USER10> I once emailed Woz about some trivial question about the old Apple machines. He emailed me right back with an apology about how he was too busy to answer all these kinds of emails and then in the next sentence, answered my question anyway.

<comment><USER11> Different story. I once asked a question to the author of 7-Zip to include it in a software and received in return a link to the FAQ!

</comment></comment></comment></comment><comment><USER12> Rapid switch between charming and aggressive. Creating an environment where you surround yourself with sycophants. Punch downwards at employees working for you to assert and maintain your power while projecting you aspire for "higher standards". Set unrealistic expectations to see which folks will work nights and weekends to your order.

^^ Managers take note. These are excellent traits to climbing the corporate ladder. Just be a dick without looking like a dick.

<comment><USER13> You can only do that if you're Steve Jobs. The chances of someone ever working on a product that's going to define an industry are infinitesimal.

If I got a chance to work on the iPhone in 2006, yeah I might put up with a lot of crap. If all I'm doing is writing yet another software as a service CRUD app and I have an insufferable manager - I'll jump ship so fast it will make their head spin.

On second thought, thier head won't spin, they will put out a rec the day I submit my letter of resignation and forget I existed in three months.

<comment><USER14> > I'll jump ship so fast it will make their head spin.

Sure, you do. Many people don't. There was this thread on Amazon today which tells me people put up with many, many abuses. Fertile ground for others to follow Jobs example.

<comment><USER15> There's a book I remember reading - I can't remember, but it may have been _The Dictator 's Handbook_ \- which talked about how this is a common management pattern in authoritarian dictatorships (although typically somewhat more extreme in its implementation). The dictator ends up weeding out most people of exceptional talent and competence, but it consolidates his personal power. Bad for the state when it faces a crisis, but good for him personally. Easy to see how this applies to senior management at a public company.

<comment><USER16> So why did it work so well for Jobs? Perhaps because in the tech industry, you have a high frequency of the rare combination of incredible talent in a profitable industry combined with social/political non-talent, so people feel stuck where they are, or love their work so much they don't care if they are unfairly treated?

Look at open-source, for example. People with little money, often in poor countries, _giving away_ software that generate $billions in profits for already wealthy people.

<comment><USER17> Jobs said that what he learnt at Pixar was to hire and trust great people.

I think there is a big difference between people who try to act like Jobs and Jobs himself.

<comment><USER18> > Jobs said that what he learnt at Pixar was to hire and trust great people.

Given what we now know about John Lasseter, Jobs' record on implementing this advice was decidedly mixed.

<comment><USER19> What do we know about John Lasseter now?

<comment><USER18> [https://www.theverge.com/2017/11/21/16687192/pixar-disney- an...](https://www.theverge.com/2017/11/21/16687192/pixar-disney-animation- john-lasseter-sexual-harassment-complaints)

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> Honestly, I think this is what it's like to be in an abusive relationship. You _know_ he's abusive and yet you still stay in the relationship with him/her because of all the good times and you delude yourself into thinking that's OK ... I think this gives a rarely glimpse into the rationalizations that happen in the mind of people that are in abusive relationships. From the outside it is trivial to see that the relationship dynamic is abusive but when you're in it ... suddenly it's OK even for one of the most renowned programmers of all time?

<comment><USER21> "One time, [...] Steve [...] wanted me to do a keynote that happened to be scheduled on the same day as our wedding. With a big smile and full of charm, he suggested that we postpone it. We declined, but he kept pressing. Eventually my wife countered with a suggestion that if he really wanted "her" John so much, he should loan John Lassiter to her media company for a day of consulting. Steve went from full charm to ice cold really damn quick. I didn't do that keynote."

Quite Machiavellian, asking somebody to reschedule their wedding for a keynote and being completely unwilling to return the slightest favour!

<comment><USER22> The dude got off on power plays. I wouldn't be surprised if the only reason Carmack was invited to that particular keynote was _because_ it was happening on his wedding day.

</comment></comment></comment><comment><USER23> On October 25 1988, I gave Steve Jobs a demo of pie menus, NeWS, UniPress Emacs and HyperTIES at the Educom conference in Washington DC. His reaction was to jump up and down, point at the screen, and yell "That sucks! That sucks! Wow, that's neat! That sucks!"

I tried explaining how we'd performed an experiment proving pie menus were faster than linear menus [1], but he insisted the liner menus in NeXT Step were the best possible menus ever.

But who was I to rain on his parade, two weeks after the first release of NeXT Step 0.8? (Up to that time, it was the most hyped piece of vaporware ever, and doubters were wearing t-shirts saying "NeVR Step"!)

[1] [https://medium.com/@donhopkins/an-empirical-comparison-of- pi...](https://medium.com/@donhopkins/an-empirical-comparison-of-pie-vs- linear-menus-466c6fdbba4b)

<comment><USER24> I'll have to read the article. I'm a little surprised that pie menus never caught on even in the era of tablets, where they seem extremely well-suited.

<comment><USER25> They do see some use in games, where you have control over all the menu items. Long strings can break pie menu layout pretty badly, especially if you bring up the menu near the edge of the screen.

<comment><USER23> That's all true!

Here's an illustrated transcript of a video (and the video itself) demonstrating the pie menus (and SimAntics visual programming language) in The Sims!

The Sims Pie Menus: [https://medium.com/@donhopkins/the-sims-pie- menus-49ca02a74d...](https://medium.com/@donhopkins/the-sims-pie- menus-49ca02a74da3)

And this discusses the issues you raised and more:

OLPC Sugar Pie Menu Discussion: [https://medium.com/@donhopkins/olpc-sugar- pie-menu-discussio...](https://medium.com/@donhopkins/olpc-sugar-pie-menu- discussion-738577e54516)

<comment><USER26> Any thoughts on Microsoft's Surface Dial [1] radial menu?

[1] [https://docs.microsoft.com/en- us/windows/uwp/design/input/wi...](https://docs.microsoft.com/en- us/windows/uwp/design/input/windows-wheel-interactions)

<comment><USER23> Good question -- glad you asked! (No, really! ;)

Turning a dial is a totally different gesture than making directional strokes, so they are different beasts, and a dial lacks the advantages pie menus derive from exploiting Fitts's Law.

[https://en.wikipedia.org/wiki/Fitts%27s_law](https://en.wikipedia.org/wiki/Fitts%27s_law)

Even though the Surface Dial has a round dial, that is nothing like a pie menu, even though it's round, because you turn it. Pie menus aren't about turning around the center, they're about stroking out from the center.

Also a rotating carousel or rocker switch that you turn or nudge clockwise or counterclockwise to change between different items, and then click to select an item, is not anything like a pie menu.

You have to turn a dial or carousel more and more to select each subsequent item. (Just like you have to move the cursor more and more downwards to select each subsequent item of a linear pull-down menu).

With pull down menus, click wheels and carousels, selection is linear O(n), while with a pie menu you only have to perform one short directional gesture to select any item, so selection is constant O(1) (with a small constant, the inner inactive radius of the hole in the middle, which you can make larger if you're a spaz).

Also, the items themselves should never rotate around the menu (unless you're doing some quick transient snazzy spin-up animation), they should always stay in the same direction.

Here are some window management pie menus that spin up if you click them up without moving, and tilt up around the axis perpendicular to the direction of motion, if you move away from the center before they pop up:

[https://www.youtube.com/watch?v=tMcmQk-q0k4](https://www.youtube.com/watch?v=tMcmQk-q0k4)

Stallman likes to classify an emacs-like text editor that totally misses the point of emacs by not having an extension language as an "erzatz emacs". In the same sense, there are many "erzatz pie menus" that may look like pie menus on the surface, but don't actually track or feel like pie menus, or benefit from all of their advantages, because they aren't designed to optimize for Fitts's Law by being based purely on the direction between stroke endpoints instead of the entire path, minimizing the distance to the targets, and maximizing the size of the targets.

Another way to implement frustrating difficult to use erzatz pie menus that totally miss the point is to only use the small areas of the item labels as targets, not the entire huge wedge shaped pie slices extending out to the screen edge.

Yet another way to screw them up is to trigger them when you move a certain distance from the center (or pop them up when you roll over a target without clicking, or use time-outs without clicking), instead of when you click or release the mouse (or tap or release your finger, pen, etc). There should always be a kinesthetic delimiter like a click or tap at the beginning and ending of the stroke, but the stroke is free wander around any path or pause for any duration. Only the angle between the delimiters matters, to allow for browsing and reselection and error correction.

If distance or time is the trigger, the user has no way of reliably and directly controlling or sensing at which point the selection happens, or using the menus without looking at the screen, and it terribly interferes with navigating nested pie menus.

Any pie menu that does not initially pop up with the cursor (or your finger) in the center, or that is already showing before you start tracking from anywhere on the screen, is terribly broken, because the whole point is to bring the pie menu center to you, so you can select with quick directional gestures without looking at the screen, not for you to have to first look at the screen and then move to the center yourself. That would totally defeat the purpose of pie menus!

Handling the screen edge problem can get tricky, especially when combined with mouse-ahead display suppression. One way of handling that is to "warp" the mouse back to the center of the menu if the menu needs to be moved to fit on the screen. But you must be careful not to cancel out any motion away from the center that's already happened (which is why you should delay warping the mouse until you actually pop up the menu (if ever), so there is no mouse warping when you mouse ahead and the menu is not displayed).

Web browser don't directly support mouse warping (i.e. like XWarpPointer), and you can't tell if the edge of the browser window is actually the edge of the screen, but you can use the "Pointer Lock API" to implement a software cursor that you can warp anywhere in the window you want (but not outside).

[https://developer.mozilla.org/en- US/docs/Web/API/Pointer_Loc...](https://developer.mozilla.org/en- US/docs/Web/API/Pointer_Lock_API)

There's a lot more discussion of screen edge handling and mouse-ahead display suppression here:

[https://medium.com/@donhopkins/olpc-sugar-pie-menu- discussio...](https://medium.com/@donhopkins/olpc-sugar-pie-menu- discussion-738577e54516)

Also see the discussion of "gesture space" here:

[https://medium.com/@donhopkins/gesture- space-842e3cdc7102](https://medium.com/@donhopkins/gesture-space-842e3cdc7102)

</comment></comment></comment></comment></comment></comment><comment><USER27> Im all for giving the dead their rest, but Steve was in my honest opinion more asshole than legend.

[https://arstechnica.com/cars/2016/07/steve-jobs-loophole- clo...](https://arstechnica.com/cars/2016/07/steve-jobs-loophole-closed- california-wants-temporary-license-plates/)

Registration funds important things like police, fire, and public education. Rolling around town as a tightwad billionaire who thinks hes too good to pay for public services is beyond the pale.

<comment><USER28> > _Im all for giving the dead their rest, but Steve was in my honest opinion > more asshole than legend._

Because he didn't pay registration fees? How well do you know people? The average person has done much worse than this.

Besides, "more asshole than legend" goes to some random asshole, not to a person that, asshole or not, still inspired millions, was several times "person of the year", and built the most valuable market cap company in history.

All that, and the worst that they say about him is that he was mean and petty sometimes, and didn't recognize his daughter at first. There are tons of major figures of history that have done way way worst things than that.

> _Registration funds important things like police, fire, and public > education. Rolling around town as a tightwad billionaire who thinks hes too > good to pay for public services is beyond the pale._

As if he did it to avoid paying registration funds. And as if his fortune haven't been used to pay tons of charity and public taxes and build jobs.

<comment><USER18> > Because he didn't pay registration fees?

Because he used his plates, or lack thereof, to park in disabled parking spaces [1]. That speaks volumes about what kind of person Steve Jobs was.

[1]: [https://www.folklore.org/StoryView.py?story=Handicapped.txt](https://www.folklore.org/StoryView.py?story=Handicapped.txt)

<comment><USER28> Someone who sees through the "disabled parking spaces" BS in the US, where everyone can get their doctor to mark them as "disabled" and park there, mocking the actual disabled?

<comment><USER18> It's not doctors who are "mocking the actual disabled" here.

</comment></comment></comment></comment></comment><comment><USER29> "After the public cleared out and the rest of us were gathered in front of the stage, I started urgently going on about how web apps are terrible, and wouldn't show the true potential of the device. We could do so much more with real native access!"

Where was Carmack when everyone was forcing us to listen to "web apps are the future of mobile"?

He could have ended that HN debated instantly.

<comment><USER30> Web apps are the future, how many more stupid native apps must I install to get basic textual and photo information? The only right answer is universal apps(the web).

<comment><USER31> Any absolute answer is wrong here.

Native apps will likely always have a place when OS/UI integration are paramount. But web apps will become a lot more prevalent than they have been previous as more and more hooks are exposed to the native core. Which is a good thing for everyone.

<comment><USER32> Yeah, there's certain things that native apps make a lot more sense for (e.g. messaging apps like Facebook Messenger where you want notifications to come up similar to text messages), but certain things really don't need anything more than the mobile website you look at (for example, at least for some people, mobile Wikipedia over the app).

<comment><USER31> > (e.g. messaging apps like Facebook Messenger where you want notifications to > come up similar to text messages)

Actually I'd argue the web is great for that too. On Android you can already implement a messaging app, complete with notifications, on the web.

I wish people like my bank used it. I don't want to install their native app because I barely ever use it, but would I like to get urgent notifications from them every now and then? You bet I would.

<comment><USER32> I personally don't like relying on my browser for notifications. I like having native apps because usually fine tuning notifications for them is easier in that respect, things that while I imagine are possible through the web browser, probably aren't going to be done on a web app. It's also just an organizational thing since I don't like to have a list of a bunch of tabs, but having a handful of apps isn't too bad to navigate through.

Just because there's been a lot of progress in making web apps do things that were more natural for native apps, doesn't mean that it's the _best_ way to go about something.

I get the wish for more support for web apps, though. I just switched over from a near 4-year-old phone that was replete with security updates and other un-removable stuff in the storage which prevented me from having a lot of apps installed (especially as so many insist on a large footprint in internal storage), so I increasingly used my web browser to access things. After the switch, though, you can bet I downloaded a bunch of apps I had deleted.

</comment></comment></comment></comment></comment></comment><comment><USER33> This is a pretty touching story. John has definitely been one of my heroes for a long time in the field as has Steve. At the end of the day, they're human. It sucks that he regrets not getting back in touch with Steve before his passing. We can't turn back time unfortunately. I guess the lesson here is we can get focused on the hero worship and the little details and forget we are dealing with someone's ego and feelings. Some constructive criticism from John and a declined phone call broke up their relationship. :(

Steve could be rough to work with but they obviously had respect for one another, so it is sad to see in the end there was some bad blood. At least John tried to get back in touch. I think the line at the end really says it all, "...but elements of the path that led to where I am today were contingent on the dents he left in the universe. I showed up for him."

Edit: If you're reading this John, thank you for all the gaming joy you've given the world over the years. I remember asking you programming questions and you were always responsive. You've left dents for others too.

Edit: Regarding the snide comment Steve made that you could write your own OS. He might have secretly feared you would. He knew you could.

</comment><comment><USER34> I think it's weird how Apple, even to this day, took some of Jobs's "darker" traits as if he still runs the place.

For example, a couple of years ago, I remember a game dev saying that they made one of the top selling game on iOS and received plenty of attention/help from Apple's engineers at WWDC, but when they made an Android version of their game, suddenly it was radio silence with Apple.

This is the kind of thing Jobs would have done, but now that he's gone, I'm disappointed that Apple did not evolve past this kind of behavior.

<comment><USER35> Would it be any different had he not released the Android version? Or was the expectation to be invited to the every WWDC from then on?

<comment><USER34> I'm sure it would have been different, yes. I don't know if they expected to be invited to every WWDC, but I remember the developer saying he had good access at Apple because they loved his app so much.

When he announced his Android version, Apple kinda stopped returning his calls and engineers would not give him as much time for questions and help. He went from VIP to nobody.

</comment></comment></comment><comment><USER36> The impact that John Carmack has on the industry is just ridiculous. Apple, NVIDIA, Facebook. As a teenage software engineer, _he_ was a revered figure to me (and I wonder to how many others). I've had an opportunity to work with his source code for a few months - it was a thing of beauty. If you want to learn from him, read his source code and essays. They are full of brilliance.

</comment><comment><USER37> A question from someone who has never seen a NeXT computer:

How is it possible that Doom was developed on NeXT?

As far as I know, Doom was first released for MS-DOS. Wouldn't be really hard to develop a MS-DOS game from another operative system and another CPU architecture? Specially at the time without engines abstracting platform details?

<comment><USER38> [http://doom.wikia.com/wiki/NEXTSTEP](http://doom.wikia.com/wiki/NEXTSTEP)

From my memory of reading Masters of Doom, they developed for where they expected the consumer PC hardware market to be at the time of release. If you wanted that hardware at the time they were developing, $10k Next workstations were your best bet.

When Doom came out, I (and most other folks) needed a new PC.

Ports to multiple platforms were pretty common in those days with games and that's something the team had a lot of experience with from their years at Softdisk. Having looked at the game code, it's not really terribly difficult.

<comment><USER39> I don't think so. It's just that the development environment was so much more productive on NeXT.

<comment><USER40> After having a _very_ recent encounter with developing software on NeXTSTEP 3.3, I'll have to agree with you. For how old it is, it held up pretty well!

</comment></comment></comment></comment><comment><USER41> Desktop (non mobile) link: [https://www.facebook.com/permalink.php?story_fbid=2146412825...](https://www.facebook.com/permalink.php?story_fbid=2146412825593223&id=100006735798590)

</comment><comment><USER42> @John Carmack,

My biggest question is, why now? I mean what trigger you to post this / share this pieces about Steve Jobs?

The reason I ask was because only a few week ago I posted a few comments about the state of Mac, Gaming on Mac and Gaming as iOS App Revenue. In the age of E-Sports and Gaming is the sole segment that is pushing / slowing / stopping the decline of PC sales, I wonder if Apple would take gaming a little more seriously, since Steve Jobs deleted all Gaming DNA in Apple once he returned from NeXT. And I said I wish John Carmack would comment a bit on Steve Jobs given he has been on Stage a few times in Keynote, and has surprisingly never shared any stories since he passed away.

But I think this confirms my suspicious

>Several things over the years made me conclude that, at his core, Steve didn't think very highly of games, and always wished they weren't as important to his platforms as they turned out to be. I never took it personally.

And it is a little strange since Steve worked at Atari.

<comment><USER43> I came across this HN comment that might answer your question: [https://news.ycombinator.com/item?id=17069109](https://news.ycombinator.com/item?id=17069109)

or you can see Carmack's original tweet here: [https://twitter.com/ID_AA_Carmack/status/993142700374462464](https://twitter.com/ID_AA_Carmack/status/993142700374462464)

</comment></comment><comment><USER44> _The Steve Jobs "hero / shithead" rollercoaster was real_

That's funny. I had a boss at Apple when I did some contracting there in 1999 who told me that Jobs asked him, "You wanna be a hero?" before giving him a project. My boss told me, "Yep, one day you're a hero, the next day you're a shithead."

</comment><comment><USER45> I suppose its inevitable that we dissect the lives and actions of "great" people like Steve Jobs. The fact is that no one is perfect, and those who usually accomplish great things have fascinating lives and personality flaws. At the end of the day, you take the good with the bad, its a package deal, and call it Human.

</comment><comment><USER46> Every time I see one of his posts on facebook.com I cringe and think wistfully about the .plan days.

</comment><comment><USER47> About "reality distortion field": [https://www.folklore.org/StoryView.py?story=Reality_Distorti...](https://www.folklore.org/StoryView.py?story=Reality_Distortion_Field.txt)

</comment><comment><USER48> This pretty much confirms my suspicion that Apple is|was not a company I'd ever want to work at. Making cool stuff might be cool, but I don't want to sacrifice large chunks of my life for it.

</comment><comment><USER49> It seems pretty likely to me that Steve Jobs was a high functioning sociopath. The line about how his demeanor changed dramatically when Carmack's wife asked for a favor was indicative to me.

"One time, my wife, then fiancée, and I were meeting with Steve at Apple, and he wanted me to do a keynote that happened to be scheduled on the same day as our wedding. With a big smile and full of charm, he suggested that we postpone it. We declined, but he kept pressing. Eventually my wife countered with a suggestion that if he really wanted "her" John so much, he should loan John Lassiter to her media company for a day of consulting. Steve went from full charm to ice cold really damn quick. I didn't do that keynote."

I find sociopaths fascinating, but I would sure never want to work for one. It must take an incredible amount of calculation and self discipline to keep a semblance of normality for an incredibly high profile sociopath like Jobs.

On a side note, the late Pieter Hintjens of ZeroMQ wrote an excellent book about psychopaths available online for free here.

[https://legacy.gitbook.com/book/hintjens/psychopathcode/deta...](https://legacy.gitbook.com/book/hintjens/psychopathcode/deta..).

Also want to disclaim that I am not a psychiatrist and my opinion of Job's sociopathy is only my speculation.

<comment><USER50> It appears your link is invalid.

<comment><USER51> [https://legacy.gitbook.com/book/hintjens/psychopathcode/deta...](https://legacy.gitbook.com/book/hintjens/psychopathcode/details)

</comment></comment></comment><comment><USER52> I was just giving back the "steve jobs" manga biography (yes..). I know 90% of it but ... I still read the 200 pages. He's such a special character for someone who grew up with nascent personal computer era.

</comment><comment><USER53> By all accounts (and I have no personal knowledge here) Steve could be a jerk, or at least very demanding. Steve was definitely successful.

Being a jerk != being successful!

Having a great product eye and good design sense are excellent traits to emulate. Having "strong opinions, loosely held" is another great trait to emulate. Being honest and direct when something isn't good is also a great trait to emulate. Demanding people do their best is another great trait to emulate.

Being a jerk (at least under certain circumstances) is orthogonal and unrelated.

Unfortunately far too many people mistake correlation for causation and think being a demanding jerk is the key to success. First: you are no Steve Jobs. Second: that isn't what made him successful.

(Being direct and brutally honest can also come off as being a jerk. We have lots of pressure to be positive / supportive and avoid social conflict. It is always easier to say "that's great" or "nice job" than give actual constructive feedback, especially when the recipients are likely to be defensive about it. It is critical for startups to avoid this and be brutally honest with themselves about the product!)

<comment><USER54> Many people seem to love to look up to jerks. Look at the current resident of the White House for example. I've seen it in academia as well and I don't understand it. There was someone in the department I got my phd from that I saw be a total jerk to people for no reason and some people still worshiped him.

<comment><USER55> Probably some primitive instinct that looks up to the alpha of the group.

<comment><USER54> I don't know. That alpha male stuff is mostly bull. And It isn't like all people who are assholes and have people look up to them are actually good or "alpha" in any way. And why do some people look at people like this and say, "fuck that guy?"

</comment></comment></comment></comment><comment><USER56> yep

</comment><comment><USER57> Some great anecdotes in there.

As an aside, surely a person of Carmack's stature and knowledge would have a dedicated blog. I have to wonder if his decision to post so many of these wonderful stories on Facebook might be due to some "pressure" from his employer.

<comment><USER58> Years ago, I felt burned when I wrote several articles for #AltDevBlogADay, and they vanished. I have much more confidence that what I write on FB won't vanish. I agree it isn't a great platform for writing, but I only write public long-form things a few times year, so I don't feel like going to another platform for it.

<comment><USER59> Maybe someone will write a metablogging platform that posts to WordPress, Facebook, Twitter (in multiple tweets!), Instagram, etc. all with one button. RAIC, redundant array of inexpensive content.

Actually, I'd be surprised if this didn't already exist.

<comment><USER16> Yes, there is a whole market.

[https://www.popsci.com/post-to-all-social-media-accounts- at-...](https://www.popsci.com/post-to-all-social-media-accounts-at-once)

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

etc

</comment></comment></comment></comment><comment><USER60> For those who are unable/unwilling to access Facebook:

John Carmack

Steve Jobs

My wife once asked me "Why do you drop what you are doing when Steve Jobs asks you to do something? You don't do that for anyone else."

It is worth thinking about.

As a teenage Apple computer fan, Jobs and Wozniak were revered figures for me, and wanting an Apple 2 was a defining characteristic of several years of my childhood. Later on, seeing NeXT at a computer show just as I was selling my first commercial software felt like a vision into the future. (But $10k+, yikes!)

As Id Software grew successful through Commander Keen and Wolfenstein 3D, the first major personal purchase I made wasn't a car, but rather a NeXT computer. It turned out to be genuinely valuable for our software development, and we moved the entire company onto NeXT hardware.

We loved our NeXTs, and we wanted to launch Doom with an explicit "Developed on NeXT computers" logo during the startup process, but when we asked, the request was denied.

Some time after launch, when Doom had begun to make its cultural mark, we heard that Steve had changed his mind and would be happy to have NeXT branding on it, but that ship had sailed. I did think it was cool to trade a few emails with Steve Jobs.

Several things over the years made me conclude that, at his core, Steve didn't think very highly of games, and always wished they weren't as important to his platforms as they turned out to be. I never took it personally.

When NeXT managed to sort of reverse-acquire Apple and Steve was back in charge, I was excited by the possibilities of a resurgent Apple with the virtues of NeXT in a mainstream platform.

I was brought in to talk about the needs of games in general, but I made it my mission to get Apple to adopt OpenGL as their 3D graphics API. I had a lot of arguments with Steve.

Part of his method, at least with me, was to deride contemporary options and dare me to tell him differently. They might be pragmatic, but couldn't actually be good. "I have Pixar. We will make something [an API] that is actually good."

It was often frustrating, because he could talk, with complete confidence, about things he was just plain wrong about, like the price of memory for video cards and the amount of system bandwidth exploitable by the AltiVec extensions.

But when I knew what I was talking about, I would stand my ground against anyone.

When Steve did make up his mind, he was decisive about it. Dictates were made, companies were acquired, keynotes were scheduled, and the reality distortion field kicked in, making everything else that was previously considered into obviously terrible ideas.

I consider this one of the biggest indirect impacts on the industry that I have had. OpenGL never seriously threatened D3D on PC, but it was critical at Apple, and that meant that it remained enough of a going concern to be the clear choice when mobile devices started getting GPUs. While long in the tooth now, it was so much better than what we would have gotten if half a dozen SoC vendors rolled their own API back at the dawn of the mobile age.

I wound up doing several keynotes with Steve, and it was always a crazy fire drill with not enough time to do things right, and generally requiring heroic effort from many people to make it happen at all. I tend to think this was also a calculated part of his method.

My first impression of "Keynote Steve" was him berating the poor stage hands over "This Home Depot shit" that was rolling out the display stand with the new Mac, very much not to his satisfaction. His complaints had a valid point, and he improved the quality of the presentation by caring about details, but I wouldn't have wanted to work for him in that capacity.

One time, my wife, then fiancé, and I were meeting with Steve at Apple, and he wanted me to do a keynote that happened to be scheduled on the same day as our wedding. With a big smile and full of charm, he suggested that we postpone it. We declined, but he kept pressing. Eventually my wife countered with a suggestion that if he really wanted "her" John so much, he should loan John Lassiter to her media company for a day of consulting. Steve went from full charm to ice cold really damn quick. I didn't do that keynote.

When I was preparing an early technology demo of Doom 3 for a keynote in Japan, I was having a hard time dealing with some of the managers involved that were insisting that I change the demo because "Steve doesn't like blood." I knew that Doom 3 wasn't to his taste, but that wasn't the point of doing the demo.

I brought it to Steve, with all the relevant people on the thread. He replied to everyone with:

"I trust you John, do whatever you think is great."

That goes a long way, and nobody said a thing after that.

When my wife and I later started building games for feature phones (DoomRPG! Orcs&Elves!), I advocated repeatedly to Steve that an Apple phone could be really great. Every time there was a rumor that Apple might be working on a phone, I would refine the pitch to him. Once he called me at home on a Sunday (How did he even get my number?) to ask a question, and I enthused at length about the possibilities.

I never got brought into the fold, but I was excited when the iPhone actually did see the light of day. A giant (for the time) true color display with a GPU! We could do some amazing things with this!

Steve first talked about application development for iPhone at the some keynote I was demonstrating the new ID Tech 5 rendering engine on Mac, so I was in the front row. When he started going on about "Web Apps", I was (reasonably quietly) going "Booo!!!".

After the public cleared out and the rest of us were gathered in front of the stage, I started urgently going on about how web apps are terrible, and wouldn't show the true potential of the device. We could do so much more with real native access!

Steve responded with a line he had used before: "Bad apps could bring down cell phone towers." I hated that line. He could have just said "We aren't ready", and that would have been fine.

I was making some guesses, but I argued that the iPhone hardware and OS provided sufficient protection for native apps. I pointed at a nearby engineer and said "Don't you have an MMU and process isolation on the iPhone now?" He had a wide eyed look of don't-bring-me-into-this, but I eventually got a "yes" out of him.

I said that OS-X was surely being used for things that were more security critical than a phone, and if Apple couldn't provide enough security there, they had bigger problems. He came back with a snide "You're a smart guy John, why don't you write a new OS?" At the time, my thought was, "Fuck you, Steve.".

People were backing away from us. If Steve was mad, Apple employees didn't want him to associate the sight of them with the experience. Afterwards, one of the execs assured me that "Steve appreciates vigorous conversation".

Still deeply disappointed about it, I made some comments that got picked up by the press. Steve didn't appreciate that.

The Steve Jobs "hero / shithead" rollercoaster was real, and after riding high for a long time, I was now on the down side. Someone told me that Steve explicitly instructed them to not give me access to the early iPhone SDK when it finally was ready.

I wound up writing several successful iPhone apps on the side (all of which are now gone due to dropping 32 bit support, which saddens me), and I had many strong allies inside Apple, but I was on the outs with Steve.

The last iOS product I worked on was Rage for iOS, which I thought set a new bar for visual richness on mobile, and also supported some brand new features like TV out. I heard that it was well received inside Apple.

I was debriefing the team after the launch when I got a call. I was busy, so I declined it. A few minutes later someone came in and said that Steve was going to call me. Oops.

Everyone had a chuckle about me "hanging up on Steve Jobs", but that turned out to be my last interaction with him.

As the public story of his failing health progressed, I started several emails to try to say something meaningful and positive to part on, but I never got through them, and I regret it.

I corroborate many of the negative character traits that he was infamous for, but elements of the path that led to where I am today were contingent on the dents he left in the universe.

I showed up for him.

<comment><USER61> > _Eventually my wife countered with a suggestion that if he really wanted > "her" John so much, he should loan John Lassiter to her media company for a > day of consulting. Steve went from full charm to ice cold really damn quick. > I didn't do that keynote._

When I start getting a certain vibe from some people, I start countering requests with similar but slightly smaller requests. Amazing how so many people can demand another's time and resources but refuse to return anything themselves.

Often even making that straight-faced, respectful, comparable request will end a relationship. It's sad but it must be done.

<comment><USER62> I don't find it sad to end a bad relationship. If someone only intends to "use" me and has nothing to offer, that isn't much of a loss.

<comment><USER16> It's a bit sad to face the the reality than to blissfully believe the person is a friend.

</comment></comment></comment></comment><comment><USER63> Steve Jobs sounds like an amazing asshole! I wonder if all celebrity CEOs (Bezos, Gates, Zuck, etc.) are like this in private interactions.

<comment><USER64> Probably not, at least not as much. There's a reason Steve Jobs has always been notorious for this sort of behavior.

<comment><USER16> All of those CEOs are famous (and more) for being assholes. What made Steve Jobs different is that he also inspired a bizarre sort of love -- People want to _be_ Gates/Zuck/Bezos, but no one dreams of _working for_ them. And no one has a religious zeal for evangelizing their those CEOs' transparent marketing lies like they do for Jobs'.

</comment></comment></comment><comment><USER65> Anyone else notice how it is impossible to select and copy text?

<comment><USER66> That's because the link points to the mobile version, try the desktop one [https://www.facebook.com/permalink.php?story_fbid=2146412825...](https://www.facebook.com/permalink.php?story_fbid=2146412825593223&id=100006735798590). I can select and copy the text just fine.

</comment></comment><comment><USER56> Now I just want a God of War game with Steve as Kratos and John as Atreus.

</comment><comment><USER67> Steve Jobs and John Carmack are very similar people in a lot of ways.

They're both from lower-class backgrounds, incredibly smart, had serious personality problems as children that could have landed them in prison as adults.

They're both entirely "self-made" and spent their entire lives with (almost) singular focus, to the point of becoming the best in the world at what they chose to work on.

My impression is that John Carmack has avoided being CEO during his career because he knows it would involve him becoming more like Steve Jobs than he wants to be.

Could John Carmack have made an even bigger positive impact in the world if he had gone in Steve Jobs' direction? How much would he have had to change as a person?

I suspect a lot of people would come think of him as an "asshole" if he chose to get his hands dirty with the work of a CEO. Maybe the world would be _even richer_ than it is now but at some cost to John Carmack and (perhaps) others.

In any case, they're both beautiful examples of the greatness and weakness of the partially-evolved primate we call Human.

<comment><USER68> Citation needed on Steve being lower class. Lower compared to what?

Based on the little I know about how he grew up, it seems he was more middle class than lower, and also happened to grow up in the best place to grow up to rise with the computer industry. Middle class kids in Iowa don't live 20 minutes from Stanford, for example. So, I'd say "middle class with unusually good opportunities".

I'm really not trying to say he didn't accomplish a lot, because he did, but let's not pretend he was seriously disadvantaged.

Carmack seems to have more claim to being disadvantaged, although I have no idea if he is interested in making such a claim. According to some articles I just read he was arrested while trying to steal his first computer, and spent a year in juvenile prison, which generally doesn't happen to affluent people.

<comment><USER16> [https://games.slashdot.org/story/99/10/15/1012230/John- Carma...](https://games.slashdot.org/story/99/10/15/1012230/John-Carmack- Answers)

John Carmack Answers:

""" ... stereotypical geek aspects to my life growing up - phreaking, hacking (nobody called it "cracking" back then), rockets, bombs, and thermite (sometimes in not-so-smart combinations), sci-fi, comic books, D&D, arcades, etc.

I was sort of an amoral little jerk when I was young. I was arrogant about being smarter than other people, but unhappy that I wasn't able to spend all my time doing what I wanted. I spent a year in a juvenile home for a first offence[1] after an evaluation by a psychologist went very badly. """

[1] Per wikipedia, the offense was: burning through a window, grand theft of computers, and then presenting as autistic to the psychiatric evaluator.

From my outsider view, I get the impression that Carmack "grew up" into a relative well-adjusted adult with respect for other humans, but Steve Jobs never did.</comment></comment></comment>


Google's Machine Learning Software Has Learned to Replicate Itself - <AUTHOR> https://www.sciencealert.com/google-s-machine-learning-software-has-learned-to-replicate-itself <comment><USER2> For the unfamiliar, AutoML existed before Google named their project after that particular subfield of machine learning. AutoML is the name of an active area of academic research, which has been gaining traction over the last few years. This year they had a workshop collocated with ICML, and there have been other submissions to ICML, JMLR, and NIPS (some of the top machine learning conferences / journals).

It rubs me the wrong way that Google used the same name as the subfield, but maybe I'm just grumpy and these negative feelings are misplaced. I don't know.

Edit: also, the hype machine is at full steam with that title.

</comment><comment><USER3> Made me think of this nicely written piece, 'the last invention of man': [https://news.ycombinator.com/item?id=15419619](https://news.ycombinator.com/item?id=15419619)</comment>


What do those squiggles on the pavement actually mean? - <AUTHOR> http://www.bbc.co.uk/news/magazine-25915468

<comment><USER2> Sort of like comments on the code beneath our feet. Chuggers are physical spam. Computer world is part of real world now I suppose.

</comment><comment><USER3> I was just about to post this on here, cool to see someone already has!</comment>


Ask HN: HELP! Dealing with Meetup.com's poor customer service. - <AUTHOR> I'm the organizer of a software meetup in the midwest, and we recently had an incident where Meetup.com banned the account of one of our sponsors for posting a job opening to the discussion boards one time. I have made it abundantly clear to them that this is not spam and that the sponsor's account needs to be reinstated. They have refused all communication with me and have denied our sponsor reinstatement.
Today, they have even said that they will now immediately close all attempts to reach them about this matter. This is unacceptable treatment of us, our sponsors, and our community. We are ready to take our community elsewhere if we're not going to be allowed to inform each other about opportunities in our community.
Has anyone else had this problem? Any advice on how to get this fixed? Maybe an alternative platform? <comment><USER2> Try tweeting your experience, @ mentioning the official meetup.com account. It's hard to ignore negative feedback on Twitter.</comment>


Richard Swanson: Solar Cells at the Cusp - <AUTHOR> http://paul.kedrosky.com/archives/2009/10/swanson_solar_c.html

<comment><USER2> Really good talk by a pioneer in the industry.

A few highlights.

1\. They recently installed a 2.6 GW project in Spain. In one year. For this project, an approximately 20 person crew was installing 2 MW/day.

2\. Photovoltaic silicon areal production [sq in] surpassed chip silicon in 2000 - currently it's producing ~10X the area of chip silicon.

3\. In regard to the fluctuating nature of solar energy production, utilities are coming to realize that it isn't really that bad or hard to deal with: for decades they've been dealing with a fluctuating load from their customers - solar is just another fluctuating load; only the sign is different. There are areas in Germany and Japan where solar and wind make up over 20% of the grid, with little difficulty experienced.

4\. In the past 20 years photovoltaic production has increased 200X: he expects this rate to continue for another 20.</comment>


Techniques for Distributed TensorFlow - <AUTHOR> https://www.oreilly.com/ideas/distributed-tensorflow <comment><USER2> Disclaimer: developer of Hops. This blog basically argues that systems like Horovod (Ring AllReduce) are architecturally superior to Parameter Server models (like TensorFlowOnSpark).</comment>


Google Shows Off Glass in New Video, Puts Out Call for New Buyers - <AUTHOR> http://www.pcmag.com/article2/0,2817,2415620,00.asp

<comment><USER2> Can someone explain to me the appeal of Glass? Technologically, it's a predictive evolution: cameras, visual overlays, GPS units are smaller and more efficient. They've been fit into mobile devices for sometime, why don't we wear them instead?

I'm sure this has broader application than endless POV pictures, which is probably why they're kicking off the "If I Had Glass" campaign.

<comment><USER3> Augmented reality is the huge one (think virtual billboards), I'm sure there will be more so obvious in hindsight ideas that come along too.

</comment></comment><comment><USER4> Siri was amazing in the commercials so I don't won't to be overly excited. However it looks like one of the requirements for the glass is to have an amazing day to day life.

<comment><USER5> > However it looks like one of the requirements for the glass is to have an > amazing day to day life.

Not really. Glass differentiates from Siri mostly by being available and ready for usage without hands. Any use case you can come up with for Siri now, I'd expect Glass could handle with about the same level of quality. Or lack thereof.

Which makes it pretty much useless for me.

</comment></comment><comment><USER6> Imagine what happens when they integrate glass with their upcoming x-phone. Win!

</comment><comment><USER7> as someone who will soon move to a foreign country the "say delicious in thai" was really nice!</comment>


Personal Fabrication for Dummies: 10 technologies shaping the future  - <AUTHOR> http://replicatorinc.com/blog/ This post provides video demonstrations of 10 personal fabrication technologies that could shape the future. These machines combined with software enable people to create anything they can imagine, increase choices for customers, and help the environment in the process. Learn what they can do and what others have done with them. <comment><USER2> i read that as "Personal Lubrication for Dummies"</comment>


Japan's New Tech Generation - <AUTHOR> http://mobile.nytimes.com/2012/10/04/technology/a-new-tech-generation-defies-the-odds-in-Japan.html

<comment><USER2> Working link <http://nyti.ms/PPadsD></comment>


Looking for creative ideas to grow usership of my web app - <AUTHOR> http://www.showhopping.com

<comment><USER2> 1\. Start with where you live, go into your app and pull a list of all of the concerts in your area for the next week.

2\. Go to Facebook and make a small ad campaign, put in like $100-$200 for it.

3\. Make a few ads for fans of each band in your area, limit their age to say 18-34 years old. Each ad should say "See X Band Live", have an image of the band (if you can find a public domain one) and then say in the body "See X Band live @ this place, this day. Hurry, tickets will sell out soon!"

4\. Run that baby!

This will give you a targeted campaign for the people that are specifically interested in those bands, in your area, in the primary age range that attends concerts. Whether or not they actually go see it, you've gotten them to check out your app.

Liberally sprinkly some like buttons too. If you can make a page for each show with a map of the location and way for them to get directions, do so. Stick a like button on it too.

Hope this helps as an idea and best of luck! :)

<comment><AUTHOR> 1\. This is a great idea. The only thing that has prevented me from already implementing this idea is the nature of IP locationing, which seems to be spotty at best.

2-4. I was under the impression that Facebook ads, by and large, were not very effective. How are they compared to Google ads in terms of ROI?

Thanks for your ideas, though. I'm not very good at the marketing side of building a site. I always build an app that basically caters to what I want, and then have no idea of how to grow it from there, so I like to hear from others.</comment></comment>


I'll have a diet code, please - <AUTHOR> https://medium.com/@mattangriffel/481b5dca6e39

<comment><USER2> This thing of people actually wanting to learn web development. I have spotted it many times. So these days I recommend them to take Udacity CS253 (Web application engineering) or to dive in railstutorial.org which is cool as well. And... I don't remember ever having feedback from this. Are we not there yet?</comment>