Introducing Project Mu - <AUTHOR> https://blogs.windows.com/buildingapps/2018/12/19/%e2%80%afintroducing-project-mu/ <comment><USER2> What is "Firmware as a Service" ?

In my mind, firmware is the low-level software that's embedded in a device, and is both hard to change and unlikely to need to change, because it provides utility foundational to using your hardware. How do you turn that into a service?

Edit: apparently I can't read because it was right in there: _" Firmware as a Service optimizes UEFI and other system firmware for timely quality patches that keep firmware up to date and enables efficient development of post-launch features."_ So basically, take the limitations I mentioned and get rid of them.

<comment><USER3> "As a service" in this context means the mental model / delivery pipeline is more like subscribing to a service than purchasing individual software. I'm sure this makes more sense to Microsoft folks; open-source folks are more likely to call it "continuous deployment" or "living at HEAD" or something. They compare it to Windows-as-a-service, the idea that you run the current version of Windows, not the version you paid for and future updates involve change control and procurement and other bureaucracy.

Firmware does change and often has security vulnerabilities, so you do need to be keeping it up to date the way you keep your OS up to date. Among other things, it includes processor microcode / errata fixes like some of the Spectre, Meltdown, etc. mitigations. It would be nice if we lived in a world where this doesn't need to change, but it does, and thankfully it is firmware and not hardware.

<comment><USER4> I hate to admit that I just realized the hard -> firm -> soft ware analogy.

<comment><USER5> _Hardware met Software on the road to Changtse. Software said: "You are yin and I am yang. If we travel together we will become famous and earn vast amounts of money." And so they set forth together, thinking to conquer the world._

 _Presently they met Firmware, who was dressed in tattered rags and hobbled along propped on a thorny stick. Firmware said to them: "The Tao lies beyond yin and yang. It is silent and still as a pool of water._

 _It does not seek fame, therefore nobody knows its presence. It does not seek fortune, for it is complete within itself. It exists beyond space and time."_

 _Hardware and Software, ashamed, returned to their homes._

— _The Tao of Programming_ , Geoffrey James, 1987

<comment><USER6> That made my morning! Thank you for sharing.

</comment></comment></comment></comment></comment><comment><USER7> Not to be too anti-microsoft. But this seems like they're bringing the EUFI into windows, therefor allowing them in the future to make it harder than it already is(or eventually impossible) to actually get into the EUFI to install a competing OS.

I admit I'm decently "tin-foil hat" about microsoft, but every new laptop I've bought over the last 10 years have been progressively harder to get into UEFI/BIOS to remove windows and install a new OS.

<comment> amiga-workbench Ubuntu runs on Windows now, why would you ever need to leave ;)

<comment><USER8> Embrace, extend, extinguish.

I am one of those wary of Microsoft. The current CEO was around during the Halloween Diaries. Even if he is well meaning, he is just an employee who can be replaced any day at the whim of large shareholders like Ballmer and Gates who consider Linux to be a virus.

<comment><USER9> > Embrace, extend, extinguish.

It's disappointing that literally anything that Microsoft does has this same comment right on top. Does it add anything to the discussion? We've all seen this comment at least a thousand times in the last 15 years. You haven't even taken the trouble to chalk out a plausible path for embracing and extending. Forget that, you haven't mentioned _who_ they're embracing and extinguishing. At this point it's just repeating a tired meme for the sake of karma.

Not calling you out in particular, but here are other tired HN memes that can be reliably milked for karma

* If you're not paying, you're not the consumer, you're the product.

* It can be difficult to explain to something to someone when their job depends on not understanding it

* Joel Spolsky's article on rewrites

<comment><USER8> The various responses to my "embrace, extend, extinguish" got me thinking about why I continue to be apprehensive about Microsoft. Perhaps it is because of my experiences with Microsoft and their dirty ways. They have a history of screwing the user over.

A bit of a rant/recall follows: I had lost content to a doublespace bug and was asked to pay for drive space via an MS DOS upgrade to 6.22, I have seen how Microsoft encouraged piracy in schools and colleges in India, how they have used FUD to suppress open source education and adoption efforts in the government and education spaces. I also recollect all the dirty stuff around Frontpage "extensions", IE extensions + IE's excessively forgiving tendencies to HTML violations and incorrectness, how MS took spyglass software and did bad things with it. Later, the Haloween Documents showed how MS said one thing in public and plotted another thing in private. They were Gurus of scheming behaviour. Then there was the Microsoft Windows tax, where you had to pay the Windows license fee even if you planned to run Linux on your computer. I also had to struggle with the MS Java, J++ rubbish. Microsoft used to do such bad things so deliberately. I also recall bad things around UEFI, around making it difficult for Linux distros to dual boot on laptops (which got resolved later).

Recollecting all of the above doesn't make it easy for me just to accept that with some code releases and PR announcements, MS would have turned over a new leaf.

People behave as they are measured. Satya Nadella is changing the public image of Microsoft, and even walking the talk. I learned just now on Wikipedia that he tripled MS stock, and that anonymous polls within MS have called him the best CEO of a US company. I am not an MS employee, so I won't know if he has managed to change the internal cultural tendency of being insincere and vicious (see above for examples).

I'm just apprehensive that at the end of the day, he is just an employee. Employees can get fired anytime, overruled anytime.

Perhaps I am being unfair to MS and Satya Nadella, and to all those MS employees who are giving their best. To them all - I apologise for my ill will.

<comment><USER10> Except many seem to praise Google for doing similar stuff, but hey "Do no evil", so they are on the clear.

<comment><USER11> Uhm, google removed that "dont be evil" motto from anywhere and everywhere in their website.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> In the "Introducing Project Mu" blog post it says "The Microsoft Devices Team is excited to announce Project Mu, the open-source release of the Unified Extensible Firmware Interface (UEFI) core leveraged by Microsoft products including both Surface and the latest releases of Hyper-V."

And I saw in one of the tickets for Virtualbox [1] that:

 _You go VM-entry, execute guest, VM-exit. Cooperatively. Unfortunately MS launches Hyper-V at boot time as a service and keeps a hold of the VT-x, regardless of use or not_

and

 _This is a problem with Hyper-V being too aggressive and not releasing VT-x once it 's got a hold of it. VMWare and VirtualBox for example can not only coexist, but they can run concurrently. Not so with Hyper-V._

So does that mean that we can finally have virtualbox/vmware when hyper-v is enabled but not in use, or do they have to open up more in order to get this fixed?

I am afraid that may be the case as the only thing I saw in my first quick glance was VTd(directed io) code[2] and in a quick glance in other repositories I saw VMCALL but I haven't found VMXON yet, so maybe it is a step in the right direction.

[1] [https://www.virtualbox.org/ticket/16801](https://www.virtualbox.org/ticket/16801)

[2] [https://github.com/Microsoft/mu_silicon_intel_tiano/tree/rel...](https://github.com/Microsoft/mu_silicon_intel_tiano/tree/release/201808/IntelSiliconPkg/Feature/VTd)

<comment><USER13> No, Mu has nothing to do with this, Mu is a fork of EDK2 with a nice GUI and continuous update whatever stuff. This is firmware. Hyper-V uses firmware to boot an OS, but that's all _inside_ the VM.

More to the point though, MS recently made a public Hyper-V API thingy. Windows Hypervisor Platform I think it's called. It's similar to how KVM, bhyve (vmm.ko) and Apple's Hypervisor.framework (its kernel counterpart actually) work. Now you can use Hyper-V itself + any third party frontends that use that API. E.g. the Android emulator is going to switch to this.

VirtualBox/VMWare should leverage these APIs but they don't because they're way too invested in their custom kernel modules already.

<comment><USER14> Isn't the new Hyper-V support in VBox 6.0 using that? [https://www.virtualbox.org/manual/ch10.html#hyperv- support](https://www.virtualbox.org/manual/ch10.html#hyperv-support)

<comment><USER13> Ooh. Nice. I didn't notice that.

I wonder why they're expecting "performance degradation" though…

</comment></comment></comment></comment><comment><USER15> Wow, I'm excited to dig into this.

Crazy to imagine that you could buy a _Microsoft_ Surface, strip Windows and replace with Debian and have a fully open source device.

This raises my odds that they open source the Windows Kernel from ~2% to 4%.

<comment><USER16> Er, people have been running Linux on Surfaces for years. With decent UX for a while as well, as I understand it.

<comment> david-cako see Stallman's take on modern computers and phones; virtually impossible to distance yourself from proprietary firmware and BIOS

<comment><USER17> i just don't understand how his take is at all relevant in modern times. i am sure he uses microwaves, refrigerators, homes, vehicles, etc. on a daily if not hourly basis that have non-free software and firmware. what does he or anyone even do with open source, free firmware?

<comment><USER18> > As for microwave ovens and other appliances, if updating software is not a > normal part of use of the device, then it is not a computer. In that case, I > think the user need not take cognizance of whether the device contains a > processor and software, or is built some other way. However, if it has an > "update firmware" button, that means installing different software is a > normal part of use, so it is a computer.

[https://stallman.org/stallman-computing.html](https://stallman.org/stallman- computing.html)

<comment><USER19> That... Doesn't make sense. What if the "button" (probably a jumper or connector on the motherboard) isn't normally accessible to the end user, like a lot of embedded devices? If it has a CPU, ROM, RAM and runs code it's a computer!

</comment></comment></comment></comment></comment></comment><comment><USER20> Riiight... as the author of the Mu editor (a volunteer led code editor aimed at beginner Python programmers and educators -- [https://codewith.mu/](https://codewith.mu/)), this was rather a surprising turn up for the books this morning.

I guess "just Google for Mu" won't work any more. Beginner coders are just gonna love "Firmware as a service". ;-)

<comment><USER21> I also thought this was going to be something about Mu editor.

Reminds all over the GVFS story again:

[https://github.com/Microsoft/VFSForGit/issues/7](https://github.com/Microsoft/VFSForGit/issues/7)

<comment><USER21> Ok, maybe not exactly "all over".

1\. GVFS name is trivial, but less trivial than just "Mu"

2\. Mu Project vs. Mu Editor makes it still distinguishable

3\. GVFS (now gio?) exists for ages, Mu Editor and Project Mu are two fairly new projects.

I guess I'm just still upset about how people at Microsoft picked the name back then and how little they initially considered changing their name.

</comment></comment></comment><comment><USER22> I wish developers of remote firmware updates would demand a physical write- enable switch. I get tired of the risk of remote installation of malware.

</comment><comment><USER23> Microsoft could have contributed to coreboot instead if they claim to be so opensource-friendly. Or wrote firmware in safer language like Rust. Tradional UEFI code is a total mess, from programming practices view and from security/safety point of view too. For a long time they stuck with Python 2 only for their tooling, C89 compatibility, non-standard types, etc.

P.S. Note, that most of the UEFI is not open source - so called PI code (Platform Initialization), which performs real platform booting is closed source in almost any board. Coreboot is targeting this stage too.

<comment><USER24> PI code on x86 is provided by Intel. You can't ever open source it.

Coreboot, like other offerings, sets up the basic stack and jumps to Intel provided blob, which then jumps to the provided hook in Coreboot when a particular part of initialization is done. DDR controller, microcode patching are all done at start-up via this mechanism.

<comment><USER25> Intel claim one reason that you just have to trust their binary blob PI/FSP to do these kinds of things is because at each stepping release of a given CPU there are different early boot errata and microcode abilities until microcode is loaded from flash. It's a bit of a stretch, but the insulation can be thought of as useful in the right light.

</comment></comment></comment><comment><USER26> >Firmware as a Service

You may be a victim of firmware counterfeiting, please make sure you paid your subscription fee before we let you change your boot options.

</comment><comment><USER27> Suppose I want to get into hacking UEFI firmware. Does this mean I can buy some Microsoft device, download the C++ code for the firmware, make some changes if I want to, compile it, and load it onto the device?

If so, that's really cool.

<comment><USER28> If you're flashing via the UEFI interface itself (which can have a very fancy terminal), the firmware might need to be signed. I bet Microsoft will not share the signing keys.

<comment><USER29> Production surface devices have intel bootguard enabled and the public key fused into the pch. You'd have to bypass it somehow.

<comment><USER30> That is only used to check firmware signatures, not UEFI binary signatures. You should be able to add keys to DB and KEK at your leisure. Also Microsoft has a paid program to sign UEFI binaries (that's why you can boot most Linux distributions on secure boot hardware).

</comment></comment></comment></comment><comment><USER31> Main code repository here: [https://github.com/Microsoft/mu_basecore](https://github.com/Microsoft/mu_basecore)

</comment><comment><USER32> A whole bunch of links don't work or have empty pages:

Code Development Overview [https://microsoft.github.io/mu/CodeDevelopment/overview/](https://microsoft.github.io/mu/CodeDevelopment/overview/)

Code requirements: [https://microsoft.github.io/DeveloperDocs/code_requirements](https://microsoft.github.io/DeveloperDocs/code_requirements)

Has someone been able to build the code and reflash their surface? I'm trying to understand whether the code posted online is complete.

</comment><comment><USER33> This is really nice! I wish there were hardware manufacturers interested in shipping PCs/laptops with Mu.

<comment><USER34> Isn't that a bit like posting a job description right now asking for 3 years of experience with project Mu and 10 years of Kubernetes experience? ;-P

<comment><USER33> When Google announced Open Handset Alliance (Android) in 2007 it already had 30 members or so.

</comment></comment></comment><comment><USER35> Project Mu[1] is already a taken name. It's not in the same field, so not a trademark violation, but for those of us who fall into both categories I will never mentally think of this product when I hear Project Mu, because there's so much history behind the original.

[1]: [https://www.project-mu.co.jp/en/index.html](https://www.project- mu.co.jp/en/index.html)

</comment><comment> King-Aaron Do they just not check to see if their names are already established brands?

I don't think Microsoft is in the performance braking market.

[https://www.project-mu.co.jp/en/index.html](https://www.project- mu.co.jp/en/index.html)

<comment><USER36> As well as the Mu Python Editor...

and Mu Online, an MMO... Yeah they didn't research this _at all_.

It's not exactly a unique name...

</comment></comment><comment><USER37> Great. So we have now another meaning for FaaS (Functions as a Service vs. Firmware as a Service). I was slightly confused while reading that article until I noticed that they're talking about Firmware as a Service (whatever that even means).

</comment><comment><USER38> I wonder if MS will eventually opensource Windows as they see declining revenue and focus more on the store aspect.

Seems like MS has been seeing alot of benefits to open sourcing their stuff they are beginning to release more and more.

</comment><comment><USER39> Unfortunate name collision with the excellent mu editor for python. I wish people would Google the name of the product they're launching before launching it.

<comment><USER40> There is also Mu Online, a popular MMO. I honestly thought this was gaming news.

</comment></comment><comment><USER41> Yes but will OEMs adopt this instead of bundling their own, and often buggy/crappy UEFI code and interface?

<comment><USER42> I never understood the incentive of OEMs going with some proprietary crap instead of using coreboot or something like that.

<comment><USER43> Hardware is about 10 years behind the rest of the software world and hasn't discovered the benefit of open source yet. I have talked to some firmware devs and the idea of open source is totally alien to them.

</comment></comment></comment><comment><USER44> Project Mu is also a brand of brake pad. I always appreciated the name.

</comment><comment><USER45> Finally! Now we just need to get 3rd party manufacturers on board.

</comment><comment><USER46> Opening up easier ways to modify firmware? Yeah, I just can't see how that will ever be abused...

Ransomware/cryptominer worm writers are probably salivating over this news.

<comment><USER47> This is not providing anything that wasn't possible before. You could both create your own uefi software and potentially load custom firmware if the device didn't lock it down with signature checks.

</comment></comment><comment><USER48> Mu is one of the few Python code editors that is actually great when teaching kids "normal" (i.e. non-visual) programming: [https://codewith.mu/](https://codewith.mu/). It has several modes that make it easy to e.g. start developing for the micro:bit or create PyGame games. It's not nice if a big company takes over a name already used by an open project - whether by ignorance or negligence.

</comment><comment><USER49> I am a bit lost here. Is the UEFI boot same concept as Linux UEFI boot? How will it elvove and help Linux in the future?

</comment><comment><USER50> Will the team be renamed the "Justified Ancients?"

</comment><comment><USER51> Great. Windows updates will now be able to brick the hardware.

<comment><USER52> This is something that has been used for Surface products for a long time and it hasn't been an issue as far as I know.

<comment><USER53> This is because surface ironically has quite a small testing surface. All hardware from all PC manufacturers is much harder to validate.

</comment></comment></comment><comment><USER54> [https://github.com/Microsoft/mu_basecore](https://github.com/Microsoft/mu_basecore)

> Copyright (c) 2016-2018, Microsoft Corporation

yet most of the files have

> Copyright (c) 2012 - 2017, Intel Corporation. All rights reserved. > > Copyright (c) 2017, AMD Incorporated. All rights reserved. > THE PROGRAM IS > DISTRIBUTED UNDER THE BSD LICENSE

<comment><USER55> Yes, and the full set is listed in [https://github.com/Microsoft/mu_basecore/blob/0d16728c1b41e2...](https://github.com/Microsoft/mu_basecore/blob/0d16728c1b41e25e55476358f6dcf4d8fed45f8d/License.txt#L1).

</comment></comment><comment><USER56> From the boot options screenshot, I can't find any trace of the _one_ thing I look for in UEFI implementations - ability to _easily_ unlock the secure boot state and boot some arbitrary OS. This seemingly fails to meet even the lowest bar for a good-enough UEFI implementation.

<comment><USER57> You can load your own keys: [https://github.com/Microsoft/mu_basecore/tree/release/201808...](https://github.com/Microsoft/mu_basecore/tree/release/201808/SecurityPkg/VariableAuthenticated/SecureBootConfigDxe)

</comment></comment><comment><USER58> With that stream of open source projects from Microsoft, a Linux based Windows11 should be released any minute now

</comment><comment><USER59> Reminds me of Mu, [https://codewith.mu/](https://codewith.mu/)

Mu is an editor for python. I thought Microsoft were going to start sponsoring Mu. Doh.

</comment><comment><USER60> They just keep pushing their spyware.

</comment><comment><USER61> Firmsware as a service???

<comment><USER62> do you have any particular thoughts on that?

<comment><USER63> What does firmware as a service even mean.

<comment><USER64> I for one am still waiting for Service as a Service</comment></comment></comment></comment>


Paypal blacklisting the word "Iranian" - <AUTHOR> http://www.cityofsound.com/blog/2013/07/paypal-and-the-word-iranian.html

<comment><USER2> I've heard of payment processors marching to the drumbeat of sanctions --- but this is a really stupid way to do it.

</comment><comment><USER3> In my books, Iran is under occupied since the revolution was co-opted by islamists in 1979 -- maybe that's naive or wishful thinking, but it's the way I see it. Iran has an incredible lust for life and wonderful people in it that could use help, and this breaks my heart.

I can understand that some sanctions against its government will hurt its people and that this can't always be avoided. But I also think a photo book about the normal lives of normal Iranians is _exactly_ the kind of thing the world needs to see more of. Maybe it could be argued to "aid the enemy" in some sort of twisted way, or that it would funnels huge moneys into the country. But at the same time, how can you say or accept that with a straight face? At which kind does such bullshit become part of the problem instead of being a heavy-handed "solution"?

There is this African saying, "when elefants do battle, the grass suffers." I think it applies here.... _Iran gov and USG, sitting in a tree -- B.O.M.B.I.N.G._ (I don't mean literal bombs, I don't mean to make fun of it, and I know you could say this about a lot of governments, though it might not rhyme)</comment>


Show HN: Storming.me – Tweetstorms as a screenshot of text - <AUTHOR> http://storming.me

<comment><AUTHOR> Here's what Owen Williams of TNW says about Storming.ME:

 _This is a pretty cool little tool, built by @karangoel which is perfect for the current trend of tweeting screenshots of text. It automates the whole thing! E.g.[https://twitter.com/ow/status/546804495033053184*](https://twitter.com/ow/status/546804495033053184*)

What Ryan Hoover says:

_Images are known to drive more engagement on Twitter. We saw an ~80% increase as soon as we started including screenshots in the @ProductHunt Twitter feed.*

Another example: [https://twitter.com/karangoel/status/547162613029687296](https://twitter.com/karangoel/status/547162613029687296)</comment>


Ask HN: I want to learn how to code. Can anyone tell me how to start learning? - <AUTHOR> Greetings,
I am a recent college graduate (as of this past May) and I studied chemistry and physics. I have plans to go to graduate school within a year for theoretical and computational chemical physics - that's basically fancy talk for predicting physical interactions between molecules using high performance computing. I have some experience in the field from working as a research assistant as an undergrad and while I never had any problems with the physics, I struggled a little bit with the coding aspect because of lack of previous exposure.
I also read this post "To founders who can't code"
http://news.ycombinator.com/item?id=1761530
It really hit home. I have had two failed ventures thus far which likely would have taken off better if I had the coding abilities to make my own demo. Instead I took the seed funding I received and hired people to do it for me - long story short things didn't work out; I lost money and disappointed people.
The author of the aforementioned post recommends that noncoder founders should: "Take 6 months off and go learn how to code (day and night, weekends including)." This is what I would like to do but I am unsure as to how to begin. Sure, there is a wealth of sources but I am unsure of which ones are quality sources and also what languages to learn first. I am not trying to be a coder or hacker overnight and my approach is methodical: I will devote 8-10 hours per week to learning. I generally pick up things fast; the key though, is having interesting problems to solve which increase in order of difficulty.
If anyone can give me a few pointers on how I can start learning (what resources are good, what language to begin with, a good program of studies) that would be much appreciated as it would help me develop my future ideas on my own and would probably also help with my research. I thought a cool initial project would be an applet which queries each line of a word document with book titles (I keep a running list of all the books I've read, one per line in a doc) and searches the net for a picture of a book cover and imports it into the app. Apologies for my ignorance but would this be a realistic project within 6 months?
Lastly, I did run a search on this but didn't find any related threads; I apologize if this Q has come up before.
Thanks for your advice, AKD <comment><USER2> I wrote this:

<http://learnpythonthehardway.org/book/>

It's free. Do this:

1\. Use your current computer. It doesn't matter if you have Linux, OSX, or Windows. What matters is that, right now, you want to learn to code, so you should go learn to code, not learn to setup a new OS.

2\. Just use gedit. Don't use vim, vi, emacs, or any "hardcore" editor. On a Mac if you're using a non-English keyboard, use Textwrangler. Learning a new editor is _not_ learning to code.

3\. Start now, do what I tell you in the book. Type code in, do _not_ copy- paste, make it run, fix it until it does, do the extra credit, then go on to the next one.

4\. Other programmers will tell you to use their favorite tools, just ignore them. Just use gedit, Terminal (cmd on Windows), and python. That is all. Nothing else. Everything else is a distraction.

5\. Finally, do it every night, for 2 hours a night, and take a break on one day. You'll be surprised how quick you can get through the book, and you'll get stuck sometimes, but keep doing it.

After that, move on to other more advanced topics and try to learn more stuff, but for now, just do this.

<comment><USER3> Zed, thanks for the book, I just got started with it.

I have heard that when done with the book, I still won't be able to program in Python. Can you elaborate on that?

Also, what do you recommend after completing your book? I'm interested in building web apps.

<comment><USER4> Zed's right start with a non-IDE solution such as using a basic editor..as it forces you to think and get at the object-oriented abstraction of the programming language you are attempting to learn.

<comment><AUTHOR> Zed thank you, someone posted a link to your site last night and I think it is very right for me. I will use it.

As per the Windows vs Linux debate - I have found most physics labs use either various Linux distros (Red Hat is super popular) or OSX. I myself have a MacBook Pro running OSX and so I just downloaded and will be using TextWranger as an editor to complete the lessons.

</comment></comment></comment></comment><comment><USER5> I was in your shoes 11 months ago, so let me give you some real-world advice. If you have a friend that knows any language (Python, Ruby, PHP, etc) start there. They will be there when you have questions, and having a person to turn to is the most important thing. However lets say you don't have a friend to turn to- start wit h Python.

Try Google App Engine to get started so you don't have to worry about dealing with a server. Start here <http://learnpythonthehardway.org/>

Find a copy of <http://oreilly.com/catalog/9780596801601#toc> for understanding basic ideas with HTML, CSS, JS and Python/GAE.

In the meantime, start a blog and write about your stuggles and the things you learn. Initially it won't really be about coding - but the main thing is showing momentum to the outside world. (Trolls will hate just ignore). By getting your name out there, people will be more interested in helping you.

Start there. If you have questions, my email is emile (at)

</comment><comment><USER6> I think it best to learn how to code by working on an actual project. You seem to already have a project in mind, and I think that would be a fine project.

Break it up into steps. First write a program that opens a file, reads the book titles and displays them on the terminal. Then write a program that makes some sort of network connection; maybe download the HTML contents of a website. Etc., etc., until you've learned how to do the various subtasks involved with your project, and then assemble it all together.

I'd suggest that Python would be a good language to start with. I personally like the O'Reilly book _Learning Python_ , though there are many options.

<comment><USER7> Agreed. I'm self-taught and have been working in the industry for 12 years now. The way I got started was that I had a project I needed to do, so I figured out what I needed to know to get it done. The same is true with my iPhone app -- I knew nothing about Objective-C when I started it, and it's 3 years old now. Learning for the sake of learning is fine, but learning how to build something you want to build and really seeing it come to life is a pretty phenomenal way to learn.

<comment><USER8> I also agree. I tried reading a book on Objective-C, read the first two chapters, and ditched it for the iPhone SDK. I messed around, and tried making some ideas come to life. It took me a couple months, but eventually I was fluent in Objective-C.

</comment></comment></comment><comment><USER9> Hi. Most of the advice in the comments already posted is sound, but none of them seemed to address HPC. Working on a cluster invites an entirely different bundle of conceptual and practical hurdles (e.g. parallelism, working remotely, industrial-strength shell scripting &c.) Even though I had been programming since I was a kid, I found my crash-course in HPC to be quite challenging; confronted with a new programming model in a new low-level language, it was the first time that I really appreciated what it must be like not to know how to program at all.

So: code as much as possible. As soon as you can possibly stand it, look into MPI4py and start parallelizing your code. Chances are you won't be working with python in HPC contexts, but learning parallel programming at the same time as C or fortran would be needlessly difficult. I would also try to get time on a cluster as soon as you're in a position to use it respectably. Most universities with HPC facilities have an online application for an account, and some sysadmin might take pity on you :) Otherwise, maybe Amazon has some kind of deal?

In the interim, become _very_ comfortable with bash and general command line fu, and a serious text editor. Good luck!

<comment><USER10> Do you think that learning about parallelism would help a beginner to learn how to program, or to understand code better? I consider myself an intermediate programmer, with about five years of experience, but have never explored HPC. Not sure it would have helped me more to have done so as a beginner.

<comment><USER9> I'm not sure, really. In Saeed Dehnadi's article "The camel has two humps", it's mentioned that there are three great filters in programming pedagogy:

* assignment/sequence

* recursion

* concurrency.

Most students never master the first, and most of those never master the second, and so on. In that spirit, I would recommend that the OP firmly grasp the first two with both hands before reaching for the third. Of the languages the OP could study that treat concurrency or parallelism as a kind of conceptual primitive (e.g. Scala or Erlang), none are likely to appear as working languages in an HPC milieu. Almost always, the libraries are bolted on as an afterthought to traditionally popular languages for scientific computing.

I think this is a regrettable pattern, but a pattern which will shape the OP's daily work if they wish to begin (and remain in) a program in computational chemistry.

All I meant to suggest is that when the OP begins to learn parallel computing, they want to be thinking about parallel algorithms, not segfaults or pointer purgatory or the finer points of scp or vi. The sooner the former can be mentally sublimed, the better the OP will feel about HPC.

</comment></comment></comment><comment><USER11> I am in the process of doing exactly this.

If your ventures are web apps, my recommendation would be to learn Ruby on Rails. You will be able to build demo apps within a few months of 8-10 hours per week.

I started with RailsTutorial.org, which is a free book that will take you from installing Ruby to building a twitter clone. From there, get a few books, I recommend Agile development with rails and The Rails 3 Way, and continue to work on some smaller apps. There are also great screencasts you can find by searching for "railscasts."

If you are using windows computers, install Ubuntu Linux which is really easy with Wubi. I have found it makes things easier. If you have a mac, stick with it.

For text editor, I use Sublime Text 2, and if you're on mac, just go with Textmate.

Sign up for Github and learn about version control. Also, go through projects on Github and learn by reading other people's code.

After you have a semi-grasp of the basics, start building something substantial.

Search Stack Overflow when you have questions, and if you've been trying to figure something out for over six hours, ask a question on Stack Overflow.

For html and css questions, I generally just google any issues I have and fool around in firebug, which is a firefox extension that lets you edit html or css and see the changes on your screen.

Best of luck!

</comment><comment><USER12> You need to take a bottom up approach. Fill your time studying the very basics (i.e., programming languages, components, specifications, history, etc.). Online video lectures [beginning with] Programming Languages was where I ended up learning the greatest amount in the first weeks.

I started with MIT OpenCourseWare. I was very fortunate to find this lecture series: [http://www.youtube.com/edu?edu_search_query=intro+computer+p...](http://www.youtube.com/edu?edu_search_query=intro+computer+programming&action_search=1) because it is class taught at MIT for students entering the CS or engineering programs that have little or no background in Programming Languages.

Hint: Pay attention in the first and second videos close enough and you'll learn how to locate online resources that are provided to the enrolled students.

</comment><comment><USER13> Grab yourself a copy of Racket (<http://racket-lang.org>) [also, the quickstart guide at <http://docs.racket-lang.org/quick/index.html> might be useful], the How to Design Programs textbook (<http://htdp.org/2003-09-26/Book/>), and most importantly, set aside some solid blocks of time to dive in. You will learn most by doing, and through doing you will gain understanding.

</comment><comment><USER14> By coding.

That may come across like a smart-ass answer, but it's not. I'm in the same boat, and I'm learning the same way. I've got a Mac dev environment, and Linux dev environment. I'm using a book by Stephen Kochan, and another by Dave Mark.

We're _surrounded_ by a plethora of materials to help us learn.

Just do it! Pick one up and read, and write some code. Stumble through. You _will_ make mistakes.

See emilepetrone and @housefed for a good example of this. He posts on here all the time. He's only been coding for a year, and has a functional website.

</comment><comment><USER15> Python should be a reasonable first language but you might have need for others later. Use a simpler editor at first so you can concentrate on coding, not working the editor itself. The editor should be able to show line numbers so when your program reports errors on a line number you can find it. Syntax highlighting is a plus. Code most everyday (take some breaks) but please think your problem through before committing to a solution! Be sure to read code from others to pick up tips/style. Work through some books or something. You don't have to be a top-notch expert all at once. I think the Perl community says it's okay to just use the parts of the language you understand until you learn more! (However becoming fluent in gritty details will make things smoother when you don't need to look up mechanics as often. A musician needs to know their scales.) Try rewriting old projects when you get better. That implies saving your work somehow. Be sure to learn how to create modular libraries and to use libraries written by others! You can't put everything into one source file unless it's something simple and there's useful functionality to be found.

</comment><comment><USER16> I've been in the process of teaching/pointing in a general direction a couple of friends on how to program. "Learn Python the Hard Way" was far too boring, and wasn't practical enough for my friends.

If you're used to and good at learning in a school format, MIT OpenCourseWare is excellent. My friends also liked the videos better than learning by book.

[http://ocw.mit.edu/courses/electrical-engineering-and- comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer- science/)

I would go in this general order for beginners. Do all the assignments, and don't cheat. Ask for help on explaining the solution. These courses help in building good fundamentals, then apply what you learn to a personal project.

      1. 6.00 - Introduction to CS and Programming (Python)
      2. One of: 6.087, 6.092, or 6.096&6.088, (C, Java, C++) respectively.
         For scientific computing, pick C and/or C++.
      3. 6.046J - Introduction to Algorithms

From there, 6.001, and perhaps the database course (I think experiencing databases is much easier that a taught course)

Doing #1 already goes a long way to your proposed project.

</comment><comment><USER17> Look for a mentor who is already working on a real-world project. The problem with learning things on your own is that the examples from which you are self- learning are (by design) too simple and often unrelated to a result that you want.

That's not to say the tutorial/source would be completely unrelated, but it sounds like from your post, that coding isn't something that comes easily which means that in order to make the leap to something that you actually want to do, you'll need more than a book to guide your way.

The great thing about a mentor is that they (should) will have a real life problem for you to solve and they can help you work through some of the subtleties of the problem.

I used to think that anyone can learn to code (this was when I was 18). I find, now, that there are people that are more naturally inclined to it and some people that will never be able to, because their brains don't work that way. I would gently encourage you to be open to discovering where you lie on that spectrum and not to be too disappointed if you've tried but still find yourself swimming in molasses.

</comment><comment><USER18> The best advice I can give you is to write as much as you can before you start coding. Putting a program or app together is 60% critical thinking, 20% writing, and 20% error management. If you've already got some ideas, try to break them down as much as possible.

As for specific languages to learn: startups in particular seem to love Ruby, but honestly, they all work the same way, fundamentally. I crashed through the basics of Ruby in a week, started learning JavaScript, and stopped shortly after realizing that the majority of it was the same code just written differently.

++ to keeping a journal. It keeps you in check, because even though you say will will devote so much time a week to it, you won't. I had to start setting personal goals on a daily basis. That drive alone is helping. Keeping a blog is great for peer support too. I don't get many comments on mine, but it definitely feels good when someone stops by to say, "Hey, this is cool stuff."

Hope that helps, and good luck!

</comment><comment><USER19> I'm new to coding as well, but so far what I've gathered is that WHAT language you learn is less important than actually sitting down and getting dirty with code.

When I was trying to decide what to learn I narrowed the search down by just heading to the book store and flipping through some books on various languages. Ultimately, I ended up with a choice between Ruby and Python. I couldn't tell what the major differences were, so I just decided to pick Ruby. I figured that there was no real way of recognizing the nuances of ANY language until I actually had one under my belt and could better understand what makes each one tick.

I'm fully aware that this was a somewhat cavalier method of choosing the pal I'd be spending the majority of my waking hours with, but I think that starting anywhere is better than stalling because you can't decide.

So far I'm satisfied with my choice. I think I would have been satisfied with Python too.

</comment><comment><USER20> If you end up choosing python, a popular first book is: <http://learnpythonthehardway.org/>

A lot depends on which language is going to be helpful in your computational physics class: you should find out which language they'll expect you to work in.

</comment><comment><USER21> I'm actually 2 months into learning to program Javascript for the Unity3D engine. I've learned a lot in 8 weeks, and I'm happy I took the time to commit to it. I could actually start prototyping my own basic mobile games with Unity, something I never thought I'd be able to do.

So I guess from my experience: \- Find a single good source or book for tutorials and learning. Its best for the coding style and teaching style to be consistent. I used a fantastic series of free video tutorials produced by the Walker Brothers, which included 3 entry exams, and a series of lab assignments after each tutorial set. I had to submit the work in order to get access to the next set.

\- Find a good Q&A source like Stackoverflow, forums, or a site more specific to what you're coding in. When you get stuck or don't understand something, go and ask (search first). +1 if you have programming friends to ask too.

\- Keep a journal (really!) on Google docs. At the end of the night, you can quickly re-hash what you learned (cs concepts, or cool functions you learned), or often write out the things you don't understand. That way, when you start up again, you can do a quick review on where you left off and get back to figuring out things you previously were stuck on.

\- Try not to skip past things you don't understand. If you don't understand them, take the time to practice out the code, or look up documentation. A big key point: its always worth it to invest the time to figure little problems out. I once spent 3 hours trying to get some timer controllers working just perfectly the way I wanted. They were actually OKAY to begin with and I was considering skipping past it for the sake of productivity, but in hammering out the problem, I gained confidence and had the satisfaction of solving a problem.

\- Get your things WORKING! As beginner programmers, our first concern is making what we want happen. Not pretty code, not computer science theory. Just results. Getting results fast gives you the confidence to try harder things, which will naturally take you into the world of organized code and computer science.

Good luck!

</comment><comment><AUTHOR> Lots of informative advice, I am very grateful to all of you. Thanks again. I think I will go with Python or Ruby after I check out the resources in the links that were posted. I plan to build my knowledge but as a person with a science background, I'm happiest when I'm solving a problem so I definitively see the merit in working on the project whist learning.

I don't think I have any further questions - I got loads more helpful advice than I thought I would ever get and again, I'm very grateful. The only couple things I feel are worth mentioning is that I am using a Mac and I have actually written a couple subroutine packages for HPC in FORTRAN but they are nothing too special as FORTRAN syntax is very simplistic.

<comment><USER13> I would also suggest one more thing: <http://mitpress.mit.edu/SICM/>

Since you say you have dabbled with physics, you may find this sort of method useful.

</comment></comment><comment><USER22> Set up a Linux computer (Ubuntu Linux is the easiest to set up), and spend the summer learning to program in Python.

Python is easy to learn (not much syntax), easy to read (explicit vs implicit), has a big ecosystem (more packages/libraries), is taught at universities so it's easy to find good programmers to help, and is used by many large websites/companies so it's a good language to know.

Here are some of the best online Python tutorials, including a link to videos and course material for MIT's introductory computer science course, which uses Python: [http://www.quora.com/How-can-I-learn-to-program-in- Python/an...](http://www.quora.com/How-can-I-learn-to-program-in- Python/answer/James-Thornton)

Build something that you want to use so it will be meaningful to you. Do you have a blog? That's usually a good first exercise. It's easy to do using Flask -- follow the tutorial (<http://flask.pocoo.org/docs/>).

Here are some tips to get you started:

Use Emacs as the text editor to write your code -- it usually comes pre- installed on Ubuntu, and it has a Python mode. Here are some Emacs tutorials (there are some good videos on YouTube too):

[http://philip.greenspun.com/teaching/manuals/usermanual/emac...](http://philip.greenspun.com/teaching/manuals/usermanual/emacs.html) [http://www2.lib.uchicago.edu/keith/tcl-course/emacs- tutorial...](http://www2.lib.uchicago.edu/keith/tcl-course/emacs- tutorial.html) <http://www.gnu.org/software/emacs/tour/> <http://cmgm.stanford.edu/classes/unix/emacs.html>

Use PostgreSQL as your database. To install it on Ubuntu, use this command:

      $ sudo apt-get install postgresql

Use SQLAlchemy (<http://www.sqlalchemy.org/>) to connect your Python website to PostgreSQL.

Here's a good SQL tutorial: <http://philip.greenspun.com/sql/>

When you build a blog, you don't have to worry about building a public authentication and comment system if you use something like Disqus (<http://disqus.com/>) -- you just include the Disqus JavaScript tag at the bottom of the blog's entry page.

Here are some good JavaScript tutorials: [http://www.quora.com/What-are-good- books-preferably-found-on...](http://www.quora.com/What-are-good-books- preferably-found-online-for-free-like-eloquent-javascript-for-learning- javascript)

Use StackOverflow to ask programming questions: <http://stackoverflow.com/>

UPDATE: Here are links to some commonly-used scientific Python packages (<http://www.drewconway.com/zia/?p=204>).

<comment><USER23> The Python Tutorial (<http://docs.python.org/tutorial/>) is really pretty good.

Now, if you are doing more researchy work, then a lot of the web stuff is peripheral.

My advice would be to use scipy (the swiss army knife of scientific programming with python), matplotlib (for 2D plots), _something_ for 3D (maybe Mayavi2?), NetworkX for networks, PyTables for storing read-only data, the inbuilt csv library, ctypes or weave for performance ... and domain specific libraries here: <http://www.scipy.org/Topical_Software>

But don't worry about all that yet. You can hack together a good demo with nothing but scipy and matplotlib.

</comment></comment><comment><USER24> My advice, start with javascript:

1\. Learning C-like syntax provides a basis for reading a lot of other code.

2\. Javascript examples can be seen on any webpage simply by switching to developer mode.

3\. The javascript console allows experimenting with code while you read about programming on a webpage without leaving your browser.

4\. It is perhaps the most widely used programming language currently.

5\. Even if you are not interested in the DOM and webpages, there are still interesting exercises you can do in Javascript - I recommend project euler.

</comment><comment><USER25> Whatever language you choose, consider trying a few problems from <http://projecteuler.net>. The problems are small enough that you can feel the reward of getting the right answer. I used Python.

As an experienced programmer with math background using a language I knew, a problem took me 15-60 minutes. Not knowing a language or how to program, it might take several hours, but not weeks.

<comment><USER26> I'd second this notion, but with the added caveat that without a 'mathy' way to solve the problem, you can't get much beyond the first 15 or so (if you're good at math, great, if you just want to put down some code to solve a simple problem... I got frustrated :) )

</comment></comment><comment><USER27> I really won't add too many links to all the comments here. But Given you mention physics and some RA experience, i will say Haskell may not be as hard as a few others think. (i.e. If my idea of what it takes to do complete physics and/or chemistry graduation). I think in the end, you may have to spend an hour or two for each of the links before taking a call on which you prefer _.

_ \- Eeks, that looks eerily like common sense :-)

</comment><comment><USER28> You need to learn about

        https://secure.wikimedia.org/wikipedia/en/wiki/Apache_Subversion
        https://secure.wikimedia.org/wikipedia/en/wiki/Debugger
        https://secure.wikimedia.org/wikipedia/en/wiki/Profiling_%28computer_programming%29

and I believe <http://perldoc.perl.org/index-tutorials.html> is easy to learn for a novice

</comment><comment><USER29> I was about to suggest you to "Learn You A Haskell For Great Good" :) Way too complicated. Listen to the other guys that don't suggest Haskell. If you then discover your calling in programming, go back and learn Haskell at your own peril. Also try to stay away from LISP in your first lessons, and its ugliest kid, emacs. Use a simpler text editor that won't twist your fingers. gedit would be my suggestion.

</comment><comment><USER30> Rails for Zombies, of course!

<http://www.codeschool.com/courses/rails-for-zombies>

Nom nom nom...

</comment><comment><USER31> I don't mean to hijack the thread, but I'm curious; how did you go about receiving seed funding (and enough to hire people) for a tech/web startup while not having strong coding abilities yourself?

Did you hire people with the intent of having them build a demo for you?

And for other readers... Do either of these things happen much? Does it work?

</comment><comment><USER32> yesterday i showed my 12 year old kid (who, to my disappointment is more interested in sport, hip hop dance lessons, music (tuba) and girls then in code) <http://processing.org/> \- together we managed to write a drawing program with a game component in about 2 hours (he typed....) even though the language is in no way perfect or even pretty he finally "got" it.

so before starting with a small project, try to implement a one person tron / snake game in processing - it helps you to start "codethink".

after that i would recommend reading a shitload of books. if you are into mobile apps, try <http://ofps.oreilly.com/titles/9780596805784/> it's basically a tutorial for making a simple web app in HTML, css, js with no prior knowledge required.

</comment><comment><USER33> I would also mention the Lynda.com videos. I'm running one of their Perl tutorials now working in Eclipse and finally seem to be getting somewhere. And I really wish someone would put together an intro to programming series using Yahoo Pipes as a platform.

</comment><comment><USER3> I am also in your shoes, and have started with <http://learnpythonthehardway.org/> It seems to be one of the best ways to learn Python.

</comment><comment><USER34> I wrote an article on this subject a few weeks back. It is not a step-by-step "how to write code," but rather a good way to understand the approach to self- teaching yourself computer programming.

</comment><comment><USER35> I second the advice about setting up an Ubuntu machine. Windows is unnecessarily painful for development in comparison. Although there are "workarounds" around the problem, you'll find things much easier for development on an Ubuntu or Mac computer.

Now for a language recommendation. I am a Ruby programmer, so I've got a pretty heavy lean towards that.

Ruby is an exceptionally easy language to learn. There's a book called Learn to Program written by Chris Pine (<http://pine.fm/LearnToProgram/>) which is an amazing beginning to getting into Ruby.

Past that, there's the Well-Grounded Rubyist by David A. Black (<http://manning.com/black2>) which covers all the things from basic Ruby up to medium-advanced levels of Ruby). There's also Programming Ruby 1.9 by the Pragmatic Programmers (<http://pragprog.com/titles/ruby3/programming- ruby-1-9>)

If you want to brush up your Ruby skills, the Ruby Koans (<http://rubykoans.com/>) are also pretty good.

If you're looking to get into web development (well, you ARE on the internet!) then I would recommend learning HTML and CSS with a book such as HTML 5 and CSS 3 by Brian Hogan (<http://pragprog.com/titles/bhh5/html5-and-css3>). Then a good JavaScript book, perhaps something like JavaScript: The good parts (<http://oreilly.com/catalog/9780596517748>).

After learning as much of those as you can, familarize yourself with Git by reading the Pro Git book by Scott Chacon (<http://progit.org/>), or if you choose another version control piece of software (Mercurial, Bazaar are good, SVN isn't and CVS is (I'm pretty sure) the work of demons).

Ah and before I forget, I've got The Developers Code (<http://www.thedeveloperscode.com/>) bookmarked for late-night reading and I'm quite enjoying it so far. Quite a lot of lessons in there that I have learned over my brief career, but ones I knew from the beginning.

One more final thing: you are new here and people will treat you like that. Be nice to them and they will be plenty nice back. Respect the fact that they have limited patience and may not wish to answer your questions eternally. They may also have other people asking them questions at the same time you are, or have other things they would like to be doing.

You will get better with practice. You show a keen want to learn, which is a great start. Never give it up. Nothing is "too hard" forever. Persist, and for the love of god, practice.

<comment><USER36> While Ruby is a fantastic language and a joy to program in, if you are planning on heavy computation, python is a much better route to go. While everything can be tweaked and optimized in both languages, python is generally favored for performance and ruby for flexibility. Numpy and Scipy are both quite efficient and provide lots of functionality needed in scientific computation. Down the road, if you have a script that takes days, weeks, or even months to complete, python allows you to refactor the bottlenecks in your code into C without too much difficulty.

I spent a year working in high performance computing at a university and so much ugly and inefficient code was written in matlab. Had they written it in python, it would have been much easier to optimize and their research would have been much more productive.

<comment><USER37> I don't think the raw computing power is that important in this case. And if it was, there are better alternatives than Python.

However, I would suggest that Python is probably a better beginner/learning language than Ruby. There are many odd ends in the Ruby language that might easily trip an inexperienced coder up.

</comment></comment></comment><comment><USER38> Dude, coding is alot easier than physics. Stop procrastinating on HN, get a Linux machine and start your first project. If you want to do web stuff, learn PHP, otherwise use python. For your project you would need a library to extract text from word documents and something like curl to query google.

</comment><comment><USER39> There is plenty of good material on where to start with programming. Most of the links other people have provided here are very good.

A fairly good resource is Google Code University; <http://code.google.com/edu/>

In particular you may want to start with Python basics; [http://code.google.com/edu/languages/google-python- class/ind...](http://code.google.com/edu/languages/google-python- class/index.html)

</comment><comment><USER40> _interesting problems to solve which increase in order of difficulty._

Project Euler. Though the difficulty tends to sort of spike all over.</comment>


1816: The Year Without a Summer - <AUTHOR> http://en.wikipedia.org/wiki/Year_Without_a_Summer

<comment><USER2> Some say this year will be another "year without a summer" :(</comment>


Software Engineering – The Tesla Way - <AUTHOR> https://www.reddit.com/r/EnoughMuskSpam/comments/99sbwa/former_tesla_programmers_anecdotes_about_problems/ <comment><USER2> "we once patched openssl to ignore client cert expiry because somebody forgot to create a process to update keys in the field and all the customer cars started falling offline because their certs had expired."

</comment><comment><USER3> I hope someone from NTSB reads this. This is an incredibly damaging bit of info, if true.</comment>


Ask HN: Chat-App based on Mail and PGP? - <AUTHOR> Is there any known WhatsApp-Like chat for mobile-phones using PGP/Mail technique?
If not, why? Are there limitations for a (near)real-time-chat?
If yes, why are they not successful?
What if you could chat from within your app with all characteristics you already know from WhatsApp and your chat-partner just uses his thunderbird with enigmail and you do not have to take care of encryption, but it happens from end-to-end?
What if you could host the mail and app-backend on your own infrastructure? But it is still possible to communicate with others using their own server or using public server or with someone who does not want to use the app, but receives your messages via email - encrypted?
What if you could use multiple devices?
Wouldn't you want such an chat-app? <comment><USER2> Telegram has fully encrypted real time chat.</comment>


Building Up Perlin Noise - <AUTHOR> http://eastfarthing.com/blog/2015-04-21-noise/ <comment><USER2> For a beautiful visual explanation, see Toby Schachman's Shadershop videos: [http://tobyschachman.com/Shadershop/](http://tobyschachman.com/Shadershop/)

<comment><AUTHOR> That's a slightly different kind of noise than this, but still a neat set of videos. Thanks, I hadn't seen those before.

</comment></comment><comment><USER3> More on Perlin Noise: [http://flafla2.github.io/2014/08/09/perlinnoise.html](http://flafla2.github.io/2014/08/09/perlinnoise.html)</comment>


Non-Lexical Lifetimes in Rust Arrives for Everyone - <AUTHOR> http://blog.pnkfx.org/blog/2019/06/26/breaking-news-non-lexical-lifetimes-arrives-for-everyone/ <comment><USER2> I'm excited to see how this works out in practice. The nice thing about linking lifetimes to lexical scope is that it's easier to see the lexical structure of a program than to reason about its control flow. But if people have an intuition for the control flow that tends to match reality, this could be fine.

</comment><comment><USER3> Looks lexical to me, if we just add braces:

      fn main() {                               // SCOPE TREE
                                              //
        let mut names =                       // +- `names` scope start
            ["abe", "beth", "cory", "diane"]; // |
                                              // |
        let alias = &mut names[0];            // | +- `alias` scope start
                                              // | |
        *alias = "alex"; // <</comment><comment></comment><comment></comment><comment></comment><comment> write to `*alias`
                                              // | |
        println!("{}", names[0]); // <</comment><comment></comment><comment>--- read of `names[0]`
                                              // | |
                                              // | +- `alias` scope end
                                              // +- `name` scope end
      }

That is to say:

      fn main() {                               // SCOPE TREE
                                              //
        let mut names =                       // +- `names` scope start
            ["abe", "beth", "cory", "diane"]; // |
                                              // |
        { let alias = &mut names[0];            // | +- `alias` scope start
                                              // | |
          *alias = "alex"; } // <</comment><comment></comment><comment></comment><comment></comment><comment> write to `*alias`
                                              // | |
        println!("{}", names[0]); // <</comment><comment></comment><comment>--- read of `names[0]`
                                              // | |
                                              // | +- `alias` scope end
                                              // +- `name` scope end
      }

If _that_ can be made to work without diagnostics, it's a better solution than playing games with _de facto_ tying scopes to the last uses of identifiers.</comment>


California Has a Bill That Would Disable Encryption on All Phones - <AUTHOR> https://www.eff.org/deeplinks/2016/03/worried-about-apple-california-has-bill-would-disable-encryption-all-phones <comment><USER2> This is insane. The text of the bill states,

 _" This bill would require a smartphone that is manufactured on or after January 1, 2017, and sold in California, to be capable of being decrypted and unlocked by its manufacturer or its operating system provider. The bill would subject a manufacturer or operating system provider that knowingly failed to comply with that requirement to a civil penalty of $2,500 for each smartphone sold or leased."_ [1]

Do these guys realize that software can be copied from the other side of the world in seconds? This will do nothing to make us safer and will only hurt our own security.

I hope California tears this up and elects 52 more Ted Lieu's. I also think anyone who contributed to writing this bill should have their iPhones revoked, bank accounts and credit cards cancelled, and the right to use the internet stripped, because they clearly do not understand how any of our technology works.

[1] [https://leginfo.legislature.ca.gov/faces/billTextClient.xhtm...](https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=201520160AB1681)

</comment><comment> cat-dev-null Not just "hell no": Helll no.

These geniuses in Sacramento have no idea of the consequences of their actions.

Sign the petition, because the EFF may blizzard them with emails and letters. [https://act.eff.org/action/don-t-let-california-lawmakers- un...](https://act.eff.org/action/don-t-let-california-lawmakers-undermine- smartphone-security)

Anyone (Googlers, Applers, etc.) within 100 miles of Sacramento may consider organizing a field-trip to Sac, book meetings with their reps and educate them about privacy... it's harder to put off people whom follow-up consistently and hold reps accountable.</comment>


SEC Announces Its Largest-Ever Whistleblower Awards - <AUTHOR> https://www.sec.gov/news/press-release/2018-44 <comment><USER2> Whistleblowing can be it's own business model, just do a google search for Ven-a-care.

Ven-a-care is a small pharmacy down in the Florida Keys. A few decades ago, it started to notice that the price it was paying for certain drug was _very_ different from what the gov't thought they cost. Gov't price reporting is incredibly strict in pharma due to past mucking with the numbers.

So they started a lawsuit which was picked up by the DOJ.

Then they did it again, and again, and again.

Last I saw, they've racked up almost $600M in whistleblower awards.[1]

[1][https://www.cnbc.com/id/41491563](https://www.cnbc.com/id/41491563)

<comment><USER3> Bradley Birkenfeld did quite well whistleblowing on UBS [1]. $104m.

[https://en.wikipedia.org/wiki/Bradley_Birkenfeld#Whistleblow...](https://en.wikipedia.org/wiki/Bradley_Birkenfeld#Whistleblowing_and_arrest)

<comment><USER4> Considering many of these people end up blacklisted from their industry, we as a society kind of owe it to them.

<comment><USER5> We owe that guy 104 million?

<comment><USER6> We definitely owe them enough money that they could comfortably fill the payment gap to their next job (which might be never, meaning enough money to pay for inflation-adjusted lost income during the entire remainder of their career).

But in the name of pragmatism, it is unlikely that whistleblowers would blow the whistle on a purely economical basis if the reward wasn't higher than that.

<comment><USER5> Then we should also pay whistleblowers who report environmental issues a lot of money. I don't think that's the case.

</comment></comment></comment></comment></comment></comment><comment><USER7> Interesting to see the SEC finally grow some teeth, between the recent ICO enforcement actions, Theranos penalty, and now this. When I was in financial software (06-07) they were basically a joke; my employer had developed some software to help enforce a (relatively obscure) regulation and tried to sell it to them, and they were completely indifferent. Kind of a welcome change, if they manage to get people to be more interested in actual productive activity than fleecing dumber investors, but it'll take a while to change a culture.

<comment><USER8> "When I was in financial software (06-07) they were basically a joke"

I spent a few weeks causally reading testimony transcripts from the Madoff investigation when these were published by the SEC. The SEC was far worse than a joke. The SEC was an enabler. Years and years of Potemkin audits blessing Madoff and his Ponzi scheme as a worthy investment allowed hundreds of individuals and investors to rationalize their participation in the fiction. Complaints were filed, absurdities were pointed out and the SEC turned a blind eye to it all. By the time the gears finally stripped the SEC had had its nose rubbed in it multiple times.

<comment><USER9> > _The SEC was an enabler. Years and years of Potemkin audits blessing Madoff > and his Ponzi scheme as a worthy investment allowed hundreds of individuals > and investors to rationalize their participation in the fiction._

This doesn't sound right at all, the SEC doesn't conduct audits. See, for example, [1].

[1] _Investigation of Failure of the SEC to Uncover Bernard Madoff's Ponzi Scheme \- Public Version_ [https://www.sec.gov/files/oig-509.pdf](https://www.sec.gov/files/oig-509.pdf)

<comment><USER8> "the SEC doesn't conduct audits"

Poor terminology on my part I believe. The term used in the report is "examination." SEC staff, including Sollazzo, Lamore, Ostrow, Nee (mentioned in the report you cite) conducted on-site examinations of Madoff's operations. Similar events occurred with Madoff at least four times with over a period of about 20 years.

I'm having trouble locating the actual transcripts now[1]; they appear to have disappeared into the memory hole. At one time the mass of raw PDF files were available from the SEC website. I recall very specific testimony from these examiners including details such as the type and locations of the offices provided for examiners by Madoff, recollections of in person meetings in Madoff's office and details about the physical files involved.

The results of these 'examinations' were cited by Madoff to establish credibility with investors.

[1] Here they are: [https://www.sec.gov/news/studies/2009/oig-509/oig-509_exhibi...](https://www.sec.gov/news/studies/2009/oig-509/oig-509_exhibits.htm)

Here is an SEC staff accountant discussing documents received from Madoff: [https://www.sec.gov/news/studies/2009/oig-509/exhibit-0262.p...](https://www.sec.gov/news/studies/2009/oig-509/exhibit-0262.pdf)

</comment></comment></comment></comment><comment><USER10> This program is a great example how setting the right incentives can destabilize a criminal conspiracy. It's also worth noting that "traditional" law enforcement in white collar crimes is essentially the same: the possibility of criminal proceedings almost always outweighs the sort of incentives a corporation can offer lower-level employees. Would you risk jail time as a bookkeeper earning a 5-figure salary at #bigCorp Inc?

It's arguably the same dynamic now befalling the presidential administration, only that the salaries are even lower than in the private sector, and you're almost certainly looking at 6-digit bills from your lawyer just because working in the building will make you a potential witness.

<comment><USER11> Those incentives cut both ways. It also creates a huge avenue for rogue employees to suddenly craft themselves payout strategies.

The law firm that we use recently told about such an action they defended for another client. A disgruntled employee, who suspected they would soon be fired for lack of performance, "setup" certain actions, documents, prompted specific executive responses to emails, etc. The claim was that there was prejudiced hiring practices ongoing. However very little true evidence existed...most of it was in fact crafted by the employee.

The whistleblower action resulted in a meager voluntary fine that the company paid (didn't make financial sense for company to fight, easier to pay the $10K and move on). The ex-employee for their part received $1500. Currently they are in a recovery program for crack addiction.

<comment><USER12> In both East Germany and Revolutionary France people had their enemies destroyed through these kinds of methods. They either found some dirt on them (not hard to do when everything is illegal), and reported it to the authorities, or simply fabricated allegations and reported those.

In East Germany it meant loss of their job, and possibly imprisonment. In Revolutionary France it was off with their heads.

</comment></comment></comment><comment><USER13> Just don't dream of whistle blowing against the government itself or a federal contractor. Then you'll be utterly destroyed for such insolence.

</comment><comment><USER14> While I appreciate a criminal getting caught, these types of systems that incentives private citizens spying and reporting on one another are bothersome on many levels.

<comment><USER15> Why does it bother you? Do you equate it with some sort subset of McCarthyism - i.e. turning the government loose on your neighbor, etc.? To me, it's more of a "see something, say something" deal. But the issue with that is that there is a substantial personal risk to doing so when one works in the industry and usually the employer they are blowing the whistle on. That means they run the risk of destroying their career (because most firms in their field will hot hire them after that)...all for "doing the right thing". That's why I think it's OK to have this incentived. There is substantial personal risk to them. It's not like reporting a suspicious bag at the airport.

<comment><USER16> Completely agree, the reward is a counter balance to the real-world risks. It's not some idealistic regulatory system that bets on a finite group of agents to catch malicious actors in a rapidly changing systems with millions of events each day.

Nor does it create massive inefficiencies in the system by forcing every company/employee/transaction to jump through arbitrary hoops in order to verify they are legit, designed to catch yesterdays criminals.

Instead of paranoid dragnets it promotes enforcement on a case-by-case basis, sourced closer to problem and by the people who actually understand the problem.

</comment></comment></comment><comment><USER17> Pump-and-dump telegram groups are basically done if their members see a get- rich-quick opportunity from the SEC which surpasses the promised returns of the pump-and-dump scheme.

</comment><comment><USER18> Does anyone know what kind of violations they reported (and which companies)?

<comment><USER19> Merrill Lynch insiders who supplied information for a 2016 case against Bank of America.

[https://www.bloomberg.com/news/articles/2018-03-19/two- whist...](https://www.bloomberg.com/news/articles/2018-03-19/two- whistleblowers-share-50-million-in-sec-s-largest-ever-award)

</comment></comment><comment><USER20> Can I report a few trillions that are missing in the Pentagon Budget? Send money to <redacted>.

</comment><comment><USER21> Does the SEC have a line item in its budget for whistleblower awards? If so what do they do if there are a lot of cases to pay out? Can they run out of money for these things? I'd love to know what that process looks like.

<comment><USER22> The whistleblower awards are typically a fixed percentage of the fines that the SEC levies (10% - 30% depending on circumstances). So if you blow the whistle on your company and the SEC fines them $100M, the SEC will get ~$80M and the whistleblower will get ~$20M.

So in that sense, no, they can never run out of funds to pay them off.

[https://www.sec.gov/whistleblower](https://www.sec.gov/whistleblower)

<comment><USER21> Ah yes. I remember hearing about this now. Thanks!

</comment></comment></comment><comment><USER23> > By law, the SEC protects the confidentiality of whistleblowers and does not > disclose information that might directly or indirectly reveal a > whistleblower's identity.

I wonder if they tell the IRS?

<comment><USER24> I would think it's in their best interest to not disclose anything to anyone. You don't want to do anything to disincentivize whistleblowers.

</comment></comment><comment><USER5> In any other industry you have to be happy to not get your life ruined as whistle-blower but in banking we again have to give them a huge amount of money to do something. It really bothers me. Why do we have to give millions of dollars? Anywhere else you would get a small reward or nothing.

<comment><USER25> Because if you blow the whistle you will never work in that industry again.

<comment><USER26> Says who? I think with $100MM he can start his own financing/brokerage company and even paddle it on the idea of a "good guy starting financing corp"

</comment></comment></comment><comment><USER27> They need to come down on Tesla. Musk's tweets/lies have driven the stock up to an established automaker's market cap.

The only problem is, Tesla is no where near profitable (they've lost money nearly every quarter except for two or three, I believe. And in those quarters, the profit was very small compared to other quarterly losses) as either of these companies, and the cash burn isn't stabilizing as they attempt to scale, it's increasing.

China/Europe deliveries have collapsed to start 2018. Bloomberg is tracking VIN assignments and pegs weekly production to 750 vehicles a week; that's only 25% to what Musk said they'd be doing by 2018.03.30.

S and X production during the M3 ramp up is reduced, based on channel checks.

Deliveries to regions in the US are staggered as M3's require an extensive amount of re-work before and after being received by a customer. Simply put - they want to fulfill all of their California orders to cut down on logistic costs/take payment, but their delivery centers can't handle the amount of service/re-work that would be required for all the new M3 owners.

This quarter should be an absolute bloodbath for TSLA - the end has already begun.

<comment><USER28> This is hardly a secret, it's why Tesla has so many short sellers.</comment></comment>


FizzBuzz Enterprise Edition - <AUTHOR> https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition

<comment><USER2> Not really very enterprisey as there is no Dependency Injection layer being used. Tsk, tsk.

<comment><USER3> Rewrite this with Spring and submit a pull request. Reminder: All employees' annual bonus is weighted by MLOC authored in the prior year.

</comment></comment><comment><USER4> The issues list might be better than the actual project. "Java version is too new", "Strings shouldn't be hardcoded", and "Inject Output Stream into Printers".

</comment><comment><USER5> This is hilarious. I just hope a pointy-haired boss doesn't see this, he might take it seriously.

</comment><comment><USER6> A Ruby version using the Enterprise gem would be good to see: [https://github.com/tenderlove/enterprise](https://github.com/tenderlove/enterprise)

</comment><comment><USER7> Please register your CV at our database, just copy and paste. We don't look at githubs.

And mark the programmings languages you know, we'll contact you if an opportunity opens:

() PHP

() Java

() Visual Basic

<comment><USER8> s/languages/language/ and they should be radio buttons ;-)

<comment><USER7> _makes note_ "no hire, insubordinance."

Ok, expect us to contact you soon!</comment></comment></comment>


Ask HN: Dealing with Errors of Omission? - <AUTHOR> Dealing with faults is easy: read the stack trace and stop doing what shouldn't be happening. But what about errors where something should be happening but isn't?
For example, I might have a notification system where users are reporting missed messages. They give concrete examples and I can verify that, given the state of the system, the notification should have been sent, but evidently it hasn't. This involves multiple systems, changing state and many potential failure points. This is a legacy system written by others, so I have an incomplete mental model of the system, and obviously can't reproduce the error.
I'm an experienced software developer, but whenever I encounter an error like the above, my steps include: * Backtrack from where something is supposed to happen looking for potential logical bugs. * Add more logging * repeat
It's not very efficient! I'm tempted to throw the system out and replace it, but we all know what kind of a trap that is.
So how do engineers here attack a problem like this? Are there activities you do, e.g. building flow diagrams, that help guide you through the process? <comment><USER2> I would start where something should be happening but hasn't, and then manually check the conditions required to make that happen one by one. Sometimes the conditions themselves rely on something else having happened that hasn't, so I start from there. Eventually you'll be able to unravel the entire chain of events.</comment>


Bolivian president's plane forced to divert over a rumor Snowden was on board - <AUTHOR> http://www.sbs.com.au/news/article/1784988/US-hopeful-Snowden-will-return-home

<comment><USER2> So now they've upped the ante for Snowden-transport; probably the only feasible solution would be a warship. Maybe the other option would be a chartered jet with in-air refueling, flying solely over international waters (or sovereign countries, like Russia and maybe China).

You can charter a military transport (capable of refueling) from a bunch of companies, like RUS Aviation. Actual refueling services are harder, probably would need to be a military, although there are a few operators of contract aerial refueling service (e.g. Omega) -- unfortunately they have big military contracts, usually with the US, and thus wouldn't be willing to participate. You could probably take a military transport, fill it with ferry tanks, and make a decent go at it, but the problem is most of the cheap-to-charter aircraft are old inefficient aircraft like the IL-76. I guess with new engines it wouldn't be horrible, but something like a 737 in ferry mode would be better. A 777-200ER or 777-200LR would probably be the best. A 747SP is the only thing I actually know how to charter which has crazy long range (7600nm), which is almost as much as the 777-200LR (which is new, and thus highly utilized). A 7600nm range aircraft is just enough to stay in Russian airspace and then come in through the Greenland-Iceland-UK gap, down the Atlantic, to Caracas. The total cost of that mission would be far less than the $23mm Ecuador was willing to give up, but well in excess of $1mm.

A warship would probably be a lot easier, although you'd probably want to go to the Russian Far East to avoid bottlenecks -- assuming a fifth rate power like Ecuador, there could easily be "this area closed due to a military exercise" or other tricks to block it otherwise.

<comment><USER3> Soon US allies will be detaining ships from the Bolivian Navy just to check if Snowden is aboard.

<comment><USER2> (Aside from the issues of Bolivia being landlocked since the War of the Pacific in 1879...)

Per the United Nations Convention on the Law of the Sea (UNCLOS)

Article 95 of UNCLOS: Warships on the high seas have complete immunity from the jurisdiction of any State other than the flag State.

Article 96 of UNCLOS: Ships owned or operated by a State and used only on government non-commercial service shall, on the high seas, have complete immunity from the jurisdiction of any State other than the flag State.

1) An interesting case came up: Argentina's frigate (well, a historical tall ship, but it was technically the flagship, like the USS Constitution) the ARA Libertad was seized in Ghana related to the $100b sovereign debt default of 2001, and a NY federal district court judgment for one of the bondholders against Argentina.

2) The whole point of a warship is that you can't detain it; if it fails to be able to prevent detention, it's not really very good as a warship, is it?

3) Ragnar Danneskjøld

<comment><USER4> Do you think America cares what some little treaty says? We effectively own the UN and can freely flout any agreements we've made through it. I doubt anyone would be even slightly surprised if America - either is military, a government agency, or by some other means - decided to raid foreign vessels looking for a suspect. All in a day's work when you're the world's self appointed arbiter of justice.

<comment><USER2> The US generally hasn't violated the physical sovereignty of embassies or of warships on the high seas. Those are from the Congress of Vienna or even before, not de novo from the UN.

</comment></comment></comment></comment></comment><comment><USER5> At this point one has to ask the question: who's afraid of the big, bad USA? And the answer more and more seems to be "Everybody".

From Putin emphasising that Snowden stops hurting "Our friends the Americans", to the whole of Western Europe succumbing to their outrageous demands, not to mention the reversal of Ecuadorian President's change of stance after a talk with Biden.

Is this the States showing off it's true colours or is it the administration failing badly at handling this embarrassing situation? I honestly hope it's the latter.

<comment><USER6> Agreements between these countries exists to allow them to call on the other signatories to deny specific planes airspace. Portugal could ask the USA to deny a specific plane airspace into the USA, if it felt so inclined.

I doubt this is pressure, but rather standard diplomatic channels.

<comment><USER5> To follow your parallel, let's imagine it's not the plane of the Bolivian President, but say, Airforce One, flying over South America with Barack Obama on board towards Washington. Let's say Spain has suspicion that someone that broke Spanish law is on board.

Please, honestly, tell me you believe that The President's plane would be grounded?

<comment><USER6> As funny as that would be, I'd doubt it. Though in particular because I doubt Spain would risk calling for the closing of airspaces for Air Force One in the first place, because it would eventually mean Spain would have to face a massive diplomatic incident between them and the USA, and possibly wouldn't risk it.

It's ridiculous if the USA does not have to apologise following this incident.

</comment></comment></comment></comment><comment><USER7> Does any one else thing the US is cashing in a hell of a lot of diplomatic good will to get one single man?

Yeah, I get the US gov want Snowden, but this seems so over the top, like it almost feels personal. Has Snowden got something on Obama personally or something? I have never seen this scale of action from the US for a mere whistle blower. Bin Laden and his ilk, fine, I understand that that. But even though IMHO, the leaks show the USA to be very badly behaving, most countries dont seem to care that much. Internationally and diplomatically, it seems very quiet.

I dunno. But I do find the response strangely disproportionate.

<comment><USER8> There's more to come. And Obama wants to make sure Snowden's the last one to ever try it. So it's about a lot more than trying to stop or get one single man.

<comment><USER9> Exactly. This is the modern-day equivalent of a public crucifixion: a warning that you never, ever want to do something like this yourself.

What's interesting--and a little disconcerting IMO--is that the public opinion of Snowden seems generally favorable. So the US .gov needs to attack him publicly while not making it TOO public because it is not generally a healthy thing for a government to move in opposition to its people. That's how "unrest" starts. Probably not with Snowden, but if it's the beginning of a trend... look out.

</comment></comment></comment><comment><USER10> Snowden should just live in the airport and continue his work.

I'm certain people would take care of him financially.

Not that I want him to be trapped but he seems more free there in the sense that he can write what he wants.

</comment><comment><USER11> Related to Bolivia: "Bolivia president expels US aid agency" [http://www.aljazeera.com/news/americas/2013/05/2013512241536...](http://www.aljazeera.com/news/americas/2013/05/201351224153629879.html)

I wonder what's going on in the President's mind, he definitely is handling this situation with positive attitude, always smiling in front of cameras.

</comment><comment><USER6> According to AP, it turns out Bolivia's president was not denied entry into France and Spain, officials say.[0] As to why Bolivia would make such a claim, they did not comment.

[0] [http://www.guardian.co.uk/world/2013/jul/03/edward- snowden-a...](http://www.guardian.co.uk/world/2013/jul/03/edward-snowden- asylum-live#block-51d3eba3e4b0e80ab6523aa8)

<comment><USER12> Could it be that the US is trying to spin this by pressuring France and Spain to delete the radio record and say that Bolivia made it up? Do we know of any third-party pilots or ground stations who would have heard and recorded the radio comms?

<comment><USER6> No. In fact, we have only heard through Bolivian officials so far. Even the Austrians relied on the Bolivian statements.

<comment><USER13> Unconfirmed audio (which was linked to in the Guardians live stream[1]): [http://audioboo.fm/boos/1482009-bolivia-air-force-fuerza- aer...](http://audioboo.fm/boos/1482009-bolivia-air-force-fuerza-aerea- boliviana-fab001-flight-precaution-landing-vienna-austria)

[1] [http://www.guardian.co.uk/world/2013/jul/03/edward- snowden-a...](http://www.guardian.co.uk/world/2013/jul/03/edward-snowden- asylum-live#block-51d3eba3e4b0e80ab6523aa8)

</comment></comment></comment></comment><comment><USER14> So, time to start disinfo on all plausible channels indicating that he is leaving via diplomatic channel X and;

A) fuck with the states of the worland B) provide cover for the real escape when it comes.</comment>


Hacking AngelList: Tips for Raising Capital - <AUTHOR> http://www.seedstagecapital.com/2011/07/hacking-angel-list.html

<comment><USER2> This long post got comments from both Nivi and Naval (the founders of AngelList). Is there anyone here with a success story from AngelList that would like to comment on it?

<comment><USER3> We've raised $40k from Angel List so far. It's been the only source of successful investments we have received outside of YC Demo Day connections.

</comment></comment><comment><USER4> Why bother hacking AngelList? Isn't just as easy to email my pitch deck to people I know. Probably more effective too, since a reference from people I know is better than jumping in to a noisy group of startups, hoping someone will hear my pitch.

<comment><USER3> Not everyone has a bunch of connections, and even those who do don't have as many as you can find on Angel List. Intros are still your best bet, but there's no reason not to leverage an asset as useful as Angel List.</comment></comment>


The Bro's Guide To Pinterest - <AUTHOR> http://www.blueglass.com/blog/the-bros-guide-to-pinterest/

<comment><USER2> The network effects seem to be working in a female-friendly manner here. The Bros need to seek a new haven.</comment>


Cnt: rkt container build tool - <AUTHOR> https://github.com/blablacar/cnt <comment><USER2> I understand the aesthetic appeal of "cnt" matching the length of "rkt". But I find the naming of this tool unfortunate and distracts from its value.

<comment><AUTHOR> We were aware of the problem, but not sure it was such problematic. First read, first comment comforted us on the fact we definitely had to rename it. done.</comment></comment>


Open Source Python Flame Chart and How to Reduce CPU Usage by 80% - <AUTHOR> https://nylas.com/blog/performance?src=1m52lkm1cmHN118 <comment><USER2> This is pretty awesome work.

<comment><AUTHOR> Thanks! All the love should definitely get directed to [https://github.com/emfree](https://github.com/emfree)</comment></comment>