Ask HN: GraphQL or REST? - <AUTHOR> If you were deploying a new API today, however integrated or not with whatever you're currently working on, would you choose to build out a GraphQL or REST API? What stack/tools would you reach for first? Why? <comment><USER2> I'd flip that around: depending on which stack/tools I was working in, that would give me a better idea of whether to pick GraphQL or REST.

If I'm building a backend in JS/TS, GraphQL is getting to be just about a no brainer. The tooling for GraphQL, such as Apollo's server products, in JS is fantastic, and can be often highly productive.

On the flipside, if I'm working on .NET (Core) backend, the GraphQL tools are rather lacking still, but a lot of the REST tools are very well refined and capable.

There's a wide spectrum in between of course, too, such as Python which is growing pretty good tools for GraphQL (Graphene I've heard is really good to work with), but also has great REST tools.

Similarly client stack matters too. Again, JS clients for GraphQL are mostly ahead of most other languages. React is great with GraphQL, but some of the other frameworks don't fit the GraphQL model quite as well.

Beyond that, other judgement calls are useful such as development team familiarity and project needs.

</comment><comment><USER3> The whole idea about REST was to get rid of the complexity of SOAP webservices, custom implementations and the like by using the verbs HTTP already has and using "speaking" URLs.

The whole idea of GraphQL was actually to make complex queries easier and more performant (it's a bit like SQL for HTTP).

My personal conclusion (ymmv) is to build REST APIs whenever the API should be exposed to external developers or to be integrated with 3rd party software. On the other side I like GraphQL very much, when the only (main) purpose of the API is to build the backend for a SPA.

<comment><USER4> > The whole idea of GraphQL was actually to make complex queries easier and > more performant (it's a bit like SQL for HTTP).

How about REST's OData?

<comment><USER2> OData had good ideas in theory but seemed to fail in practice. Most of the biggest OData APIs [1] failed to handle denial of service attacks well. The advice I've heard is never to let OData escape the boundaries of your intranet these days.

GraphQL has better mitigations for sidelining problematic queries (query names, shapes/patterns analysis tools), and doesn't _start_ with the kitchen sink like OData did. Instead, in GraphQL you generally have to opt-in to more complex query operations, at which point you can also lock them down to explicit clients/whitelisted query names/etc while doing so.

[1] NuGet's feeds being the big obvious one to mind where v1 API supported nearly the full OData query set and every version since has dropped increasingly more OData functionality for bespoke REST endpoints.

<comment><USER4> > Most of the biggest OData APIs [1] failed to handle denial of service > attacks well.

Isn't that an implementation issue? Nevertheless IIRC some OData APIs do implement anti-DoS features such as rate limiting.

<comment><USER2> It can be, but I'd posit its an issue deeper in the heart of the intent and philosophy of OData (versus say GraphQL). OData looked at the basic querying monad and said "wouldn't it be great if I could do that stuff, but just you know remotely" and implemented every operation it could think of on top of that monad. It's like RPC in that way ("wouldn't it be great if function calls 'just worked' over the network?"), in that it started with some okay ideas but then accidentally ran head first into a jungle of XML encodings of security concerns orthogonal to distributed computing but deeply critical if the calling infrastructure doesn't know if the result is coming from the same processor core, the processor core next door, or a machine on a network 5000 miles away in a datacenter run by your competition.

I think some of the "keep it simple stupid" principle of what REST does well that SOAP failed to do, applies between OData and GraphQL. OData did a really good job of very easily connect (via LINQ for many users) "SQL" over the wire, which is great when that's what you need. It's just that "SQL" was never optimized for that and the solutions like rate limiting have to be bolted in on top of the design, and often start to break the original appeal "'SQL' over the wire" as the subset of "SQL" that reliably works shrinks (and therewith shrinks the ability to do some of the ad hoc queries that were the draw in the first place).

GraphQL doesn't entirely escape the orbit of query language as wire protocol issues, of course, but it has the benefit of having seen the issues in OData to learn from, and from what I've seen mitigates a lot of the worst cases in its opt-in approach and the fact that it looks nothing like "SQL" so it immediately doesn't inherit the assumptions of SQL and what sort of queries may or may not be immediately available.

</comment></comment></comment></comment></comment><comment><USER5> I agree with the other answers here: it depends on the use case. But all else being equal, I'd start with a REST API, and build an additional (not replacement) GraphQL API when necessary.

Using GraphQL to create, fetch and write individual objects in a typical CRUD app, without complex object relationships, adds a good bit of unnecessary complexity. Luckily, this is where REST shines.

If/when the domain model evolves, building a parallel GraphQL API for complex (read-only) queries will help solve querying/filtering/complex object fetching better than REST can.

GraphQL for writes/updates doesn't seem worth it for general use cases, but can be appropriate if it matches your domain model.

<comment><USER6> This depends on the tooling a little.

We are getting a fair amount of cacheing and state management for "free" by using Apollo with GraphQL.

</comment></comment><comment><USER7> Rails as the stack and REST as the implementation.

You can then spend most of your time on making sure you have a good understanding of the domain and then design the API to match that understanding.

Rails because you asked what _I_ would reach for :) Once you figure out your domain model you could just generate the REST API.

Rails has GraphQL gems so you could go down that path in the future if desired. Like anything though, GraphQL isn't a silver bullet. If you have a complex data model, that can be exposed and people unfamiliar with the data model will see performance issues.

When I hear API, I usually infer that it means other people will be calling it. The above answers are in context of that. If you really mean a back-end to your web app that nobody external will be calling, ever, then it really doesn't matter what tech stack or methodology you use. In that case, there are other factors like time to deliver and if there is a team building it, then it helps to use a common methodology (e.g. REST).

<comment><USER8> Isn't rails an overkill compared to something like sinatra or the other 500 ruby based opinionated frameworks in between?

<comment><USER9> It might seem like overkill at first, but if you start a project from Sinatra, you'll end up implementing a lot of rails features that won't be as well thought out or integrated. If "weight" is a concern, it's pretty easy to turn off rails features that you don't need.

</comment></comment></comment><comment><USER10> RESTful microservices deployed to AppEngine + Cloud PubSub. With MongoDB for static json assets. And either Firebase or Cloud DataStore for all metadata, config, and application state. Strong isolation between different modules. Set things up right and it will run forever with fixed (or rather, predictable) costs and zero maintenance.

I do appreciate how productive GraphQL and frontend frameworks like Gatsby can make developers. Having seen it first hand in hackathons ;)

</comment><comment><USER11> Context and use case are important to help determine this. If you have an existing RESTful backend, think carefully through how complex your front end data may be per page/view. If you're requiring multiple API calls or creation of custom routes to stitch data together GraphQL can be an ideal technology choice. Definitely would recommend checking out Apollo as well as Airbnb's Blog Posts on integrating GraphQL/Apollo into their applications.

</comment><comment><USER12> the answer at least partly depends upon what your requirements and constraints are.

e.g. if you have particularly demanding performance requirements around latency and speed of decoding messages, then perhaps you cannot use either GraphQL or REST.</comment>


Ask HN: how to unit/integration test app that sends email? - <AUTHOR>

I'm adding a "register->confirm email->reg. complete" functionality to a web app I'm writing. I'd like to be able to unit/integration test my email-sending code.
I don't want to actually send emails. In fact, I'd like to keep all this local to my machine (or at least to my home network). And if I can avoid it, I don't want to install/configure sendmail/qmail/postfix/etc.; i.e., I don't want to install a real email server.
Is there a test SMTP server anyone knows of that's quick and easy to install (on Linux)? Or a clever hack using honeyd to fake out the SMTP communication? <comment><USER2> You don't need to get clever here. Any SMTP server will deliver locally if you just give it a username.

So, any mail server will do. Just configure it to only accept mail from/for localhost. I know that Perl and Python both have good small SMTP servers available, and I imagine most dynamic languages would also (if it even matters what language it is in). So, you could use one of those, fire it up on a high port as part of your test process and send a message to the user running the test (which would then deliver to the users Maildir or whatever, based on configuration).

But I would just use Postfix. It's small, really easy to configure, and can be installed on most modern Linux distros with one command. It can easily be configured as I've suggested (set it to listen only on loopback, and set the destination to only localhost, and then send mail to "joe" rather than "email@example.com").

</comment><comment><USER3> Since you're writing a web app, there are very likely many well-tested libraries for sending mail. I suggest using one of these, then stub the interface to the librart and make sure your code is using the correct API when talking to the library.</comment>


The big black dog - <AUTHOR> http://www.homeiswheremyhorseis.com/the-big-black-dog.html <comment><USER2> "Black dog" is how Winston Churchill referred to his depression.

[https://theconversation.com/winston-churchill-and-his- black-...](https://theconversation.com/winston-churchill-and-his-black-dog-of- greatness-36570)</comment>


This phone is an asshole. - <AUTHOR> http://www.bigcontrarian.com/2010/06/17/this-phone-is-an-asshole/

<comment><USER2> The writer of this article is an Asshole

Examples:

"The first clue came during the setup process. After being forced to walkthrough a tutorial on how to use the touch keyboard, which I could not find a way to skip..."

Eh, try using the next button?

"Thereafter, I discovered software I could find no way to uninstall; programs which hung around after I was done with them with no way to quit I could find...."

Clearly he didn't look in the Settings -> Applications menu, or in the Downloads section of the market app. Also clearly doesn't understand that you don't NEED to exit Android applications, this is the point of Android multitasking.

<comment><USER3> >>>Eh, try using the next button?

Do you know there was such a button on the phone he had? He doesn't state the model. And since HTC plasters its Sense over Android, could he have encountered it there?</comment></comment>


Coq is a Lean Typechecker - <AUTHOR> https://coq.discourse.group/t/alpha-announcement-coq-is-a-lean-typechecker/581 <comment><USER3> This particular feat was triggered by Kevin Buzzard's unsubstantiated claim that "Lean was better than Coq" as a foundation for mathematics, because it had built-in quotient types. The work described above precisely shows that such types can be encoded as well using features shipped with the vanilla Coq distro. See [https://sympa.inria.fr/sympa/arc/coq- club/2020-01/msg00006.h...](https://sympa.inria.fr/sympa/arc/coq- club/2020-01/msg00006.html).

<comment><USER4> My understanding is that this shows how vanilla Coq _still_ can't encode quotients well. This project relies on a PR [0] that breaks term normalization, which makes it highly unlikely it will be merged. My understanding is that Lean's implementation of quotients also breaks normalization, but they don't care as much about that as Coq devs do.

[0]: [https://github.com/coq/coq/pull/10390#issuecomment-554316311](https://github.com/coq/coq/pull/10390#issuecomment-554316311)

<comment><USER5> The normalization issue is not about quotients at all. It's [https://arxiv.org/abs/1911.08174](https://arxiv.org/abs/1911.08174) "Failure of Normalization in Impredicative Type Theory with Proof-Irrelevant Propositional Equality"

<comment><USER4> Well, I will defer to your judgment! I'm by no means a type theory person.

My understanding was that these features are how quotients are managed to be implemented. But perhaps that is wrong.

</comment></comment></comment></comment><comment><USER6> The more powerful our languages get and more robust our programs written in them get (those go hand in hand), the easier it will be to compile languages from one language to another without compromising code quality or legibility.

I hope this will lead to a new golden age of programming and PL research where more software is not "trapped" in the language and era it is first developed, and we aren't constantly bouncing between the extremes of endlessly accumulating tech debt or naively rewriting.

<comment><USER7> > The more powerful our languages get[...], the easier it will be to compile > languages from one language to another

I'm not sure about this. Don't languages get their power from restrictions and opinionatedness, that create a fundamental impedance mismatch between any languages that aren't redundant? You can do anything the processor can do in assembly, and the unstructured mass is about as powerful as muscle with no bone.

But maybe I'm reading "powerful" too positively. As languages get kitchen- sinky, as JavaScript/C++/Java are with reckless abandon, it will be easier to use them as translation targets (and harder to reason about the results). But won't kitchen-sinky languages eventually give way to languages that haven't yet had time to tie themselves in knots, as C++ (which finished the kitchen and is now putting a second sink in the bathroom) is losing ground to Rust (which only just bolted on async), in an endless cycle of collapse and renewal?

</comment></comment><comment><USER8> Very nice work. This kind of embedding (a direct equivalent to "transpiling" for code) is quite common in the formal methods community; for example, Freek Wiedijk has shown a similar embedding of HOL Light [https://www.cs.ru.nl/~freek/notes/index.html](https://www.cs.ru.nl/~freek/notes/index.html) into Coq.

<comment><USER3> You can actually do much better than mere embeddings. Using program translations similar to what Haskell users routinely perform when using the do-notation for monads, you can actually extend your type theory with new reasoning principles. See for instance the parametric exceptional theory [1], which adds well-behaved exceptions and allows to extend Coq with the independence of premises, i.e. (¬A → ∃n:ℕ. P n) → ∃n:ℕ. (¬A → P n).

[1] [https://hal.inria.fr/hal-01840643/document](https://hal.inria.fr/hal-01840643/document)

</comment></comment><comment><USER9> How do you pronounce Coq?

<comment><USER10> Not trying to be childish, but let's be honest, this is a horrible name if you are not a native english speaker. I just hear giggles every time somebody mentions this name...

<comment> munk-a This is a horrible name even for native english speakers. I still have to coach people not to giggle whenever I bring up LaTeX - unless it's exclusively vocally in which case the "lah-TECH" puts their mind elsewhere.

<comment><USER11> I kinda miss those times where you could talk about those Thinkpad clits at work and no one would bat an eye. The degree of puritanism of the new generation is a bit terrifying.

We had plenty of women in the lab, btw.

<comment> munk-a I don't think it's puritanism, it's just keeping things separate. In an office we're all there to work and not get embroiled in relationship drama - <USER2> calling that nub a clit is just unnecessarily bringing sex into things.</comment></comment></comment></comment></comment>


Tell HN: Ffmpeg vulnerability allows attacker to get files from server or PC - <AUTHOR> ffmpeg vulnerability allows reading local files and sending them over network using a specially crafted video file. This affects not only file conversion (including thumbnail generation), but also any other operations that involve ffmpeg processing your file — for example, ffprobe is affected.
This is not remote code execution, the vulnerability is limited to reading local files and sending them over network, but that is already bad enough.
For example, a specially crafted «video» file uploaded to your server by an attacker could read your website config/private keys/etc and send that to the attacker once you try to generate a thumbnail for it or just probe it with ffmpeg.
On a PC, you don't even need to open a file to get affected, just downloading it would be enough in some cases — video files are processed with ffmpeg for filemanager thumbnails (i.e. KDE Dolphin), for search indexers, etc.
That vulnerability is public, has code samples to reproduce and build a malicious file, and is not fixed atm.
The recommended quick fix is to rebuild ffmpeg without network support (--disable-network configure flag).
Original post: http://habrahabr.ru/company/mailru/blog/274855/
The original text is in Russian, use https://translate.yandex.com or https://translate.google.com/ to read it. <comment><USER2> The key insight is that you can construct an HTTP live streaming playlist that causes the player to pull lines from a series of files, concatenate them together to form a URL then visit that URL, making it possible to exfiltrate data.

It is unclear whether this is ffmpeg-specific, or something the HTTP live streaming protocol actually requires and therefore potentially of wider impact; I can't find any obvious reference to this feature with either a quick Google or a skim of the Apple RFC. Does anyone know?

</comment><comment><USER3> Link: [http://habrahabr.ru/company/mailru/blog/274855/](http://habrahabr.ru/company/mailru/blog/274855/)

<comment><AUTHOR> [https://translate.google.com/translate?sl=ru&tl=en&u=http%3A...](https://translate.google.com/translate?sl=ru&tl=en&u=http%3A%2F%2Fhabrahabr.ru%2Fcompany%2Fmailru%2Fblog%2F274855%2F) will work better, I suppose.

</comment></comment><comment><USER4> Heh, this 'feature' was the intended solution of a CTF challenge 3 months ago: [https://github.com/ctfs/write- ups-2015/tree/master/9447-ctf-...](https://github.com/ctfs/write- ups-2015/tree/master/9447-ctf-2015/web/super-turbo-atomic-gif-converter)

</comment><comment><USER5> Can the malicious video file be an actual mp4 file? We're accepting video and running it through ffmpeg, however we first verify the file is an mp4 using [https://golang.org/src/net/http/sniff.go](https://golang.org/src/net/http/sniff.go)

<comment><USER6> Possibly? Who knows? Parsers are complex and I doubt ffmpeg relies on file extensions to figure out the format.

<comment><AUTHOR> It does not, that's covered in the original article.

<comment><USER5> It does not what? Can you share quotes from the article or the translated article source you read?

Confusion:

Are you saying that ffmpeg doesn't detect file by extension?

or

Are you saying that ffmpeg won't execute the malicious code if it's found appended to a valid video?

</comment></comment></comment></comment><comment><USER7> Patch on chrome that enabled ffmpeg networking [https://codereview.chromium.org/1391383002/patch/1/10001](https://codereview.chromium.org/1391383002/patch/1/10001)

</comment><comment><USER8> PC... and also mac? I have ffmpeg installed via homebrew...

<comment><AUTHOR> It's «PC» as in «server»/«PC», not as in «mac»/«PC».

</comment></comment><comment><AUTHOR> By the way, mplayer is also affected, even after installing a fixed version of ffmpeg.

<comment><AUTHOR> Looks like it bundles libavformat internally.

</comment></comment><comment><AUTHOR> Hm. Why did this end up in [ask]? Perhaps I made a mistake when posting this =).

<comment><USER3> If there is text in the text box, it goes to "Ask HN" (or "Show HN" when that's in the title).

To post a link, there should just be a title and a link and no comment.

<comment><AUTHOR> Should I post this again with a link so it ends up in the news or not?

<comment><USER9> Ship's sailed I think, this is on frontpage, maybe dang will merge them at some point.

</comment></comment></comment></comment><comment><USER10> Any CVE or answer from upstream about it? Is Firefox as well affected?

</comment><comment><USER11> This is why you should use containers for running binaries on user-supplied data.</comment>


Feedburner CEO Moves to Twitter. Is Twitter The New RSS? - <AUTHOR> http://crenk.com/feedburner-ceo-moves-to-twitter-is-twitter-the-new-rss/ <comment><USER2> This will not happen. The two things serve a totally different purpose. I zoom through my many RSS feeds every day in Google Reader to catch up on the news (with context!) It will take me day's to do this in Twitter. Plus, Twitter is horrible as a informational source. Breaking news, yes. Catching up on the latest topics, noooo.

</comment><comment><USER3> I'll give this 10% of a thought the day you can subscribe to a twitter feed and not have it delivered via RSS...

Is twitter a new feed reader? Sure for some people, but is it replacing RSS as a delivery format? heck no.

</comment><comment><USER4> No. Twitter is a single website. RSS is a format used by hundreds of thousands (if not millions) of websites.</comment>


Show HN: Completely unofficial (and open source) Path client for OS X - <AUTHOR> http://www.journeyformac.com/

<comment><USER2> Do check out the source. It's a great example (and starting point) of TDD/BDD in Cocoa, which has yet to fully catch on.

[https://github.com/JourneyForMac/Journey/tree/master/Journey...](https://github.com/JourneyForMac/Journey/tree/master/JourneyTests)

</comment><comment><USER3> Some Context: [http://dev.anideo.com/2012/02/26/introducing-journey-the- uno...](http://dev.anideo.com/2012/02/26/introducing-journey-the-unofficial- path-client-for-os-x.html)

</comment><comment><USER4> woah.. u guys are awesome!

</comment><comment><USER5> cool!

</comment><comment><USER6> nice</comment>


How clothes should fit - <AUTHOR> http://howclothesshouldfit.com/ <comment><USER2> This is a fantastic primer on how to fit clothes. Since taking care to get well-fitted, nice clothes, my confidence has skyrocketed and I seem to get more respect. This is a great way for career advancement - ever notice managers are generally better-dressed (ignoring Zuckerberg, the exception to this rule)?

What I recommend to get started is go to a consignment/thrift store such as Goodwill and liberally buying cheap clothes that fit decently well. For shirts this mainly just means ensuring the shoulder crease lines up with the "angle" at the end of your shoulder. Take them all to an alterations store and have the nice lady fit everything for you. This will be the most expensive part of this whole endeavor. As a result you'll get a better feel for the types of clothes that work best for you as well as how clothes are supposed to fit, all for relatively little upfront investment.

Also get nice shoes. Reddit's malefashionadvice is notorious for advocating Clarks Desert Boots. There's a reason for this; they're fantastic. I own a pair, wear them all the time. Whatever you do, don't wear sneakers around unless you're a personal trainer. You're probably not in high school anymore, and nice shoes will instantly help you present yourself more professionally.

<comment><USER3> This comment is everything I don't want to be.

<comment><USER2> Really, why is that? I don't believe I said anything controversial. I personally haven't met anybody who, given the choice, prefers looking like a disheveled slob.

<comment><USER4> For one, people who wear sneakers often do it because they are comfortable. To equate them to high school teenagers if they are not personal trainers is quite unfair. You are free to advocate a more professional look, but if you get disrespectful on the way, people are going to hate your stance for it.

<comment><USER2> I stand by that statement more-so than any of the other ones, and I'm sorry if you found it offensive. Sneakers have no place in a professional environment. There are plenty of comfortable options for professional footwear.

<comment><USER5> In a professional environment where you're trying to sell/ negotiate, I agree with you. It's a natural reaction to make assumptions about people based on how they dress, and anyway in which you can give yourself an advantage is valuable.

Any other professional environment I disagree. Why? I wear crocs to work. I wish I could go barefoot. What does footwear have to do with software development?

<comment><USER6> So, here's the deal with tech companies, lax dress codes, and professionalism.

When business came about, there was a general idea that the quality of a person and their business dealings was reflected in the way they presented themselves. This was a big deal back when you had to physically interact with the businessperson. If their appearance was sloppy, cheap, unclean, or otherwise with no care put into it, often the products would reflect the same lack of care.

Fast forward to present-day. Joe Emacs sits in his Herman Miller, his "No, I Will Not Fix Your Computer" t-shirt stained by cheetos and free mountain dew. His sandals expose his grimy, untrimmed, twisted toenails. He smells of BO, either because he forgot to put on deodorant or hasn't showered in days, probably due to "marathon coding sessions". His hair is also greasy and smells.

Joe Emacs likes to shout over his cube to his co-workers, because why should he make the effort to get up? Joe Emacs likes to leave trash all over his cube. Joe Emacs blares youtube clips over speakers instead of headphones, annoying all his co-workers, preventing them from working. Joe Emacs likes to talk loudly about subjects that bother or annoy his co-workers. Joe Emacs is an asshole.

Compare Joe Emacs to Fred Altair. He comes to work in crisply ironed chinos and a dress-shirt or polo. His hair is combed. He smells nice. His brown leather shoes gleam in the fluorescent light. His desk is neat and tidy. He walks over to his co-workers and politely asks questions without interrupting. He uses headphones, and doesn't discuss religion, politics, or other controversial topics in the workplace.

It doesn't matter which you would _prefer_ to be. Joe Emacs is going to annoy his co-workers and make it a shitty place to work. Fred Altair will be appreciated by his co-workers, and make it a much more relaxing place to work.

But it's not about clothes. It's about professional attitude and environment, which is to say, respecting your co-workers and not becoming a burden on others. If you can do that while still wearing Crocs, by all means go ahead.

<comment><USER5> I don't understand. How does clothing choice have anything to do with respecting your co-workers? I think being judgmental about someone's sense of style is more disrespectful to your co-workers than wearing fitting, popular clothing.

<comment><USER6> The clothing choices I mentioned are more classic examples of behavioral stereotypes.... I don't encourage being judgmental at all. It's really not what you wear, but how you wear it and how you comport yourself in the workplace. But there are limits.

Barefoot is just not acceptable. it's unhygenic. Nobody wants to smell your feet, and even if your feet aren't smelly, you're at risk of developing a fungal infection, injury, etc. Wear some shoes.

The other aspect to picking a particular style or dress (let's call it "conservative dress") is that it makes people more comfortable. People are weird. Often they get uncomfortable if people around them dress different than they're used to. You see it in tech workers all the time: they say "I'll never wear a tie! Oppression!" or somesuch thing. Ties make them uncomfortable, just like people in shorts, sandals and a t-shirt with a slogan might make other people uncomfortable. Something in the middle would make everyone more comfortable, which makes for a better work environment.

But the way you dress can _influence_ the way you and your co-workers behave. In my experience, dressing more relaxed leads to more relaxed personalities, which has both great and horrible side-effects. People think they can act however they would with their friends, which (for tech types) might be very abrasive to strangers. It may also affect their work, or how they compose themselves in meetings. I can't tell you how often i've heard the causally- dressed guy tell someone to fuck off in a meeting, while the guy in business- casual is much more tactful. These are just some examples.

<comment><USER5> I have very little "work" experience, but from my limited experience I've noticed the opposite effect, the guy in a suit is way more likely to be a bully. That being said, I can imagine people acting how you say. I think that a company that has employees that act this way is seriously dysfunctional and I have no desire to contribute to that.

<comment><USER7> "I have very little "work" experience, but from my limited experience I've noticed the opposite effect, the guy in a suit is way more likely to be a bully."

After about 20 years in professional work, I can confirm that the nicer the suit, the bigger the asshole. The hack is to dress in a nice suit as well and then don't back down when the bully bombasts all over you. You'll probably end up with a promotion. Not backing down form a T-shirt position will probably get you laid off.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Somehow I associate suits with either dishonest people who use them to try and project false integrity (salesmen, bankers, recruiters, etc.) or servants who are forced to wear them by their masters[1] (porters, security staff, heck in some city offices even the cleaners wore them).

Since I like neither dishonesty nor subservience and find ties incredibly uncomfortable, I intentionally don't wear any such thing. It is astonishing how much we read into clothes though. I was regularly mistaken for a bouncer while standing outside a club wearing plain black clothes (despite drink in my hand).

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

<comment><USER7> "Somehow I associate suits with either dishonest people who use them to try and project false integrity (salesmen, bankers, recruiters, etc.) or servants who are forced to wear them by their masters[1] (porters, security staff, heck in some city offices even the cleaners wore them)."

You associate it correctly in all cases. As somebody who's come to appreciate suits as a powerful tool, it's worth learning the game. Wear a suit to a car buying negotiation and save a few thousand dollars on your next car, or wear the "livery" of your company and find yourself promoted faster than if you don't. It's stupid, but most people are stupid.

(I've learned how to wear a suit without a tie, try and project a comfortable, casual, glamorous [bm]illionaire look, they almost never wear ties with their suits [1][2][3]

1 - [http://cdni.condenast.co.uk/320x480/s_v/scowell_GL_15dec09_P...](http://cdni.condenast.co.uk/320x480/s_v/scowell_GL_15dec09_PA_b.jpg)

2 - [http://thenextweb.com/files/2010/11/branson2.jpg](http://thenextweb.com/files/2010/11/branson2.jpg)

3 - [http://edition.cnn.com/video/business/2010/09/27/sesay.niger...](http://edition.cnn.com/video/business/2010/09/27/sesay.nigeria.billionaire.cnn.640x360.jpg)

</comment></comment><comment><USER9> This should have been titled: How Clothes Should Fit __Thin_Men__

The same rules don't apply when your body is basically an amorphous blob.

<comment><USER10> Nobody's body is an amorphous blob, male or female.

It's simply a matter of design and convention - clothes are designed to fit some body types, and conventional clothing styles are predicated on "degrees of freedom" of possible design that can only comfortably suit some body types without looking like a tent or a gorilla suit.

Actually "male" formal styles have more give in their degrees of freedom than informal styles for either gender, or formal styles for women, because fat men have often been suit wearers.

Still, IMO, designers ought to see "fat people of any sex" as a challenge to their ingenuity. I'd really like to see what people would come up with if effort was applied, rather than merely shifting the proportions of something designed for thin people.

<comment><USER11> Mid-high end brands build their clothes to an aspirational fit model. Most people are forced to make that fit work for them, either through tailoring, or optimizing around what attributes of their clothing are important to them. Fashion is pretty backwards on fit - bottom line is wear your clothes the way you want to wear them, swag or no swag.

</comment></comment></comment><comment><USER12> I believe this is sourced from reddit's MFA FAQ.

[http://www.reddit.com/r/malefashionadvice](http://www.reddit.com/r/malefashionadvice) sidebar has more useful info.

</comment><comment><USER13> _" No pants should need a belt to stay on your hips."_

So I suppose I should quit pants altogether, or only wear pants with elastics, since I can't find pants long enough for my legs that don't fall off anywhere. I have only one pair that fits me without a belt, and I had to buy it in Spain (I'm from Argentina); apparently teenagers are taller there so a they had my size.

I know these articles can't work for everyone, but it really bothers me how hard it is to find clothes for some body types.

<comment><USER14> > _So I suppose I should quit pants altogether, or only wear pants with > elastics, since I can 't find pants long enough for my legs that don't fall > off anywhere._

Or, you know, you could always have the longer ones adjusted at a tailer.

Or you could order made-to-measure pants if you are such an outlier.

<comment><USER13> I know there are solutions to the problem. I don't particularly care for going to a tailor, so I wear belts (which are also hard to get in my size, but using kid's belts is viable, and I change belts a lot less than I change pants). But I'm still annoyed whenever I have to shop for clothes; it's an extra effort I don't care for.

</comment></comment></comment><comment><USER15> This would have been pretty useful to me back when I was 15-18. I've got some heinous pictures of me wearing a suit jacket that was much too large and dress pants that were far too baggy. And pleated.

<comment><USER16> Same here. I recently read somewhere that certain men's stores purposely sell suits that are too big. Not sure why that would be a good idea.

<comment><USER17> Tailoring services.

</comment></comment></comment><comment><USER18> God, they had me until they made the mistake of advising against pleats. I personally prefer them, but I'm not going to say which you should wear, and anyone who does is trying to trick you.

Pleats come in and out of fashion, whereas fit is something that is pretty well-understood across time. Bitch, please.

<comment><USER19> I don't know if it is a question of whether they are in or out of fashion. Some people can pull off pleats, but when they don't look good, they _really_ don't look good. If someone is reading this primer, they are probably not in a position to tell which is which.

<comment><USER18> A fair point. I suggest only that whether or not you can pull off pleats has a lot less to do with your build or any other personal characteristic and a lot more to do with the kind of pants you're wearing (and whether you are wearing them properly). (To be fair, if you have massive thighs, you basically have to have pleats; this is not an issue for most people though). And so as regards fashion, it's not a matter of whether pleats are in fashion, but how high a rise is fashionable.

If you wear your pants anywhere near your hips, you will look like a clown if you have pleats. Likewise, pants which were made to be worn near the hips are clown-pants if they have pleats.

If your pants, however, have a high rise, and you are man enough to wear them at your natural waist, then pleats will make it possible to sit _and_ stand in your pants and not look like a total fool.

</comment></comment></comment><comment><USER20> This should have been titled "How Clothes Should Fit __Corporate_Drones__"

<comment><USER21> Oh, you never go to weddings, funerals, dedications, meetings with old school customers, benefit dinners, graduations, award ceremonies, court, formal dinners or church?

Just because people are not required to wear formal clothing everyday does not mean they don't want to look sharp when they do-

</comment></comment><comment><USER22> How [Men's] Clothes Should Fit.

<comment><AUTHOR> i just chopped the url :) iam not the author of the site!

</comment></comment><comment><USER23> A good reference for anyone encouraging "Formal Fridays" or something similar around the office. There's a lot to be said for the occasional break from the routine of t-shirt and jeans.

</comment><comment><USER24> This is incredibly American centric and ignorant of variant weather conditions. Try wearing a fit shirt, long pants and leather shoes in 90+ weather...

<comment><USER14> > _Try wearing a fit shirt, long pants and leather shoes in 90+ weather..._

That's around 32 oC? Yeah, what about it? People working in "serious" businesses, like banks, etc do it all the time. Not only in 90+. Even in 105+.

And even I, that dress casually (t-shirt, jeans), have never had a problem with jeans and leather shoes even in 105+.

You really think that shorts, that get you direct skin exposure to the sun are ...better than long pants?

Even people in African deserts and such (were it's more like 110+) are wholly clothed (covered).

<comment><USER25> humid 32 C in a dress sounds like death.

<comment><USER14> Don't know about "dress" (I'm no cross-dresser), but humid 32oC was OK for me in Singapore in jeans. And businessmen wore long pants too.

Ditto for New Orleans -- though I've only spent like 2 weeks there.

<comment><USER25> Oops, yeah I meant suit. I got my languages mixed up.

</comment></comment></comment></comment></comment><comment><USER26> For more, in video form: Put This On [0]

[0] [http://vimeo.com/putthison](http://vimeo.com/putthison)

</comment><comment><USER27> Fat shaming in the first sentence.

<comment><USER28> Yeah, not at all.

</comment></comment><comment><USER29> I have a feeling that a lot of people on HN could truly benefit from this.

<comment><USER25> You've seen a lot of pictures of people here? Or are you purely basing that on stereotypes?

</comment></comment><comment><USER30> Just sent it to Mr. Zuckerberg.

</comment><comment><USER7> If you're cynical like me and think "dressing well" is a code word for "conform!", you can look at adopting the costume every once in a while (used judiciously) as a kind of hack that will get you what you want more often than wearing my normal uniform of loose shorts an old t-shirt and flip flops.

Knowing when to throw on a decently tailored suit, a nice shirt and a pair of well matched shoes (even if your screaming inside to kick them off after a half hour) has gotten me contracts, procurements, jobs, raises and let me get away with figurative murder quite a few times. It says "I'm part of this club, I'm playing this game, let's not let a few hundred thousand dollars come between us."

I hate suits and think they're a symbolic harness the modern world uses to remind workers they're one step away from either a hanging or working as a beast of labor, but using them as a tool to extract money from people is a perfectly valid tactic. In other words, I hate not making money more than I hate wearing a suit.

The problem? I'm personally built like a square, and when I was younger and in better shape it was even worse. Very little on this page is relevant for me. Years of kickboxing built up thick thighs and calves and makes slim cut pants look ridiculous, likewise a 17.5" neck means I _might_ find a single Oxford at any given store regardless of style. Wide feet and high arches mean fine shoes feel like Chinese foot binding. Round or narrow tipped shoes look absolutely absurd on my frame, square toed shoes look far better and much more consistent.

Here's my hacks that end up looking decent if I need to: Go west coast, no tie. Leave the top button undone. No shirts with button-down collars, those are meant for ties. Slip on wide square toed dress shoes with good grippy soles. Sleeve length and shoulder fit here are dead on (you wouldn't believe how many people aren't aware of how shoulders should fit). Never button your blazer or suit jacket -- keep at least one hand in your pocket for the cool "I'm a guy in a suit" look, everybody will be doing it anyway. A barrel chest and years of _not_ kickboxing have given me a healthy man-gut no blazer fit will ever work with. Just make sure the shoulder and sleeve length is right and you'll be fine. I take the jacket off at the start of meetings anyway. If negotiations of lots of paperwork start, roll your sleeves up, it'll cool you off and make you look serious while working on this "hard stuff". Regular cut pants, no low cut, shirts don't like staying tucked in well. Being built like a square means coats below the waste are an absolute no-no. P-coats work well if you absolutely need a coat. Avoid pleats at all costs. Flat-toed shoes, round or pointy toes look absurd on my square body shape. Tuck your shirt in properly, and starch the collar. Nothing says "retail worker forced to wear this" more than shirts that aren't tucked in right or messed up collars.

To paraphrase the Romans, worship these gods in public for approval, abandon them in private for a comfortable life.

<comment><USER31> Just curious why you feel so paranoid about "conforming"?

I feel like until somebody tells you that you "must" dress some way, then anything else is just opinion that you may or may not agree with. There is so much anger directed towards the top post on this thread because he shares his opinions on mens haberdashery.

My bottom line is that when I wear a suit that fits me like a glove, when I have a crisp, clean collar stand up against the back of my neck, when I slip on a nice pair of shoes -- carefully crafted and made with great materials, the kind that will last you easily 20 years -- when I do all that, I always just feel so good about how I look and how I feel.

Sometimes a tie isn't comfortable. So sometimes I endure the discomfort for a specific reason, other times I just don't wear a tie. But I never bristle with the anger at 'conformity' so I thought I'd ask you.

</comment></comment><comment><USER32> The illustrations are not loading properly on FF24.

<comment><USER33> Odd. All the images are SVG. And they revert to PNG when SVG is not an option.

</comment></comment><comment><USER34> Oh, men only. :(

<comment><USER35> [https://reddit.com/r/femalefashionadvice](https://reddit.com/r/femalefashionadvice)</comment></comment>


Wall Street Mothers, Stay-Home Fathers - <AUTHOR> http://www.nytimes.com/2013/12/08/us/wall-street-mothers-stay-home-fathers.html?hp&_r=0

<comment><AUTHOR> Being in tech is a great way to stay home and take care of kids while your spouse is out of the house at a "traditional" job. A technologist may have an "office" at a place of business, but they don't always have to be there.

Any of you out there get to use your remoting capabilities to raise children while your spouse maintains a normal job?</comment>


A proposal to launch the world's first government ICO - T-A https://e-resident.gov.ee/estcoin <comment><AUTHOR> I think I'm in love with this small country and its government. Not because of this proposal - the fact they're even talking about it is enough for me.</comment>


The Loneliness of the Long Distance Rocker - <AUTHOR> https://thebaffler.com/salvos/long-distance-rocker-miller <comment><USER2> What's interesting is that Bandcamp is relegated to a passing note at the end of the article, but the service that Bandcamp offers is better than almost any record label contract in the "good old days". You get a much higher cut of your profits, and you almost certainly keep the rights to your own music.

The downside in the new arrangement is that you're expected to do more of your own promotion. However, as your visibility grows you can hire someone to do that.

In terms of human connection, there's still plenty to be had in the act of performing music.

When it comes to starting to learn an instrument, I agree that there are fewer role models around than when I was young. However, popular music moves in fads. Where I'm from, guitar-based music was last "in" in the late 00's, I'm sure it'll come around again.

<comment><USER3> > _The downside in the new arrangement is that you 're expected to do more of > your own promotion. However, as your visibility grows you can hire someone > to do that._

The real downside is that with no gatekeepers there and so many acts (orders of magnitudes more) you can make and release albums that nobody hears at all.

Whereas in the past, if you made it to have an album out, you had a small following almost guaranteed.

At least back when you couldn't even make the album without being picked by a record company, you could blame your failure to those A&R guys that failed to appreciate you, or get your lack of contract as a sign that you're not good enough to begin with.

Now that you can easily make an album, everybody both feels more entitled to success, but also gets to see firsthand how the audience just doesn't care.

<comment><USER4> _At least back when you couldn 't even make the album without being picked by a record company_

Though I get what you're driving at, there have been companies that will press your basement demo onto a vinyl LP almost as long as vinyl records have been made (and later cassettes and CDs, of course). They'd do the artwork, too, from "we'll have an in-house artist do it for lots of money" to "we'll put your camera-ready art on it for a little extra". But pre-internet, that meant selling the hard copies at shows and _maybe_ the local indie record store. What one is missing, of course, is the promotion from a label. But the production of hard copies of music hasn't been a barrier for a long time.

<comment><USER5> "...the production of hard copies of music hasn't been a barrier for a long time."

How many copies must one have ordered up front? I'd guess it was so many as to have been prohibitively expensive for a fledgling artist to handle.

<comment><USER6> You can do as little as 100, but I think most small artists get 300 made cuz that's where the price per unit gets low enough that you can at least hope you'll make your money back.

Prices have gone up a lot in the last 5 years. I think it'll run at least $2,000 to get an LP pressed. Plus a year wait. Probably half that or so for a 7".

Depending on the label youre with (theres a ton of 1 person labels), you can split the cost. If theyre bigger, they'll just pay for it.

</comment></comment></comment></comment></comment><comment><USER3> > _It's all different now. My own observation of the current music industry is > colored by my history with the extinct model. I can't begin to imagine what > it must be like to come up in this world of SoundCloud rappers and Swedish > hit factories churning out auto-tuned EDM or whatever. Believe me, I'm > keenly aware that even these two meager examples must make me sound > impossibly old. My point is that if I was a fourteen-year-old depressive > nowadays, I'm not sure what would even draw me into the world of music to > begin with._

Not much. And indeed, kids todays are much less invested in music than kids where in the 60s till the 80s or so.

For one thing, there are now tons of competing outlets that weren't around then: tons of movies of all eras available (and most current top-tier movies made for teenage sensibilities, less All ), great TV series with huge production values, Netflix and co, YouTube, Twitter, Snapchat, Facebook, the web at large, texting, computers, mobile apps, and games.

Besides, there's less mystery in music acts (total transparency and 24/7 social media exposure for any fan who cares who check), less exclusivity (all music available on online services), and less ubiquity (each act gets a much smaller of the attention pie, and can even have a top-10 hit nationwide that half the nation haven't even heard or knows -- something impossible when there was huge radio and only a few TV stations and outlets and hits were hammered constantly without other recourse to everybody).

</comment><comment><USER7> First, I was curious to know if Google ripped this guy off. I could only find his song ([https://www.youtube.com/watch?v=wdM4zNN- PxU](https://www.youtube.com/watch?v=wdM4zNN-PxU)) not the Google ad. But, as a (amateur) musician myself, I don't think there is much to the chord progression. It sounds like a thousand other songs - the lyrics and delivery are what make this song unique and good.

Second, incredibly well-written. Very persuasive.

Third, it's been clear for a long time music was going to only get harder to succeed in, for the sole reason that as time goes on you are competing with the entirety of music history. Your recorded music is competing with everything ever recorded, Beatles, 80's glam rock, Mozart, and rain forest nature sounds. (Live music has magic, yes, but people are getting immune to it.)

Fourth, the 60's-00's was a golden era where technology made it just barely possible to record and distribute music, in a way that required a lot of labor. That labor made it more collaborative, and served as a kind of distributed gate-keeper to the market. Now, technology is too good, and unless an EMP pulse from a solar flare or nuke destroys all digital recordings of everything, it's not going to turn back.

Fifth, I think the solution is to embrace and extend the modern trends. Get people to collaborate with you on stage using their cell phones. As a performer, connect your phone to the PA, then run a webserver that people in the audience can access over the local subnet. They can then affect the sound in arbitrary ways (perhaps most simply by making beats).

</comment><comment><USER8> The nice thing about the old world of music was that when you played for an audience there was nothing going on but what you were doing. Now the band has to compete with everyone's phones.

<comment><USER9> The two Misfit reunion shows have a no cell phone policy. They even have secure lockers set up to store them.

<comment><USER3> The problem is that the band still has to compete for the instant gratification that those (now locked) cell phones offered their fans all day around.

<comment><USER10> That doesn't seem like it should be that hard. You are at the concert experiencing the concert, which should be pretty instant and gratifying. Either you like it enough that you don't miss your phone, or you decide that the concert experience isn't what you're looking for.

Being at the concert but doing something else seems like they are doing it to say they were there, and there are are always other ways to signal status people can fall back on.

</comment></comment></comment></comment><comment><USER11> The artwork is done by Brian Chippendale, the drummer from Lightning Bolt, who are the greatest band in the world.

<comment><USER12> The best show I ever saw was Lightning Bolt in an abandoned warehouse with a couple of drone/dark ambient acts opening up. It was surreal, amazing experience. They are crazy live.

This piece was written by Rhett Miller of the Old 97's, who are a similarly great live band who are absolutely worth seeing if you can.

<comment><USER13> I had a similar Lightning Bolt experience in college in Indiana. Did the audience surround the band in a circle?

<comment><USER12> Yup, even when I've seen them play at clubs with proper stages they set up their kit in the middle of the floor.

<comment><USER13> I always loved that about them, it's such a friendly gesture and shows a real level of trust they've been able to establish among their fan base.

Nice username by the way, but I hope Metheny does not die for some time. :)

</comment></comment></comment></comment></comment><comment><USER14> It's kind of hard to disambiguate the time in my life and the music that I grew up liking with everything else, so it's really difficult to judge for me. I recognize that sort of 'scene': one of the redeeming things about growing up in Eugene was seeing the Daddies play at the local place. Still an amazing band in terms of being good at being eclectic. Maybe technology is letting people connect with the sort of music they like these days in other ways though?

</comment><comment><USER15> Not that long ago it was far assumed that record labels would loose their power and the easy path to production and promotion would lead to a lot more independent structures. What happned that we still have a similar superstar culture as we had 20 years ago?

<comment><USER16> Check out hip hop. Many of the current stars started out posting videos to YouTube or tracks to SoundCloud.

The diy hustle of making mix tapes and homemade videos is how the current stars of rap, Migos, blew up.

SoundCloud rappers are a thing. It's a drug influenced, dreary subgenra that's launched dozens of stars, lil uzi vert or for example.

<comment><USER15> But why do they almost all still end up at one of the big 3 labels? Or are there many soundclouders actually able to make a decent living from it?

</comment></comment></comment><comment><USER17> > For every one of these fledgling anarcho-syndicalist collectives, there are > a thousand or a million kids alone in their bedrooms staring at Protools > screens wondering what they have to do to get the Swedish cabal to write a > hit song for them.

There's always been pop music. More people were listening to Ace of Base and Hanson in the '90s than to Nirvana and Pearl Jam.

I get it's a personal essay, but I wish he had spent some time talking to young people who _are_ making music about their actual practices.

To bring it back to HN, nobody's typing Basic code out of Creative Computing or swapping homebrew code on the local BBS anymore, but there are more people making video games than ever.

</comment><comment><USER18> Edm is still extremely social and face to face.

Keep in mind that dance music is fundamentally music for a club and designed to be experienced on a loud system in a dance floor full of people.

The process of making and distributing the music may be digital and remote, but the intended way to experience it is as social as it gets.

If you want your music to get attention one of the best ways to do it is to go to a lot of clubs, and meet promoters and DJ'd face to face and to DJ yourself.

</comment><comment><USER19> One thing the articles references, which I don't think people grasp yet,is that young people are inclined to create the music in the vein that they listen to. Nowadays, that means music that is entirely synthetic in its sound sources, and production methods. This music is not "performed" it is "programmed." The expressiveness of music is no longer tied to some kind of real-time activity, generated by human muscle.

The music that dominates the charts simply cannot be performed. A concert of this music is more akin to a pantomimed multimedia presentation.

Because the care and feeding of an actual musician is quite high, I think we are undergoing the end of musicians, as a category. This is the end of an ancient practice. It's a kind of singularity, of unknown outcomes.

This is not to say there won't be some musicians, but the cultural weight of this activity is being drastically marginalized.

Performing music with others is a wonderful activity, that provides rewarding connections with others unlike anything else I know. Soon, people won't know what they are missing.

<comment><USER20> _This music is not "performed" it is "programmed."_

I think this is a false dichotomy - it's often both. Even people using completely digital sources (like electronic musicians) still perform live, and not all just press play.

I'm also reminded of Bret Victor's demos in _Stop Drawing Dead Fish_ ; programming and performing can be intertwined into new art forms.

</comment></comment><comment><USER21> Any advice for the parent of a teenage who absolutely loves making music?

<comment><USER22> [https://www.goodreads.com/book/show/13648043-platform](https://www.goodreads.com/book/show/13648043-platform)

<comment><USER21> That looks really interesting, thanks!

</comment></comment></comment><comment><USER23> The end of culture -> a culture needs a community to generate it, the current set of social structure being mediated by internet technology isn't sufficient.

</comment><comment><USER24> Anybody have favorite sites for music discovery? Soundcloud any good? Reddit? Blogs? NPR Tiny Desk?

Years ago, I used to use the "similar" feature in Rhapsody and found some music that way, not sure what people use today.

<comment><USER20> In my case, YouTube (related videos, not their recommendations), Wikipedia and search engines. But that's with active search, not passive suggestions.

</comment></comment><comment><USER25> Yes, the rock music scene is dying, but some other music scenes are very alive and social (like edm). So we probably shouldn't blame YouTube. It's just rock music that's dying.

<comment><USER26> Sixty years is a pretty good run. I think that's longer than the jazz era.</comment></comment>


Did capitalism hack the open-source model? - <AUTHOR> https://firstname.lastname@example.com/did-capitalism-hack-the-open-source-model-cf4f6278c17a <comment><USER2> I would be a lot more sympathetic to articles like this if they didn't all end with, "and therefore we should all just move back to proprietary licenses."

> _With the open-source model, the breach is the absence of a business model — > not the fact that it is free, but rather, the absence of rules._

On the contrary, literally the whole point of the free software movement was to have an absence of rules. The "not needing to pay money" part was a side effect; an optional side effect that developers were _encouraged_ to subvert.

People can argue that the lack of rules is a problem, but it's important to recognize that when they say things like this, they aren't saying, "Open Source has some flaws we need to fix." They're saying, "Open Source fundamentally doesn't work, and we should abandon it."

Put aside the complaints about Google and DRM, and the main gist of this article is arguing that the "patch" for Open Source is to get rid of forking.

<comment> maze-le >> Put aside the complaints about Google and DRM, and the main gist of this article is arguing that the "patch" for Open Source is to get rid of forking.

Well, that kind of is the "open" part of "open source". If you are free to redistribute code, it implies that you are free to fork. I wonder why the author doesn't push for more restrictive licensing models (like GPL) instead?

<comment><USER2> The ironic part is that the one of the reasons this article was written in the first place was because the author tried to build a product off of Chromium and couldn't -- because modern Chrome relies on proprietary DRM modules that can't be forked.

And the takeaway they took away from that was, "authors should have _more_ control over what other people do with their code."?

</comment></comment></comment><comment><USER3> I look at another part of society, where the hacking and getting hacked has a long tradition- lawyers and the law. And money subverts them all. In the long run. So lets look at yet another part of society- our own bodys. How does the body detect intruders, or even prevent theire entrance?

1) Provide no interface for hacking. Our stomaches and colons are our main energy interface - they regenerate at a increddible rate. Slimy, colon cells, they live fast, they die fast, holding on to them is near impossible.

2) Have a pre-warn system for getting hacked. If your sensory apparatus deteriorates, go in full reverse on all operations.

3) A general good feature to have - the ability to undo damage, by doing a full reset to a previously working state. Good in software development, good for a society, its a nice last line of defense, that the comon citizen can veto-vote direct democratic.

4) Divide and Conquer: Prevent accumulations of power, by allowing monopolies to be legally usurped. Can proof your employer is in a cartel/monopoly? Congratualations, you are allowed to march out with x% of the company into a seperate company.

5)Dont be a static target. A passive defense is weakness, as it gives the attacker infinite attempts. If attacked, and the attack is proofable, dissolve the attacker, integrate his strengths into the defenses.

</comment><comment><USER4> Most open source models (bsd, gpl2, mit, etc.) were meant to harness capitolism, and they seem to have done rather well with a few glaring exceptions like android. Arguing to abandon it because its not the communist utopia promised by literally nobody is asinine.

<comment><USER5> When we talked a decade ago about "when open source wins", we were really excited for it. Now that it's happened, some people are freaking out. This is what winning looks like, though. This was the plan all along.

</comment></comment><comment><USER6> I'm sorry, but this article just seems to muddle the issues, based on some misguided idea that open source was a method for plucky independent developers to profit from the code paid by big corporations (in this case, Chromium) while being immune from their power.

The whole premise that "capitalism hacked open-source" is itself ahistorical: if anything, open-source was a creation of capitalism, by people who disliked that Free Software had ethical implications, and wanted a term that would strip those and make it "corporation friendly".

Does Google and other big corps profit off open source developers? No shit; that was the point.

</comment><comment><USER7> I see open source and capitalism as very similar ideas. It really is summed up in the absence of rules. And I like the analogy from the article

> empty spaces do not remain vacant for a very long time

But this seems to be impling that we _need_ rules otherwise they'll be taken up by greedy companies. I think this is underestimating the role of the individual, who ultimately is the one who decides who gets business.

Maybe instead of being "Google addicts" but expecting the everything to be balanced, maybe we should be more conscious and intentional about who gets _our_ business.</comment>


How much is a themed Google logo worth? - <AUTHOR> http://owocki.com/2009/11/how-much-is-a-themed-google-logo-worth/

<comment><USER2> I find that people persistently overestimate the worth of "traffic". "Traffic" has no value.

Intent has value. To what extent does clicking on the Google logo demonstrate intent for a commercial transaction? I'm guessing "close to zero". Yay, your bar code site got 100,000 viewers who are not in the market for bar code solutions. That and $3 will pay for my morning cup of coffee.

(To the extent there is _any_ value, it is leveraging the momentary and fickle attention of the Internet mayflies to get links, which will have SEO value long after the few seconds of fascination have passed.)

<comment><AUTHOR> That's a fair analysis. Jeff Powers, co-founder of Occipital (the company that makes the #1 bar code scanning app in the iPhone app store), actually just left a comment on the article mentioning that they got a bump in sales from the Google logo.

So, while I agree that the attention was momentary and fickle (as most internet traffic is), I do still think that there is opportunity for some to turn the traffic (and the curiosity of consumers that it represents) into intent, and then into value.

<comment><USER2> _Looking at the stats, we had at least 1000 extra new users for RedLaser on that day as a result (even though it can't scan that format)._

I am going to assume that the overwhelming majority went for the free trial version, rather than the one which costs a whole $1.99. They are not going to convert, because they don't need a bar code reader and, even if they did, they don't need RedLaser. But supposing, fairly generously, that 5% of them converted, that would pay for about one hour of engineering time. I suppose that pays for you Tweeting about it or taking notice of it on your blog, but not much more than that.

<comment><AUTHOR> Actually Red Laser doesn't even have a free version.

<comment><USER2> Wow. I have to admit, if you are correct and that is 1,000 extra paying customers in a day, I am suitably impressed. (Not that $2,000 will make or break large businesses but, hey, that would be five months of rent for me.) However, an article from their blog as of August suggests that there is a free beta version, and their web site lists a free SDK.

<http://occipital.com/blog/>

If it is 1,000 marginal sales, break out the party hats, but if it is 20 sales and 500 beta downloads and 480 SDK downloads...

</comment></comment></comment></comment></comment><comment><USER3> So .. how much is a themed Google logo worth, other than 'quite a bit'?

<comment><AUTHOR> That's up for speculation.

</comment></comment><comment><USER4> I was hoping this article would answer the question in the title. I am very let down by this article, and its status on the front page.

This post is simply, "Hey here are some graphs that show a jump in traffic".

</comment><comment><USER5> In the case of Sesame Street, let's not forget that the Google logo coincided with a large amount of press coverage of Sesame Street's 40th Anniversary, quite independent of Google.

</comment><comment><USER6> I'd be interested to know how many Droid sales were made via the frontpage link.

<comment><USER7> Probably not many. Buying a new phone is an expensive proposition that involves paying $200, terminating a legal contract, signing a new legal contract, etc., etc. That is a lot more effort than clicking two links (which is what happens if you click the themed logo and click the first result).

</comment></comment><comment><USER8> more than most people make in a lifetime.</comment>


List of cognitive biases - <AUTHOR> http://en.wikipedia.org/wiki/List_of_biases_in_judgment_and_decision_making

<comment><USER2> The size of this list is scary!</comment>


Implementing a Convolutional Neural Network from Scratch in Python - <AUTHOR> https://victorzhou.com/blog/intro-to-cnns-part-1/ <comment><USER2> Scrolling HN, I saw the two words I'm always weary of - "from scratch". Mostly because I will click on the link, hoping to learn the mathematics behind a particular algorithm, only to see they've import sklearn and skip over all the explaining of how things are ACTUALLY getting done. Not that these types of tutorials do not have their place, but its irksome to see "from scratch" including most of the hard part being done.

With that, thank you Victor. Specifically because you did not do this at all and instead wrote a very easy to follow guide. I think this type of learning material will be very useful for CS and mathematics. The idea that very complicated algorithms must be explicitly implemented and then walked through, rather than symbols in a white paper will help make the mathematics of CS more applicable to everyone.

And to anyone bringing up numpy, it is at a level of "prepackaged" I'm fine with. I'm not going to raise my own pigs and chickens to make a breakfast burrito, but saying I did it from scratch by microwaving a frozen one isn't going to cut it either. Numpy is like the basic ingredients to the recipe. While something like sklearn or tensorflow are perfectly acceptable, I wouldn't say that's the best method for learning CNNs.

<comment><USER3> This story started really bad, but what a plottwist!

I saw this very same posted here in HN or Reddit last week methinks, and one of the top comments was complaining preciselly about numpy.

You disarmed that point right from the start, so kudos.

<comment><USER3> I stando corrected based on a comment form the author that is found below: Last week's post was the previous one in this series.

</comment></comment></comment><comment><AUTHOR> Hey, author here. Any/all feedback is welcome, and I'm happy to answer questions.

Previous discussion on HN of the "introduction to Neural Networks" referenced in this article: [https://news.ycombinator.com/item?id=19320217](https://news.ycombinator.com/item?id=19320217)

Runnable code from the article: [https://repl.it/@vzhou842/A-CNN-from-scratch- Part-1](https://repl.it/@vzhou842/A-CNN-from-scratch-Part-1)

Github: [https://github.com/vzhou842/cnn-from- scratch](https://github.com/vzhou842/cnn-from-scratch)

<comment><USER4> Honestly: the "convolution" (cross-correlation) part in your article is the clearest step-by-step explanation I've ever encountered. Well done!

<comment><USER5> For those interested in a clear explanation of the backward pass (especially for convolution layers), here's a good resource:

[https://arxiv.org/abs/1811.11987](https://arxiv.org/abs/1811.11987)

[https://github.com/Ranlot/backpropagation- CNNs](https://github.com/Ranlot/backpropagation-CNNs)

<comment><USER6> came here exactly looking for the backward pass

<comment><AUTHOR> I'll have a sequel explaining the backward pass with full code up by next week!

</comment></comment></comment></comment></comment><comment><USER7> This is a great tutorial. However, every time I see RNN/CNN it's always applied to some video stream or set of images. I really would like to find some tutorial but applied to event logs or other text-based input. Anyone has a good link for that?

<comment><USER8> Andrej Karpathy has a pretty good introductory article to RNNs here: [http://karpathy.github.io/2015/05/21/rnn- effectiveness/](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)

He has some code which is pretty easy to follow to go along with the article: [https://gist.github.com/karpathy/d4dee566867f8291f086](https://gist.github.com/karpathy/d4dee566867f8291f086)

</comment></comment><comment><USER9> > If you trained a network to detect dogs, you'd want it to be able to a > detect a dog regardless of where it appears in the image. Imagine training a > network that works well on a certain dog image, but then feeding it a > slightly shifted version of the same image. The dog would not activate the > same neurons, so the network would react completely differently!

But CNNs only deal with translations. What if the image of the dog is rotated?

<comment><AUTHOR> True! If dealing with stuff like rotations is a concern, you could augment the training set by applying small random transforms to it (like rotations, cropping, scaling, color adjustment, etc).

<comment><USER9> Ok, this makes me wonder how humans do it. Would a person who has never seen a rotated upside-down dog recognize it?

<comment><USER10> Well, human children do train their vision in a lot of different ways while playing, and probably very early develop a mechanism for dealing with all kinds rotated objects.

For some objects though, even adults are not instantly good, reading text upside down is something that is initially very hard, but with some practice it can be done, I've met some teachers that can do it from years of tutoring people from other sides of desks.

</comment></comment></comment></comment><comment><USER11> You copy code and figures from karpathy lecture notes and did not cite him. Its call plagiarism.

</comment><comment><USER12> Where's part 2? That's going to be the thing that's actually non-trivial

<comment><AUTHOR> It's in the works! I needed a few more days to polish it up. It'll probably be up by early next week.</comment></comment>


Ggplot2 book: the book contract with Springer. (2014) [pdf] - <AUTHOR> https://github.com/hadley/ggplot2-book/blob/master/springer/contract-2.pdf <comment><AUTHOR> I am very grateful for the author (and Springer) to show us how a -- presumably -- typical contract with a major publisher looks like.</comment>


Cells. A massively multi-agent Python programming game. - <AUTHOR> http://phonons.wordpress.com/2010/06/01/cells-a-massively-multi-agent-python-programming-game/ <comment><USER2> I got so excited for this that I actually began thinking about writing interfaces to the game for other languages. It'd be fun to compete in a Lisp vs Python—maybe one language would lend itself to a certain kind of tribe.

I'll be looking at the source soon, but in the meantime I'm curious to see if other people would be interested in playing this. There could be a repository of genomes/tribes you can download and compete against, or perhaps this would be done server-side so your tribe's genome couldn't be cloned?

As a side note, it seems to me that (unless cells can be aware of their comrades' positions) global position needs to be availible in order to build walls, which is damn cool.

Cheers!

<comment><AUTHOR> Great, I'm glad I'm not the only one that likes the idea! Interoperability to other languages is definitely on my list for the future, and a kind of ladder- server, too, where you submit your tribe and it enters into a perpetual tournament and gets ranked.

<comment><USER3> Why stop at a ladder-based tournament system? It would be awesome if we could have all submissions put into a persistant world and go on until they all die out. Kind of like a mmorpg for AI robots.

<comment><USER4> This is what I thought the article was when reading the title. It totally should be; how hard could it be to hack something together and run it on appengine?

</comment></comment></comment></comment><comment><USER5> Recently, since SC2 beta hit, I've been mulling about the idea of a "programmable RTS" -- an RTS that allows you to preprogram unit AI in some fashion, and then plays in such a way that your programming really factors into the game. For example, maybe you have many little units, so that it's difficult to micro them separately, or maybe the battles operate very quickly, or your units have an unusually large amount of active abilities.

After all, most of your APM in a game like Starcraft is going toward things that you could replace with a very small shell script. Although I can't argue with success, it's always felt silly to me that a big part of the game is just building enough intuition and reflex so that you can actually spare your mind to think about the interesting parts. If you can simplify the reflexive pieces at "game-time" while keeping them interesting in a different way, that might leave you with a game that's even deeper strategically.

However, it would be a difficult exercise to make an RTS that was dynamic enough that some folks with a lot of spare time didn't just write "ultimate" AI for all the units that is close-enough-to-perfect, and distribute that to all lazy players. Perhaps one might establish limitations on the resources or length of scripts you can write, so that it's difficult to write a script that is simultaneously effective for strategy A and different strategy B, and you need to specialize your code based on your style of play.

<comment><USER6> Here is a programmable RTS that is a lot of fun: <http://www.hacker.org/bitbath/>

<comment><USER5> That's really cool. Thanks.

</comment></comment></comment><comment><USER7> I've developed an extremely aggressive AI that is able to wipe out mind1 in about a minute. It's based on mind2 but uses a better algorithm for exploration, and, when attacked, it calls for help rather excessively. [http://github.com/swolchok/cells/blob/master/crawling_chaos....](http://github.com/swolchok/cells/blob/master/crawling_chaos.py)

EDIT: my fork also cleans up a couple real issues, including letting the game run properly when psyco's not installed and allowing the user to specify minds on the command-line (albeit in a hacky way).

<comment><USER7> The evolving chaos is able to take out the crawling chaos through improved colonization behavior and the possibility of developing several disparate strains. Haven't tried porting the fixed behaviors back to the crawling chaos and seeing if the "zerg rush" strategy is just better.

[http://github.com/swolchok/cells/blob/master/evolving_chaos....](http://github.com/swolchok/cells/blob/master/evolving_chaos.py)

<comment><USER8> Couldn't resist giving it a try myself and created my own program 'ben'. It was a good excuse to learn Python. Ended up with a solution that does a good job and can usually (19/20 times) beat the ones in included in the repo. Pushed my program up on github: <http://github.com/icefox/cells>

Here is a video (sorry using Quicktime which only grabs the whole screen and not a window) of evolving_chaos v.s. ben which is fun to watch <http://www.youtube.com/watch?v=Zy_-4rRmOCc>

<comment><AUTHOR> That is very nice. Fun to watch. I've included it in the repo.

<comment><USER7> benvolution makes some tweaks to ben in order to defeat it. :) It does have a reasonable chance of stalemating, and of getting overwhelmed if the starting locations are close together.

[http://gitshub.com/swolchok/cells/blob/master/minds/benvolut...](http://gitshub.com/swolchok/cells/blob/master/minds/benvolution.py)

<comment><USER4> And benmark draws from and defeats both :-)

[http://github.com/markoconnor/cells/blob/master/minds/benmar...](http://github.com/markoconnor/cells/blob/master/minds/benmark.py)

<comment><USER7> Seems to be identical to ben.py.

<comment><USER4> Yes, sorry about that. I fessed up my repro when setting up on github. [http://github.com/markoconnor/cells/blob/master/minds/benmar...](http://github.com/markoconnor/cells/blob/master/minds/benmark.py) is now the correct version, quite entertaining to watch.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> Really cool. This reminds me of a different "2 algorithms enter 1 algorithm leaves" type game: <http://en.wikipedia.org/wiki/Core_War> .

Interestingly, Core Wars is from the age of multiple threads running on a single processor, sharing memory, whereas the more recent Cells represents a share-nothing distributed system with autonomous agents.

<comment><USER10> I had lots of fun using a variation of Core War called "FukYorBrane," which used Brainfuck with a few extra instructions. Each program's input tape is the other's output tape. Tons of fun.

<http://esoteric.voxelperfect.net/wiki/FukYorBrane>

</comment></comment><comment><USER11> A zillion years ago (in development years) when MS's .Net platform was new, there was a platform called Terrarium [1] that was a bit like this. One key difference was that there was not an explicit means of communication between bots, so developers figured out a way to semaphore messages by way of simple movement behavior.

As I searched for a link, I discovered that there's a newer version out just 2 years ago. [2]

[1] [http://www.devhood.com/tutorials/tutorial_details.aspx?tutor...](http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=323)

[2] <http://terrarium2.codeplex.com/>

<comment><USER12> re: communicating through movement, don't ants and bees actually do this?

It would be cool if you could drop pheremone trails too. I'm thinking like a programmable Sim Ant

<comment><USER13> >It would be cool if you could drop pheremone trails too. I'm thinking like a programmable Sim Ant

That's what ICFP 2004 was. Here's the specification, if you want ideas:

[http://alliance.seas.upenn.edu/~plclub/cgi- bin/contest/ants....](http://alliance.seas.upenn.edu/~plclub/cgi- bin/contest/ants.html)

[http://alliance.seas.upenn.edu/~plclub/cgi- bin/contest/index...](http://alliance.seas.upenn.edu/~plclub/cgi- bin/contest/index.php)

</comment></comment></comment><comment><USER14> One suggestion: It would be great if cells could pass energy to an adjacent cell. This would make it possible to form energy pipeling / distribution systems within your team, and for teams to cooperate meaningfully instead of simply "fight / ignore". I think this would substantially enrich the game.

<comment><USER15> Awesome addition; that would allow making support structures making it a lot more RTS-like!

</comment></comment><comment><USER16> This looks awesome...with the exception of "A", every single word in the title titillates me. Definitely plan to play.

As an aside, to those of you who are interested in this sort of game AI, you might want to look at the growing (AI sub)field of General Game Playing. The idea is to write a basic game AI that can take in arbitrary rules, "think" about them a little, and then play the game against one or more opponents. The author of the played favored to win this year's championship, Turbo Turtle, has open-sourced his infrastructure on Google Code (ggp-base), which makes it orders of magnitude easier to participate. More info: <http://games.stanford.edu>, <http://cs227b.stanford.edu>.

</comment><comment><USER17> An interesting way to keep people interested in the game (during a fight, that is) would be to allow players to update the AI on the fly.

I'm thinking each player would submit an AI to start the game. At any point during the game players could "check-in" code (VCS-style) and cells created from that point on (via the splitting described in the article) would have this new code. Players would be allow, for instance, 2 check-ins per game. The upgraded cells would be represented by different shades of the player's color so that they could be kept track of.

I see this being useful for times when a player drastically misuses his cells initially or for an entirely different style of play (a different bracket on the ladder server).

<comment><USER18> You could try to put into the code the conditions that would cause you to change your strategy. Then when all those conditions are in place you send a signal to all cells to change strategy.

Your code then looks at the strategy variable to see which code path to execute.

</comment></comment><comment><USER19> Well, considering the message-queue, it should be fully possible to make the cells into "animals" instead: They mate by randomly picking another cell's "genome", take 50-50 from each of the cells, and make this the basis for the new cell.

It would sound like it would be smart to start off with the extremities. Say, start off with the same amount of 100% agressive and 100% defensive cells. They mate, get a 50/50-cell, which is partly both. If a combination of 10% agressive and 90% defensive is "the secret", then the cells will eventually all become that combination in the end.

Now, the question's whether this is a tactical approach or not...

</comment><comment><USER20> Wow I really like this game! My company occasionally does engineering challenges for fun and I'm going to recommend this for our next one. The last one we did was competing Robocode (<http://robocode.sourceforge.net/>) bots. They're written in Java and the game has been around for a while. I'm thinking that this will be more fun as it is newer and so there's really room to get creative and have fun.

</comment><comment><USER7> Looks like _very_ little attention has been paid to performance in favor of praying that psyco works on the player's system. I'm avoiding work and I've forked the project, so watch for a series of little perf tweaks. A few specific complaints:

Why are you using accessor methods? If it's because you might want to change them later, you could just use a property if that unlikely event happens. There is a real cost to accessors in Python. They also add a lot of visual noise.

Why did you make an enum class (ActionType)? That adds an extra hash table lookup for not much benefit over

      ACT_SPAWN, ACT_MOVE, ACT_EAT, ACT_ATTACK, ACT_LIFT, ACT_DROP = range(6)

EDIT: the performance seems fine the way it is now. I made some changes but they didn't perceptibly change the way the game plays. I am grouchy today because I didn't get enough sleep. Sorry.

<comment><AUTHOR> Thanks a lot for your comments! Looking forward a lot to your tweeks, performance will definitely need to be optimized in the future. The problem I was trying to adress with the accessors and the whole *View concept is that there are no private members in python, and i was trying to prevent the minds/genomes from "cheating" by reading data they aren't allowed to. If you can think of a better way to do that, I'd love to hear from you.

<comment><USER21> Last I knew, the official word is that there is no way to stop Python code from reading any particular value. Python can even crack into the values contained in closures if you know the right incantations. If you are looking to rigidly enforce that only accepted interfaces are being used to read data in the face of a hostile adversary writing the Python, I believe the current state-of-the-art is that it is impossible.

If this is a core feature requirement, then as far as I know your only option is to change languages to something where you can rigidly sandbox. Your nearest option in programming space would be Perl and some variant of Safe (that's a CPAN module name). Otherwise, if you can live with a gentleman's agreement, you're fine. This may make the automatic-online-matchup _really_ tricky, though.

<comment><AUTHOR> > This may make the automatic-online-matchup really tricky, though.

Another option I was thinking about for this purpose is parsing the python to make sure they don't get up to anything fishy, but I have no idea how hard a Python parser would be. My guess is very.

Or we put them into separate proceses, as swolchok suggested.

<comment><USER21> "Another option I was thinking about for this purpose is parsing the python to make sure they don't get up to anything fishy."

If that was safe, it would have been bundled up into a module. This is a Frequently Asked Question for Python, and the answer is, you can't.

I thought of process separation, but it won't work. The best performance would be one persistent process that runs the cell computations, but it's too easy for Python code to find places to hide data persistently for communication above and beyond what you expect.

For example, would you have thought to block the following?

        Python 2.4.3 (...)
        Type "help", ...
        >>> def f():
        ...     f.i = f.i + 1
        ...     print f.i
        ...
        >>> f.i = 1
        >>> f()
        2
        >>> f()
        3

The people who know the most about Python, including the implementors, have said this impossible. Again, unless someone familiar with the community pops up and says something has changed in the several years since I was hanging out on comp.lang.python. But I doubt it.

And mind you, that's _one_ example, and not a very sophisticated one. If you're answer was "no", or indeed anything other than "duh, of course, I've known about that for years", then you don't stand a _chance_ at the sophisticated stuff.

You can't fork at cell-run-time, because while a process couldn't write anything back out to the parent, it could still grovel over the parent's data space which could still be used to advantage, and depending on the rest of your code may still make an out-of-band channel available.

You could fork a process per cell before anything "incriminating" has been instantiated in the parent process, but that's got a lot of problems even on one machine (including the 32K process limit), let alone a hosted service, and you'd still end up with the possibility of a "cell history" being recorded that could be potentially exploited.

Python does not give you the necessary primitives to accomplish this task. I see three options: Live with it (a viable option except online), spawn one process per team and officially bless that level of communication (though it radically changes the nature of the game), or change languages.

To be honest, Python is going to cause you other problems on your online server too, such as the extreme difficulty you're going to face in isolating Python functions to a certain amount of CPU time. (Same problem, as long as the Python code cooperates it might be possible (and it might not really) but if it starts hostilely modifying the parent code you lose.) Other languages have support for that too.

Unfortunately, you're _really_ bashing on Python's weaknesses here.

<comment><USER7> > You can't fork at cell-run-time, because while a process couldn't write > anything back out to the parent, it could still grovel over the parent's > data space which could still be used to advantage, and depending on the rest > of your code may still make an out-of-band channel available.

Forking _and execing_ prevents this.

<comment><USER21> "Forking _and execing_ prevents this."

And will be uselessly slow, which is why I dismissed it with hardly any thought.

         # time bash -c "for i in {1..1000}; do python -c '1'; done"

         real    0m9.351s
         user    0m6.439s
         sys     0m2.868s

No way will that be acceptable, and that's before we even load any of the cell code in.

</comment></comment></comment></comment></comment></comment></comment><comment><USER22> Has anyone with a Mac been able to install pygame to run this? From what I'm reading, it seems like a complicated process. Could someone throw together a small guide?

<comment><USER2> I've spent an hour or so trying to get pygame working on OS 10.6. I'm using Python 2.6.1, though I've tried it with 2.5 and 3 as well.

I've tried their binaries, their source (including using the SDL.Framework which was suggesting in the SuperUser link another commenter posted.)

If someone would like to port this to something a little more usable, I'd be obliged. If not, I'll be spending a bit of late June doing that.

<comment><USER22> The superuser link worked perfectly for me. I wonder if we could do some sort of py2app type thing.

<comment><USER2> I'm looking into porting the whole graphically-related portion of the code into pure OpenGL, which should be just about as easy as it gets to ensure cross-platform/computer consistency.

<comment><USER23> Take a look at pyglet: <http://pyglet.org>

</comment></comment></comment></comment></comment><comment><USER24> I wonder how well this would work in real-time over the web. We could establish an API and let everyone hack in whatever language they please.

Here is a short list of open-source MMO servers we could start with: <http://www.reddwarfserver.org/> <http://opensimulator.org/wiki/Main_Page> <http://www.next-gen.cc/>

</comment><comment><USER25> I have dreamt about this for years. I want to rent out a big warehouse and get a bunch of artists and programmers together to create/play a game like this. And then everyone just watches (like a movie) at the end.

I would WAY rather do this than go to a movie or play videogames. I mean think of all the programming you would learn and get good at. After playing video games I just feel tired and my fingers hurt.

Let me know if anyone wants to help me organize something like this.

</comment><comment><USER17> Sounds like a good game to test out with Intel's new "Knights Corner" chip!

<http://news.ycombinator.com/item?id=1395513>

One cell per core? Ah, the future...

</comment><comment><AUTHOR> I've created 2 mailing lists for people to keep in touch.

<http://groups.google.com/group/cells-game-users> <http://groups.google.com/group/cells-game-devs>

</comment><comment><USER26> For people who like this, i would point you to the first such game i played -

<http://www.corewars.org/>

<comment><AUTHOR> I used to play a programming game, probably should have mentioned that in the article. It was called AT-Bots, and was a lot of fun. Never quite got my head around corewars though.

</comment></comment><comment><USER27> Related: <http://github.com/ryanb/ruby-warrior>

I built a bot for it once: <http://github.com/akkartik/brooks-ruby-warrior>

</comment><comment><USER28> I'd really like to see a video of this game in action.

<comment><AUTHOR> Good idea actually, I'll make one and include it with the next post. It is really quite fun to watch. In the mean time, just pull it from github and give it a spin.

</comment></comment><comment><USER29> Put your email in your profile! :)

I bet I'm not the only one who's excited and would love to contact you about this!

<comment><AUTHOR> Done!

Edit: even better to contact me through github though.

</comment></comment><comment><USER30> This is similar to a simulation I wrote 3 years ago, called Bluedogs. Bluedogs creates the genomes randomly. It's C++ and SDL and runs on Linux and Windows:

<http://tamale.net/bluedogs/>

</comment><comment><USER31> Wow, this is very similar to the game idea I describe in Techzing 40 – AppIgnite Revealed: <http://techzinglive.com/?p=194>.

</comment><comment><USER32> It might be fun if there were a way for humans to control a colony, so that humans could try to compete against purely algorithmic players.

</comment><comment><USER33> I was wondering how the audience would take this. I'm so excited to see such a project on top of HN. I'm building a _geeky_ game too (not similar to this).

What do you people think about such games being made commercially? (indie ofcourse)

</comment><comment><USER34> RoboCom! The fun thing about RoboCom is that bots don't fight. Instead they write to each others memory, causing the other bot to run the program you want (like a virus). This results in very interesting strategies.

</comment><comment><USER35> Someone could create a "King of the Hill" system, similar to the one here:

<http://www.gamerz.net/c++robots/>

I've got a robot "on the hill" and it's great fun.

</comment><comment><USER36> I am interested in this game simply to learn python. It's always the projects that inspire and excite you in which you make the greatest gains.

<comment><AUTHOR> It would be a good way to do that, I'm sure. I actually learned some of my early programming on a programming game called AT-Bots, where you had to write some kind of assembler-like code.

</comment></comment><comment><USER37> This reminds me of MIT's BattleCode tournament - <http://battlecode.mit.edu/>

</comment><comment><USER38> Cool game but was it the intent to have an unlimited supply of food at each node? It seems like this could be abused quite badly.

</comment><comment><USER39> So... Basically "cells" is nothing more than a sophisticated version of John Convay's _Game of Life_? <http://en.wikipedia.org/wiki/Conways_Game_of_Life>

<comment><USER39> Why the down vote? Is someone trying to imply that Cells isn't a sophisticated version of the Game of Life?

I might be blunt, but I'm not trying to be rude on purpose

<comment><USER40> _Is someone trying to imply that Cells isn't a sophisticated version of the Game of Life?_

Yes.

</comment></comment></comment><comment><USER41> wow!</comment>


Ask HN: How do you track your diet? - <AUTHOR>

HN: I'm on my 4th week of dieting with great results. So far I've been using a spreadsheet to track my food and workouts.
I'm following a low-carb nutrition plan, where instead of counting calories I focus on macronutrients: grams of carbs, protein and fat.
Which apps or methodologies do you use to track your food and/or workouts? <comment><USER2> This might sound like a joke, or gross, but I think stool measurement is probably a great way to track diet.

And I bet there are apps to help.

Sigh. I searched.

"PoopLog" \- [https://play.google.com/store/apps/details?id=com.kefsco.poo...](https://play.google.com/store/apps/details?id=com.kefsco.pooplog2&hl=en)

</comment><comment><USER3> MyFittnessPal</comment>