Ask HN: Can refreshing my advanced math background turn into a related job? - <AUTHOR> Hi HN! My situation is a little unusual so I'll just explain. Many years ago I got a master's degree in mathematics from a U.S. university, so I have a solid, if rusty, background in mathematics. Since then among other things I've worked as a generalist programmer at smaller companies.
A math background has been more of a curiosity than an actual asset at these jobs. However, I'm getting older and starting to appreciate the importance of domain expertise instead of just being able to write code. I'd like to build on my math background, and I'd also plain just like to get back into it, reading textbooks, sketching solutions, all of that. It's fun. Programming is fun, too.
So my question is whether it's realistic to expect that putting effort into (re)learning advanced math will translate into a job where that knowledge matters. For example a while ago I bought Bishop's machine learning textbook. I bogged down in the second chapter or so. I know if I really focused, I could get through it. But would anyone care? Obviously not as a resume line item, which would be ridiculous, but having the knowledge.
I'm currently comfortably unemployed and can focus on this or whatever I want for a while, but I'll need to work again eventually. Is there a way to self-study, with my existing background, into a job that's part advanced math and part programming, or would it all be just a hobby unless I go back for a PhD?
Thanks! <comment><USER2> I went straight into industry with an undergraduate math degree. My success was mixed results. One on hand, it was easy enough to find math pedagogy jobs that did not pay very well. On the other hand, it was easier finding data science / machine learning jobs that technically require and advertise lots of math but in reality are extremely dry logistics.

I have found some success in finding nonconventional programming jobs that have job titles seemingly generated by a bot where free-thinking and drawing up imaginative approaches is appreciated.

Math is everywhere, and every programmer could stand to learn or appreciate more of it so I say to you best of luck in your endeavors but be flexible, since almost nobody knows where they really need math until you explain it to them. A lot of the time math has served me the most because I've already seen a problem or its variants and I _know_ a solution exists.

</comment><comment><USER3> If you like math, study math. But I don't think refreshing your math skills is the best return on investment if your goal is job hunting.

If you're looking for an ML job, the bar is mostly set by coding skillset and ML knowledge, which is a narrow area of math compared to what you might cover in a graduate math program. That said, it is important to be comfortable with the math that's relevant to ML.

Without direction you could spend a lot of time learning things that aren't going to help in your job search.

<comment><AUTHOR> My impression of ML has been that there are two types of jobs: one, the most common, where you're basically plugging values into tools like scikit-learn or TensorFlow and spending most of your day-to-day fussing around with data wrangling and general software development; and two, the heavy math jobs involving integral signs and Greek letters, which are much rarer and done mainly by people with top-tier PhDs at research labs.

Since at my age going for a Stanford PhD isn't an option, you probably mean by a better return on investment that I should dig into scikit-learn, Hadoop, the current AWS/Google Cloud/Azure options, that sort of thing. Is that right? Which, that's definitely sensible but not exactly what I was hoping for, since it's basically the same as the regular programming I've done, just with a different set of libraries. On the other hand it makes some use of my math background, and perhaps the dream of reliving grad school at a paid job isn't totally realistic anyway.

</comment></comment><comment><USER4> I've got the math PhD, and the job that requires a mix of math & programming. Living the dream, right? Except, my employer kinda stinks (and it's a startup, so our future is far from certain), so I've always got an eye on job listings. Only, I'm not in ML so the only real openings that I see that I'm "generically" qualified for are in quantitative finance. I don't like cocaine, so that one's out too (sorry for the broad brush, quants, but I've met a few too many coked-up brogrammers in your field). If all I had was a bachelors, maybe I'd go for actuarial work, but that would mean ditching my programming skills.

I'm older, and stuck living in an expensive metropolitan area due to family stuff. I feel stuck in a job that I'm not satisfied with. I expected that having a PhD would be a boon, but what I'm finding is that it's hard to find a good job that actually depends on the PhD -- it feels like an albatross, but I can't exactly hide it because that would be a decade-wide hole in my employment record.

<comment><AUTHOR> The number of technical jobs that actually require a math PhD must be relatively small. I'm on the other end of it, trying to avoid the situation where the degree type is meaningless, because this means that, as far as credentials go, you're competing with anyone with a college degree. I suspect in your case you have more room to maneuver than you think, but what do I know? Good luck to you.

<comment><USER4> > The number of technical jobs that actually require a math PhD must be > relatively small.

Yeah, that's my point: if you're looking for a boost to your credentials, my experience is that a PhD in math won't really open that many doors. By all means, pursue a higher degree for the sake of your personal enrichment! But a word of caution does seem necessary if this is a career-oriented choice.

</comment></comment></comment><comment><USER5> You can likely land a pretty decent job as it is. People with advanced math degrees who can also program are in demand. Or at least that was the case pre- virus. If you want to take it easier and apply for a job when you feel ready, that's a fine choice too - you will do as well as anyone can in the current circumstances.

</comment><comment><USER6> As someone who also possesses an unused advanced maths degree, I would suggest pursuing mathematics for the sheer fun of it first and then decide in a year if you really want to be involved in statistical modeling, ML, deep learning or whatever.

You may end up deciding that being an insurance actuary is the right challenge: there are multiple exams to pass involving a lot of maths and the pay is quite good.

For recreational maths I'd recommend rereading Polya and playing with "Crossing the River with Dogs" and "Math Recess".

<comment><USER7> In financial capitals, actuaries are amongst the top earners on par with lawyers.

</comment></comment><comment><USER8> > I bogged down in the second chapter or so. I know if I really focused, I > could get through it. But would anyone care?

Yes they would. But you have to be able to use it to solve real problems.

Alternatively, you could be a dev who supports a science team.

<comment><AUTHOR> Do you know if the typical ML hiring process is able to distinguish between someone at the MOOC/"Machine Learning with [current popular language/library]" level from someone who's done hundreds of problems in a graduate-level math textbook? I'd love to be convinced because as I said I'd like the excuse to work through the book, but at the same time, as has been suggested elsewhere, there's more practical stuff to focus on too.

<comment><USER8> Well, obviously it depends, people can be successful from both camps based on other attributes. But I will say when we interview we often try to weed out people who just took a handful of courses that focus on TensorFlow, but lack general science intuition and depth.

...On the other hand, if you're already a dev and want to become an ML Dev, knowing how to do science deployments, work with big data, and familiarity with APIs like TF would be more valuable than knowing how to do proofs.

<comment><AUTHOR> I suppose it's like software development generally. To be good at it you need a sense of what good programming feels like, but advanced books like Knuth's "The Art of Computer Programming" aren't really relevant to the day-to-day work of gluing together libraries and writing code that doesn't go deeper than for loops.

Similarly I suppose most ML work is done with some solid basics but advanced math textbooks aren't really needed, and people actually working at the theoretical advanced math level are rare and in a handful of academic positions or corporate research labs requiring high credentials or other specific qualifications.

Thanks for your input.

</comment></comment></comment></comment><comment><USER9> You may want to act fast. Data science and deep learning are still a bit young, and I can see shops hiring someone with strong math chops. I have some direct experience with this as well (on the hiring side). However, this may not persist for a long time. I saw the same in finance. In the early days, people would hire smart people with math backgrounds for finance roles. After a while, universities started to have specialized Masters degrees in quantitative finance. Speaking to friends, this seemed to have made it harder to break in for someone with just math talent.

</comment><comment><USER10> Well, it could help you get a job at Subway Sandwich:

[https://www.independent.co.uk/news/science/that-figures- prof...](https://www.independent.co.uk/news/science/that-figures-professor- who-had-to-work-at-subway-dazzles-world-of-maths-after-solving-centuries- old-8625637.html)

</comment><comment><USER11> I don't think you can get a job on math skills alone unless they are on a PhD level or higher. A Master's degree in math isn't worth very much, tbh. Bishop's book is really good though. I've also been using it for self-study.

</comment><comment> notsag-hn Would you read through that book and generate some material that can prove you did it? Like a project on Github with a nice readme or some blogposts? If you have that knowledge and sell it properly you're grand, you'll get the job.

</comment><comment><USER7> One of my friends got his PhD in math a couple of years ago. He has since been working for various merchant banks and investment managers as a consultant. I have come across several other math majors in insurance industry as well.</comment>


Strenuous daily exercise may shorten, not prolong, longevity - <AUTHOR> https://www.titech.ac.jp/english/news/2020/047276.html <comment><USER2> It would be interesting to write a computer program that generates random claims about some aspect of human health. For each random claim, the program would search the scientific literature for peer-reviewed studies that support the claim or its converse. The results might be surprising.

</comment><comment><USER3> Relatively small sample size, and lifestyle issues may dominate the effect postulated</comment>


Computer SciFi Novel, Blue Screen: How Peter Gustafson Defragmented the World [pdf] - <AUTHOR> https://BlueScreenTheBook.com/Blue_Screen_Kyle_Benzle_2020.pdf <comment><AUTHOR> Peter Gustafson wants to save the world. In the year 2984, Peter is an average kid with a secret; he's a well-behaved tenth-grader by day but cryptographic entrepreneur and hacker by night. When the electricity mysteriously goes out in his hometown, Peter takes it upon himself to investigate. The adventure leads the young hacker to a large transmitting station and into a battle of wits with the greatest AI ever created. The machine requires a human to help "throw the switch" and give it full control so engineered the power outage as a test to lure its latest recruit, Peter Gustafson.

Amazon: [https://Amazon.com/dp/B084GHLYSX](https://Amazon.com/dp/B084GHLYSX)

GoodReads: [https://GoodReads.com/book/show/51007638-blue- screen](https://GoodReads.com/book/show/51007638-blue-screen)

Book Website: [https://BlueScreenTheBook.com](https://BlueScreenTheBook.com)

Personal Website: [https://KyleBenzle.com](https://KyleBenzle.com)

Free Online PDF: [https://BlueScreenTheBook.com/Blue_Screen_Kyle_Benzle_2020.p...](https://BlueScreenTheBook.com/Blue_Screen_Kyle_Benzle_2020.pdf)</comment>


U.S. doctors on coronavirus frontline seek protection from malpractice suits - <AUTHOR> https://www.reuters.com/article/us-health-coronavirus-usa-lawsuits/u-s-doctors-on-coronavirus-frontline-seek-protection-from-malpractice-suits-idUSKBN21K2IQ <comment><AUTHOR> I agree with them, but only if they charge patients xx% less.

First, the cost of care assumes ability to sue for malpractice, and secondly, doctors admit (we all know) that the care will as good as in other times...due to sheer volume.</comment>


PushBullet: From 0 to 15,000 users in 2 weeks - <AUTHOR> http://blog.pushbullet.com/2013/02/03/from-0-to-15000-users-in-2-weeks/ <comment><USER2> Congratulations. It is always inspiring to see successful product launches.

To keep the press buzz going, consider directly pitching journalists that cover Android stories. Send them a three to five line email about your app and the growth you have seen over past two weeks. To find the emails of these journalists, Google: [insert name of newspaper] + [Android], and you will find journalists who write about Android stories. Most of the time, they will have the writer's email there. And if not, you can try email@example.com.

Here is an example email pitching PushBullet:

"Hi [insert journalist's name],

I see that you cover Android stories for [insert newspaper].

I am the founder of PushBullet, which is an app that makes it easy to push files, lists, addresses from your desktop browser to your Android devices. We launched two weeks ago, and have grown quickly to 15k users. We have been featured on LifeHacker, Geek.com, and Android Life. In the coming weeks, we are going to do [insert new features].

Please let me know if you want to set up a time to talk about PushBullet or if I can answer any question you may have over email.

All the best, Ryan [insert your phone number, journalists like calling people]"

</comment><comment><USER3> Start charging, ASAP.

Even something as simple as $2/mo for 500 pushes. It creates perceived value and with that you can then use to create more buzz by then giving something of value away.

Talk to #android blogs and give them coupon codes for accounts that they can then give away and they will be more than willing to help you promote.

Whereas before if you pitch them to write about something free it just gets lost in the fray of blog posts pointing out other free things that come and go.

Good luck.

<comment><USER2> Agreed, but he might consider following Dropbox's tiered pricing approach and marketing strategy.

Incentive free users to market the app for you, and only charge heavy users. Down the road a few months, when he has proven the app's value to a large number of free users who have in turn told their friends, he can start charging everybody. This approach would still show perceived value by charging heavy users, while not limiting the app's growth potential by giving access to everybody.

<comment><USER4> This approach worked for me. I worked on a free Windows program for about 8 months or so and it because fairly popular. At one point I decided to charge for it. I released a new version that provided basic free features and additional features for an upgrade. My first month was only $400 in sales but the second was $1800. The large use base I had was great at word of mouth and I made those sales with no advertising costs at all.

</comment></comment></comment><comment><USER5> > _15,000 people / 25,000 things_

So. How many _active_ users?

And how many have left after pushing just one thing (whatever it means)?

\--

(edit) Re-read my comment and it comes across as dismissive. I didn't mean that. What you got in terms of raw numbers is impressive, but since 90% of your traffic came from Reddit, I'd show very cautious optimism. Reddit crowd is easily excitable and it tends to be supportive for the sake of being supportive. They are the do-gooders and this translates into overly positive skewed feedback. Try and not get carried away here. Having a lot of foot traffic is great. As you correctly pointed out, it created a positive feedback loop and helps self-propel the promotion. But it's really of little value if no ones sticks around. I don't know your active/return user counts, but judging by 25k/15k ratio it's probably not mind-blowing, in which case you should use your current momentum to try and fine-tune the details. In fact, you must. Engage the visitors better and make them stick. The launch splash is a one-time event and the level of attention you got so far will be very hard to replicate.

<comment><AUTHOR> I agree with your assessment that active users is the only count that really matters. I haven't actually got the numbers myself but I watch the split between users and things pushed and it is growing wider every day. This is my proxy right now.

I haven't messed with weekly active users, for example, because my sample space of time is so small I couldn't really make any statements.

The other thing I take as a good sign is that the number of registered devices has officially overtaken the number of registered users, meaning people have taken the time to register more than one device more often than not even registering one.

</comment></comment><comment><USER6> Been using it since day 1 after seeing your post on /r/Android. Really fantastic app that just works perfectly. The fact you got a Chrome extension out so quickly made me love you.

<comment><AUTHOR> I really liked this post so I'll share a funny story about the Chrome extension.

I spent a couple evenings getting pseudo-authentication working with OAuth to log people into the extension, it was annoying and a real pain.

Then, the third evening, I realized that as an extension, any ajax request I make will have access to the same pool of cookies as normal browser requests, so it turned out that if a user is logged in on the site, they're automatically logged in on the extension, too.

This made everything SO much easier, but I had wasted like 8 hours of work to get there :)

<comment><USER7> It's amusing how things like that can happen. I felt like I was spinning my wheels on a problem with a project -- consisting of treating each viewing of a video in a 24 hour period as separate orders for statistical purposes -- yet not cluttering the users history (among other things) with multiple "orders."

I started going through a complex process to make sure everything was properly collapsed and still recorded when it suddenly occurred to me: "Hey, we already have order renewals for dvds. This is basically the same thing."

So, a day or two of complex work ended up being solved by s three line change that I should have thought of immediately. Good times. :)

</comment></comment></comment><comment><USER8> Awesome. I'm integrating GCM for many apps where I work & I'm looking for more use cases.. One which works well is a live wallpaper which accepts an image as a push & displays it as part of a slideshow.. Just for kicks for myself but might get around to packaging it & making a simple web app to run it.

</comment><comment><USER9> Great post. Short, straight to point and useful. Thanks for sharing your experience. Do you have any advice on how to get exposure on reddit? In other words do you think your karma helped, did you have friends who helped you promote the post up? Did you do anything specific besides posting the blog post? Thanks.

<comment><AUTHOR> I actually submitted the launch post on reddit as an afterthought to the HN submission and was shocked when it was going better than the HN post. It kind of destroyed my preconceived notions of HN as the best launchpad and reddit as no-op on that front.

I had a couple friends I told about it and I'm sure they upvoted the submission, but I think really I did well because PushBullet is exciting to Android users and r/android is a hotbed of people looking for exciting things to do with the devices they know have a ton of potential.

</comment></comment><comment><USER10> How exactly are the files sent? You mentioned using "GCM as a tickle" are you only using it for routing?

<comment><AUTHOR> Files are pass-through uploaded from users to an S3 bucket and given a UUID name. That name is stored with the push data in Postgres and a GCM tickle is sent to their phone with a push_id to act on.

The app receives the tickle and makes a quick api call for the push data and sees it needs to get a file. It then asks for the file and I make sure they have permission to download it and then let them.

Over engineered? Maybe :)

</comment></comment><comment><USER11> Is there a comparison somewhere of what this offers over the Chrome-to-phone extension?

[https://chrome.google.com/webstore/detail/google-chrome- to-p...](https://chrome.google.com/webstore/detail/google-chrome-to-phone- ex/oadboiipflhobonjjffjbfekfjcgkhco?hl=en)

<comment><AUTHOR> Basically, its a superset of Chrome-to-Phone functionality that supports newer devices and takes advantage of the new notification features in Jelly Bean. Hope that helps :)

</comment></comment><comment><USER12> First off, congratulations! I saw the initial launch on /r/Android but didn't try it until now. Very convenient and easy to use; however I have a question - The pushes are insanely fast, I mean they are _quick_. I'm assuming you have a service running for the App and it's always listening for new pushes? Have you done any research on how this affects battery and the like?

<comment><AUTHOR> Actually, I'm using Google's Cloud Messaging infrastructure which means I get the benefit of the same technology Google uses to deliver Gmail notifications, etc. It also means there isn't any incremental battery life harm. :)

</comment></comment><comment><USER13> Very nice app. I just downloaded/signed up today after seeing your app on a makeuseof.com article today 2/8/2013. [http://www.makeuseof.com/tag/5-ways-to- get-data-from-your-de...](http://www.makeuseof.com/tag/5-ways-to-get-data- from-your-desktop-to-your-android/)

A suggestion: add a simple share button since most any Android app now has that option.

Future feature: push to friends

</comment><comment><USER14> It's awesome how this app is Android Only. I think this is a sign of changing winds, Apple is putting so much pressure on developers by its strict App Store guidelines and long review process...

It might become more viable for developers to first develop an app for Android, make it free, just to test the waters, and if the app is success, make a paid-for iOS version.

</comment><comment><USER15> Awesome app! Already loving it! As others, I would gladly pay for it!

A tip for the Chrome Extension: A majority of the times I have wanted to push a link (the default) I want to push the page I am on. I suggest that you prefill the "Link title" and "Link URL" field, if possible!

<comment><AUTHOR> Glad you like the app! And the Chrome extension will pre-fill for the page you're on, but not for tabs you had open before you installed the extension :)

</comment></comment><comment><USER16> Is it intentional that you don't have a point of contact on the web-site or app for feedback? I have some after using it and not sure how to pass it on.

<comment><AUTHOR> I have firstname.lastname@example.com on the Play Store for feedback, and yeah I should get a contact page up on the website too.

</comment></comment><comment><USER17> I love this app! This was actually the inspiration for my MHacks hack this weekend: <http://mypast.es>

</comment><comment><USER18> Congrats! I am making a list of launch strategies and will post on my blog later, there are so many great tales out there (especially on quora)

<comment><USER18> Posted a link to discuss launch strategies. New to posting on HN although signed up a while ago, would appreciate if people could post any older threads that are relevant. <http://news.ycombinator.com/item?id=5164583>

</comment></comment><comment><USER19> How much money are you making from those 15K users?

<comment><AUTHOR> Presently, $0. Yeah, I know that's not as good as anything > $0 but two weeks ago I didn't think this was going to be a 'real thing'.

I'll figure something out, I work full time so I can manage the costs without noticing but that isn't an answer so much as a deflection :)

<comment><USER19> I'm not giving you a hard time about it. At all. But you should be already looking for ways to profit from this. In one month it will hit 100K users, and suddenly you have a huge infrastructure bill. Plus the fact that you can get sued the fuck out due to DMCA, patent trols, and such. Run some tests, charge for it, and see what the apps real world traction is.

<comment><USER20> Worrying about DMCA, patent trolls, etc, doesn't sound productive for a presumably young person with relatively nothing to lose financially and the operation at least under the umbrella of a proper corporation or LLC. Get the money rolling in, segregate it from your personal finances, pay yourself a salary and pay your taxes. Listen to feedback, keep innovating and hope for the best. Don't be paralyzed by what are at this point, made-up fears of the worst.

</comment></comment></comment></comment><comment><USER21> Congrats on the great launch - looks like you're building on momentum too.

How are you in contact with users? Any email marketing?

<comment><AUTHOR> Presently no, thats something I need to get on.

I've set up an account and am leaning toward SendGrid right now since I dont need an SMTP server as MailGun requires.

Am I wrong about that, btw? It's all new to me. (I use Google Apps for Gmail, etc. and MailGun wants the email dns stuff which is a problem.)

<comment><USER21> No right and wrong here - just need to test/check out your options before "settling". I'd also check out Mandrill, Postmark, and PostageApp, if you haven't already!

</comment></comment></comment><comment><USER22> I missed the initial launch. But I just tried out the app! It is very easy to use! Congratulations!

<comment><USER23> Me too, just installed together with the Chrome extension!

</comment></comment><comment><USER23> Have you thought about adding the possibility to share the pushed content to other phone app?

</comment><comment><USER24> iPhone user here _ducks_ Didn't I see a Google IO keynote 2-3 years back where Sergey demoed addresses, directions, links, etc. pushing from the sync machine to the phone? Did this never come to be? Or did it lack in functionality?

<comment><AUTHOR> There might have been, it wouldn't surprise me if they were talking about Chrome to Phone, an extension for Chrome they built for pushing to your Android phone.

The problem is Google never really took it any further and stopped supporting it. Classic example of a project that simply withered without any love.

</comment></comment><comment><USER25> Typo on your home page: "Unleash Android's rich notifictions"

<comment><AUTHOR> Ah, thanks for pointing this out. I'll push the fix as soon as all of this dies down. No need to rock the boat while there's a party :)

</comment></comment><comment><USER26> Congrat! Any plans for an iPhone app?

<comment><AUTHOR> Eventually, of course. Right now though I have a ton on my plate as it is and zero iPhone experience :)

</comment></comment><comment><USER27> Should have posted on reddit!

</comment><comment><USER28> why use Redis for sessions?

<comment><AUTHOR> I'm basically just using it as memached right now. I need to use something since I have more than one app server so storing it in memory on the machines won't work.

</comment></comment><comment><USER29> Awesome tool!

</comment><comment><USER30> How can people be so naive? THIS is the marketing throw for VC.

<comment><USER31> I "like" that you have to create a throwaway account to say the things you think.

<comment><USER30> It's just the state of things today. Speaking the truth is borderline criminal these days, people prefer to live in an imaginary bubble.

<comment><USER32> Borderline criminal? Do you think that your comments here are going to lead to you being arrested? Are the snatch-squads coming for you? Or is your real fear that some meaningless "karma score" on your other account might go down a bit? What a disaster that would be, given that it's such a meaningful value and lowering it would really affect your life. Having a throwaway account for comments you think people won't like says a lot more about you than about society.</comment></comment></comment></comment>


The Meaning of Null in Databases and Programming Languages (2016) - <AUTHOR> https://arxiv.org/html/1606.00740 <comment><USER2> Not to be flip but the crux of the issue is (I think I've got this correct):

[https://en.wikipedia.org/wiki/Open- world_assumption](https://en.wikipedia.org/wiki/Open-world_assumption)

vs.

[https://en.wikipedia.org/wiki/Closed- world_assumption](https://en.wikipedia.org/wiki/Closed-world_assumption)

Which means we're dealing with philosophy, no?

</comment><comment><USER3> > The relational null represents the absence of a value in a field of a > record; whereas the programming language null represents one of the possible > values of a variable.

This sounds like splitting hairs, especially as they never seem to explicitly define what "value" means. How is it _not_ a value? It sure looks like a "value" to me.

It's not just the occasional textbook that uses this nomenclature. In SQL itself, you type "INSERT INTO mytable VALUES (NULL);" to insert a NULL. Did the designers of SQL not understand what "value" means?

They also claim that databases are special in that they use "three-valued logic" \-- which would seem to imply that NULL is a third _value_. Does "value" have different meanings in different contexts? For the word whose precise definition is central to their thesis, it has some remarkable linguistic flexibility.

> Here is a partial list of the reasons why NULL can occur. 1. The field has a > value but it isn't known... 2. The field has no value because it isn't > applicable...

These are all reasons I've seen people use null in programming languages, too.

> The field is not allowed to have a value. For example, the root node of a > tree has no parent node. The fact that the field is NULL in this case is not > due to missing information.

Are they really trying to claim this is somehow unique to relational databases? Trees work exactly the same way in programming languages.

<comment><USER4> I think I understand what they're trying to say.

The value of a variable with type "non-nullable 32-bit integer" is an element of the space {-2 __31, ..., 2 __31 - 1}. The value of a variable with type "nullable 32-bit integer" is an element of the space {-2 __31, ..., 2*31 - 1} U {NULL}.

There's a "main space", and an extra singleton space tacked on, containing the "NULL" element.

So NULL isn't a value in the "main space", and therefore in some sense "isn't a value". I think it's wrong for the same reasons you stated, but I think this is what they were trying to describe.

</comment></comment><comment><USER5> This is a very interesting article, especially since I can now appreciate the meaning, having spent the last year doing both SQL schema design and backend development that works off that schema.

The main point here is that Language null is a possible value, whereas Database NULL is a composite with several different meanings, which can often trip up people who are not familiar with how some SQL systems treat it (NULL <> NULL, etc)

The important takeaway from this article is that DB NULL can arise for a variety of reasons (taken from the article):

1\. The field has a value but it isn't known.

2\. The field has no value because it isn't applicable.

3\. A field value could have been inferred but was not inferred, because of an overriding requirement.

4\. The field has a value but it is not within the domain.

5\. The field value cannot be determined due to an exception.

As the author suggested, "NOT SET" does a good job carrying the meaning behind what NULL is used to accomplish (I also think "NOT GIVEN" or "NOT AVAILABLE" could work and keep the idea.

<comment><USER3> I don't understand how those aren't also descriptions of Language null. Haven't you seen programs that use null in those ways (and several others)? I certainly have.

</comment></comment><comment><USER6> Fun factoid, VBA/VB6 dichotomizes between the "NULL" of value (keyword Null) versus the "null" of reference (keyword Nothing).

        Dim x
        x = Null

        Debug.Print "x", x
        Debug.Print "x = x", x = x
        Debug.Print "x <> x", x <> x
        Debug.Print "x = 0", x = 0
        Debug.Print "0 = x", 0 = x
        Debug.Print "0 + x", 0 + x

(Yep, all of the above result in Null.)

        Dim y
        y = Nothing
        Debug.Print "y", y

(That one results in an "Object variable not set" error.)

<comment><USER7> VBA seems to have null, empty, "" and nothing, all of which have different semantics. But only variants can be null or empty, I believe; if you have a typed variable like a Date or a String, you're out of luck.

And then, I was using either Power Automate or SharePoint/odata and it turned out "null" does not have the "normal" null semantics, and to test for null, you simply check if something is equal to it.

I think I remember from using SQL Server that there is a option that you can treat null either way.

Microsoft has a weird relationship with null.

On the other hand, I'm sure someone has complained about Oracle's idea that empty strings are null values. And once you think about it, SQL's handling of nulls is weirdly inconsistent, because the special handling of them doesn't always apply in aggregates.

Somewhere I had a book by C.J. Date/Hugh Darwen in which I remember a rant about how nulls are a terrible offense against the true relational model.

<comment><USER6> >But only variants can be null or empty...

That's true, only Variants can be Null (Null is a state of Variant); however, Empty is translated to whatever default value makes sense for some of the (non-Object, non-user-defined) data types:

        Dim s As String, d As Date, x As Single, y As Double, i As Integer
        s = Empty: d = Empty: x = Empty: y = Empty: i = Empty
        Debug.Print s, d, x, y, i

(The above compiles and runs, and - no surprise - numerics are made zero, and string made "".)

>I'm sure someone has complained about Oracle's idea that empty strings are null values.

I have certainly complained about that: I mean, what's not to love about conflating "this field intentionally left blank" with "no certain value could be obtained for this field"? /s

>...a rant about how nulls are a terrible offense against the true relational model...

By way of Wikipedia, found this: [https://www.dcs.warwick.ac.uk/~hugh/TTM/TTM- TheAskewWall-pri...](https://www.dcs.warwick.ac.uk/~hugh/TTM/TTM-TheAskewWall- printable.pdf). A fine read. I am left wondering about how OUTER JOINs would be handled without NULLs. I am now also wondering if it was OUTER JOINs that made NULLs seem necessary.

<comment><USER7> "I mean, what's not to love about conflating "this field intentionally left blank" with "no certain value could be obtained for this field"

Well, probably because Oracle was the first database I used a lot, it just seems natural to me and Microsoft's distinction between the empty string and null is annoying.

On the other hand, if I were to try to rationally defend Oracle's way of doing it, it would be something along these lines:

You can subdivide the concept of "this field doesn't have a normal value" into an _infinite_ number of reasons. So if you're not going to have _zero_ "null- like" options, and you're not going to have _one_ , then where does it stop? When you have two, or three, or four, etc. that seems like you've gone down the wrong path no matter how good your intentions are. It vaguely reminds me of the "zero, one, infinity" rule.

</comment></comment></comment></comment><comment><USER8> Although this is relevant for languages like C where NULL == 0, other (typically more modern languages) treat Null similar to how databases treat it. Ex: Swift, Kotlin, Rust

<comment><USER9> This can't be correct.

At least in Rust, null (or None) is not treated at all like how databases treat it. If you have T: PartialEq<T>, then there's an implementation for Option<T>: PartialEq<Option<T>>.

With this implementation, None == None. The result is true. None != None is false.

In an SQL database, (null = null) is null. Neither true nor false. (null != null) is also null. Neither true nor false.

This is an enormous difference, and it is basically THE gotcha for working with null in SQL databases.

If you want to translate that into a "traditional" programming language, the closest I can give you is Haskell, where you can think of SQL equality as being normal equality lifted into the Maybe applicative functor. (If that doesn't make sense, you're not a Haskell programmer, don't worry about it.)

        sqlEq :: (Applicative f, Eq a) => f a -> f a -> f Bool
        sqlEq = liftA2 (==)

This has a generalization of the tri-value semantics.

        > Nothing `sqlEq` Nothing
        Nothing
        > Nothing `sqlEq` Just 4
        Nothing
        > Just 4 `sqlEq` Just 5
        Just False
        > Just 4 `sqlEq` Just 4
        Just True

I say "generalization" because this works in any applicative functor.

<comment><USER8> Thanks for the explanation, I forgot that null != null in databases. I was thinking more about how null != 0 and is a separate concept in languages with optional values. You're right that optionals in these languages don't quite work the same as in databases

<comment><USER10> But it's not NULL != NULL. It's that NULL == NULL is NULL. That's different! NUll != NULL is also NULL, for instance.

<comment><USER8> Maybe a concise way to describe it is that in databases NULL represents the absence of a value. Since NULL is not a value, operators like == and != don't really make sense on NULL, and also produce NULL as an output.

</comment></comment></comment></comment></comment><comment><USER11> How the hell is there no proper pdf to read this on the arxiv?

<comment><USER12> Don't know much about arxiv, but reader mode in Firefox works pretty well here.</comment></comment>


Dropbox has grand opening of China Basin offices - <AUTHOR> http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2012/04/26/BUAN1O94EP.DTL <comment><USER2> Photos are lacking. Mayor this, mayor that, other people looking at mayor, a lounge chair.</comment>


The David Gilmour Guitar Collection Sells for $21.5M - <AUTHOR> https://www.christies.com/features/David-Gilmour-Collection-auction-results-9974-3.aspx <comment><USER2> Hopefully some of these make it to museums.

Makes me sad to think of instruments with a history like this belonging to blues lawyers.

</comment><comment><AUTHOR> The black strat, David Gilmour's main guitar, sold for $4M.

<comment><USER3> I suppose I'll have to settle for a black Squier lookalike now! Which admittedly doesn't sound bad at all.

</comment></comment><comment><USER4> So, has Gilmour retired from music or did he retain a few axes to noodle around on?

</comment><comment><AUTHOR> By comparison, Hendrix's guitar sold for $2.4M. Pocket change.</comment>


Forbes: "Internships: The Quickest Way To Gen Y Success" - <AUTHOR> http://blogs.forbes.com/work-in-progress/2011/03/09/internships-quickest-way-to-gen-y-success/?utm_source=alertsnewpost&utm_medium=email&utm_campaign=20110309

<comment><USER2> Internship is synonymous with networking and this is probably a big success determining factor; at least the high level of success this article is talking about. With the competition that exists today, networking is a crucial factor.</comment>


online logo maker - <AUTHOR> http://cooltext.com/ <comment><USER2> This has been posted before... just an animated GIF generator. Web designers beware!</comment>


Without driver or map, vans go from Italy to China - <AUTHOR> http://www.usatoday.com/tech/science/2010-10-28-driverless-van_N.htm?loc=interstitialskip <comment><USER2> Seems to be word-for-word identical to the item submitted earlier:

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


WebAssembly Interface Types: Interoperate with All the Things - <AUTHOR> https://hacks.mozilla.org/2019/08/webassembly-interface-types/ <comment><USER2> I'm very happy to see the WebIDL proposal replaced with something generalized.

The article brings up an interesting point:

Webassembly really could enable seamless cross-language integration in the future.

Writing a project in Rust, but really want to use that popular face detector written in Python?

And maybe the niche language tokenizer written in PHP?

And sprinkle ffmpeg on top, without the hassle of target-compatible compilation and worrying about use after free vulnerabilities?

No problem use one of the many WASM runtimes popping up (like [1], [2]) and combine all those libraries by using their pre-compiled WASM packages distributed on a package repo like WAPM [2], with auto-generated bindings that provide a decent API from your host language.

Sounds too good to be true? Probably, and there are plenty of issues to solve.

But it sounds like a future where we could prevent a lot of the re-writes and duplication across the open source world by just tapping into the ecosystems of other languages.

[1] [https://wapm.io/](https://wapm.io/) [2] [https://github.com/CraneStation/wasmtime](https://github.com/CraneStation/wasmtime) [2] [https://wapm.io/](https://wapm.io/)

<comment><USER3> JVM (Java), Parrot (Perl 6 VM) and CLR (C#) shipped easy, multi-language environments over a decade ago. For some definitions of "easy" and "multi- language".

Different programming languages exist for many reasons, only one of which is syntax. Many of these reasons relate to data structures and runtime control flow. WASM won't be able to "solve" these issue any better than the JVM, Parrot, or CLR did. (Spoiler: they didn't, and WASM won't.) At best you'll get a Rust'ish WASM, Python'ish WASM, PHP'ish WASM, etc. And all of those will feel like a cousin to JavaScript, just as anything on the JVM feels similar to Java, on Parrot feels similar to Perl 6, and on the CLR feels similar to C#. WASM's choice of data structures, control flow, and data representations will be strongly influenced by the requirements of the major JavaScript engines (in Firefox, Chrome, and maybe WebKit). This is _already_ the case when it comes to control flow semantics.

<comment><USER4> Ah, there it is, the JVM discussion in any WASM thread. I kid.

On topic though, I'll be curious to see how bad it really is. The demo video showed code that ended up looking and behaving like normal Rust code. Maybe you'll end up with some oddities like Rust enums not being supported, but w/e.

At the end of the day, I don't need to make weird and often gross C bindings in my Rust or Go code. Is that not a huge win?

But you're right, maybe this will go the way of the JVM and no one will care. Or maybe not. Does it matter?

 _edit_ : And I should add, maybe I keep forgetting where my well supported JVM Python <-> Rust or Go <-> Rust bridge is. Maybe someone can remind me, because I've not seen it.

<comment><USER5> > _At the end of the day, I don 't need to make weird and often gross C > bindings in my Rust or Go code. Is that not a huge win?_

You just need to manually insert stack growth checks before all function calls in anything that can be called from go to support goroutines, because those can't live on a normal stack and still be sufficiently small to support desired go semantics. Async has similar issues, where the semantics are incompatible, which means that many things go horribly wrong in cross-language calls

Or you use a lowest common denominator and essentially treat the thing like an rpc, with a thick layer to paper over semantic mismatches.

And that's before we get to things like C++ or D templates, Rust or Lisp macros, and similar. Those are lazy syntactic transformations on source code, and are meaningless across languages. Not to mention that, if unused, they produce no data to import. But, especially in modern C++, they're incredibly important.

<comment><USER6> I think Rust macros and C++ templates are not lazy wrt execution.

<comment><USER5> They are lazy wrt compilation. So, unless you use the specialization in C++ or Rust, there's no code to call.

        std::vector<Java.lang.Object>

Simply doesn't exist for interop code to call.

</comment></comment></comment></comment></comment></comment><comment><USER7> Super happy to see WebAssembly Interface Types in development!

At Wasmer (disclaimer, I'm the founder!) we've been creating integrations with a lot different languages (C, C++, Rust, Python, Ruby, PHP, C# and R) and we agree that this is a pain point and an important problem to solve. We're excited that Mozilla is also pushing this forward.

If you want to start using WebAssembly anywhere: [https://wasmer.io/](https://wasmer.io/)

Keep up the good work! Let's bring WebAssembly everywhere!

<comment><USER8> Is this going to replace wasmer's WebAssembly interfaces?

As a library implementer, I'm a bit lost about how to expose functions from a wasm module to the outside world.

wasmer's interfaces have the advantage of being very simple to write. But they are not very expressive.

WebIDL is horrible, albeit more expressive.

At the same time, I feel like this is not enough.

My experience with libsodium.js, one of the first library exposing wasm (and previously asm.js) to other environments, has been that IDLs simply exposing function interfaces are not good enough.

For example, C functions returning 0 or -1 to indicate an error or not, would not be idiomatic at all if exposed that way in Scala, Javascript or Python. We want these to raise an exception instead.

Also, we need ways to preallocate buffers, check their size, etc. in order to make things appear more idiomatic.

In libsodium.js, the description language for the WebAssembly <-> JS glue is JSON-based. It describes the input and output types, but also their constraints, and how to interpret the output. That was necessary, and if more languages are targeted, this is even more necessary.

I feel like WebIDL is both complex, and insufficient.

Another thing that I don't necessarily get is why such a description language was designed specifically for WebAssembly.

Instead, we could have (yet another) way to describe APIs and how to encode that description. That description can then be included in ELF libraries, in Java objects, in WebAssembly modules, whatever. You know, like, what debuggers already use.

</comment></comment><comment><USER9> Side comment: a Thumbs-up for Lin Clark and her usual Mozilla blog posts including this one.

It is easy to understand, very informative and the hand-drawn infographies makes it pleasant to read.

<comment><USER10> Would also like to add that the video in the article ([https://www.youtube.com/watch?v=Qn_4F3foB3Q](https://www.youtube.com/watch?v=Qn_4F3foB3Q)) is really well made and to the point

</comment></comment><comment><USER11> Note that Wasmtime is the engine starring in the blog post and demos :-).

Of course, cross-language interfaces will always have tradeoffs. But we see Interface Types extending the space where the tradeoffs are worthwhile, especially in combination with wasm's sandboxing.

</comment><comment><USER12> I'm gonna go out on a limb here and expose my n00bishness, and honestly a lot of that article has my head spinning as I google a lot of terms ;)

I've only done web development for a year now and I've seen some cool WebAssembly demos but mostly those are demos of various frameworks (or no framework) reusing random WebAssembly components.

It's cool, but I'm missing from a large web application stance how WebAssembly is supposed to work, specifically when it comes to stuff like you see in some frameworks with state management across components and etc. Is there an example of that?

<comment><USER13> Web assembly is generally an optimization, not an app alternative. Think of it the way you would the C bindings Node.js has. If you've got a compute-heavy code path, writing it in C (or Rust etc) and shipping it as web assembly could be a dramatic perf improvement, but there's not really a substantive benefit to writing your entire app with it.

<comment><USER4> > but there's not really a substantive benefit to writing your entire app with > it.

Amendment: Perhaps it's debatable what "substantive benefit" would be, but writing the whole app in it is a huge benefit if you really want to do that. That is to say, for years people wanted to write Web UI stuff in various languages, this also allows for that.

So while the concrete performance boost may not be meaningful in writing an entire web app in C, Rust, Go, Python or w/e - to the developer happiness the boost may be huge for those devs that want it.

<comment><USER13> Well, you still can't do that—WASM doesn't have DOM bindings, you'd still have to ship out to JS. I believe that's a goal, so yes eventually that could be a benefit, but not at the moment.

<comment><USER14> DOM bindings are kind of irrelevant when one has WebGL.

One example among many ramping up

[https://platform.uno/](https://platform.uno/)

<comment><USER15> For a smallish subset of use cases, maybe. But replacing the DOM with a canvas-based UI for general use would be reinventing many of the problems of Flash.

<comment><USER14> Many designers and game devs see it otherwise.

<comment><USER16> Gamedev is a separate topic. As for designers, they are on the opposite side from users in the tug-of-war of control over content rendering. I don't believe they should get 100% of their way.

<comment><USER15> Gamedev falls squarely into my "smallish subset of use cases". It does legitimately need non-DOM UI, but it's not a huge part of the Web (yet).

As for designers, thank you for finding a much more diplomatic phrasing than the one I was about to write.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> > Document.createElement() takes a string. But when I call it, I'm going to > pass you two integers. Use these to create a DOMString from data in my > linear memory. Use the first integer as the starting address of the string > and the second as the length.

This seems like its introducing buffer overflow vulnerabilities, if the code can be tricked into using the wrong numbers. Sure, just into WebAssembly memory, but if everything's implemented in WebAssembly, won't there often be sensitive information in there?

Doing some more research, it seems like this may be a common problem: [https://stackoverflow.com/questions/41353389/how-can-i- retur...](https://stackoverflow.com/questions/41353389/how-can-i-return-a- javascript-string-from-a-webassembly-function)

<comment><USER18> Doesn't each wasm module get its own isolated memory? If so, then you could only shoot your own sensitive foot.

<comment><USER19> Yes, but a "module" can be an application and a full set of its dependencies. It's unlikely that its dependencies would have isolated heaps, as there would be no way for them to communicate (they can't touch each others' pointers, etc) other than through intermediary JS.

So any vulnerability in any piece of wasm in your webpage effectively compromises everything. One compromised module can also likely reach out into the page and then use other modules' public interfaces to compromise them too. There is not sandboxing in place to prevent this sort of attack, the sandbox merely protects the browser from attack by content.

</comment></comment></comment><comment> lachlan-sneff So this is what they've been up to!

How well will this interact with the upcoming (hopefully before the heatdeath of the universe) rich gc types extension?

<comment><USER11> Interface types will make it easy for two modules to interface with each other, regardless of whether both sides use GC, just one side does, or neither side does. And even within GC types, different languages have different ways of representing strings, and Interface Types can allow them to talk to each other.

</comment></comment><comment><USER20> Good effort. But the bit about using Protobuf, Cap'nProto only in processes that don't share memory is wrong. Sure, that may not be how they're traditionally used. But that doesn't exclude me from defining opaque C FFIs that pass/return opaque bytes that are serialized messages and have it be deserialized on the other end.

</comment><comment><USER21> Glad to see this being worked on. The difference between a heap vs. runtime managed object is a huge perf gap for tightly interoperating JS and WASM. At my company, we built a specific object representation that would allow zero copy, through array buffer sharing, views of C++ data from Javascript. Sounds very similar to this.

<comment><USER22> I got the impression from the article that it will always copy data (e.g. strings) between wasm modules. Did I misread it?

</comment></comment><comment><USER23> I hope someone with their hand in these specs experienced the dumpster fire that was SOAP interoperability and is taking pains to be sure we don't have the same class of problems in wasm.

</comment><comment><USER24> Oh, this is wonderful. Getting closer to that multilang WASM world.

</comment><comment><USER25> WOW that was too much to read. Can someone TLDR when we'll be able to get rid of Electron using this for me?

<comment><USER11> Much of what makes Electron Electron are the APIs it provides. The blog post here is a way to describe and work with APIs, not actual new APIs.

We're working on APIs too, in WASI, but there's a lot of work to do to build everything you'd need to build Electron-like apps.

</comment></comment><comment><USER26> I'm a strong opponent of WASM because I think that WASM will break the internet the very same way _and same reason_ ActiveX and Java applets broke it over 20 years ago.

An untrusted executable code, no matter how much sandboxed, virtualised, and isolated it is, would never be a good thing. It wasn't 20 years ago, and would never be, invariably of what "tech sauce" it is served with.

I advocate for proactive removal of WASM lobbyists from standard setting bodies, and countering their promotion of WASM.

<comment><USER27> ActiveX and Java applets were proprietary when they got introduced. WASM is an open standard that it supported by all browser vendors and already integrated without any third-party plugins. There is a spec for it that you can contribute to.

<comment><USER26> It doesn't change a thing. Both ax and java were quite well documented and free for everybody to use, but they definitely _broke the Internet_ for everybody without any exaggeration.

I'll explain you why in the most neutral tone I can.

Do you understand that biggest peddlers of inscrutinable executable format on the web are people who are _not fine_ with the open nature of the Internet, and who _can not_ make their business when all code available through the browser is available to at least minimal form of inspection?

In other words, the people who are mad because they can't run business in the web because their business model depends on their code being closed, they WANT THIS big time. Their business thrives off non-interoperability and brokennes of software at large. Their success comes at the detriment of the Internet ecosystem at large. The more they brake the Internet for the rest of its users, the more money they can make, and this is why there can not be reconciliation with them and, us, the wider and more sane part of software developer community.

And we, the engineering cadres, the most influential class of people in the new tech driven world, have all the influence needed to deny WASM adoption.

<comment><USER28> Modern minified javascript is just as inscrutable as anything else.

For example, please try to read this code: [https://apis.google.com/js/client.js](https://apis.google.com/js/client.js)

You would need a "decompiler" to make anything out of that.</comment></comment></comment></comment>


Learnings from using Puma in production on Heroku - <AUTHOR> http://blog.codeship.io/2013/10/16/unleash-the-puma-on-heroku.html

<comment><USER2> FTA:

> We are still using MRI 2.0.0-p195 on Heroku and haven't switched to either > JRuby or Rubinius. Although there is a lot performance we could gain from > this switch we are happy with the performance we have and it would make our > development more complicated.

From the Rubinius 2.0 release post[1]:

> Evan created Puma to meet the need for a fast web server that would promote > the Rubinius parallel thread support. Puma also works well on MRI and JRuby. > It provides Ruby applications excellent performance and multi-core scaling, > especially when there's no global interpreter lock.

I'm very interested to see how much performance they would gain by switching to Rubinius, and why they say it would complicate their development.

[1] [http://rubini.us/2013/10/04/rubinius-2-0-released/](http://rubini.us/2013/10/04/rubinius-2-0-released/)

<comment><USER3> To the extent it's about the GIL or lack thereof, I am confident that the amount of performance increase you would get by switching would be directly correlated with how much of your typical response generation time is spent waiting on I/O.

The _less_ time you spend waiting on I/O (you are cpu-bound), the _more_ performance increase you get from switching to an interpreter without a GIL.

Most of my web apps spend a very large percentage of their time waiting on I/O (chiefly an rdbms), but if you have a heavily optimized app that is more cpu- bound, you would see larger gains from a GIL-less interpreter.

This hypothesis just makes sense, and I also believe there's evidence for it in the benchmarking I did at: [https://github.com/jrochkind/fake_work_app](https://github.com/jrochkind/fake_work_app)

<comment><USER2> Thanks for those benchmarks!

You get a big boost by using multiple Puma workers on MRI. Under Rubinius you _should_ be able to only use one Puma worker for max performance, right?

I'd love to see benchmarks with Rubinius... ;)

<comment><USER3> Ah, good point. Yeah, in theory, I think that's true, you could get away with only one worker on rubinius or jruby.

I'm mostly sticking with MRI, so I mostly think about the other side -- on MRI you need multiple workers, yeah, but _even_ on MRI, you get a boost by using multi-threads _on each worker_. This is the thing lots of people are neglecting!

</comment></comment></comment></comment><comment><USER4> Shameless plug: I've been moving over my own apps to Puma lately and definitely noticed improvements in performance without switching VM (we've used MRI so far). Lately, even did a small blog post on the topic:

[http://jasdeep.ca/2013/07/deploying-rails-apps-with-puma- and...](http://jasdeep.ca/2013/07/deploying-rails-apps-with-puma-and-nginx/)

This should get you started on non-Heroku platforms with Puma & Rails, well for development & staging purposes. I still have to do a post on setting up Puma for actual production deployments.

</comment><comment><USER5> Puma has been great! I switched to it for both development and production on all of my Rails apps a week or so ago and haven't looked back.

<comment><USER6> Yes it even works very well on MRI. Definitely a good choice</comment></comment>


Show HN: Roobrick: Rubrics for Business - <AUTHOR> https://www.roobrick.org <comment><AUTHOR> Rubrics are well accepted in schools and universities, but also have heaps of uses for businesses.</comment>


Europe's Last Act? - <AUTHOR> http://www.project-syndicate.org/commentary/greece-creditor-demands-by-joseph-e--stiglitz-2015-06

<comment><USER2> > The troika badly misjudged the macroeconomic effects of the program that > they imposed. According to their published forecasts, they believed that, by > cutting wages and accepting other austerity measures, Greek exports would > increase and the economy would quickly return to growth.

[https://en.wikipedia.org/wiki/Gross_domestic_product#Compone...](https://en.wikipedia.org/wiki/Gross_domestic_product#Components_of_GDP_by_expenditure)

If, according to the above wikipedia overview, the major component of GDP is consumption, then it seems intuitive to this non-economist that:

\- A program of austerity, as described in the article, is intended to boost exports. Lower wages make it cheaper to produce those exports, and the benefit goes to buyers of those exports. The population is under wage pressure, and doesn't believe that things will be better soon, so they spend less, and cannot support as many secondary and tertiary jobs. The overall population suffers, to the benefit of the countries that buy their exports, and to the benefit of the exporting companies (which is a smaller component of GDP than consumers, but probably better organized).

Also, once exported, the exporting country's citizens do not enjoy the use and benefit of the exported item.

\- A program of spending is intended to boost the spending ability of consumers. Consumers are more confident, and are more likely to support secondary and tertiary jobs through their spending. The benefit is to the citizens and businesses of the country. Oddly enough, if citizens have enough cash, they'll buy more imports, to the benefit of other exporting countries. The US, for example, buys a lot of iPhones and microwaves.

Build roads and networks, and we all benefit from the building and the using. Build whatevers for export, and we tend toward piecework or slavery under foreign countries.</comment>


Product Editors vs Product Managers – by Andrew Chen - <AUTHOR> https://www.blossom.io/blog/2013/06/20/why-companies-should-have-product-editors.html

<comment><AUTHOR> Brilliant essay. Short and to the point. Imho also applies to enterprise/b2b product management, not only to consumer (but obviously more important there).</comment>


Technical Feasibility of Building Hitchhiker's Guide to the Galaxy - <AUTHOR> http://blog.memkite.com/2014/04/01/technical-feasibility-of-building-hitchikers-guide-to-the-galaxy-i-e-offline-web-search-part-i/ <comment><USER2> All of Netflix, in HD, on 24TB.

The thought of putting most movies in my pocket for a few hundred bucks is ... stunning.

Netflix could solve the bandwidth problem by just _mailing the whole library_ to customers. "Never underestimate the bandwidth of a station wagon full of magnetic tapes."

<comment><USER3> It's pretty amazing how much better things could be, if we could pry the content industry away from outdated business models.

<comment><USER2> Well, consider what went into assembling that 24TB of content, and follow it from there.

Each movie cost something like, well, let's just ballpark $10M average (the >$200M blockbusters are relatively rare, balanced by old & cheap filler content made down around $1M each). Lead article notes Netflix has 8900 movies. Round both up sensibly, and we're looking at $100B to create the content.

Netflix has some 44M subscribers. Assuming all that content was made for & paid by Netflix subscribers, that's $2272 per subscriber. 8-O

Talmand SWAGged the storage hardware cost at $1000. Storage prices being what they are, that will be $300 in a year or so.

Would you pay $2500 to own, in a box the size of a pack of cards, _the entire Netflix library_? With updates (package deal, you get 'em all as they're made to cover production costs) of every movie added thereafter for $0.25 each? Could we persuade the entire 44M Netflix subscribers to sign up?

Not sure what to do with those numbers, but they're fascinating.

<comment><USER4> That's only temping because of the high resolution. I'm not sure if it's Comcast being intentionally awful or just incompetent, but I can't seem to stream HD anything on netflix. I turn on manual buffering and HD options just aren't there. If that problem didn't exist, there's basically no benefit in making paying the large up front cost.

Now, if production costs were completely covered by subscribers, it would be interesting to see what sort of movies get made.

</comment></comment></comment></comment><comment><USER5> Some information has value that remains relatively constant over time: historical records, literature. Some information has value that decays slowly: basic materials in the sciences, large bodies of well-established measurements.

Some information has value that decays fairly quickly: current scientific progress that invalidates older measurements or has better predictions than older theories, current events, prices of common items.

And some information has value that decays extremely quickly: weather, financial markets, prices for things that you want to buy or sell now, casual interactions with other people.

If you build a system that can connect fast enough to the Internet in terms of latency and throughput, you don't need much local caching. That's what we have in current smartphones.

Without a subEtha network, having a large local cache becomes increasingly important the farther away you are. But without a mission profile to plan for, estimating things in terms of current storage technology is as useless as coming up with a security plan without a threat model.

<comment><USER6> How about the mission to Mars? What repository of data should they take with them and what should they pull across space at analogue modem speed?

</comment></comment><comment><USER7> If you plan on using it just on Earth, this becomes relevant: [https://xkcd.com/548/](https://xkcd.com/548/) ;).

</comment><comment><USER8> The Netflix numbers are definitely wrong. Of the 10434 titles on there 3687 are TV Shows, or more specifically seasons of TV shows.

Assuming 2 hours/movie and 15 hours/tv show season, the number rolls around to 72,486 Hours of content. Let's round that to 75,000 hours for convenience sake.

Assuming an average bitrate of 4Mbps, it comes to about 135 TB.

Which is why the Netflix Open Connect box works so well; Netflix can dump their entire catalog onto 2 of those boxes (well, it will take a few more since Netflix will be caching multiple versions of the files are different bitrates, but I wouldn't be surprised if the entire catalog in all bitrates can fit into 1 rack)

Source for numbers: [http://instantwatcher.com/](http://instantwatcher.com/)

</comment><comment><USER9> The creators of 'Elite' had this problem way back in the 1980's when they had to squeeze 8 galaxies complete with planet data into 32K of RAM. They solved the problem by 'procedurally generating' all of the required data from a seed number. Therefore, it isn't a question of cutting and pasting from Wikipedia etc., it is more a matter of getting the right 'seed number' for earth, updating the procedure for generating content and that should be it.

Anyway, here is something cut 'n' pasted from Wikipedia:

 _The Elite universe contains eight galaxies, each with 256 planets to explore. Due to the limited capabilities of 8-bit computers, these worlds are procedurally generated. A single seed number is run through a fixed algorithm the appropriate number of times and creates a sequence of numbers determining each planet 's complete composition (position in the galaxy, prices of commodities, and even name and local details— text strings are chosen numerically from a lookup table and assembled to produce unique descriptions for each planet). This means that no extra memory is needed to store the characteristics of each planet, yet each is unique and has fixed properties. Each galaxy is also procedurally generated from the first.

However, the use of procedural generation created a few problems. There are a number of poorly located systems that can be reached only by galactic hyperspace— these are more than 7 light years from their nearest neighbour, thus trapping the traveller. Braben and Bell also checked that none of the system names were profane - removing an entire galaxy after finding a planet named "Arse".[9]_

[9] Procedurally generated by unicorns.

<comment><USER10> It's not possible to compress more than a certain amount. E.g. you can't store every possible combination of 12 bits with only 8 bits. It's trivial to expand 8 bits into 20 bits following some procedure, but it's literally impossible to do the reverse.

</comment></comment><comment><USER11> So much of what makes the internet useful is the collaborative aspect. Having a copy of StackOverflow at a static point in time is better than nothing, but losing the ability to ask or answer new questions or stay up to date is a significant loss.

If you are a lone (or part of a small group) traveler, the thumb drive Hitchhiker's Guide is probably as good as it gets. If we had a colony on Mars (or more distant) a better solution would be to have a planetary WAN (the MWW?) Central servers could update news, movies, apps and other timely but read-only content over a wide-bandwidth, high latency channel to the WWW (Renamed in 2250 to the Earth Wide Web.) Community sites (like HN and SO) would have to be redesigned for multiple non-interactive WANs. Perhaps it would default to your home WAN for voting and commenting, but you could click a tab to view a read-only, slightly older version of different planets' contributions.

</comment><comment><USER12> That's all the information it would ideally have on earth, but then again, there are aproximately 8.8 BILLION habitable planets on our galaxy alone, and the more advanced ones oughta have a lot more information to store.

However, about our planet, the HHGTTG had only this to say: "Mostly Harmless". It does have an entry for human beings though, so we actually don't know how much information about us it contains.

<comment><USER13> Humans: A species that still thinks digital timepieces are a pretty neat idea.

That's probably it.

It is already apparent that the guide is curated from two enormous office buildings, has a host of low-paid field researchers, and culls any information deemed not relevant to the hoopiest, most towel-aware set of galactic travelers.

Which is to say that when people are talking about Netflix, they probably actually mean an extensive catalog of high-definition movies that cater to the prurient interest. And when they say Wikipedia, they mean expert tips on how to find temporary companionship and cocktails from the native populations of unfamiliar planets.

That's a lot harder to put together than a simple catalog of facts and knowledge.

</comment></comment><comment><USER3> A while back I had some thoughts about a user-generated travel guide, in the spirit of Hitchhikers, built like a wiki or the old IMDB. Has anyone heard of a project like that?

Maybe the problem is that it'd fill up with so much spam from local businesses that it'd be useless. Maybe a good reputation and rating system could make it work, if there were enough participation from neutral parties.

<comment><USER14> Well, there's Wikivoyage:

[http://www.wikivoyage.org/](http://www.wikivoyage.org/)

</comment></comment><comment><USER15> 1\. The Wikipedia estimate probably only includes text. All of the media is distributed separately, and was ~200GB as of a few years ago. I can only imagine it's grown since then. Some articles make more sense with images (e.g. a photo of an animal to go with the description).

2\. Is the entirety of Twitter really useful as part of a Hitchhiker's Guide to the Galaxy?

<comment><USER2> One post on Twitter: 140 bytes max. One HD frame on Netflix: 6220800 bytes max.

If throwing the near-totality of human cinematography on H2G2 is a no-brainer due to its manageably small size (a mere 24TB), then may as well throw Twitter on there as well.

<comment><USER16> Don't forget Unicode. 140 Characters =/= 140 bytes.

<comment><USER2> Don't forget compression too. And don't forget most tweets don't use close to the full available tweet data space. A billion tweets takes up a lot less than 140GB.

I'm just looking at rough comparisons. A single 1/24th of a second of Netflix video approximates 44,000 tweets' worth of data. Anticipating growth, let's assume a billion tweets per day (was half-billion last October). 171 days of tweets takes up the same space as the complete Netflix library.

</comment></comment></comment></comment><comment><USER17> A Kindle with a copy of Wikipedia on it seems close enough to me.

</comment><comment><USER18> but what about the legal side of things? last time I checked, Netflix wasn't particularly excited about me trying to scrape all of their video data and making money off of it.

<comment><USER19> DRM (in concept, but not in practice) means shipping you an impenetrable safe and selling the key separately.

The proposed idea means Netflix would be partnered with the hypothetical Guide and in order to access the encrypted movies and shows you would need to buy a key from Netflix.

</comment></comment><comment><USER20> Perhaps we should start with interstellar propulsion system?</comment>