Keeping a Bibliography - <AUTHOR> https://bastian.rieck.me/blog/posts/2020/bibliography/ <comment><USER3> Why not using Zotero or similar? Isn't it much more convenient?

<comment><USER4> The one thing I wish Zotero would have is the ability to export (and then version control) the collections layout. I don't really trust Zotero to not at some point mess this up, especially if I'm trying to sync multiple accounts after an internet outage, and having the collections layout backed up would really make me trust the platform a lot more.

</comment></comment><comment><USER5> If you use org mode I highly suggest org-ref ([https://github.com/jkitchin/org-ref](https://github.com/jkitchin/org-ref)) that leverages and adds a lot to Bibtex. It makes creating/managing/citing/searching a bibliography a breeze.

</comment><comment><USER6> Another reference to Zettelkasten! I've only recently become aware of it, though it's pretty clear to see how that concept and the bibliography concerns here complement each other. Anyone have any experience combining the Z method with good reference management for the long-term?

<comment><USER7> I think most implementations of a Zettelkasten _does_ include a reference system, but it is not explicitly a _part_ of the Zettelkasten, but simply a complementary tool.

I can't comment on "long-term", but I have been working on a paper this past week and have used my Zettelkasten notes and references extensively. Writing the draft has mostly consisted of copying snippets and titles from the ZK. Sine all my notes have references in place, the draft already have references ready to be converted to something LaTeX will handle.

I've also used the reverse: finding which notes reference a particular paper.

</comment></comment><comment><USER8> What's the best way to keep track of notes on the documents and books that one reads? I use a combination of Evernote, text files, directories of scanned pages, and so forth, and it's not optimal.

<comment><USER4> I prefer to keep it simple. I add references in my .bib database via Zotero, then I version control the .bib file (exported from Zotero). And then I add .md files with notes, and the .md files are named according to the citation key in the .bib file. Then I version control those .md files. Advantage is that notes are all in the same format and place, regardless of what reference type (e.g. pdf, webpage, could even cite a video), and they are all very easily searchable, including through time (via version control).

EDIT: I keep a separate folder on my Dropbox (so not version controlled) of the actual resources, such as .pdf files. Again named according to the citation key in the .bib file.

<comment><USER9> you might wanna have a look at pubs [0]. It is a command line bibliography manager.

The folder structure looks like this:

      ~/.pubs/
          bib/
          doc/
          meta/
          notes/

The bibkey is the filename for the different files in those folders, and for notes you can use markdown. You can then keep your pubs folder under version control (or symlink the (sub)folder(s) to wherever).

[0] [https://github.com/pubs/pubs](https://github.com/pubs/pubs)

<comment><USER4> Thanks, that looks really interesting!

</comment></comment></comment></comment><comment><USER10> If you prefer to automate most of this --> [https://citationsy.com](https://citationsy.com)

</comment><comment><USER11> Has anyone compared JabRef to Zotero? I chose JabRef a while back (its database is nothing more than your bib file, it helps organize your pdfs well enough, it can import bib entries from MathSciNet and the ArXiv, it runs fast enough), but every once in a while I wonder whether the programs I'm not using are the ones that deliver true bibliographic salvation.

<comment><USER4> I switched from JabRef to Zotero a while ago, mainly because JabRef seemed to be extremely buggy. I'm broadly using the same feature set on both, but Zotero is a lot less buggy, and it's faster and easier to add new references.

If JabRef was more stable, I think I would have stuck with that, because of the inherent simplicity.

EDIT: I'm an exclusive linux user, and as you can maybe tell, I like JabRef because of the unix-ish philosophy: a tool that does exactly what it needs to do, and nothing more.

</comment></comment><comment><USER12> Bibtex is the true standard for bibliographies. Practically every scientific publisher uses it. This shows how well designed the bibtex format was: nearly 30 years after it was created, we see it used everywhere.

<comment><AUTHOR> In particular with BibLaTeX it truly is a joy to use for me! I am saddened by seeing how little some publishers care about providing good output, though.

</comment></comment><comment><USER13> I am surprise no one cited Jabref([https://www.jabref.org](https://www.jabref.org)).

The author does cite it on *6.

It works nicely, cross-platform. It can work on Lyx, Latex, Bibtex, and Word.

<comment><USER4> Unfortunately I've found it rather buggy (on linux) in the past. It really could be a super nice tool, if they traded some features for more stability, in my opinion.

<comment><USER14> This is also my experience with JabRef on macOS. If I remember correctly, I had some problems where it silently corrupted parts of my bibliography. I'm not sure if it was related to me using it with subversion or some other problem, but I was a little bit surprised to say the least.

<comment><USER4> Ouch, that sounds pretty bad... Thankfully I didn't have that issue - <USER2> my problems were to do with java libraries, glitchy UI, and the "add reference" tool often didn't work.

</comment></comment></comment></comment><comment><USER15> I'll leave this here [https://www.mendeley.com/](https://www.mendeley.com/)

<comment><USER16> I'd recommend Zotero as an easy-to-use, open source alternative.

[https://www.zotero.org/](https://www.zotero.org/)

<comment><USER17> I have used both extensively. And I really want to love Zotero, but to me Mendely is just so much better I have to use it.

Am really curious about JabRef though that other people are mentioning. Haven't used it before.

<comment><USER4> For me the key drawback about Mendeley is a very limited ability to control the citation keys. Even on Zotero this is a second-class citizen, since you have to install a plugin.

Have you been able to control the citation keys on Mendeley? It's been a while since I've tried it now...

<comment><USER17> Sorry, slow response. Every item has a Citation Key field on it in the details. Just put whatever you want in there. Annoyingly it doesn't show up until after you try and export or copy it the first time. I just hit Ctrl-K to copy the citation and then change it if needed.</comment></comment></comment></comment></comment>


Mothers should be programmers - <AUTHOR> http://lepid0ptera.livejournal.com/65083.html

<comment><USER2> It's a decent idea in principle, but I'm not sure how well this would work in practice. I can think of two problems.

The first is distraction. When I am working on a difficult problem, it's true that I often need periods of inane distraction interspersed with periods of extreme focus. In theory, taking care of a child and hacking could be combined; where I go for walks or play video games now, I could be playing patty-cake. But those breaks need to occur when I intellectually need them, not when the baby needs them. When I am madly coding something I understand well, I very much need to avoid distraction. When I am mulling over something I don't understand, I very much need to embrace it. So I suspect this would not work well in practice.

A second problem arises from simple physical compromise. I am presently seven months pregnant, and--much as the admission grates on me--I have found my performance slipping throughout. Sometimes because I am tired, sometimes because I am forgetful, sometimes because I am more excited about the coming baby than the current project, sometimes because half a dozen random things are wrong with me physically and discomfort is . . . distracting. I had hoped to keep working at full capacity, and while I've kept working full _time_ , I have to be honest: I haven't been as effective as I once was. Where I used to produce a couple brilliant ideas a day, now it's more like one or two a week. I don't see that improving just after the trauma of birth, during the subsequent hormonal adjustment, and what with the excitement and distraction of _having a baby around_.

Programming is an activity that depends so much on mental sharpness; where caffeine and sugar are performance-enhancing drugs, insomnia and strange hormones are remarkably destructive. On a bad day, I can spend 8 hours not- quite-achieving what should be half an hour's work. Mundane programming I can usually still do, but great hacks? Not so often anymore. Nor do I see them recurring with regularity for a while. No doubt about it, being a mother is a sacrifice intellectually. All indications are that it's well worth it, and I wouldn't do otherwise. But it strikes me as unrealistic to suggest that it's a light side-activity that one can casually combine with a serious commitment to work. Even very intellectual work.

<comment><USER3> Very good points,

I suspect that programming and other forms of concentrated work will require a phase shift in order to continue a high level of productivity, and the type of productivity won't be the same.

But, as DHH of 37signals points out, people don't typically use their hours well anyway. If raising a child left only two hours a day to work, that's still 10 hours during the week -- as much time as DHH spent coding basecamp and rails his first year. If you add to that time you can spend planning, communicating, and thinking about the problem (to fill the time when you're more likely to be interrupted) you can optimize those few hours even further.

So far as I can tell, this is the pattern my mother used while she was caring for me and working her way through journalism school. I had colic. But she'd do her interviews in the intervening time, and she'd collect all the information she needed, and wrote fragments she wanted to include. When she got the chance, she sat down and wrote the whole article in a single sitting.

PS: Thanks for being part of this community. I started to read your comment page, and you've contributed many wonderful insights I've had to copy to remember for later :-)

<comment><USER2> Thanks for your kind words!

I follow a similar pattern at work these days. Having amassed a large amount of technical knowledge, I can spend time I can't spend innovating in teaching, documenting, cleaning up code, running test cases, doing research, doing arcane analysis. And while one or two brilliant ideas a week isn't what I'm used to, it's not nothin' either.

But oh, for those two-day coding runs of yore, during which it seemed I could move the earth . . .

</comment></comment></comment><comment><USER4> Let's hope the kid stays asleep in 5 hour blocks, because that's how long my hacking runs go.

Programming doesn't suit people who are constantly distracted; the way I cope with others' presence around me is to completely ignore them. I can have conversations for hours on end while I program and not remember any of it. I agree to things, laugh with jokes and listen attentively. All of it a facade, of course; I don't really care about others when hacking.

Days run into each other sometimes and you have no idea what went in the world. I wouldn't do this when I have a baby, and I don't recommend it to new parents. Do marketing for 2-3 years, instead, and give that kid full attention when you go home.

<comment><USER5> That sounds more like being on a bad opium trip to me than programing (not that I've ever been on an opium trip...).

I mean, sure I agree, in certain aspects of the job there is a level of concentration and 'state' that you have to maintain in your skull in order to be able to program properly.

But a certain amount of the required 'state' can be alleviated by having a pad of paper next to your desk and writing everything down. The rest of it can be dealt with by writing code that has a simple and sensible structure.

And honestly, the majority of my coding is mind-work. I don't have to sit at a computer for 5 hours to be thinking about that piece of code I'm going to write. One I have read the right documentation and I have figured out what the problem is, I normally need a bit of time for it to gel, then I type it into the machine.

I think the point of the post was that new mothers need time to bond with their infant. 'Doing marketing' for 2-3 years instead implies to me that they are working the 9-5 grind (which a programmer can theoretically avoid). Which misses the point entirely...

There's no reason you can't sit at the computer with the baby right next to you.

</comment></comment><comment><USER6> I work as a senior-level programmer/analyst for a mid-sized private university.

My workday normally starts around 7:45 AM. On a good day, I leave for home around 7 PM. Sometimes I get to leave "early" by 6 PM. I usually break for about 1 hour (or less) at lunch time.

I do not wear T-shirts or tennis shoes to work. There is one other programmer who does; his contract has not been extended past the end of this December. I do work from home, but only because I don't get all of my work done between 7:45 AM - 7 PM when I'm at the office.

I could not use an OLPC formatted with Breezy for my work. I use a 2.26GHz Core 2 Duo w/ 4GB of RAM, and I still find my computer is too slow and doesn't have enough RAM to, for example, run more than a few VMs at once.

I do often work from 2 AM - 4 AM at home when inspiration strikes and I cannot sleep. One reason for this is the lack of distractions at this time of night: my wife is in bed sleeping and there are no coworkers to stop by and try to chat.

However, I could not work from home and satisfy my job duties. There are too many times when I need to work in person with, for example, a professor having trouble with one of the programs I've written, or go to a meeting with the deans of some of the schools at my university.

I also don't have sufficient bandwidth at home to work satisfactorily. I often do tasks where I need a 100Mbit or 1000Mbit pipe to my workstation; a 10Mbit connection is not sufficient. (For this same reason, I don't sit outside on the commons and work on my laptop wirelessly.)

Because of these reasons, I have chosen not to have children at this point in time, as I don't feel I could adequately give them the time and attention they deserve. It would be really nice to take off a few months of time to spend with my wife & my family, and have my job guaranteed when I choose to return, but that is simply not an option I have.

(For the geeky amongst you, the thing I do that needs bandwidth is mostly using TNS for running PL/SQL; running TNS over a 10Mbit WAN is frustrating at best, and completely useless at worst. It is not suited towards dealing with terabyte-sized data sets.)

<comment><USER7> Well, you don't _need_ a 100Mbit pipe for a dumb terminal. There is nothing preventing a useful remote desktop session on wifi to your workstation back on campus. Except possibly for an overzealous IT department (the kind that blocks upgrading from IE6 because of "security risks").

Also, what you are describing is a job in a bureaucracy. This kind of environment isn't something do be proud of, it's something you work despite (though this is my personal preference, and there may be people who like this).

The point of the article isn't that it's _easy_ for any workplace to accomodate a mother working from home. It's that it is _doable_. This depends on someone higher up in management having the will to do this. But this is a management problem, not a problem of discrimination against women.

Basically, this is not a problem if the people higher up in the food chain would start treating their subordinates as human beings. Which, sadly, might just be too much to ask of a lot of managers.

<comment><USER6> A dumb terminal session (or TightVNC, RDP, etc.) would suit for about half of what I do. The problem is that my productivity with the other half is compromised by being off-site.

As far as the bureaucracy goes, that is one of the pitfalls of working as a staff programmer in academia. The point of my post, however, is that many staff IT or programmer jobs are simply not compatible with the kind of working environment lepid0ptera describes, and I think this extends outside of IT or ERP style teams at large instutitions: my friends in the game or design industry frequently pull long shifts when trying to meet hard deadlines. This kind of environment is what is hostile to parenthood in general (not just mothers trying to take maternity leave).

</comment></comment></comment><comment><USER8> I now babysit my daughter and hack on some Open Source projects. When she is playing she likes to have my attention, when I sit at the computer she would come and show that she wants that I take her on my hands, I can read Hacker News or something but usually I can do programming only when she is asleep which is now two times a day about 1/2 - 1 hour, and often she gets asleep when we are on the daily walk - then this 1/2 hour of my time is lost. Then there is feeding her and cooking for me and my partner, and cleaning, usually I can do some cooking when she is awake but it's not very effective work. Not much time is left, maybe in the evening.

<comment><USER9> This is a great observation. I watched my (then) 4 and 1 year-old kids the summer after my first year of med school. It took me about 2 days to decide it was time to install this operating system called Linux I'd heard about. I could read while they were awake, but could only dive deeper when they were asleep, which was not much time at all.

So I agree with you, and I'll up that to say that things don't really get easier as they get older, because they sleep less. You'd think the older they get, the more time you'd have, but, at least at 4 and 7, it really just means they can climb higher, fall further, hit harder, and break bigger things.

</comment></comment><comment><USER10> This is reasoning that programmers can be mothers not that mothers should be programmers.

But one main problem is when children are young mothers are much more likely to be tired or worn out running on little sleep and probably have less time/will to work on complicated problems

<comment><USER11> You've never looked after a baby have you? Going to work in the morning feels like going on vacation.

<comment><USER12> That's because you're leaving the house and getting away from a constant distraction. This is exactly why trying to work from home at the same time you are being a stay-from-home-parent is incredibly hard.

Believe me, I've tried doing programming work during periods while watching our young son, and it is nigh impossible to do any heavy duty work unless he is sleeping. Writing one-line unit tests is doable. Debugging complicated code is just barely possible if you are lucky. Breaking new ground is downright impossible.

I suspect the author of the original post is not actually a mother...

<comment><USER13> Get a nanny.

<comment><USER14> I'd disagree. Just learn to use time better. When you're feeding a baby, think over problems. When baby's asleep, code them up.

When you have less time to hack, you tend to use it more efficiently (I've worked at home most of the time my youngest 2 were babies).

I can't imagine having had a nanny and missed out on all that bonding, fun, and awesomeness that is baby/toddlers.

(Not to mention things like my son puking up a full bottle of milk straight onto the keyboard of my laptop - I was feeding him and coding at the same time, which was probably a bad idea).

<comment><USER13> You can absolutely do both things: have a nanny, and bond with your infant. Work from home, and use the nanny to keep the kid out of your hair when you need to focus.

Of course, no nanny costs more than the most junior developer makes.

I'm not sure how toddler awesomeness is relevant to the discussion. Nobody's offering a free lunch. But there clearly are jackasses who don't want to hire women because they think maternity leave is going to screw them.

<comment><USER14> FWIW I don't see how that's a jackass thing to do. There's a chance that a woman may take maternity leave, then never return. That's an extra cost to the employer. It's a higher risk. I'm of the opinion that real freedom means the freedom to discriminate if you want to.

Insurers are freely able to discriminate, it seems like employers should be able to as well (I know in this age of political correctness it's impossible to).

Should terminally ill people be able to go on apprenticeships? I'd say on balance no - if they die before they're trained in the job, then the employer who is footing the bill of training them, has lost out.

<comment><USER13> You shouldn't hire terminally ill people at all. Turnover is expensive. Also, the chronically ill drive up insurance premiums. For that same reason, you shouldn't hire people over 35. Another reason not to hire people over 35 is that people under 35 will work 80 hour weeks for no additional pay. That's also a good reason only to hire offshore developers, or, better yet, H1-Bs from H1-B bodyshops: they can't quit, or they'll be deported.

<comment><USER14> Right. And personally, I think those decisions should be up to employers. Similarly, I'm completely against the minimum wage. Give employers the freedom to hire who they want, for whatever wage they want to offer.

<comment><USER11> Where does equal opportunities fit into that view? Not at all, does it?

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> I had a very similar thought. Programming is very enjoyable in the same way that puzzle solving is. There are millions of people out there who enjoy puzzles, evidenced by the popularity of Sudoku and those Nintendo DS "brain games". If you put the two together, you end up with millions of housewives programming.

New book from O'Reilly: Hacking for Housewives.

</comment><comment><USER13> _The reason maternity leave is so long, and results in so many women never coming back, is because of breastfeeding and bonding. The physical trauma of childbirth doesn't last that long, and some women won't want to breastfeed, but pretty much all women will be bonding with their infants._

So what? Both men and women bond with their infants. One, the other, or both will inevitably sacrifice bonding for income. Women with full time jobs who want their kids breastfed, pump.

Why do women need special arrangements to rejoin the workforce? Doesn't that simply perpetuate the gender discrimination we already have in the industry?

It is _unlawful_ to discriminate against female candidates because they might take maternity leave. It's also stupid: whether they take formal leave or not, the performance of a new father is going to plummet as well. Let's leave it at that.

</comment><comment><USER14> There's nothing stopping them is there. Any mother that wants to program can, and they can easily find work to do at home.

The fact is though that most mothers aren't interested in programming :/ Something that doesn't really need 'fixing' (Because it's up to them what their interests are).

</comment><comment><USER16> It's almost a little sad to hear that having a child brings down a woman's ability to go into a good working profession... running a startup takes a long time, and many founders end up having kids in the midst of all the action. (Evan Williams just had a child a few months back...) but women don't have that fortune.

I was speaking to a female VC a few weeks ago on being a professional and having kids. She told me flat out not to think about having kids until my thirties (if ever), because it's the only way. And even then, it's going to take a crap load of time away from your job.

<comment><USER13> VC's make poor company operations advisors, and even poorer family planners. Women delay having kids because men expect priority treatment for their careers, and so make inadequate concessions to child care (or standard of living).

Here's a news flash: if you're an entrepreneur, your life will be no more or less accomodating to children when you're 35 than it is now.

</comment></comment><comment><USER17> This piece only talks about the needs of the new mom and neglects to address reasons why the company should feel motivated to be accommodating. That's like asking for a raise because you need money rather than because you bring more value to the company than you used to. Here are a few reasons companies should make an effort to accommodate the needs of moms:

Diversity. A diverse workforce is a strength for a company. Excluding moms would cause a weakness in the corporate culture which may go entirely unrecognized, even if it ultimately helps contribute to the failure of the company.

One thing this particular form of diversity could help address: The fact that females play games a lot less than males as well as generally have less interest in a variety of tech products. If there were more women and mothers in programming, the odds are good that apps would be designed in a way which appealed more to the female market than many of them currently do.

Company policies that are friendly to moms and their kids tend to also be better climates for anyone who can't make it on "traditional" terms of success. Finding an effective means to accommodate the rather large issue of motherhood would tend to automatically create a company culture and set of policies that resolved many lesser issues with little or no additional effort. Happy workers who don't hate some aspect of their job are generally going to do a better job. If the working climate is vastly superior to that of your competitors, you will likely also garner high levels of employee loyalty and a lower turnover rate. Lower turnover pays dividends in many ways, well beyond just the obvious savings of not having to spend so much time and money on the hiring process.</comment>


Google Earth's Incredible 3D Imagery, Explained [video] - <AUTHOR> https://www.youtube.com/watch?v=suo_aUTUpps <comment><USER2> This is pretty incredible engineering feat. Something so simple we use has so much underlying efforts and complexity.</comment>


Building a unfolding Moon home, testing in Arctic Greenland for 3 cold months - <AUTHOR> https://www.kickstarter.com/projects/sagaspacearchitects/lunark-building-and-testing-a-moon-home-for-everyone?ref=eeguj4 <comment><USER2> Maybe this could be used as a self deployable emergency shelter here on Earth? It's pretty neat that you don't have to install anything or put it together on-site. I'm sure that feature would be useful for other places than the Moon.</comment>


Path to Rust – A practical introduction - <AUTHOR> https://thesquareplanet.com/blog/the-path-to-rust/ <comment><AUTHOR> The article itself points to a HN discussion: [https://news.ycombinator.com/item?id=11774850](https://news.ycombinator.com/item?id=11774850)

I didn't see it until it was mentioned here.

I can't seem to delete this discussion. So I added the original link here. Please head there.

<comment><USER2> It was, in fact, originally posted at [https://news.ycombinator.com/item?id=11773332](https://news.ycombinator.com/item?id=11773332) by me (the author), but that post never got much attention :p

<comment><AUTHOR> Your article is great. The examples of functional and non-functional uses of Rust were neat. I've been practicing by doing the Rust track on exercism.io and, by comparing my solutions to others', I always get impressed by how equally performant those two versions are (at small programs at least).

<comment><USER2> Thanks! Glad to hear that you found it interesting :)

</comment></comment></comment></comment><comment><USER3> Rust is an interesting language, although I haven't really had the time to really sit down and play with it (just switched jobs to become a mobile developer while knowing no Swift/Obj-C and not much Java, so I've got my hands full for at least a few weeks).

I've been watching Rust on that Benchmarks Game site for a while — it's been interesting to see it go from worse than Java a year or so ago to competitive with C++. It was slightly beating C++ for a couple days, although just recently C++ took its biggest lead in a while[0]; I think they upgraded the GCC version they were using.

Anyway, I'm very curious whether it ultimately turns out that, as advertised, Rust's performance characteristics really are as good or better than C++'s[1].

[0] [http://benchmarksgame.alioth.debian.org/u64q/which- programs-...](http://benchmarksgame.alioth.debian.org/u64q/which-programs-are- fastest-firstlast.svgz)

[1] The "Benchmarks Game" site very fairly specifies the algorithm that must be used for each benchmark — many of them say data must be operated on sequentially, so IMO Rust is getting a bit of an unfair advantage if the compiler is able to be particularly aggressive at autovectorizing it.

OTOH that is a nice real-world speedup, and anything else that's implemented with LLVM or GCC also has access to that optimization, so YMMV.

<comment><USER4> > I've been watching Rust on that Benchmarks Game site for a while — it's been > interesting to see it go from worse than Java a year or so ago to > competitive with C++

To be clear, Rust-the-language has not sped up significantly in the past year. It's just that a few dedicated people decided to try to win the benchmarks game strictly for PR purposes [0].

Chances are, for very algo-heavy (i.e. unrealistic) workloads, there are two ways to write it in Rust - fast and safe or very fast and unsafe. (e.g. one can disable bounds checking and get maybe a 2% speedup).

All this really serves to show is how artificial the benchmarks are.

[0] [https://llogiq.github.io/2015/10/03/fast.html](https://llogiq.github.io/2015/10/03/fast.html)

<comment><USER5> Perhaps smitherfield actually was talking about the overall relative performance of "Rust [programs] on that Benchmarks Game site".

To say something about whether Rust-the-language-implementation was building faster executables wouldn't we compare the same Rust programs built with different Rust versions (not compare Rust programs against Java or C++ programs).

Match-up measurements of the same programs, from the 1st June 2015 and 1st June 2016 data files, like this:

        elapsed secs	program id
        4.013 => 3.780	binarytrees #1
        15.449 => 16.650	fannkuchredux #2
        5.204 => 5.588	fasta #1
        0.070 => 0.067	meteor #1
        0.050 => 0.044	meteor #2
        24.630 => 24.068	nbody #1
        1.733 => 1.743	pidigits #1
        436.686 => 288.131	threadring #1

:and then note that the measurements were made on different OS versions, probably with different LLVM versions.

</comment></comment></comment><comment><USER6> Previous (fruitful) discussion here: [https://news.ycombinator.com/item?id=11774850](https://news.ycombinator.com/item?id=11774850)

<comment><USER7> The article even has a link to that previous discussion right at the top of it.

</comment></comment><comment><USER8> I decided to try out rust in a game jam hosted at my university a few weeks ago. It was a great learning experience, which is to say that it was incredibly frustrating in a good way.

<comment><AUTHOR> That's a good way to get into the language, as long as you have someone to guide you through the borrow checker during the jam.

<comment><USER8> I didn't haha. I spent probably a good 3 hours trying to figure out why I couldn't mutuably store a value I got out of a hashmap. It was fun though :) a throwback to when I was learning c and didn't get pointers.

<comment><AUTHOR> The learning pain is comparable to C pointers when you first see them haha. Funny thing is that after getting used to the borrow checker and other nice things of the language, its sad to go back to the languages I use at work.</comment></comment></comment></comment>


Show HN: Buzzwords around HN community - <AUTHOR> http://www.hnbuzz.com/

<comment><AUTHOR> This is my experimental site where I love to categorize the important information people share on HN. Your feedbacks are most welcome!

</comment><comment><AUTHOR> btw I'm not smart in webdev. the page may look different to you as compared with other websites developers have created. I love to hear if someone can help me in this front. thank you!</comment>


What's the difference between the com and exe extensions? (2008) - <AUTHOR> https://blogs.msdn.microsoft.com/oldnewthing/20080324-00/?p=23033 <comment><USER2> Back when I was a kid, in the days before Google, you tried to figure out how things worked just by poking around your computer. For example, I noticed that professional programs were always .com/.exe files, but I only knew how to edit simple batch scripts. So of course, the "logical" thing to try was to write a .bat and save it with a different extension and see what happened.

.exe files created this way wouldn't launch, but a .com created this way would instantly reboot the computer. Even more weirdly, this only worked for the specific command that happened to enter in my first attempt -- it might have been something like "cd games". If I changed anything at all, it no longer worked. Only years later I realized that the characters I typed were directly executed as machine code, and that I must have stumbled upon a set of instructions that caused a CPU exception!

For several years, this weird file was the only way I knew to programmatically reboot a computer, so I renamed it "reset.com" and kept it around. I think it stopped working only in the Windows XP era when DOS programs were finally sandboxed to some extent.

<comment><USER3> 'cd ' diassembles into arpl [si+0x20],sp which seems like privileged instruction but actually isn't, on the other hand it is not even valid instruction in real/virtual mode and thus causes illegal instruction exception.

It is interesting to note that code for the warmest of warm reboots on PC is 0xcd 0x19 (int 0x19). This jumps back into the point in BIOS code when it starts looking for the operating system to boot. Needles to say, this works reliably only in pure real mode and confuses NT's NTLDR in really interesting way (the thing was obviously originally designed to be run from DOS and contains some left over logic from that time).

<comment><USER4> Please expand "confuses in a really interesting way".

<comment><USER3> It produces error message along the lines of "you computer does not have enough free conventional memory to run windows NT". It is interesting that the message is actually translated into language of the NT install, says that you need 639kB of free memory for windows NT and reports whatever was the amount of free conventional memory in DOS before the "reboot" (which makes sense given the fact that at that point the original DOS is in memory in probably completely working state).

Interesting about this is that there probably is not any other way to get the same message, because NTLDR actually is not valid as anything that DOS can execute (IIRC it is not MZ image and is too large to be loaded as COM).

<comment><USER5> Wouldn't something like HIMEM or QEMM run it?

<comment><USER3> It is designed to run in real mode. The NT bootblock probably even loads it as if it was .COM, but it is too large for DOS's .COM loader. The actual binary is concatenation of two files, there is realmode part (on XP SP3 it is 0x4cd0 bytes long, most of which are either zeros or text strings, including the aforementioned error message) and rest of the file is 32 bit PE binary, complete with "This program cannot be run in DOS mode" stub. The PE binary part is obviously somewhat special because it has to be able to switch to real or vm86 mode in order to call BIOS and run NTDETECT.COM, which is valid DOS .COM (from quick look at the code it even looks like it takes command line arguments) except the obvious fact that it does not do any DOS calls.

Edit: The message in the XP's NTLDR says that it needs 512kB of conventional memory (I think that I've seen the 639kB number on NT4 or 2000) and there is also message along the lines "Windows NT needs 7MB of expanded memory", which is also somewhat interesting given that BugCheck 0x0000007D INSTALL_MORE_MEMORY is defined as "more than 5MB" and the fact that when you boot NT normally on computer with 4MB RAM you get the 0x0000007D BSOD, not the message from NTLDR.

</comment></comment></comment></comment></comment></comment><comment><USER6> > The format of a COM file is... um, none. There is no format.

This makes any small file a valid COM file as far as Windows is concerned. NTVDM doesn't care, it will happily execute your holiday snaps if given the chance. It's not difficult to craft a valid GIF, PNG, etc that does something useful when executed from byte 0.

Such an image will pass most mime-sniffing protections. For example, given such an image and a "foo.png.exe" Content-Disposition header, Internet Explorer used to skip all security warnings. Combined with "Hide extensions for known file types" it would ask you where you'd like to save "foo.png", preserving the executable extension behind your back.

Upon double-click the loader notices the MZ signature is missing, fires up NTVDM, and starts executing the image from byte 0. If running under NTVDM is too restrictive, it can always break out with BOP instructions.

The lack of structure also makes COM files a simple vector for exploiting hash collisions. Any two prefix blocks with matching hash that can survive execution can be used to create two variants of an program with matching hashes. Bit differences in the two blocks can be used as switches to control program behaviour.

</comment><comment><USER7> Nice info. My suspicion is this also explains why many corrupted EXE files cause the cryptic error "program is too large to fit in memory" error if you try to execute them:

The corruption mangles the header, removing the "MZ" magic number -> Windows thinks the file is a COM executable and attempts to load it into memory, COM style -> the file is not actually COM though and thus is far too large to fit into the memory available to the loader -> that error appears.

<comment><USER8> You might want to read this:

[https://blogs.msdn.microsoft.com/oldnewthing/20060130-00/?p=...](https://blogs.msdn.microsoft.com/oldnewthing/20060130-00/?p=32483)

<comment><USER7> Awesome, thanks much!

Also:

> _" MZ" = the legendary Mark Zbikowski_

I feel this is highly relevant to this post's discussion.

</comment></comment></comment><comment><USER9> My favorite .COM-file still:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

(yes, you can just copy-paste it into a .COM-file and it will execute and just show a text - unless you've got a correctly working virus scanner)

This is a Virus Scanner test signature ([https://en.wikipedia.org/wiki/EICAR_test_file](https://en.wikipedia.org/wiki/EICAR_test_file)), so the fact alone that you can read this comment might be meaningful ;)

<comment><USER10> Does not run on 64-bit Windows versions.

<comment><USER11> No .COM file does, because 64-bit Windows does not have the 16-bit NTVDM. 32-bit Windows (even Windows 10) should work.

[https://en.wikipedia.org/wiki/Virtual_DOS_machine#NTVDM](https://en.wikipedia.org/wiki/Virtual_DOS_machine#NTVDM)

</comment></comment></comment><comment><USER12> I miss being able to make small programs in debug on a Dos prompt and just dumping the machine code to a com file. It was a great way to test out and learn assembly language, and you didn't need a compiler or any other programs to make something that executed other than what was built in and a nice printed list of interrupts.

Some simple things I remember playing with in middle school, might work in a dosbox emulator window?:

pc speaker:

      out 61,1

change video mode:

      mov ax,0x13
      int 0x10

Then there were cool msdos debug scripts, where you had text listings of assembly with debug commands that when piped into debug it wrote out a com file:

[https://www.google.com/search?q=dos+debug+script&ie=utf-8&oe...](https://www.google.com/search?q=dos+debug+script&ie=utf-8&oe=utf-8)

Some could low level format hard drives, and there were lots of other fun utilities and amusements, much more so than batch files. I'd say the modern analogue is python scripts.

<comment><USER13> If you're feeling nostalgic about the DOS era and the associated hackery, give PCem a try:

[https://pcem-emulator.co.uk/](https://pcem-emulator.co.uk/)

It's an x86 emulator that works on hardware level (so from BIOS on, you're running real code that was running on those DOS machines), and with a focus on emulating the hardware from that era specifically, ranging from the earliest 8086 machines and MDA adapters, and up to 3dfx Voodoo era. Obviously this is mostly useful for gaming, but if you wanted to hack around with TASM or Borland Pascal just like in good old times, it's also great.

<comment><USER14> And this one is a live/online emulator:

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

</comment></comment></comment><comment><USER15> If I remember correctly, not just the files themselves but the entire memory available to COM programs at run time was limited to 64k.

It's funny how engineers think those times are long gone whereas the demand for very compact systems with low energy footprint is still there. So mastering programming within kilobytes is still a thing, don't disregard it!

<comment><USER3> COM files were not limited to only 64k of accessible memory, but the difference was that upon loading COM file got one full preallocated 64kB segment that got used for all of data, code and stack, while MZ format files specified in their header how many paragraphs (segment register increments, ie. 16 byte blocks) they need for code and how many additional uninitialized paragraphs should follow that (minimum and maximum required).

In both cases programs were free to allocate additional memory from DOS, but by default EXE files were loaded in such way that this wasn't necessary and automatically got the largest continuous block of free memory allocated to them (in fact they got the highest addressed block of free memory, but in any sane state of DOS it was also the largest).

<comment> nils-m-holm > upon loading COM file got one full preallocated 64kB segment

IIRC, COM files got _all_ available memory up to the 640K boundary and if you wanted to load additional programs, you had to _shrink_ the preallocated region first.

</comment></comment></comment><comment><USER16> So why not do something like make a shim COMMAND.COM that handles compatibility and calls the new COMMAND.EXE?

From my novice view, it seems like it would be generally simpler to reason about.

<comment><USER17> Because then you also need a shim format.com and a shim this.com and that.com and so on.

Much easier just to make the loader check the header.

<comment><USER16> Ahh yes. I misunderstood. The loader was modified, not COMMAND.COM, etc.

</comment></comment></comment><comment><USER18> The days of .COM/.EXE got me started in programming. I thought, gee, I have some game ideas. So I looked into BASIC, seemed great, but the distributed files required a certain flavor of BASIC. After looking into C for developing standalone binaries, I switched to C. Programming something like DOOM required 'vertical strips' calculated across the screen and other graphics gems, so I learned about graphics gems and programming. C++ and TurboPascal and then Delphi and VB6 were released. Seemed like a never ending journey!

Today we have CocosX for cross-platform sprites so games can be quickly deployed on multiple platforms, plus Unity and Unreal engines for 3D development. It's much better today, but I wonder what it's like to _not_ have the kind of background of learning that I did.

</comment><comment><USER19> Too bad that things back then done for 'compatibility' meant that things now suck because breaking changes back then weren't done. This is probably why UTC time on Windows is still broken.

<comment><USER20> [https://www.cl.cam.ac.uk/~mgk25/mswish/ut- rtc.html](https://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html)

</comment></comment><comment><USER21> More details on what comes after MZ: [https://blogs.msdn.microsoft.com/oldnewthing/20060130-00/?p=...](https://blogs.msdn.microsoft.com/oldnewthing/20060130-00/?p=32483)

</comment><comment><USER22> Ah, so DOS did this too! I was aware that Windows NT similarly has a few ".COM" command-line utilities that are actually Portable Executables (the successor to the successor to the MZ format), for compatibility's sake.

<comment><USER3> I find it actually somewhat hard to believe that DOS ever cared about the extension of filename passed to EXEC because the same syscall is also used (with AL != 0) for overlays and can also be used as generic MZ loader, in both these cases such files typically did not have EXE extension.

In DOS 5.0+ (at least, never tried it on earlier) and probably every version of Windows DOS's EXEC and Windows' CreateProcess()/LoadLibrary() does not care about the filename and just uses loader implementation appropriate for whatever was detected from the header.

ShellExecute() (and it's DOS "equivalent" EXEC(%COMSPEC%, "/C foo")) does care about the extension. In DOS there is hardcoded list of extensions that are executable (BAT, COM, EXE, in this order, with BAT being handled by the command.com itself. There is no way to directly execute image with different extension from the command line), while in Windows what happens depends on contents of HKCR.

One notable feature of how this is handled by DOS is that when you have both foo.exe and foo.com then foo.com takes precedence (IIRC this has something to do with the fact that traditional Windows entrypoint was called WIN.COM although it always was MZ binary).

<comment><USER13> If I remember correctly, the order was COM, EXE, BAT.

On NT platforms today, this is actually user-configurable via the PATHEXT environment variable - and that definitely has them in that order.

I wonder why that was the case. I remember reading some explanation about how it was about backwards compatibility, but that doesn't make much sense, since the first release of DOS 1.0 already had all three. Strictly speaking, COM as a format predates DOS (it's originally from CP/M), while EXE and BAT are more recent additions, COM files compiled for CP/M cannot run on DOS for other reasons, so there's still no compat issue there.

<comment><USER22> Having an order of precedence provides predictable behaviour and, perhaps more importantly, is simpler to implement than forcing disambiguation.

But probably it's just that they added the checks in that order and put no further thought into it.

</comment></comment></comment></comment><comment><USER23> For years I made a living off a batch file and compiler named Combat, then Son of a Batch, and finally Builder.

</comment><comment><USER24> Note that lots of other extensions can be interpreted as executable: [https://superuser.com/questions/228680/on-windows-what- filen...](https://superuser.com/questions/228680/on-windows-what-filename- extensions-denote-an-executable/228693)

(and you can also run code out of DLL and CPL files)

</comment><comment><USER25> Ah! I used to wonder about that when I was a kid playing with DOS. I had the vague notion that com programs were 'dumber' than exe or less complex and were often part of the operating system. And if a 'big' application was a com then it means there were a bunch of additional com or exe files in the directory.

</comment><comment><USER26> But wait what does "MZ" stand for ?

<comment><USER27> The initials of the formats designer: [https://en.wikipedia.org/wiki/Mark_Zbikowski](https://en.wikipedia.org/wiki/Mark_Zbikowski)

<comment><USER28> That's one way to immortalize yourself. Wonder if 'MZ' is the most common electronic initials in the world. Can't think of any other initials or acronym repeated more frequently than # of Windows Systems x # of Exe files per system.

</comment></comment></comment><comment><USER29> >So when did the program loader change to ignore the extension entirely and just use the presence or absence of an MZ header to determine what type of program it is? Compatibility, of course.

Either "Compatibility" is a time, or they should have asked "why".

</comment><comment><USER30> IIRC, when the DOS/Windows shell needs to resolve "program" to either "program.com" or "program.exe", the .com file takes precedence - ISTR this being abused by malware once upon a time.

<comment><USER31> I'm guessing it's because `example.com` comes before `example.exe` when you sort alphabetically? So when it goes looking for `example`, it gets the list of files and takes the first matching one it sees.

<comment><USER32> Or maybe because .COM format was invented before .EXE format (since .COM is simpler)? Just guessing.

<comment><USER31> Maybe someone could disassemble DOS to find out why? Sounds like a project for me this weekend

<comment><USER33> Iirc, MS-DOS is open source and in some museum now.

<comment><USER34> DOS 1.1 is available online from the Computer History Museum ( [http://www.computerhistory.org/press/ms-source- code.html](http://www.computerhistory.org/press/ms-source-code.html) ). But I think that may be too early to be useful.

<comment><USER13> They also offer DOS 2.0.

But DOS had EXE, COM and BAT files since version 1.0.

<comment><USER34> Thank you.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER35> My first experience with truly low-level programming was when I was a teenager. I saw a list of PC interrupts in BYTE magazine and was interested in the one that brought you to the ROM-based BASIC (18h), something I'd never seen. I stuck it into a text editor, saved it as a .com file, and boom! Something that took you to BASIC, which turned out not to be very useful compared to the Apple II (and its DOS) that I was used to at school, but still.

</comment><comment><USER36> COM is a binary image that just gets copied into memory. Because it is a holdover from CP/M it can only occupy one 64k segment for code, data -- everything.

EXE files have a header which tells the loader whether and how they use different segments in memory. They can have much larger memory footprints than COM programs.

</comment><comment><USER37> Huh.. This was one question i have always wondered but never thought to look up even after 15 years of coding..

</comment><comment><USER38> Good stuff. Good to know. Thanks, I needed that. Always wondered. Good explanation, 20 years late for me to read this, but better late than never.

Yes, it sounds like a COM file, with no _relocation dictionary,_ etc., would have to be loaded at the same virtual memory address. IIRC one of the OP comments mentioned this.

Uh, more of the same, piled higher and deeper?

Okay, for my startup I decided to use the .NET Framework 4 with Visual Basic .NET and the usual acronyms SQL (structured query language) Server, ADO.NET (active data objects for using SQL Server), ASP.NET (active server pages for writing Web pages), IIS (Internet information server, which actually makes the TCP/IP calls for moving the data on the Internet and runs my VB.NET program that writes the Web pages), etc. Okay.

But eventually it dawned on me that there is a lot of code running on my Windows machine that very likely is not from Visual Basic and .NET; I'm concluding that there is an older, say, Windows 95, 98, NT _development environment_ based on C++ and a lot of library calls, a message queue for inputs, some entry variables and _call backs_ to them, and quite a lot of functionality not also in .NET.

E.g., when my HP laser printer quit and I got a Brother laser printer, my old HP/GL (Hewlett Packard graphics language, a cute, simple thing for printing and drawing on pages) program to print files didn't work -- the Brother printer didn't do with HP/GL just what my HP printer did.

So, via .NET I wrote a replacement for such simple printing. Well, for writing the characters to the page, object, image, whatever it was (I don't recall the details just now), all I could see to use was some GDI+ (graphical data interface or some such?) calls, but those seem not to be the usual way old Windows programs write to paper, graphics files, or the screen and instead there's something else, maybe back before .NET, and I don't know what that older stuff was. E.g., the GDI or whatever it is didn't let me actually calculate accurately how many pixels horizontally a string of printable characters would occupy when printed and, thus, all my careful arithmetic about alignment became just crude approximations -- no doubt Firefox, Chrome, Windows Image and FAX Viewer, etc. all use something better, more accurate.

So, what am I missing? Am I supposed to get out some 20 year old books by Petzold or some such, get a Windows _Software Development Kit_ or some such, review C and C++, get lots of include files organized, etc., start with some sample code that illustrates all the _Windows standard_ things of a standard _Windows app_ or some such?

Okay, but it appears that .NET does not yet replace all that old stuff? I mean, is it possible to write a _full function Windows app_ with just .NET, VB.NET/C#?

Q 1. What really is that old stuff? Where is it? Are there good tutorials? E.g., if we are to explain COM files, then let's also point to explanations of some of the other old stuff also still important?

Q 2. Is the functionality of that old stuff, for user level programs, maybe not for device drivers, by now all available via .NET but I've just not found it all yet? If so, where is it in .NET, say, for graphics and printing the .NET _presentation_ thingy or whatever?

The code for my startup looks fine, all seems to work, does all I intended, but still I wonder about that old stuff. E.g., eventually I noticed that my favorite editor KEdit, apparently like any well behaved old standard Windows program, will let me print a file. And the printing works great! I get a standard Windows popup window that lets me select font, font size, bold or italic, etc., and it works fine with the Brother printer. KEdit knows some things about writing to a printer I didn't see in .NET. So, with just .NET, I'm missing a lot of Windows functionality?

<comment><USER11> The "stuff" you are asking about is the original win32 API, which as far as I know is still the bread and butter for everything running on top of a windows install. .NET and its various frameworks like WPF or WinForms or GDI+ may be reimplementations of GUI components instead of reusing existing GDI (part of Win32) components but certainly Win32 is the gateway to anything getting done still.

<comment><USER38> Thanks.

I got the impression that GDI+ is some slightly off on the side, goofy thing good for some things but not the main way, say, C++, Win32 programmers at Mozilla write to the screen or a printer, that there are other, really in most ways, better ways in Win32.

So, looks like I should get some documentation on Win32, scan it, see what the major functionality is, and then see if I can find that functionality in .NET class _wrappers_ or some such so that I don't have to do mud wresting with C structs or C++ classes.

I just did a Google search on some of these keywords and found that Microsoft is now awash in developer videos, are supposed to download as MP4 and view in Windows Media Player, now talking about not just "productivity" but "creativity" in apps. Hmm ....

It took me 30 minutes of mud wrestling, two e-mail messages, lots of retrys, a phone call from one of their robots, etc. just to "sign in". They had up a page with radio buttons or round check boxes or some such with a lot of gibberish but no instructions about what the heck I was supposed to do with that page. Typical -- just try it and find out! So, to try it, just run the mouse over and click on everything in sight, hope don't cause the universe to shrink to nothing, and see what can do. With enough such exploratory clicking, I was able to "sign in".

Hmm .... Microsoft is failing in basic, old UI lessons about being clear what are asking users to do, getting a low grade in basic functionality, but asking their devoted, dedicated developers to move from "productivity" to "creativity", e.g., where a screen now looks like some "acrylic" surface with some nice emotional impressions? Hmm.

Uh, Gates, buddy, art is one heck of a challenging field to get right! Not so easy to keep up with Michelangelo, Bernini, Bach, Wagner, Degas, Renoir, etc.!

Why don't you plan to return to art and creativity after you are able to get sign ins on your Web sites working and to write documentation that does well explaining your current work including .NET and Win32?

PS

Okay, at Google I started typing "Win32 dev ..." or some such and right away got a little window of a search for Win32 development tutorials, or some such. Sooooo, that search is very popular!

I picked Microsoft page

[https://msdn.microsoft.com/en- us/library/bb384843.aspx](https://msdn.microsoft.com/en- us/library/bb384843.aspx)

which is

Walkthrough: Creating WindowsDesktop Applications (C++)

which looks like a quite good start!

By now I've used enough Win32 applications to appreciate that Microsoft has had a _framework_ , _starter program_ , _standard first program_ or some such with all the key stuff for printing, using the system clipboard, getting data from the mouse and keyboard, etc. All that stuff is rock solid standard so don't program it, maybe even don't try to study it, and just USE it as it is because it is needed and it WORKS and getting the same just from documentation might require massive mud wrestling! ]

The page does say that Win32 is not the up to date or some such way to develop. Okay, sure, for 64 bit addressing, can believe that Win32 won't work! So, this Microsoft comment seems to imply that can get all the Win32 functionality and more in 64 bit addressing with C#, VB.NET, etc. Okay. Maybe if I keep reading I'll see how to do that, too!

PPS

Yup, suddenly a little more of the world is starting to make sense!

Just Google search

         Win32 .NET

right away gave

[https://msdn.microsoft.com/en- us/library/aa302340.aspx](https://msdn.microsoft.com/en- us/library/aa302340.aspx)

with

Microsoft Win32 to Microsoft .NET Framework API Map

with "applies to"

Microsoft® .NET Framework version 1.0 or 1.1

which is essentially just what I hoped existed! And the page does fairly strongly suggest that anything that can be done in Win32 can also be done .NET! And from the 1.0 and 1.1, that's old, that is, apparently .NET offered essentially all the Win32 stuff right from the beginning of .NET! Since my code was written with .NET 4, I should be able to include in my code essentially any Win32 functionality I want!

GOOD! Thank you Microsoft! Looks good! Took me a while to find, but, again, looks good.

And it's clear from how Google responded I'm not nearly the first looking for that info!

Great! Now I don't have to get out a 20 year old book from Pezold! And I get to continue to f'get about C and C++ and stay with VB.NET, or C# if Microsoft insists -- I hope they don't drop VB.NET!

Good! And it's a nice looking Web page, printed, 64 pages long, that is, not short!

Maybe I've now answered my own questions!

</comment></comment></comment><comment><USER39> Correct me if I'm wrong, but I seem to be the only person here to have weathered the entire evolution from 8008 on, for a living not as a hobby (though is both for me).

I am possibly approaching Senior Curmidgeon status, but I mean well. Even the early chips definitely required RTFM and some serious visualization chops, there are millions of bad and very bad things in a random poke, those two help you probe their borders instead of blue screening your brain. I see examples of ignoring both boasted about here. It's not lame to study before committing, and the needed info has never been secret. Please forgive me this, if you feel targeted. I am 70 years old, and am still doing this shit, on modern multicore 64 bit architectures, and would not be here without doing what I say. RTFM, run code in your head, when you got both start runnin the real thing. Short term nor for the impatient, but long term?

I wrote in ASM up to i286, and always had the specifications handly. Never poke around randomly executing nonsense code. Too easy to trash your HD, if you had one. Or find the real "Halt and Catch Fire". Messy. The books were easily avaiable, back to way before even the 4004, no excuse for not using them to run your probes in the virtual model of the chip implanted in your head from reading that book. The first experiments should then be in areas of confidence with valid data and no addressing violations. Steps, not f*it leaping off a cliff into clouds.

8080 was the last small space part, with only a total addressable 64K. I consider it the root of all evil, as it were, because it set the parameters for 64K limited program. All else flows from there because of the decision to maintain backward binary compatibility. So it was wrapped in redirectors and segment registers in an expanded 1M space, without any security or permissions management. Which would cost peanuts, a flag and some specific address decoder disables. Simple days.

I often took advantage of COM runtimes in those days. Often, and actually most usefully, without a DOS or RTOS between me and the metal. It was trivial to write a serial interface COM loader, and drop my FORTH into it for itelligent debugging. Or anything else, investigative or command.

The freedom started to go away with extra wrappers in 80286, which among other things intoduce "Real" and "Protected" execution modes, plus some extended native addressing modes. Starting to grow up, can still run 8008 COM code, but in that mode it sees only COM compatible register set, and has no access to the execution mode flag. Much "safer", sorta. Except still gets the 32 bit 808x indirect instruction address modes, if invoked in Real Mode.

Heard about "non-modal design"? 68000 got much closer. Every additional wrapper introduces large arrays of data re-routing and management logic. Needs a restart in design and philosopy. dropping COM support hardware and only allowing virtual machines to play is today's answer, getting closer, and much safer. And as core counts go up, have only latest clean architectures run on most cores, no wrappers, and a dedicated legacy core. Or chip. with FPGGA run time loadable architecture for that, agan no wrappers. But it may alreadt be too late. Too much investment that may get broken in amusing ways.

After the i286, the i386 on on to the present have foccussed more on speed and size of, and access to, Protected mode, runtimes, sharing memory, and verious support tricks. All carefully avoiding disturbing the ability to run by now ancient OS utities, buried deep in the underground of the OS. till WinNT, Win32, and the Pentium etc IIRC. Though I swear I still see several in the procces list on W7.</comment>


How the South Skews America - <AUTHOR> http://www.politico.com/magazine/story/2015/07/how-the-south-skews-america-119725.html

<comment><USER2> Wish this had more data than anecdotes.

<comment><USER3> It can't, without meaningless anecdotes the article wouldn't have anything at all to say.</comment></comment>


I thought Lisp would be fun to learn (2007) - <AUTHOR> http://www.redditall.com/2007/08/i-thought-lisp-would-be-fun-to-learn.html

<comment><USER2> Title should be: 'Emacs took longer than a day to learn'. It's well written but doesn't have much to do with Lisp.

</comment><comment><USER3> What does Emacs have to do with LISP?

Isn't it like saying "I dislike C++ because Visual Studio doesn't run on Linux"?

Also, on fun of learning LISP. It's fun in a "oh-crap-my-head-hurts-AAAAAAAAH- oh-I-see-now" way of expanding your brain. It's not Ruby "lolz-I-can- type-5.years.ago-hehe" type of fun :)</comment>


Inital push of closure support in openjdk - <AUTHOR> http://mail.openjdk.java.net/pipermail/lambda-dev/2010-May/001420.html

<comment><AUTHOR> For the actual syntax/functioanlity, see code

[http://hg.openjdk.java.net/lambda/lambda/langtools/raw- diff/...](http://hg.openjdk.java.net/lambda/lambda/langtools/raw- diff/7704dcd17e0b/test/tools/javac/lambda/LambdaExpr02.java)

[http://hg.openjdk.java.net/lambda/lambda/langtools/raw- diff/...](http://hg.openjdk.java.net/lambda/lambda/langtools/raw- diff/7704dcd17e0b/test/tools/javac/lambda/LambdaExpr01.java)

[http://hg.openjdk.java.net/lambda/lambda/langtools/file/7704...](http://hg.openjdk.java.net/lambda/lambda/langtools/file/7704dcd17e0b/test/tools/javac/lambda/LambdaCapture01.java)

<comment><USER2> Also, the proposal it is based on:

[http://mail.openjdk.java.net/pipermail/lambda- dev/attachment...](http://mail.openjdk.java.net/pipermail/lambda- dev/attachments/20100212/af8d2cc5/attachment-0001.txt)</comment></comment>


The Oatmeal responds to "Tesla wasn't God and Thomas Edison wasn't the Devil" - <AUTHOR> http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFEQFjAA&url=http%3A%2F%2Ftheoatmeal.com%2Fblog%2Ftesla_response&ei=t6K6T8L9M-jK6gHLsvjOCg&usg=AFQjCNE8NwAKninc_QyO7ODQKT_Kc35wyw&sig2=bAZ1skGxzhOvnPk8LkWBiw

<comment><USER2> Funny* how it's a goofy (but often hilarious) comic that is setting the record straight and in a sense changing history.

Matthew, I applaud you for your brave voice and for standing up for animals!

*Pun intended, sorta.</comment>


The 2010 TIME 100 Most Influential People - <AUTHOR> http://www.time.com/time/specials/packages/0,28757,1984685,00.html

<comment><USER2> I think it's too amerocentric.

That said, here's a link to the list of the top 100

[http://www.time.com/time/specials/packages/completelist/0,29...](http://www.time.com/time/specials/packages/completelist/0,29569,1984685,00.html)</comment>


Post-Brexit Rumblings Spook U.K. Tech Boom - <AUTHOR> http://www.bloomberg.com/view/articles/2016-07-22/post-brexit-rumblings-spook-u-k-tech-boom <comment><USER2> Does this article literally start off mentioning the blatant age discrimination in tech?

"If you are under 35, possess an entrepreneurial spirit, speak Python and don't think of a vegetable when you see the word Celery, then it's likely you are in high demand"

<comment><USER3> Why, yes, it does.

If it exists, then it should be mentioned - there's no point in hiding it or whitewashing it. I certainly didn't take it as supporting age discrimination, just a mention that it's a real thing that affects market desirability.</comment></comment>


IPads will be made in Brazil - <AUTHOR> http://www.9to5mac.com/61081/brazilian-science-and-technology-minister-ipads-will-be-made-in-brazil/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+9To5Mac-MacAllDay+%289+to+5+Mac+-+Apple+Intelligence%29

<comment><USER2> And they sill cost an arm and a leg there. And even though they will probably use identical manufacturing technologies as they use other places, I don't know if the quality will be the same. Had many Brazilian products, assembled and completely manufactured there and they were very poor quality.

<comment><AUTHOR> _And they sill cost an arm and a leg there._

Let's see.

 _Had many Brazilian products, assembled and completely manufactured there and they were very poor quality._

I must confess have that same perception of products assembled in china, but still apple did well, right? ;)

<comment><USER2> The thing about quality is that China made investments on that regard, not only the companies, but the government with infrastructure and other things.

The price won't change to what you see today, it never changed and probably never will. Cars manufactured and assembled in Brazil still cost more than similar assembled abroad.</comment></comment></comment>


The rise of mostly-autonomous systems - <AUTHOR> https://blog.foretellix.com/2016/04/23/the-rise-of-mostly-autonomous-systems/ <comment> awinter-py we're already in this regime for airline pilots and (anecdotally) the results aren't great; the french airbus that went down over the ocean a few years ago was because of pilot error after an emergency condition (icing) disabled the autopilot.

I don't know if that's the _typical_ case for autopilot tagging in its human, but it seems difficult to motivate and train experts who will only work 0.5% of the time. Expertise comes from experience.

Unless the pilots are required to be in the simulator the whole time the autopilot is running the plane, which would be interesting and cool.

We also have no idea of how fast autonomous systems will 'evolve' (with programmer help at first) and 'learn' once authorized to roam free. For their constrained domains, I suspect they'll be up to 'expert' performance pretty quickly; plus the rules will change as reaction times go down, attention per vehicle improves, and communications improve.

<comment><USER2> Then again, is a system that works 99.5% of the time and delegates stuff to humans 0.5% of the time more or less reliable than a system that relies 100% on humans, with their microsleeps, inattention, mistakes etc.? Has air travel, e.g., become mostly less or mostly more reliable by means of automation?

<comment> awinter-py Hmm -- the question shouldn't be 100% human vs 0.5% human, the question is 0.5% human vs 0% human. Can somebody helicopter into a new situation and make a decision quickly about what to do.

Flight may be a bad example because the time constraints are so short. Changing the scenario to an automated fedex truck lost on a rural road, the truck can pull over and wait a few minutes for help. In this case the solution probably isn't to tag in an expert but rather to call the delivery recipient for directions (same as a human driver would do).

</comment></comment></comment><comment><USER3> This is so spot on. Before were able to automate away all this work we'll augment peoples abilities with really smart tools. This concept will end up not necessarily destroying entire job sectors but their job definition will be dramatically different, in the same way a computer used to be a room full of people doing math.

<comment><USER4> But the story of why people have jobs they hate - if they have jobs at all - may need a villain . You can't ignore narrative reasoning, no matter how flawed it is.</comment></comment>


MoCL - out in 3 weeks - <AUTHOR> http://wukix.com/dist/mocl_eclm2013.pdf MoCL presentation from ECLM 2013 - new Common Lisp implementation for iOS and Android <comment><USER2> Definitely something to keep an eye on. If the title were "cross platform mobile common lisp" it would probably do it a bit more justice!</comment>


Ask HN: How do you stream events from your node server to web app? - <AUTHOR> I am looking to send events from my node server to my react app. However, I don't want anybody to
be able listen to the events.
I've looked into redis pub/sub and google pub/sub but they seem either awfully complicated (gcloud) or hard to implement (redis doesn't have a browser client).
What should I use? <comment><USER2> I don't know what you mean by "I don't want anybody to be able listen to the events," since web apps can always be taken apart using the dev tools (including the network requests). But, putting that aside for a second, since you want a node server to send events to your react app, socket.io (open source, MIT license) should be able to help you. It works with node and you can bind it to a Component's state.

[https://socket.io/](https://socket.io/)</comment>


How to Swallow $200M Accidentally - <AUTHOR> https://medium.com/@blakeross/how-to-swallow-200-million-accidentally-c7d8ed57e625 <comment><USER2> Easily one of the best articles I've read on Medium or for free online in a long time. Funny and in-depth analysis of incumbent competition with great supporting evidence.

Other comments here on HN are about the forced analogy or verbosity of the article but I think the point was to be entertaining and insightful. And I think it was artfully executed.

Thanks for posting the link!

<comment><USER3> Medium has more variance than it used to. Early on articles, like this one, where the author knew what they were talking about dominated. They are still there but now that there's a plurality of articles written as early attempts at SEO or personal branding or about discoveries from an "endless September" of entrepreneurship, such articles are less frequent.

</comment></comment><comment><USER4> I think the bigger take-away here is the connection between media pronouncements and stock prices. It's a nice reminder that anyone with a good lawyer and writing skills can tank a stock for a profit way too easily. I've always been for reforms in valuation approach that reduce risk of this. Especially given that we know companies pull crap like this sometimes to cause that exact effect. They're always tricking us for market share or whatever. So, why trust it by default?

</comment><comment><USER5> it seems like maybe a more reasonable conclusion to draw is that the search feature is still being tested and tweaked quietly, and as such facebook's press office isn't hitting the gas as hard on getting it media attention as it is on the professional services page. There isn't necessarily a 1:1 correlation between what they send out to journalists and what's reported, but there certainly is one.

<comment><USER6> Facebook's PR team did zero outreach on the professional services page. It was live for a month before a Social Media Manager at Acodez IT Solutions stumbled on it and blogged about it.

</comment></comment><comment><USER7> What a tortured analogy

</comment><comment><USER8> Written by "Former Director of Product @ Facebook" \- that's how it reads.

</comment><comment><USER9> Yelp killer? Let me know when Facebook has a dedicated app on your smartphone that doesn't require login which searches for businesses in a map view, with pictures, ratings, and reviews.

<comment><USER10> FWIW I was not logged in, actually on a brand new tablet with no Facebook account connected to it and was able to search it.

</comment></comment><comment><USER11> The content here could have fit into a single paragraph.

</comment><comment><USER12> Seems like he mostly wrote this article to insult MBAs with a straw-man argument made up of very strange analogies.

</comment><comment><USER13> Why is everyone in the article's comments sucking up to the author so hard?

<comment><USER14> That's Medium in a nutshell, basically.</comment></comment>