Dropbox has open-sourced Zulip - <AUTHOR> https://www.zulip.org/ <comment><USER2> We've been using Zulip internally for a couple of years now. We've used IRC and Jabber, looked at Slack and Hipchat and Skype and Lync, and somehow keep coming back to Zulip. It lets us have real, ongoing, and substantive conversations, with a large number of participants, without being overwhelmed.

I sometimes feel like Twitter is actually a better comparison for Zulip than Slack---in Zulip like on Twitter, it's easy to watch and participate in multiple conversations at the same time. Zulip's threading model exists somewhere between Slack's rigid "rooms" model and Twitter's everything-is- public model, so it's much lighter-weight to participate in multiple places at once than on Slack but it's also easier than on Twitter to have the right conversation with the right people without bothering others with something irrelevant to them. And Zulip's threading model makes it much easier to have multiple conversations within the same space without stepping on each others' toes or getting distracted.

Our remote folks rely on it particularly heavily. When Zulip got acquired it was our remote employees and their managers who were showing up outside my cube with pitchforks when I breathed a word of turning it off. It gives folks in other offices or working from home a watercooler and a way to virtually tap a group of coworkers lightly on the shoulder when they need help.

Basically we can't live without it, so I'm super-excited to see it finally open sourced. Thanks for making it happen. :-)

<comment><USER3> I'm sure it's a great communications tool, however since Rice joined Dropbox's board ([http://www.drop-dropbox.com/](http://www.drop-dropbox.com/)) I'd have severe concerns using anything released by Dropbox. Even if it's open source. And while I apologize for a tangential comment, people should be aware of the politics promoted by their software vendors.

Hopefully if it's a truly valuable tool it will be forked and audited.

<comment><USER4> I agree in principal that the politics behind a business matter. But why focus on Dropbox? Rice teaches at Stanford too, why not boycott Stanford and anything coming out of it?

<comment><USER5> There's a big difference in scope and impact between merely teaching somewhere and being on the Board of Directors and running it. It's not equivalent.

<comment><USER6> She was Provost there from '93 to '99, which is a little more than teaching [1]. I think that while her willingness to go with the Bush administration's extremist positions (on torture and surveillance, especially) are a dark mark on her career, Dropbox is worth dropping for wholly different reasons (e.g. technical incompetence [2]) than who is on their board.

1\. "As the chief academic and chief budgetary officer of the University, the Provost is responsible for administering the academic program, including both instruction and research, and for the coordination of the administrative and support functions of the University with its academic purposes." ([https://provost.stanford.edu/](https://provost.stanford.edu/))

2\. [http://www.eweek.com/c/a/Security/Dropbox-Accidentally- Turne...](http://www.eweek.com/c/a/Security/Dropbox-Accidentally-Turned-Off- Passwords-on-File-Storage-Service-655206)

<comment><USER5> To be fair, though, her provost tenure there was before her tenure in the Bush administration, where her most egregious acts took place. You can't blame them retroactively for not knowing what a monster she would reveal herself to be in the future.

<comment><USER7> It isn't about punishing monsters , it is about not trusting our personal data to someone who has professionally committed herself to stealing it.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Slack, Zulip, this feels like we are back in 1999, when the internet was divided by ICQ, AOL Instant Messanger, Windows Live Messanger, and Yahoo Messanger. (Instant/Live was a plus back then). And the only innovation over IRC was a backlog and buddy list. I wonder when the Trillian of Slack+Zulip will come out. I hope Trillian (which still exists) is already working on it.

<comment><USER9> Those types of fragmentation issues never went away, they just changed focus. Whether it is Slack vs. Hipchat vs. Zulip, or WhatsApp vs. iMessage vs. text vs. Hangouts... more options means more (and easier!) ways to contact friends, family, and coworkers, but also means that you have to memorize a "best way to reach me" chart for each individual person.

<comment><USER10> Every week I have to use a Cisco jabber client, Hipchat, Slack, and Hangouts within the same company.

I know it's got less of a "cool" factor because it wasn't invented last week, but I soooo wish everyone would just use IRC. Use irccloud if you want some nice apps and picture embedding.

<comment><USER11> Is it possible to get what Slack provides using IRC? I mean the whole package, not just the text chat. Consider enterprise-friendliness, excellent mobile clients, zero-setup required (no separate keep-you-online relays), really easy integrations, etc.? We are adopting Slack because it's great and I'd have loved to make a case for IRC but I wouldn't know what server to recommend (we don't really want to install it, but we don't want to use a public server), where I can get commercial support, if there's a nice client (like irccloud is) for mobiles - there's a long list, unfortunately.

<comment><USER12> Also in-client searchable archives, media handling, history editing. All require going outside the IRC protocols.

IRC was designed by hackers, for hackers and it shows. Twenty years ago, IRC was my talk destination of choice and I operated a server within a major IRC network; these days my startup uses Slack which I determined to be the "least irritating" of the 21st century options.

I had high hopes for Google Wave but it was sadly stillborn.

<comment><USER13> Much of that can be had with a IRC bot. That doesn't include media handling, but you could do search via 1-on-1 /msg (query) with a bot. Then it'd truly be "in client" search.

Most would probably prefer a web ui, with search -- but recording chat could still be done via a bot.

I wouldn't say you could get _most_ of the _whole_ slack experience with just IRC, and you'd probably have to do some work (if only configuring channels/bots/find a web ui etc).

<comment><USER12> This doesn't resolve the multifarious issues with identity, reliability, scalability, federation, standardisation &c &c that further rule IRC out from being the universal panacea.

<comment><USER14> It doesn't have to be. Go help with IRCv3 - [http://ircv3.net/](http://ircv3.net/). Almost everything that's in Slack and Zulip would just be a capability extension.

<comment><USER12> I stopped reading when the charter said "we are not working on the server protocol". The server protocol is the limiting factor in IRC's architecture.

My interest is in federated, reliable, ad-hoc messaging and IRC's acyclic forwarding graph and lack of any inherent identity model make that impossible.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> "You can install a Zulip server on a system with 2G of RAM, but for production use we recommend a system with 4GB of RAM or more."

Something has gone horribly wrong when a chat server can barely run on 2G.

edit: As a frame of reference, here's what Inspire IRCd needs:

> A network with 3000-4000 locally connected clients and 10000 open channels > experiences a constant 1-4% CPU use with 70MB of RAM use. This won't go up > drastically, but it will go up. Around 40000 local clients means you'll be > expecting some 500MB of RAM. [1]

[1]: [http://www.inspircd.org/wiki/FAQ.html](http://www.inspircd.org/wiki/FAQ.html)

<comment><USER16> See [https://news.ycombinator.com/item?id=10280246](https://news.ycombinator.com/item?id=10280246).

Historically most users were using the single cloud installation at zulip.com, and so having this significant fixed memory overhead wasn't a problem.

I expect someone will do the work the fix this before long; it shouldn't be hard.

<comment><USER15> Thanks for the explanation! I take it that the open sourced zulip is very close to what zulip.com runs, then?

<comment><USER16> Yes, it's in fact exactly what's running on zulip.com.

puppet/zulip_internal in the server repo even has the zulip.com puppet configuration (sans secrets).

</comment></comment></comment></comment><comment><USER17> Smart play. If they can lock people in to their free chat client they can get a stronger foothold into enterprise and servicing smaller start-up/SMB companies. This is what Paul Graham talks about building an e-mail client, just call it a todo list.

This is a storage application front-end. Slack and hipchat charge the money for secure storage, file transfer and data. That is Dropbox's competitive advantage and a great way to break into the market discreetly.

Client looks cool, I will be downloading it.

<comment> eric-hu For others who didn't get the PG reference:

[http://paulgraham.com/ambitious.html](http://paulgraham.com/ambitious.html)

<comment><USER17> Yep. I like his talk at Pycon in 08, where he talks about building a better email client[0] but it is also noted in your link. Thanks, I switched back from mobile and meant to post it.

Incidentally, if anyone has seen his Pycon talk, one of his ideas is "Bring Back the Old More's Law", and if you are curious it is ~2-3 minutes here[1]. I have always been wondering what he means when he says a "sufficiently smart compiler is a byword for impossible" is this an AI reference or a deeper computer science theory that I am missing. Always been really curious.

[0][https://youtu.be/R9ITLdmfdLI?t=7m40s](https://youtu.be/R9ITLdmfdLI?t=7m40s) [1][https://youtu.be/R9ITLdmfdLI?t=21m38s](https://youtu.be/R9ITLdmfdLI?t=21m38s)

<comment><USER18> "Sufficiently Smart Compiler" refers to something which has been hand waved away as a "Simple Matter of Engineering" or an "Exercise for the Reader" as to be impossibly difficult. Compilers are already very smart, usually the sufficient part of the SSC is a tongue in cheek Spock like sufficient. See the failure of Itanium betting that it could produce the SSC to create fast code. It was never built, the performance never matched expectations and it failed.

</comment></comment></comment></comment><comment><USER19> I was just about to try out Mattermost for our company communications. It integrates with a few things including gitlab, but Zulip seems to have a larger number of integration options, which is awesome. Anybody tried both and have thoughts on them?

I still prefer to host my own infrastructure, and I want to be able to archive and categorize a discussion (after it's happened) for searchability, but a couple of our people want an alternative to email and Google Hangouts for communications, and are pushing for Slack or XMPP. I've never been a big chat user and another of our people doesn't do chat at all (so we'd likely need some kind of email gateway for him). I'm not convinced anything exists that answers all these needs, but maybe I'm just way out of the loop.

Also, do any of these integrate with XMPP? Googling is inconclusive, but it seems neither connects to XMPP directly, which is unfortunate. I'd like to see an open standard backing whatever chat we choose.

<comment><USER20> I think HipChat might be the only one backing the XMPP horse still.

A timeline [1].

[1] [https://cdn.sameroom.io/chat-timeline.pdf](https://cdn.sameroom.io/chat- timeline.pdf)

<comment><USER19> HipChat, while providing the XMPP backend, and a self-hosted option, isn't cheap, and doesn't seem to provide the extensibility that an open source option would. But, it's certainly closer to the right thing than Slack (at least, from a surface level examination).

I guess it doesn't even need to be XMPP, specifically. But, some open standard and some level of interoperability would be nice. In googling I came upon matrix.org, which also seems promising, but has the same problem XMPP has of not having great clients (though I also found Kaiwa, which looks like a pretty good XMPP client with Slack-like features). Maybe one of these open source projects will formalize their protocol, and we can all move forward on interop with _that_.

<comment><USER21> [Matrix lead here] The open source clients for both Matrix and XMPP are improving a lot currently. On the Matrix side there's vector.im; on XMPP there's Kaiwa and Conversations.im. If you want to help break the fragmentation and have an open standards based approach please run the clients and help us make them better - it is open source, after all!

<comment><USER22> Something really missing about matrix (at least last time I looked) is a hosted option with my own domain.

I don't want to use the domain you provide, because I'm tied to a provider forever. I don't want to set up my server right now, because it's just too much work to try something that I may end up dumping (because nobody else I know uses it yet).

The overhead to get it is too high, when you're just betting it'll prosper.

<comment><USER21> Yup, agreed. We're planning to provide domain vhosting (ie point the SRV for your domain to matrix.org and you'll get your own server instance) which should help a bit, although doing that for free could start to get uneconomic. We also need to work out a nice way to let users migrate between providers.

<comment><USER22> Free for "2 users per domain" might catch on for those of us who use our own domain for email/im. Not _the_ most common thing in the world, but probably quite common amongst your potential early adopters. All while keeping away domains with hundreds of users that would cripple your servers.

</comment></comment></comment></comment></comment></comment></comment><comment><USER23> No plan9?!?!? I'm disappointed. :/

[https://www.zulip.org/clients.html](https://www.zulip.org/clients.html)

<comment><USER24> Is it me or does the font on that page suck for readability?

<comment><USER25> Yup, it's terrible (Firefox 42 / Windows 8.1).

<comment><USER22> Gathering from what I've seen on the comments, it seems to be a windows- specific issue.

</comment></comment></comment></comment><comment><USER26> Side note: Please STOP using tiny font weights. Text becomes ridiculously hard/painful to read.

There's no reason to use a font-weight of 200 (or anything less than 500) on body text, save that for the headlines.

[http://i.imgur.com/r7a794n.png](http://i.imgur.com/r7a794n.png)

<comment><USER27> There is something wrong with your rendering. What system are you using? It looks to me like the hinting and/or sub-pixel rendering is wrong. I had a lot of problems with this when I moved to Arch Linux because Debian had done some default setup that I needed to figure out in Arch. Here are my xresources for xft if you are using Linux (probably formatted badly, but you can get an idea):

Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintslight Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb Xft.dpi: 96

It will give you a place to start, anyway. Main things you will want to change are the rgba and dpi depending on your monitor. The filter and hintstyle depends on your preference. Just make sure to turn autohinting off.

If you are using something else, then I'm not sure how to fix it, but I can tell you for certain that it is broken ;-)

<comment><USER5> Enough other people (who can read other websites perfectly fine) are complaining about breakage that it's pretty clear this site is doing something wrong. "You had one job ..." applies here. Body text on a webpage should be readable on all platforms.

<comment><USER27> Well, it's up to you if you want horribly mangled text rendering ;-) I won't make a judgement call one way or another on the font weight on the site. I'm just telling you that your font rendering is misconfigured. This is why you can't read that text.

Even for higher font weights, the rendering in your example is atrocious. Compare the sibling post's thicker fonts to yours. Notice how yours are fuzzy on the outside? His are crisp. Now, pick a website with a font you like. Shrink the page down so the characters are really small. Look at the characters closely. Do you see how it looks smeared and how there are pixels of different colours (not just black and gray)? This is the result of the misconfiguration. Good hinting will allow you to shrink the font to a very small size and still have good anti-aliasing. Without playing with it, I don't know if it's just that you have the DPI set wrong, or if you have auto-hinting turned on (which you should never do now that the hinting algorithms are no longer patented), or possibly something else.

If you ever decide to look into it, probably the best keywords to search for is "anti-alias" and "hinting". It seems silly to me to put up with such awful rendering just because you are too stubborn to consider the possibility that you are wrong.

<comment><USER5> Well you're responding to a different person, and my font rendering is fine (and I would fix it if it weren't). I'm just pointing out that if a lot of people are having problems reading a site for whatever reason, the site should probably be doing more testing on different configurations, and not be doing such fancy things with font weights. Another common complaint I have is sites using gray text on darker gray backgrounds, which can turn into an unreadable mess on lower contrast or lower brightness displays (like a mobile phone with the screen brightness set lower to save battery).

And FWIW, I'm on a stock MBP, and I just revisited this site and disabled the font-weight: 300 rule on the body text, and everything became a lot more readable for me (if less "stylish"). I think the site might simply need a slight design tweak for readability.

</comment></comment></comment></comment></comment><comment><USER28> So, if you're going to tool around, and think, "Hey, I've got an Ubuntu/Debian box laying around" \-- you best just follow the repo README advice and do this on a virtual box. The server install scripts have some heavy dependencies (puppet, django), if the "sudo -i" wasn't a clue enough. Also, if you are doing this, /root/zulip/scripts/lib/install's wgets need some "\--no-check- certificate" flags. When I get zulip server stood up I'll post my IP.

<comment><USER16> Yeah I'm hoping that the community will do some work on simplifying this -- our focus on the installation process side was to make there be at least one installation process for the two use cases that works completely automatically.

FWIW at Zulip we usually did our development environment on our laptop not inside a VM; it's not that hard to do, but the nice thing about the Vagrant setup (written as part of the Hack Week project) is that it's for people with no familiarity with the software to get to a running environment.

It should be feasible to make a Debian package for it that plays nicely; as you can see most of the dependencies are already packaged.

Everything scripts/lib/install downloads via https has a valid cert; I suspect the issue may be that we should bundle the verification chain.

I'd love to see notes on whatever issues you encounter in a github issue or sent to the mailing list so we can make things smoother.

</comment></comment><comment><USER29> I haven't yet tried Zulip's threading model, but I can certainly say I'm not pleased with Slack's.

It can be very frustrating to try and trace a conversation backwards in a crowded Slack channel. I haven't used IRC in a while, but at least my client had a feature to toggle highlighting on a back-and-forth conversation, but that wasn't perfect.

</comment><comment><USER30> See also [https://news.ycombinator.com/item?id=10279743](https://news.ycombinator.com/item?id=10279743) and [https://news.ycombinator.com/item?id=10280146](https://news.ycombinator.com/item?id=10280146).

</comment><comment><USER31> My one big question is: does Zulip support push notifications to the next version of the mobile app if you self-host the server?

I'm not exactly sure how that'd be possible, but I wonder if they've managed to figure it out somehow. It's the one big problem with self-hosted chat apps like Rocket.chat and others - APNS and GCM are both centralized, and it's hard to federate them to provide push services for self-hosted instances of open source projects.

<comment><USER16> I think there are two approaches one could take for doing this:

* It seems like one way you could make that possible would be to make it really easy to do white-label builds of the Zulip mobile apps. E.g. the "Zulip for example.com" app. Would be more overhead than is ideal for smaller deployments.

* It should be possible to have APNS/GCM traffic go through a central community-hosted service that dispatches the messages on to a set of configured Zulip servers.

We actually had functionality based on a similar concept for the Zulip desktop app login process, where it would query a service on zulip.com with e.g. "example.com" and that would return the URL of what zulip server hosts example.com, so that users don't need to fill that out in the login process.

For the open source release, we replaced this with in an explicit "what server are you doing prompt" but it would certainly be technically possible to go this route.

<comment><USER31> Hey tabbott, I'd love to chat about this more if you're interested, it's something we've been particularly looking for. My email is email@example.com.

White-label builds of Zulip apps would work, but at least in our case wouldn't be ideal. Having a central community-hosted service would be much better.

<comment><USER16> Sounds good, pinged you off-thread.

</comment></comment></comment></comment><comment><USER32> 2015 The year of the chat clients

<comment><USER33> ?->building facebook clones->building twitter clones->building slack clones->?

This does look like a good product though. Personally I like the style of this more than slack at first glance. Running your own server and being open source are awesome. I can't wait to see what people build on it.

<comment><USER34> Isn't Slack an IRC client with some project management features?

<comment><USER35> No, Slack is an IRC alternative (you can connect to it with an IRC client, but you lose many of the features) with assorted bells and whistles (emoji, adding reactions to posts, easy management of private rooms, etc), a bunch of integrations with other services, and persistent and fully searchable history.

That last one is really the key feature to me.

<comment><USER34> Sorry, I don't mean IRC client as in uses the same protocol, but rather that it primarily does what an IRC client would. I think it's great they've found success though.

</comment></comment></comment></comment></comment><comment><USER36> Any idea why this uses a forked version of Django? I read through docs and skimmed the repo but couldn't find anything that speaks to this...

<comment><USER37> That one is my fault. The main reason is a performance patch that we made to django, which I wasn't as diligent as I should have been in getting merged. The relevant pull request is [https://github.com/django/django/pull/5166](https://github.com/django/django/pull/5166), so it will continue to be forked until I get that merged and we update our django version.

</comment></comment><comment><USER38> For those wondering, it's Apache license.

</comment><comment><USER39> I'm curious on the separate uses of Redis, RabbitMQ and Memcached... it seems these uses could all just use Redis. And have a lower overall memory/cpu footprint to boot.

<comment><USER16> Zulip use RabbitMQ for passing messages where persistence is desired; last I checked Redis didn't support persistent on-disk queues.

Zulip's use of redis right now is basically just for the API rate-limiting; it could be easily removed.

<comment><USER39> Redis does have persistence options... I was just thinking Redis is often used as a more advanced memcached, while also supporting pub/sub channels and acting as a mq broker with a frontend... was just thinking in terms of reducing the requisite services, since rabbitmq requires erlang and it's own services as well as memcached.

[http://redis.io/topics/persistence](http://redis.io/topics/persistence) [http://python-rq.org/](http://python-rq.org/)

<comment><USER40> In fairness, your parent introduced the word "persistence" to this discussion, but I think you're misunderstanding queues if you think the two are interchangeable.

Two things you often want are at-least-once delivery and the ability to queue messages without requiring the consumer to be connected. It requires a fair amount of work to get this to work in Redis. It's not simple configuration.

<comment><USER39> I believe that you can already do this with python-rq, I understand what persistence means in terms of message queue patterns. There are several persistent queue systems that build on top of redis as a backing store... I was mainly questioning the use of 3 different servers, where 1 would be able to handle the workload.

</comment></comment></comment></comment></comment><comment><USER41> Commoditize the complement: [http://www.joelonsoftware.com/articles/StrategyLetterV.html](http://www.joelonsoftware.com/articles/StrategyLetterV.html)

</comment><comment><USER42> "The Zulip desktop app is a C++ application written with the Qt toolkit. It is a lightweight wrapper around a Webkit web view: it loads the zulip webapp as a single page full-screen webpage. The desktop app provides some native integrations: tray icon and Dock support, notifications, and more."

Wouldn't it be better if the multi-platform wrapper for Webkit web view was a separate project? Should be useful, if it doesn't exist already.

<comment><USER37> I believe that Atom Shell/Electron fills that use case today. I think when the Zulip Desktop app was started that Atom shell wasn't available or maybe not quite good enough.

</comment></comment><comment><USER43> Would be really interesting if one could program a secure way for the individually hosted servers to hook up with each other and verify the correctness of one another while at the same time keeping the messages secure (I guess bitcoins come to mind here..). Up until something like this happens I guess centralized social networks are going to rule the roost since the value of networks is almost always in their reach/size.

<comment><USER44> > _Up until something like this happens I guess centralized social networks > are going to rule the roost since the value of networks is almost always in > their reach /size._

This is a group chat. It's value is in being restricted in reach and/or size to the group (team, startup, enterprise) deploying a version of it.

<comment><USER19> There's no benefit to it _only_ being able to reach some small group of people. There is benefit in being able to include only a small group of people in a particular conversation, but that does not require no interoperability, only a concept of groups and permissions and access controls. In fact, it is completely orthogonal to the lack of interop.

<comment><USER44> > _There 's no benefit to it only being able to reach some small group of > people._

If something can just be locked to only talk inside the intranet/VPN it's better from something that can talk to arbitrary people the world over and is only configured not to via its own groups and permissions inside.

<comment><USER19> I thought we were talking about Slack, and several other hosted services, which don't fit the description you've just given, at all. But, for a self- hosted chat service, then yes...that's a benefit.

</comment></comment></comment></comment></comment><comment><USER45> Looks wonderful, but am I the only one that thinks the recommended 4 GB server is a lot?

<comment><USER16> See [https://news.ycombinator.com/item?id=10280246](https://news.ycombinator.com/item?id=10280246).

<comment><USER45> Okay, then given that it's open source, hopefully we'll see a smaller version soon.

<comment><USER2> Just don't make the mistake I did of running with less than 4 GB and then having a flash crowd show up. You really want the RAM for acceptable performance with a reasonable number of concurrent users.

</comment></comment></comment></comment><comment><USER46> Dropbox has great designers, surprised they couldn't have found a few hours to spruce this up in the year and a half since it was acquired :)

<comment><USER47> My thoughts exactly. It's not awful by any stretch of the imagination, but Dropbox has traditionally set itself apart on design.

</comment></comment><comment><USER13> A couple of Zulip questions:

1) Is there any support for federation? At first glance it looks like every installation might have multiple servers, but more for balancing load, than federation?

2) How well is the protocol specified? How hard would it be to par down the requirements to eg: just python and sqlite/lmdb _or_ redis (or zodb...)? Say if one wants to support just ~100 users or so?

<comment><USER16> (1) Not currently, though you can certainly imagine doing it and having it work well; the core data model doesn't change very much over time.

(2) There's a reasonably well-specific API, and you could imagine building an independent implementation that fit that API and feeling good about doing so. But I feel like that would probably be a lot of work and you could probably much more easier achieve whatever your actual goal without paring down the dependencies very much.

E.g. the relatively high minimum recommended RAM for a Zulip server is mostly due to running 20 Python processes for all the queue workers, most of which are idle all the time. If we wanted to decrease the memory requirements, there's a variety of ways to solve that problem directly that are a lot easier than doing a rewrite :).

</comment></comment><comment><USER48> It looks cool that said as usual its "hey I dont like <insert some chat program> so im just going to code my own incompatible one".

In the end im happy with IRC. Its not the greatest but its the one that just works: Its the one everyone who's an engineer in the business knows how to use, bots work, automation work, and irccloud works if you like webuis.

</comment><comment><USER49> Wow. Good luck installing this. I'm not touching it. It needs to do all sorts of hokey things to work. It needs puppet and git to work? You can't just install python packages, it installs them from a ppa. Deployment is a huge mess. It doesn't have to be this hard.

<comment><USER50> Thanks for the feedback. We prioritised getting this into a state where it can run in dev and production based on the existing deployment processes we used in our own environment.

I'm working on a Debian package[1], and we expect to iterate on the deployment process in general.

1: [https://bugs.debian.org/cgi- bin/bugreport.cgi?bug=800052](https://bugs.debian.org/cgi- bin/bugreport.cgi?bug=800052)

</comment></comment><comment><USER51> No mention of Skype? It seems like every one of my business contacts is using Skype to chat.

</comment><comment><USER52> What do Zulip / Slack / Hipchat / IRC / ... people do for screensharing and (group) voice calls?

We'd love the chat improvements, but without screensharing and voice we're stuck on Skype. :(

<comment><USER53> There is also Chromebox for Meetings[1]: [https://www.google.com/work/chrome/devices/for- meetings/](https://www.google.com/work/chrome/devices/for-meetings/)

</comment></comment><comment><USER54> Has anyone switched workplace chat from skype to something else? I don't much like the chat bits in Skype but on the other hand the voice bit is fantastic. I can't imagine having to manage two separate contact lists for chat and voice, so I'm reluctant to switch to something that doesn't have good voice or integrates with something that has (e.g. launch group call from a chat conversation).

</comment><comment><USER55> Nice, it looks like an excellent Django app to study.

<comment><USER16> If you're looking for interesting elements, the REQ framework for doing argument validation I'm pretty happy with and have been thinking would be good to try to extend to be part of Django upstream.

</comment></comment><comment><USER56> Good to see it be open sourced. I'm disappointed there's no XMPP gateway, OTR chat encryption or Gitlab integration however.

<comment><USER16> There's a Git integration that you can use with GitLab or anything else that supports post-receive hooks. But it would be cool if someone contributed a more slick GitLab integration :)

Also there is a beta XMPP gateway at bots/jabber_mirror.py that can mirror traffic with an XMPP setup. It's beta because it's kinda annoying to setup; feel free to reach out on the development list for help if you have issues setting it up.

One note is that the a key feature of Zulip is thread-level topics which aren't really supported by XMPP; see [https://news.ycombinator.com/item?id=10280817](https://news.ycombinator.com/item?id=10280817) for more discussion of this.

<comment><USER56> Ah good to know - thanks for the info.

I just spotted this though: "Currently, the automated Zulip server installation process only supports Ubuntu 14.04 Trusty"

Not at all keen to run Ubuntu, if it was available on CentOS 7 or Debian I'd give it a go but I guess I'll hold off for now.

<comment><USER16> Yeah we run Debian Wheezy in production, so it's definitely possible, just I don't have a nice automated install process handy -- there's a thread about it here:

[https://groups.google.com/forum/#!topic/zulip- devel/8iz25Ad-...](https://groups.google.com/forum/#!topic/zulip- devel/8iz25Ad-Kiw)

</comment></comment></comment></comment><comment><USER57> Wow. Great news. Very good alternative to slack.

</comment><comment><USER58> The 'Or use the web app' link on the frontpage links to the list of desktop clients instead of the web app.

<comment><USER16> Thanks for pointing this out! Will fix.

</comment></comment><comment><USER59> No linux client? That's a deal breaker for us right there... Pity, looks interesting otherwise.

<comment><USER16> There is a Linux client! You can build it from source right now, and prebuilt binaries will be available in a PPA soon.

Prebuilt binaries aren't available quite yet because it's a lot easier to submit to a PPA once you're already open source :)

<comment><USER59> Thanks, will check it out!

</comment></comment></comment><comment><USER60> is this something like slack?

<comment><USER61> yep - very similar but with an emphasis on self hosting.

<comment><USER62> Would nice if it were easier to self-host. Requiring Ubuntu 14.04 with 2GB RAM minimum...not terrible, but could point at a lot of work to be done to broaden the appeal. (Edit: And of course, a thank you to Dropbox for releasing it, this does look like a nice little setup)

<comment><USER16> Zulip doesn't have a strong dependency on Ubuntu 14.04.

It would be less than a day's work to have it support any additional version of Debian or Ubuntu (precise/wheezy would be quite easy since we've run both in production). It's probably also not hard to support something RHEL-based too but that'd be a bit more work.

RAM usage could also be brought down a lot for smaller environments with a bit of work; most of it is the fact that we run a set of like 15 queue processing workers that each import the entire application.

<comment><USER63> >we run a set of like 15 queue processing workers that each import the entire application

Where would one start if they were looking to disable that?

<comment><USER16> Posting this in a few places since it came up N times on this thread: I opened [https://github.com/zulip/zulip/issues/32](https://github.com/zulip/zulip/issues/32) to track improving the worker setup.

If you're interested in helping I'm more than happy to give you a bunch of pointers for how to do it :)

</comment></comment></comment></comment></comment></comment><comment><USER64> Does anyone know if Zulip has support for directory integration? whether it's OpenLDAP or MS AD. Hell, even RADIUS would be ok by me... @@

<comment><USER50> LDAP is supported:

[https://github.com/zulip/zulip/blob/b69c6228af03634061cba29f...](https://github.com/zulip/zulip/blob/b69c6228af03634061cba29f3aa7200c14e7c626/zproject/backends.py#L130)

Also, generic webserver-side REMOTE_USER authentication is supported.

<comment><USER64> thanks~! Going to try it out then =p

</comment></comment></comment><comment><USER65> Why did Dropbox build this? Why didn't they just use Slack? What were the features slack was missing or were there other business reasons?

<comment><USER66> They didn't build it; they acquired the company that built it.

<comment><USER65> Oh, I'm interested in the business decision behind that. For example why didn't they just buy (not acquire) the slack product. What were the reasons to host it in-house and manage it themselves.

<comment><USER67> They got the team behind it, who now work on other parts of Dropobox

<comment><USER65> Right by why maintain the chat app? Why not just buy slack.

<comment><USER65> I mean the slack product!

<comment><USER68> BradRuderman you are conflating two different things that are not necessarily related:

(1) How Dropbox chooses to satisfy internal requirements/demand for a group chat solution

(2) Why/whether Dropbox should have acquired/acqhired the Zulip team

<comment><USER65> Yea my point of the comment was (1). I didn't even know it was an acquisition. I am shutting up to prevent loosing any more minimal reputation.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER69> #googlewave

</comment><comment><USER70> Anyone have recommendations for a free SSL cert provider so that I can test this out?

</comment><comment><USER71> Those bastards!! Got me all excited with the Plan 9 tease. ;(

</comment><comment><USER72> indeed a great move, the part I don't get is that why dropbox acquired it then opensource it? what's the logic behind this...

<comment><USER73> I have the same questions too. Acquihire?

Also, how is zulip compare to slack in term of features, stability, pro/con?

I tried search youtube for any zulip demo/screencast, can't find anything - very strange.

</comment></comment><comment><USER74> No one mentioned gitter.im, weird...

</comment><comment><USER75> Reminds me of [https://euphoria.io](https://euphoria.io)

</comment><comment><USER76> who cares. seriously. group chat is a solved problem.

</comment><comment><USER77> looks like a great codebase, both django and ios!

</comment><comment><USER78> LDAP support?

<comment><USER50> We have an authentication backend for that:

[https://github.com/zulip/zulip/blob/b69c6228af03634061cba29f...](https://github.com/zulip/zulip/blob/b69c6228af03634061cba29f3aa7200c14e7c626/zproject/backends.py#L130)

</comment></comment><comment><USER79> Someone should tell those web developers choosing those fonts that not everybody has a damn Mac.

[https://i.imgur.com/MciirNR.png](https://i.imgur.com/MciirNR.png)

<comment><USER16> It looks a lot better on my Linux laptop! We're investigating.

<comment><USER79> I have found bugs on that installation guide. For example it tells you to install the certificate chain to

/etc/ssl/certs/zulip.combined-chain.crt

But nginx looks for it in

/etc/ssl/certs/zulip-combined-chain.crt

Also during your installation you download this deb file to

/root/zulip/python-django-guardian_1.3-1~zulip4_all.deb

But the script then tries to install it from

/root/python-django-guardian_1.3-1~zulip4_all.deb`

<comment><USER16> Thanks for reporting! Both of those are already fixed in the latest tarball on the website.

</comment></comment></comment></comment><comment><USER80> Is it possible to have secure chats that the server cannot read?

</comment><comment><USER81> cool</comment>


Tips About Google+ Pages - <AUTHOR> https://plus.google.com/100585555255542998765/posts/J4LKQnjj7z1

<comment><USER2> Well. Now we know why they did deprecate the '+' in search a few weeks ago (and some people had indeed guessed right, or had had some inside tips). I wonder if searching for regular people the same way is somewhere on their roadmap.

</comment><comment><USER3> I like the level of control from my end available here. There was some dodgy taxi company in my local area that was just adding heaps and heaps of people into their circles and I had to go through the processes of blocking them and ensuring all the connections were deleted.</comment>


Show HN: We built a tool to create and run viral giveaways - <AUTHOR> http://viralsweep.com/?showhn

<comment><USER2> Nice looking site! I couldn't really tell though, but what are the options for people to signup for the giveaways? I've run some before where you give entries away for commenting, social sharing, tweeting, etc. Does this accomplish something similar or is it email signups only?

<comment><USER3> Thanks! Email entry is the only way to enter (for businesses, collecting leads is most important). Sharing options are on the 2nd page of the giveaway, and we will soon have these incentivized so you can provide additional entries for each.

</comment></comment><comment><USER4> Very cool - an all in one hosted giveaway solution.

Maybe you guys can do a "once off" pricing for someone who wants to try it, though I guess the 14 day trial does that.

Great landing page as well.

<comment><USER3> We took that into consideration and instead of offering a 'once off' plan, we decided to just offer 14 days free.

</comment></comment><comment><USER5> I like this. Where can we see an in action campaign? Does it include tools for incentivizing sharing? i.e. earn more points for every share you make.

<comment><USER3> Co-Founder here. Here is one of our clients active campaigns: <http://www.hmdhome.com/kitchen-designer>

We have sharing built in (on the 2nd page) but it is not incentivized, yet. We're almost done building in the incentives for it (offering extra entries).

<comment><USER6> Not to be negative, and you've likely done some research here, but keep in mind the social network policies on incentivizing sharing and social actions:

FB: "You must not incentivize users to use (or gate content behind the use of) Facebook social channels, or imply that an incentive is directly tied to the use of our channels."

<comment><USER3> I'll look deeper into this, but we are not an app on Facebook, and users would be incentivized with an additional entry by simply 'liking' a page via the 'like' button. Many other companies do this so I don't believe its against their policies, but again, I'll look deeper into it.

<comment><USER6> Playing entirely by the rules tends to put one at a competitive disadvantage in social these days.

"c. You must not incentivize users to Like any Page other than your own site or application, and any incentive you provide must be available to new and existing users who Like your Page."

Not entirely dismissive of it, at least! Likes are ok.</comment></comment></comment></comment></comment>


Household income surged in April despite record unemployment - <AUTHOR> https://www.vox.com/2020/5/29/21274416/household-income-surge-april-cares-act-coronavirus-stimulus <comment><USER2> It's pretty sad that $600-$900 a week is a massive improvement for most people.

With state benefits and $1200 its nearly $45k a year, which is quite a bit more than $15 an hour. Its no wonder people have more money given around 30 million Americans make <$10 an hour. [https://www.pewresearch.org/fact- tank/2014/11/05/making-more...](https://www.pewresearch.org/fact- tank/2014/11/05/making-more-than-minimum-wage-but-less-than-10-10-an-hour/) (older source, but I am sure its in the ball park)

I am curious how long until US congress starts blaming anyone who is unemployed for "being lazy", and stop providing financial assistance, or only provides the bare minimum $7.25 an hour.

<comment><USER3> For those of us who live in high cost of living areas, its easy to forget just how cheap most of the US is: the median mortgage payment in the US is $1100.month (2017 data) [0]. That's 151 minimum wage hours, or about a month of ~40 hour weeks (before taxes, which are very low at that income level). So, a household with two minimum wage earners probably would struggle to afford the median mortgage, but remember half of mortgages are _less_ than that.

This is not me attempting to justify the current minimum wage - I think it should come up. I just think many on this site live in areas where renting a small 1 bedroom apartment is more expensive than $1100/month, or even significantly more than that, much less owning a home.

[0] [https://www.census.gov/programs- surveys/ahs/data/interactive...](https://www.census.gov/programs- surveys/ahs/data/interactive/ahstablecreator.html?s_areas=00000&s_year=2017&s_tablename=TABLE14B&s_bygroup1=19&s_bygroup2=1&s_filtergroup1=2&s_filtergroup2=1&s_show=S)

<comment><USER4> The price of real estate in an area is set pretty exactly to the level of productivity (i.e. what kinds of jobs you can hold) in that area.

So yeah, it all "works out" in that it doesn't matter if the median person is producing $10 or $15 or $2000 worth of value per hour. The median person will always be "barely making it" given what they must spend to have access to jobs in which they can produce that much value. Look at Palo Alto's consideration of housing welfare for people earning $150k - $250k/yr.

Inequality grows as more people max out their individual productive potential, but real estate prices keep rising because the few hyper-productive peoples' ceilings have not been hit yet.

<comment><USER3> > Palo Alto's consideration of housing welfare for people earning $150k - > $250k/yr.

This sounds like an exaggeration, this 2020 article puts "low income" housing at a household income of less than ~$70k: [https://www.paloaltoonline.com/news/2020/01/17/palo-alto- boo...](https://www.paloaltoonline.com/news/2020/01/17/palo-alto-boosts- affordable-housing-project-with-105-million-loan)

My experience in looking into this in the past is that there are maybe tens of units of this sort in development at any given time, orders of magnitude less than the number of people who would qualify. With wait lists easily exceeding 10 years, for all practical purposes these units dont exist.

<comment><USER4> I only remember this from when I was living in Palo Alto: [https://sanfrancisco.cbslocal.com/2016/03/22/250k-per- year-s...](https://sanfrancisco.cbslocal.com/2016/03/22/250k-per-year-salary- could-qualify-for-subsidized-housing-under-new-palo-alto-plan/)

Wasn't able to quickly find what the actual current number is (or if it just varies by development). But yes, obviously qualifying on even $70k would sound insane in most of the country. The point is that higher productivity = higher rent = real lifestyle gains that are nowhere near proportional to real productivity gains.

<comment><USER5> In San Francisco, San Mateo, and in Marin households making $117,000 would actually qualify to live in low-income housing projects

[https://sanfrancisco.cbslocal.com/2018/06/26/hud-117000-low-...](https://sanfrancisco.cbslocal.com/2018/06/26/hud-117000-low- income-san-mateo-san-francisco-marin/)

</comment></comment></comment></comment></comment></comment><comment><USER6> Anecdotally, I run a website for a specific hobby that's monetized by Amazon affiliate program. I saw holiday season-like traffic and revenues in April (before Amazon cut the commission rate).

Was thr strangest thing because I had already assumed that my revenue from Amazon this year would be drastically lower. But so far, I'm up nearly 100% YoY

<comment><USER7> My father runs a Woodcraft franchise, and the past few months have been significantly better than average for him. Since people aren't spending much time and money on activities and dining out, they are investing some of that in hobbies they can do at home instead.

<comment><USER8> To add another data point, I got into hydroponics and indoor gardening since I was sitting at home all day, and I guess a lot of other people did too. Everything is sold out everywhere. Seeds, nutrients, even just potting soil is harder to come by. I tried to order some seed potatoes last week to try a hydroponic grow of them and almost every supplier is completely sold out. I found one seller that had 2/100 of their products in stock, but won't ship until mid-August.

<comment><USER7> Yeah. Another point: my wife fosters kittens for the local animal shelter and almost all of the shelters are just straight up out of adoptable animals. Everyone is getting pets now.

</comment></comment></comment></comment><comment><USER9> > _That's because of government stimulus benefits, both the $1,200 checks that > went out to most people and, even more importantly, the $600-a-week increase > in unemployment insurance benefits_ ... _But the message of this data is > that, on the whole, it worked._

It sort of worked, but unfortunately the dialog has centered on the talking point that "people are making more not working than they could by working."

It's temporarily true for a lot of people suddenly out of work that weren't making a whole lot to begin with.

Now that it's ending soon things are about to get much worse for everyone.

</comment><comment><USER10> Note this was reported on May 29, 2020 for data in the April calendar month.

It's likely that a good proportion of households got their one-time $1200 federal check in the April timeframe. I'm more interested to see how much of a cliff happened after April.</comment>


Speeding up similarity search in recommender systems using FAISS - <AUTHOR> https://caboom.ai/blog/speeding-up-similarity-search-in-recommender-systems-using-faiss-basics-part-i <comment><USER2> Excellent blog</comment>


How Game Theory Solved a Religious Mystery - <AUTHOR> http://mindyourdecisions.com/blog/2008/06/10/how-game-theory-solved-a-religious-mystery/

<comment><USER2> A neat twist to the standard pro-rata division we see a lot in bankruptcies.

What I like best is this method penalizes the creditor for extending too much credit. Note that the ones who are hurt most by the divide-contested-amount method are the creditors who over-estimated the debtors assets, while the creditors lending smaller amounts get a small bonus over pro-rata.

Edit: I think the (estate_size == 150) case sucks for the 200 and 300 creditors, though, because they correctly believed the estate would be worth more than 100. It is "pairwise-consistent" as the article defines it.

<comment><USER3> What about the situations where the 300 or 200 lender made the loans first though?

<comment><USER4> A lending contract can specify that all subsequent loans be subordinate, so the lender who lent first had the option of making such a specification.

</comment></comment></comment><comment><USER5> Here's the discussion from the last time this was submitted:

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

</comment><comment><USER6> Poker players would instantly recognize the similarity of the money splitting problem to negotiating a deal at the final table of a poker tournament (say final 2, 3, 4). It isn't always about dividing the payouts proportional to size of your stack and there are human factors involved.

</comment><comment><USER7> Great article, but I couldn't help thinking the whole time that while game theory certainly and apparently can be used to describe the split of the estate, so could simple pattern-finding: the contested sum(s) is(/are) split evenly, and the uncontested amount (if any) is given to the one owed the most money.

But perhaps game theory makes the pattern more evident, Regardless, it was a good read.

</comment><comment><USER8> This is a pretty lame 'religious mystery' in my view. There doesn't seem to be any real wisdom in the method of splitting the debt and the explanation seems fairly straight forward. It isn't even new. Why people find this interesting is beyond me. What's next 'A numerical analyses of the Book of Revelations and Daniel'?

<comment><USER9> Even though the Talmud is a religious document, the discussions in it cover a wide range of topics, including theology, ritual law, civil law (which, for observant Jews, _is_ religious), medicine, demonology, funny stories about what happened when Rabbi So-and-So got drunk, etc., etc. It's like fifth- century Usenet.</comment></comment>


Startup Therapy - <AUTHOR> http://blog.asmartbear.com/startup-business-plan.html

<comment><AUTHOR> I've found these questions pretty helpful. Anyone interested in building a therapy chat bot that helps entrepreneurs using those same questions?

<comment><USER2> brb

</comment></comment><comment><USER2> An oldie but a goodie.</comment>


Ask HN: How to Progress for Seasoned Professionals? - <AUTHOR> I'm 35 years old and work at one of the big tech companies as a security professional, focusing on penetration testing, security research and some consulting. I've done this now for over 10 years and noticed myself contemplating more and more how to progress from here.
I do have a bachelor's and master's degree, numerous certifications (CISSP, GPEN, GXPN, OSCP, OSCE, etc.) and 50+ CVE's in common software products. My yearly income after taxes is around 150k USD.
Since last year or so I feel at quite a loss regarding where I am at in my career. I very much enjoy technical work and don't want to switch into a pure management position. One of the options I was thinking about was creating my own small company, but I am not sure if I like dealing directly with customers that much. We are also expecting a child, so I think it might be a high risk, since I don't have many direct leads for potential customers to get enough work and cover our expenses. Similarly, I am not even sure if it would make a big difference, since I'd be most probably doing the same kind of work that I am currently doing. Previously, I have worked and lived also in Europe and Asia, which was interesting to get exposed to different cultures, people and so on, but in terms of work it's quite similar everywhere.
I recognize that the majority of HN users are probably software engineers, but I think similar constraints apply. Curious what others are doing do "progress" in their career that already have a lot of experience and if anyone has any specific advice or recommendations for me? <comment><USER2> I vouched you, so don't start spamming; sorry I can't help with the career question, I'm a developer who also doesn't really know what I want to do from here.</comment>


Ask HN: Is C++ still worth learning? - <AUTHOR> well, in contrast to the recently submitted Ask HN question about Java. I'd be interested to know how HN thinks about C++ <comment><USER3> Yes if any of the following are true:

1\. You do any desktop programming. You will meet c++ along the line somewhere for certain, be it some win32 abstraction, Qt, Wx etc. I'm ignoring apple here for ref.

2\. If you're writing _high performance_ software (scientific computing, gaming, trading etc).

I can't really see many other use cases that can't be solved either via C or a high level language easily.

To be honest I really was indifferent about C++ for years but C++11 seems pretty good so far. I can see it creeping in places where JVM/CLR are being pushed a bit hard and in the systems programming space, but on the basis that some people like myself are still maintaining oooold c++ code, I can't see that being that soon.

<comment><USER4> _If you 're writing high performance software_

That sounds like a red herring. Can C++ be easily compiled for heterogeneous architectures and distributed systems? Does it support massive concurrency in the Erlang/Go style? Is it easily and efficiently vectorizable the way that APL was once? Somehow I've always felt that C++ can do "anything" at the cost of "being equally bad at everything". Regarding C++11, I really like Rob Pike's comment on how the creators of C++ seem to think that the problem of pre-C++11-C++ was that "it apparently didn't have enough features".

<comment><USER5> Go's style is not the same thing as Erlang's style. And the answer is yes, if you're talking about Go's style. Your line about C++ not having enough features is cute-sounding but actually it's anti-intellectualism under the religion of minimalism.

<comment><USER4> _Your line about C++ not having enough features is cute-sounding but actually it 's anti-intellectualism under the religion of minimalism._

First of all, it's not my line, it's Rob Pike's line. Second, upon seeing how the C++ people intend to fix deficiencies of C++ by throwing even more features at it, it's very difficult to see it in any other way. Third, the only "anti-intellectualism" I see here is named C++: It's actually symptomatic of certain organizations that instead of trying to see the big picture and really fix things in a systematic way, they "anti-intellectually" hack and tweak and tinker and micro-optimize. For example, IBM has been doing that in the 1960s with their HW architectures before they got their shit mostly together, which is why the ACS project failed, only for it to be rediscovered forty years later, with modern CPUs _finally_ (!) utilizing these ancient but very well working techniques, such as superscalar out-of-order design that will celebrate its fiftieth birthday in a few years. Now, the same breed of people who ditched ACS in the 1960s are apparently in charge of design of mainstream languages. I wonder if we'll survive the next decades in good mental health before enough people realize the same thing again, ditch that crap and start all over again.

<comment><USER5> So. If C++11 is so bad, how would you make a language backwards-compatible with C++ that solved many of its problems?

<comment><USER6> I wouldn't. You can't build a solid structure on a broken foundation, and C++ is most definitely broken. Instead you throw it away and start fresh. The problem with C++ is it tried to combine the power of C with more advanced features while still maintaining all the low level access that C gives you. The problem with that is that it undermines all the advanced features by either allowing you to easily break them in odd ways through low level features, or else by leaking low level details all over your high level abstractions and requiring you to keep track of all those details the abstractions were meant to hide in the first place. If you want to see how to do a "low level" language better look at the approach that Rust, D and to a lesser extent Go, have taken. They borrowed from C where it made sense, and they threw away what didn't fit well. C++ kept not only the good, but the bad and ugly as well.

<comment><USER7> This digression doesn't really answer the question of the OP, whether C++ is worth learning. I don't share your opinion, but even if I did, the answer would be a strong yes. A much larger quantity of important problems are being solved _today_ with C++ than, say, Go. For employability, it's obviously worth learning (unless you're just doing web stuff). Even if you believe it's broken, it's worth learning to understand _why_ it may be broken and to about those "mistakes" in the future.

<comment><USER6> OK, fine, C++ is worth learning to learn what not to do, BUT, only after you've learned every other language out there. It's a waste of time to learn it before other languages because you won't have the background necessary to really appreciate how bad the language is otherwise. You might actually think it's a good language and never bother learning all the other better languages out there. Also, anything that reduces the supply of C++ programmers available for businesses to hire is probably a good thing. Fewer C++ programmers means fewer C++ programs and fewer C++ libraries, so hopefully they'll finally start writing frameworks in something other than C++.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> C++11 is a vast improvement, for me, over earlier versions of the language. I still think it's a mess of a language, and the usual caveat applies (no one knows all of C++ well -- know what subset you're using and be aware of what you don't know), but it can't be dismissed.

Should you learn it? There's still a ton of software written in it and it has one of the best compiler ecosystems; for many applications it's one of the only practical options for a production system. Every programmer should know enough C++ to understand templates, RAII, operator overloading, things like that, if only to compare with approaches in other languages.

Should you build new systems in it? I would avoid it if possible, but once you learn the language, hey, maybe you'll love it. And if so, there's no shortage of C++ programmers to work with you.

</comment><comment><USER9> C++ makes you able to write simple tasks in a complicated ways, thus a great asset to the global hidden mission of software industry which is to write code that will seem brilliant but fail in a devilish way. So go for it.

"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies." — C.A.R. Hoare, The 1980 ACM Turing Award Lecture

You can also learn more than one langage because they fits domain of excellencies you want to master:

\- C low level programming (zmq switched from c++ to C because of error handling) \- high level portable language that can bind on libraries (python to avoid hispter mac users using ruby) ; \- something for concurrency (Go); \- R-project for data treatment; \- vanilla JS because mixing LISP difficulties with braces syntax is insanely cool; \- PHP and Perl to feel with your guts what a wrong language is (hint: it is all about maintainability); \- ASM 68000 because motorola 68000 is the most beautiful mix between a good design and implementation and it will make you truly able to build a consistent mental map of what a computer really is; \- Tk because 25 years it still is the most portable way of doing GUI and has inspired everyone; \- Forth because it is fun to use postscript as a real programming language; ....

<comment><USER5> Have you _looked_ at zmq? It should be pretty clear that the developer of zmq is not somebody you should be taking any cues from.

<comment><USER9> for now I have a system that has been successfully using it for weeks, so I pretty think it works.

And yes I have watched the code and found a bug. The clock used in python is mononotonic but may change its frequency and the the time structure is wrong on 64bits architecture there is a cast to signed long long where it should be unsigned long long.

So if I can find stuff easily and see bugs, it means to me the code is well architectured and readable.

<comment><USER5> I know somebody who's dealt with it for a lot more than weeks, and according to him and from what he's shown me the code inside of it and the bugs it has are pretty laughable.

<comment><USER9> The real ugly truth is all of our code (mine included) is pretty laughable and bugged.

But I made no actual asynchronuous messaging system that actually can send messages with a 99.999% reliability, and hardly no noticeable memory leaks. So since I haven't coded any better, given that it works and suits my need, I use it.

And since my code is almost correct (okay, there are places where I wish to use an obfuscator to hide the hideous), replacing zmq with something else, should be quite easy.

</comment></comment></comment></comment></comment><comment><USER10> I wouldn't learn it unless you're interested in learning new languages already or suspect you'll wind up at a job where it's necessary. If the former, that's a long road and my suggestion there would be to first learn languages that will make you think about programming differently and second learn languages that make programming _fun_ \-- C++ is neither, though perhaps for some people they start thinking "I don't want to program anymore", and I guess others who are exposed to C++11's new features for the first time in any language can get excited about them...

If you are going to learn it, learn it in full. Understanding most of [http://yosefk.com/c++fqa/index.html](http://yosefk.com/c++fqa/index.html) ought to be a requirement to put "C++" as a separate item from "C" on your resume; people who put "C/C++" on their resume make me more likely to believe they only know C++ as a kind of super-set of C and they will likely program C++ code in a very Cish style, also they will likely make more mistakes caused by a faulty assumption that C++ does the same thing C does -- like a keyword means the same in C++ as it does in C.

A lot of places have sane requirements and restrictions on what you can do in your C++ programs there. e.g. [http://google- styleguide.googlecode.com/svn/trunk/cppguide.x...](http://google- styleguide.googlecode.com/svn/trunk/cppguide.xml) But to understand the decisions you probably need to learn about the thing being discussed... And then learn why other programmers want the thing to be enforced or restricted so much. A lot of times it's just so even C++ programmers whose C++ knowledge is summarized as "C with classes!" can still be effective programmers.

I wouldn't suggest learning C++11 specifically. Learn C++98, then learn what new features C++11 has on top of that (there aren't that many).

<comment> alok-g >> "C/C++" on their resume make me more likely to believe they only know C++ as a kind of super-set of C and they will likely program C++ code in a very Cish style

Could "C/C++" on the resume also not mean they see C as a subset of C++, they program C++ code in C++ish style, but also feel comfortable with C? (I understand C is not a true subset anymore, but it seems close enough to allow me to do programming in C every once-in-a-while I need to.)

<comment><USER10> Sure, it could mean that... It could also mean the person was just lazy and is actually a master of both. Actually I think the pessimistic interpretation is that they know one in terms of the other (typically whichever came first in their lives) and know neither very well... I just tend to run into more people who fall into the "pretty good with C programming and thinking style and use C++ mostly as C with classes" bucket than the "pretty good with C++ and can confidently(!?) use C" bucket. For a shaky analogy, C is to C++ as freshman algebra is to freshman calculus...

</comment></comment></comment><comment><USER11> Learning a language is all about your goals. Do you want to work in a domain where execution time is the most important factor, even more than developer time? Games, finance, system software, etc often use C++ because speed and control over memory usage far outweighs the benefits of faster development time in other languages.

<comment><AUTHOR> My main interest lies in game development. To be a little more precise in game engine development. I'm studying computer science at the moment and I plan to work towards such a job after graduation.

And afaik most game engines are written in C++ because of performance and memory management.

<comment><USER12> > And afaik most game engines are written in C++

So why the heck are you asking the question ?

you already know the answer.

<comment><USER13> I don't understand why OP is being heckled here. Obviously, the post wasn't a survey. The intent is to raise discussion and collect opinions.

</comment></comment></comment></comment><comment><USER14> No; learn C, because there is a lot of C code out there, and then learn a high-level language like Haskell, Lisp, OCaml or Python. C++ is only worth knowing if you need to maintain legacy code; if you are writing new code you should steer clear of it.

<comment><USER15> Yeah, I'm sure that Clang, the new compiler that everybody is so fond of, is "legacy code".

Oh yeah, let's put Chromium, Firefox, and all of KDE on that list too.

As a person who is proficient in both C and C++, I find this constant war ridiculous. _Neither_ languages are obsolete ok? Which one is best for you depends on the circumstances. Stop speaking in absolutes.

<comment><USER16> I know people argue that it's not exactly the same, but isn't standards- compliant C accepted in C++ anyways? Why make the distinction if you're going to use a subset anyways.

<comment><USER10> Incompatibilities Between ISO C and ISO C++: [http://david.tribble.com/text/cdiffs.htm](http://david.tribble.com/text/cdiffs.htm)

</comment></comment></comment></comment><comment><USER17> Honestly, for me I get way more use out of a mix of C and Java. If I'm writing something complex enough that C++ is helpfully, usually I don't have as an extreme performance restraint. When I do have serious restraints, C has never done me wrong. Usually when I do something in C++ I look back at it and think it would have been easier in either C or a higher level language.

With this said, that's just me and the way the world has worked for me. There are tons of applications were C++ is the right answer and C could never fill the bill. If you just want to learn native and low level programming, learn C instead. Its simpler, easier to learn and has more use cases(Linux kernel, some OS-less micro-controllers)

So to answer your question, "ehhh... sure. maybe?"

</comment><comment><USER18> What languages do you already know? What problem are you trying to solve?

I would learn C++ if you need to know it to get your job done.

Like others have said, C++ is a complex language. Some people don't like it as a "language", some people like all the features it has. But at the end of the day, it is complex to learn and understand.

Also you have to think about a lot when programming in C++. You have to think about objects in terms of their life cycle. Compared to a garbage collected language, this accounts for mental overhead that could be applied elsewhere.

A couple of other negatives about C++:

1) Its harder to interface than C.

2) It has many different flavors that vary depending on what platform you are on.

3) Up until C++11 it didn't have built-in regex.

A couple of positive things about C++ and learning C++:

1) The STL is great, and has patterns that you can apply to other languages.

2) Generic programming to write re-usable code in C++ can be quite fun, and you can learn how the compiler can help you during compile time (+).

3) Learning OOP in C++ can be an artform, and can be fun. There is a lot of bad C++ out there, but there is some very elegant C++ out there as well.

4) You will learn that C++ is not C. You will also learn to chuckle at anyone that writes "C/C++". (Hint, if they write this, then they do not know C++)

(+) Note on this point: Some people from the more dynamic languages might poo poo this as not needed, and that in their favorite language you don't need to define types. This is a mixed bag, on one side, that is true and can let good programmers work faster. However, they either have to not test, or perform all tests at run-time. A compiler and linker can tell you much faster if you have done something stupid like call a method that doesn't exist. In a dynamic language, you have to write tests and hope you happened to test that branch of code where you made the mistake.

</comment><comment><USER19> C++ is very much alive and kicking. "Worth learning" \- is there an end goal you have in mind?

</comment><comment><USER20> As the others are saying, it very much depends on what you're trying to accomplish. I'll start off by saying that C is a much, much simpler language than C++ and unless you're looking to make a serious investment it might be better to just learn C, even though C++ adds a lot of genuinely useful stuff.

You might consider learning C{,++} if:

If you need to interface with hardware at a very low level, such as when you are programming a microcontroller or writing a device driver.

You have a reasonably small application and you need the best performance possible. Don't use them because "C++ is fast". C++ is fairly fast by default, but so are many other languages where it's harder to shoot your foot off. Use C or C++ because of the greater scope for optimization in memory layout and other sorts of painstaking optimizations.

Learn it because you want to create a library that can be used by many other different languages. Pretty much any language has some method of calling a C function, it's pretty simple. Making calls between languages that have their own garbage collectors is more complicated.

Learn it to teach yourself about how your computer works. you could also use assembly language here, but C works well enough. Getting a sense for how other languages work under the covers can help you understand performance trade offs in other languages better.

</comment><comment><USER12> is COBOL still worth learning ? without context , your question is meaningless. I know engineers that make 6 figures salaries maintaining COBOL systems. So it is worth for them and they dont care about hype.

give some context.

"Is C++ still worth learning for this or that kind of job or field?" is the question you should have asked.

Now i would say most programming languages are still built on either C or C++, and a lot of them allow C or C++ extensions,even hipster's nodejs. You cant be an expert on these solutions/languages without knowing the lower level.

</comment><comment><USER21> Obviously he's a little biased but Bjarne Stroustrup recently shared some insights about C++ that might be useful in this discussion: [http://electronicdesign.com/dev-tools/interview-bjarne- strou...](http://electronicdesign.com/dev-tools/interview-bjarne-stroustrup- discusses-c)

<comment><USER14> I think this sentence embodies the biggest problem with C++:

"...abstraction mechanisms that allows programmers to express ideas beyond what I can imagine with no overhead compared to hand-crafted code."

This is superficially similar to the Lisp community's "sufficiently advanced compiler," but in C++ it really means that high-level features are thoroughly undermined by low-level concerns (as opposed to just being slow until better compilers come along). Other languages seem to get high-level abstractions right, in the sense of exchanging a constant-factor loss in performance for a large gain in programmer productivity.

<comment><USER5> That's a weird thing to say, because C++ has better high-level abstraction facilities than any other mainstream language today.

<comment><USER22> I don't understand your point. C++ does not have the ability to manipulate syntax trees as data the way Lisp does, for example, making it strictly less "powerful" in terms of abstraction. (Templates, though turing complete, aren't what I mean here)

<comment><USER5> Lisp isn't a mainstream language.

Edit: Also, I don't know much about Lisp, despite being a bit of a Scheme weenie in the past. When I try to think about whether I'd like to implement some hypothetical project in Lisp or C++, the most important difference between them seems to be garbage collection. It's more realistic to ask whether I'd rather use Lisp vs. Java, or Lisp vs. Scala, or Lisp vs. C# or Python or Ruby, than C++, because garbage collection is a big issue that makes it difficult to compare them by some notion of how it would feel to use the languages.

I have a hard time evaluating whether macros are really that useful. Whenever I see people give examples of using macros, usually it's just superfluous, something that could be done a bit more verbosely without macros in a language like Python or Ruby, or done a bit superiorly in something like Haskell. And if it were a situation where macros were very useful, all I can think then is (now let's pull some anti-macro tropes out of the hat!) how debuggable is this? And would it _really_ be that hard to solve the same problem in one of the other languages?

</comment></comment></comment></comment></comment><comment><USER23> I wouldn't say that you ever "learn" c++, it's more a lifelong activity of understanding the intricate details various disjoint concepts and how they interact.

I would say that it's a good thing to at least keep an eye on and have some understanding of. If not for anything useful then you can at least experiment with [http://libcinder.org/](http://libcinder.org/). I do also find reading the c++ standards committee articles a worthwhile activity just to further my understanding of how things like lambda expressions can be implemented and their impact on other concepts.

</comment><comment><USER24> Use C++ if you're interested in writing high level abstractions that _resonate_ with the underlying hardware.

Assembly and C map very closely to actual hardware, but don't have a very high abstraction capability.

Haskell, Erlang, Python, LISP, etc. have abstractions up the wazoo, but there's big box labelled "magic" between what you write, and what gets run. That's because it's easy to construct systems which have nice theoretical properties, but are completely incongruent with shipping chips, requiring a black box in the middle that is doing who-knows-what kinds of translations, continuously.

Intel will never ship a CPU which natively executes functional code, for example, because fundamentally computation is an imperative process. You have information (entropy) and you want to turn it into a useful result; that involves moving bits, comparing them, performing simple computations on them, and iterating. That's what chips do, and that's what C++ does too--the fundamentals--but with more abstractive power than C when it is needed.

If you think that being both "in tune" with the hardware and achieving high abstraction in a single language is difficult, you're right--and C++ is difficult to learn and use. There is no free lunch there. But the results speak for themselves. Almost every single piece of software I use on a daily basis is written in C++.

</comment><comment><USER25> C++ is large and has lots of history and legacy. There isn't anything you can do in C that can't be done better in C++.

I enjoy C++, and learned as the language right after Visual Basic 6 at around 2008.

You can easily imagine how things "could" be implemented on top of C in C++.

The most difficult thing about C++ is passing over all the negativity hyped by the "other" camps, and then learning from the right people (who will tell you what things have gone wrong and have their own philosophies of using the language). The new standards of the language feel like they're more scripting than erecting object oriented cathedrals. I enjoy reading topcoder submisssions and editorials on their SRM problems. I believe it can give a perspective on how C++ can be used in a terse and narrow domain.

TL;DR: At any place where C makes sense, C++ has a lot to be offered to be ignored. Try to consider the source when checking criticism. Find legitimate examples of C++ from OSS and topcoder SRM submissions.

</comment><comment><USER26> There are applications today where C++ is still the best choice. For high complexity, performance critical applications (as csmuk mentions - <USER2> engines, trading, network software, but also high performance compilers and VMs) no other language has quite the mix of performance, available abstractions, and maturity. The question is then, if these you're into writing these types of applications.

If you're not, then IMO, C++ is not worth learning. In the words of Alan Perlis: "A language that doesn't affect the way you think about programming, is not worth knowing" The main contributions of C++ is implementing abstractions well known in other languages - OO, generic programming - in a C-like syntax. C++ is not the best language to learn to understand these concepts - there is too much low level complexity to deal with.

But if you're looking for language with the performance of C and with available high level abstractions, C++ is still the best choice today.

</comment><comment><USER27> Yes.

C++ is one of the few (maybe the only) languages that gives you enough high- level features to be productive, but doesn't do so at the expensive of ruthless runtime efficiency. If you need to squeeze every ounce of juice out of a machine, but still require the ability to create good abstractions, C++ is for you.

</comment><comment><USER28> It certainly is for the following reasons. 1) Offers high-level abstractions at high-level performance 2) Does not restrict you to 1 paradigm. 3) Available from multiple vendors on multiple platforms all backed by an ISO standard 4) You used a program written in C++ to write this post

</comment><comment><USER29> Things to consider about C++

-C++ is very large language and the standards committee works hard to make it larger every day. Every organization makes use of a subset of C++ but likely a different subset. C and Java are much smaller languages.

As John Carmack says "Any abstraction that compiler will accept will eventually make it into a sufficiently large codebase"

-Familiarity with an organization/codebase specific subset of C++ is necessary for a number of significant career paths in software development. Chromium and related technologies, Google's core infrastructure, Java runtime engines, game engine developement etc.

I fundamentally don't think you should try to "Learn C++". If you are interested in career path the has C++ as a prerequisite. Learn the C++ style of a similar OSS project.

</comment><comment><USER30> Your question is probably driven by the fact there are a lot of languages which allow you a greater level of abstraction.

The answer is "it depends" (of course!). If you plan to hack into some kernel source code, device drivers, legacy software, or high performance softwares, probably it's worthy.

My advice is: once you learned one language for each type (functional, procedural, object oriented) and a scripting language (python, perl, ruby, ...), then get a project and learn while hacking.

<comment><USER31> Kernels and device drivers are written in C, not C++.

<comment><USER15> Depends on the kernel. For example a large part of the Windows kernel is written in C++.

<comment><USER8> At least from what I can gather from Pascal's Showstopper (the book on the development of Windows NT), that was against Dave Cutler's wishes, and indeed the main kernel was originally just C; that books documents some of the hassles they have as a consequence of using C++. (And indeed, it strikes me as bizarre that one would use C++ for an OS kernel.)

</comment></comment></comment></comment><comment><USER32> Just saying: if you know C and Java (as you mentioned), then C++ is just a matter of syntax. It won't introduce any new concept nor will make you a better programmer. I wouldn't really consider learning it unless you _have_ to use it in any specific context or project. There are so many new, different and more innovative languages out there on which i'd focus.

<comment><USER33> _It won 't introduce any new concept nor will make you a better programmer._

Only someone who never used templates or did template metaprogramming would state such a thing ;). C and Java -> C++ is not just a matter of syntax.

</comment></comment><comment><USER5> Just look at the blatherized aphorisms made by anti-C++ people here and then ask whose opinions are worth listening to.

</comment><comment><USER34> I think C++ is still considered the "industry standard" in games programming, for whatever that is worth.

</comment><comment><USER35> For myself[1], I will be going back and picking up modern C++. I have some stuff I want to write that I think it would be a good fit.

1) I currently do Obj-C (apps) and Perl (scripting & tools)

</comment><comment><USER36> worth is based on expected outcome and necessary investment ==> different for everyone.

However, for a quick & dirty answer: no, go with C (much more universal).

On another note, if you wonder if you should do, seems like you don't have a reason to... Why are you doing it?

</comment><comment><USER37> Is Latin still worth learning?

</comment><comment><USER38> C++ is still worth learning. But if you can - try Go instead. Both solve more or less the same problems, but, Go has the advantage of being designed more recently - and so it has lesser cruft, well designed features, and its easier to learn and master.

</comment><comment><USER39> Learn it just for the fun of it!

</comment><comment><USER40> Very short and full answer: Yes.

</comment><comment><USER41> No. Its not. Its usage is declining.

</comment><comment><USER42> C++? Yes if you want to work in the games industry or at Google.

In general, I'd say no. The niche it fills (high-level features bolted on to a low-level language) is not that useful and it doesn't fill it well.

C, on the other hand, is worth learning.

<comment><USER5> Then explain why people familiar with C++ choose to use it instead of crippling themselves by limiting themselves to C.

<comment><USER8> That's not universally true. Some people can't give up C++'s sugar once they've become addicted to it, but you also have people like Martin Sustrik abandoning C++ for C. (I would say, moreso, people recognizing where C++ can provide a real benefit and those places where it's unnecessary.)

<comment><USER5> C++'s features aren't sugar and using powerful tools is not an addiction.

</comment></comment></comment></comment><comment><USER43> If you ask that, then no, it is not worth learning for you.</comment>


Ask HN: What's the right way to do forums? - <AUTHOR>

Open ended question. What's the "right" way to both conceptualize and implement discussion forums for the community around a product or service?
Forums stem from a desire to facilitate arbitrary and semi-structured user<->user conversations or user<->service owner conversations, possibly with or without moderation.
Is there something better suited to this desire than "forum software" (regardless of whether it does or does not already exist)? I know Get Satisfaction et all are a new approach to user<->service owner, but they really shut out the user<->user community aspect. I'm not aware of any new modalities of user<->user discussions.
If forums are still the best tool we have for this purpose, what are some of the latest and greatest implementations of forums? I like Vanilla quite a bit but their pricing seems a bit steep. phpBB and its ilk seem very dated and bloated. Something like lamernews could be interesting but there are no topical areas, just a pile of unsortable threads of discussion.
Reddit fits in here somehow too I suppose, although a service owner may want to "own" the users rather than outsourcing discussions to some subreddit.
Thoughts? <comment><USER2> One of the things I've seen more than a few times is a failure to gain critical momentum. I have an untested hypothesis that this is due to attempting to start with multiple forums rather than a single 'general' forum. It's my belief that forcing this choice, and not providing a single page showing what's new in the forum lessens the likelihood of engagement with your users. Once your community gathers momentum, it should be easy to add new forums as 'general' starts getting busy. Having a problem with scaling is a good problem to have ;)

</comment><comment><USER3> Private news-servers (with strict community standards and moderation or after- moderation) is one method; although it's pretty tricky explaining it to most of your users and it's not fun to set up.

<comment><AUTHOR> Seems way too high friction. In my head I was questioning even requiring users to register w/ email addresses.

</comment></comment><comment><USER4> What is your (assumed) objection to using forum software?

A lot of the well-known ones out there are kind of crap (phpBB, vBulletin) but there are some nice offerings out there these days like bbPress[1] or Vanilla[2] that are open source and easy to set up, host and manage.

[1] <http://bbpress.org/> [2] <http://vanillaforums.org/>

<comment><USER5> bbPress is pretty horrific. Vanilla is meh at best.

vBulletin is one of the better, well featured forums and scales well. I'm confused by your statments, do you actually use forums?

</comment></comment><comment><USER6> This is too weird. I was typing up a similar question today, wondering if structure forums are still superior in this age of Reddit-style websites.

<comment><AUTHOR> I'm not a big reddit user, but I don't see how people keep up with the massive sprawl of the comment sections. I mean once you click into a story on Reddit (or HN, LN, etc), it seems like a pretty standard "threaded" affair which makes finding the latest bits of the conversation hard. And the nature of reddit/HN/LN etc make it hard for new topics to get traction, many people may never see new topics if the most popular ones float to the top.

<comment><USER5> Not to mention that discussion basically dies two days after any story.

Forums allow sophisticated discussions to occur for longer than 48 hours. My biggest complaint with HN is that discussions always terminate themselves shortly after the article moves from the frontpage. Its just too difficult to track new comments that aren't directly replied to your own.

<comment><USER7> Agreed. For serious, long-term discussions, forums work a lot better than sites like reddit. As soon as a submission on reddit gets more than a few hundred comments, it really is hard to get everything.

I'm a big fan of serious hobby forums. Places like HardForum or the late TheGreenButton have lots of in-depth, long-standing, technical discussions. Discussions that just wouldn't be feasible on another software platform.

<comment><USER6> Upvote to all of you. I hadn't realized this until today when I returned to this story and noticed that hardly anyone had responded to it. The story (and its comments) have basically died since it is off the "new" and "frontpage" sections of the site. However, if the story could somehow be found in a section on the HN site, I wonder if it would get more response and show some life. Just a thought...

<comment><USER5> For what its worth, I built a greasemonkey script to help find new comments in threads:

<https://github.com/polyfractal/HNHalfLife></comment></comment></comment></comment></comment></comment>