Ask HN: Why do celebrities favor Twitter over Facebook? - <AUTHOR>

Twitter has less than 300 million MAU, while Facebook has 1.3 billion MAU. Twitter US MAU is also much smaller than Facebook MAU.
Intuitively, celebrities want to use Facebook to promote themselves.
However, most celebrities are more active in Twitter. This is also true for tech leaders. For instance, most YC partners are pretty active on Twitter but not so on Facebook.
Why do they only target a small audience instead of a much bigger audience? <comment><USER2> Facebook does not send all of your updates to all of your followers. For pages with large amounts of followers, only about 10% of your followers will have any given post pushed to their timeline. You can increase the number by paying FB to "promote" individual posts, but Twitter sends everyone everything.

<comment><AUTHOR> For a commoner like me, FB only notify 10% of my friends. Is that the same thing for celebrities? It doesn't seem so.

I just take a sample using Justin Bieber's post that are both shared on FB and Twitter. On FB it has 385k likes, and Twitter only has 63k likes to the same content. The ratio is similar to MAU of the two platforms. FB is able to get more audience for him.

<comment><USER3> On Facebook people interacting with the content by liking and commenting will increase the content's reach by showing it to more people.

<comment><AUTHOR> So it makes more sense for celebrities to directly broadcast to a larger audience on FB than Twitter...

</comment></comment></comment></comment><comment><USER4> Communication-wise, Twitter is a better platform for socialites and celebrities to connect with their audience. It's a one-to-many transmission model and one can send and receive as desired. It's model is more flexible and requires less maintenance for those who are busy or on the go.

<comment><AUTHOR> Let's say you are a celebrity on the go, posting something on Facebook has a potential of reaching extra 1 Billion users. Of coz, there are more nosies with an extra billion users. However, you are still reaching more audiance than Twitter ...

</comment></comment><comment><USER5> I work in PR, here's my perspective: journalists love Twitter because they can easily share their articles and find interesting news shared by others (much better than Facebook bc you don't depend on a timeline, but rather on public hashtags and trending topics). Because journalists are there, celebrities are there. And because celebrities are there, journalists are there. It's a virtuous cycle. Twitter's also much easier to monitor than Facebook (private pages), so it feeds celebrity egos and the PR/advertising machine at the same time.

<comment><AUTHOR> This really makes sense. Basically, Twitter is for journalists and celebrities, while Facebook is for commoners. No wonder why Twitter's user growth is pretty limited. The question becomes why it is hard for Facebook to adapt this hashtag and trending model? FB does have public profiles for celebrities.

</comment></comment><comment><USER6> You have to have a Facebook account to access Facebook content. I can read Twitter content without an account.

<comment><AUTHOR> This is NOT true. Try log out Facebook, and you will still still be able to read public profiles of celebrities.

</comment></comment><comment><USER7> Facebook was created as friends network, while Twitter was created as followers network. Even though facebook added follow feature later, Twitter is still seen by many as followers network that suits celebrities.

</comment><comment><USER8> IMHO In facebook, crazy users and annoying people can share longer rants and have bigger exposure. 140 characters cuts down the noise. Also twitter is already a replica of the star system: leaders and followers.

<comment><AUTHOR> 140 actually makes average users hard to understand what does it mean without context information. This is also the reason that Twitter user number stops growing, even slower than the gigantic Facebook.</comment></comment>


That Top 1% Thing - <AUTHOR> http://dilbert.com/blog/entry/that_top_1_thing/

<comment><USER2> \--"The most objective explanation of our problem is that the economy is changing faster than humans can adapt."

Why did the banks collapse a couple years ago? Wasn't it the regulatory changes that allowed them to bundle sub-prime mortgage derivatives? No, the economy was just changing too fast.

Why do billionaires pay a lower percentage of their income in taxes than struggling families? Isn't it recent tax loopholes that favor people with loads of money? No, the economy is just changing too fast.

Starts out interesting, then jumps into jargon. The economy is changing too fast? What does that even mean? It's super ambiguous. Can you imagine that in a protest sign? "The economy is changing too fast. Lets do something about it."

Plus, his assumption about the math level and college major make up of the OWS crowd is rather obnoxious.

<comment><USER3> I have to agree with him. I don't think top 1% are to blame, definitely somewhere in the top 1%... Maybe top 0.20% are the thiefs, the rest are opportunists.

However it is true, many of the OWS are unskilled laborers, we need those less and less, and care less and less about them. We care about them as luxuries, and when the going gets tough, we get rid of these luxuries. We also have a population growth and a parralel technological growth (you may even say technology allowed population growth), and of course more population = more needed jobs, and technology = less needed jobs. Go figure.

The failing of the government is forseeing this. The only solution is a complete gutting of the education system. The #1 most desired job in America needs to be a teacher, specifically a math teacher, and that job should be insanely hard to fill.

<comment><USER2> It's never been directly about the top 1%. It's about politicians and legislation that don't favor the general public. Years of such legislation have led to a top 1% having a disproportionate amount of wealth and a general public that is getting dumber, sicker, and poorer.

I think opposition to legislation that favor the rich is often confused with opposition to the rich directly.

This confusion is exactly what undermines our ability to focus on real problems and progress.</comment></comment></comment>


Brave Browser, wiping history still leaves trace of visited sites - <AUTHOR> https://github.com/brave/brave-browser/issues/9929 <comment><USER2> > It doesn't seem to be anywhere (in text) in: /Users/mark/Library/Application > Support/BraveSoftware

Of course it's not in text. It's a SQLite3 database:

      $ sqlite3 ~/'Library/Application Support/BraveSoftware/Brave-Browser/Default/Top Sites' .dump
      PRAGMA foreign_keys=OFF;
      BEGIN TRANSACTION;
      CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR);
      INSERT INTO meta VALUES('mmap_status','-1');
      INSERT INTO meta VALUES('version','4');
      INSERT INTO meta VALUES('last_compatible_version','4');
      CREATE TABLE top_sites (url LONGVARCHAR PRIMARY KEY,url_rank INTEGER,title LONGVARCHAR,redirects LONGVARCHAR);
      INSERT INTO top_sites VALUES('https://chrome.google.com/webstore?hl=en',0,'Web Store',NULL);
      COMMIT;

This is actually a database inherited from Chromium, so I'm not sure if the issue is inherited from Chromium.

Edit: Tried this on Chromium 86.0.4185.0, top sites db is cleared after clearing all browsing data, so probably not inherited from Chromium.

(Btw I wasn't able to repro on Brave because however many times I open news.ycombinator.com, it simply won't register in top sites -.-)

<comment><USER3> They still use 83.0.4103.116 even with that it's easy to mess chromium up with your patches. I don't think it has malicious intend, just a bug.

[1]: [https://brave.com/latest/](https://brave.com/latest/)

<comment><USER2> 83.0.4103.116 is current stable. Chromium itself is distributed in snapshot form (I cask installed it) so naturally it's ahead — kind of like Canary, which is currently at 86.0.4194.0.

</comment></comment></comment><comment><USER4> This is a bug, have you guys seen a software bug before? What is it with the appetite for outrage? Using brave on Android devices and not planning to switch

<comment><USER5> Ya I find the outright hatred for Brave on HN a bit bizarre. The more sustainable alternatives we have to Google Chrome hegemony the better IMHO. I say this as both a FF and Brave user.

<comment><USER6> You do know Brave is built on top of Chromium which is funded by Google right? I won't call a browser that relies so much on Google as a sustainable alternative to Chrome.

<comment><USER7> same can be said for Firefox though (+300 million a year comes from google):

[https://en.m.wikipedia.org/wiki/Mozilla_Foundation#Financing](https://en.m.wikipedia.org/wiki/Mozilla_Foundation#Financing)

<comment><USER8> The browser rendering engine for Firefox (Gecko) is independent from Chromium, and as such isn't really reliant on Google. Mozilla's reliance on Google is solely for displaying Google as the default search engine.

<comment><USER7> sure the _engine_ is not descended from google code but if mozilla didnt have google's funding they would essentially go bankrupt and consequently ff would go byebye. id call that dependence.

</comment></comment></comment></comment></comment></comment><comment><USER9> They are an adtech company. That should be all we need to know, right? I'm willing to change my mind, so far it doesn't make sense to use Brave.

<comment><USER10> > That should be all we need to know, right?

Not really, their whole proposition is to do ads in a privacy respecting way, and you always have the option to just turn them off entirely. The payments model they have for websites is my favorite thing about the browser and I'd love to see more models like it catch on. Giving the ability to easily fund content creators by just filling up your wallet periodically (without having to view ads if you don't want) is a great idea. Perhaps the execution leaves something to be desired, but I wish people would at least discuss the important ideas it brings rather than simply dismiss it as an evil browser and recommend Firefox + ublock origin (which, while a good temporary solution, is ultimately just kicking the can down the road and doesn't do a whole lot to solve the root issues).

<comment> john-shaffer > you always have the option to just turn them off entirely

This is not fully accurate. You have to explicitly find and enable ads if you want them. They are off by default.

<comment><USER10> Thanks for the correction. I like the idea of what Brave does, but I'm too reliant on some Firefox features (tree style tabs + containers) so I don't actually use it myself and sometimes get it a bit wrong.

</comment></comment></comment></comment><comment><USER11> Brave Browser continues to behave in ways that are contrary to their stated principles. I dropped the browser a couple of months ago on the heels of the bitcoin affiliate link scandal and went back to Safari and Firefox.

I am keeping an eye on Braver Browser, a fork of Brave with the intention of removing the questionable behavior: [https://github.com/braver- browser](https://github.com/braver-browser)

<comment><USER12> What's the advantage of Braver over Firefox? Is it just that you're trying to get ad blocking on iOS?

<comment><USER11> I don't use IOS (yet) so "no" on that front. I tried Brave and was happy with it until these recent revelations, so upon hearing about Braver I simply decided to keep an eye on it.

<comment><USER12> Firefox with gorhill's uBlock (search GitHub for official links, because there are imposters) is less buggy than Brave. I highly recommend it.

</comment></comment></comment></comment><comment><USER13> well, compared to undisclosed affiliate marketing for trading sites[1], soliciting of donations without consent[2] or the recent redirection through affiliate links[3], this seems pretty tame.

[1]: [https://github.com/brave/brave- browser/issues/8793](https://github.com/brave/brave-browser/issues/8793)

[2]: [https://davidgerard.co.uk/blockchain/2019/01/13/brave-web- br...](https://davidgerard.co.uk/blockchain/2019/01/13/brave-web-browser-no- longer-claims-to-fundraise-on-behalf-of-others-so-thats-nice/)

[3]: [https://news.ycombinator.com/item?id=23442027](https://news.ycombinator.com/item?id=23442027)

<comment><USER14> I've disliked Brave from the beginning. Initially because of the pretentious - and frankly appropriated - name, but now for the much more substantive reasons you've cited.

Seriously, if you want a browser that gives you control over your data and privacy, use Firefox. It doesn't do any of this shady nonsense.

<comment><USER15> How can I get these two features on Firefox:

1\. Block scripts on certain domains

2\. Block ads & tracking (including on Android)

Those are my favorite Brave features. How do I get them on Firefox?

<comment><USER16> On mobile: [https://play.google.com/store/apps/details?id=org.mozilla.fe...](https://play.google.com/store/apps/details?id=org.mozilla.fenix&hl=en_US) \+ enable the extention "uBlock Origin" in the settings (not sure the exact steps while writing this, sorry)

On desktop: regular Firefox + [https://addons.mozilla.org/en- US/firefox/addon/ublock-origin...](https://addons.mozilla.org/en- US/firefox/addon/ublock-origin/)

In uBlock Origin, there is a setting that disables Javascript by default (which I use). You can then enable it temporarily or permanently on a per-site basis.

<comment><USER15> Thank you! Was very easy. Liking this so far.

</comment></comment></comment></comment></comment><comment><USER17> See it. These new browsers claiming "privacy" aren't private at all.

<comment><USER18> It is more private than Chrome. And full privacy probably doesn't exist.

<comment><USER19> If that is all they got going I don't foresee them lasting much longer. At least Chrome and Firefox have their own open source browsing engines.

</comment></comment></comment><comment><USER20> Someone posted on the GH issue that someone posted the GH issue on HackerNews.

[https://github.com/brave/brave- browser/issues/9929#issuecomm...](https://github.com/brave/brave- browser/issues/9929#issuecomment-654154773)

</comment><comment><USER21> I'm glad I didn't believe the hype. I just run edge, and I have a powershell script that runs on startup, shutdown to wipe everything.

</comment><comment><USER22> Lost all trust in Brave some time ago, back to FF.

<comment><USER23> FF?

<comment><USER24> Firefox. You don't need to change many settings to make it much more private than Brave.

<comment><USER25> What settings would you recommend to change?

<comment><USER26> Partially points of that list:

[https://www.privateinternetaccess.com/blog/firefox- hardening...](https://www.privateinternetaccess.com/blog/firefox-hardening- guide/)

</comment></comment></comment></comment></comment><comment><USER27> I wonder if this is true of "private window" mode as well?

</comment><comment><USER28> Is it fair to _ever_ say that clearing the history completely removes all traces of visited sites? I have always operated under the assumption that _some_ trace will remain pretty much forever.

<comment><USER29> Why would you make this assumption? It seems perfectly reasonable to me to assume, in the absence of evidence to the contrary, that a program actually does what it claims to do.

<comment><USER30> I sometimes do computer forensics for clients and you can be sure that you leave traces. You'd need to wipe out the area of the disk over and over again to fully remove it (sometimes it'll still remain despite that, for undisclosed reasons).

<comment><USER31> "undisclosed reasons"

There comes a point where I simply won't believe in magic. Whether it's 3 writes or 7 writes, at some point there is not enough contextual information left on rigid magnetic media to recover any amount of useable information.

<comment><USER32> They might be referring to SSDs which would also be bad to do overwrites on since you are essentially killing the life of the drive. Better off just outright filling up a whole drive.

</comment></comment></comment></comment></comment><comment><USER33> If you need an alternative to Brave, then see [https://news.ycombinator.com/item?id=23708688](https://news.ycombinator.com/item?id=23708688). This comment also shares the auto-suggestions-for-profit which is another reason I'm not using it. Since I cannot use DDG nor Brave, the only alternative (besides the currently bloated Firefox -- in my biased opinion) is ungoogled-chromium.

<comment><USER34> Please read [https://news.ycombinator.com/item?id=23708986](https://news.ycombinator.com/item?id=23708986) before deciding on which browser to switch to.

"Currently bloated Firefox" is a baseless claim in my opinion.

<comment><USER35> I've been using ff for years and had no problem with it. Uninstalled Brave after the affiliate link incident.</comment></comment></comment>


Social network traffic up 11.5 percent; MySpace still dominates - <AUTHOR> http://blogs.zdnet.com/social/?p=114 <comment><AUTHOR> Here is a related post by Phil on Profy: Online Communities Continue Growth

<http://www.profy.com/2007/03/15/online-community/></comment>


C library system-call wrappers, or the lack thereof - <AUTHOR> https://lwn.net/SubscriberLink/771441/96f587a2dec5ba1a/ <comment><USER2> I ran into this problem a little while back trying to get my Linux implementation of the BSD unveil() system call merged into mainline. Some of the responses to the RFC told me that it shouldn't be added because glibc likely won't add a syscall wrapper for it. However, a response from glibc states that they won't consider adding it until it's been successfully merged into mainline, creating a sort of catch-22 situation.

<comment><USER3> Thank you for your efforts! Can you just cc them both on an email and get them to agree together?

<comment><USER2> Hopefully! I plan on doing that for my next RFC!

</comment></comment></comment><comment><USER4> This is one area where I feel that BSD approach (where the same team maintains both the kernel and the libc, and they're shipped in sync as part of the same release) makes a lot more sense.

In fact, come to think of it, Linux is the only OS where syscalls are the official public userspace API, is it not? On all other platforms, they're an implementation detail behind the system libraries.

<comment><USER5> macOS lists them all in /usr/include/sys/syscall.h, so I guess you can consider that public API?

<comment><USER6> That file doesn't even exist on my system, but in any case public means official, not in some header.

<comment><USER5> If you have the command line tools installed, it should also be under /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/syscall.h. macOS, by default, does not ship with these headers at all, and as of macOS Mojave they no longer provide them under /usr/include unless you install a certain package.

With that being said, I disagree with your characterization of "some header"–anything that's in Apple's headers is public API, whether it has a fancy page on developer.apple.com or not. Apple has a very clear definition of what they consider to be "private", and anything in /usr/include isn't it.

<comment><USER6> Actually the path is:

      /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/syscall.h

and you can clearly see that the file is wrapped with:

      #ifdef __APPLE_API_PRIVATE
      ...
      #endif /* __APPLE_API_PRIVATE */

<comment><USER5> Again, if you have the Command Line Tools installed, it'll be under /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/. Xcode also has a copy, but I think fewer people have that installed.

</comment></comment></comment></comment></comment></comment><comment><USER7> I'm sure it would give people discomfort, but I wonder how it would work if the kernel presented a pseudo file system with an "include" and a "src" directory to provide C interfaces to the unassimilated syscalls. Just enough syntax to keep people from defining their own types and have to use the syscall() interface.

Maybe make it a module so space constrained systems can leave it out.

The kernel patch process could keep everything nicely in sync and native build processes would easily find the right source code. Cross compiling would require you to find and copies though.

<comment><USER8> It actually already has this (kinda) -- the VDSO shared library. Although they only tend to implement a couple of syscalls in there.

[http://man7.org/linux/man-pages/man7/vdso.7.html](http://man7.org/linux/man- pages/man7/vdso.7.html)

<comment><USER9> VDSO does not have syscalls in it, that's actually the entire reason it exists… so you can communicate between the kernel and userspace without syscalls.

</comment></comment></comment><comment><USER10> I'm curious what led to Linux (and it seems the other Unices) adopting the "double indirection" strategy of having a separate wrapper/stub function for system calls vs. the approach common in the MS-DOS world where the compiler would directly embed e.g. INT 21H instructions and generate the code to put parameters into registers itself. It's a small inefficiency, but still seems a bit wasteful nonetheless.

<comment><USER11> There's nothing stopping the wrapper function from being inlined (as it commonly is for some compiler + libc combinations), with all the usual tradeoffs for code size and ease of debugging.

<comment><USER12> It doesn't happen, unless you compile C library with LTO. I'm yet to succeed in doing that for my musl C mipsel target.

</comment></comment></comment><comment><USER13> The comments on the article have some funny ideas about versioning.

Apple platforms manage to support the idea of a "deployment target" and binary compatibility; the new symbols are weak-linked. Broken old behavior is preserved with linked on-or-after checks.

Not sure what makes it so difficult for glibc.

<comment><USER14> You need quite a bit of coordination between your toolchain, your kernel, and the standard c library for that to work. Linux/GCC/Glibc has never had that.

</comment></comment><comment><USER15> Two noob questions:

What are the technical reasons that glibc cannot adhere to the Linux dogma, "Don't break userspace?"

Since glibc does not adhere to that dogma, why the decades-long reluctance to add certain syscall wrappers? If they screw up and make a bad interface just modify it and bump the version number.

I just waded through the lwn cross-purpose-writing-festival comments and did not see them answered.

<comment><USER16> > What are the technical reasons that glibc cannot adhere to the Linux dogma, > "Don't break userspace?"

I don't know if they have something like that officially, but in practice, they do follow it. Programs linked to an older version of glibc continue working with a newer version of glibc, in a large part thanks to symbol versioning, which allows them to keep the old versions of an interface available to old binaries, while new binaries get the new functionality.

> If they screw up and make a bad interface just modify it and bump the > version number.

Bumping the glibc version number would mean recompiling everything (a program can't have two versions of glibc at the same time, so all libraries a program links to would have to be recompiled); we had that in the libc5 to libc6 transition last century. And since they won't bump the version number, it means they will have to keep the bad interface forever, even if it's just visible to binaries compiled against an older glibc.

For a recent example in which they actually went ahead and removed a bad interface: [https://lwn.net/Articles/673724/](https://lwn.net/Articles/673724/) and [https://sourceware.org/bugzilla/show_bug.cgi?id=19473](https://sourceware.org/bugzilla/show_bug.cgi?id=19473) \-- and according to the later, they did it in a way which still kept existing binaries working.

<comment><USER15> > I don't know if they have something like that officially, but in practice, > they do follow it.

If that's true then I don't understand ldarby's comment on the article:

> The common problem that I suspect Cyberax is actually moaning about is if > software uses other calls like memcpy() which on centos 7 gets a version of > GLIBC_2.14:

> readelf -a foo | grep memcpy 000000601020 000300000007 R_X86_64_JUMP_SLO > 0000000000000000 memcpy@GLIBC_2.14 + 0 3: 0000000000000000 0 FUNC GLOBAL > DEFAULT UND memcpy@GLIBC_2.14 (3) 55: 0000000000000000 0 FUNC GLOBAL DEFAULT > UND memcpy@@GLIBC_2.14

> and this doesn't work on centos 6:

> ldd ./foo > ./foo: /lib64/libc.so.6: version `GLIBC_2.14' not found > (required by ./foo)

Just to be clear, my original question is why glibc technically cannot follow the _same exact_ development model of the Linux kernel for retaining backward compatibility.

<comment><USER16> It's backwards compatible: software compiled on centos 6 will be using the older memcpy@GLIBC_2.2.5 symbol, which still exists on newer glibc together with the current memcpy@GLIBC_2.14 symbol, so it will work. What doesn't work is compiling with a newer glibc and expecting it to work on an older system.

The example above is actually a great example of bending over backwards to keep compatibility with broken userspace. Some programs incorrectly called memcpy with overlapping inputs, and an optimized version of memcpy started breaking these programs. Instead of just letting them break, the older symbol was kept with a slower implementation which accepts overlapping inputs, while new programs get the faster implementation at the memcpy@GLIBC_2.14 symbol.

</comment></comment></comment></comment><comment><USER17> Arbitrage issues wherever glibc and the syscall differ seem to be where the bugs and security issues lay or at least a good place to look.

Whenever a person has to roll out their own handler it will almost always undergo less testing and auditing. The article points gettid which for at least 10 years required your own method to use, and the comment section for the article points out that the getpid call had caching that was bugged for a long time.

Having no glibc implementation of a syscall affects its usage and the total number of people knowledgeable about that function, so it would be a perfect place to look for bugs and security. In the nearly reverse case a poor implementation of a glibc handler might be doing something that would allow an attacker to take advantage. The same applies where the glibc and syscall functionality differ, an aspect only part of the syscall might be undertested.

</comment><comment><USER18> How did Plan 9 and Inferno handle this?

<comment><USER19> Similar to the BSDs: by providing wrappers for syscalls in their own libc.

Plan 9 has very few syscalls compared to Linux and the BSDs.

</comment></comment><comment><USER20> This is exactly why BSD and illumos based operating systems ship libc, the kernel and userland (/usr) as one coherent whole. Perhaps now, reading the LWN article, people who are comfortable with GNU/Linux will start to realize it's high time to outgrow it and move on to one of the BSD or illumos based systems. The longer you wait, the harder the transition will be and besides, it's good to go out of one's comfort zone.

<comment><USER21> Sure, I'll just write up a proposal for my employer to move multiple tens of thousands of Linux servers, VMs and containers over to BSD. I have a good feeling about this. /s

<comment><USER20> Here is something to consider: how did your employer get to tens of thousands of Linux servers from whatever they were running on before?

And: do you really want to spend the rest of your professional career wrangling with a shoddy product, or do you want to actally do professional, cutting edge IT?

I can't write for you, but I did not graduate computer science at the top of my class so that I could spend the next several decades working with / on the shittiest, amateur knock-off copy of UNIX when I could run the real thing for free & cheap. That's not why I studied at a university and got a degree for. How about you, what's it gonna be, shitty Linux for the next 20-30 years or the real computer science with SmartOS or FreeBSD?

</comment></comment></comment><comment><USER22> The post states:

>"In such cases, user-space developers must fall back on syscall() to access that functionality, an approach that is both non-portable and error-prone."

I understand about portability but can someone elaborate on why using syscall() is inherently error-prone?

</comment><comment><USER23> Lack of `gettid` and `futex` have always annoyed me.

<comment><USER24> There's this sense that they're not for the consumption of mere mortals.

That being said, you can still at least always call syscall(2).

<comment><USER25> One problem is that not all system calls take the same kinds of arguments on all platforms. Example: SYS_mmap takes a pointer to a struct containing all the arguments on s390. Even better, on Alpha, glibc's syscall cannot call system calls with 6 or more arguments (although maybe that was fixed in the past 8 years?).

<comment><USER26> > Even better, on Alpha, glibc's syscall cannot call system calls with 6 or > more arguments

That's just generic kernel ABI: syscalls can have at most 6 arguments: [https://elixir.bootlin.com/linux/latest/source/include/asm-g...](https://elixir.bootlin.com/linux/latest/source/include/asm- generic/syscall.h#L104)

<comment><USER25> Skip the "or more" part, then, but that doesn't make it less true: it wasn't possible to make a 6-argument system call with syscall on alpha 8 years ago. I don't know whether that's been fixed or not.

<comment><USER27> The syscall(5) manpage documents the Alpha syscall abi as passing arguments in a0,a1,a2,a3,a4,a5 which would suggest so. (MIPS o32 is the only listed one which is a bit oddball: you can only pass 4 args in registers and then use stack for 5 and 6.)</comment></comment></comment></comment></comment></comment>


Engineer who has worked for 5 of the world's top employers - <AUTHOR> https://www.linkedin.com/pulse/wonder-what-its-like-work-best-companies-world-guy-has-fairchild <comment><USER2> Darn I've only worked for 2 and had offers at 4...</comment>


My experience with NixOS - <AUTHOR> https://blog.patchgirl.io/nixos/2020/03/31/nixos.html <comment><USER2> I recently switched to NixOS and have essentially configured my OS from scratch in less than a week and now use it as my main system.

The thing to remember about NixOS is it's not a distribution of KDE or Gnome or manager of anything, it's a declarative way of configuring those things and allows you to easily roll back changes to entire OS.

It's a little bit of investment to get started but one you get rolling it's such a breath of fresh air to be able to manipulate your whole OS in the similar pragmatic way to you iterate code in a git repo.

<comment><USER3> > I recently switched to NixOS and have essentially configured my OS from > scratch in less than a week

That doesn't exactly scream _ease of use_.

<comment><USER4> NixOS isn't easy to use. It's very powerful though. It gives you the ability to configure your whole OS, including all of your packages and configurations, in one declarative file. It reproduces the entire installation from this file in a way that's fully immutable and hash-perfect (with minimal building from source). Very cool.

<comment><USER5> > in one declarative file

Which is not always up to date, and exposes all the available options. I found myself often need to dig into nixpkgs and add missing options myself during the time I was trying out NixOS.

And believe me, that wasn't a pleasant experience.

<comment><USER6> Not sure if it was available when you tried, but this is useful when configuring, it is processed from nixpkgs and indexes all options that are available: [https://nixos.org/nixos/options.html](https://nixos.org/nixos/options.html)

</comment></comment></comment></comment></comment><comment><USER7> NixOS is good, if you found not enough documentation, try Guix and may be GuixSD. It uses guile (scheme) and has fantastic documentation. [1]

Earlier Nix had additional NixOps but that too now is available with Guix deploy. I am waiting when I can run Guix within a lxd container, shepherd init still has some rough edges with LXD container init.

Both are great piece of software and a new take on building OS and distribution. They are ahead of their time might take another 4-5 years before they become more mainstream.

[1] [https://guix.gnu.org/help/](https://guix.gnu.org/help/)

<comment><USER8> Our organization tried Nix for many years. Most of our problems were around usability, lack of documentation (including zero docstrings or type annotations in nixpkgs), and the overt unfamiliarity of the Nix expression language (asking a whole organization to learn something that seems deliberately cryptic isn't a recipe for success), and a long tail of other things. Still, at its core Nix for package management seems like the future; I just have no confidence that they're going to iron out those issues in the next 4-5 years.

Of course, none of that speaks to Guix as I haven't used it, but hopefully it's awesome and solves all of those problems.

<comment><USER9> To me, this is a success story; your organization wasn't sufficiently flexible to adopt new technologies which require rethinking the fundamentals of package management. Take this as a warning sign and re-orient your organization.

I do wonder about the "deliberately cryptic" nature of Nix's expression language. It is, in fact, deliberately designed for simplicity, to be a basic syntax for a language that is purely functional and lazy but not much else ([0] p69). When folks complain about the Nix expression language, as they often do, I ask them: What would you change? How would you do it?

I think that it is bad that an entire team does not have the bandwidth to learn an entirely new language, but good that the team is not willing to spend time on things which they don't think are important.

[0] [https://edolstra.github.io/pubs/phd- thesis.pdf](https://edolstra.github.io/pubs/phd-thesis.pdf)

<comment><USER10> Do you have any evidence to support your assertion that it was an issue with an organisation rather than the technology?

Not all technologies are good. Not all organisations are good. Sometimes it's one. Sometimes it's the other.

<comment><USER9> Sure. Given code which works for a lot of people, versus some organization composed of people, the fault is probably with people and not with code. This follows from the formal properties of code as mathematical objects, plus the property of probabilistically-checked proofs: If code works for a lot of people, then the code is expected to work generally with high probability.

Moreover, there are lots of folks having professional success with Nix, and having consumed enough of their stories, I think that the stumbling blocks that the parent identified are faults of their organization and not of Nix in particular. To see this, first replace "Nix" with "Brand X" and note that the complaints are generic to any community-developed software which doesn't have B2B resellers. Then, consider your own experience learning Nix, and note that usability, poor documentation, and a feeling that things are deliberately cryptic are all common to learning _any_ new tool or programming language.

We can comfortably conclude that Nix did not prevent itself from being adopted by the parent's organization. Indeed, it would seem that Nix made itself extremely attractive and adoptable, else it would not have been under consideration!

<comment><USER8> I don't think Nix works for a lot of organizations as a package manager. It works for a lot of individuals for a different use case (NixOS). If you're mostly installing existing packages from nixpkgs onto a NixOS box, that probably works very well--users don't need to know much about the expression language or the nature of their dependency tree. If you're using it as a development tool, users are going to need to intimately understand Nix, its expression language, and their entire dependency tree. Further, how well Nix works for your development use case largely depends on which language you're using, how well that language is supported by Nix (is it compiled or interpreted, does nixpkgs have good coverage for your language's ecosystem, etc). Notably, working with Haskell or Go in Nix is probably quite easy, while working with Python is quite hard.

As an example, I recall trying to build a package for psycopg2 (it wasn't in nixpkgs at the time, and even if it were, for one reason or another we couldn't directly use many packages from nixpkgs), the most popular Python library for interacting with a Postgres database; however, that required me to write packages for a bunch of C libraries that I didn't understand at all, including fishing random header files out of the Postgres source code. No one in our organization including our Nix veterans could figure out how to build it correctly, and it ultimately caused us to move away from Nix (it was among the last straws).

Besides, just because it didn't work for us doesn't imply that there's a problem with our personnel (by several industry key metrics, our devops capability is excellent), but rather that the effort required to implement Nix successfully was greater than the work required to use other tooling. We _could_ use C++ instead of Python for our organization, but just because we don't doesn't imply that our organization is incompetent; rather that Python's tradeoffs are more appropriate for our problems. In effect, Nix creates more problems than it solves for us, which is unfortunate because the problems it solves are really important problems, and many of the problems it creates are utterly unnecessary (add docstrings, use a more familiar expression language-- maybe Starlark [[https://go.starlark.net](https://go.starlark.net)], provide and document 'escape hatches' so users can use system dependencies where it's prohibitively difficult to hermetically package things, etc).

<comment><USER11> Nix has a way of exposing complex and low-quality build systems. Many pieces of the Python ecosystem fall into this category. For example, it wasn't Nix's fault that psycopg2 had a dependency on postgresql C header files, nor was it Nix's fault that the postgresql headers had to be rearranged for psycopg2's build to work. Nix basically reveals the full complexity of the package's actual build environment, and for some packages the work required to make a reliable build is overwhelming. Some easier to use systems have people doing this work for you, like the Debian project. Others rely on luck to supply dependencies. The thousands of Dockerfiles that run "apt-get update" are a great example of this.

After using Nix for a while you start to reflexively shy away from software with low-quality build systems. Nix is not easy to use, but it's best of breed in terms of software supply chain auditability and malleability (anything in the system can be trivially modified or patched). If you can move to an "easy" system, that may be the appropriate trade-off for you, but it means you may be in a domain where these properties are unimportant.

<comment><USER12> Read your way down this thread and note that every defence of Nix is merely shifting the blame in it's entirety to some other part of the ecosystem. Rightly or wrongly that's a big problem for Nix if it intends to gain widespread acceptance.

<comment><USER6> It's true somewhat though, but it's a problem is not easy to solve for Python.

The problem is that Python supports C extensions, and for example the psycopg2 package has an extra dependency on a libpq which it expects to have installed on the system i.e. if you were using a docker you would do something like yum install postgresql-devel otherwise it will fail. Python won't install it for you and it doesn't even have a way to relay (except for error message) that such package is needed.

Many people actually get stuck with this and won't know what to do, but quick google show that package is needed they install and everything works. Nix is functional and doesn't have state so you can't just invoke nix-env -i postgresql and now everything will start to work, that behavior would actually ruin reproducibility. Nix instead expects that the C dependency is also provided otherwise it will refuse the build.

That's what OP meant where he said Nix exposes weak build systems.

Anyway, there was significant progress in making things better in python, it is still not awesome, but it is very close. Actually the biggest pain point right now is to setup a build environment that's convenient to use.

I recently created a template that shows how to do it: [https://github.com/takeda/example_python_project](https://github.com/takeda/example_python_project)

It uses pip2nix and it can automatically figure out all python dependencies, the packages like psycopg2 need an additional entry like this: [https://github.com/takeda/example_python_project/blob/master...](https://github.com/takeda/example_python_project/blob/master/nix/python- packages-overrides.nix#L17-L21) because PyPI packages don't specify any system dependencies.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> I moved to NixOS the other week and love it. Being able to play about and roll back to previous configurations is honestly amazing once you get into a position that you need it. I tinker with my OS and this happens more often than I'd care to admit!

Nix as a build tool is also quite nice, but honestly NixOS is the main attraction for me.

</comment><comment><USER14> We used their build system Hydra at a previous company and all of our deployments were on NixOS.

Check this video out from Rob Vermaas. It's a decent case study of how Nix was applied at LogicBlox

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

</comment><comment><USER15> Here's my dotfiles for some of my nixos servers and home computers.

[https://github.com/ghuntley/dotfiles- nixos](https://github.com/ghuntley/dotfiles-nixos)

Steal away and enjoy.

<comment><USER15> Check out the NixOS for existing sysadmins workshop over at — [https://github.com/ghuntley/workshops/tree/master/nixos- work...](https://github.com/ghuntley/workshops/tree/master/nixos-workshop)

If you want a TL;DR overview of NixOS then start here — [https://github.com/ghuntley/workshops/tree/master/nixos- work...](https://github.com/ghuntley/workshops/tree/master/nixos- workshop/modules/01-introduction-to-nixos)

For an advanced example of overriding nixpkg and usage of pinning/override layers (ie some mandate or reason to run super old version of grpc) — [https://github.com/digital- asset/daml/blob/master/nix/nixpkg...](https://github.com/digital- asset/daml/blob/master/nix/nixpkgs.nix#L10)

</comment></comment><comment><USER14> There's a good write up of how Cardano, the blockchain project, uses Nix.

Not surprising, given that Nix was a academic research project, and Cardano has a good network of academic researchers working to solve hard blockchain problems.

[https://iohk.io/en/blog/posts/2019/02/06/how-we-use-nix- at-i...](https://iohk.io/en/blog/posts/2019/02/06/how-we-use-nix-at-iohk/)

</comment><comment><USER16> Could someone summarise what is the advantage of NixOS compared to something like Ansible or Saltstack + any other Linux distribution?

<comment><USER17> I used a Ansible for years before switching to NixOS. The problem with ansible is it is an imperative configuration tool that makes efforts to be declarative, but is not fully. Most runs fail to be declarative, eg even something as basic as "apt update" is irreversible. Ultimately, Ansible requires you to write code that is (State, Code) -> New State, whereas NixOS is truly Code -> State

</comment></comment><comment><USER18> Forgive me for using buzzwords, but what's the "cloud native" story on NixOS? Can I easily create containers and update my orchestrator's deployment? Can I abstract things like AWS Lambdas into this immutable build structure?

<comment><USER19> I would say Nix's cloud native story is "best in class".

you can take any nixos configuration and turn it into a cloud image [https://github.com/nix-community/nixos-generators](https://github.com/nix- community/nixos-generators)

You can take any nix package and turn it into a docker image [https://news.ycombinator.com/item?id=20720922](https://news.ycombinator.com/item?id=20720922) [https://news.ycombinator.com/item?id=18111954](https://news.ycombinator.com/item?id=18111954)

You can even use Nix to create and deploy cloud resources ala Terraform:

github.com/nixos/nixops

Some other notable uses of Nix in cloud native landscape:

[https://github.com/saschagrunert/kubernix](https://github.com/saschagrunert/kubernix) \- a KIND alternative

[https://github.com/xtruder/kubenix](https://github.com/xtruder/kubenix) a Nix DSL for defining and deploying entire kubernetes clusters + deployments (combines nix's docker image building support and deployment support for and end to end cloud-native solution)

I personally think Nix should heavily market itself to the CLoud Native buzzword hype train. as it's my favourite weapon in this space

<comment> kalium-xyz I switched to using Pulumi from NixOps because of the lack of tooling in the Nix ecosystem (also NixOps is frequently broken in all sorts of ways due to not having as large a community). Is there some ideal way to work with it to get it to behave without having to make your own tooling or would you consider my approach to instead create support for Nix in Pulumi (which I have not done as of yet but there are terraform packages so I'm hopeful on the feasibility of this project)?

<comment><USER20> I think it would be great to have a Pulumi-based Nix deployment stack.

I think Nix/Nixpkgs/NixOS are great, and by far the best way to package applications. But NixOps, I think, is a mistake - it's an over-extension, the technologies behind Nix are perfect and way better than anything else for package management, but merely OK for host management. I actually think Pulumi has some better ideas for this, so it would be cool to use Pulumi to orchestrate deployment of Nix/NixOS stuff.

<comment><USER19> I think I might agree. I've been experimenting with making NixOps piggyback on terraform providers ([https://github.com/NixOS/nixops/issues/1242#issuecomment-607...](https://github.com/NixOS/nixops/issues/1242#issuecomment-607947127)) in my spare time. I think this is the same mechanism as Pulumi uses now that I'm reading up on it. Perhaps I should create a Nix frontend for Pulumi instead... Interesting.

</comment></comment></comment></comment></comment><comment><USER21> I'm yet to see a backend app architecture that both is elegant and effective from developer perspective and at the same time doesn't push her to make unneccessary database calls for each request when business logic becomes significantly complex.

<comment> yjftsjthsd-h > doesn't push her to make unneccessary database calls for each request when > business logic becomes significantly complex.

Are you objecting to holding all state in a database, or something else? If so, the only real alternative is to have individual servers hold state, which seems like a poor choice; one way or another you're going to hit the CAP theorem, and databases are well-optimized for getting you the best results from CAP that you're going to.

<comment><USER21> Absolutely not. On the contrary, I'm one of those developers who prefer to do things in SQL rather than application logic.</comment></comment></comment>


Show HN: Pibox = Whatsapp and Dropbox and Secret Sauce and 1000 GB - <AUTHOR> Hi HN! A few days ago I realised my own project Pibox. I believe that it is the easiest way to communicate and share large files in original quality. It`s messenger and cloud storage in one app. So you can send even 4k video on 150 GB from your GoPro or iPhone\Nexus without any problem.
We launched on 30th May and now get 8k users with 4.5 stars in Google Play
Now, everyone can get up to 1000 GB for free.
What about secret sauce you will ask? We are working on AI based smart assistant inside Pibox - HiPi. It`s: 1. One centralized Assistant to which you can connect any other services. No more 10000 bots in different chats! One HiPi to rule them all! 2. Natural speech to talk HiPi. No more strange commands like: "#Nest /open & /window" 3. Rule your personal cloud with a power of the word. (Show me that photos from Egypt) 4. Use HiPi to chat smartly. (Reminders, Auto answer, check spelling, translate) 5. HiPi IoT integration. Control and automate your IoT or wearables in one app. Naturally. (Show me what is going in my House? Make temperature to 22) 6. Open API. How can you use HiPi to extend your service?
It`s our website: https://pibox.com It`s Android app: https://play.google.com/store/apps/details?id=by.set.pibox iOS will be in till 3-4 weeks.
That`s all. I`d be happy to hear your feddback <comment><USER2> Direct link: [https://pibox.com/#/](https://pibox.com/#/)

I thought I tried to try out the web version. I don't have a throw away phone number, so I didn't sign up, so I didn't try it out.

My suggestion for facilitating feedback is to have a tour or a lower friction signup even if that means reduced functionality or simulating parts of the app. I mean, the landing page knew I was coming from Hacker News, so instead of coding up a popup to tell me that [I already knew it], why not dump me into something to play with?

Good luck.

<comment><AUTHOR> Holly dolly! You are right. I`ll do FB\Gmail login ASAP, so you can get inside in 1-2 clicks. How can I forget about it((

<comment><USER2> For feedback purposes, a Hacker News style signup is _my_ preference: name, password and no verification.

Feedback facilitates product iteration. Lead magnets don't.</comment></comment></comment>


Ask HN: How do you manage business contacts? - <AUTHOR>

I'm meeting a ton of people for different organizations, and I'm having trouble tracking relationships and TODOs between them.  This applies to customers, as well as people in the entrepreneurship community and partner companies.
I want a contact manager that allows me to record:

  * contact info
  * history- how we met and what we've done together
  * relationships between contacts (who knows who, who's working in the same company, etc)
  * followup items and TODOs related to each contact or organization
  * which team member is the primary contact for that person
  * lets me share all this with my team
 Currently I'm using gmail's contact manager, and Trello cards to store more information.  There's got to be a better way. <comment><USER2> I keep customers and business contacts separate, both in my head as well as digitally. There are too many biz people to meet and you'll either go crazy trying to keep up, or it will just be a time consuming 'hobby' cataloguing all of your interactions. Those relationships are like friendships -- If you don't see someone and talk to them enough to know what's going on with them, then they aren't good contacts. Yet.

<comment><AUTHOR> Sure thing, but how do you track them digitally?

<comment><USER2> CRM for customers, searchable communications (text, google apps) and social media for biz contacts. Formal tracking is time consuming when I can just search for the person and review what we've talked about. I keep hashtagged notes all over the place (in emails, Slack, Trello) that I can search if I need to, but I rarely do. Being scientific about tracking interactions seems less important to me than being able to read the social queues I'm getting that day.

</comment></comment></comment><comment><USER3> I'd recommend looking at Pipedrive -- you can do pretty much everything you listed and they integrate with many other services, too: [https://www.pipedrive.com/en-US/features](https://www.pipedrive.com/en- US/features)

<comment><AUTHOR> Checked them out, they seem super useful. Thanks for the tip.

<comment><USER2> Maybe I'll revise what I said, this does look useful and easy.</comment></comment></comment>


Australia Just Had a Bad Flu Season. That May Be a Warning for the U.S. - <AUTHOR> https://www.nytimes.com/2019/10/04/health/flu-australia-america.html <comment><USER2> We had both kids in hospital from it, and at different times got it ourselves too. We also had about half of our family and friends down with it at some point in the season, and large numbers of workmates off sick (enough to cause staffing issues).

It was absolutely among the worst flus I can personally remember having, and staff at the hospital were openly saying it was the worst season they can remember having in a long time.

<comment><USER3> Aussie here, was bad in the south island too (Tasmania).

I was sub-par for over a month, started feeling better then down hill again over night. A lot of people at work had time off.

Also had the flu shot.

</comment></comment><comment><USER4> I panic each morning going into our little room used for scrum daily standup, shoulder to shoulder, people coughing, sneezing ... just to repeat whats already on the Jira board.

There aren't any larger rooms, and being out in the open disrupts other workers.

<comment><USER5> Anecdotally, the team members in our SF office seem to take more sick time (for being sick)* than the remote ones. Most take public transport, which adds to exposure

I have an immune system issue, and am happy to be remote and avoid most of this exposure

* ie, not scheduled medical appointments

</comment></comment><comment><USER6> Bit of a tangent, but has anyone made any lifestyle changes that have had a significant (anecdotal) increase to their immune system? I eat quite healthily and do regular sports, yet my immune system seems quite bad compared to other people I know.

<comment><USER7> Cold showers have helped me. I've already had a reasonably good immune system though. I am on the weird side and probably take 2-5 cold showers a day though.

If I feel a little off, I'll take Vitamin C and Lysine as early preventive measures. The rest of my healthy habits are quite subpar. I exercise frequently, but I eat garbage and I sleep even worse. Averaging about once a year in being sick?

<comment><USER8> Cold showers are great for immune system. Been taking them daily for the last 3 years.

<comment><USER9> How do cold showers benefit the immune system?

</comment></comment></comment></comment><comment><USER10> I seem to recall that Australia's 2017 flu-season was particularly rough, in large part, because the strains that were chosen for vaccination mutated after the vaccinations were produced.

(I wouldn't be surpirsed if the "anti-vaccination" rhetoric, which was playing-up a lot in those years, might've also mis-informed some families about the benefits of flu vaccination.)

<comment><USER11> It was the same this year, there were reports in the media questioning the efficacy of the 2019 vaccination due to mutation.

Anecdotally, there did seem to be a very large number of sick people around this year (even now, in spring) although I'm sure 99% of the cases weren't flu proper.

<comment><USER12> I probably did over a hundred swabs on my patients. I'd say the most common was rhinovirus, then RSV and influenza A, then about 4 other viruses made up the rest. It was certainly more than 1% influenza A. There was a decent amount of influenza B too after a while. Parainfluenza came up strong later in the season.

I got sick 3 or 4 times. I got the flu vaccination a couple of months before all this really took off. I guess that confirms the flu vaccine caused me to get sick (sarcasm).

</comment></comment></comment><comment><USER13> Me & my wife already got flu, still not through with it.

Should we vaccinate after? Or maybe now when it is still going?

<comment><USER14> Whenever you can. It's not always to prevent _you_ from getting the flu, but to prevent you from _passing it along_ to others that can't take a flu vaccine for whatever reason. Also elderly, children, immunocompromised folks.

You might have the flu and not know it and it could be deadly to someone else.

</comment></comment><comment><USER15> NYC checking in.

I've had this thing for long enough that it owes me rent. Fever for 3-4 days and now like 2-3 weeks of hacking crap up. Worst sick I've had in years.

<comment><USER16> As a busy international business traveler, exposed to all sorts of virus and bacteria, I've tried and tested a lot of remedies. I've found the single most effective mucalytic is fluimucil (acetylcysteine). It's over the counter in most countries. One tab in a glass of water like an alka seltzer. Symptomatic relief in minutes. No drowsiness either.

Breaks down phlegm -> Reduces throat irritation -> Reduces coughing -> Reduces spreading.

Once the phlegm is under control, it's much easier to figure the rest out.

<comment><USER15> Thanks! I've been taking guafesin and claritin (helps prevent immune system over reaction). Also on a "tea break" as that's probably not helping. Any other advice would be very much appreciated.

</comment></comment></comment><comment><USER17> If the anti- antivaccine community was less about the fun of bullying and more about lives this is something they could address.

Legislative solutions include making it easier to administrate the vaccine (Doctors try and keep the monopoly on this, requiring appointments and $)

It's also a classic issue of the vaccine for healthy individuals can be seen as more a community benefit so subsidising the cost and/or requiring it in high risk areas like old age homes.

Not running out of vaccines would also help, as happened in Australia this year - [https://www.smh.com.au/healthcare/flu-vaccine-shortage- amid-...](https://www.smh.com.au/healthcare/flu-vaccine-shortage-amid-run-on- private-market-pharmacy-supplies-20190529-p51s9o.html)

<comment><USER18> In NY, flu shots can be administered by a pharmacist. No appointment necessary, and mine's at the grocery store - takes about 90 seconds, and it's $0 after insurance.

<comment><USER19> Same in CA.

</comment></comment></comment><comment><USER20> We did?

<comment><USER18> The numbers are right there in the article, if you care to look.</comment></comment>


Ask HN: What is an easy skill to learn? - <AUTHOR> I've come to realise that it's easier to learn some skills over others (at least to a moderate level of ability). E.g. learning a language Vs learning to drive. Do you think there are there some skills that are easier, and quicker, to learn than others?  What would they be? <comment><USER2> In a software engineering context, Git is my "easy" skill. It's not too complicated to understand the main concepts and best-practices, but a lot of colleagues still struggle with it. So it's a nice skill to have, since you can always help out someone and it's very universal.</comment>


Creating a simple bastion host with Ansible - <AUTHOR> https://logandonley.com/bastion-host/ <comment><AUTHOR> Hey, I created this simple project/guide for a use case I had. I figured it would be a good opportunity to demonstrate a basic infrastructure-as-code project that others might also find helpful.

My use case was to create a bastion host, or an environment on the edge of my homelab, which is the only ingress point from the outside web.</comment>


Weak Men Are Superweapons - <AUTHOR> http://slatestarcodex.com/2014/05/12/weak-men-are-superweapons/ <comment><USER2> This is a great point that put into words something that I've thought about before.

When you look at negative news coverage of some group, it almost always focuses on some fringe caricature of what that group actually believes in. For example, BLM's coverage in the conservative media sought to paint them as "black racists" due to pictures/comments/videos portraying a small number of BLM supporters in that light. Note that the Russians are aware of this tactic because they ran several BLM-related twitter accounts that they would occasionally use to this effect (although that's more of a false-flag).

This can be used to frightening effects. A lot of alt-right recruiting spaces (tumblrinaction, /pol/, cringeanarchy, the_donald, KotakuInAction, breitbart, Drudge Report) deliberately focus on a caricature of "leftists" and liberals that is designed to make relatively-rational people feel disgusted and alienated by what they feel the "left" or liberals represent. It's way easier to discredit people in favor of "forced diversity", or unattractive people with weird colored hair who identify as different animals, than it is to discredit actual champions of equal rights or transgender(fixed!) people.

<comment><USER3> Nitpick: 'transgender' is already an adjective, no need to add the '-ed'

</comment></comment><comment><USER4> (2014)

Well, that was fascinating as usual from SSC.

"Remember, not wanting to be stereotyped based solely on your sex is the most sexist thing!" /s

Even better was the link to the The Worst Argument in the World[0] (2012) (not Stove's Gem, though they link to that):

"If we can apply an emotionally charged word to something, we must judge it exactly the same as a typical instance of that emotionally charged word."

\- about which they say "I propose that an outright majority of the classic arguments in American politics, and no small number of arguments in religion, philosophy, et cetera, are in fact unmodified examples of the Worst Argument In The World."

e.g. Taxation is _theft_! Abortion/capital punishment/euthanasia is _murder_! Affirmative action is a form of _racial discrimination_! Obamacare is _socialist_!

Now _that 's_ a useful pattern to look out for.

[0] [http://squid314.livejournal.com/323694.html](http://squid314.livejournal.com/323694.html)

</comment><comment><USER5> It seems like this gets to the heart of why we have a two party system (and why it might be eventually inevitable) with all the current issues divided more or less neatly down the middle. The system has been going for so long, and become so "efficient," that it has settled into two roughly evenly sized groups of people, because any significant imbalance implies a "superweapon" developing.

If we say roughly half the country is of the Foo party and half Bar:

If half the Foo party decided they had a problem with the other half and decided to split into their own group, there'd be roughly a quarter of the country in each of those two split parties. But then half would still be Bar, and would completely dominate the government. So despite whatever differences the Foo/1 and Foo/2 party have, it's not worth splitting their identities over, because their differences with Bar are still larger, even if only slightly.

Kind of obvious if you think about it, but rarely articulated as well as SSC does.

<comment><USER6> Some other theories relevant to this:

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

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

[https://en.wikipedia.org/wiki/Realigning_election](https://en.wikipedia.org/wiki/Realigning_election) (events where party political coalitions do fracture, despite efforts to keep them together)

</comment></comment><comment><USER6> Even though I'd previously read this article, I first expected from the title "weak men" was going to refer to "men who are weak". Nope, it's a technical term for a kind of bad argument.

[https://en.wikipedia.org/wiki/Straw_man#Contemporary_work](https://en.wikipedia.org/wiki/Straw_man#Contemporary_work)

<comment><USER2> I guess the "weak men" correspond to examples of the "selection form" of a straw man argument. However, I still think the "weak men" analogy may be useful. A lot of real-world cases where I consider "weak men" to be used aren't in arguments per se, but rather in how media frames and covers issues - it's what I would otherwise call "curation bias." In fact I think it's really a combination between confirmation bias and extrapolating very anecdotal evidence to large groups of people.</comment></comment>


Hacking thoughts, literally - <AUTHOR> https://www.linkedin.com/pulse/leaking-thoughts-literally-anderson-dadario

<comment><USER2> Seems more like "electrophysiology" than "a neuroscience revolution". Would be really cool to have played around with those in school though.</comment>


Snickerdoodle is a $55 mini PC for DIY robotics (and more) - <AUTHOR> http://liliputing.com/2015/10/snickerdoodle-is-a-35-mini-pc-for-diy-robotics-and-more.html#disqus_thread <comment><USER2> The comparison table ( [https://www.crowdsupply.com/krtkl/snickerdoodle#comparison-t...](https://www.crowdsupply.com/krtkl/snickerdoodle#comparison- table) ) includes a bunch of common, but under powered platforms (Arduino, RPi, BBB). It should really be compared against higher-powered FPGA-based platforms like the Numato Opsis.

</comment><comment><USER3> I like this combo of feature set and price - it addresses the short comings of its competatitors and (hopefully) will provide us with the kind of robust, flexible platform we need.

Now we gotta get us some of these puppies.

Can you say "distributed networked enviornment?"

</comment><comment><AUTHOR> A palm-sized, reconfigurable Linux computer that connects to the real world with ARM, FPGA, Wi-Fi, Bluetooth, and 154 I/O for the price of a wireless- enabled Raspberry Pi</comment>


Programming languages worth checking out - <AUTHOR> http://www.h3rald.com/articles/10-programming-languages/ <comment><USER7> In my first job out of college, I worked for a company that built industrial test equipment (machines that snapped airplane wings in half, shook cars around like they were driving down a bumpy road, that sort of thing).

The tool we used to write the supervisor code and GUIs for machine operators was a language called Alltalk. It was inspired by Smalltalk and developed by an old graybeard at the company. Reading the description of Squeak/Smalltalk brought back some fun memories. A few interesting highlights:

\- Alltalk ran in its own VM. You could create objects, change their state, and save the entire stack/image back to the original VM. Running the VM again would pick up execution right where it left off. This let someone do crazy things like email an Alltalk image to another engineer and say, "Here's the machine state halfway through an emergency shutdown. The actuators all came to rest in 10ms, but it's taking way too long to shut down the hydraulic pumps. Any ideas?" and the engineer could run the VM and debug away.

\- The Alltalk VM had its own object inspector and terminal/interpreter. So you could walk up to an Alltalk instance connected to a live machine with motors spinning at 20krpm, for example, open up the inspector, and code away. Realize you need a low-pass filter on the motor speed feedback sensor? Create the object, tweak the parameters, and wire it into the signal chain live.

Cowboy coding at its absolute finest.

</comment><comment><USER8> Another avenue for learning is to start from hard problems. A hard problem is a problem that is very hard without using a known technique or solution. Somebody who's unfamiliar with it has no clue on how to even start solving it. Solving such a problem will add new techniques to your tool-belt for solving a whole class of problems.

Problems that I've found worth studying:

\- Parsing. This is hard if you don't know the standard techniques: mostly recursive descent parsing with precedence -- or a parser generator, but that won't teach you much unless you write the generator yourself. Moreover I've found that you quickly run into limitations with parser generators and they don't make parsing easier in the long run, that's probably why most real world parsers are hand written (e.g. gcc, llvm). You can probably hack something together that sorta works, but knowing the right techniques makes writing an efficient parser that you have high confidence in a breeze. I've seen many ad- hoc parsers that would have benefited greatly from proper parsing.

\- Constraint solving. Examples are solving sudoku, the zebra puzzle, SAT solving, optimal register allocation and many others. The three most important techniques are backtracking, constraint propagation and conflict learning. Even professional programmers can't do this if they don't know these techniques (e.g. <http://xprogramming.com/articles/oksudoku/>).

\- Interpretation/Compilation. In addition to being a hard problem, writing an interpreter and a compiler makes you understand how programming languages work. This is sometimes seen as a black art, but it is quite easy once you got the pattern.

\- Numerical algorithms. The speed and the simplicity of numerical algorithms is astonishing. Newton's method is particularly amazing. In about 10 lines of code you can solve equations, do state of the art numerical optimization or solve differential equations. It can even handle problems that are usually considered to require specialized algorithms, like max flow and linear programming. It can also perform arithmetic operations, like division and square root.

\- Machine learning. This gives you a different perspective on problem solving. Many people when presented with the task of spam filtering or determining the language a snippet of text is written in will respond with a hard coded scheme based on a lot of rules. A much better approach is to take a data set of known text and analyze the statistics of the data set and compare that with the snippet of task text. The same applies to many other problems.

What should be added to this list?

<comment><USER9> Of course with some languages those problems are no longer "hard":

      - Prolog w/ Constraint Handling Rules simplifies constraint solving
      - Prolog simplifies parsing
      - Lisp simplifies interpretation / compilation

That leaves numerical algorithms and machine learning, which I agree are useful to understand anyhow and different programming languages offer little leverage ;)

<comment><USER10> Haskell and parsing combinators takes an enormous bite out of the parsing problem, too. I won't call it "solved" but it brings it down to the point that writing a parser for a custom minilanguage is more like "a day's work" than "a month's work".

</comment></comment></comment><comment><USER11> Most languages are "worth checking out." Every language offers something unique, by definition. The question is: which languages are "worthier" than others? Or, rather: how should you prioritise your learning queue?

I don't think the author's list provides much variation. They're all important languages, to be sure, but I believe you can get better mileage for your time.

My ten recommedations, in recommended order, are:

        - Racket (nee Scheme - why did they have to change the name!?)
        - <USER2>
        - Java (reading the GoF)
        - C, and the POSIX libraries and system calls
        - <USER3>
        - Javascript or Lua
        - Smalltalk or Squeak
        - <USER4>
        - <USER5>
        - <USER6>

<comment><USER12> Scheme's name didn't change, only PLT's implementation of scheme changed it's name and called itself a new language.

<comment><USER13> PLT Scheme was always a different language -- the name change merely makes that clear to everyone else.

</comment></comment></comment><comment><USER14> This is from end of 2008. It would be great to see an article like that for today. Or maybe things didn't change?

<comment><USER15> As far as I can tell not too much has changed in the language landscape since then. IO, and Factor seem to have stalled a bit. Scala and Clojure seem to have picked up a little steam. In the time since then Go is the only language to make enough of a splash that I would give it any thought. For me at least, F# is the only older than that language that has become interesting enough to learn.

<comment><USER16> Io always looks so tempting but it seems like just a "play" or learning language... Is it worth diving into regardless?

<comment><USER17> I'm using Io in a serious project, it is the scripting language I chose to use for my games. Io's expressiveness and reflection has allowed me to make lots of mini-DSLs to simplify game scripting tasks. I'm very happy with the performance of its garbage collector; it's pauseless and I have profiled it as using only 10% of the cpu time while running a game. I think the vm code has been stable for some time now and the move to cmake cleaned up the build process. The only disagreement I have is over coroutines - they do weird things to the stack and they dont play nicely with C++ exceptions if you throw one and let it cross a coroutine boundary. I've started a project to port Io l's C code to C++ and replace the coroutines implementation. Most of my projects on github are related to Io in some way: <http://github.com/dennisferron>

<comment><USER16> Interesting thankyou. I will have a dig.

</comment></comment></comment></comment></comment><comment><USER18> The thing I never understand about these articles: why aren't C, Java, C++, C#, Ruby, Python and other mundane languages "worth checking out?"

I don't think you should assume people have used all of these, and they're all worth "checking out". Millions of people use these languages every day to create 99% of the software you're using right now. Maybe it's worth a shot if you don't know one of them to learn one and maybe even get a job with it. There's a lot more opportunity to learn Ruby and get a job in it than there is for Scala.

<comment><USER19> I think it is more assumed the many programmers know or are familiar with those languages. I know Java and Python. I have some limited experience with C, C++, & C#. I looked at Ruby. I would assume the majority of current programmers are in a similar situation.

The draw of these other languages like Factor, Io, Erlang, Haskell, and the other is that they are different. Erlang focuses on concurrency in a way that is not seen in the common languages listed above. Haskell is strongly typed functional language with lazy evaluation (I think I have that right). I don't know where Factor and Io fit it. By learning these other languages, I would hope to learn different ways to solve problems or to think about things. I would argue it isn't about learning them for more opportunities, but for a broader perspective in general.

</comment></comment><comment><USER20> There are a couple of languages I'd add to the list:

      * Mozart/Oz - will (probably) change your thinking about concurrency.
      * Clay - really pushes the idea of generic programming.
      * Rust - typestate makes assertions part of the type system.
      * Cilk - concurrency again.

BitC was looking quite interesting too, but I haven't heard anything about it for some time now; I hope the project hasn't died off.

<comment><USER21> This is a more interesting list than the OP's. Thanks !

</comment></comment><comment><USER22> fogus links to his list <http://news.ycombinator.com/item?id=3083561> which I think is one of the better lists of this type since it covers the paradigm space more thoroughly than most such lists.

The only type of language I rarely seen mentioned are dependently typed languages like agda or epigram. maybe it is because they are not yet practical. They are an interesting directions things could take though. Fortress is another interesting one.

Another interesting language is Aldor. It's unique in that it has a weak form of dependent types and is a statically typed Computer Algebra/general programming language. Going through the types of the language is an education itself and a reasoning helper. While some take issue to the hierarchy it defines, it is the only one I know that has tried and is useful. The type provide some scaffolding for reinforcing the novice math person trying stuff out.

</comment><comment><USER23> Haskell at the top of the list was one that I really enjoyed. It has a pretty scary learning curve but its wonderful having a language that feels so consistent.

<comment><USER24> I disagree. I think a lot of uninitiated potential haskell users are turned off by hearing about the "scary" learning curve. The key is to forget everything you know about imperative programming going in. There's a temptation to compare each Haskell idea with the similar idea in whatever language(s) you already know. Approaching with an open mind turns that "scary" learning curve into an easy and rewarding journey.

<comment><USER25> The scary learning curve isn't really a bad thing, I was never turned off by it, the main turn off for any programming language for me is going to be resources which is why I chose python over ruby (as python has in my opinion much better documentation and community).

As a disclaimer I've never really learned haskell yet, I do go through tutorials and solve some problems with it and everything now and again but I haven't fully grokked the language yet.

</comment></comment></comment><comment><USER26> If you're interested in actually checking these out, 7 Languages in 7 Weeks ([http://pragprog.com/book/btlang/seven-languages-in-seven- wee...](http://pragprog.com/book/btlang/seven-languages-in-seven-weeks)) covers five of these (Haskell, Scala, Io, Clojure, Erlang) as well as Ruby and Prolog (Prolog is my favorite language from the book, oddly missing from this list). Apart from being a very good introduction to syntax, it teaches you the unique features of each language and why you should care about it. Highly recommended.

</comment><comment><USER27> I would add Falcon (<http://falconpl.org/>) to the list. It's a pretty capable language, but for some reason nobody's heard of it.

<comment><USER28> Also not getting mind share but should: Mozart/oz, fantom, gosu, nemerle. And what happened to the language that

 _stole the show at 2009 JVM Language Summit_

<http://www.javaworld.com/community/node/3440>

</comment></comment><comment><USER29> "Io" sounds like "the next SELF". I'll try it out for sure.

<comment><USER30> Try it. Io is really a joy to use. I don't use it for any professional work yet but I've used it to craft some little tools for my personal use. Really fun to use.

</comment></comment><comment><USER31> I skimmed the headings and was briefly interested in reading about this "Epilogue" language that I hadn't heard of before, but it turns out it was actually just an epilogue.

</comment><comment><USER32> On an iPad 2, the text appears, and then dissapesrs. I can read the comments only.

</comment><comment><USER33> I totally expected the section titled "Epilogue" to be about a Prolog variant.

</comment><comment><USER34> The aricle is OK, but I had to laugh with this starting quote:

""The most obvious common 'personality' characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions. Also, most hackers are 'neophiles', stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively individualistic and anti-conformist." – Eric S. Raymond, The Jargon File"

Which reminds me of that immortal Reservoir Dogs line: "let's not start sucking each other's dicks quite yet"...

<comment><USER35> Any article that starts with a 'call to authority' where the authority is Eric Raymond is likely to be poor. And lo the article is quite poor.

<comment> mkr-hn But it also invited this comment: <http://news.ycombinator.com/item?id=3083782>

So I'm conflicted.</comment></comment></comment>


Shooting 360° videos with your iPhone - <AUTHOR> https://www.producthunt.com/tech/splash-4 <comment><USER2> This app is crazy! Never seen anything like it before. 360s videos on your phone with no camera? Boooonkers

</comment><comment><AUTHOR> Saw these guys pitch yesterday at SXSW, today they're on Producthunt. Seem to be everywhere these days...</comment>


Should I fire someone who unnecessarily wrote 500 lines of code? - <AUTHOR> https://www.quora.com/Should-I-fire-someone-who-unnecessarily-wrote-500-lines-of-code?share=1 <comment><USER2> Don't know about whether the person should be fired-- but this reminds me of a guy I used to work with. He was notorious for finishing his tasks slowly; and what he would do was, if given even a simple task, end up writing a huge module for it, that was, though modularized, full of crappy unnecessary code. It was kind of a weird stubborness in him. He refused to use existing utils/methods that other people had written as well; he would not improve existing utils or use them, he would just write his own arcane esoteric behemoths even to solve simple problems. It frustrated the hell out of me but he never seemed to draw the ire of the other developers on our team. I ended up leaving that company and discovered a few months later he was let go.

<comment><USER3> Sounds like he was trying to design job security.

</comment></comment><comment><USER4> To anyone being harsh to this guy I suggest you go back and look the code you wrote 5 or 10 years ago. Now think how bad the code you write today will look to you 5 to 10 years later.

Edit: I lost my train of thought. I meant to say, imagine how your code looks today to someone as good as you but with 10 years more experiences than you.

<comment><USER5> Also, 500 lines of tested, working code takes most people quite a bit of time to write.[1] So where was this developer's team lead or manager while they were writing all this unnecessary code? Why didn't they give the developer feedback much sooner? This sounds like as much of a management failure as a technical failure.

[1] If the developer only spent a couple of hours writing it, they wouldn't have wasted too much time, so why should anyone be talking about firing them?

</comment></comment><comment><USER6> Yes, but only the second time they do it. After you've explained to them why it was a bad idea the first time.

</comment><comment><USER7> It looks like everybody takes the claims in the question at face value. It looks to me like a junior team leader doesn't understand the code written by a senior. All code can be made shorter. It doesn't mean it's better or even cheaper. All the shortcuts you take will come back and byte you.

</comment><comment><USER8> I would answer, but Quora has made it impossible to see any context on the question.

<comment><USER9> [https://www.quora.com/log/revision/233604881](https://www.quora.com/log/revision/233604881)

[https://pastebin.com/myYsRUjq](https://pastebin.com/myYsRUjq) was in the original question

" It was basically that we needed 3 instances of the same functionality, each instance differing by the value of two variables. The coder could not see this and made function1 for instance1,function2 for instance2 and so on with function1 and function2 being mostly similar."

</comment></comment><comment><USER10> 500 Lines- that sounds like the average electronics guy who started coding unrolling a loop with copy and paste. Yes, such a thing exists.

There are "Programmers" who do not know about basic elements of the language they use. For years.</comment>


Yelp extends academic dataset - <AUTHOR> http://engineeringblog.yelp.com/2014/08/the-yelp-dataset-challenge-goes-international-new-data-new-cities-open-to-students-worldwide.html

<comment><USER2> Note the restrictions in the terms of use, which prevent redistribution of the data or any summaries "on any website or other electronic media not covered by this agreement."

Would this prohibit making a blog post on an analysis of the data?

<comment><AUTHOR> A blog post analyzing the dataset is fine, and many have been published. Our limitation is on redistribution of Yelp's dataset itself.

<comment><USER3> What about visualizations of analysis of the data (say using an R Shiny app), ensuring of course, that the raw data could not be downloaded?

<comment><AUTHOR> Visualizations and analysis of the data are allowed and encouraged. If you are a student you should submit to the challenge as well!

</comment></comment></comment></comment><comment><USER4> Maybe I am reading it wrong, but the license seems to say that Yelp exclusively owns IP rights to all derivative works. Hopefully I am reading it wrong, but if not then definitely not cool in my opinion.

<comment><AUTHOR> Yelp retains rights to all derivative works of the dataset itself. This would not apply to papers, articles, or algorithms analyzing the dataset.

<comment><USER5> What does derivative work mean? Why is a graph or data summary not a derivative work?

<comment><AUTHOR> [http://en.wikipedia.org/wiki/Derivative_work](http://en.wikipedia.org/wiki/Derivative_work)

</comment></comment></comment></comment><comment><USER6> This is great...I'm teaching a couple of classes next year on data analysis and it's incredibly helpful to have real-world data that is _fun_...things like Census/NOAA data are great, but too abstract (initially) for the average novice to really ask interesting questions of.

But everyone knows what it's like to eat at a crappy/great restaurant, or where such places might be located, or how people might review as a cluster...and so everyone comes in with testable assumptions and hypotheses that are fun to explore.

This item brought to mind yesterday's front page post on "Seven habits of highly fraudulent users" ([https://news.ycombinator.com/item?id=8116047](https://news.ycombinator.com/item?id=8116047))...does Yelp do any _extra_ processing of this academic set (beyond whatever regular cleaning they do of spam accounts)? It'd be interesting to test hypotheses on signals of spammy/fake accounts (OTOH, I imagine Yelp would probably prefer such trends not to be so apparent in bulk data)

<comment><AUTHOR> You can imagine this as a scrape of our website for the specific businesses listed (and their associated recommended reviews and tips, and the associated users for that content) on the date the dataset was generated (which you can assume is the last timestamp).

For more information about recommended reviews please check out: [http://officialblog.yelp.com/2013/11/yelp-recommended- review...](http://officialblog.yelp.com/2013/11/yelp-recommended-reviews.html)

Let me know if you have any other questions!

</comment></comment><comment><USER7> Less research is needed: [http://blogs.plos.org/speakingofmedicine/2012/06/25/less- res...](http://blogs.plos.org/speakingofmedicine/2012/06/25/less-research-is- needed/)

<comment><USER3> I think this competition is a good examples of what the author advocates for - asking the right questions, not the tireless ones. There's no specific prompt and no cliche single purpose to the exercise. Further, the competition is aimed at students - which means in all likelihood, most projects will be relatively short, succinct examples of cool things that can be done with the data (the door is not open to more data collection, to studies that require a lot of time, and the dataset is small enough that computing time/infrastructure should not be an issue).

The real challenge is having the creativity to come up with a question worth asking. From Yelp's perspective, I imagine the most value they get from hosting this competition is the (potentially monetizable) ideas for what types of business problems could be solved using their treasure trove of data.

I'm sure they could have their data science team build an incredibly sophisticated model for some specific prediction task (probably more sophisticated than what any student could reasonably submit) - but if that specific prediction task turns out difficult or not monetizable, that's a huge investment lost. Having many students look at many different ideas is more likely to result in finding the right question.</comment></comment>


Internet outage takes down Twitter, Netflix, PayPal and many others - <AUTHOR> http://www.independent.co.uk/life-style/gadgets-and-tech/news/netflix-twitter-internet-down-not-working-broken-paypal-ebay-facebook-instagram-a7374506.html <comment><USER2> I did not know so many services depended on DynDNS. Especially major apps. Figured they had their own DNS or used someone less "retail."

Someone might have found the Internet's carotid.

</comment><comment><USER3> yeah so unfortunately independent.co.uk is down too from here :(</comment>


The official Covid-19 exposure notification app for Germany - <AUTHOR> https://github.com/corona-warn-app <comment><AUTHOR> UK NHS also released theirs: [https://github.com/NHSX](https://github.com/NHSX)

<comment><USER2> it doesn't appear to be being updated last update was 9 days ago. something that supposed to already be released and working, but is in fact delayed, it doesn't look like much activity on it

<comment><AUTHOR> Seems like a "throw it over the fence" development model. See also this issue: [https://github.com/nhsx/COVID-19-app-Android- BETA/issues/49](https://github.com/nhsx/COVID-19-app-Android-BETA/issues/49)</comment></comment></comment>