Using BitTorrent with Amazon S3 - <AUTHOR> http://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html <comment><USER2> I'm fairly certain this has been a feature of S3 since its launch in 2006. Here's as far back as I could find on archive.org[0] it's May 24th 2006 and the URL indicates the documentation was published on March 2006.

[0] [http://web.archive.org/web/20060421112025/http://docs.amazon...](http://web.archive.org/web/20060421112025/http://docs.amazonwebservices.com/AmazonS3/2006-03-01/)

<comment><USER3> It was there since the inception 03/14/2006 to be exact.

[https://noisemore.wordpress.com/2006/03/14/amazon-s3-has- bit...](https://noisemore.wordpress.com/2006/03/14/amazon-s3-has-bittorrent- support/)

<comment><USER4> Yes, and you'll find this date in the top left corner of the linked AWS API documentation.

</comment></comment></comment><comment><USER5> Anyone downloading software or any content over a slow and flaky network would question why people don't use torrents for distribution with some "permanent" seeder.

I really had a horrible experience sometime back, while downloading a software of around 2 GB. Where a network would die down and chrome would discard the partial download.

<comment><USER6> Chrome's downloads can actually be resumed using the wget --continue flag I believe.

<comment><USER7> That depends on a few things, such as the file still being at the previous url, you still having access to the file, etc.

</comment></comment></comment><comment><USER8> Just moved a bunch of our company's large downloads over to S3 recently (mostly BSP releases and drivers), and this would be awesome for that 100MB - 4GB package size range that they have!

Tried it with a few clients: Transmission does not seem to work, though (both web client, and GTK): "Tracker gave HTTP response code 404..."; rtorrent seems to be able to download (but looks like no upload?); deluge downloads well and also kickstarts the transmission clients.

I wonder what's unacceptable in the Amazon infrastructure for transmission... And the 80kb/s max seed rate mentioned in the comments might be a showstopper already.

<comment><USER9> A couple of months ago I tested with Transmission (on a Mac) and it worked fine. The problem from my point of view was that the S3 side only seeded at 50-100 KB/sec, but if I downloaded directly from S3 I could pull 2MB/sec.

Unless you have a bunch of seeds, that are essentially permanent, it's pretty useless.

<comment><USER10> Might still be useful as a seeder of last resort to borrow done finance terminology. Ie back a large number of say community nix isos with it.

</comment></comment></comment><comment><USER11> I'm currently using this to build a decentralized distribution system to ship relatively big database files to iOS clients without having to go through S3 all the time. It works quite well but some providers throttle the bittorrent traffic (or worse, throw in RST packets) so I'm not sure how well this will work in practice. Also note that the S3 default seeders only upload at around 80kb/s, so you'll always need at least one external seed to get good performance.

<comment><USER12> May I ask how you're doing torrent on iOS? The reason for my interest is that I recently ported ipfs ([http://ipfs.io](http://ipfs.io)) to iOS and am interested in any experience you've had with running these styles of protocols on iOS clients in the field ..

<comment><USER11> It's just libtorrent packaged up as iOS8 framework + a convenience API, available here: [https://bitbucket.org/jberkel/torrada](https://bitbucket.org/jberkel/torrada). Still WIP and not used in a production app, but hopefully soon.

It works well if you're on a non-throttled network and has support for local peer discovery which is great for testing (install from a local torrent seed, or another device). Apart from bandwidth saving it's also very convenient to let libtorrent handle consistency checks and resuming of transfers.

ipfs looks interesting, have you published your port?

<comment><USER12> Thanks for the details about torrada, I'll check it out!

Seems that for peer apps on mobile, we need to make it easy for the user to understand their bandwidth-usage - indeed in my testing I never run the app where I don't have solid, unlimited Wifi. For these classes of apps, I think the presentation of this problem to the user is going to be important.

>ipfs port

Its more of a harness than a port - basically, its possible to use Go on iOS, and so I have a project set up to include Go, cross the bridge between Obj-C and Go runtimes, and so on .. and, then I've built a Go app with ipfs, running on iOS. There aren't any features yet - but the harness is done, so, TODO: write Go, use ipfs framework, interface with iOS-GUI normatives, etc.

When I get actual ipfs functionality coded, I'll put it up on a repo .. too much futzing around is required right now to see anything actually functioning.

<comment><USER11> Ah, I had a look at goios, I can imagine that it is a lot of work, the integration looks quite complicated and far from being finished, good luck.

About sharing bandwidth, was thinking about only enabling when the user is on wifi, but I think I'll use torrent more as a distributed mirror network than a "real" P2P system, which is difficult in a mobile context. People can easily "donate" bandwidth by seeding the data files needed for the app (using a separate torrent client though, not the app itself).

<comment><USER12> Actually, I got everything working, and can build and include an ipfs project in the iOS bundle .. I just don't have a UI to wire it up to the Go-side functionality. But in case you're interested you can have a look here:

[https://github.com/seclorum/ios-go-ipfs.git](https://github.com/seclorum/ios- go-ipfs.git)

Might have to change a few paths in the build-script, but it'll give you an idea (if you're interested) how to go about building Go apps on iOS. Turns out its not that hard! :)

>Sharing bandwidth

Yes, I see the same sort of conclusion from my perspective of wanting to put ipfs on iOS - its really only as a way of committing content to the mesh when the User wants to serve - i.e. idle times connected/charging on local Wifi .. I think my next step will be to wire up the camera and a few fields to be used to create a publishable set of content ..

Anyway, pull requests welcome!

</comment></comment></comment></comment></comment></comment><comment><USER13> You can get torrent only for objects that are less than 5 GB in size. That's a bit limited.

<comment><USER14> I wouldn't think it's hugely limiting. In practice I'd speculate that the majority of torrents out there are either around 180MB, 370MB, or 1800MB

If (for whatever reason) you choose to use S3 as your tracker, then you just need to commit to breaking your >5GB content lumps up into multiple pieces.

<comment><USER15> You're probably right that the majority of torrents on the internet line up with the common TV show sizes, but it doesn't at all follow that users of this service will follow that distribution.

I have 60gb files in S3, and saturating available bandwidth to download them in a reasonable time frame if they're not in the same country is actually a bit of a challenge.

Bit torrent would be one of the fastest and fault tolerant ways to retrieve the files, so it not being available stings a bit.

While I'm trying to download large files on consumer internet, I'd imagine that huge files between geographic locations and server grade connections would face a similar problem.

</comment></comment></comment><comment><USER16> A bit OT but...

 _Javascript is disabled or is unavailable in your browser. To use the AWS Documentation, Javascript must be enabled._

...really? Their documentation is perfectly readable without it. All the links are real, bookmarkable links; even the buttons for the PDF, forums, and Kindle version work.

<comment><USER17> I suspect there's a default 'javascript required' message in a file that's included with all pages.

</comment></comment><comment><USER18> Are there easy to use multiplartform BT libs around that would let you use this just for high bandwidth, nearby peers? Eg filter peers by latency as a first pass.

<comment><USER19> Why would you care to exclude peers slow or far? What benefit would you expect?

The torrent library to use is libtorrent.

[https://github.com/rakshasa/libtorrent](https://github.com/rakshasa/libtorrent)

<comment><USER18> S3 will normally provide ample bandwidth, but in some situations there's a local shared downlink that is the bottleneck. For example in asset heavy multiuser VR or game apps used by many people in same location. By only including the nearby peers I get all the benefit but minimize the risk of people accusing me of clogging / mooching off their uplink.

</comment></comment></comment><comment><USER20> I've used this in the past to distribute scrapes of black-markets (eg [https://www.reddit.com/r/DarkNetMarkets/comments/2zps7q/evol...](https://www.reddit.com/r/DarkNetMarkets/comments/2zps7q/evolution_forums_mirrorscrapes_torrent_released/) & [https://www.reddit.com/r/DarkNetMarkets/comments/2zllmv/evol...](https://www.reddit.com/r/DarkNetMarkets/comments/2zllmv/evolution_market_mirrorscrapes_torrent_released/) ). It saves a lot of bandwidth (which is not all _that_ cheap on S3) and so far the <5gb restriction hasn't been an issue.

</comment><comment><USER21> Wow! This may lower the entry barrier for a new movie/TV streaming company. They can lower their costs by offsetting the bandwidth to users. Legal torrent streaming might have just got the boost it requires.

<comment><USER22> This isn't a new feature, it was available at least in 2012, possibly earlier.

<comment><USER23> I read about it in 2010.

<comment><USER24> I used it in '08-09.

</comment></comment></comment></comment><comment><USER25> Could be cool to get better speeds, if they have multiple seeders for the bucket.

<comment><USER26> Honestly, I'm surprised this is built into S3, rather than CloudFront. Ideally, you want your object replicated to a bunch of edge nodes, which then all simultaneously join into a single swarm as seeds.

<comment><USER27> It predates CloudFront.

<comment><USER28> Pretty sure it was part of the initial, day one S3 release.

</comment></comment></comment></comment><comment><USER29> I once read an article or email about why web browsers can't/won't implement BitTorrent clients -- one of the biggest barriers IMO to making BitTorrent more ubiquitous for file download/upload is the fact that I can't just click on a link and have my browser handle the rest, like I can with an HTTP/FTP link.

Does anyone have a link that explains why browsers won't do this, or at least a brief explanation?

<comment><USER27> Opera used to do this, so there's no particular reason specific to BitTorrent that the others do not. Probably the usual questions of priority and bloat.

[http://help.opera.com/Windows/9.00/en/bittorrent.html](http://help.opera.com/Windows/9.00/en/bittorrent.html)

</comment></comment><comment><USER30> Apart from myself, anyone else hoping to see _downloading_ straight into an S3 bucket? (Seeding from a bucket has been around for some time, you could imagine my disappointment when clicking the link)

</comment><comment><USER31> It still needs BitTorrent client. How about doing exactly the same but using WebRTC which would work without additional client application.

</comment><comment><USER32> Uh, this feature has been available for years, hardly "news".

</comment><comment><USER33> I'm dreaming about using IPFS on S3. Will it be possible?

</comment><comment><USER34> awesome</comment>


Vivek Wadhwa - Facebook is Doomed - <AUTHOR> http://www.linkedin.com/today/post/article/20130917125221-8451-facebook-is-doomed?trk=tod-home-art-list-large_0

<comment><USER2> > Facebook is Doomed

The least controversial headline ever -- everything is doomed in the long term. The sun will become a red giant, expand beyond the earth's orbit and vaporize everything, so Pez dispensers are doomed. Alert the media.</comment>


Ask HN: What is your mission in life? - <AUTHOR>

To me, it seems to be one of the big important problems. Because, how should we know how to live and what choices to make in life without knowing ourselves what we're living for?
So I'm asking the HN community in order to get a feel of what you are living for.
* What is your way of life (e.g., an entrepreneur) and what are the most important things in life in regards to your way?
* What is your personal mission in your way of life?
Looking forward to hearing your thoughts. <comment><USER2> I haven't found a way of life yet. Working toward entrepreneur, but I'm not there yet.

My mission is to make the world a better place as best I can. Broad as hell, right? How does one even determine what makes it a better place? Part of the challenge.

My reason for trying to become an entrepreneur is that owning my own business gives me the freedom to pursue my own ideas rather than someone else's. Even if I make just enough to live on, I'm still chasing my own idea. And if I make more than that, then I have a tool to pursue more than one of my ideas.</comment>


If you could learn programming or comp sci again; what would you do differently? - <AUTHOR>

There are so many resources online for learning computer science related stuff, new programming languages and some things not easily accessible to all.
Lately I've been feeling the need to invest considerable time on learning new things and re‑learning things I'm supposed to know (or already know).
So I'm wondering; If you could learn programming or computer science again – what would you do differently? <comment><USER2> You should put an end to this mode of trying to figure out some kind of globally optimum sequence of learning. There is none. If somebody tells you otherwise, they are either lying or they have forgotten the countless hours/days/months/years they spent trying to hone their craft and _in- retrospect_ they feel they could have avoided all this if only they knew some optimum way to learn. You are in a partially observable environment. The only way to learn is to explore a bit, consider what you now know, re-explore. rinse, repeat. Pick something, anything, that interests you and jump at it.

<comment><AUTHOR> I agree with the general sentiment.

But I'm not looking for a general solution. What I'm looking for is some cues and hints.

The most common answer in this thread has been "write more code". When I started collecting resources (mostly links to course material and lecture videos) I got into a read only mode. I forgot that writing code was probably the one thing I wish I had done more in college.

I don't know _exactly_ what I was looking for but I think diving into the material is a great tip, thanks! :)

</comment></comment><comment><USER3> I did a degree in Computer Science, which I didn't _get_ at all, and I hated every minute of it. I worked in sales and teaching for a few years before accepting an offer to program full-time. I came into the field with fresh eyes, and a desire to excel. There I learned the programming not taught at my "Java school" such as: emacs/vim, bash, code control, web programming, perl, and php. I read Steve Yeggy. From there I went to a job highly focused on quality first, where I was exposed to good (or at least better) OO, TDD, Uncle Bob, and Fowler. Now, I am learning to burn off all the cruft of programming that is not directly related to quickly shipping high quality code. If I could go back: I would spend more time programming _anything_. At this point, the only thing that has slowed me is a lack of practice at the craft.

<comment><USER4> This sounds like my story exactly. I would have hacked on personal projects using Lisp or Smalltalk. My curricula was based on C++, and I could never quite grok it. Ironically, I didn't "get it" till my senior year when I took a graphics class that was taught entirely in C.

I think CS programs do a disservice teaching with an OO language too early. The first language should be functional.

</comment></comment><comment><USER5> It might sound obvious, but I would have written more code. In school you work on such small scale projects it doesn't give you a good sense of what happens in the real world. Work on a large scale open source project that you have a passion for. In addition, learn C. My CS degree was wholly based around java and I regret not forcing myself to learn pointers, memory management and functional programming.

<comment><USER3> Yep, exactly what I was saying: just write more code. Functional and C are excellent too.

</comment></comment><comment><USER6> A solid foundation is of paramount importance: SICP & Discrete Mathematics, for example. The rest will come later.

<comment><AUTHOR> I have both the SICP and the MIT OCW Mathematics for Computer Science in my list of things to learn. I really want to get into the later so that I can take full advantage of the Stanford/Berkley online classes ( like <http://www.algo-class.org/> ).

<comment><USER6> I'm also taking the Algorithms class! I'm afraid it is going to be a bit math- heavy, but anyhow it looks promising :)

</comment></comment></comment><comment><USER7> I'd actually learn more of the other disciplines, whether it's psychology, health care, biology, philosophy, etc. Technical skills have become a commodity - anyone can code if they have the persistence and enthusiasm. But not everyone knows how to code AND have expertise in a specific field. That's unique.

</comment><comment><USER8> I would probably switch all my years I used PHP for Python instead - and maybe eventually spice up my C skills.</comment>


IE has 1% of market share ... on HN: "Show HN" aftermath - <AUTHOR> Here is what happened when I published "HN pickup ratio" web app on HN:
- 10,000 visitors from 100 countries in 3 days (good sales pitch, isn't it?)
- 95% of traffic comes from robots (for first few days, after that it goes down to 60%) - this is based on disproportion between number HTML and CSS serves (should I also count here the 405 error?)
- 57% visitors are from U.S. (of that 30% were from California)
- 58% visitors used chrome browser (IE is just 1%!!!)
- 52% visitors used apple device (where 11% are mobile Apple devices)
- 30% visitors used laptops (based on screen resolution 1440x900 and 1280x800)
Here is the raw data (big png poster):
http://hnpickup.appspot.com/hnpickup_web_app_statistics_snapshot.png <comment><USER2> Your calculation of claimed percentage of robots is deeply flawed. Not only do web browsers aggressively cache CSS files, but internet service providers also aggressively cache them.

Though I'm a rare exception, my web browser is configured to ignore CSS completely, including both in-page styles and all additional loadable files. A configuration like this is very rare because it's difficult to do and the result often breaks sites. The only place where it is common is for people with visual impairments.

A well behaved bot will (typically) announce itself by its User-Agent string. A securely configured browser (IMO) will never send a User-Agent string or Referrer, and will reject cookies as well as ignore javascript --Needless to say, this breaks a whole lot of sites, but suffice to say, HN _does_ have a higher percentage of people wearing tin-foil hats than the regular populace.

<comment><AUTHOR> Same goes for JS files. There is only on page that I'm serving. I also know that there is 10% of visits are returning "customers". So there should be around 90 css/js files served per 100 html serves but it's not.

Few minutes after releasing the app on HN I saw a swarm of "...bot" user- agents in my logs and lots of 405 errors also for the "...bot" user-agents. That made me think that the disproportion might be cause by robots.

<comment><USER2> After looking carefully at the image you linked to, the first 405 seems to show your web server is configured to disallow HEAD requests (and probably others). The failed HEAD requests by " _bot_ " User-Agents (along with what looks like some bots using forged User-Agents) is interesting since a HEAD request, if successful, does not actually load the page data and should not count in your page load stats. In other words, the bug is in the counting of pages loaded.

The tough questions is, why are you getting hammered by bots?

<comment><AUTHOR> I'm not sure. It seems that the route is:

      HN -> Twitter -> A swarm of bots sitting on Twitter

When I re-posted my app on Sunday to get extra stats I saw the same thing. The Terminator Judgment Day happened but just on Twitter.

</comment></comment></comment></comment><comment><USER3> "768x1024 - is your laptop sideways" - you could call it that. It's iPad in portrait mode.

<comment><AUTHOR> Thanks. There are many numbers in those charts that I don't understand. I was hoping that HN community will help:

Why there are so many 405 (method not allowed) errors? I get this from, e.g., Twitterbot.

Am I right? If someone GETs HTML and doesn't CSS then it's a robot? Why so many robots (web crawlers)?

<comment><USER4> How were your cache control headers set up?

Most browsers cache CSS files very aggressively (not even requesting a HEAD for them) once they've been loaded once - hence the common use of query strings or asset paths for CSS to ensure users get new versions on new deploys.

</comment></comment></comment><comment><USER5> 1440x900 resolution is used on desktop monitors, too.

<comment><USER6> Was just about to echo this. The last two monitors I've bought had this as the native resolution. (yeah, it's been a while)

</comment></comment><comment><USER7> Clickable link: [http://hnpickup.appspot.com/hnpickup_web_app_statistics_snap...](http://hnpickup.appspot.com/hnpickup_web_app_statistics_snapshot.png)

</comment><comment><USER8> I'm surprised that only 3.5% appear to be using 27" iMacs or 27" Apple displays. I thought they were pretty ubiquitous at startups now (though less popular than MBPs, of course).

<comment><USER9> I always imagined the Dell Ultrasharps were the defacto startup montior.

</comment></comment><comment><USER10> I had a similar amount of traffic from 2 HN posts. My IE percentage was 3.12% and chrome was 55.08% - pretty close to your numbers. Obviously, HN's browser stats will be way different than the general population, still very interestng. My analysis: <http://onepix.me/blogs/10-HN-Traffic- Analysis-2-Posts-1-Week>

</comment><comment><USER11> So, 41.76% users used Mac but only 14.84% used safari. 29.94% were on windows but only 1.18% used IE. Interesting.

<comment><USER12> I imagine many HN visitors develop websites. Developing a website using IE or Safari would be a miserable experience.

<comment><USER13> Why would it be a bad experience to develop on Safari? It has extension support, a debug menu (which lets you change user agent) and the same web inspector as Chrome.

<comment><USER14> Agreed, anyone used to firebug will find Safari's Inspector very familiar. Even more so if they're used to Chrome's Inspector, which is not identical but seems like it shares 90% or more.

</comment></comment></comment></comment><comment><USER15> Interesting stats! Thanks for sharing.

Something tells me that the majority of those using IE are those forced to at Microsoft-only shops, like I was until recently.

</comment><comment><USER16> "For me the biggest cost was getting time series data out of the DB"

Is there some reason you can not use memcache or even instance memory for the most part ?

</comment><comment><USER17> I would like to know who those 100 users are.

<comment><USER18> WP7 is a fair reason in my biased opinion

<comment><USER19> I will come out as one of the 100 WP7 visitors.

</comment></comment></comment><comment><USER20> It would be nice if the viewport size was included in stats like this as that is more important than screen size.

<comment><AUTHOR> It's not a standard feature for the Google Analytics tool but I found code that adds viewport logging:

[http://beantin.se/post/354097397/track-viewport-google- analy...](http://beantin.se/post/354097397/track-viewport-google-analytics)

[http://wishfulcode.com/2011/11/02/measuring-viewport-size- wi...](http://wishfulcode.com/2011/11/02/measuring-viewport-size-with-google- analytics/)

</comment></comment><comment><USER21> Interesting to note that normalized for population, New York seriously lags behind CA and MA.

</comment><comment><USER22> the 1% is probably people currently working in corporates as well</comment>


Ask HN: How do you keep your servers/sites safe from hackers? - <AUTHOR>

Hi,
This week I expect to receive delivery of a server with which I'll be building a prototype of an OpenStack server whose purpose will be to rent VPS instances to the public. I haven't yet figured out how, but somehow there will be a public facing customer portal providing management access to the rented server instances, and I'm interested in making the security which protects this management panel strong enough to be a selling point when I go live.
I'm a little concerned that by making it a selling point I may be inadvertantly inviting hackers to come attack my site, but its a chance I'm willing to take.
I haven't figured out how OpenStack handles its customer portal yet, but I imagine however it works, it would help to protect it by placing it behind my own customer login system of some sort. I don't know how to code, so I'd have to figure out how to write something to implement this sort of thing- maybe I could crowdsource its development, but even then I would need to know enough about how it would need to be designed so that it would be secure from hackers.
All I know about hacker-proofing is that there's an app that exists called fail2ban that locks out repeated ssh login attempts. I don't know if it could be adapted to work for a site somehow.
How would HN readers make hacker safety a selling point in this case?
Many thanks in advance.
-c <comment><USER2> There are a lot of misconceptions about hacking. If someone were to target your site and try to "hack" it, they'd simply be checking for vulnerabilities. A few simple steps can secure you from 99% of them. For example, securing inputs. Any time data is sent to your site, check it for injection attacks or password guessing.

>I don't know how to code

That might be an issue. But, a management console isn't too complex. You just need to offer the ability to turn off, turn on, reboot, and a couple of other functions. I personally use <http://www.proxmox.com/proxmox-ve> that has an API you can perform most server operations with a line of code.

<comment><USER3> Would that it were so that simply checking inputs would eliminate 99% of vulnerabilities; the diversity of different "checks" you need for every input reduces that suggestion to the moral equivalent of "just program better".

</comment></comment><comment> mike-cardwell Work under the assumption that it will be hacked, and try to minimise the damage that will occur when it does.

Hashing/salting passwords is a commonly used example of doing this.

</comment><comment><AUTHOR> I was thinking to use Yubikey MFA, and _not_ to make there be a link to bypass it if you don't have your key with you, so that no one can brute force anything ever.</comment>


To Uber Many in Tech Have Gotten Harassment Against Women in the Workplace Right - <AUTHOR> https://medium.com/@debbiemadden200/to-uber-many-in-tech-have-gotten-harassment-against-women-in-the-workplace-right-for-decades-cbac8065e809 <comment><USER2> Can we edit the title to include the colon, addressing Uber?</comment>


What was your experience with Waterfall development? - <AUTHOR> I'm young enough that I've only ever been part of Agile companies, but my slightly older coworkers all have horror stories from the days of Waterfall. I have trouble understanding.<p>What was so bad about it? Or, contrarily, what did you like about it? <comment><USER3> The feedback loops were too long.

Real-world waterfall always contained the idea of feedback from later steps changing the results of earlier steps. (Not having this means you have to be essentially perfect in your earlier steps to avoid having garbage input to your later steps. That can't be done. What's more, circumstances change during the life of the project, and if you don't respond to that, you're programming for the world as it existed six months or two years ago, and that is a recipe for failure.) This feedback to earlier layers was considered entropy, and the task was to manage it, to keep it from running out of control. The result was that you could be implementing something a year after the requirements were done, and six months after the design was done, and if you saw any problems, you were supposed to not revise the design (still less the requirements) unless you really had to.

In contrast, agile wants to have those times as short as possible, and to feed what you discover during implementation back into the design (and even requirements), in order to get them to better conform to reality.

Real agile is all about keeping the feedback loops tight. Waterfall was all about wholly completing phases, in order. This lead to waterfall being rather unresponsive to new information or external changes. (To see how demoralizing this can be, imagine working to implement something, where for the last three months you _know_ it's the _wrong_ thing.)

</comment><comment><USER4> The delivery aspects of waterfall usually means it is a rigid and structured organization with people in rigid and structured roles that have defined responsibilities.

This can drive bad behavior, pitting teams like requirements analysis, design, development and test against each other since they sometimes have competing interests.

In a larger organization, competing interests emerge since these teams are often managed by separate people who manage and measure their people with objectives that are for the role. People who write requirements get focused on common ways to document requirements, templates, etc.

A rigid organization using waterfall tends to have very structured, approval oriented deployment processes which leads to things like only having project launches _3 times per year_. A weekend launch starting with a backup of the system on Friday in case they need to restore Sunday night if the long sequence of 300 deploy steps is somehow botched.

I went from organizations like above into one that uses a Continuous Delivery model. This means we deploy every day, multiple times a day if needed - <USER2> production. Small changes that are testable with builds being tested continuously, operations of the environment heavily monitored and developers own their changes into production.

</comment><comment> d--b I think the main issue with waterfall development was the corner cutting at every step. Because software is not as hard to modify as hardware projects, it would be faster to do a shitty waterfall plan where the requirements would not be completely understood, and the implementation design lacked some major use cases, and implementation would miss other things like error handling, and the final product would be crap needing fixing.

The issue is that it would be cheaper to do it that way, because trying to get all requirements right and implementation right before doing was really expensive and still incorrect in he end. You'd always end with bugs or missing features...

</comment><comment><USER5> Waterfall means at least two things. I'll assume for my answer that it means only one of two things which I'll discuss.

All development process models assume the following tasks:

      Requirements collection
      Analysis
      Design
      Development
      Testing
      Deployment

After the first iteration, you move to maintenance. The only difference for maintenance is that "requirements collection" is more focused on collecting problem reports and change requests. Most of the requirements are already established.

Waterfall:

One meaning, the original and literally the worst thing ever, is that each of those activities is completed essentially in whole before the next and without feedback from the successor activities. The only feedback is when you get to maintenance and collect PRs/CRs from the customer and start the whole thing again.

The practical versions introduce some feedback loops but typically only up one level at a time. So test obviously feeds back to development which feeds back to design, etc. The problem here is that this is still a very slow process.

The problem with waterfall (the practiced version) beyond the poor feedback loops is also the time delays involved. Your analysis board which decides which PRs/CRs to work on may only meet every 6 months. So the average PR will sit in a queue for 3 months before it's even considered for work. And the results of the analysis board may not make it to the developers for another 3 months so the average PR won't be worked on for 6 months. And because _many_ PRs are collected and started at once, integration testing typically waits until they're all done. So it could be a year or two before a full integrated build is produced and an issue discovered which forces you back to the design phase to fix a critical issue.

And, while the developers and testers are doing their thing another analysis board meeting happens and introduces more PRs. By the time a product gets released it's often 1-3 years behind what the customer actually wants or needs.

Waterfall only works if you have trivial projects, or projects with very clearly defined scopes and requirements that are being planned on the order of years or even decades anyways. This isn't most software.

</comment><comment><USER6> Let's say waterfall == large batch size. The actual problem is the large batch size.

The larger the batch size, the less time you spend designing, coding and delivering, and the more time you spend (mis)managing the batch - what goes in it, changing what goes in it, planning what goes in it, explaining what will go in it, explaining why half of it didn't go in it.

All of this invites a certain type of personality who is not incentivized to deliver but to talk about delivering. That is when the horror stories start.</comment>


Boston area entrepreneurs blogging about failure - <AUTHOR> http://www.boston.com/business/technology/innoeco/2009/08/blogging_about_failure.html

<comment><USER2> Companies mentioned (four of them) : TipJoy, Lookery, Convoq, Actuality Systems.</comment>


I Want To Teach Web Design For Free - <AUTHOR> http://jenius.me/free

<comment><USER2> Have you considered teaching online with a service like Udemy.com? You'd certainly reach a broader audience.

<comment><USER3> Yes, I would love to be one of your students, if you would teach online. Brooklyn is a good choice, but if you teach online, you'll reach a larger audience.

<comment><AUTHOR> Hey guys - thanks for all your support and comments. I would be happy to broadcast the class online, but would still like to have people actually there for it. I'll see if I can record it and post after, or stream live. Thanks for your suggestions, and shoot me an email if you want me to keep you updated!

<comment><USER4> Great idea.

I'm from Europe, but I'd love it if you could stream these sessions too.

Maybe look into streaming via justin.tv or something ?

VOD's would be pretty sweet as well.

</comment></comment></comment></comment><comment><USER5> Its awesome that you would take the time out to set up some free classes but I think you would need to move some things around in this syllabus.

Basics of Graphic Design - Great starting point. No arguments here.

Learning HTML (html5) only - I dont agree with this. HTML5 is not that widely adopted yet to be a sole basis of HTML learning. It often still requires JS just to make it render correctly across all browsers. Using the HTML5 doctype and teaching HTML5 as what-is-to-come is great, but it shouldnt be the basis. Especially if you are looking to teach cross-browser compatibility and best practices.

Javascript/JQuery - Sounds about right.

Databases / MVC / RoR - This is where you kind of blur the line between teaching "Web Design" and "Web Development". This should be an optional split. If you want to continue learning the development side you go this route, if they want to stay design side, go a different route. There is really no reason for a designer to know about how MVC works.

Deployment - The basics of deployment would be great for everyone but advanced RoR, Django style deployments shouldnt be apart of a normal course.

<comment><AUTHOR> Thanks for your intelligent and thoughtful review. To respond:

I am going to stick with html5. I personally support progressiveness in design, and that means if someone is using IE6 and/or no javascript, I do not support this (and neither does google, wordpress, and a host of other large companies). As long as you have javascript turned on, the simple inclusion of modernizr makes html5 100% functional. I think it would be a best practices fail NOT to teach html5. I always have coded in html5, and so has the web agency I work at, and anyone else I know in web dev.

On the dev, you're totally right, but I disagree with the statement "There is really no reason for a designer to know about how MVC works". The more a designer knows about development, the better they will be to work with. I don't think there should be a split between design and development, it's good to dabble in both. Of course, everything is optional - if someone was very stubborn about not knowing anything about dev, they could skip the class.

I will be covering quick basic RoR deployment through Heroku, not advanced rails deploys. That would be for a later course ; )

<comment><USER6> "Progressiveness in design" only works when people are actually able to view it correctly. Given the fluctuating state of HTML5 at present, I'm reasonably sure you're just introducing additional complexity and points of failure unless you are teaching exhaustively only the exact features that work correctly, everywhere. This is not a particularly large set.

Now, I'd say something very different if HTML5 actually worked correctly everywhere, or even most places. But here's the thing--indoctrinating people into a JavaScript dependency like modernizr to fuel your desire to use a standard that isn't completely implemented anywhere is, frankly, terrible: a much more important lesson to drive home is "look, use progressive enhancement," not "look, HTML5 is awesome!", and making modernizr a dependency is the exact opposite of smart. Yes, your "web agency" might do this--but that doesn't make them very bright, either.

It's rule #1 of responsive web design: _start with the simplest base case, and progressively enhance from there_. If you want to really teach people how to benefit themselves by being able to write this stuff, I'd strongly recommend starting there--not with the high-end "look at my buzzwords and adopt them." Simple is good--really.

<comment><AUTHOR> I still could not disagree more strongly. We're producing sites and apps for some of the biggest companies out there in html5. No joke, google.com, yahoo.com, and facebook.com (those were the first and only 3 I checked) are coded in html5. You are just behind the times... sorry! html5 is where it's at, and if you haven't adopted it yet, you are disagreeing with all of the top web coders in the industry. Start checking the doctypes and get with the program : )

I agree that simple is good, but you are just wrong on the html5... sorry : /

<comment><USER6> I am _well_ with the program--I'm not the one advocating the use of modernizr or other hacks instead of building HTML that actually works on its own merits. The "HTML5" used by Facebook et al. is a very, very limited subset. The overwhelming majority of their work is valid HTML4! Your argument to authority is foolish.

HTML5 is a perfectly good tool, but relying on it and a _JavaScript library_ to smooth it over because _it doesn't fully exist yet_ is crazy. If you are not writing a web application--an _application_ , not a "website"--and it breaks because someone has JavaScript off, _you screwed up_. I know that's a foreign concept to somebody inculcated into the bizarre little world of Ruby, but you're throwing simplicity out for buzzwords.

For better or for worse (and believe me, I am strongly of the opinion that it is worse), IE is not dead. These people you presume to teach are not 'opinionated' towards whether people using IE et al. should be marginalized and made second-class citizens. You, however, presume to make a decision for them that they have to make for themselves. And that's not right.

<comment><AUTHOR> It's what happens with any teacher you get. Everyone has a way that they do things and their own opinions, and my opinion is use html5, always. Just so happens that this is also the opinion of the majority of web devs.

To be fair, you are right though - I should at very least educate people about this before teaching it. I will make sure to let my students know that if they would like to decrease the quality of their products based on 2% of people (that's data from 2007 as well, likely has gone significantly down) who browse with javascript off, then they should not use any html5 tags. Fair enough?

</comment></comment></comment></comment></comment></comment><comment><USER7> What's your audience? In my experience it's easy to teach someone how to build a simple website, but much harder to teach things like file-transferring, hosting, image formats, etc. However your topics seemed more-advanced than the basics, so I wonder who your students would be?

<comment><USER8> Completely agree. Way back in the day (late 90s) I decided to go hipster and hand-code my own static site in Notepad ( _"Suck it, Allaire HomeSite and HoTMeTaL!"_ ), and put it up for all the world to see.

I didn't dig around too much into what would be needed - after all, I had taught myself HTML and relative paths! After a week of "Edit, Ctrl+S, Alt+Tab, F5, Repeat", I was finally happy with the (now shitty, then awesome) finished product. And then realised I had no clue how to get it up on _any_ website, much less my own.

That was when I truly learnt how _anything_ ought to be learnt (end-to-end). And also that I probably wasn't as smart as I thought :(

TL;DR: created website without knowing how websites really work.

<comment><AUTHOR> Hey guys, like I mentioned in the summary of the class, I will be completely covering deployment, including how to upload and deploy a full site both in rails and for static files. Cheers!

<comment><USER9> With "an hour or so every week or two" your class will take years.

<comment><USER10> I assume that there will be homework. You can't really learn without doing.

<comment><AUTHOR> There would be homework. But it won't take years - there are very quick and simple ways to deploy for both rails and static. It takes me no more than 30 minutes to get any website from dev to online. That's what the class is for though -- if you want to find out how, come ; )

<comment><USER9> I appreciate your idea and effort, but here's a bleak picture of how it could go.

1\. week: everybody is into it. Some even have little background on the subject, some are complete newbies. You give little bit of homework.

2\. week: you start really doing something. Some fall behind and didn't do their homework. Other's have progressed well, somebody is even arguing with you how it should be done.

3\. week: class is divided. Some have really picked up the pace, some are following your plan and most of your time is taken up the struggling newbie.

etc.

All I'm saying here is, that if you go ahead with then you can help many but you'll need to be prepared. People learn complex stuff at a different pace. From what I've seen, teaching and computers don't go very well together. Workshops are bit better. Give people resources to learn from and those are interested will learn.

<comment><AUTHOR> You can say this about any class. I know everyone learns at a different pace, this is just a truth of life. This is not going to be a small class that involves tons of personal attention lavished on everyone - this is going to be an overview class. If someone is struggling and wants extra personal tutoring, they can hire me for that separately, but I'm going to generally keep it moving.

If someone comes to the class that is not interested, they will be left behind - that's just how it is. Remember, this is a free class - nobody is paying me for this, so there's no complaining. If someone is interested, they will learn. If not, they will drop.

The homework will be very little, and will be mostly based on projects. Each person will have an individual project they are working on - if they choose something they are excited about, hopefully this will keep them going.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> If it were me I would leave the teaching of Javascript and jQuery to later on after you've helped them build an application that works (i.e. after all the backend stuff is hooked up). I hope you find somewhere to get set up :)

<comment><AUTHOR> It won't be anything too intense, just a couple of front-end tweaks to get peoples' feet wet and show them the power that jquery has. If all goes well, I could cover it more in depth in a later class.

</comment></comment><comment><USER12> " best practices"

like using fonts that look rubbish on anything but OSX?

<comment><USER13> Anyone have a screenshot on OSX for comparison? I'm on Windows and I think the font looks fine...

<comment><USER14> With javascript enabled: <http://cl.ly/0Q263x2u1t2N1d3l1B3f> With javascript disabled: <http://cl.ly/3g1e0P3Y1b2X332B0Q0v>

<comment><USER15> It's basically unreadable on Windows: <http://i.imgur.com/qukor.png>

<comment><AUTHOR> Hey all - sorry about the font problems on Windows. This is just a one page site, and I'm using a font straight from the Google Web Fonts directory. I only have a mac at home, so that was how I tested it. I will certainly be more careful next time, and with a larger site would absolutely test on all browsers and operating systems.

<comment><USER16> What causes this issue? I want to know in the future to avoid something like this? Is it because you use custom ttfs or something?

<comment><AUTHOR> The issue was caused by a webkit font rendering fix. Make sure to remove all text-stroke and text-shadow declarations for windows - these thin out the font and improve rendering in osx, but ruin it for windows (no surprise)

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> I will recommend Wix Lounge, it's a free workspace that also has tech and design workshop, your goal fits well with what they do. See:

<http://www.wixlounge.com/> [http://blog.wix.com/2011/06/the-wix-lounge-nycs- hot-spot-for...](http://blog.wix.com/2011/06/the-wix-lounge-nycs-hot-spot-for- your-events/)

</comment><comment><USER18> There are plenty of co-working spaces in NYC, I'm sure if you get in touch the would be thrilled to lend you a teaching space in exchange for easy access to the course.

[http://wiki.coworking.info/w/page/16583629/CoworkingNewYorkC...](http://wiki.coworking.info/w/page/16583629/CoworkingNewYorkCity)

</comment><comment><USER19> I'd love if someone did something similar to this in the Auckland (New Zealand) area.

</comment><comment><USER20> JeffAcademy.com... Clear enough? You have a golden opportunity! Good luck! =D

<comment><AUTHOR> hahaha maybe if this first class is successful :-P

</comment></comment><comment><USER21> Try <http://www.generalassemb.ly/> They have a nice space and this would be a great way for them to reach out to the community.

<comment><AUTHOR> A friend just suggested them to me this morning! I definitely will be in touch, very likely it will be held there : ) Thanks!</comment></comment>


What Happened to the Great Urban Design Projects? - <AUTHOR> http://www.nytimes.com/2016/02/13/opinion/what-happened-to-the-great-urban-design-projects.html?action=click&pgtype=Homepage&clickSource=story-heading&module=opinion-c-col-right-region&region=opinion-c-col-right-region&WT.nav=opinion-c-col-right-region <comment><AUTHOR> Seattle, by the way, is actually building a lot of rail, and it's going so well that people want more of it: [http://www.seattleweekly.com/home/962706-129/bertha-who- seat...](http://www.seattleweekly.com/home/962706-129/bertha-who-seattle- transit-tunneling-is).

</comment><comment><USER2> An awful lot of the really big ones (on the scale of towns and cities) were bloody awful. Aesthetically pleasing on paper, but unliveable. Logical minds planning carefully separated zones and routes and so on in ways that looked nice on paper and created soulless cities with broken public spaces.

An excellent read on this is "Seeing Like a State", by James Scott. The chapters on forestry and collectivised agriculture are similarly interesting.

</comment><comment><USER3> What happened to the _great_ projects is that the governments responsible generally flubbed their ability to _balance a budget_ so badly that people lost faith in their ability to deliver anything. The MTA Second System was a glorious and wonderful idea on paper, and any New Yorker would love having it, but look what actually became of those lofty ideals: one useful connection and the station named "Grand Street" (B/D) plus a bankruptcy.

Increased labor costs (thanks in part to pro-union prevailing-wage legislation) and environmental-planning holdups in years since haven't helped get things built for less money, either, and we've suffered a parade of boondoggle public-transportation projects, like the Acela service: crazy-money wasted on designing new trainsets instead of importing existing ones, and then the trains are run at normal-train speeds for most of their trip. Next up: California high-speed rail. Not that this is specific to public transit, mind you: the Big Dig should disabuse anyone of that notion. And even when the government supposedly tries to be efficient, we end up with scandals like with the new Bay Bridge.

Bonus points, too, when the laughable micro-projects with insane price tags that _are_ approved find themselves over-budget and end up dropping some of the promises that they _did_ make. (In the Bay Area I know there are people who still complain about how VTA promised to run light rail up West San Carlos Ave, from downtown to the Valley Fair mall, and the old BART/VTA institutional/political rivalry is still running after all these decades.)

How can we restore our faith, asks our intrepid columnist? You'll need to get the governments involved to get their acts together, and then it will be pretty automatic as they demonstrate competence. I wouldn't hold my breath, though.

<comment><USER4> The government and especially municipal bodies are staffed by people from the community. If you want the government to change, there is a way to do so: generate more interest in what it does, how it functions. Get more people involved/interested, including yourself :) .

<comment><USER5> This is merely a restatement of the ideal of government, and doesn't address the fundamental complaint of the GP.

Government isn't incompetent because it's made up of incompetent individuals -- it's incompetent because it's been deeply captured by special interest groups, including, but not limited to, public sector unions.

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

(TL;DR: When studying government from an economics perspective, the sum of rational self-interest actions across all actors isn't very well aligned with the overall public interest.)

<comment><USER4> I was not aware that this was an entire field of study! Thank you. I will need to do more reading.

How exactly do you "deeply capture" government? I had the impression that these "Special Interest" groups can press their agendas precisely because they can staff government with people who are pliable to their agenda. If enough people with no "special interests" can be elected to positions of power, wouldn't that immediately remove corruption?

<comment><USER5> Special interest isn't some kind of singular evil, it's whenever someone's interest aren't perfectly aligned with the community. It's easy to fixate on the big ticket stuff such as outright corruption, nepotism and so on, but it's also about a general dynamic that exist benignly at all levels of bureaucratic organisations: discovering the public interest gets increasingly difficult the deeper into the details you get + I'd like to _be seen_ to be doing a good job to advance my career. Is fixing this or that pothole first more in the public interest? The citizen with the persistent letters to the right people (and/or the influential blog/the ability/luck to make a Facebook post viral) typically gets to decide.

This dynamic scales up the chain. When you're buying a new IT system, do you get five clever guys down on Main Street to do it, or do you get Microsoft/IBM with all the promises of synergy in the cloud, the 15 page SLA (think of the bus count!) - and an invitation to that big "trade show" in Vegas? In practically all situations, even without corruption, the rational choice is to go with Microsoft. First, if it doesn't quite work, well, you have reams of case studies and white papers to point to, you really did do your homework, it must be us doing something wrong, let's get McKinsey to write a report. If it goes down, look at the fancy SLA. Plenty of cover that you don't have with the local guys - indeed, you'll learn just how many of your colleagues could have told you from the beginning that it would never have worked. And if it did work, all that nice money you saved disappears from your next budget to have the equivalent of Microsoft fix potholes in the next department. Concentrated benefits, dispersed costs. Again, all of this without specific incompetence or corruption, without being specifically pliable to any outside interest.

</comment></comment></comment></comment></comment><comment><USER6> The problem is cars. Older cities were designed too, they were just designed for people instead of cars. A lot of what looks like spontaneous generation was just designed so well you can't see the design.

<comment><USER7> Your reply reminded me of a lecture from an ocw course I'm watching on and off. He covers a bit about infrastructure design and policy choices in that lecture. I thought it was really interesting.

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

<comment><USER8> This talk by Andrés Duany is quite interesting as well: [https://www.youtube.com/watch?v=rwd4Lq0Xvgc](https://www.youtube.com/watch?v=rwd4Lq0Xvgc)

</comment></comment></comment><comment><USER9> I have been working on integrating some ideas. [http://tinyvillages.org](http://tinyvillages.org).

Note that the files are on Github and it really isn't about one person or group doing a complete design. One of the things that I have started thinking about that needs to be fleshed out more on that page is Open Source Engineering and ways to make zoning and all aspects of urban systems more component-based as well as moving beyond code/standard and form-based to common information systems platforms that will facilitate automation of planning/approval and smart/sensor network data integration.

<comment><USER10> I see that each house have their own kitchen. How do you justify that. Seems extremely wasteful.

<comment><USER11> Balance between shared and personal space. I would never live somewhere where I had no other option than a shared kitchen, community, coop, whatever.

</comment></comment></comment><comment><USER12> I find it amusing that the photo that heads the article of the Millau Viaduct which, while truly a good example of the sort of project they are advocating, could hardly be called "urban".</comment>


EmberJS Confuses Me - <AUTHOR> http://www.wekeroad.com/2013/03/06/ember-confuses-me/

<comment><USER2> That was almost exactly one year ago. The author today: [https://twitter.com/robconery/status/444287117909192704](https://twitter.com/robconery/status/444287117909192704)

<comment><USER3> Yep - hi Trek :). I don't know how this got pushed to HN again but there will be a followup. I'm wondering if it's coincidental :)

<comment><USER4> Just went to your archive to see if you'd written it yet. I'm pretty interested in seeing what you have to say because I too have had trouble understanding Ember.

By the way, don't blog archives usually link to the posts? ;)

</comment></comment></comment><comment><USER3> OP here - this post is almost a year old and I don't know why it got pushed to HN again. It's taken a year :) but I think I've come to finally understand Ember... and I very much like it.

<comment><AUTHOR> Yes, I've just discovered today though! I'm happy to know that there's an illumination to be had at the end of the road though...

</comment></comment><comment><USER5> I think Ember made a big mistake with the router. The most interesting part of Ember IMHO is the data-binding and the components. With those two things you could do very complicated document-centric desktop-like apps very easily.

If you wanted to make a web app resembling Adobe Illustrator, I have no doubt that Ember is better for the task that any other framework. In fact I did something in that vein which, sadly is an internal tool, using a pre-router version of Ember.

Then the router came along around 1.0, and it make everything too complicated. As the OP says, for desktop-like apps routing makes no sense. Also all the levels of indirection and abstraction makes no sense. I'd like at least to have the option to expose objects globally as I please. What I want is one, maybe two global models and a lot of components that have access to those globals. End of rant.

</comment><comment><USER6> I also don't really get ember. I've currently been going through my experiences with angular (daemon.co.za/2014/03/wrong-to-be-afraid-of- angular/), but I just have grave misgivings about ember as a concept.

Backbone was interesting because of how little assumptions it makes of you.

Angular was interesting because it made some pretty reasonable base assumptions and then gave you this whole new sandbox to play in.

Ember just feels to me like the kind of framework that you are going to spend a lot of time trying to appease.

That might be an unfair assessment, but I am also not likely to ever build anything with it because I really loathe handlebars, and it doesn't do anything new or interesting enough for me to care.

</comment><comment><USER7> IMO, ExtJS is the only framework that's truly MVC. Everything else is just MV..whatever.

I wrote a blog post a while back talking about how everyone is over thinking MVC.

[http://www.codingupfengshui.io/mvc-in-five- lines](http://www.codingupfengshui.io/mvc-in-five-lines)

tl;dr You should think more SOLID and less MVC.</comment>


Deliberate Advice from an Accidental Career - <AUTHOR> http://www.infoq.com/presentations/interactions-career/?utm_source=news.ycombinator.com

<comment><USER2> This was the Keynote talk at Devoxx UK - well worth a watch IMO!

</comment><comment><USER3> I looked through the slides, i skimmed the text bits on the website; i still have no hint of an idea as to who this guy is and why i should bother to spend half an hour or so watching a video to find out. If you're gonna post content that is highly reliant on knowledge of a certain topic that is not widely spread, at least provide some meta info.

<comment><USER4> Perhaps I'm misreading your tone, but it comes across as very elitist.

Who cares if the person speaking is famous or not. Does notoriety somehow make words more true?

Some of the most important things people have said to me were never famous. I hardly remember their names or faces, but what they've said has resonated and stuck with me. That's the important part.

Keep an open mind.

<comment><USER5> He said nothing about the guy being famous. It's only worth dropping half an hour on some advice video if you can be at least somewhat confident that the topic at hand is relevant to you, and the giver of advice has any record of success whatsoever. None of this context has been provided.</comment></comment></comment>


Wordpress infected with Trojan - <AUTHOR> https://security.stackexchange.com/questions/98241/wordpress-infected-with-trojan

<comment><USER2> This isn't anything new AFAIK. I've seen this issue before they do a great job at hiding the code, like pushing it off to the 300th column. WordPress Exploit scanner plugin is your friend here.</comment>


Toward Go 1.3 - <AUTHOR> http://talks.golang.org/2014/go1.3.slide#1 <comment><USER2> First, I apologize for bringing up something that has been brought up since the birth of Go...

I'm surprised at the lack of progress in generics for Go. But more than _progress_ , I'm surprised at the lack of a _story_ about generics in Go. Yes, the FAQ waves its hands at complexity, but the lack of discussion and/or proposals puzzle me. The wiki page about it ([https://code.google.com/p/go- wiki/wiki/GoVsGenerics](https://code.google.com/p/go-wiki/wiki/GoVsGenerics)) is tiny and feeds from this discussion ([http://groups.google.com/group/golang- nuts/browse_thread/thr...](http://groups.google.com/group/golang- nuts/browse_thread/thread/3d825ac84e742598)). I would be much more interested in Go were there some evidence for the intent to implement generics. A related concern is that adding generics will have a significant affect on libraries and existing code, so adding generics will become harder the longer Go waits.

I would be very happy to have the Go team say: we're going to focus on adding generics to Go in 2.0 and will be considering how to get there sooner than later; that said, we don't know when 2.0 will be released, but building in generics will drive 2.0.

Note: I understand the workarounds, but they're either hacky or have terrible performance. And I also understand that users of Go say that they don't miss generics, but I'm just not comfortable believing that.

<comment><USER3> There is a story about generics in Go. The story is, a variety of complex programs are being built and deployed in Golang without generics, which makes it an open question as to whether they're required at all.

Golang doesn't have to be all things to all people, nor does it have to fulfill every programming task any one developer has.

I would be just as happy at this point to see the Golang team put generics to rest. And I like generics, and have been annoyed by their absence in Golang before!

<comment><USER4> >The story is, a variety of complex programs are being built and deployed in Golang without generics, which makes it an open question as to whether they're required at all.

This. The same can be said for C as well, but C is not memory safe and Go is- so it wasn't immediately obvious the same would hold for Go.

I used to use generics/templates in Java/C#/C++ a lot, and at first I missed them in Go, but now, after writing Go full time for 2+ years- I no longer miss them more than once or twice every few months... I think generics are great, but also greatly overused.

<comment><USER5> I work with some old Java code that's a mix of generic-ised and not. Every time I see a method that returns a Collection I want to shout "COLLECTION OF WHAT?!?!".

Comprehending other people's non-generic code is a giant pain in the ass compared to reading code with generics.

<comment><USER6> > Every time I see a method that returns a Collection I want to shout > "COLLECTION OF WHAT?!?!"

The method was named something like "getCollectionOfSomething()"? If so, you might want to put some of the blame on the method naming choices.

<comment><USER5> A method might return, say, some URIs. These might be represented as URI objects or strings, depending on your preference (in some tighter areas of the code we might use String objects, because URIs can be expensive-ish to create, and we might know for sure that the strings in question are valid). If I have a method called getURIs, does it return URIs or Strings? Should the method be called getURIsAsStrings? Perhaps, but it makes for some pretty awkward (and long) method names.

Even if you do have a sensible naming scheme that makes the return type clear, it's rather beside the point. If I have a choice between relying on coding convention or generics, I know what option I'm going to pick.

<comment><USER7> I'm not arguing the point that generics are unuseful.

But imho the method should _not_ be named for the compiler-type of it's return value (unless it's a type converter like int2string or similar).

It should be named for the bizlogic/semantic type:

So..not "getURIs()", but better "getBackendPoolMembers()" or "getBackendPoolMemberURIs()" if you have more than one way of representing them.

Long method names are fine. Everyone uses autocomplete. Choose good names and rename them often as the meaning of the code changes over time.

<comment><USER5> That's fair enough - I'm always happy to have descriptive methods names. I still want to know the compiler type of what I'm getting back though.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER4> Using sync.Pool for my personal projects has made them so much faster (/ use less heap) and let me retire my custom pools. So much awesome there.

This presentation also doesn't mention the concurrent GC sweep work: [https://codereview.appspot.com/46430043/](https://codereview.appspot.com/46430043/)

<comment><USER8> [http://talks.golang.org/2014/go1.3.slide#9](http://talks.golang.org/2014/go1.3.slide#9) Ok I see how it's go-routine (or thread) safe, but what is meant by "free list"? It's a pool of objects that you can access and put back, and putting back doesn't block? Free as in freeing memory maybe?

<comment><USER9> A "free list" is a fairly standard programming pattern, though it's not as common to see now with memory management and GC in most languages. At the base level, all it is is a list of currently "free" (i.e. available) resources that have been pre-allocated.

<comment><USER4> Sometimes also referred to as an object pool.

What makes this implementation special is that its pooling is both thread- local and global, and is plugged into the runtime/garbage collector. The former makes it much much faster than any pool the user could implement, and the later means is plays nice as resources become more scarce.

</comment></comment></comment></comment><comment><USER10> The combination of NaCl support and Objective C linking support make me wonder whether we will see Go creep towards being an officially "blessed" and privileged language (like Java and C+NDK) for Android development in the future.

I would assume that the NaCl support means that we'll be able to write things for Chromebooks relatively easily?

<comment><USER11> No. The NaCl stuff is not about Chrome. It's about sandboxed execution in other contexts. For instance, it powers the Go Playground: [http://blog.golang.org/playground](http://blog.golang.org/playground)

<comment><USER10> Sure it's about Chrome. "Native Client is a sandbox for running compiled C and C++ code in the browser efficiently and securely, independent of the user's operating system."

[https://developers.google.com/native- client/dev/](https://developers.google.com/native-client/dev/)

<comment><USER11> The Go NaCl stuff is not about Chrome.

</comment></comment></comment></comment><comment><USER12> The lack of generics in Go is hugely over-hyped as a problem.

There are generic lists (slices & arrays), there are generic maps (dictionaries). You can build a hell of a lot on top of that.

To generalize logic, Go's interfaces are amazing.

There are some huge projects out there using Go, and not hurt by the lack of generics. Perhaps you've heard of Docker?

I work on Juju[1], a Go project that is over 200,000 lines of code. There's only a handful of places where generics would have made things a little easier, and it's never been "OMG this is so awful because we don't have generics".

And this is coming from a guy who spent his first 14 years programming in C++ and C#, so it's not like I'm not used to generics. You just write code in a different way. Sometimes you can't get around it when you need a containery class, so you use interface{} and cast the result, but that's the exception rather than the rule.

[1] [http://juju.ubuntu.com](http://juju.ubuntu.com)

</comment><comment><USER13> "Go 1.3 targets that command-line tool for 32-bit and 64-bit x86 architectures.

(NaCl supports 32-bit ARM, but we have no plans to support it.)"

 _epic facepalm_

<comment><USER14> Why, is anyone using Go on 32-bit ARM and will miss this?

<comment><USER15> I use Go on 32-bit ARM (Beaglebone Black, Raspberry Pi, Samsung ARM Chromebook, and a few old chumby imx233 devices), and having this would actually be useful to me.

In any case, I'm sure ARM support will be added in time (just not for 1.3 release) if not from the core team than by outside contributors. There are quite a lot of people using Go on ARM devices.

<comment><USER11> Can you explain how the NaCl port would be useful to you on ARM platforms?

<comment><USER15> One long-term project I've been working on (very off and on) is something like the chumby dashboard app system but for apps written in Go that can run on actual old chumby devices (or really any similar ARM device such as RaspPi, etc). Basically you'd end up with a bunch of mini apps that you rotate through with each app doing random things, like providing a clock display, or a short photo slideshow, or whatever.

Ideally the running apps would be sandboxed so they could be served from potentially untrusted sources and not do damage to the underlying OS or cause problems or privacy issues with other little apps that would rotate through running, so a framework like the one used as the basis for the Go playground would be ideal.

This is admittedly a very niche need and can be tackled by other OS-level sandboxing techniques (though at that level the support offered by different combinations of embedded Linux ARM ports and/or ARM CPUs makes things more complicated), but NaCL support in Go/ARM would be very convenient here.

This project aside, though, there were lots of listed plans for Go 1.3 in the presentation that I would prioritize way over ARM/NaCl.

<comment><USER11> That does sound really cool!

Sorry that we don't support NaCl/ARM code gen. Our use case (the Go Playground) only required amd64 support, which is just 386 code gen plus more hard bits. I'm sure if it were straightforward Russ would have just done the ARM port too, but as you probably know ARM is very different to x86 so it would have been another project entirely.

</comment></comment></comment></comment></comment></comment><comment><USER16> Noting that I'm successfully running Go 1.2 binaries with CGO on android/arm, cross-compiled from darwin/amd64 (my macbook).

You can check out the Makefiles in libtorrent-go[1] and torrent2http[2]

[1] [https://github.com/steeve/libtorrent- go](https://github.com/steeve/libtorrent-go)

[2] [https://github.com/steeve/torrent2http](https://github.com/steeve/torrent2http)

</comment><comment><USER17> > _Compiler overhaul: the plan. Not a rewrite. Translate the C compilers to > Go. Write and use an automatic translator to do this. Start the process with > Go 1.3 and continue in future releases._

Aww. Transliterated C code does not sound like it will take full advantage of Go idioms. Plus, an automatic translator? Unless it is extremely disciplined C code, that sounds harder than just translating it by hand.

<comment><USER18> _Plus, an automatic translator? Unless it is extremely disciplined C code, that sounds harder than just translating it by hand._

It's the only way you can port without halting ongoing development. Done it. Been paid for it. It works.

EDIT: Also, if your original is highly idiomatic, and you exploit this, you can produce idiomatic code in the target language.

<comment><USER19> > Done it. Been paid for it.

Did you work on Go's translator or a different translation project?

<comment><USER18> Different one. Call center software.

<comment><AUTHOR> Form what language to what language ?

</comment></comment></comment></comment></comment><comment><USER17> > _Support for linking against Objective C code_

This is the most exciting part for me! Although I wish they didn't skim so much on the technical detail here.

<comment><USER20> Yes, but it's x86 code so it won't work on iOS. It would be cool if Go could become an option for Android and iOS development.

<comment><USER11> Go does compile to ARM and does run on phones. It works on Android phones (linux/arm) out of the box, and it has been made to work on iOS (darwin/arm) but it hasn't been merged with the core: [https://bitbucket.org/minux/goios/wiki/Home](https://bitbucket.org/minux/goios/wiki/Home)

</comment></comment></comment><comment><USER21> Forgive my ignorance but what does 100% Precise GC means?

<comment><USER22> Languages that support pointer arithmetic have to support "raw" pointers, i.e. pointers that point to any location in memory. This creates some problems for the GC, as it can't be sure what objects are live and which aren't. For example, a pointer might point to unallocated memory (in which case the GC must not even dereference it), to a `malloc`-allocated memory, to a GC- allocated memory, or even in the middle of a (GC-allocated or `malloc`-allocated) heap object! In addition, some pointers look like integers and some integers look like pointers, and the GC has no idea how to distinguish them at runtime. In order to still support some kind of GC in such languages, you can write your GC to be _imprecise_ or _conservative_ , which means that it treats every integer that _could potentially_ be a pointer as a pointer and assumes it is pointing to a live object. Potentially, this means that the GC thinks objects are live which are actually not, just because the programmer is using an integer which, if interpreted as a pointer, points to said object.

I'm not intimately familiar with Go implementation, but I assume that they haven't bothered implementing precise stack- and register-scanning, which means that the runtime cannot distinguish pointers from integers on the stack/in the registers. That's a really hard problem in general and solving it requires quite some compiler support and runtime overhead. It looks like that is finally planned for Go 1.3, though.

<comment><USER21> I see. This indeed adds a lot more complexity to the GC as it will have to check every integer or type that "looks" like a reference.

Does this also mean that GC times will likely be longer in Go 1.3? There is not much detailed info about the Go runtime (like we do have for Java for instance) so it would great for the Go maintainers to publish a more in-depth reference of the internals of the language in version 1.3 /

<comment><USER19> Precise (or "exactly rooted") GC should have shorter GC pause times because the runtime knows where to look for references to GC objects, rather than scanning stacks and the heap for bytes that might look like a pointer. The problem is that writing code to use precise GC is more cumbersome because you have to worry about extra bookkeeping code for every pointer reference to a GC'd object.

</comment></comment></comment></comment><comment><USER23> Instead of doing my usual comments about Go's design, I would rather congratulate the team in what they have achieved so far.

</comment><comment><USER24> I had to use the Page Up and Page Down keys to navigate this; apparently either the mouse is not supported, or I couldn't figure out how to navigate this site with the mouse.

<comment><USER25> The far left and right sides are clickable to "turn the page", so to speak. It's an invisible area, though, so it's not very easy to deduce from just looking at the webpage.

</comment></comment><comment><USER26> From way in the slides I saw this and got excited:

"darwin/arm, android/arm: a contributor is working on these, some way to go."

</comment><comment><USER27> One of the bullet points:

\- "Clean up and document the code, add unit tests. (Target Go 1.4)"

Oh sure, add features now and add the unit tests later. :-D #joking

</comment><comment><USER28> Wow March 1, 2014. What an exciting month with Go 1.3 and Java 8.

<comment><USER29> 1.3 feature freeze is in March, but there will still be a couple months of bug-fixing and fine-tuning after that.

</comment></comment><comment><USER30> Either these slides mischaracterize what liblink does or it has the wrong name. The fact that it does things that the linker used to do doesn't mean it is doing linking.

<comment><USER11> It has a weird name, but it also won't be around for long.

</comment></comment><comment><USER31> So "liblink" means that the compilers now generate native instructions, rather than pseudo-instructions. Seems like that would make it much tougher to implement generic methods. Anyone know if that's true?

<comment><USER32> Yes, in general you will need to have some other mechanism other than emitting raw machine code to handle generics (unless you have a uniform value representation like MLs or Java do, but Go doesn't).

</comment></comment><comment><USER33> Slightly off topic, but is there a mobile friendly version of this site?

<comment><USER34> Remember when Microsoft's websites only worked in IE?

<comment><USER35> That has very little to do with someone not putting the work in to make their CSS responsive.

<comment><USER36> Bug reports and suggested fixes welcome. golang.org/issue</comment></comment></comment></comment>


Ask HN: Review our new Kongregate feature - level sharing - jim-greer http://www.kongregate.com/games/Moonkey/hexiom-connect?level=5

<comment><AUTHOR> Kongregate kicks an impressive amount of ass. I have had more than a few nights lost being sucked into getting badges where I never even manage to get my 360 turned on.

If this helps remove barriers to sharing flash data so things like linerider levels could be passed around and shared, that would be a huge step forward for flash apps and games that provide content creation/editing tools but are limited by flash's client side filesystem size/access limitations.

(an example of a linerider level, which had to be edited entirely in browser and can only be shared with a screencap to video: <http://www.youtube.com/watch?v=ZHr5L7ZXZw4> \-- just an example, there are lots more).

Linerider levels might be an extreme example, but anything along that path seems like a good idea.

I'm all for it! Keep it coming!

</comment><comment><USER2> Reminds me of the fun people have passing FreeCell RNG seed numbers around. Anybody who finds a particularly tough one will write it down and pass it around to the other FreeCell addicts. Then there's a small local mini competition to see who can get it done first.

</comment><comment><USER3> I think its a bad idea. Part of the fun is the joy you get when you achieve that next level. If a user can just go level = x and skip all the hard levels, it'll get boring after a while.

<comment> jim-greer This is not for the original levels that ship with a game - it's only for levels that users submit. I agree that having a nice progression of levels in order of difficulty would be cool - maybe in a future release we could have the concept of a level pack, ordered by difficulty.</comment></comment>


From the GA analytics.js source code: `$.answer=42` and `if(a||42=a.answer)`. - <AUTHOR> http://www.google-analytics.com/analytics.js

<comment><USER2> Another oddity I noticed while embedding GA today: the arguments to the IIFE are named i, s, o, g, r, a, and m

[http://cl.ly/image/1l1932032k3D](http://cl.ly/image/1l1932032k3D) [http://en.wikipedia.org/wiki/Isogram](http://en.wikipedia.org/wiki/Isogram)</comment>


Ask HN: How Best To Reach Hiring Employers? - <AUTHOR>

My startup is building a recruiting platform geared towards college undergrads. (You can check us out at collegejobconnect.com)
We have had 200 students join in our first few weeks of growth on that side. On the employer side, we have a few companies in the wings (friends of friends, family and professional network connections).
We're trying to expand our reach beyond these first few companies. Beyond emails and cold calls, has anyone had any luck reliably getting in touch with small to medium businesses? (HR in particular, but we'll pitch anyone.) <comment><USER2> One way recruiters sometimes do it is to send a blind resume, with the identifying data removed. But that's gotten harder to do thanks to LinkedIn ("Went to Dartmouth, worked at Bridgewater, lives in Dallas? There's only one in the whole wide world.")

You could still give it a shot, though: find companies that are hiring, email the hiring manager if you can find his/her contact information. One slightly iffy tactic that recruiters use is to ask where people have interviewed, then to ask who they interviewed with. That at least gets you a name, though you may want to be vague about where you got it ("I was just trying to find a job for that guy you decided not to hire...").

<comment><AUTHOR> Very much appreciate your feedback. I've seen a few job placement services that employ such tactics. I feel like that borders on spam and would very much like to avoid it.

One of the biggest challenges is we want to do it "right", but there are many overly aggressive / shady services out there in this space that make employers run for the hills when you reach out. Ideally this should be mutually beneficial for student and employer (and us). Thank you again for the comment!

</comment></comment><comment><USER3> Are you only accepting applicants from the schools list in the footer?

<comment><AUTHOR> We're a small team, and early on we are focusing marketing efforts on a short list of schools in order to keep things manageable. We're certainly accepting resumes from other schools but we can't promise any results just yet :)

<comment><USER3> I only asked because my school address does not end .edu which is required for the signup form. Although I attend school in Canada

<comment><AUTHOR> yeah, that is the issue - send me your email address to firstname.lastname@example.com and I'll get you set up

<comment><USER3> sent</comment></comment></comment></comment></comment>


Publishers are pissed about Amazon's upcoming Audible Captions feature - <AUTHOR> https://www.theverge.com/2019/7/19/20698383/audible-captions-feature-audiobook-book-publishers-rights <comment> Sushi-san I don't blame the publishers for this; reproducing an author's text without permission _is_ a copyright violation.</comment>


Facebook Empowers Racism Against Its Employees of Color - <AUTHOR> https://medium.com/@blindfb2020/facebook-empowers-racism-against-its-employees-of-color-fbbfaf55ab76 <comment><USER2> Most of the incidents described here are strongly indicative of a terrible manager who's learned to play the office politics game well. There's little evidence here that points to systematic discrimination, but also nothing that refutes that theory— these few anecdotes are simply not enough to draw such conclusions from. I have seen and heard of similar behaviors at many companies, targeting people of all descriptions.

The most damning part is probably HR's response and the inability to get out of the sphere of influence of a manager that is actively working against the interests of their report: if managers can block team changes, anyone who ends up in the reporting chain of a manager that doesn't like them can feel very stuck.

(Note: due to a technical issue I was not able to read any of the posted screenshots, and so my opinion was formed only on the basis of the text).

(Note 2: I'm not saying there isn't a discrimination problem, only that it hasn't been demonstrated. This looks to me like grounds for an investigation, but not yet punishment.)</comment>