Ask HN: How do you handle rapidly changing requirements for a project - <AUTHOR>

A little background ... I'm working with a project where the client will define requirements for us, we'll give estimates, then they'll change the requirements ... maybe drop one or two, refine another one, or change one completely so that we can hit a certain number of (agreed upon) hours for the project.
Right now we're tracking these in microsoft word, but its very cumbersome ... sometimes something will sneak in that we weren't paying much attention to (minor disconnect between the project manager and the developer), or we'll lose something and have to search through a bunch of emails to find it.
So I was just curious to see how others handle stuff like this, what do you use to track changing requirements before (and sometimes during) a project?
JIRA? lighthouse? Pivotal Tracker? <comment><USER2> It isn't clear if you asking a technical question or a social question. For the latter the usual problems are visibility and acknowledgement. Visibility means the client doesn't really know what is going on. Sure you can email a Word doc whenever it changes, but that is unsatisfying. If the client can go to a URL and see the live state of things, especially a prioritized list of outstanding work then they will have a far clearer picture of the current state, how it changes over time and the impact of their changes.

Acknowledgement is how you deal with new requests. The client is being creative (in a good way) and have yet another idea of how to improve things. Saying "no" to them (it wasn't in the original requirements) is not something they want to hear. It is a good idea to always add new requests to the list as this acknowledges the client and makes them feel better. I always have a milestone/version/release called "Blue Sky" which is where most of these go. But if the client wants it elsewhere then they have to look at the list of outstanding requests and work out which ones get demoted.

Be careful with the granularity of items in the list. Having one item be "Add LDAP" and another "Change title colour" when the former takes 4 weeks and the latter one hour may be apparent to you, but not to them. You can either break big ones down into pieces that are at most a few days, or change the title eg "Add LDAP (4 weeks)".

Once you have visibility and acknowledgements it will become a lot clearer to both parties on the impact of change and what can be done about it (change priorities, spend more/less, reduce scope of items etc). And sometimes those Blue Sky items turn into gems.

</comment><comment><USER3> It's a losing battle. I've had lots of experience with this.

Here are the possible scenarios:

1) You will never finish 2) you will finish, but many times over the deadline 3) your customer will blame you 4) you will lose money on the project

Get the requirements in writing, don't allow the customer to keep changing it. If they want to change it, make sure you let them know how much money/time it will add onto the project.

<comment><AUTHOR> Ahh right ... I see where you're going but that's not the case with this. Its just a back and forth trying to nail down the specifications for the project. Once those are set, we don't change them unless they go through a change request process that we have. They're good clients I promise :D

The issue is just trying to track when a small requirement like

"submit button should change color on hover"

changes or is removed entirely.

just as an example of course.

</comment></comment><comment><USER4> I'd be a bad entrepreneur if I didn't plug my own product here: <http://trackjumper.com> \- I took a spreadsheet-based bug tracking system from a previous startup job and made it into an app.

<comment><AUTHOR> Thanks ... we have bug tracking software, I was just asking about handling changing requirements</comment></comment>


Estonian government starts blocking foreign gambling sites - <AUTHOR> http://en.wikipedia.org/wiki/Internet_censorship#Estonia

<comment><AUTHOR> Full list of the blocked sites includes Pokerstars, Partypoker etc: <http://f.postimees.ee/f/2010/03/10/329436t55hf931.jpg>

By using DNS-based domain blocking, of course our lovely government also blocks all non-monetary gambling and casual games on those 175 sites. So it's not gambling, that's prohibited, but also content. What's worse, besides licensed in Estonia, the demand is also for them to have servers physically in Estonia.

Of course it's no surprise that before this blocking an internet gambling license was issued to one local casino, which started their site just now.</comment>


JS Libraries to give forms better usability - <AUTHOR> https://www.codefellows.org/blogs/the-ten-best-javascript-libraries-for-form-validation-and-formatting

<comment><USER2> I was actually going to comment on this before reading TFA and just say, "angular.js", but they mention that. Good article</comment>


4 reasons why Microsoft's mojang deal was a good decision - <AUTHOR> http://gearcraft.us/mojangs-minecraft-two-billion-dollars-steal-microsoft-will-break-even-six-months/

<comment><USER2> > Overall, we at Gearcraft predict the deal will generate over $15-20 billion > in revenue during its lifespan.

Bullshit claim that has no numbers behind it. Notch owning the IP was also brought up in another thread here, so you'd have to size that figure down substantially if true.</comment>


Common x86 Calling Conventions - <AUTHOR> https://jlospinoso.github.io/assembly/c/developing/software/2015/04/04/common-x86-calling-conventions.html

<comment><USER2> Title should be "Microsoft x86 Calling Conventions". The whole article is based on Microsoft-specific conventions and tools.

When I saw the following, I stopped reading:

      MultiplyEaxByTwo:
      shl eax,2
      ret

"shl eax, 2" means bit shift left eax by two, or "eax << 2". Also, while the end result is same as with "shl" [1], "sal" [2] should be used for idiomatic [3] assembler:

Fixed:

      CorrectMultiplyEaxByTwo:
      sal eax, 1
      ret

[1]: "shl", shift logical left

[2]: "sal", shift arithmetic left

[3]: [http://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate#A...](http://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate#Arithmetic_Shift_Instructions)

<comment><USER3> And 32 bit only. It doesn't cover the 64bit conventions which deviates more wildly on Win64 from the common amd64 ABI.

<comment><USER4> Talking about 64b, does anyone know _why_ MS decided not to go with the AMD64 abi? Is it because they had their own 64bit CC for e.g. itanium and kept that?

<comment><USER5> Looks like they went with extending their existing __fastcall calling convention. [http://blogs.msdn.com/b/oldnewthing/archive/2004/01/02/47184...](http://blogs.msdn.com/b/oldnewthing/archive/2004/01/02/47184.aspx)

</comment></comment></comment></comment><comment><USER6> Can you introduce good books about these topics?(linker,loader,calling conventions ,dynamic linking etc).I am looking for good book for deeply understanding these topics(given that traditional OS books just talks about theory)

<comment><USER7> I can't comment on its "goodness" but the textbook that sprang to mind is Linkers and Loaders: [http://www.amazon.com/Linkers-Kaufmann-Software- Engineering-...](http://www.amazon.com/Linkers-Kaufmann-Software-Engineering- Programming/dp/1558604960)

The bad news is that it's from '99 but, as far as the foundations go, I can't imagine linkers back then were _that_ different.

</comment></comment><comment><USER8> Thank god for x64 that got rid of this unnecessary cruft.

<comment><USER9> A wild __vectorcall appeared!

[http://blogs.msdn.com/b/vcblog/archive/2013/07/12/introducin...](http://blogs.msdn.com/b/vcblog/archive/2013/07/12/introducing- vector-calling-convention.aspx)

[https://msdn.microsoft.com/en- us/library/dn375768.aspx](https://msdn.microsoft.com/en- us/library/dn375768.aspx)</comment></comment>


Did I just find the Cure for Cancer? [July 2017] - <AUTHOR> http://marc.perkel.com/2017/07/04/did-i-just-find-the-cure-for-cancer/ <comment><USER2> (July 2017)

He never mentioned his medical state in his subsequent 5 months of postings.

<comment><AUTHOR> I saw him at a meetup last night. He seemed reasonably healthy. I never would have guessed there was anything wrong with him. The only reason I found out he had cancer at all is that there was someone else at the meetup who asked him about it.

<comment><USER3> You should reach out to him and see if he would be willing to do a AMA about this (aka if you know him well enough); even if it wasn't successful I'm sure many people would like to know the details and have their questions answered.

<comment><AUTHOR> So I finally heard back from Marc and he said he would do an AMA. Can you arrange one?</comment></comment></comment></comment>


Svbtle - With only two features, this is the essence of blogging. - <AUTHOR> http://svbtle.com/ Interesting project that apparently powers dcurt.is (Dustin Curtis) and will be available "soon". <comment><USER2> I'd like to know more about this service but there is no information available on the website. As it stands, I'm just going to forget all about this in 30 minutes.</comment>


How to Start an Open Source Project (that people use) - <AUTHOR> http://www.barryclark.co/starting-an-open-source-project/

<comment><USER2> Practical advice. Making me rethink a project I'm involved in trying to take public.</comment>


"We've read your code" - <AUTHOR> http://blog.jgc.org/2010/09/weve-read-your-code.html

<comment><USER2> The downside is when someone finds code you haven't touched in 10 years and would disavow now and think it's your current standard.

So make sure you keep the home pages of such projects updated by saying "this project has been dormant since...".

<comment><USER3> Moreover, you have to be careful when uploading new code, when a new idea strikes into your head and you quickly implement a prototype, probably not in a very clean way and without unittests and stuff. This doesn't go well in conjunction with 'release early, release often' rule.

<comment><USER4> I think if you open source something it's kind of an obligation to clean up and comment your code at least a bit, job search or not.

<comment><USER5> It's not. When sharing code, there is no obligation to do anything. More people will contribute and share if you have well-documented clean code, but if you just want to throw something up there, that's good too.

Too many people don't contribute at all because the Internet is full of people looking gift horses in the mouth and they figure it's safer to not share at all. And that's not good for anyone.

<comment><USER4> So sharing a crappy piece of code with poor documentation is better than holding out until you can release a tested product? I don't buy it. Case in point: the many terrible suggestions in the PHP documentation comments.

<comment><USER6> Yes. It gives the next poor schmuck something to work from.

That's assuming a world, of course, where at least some people actually use free software as something to hack on, rather than as a product to bitch about.

</comment></comment></comment></comment></comment></comment><comment><USER7> The flip side of this is a job I interviewed for (and actually did take) several years ago. I brought printed copies of some code I'd recently worked on (not sure why I didn't just bring a laptop!).

Towards the end of the interview I brought it out and asked if the interviewer would like to review some of it with me. I was told "No". "Why not?" I asked. "Not everyone has the ability to bring code, and it would be unfair to look at yours if we can't look at everyone's."

I was slightly flabbergasted, thought the logic was 100% wrong, but was offered the job and took it despite that. I was there about 2 years, and the first 18 months or so were generally enjoyable, but nothing lasts forever. :/

<comment><USER8> That's a pathological hiring mentality, it's not a contest, it's an attempt to make your company better by adding new talent. Good interviewers / recruiters use every trick possible to make sure they hire the best candidate.

<comment><USER9> Some blindness can help you find better candidates - not telling the recruiter whether the candidate is a member of <minority> may actually help quality (while decreasing information), for instance.

Of course, in many/most cases, more information _does_ help. But it's not automatic.

</comment></comment></comment><comment><USER10> We don't all get the time to setup beautiful open-source projects with beautiful tests and code.

I have a number of projects I've started or contributed significantly to that anyone can peruse if they want, but I'm definitely not proud of the code in all of them.

If you use this type of post ( <http://blog.jgc.org/2010/09/weve-read-your- code.html> ) as a wakeup call to make your code better, that's fine. But, would it make sense to remove open-source projects that aren't your best work, with the rationalization that few if any are using them and they are a bad reflection on your coding skills? If your code is bad and is misleading/doesn't work and provides no benefit to others, take it down or fix it. Otherwise, I say leave it alone, and feel free to leave it attached to your name.

I've met more developers who were afraid (imo) to start or share anything open-source even though they certainly could have (because I was working with them, and I did, without any harm coming to me yet). As Frank Herbert once wrote, "Fear is the mind-killer." Don't let the fear of sharing overtake you.

<comment><USER4> Why not put up a message on the project's site saying that the code is old, unsupported and not really up to your standard anymore. Maybe list your current projects.

</comment></comment><comment><USER11> _I've been lucky because "John Graham-Cumming" is close to a unique ID._

When my wife and I got married, a couple of years ago, we decided to invent a new name for ourselves. I googled each alternative we came up with, and made sure the name we chose wasn't already taken. Sometimes you get to make your own luck!

<comment><USER12> Personally, I'd be inclined to go the other way and change my name to John Smith. I'd rather not be easily Googleable by my real name. That's what handles and business names are for.

<comment><USER13> My name is unique to begin with; I've taken further steps to own it on the internet. I made the mistake of tying it to this username, once, which has led (for better or worse) to a greater discretion under this username.

</comment></comment></comment><comment><USER14> Just today I interviewed someone for a programming position. I asked him if any of his code is publicly available (a open source project, a small library, anything) and unfortunately he said no. So now I have to bring him in for a coding interview.

It really saves a lot of time if you have something out there. Just make sure that the first thing one finds is something you want them to see (not some crappy code you wrote two years ago).

<comment><USER15> A friend was recently asked the same, also said no, and was declined the interview. He is a very capable software developer.

It seems like being active on GitHub is slowly becoming almost a requirement in order to land a good job. I wonder if that is a good thing.

<comment><USER16> I like your last sentence. I am also sceptical if this is a good thing. And with reason: If you are working as a skilled software architect - and you work on projects under NDA or other laws/contracts for a long time, it could definitely come to the result that you do not have "current code" somewhere out there on github and such sites. And not everybody has the time or the reason to contribute or start an open source project. That even becomes more critical if you want to do other things in your non-working time than coding. If you have the chance to work for a company where you are allowed and instructed to work on open source projects and technology, then you are lucky. But I doubt that the major of software designers does so.

<comment><USER5> What does he do with the other 16 hours of his day? If I can hire someone who spends 41 hours a week programming, with 1 hour of work that I can actually see, that is going to be a big advantage over someone who claims they are a super-genius architect. Because the first person has documented proof of ability, but the second person just says he's really good.

Don't worry, though. I work with "C++ experts" who don't realize you have to allocate memory before writing to it. Knowing how to program is not a prerequisite to all programming jobs.

<comment><USER17> I suppose you also need to sleep, so that's 8 hours left of which you spend some preparing/eating food, maybe some sports every once in a while, shopping, socializing etc. Anyway, I'm pretty sure there are people who, while having a passion for software development, feel like doing something else for a change after 8 hours in front of a computer.

<comment><USER18> If you sleep 8 hours/day, that leaves you with 112 waking hours/week. After work, 1-2 hours of sports a day, you've still got about 50 hours/week.

You can't devote even 2% of that time to building a portfolio and helping possible future employers to evaluate your skills?

</comment></comment></comment></comment></comment></comment><comment><USER19> > And while places like Github and LinkedIn are important parts of your > identity, there's nothing more important than a web site that you control. > If you haven't registered your domain today, do it.

There's a _huge_ difference between Github and LinkedIn. You can put up content in any format at <username>.github.com. You get a local backup copy of what you put on their as a side effect of using git to push it. The contents of the repo doesn't belong to Github, so you can post it up anywhere. If GitHub disappeared (they won't) or took down your account for some ridiculous reason (they won't), it wouldn't take that long for search engines to be able to find the new location.

If you can't think of an especially good domain name, I don't think picking one up today is a great idea. That said, I have firstlast.com and I recommend getting it to anyone who commonly goes by that combination and has the firstlast.com for their name unregistered.

Finally, I'm surprised how many hackers are using HN or twitter but aren't active on GitHub. GitHub is at least 10x more valuable IMO. (You have to actively use it, of course, to get the value out of it.)

<comment><USER20> Much love for Github, but if I put my OSS projects there, I do not feel that I get value from them comparable to what I give up by not hosting it on my site. I also think hackers overestimate how many people will read your code (and if it were on your site, you could measure this).

<comment><USER19> Your A/Bingo site just isn't as useful to me as a GitHub repo would be. I had to clone your repo to see how active your project is. And what if you should lose interest? No link to the "Network" to see where the patches are going. What about bugs? I don't see a bug tracker. And for measuring how many people read my code, well, I think forks and watches on GitHub are a better gauge of the level of interest than that.

<comment><USER20> We're all businessmen here, and can have a frank discussion about financial reality without anyone getting offended, right?

My ability to eat is, at present, totally dependent on two things: my site continuing to rank highly for bingo-related queries, and (secondarily) my ability to sell fairly expensive consulting services.

A/Bingo exists to make profitable software businesses more money with little marginal cost. It is OSS because it being OSS costs me fairly little and achieves business objectives to me. It is not an act of charity in the slightest: when I donate to charity, the beneficiaries sound more like "my church" or "poor immigrants in desperate circumstances" than "profitable software companies." You gaining from A/Bingo being OSS is a positive externality that I do not optimize for.

Let's talk about the actuarial composite of an active OSS programmer who has two blogs and a Twitter account, shall we? Actuarially speaking, he doesn't link to the libraries he uses: he uses too many, and he very rarely links to any OSS projects these days. When he does link to them, they are typically higher profile projects. On a good day, he tweet about individual libraries he uses. Tweets have an economic value which is epsilon from zero to me.

(If OSS programmers don't typically link to me, who does? Answer: consultants who have implemented A/Bingo and write up about their experience with the intention of drumming up more business, and sites which follow OSS/Rails/etc such as the official Rails blog... whose links, by the way, are worth rather more than links from the actuarial composite programmer's latest blog.)

Let's talk about our actuarial composite programmer, who is a) apparently interested in diving into Rails code and b) insufficiently interested to copy/paste a line into his terminal to do so. Will he make a good consulting lead for me? Well, I do consulting for profitable software firms and can virtually guarantee them "hire me and your bottom line will increase by a measurable percentage." Without going into my exact rates, let's just say they probably would shock the conscience of the actuarial composite programmer, who thinks a) code wants to be freeeeeeee b) he could implement this anyhow and c) "I do not have nearly that amount in my checking account -- what do you offer for the price of a cup of ramen noodles?" (Answer: code available for free, and minimal individualized attention to your concerns.)

Do you see where I'm coming from?

</comment></comment></comment></comment><comment><USER21> This works both ways.

I have looked at other people's code and screamed, "Who wrote this &%*$^#?!?!?"

Unfortunately, half the time it's my own.

<comment><USER22> What is your github address?

</comment></comment><comment><USER23> Basically how I got my current gig, I knew my (now) boss from some open source work, they were looking for a contractor, and I had a job. No interview, no nothing, just a discussion of the terms and then down to business. Economists like to say complete information generates efficiency (or something to that effect), case in point.

</comment><comment><USER24> You're quite lucky then. I don't think I've been in an interview where the interviewer had bothered to read any of my code despite it being offered and out in the open. They don't even skim a few headlines from my blog first. I'm lucky if they know my name without reading my resume in front of me.

</comment><comment><USER25> Do people here think there's any importance to how professional/personal the domain name of your site is? For example, I registered inconsistent.nl (currently sadly empty because I nuked my web server in an experiment and _still_ haven't gotten around to fixing it properly) because it fits my outlook on a lot of parts of the world. And as a bonus it works equally well as a Dutch or English domain. But other people keep telling me it is to unprofessional...

<comment><USER26> I've been doing freelance work for enterprisey companies from the domain name scattered-thoughts and noone has batted an eyelid. I think for a personal website you're fine as long as its a name you would be comfortable explaining to a client. Obviously if the website is dedicated solely to your business its a different matter.

</comment></comment><comment><USER27> It's probably better to blast something out there so everyone can see it and possibly offer some advice. I've had plenty of things that were in the experimental phase and left at that. If someone really wants to see what I'm up to or what I'm interested in than it's far better to have said something than to remain quiet and invisible.

I've met far too many programmers who are reluctant to share because they are ashamed of their code but quick to point out someone else's public flaws. It's just easier to criticize than be constructive. If someone isn't releasing memory properly ,in a public repo, then a 2-minute email will straighten that out.

</comment><comment><USER4> In my last job search I put my resume on my blog (thereby refusing to send out Word files) and pointed potential employers to that, my OSS projects and my HN identity. Seemed to have worked :).

</comment><comment><USER28> I agree with the author that you will have more opportunities if your code is online.

After graduating, I spent some time putting my personal and class projects on my website. Later in the summer I got a call from a dev manager who found my website accidentally when searching for programming info. He flew me out for an interview and offered me a job.

The job offer gave me the courage to apply where I really wanted to work: Amazon Web Services. It also sped up the Amazon hiring process.

</comment><comment><USER29> Yeah, so... if you put your code out there as open source, under your own name, a prospective employer might read it. Quite an insight.

</comment><comment><USER30> _"We've read your code."_

"I'm so sorry."</comment>


How we've attracted top talent to our early-stage bootstrapped startup - <AUTHOR> https://canny.io/blog/startup-attract-top-talent/ <comment><USER2> Something about this article doesn't sit right with me. Perhaps it's the self congratulatory tone, or maybe it's all the talk of brand building, "culture", or using social media to show off their company's "personality" \-- but whatever it is I found it mildly nauseating. It's great they like their new hires, but how did they quantify that they're "top talent"?

I may be too old and jaded for this sort of thing.

<comment><USER3> lol, everyone thinks they are hiring "the best in the industry". When in reality, they are not.

<comment><USER4> And really, how many people "need" "the best"?

<comment><USER5> I have the same reaction when companies say we only hire the best. Why should the best people in the world be working on this problem? There are profound problems we need to solve as a species like tackling global warming and building a sustainable economy. Should the best and brightest we working on CRUD apps?

</comment></comment></comment></comment><comment><USER6> The social proof on IG being what several applicants stated as what drew them to the company is unfortunate. Now even more companies will feel the need to project zany and fun.

I'm just getting too old for this.

<comment><USER7> I too am getting too old for this.. Whenever I see a company tout how fun it is to work there (ping pong tables, etc), my gut instinct is that engineers there are underpaid.

</comment></comment><comment><USER8> Self-congratulatory promotional posts are very common in the startup industry, but even then this seems unusually cringey. I can't put my finger on what exactly makes it worse. Maybe it is the Instagramy nature of their self- promotion.

<comment><USER4> The very first image is a very staged photo that seems like it is sort of supposed to seem like it is not staged.... and yet obviously is. The text really isn't about what the title implies. The whole thing feels fabricated to give a very specific vibe, and finishes up with "Come backstage, where we share an honest look into building Canny."

Nothing about it seems honest...

</comment></comment><comment><USER9> I remember meeting the co-founders through Startup School back in 2017 and they were pretty genuine and enthusiastic about their product. I think they had just started development. I'm glad to hear Canny is doing well.

These types of articles are nice to read but maybe not for posting onto HN because it's a little fluffy and non-technical/non-quantitative as can be seen from the critical responses.

As a side note, I personally think it's difficult (but not impossible) to use social networks as a way to determine a company's culture. Everyone should be mindful that IG/Facebook captures only the moments someone wants to share.

</comment><comment><USER10> > With some beer in her system, she's a master with words and the numbers that > drive them.

What does that mean? Does she have to be drunk to be able to work?

<comment><USER11> Appreciate the comment! No, it means that after a few beers I'm a master with words and the numbers that drive them, without a few beers I'm also a master at everything else in life. Hope that answers your question!

<comment><USER10> Hi there.

Honestly, not really. But maybe it just doesn't translate in my head, as "I'm a master with words and the numbers that drive them" alredy doesn't really make sense to me :shrug:

</comment></comment></comment><comment><USER4> This reads like some branding / self promotional thing rather than someone sharing something of value about hiring.

</comment><comment><USER12> They're reading into this too much. Top talent likes

\- Remote work

\- Ability to contribute to "moving the needle"

\- Profitable, which probably means decent pay

</comment><comment><USER13> I'm a big fan of what Sarah & Andrew have done at Canny and how they have done it.

This article (humbly) omits the role that having a _really great_ product plays in recruiting. Canny is well designed and built and delivers instant ROI. To a degree, job applicants can sense what working at a place will be like, based on the care the existing team puts into what they are building.

<comment><USER4> There's something about people's ability to attribute doing something to everything .... except what actually allowed for someone to do that thing ;)

</comment></comment><comment><USER14> They do each other's laundry??

</comment><comment><USER15> Top talent = working for a big four or unicorn = leetcode 24/7.</comment>


An Essay on Criticism - <AUTHOR> http://poetry.eserver.org/essay-on-criticism.html

<comment><AUTHOR> I feel this applies just as much to programming as it does to poetry and the arts...</comment>


10 Questions for Ray Kurzweil - <AUTHOR> http://www.time.com/time/magazine/article/0,9171,2033076,00.html <comment><USER2> This article is a perfect example of a bad design and why typography matters.

When you first look at it, there is nothing that suggests that this is an interview.

The questions are in no way visually differentiated from the answers. As such, it looks a lot like an essay where the author asks the questions and then discusses them.

If they just made the questions bold, it would make all the difference.

<comment><USER3> Came here to say the exact same thing. Glad to know I am not the only one.

Embolden the questions! It lets me skim right to the ones that interest me.

</comment></comment><comment><USER4> > The consensus in the field is that there's somewhere between a thousand and > a million technologically advanced civilizations just in our own galaxy.

Wait, _what_?

Admittedly I am no expert on the subject, but I'm pretty sure there is absolutely no consensus in the number —or even the _mere existence_ — of other advanced civilizations at all. Is there?

<comment><USER5> There are between 100 billion and 400 billion stars in our galaxy, which puts the odds of life developing at between 1 in 400 million and 1 in 100,000. That doesn't seem wildly out to me - particularly now that we're finding more and more extrasolar planets.

Would you prefer odds of 1 in a trillion? or 1 in 1000?

<comment><USER6> Implicit in that assumption is that life occurs at least once per galaxy. All we can really say is that it has happened once in the universe which makes the odds 1 in 10^21 to 1 in 10^24. Even then, just because life happened doesn't mean the odds are at all related to life/# of stars. The odds of life occurring could be 1 in 10^10^10^10 who knows. It's very difficult to figure out the probability of an event if the only information you have is that it happened.

Which isn't to say I think we're alone in the universe I personally assume higher life is out there, but that doesn't make ridiculous statistical optimism less ridiculous.

<comment><USER5> Saying that the chances are 1 in a 100,000 doesn't imply that life happens once per 100,000 stars, just that that's what'll happen on average. You can roll a dice 20 times and not have a six come up.

But yes, it's difficult to figure out the probability of life occuring if we only have a sample size of one. On the other hand, nobody's found anything particularly special about the Earth's placement or chemical makeup, other than it's rocky and has liquid water.

This is why exploring the other planets in our solar system is important. If we explore Titan and find weird, hydrocarbon-based fish which evolved independently to life on earth, or under the ice on Europa, then it tells us that the probability of life evolving is not that small, and we can up the estimate of the probability of other civilisations in the galaxy.

</comment></comment></comment></comment><comment><USER7> For those interested about the possibility of life on other planets, there's a _great_ essay by Michael Crichton:

<https://www.cfa.harvard.edu/~scranmer/SPD/crichton.html>

He rails against Drake's equation, and the larger scientific damage it has done. One important point he makes is that writing

number of cats in this house = average number of cats per room X number of rooms

gives the illusion of science, but it gets you no closer to a final answer if you can't estimate the density of cats or the number of rooms.

</comment><comment><USER8> The first question was the most interesting:

 _Is it a mistake to use the events of the recent past as a method of predicting the future?_

since this seems to be a veiled criticism of Kurzweil's entire methodology -- he sees an exponential trend and extrapolates it way out into the future with no consideration for the fact that all exponential trends in the real world eventually hit a wall _somewhere_.

Kurzweil, unfortunately, misses the point and uses it as a cue to go on about exponential trends again.</comment>


Clojure 1.10 release - <AUTHOR> https://clojure.org/news/2018/12/17/clojure110 <comment><USER2> From the perspective of a (fairly large-scale at this point) app developer: I find it great that Clojure places such emphasis on backwards compatibility. In general, migration to newer Clojure versions is completely painless.

The language has been designed by experienced and mature people and doesn't go through "let's throw everything out and start again" phases like so many other languages do.

<comment> trevor-e > The language has been designed by experienced and mature people and doesn't > go through "let's throw everything out and start again" phases like so many > other languages do.

Swift was designed by highly experienced and mature compiler devs and is notorious for making breaking changes. It's just a difference of opinion. I prefer to suffer the occasional upgrade pain in exchange for clean and consistent APIs. And I totally understand those who don't want to deal with that.

Although to be fair to them, Swift is much younger than Clojure and the number of breaking changes has steadily declined with each major release. In seven years maybe they will take the backwards compatible approach too.

<comment><USER2> > Swift was designed by highly experienced and mature compiler devs

"Compiler devs". I think that is exactly my point. I should have said "app developers" or "system designers". If you listen to a Rich Hickey talk, you'll see that he is all about Getting Things Done in the real world, and much less about theoretical concepts. Language design is subservient to app developer needs.

<comment><USER3> I would put it simply: Clojure was designed by a _thinker_ , who creates when he is away from the keyboard, not in front of it. When one releases and breaks the code in his head first, very few breaking changes are left for the public releases.

<comment><USER4> It takes one to know one. (Or so I would like to think.)

Rich's writing, presentations, and example of overall conceptual discipline and maturity have helped me focus on the essentials in ways that I could not overstate. I'm glad (but not surprised) to see so much appreciation for him around here, even among non-Clojurists (like myself).

At the risk of fanboyism, I am _constantly_ referencing his ideas* to my team, and I give them my blessing to watch any of his talks as soon as they come out.

* That is, the old but sometimes obscure ideas whose importance he's brought to his audience.

<comment><USER5> I made the mistake of showing the 'hammock driven development' talk to an employer of mine. He got annoyed by it and said he thought that it was just providing programmers with an excuse for staying away from the computer when they should be writing code.

<comment><USER6> Has he ever written code that was used in production and he was in charge of the project?

<comment><USER5> He became a project manager when he found he wasn't good at writing code after becoming a coder when he found he wasn't a good physics researcher.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> The new error messages are fantastic. Clojure just went from one of the most annoying languages to debug to mid-top tier.

More complex things still present you with overly complex errors, but with some painless repl usage it's way easier to figure out things now.

Kudos.

</comment><comment><USER8> I'm so excited about all the error messages work on this release! Also, the new metadata and tap functionality creates so many possibilities. And Java 8 minimum guaranteed so we can build things on top of java's time libraries and trust they will be there.

Nice work everyone!

</comment><comment><USER9> Any examples of what the new error reporting looks like? The release announcement is rather lacking in details.

<comment><USER10> I did a write-up that should give you an idea: [http://insideclojure.org/2018/12/17/errors/](http://insideclojure.org/2018/12/17/errors/)

</comment></comment><comment><USER11> Congrats. I'm trying to learn Common Lisp for great good. And, I love that lisp is still alive. I think we still haven't learned all that lisp has to offer.

For me personally, I think Clojure (or any lisp) targeting Go would be awesome.

The JVM lacks a killer Go "feature" which is _native binaries/easy deployment. Common lisp and many other lisps lack community which is why I think Go+Lisp would make a great combo. Go, even though it is a new language, already outpaces (a much older) Common Lisp as far as libraries go due to the huge community Go has.

I know there is `zygomys` but it doesn't reach Clojure popularity/maturity.

Can Clojure target Go?

Edit:

Maybe it is infeasible but I think targeting JVM, Go, and JavaScript would give Clojure a ridiculous advantage over almost any current programming language.

<comment><USER12> All you'd need is a Clojure to Go compiler. A simple matter of implementation (joking). The good news is that Clojure is relatively easy to tokenize and has a simple grammar. Go v1's lack of generics would make the implementation tedious, but the features announced for Go v2 should make it easier.

<comment><USER13> A more feasible option is to compile Clojure byte code to native code with GraalVM ([http://www.graalvm.org/docs/reference-manual/aot- compilation...](http://www.graalvm.org/docs/reference-manual/aot- compilation/)). GraalVM's native compiler still has some limitations but is coming along nicely.

</comment></comment></comment><comment><USER14> I've just started toying with Clojure, and while I've enjoyed it a great deal, the error messages were definitely one of the more unfriendly parts. Fortunately, my last two hobby languages were Elm and Haskell, so Clojure was always going to be in the middle between those two extremes). Good to see it being worked on!

</comment><comment><USER15> Are there any plans for a native version of Clojure? I'd rather avoid the JVM if possible, but I suppose the whole ecosystem is dependent on it so that's unlikely?

<comment><USER16> I guess I might ask what this stance is founded on? The JVM is just a binary that runs byte code. It's stable and runs well pretty much everywhere. If you insist the JVM has cooties, you could use Docker and abstract it away, it might be an ideal way to use it anyways depending on your work.

The JVM /= Oracle JVM by the way. There is OpenJDK

EDIT: Also I think recent Java releases have gotten into making self contained binaries (which just means they package the JVM...it's in there, it might jump out and bite you!). But, as long as you are careful what you are shipping, packing up a JVM has always been an option

<comment><USER15> > I guess I might ask what this stance is founded on?

Kotlin has Kotlin/Native, so I was hoping there might be a similar initiative for Clojure. But, a few reasons:

* Startup time

* Ability to deploy/share a binary

* The JVM just seems so "heavy" to me. It's certainly the only language runtime I know of that runs a persistent helper app, or asks to install an Ask toolbar upon installation.

* Bias against Oracle and Java

> Also I think recent Java releases have gotten into making self contained > binaries

TIL, thanks.

Edit: edited.

<comment><USER17> > * Bias against Oracle and Java

It's always fascinating when I encounter people with opposite biases to my own. While I'm no fan of Oracle, I seek out technologies that are based on the JVM and try to avoid things based on many other technologies because I intrinsically trust certain behaviors and features of the JVM that other ecosystems lack.

<comment><USER15> After suffering through Java early in my career I've completely avoided it since then. What parts of Java/JVM do you find indispensable vs the rest of tech?

<comment><USER17> Definitely more the language ecosystem than Java itself - coding in Java itself is painful to me as well. I actually write most of my code in Groovy, some in Kotlin and Scala. But these things keep me liking the JVM -

\- maturity of the infrastructure (monitoring, debugging, IDEs, build tooling). I love that I can fire up my debugger and remote attach to a process running on some other host and set a breakpoint for a specific condition to catch a bug. Or that I can do the same to profile memory etc., all with very mature tools.

\- very good performance - smack bang inbetween C/C++ and higher level languages (acknowledging that startup time is a big hole in that - but not an important one for me)

\- truly cross platform - none of this python style, cross platform except half your packages are really written in C and won't compile unless an entire ecosystem of dependencies is there to support them, and even then some of the flat out don't work on some platforms. This extends deeper than most other languages ie: you can get closer to low level OS features while maintaining 100% cross platform capability.

\- strong / static typing under the hood which you can access optionally (eg: languages like Groovy / Kotlin let you write high level code without being burdened too much by the overhead of static typing), but all the Java APIs, ecosystem of libraries are all statically typed so you have good guarantees and excellent documentation.

\- deployment behavior - I can run the JVM, give it specified memory footprint and know it's going to stay within that

</comment></comment></comment></comment></comment></comment><comment><USER18> Onde clojure is coded in edn, I think that is no reason to break changes. If one day we need to change something in core, we can make clojure.core2 and make the ns2 macro.

</comment><comment><USER19> Nice to know that debug messages have improved. Ease of debugging would improve more, if an exception happens a live repl is spawned at that point allowing one to view locals/values, modify state, continue execution, etc.

Most lisps allows such live repls for debugging like Scheme and Emacs lisp, while clojure only provides a stacktace on exception, and not a repl.

<comment><USER20> You can do that yourself if you care ([https://m.youtube.com/watch?v=zp0OEDcAro0](https://m.youtube.com/watch?v=zp0OEDcAro0)) but I get what you mean. On the other hand, on a server application a REPL on exception wouldn't help me.

</comment></comment><comment><USER19> While I like the language very well, tooling does have issues, even simple things like not distributing Leiningen with Clojure when it is almost essential for any serious development. Version incompatibilities between Leiningen and Clojure creates subtle problems. I also wonder what the experience of using lein in Windows, it seems to install using a mysterious batch file.

The emacs based tooling had too many components, and is very brittle, ie, a minor version bump in one of the component often renders the whole build/repl process unserviceable.

Usage of local jars is extremely difficult, you need to setup a local maven repository and then add dependencies through it, which is a very painful process, esp for hobby projects and prototyping. I should be working on my problem not wrangling with maven.

<comment><USER21> Actually, I haven't used leiningen in 6 months, Clojure's new included cli tools work great these days.

<comment><USER22> I quite like tools.deps, but it is maybe a bit problematic that it is bundled with the Clojure install. Before tools.deps there were no officially sanctioned dependency and project management tool. This is probably why we got both leiningen and eventually boot. Now the bar for choosing something different than tools.deps is probably going to be quite high.

Sadly tools.deps lack the support for reading credentials from a gpg/pgp- encrypted file: [https://dev.clojure.org/jira/browse/TDEPS-9](https://dev.clojure.org/jira/browse/TDEPS-9) This is a shame as I rely on this to keep repository credentials safe. I'm not a fan of the maven master password system.</comment></comment></comment>


Bitcoin mania has students flocking to crypto classes at Stanford - <AUTHOR> https://www.cnbc.com/2017/10/30/crypto-classes-popular-at-stanford-cmu-thanks-to-bitcoin-craze.html <comment><USER2> There's nothing like the promise of getting something for nothing to keep the human race enthralled.

<comment><USER3> It's the new gold rush.</comment></comment>


Entangled toy universe shows time may be an illusion - <AUTHOR> http://www.newscientist.com/article/dn24473-entangled-toy-universe-shows-time-may-be-an-illusion.html#.UmtMd2Rgbes <comment><USER2> Time is weird stuff. When you can tell what altitude your atomic clock is by the offset in its notion of time with the clock at your side, you start to get an inkling about that.

The professor who taught quantum mechanics at USC when I was there used to joke that God told Adam and Eve that it took 7 days to create the universe, but we know from our observations that it was closer to 14 billion years. Given these two data points we can calculate how close to the speed of light God was travelling when he created the universe ...

Interesting to think of time as actually stopped though to an outside observer. Not sure what a photon is when it isn't moving at all, perhaps a point with an electric field and equal and perpendicular magnetic field.

<comment><USER3> Isn't that special relativity(time dilation) that your quantum mechanics teacher talking about there?

<comment><USER4> Yes, but this is a physics professor making jokes to an audience of physics students. Why shouldn't he refer to special relativity? It's part of his training and the training of everyone who can hear him.

I'd be more surprised if the joke came from, say, the professor teaching egyptian hieroglyphics.

</comment></comment></comment><comment><USER5> Related: [http://lesswrong.com/lw/qp/timeless_physics/](http://lesswrong.com/lw/qp/timeless_physics/)

>> Warning: The central idea in today's post is taken seriously by serious physicists; but it is not experimentally proven and is not taught as standard physics.

</comment><comment><USER6> Question: Why do some physicists believe it's a problem that physics isn't unified? It seems odd to assume that just because throughout history we've unified more and more concepts that all of physics can be unified. What if there's a limit? It's interesting to think that 100,000 years from now, physicists will still be working on the problem since no one would know it's impossible.

<comment><USER7> You either believe in natural or supernatural explanations for the universe. If you accept the latter then the discussion is moot. If you're a scientist your approach is the first.

It is difficult, perhaps impossible, to come up with a philosophically sound logically consistant explanation for natural phenomenon which isn't unified and connected at a fundamental level. Two incompatible sets of natural explanations are vastly less likely than one unless we're falling back on superstition again.

Hence on some level there will be a unified way of approaching and talking about physical phenomena. Now, is that underlying consistent theory achievable? Well that's a different question. If the unified explanation for all natural things, at its heart, relies on physics we just don't have access to - either it's too small scale for us to ever probe, or too large scale, or no longer manifested at this point in the universe's life (there are examples of this I could describe but that'd make this post too long) - then of course we would not ever get to a satisfactory scientific account which is unified.

But efforts to get there tend to reveal other interesting things so are worthwhile even if we never achieve the final goal.

Plus because it's so specialized and inaccessible to the layman, the degree to which there's already tremendous consistency and unification in our theories of the underlying nature of things is dramatically underappreciated by most people.

<comment><USER6> _It is difficult, perhaps impossible, to come up with a philosophically sound logically consistant explanation for natural phenomenon which isn 't unified and connected at a fundamental level. Two incompatible sets of natural explanations are vastly less likely than one unless we're falling back on superstition again._

Really? Ancient philosophers argued that it's vastly less likely for there to be such a huge distance separating celestial bodies than whatever their pet theory of the day was. Or that it's vastly less likely for planets to travel in ellipses, because circles were "so perfect." Throughout history, time and time again, humans seem to have a problem accepting that the imagination of nature is far greater than that of man.

 _Plus because it 's so specialized and inaccessible to the layman, the degree to which there's already tremendous consistency and unification in our theories of the underlying nature of things is dramatically underappreciated by most people._

I'm trying, but unfortunately you've given no examples.

<comment><USER8> > Ancient philosophers argued that it's vastly less likely for there to be > such a huge distance separating celestial bodies than whatever their pet > theory of the day was.

Is it me or is that a bit handwavy? The Greeks or whoever else got things awfully right and other things terribly wrong. We have the benefit of hindsight so we can point at the latter category. It doesn't negate the former.

Seems like you could take any statement and say "oh yeah? well the ancients got stuff wrong!"

<comment><USER7> You're not comparing apples to apples when you compare ancient "theories" and modern scientific theory. Predicting that the sun will come up tomorrow, and why the sun will come up tomorrow are two very different levels of detail and granularity. The latter will have far more predictive power than the former.

No ancient theories had anything like the predictive power of modern theories, so were far less powerful. So when we talk about how the ancients had theories for this - we're talking orders of magnitude less complexity.

An analogy: when we were kids my brother took part in a guess the weight of the cake. The answer was 1.010 kg. My brother had guessed 1.005 kg and another boy had guessed 1.04 kg. They tried give it to the other kid - well his difference was "3 different" whereas my brother's was "5 different". Obviously anyone with a brain could see there was an order of magnitude difference in the precision of the two predictions.

Ancient theories are like that. Orders of magnitude less precise and therefore less predictive than modern theories. The differences tend to lead to dramatic differences in outcome making them fail to interweave in ways that are useful for us in the modern world - this is why, after all, we moved to the modern theories and they led to everything we have today.

Ancient theories didn't tend to connect in philosophically logical ways as do modern theories - this is reflected in their lack of predictive power. So when I say that the problems with tying theories together that modern physicists have are vast in our minds, but really amount to splitting hairs when we compare them to the differences between theories that preceded them, this is why.

</comment></comment></comment></comment></comment><comment><USER9> As a layman I don't understand the 'problem' with time?

To me, time is relative to 'timers'. So how I perceive the world passing is a function of a electro/chemical activity in my head. I'd imagine if you could somehow 'double' this function I'd perceive time at half the speed. And I imagine if you were to turn off my 'timer' the world would pass by instantaneously.

I've heard that 'time' is the fourth dimension? But again, as a layman, I have to ask why isn't 'thought' the fourth dimension? Isn't it only by being conscious, by being a 'timer', that 'time' can even be perceived?

<comment><USER10> Because time has a direction (for some reason it doesn't seem possible to go backwards though), and a value. I can't think of similar analogies for 'thought' that makes it fit with the other 3 room dimensions.

</comment></comment><comment><USER11> Lunchtime doubly so.

<comment><USER12> it's funny, I know I shouldn't upvote that, but I appreciate that. So here's a comment.

</comment></comment><comment><USER13> > _But if a hypothetical observer existed outside the universe, when they > looked in, everything would appear stationary._

 _" when" they looked in_. They who are outside time.

This article gave me a headache. Maybe English isn't currently adequate to describe the ideas of a timeless universe..

<comment><USER7> Right. But most people don't read math and reporters don't write it.

</comment></comment><comment><USER14> I told my son not to let the DC LEGO play with the Marvel LEGO. But did he listen? No.

</comment><comment><USER15> "It's a visualisation of the phenomenon, it's not a proof," Genovese says of the experiment.

Wow. They now have "proof" in Science. Genovese has brought the scientific method to a complete new level.

<comment><USER16> Or this is just a researcher stating to a reporter that he does not have proof, to avoid false headlines. The underlying reason of course being that there is not such a thing as "proof" in physics.

</comment></comment><comment><USER17> I was under the impression that photons couldn't experience time because they travel at the speed of light.

</comment><comment><USER18> One universal time for everything is definitely an illusion, even guys who wrote Upanishads knew that.

Each process has its own properties, to put it differently, one-time-for-it- all is just a concept of the mind and doesn't exist outside our head.

<comment><USER19> "Knew" is a big stretch there.

<comment><USER7> Agreed. Taking "ancient wisdom" too seriously and seeing it through a modern scientific lens is pretty much always too big-a-stretch to make.

Plus there's a difference between talking about psychological perception of time, as most religious texts do, and time as a measure of the evolution of physical systems in the scientific sense. Not the same thing.

<comment><USER19> Thanks, pretty much what I meant.

<comment><USER7> gotta love agreement :-)

</comment></comment></comment></comment></comment><comment><USER20> I didn't read the article because I can never wrap my mind around anything to do with the true nature of time...

But it is kind of beautiful to think that all of human history took place during an 'illusion'.

<comment><USER7> This is one of those cases where the poetic language used to try to explain complex phenomena to lay persons is unhelpful. It doesn't really mean illusion in any sense consistent with what people might imagine that to mean.

Indeed it's not really that revelatory. "Experiment agrees with what we already pretty much know" would have been less interesting.</comment></comment>


Kotlingrad: A shape-safe DSL for differentiable programming - <AUTHOR> https://github.com/breandan/kotlingrad <comment><AUTHOR> Hello HN, author here! Been working on this DSL for differentiable programming for a while now. The API is starting to stabilize and it would be great to collect feedback from real users. You can find some toy examples, including the core of our implementation here:

[https://github.com/breandan/kotlingrad/tree/master/src/main/...](https://github.com/breandan/kotlingrad/tree/master/src/main/kotlin/edu/umontreal/kotlingrad/samples)

Please feel free to reach out if you have any questions or comments. Thanks so much for your feedback!

</comment><comment><USER2> The math is a bit beyond my skills but I love the creative use of Kotlin language and compiler features on display here. The How? section was very enlightening. However, the abuse of backticks makes for some unreadable code. I was thrown of by `1` a bit until I realised that that actually referred to a sealed class with that as the name. I'm still a bit puzzled by how shape inference is supposed to work. So, a bit too much type voodoo here for my taste but definitely very cool.

<comment><AUTHOR> Author here, thank you for your kind remarks! You're right, the backticks surrounding our type level integers are too distracting. The Kotlin grammar [1] requires class names must either start with a letter, or be enclosed by back-ticks. Unless the Kotlin language designers reconsider the identifier scheme [2] (?), we would be better off replacing these with something like T1, T2, ..., TN for readability and to minimize confusion.

Re: Shape Inference. To properly understand how this works, the best place to start is by looking at ToyVectorExample.kt [3]. Once you're comfortable with that, ToyMatrixExample.kt is a fairly direct generalization. The best way to explain our type system is that we stick to equality checking and perform manual type conversion for tensor contractions and expansions. Haven't figures out a good way to do concatenation, slicing, or convolution which require type-level arithmetic. This may be feasible for a fixed number set of predefined shapes, but seems to be generally intractable in the Java/Kotlin type system without a significant overhead. But if someone has an idea, I would be very happy to be proven wrong about this!

[1]: [https://kotlinlang.org/docs/reference/grammar.html](https://kotlinlang.org/docs/reference/grammar.html)

[2]: [https://github.com/Kotlin/kotlin- spec/blob/master/grammar/sr...](https://github.com/Kotlin/kotlin- spec/blob/master/grammar/src/main/antlr/UnicodeClasses.g4)

[3]: [https://github.com/breandan/kotlingrad/blob/master/src/main/...](https://github.com/breandan/kotlingrad/blob/master/src/main/kotlin/edu/umontreal/kotlingrad/samples/ToyVectorExample.kt)

[4]: [https://github.com/breandan/kotlingrad/blob/master/src/main/...](https://github.com/breandan/kotlingrad/blob/master/src/main/kotlin/edu/umontreal/kotlingrad/samples/ToyMatrixExample.kt)

<comment><USER2> Regarding the naming, the backtick notation is useful sometimes to allow you to do stuff that goes against normal conventions in Kotlin for identifiers. But generally sticking with naming conventions (that you are also dodging with various annotations top opt out of warnings for non ascii characters) is probably helpful from a code readability and autocomplete predictability point of view; which I would argue is important in an API and DSL.

I'd suggest just spelling out what is what instead of relying on names that by themselves are meaningless. So e.g. Dimension1, Dimension2x2, etc. make it clear that 1) it's a class 2) it's intended as syntactic sugar for something else. Could type aliases work here? In any case, there are only so many vector and matrix dimensions you can predefine. Your approach kind of breaks down for larger vectors/matrices and you lose compile time checks for those.

Nevertheless, kudos for pushing the type system this far.

<comment><AUTHOR> You raise some good points about the API readability and discoverability. For identifiers that the user is likely to write often, ASCII and standard naming conventions are usually preferable. While auto-completion is capable of handling unicode symbols, it can easily go overboard and harm usability. Agree that typealias could help, it's something we should explore. Thanks for the suggestions!

Indeed you are correct about the finite dimension constraint, a problem we discussed with a recent reviewer [1] in further depth. As you correctly noted, since we have a fixed upper bound for type-level integers, when checking large tensors (i.e. whose width exceeds 1000 in any dimension), we fall back to dynamic shape checking, prior to numerical evaluation. Smaller tensors can be shape checked at compile time.

I too, am wary of the "type voodoo" associated with type-level programming, but would argue that the added complexity from our approach (sans type level arithmetic) comes at very little cost to the end user due to type inference. In most cases we can check arrays at compile time. In the worst case, or if the user chooses, we use runtime shape checking or unsafe execution, which is the same as ordinary array programming.

Thanks again for your feedback. Please don't hesitate to reach out if you have any further questions or comments!

[1]: [https://openreview.net/forum?id=SkluMSZ08H&noteId=BJeZ3FkuOr](https://openreview.net/forum?id=SkluMSZ08H&noteId=BJeZ3FkuOr)

</comment></comment></comment></comment><comment><USER3> Man I'm having a hell of a time imagining how one would write a differentiable program.

I guess realistically it would have to be functional programming, where each function is itself differentiable, and then you'd have to be very careful with your function composition.

I'm incredibly intrigued, but also pretty skeptical. Like it seems like it would be so hard to ensure that you don't leave the domain where your program is differentiable.

<comment><USER4> There are automatic differentiation libraries for many languages, including C++.

The result is generally only piecewise differentiable because, e.g. you obviously cannot differentiate across the hard branch of an if-statement.

Usually for optimization you want reverse-mode differentiation, where you learn how the function output-- some optimization objective-- depends on the input variables. The automatic differentiation libraries records all the operations you perform on the input variables and then composes them using the chain rule, working backwards.

For some kinds of codebases it's actually pretty natural... e.g. I've taken a big body of C digital signal processing code and in a couple hours gotten gradients for it just by replacing all the floating point variables with special differentiable types from an AD library. These libraries also include collections of standard math lib functions which it knows the derivative for.

For the purpose of optimization the fact that your program isn't differentiable everywhere isn't necessarily a problem. You can use gradient free methods for searches across those boundaries, and gradient methods to refine your results within them.

If you're optimizing over problems that have thousands of input variables having derivatives is critical to making machine optimization tractable-- unless your search space is particularly trivial and can be well approximated by the simple differentiable models that gradient free local optimization tools use internally.

Of course, you could also attempt to directly program your derivatives-- it almost would certainly be much faster to evaluate than transcript based reverse mode AD. But it may be impossible to construct analytical derivatives that cover your whole problem domain, it's often unreasonable hard even when possible, and even if you have them keeping the functions in-sync is difficult and a source of devious bugs.

</comment></comment><comment><USER5> In case anyone doesn't know what differential programming is, here's what Wikipedia says about it [0]:

> Differentiable programming, or ∂P, is a programming paradigm in which the > programs can be differentiated throughout, usually via automatic > differentiation.[1][2][3] This allows for gradient based optimization of > parameters in the program, often via gradient descent. Differentiable > programming has found use in a wide variety of areas, particularly > scientific computing and artificial intelligence.

[0] [https://en.m.wikipedia.org/wiki/Differentiable_programming](https://en.m.wikipedia.org/wiki/Differentiable_programming)

</comment><comment><USER6> Julia's compiler lets you hook into it and make something mind blowing like Zygote.jl [https://github.com/FluxML/Zygote.jl](https://github.com/FluxML/Zygote.jl)

</comment><comment><USER7> What's up with the bizarre, untypeable and unpronounceable[1] orthography? I couldn't see an explanation skimming through. "Kotlin𝛁" seems likely to violate trademark rules, as it's almost identical to "Kotlin", and the special character is likely to be stripped by forums etc., leading to more confusion.

[1] Yes, I know the repo name uses "grad" \- that spelling actually makes sense.

<comment><AUTHOR> This is good to know. We had not previously considered the trademark aspect, but will investigate further. While the name is shared with a geographic location and various other projects use a similar naming convention (e.g. Stalin∇, ∇SLAM), "Kotlingrad" may indeed be more appropriate and SEO-friendly. Thanks for your feedback.

<comment><USER7> There's another issue you may not be aware of, which is what I was describing, based on how my phone displayed it. The ∇ (U+2207) you just said for Stalin∇ and ∇SLAM is a different character to the one on the Github page, 𝛁 (U+1d6c1)! The latter character is outside the BMP, so will lead to plenty of compatibility and font issues. For me on Firefox on Android, it shows up as a blank grey wide character rectangular block (Chrome on Kubuntu it's fine). The symbol, when it displays properly, is pronounceable if you know the maths, but will probably hurt SEO etc. If you must use one of these, definitely use ∇, as that should be well supported (just hard to type and search for).

<comment><AUTHOR> Re: Typography. Good to know. We might drop the nabla and stick to ASCII in future references.

Re: Trademark. Might be an issue. I've checked with the Kotlin team and they are looking into it.

</comment></comment></comment></comment><comment><USER8> So, can we expect KotlinTorch soon?

<comment><AUTHOR> Possibly! In the mean time, there are already some Torch bindings for Kotlin/Native:

[https://github.com/JetBrains/kotlin- native/tree/master/sampl...](https://github.com/JetBrains/kotlin- native/tree/master/samples/torch)

If you're more interested in the type-safety, you might also check out Hasktorch:

[https://github.com/hasktorch/hasktorch](https://github.com/hasktorch/hasktorch)</comment></comment>


CUFP 2009 Keynote - Real World Haskell - <AUTHOR> http://www.slideshare.net/bos31337/cufp-2009-keynote-real-world-haskell

<comment><USER2> I would like to browse the slides, but I am not going to create yet-another- account on a website-I-don't-care-to-use to access the "Get file"-link.

Why do people use such websites instead of simply posting a PDF?

<comment><USER3> Just stumbled upon this (Bryan O'Sullivan's blog): [http://www.serpentine.com/blog/2009/09/04/slides-from-my- cuf...](http://www.serpentine.com/blog/2009/09/04/slides-from-my- cufp-2009-keynote-talk/)

And now for the direct link: <http://www.serpentine.com/bos/files/cufp.pdf>

Edit: What a wonderful presentation! (Even though there's not one line of Haskell in it)

<comment><USER4> WTF?!

That was both beautiful and useless. The speaker has a great eye for good images and nothing to say about Haskell in particular. It's 90 pages of eye candy, highly recommended if you're not that in to Haskell and have 15 minutes to kill.</comment></comment></comment>


Ask HN: Programming resources for a 9th grader? - <AUTHOR> I was chatting with one of the moms at my son's baseball game and she asked my advice for her 9th grade cousin. The kid is stuck for a semester learning FORTRAN from a wizened teacher that believes it is an absolute essential component of child's introduction to computer science.
This is how you make kids hate programming. No?
I am assembling a list of resources to forward to this kid, and wanted to get your input.
Where do you think he should start digging, and what should he do after that? <comment><USER2> I think that most critical for new programmers is a nearly-immediate feedback (reward) loop. You should teach them something that will let them do something they think is cool almost immediately and something that has enough utility that it can be deployed for real. As the programmer and a few others (family members, teachers, classmates) use that thing, the programmer will see the need for new things, make tweaks, and learn a lot about the environment in which he works.

HTML might be good in this regard. Everyone hold your horses -- I know HTML is not a real programming language (no variables, conditions, control structures, etc.), but HTML is easy enough to understand and can teach an individual about the rewards that lie in programming, and HTML is a vital skill for most prospective programmers -- let's face it that most people who want to be programmers are not fantasizing about a job in the basement of an insurance company writing business logic, but creating exposed, useful, and beautiful software for others to use and enjoy. In many modern cases this falls back to websites.

You'll be teaching the kid some of the basic principles (a bit of perspiration and study = pride and rewards) that keep programmers going. As you continue to nourish this principle with progressively advanced topics, ensuring that you are almost always making something at least vaguely useful, the new programmer will develop a passion for experimentation and learning that is absolutely required to be a decent programmer. From here, he'll probably take care of himself and use you only as a reference material when necessary.

<comment><USER3> On your first paragraph, I agree completely. As a relatively new programmer this was what made me adore Python.

On your second paragraph, I disagree. HTML doesn't have the immediate feedback of "I can write something that makes my life better" in the same way that, for example, Python does. Python lets you write something you can use for your benefit six months in. Something that will actually save you significant amounts of time in some cases. There is a power and a promise there that I don't see being matched in HTML. HTML is made firstly for others to view on browsers, while the first Python script you write can be done just to make your life easier. "Scratch your own itch."

For your third paragraph, I am again in complete agreement as a relatively new(2nd year in high school) programmer.

</comment></comment><comment><USER4> I highly recommend 'Invent Your Own Computer Games with Python' <http://inventwithpython.com> and How to Think Like a Computer Scientist <http://www.greenteapress.com/thinkpython/thinkCSpy/> Both are great books that walk you through the basics up, without talking down to you.

I assume that the kid is on Windows. Using a UNIX-like system (Linux, BSD) is definitely a good way to understand computers better, especially because of the large amount of programming libraries available often by simply running one command. It's not required of course, but it might help him/her. Yet again, it might not. :-)

Once they've learned the dynamics of Python (or other) setting up a GitHub account might not be a bad idea.

</comment><comment><USER5> I think there are other decent choices, but I'm liking Small Basic (from msft) for my home-schooled children: <http://smallbasic.com/>

There's also Scratch from MIT, but the IDE doesn't feel as polished: <http://scratch.mit.edu/>

Edit: One of the nice things about Small Basic is that they are also putting together some teacher curriculum and lesson plans. Very helpful, especially for home schoolers: <http://www.teachingkidsprogramming.com/> [http://computerscienceforkids.com/MicrosoftSmallBasicTutoria...](http://computerscienceforkids.com/MicrosoftSmallBasicTutorials.aspx)

No affiliation with any of these companies or sites.

<comment><USER2> I also came here to mention Scratch. I haven't used it but it looks promising.

</comment></comment><comment><USER6> I wrote this post as a result of this question (well, 8th grade) from a friend: [http://softwaremaven.innerbrane.com/2009/03/advice- to-13-yea...](http://softwaremaven.innerbrane.com/2009/03/advice-to-13-year- old-starting.html)

</comment><comment><USER7> Kodu from Microsoft research is fun. You make a game. Scratch from MIT is cool as well. Can do lots of things with it. Alice (alice.org) I'm just downloading this one now. HTML and javascipt :) Lego Mindstorm A friend of mind is teaching his kid Python. (4th grader)

</comment><comment><USER8> Give them Design Patterns and hook them up to a car battery that shocks them if they try to fall asleep.

</comment><comment><USER9> fire guy. buy arduino uno. download arduino IDE. file>open>examples</comment>


Chernobyl Dice: A quantum random number generator with a Nixie tube display - <AUTHOR> https://github.com/nategri/chernobyl_dice <comment><USER2> Unlike the "pseudo-random" number generators used in software everywhere, here we have a truly "random" number generator (at least with our current understanding of physics).

Impossible to predict the next number - no matter how much information about the universe you know.

<comment><USER3> Does this mean determinism is moot?

<comment><USER4> In quantum mechanics, yes it is. See Bell's theorem.

<comment><USER5> And folks like Einstein felt quantum mechanics is an incomplete theory because of this. It is not an settled debate.

</comment></comment></comment></comment><comment><USER6> This is probably a dumb question, but wouldn't recording the millisecond timestamp mod 2 of each decay be a lot easier and also produce a uniform distribution (at least at the rate this thing seems to be registering decays)?

<comment><USER7> Author here.

Not a dumb question! I tried this approach using 4-microsecond ticks and was surprised to catch a (subtle) bias. So I in the end I basically used two different RNG algos (both with slight biases) and XOR'd them together.

Would love to isolate why these on their own appear to have a bias but testing is a super laborious process (takes roughly 3 days to generate a 1 megabit file).

Of course, I could always speed up the testing cycle by using a more radioactive sample ;)

</comment></comment><comment><USER8> That's a pretty unique conversation piece. The parts list and urls to supports is an image though. Oy. So maybe I can transcribe and do a pull request.

<comment><USER7> Author here.

Sorry about that! I'll push a plaintext CSV version of the part list later today.

<comment><USER9> Looks like there's a CSV in the repo already: [https://github.com/nategri/chernobyl_dice/blob/master/parts_...](https://github.com/nategri/chernobyl_dice/blob/master/parts_list.csv)

<comment><USER7> Ha! Good catch

<comment><USER8> Fix line 2 by making the " denoting inches into "" and GitHub will render it nicely.

</comment></comment></comment></comment></comment><comment><USER10> A radioactive-based random number generator surely is fun. But a friendly reminder to those readers who want a quantum device but prefer a low-power, solid-state implementation: A "quantum" random number generator doesn't always have to be fancy, it can be as boring as a diode. Diodes only allow current to flow to one direction, but if you reverse bias a diode hard enough, they'll eventually breakdown, conduct, and produce a fixed voltage drop across it. This principle is used to make voltage references and regulators. But on a closer look, the diode also produces a significant amount of random noise in this process. And the mechanisms responsible for the breakdown of a diode, either Zener Effect or Avalanche Effect, although are semi-classical, but ultimately quantum mechanical in nature - the electrons received enough energy to randomly pass through the forbidden bandgap, and the noise is effectively unpredictable. (There are also tunnel diodes that use real Quantum Tunneling, which doesn't have any classical explanation, fancier than Zener or Avalanche Effect, but general-purpose tunnel diodes are no longer in production of large quantity.)

There are some really expensive avalanche or tunnel diode noise sources you can buy, that are made by electronics giants like Keysight, that are designed to produce perfectly calibrated white noise across a few GHz of bandwidth for RF test, measurement, or cryptographic purposes. But you can build a simple one, the only problem is that the ordinary diodes are not designed to breakdown, they will, but it's thousands of volts and potentially a destructive event, thus they are not really useful. You can buy Zener diodes, but it's likely that you don't already have one and you don't want to wait for shipping. But there's another neat choice - use a transistor. The base-emitter junction of any bipolar transistor is effectively a diode for DC signals. And the most common transistors are small-signal transistors, it's easy to apply a low reverse voltage, typically 6.0 V [0] to make it go breakdown.

Then connect it to an amplifier and a ADC, you are done. And you don't even have to use an ADC, you can use a 74ALS04 logic gate (the faster, the better, 74LS is not recommended) and connect a feedback resistor to force the logic gate to work as an amplifier rather than a switch, and you get an amplified and digitized output. This idea was originally posted to the sci.crypt newsgroup. And many have built variations of this circuit with success.

Although some warned that this circuit is vulnerable to external radiofreqency interference, which can be used by the NSA to attack your generator, so good RF design practices, such as heavily shielding the noise source and the amplifier, good power supply decoupling and filtering are recommended. It's also recommended to add a builtin self-test routine to your microcontroller and disable the output in case the circuit fails the randomness check - it's an industrial standard safegaurd.

* [https://www.csshl.net/sites/default/files/downloadable/hw/hw...](https://www.csshl.net/sites/default/files/downloadable/hw/hw-rng.html)

* [https://makezine.com/projects/really-really-random-number-ge...](https://makezine.com/projects/really-really-random-number-generator/)

* [http://www.cryogenius.com/hardware/rng/](http://www.cryogenius.com/hardware/rng/)

On the other hand, readers who are interested in extremely fancy quantum number generators should take a look of the double-slit experiment, single- photon light sources, interferometry, and photomultiplier tubes. A simple idea would be making a single-photon light source first (e.g. adding a heavy attenuation filter in front of a dim laser, so at any time, it's very likely that only a single photon can get out on average, it's not strictly a single- photon source, but close). Then the single photon hits a beam-splitter (e.g. a half-silvered mirror), when the photon leaves the mirror, there are photomultiplier tubes working at a thousand volts and enormous gain to detect a single photon. There's a 50% chance that the photon will hit detector A, and 50% chance that it will hit detector B. Take notes of the result, and you have built an amazing quantum random number generator.

[0] e.g. See the datasheet of the 2N3904 transistor, [https://www.onsemi.com/pub/Collateral/2N3903-D.PDF](https://www.onsemi.com/pub/Collateral/2N3903-D.PDF)

<comment><USER4> You could also simply use an FM tuner and tune it in between stations for atmospheric noise. Like random.org did for a long time. [0]

Cosmic quantum noise for all your random number needs (after some filtering). Disclaimer: if you are under NSA attack you might have issues with this $5 setup.

[0] [https://www.hostingadvice.com/blog/random-dot-org-true- rando...](https://www.hostingadvice.com/blog/random-dot-org-true-randomness- reliable-results/)

</comment></comment><comment><USER11> You mean "It's impossible to predict the bias" :)

</comment><comment><USER12> Would the uranium marbles be at all likely to cause bit errors? Would this decrease the lifespan of the system?

<comment><USER8> Some numbers for uranium glass: [https://www.orau.org/ptp/collection/consumer%20products/vase...](https://www.orau.org/ptp/collection/consumer%20products/vaseline.htm)

Doesn't answer your question, but might be a start.

<comment><USER7> Author here. Even though its proximity puts it pretty far above background, the marbles are still a fairly weak source, so from the "electronics logic longevity" side it's not something I've really thought about. But the Geiger- Muller tube does have a finite (though very large) number of events it can record, so I cut the voltage to it when the device is in "clock mode" and not functioning as an RNG.

</comment></comment></comment><comment><USER13> Author should make a public API so anyone can have truly random numbers (with some trust in the author ;)

</comment><comment><USER14> In Chernobyl you likely do not actually need to add the marbles to get the device to work.

<comment><USER9> My Geiger counter fires about once every two seconds from natural background (and would on most parts of the world due to granite, cosmic rays, radon, etc.). When I put my uranium mineral near it it goes off 600 times per second.

</comment></comment><comment><USER15> How does one even get uranium marbles?

<comment><USER7> Author here.

They're not actually that radioactive so they're very easy to get ahold of. Amazon and eBay might work (I got mine from one of those sources, I think), but I also put a more specialized supplier in the parts list.

<comment><USER16> Grab some Torbernite!

</comment></comment></comment><comment><USER17> Hey whatever happened to your cat?

<comment><USER18> It got bit by a Møøse.</comment></comment>


Arm unveils 7nm Cortex-A76AE - <AUTHOR> https://venturebeat.com/2018/09/26/arm-unveils-7nm-cortex-a76ae-the-worlds-first-autonomous-class-car-processor/ <comment><USER2> > The 7nm, sub-30-watt system-on-chip

From the article, I could not tell if it was silicon-proven or just a reference design made available.

Anyway, the safety emphasis mentioned sounds good, and the quoted reason makes sense: _" If consumers don't trust the autonomous systems in their cars are safe, then mass market acceptance of this technology will be slow to happen."_</comment>


Billie Eilish proved anyone can access Grammy-winning gear - <AUTHOR> https://www.engadget.com/2020/01/27/billie-eilish-grammy-2020-bedroom-studio-logic-pro-x/ <comment><USER2> Hmm, but I think having parents who are both actors/musicians probably helps get you on the road to win the awards somewhat.</comment>