Show HN: Simple Bhagavad Gita Search Web App - <AUTHOR> https://www.searchgita.com <comment><USER2> Hey this is excellent! I just finished a survey philosophy course which started off with the Gita and continually returned to it, I was super disappointed when I found most online editions plastered with ads and barely readable (by modern standards).

I agree with the other commenter, I expected clicking on a verse would jump me that position in the whole body of text, but I'm sure this is just your starting point. Well done OP

<comment><AUTHOR> So thankful! The whole body of text as in you can see below and above quotes or how do you envision the UI when you click on the quote? Would you also like this for other types of philosophy too? Shiva Sutras? Buddha? Zen?

<comment><USER2> Shantideva, and commentaries on his work.

Yes, anything would be great.

</comment></comment></comment><comment><USER3> Typing two words results in the second word being matched with non-contiguous letters. For instance, 'Krishna and' will match with

^Krishna) ^am the source of the origi^n as well as the ^dissolution of the entire universe. (7.06)

Not sure if this was intended

<comment><AUTHOR> Search is improved!

</comment></comment><comment><USER4> When I type "entitled" I get matches for "entities", "There", "Divine" and lot of others. Does it search for every single letter of the search term? That doesn't seem very useful.

<comment><USER5> Similar to this: when I type "Bhima" it also gets me "Bhisma". That means it does not recognize the structure of a word.

<comment><AUTHOR> Typing Bhima, you get Bhima quotes first then Bhishma now!

</comment></comment></comment><comment><AUTHOR> Added click and jump into specific section and go forward and backward in that new place directly from search results.Also added chapter names!

</comment><comment><USER6> Hey! Excellent Work! Just found a typo in following sentence: "I am the wind among the purifiers and Lord Rama among the warriors. I am the crocodile among the fishes and the holy Gariga among the rivers. (10.31)"

I think it should be Ganga. :)

<comment><USER7> Of course you're right! I shall correct it when I get a chance! Any more suggestions welcome!

</comment></comment><comment><USER8> Is there a way to click on the results to bring up the surrounding text?

<comment><USER7> Ah you mean jumping to the place in the Gita? Or show the sequential quotes below and above?

<comment><USER8> Yes to both, if possible. I read the Gita first when given a free copy by the ISKC (Hare Krishnas) in Brooklyn back in 1978. Then I read all sorts of texts after taking a comparative religion class in high school. I'd love to have this to study it better.

<comment><AUTHOR> added!

</comment></comment></comment></comment><comment><USER9> Does this only search the English translation? I tried the famous 'yada yada hi dharmasya' but it was showing some random results.

<comment><AUTHOR> Ah yes only English translation for now. Ok I will add it!

<comment><USER10> I feel like the transliteration issues may be pretty complex! Someone using the site might choose to search for any of

यदा यदा हि धर्मस्य (in Unicode)

yadā-yadā hi dharmasya

yadā yadā hi dharmasya

yadaa yadaa hi dhamasya

yada yada hi dharmasya

If you want to allow search using transliteration, there are a number of interesting algorithmic and non-algorithmic questions about the range of different transliteration mechanisms that people may use.

Also, for a reason that I don't quite understand, people transliterating Sanskrit can be very inconsistent about where they do and don't transcribe spaces. Are the spaces perhaps not present in the original? For example ग्लानिर्भवति might be transcribed as "glānir bhavati" or "glānirbhavati", which may also be treated differently for search purposes.

(I don't actually know any Sanskrit; I'm just interested in linguistics and writing systems.)

</comment></comment></comment><comment><USER11> Thats fast. Can you comment on the architecture?

<comment><USER12> Looking at the source. All the text is loaded with the HTML (in a <script> tag), which is filtered using a fuzzy search implementation.

Very simple and fast considering the text doesn't change ;)

<comment><AUTHOR> Keep it simple :-)

</comment></comment></comment><comment><USER7> I'm planning to add share buttons for twitter and FB. Let me kno if you'd like other features or a mobile app?

<comment><USER13> Ability to annotate? That's obviously a lot of work though. It could provide context or scholarly opinion/analysis.

Maybe "navigation" buttons so if you find a passage you can click next or previous to see the preceding or subsequent passages.

<comment><AUTHOR> Hmm annotation is interesting. It could possibly also clutter the user experience. Possibly sharing could enable people to discuss it within their own social networks? I definitely heard a lot about clicking through prev and next passages especially on search result quotes. Thanks for the feedback!

</comment></comment></comment><comment><USER14> Nice work. It would be nice if the citation were logically and visually separated from the body of each verse.

<comment><USER7> Like verse then Chapter name and verse number at the bottom right?

</comment></comment><comment><USER15> Can I help implement a full text search?

<comment><AUTHOR> What I like about fuzzy search is that if I search something like 'Constant Remembrance' which is a spiritual concept but it doesn't exist in those exact words in the Gita, fuzzy search comes up with a quote quite close to the concept simply because it is fuzzy. How would full text search work? Would it come up with zero results if the search was not precise?

<comment><USER16> Exactly. That's how it should work. I searched "love" and got passages "Lord Krishna [...] grieve" which the search included because of LO (from LOrd) and VE (from grieVE) - no mention at all of "love," so not what I was looking for. Just go with standard search.

<comment><USER7> Point taken!</comment></comment></comment></comment>


6 Startup Lessons For The Year 2007 - <AUTHOR> http://www.readwriteweb.com/archives/6_startup_lessons_2007.php? <comment><AUTHOR> The market has a natural tendency to segement. This trend is driven by both, the consumers and the businesses. Considering that point in mind, I believe that the next big social network/startup will be much smaller than MySpace. We are in the era of super-niches; the market we appeal to will get smaller as the competition among startups increase.

That said, I would like to propose one "lesson" I did not mention in the article: "As the target niche becomes more narrow, so will the funding". A niche that is sufficiently small might not attract any funding at all! So there is a downside to being small that must remain in check if you wish to attract funding. Enjoy :) \- Jawad Shuaib</comment>


Ask HN: Subscription platform suggestion for side project? - <AUTHOR>

I'm making an app package for golf courses. I've written a demo app and have gotten some interest from some local courses that I think could be perfect first customers. I don't want to start things too simple and do something like Stripe payments or Paypal. I'd like to get some sort of system up and running to attempt to let them sign up and subscribe so I can immediately start working on getting new customers.
I've looked into things like Shopify+Chargify [0], SaaSy [1], Zoura [2], Recurly [3], etc. I'm usually a DIYer but I just don't want to invest the time into a potentially unscalable and insecure solution. Plus, all of the account management and analytics included in these packages look great.
I honestly just want Shopify with subscriptions, but from just 30 minutes of research on Chargify, it looks like it causes some hassle for users (not to mention its pricey). Any suggestions, tips, or warnings would be greatly appreciated.
[0] http://chargify.com/
[1] http://saasy.com/
[2] http://www.zuora.com/
[3] http://recurly.com/ <comment><USER2> My advice, is to not build that in just yet. Say you charge, tell them the price, and take their credit card or money - and put them on a plan. Manually charge them through Square or whatever the first month or two, then build that portion out as it's required. 37Signals and a whole other slew of companies did just this too - so I'm not crazy.

The real reason to delay it personally, is that you might find their acceptable industry payment is different than you think. They may be used to paying monthly via check, and not do CC's. You never know. But this gives you the ability to charge, AND figure out the correct long term solution.

<comment><AUTHOR> This is really great advice. I'll have to talk to potential first customers and maybe even just ask them "how do you want to pay" to see how much of a priority this is to get rolling.

Thanks!

<comment><USER2> I hope it helps. That lesson came from pain in my last B2B company. We built in CC payments into our SaaS - and then found out most companies paid all their vendors monthly via check.

</comment></comment></comment><comment><USER3> my take is that all those options are fine (except Paypal!!)

i have many biz friends who use Stripe, including some for recurring subscriptions, and I've never heard any bad feedback on it. Only good.

Chargify and Recurly are specifically aimed at recurring subscriptions for developers.

Other solid options are Memberful and Spacebox.io

<comment><AUTHOR> Awesome I'll look into those two.</comment></comment>


Help crowdfund this Upwork alternative - <AUTHOR> https://medium.com/@LevelWorkingField/do-you-like-new-pricing-or-higher-fees-upwork-is-changing-again-and-what-we-can-do-about-it-6c755e245fb7 <comment><USER2> The problem is CAC is probably $1000 or more. So how do you get customers?

<comment><AUTHOR> What is CAC? Thank you

<comment><USER3> Customer acquisition cost. In this case it may be more build it and they shall come.</comment></comment></comment>


My experience as a startup intern - <AUTHOR> http://blog.matchfwd.com/2011/08/my-experience-as-an-intern-in-a-startup/

<comment><USER2> Fascinating! As an intern at a large, established company who reads HN, I'd always wondered what it would be like to work in a startup.

Could you fix the "Connectors" image? The gray-on-darker-gray text is almost unreadable on my screen. I had to download it and boost the contrast before it was legible.

One questions for you: How established was the startup when you began working there? How old should a startup be to get the best internship experience?

<comment><AUTHOR> I am not the intern myself, just posted it on his behalf. The startup was a few months old when he started. Both co-founders had years of development experience so I think we gave a pretty good internship experience. I don't think the age of the startup is as important as the people behind it to determine how much an internship will be valuable.

Thanks,</comment></comment>


WTF? Track the top story for any topic with Scoopler's @WTF. (YC S08) - <AUTHOR> http://blog.scoopler.com/wtf-we-got-you-chill-1

<comment><USER2> This is really awesome. I'm going to Bangkok on Saturday so I tweeted "@wtf bangkok", and it keeps tweeting me the top stories about bangkok as they happen (like the grenade attack earlier today).

Only suggestion: let me track multiple topics!

<comment><USER3> Good luck in Thailand, and stay safe. I was there a few months ago, and it was great, but it sounds nasty right now.

</comment></comment><comment><USER4> Whatever they did to get the @wtf account, it was worth it. Best brand name launch all year, hands down, game over, go home.

<comment><USER5> Definitely. What it lacks in appropriateness, it overwhelmingly makes up for in why-the-hell-is-everyone-around-me-tweeting-@wtf-ness.

</comment></comment><comment><USER6> This is a really clever idea. I could see myself using this to track breaking news!

Good job guys.

</comment><comment><USER7> Awesome. If I reply stop does it stop everything? I want more granular controls! Nice job though.

<comment><USER8> Hey ricky, I'm glad you like it!.

Right now you can only track one thing at a time but we will be adding the feature to track multiple words soon. There is a hack in the mean time, just use "@wtf word1 OR word2".

\--AJ.

</comment></comment><comment><USER9> Congrats on the short handle and the creative idea.

Some suggestions: 1) @wtf t=24hrs; Allow me to adjust the frequency. 2) @wtf -mashable; Allow me to add/remove sources. 3) @wtf "(facebook|twitter) down"; Allow for more advanced searches.

<comment><USER10> feature creep much? :)

</comment></comment><comment><USER11> I really like the design/layout. Looks promising!

</comment><comment><USER12> how is this better than google alerts?</comment>


Ubuntu forums breached - all passwords compromised - <AUTHOR> http://ubuntuforums.org/announce.html?t=534261

<comment><USER2> So glad I use a random different password for EVERY account.

<comment><USER3> Not sure if sarcasm, or you're saying you use the same password on every site.

<comment><USER2> It wasn't a joke. I create a 60+ character random password for every website. There are many tools available to help you manage your passwords.

I do have an ubuntuforums.org account and I DID use a random password so I WAS glad that I didn't have to rush to change all my passwords.

</comment></comment></comment><comment><USER4> Well, salted hashed - not exactly "passwords compromised"?

<comment><USER5> As good as.

$stored = md5(md5($password) + $salt);

That is the simple hash function.

<comment><USER6> Confused here. Are you saying that ease of implementation makes it easy to reverse? Or are you agreeing with GP?

<comment><USER5> Sorry it's easy to reverse.

There are sites you can just go to and they'll crack the passwords for you in no time at all.

Edit: aware of rainbow tables and salts and how hashes work etc etc. They are easy to crack if on password lists which they mostly are these days if you have a shit password which is 90%+ of us. Not only that, the $salt on a good chunk of vbulletin sites from vb2 days is not a strong salt.

Go here to get people to crack passwords for you: [http://forum.md5decrypter.co.uk/default.aspx](http://forum.md5decrypter.co.uk/default.aspx)

With respect to the feasibility, it's really easy to do an md5 and you don't just do the whole list, you pick interesting email addresses and start there.

<comment><USER7> The purpose of the salt is to invalidate rainbow tables. With salt, the only way to reverse is to compute all combinations. With advances in GPU, it has become easier for some hash functions, but it easnt' easy to reverse by any measure.

What are these sites which will crack the passwords in no time? Try reversing this:

38b2cf16f7be6a1b33097084bed6a4b0:lsdjfldsjlfds

<comment><USER8> it's asdfasdf

<comment><USER7> Umm...no.

        In [17]: '38b2cf16f7be6a1b33097084bed6a4b0' == hashlib.md5('lsdjfldsjlfds' + 'asdfasdf').hexdigest()
        Out[17]: False

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> As I said when I previously commented. I find it pretty ironic that these kind of breaches could have been avoided by simply creating a whitelist for their admin panel. This isn't rocket science. The majority of breaches of these size that keep occurring are password reuse, or open admin panels (bruteforce attacks). Who needs a vulnerability when an attacker can simply look up the Administrators on databases they already have?

</comment><comment><USER10> It would be nice if they'd allow you to test whether your email was in the data. As-is I'm left wondering if I ever had an account.

<comment><USER11> I believe Canonical sent warning emails to ubuntuforums.org account addresses.

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

</comment><comment><USER13> its a forum.people simply asking their doubts. why they were hacking these sites.. I can't figure it out exactly..

<comment><USER14> Email addresses + passwords + possibly other things as well.

Many people reuse the same email and password on other services/websites, so this is pretty valuable and sensitive information.

</comment></comment><comment><USER15> I hope they used something sensible like bcrypt for encryption instead of MD5 which is too easy to crack these days.

<comment><USER16> It's not encryption, it's hashing. Also, I don't see how MD5 is easy to crack.

<comment><USER17> MD5 is so fast on GPUs, you can do some pretty ridiculous dictionary attacks in a matter of minutes (like trying every combination of words that has ever been written in a book or posted online - using google's n-gram corpus for example). Then you have plenty of time to try letter substitutions (3 for e), combinations such as word + number + word, etc. This doesn't apply of course, if your password is a long string of random characters.

</comment></comment></comment><comment><USER18> this is why I always use a memorable low-entropy password for forums and high- entropy from emails.

any unimportant site that demands a high security password (or low-entropy with silly rules) get put into my keypass.

</comment><comment><USER19> note to myself: don't use primary mail account for website registrations

<comment><USER20> I switched to using a few registration-specific emails after getting my own domain: firstname.lastname@example.com for really dodgy sites or sites I suspect will generate a bunch of crap periodical emails, and email@example.com for the sites I have a little more faith in.

It allows for much easier filtering of my email as well: I only get the emails I care for in my inbox.

<comment><USER21> I tend to use things like "firstname.lastname@example.com". That way I can also see who gave my account details away when spam appears.

<comment><USER22> I use email@example.com, since I don't use catch all and don't want to create a new e-mail for each registration. Most e-mail providers will ignore the +sitename part and send it to your inbox.

</comment></comment></comment></comment><comment><USER23> "If they can't keep their forums secure, why should I even use their operating system?"

<comment><USER21> Because very likely very different people work on administering the fora and developing the operating system.</comment></comment>


IP-BOX: Breaking Simple Pass Codes on iOS Devices – January 2015 [pdf] - <AUTHOR> https://assets.documentcloud.org/documents/2650123/IP-Box-Documentation-rev2-1-16-2015.pdf <comment><AUTHOR> Trying to find the Brooklyn case from September where this was specifically name-dropped in one agent's testimony, but blergh.

EDIT:

Not what I wanted, but it'll do (warning for annoying autoplay news vid): [http://www.usatoday.com/story/news/2016/02/18/tech- companies...](http://www.usatoday.com/story/news/2016/02/18/tech-companies- privacy-battles-against-law-enforcement-often-have-not-gone-well/80578770/)

Magistrate Orenstein's order for... I get them all mixed up, it's in Brooklyn and they all have to do with iPhones: [http://lawprofessors.typepad.com/files/orenstein- order.pdf](http://lawprofessors.typepad.com/files/orenstein-order.pdf)

Old post: [https://news.ycombinator.com/item?id=10421736](https://news.ycombinator.com/item?id=10421736)</comment>


Why I use git and puppet to manage my dotfiles - <AUTHOR> http://www.jaxelson.com/blog/?p=63

<comment><USER2> Seems that the de facto approach is to backup-rm-symlink. My approach is to source from existing configs whenever possible. Specifically, instead of

      mv ~/.bashrc ~/.bashrc.bak; ln -s $DOTFILES_PATH/.bashrc ~/.bashrc

I do a slightly more sophisticated version of:

      echo "source $DOTFILES_PATH/.bashrc" >> ~/.bashrc

(The sophistication comes in checking if that line already exists.)

Here's my install script: <https://github.com/shazow/dotfiles/blob/master/install.sh>

I've found many benefits in this, such as easily having machine-specific configuration side by side with my unified dotfiles and no backup clutter. This works especially well for things like vim configs, too.

      $ cat ~/.vimrc
      source $DOTFILES_PATH/.vimrc

<comment><USER3> interesting, as an alternative to this how about how janus does it with a .local file?

<https://github.com/carlhuda/janus/blob/master/vimrc#L147>

</comment></comment><comment><USER4> I think puppet in this case is overkill. I simple bash script with a small function to check if it already exists and what not would do just fine and you don't have to install another application (puppet).

<comment><USER5> I agree that its overkill for the use case mentioned in the article, a Makefile would be more than sufficient. I do the same for my vim configuration using `make`: <https://github.com/aonic/vim-settings/blob/master/Makefile>

Usage:

      git clone https://github.com/aonic/vim-settings.git
      cd vim-settings
      make

Remove:

      make clean

<comment><USER6> Nice method, but with a bash script you wouldn't have to manually add any new files to your Makefile. I use this one: <https://gist.github.com/975295>. Also handles forcibly linking a file if it exists already (with the -f flag).

Of course, you're just using it for one folder so it's not an issue for you ;)

</comment></comment></comment><comment><USER7> I prefer to keep things simple, and version the home directory directly. I renamed the ~/.git repository to ~/.dotfiles.git in order to keep it out of the way, and set up a broad .gitignore, which can always be overridden with -f. When I need to work on the repository I use the GIT_DIR environment variable. No need for managing symlinks.

<comment><AUTHOR> That wouldn't work so well for me because I like to keep my system configuration files like apache's in my configuration folder as well. But I can see why that approach appeals to you.

</comment></comment><comment><USER8> God, I like reading stuff like this, but personally I think articles about keeping your entire home directory under version control are more interesting (Joey Hess does this, I believe, and probably others I don't know about).

Stuff like this is why I enjoy Hacker News.

</comment><comment><USER9> I ended up writing my own mini-utility for this: <https://github.com/jrockway/dotfiles/tree/master/bin>

But I think I am going to switch to puppet, because there are a few things I always need done on a new machine; adding myself as a sudoer, installing packages, editing the imapd config (for a local imap cache), etc.

</comment><comment><USER10> I used to mv the old files, but now I just rm.

Host- specific files I handle by doing if [ -f ~/.host-bashrc ]; then . ~/.host-bashrc; fi

I also use proper extensions on my files like bashrc.sh and emacs.el for automatic syntax highlighting in editors.

My shell script just goes through the current dir turning eg. bashrc.sh into a link at ~/.bashrc

</comment><comment><USER11> I do something similar with BitBucket and hg. Over time, I've found I rarely need system specific branches any more. Each computer has a .bashrc-local for local shell customizations, kept outside the repo. Otherwise, it's enough to detect the OS flavor and adjust symlinks that way.

</comment><comment><USER12> I just use SpiderOak. It includes my dot files during its normal backup routine, it has file revisioning included, and all my files are available immediately upon installing SpiderOak to a new computer.

<comment><USER8> Personally, I just backup my dotfiles via FTP as they don't change very often, but I lot of my fellow Arch Linux users seem to like backing up their dotfiles to Github. I have never used GitHub myself but everyone seems happy with it.

</comment></comment><comment><USER13> I use Rake to manage the symlink part of this

<https://github.com/mmb/config/blob/master/Rakefile>

</comment><comment><USER14> I use homesick <https://github.com/technicalpickles/homesick></comment>


Presenteer.js: Flexible HTML5 presentation tool - <AUTHOR> http://willemmulder.github.com/Presenteer.js/

<comment><USER2> The take I'd really like to see on HTML5 presentations is making them easy to author. If not by end-users, at least making it so there's no layout micromanagement involved.

<comment><USER3> I've made an open source experimental authoring tool for such presentations here <http://adityab.github.com/Awwation>

It uses SVG, and Javascript for animations.

<comment><USER4> That's interesting, but in viewing the presentation the text is almost unreadable in Safari -- too much space between some letters, while others overlap.

If it works in Chrome, Firefox and IE... what's Safari doing wrong here? Oddly I just checked it on the iPhone and it seems fine there (although zooming out seems to be blocked, so the presentation is much too large for the screen).

<comment><USER5> The zoom issue is a security limitation in iOS's Safari: iframes aren't allowed to hide content or zoom, so you cannot hide malicious elements. I've seen the same issues with presentations using impress.js, built using my tool[1]. However, that issue should be fixable by loading the SVG directly (or embedding the presentation inside a div, instead of an iframe.

[1] <http://imprys.com/>

</comment></comment></comment></comment><comment><USER3> This is great! How does it compare with impress.js or jmpress (the jQuery version of impress)? I'd like to use this in my authoring tool, if CSS3 animations work with SVG.

</comment><comment><USER6> I'm always unsure about using code released under Creative Commons. What are requirements wrt. attribution? Does 'Share Alike' mean that the source code of a product using the library must be released under CC BY-SA as well?

Otherwise, Presenteer looks nice. Text becomes a bit blurry during animation (Chrome 18.0), but apart from that—no problems, and API seems clean.

</comment><comment><USER7> Yet another very nice HTML5 presentation framework with no GUI for actually making nice presentations. Until someone spends some time putting some actual user tools around one of these things, HTML5 presentation tools will remain a geek sandbox.

<comment><USER5> You can try my iPad app Imprys (<http://imprys.com/>), which does just that. It's in an early stage, and currently uses impress.js, but if there's interest, I can produce a version with presenteer as well.

<comment><USER3> I don't have an iPad, but this looks nice. Is it open source?

<comment><USER5> Unfortunately not, as this needs to be my revenue stream in the near future. I do have plans to make it open source at some point, but first I need to earn some money with it.

</comment></comment></comment></comment><comment><USER8> It reminds me a lot of impress.js[1], however, impress.js's execution is a lot smoother.

[1] <http://bartaz.github.com/impress.js>

<comment><USER5> There's also jmpress.js[1], which is the jQuery port of impress.js and improves on several aspects.

[1] <http://sokra.github.com/jmpress.js/#/home>

</comment></comment><comment><USER9> Not sure why, but in latest Chrome (19.0) on OSX I get a lot of flickering during the transitions (like a full browser black flash).

</comment><comment><USER10> Excellent. I'll be using this very soon!

</comment><comment><USER11> Elegant and impressive. Thank you.</comment>


SAMSUNG Galaxy S7 RUMORS , NEWS AND RELEASE DATE - <AUTHOR> http://sparta-gaming.blogspot.com/2015/11/samsung-galaxy-s7-release-date-news.html <comment><USER2> first load of this page had an obnoxious popup tab requesting a [http://www.musixhub.com](http://www.musixhub.com) download!</comment>


Millions at Risk of Deportation as Justices Refuse to Rehear Case - <AUTHOR> http://www.nytimes.com/2016/10/04/us/politics/supreme-court-immigration-obama.html <comment><AUTHOR> The headline addresses Obama legislating instead of Congress regarding whether illegal immigrants will not be deported.

Only by reading the story does one understand that anyone who makes it to this country illegally, including the world's tech workers can get a job if Obama is allowed to legislate instead of Congress. This is a "work around" for H1-B Visas so that tech firms can hire as much low-cost tech labor as they want.

What I don't understand is how Obama is able to effectively legislate away H1-B visas allowing anyone that makes it to this country to work.

The Constitution makes clear that Congress is supposed to pass laws. The President has the power of veto, not that of legislation.</comment>


Flightcaster (YC S09) Wins the Amazon Payments Prize - <AUTHOR> https://payments.amazon.com/sdui/sdui/startupchallenge

<comment> brown9-2 <http://aws.amazon.com/startupchallenge/> has some more info on the finalists

</comment><comment><USER2> What is their "proposed use of Amazon Payments solutions"? I was under the impression that the only money they have coming in right now is from the iphone/blackberry app.

<comment><USER3> FTA: "FlightCaster will be creating an alternative flight recommendation engine and the ability to re-book a flight with a single click from a smart- phone. They will offer Amazon Payments as a payment method to enable their customers to purchase tickets conveniently from any mobile device."</comment></comment>


When Haskell Is Not faster than C - <AUTHOR> http://jacquesmattheij.com/when-haskell-is-not-faster-than-c <comment><USER3> This reminds me that when I was interested in learning haskell I was completely put off by their "introduction" page on their homepage. It was a couple of years ago but it doesn't seem to have changed much:

<http://www.haskell.org/haskellwiki/Introduction>

It looks like a very pretentious sales pitch to me. You have quotes like "Writing large software systems that work is difficult and expensive. [...] Functional programming languages, such as Haskell, can make it easier and cheaper." and a whole bunch of very vague and poorly backed up assertions.

After a couple of paragraphs brainwashing you about how good functional programming is, you finally get to some code. The _first_ code you get is (of all things) a quicksort which is not used as an introduction to the language but as a way to boast that haskell is so much better and more expressive than C. I mean, look at that C code just after it, disgusting isn't it.

What they don't say is how much slower their implementation is, of course. They also give a link to a more direct (and faster) C-to-haskell version of the quicksort[1]. Hey, it's actually longer than the C version! And it uses 3 imports. And it's still slower than the original C. Oops. I wonder why they didn't put that one in the tutorial. I went back to common lisp after that, I have yet to write 1 line of haskell.

TL;DR: when I want an introduction to your language, I want to know what I can do with it and how I can do it. Give me some code to chew on, show off some features. Don't spend 10 pages telling me you're the best of the best and everything else is crap. This is the kind of article I expect: <http://perldoc.perl.org/perlintro.html>

[1] [http://www.haskell.org/haskellwiki/Introduction/Direct_Trans...](http://www.haskell.org/haskellwiki/Introduction/Direct_Translation)

<comment><USER4> That wiki link to an actual implementation of quicksort in Haskell is pure comedy gold (1):

" _Unfortunately none of the above "real" quicksorts seems to compile as given_ "

" _The program below is working very very slowly. It's probably slowsort._ "

" _A more specific/direct translation (neither this nor the C version is polymorphic) is offered by Daniel Fischer, who reports that this version runs within 2x of the C version_ "

(and it's a completely unreadable mess that is clearly a line by line copy of the C code given)

What a complete and utter trainwreck.

[1]: [http://www.haskell.org/haskellwiki/Introduction/Direct_Trans...](http://www.haskell.org/haskellwiki/Introduction/Direct_Translation)

<comment><USER5> To be fair, QuickSort is particularly suitable for imperative languages that allow in-place modification of arrays. For functional languages, merge sort is a much more natural solution that is simple to implement, guaranteed to be efficient, and probably reasonably fast (though still unlikely to beat a QuickSort implementation in C).

<comment><USER6> To be fair, QuickSort is particularly suitable for _actual computation hardware_ which has hardware features like numerically addressed, stateful random access memory. Imperative arrays happen to feature "in-place modification of arrays" not because it's a useful language feature but because it's a straightforward abstraction of the actual machine being programmed.

That distinction is really important, and something I think many language nerds completely fail to understand. Sure, often all that's "really" important is the abstraction of the "Human Design Space" idea being implemented, and that's a regime where high level language abstractions have lots of value.

But sometimes you want to actually direct the hardware. And there, as everywhere, it helps to use a language with the proper abstractions. C has them, Haskell doesn't. There's absolutely no shame in that!

But somehow people get fooled into thinking that somehow Haskell (or whatever language is involved in the argument, but it seems like Haskell people fall into this hole more than most) doesn't _need_ those abstractions to be "as fast a C". And that's just insane.

<comment><USER7> To be fair to mergesort, it's particularly suitable for actual computation hardware too. It's mostly linear reads and writes, which almost all i/o systems heavily favor. GNU sort uses mergesort (in C).

<comment><USER6> GNU sort is designed to sort on disk though. If you actually watch it working on a giant file, you'll see it generating lots and lots of files in /tmp containing the merge lists.

This is because quicksort obviously requires fast random access to the whole arrays, and (at least when it was written) /usr/bin/sort would be expected to be able to quickly sort data that can't fit in memory.

So... if anything I think this is evidence to my point: in the performance regime, you have to match the algorithm choice to the hardware. Specifically here: sort is making up for the lack of memory by exploiting the comparatively (relative to virtual memory) fast _streaming_ behavior of storage media.

Notably, stateful filesystem I/O is _also_ an area where Haskell tends to fall down. I'm not at all sure a Haskell merge sort of the form used in GNU sort would do well at all, though I'm willing to be proven wrong.

<comment><USER5> > GNU sort is designed to sort on disk though. If you actually watch it > working on a giant file, you'll see it generating lots and lots of files in > /tmp containing the merge lists.

The number of files created is just an implementation detail; you could easily do everything in one file if you wanted to, or at most 2N files if you're not allowed to seek or overwrite files at all, and you want to do N-way merges.

Maybe GNU sort is just trying to avoid creating files larger than 2 GB (which is a problem on legacy file systems).

> Specifically here: sort is making up for the lack of memory by exploiting > the comparatively (relative to virtual memory) fast streaming behavior of > storage media.

Yes, also the fact that GNU sort can sort multi-terabyte files on 32-bit platforms, which otherwise wouldn't fit in memory. (Though systems with smaller process memory space than disk storage space are an oddity that will soon be outdated, I suppose.)

> I'm not at all sure a Haskell merge sort of the form used in GNU sort would > do well at all

Well, even the on-disk sort starts by sorting chunks in-memory, which we have already established Haskell is bad at. However, the merge sorting part of the algorithm may well be I/O bound in practice, in which case Haskell should be able to do it just fine.

The only good reason I can think of why C could be faster, is that if you can merge more efficiently, you can choose a higher value of N for your N-way merge,

> stateful filesystem I/O is also an area where Haskell tends to fall down

What do you mean by this? AFAIK Haskell can read/write files just fine through the I/O monad.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> > This article is in response to an earlier one comparing Haskell and C, which > made the claim that Haskell beats out C when it comes to speed.

Perhaps my reading comprehension of the original post is different from Jacques' (or I'm just wrong), but I don't think that the original article made such a claim. Here's the TL;DR of the original article:

> TL;DR: Conventional wisdom is wrong. Nothing can beat highly micro-optimised > C, but real everyday C code is not like that, and is often several times > slower than the micro-optimised version would be. Meanwhile the high level > of Haskell means that the compiler has lots of scope for doing micro- > optimisation of its own. As a result it is quite common for everyday Haskell > code to run faster than everyday C. Not always, of course, but enough to > make the speed difference moot unless you actually plan on doing lots of > micro-optimisation.

From this, I understood that in a larger program, most programmers wouldn't be doing the kind of micro-optimizations that they do for the Benchmarks Game. I figure that most code would be written following this pattern:

* Write code to follow the spec (usually without thinking too much about performance)

* Run the code, and evaluate its performance

* If the performance is good enough, you're done

* If the performance needs to be better, run a profiler

* Find the biggest bottleneck and optimize it

* Re-run the code and re-evaluate its performance

The original article took a micro-benchmark (a mistake in my opinion, because it's easy to micro-optimize every single detail of that code) and showed that in the case of Haskell, the first version was too slow, but that with the help of a profiler, finding the cause was easy, and the fix was trivial, while in C the profiler didn't show any problem with the code of the user, so it must be a problem in the standard library's code, and to fix it required changing the design of the program and making it more different than the spec. And I felt this was the author's real point; that to get the maximum performance from a C program, you'll need to code it not like a human would imagine it, but like a computer would, and it makes the code harder to maintain later on.

<comment><USER9> > Perhaps my reading comprehension of the original post is different from > Jacques' (or I'm just wrong), but I don't think that the original article > made such a claim. Here's the TL;DR of the original article:

The TL;DR is not representative of the whole article. It would be nice if it were but it isn't, so just reading the TL;DR is not enough, better do the short-enough;did-read version of that. Another commenter in this thread said more or less the same thing, I've responded to him here:

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

<comment><USER10> The whole article didn't make such a claim either. Your hate boner is clouding your judgement. Your article is far more biased and far less useful than the original. Especially all the random off-topic nonsense like "you should totally add error checking" and "lets change the style for no reason because I want to pad the length of this".

<comment><USER11> _> Your hate boner is clouding your judgement._

Should be a button or T-shirt.

</comment></comment></comment></comment><comment><USER12> I still wonder to this day why Haskell programmers want their language to be loved so much.

At times it feels like that kid at the playground that spends half his time telling everyone how he's the best thing since sliced bread and cries himself to sleep at night wondering why no one will play with him and his monads.

Don't get me wrong, Haskell looks like a great language with obvious qualities and I don't knock anyone for using it, to each his own, it's just the never ending publicity and proselytism that really rubs me wrong. People adopt new languages, not the other way around.

<comment><USER13> Two things I love about Haskell.

1\. It is very terse/expressive. I can look at code I haven't touched in 6 months and still understand what it's doing. Perhaps because my code is newbie code and thus somewhat simple.

2\. It is the only language that brings me back to the days of Turbo Pascal when the joy of coding came from coding itself, not from building cool things. A small but vital distinction.

That said, I rarely get to use Haskell. For most of my tasks javascript is better suited, but haskell has affected how I write javascript to a great extent.

<comment><USER14> Maybe it is because I'm not a Haskell Guru, but although I love Haskell's terseness, it tends to make it very hard for me to read code I've written a while ago. I tend to get excited about cool Haskell features like Arrows, using them whenever I can, then I forget about them, and when I read my code 6 months later, it's like gibberish..

<comment><USER15> When I find myself using arrows, usually I realise that I got lazy and used tuples because my data model wasn't good enough. Good code flows from good data.

But really, you should use the "tricks" when they make your code more expressive, not just because they're cool. It's the same in any language.

</comment></comment></comment></comment><comment><USER16> I ran into similar issue few years ago where lack of knowledge combined with large amount of fanboyism clouded someones mind. In a popular language comparisons site there was a threading benchmark. It was simple, just start 256 threads. Haskell beat C by far.

I did strace. The C benchmark actually spawned 256 threads and the Haskell one spawned 4. The response I got was that it's a builtin feature in Haskell that it uses lightweight threads internally. And because pthread doesn't do that you cannot do it in C and therefore the comparison is valid. Even though C doesn't have the concept of threading and everything must be done with an external library in anycase.

I could dig the old thread up but I've given up with those. I have nothing against high level languages, I use them a lot. However I find it very weird that some true fans feel the need of creating enormously biased benchmarks and then being proud that those benchmarks show that their favourite language is the best.

<comment><USER17> I've never worked on a project where my job was to create 256 threads. Instead, I would be tasked with processing lots of requests or datasets in parallel. If Haskell provides convenient and idiomatic ways to do this with lightweight threads that C does not, then C is effectively slower. If C has a commonly used and available library to implement this same approach - <USER2> maybe its faster. The whole point is we are comparing implementations of a programming task.

<comment><USER18> C doesn't impose a specific threading model. So a C threading benchmark is specific to the library you are using. And if you choose a heavyweight thread library to compare to a language which is not using heavyweight threads, it is not an apples to apples comparison. Arguably it could be, if C imposed a specific threading model, which it does not.

You are comparing implementations, not languages

<comment><USER17> Yes and that was my point. The benchmark is a comparison of implementations - compilers, run times and libraries. I am not sure how you would benchmark a language.

</comment></comment></comment></comment><comment><USER19> Could everyone on HN just take a course in languages theory so we can all stop with these stupid trolls about the best languages which have been emerging for a week.

Hopefully it would allow everyone to realize that a language is just some syntax and semantic and that a compiler is just a program like another. Nothing sacred here. Hell you can even do imperative programming in Haskell if you wish. Coding an interpreter to do so is not particularly difficult.

With a bit of luck, everyone would understand at the same time that the compiler is building what is executed therefore the expression"speed of a language" is utter nonsense. You can only speak of the speed of the implementation which, yes, vary widely amongst compilers for the same language.

So, yes, Haskell semantics encourage functional programming, C semantics imperative programming, both are Turing complete and yes GCC is currently better at optimising C code than any Haskell compiler, nothing new under the sun. Can we all go back to a normal activity now ?

<comment><USER20> Some people like bickering. But I think the point of the article is that C is, by nature of the language, easier to optimize than Haskell, since it is lower level.

<comment><USER21> > C is, by nature of the language, easier to optimize than Haskell, since it > is lower level.

Depends what level you mean - if you want to do all the optimisations yourself, C is better; but if you want to write code and let the compiler do the details, I would think higher-level is better (you can just write doWhatIMean() and the compiler will automatically choose the optimal implementation for your current problem and platform - where if you'd specified the implementation details yourself, you'd be sub-optimal in many cases)

<comment><USER22> > _"(you can just write doWhatIMean() and the compiler will automatically > choose the optimal implementation for your current problem and platform - > where if you'd specified the implementation details yourself, you'd be sub- > optimal in many cases)"_

How far are we with declarative programming in sense of being expressive and expecting the compiler to understand what we mean? I'd believe that without strong AI human will always be better off with imperative programming than a compiler with declarative, for anythig beyond relatively simple isolated pieces of code/algorithms. _In general_ we have so much more experience and knowledge about the target system and environment than the compiler does, this is less true for JIT compilers, but they come with their own overhead.

I'd really love to see _superoptimization_ [1] to be done as a service for compilers. Say you have a function with certain semantics the compiler is fully certain about. The compiler fingerprints this function and uploads a fingerprint + behavioral analysis to < _somewhere in cloud_ > where it's being exhaustively optimized by bruteforcing all the meaningful instruction sequences which conform to the semantics of the function. After the most optimal piece of instructions is being found, it's associated with the finerprint and stored in a database and then returned to the compiler. Now, when ever someone else writes the exact same function(or code with exact same semantics) the compiler queries the < _some cloud service_ > for the optimal piece of code. Of course, a system like this would need more information about the _actual target_ of the code(CPU architecture, cost of things like memory access, cache miss, branch mispreciction etc.).

[1]: <https://en.wikipedia.org/wiki/Superoptimization> (The system I roughly described is far more extensively analyzed in some of the papers. _Really_ great read!)

</comment></comment></comment></comment><comment><USER23> _"Third, a comparison on speed between Haskell and C is almost meaningless, speed is not Haskells strongest point and it would be folly to bench it against C for that particular reason."_

I disagree wholeheartedly. If I am choosing Haskell over C, I am giving up some (possibility of) performance. The question of how much is an important piece of information, entirely relevant to that decision.

As I observed in a comment on that other post, the actual performance of both the Haskell and the C depends on the amount of effort expended to make them faster (first in general, and then possibly on a particular architecture). At the limit, the C beats the Haskell by some margin - the size of that margin is informative; but that's also not the whole story - what the margin is earlier also matters, and for a particular project, it might matter more.

This is _not_ to say that the particular benchmarks in the earlier article were good choices - I don't have a clear position on that.

</comment><comment><USER24> Nice refutation. The problem about doing language comparisons for speed is that they generally require a non-trivial example, so you have to be an _excellent_ programmer in all the languages you've compared.

Of course, language speed charts are generally as useful as PC spec charts and YouTube videos of Nürburgring laptimes when you're buying a new car.

<comment><USER25> well, what about an existing piece of software, and compare on more than just speed, but ease of maintenance (meaning, how quickly you can add features or fix a bug)?

There seems to be a myriad of window managers and web frameworks. Someone should do an unbiased comparison.

<comment><USER24> Same thing again, it depends entirely on really specific domain logic. How easy it is to add a new feature on a C based web browser versus one built on Haskell is mostly useless, it just tells you how quickly one person added one feature on one specific thing.

Languages aren't inherently comparable, you can get useful benchmarks but they shouldn't be taken as gospel.

</comment></comment></comment><comment><USER26> This article starts by totally misrepresenting the original article ([http://paulspontifications.blogspot.co.uk/2013/01/when- haske...](http://paulspontifications.blogspot.co.uk/2013/01/when-haskell-is- faster-than-c.html)) by saying that it said "Haskell beats out C when it comes to speed".

If you bother to read even the TLDR of the original article you 'll find it says something completely different, which makes this article pretty poor as a response.

<comment><USER9> From TFA:

"So here is the bottom line. If you really need your code to run as fast as possible, and you are planning to spend half your development time doing profiling and optimisation, then go ahead and write it in C because no other language (except possibly Assembler) will give you the level of control you need. _But if you aren't planning to do a significant amount of micro- optimisation then you don't need C. Haskell will give you the same performance, or better, and cut your development and maintenance costs by 75 to 90 percent as well._ "

Note the 'same performance or better' in there.

Maybe you missed that bit in the original article?

This wasn't a large effort by any stretch of the imagination and a factor of 5 difference compared to the Haskell code isn't even in the same ballpark as "the same performance", and about a factor 10 difference with the C code listed in the original article. You'll notice no micro optimizations were done in the re-write, just some global re-arranging of the way data flows through the program.

The rest is in response to the misleading title, that Haskell is 'faster' than C, faster to program, faster to debug, easier to maintain and so on while making claims about performance that are not born out by real world comparisons.

Speed was the wrong thing to compare on here, and should not have been part of the original article without a serious effort to become equally proficient in both languages.

<comment><USER26> Compared to the amount of optimisation that many people typically do (i.e. zero or close to zero), it was a large amount of extra work to get that performance boost. The global re-arrangements of the way data flows through the code are _more_ difficult than many micro-optimisations, not less, so I don't understand how you can claim.

And you don't have to be an expert in C to make the claim he is making, because most people are not experts in C, but might turn to it because "it's faster". It's precisely this kind of person who needs to understand that with their level of knowledge, and the amount of effort that they might put into optimisations, Haskell can be just as good or better.

<comment><USER9> > it was a large amount of extra work to get that performance boost.

Not really, actually. It took a lot of time to document the transformations, but actually doing the coding was short, much less than an hour total.

> The global re-arrangements of the way data flows through the code are more > difficult than many micro-optimisations, not less, so I don't understand how > you can claim.

Maybe more difficult for you, but not for me. Micro-optimizations are actually harder for me, there are infinite possibilities there, flow has really only one (or very few) 'proper' mapping(s) from problem space to solution space.

> And you don't have to be an expert in C to make the claim he is making, > because most people are not experts in C, but might turn to it because "it's > faster".

Every tool has its uses. If you pick C then probably you're doing so because you are convinced that you need it. You should then study how accomplished users of that tool use it, not stop at the first naive use that you come up with yourself.

> It's precisely this kind of person who needs to understand that with their > level of knowledge, and the amount of effort that they might put into > optimisations, Haskell can be just as good or better.

That's very well possible, again, I do not know Haskell so I can't comment on it. But I don't see any meaningful comparison between the two languages here, speed certainly isn't it and you failed to acknowledge that the article in fact did make that claim.

</comment></comment></comment></comment><comment><USER27> If Haskell, Lisp and friends are so great for building large software systems then surely people are going to flock to them and do exactly that. And if that didn't happen, of course the proponents of these languages would sit down and try to figure out why this wasn't happening. Right?

<comment><USER28> Education is a big part of the problem. When I attended university, we weren't even told that functional programming exists. Only later on, through one of my friends it was brought to my attention. And it's hard to change that mindset, particularly at the university I was. They are set to produce a constant stream of Java/.NET developers for the companies around them (large banks, in particular).

<comment><USER29> Which university was this, and which program?

<comment><USER28> The university in Lucerne, Switzerland. Hence the reference to large banks ;)

</comment></comment></comment></comment><comment><USER30> The original article did mention that switching to use lines instead of characters would probably speed things up considerably, but argued that this makes the program harder to understand, while Haskell makes the same optimizations automatically on the character-based program.

And that's a fine point to make, but I do think it was a little misleading and handwavy. The proper thing to do would be to make the change and show the difference both in code and performance, and let the readers draw their own conclusions.

<comment><USER9> The 'line reader' version of the code (not shown in the article) was actually a lot easier to read than either one of these but the article was already over long. I do have that version, if anybody is interested I can add it.

<comment><USER31> i'm sure you have all your intermediate steps as well. i really liked an example i've seen a while ago that described an optimization process in git history. you'd simply check out the right step and have a look for yourself.

</comment></comment></comment><comment><USER32> _Yawn._ It is not possible to directly compare languages wrt speed: we only can compare the speed of their implementations and reason about the features that make a language amenable to optimizations.

 __And we all know this. __

So why, despite this knowledge, do we engage in "language speed flamewars" like this?

That's a valid question, and it belongs in the field of psychology of hackerhood. Does anyone have a reply to wager?

<comment><USER22> I for one find things like these extremely interesting. The more there's analysis about performance implications of certain ways of doing the task the better. The only thing I'm left missing here is to actually look into the profiling information(branches, caches, instructions per cycle etc.), especially on the compiler generated assembly to see what exact instruction sequences are to blame, and if there are ways to save cycles here or there.

If only there were more things like this in the internets with deep analysis about performance of a given piece of code... :)

<comment><USER9> It was pretty long as it was... Tacking on a code generation section to show _why_ certain things are inefficient (and the associated detour to how the standard library is implemented which would be required reading to understand all the implications) would make the article three times as long. I promised I'd have it done by Monday.

</comment></comment></comment><comment><USER33> Excellent. Documenting successive transformations on code is much more instructive than showing a final snapshot. This is one reason I really enjoyed doing live-coding when teaching programming.

</comment><comment><USER33> This is a classic pattern: when advocating for one of several competing approaches, you spend more care optimizing your favourite approach than the competitors.

Prof. Geoffrey Hinton specifically calls this out as a pitfall in research. It's better to compare your promising new approach versus another group's approach (not your own implementation thereof). This, assuming that the other group has deep knowledge in tuning their competing approach.

<comment><USER9> I think it's only human. The standard should be that you present your case for your 'favorite' and then put out an open challenge to supporters of the opposition to do their worst.

</comment></comment><comment><USER34> The problem with fringe languages has always been the "all talk - no walk" nature they all seem to have.

Stop telling me why you are so awesome. Just show me with shipped product.

Until then it's just an intellectual circle jerk.

Talk less. Ship more.

<comment><USER35> The old appeal to popularity. The only argument that is worse is the appeal to faith.

An intellectual circle jerk occurs when one repeats the same old mantra without doing any actual research. There are plenty of "shipping" products in languages like Haskell. I'm no expert on Haskell, but this wasn't hard to find:

<http://www.haskell.org/haskellwiki/Haskell_in_industry>

A better tagline might be: Think more and don't settle for the status quo.

<comment><USER36> That page has generated some heat in the past: [http://flyingfrogblog.blogspot.ch/2010/05/why-is-haskell- use...](http://flyingfrogblog.blogspot.ch/2010/05/why-is-haskell-used-so- little-in.html) (admittedly this guy seems to have some personal grievances with people in the Haskell community) I don't know how much the page has changed since this rant was written, but some of the entries seem to be the same, e.g. 'Ansemond LLC' which is a company with a single mac app that hasn't been updated since a beta in 2009 and only mentions Haskell in an old blog post. The site for that company is so charmingly dated that I feel kind of bad for highlighting it, but if this is the kind of 'industry success story' they think worth mentioning then I'm not sure the wiki page is of any value.

<comment><USER37> >admittedly this guy seems to have some personal grievances with people in the Haskell community

No, he's a troll. He trolled lisp, then haskell, then ocaml. 2010 fell into his haskell phase, that's the entire reason for that particular pile of bullshit.

<comment><USER36> The thing is, there is some truth in among the bullshit. That 'Haskell in Industry' page really does have links to non existent products or long dead projects or things that don't seem to be using Haskell at all. And even after that blog post was widely circulated 2 years ago the page remains unchanged, and people are still citing it as evidence for the widespread use of Haskell in industry.

</comment></comment></comment></comment></comment><comment><USER38> Just a quick point. He quotes me:

        You can't make a computer do stuff faster,
        but you can make it do less work.

That's not original to me, but I don't have (and haven't been able to find) a good, definitive, original source.

</comment><comment><USER39> Is there a reason "Is" and "Not" are capitalized but "faster" and "than" aren't, because it's just been bugging all day whenever I refresh the front page and look over the list for anything interesting.

</comment><comment><USER40> This is cool. However, in the spirit of contributing, comparing one byte at a time is not optimally efficient. It's possible to write clever optimizations by hand, but I'd be surprised if just using <https://github.com/rbdixon/glibc/blob/master/string/memchr.c> doesn't cause a meaningful speedup.

<comment><USER9> The inner loop of those comparisons is indeed the spot where you can still speed up as noted in the last part of the post, the kind of optimizations that you describe are extremely effective but qualify as 'micro optimizations' and I expressly left those out because they impact readability considerably. But, you're right, if that's what it takes then so be it and then readability would have to suffer in deference to the last couple of % of speed. Maximum gain from this optimization relative to the final runtime is about 20% by my estimation. (Inner loop will step 8 bytes at the time, but will have more instructions).

<comment><USER40> I concur that doing this directly in your code is extremely ugly; but note that you can get this speedup by just dropping in a call to glibc's memchr(), hiding the ugliness behind a well-known interface.

<comment><USER9> Good point about memchr, I missed an opportunity there.

edit: because it's clearer _and_ faster, that's a no-brainer, updating the blog post with a remark to that effect and a link to parent.

</comment></comment></comment></comment><comment><USER41> There is a bug that causes invalid output when the input file is larger then the BLOCKLEN. Set BLOCKLEN to 4096 and run the program on the test input file [1] (compare with output file [2]), to see the problem on a smaller input file.

The bug happens when read_sequence() is called with partial data saved from the last sequence, since (size == read) the first fread() will be asked for 0 bytes which causes the read loop to end early (n == 0).

1\. [http://benchmarksgame.alioth.debian.org/u32/iofile.php?test=...](http://benchmarksgame.alioth.debian.org/u32/iofile.php?test=revcomp&file=input)

2\. [http://benchmarksgame.alioth.debian.org/u32/iofile.php?test=...](http://benchmarksgame.alioth.debian.org/u32/iofile.php?test=revcomp&file=output)

<comment><USER9> That was a good catch! Serves me right for testing with the small file for correctness and testing for speed with the larger one.

</comment></comment><comment><USER42> What do you guys think I should learn next? I've been studying javascript/ruby and I would like to diversify what I can make. I don't want to rush learning new languages, but it's interesting to learn about paradigms that certain languages enforce.

What's important to me(not in order):

1) Being an omni-platform developer 2) I only know two high-level languages, so learning a low level language will benefit me. 3) I want to get into Natural Language Processing and deep neural networks/AI, machine learning etc. 4) I'm a self-taught programmer, so the amount of good resources online/amazon is a big factor. 5) I need a fucking job. 6) I like making web applications/web games, and I would like to make native applications/games as well.

</comment><comment><USER43> I'd love to be able to reason like that about the program I'm writing. Really cool article.

</comment><comment><USER44> Perfection is achieved not when there is nothing more to add, but when there is nothing more to remove.)

When one programs a computer (in a way it suggested in TAOCP) and you know your data, your memory layout and your CPU instruction set nothing could beat it.

Of course, there are tasks so massive, that a decent compiler could save lots and lots of man hours, but it is a completely different story.

No Haskell (leave alone J* ) could beat a code by people who know what they do close to the metal.

In some languages the code could be shorter much more readable and elegant that C, but of course, it is not Haskell, or J* .

Thoughtfully crafted Common Lisp could be close to an ideal.)

<comment><USER45> Lisp's homoiconicity comes with the cost of some extra syntactic weight that Haskell doesn't have to bear. (It's also nice that "lambda" is considered so important that it's given a single character in Haskell).

I'm not familiar with J*, and it seems to be difficult to search for. Do you have a reference so I can go learn about it?

[http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Has...](http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Haskell)

[http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Com...](http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Common_Lisp)

<comment><USER44> I prefer Erlang.

[http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Erl...](http://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Erlang)

And your illustration is particularly good for showing how much more "sane" (actually, in many ways) Erlang is. And how elegantly different Python could be.

J* is my own abbreviation for Java and Javascript.)

<comment><USER45> _I prefer Erlang._

Just out of curiosity, why is that? (With reference to the linked example, I mean.) Clearly they're in the same league, and so it's a close call. From my perspective, I like that Haskell reserved the single vertical bar for the list comprehension notation, so that it would be as close to familiar set- comprehension notation as possible. I also like how Haskell takes advantage of how the cons operator already implies in the pattern-matching that you're working with a list, and so the square brackets become unnecessary, whereas Erlang needs the noisy extra layer of brackets on top of the parenthesis needed for the pattern.

But once languages get this elegant, it's a close comparison. They're both beautiful to my eyes.

<comment><USER44> I think the sytnax of Erlang is much more elegant, because it was build around the fundamental idea of pattern matching as a core feature of the language.

When you have a few good ideas put together, you could get an elegant solution. When you just stuff everything inside (like Clojure) or went to extremes (like Haskell) all you got is just a mess.

Erlang syntax, however, is noisy due to all those punctuation, but it is elegant nevertheless.

      map(Fun, [H|T]) -> [Fun(H)|map(Fun, T)];
      map(Fun, []) -> [].

      member(H, [H|T]) -> true;
      member(H, [_|T] -> member(H, T);
      member(H, []) -> false.

This is intuitive, readable, but noisy.)

<comment><USER45> I'm not sure I follow you. Is the pattern-matching in Haskell somehow not 'core' enough? Both qsort examples linked in this thread use pattern matching.

<comment><USER44> All I'm trying to say that Erlang syntax is much more intuitive and readable, being derived from Prolog.

I honestly can't see why should I use Haskell (except for being _so clever_ ) when I have Erlang, or at least one real advantage.

<comment><USER46> well, let's look.

map f (h:t) = f h:map f t

map f [] = []

member x (h:t) = x == h || member x t

member _ [] = False

I think the only difference is that you can't match for equality directly in the pattern.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER47> If you're going to do a response blog post link to the original article at the beginning when you mention the original.

I read the original but don't assume everyone has.</comment>


Google Toolbar Tracks Browsing Even After Users Choose "Disable" - <AUTHOR> http://www.benedelman.org/news/012610-1.html

<comment><USER2> the article assumes that the x to close the toolbar is part of the toolbar itself.

it's not.

the x is a new feature of IE 8 and it is used to make IE not load the plugin responsible for drawing that toolbar.

So when you press the X, the toolbar isn't loaded next time you start IE, but isn't notified of this either.

The enhanced reporting features are part of the Google Toolbar BOH (browser helper object) which is not disabled when you click that X. The reason for that is the fact that IE as host of these plugins can't be 100% sure that the BOH and the toolbar are related.

Earlier versions of IE didn't have the X so there was just one way to turn the toolbar and/or reporting off: To use the methods provided by the toolbar itself (using the uninstaller or to disable the enhanced reporting using the toolbars official UI).

This current situation, IMHO, is just a consequence of the toolbar not being updated to the new situation (i.e. the x being drawn by IE).

Based on the technical knowledge I would not jump ahead and assume malice (on this part at least - the crappy taskbar button is another issue).

The irony behind this is the fact that IE added the x as a usability enhancement to deal with the growing amount of auto-installed toolbars and now they created a real mess due to not correctly track dependencies between different plugins.

<comment><USER3> The article alleges that even when the Google Toolbar Notifier BHO is also disabled, the tracking continues, and implies (though it doesn't quite state explicitly) that there is no way to disable whatever's doing the tracking other than a complete uninstallation.

<comment><USER4> Right---the _core_ problem here is "can't disable"; there is a secondary problem of "it looks like I've disabled but I haven't", but nearly all the criticism in the article stands even if the X is none of Google's doing.

</comment></comment></comment><comment><USER5> The word 'evil' does not appear at the target article, in either the headline or text -- so why prepend it to the submission headline? The article and author are more credible without the gratuitous editorial spin.

<comment><AUTHOR> Apologies, have changed the submission title back to the original article's headline.

</comment></comment><comment> Asa-Nisse Disclosure: I serve as co-counsel in unrelated litigation against Google, Vulcan Golf et al. v. Google et al. I also serve as a consultant to various companies that compete with Google. But I write on my own -- not at the suggestion or request of any client, without approval or payment from any client.

I think the above says pretty much everything. If you're doing sensitive stuff, why even install third party plugins?

</comment><comment><USER6> How long before we have a plug-in to report random page fetches to the toolbarqueries site? A la FF's Track Me Not.

(Edit: "random" meaning unrelated to the user's page fetches, as opposed to "a random sample of actual pages fetched").</comment>


I wasted 10 weeks of my life and $1900 - <AUTHOR> https://www.reddit.com/r/juststart/comments/dkyq92/how_i_wasted_10_weeks_of_my_life_and_1900/ <comment><USER2> This is hilarious. _Ten weeks._

Ten weeks?

To build a community?

To build a base of dedicated users and begin to reap the network effect that keeps existing users on the site, and draws in new years?

In the early 2000s, I launched something like an early "social networking" site for geek dating.

We built a strong community and actually were pretty profitable with direct subscriber revenue, though it was never quite enough to quit my day job and I eventually (reluctantly) moved on because of other things happening in my life.

Anyway, we were open for THREE YEARS before I charged a dime.

That's how long it took me to build a community.

I focused on community building/management while I built out the site's functionality. This was very active, hands-on community management on my part. Now, three years is a long time. Maybe somebody could do it in less time. Especially if you had a partner or a team.... I was a lone wolf who was also working some consulting gigs to pay bills.

Maybe it doesn't need to be 3 years, but 10 weeks is beyond a joke.

<comment><USER3> Thank you for this. The only waste of time here was a result of this individual's lack of commitment (sorry, but it's true) and misinformed understanding of the efforts involved in the launch process of any business, let alone his. I hope he sees this and realizes all hope is not lost if he sticks with it, evolves it, and plans for the ramp period accordingly. Success is never guaranteed, but you have to give it a chance.

<comment><USER4> Just to clarify, are you saying that if you build a copy of reddit I won't become a millionaire overnight?

Bloody hell, I wasted 11 weeks and $2600 so far.

<comment><USER5> I wasted 1 day and $5 and failed to create and alternative to Google. Never again!

</comment></comment></comment></comment><comment><USER6> This post talks a lot about the chicken and egg problem, and the inventors of Reddit faced the same problem - no one will come to your homepage for the internet if it doesn't look like the homepage for the internet.

Do you know what they did? They didn't focus on one community - they faked it. Thousands of fake posts with fake comments. All scripted.

Then one day they started seeing posts they didn't write and it took off.

Reddit was built on lies and you can too :)

<comment><USER7> Are there any archives to see what their fake content looked like?

<comment><USER8> In Alexis ohanian's book he says you can still find them if you go back far enough on the site.

</comment></comment></comment><comment><USER9> Although a bit harsh in writing, JustStartNoob's comment [0] is honestly a good analysis. The guy had an idea and tried to force it through as hastily as possible with the sole goal of 'making it.' Unsurprisingly, it didn't work out.

[0] [https://www.reddit.com/r/juststart/comments/dkyq92/how_i_was...](https://www.reddit.com/r/juststart/comments/dkyq92/how_i_wasted_10_weeks_of_my_life_and_1900/f4kzgxv/)

<comment><USER10> > "I spent stupid money throwing shit at a non-stick wall, realized the wall > was non-stick, so started spending money throwing shit at a different non- > stick wall instead".

This is the worst possible interpretation of OP's venture, and must be written by a 12 year old if $1900 is "stupid money"

Edit: I'm not saying that $1900 is not a significant amount of money to many people in the world. But it is NOT a lot of money in the context of developing/marketing a tech product in the first world.

<comment><USER11> I'd like to point out that OP is from Russia. I wonder if he still lives in Russia?

In 2018, the minimum wage in Russia was 11163 rubles per month, which is $174.6 per month. So, it would take a person working for a minimum wage 10.8 months to earn $1900.

For comparison, the minimum wage in California is $11/hour, so assuming a 40 hour work week, in 10.8 months a minimum wage worker in California would make $19,008. I'd guess that you would consider $19k to be a significant amount of money to spend on a project like this?

My point is, while you are right that $1900 is not "stupid money", it might still be a significant amount of money if the OP lives in Russia.

In fact, I'd think that a lot of people living in the United States would think that $1900 is a significant amount of money, especially for a risky side project.

<comment><USER12> You correctly point out the non-trivial nature of $1,900, including for many millions of Americans, based on duration just to earn the $1,900 in terms of income.

It's even more dramatic than that however. The person earning minimum wage in Russia will never possess $1,900 in loose capital to spend on such a venture, as they don't have enough buffer beyond expenses to accumulate it. At $174 per month, saving 20% of that, it would take five years, and during those five years something would inevitably happen to consume the savings base (stray emergency need or other life event).

It's one aspect of the brutality of being poor, whether in Russia or the US or wherever. You rarely have breathing room above basic life expenses to accumulate anything. Opportunity almost always has a financial cost associated with it, a get-through-the-door dollar cost (whether that's buying equipment, renting commercial space, or just affording the free time to do a thing).

For the majority of the world $1,900 is more savings in terms of liquid cash (eg in a bank account), than they will ever have at a given point during their lifetimes. It's exceptionally hard for the majority of people to put that together.

<comment><USER13> Which isn't saying much. For the majority of the people in the world $100 would tick the same box.

</comment></comment></comment></comment></comment><comment><USER5> Ten weeks to try and build 3 communities... So a little more than 3 weeks each.

3 weeks. And they declared it a failure. Wow. I know "failing fast" can be a virtue in letting you move on to the next thing, but this is too much.

Getting even nominal amounts of free traffic and engagement in that time period is a "win". Give it 6 months of grass roots, a bit of time for network effects to appear at all. Why would they have any sticky users when there is practically no content yet? Let the slow free traffic gradually build some. Then maybe get some paid traffic, who will have a reason to stay around.

Sure, they still might have failed then too, but then at least it would have been a true failure, for the right reasons.

</comment><comment><USER14> This reminds me that fateful question that we, software engineers, use to hear from our moms/dads/family: "Why don't you start a facebook?"

<comment><USER15> This amuses me to no end, I have never got that question, the closest thing was "you do websites right? do you know how to hack someone's Facebook?"

<comment><USER16> Or even "can you fix my printer?"

<comment><USER17> Haha classic. For me that'd be: "I've got an app idea."

</comment></comment></comment></comment><comment><USER18> He had an idea and tested it. 3 month and $1900 sounds about right. I don't think you can test product ideas with significantly less time and money investment.

<comment><USER19> The trick is to make a list of all the ways it could fail and test these first. Have two personas, one that assumes it will fail and one that is enthusiast. Set the tasks priorities so the enthusiast one starts coding tasks that disproves the failure hypotheses of the skeptical one. If you can't get past one, don't switch to the "easier" stuff. Put the project in "hibernation" mode and switch to another one until you get another insight, usually from reading a totally unrelated thing, that will unblock you.

</comment></comment><comment><USER20> > _Let me draw the bottom line. 10 weeks are spent to create and test 3 > different hypotheses._

10 weeks are a little more than two months. That's nothing, wouldn't even be enough to build something good enough, much less to test it, and even less to test it 3 times.

So let me rephrase: "Only 10 weeks are spent to create a minimal product, and shallow barely-test 3 different hypotheses before giving up".

It can take years (plural) for such a service to pick up.

You can quickly test, of course, but don't expect this "10 whole weeks" of testing to tell you anything insightful...

You just know that your service didn't hit the jackpot and became viral from day one...

> _Everything began from the moment a severe Reddit addiction started to > develop, it went so far that I fully stopped visiting Instagram and > Facebook._

I also LOLed at this in the intro. The problem with the Reddit addiction was that it prevented ...being as addicted to two other social platforms...

<comment><USER11> I think there is a problem with the current thinking on MVPs where you quickly hack together a product, launch it, and drop it if it doesn't gain traction immediately.

This approach is probably especially damaging if the product is a social platform that you are starting from scratch.

<comment><USER20> Still, MVPs are not supposed to be "10 weeks total to build, and test 3 hypothesis" either...

An MVP could be a year long or more process -- it's just about not building excess functionality not needed to test the waters.

</comment></comment></comment><comment><USER21> In my mind social networks are probably one of the hardest things to crack. People are only attracted to it if there are already lots of other people and activity there. It's like a chicken and egg problem and your job is how to make one of them appear out of thin air

<comment><USER22> One of my favorite stories is how the founders of reddit would create all the posts themselves, but submit them under fake users to give the appearance of popularity.

[https://arstechnica.com/information- technology/2012/06/reddi...](https://arstechnica.com/information- technology/2012/06/reddit-founders-made-hundreds-of-fake-profiles-so-site- looked-popular/)

</comment></comment><comment><USER23> I built a forum around 2001 for people in the state of Maine who loved cars. I seeded it with friends, I put fliers on interesting cars I found around the state, hosted meet ups, etc. It took a ton of effort to get that fly wheel to spin, but I made a few hundred dollars a month in ads from local business (car dealers, mechanics). Tons of fun, met great people and set me on a course that has served me to this day. I was a bit early for hyper niche communities though :)

Creating a better Reddit has been a brain storm side project I've been working on for years. The Internet needs it now more than ever. But after my $100k bet on VR I'm now more deliberate.

Anyway, this kid spending ten weeks on his side project is pulled out of a different era. Such experiments may have yielded fruit a decade or two ago.

<comment><USER24> What was your $100k bet on VR?

<comment><USER23> I co-founded, and bootstrapped, a VR company [1] back in 2016. We launched three games, got some funding by HTC, but weren't able to raise venture. I keep meaning to do one of those "10 things I learned" sort of posts.

[1][https://www.RLTYCHK.co](https://www.RLTYCHK.co)

</comment></comment></comment><comment><USER25> I respect anyone who is able to accept the sunk cost and walk away after doing the correct analysis.

My startup is still preseed and I have a few angel investors. When I pitched I had done some research but didn't truly understand the market. Basically the industry I'm is massively fragmented, and each segment has very different access requirements.

There's still money to be made, but not the sort of money that attracts VC and no express rainbow to a pot of gold. I would have done things very differently had I known what I know now, but a revenue generating business that could break even in a couple years is a pretty hard sunk cost to swallow.

</comment><comment><USER26> Honestly, they could have done much worse than waste 10 weeks and $1900, so they may have been one of the lucky ones.

<comment><USER27> Six years and $18 billion.

<comment><USER28> That's other people's money though.

<comment><USER27> The best kind!

But it'd make a way more dramatic headline.

</comment></comment></comment></comment><comment><USER29> So many founders have warped expectations of overnight success, myself included. This probably comes from all the Techcrunch style articles we read about viral product launches and massive raises. 10 weeks is not a lot of time, especially if you are bootstrapping a social network. I've been doing it for about two years and only now am I starting to see some traction and figure out how it all works. I don't mind though because it's a labour of love that I fund thorugh my day job.

One thing I've realised though is that the barrier to entry for creating a social network has gone up significantly, because when users come to your network they expect the same experience that they get from other networks like Facebook, Twitter, Reddit, Quora, Github, LinkedIn, Medium and so on. Things like:

\- A highly relevant, non-repetitive newsfeed of fresh stimulating content.

\- Customizable and respectful notifications

\- Super tight privacy

\- Rich UIs for creating content and comments

\- Openness (RSS, ActivityPub etc.)

If you aren't able to deliver the same experience as venture funded social networks as a bootstrapped 2 person team, users typically bail. This in turn stops the network from growing and becoming more useful. Many companies like Quora, LinkedIn and Medium also pay people full-time salaries to produce content that brings people in.

</comment><comment><USER30> > It is impossible to launch hundreds of communities all at once, that is why > I started to choose the idea of the first community

This in itself is a good idea. It worked for Lobsters and HackerNews, and one of the things that went wrong with Voat:

[https://battlepenguin.com/tech/voat-what-went-wrong/#too- man...](https://battlepenguin.com/tech/voat-what-went-wrong/#too-many- subverses)

</comment><comment><USER14> $190 per week, for 10 weeks, looks like a very small loss considering the experience and 'fun' of learning all this.

</comment><comment><USER14> People are discussing the very short amount of time he spent, but what about the money?

A service that he created (I assume direct cost zero) without a big community (so server costs should be very low) and VK's advertisement with no engagement rate.

Did he spend almost 1900 in advertisement? Jeez...

<comment><USER5> And in the begining the advertising was pointless. No one was going to stick around when there was no content yet. They should have been grateful for the minimum amount of free traffic and engagement, covered server costs for 6 month or a year while it gradually built. Only then pay for advertising, when that traffic will find at least a minimal community to engage with. Yeah it's still hard and might fail, but you don't get a social community over night, or in the 3-4 weeks they spent on each attempt.

</comment></comment><comment><USER31> Don't give up after the first try. I understand it costed you money and time. Money is what you need to survive. Do you have second thoughts? Dilemma? Like going back to it and trying again, this time slow and during your free time (=when not working) ??

<comment><USER32> I agree, he said 10 weeks and 3 tries.

That's hardly 1 normal attempt.

<comment><USER33> But 10 weeks for 3 ideas is not enough... 10 weeks for 1 idea, maybe... If it's something that sells something, like SaaS. These ideas did not even have real monetising strategies behind them from the looks of it.

</comment></comment></comment><comment><USER34> > Everything began from the moment a severe Reddit addiction started to > develop, it went so far that I fully stopped visiting Instagram and > Facebook.

I like this quote. Like another Russian proverb meaning "fight fire with fire".

</comment><comment><USER35> Well, 10 weeks is nothing. On top of that, you're trying to start with niche/limited communities. A student community focused on studying?

People want to communicate about what's fun, not about what's a hassle.

I don't remember how Reddit started but I remember one of the first r/s that got big was Aww.

There was a very nice example a couple of weeks ago on how before the network effects kick in you need to give people a reason to go to your site and use your service. Nothing like that happened here.

</comment><comment><USER10> > I wasted 10 weeks of my life and $1900

There are people spending more to learn less. Seems like good value to me. Best of luck with your next venture, if you're reading.

</comment><comment><USER36> For many people today Internet = Facebook. Probably it would have more sense to start with a FB group instead of rolling out own reddit clone.

<comment><USER11> That's a good idea, if you want to build a social network, it probably makes sense to build an audience first.

</comment></comment><comment><USER37> So facebook for kittens didn't work out? :)

<comment><USER38> ... but yet Fartbook was too successful

#letterkenny

</comment></comment><comment><USER39> In ten weeks even a fricking blog cannot get above a dozen of visitors each week. So an online community that needs momentum and a ton of visitors from the get go?

Did that guy really think you can go from scratch to success and fame in 2 months? Especially with such a small investment?

</comment><comment><USER40> "Good news! Congratulations! You've got 10 weeks of learning and the amount of money lost is not so large! You've got subjected to a stressor and survived. Therefore, becoming stronger. Courage, experience, growth!"

</comment><comment><USER41> I feel like the author had the right idea to try to form smaller subcommunities first, but there's something predatory about targeting people battling cancer.

</comment><comment><USER16> The part that struck out to me was when OP said "Too many failures and destructive thoughts."

No amount of market research/planning/mvp asap will address that.

</comment><comment><USER42> I don't think anything is wasted here.

Something is learned, on next fail something else could be learned, but third or fourth time big things can happen.

</comment><comment><USER43> It isn't 2006 anymore obviously. If you want to create a viral social website in 2019 you will have to bribe Facebook, Twitter and Google with hundreds of thousands worth of ads within those 10 weeks and you will still never get the same reach you could get for free in 2009. The internet, since around 2014, has stagnated into a few protectionist tech world powers that pretend to be everything else.

<comment><USER44> There's still some cool stuff going on, if you go out of your way to find it... [https://github.com/nehbit/aether](https://github.com/nehbit/aether)

<comment><USER45> What does it do? It's not very clear from the readme.</comment></comment></comment>


How Alexis Ohanian Built a Front Page of the Internet - <AUTHOR> http://www.inc.com/magazine/201206/christine-lagorio/alexis-ohanian-reddit-how-i-did-it.html <comment><USER2> What the front page of the internet looks like today:

      * Image with overlayed snarky text
      * Another image
      * Another image...
      * The Daily Show clip
      * Another image
      * Another image
      * News article about Julian Assange
      * Another image
      * News article about guy doing something strange (which is actually really old)
      * Reddit question thread about Tarantino films
      * Youtube clip
      * "Ask Me Anything" request thread
      * Story on mobile technology
      * Reddit question thread about 'fan theories'
      * Article about astronomy
      * Youtube clip
      * Reddit 'arbitrary gift day' thread
      * Another image
      * Another image
      * Another image
      * Another image
      * Story about finding genetic defects
      * News article about political race
      * Another image
      * Another image

Personally, I think there's something wrong with you if you don't find that list at least a little depressing.

<comment><USER3> You can log in and customize it. The default set of subreddits is bound to be low-quality.

<comment><USER4> I cannot upvote this enough. Thanks.

edit, with bonus explanation! We need to do a better job helping new(and old) redditors realize the thousands of communities they could be joining for a diverse blend of content that interests them. When Steve and I started reddit, we had no categories because it was simple -- and Steve loves simple. Now that we've got scores of vibrant communities discussing links about things ranging from cute animal photos (/r/aww) to philosophy (/r/philosophy) and many things in between, it's up to us to build a more intuitive UX that guides users to them and helps them assemble a personalized front page.

<comment><USER5> Communities are a great start, but I feel like reddit is missing out on central observations about how things get upvoted: Things that you can upvote quickly get upvoted more.

Suppose there are two links of equal quality. (Whatever that means.) One is a photograph that I can digest in 10 seconds of wow. One is an article that I can read in half an hour of wow.

The photograph I upvote immediately because I'm done and move on. The article I read for half an hour, return to my redditing shell shocked and amazed, and upvote.

Now if something has to get a high volume of upvotes quickly to make it to the front page and linger, you're going to see a lot of quick content, and not a lot of slow content, because the click upvote cycle is just faster.

This feels like a social problem, but it's actual a technical problem. Long stuff gets upvotes slower than short stuff, and nothing in the system accounts for that. The social problem emerges from the technical problem.

<comment><USER6> Actually high effort posts don't get upvotes because most redditors don't give a shit.

</comment></comment></comment></comment></comment><comment><USER7> We are doomed to reinvent Usenet until we finally break the cycle and improve upon it.

This has all happened before and will happen again.

<comment><USER8> If you're talking about eternal September and the decline of quality you might want to look at forums with heavy handed moderation or a paying userbase. For example the Something Awful forums have a pretty good signal to noise raito.

<comment><USER9> Metafilter et al

</comment></comment></comment><comment><USER10> As I understood it, it was Steve who built Reddit and Alexis is the guy who did everything else (like draw the logo or act as community manager in the early days).

I remember Alexis giving a talk on exactly this, he emphasized the importance of letting the engineers worry about building things and not all the trivial things that might get in the way of the goal.

I'm not down playing his role or achievement but we shouldn't forget Steve just because he has a smaller public profile.

<comment><USER11> Yeah, he gave a humorous, somewhat tongue-in-cheek speech to aspiring founders (the speech was pretty controversial on Reddit, for obvious reasons). Paraphrasing what he said since I can't remember the exact words, he basically told them to come up with an idea, get it funded, hire some rent-a-coders, and relax on the beach with your profits. His expressed, slightly sarcastic view of founding a web startup was to do what you do as the architect and let the construction crew do what they do.

He actually made many good points, if you can sift through what his many jabs at the programmer types.

<comment><USER4> That was a 100% satirical talk.

</comment></comment></comment><comment><USER12> But has he made it to Bilderberg?

</comment><comment><USER13> This may be blasphemy at HN, but I see so many similarities between digg and reddit. From the power of their service to the complete adoration to their founders.

Doesn't this fawning over Ohanian remind you of Kevin Rose?

</comment><comment><USER14> nice article

</comment><comment><USER15> _> "I want to stay hungry," says Alexis Ohanian. "I really believe my resources are best used to help projects that make the world suck less."_

I hate this kind of over-indulgence.

What "resources"? He built a social news website and had a strike of luck. It's not like the guy is an Einstein or a Tesla. Or that Reddit is something bettering society. It's a glorified internet forum.

Imagine how stupid things like this would sound in other industries:

"I really believe my resources are best used to help projects that make the world suck less" says multi-millionaire inventor of the Post-it / Jelly+Peanut butter combo / facial hair remover...

<comment><USER16> For the longest time, I thought stupidity was the gravest sin. Then I discovered these Hacker News commenters and realized that middling but self- important minds are far more vexing than dumb ones.

<comment><USER17> Snark on HN gets upvoted faster than puns on Reddit.

</comment></comment></comment><comment><USER18> Alexis Ohanian built AOL?

</comment><comment><USER19> Wow my comment got deleted! Didn't know HN has censorship board.</comment>