Group Matchmaking Startup The Dating Ring (YC W14) Launches In San Francisco - <AUTHOR> http://techcrunch.com/2014/02/13/the-dating-ring-sf/ <comment><USER2> Here's what I want: "Study Grouper". Grouper but you go do something educational, e.g. a wine class, cooking class, dance class, amateur astronomy class, painting class...

<comment><USER3> Meetup.com would probably do what you're looking for

</comment></comment><comment><USER4> "There are better things to waste your time on. Like Facebook. Or Twitter. Or porn."

The last bit seems off putting to me. I thought the site looked very professional and the concept seemed like it could facilitate more meaningful connections, but seeing that puts all those first impressions in peril to me.

</comment><comment><USER5> Have you even built the product yet? All I see are a few embed forms and zero information or screenshots on the product...

</comment><comment><USER6> What's the difference between The Dating Ring and Grouper? The article suggests a more "personalized" match making, but it seems to me that both use a combination of human input & some algorithms.

<comment><USER7> You don't know anyone on Dating Ring dates - compared to Grouper, where you are going with a couple friends.

I have been on a few Dating Ring dates and I have found that the human input does help - it filters out people that make for truly horrible dates. Unfortunately, those horrible experiences are relatively common on platforms like Grouper and regular online dating.

<comment><USER8> You're gonna get human input the minute the two of you meet anyway, so you might as well cut out the middleman and save a few bucks.

</comment></comment></comment><comment><USER9> I had a "pretty good" idea for a dating site, anyone feel free to "steal" it. It would set up about 6-8 guys/girls in a group dinner (no one would choose who they group with, but it would be picked by admins on the dating site). This relieves the pressure of one on one dating, and makes it feel a bit more natural and less awkward. I'm sure something like this must exist already though.

<comment><USER10> Grouper?

<comment><USER11> The difference in @gavanwoolery's idea is that you don't bring any friends. The whole group is curated. Which is different from Grouper, but basically the same as the company OP linked to.

<comment><USER9> My mistake - I misread the OP as implying that the three dates between the guys and girls were one-on-one -- so yeah basically the same idea as the OP.

</comment></comment></comment></comment><comment><USER12> I doubt this will succeed. The pricing is enough to turn away most potential users and the remaining users won't generate enough income to sustain the company, especially if they meet everyone in person.

<comment><USER7> In NYC even an affordable first date costs around $25-$50. (2-4 cocktails/drinks at a semi-nice place at $10-$18 each) Paying an extra $20 to make that experience less volatile in terms of quality is not that outrageous.

Whether this will be enough to sustain the company I have no idea...

</comment></comment><comment><USER13> From the FAQ: "The initial matchmaker meeting costs $25 (and is free for everyone initially while we launch in SF) and dates cost $20. It's a real steal. "

Oh it's a steal alright...

</comment><comment><USER14> Would anybody be interested in a dating site for makers/programmers?

Like, you work on solving a small or fun problem together while chatting?

EDIT:

I've had several "dates" I've gone on that have devolved into business rather quickly, and I know several friends that have gone to hackathons expecting to hack and instead have to deal with romantic advances (not unexpected, but still distracting).

It'd be nice to explicitly set content-type ahead of time so everyone knows what to expect.

<comment><AUTHOR> This is something we've considered doing (and that a few dating companies have tried in the past). It can be hard logistically to coordinate for compatibility, scheduling and similar interests, with a reasonable price point. On the other hand, doing activities like this can make for much more successful dates. So it's something we're thinking about adding on over time, once we have a big enough pool.

<comment><USER14> Oh, I'm not talking about anything crazy like in-person meetings.

MVP would be a prompt ("How do would you implement a Valentine's Day card?") and matching service (W4M seeking Angular expert), and then links to a shared code editor with chat screen--could even use somebody else's product. Minimal buildout.

Way too easy to overthink this product.

</comment></comment></comment><comment><USER8> Are all these new age dating sites / apps really that much better than Craigslist? I understand people want to make money, but I've had it up to here hearing about a new "next big thing in dating" every damn day!

<comment><USER15> _Are all these new age dating sites / apps really that much better than Craigslist?_

Um, sort of? I think the only differences between any two dating sites are vetting and marketing-image. Craigslist has very little of either, and something like Eharmony has a lot of both. Both of them are niches within the larger dating-industry morass.

<comment><USER8> Good point. But isn't Craigslist's lack of vetting a good thing (1)? They're already giving out plenty of safety advice (2).

1\. [http://chrishateswriting.com/post/76431353368/the- anonymity-...](http://chrishateswriting.com/post/76431353368/the-anonymity-i- know)

2\. [http://craigslist.org/about/safety](http://craigslist.org/about/safety)

<comment><USER16> I don't know what it's like in your area but the Craigslist personals here are just abysmal, full of very low quality mates. I think the anonymity and lack of entry barriers scares anyone worthwhile away, leaving only the desperate and those willing to endure the safety risks.

</comment></comment></comment></comment><comment><USER17> The article notes that dates involve 3 men and 3 women. Is this intended primarily for straight people, then?

<comment><USER18> Unlike grouper it does not appear that any of the parties knew each other in advance. So if my understanding is correct, the two same-sex individuals you are matched with are also potential partners.

<comment><USER19> The other response is better. If it worked this way, you were gay, and the other two people of your gender were straight, you'd wouldn't have any potential matches there.

</comment></comment></comment><comment><USER20> What the heck is with that logo?

</comment><comment><USER21> the logo looks almost exactly like the scala-lang logo</comment>


Ask HN: Initial feedback - imageoverflow.com - <AUTHOR>

I've been working on a recent image discovery application, with a focus on keeping the interface clean and unobtrusive. I welcome any feedback or comments on the site's design. <comment><USER2> Clickable:

<http://imageoverflow.com>

Looks cool.

</comment><comment><USER3> After I came to your site, the very second link that I tried to click was broken, and this seems to be why:

<http://http//instagr.am/p/MHDHSsGAC7/>

All the links on the page seem similarly unusable.

<comment><AUTHOR> Refesh and try again... it should work now.

<comment><USER3> Fixed! Excellent

</comment></comment></comment><comment><USER4> Why are you URL-shortening all the links? This just introduces an unnecessary point of failure and bitrot into your results. It's especially silly when you have the full-length link in the display text, too...

<comment><AUTHOR> That was a good question... Should be using the real links now.

<comment><USER4> Doesn't seem to be. I'm referring to the links to the original image at the bottom of each picture.

</comment></comment></comment><comment><USER5> Very nice design, I like particularly self-changing background. Maybe the search bar could be refined a little bit more

<comment><AUTHOR> Glad you noticed the changing bg! I have a few changes "in the works" which directly affect the search bar area ;)

</comment></comment><comment><USER6> cool app! My only suggestions would be to make the layout adaptive specifically for tablets and phones, and to speed it up, for me it was fairly slow with all the image loads. Great job though!

<comment><AUTHOR> Thanks for the feedback. Glad you liked it!

Working on mobile, but still not sure about what path to take regarding true/html5-based native or a pure html5 based web version. It depends on what direction I decide to go regarding new, novel features for the app.

On the matter of performance, can you give me a bit of info on the equipment you used to view the site?</comment></comment>


Migrating away from Puppet to cdist (Python3) - <AUTHOR> http://www.nico.schottelius.org/blog/migrating-away-from-puppet-to-cdist/ <comment><AUTHOR> We wanted a push based configuration management, that actually had reasonable error messages. We were looking at puppet, but the undecipherable error messages were such a pain!

We searched and found cdist. We're very much enjoying it. The reasons he lists for switching against Puppet resonated with me very much.

Plus, it's written in Python3, which might be a turn off for some, but it's a pretty cool demonstration that python3 is making its way in the wild.

<comment><USER6> I looked through the docs, but couldn't find anything interesting regarding exchanging data between nodes. Everything seems to be isolated and the only real exchange seems to be possible in local script generators. How do you do stuff like "find all running frontend nodes and put them into this config file", or "find a database node and create a config with credentials valid for that node" using cdist?

<comment><USER7> I haven't looked at puppet in a while, but I think this feature is only possible in chef, where each node can execute search queries on the chef server. It is actually one of the reasons I prefer chef to puppet. I guess since the developers of the tools are coming from the puppet world, they did not think about implementing it.

Wether this kind of feature should be implemented in the CM tool is another debate :)

<comment><USER8> Puppet provides a mechanism called Exported Resources allowing nodes to provide bits of config for use by other nodes. For example I presently export Nagios check resources for webservices on my web nodes, which are collected by my Nagios server for building it's config.

</comment></comment></comment></comment><comment><USER9> I used to work on Puppet's code professionally, and it's true that all of the listed problems affect the Puppet software to some degree. It's always a challenge to fix problems in software that people are actively using - I can't help but notice that one of the complaints is too many significant changes between versions!

Puppet evolved to solve a lot of different problems for a lot of different people, and I'm continually impressed by the ingenuity of the community, but having to solve all those problems at once means that it's hard to change behavior at all. My intuition is that a collection of more discrete components - one that uses Unix commands instead of ruby libraries, for example - <USER3> probably eventually replace Puppet (and Chef, and the others).

In the meantime, though, there's an impressive amount of sysadmin knowledge baked into the Puppet codebase - it can accomplish very diverse tasks on very diverse platforms - and there's no easy way to extract the results of its evolution into other software.

<comment><USER6> > one that uses Unix commands instead of ruby libraries, for example - <USER3> > probably eventually replace Puppet (and Chef, and the others).

I hope not... There's a huge value in being able to operate on proper data types easily. I can get a hash and output a corresponding .ini-like file in a couple of lines in chef. This would be a nightmare to do in shell.

<comment><USER9> that's not the part I meant! Clearly we need good programming languages to manipulate data. I just think that for the part that touches the OS, using shell commands and piping their output to a parser is more reliable than the equivalent ruby libs.

</comment></comment></comment><comment><USER10> There's one thing i dislike: releases are git based by default.

oh its great and all but it's pretty much like chrome and others: no testing.

this stuff is _critical_ to the infrastructure, and yet again: no testing.

just git pull updates away! yeah, right then push configuration on this untested stuff over thousand of machines and watch it potentially break...

Oh that, and that it's YA configuration management tool, and of course, you don't switch those overnight "just to check out the newest kid on the block".

I'd much rather get puppet enhanced. (but yeah - some of the puppet issues are design issues which aren't going to change)

What I do like:

\- push. ffs! pull uses more resources and means you rely a lot on the host to be working properly. with push you get errors back (can't connect, can't do X, etc)

\- no ruby. woot. seriously, ruby's cool but its just not default.

\- simple and straightforward. nuff said. kiss has been applied.

\- since its simple its less likely to break in odd ways like puppet does, or die off because the master just doesnt handle the load. push model also help a lot here.

\- easy to run off a laptop compared to puppet.

</comment><comment><USER11> Funnily enough I just released Bootstrap (<https://github.com/olegp/bootstrap>) yesterday which addresses these very same issues I had with Puppet.

I'm initially focusing on Ubuntu Server LTS on AWS EC2. As a result, it's all Bash and very simple. I'm still working on the documentation, but would really appreciate any feedback or improvement suggestions you may have.

</comment><comment><USER12> In the same vein, has anyone tried the py-based salt (saltstack.org) for config management?

<comment><USER13> Have not tried yet, but thanks for the link! Salt seems to be comparable to Mcollective - except, where Mcollective uses middleware (ActiveMQ or RabbitMQ or Apollo) which comes with its own server (broker), Salt uses ZeroMQ, with a built-in broker.

<comment><USER14> Actually, ZeroMQ is brokerless by design[1] which prevents a hop in all communications. The design is slightly more complex, but the speed increase is very real.

[1] <http://www.zeromq.org/whitepapers:brokerless>

</comment></comment></comment><comment><USER15> I have to admit, it's very attractive to make it all essentially glorified shell scripts. Not only is it simple enough for most people to understand by default, it's easy to hack on and it's relatively portable.

The only thing I don't like about that is that you're essentially writing code, which - since this is a sysadmin tool - means you're depending on sysadmins to write code. This is usually a bad idea. With restrictive, structured language you can still provide for all the features they've built into their types/manifests/gencode/etc without relying on someone being able to program.

I was maintaining one part of a configuration management tool at a previous gig. The idea was to have a simple key=value file which essentially set identical environment variables. There was support for a few magic words like "REQUIRED" and "OPTIONAL", some very rudimentary logic statements ("if KEY=VAL then KEY2=VAL2") and an optional executable program for each config file to do extra magic that might be needed before the real configuration management kicked in (Cfengine2 at the time). In this way one or two people could write some generic config management modules/scripts and the environment variables would tell them what to do, so anybody could build and deliver configuration with only a key=value file and no programming. Everybody could pick up the format or copy an example because it was dead simple. Best of all: almost no code to maintain.

<comment><USER16> _means you're depending on sysadmins to write code_

You're not seriously suggesting to give the management of a complex deployment into the hands of a person who can't program?

 _With restrictive, structured language you can still provide for all the features they've built into their types/manifests/gencode/etc without relying on someone being able to program._

Sorry, it's delusional to think you could operate puppet without being able to program. In theory the puppet language is said to be "not quite turing complete" or "mostly declarative".

In reality there is no such difference. It's just a (poorly designed) programming language with domain-specific constraints. It _does_ have all the concepts that give non-programmers headache: variables, classes, parametrizable classes, defines, inheritance, etc. And on top of that you better know your ruby, too, because you won't get away without writing custom types, resources and functions. So... your admin is not just using the language - he's also extending it!

<comment><USER17> I'm a sysadmin, who can't program, who has setup and used puppet very successfully at two different comscore top-100 sites to provide faster, more reproducible builds with better revision tracking and change control. There's nothing delusional about it, its working quite well and I'm being payed quite well.

</comment></comment></comment><comment><USER18> cdist: For anyone looking for a tutorial this is (unfortunately all) that there is: [http://www.nico.schottelius.org/software/cdist/man/2.0.4/man...](http://www.nico.schottelius.org/software/cdist/man/2.0.4/man7/cdist- tutorial.html) More docs under: [http://www.nico.schottelius.org/software/cdist/man/2.0.4/man...](http://www.nico.schottelius.org/software/cdist/man/2.0.4/man7/)

puppet: Making the error messages a bit better and switching to ssh as a transport mechanism would make a lot of people happy.

<comment><USER19> The docs at [http://www.nico.schottelius.org/software/cdist/man/2.0.4/man...](http://www.nico.schottelius.org/software/cdist/man/2.0.4/man7/cdist.html) are outdated, they mention a quickstart and a cdist-env that don't seem to exist: <https://github.com/telmich/cdist/issues/6>

</comment></comment><comment><USER20> Seem to rely on using password-less ssh as root! So one machine can ssh into all your servers as root? [0]

Sounds dangerous.. There's a reason you would normally protect your ssh keys with a passphrase. Do you really want leaked file(s) to permit root login to others servers?

Think it should at least: \- Use authorized_keys to limit what can be done with the key \- use ssh_agent instead of keys to somewhat limit the exposure if/when the laptop with cdist is stolen/cloned/hacked.

[0] [http://www.nico.schottelius.org/software/cdist/man/2.0.4/man...](http://www.nico.schottelius.org/software/cdist/man/2.0.4/man7/cdist- tutorial.html)

<comment><USER18> It's not as crazy as you imply: it's a configuration management system - <USER5> has _complete control_ over your machines. Giving it root or not is irrelevant.

Password-less login: if your ssh key uses a passphrase, combine with keychain or ssh-agent.

<comment><USER20> My point was that storing unprotected keys for all your servers on one or more "unprotected" laptops/PCs seems like a bad idea.

Yes, to some extend it can be mitigated with ssh-agent, but that's not what they do in their tutorial. And even with ssh-agent, can't someone steal all your keys from memory?.

 _"It's not as crazy as you imply: it's a configuration management system - <USER5> has complete control over your machines. Giving it root or not is irrelevant."_

This is crazy in its own regard: Giving one piece of untested, unhardened code control over all your machines. At least the code-base is small..

<comment><USER18> Okay. Out of interest, do you have any idea on how you would design a configuration management that works without root access to all of the machines you want to configure?

<comment><USER19> The problem isn't exactly with root (configuration management has root-like privileges), but push vs pull.

Both rely on the confidentiality of a private key on the master (the server identity if it is a pull, client identity if it is a push), but to fool a pull you also have to subvert the dns or the routing. Using ssh certificates that expire and are tied to the master's address would be a good first step making push safer against key interception.

<comment><USER15> If someone can find a way to write to your master change management repo, you're boned. (Is it sitting on NFS? If so, you may have a problem!) If someone roots the master box that you're pushing from or that your clients are pulling from, you're boned.

Technically you don't _have_ to use root anywhere. You can push from a master box as an unpriviledged user and specify any user on the target machine to connect as, and ssh keys (along with an agent) will take care of the rest. The target machine doesn't need to be running your config management as root, you just need to set up a config management account with rights to the users/groups that your services are running. Your service may get compromised but root wouldn't - until they run a local priv escalation 0day.

I think you're confused. Since the tools are using either SSL or SSH these protocols (when properly implemented) prevent mitm or spoofing attacks on things like dns or routing protocols. Your key does not get intercepted, ever, because you're never sending a private key. But some machine, somewhere, has to have keys or you can't log in.

The only thing you have to worry about is someone getting both the keys AND access to a server that's running an agent that you've authed with. If you're super duper paranoid ssh-agent has an option to never cache a given key's authorization so it can ask you for the password for the key every time you use it. I'm pretty sure that would be super annoying, though, so better to just run one agent once for an entire batch push/deployment and kill it once your job is done.

</comment></comment></comment></comment></comment></comment><comment><USER21> Good Lord, my eyes! The website needs some serious work.

<comment><USER13> Web browsers usually allow the user to change a site's look quite a lot. Try applying a custom stylesheet, or perhaps Readability.

<comment><USER18> His complaint is that the website is horrible.

Telling him to redesign it or use Readability doesn't change that.

<comment><USER22> It looks exactly like a PuTTY terminal, not surprising for a systems admin.

</comment></comment></comment></comment><comment><USER23> I might just give this a try.

I postponed using Puppet/Chef because it didn't seem right that they were Ruby and thus had their own dependency chain.

Seems to me automatic configuration should be as close to whatever is available on a bare install, meaning C/bash.

<comment><USER24> At least for (recent versions of) Ubuntu Server, a C compiler isn't available on a bare install, so it'd need to just be Bash.

And what's with the aversion to dependencies? Installing Ruby is just an apt- get invocation away from a bare server.

</comment></comment><comment><USER25> Anyone have a comparison between cdist and fabric?

<comment><USER19> Fabric sends a bunch of commands over ssh. It's very simple, and your task is to write the right commands.

> Puppet in contrast to other systems emphasised on "define what I want" > versus "define what todo", which is a great approach and we've [cdist] > shameless cloned this approach.

With cdist and puppet you describe resources by instanciating resource types like Package, CronJob, Service, File, etc. It's very concise and high-level. Types are composable and easy to reuse, so if you see a common pattern in your configuration, you can factor it into a type.

</comment></comment><comment><USER26> It's very frustrating that none of these tools work well with windows.

<comment><USER27> It's very frustrating to work with Windows. The lack of a POSIX compliant shell in the standard distribution is what's holding it back the most.

Mac OS 9 and prior was also super frustrating to work with for similar reasons.

</comment></comment><comment><USER28> besides the bootstrap problem, I don't see how chef doesn't solve the issues they had w/ puppet.

Perhaps there were things that disqualified chef in their eyes?

</comment><comment><USER7> I would suggest that anyone interested in Configuration Management would read the article, event if they are pretty sure that their tool of choice is exactly right.

I have used puppet in the past an am now a happy chef user. I find that node attributes, data bags and search queries (from the nodes themselves) are very compelling reasons to use chef.

I agree that installing either chef or puppet on even a somewhat recent distro can be difficult, and this might be one of the reasons that CM is not as widespread as it should (I maintain PRM packages for chef, and it is no so easy...). So I agree with one of the points made by the author. But I have to admit I pretty much discarded his other ideas after reading the article at first, even though I poked around in the documentation.

But then, I thought about the points made and I must say that a CM tool made of small, autonomous, well tested "parts" makes a lot of sense. If you think about it, a CM system's job is to configure UNIX servers (mostly), so why not implement it the UNIX way? It is a bit like the Hubot implementation by Ted Dziuba: back to basics!

You CM tools, wether puppet of chef, must: deliver files to nodes and then execute code to ensure that they are in a proper state (it's a bit more complex than that, but not that much). I'm not sure if it's better to use push of pull for file delivery, but this should be an independent task, that could be implemented either way. Using SSH for security and access control seems like a no brainer. Then comes the compliancy part, where code is executed to ensure that the node is configured the way you want it. Why not have a bunch a small programs, which could be implemented in different programming languages, do it?

Let me give an example. Both puppet and chef work, at the lowest level, with resources. You define them in containers (manifests or recipes) and then make sure they are defined on the nodes. You could have "file", "package, "user" or "template" resources (for example), like:

      # this is pseudo chef code for a fictional redis recipe
      package "redis" do version "1.0" end
      user "redis" do uid 230 end
      template "/etc/redis.conf" do
        user "root"; group "root"
        mode "0644"
        notifies :restart, "service[redis]"
      end

Why not have each resource definition as a UNIX programs, that can be executed independently? My understanding is that cdist uses shell functions, but I would prefer regular programs, which could be called from anywhere:

      # in a shell script, distributed by the CM tool
      package redis --version 1.0
      user redis --uid 230
      template /etc/redis.conf --user root --group root --mode 0644 --restart redis

(I know this looks pretty much like what cdist does, but I'm trying to get to the point made by the author without being distracted by the puppet critique)

I am convinced you still need attributes, bits of data attached to roles and nodes, for your CM to be efficient, but I don't see any reason this could not be implemented in cdist.

Anyway, this comment is getting really long and I am not sure I made my point. I guess I'm more thinking out loud rather than commenting on the article :)

Do yourself a favor, read the article, put aside the implementation details and website design, and think about the underlying points.</comment>


Ask HN: Will "news.ycombinator.com" return? - <AUTHOR>

<comment><USER2> No, it's gone for good.

(If you're still seeing messages about being down, click Refresh).

</comment><comment><USER3> Where did it go?</comment>


Show HN: Social Shopping - <AUTHOR>

Hey there HNers,
First of all, apologies for the shameless "self-promotion" - just felt like sharing :-)
I've just launched a very simple project on the e-commerce front and although I'm currently involved in a few "bigger and bolder" projects, decided to give this a go. It's a DIY e-commerce tool that allows people to setup stores on Facebook, for free. We started this project as a weekend hackathon to help a friend bring her products online and decided to turn it into a product, so there's still definitely a lot to be done.
Apart from showing off, this thread is here to start a discussion around the social commerce market: what is your take around the market/concept? Thoughts? Predictions?
Comments, observations and even blunt criticism on my little pet project are also most welcome!
ps.: yes, I'm looking for cofounders, investors, partners, designers and everything!
ps2.: almost forgot - if anyone's interested on checking out the app, the beta is on http://getnovelo.com <comment><USER2> I am currently bearish on social shopping. Lots of people actually do not like to buy and sell from friends. And ultimately, you usually want as wide an audience as possible. However, I think Facebook and Twitter will continue to be important channels for gaining exposure and engaging with customers.

Regarding Novelo, the Facebook page is pretty much empty so I am not sure what the service does or how it works. I am unlikely to add the app without any information.

back at you on the plug: pricetack.com falling price marketplace

<comment><AUTHOR> cobbled together a quick "what's this" page and added there as a tab - that, by the way, proved itself an incredibly difficult task, as there don't seem to be any facebook app to do just that. Wow!</comment></comment>


Ask HN: Where do I find a partner for a side project? - <AUTHOR> I know where I would look if I wanted to find a serious business partner and start a real business [0], but where do I find people interested in joining night and weekend projects? I have a decent hardware project, and a few iOS apps that I think would do well with some marketing, but I am not interested in that side at all. Moreover I am about to release what I think could be a big hit for the Apple TV, but similarly I don't have the knowledge or desire to do much marketing. There are lots of people who are interested in doing the tech side of things like this, but is there anyone who would be interested in the business side? I would happily offer 50% +/- of app sales to someone interested in doing some marketing work. Where should I look for such a person? Are there sites like HN, but with more of a business focus where I could look?<p>[0] angel list, founder dating, or local meet ups <comment><USER2> Why not the same places? I have met countless people through meetups for side projects. In fact I would rather work with people I meet in all the places you point out for side projects to begin with. That's a good foundation for building a working relationship for a serious business. It allows you to get to know each other without the commitment of a business.</comment>


Bicameralism (Psychology) - <AUTHOR> https://en.wikipedia.org/wiki/Bicameralism_(psychology) <comment><USER2> "It is one of those books that is either complete rubbish or a work of consummate genius; Nothing in between! Probably the former, but I'm hedging my bets." \- Richard Dawkins

I think the theory's genius lies in its radical approach to what primitive consciousness might have been like to experience subjectively, however wildly off the mark the theory may be. That experience is likely to have been so different from the modern mind that imaginative hypotheses like Jaynes's should be welcome food for thought.

</comment><comment><USER3> I don't think you need to posit bicameralism to salvage parts of this theory. People developed language gradually, and I'm sure there was a period of time where it sat uneasily in the mind, and then a point in time where people had something like an internal monologue for the first time, and without having any theory of consciousness or souls or the brain or anything of the kind, it must have been a world shattering, all consuming miracle for the first people that experienced it.

It makes sense to me that some people would have externalized the source of it and understood it to be spirits or gods or ancestors or whatever kind of disembodied force, and imagine being the first person who could understand it, and control it and help others achieve it — imagine the power and respect that gets you — unlocking a kind of consciousness or divinity in other people. You can see how priesthoods develop from it.

Think about that and go back and read Genesis, and think about how it's a story about naming things, and categorizing things, and learning about the world. And how it's knowledge that drives people from a state of paradise, an enternal now where there is no passage of time, no thought, no awareness of ones own mortality.

<comment><USER4> I suspect you have this backwards: I bet cats have an internal monologue thinking about the next mouse or fresh tin of food. It'll be experienced by them as the same experience as when they're actually chasing a mouse. I think the concept of experiencing a replay of an experience predates language by tens of millions of years. Language just adds a new codec onto that mechanism.

<comment><USER3> An inner monologue is when you're talking to yourself. I don't think that can exist without language. What would you say to yourself with no words?

</comment></comment></comment><comment><USER5> Jaynes's "The Origin of Consciousness in the Breakdown of the Bicameral Mind" was used as a significant reference for the design of the Boeing 757 and 767 cockpits. Even though the flight decks of the two aircraft were of significantly different scales, Boeing managed to design the two so that they appeared identical to the flight crew, for example, larger windows in the 767 but further away so that they covered the exact same field of view. The goal was to, for the first time, create two quite different aircraft with identical certification so that a pilot certified in one is also certified in the other. It was successful.

<comment><USER6> I'm not sure i get how a theory of the human mind being divided in a master/follower model relates to designing cockpits that appear identical despite being different sized. Could you elaborate?

<comment><USER5> I cannot elaborate. I once interviewed one of the Boeing design team execs who told me about the book and its key role in designing for human perception but that is all I know. I wish I knew more.

</comment></comment></comment><comment><USER7> Catching up on Westworld?

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

<comment><USER8> Nope, submitter posted about it on HN earlier in response to a story about hearing voices: [https://news.ycombinator.com/item?id=20363387](https://news.ycombinator.com/item?id=20363387)

</comment></comment><comment><USER9> This concept was explored by the show "Westworld" (don't worry if you haven't seen it, this point isn't all that relevant to the plot). From what I can tell, this theory, like most theories of consciousness, has fallen out of favor as more materialist views take hold. But it seems like that's only because we abandoned studying a more colloquial definition of consciousness (consciousness = subjective experience) in favor of one that we can observe (consciousness = integrated information theory). It seems to me that these arent mutually exclusive, i.e. we have a physical reality that lends itself to the emergent behavior of language, and language gives us a rich inner life of experience? Or is what Im saying nonsensical, or already how people look at things?

<comment><USER10> A lot of the criticisms of the Jaynes hypothesis tend to surround the word "consciousness," which Jaynes defined very precisely for the sake of his argument (internal mind space, analog I, and something else, been a while since I read origin of consciousness).

Either way I'd heavily recommend Origin of Consciousness, it's an endlessly entertaining piece of work.

</comment></comment><comment><USER11> Though it originates from oral traditions, the Iliad is literature. It is a work of wonder and triumph. Does this story appear to some people as just a list of enumerated events and nothing else?

If the Iliad is not the product of a whole mind then whatever created it is its equal in every regard.

<comment><AUTHOR> I agree, but in terms of the theory, Jaynes spends some time at the start of his book explaining what he defines as consciousness, as it is only with that definition that the rest of the book makes sense.

</comment></comment><comment><USER12> Bicameralism seemed a lot sillier to me before I found out I had aphantasia (lack of a mind's eye), and most people see imaginary images while awake. Hearing the voices of imaginary gods doesn't seem all the different from seeing false images.

<comment><USER11> I don't see false images when I use my mind's eye. My actual sight is not impacted by using my imagination to picture something in my head. There's nothing floating in midair or covering my vision. It's like recalling a memory. Can you not recall a memory of a past event?

<comment><USER12> I can recall memories easily, but I don't see pictures of them.

</comment></comment></comment><comment><USER13> First thought that came to mind was Westworld. That's where I've first stumbled on the hypothesis.

</comment><comment><USER14> How does this compare in terms of Muscle Memory [https://en.wikipedia.org/wiki/Muscle_memory](https://en.wikipedia.org/wiki/Muscle_memory) and instinct reactions, things we do from inputs without thinking about at the time of doing. People tend to react if you shout "Timber" near tree's, and rightly so. They react first and think after they have already started reacting.

Is Bicameralism just another way of trying to define primal instinct and how that gave way to intelligent thinking as the main driver in the human evolution I wonder.

</comment><comment><USER15> wow seriously..

So ancient hebrews were just writing stories about their hallucinations for no reason at all other than entertainment? Because some fragment of the hebrew canon doesn't contain language concerning introspection means that introspection doesn't exist? What do blockbuster movies then say about southern californians living in the proximity of hollywood ca 2019??

Ditto for greek mythology and all of the other pseudoscientific grasps that are made here..

If one wanted to make the argument that pre homo sapiens had this mentality, as purely a theory of cognitive development, fine, but holding on to this until the freaking bronze age and using random cultural tidbits out of context and ignoring the vast philosophical/cultural/spiritual/psychological teaching precisely related to managing ones own conciousness that these tidbits were bound up in seems more than a little bit far fetched..

</comment><comment><USER16> > The views expressed in The Origin of Consciousness in the Breakdown of the > Bicameral Mind employ a radical neuroscientific hypothesis that was based on > research novel at the time, and which is not now considered to be > biologically probable</comment>


Newly Declassified Documents: NATO Wouldn't Move Past East German Border - how-about-this http://nationalinterest.org/blog/the-buzz/newly-declassified-documents-gorbachev-told-nato-wouldnt-23629 <comment><AUTHOR> This seems like much ado about nothing. Yes, in joining these countries to NATO the west violated the letter of this agreement but under the Yelsen administration this probably was not percieved as hostile and no one forsaw the retrograde in the relationship between Russia and NATO at that time.

I believe in fact that at the beginning of Vladimir Putin's first term there was still talk of Russia joining NATO.

So, to treat this as some nefarious western ploy is basically to ignore the thawing in relations that occurred in the nineties, the trust that was growing at that time and the hope we all began to take for granted.

<comment><USER2> > no one forsaw the retrograde in the relationship

That's plainly not true. George Kennan did.

 _" I think it is the beginning of a new cold war," said Mr. Kennan from his Princeton home. "I think the Russians will gradually react quite adversely and it will affect their policies. I think it is a tragic mistake. There was no reason for this whatsoever. No one was threatening anybody else. This expansion would make the Founding Fathers of this country turn over in their graves. We have signed up to protect a whole series of countries, even though we have neither the resources nor the intention to do so in any serious way. [NATO expansion] was simply a light-hearted action by a Senate that has no real interest in foreign affairs."_

 _" What bothers me is how superficial and ill informed the whole Senate debate was," added Mr. Kennan, who was present at the creation of NATO and whose anonymous 1947 article in the journal Foreign Affairs, signed "X," defined America's cold-war containment policy for 40 years. "I was particularly bothered by the references to Russia as a country dying to attack Western Europe. Don't people understand? Our differences in the cold war were with the Soviet Communist regime. And now we are turning our backs on the very people who mounted the greatest bloodless revolution in history to remove that Soviet regime._

<comment><USER3> First of all, removing Soviet regime was not bloodless, that's a bullshit. Second - Soviet communist regime did not evaporate, these people were still ruling Russia and still are.

<comment><USER2> > removing Soviet regime was not bloodless, that's a bullshit

Can you elaborate?

> Soviet communist regime did not evaporate, these people were still ruling > Russia and still are

That's because everybody who was more pro-West got negative reinforcement of every their action and got selected out of politician population.

Basically, each time Russia tried to play friendly, something was gladly taken from it with no compensation.

</comment></comment></comment></comment><comment><USER4> You know that thing Russia does where it's the successor state to the Soviet Union when it's convenient for them, and an entirely different entity when it's not? Yeah, that door swings both ways.

Assurances made to the Soviet Union expired with the Soviet Union. And--big surprise here--some former Soviet republics don't wish to be dominated by Russia again. Given the choice, they would prefer to be dominated by the US, the UK, France, and Germany. They might not make the trains run on time, or keep everyone employed, but they do keep the toilet paper on the shelves.

</comment><comment><USER5> It would have been much better to not extend Nato, but the new states form their own defence network and then cooperate with Nato with a bilateral agreement.

But the UK and the US pushed and the states for obvious reasons feared Russia.

<comment><USER6> I, as ex-soviet sphere of influence country citizen, love NATO and consider it only way to fight Russian revisionist policies.

<comment><USER7> This so much. Greetings from Poland. Russia's cries about promises and "zones of influence" are basically cries about being unable to send tanks on a whim to a country which doesn't want to be a Russian colony.

<comment><USER8> Instead we let the US do as they please on our soil, and politely ask for visas promised to us 4 cadencies ago. All it takes is a radically anti- interventionist US president and we're left to fend for ourselves against the angry Russians with our outdated F-16s. Germany has better ties with Russia than us.

</comment></comment></comment></comment><comment><USER9> > assured Gorbachev on February 10, 1990: "We believe that NATO should not > expand the sphere of its activity." (See Document 9) After this meeting, > Kohl could hardly contain his excitement at Gorbachev's agreement in > principle for German unification and, as part of the Helsinki formula that > states choose their own alliances, so Germany could choose NATO.

So, if unified Germany could choose NATO - that will mean that NATO is expanding.

So, basically TLDR - some vague promises to Soviet Union, some vague promises from Soviet Union.

Of course current Russia will twist history the way they want.

</comment><comment><USER10> On one side, this is irrelevant: international relations are the wildest arena, where even written contracts can be casually swept aside, so a bunch of "reassurances" will never be worth anything.

On the other, every action has a reaction. Many in the '90s predicted that abusing Russian weakness was risky: it was akin to what France and Britain did to Germany at Versailles, which was a critical contribution to the rise of Nazism. Surprise surprise, we now have a hyper-nationalistic leader in power whose entire platform is "getting Russia respected again".

What is really shocking, imho, is that a lot of the players who were around back then are still on the conference circuit, write editorials and teach at universities. Somebody actually listen to people who compromised the best chance we've had at global peace for a hundred years.

I wish somebody started something like theyscrewedup.com, a website where people in power get reminded of when and where they got it so wrong that they should just shut up already.

<comment><USER11> +1 for theyscrewedup.com.

Guess who is first on my list. :D

</comment></comment><comment><USER12> Maybe they meant the 1918-1945 East German Border (i.e. Königsberg = today's Russian Kaliningrad and Breslau = Polish Wroclaw)? /s

Edit: AFAIK there is no de iure annexation of those territories

<comment><USER13> Yeah yeah and Germany is a GmbH...

<comment><USER14> Sadly, I know people that believe this crap, one of those Reichsbürger.

<comment><USER15> But there is a Bundesrepublik Deutschland GmbH ;) (see [https://de.wikipedia.org/wiki/Bundesrepublik_Deutschland_%E2...](https://de.wikipedia.org/wiki/Bundesrepublik_Deutschland_%E2%80%93_Finanzagentur_GmbH))

<comment><USER14> Yeah but it only exists since 1990.

Then again, I might be applying to much logic.

<comment><USER15> it exists since 2000 and it's a fully owned company of the government. I was being sarcastic and you're applying too much logic. Nothing about the Reichsbürger movement can be described with what we'd consider logic.

<comment><USER16> Another thing Reichsburgers and love have in common!

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> We are the federation, we come in peace. We just want to trade.

</comment><comment><USER18> Well that's not a first in "misinterpretation". Nuclear disarmament of Ukraine after the collapse of the Iron Curtain was accompanied by a guarantee of Ukrainian borders from US, UK and Russia. [1] But what the fine print didn't say is that the guarantee does not apply to little green men, and that co- signers don't make guarantees against each other. But on paper it sounds great!

1\. [https://en.wikipedia.org/wiki/Nuclear_weapons_and_Ukraine#Bu...](https://en.wikipedia.org/wiki/Nuclear_weapons_and_Ukraine#Budapest_Memorandum)

<comment><USER2> You have a point but tragically misrepresent the order of events:

First NATO expanded, 15 years later, little green men.

You can't blame former on latter.

<comment><USER9> How NATO expansion is related to a Russia violating their agreement with Ukraine?

<comment><USER18> Think!

</comment></comment></comment></comment><comment><USER19> Seeing this coming out now means in several years Poland will be "liberated from corrupt government" by Russia, and like every time before, our "friends" will stand aside.

<comment><USER15> Watching from the other side of the border (and married to a polish wife), I must say that the polish government is currently working hard on turning friends into "friends".

<comment><USER20> I don't agree. Polish Government is under attack by the western propaganda because it finally wants to remove the post-colonialism which started after Communism collapsed. How would you explain that food prices are almost same in Tesco or Lidl in Germany and in Poland but a Polish cashier earns £400 a month and a German one £1200?

<comment><USER15> Ask the union that negotiates the wages on behalf of polish cashier? It's not like the wages in Germany magically started rising or Lidl is well known for philanthropy in Germany. The unions went on strike for the wages and still do. It's money hard fought for.

In any case, I don't think this is something you can blame on "the EU", as many people do. Many many Poles do use the benefits of the EU (just as others do, and rightfully so), either by having infrastructure built (look at the whole transit road from Warsaw down to Bialystock, the A1, ... tons of EU funds went into that) or by using the EU rules to work abroad with little to no friction (just have a short peek at the number plates that travel along the A1 now for christmas, you'll see lots and lots from all EU countries). It's certainly not all good in the EU, but what the polish government currently does - blaming all problems on the evil EU while claiming all benefits for the great polish government - is certainly a recipe to alienate friends and supporters.

<comment><USER20> If you shut down whole industries so unemployment rate is 25% people are scared of organizing strikes.

Then suddenly foreign capital comes, re-opens shut down companies and magic happens - it wasn't worth to shut it down, Polish people can just work as hard as foreign, but they are just scared of striking.

</comment></comment></comment></comment></comment><comment><USER13> I hope someone from the admin team is taking a close look at this comment section here. I would really love to see some background.

<comment><USER21> Read page 2 of the article itself and look up the author. I think the article is credible.

More interestingly: so what? (not a flip, but serious question -- there is a what). The article points out that 1> It was long claimed by some that these assurances were given. 2> Turns out that they were in fact given. 3> Then some years later they were abrogated.

To some (including me), this is _perhaps_ unfortunate at worst: People make all sorts of statements, sometimes earnestly and sometimes in error. But without formal followup they are just comments. (I happen to think philosophically that expanding NATO was a good idea but felt at the time and now that it was a mistake on practical grounds). So from my perspective this is a "big shrug" of an issue.

But to others, particularly some former Warsaw Pact nationals, this is "yet another example of western duplicity". Since nothing was enshrined by treaty, there is no legalism to stand on, but not every society obsesses with legalisms. Just because I disagree with them doesn't mean I should't appreciate their attitude.

And the article even goes out of its way to point out that the Soviet Union had the absolute legal right to veto any unification -- which was a result of the SoF agreement and 1948 peace treaties ending WWII in Europe. In retrospect it was a mistake for the USSR not to get this representation "in writing"

(BTW similar agreements are not yet in place in Japan BTW, and are unlikely to ever be)

<comment><USER13> I don't mean the article. I don't see anything wrong there. However what happened in this comment section within minutes/few hours was very interesting. I haven't seen anything like that since I'm on this board.

<comment><USER21> Then I didn't understand what you meant by "background" and perhaps the admins won't either. Could you clarify?

<comment><USER13> New accounts, strange traffic, weird vote behavior, comparing similar thread behavior, etc.</comment></comment></comment></comment></comment>


Ask HN: % of time idle of a router wifi? - <AUTHOR>

Leaving aside the fact that it depends on factors such as the network traffic or the quantity of clients, how much time is the router wifi just.. you know, waiting? <comment><USER2> Why?

<comment><AUTHOR> Curiosity</comment></comment>


Deploying PawJS Application to Heroku – Overly Simplified - <AUTHOR> https://www.reactpwa.com/docs/en/deploying-to-heroku.html <comment><AUTHOR> Well it would be simple to deploy to aws and gce as well, let me put a guide for the same.</comment>


What happened to Launchday? (website builder) - <AUTHOR> I remember signing up for the beta of Launchday (http://www.launchday.io/), which actually looked like a promising, fast website builder.
Getting tired of how time consuming all the non-Squarespace (puke) sites are to build, looking for something I can easily build then customize.
Anyone know what happened to Launchday? <comment><USER2> [http://www.launchday.io](http://www.launchday.io) works fine for me right now.</comment>


ZeroTier 2.0 Status - <AUTHOR> https://www.zerotier.com/zerotier-2-0-status/ <comment><USER3> A lot of good stuff! I'm glad they're finally going fully decentralized. ZeroTier is a really underappreciated piece of software, especially considering that it's open source.

On the other hand, I am one of the apparently few people who actually have set up ZeroTier on "really tiny routers"... at least, routers with 128MB of RAM, which I guess falls under their definition of tiny since they would have a hard time tolerating a "20-30mb" increase in RAM usage. Luckily for me, I'm no longer using those routers, but I'd like to be able to set them back up in the future if I need them. So I hope ZeroTier does get around to making a "super- minimal reduced feature set C++-only client"...

<comment><USER3> Too late to edit my post, but:

Apparently ZeroTier is no longer under an open source license, as of a month ago. Another comment has the details. That's a real shame… I think I will stop using it. :(

</comment></comment><comment><USER4> Note that ZeroTier recently switched to the Business Source License 1.1[1] that adds some restrictions. For example you are not allowed to re-sell ZeroTier as a service, and it restricts Government uses. It seems like a good thing, but also is good to know.

[1]: [https://github.com/zerotier/ZeroTierOne/blob/master/LICENSE....](https://github.com/zerotier/ZeroTierOne/blob/master/LICENSE.txt)

<comment><USER5> Yipes, AGPL would have been preferable. Oh well, guess I'll wait until 2023 to use it.

<comment><USER6> I'm not familiar with it, what's bad about the license assuming you are a consumer and not a business?

<comment><USER5> It's not free software, which means users are not free to use it as they wish.

[https://www.gnu.org/philosophy/free- sw.en.html](https://www.gnu.org/philosophy/free-sw.en.html)

</comment></comment></comment></comment><comment><USER7> I am very excited about this update. ZeroTier is a great project that, at least as I use it, would be best described as "Hamachi for sysadmins". Just one command, zerotier-cli join <id>, connects your machine to a layer 2 VPN with automagical mesh routing and NAT punching. Add your laptop and all your random cloud servers, home machines, raspberry pis, whatever – now you can connect to any of them as long as there is some path in between.

The only real issue I had is that it wouldn't work unless every machine had access to the root servers. That seems like it's no longer the case in 2.0, which is great news.

</comment><comment><USER8> ZeroTier is fantastic software. I'm often surprised I don't hear about it more. Its great to hear they are embracing Go; that might make it more accessible for me to hack on. SDN has come a long way...

<comment><USER9> We are embracing Go for the higher level service controls but the core is staying C++ for now. Still can't beat C/C++ when you want to sling packets very very fast.

(ZeroTier founder and main author here)

<comment><USER8> Thanks for what you do. I've enjoyed using ZeroTier for my personal LAN to allow my homelab to serve small services (Plex, Minecraft server, dev dbs etc) as well as planning on rolling it out to my small team as a VPN alternative. The traditional VPN was expensive, awful slow, and it's IP was frequently blocked on various sites, making some work impossible to complete without disabling the VPN. The network ZeroTier is allowing me to design is remarkably specific to our needs. As a cloud-only company traditional firewalls don't really fit, but virtual networks give us that same level of control. The open source, self host-able code you provide is very confidence-inspiring for a security product. I've always been curious as to how much it costs to run your hosted free tier because the limits are quite generous. On a personal note, ZeroTier allowed me to work from my LAN remotely which gave me the ability to be with my father in person during the last few weeks of his life without missing work and getting in a financial pickle. So... thanks!

</comment></comment></comment><comment> ryan-allen I love this service, I went to go set up a VPN but instead a friend recommended me this.

I use it to access my computers and NAS from different locations. At home, the NAS is a single hop away so it doesn't go via the internet.

I was able to ditch Chrome Remote Desktop as a result, and with my usage, it's all free. I'd pay for it, though!

</comment><comment><USER10> _> The second downside may be a slight loss of ability to support very old targets. The most impactful of these will be 32-bit Windows since we are not sure if CGo (Go's system that allows us to link to our C bits) will work properly on 32-bit Windows systems._

It should work fine - at least at $DAYJOB I ship a GOOS=windows GOARCH=386 CGO_ENABLED=1 binary, it passes all the test cases + no user complaints.

<comment><USER11> It's not that easy when you use C dependencies.

<comment><USER10> We have several C dependencies, mostly in two methods:

\- Cygwin helps a lot by providing a GNU make that works with CC=mingw-w64 (i.e. no cygwin1.dll dependency) and we can simply link these extra .o by setting `-extldflags "-lxxxx"` on `go build` invocation; and/or

\- Put .c files in a Go package and build with CGO as-is (e.g. github.com/datadog/zstd package and others). More convenient but some limitations on CFLAGS for security reasons post-1.10.

All works fine and was not particularly complex to set up. GC changes have caused us to need more explicit `runtime.KeepAlive` calls after CGO interop however.

</comment></comment></comment><comment><USER12> I wish they would offer support for local DNS or let me run my own DNS server. Having to remember so many IPs is inconvenient and regressive.

<comment><USER13> > Having to remember so many IPs is inconvenient and regressive.

mDNS works fine on zerotier for me at least.

<comment><USER14> I can confirm I have an android TV with sideloaded zerotier (would be great with official Android TV support, BTW! Ed: Android TV has a separate app store - apps need to declare themselves compatible), a few Linux boxes - <USER2> mDNS/bonjour works fine.

</comment></comment></comment><comment><USER15> Tangential, but the pure black background and thin white text creates rendering issues in Firefox in Ubuntu and make it a pain to read. Vertical lines in "will" glows in lavender and "m" glows in blue. [https://ibb.co/VYDMMhs](https://ibb.co/VYDMMhs)

<comment><USER9> Thanks, might adjust the fonts then. We (ZeroTier) all have high contrast big monitors and all the people who mess with the web generally use Macs that render the text quite nicely.

<comment><USER15> Now vertical lines turned brown. Probably the pure black background, which is frowned upon anyway.

</comment></comment></comment><comment><USER16> I seem to remember that it had a kind of limitation at 100 devices, but maybe it has changed?

<comment><USER9> That's for our SaaS hosting, and that pricing is going to change soon anyway. You can also host your own network controllers. There are no intrinsic limits.

</comment></comment><comment><USER17> The one liner on website does give idea of what it's supposed to do but how? Do I host my own instance at home or do I have to have a VM in cloud? Is it dependent on ZeroTier or I can use it without any dependency? Thanks in advance.

</comment><comment><USER18> >The simple fact is that Go is a much more productive language than C++.

Fact? No. Opinion? Yes

</comment><comment><USER19> Has anyone compared this to Wireguard?

<comment><AUTHOR> It's a screwdriver vs toolbox situation. WG is a great simple screwdriver which provides encrypted tunnel between endpoints.

ZeroTier gives you fully configurable SDN with intelligent local/public routing, online interface, full nat workaround, custom addressing, global register requiring only a token to authenticate a node, and many other things.

<comment><USER20> I wished on more than 1 occasion that I could just use one of my ZeroTier nodes in other locations as an exit node and tunnel traffic through it though.

I think that might already be possible but it'd be nice if the configuration was abstracted away behind some simple interface.

That'd allow it to replace Wireguard and Mullvad for me as I mostly use it as a means to bypass georestrictions.

<comment><AUTHOR> Like this? [https://zerotier.atlassian.net/wiki/spaces/SD/pages/7110693/...](https://zerotier.atlassian.net/wiki/spaces/SD/pages/7110693/Overriding+Default+Route+Full+Tunnel+Mode)

</comment></comment></comment></comment><comment><USER21> What is this thing even for? I cannot make heads or tails of the description on the website.

<comment><USER22> It's a "virtual lan" project like hamachi or (some configurations of) openvpn.

Sometimes you want two computers to be able to talk to one another, even if they're behind a NAT or there's otherwise infrastructure between them that makes this difficult.

Zerotier makes that easier by

* Checking to see if the other device is directly reachable, if you're both already on the same LAN.

* Employing NAT hole punching to try to establish a path anyway

* Finally proxying the connection over a server reachable by both

In my experience it's the easiest way to make sure all my computers are reachable, even if one of those computers is a phone and another one is behind a NAT.

</comment></comment><comment><USER23> Ugh, nooooooo, not Go.

I'll stay on 1.x, thank you very much. I hope there will be a well maintained fork of 1.x.

<comment><USER24> What's wrong with Go?

<comment><USER23> Weirdest toolchain in the world, at least among popular ones. Custom calling convention, custom (AWFUL) assembler, insistence on using syscalls directly on systems where the libc is the only officially public API (FreeBSD), bad portability as a result (I tried to add FreeBSD/aarch64, it was an awful experience, thankfully others have continued the work). Don't tell me about gccgo, it mostly copies the standard library from the main implementation, so it also uses syscalls directly.

Just look at [https://github.com/minio/asm2plan9s](https://github.com/minio/asm2plan9s) / [https://github.com/minio/c2goasm](https://github.com/minio/c2goasm) — carefully read the readme and understand what this hack does. If the existence of this hack does not make you extremely angry at Go, I don't know what will.

Oh and I don't like the language itself either. The anti-intellectual attitude of the designers sucks. "Screw anything discovered by PL research in the last 30 years, we just want everything like in the good old days with C but with GC and concurrency" is just silly. The "developers are too stupid to use smart features like generics" attitude is quite offensive. (I guess they are responding to the overwhelming demand for generics now, but it's not like they had a big change of heart, it's just caving to external pressure, not personally embracing the concepts)

<comment><USER9> > The anti-intellectual attitude of the designers sucks. "Screw anything > discovered by PL research in the last 30 years, we just want everything like > in the good old days with C but with GC and concurrency" is just silly. The > "developers are too stupid to use smart features like generics" attitude is > quite offensive.

It's not anti-intellectual. It's just reasoning from a different set of premises.

Go is remarkably productive. I've written extremely complex software in it and found that I rarely miss that stuff. I do agree that it needs some limited/minimal generics support for data structures and algorithms, but that's about all I would add.

I think it shows that a lot of the stuff that's been explored in the last 30 years in languages just isn't necessary. Go is not a language for showing off how smart you are with esoteric language constructs. It's a language for getting things done with minimal cognitive load across the problem domain.

[http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer....](http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html)

Go is for people who have made it to at least apprentice hacker in that progression and realized that complexity is evil. Complexity should only be added when one is dragged kicking and screaming into it by the inherent complexity of the problem domain, and even then only after exploring ways of avoiding it.

I applaud Go's designers for doing that at the language level. They're being dragged into generics after exploring all possible ways of avoiding generics, which is the right approach. They also bailed on an idea to add unnecessary syntactic sugar to error handling in Go because it isn't necessary. It saves a small amount of typing in exchange for increased cognitive load, and cognitive load is more expensive than keystrokes.

<comment><USER23> I'd say `if err != nil {}` all the time is an awful lot of cognitive load. Heck, just `nil` turns everything into a minefield.

Functional programming constructs rarely _add_ complexity, they are excellent tools for handling and reducing it.

<comment><USER9> > is an awful lot of cognitive load.

I disagree. It's a lot of text, but cognitively it's trivial to understand.

A more terse language construct that moves logic around requires more thought to comprehend even if it takes up less space on the screen.

Computers are fast. Screens are big. Our brains are overwhelmed and limited.</comment></comment></comment></comment></comment></comment>


The 640 K Barrier - <AUTHOR> http://www.filfre.net/2017/04/the-640-k-barrier/ <comment><USER4> This article is bringing back memories. Not just of fiddling with CONFIG.SYS and AUTOEXEC.BAT, but fiddling with the sound card too, as was mentioned in passing. As mentioned in the article, I did indeed feel a sense of triumph when I finally got Wing Commander: Privateer to run.

As EMS was a kludge that sucked up high memory for its mappings, I eventually had a fancy CONFIG.SYS with different menu options for different memory setups, depending on which game I wanted to play.

Good times.

<comment><USER5> Couldn't agree more! I was like 10 years old in the 90's ( _before_ Windows 95 on 1995) when all good games run on DOS. I had became an expert on how to edit config.sys and autoexec.bat to enable EMS or XMS or save a few KB off the 640 kb limit - some games needed more than 590 kb from base memory free even though they were also using extended memory!

And of course you needed to know exactly your sound card configuration (IRQ number and COM port) and your video driver capabilities and memory size (I started with a hercules and moved over to a trident before getting a 3dfx voodoo).

Yes, running a game then was much more difficult than double clicking an icon but it was worth it. The games of that era were great and you could aquire skills (persistance, attention to detail, thinking on finding solutions) useful for the rest of your life - if you were a kid at least!

<comment><USER6> Sound cards had to have IRQ #, IO port base address, and often a DMA channel.

The IRQs were handled by the PIC controllers, usually two with the secondary piggybacking on the main controller's IRQ #2. This was how the hardware could signal to the software that it wanted attention. The sound driver needed to know what interrupt to listen for or it would never reply to the sound card's requests. It was setup this way because these were physical pins! If you look at the ISA slot pinout there are physical traces for IRQ 3-7. 16-bit ISA slots added pins for IRQ 10-14. A bunch of IRQs were permanently assigned from the old IBM PC days which is why turning off COM ports in the BIOS would free up the IRQ for use by other peripherals. I seem to remember having a card at one point that was 8-bit, but had a little extension off the end with a couple of traces for 16-bit slot support only so it could support higher IRQs; The manual told you not to use IRQs > 9 if plugged into an 8-bit slot.

The IO port base address is directly related to the article: It selected where in main memory the device was memory-mapped. Writes to that address would cause the device to latch onto the bus and start receiving data. Anything not in the appropriate range was ignored even though all devices technically received the signal electrically. If the driver had the wrong address it would either write to unmapped memory (not that there was an MMU so the data words just went by on the bus without any listeners). Or worse: the write went to a different device that might ignore what it considered malformed data, but in many cases would do random things, scribble on memory, or just blast the bus and cause a lockup. IO base addresses were pre-assigned to peripherals like COM and LPT ports too but they were not in such high demand compared to IRQ or DMA channels; still in some BIOSes you could change the COM port's base address which would make it show up as COM3 instead of COM1 for example.

The DMA channel was exactly what it sounds like: the system had a limited number of direct channels to the memory controller. Often the protocol for a sound driver was to write a "Read audio from address XYZ, length X" to the IO port. The sound card would use the DMA channel to read the audio from that address. Then it would signal an interrupt when it finished so the driver could submit the next batch of samples.

You usually configured ISA cards by setting jumpers on the card. The available jumper settings were usually much narrower than the hardware supported so conflicts were more common.

PCI still used the physical IRQ system but had a protocol for devices to negotiate available settings with BIOS on startup.

PCI express uses a higher-level protocol abstraction. An interrupt is just a special message on the bus and doesn't have any dedicated pins.

<comment><USER7> Some later ISA cards also supported "negotiation", iirc. It was marketed as plug and play, but often referred to as plug and pray (because sometimes the result would be less than useful). Also made DOS drivers downright massive!

<comment><USER4> I remember those 'Plug and Play' ISA cards. The PnP bit never worked, I eventually hard set the IRQ, IO port and DMA channel directly to get sound working, and that was that. At least, until the Windows95 install was messed up enough that it was time to reinstall again.

</comment></comment></comment></comment></comment><comment><USER8> If one ever wondered why the original PCs were viewed as toys by professionals in the field, this article is a good explanation as to why. Imagine you go from, say, an IBM 370 mainframe which has had virtual memory, VMs, no-execute flags, and considerably more than 640K back in the _60s_ to...this morass just to use the memory you paid for (and pay you did, back then). Granted, PCs didn't cost a couple of million with a maintenance agreement, but that didn't make them any more useful for running your nightly batch jobs.

<comment><USER7> As i learn of the mainframes of yesterday it feels like all the hoopla of _nix on x86 these days is basically rediscovering all those things mainframes did back then...

<comment><USER9> Hypervisors are all the rage today but that's so 1970s in the mainframe world. Welcome to the party, kids.

<comment><USER7> Indeed. What I find most "puzzling" is the lack of acknowledgement of this in the business. Its like it is a whole new, almost magical, thing that the devs dreamed up.

I wonder if it has to do with how the microcomputer world had to almost bootstrap itself without any input from the mainframe people, because the latter considered the micros little more than toys.

And this continue into the present, as a large segment of the business is self taught. And by now even going to university will not expose you to mainframes, as they have largely been abandoned in favor of clusters.

<comment><USER10> It's at least as much do with the industry's youth fetish; ideas that were common on mainframes are going to seem new and groundbreaking to you if you never work with anyone old enough to have used a mainframe.

The tech industry has no mechanisms for developing institutional memory, so we are constantly reinventing old wheels instead of developing new ones.

<comment><USER7> Good point. It is hard to convince a 30-something to accept the "death sprint", compared to 20-somethings brought up LAN parties and red bull binging.

<comment><USER11> No, 30-somethings had those too, and moutain dew and what-not. The differences is that people in their 30s might have already spent their 20s doing "death springs" and are sick of it.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> The 640K thing precipitated the first program I ever wrote. If you can call it that.

I had a bunch of games I wanted to play in the early/mid 1990s, including Wing Commander. Each one seemed to require it's own config.sys/autoexec.bat, so I wrote a menu type thing to choose the game and do the appropriate setup.

The experience made me think about what else I could do by joining a few commands together. I wish the internet had been available to me then, because I would have made much faster progress if something like stackoverflow had existed.

<comment><USER13> > _because I would have made much faster progress if something like > stackoverflow had existed._

Kids these days have it easy! /s

</comment></comment><comment><USER14> It feels kind of embarrassing to admit that despite years of tweaking this stuff to get games to run as a kid, I never actually bothered to find out what the difference between EMS and XMS was. Or even know the basics of how they both worked. "It's just extra memory, right?".

It's bizarre that the computer magazines I read (and obsessively reread) would not have run an article like this.

<comment><USER15> As I recall: you could only access XMS memory by copying. So you had to _copy_ a memory block from above the 1MB barrier to the lower 1MB addressable space to read, and copy back up again to write.

EMS was pageable. You could had up to four 16 KB pages below 1MB that were fully accessible, but you had to select which address above 1MB each of those four pages had to point to.

So in short, XMS was inefficient, because you had to copy, and EMS was more efficient because you simply decided which part of the extended memory you wanted to map to lower memory.

I think, EMS was emulated in real mode on the 80386 chip by using its virtual 8086 mode. This was not possible on the 80286, so the 80286 could only use XMS in real mode.

I briefly developed using both EMS and XMS, and as I recall, XMS was somehow less painful to get up and running and generally work with, but the performance conscience part of me obviously favored EMS's paging mechanism.

Fortunately, 32-bit memory came along quickly both in the form of Windows and DOS protected mode.

<comment><USER16> EMS was originally for the 286. It wasn't emulated by the CPU like you could on the 386. You bought an add-in board that contained the extra memory and handled memory requests on the bus for the bank switched area and accepted commands to change what areas the banked switched areas pointed to.

When the 386 came out, it was common to have more than 1MB on the motherboard, but the motherboard (typically?) didn't natively emulate the EMS bank switching scheme, probably because at about that time, everyone figured that people were going to stop using DOS and switch to OS/2, and be running 32 bit code that could natively address higher than 1MB.

When that didn't happen right away, Quarterdeck came out with QEMM/386, which used the Virtual 8086 features of the 386 to emulate EMS in software. Microsoft then shipped a not quite as good clone of QEMM as EMM386 with DOS 5.0.

</comment></comment></comment><comment><USER17> I attended a talk by Bill Gates several years back, where he stated that when IBM was developing the PC, he tried to convince them to base it on the MC68000, and that their decision to go with the 8088 set personal computing back a decade. As the article points out, though, there were a ton of 68000 machines that ultimately got left in the dust by the PC, so I wonder how it would have really turned out.

<comment><USER18> Intel turned out way better than Motorola (and everyone else) at increasing transistor density.

<comment><USER19> Well, maybe that was because they had a lot more money to throw at R&D? Not saying either way, but it looks like this was the opportunity that really pushed Intel into the big league. To their credit, they used it wisely and kept making better chips.

<comment><USER9> It's more like Intel had a CEO that understood what it took to win in the CPU business and Motorola ended up with a CEO that printed out his email and banned Macs from the company when they were one of the few licensees making Apple Mac clones and Apple was one of their biggest buyers of CPUs.

</comment></comment></comment></comment><comment><USER20> This article is a bit inaccurate about XMS. XMS works just fine on the 286; see the original spec [1]. This is done purely in real mode on the 286 with the the A20 line [2] which allows addressing a 64kB area above 1024MB, in combination with the the undocumented LOADALL instruction, which allows addressing even beyond that [3].

[1] [http://www.phatcode.net/res/219/files/xms20.txt](http://www.phatcode.net/res/219/files/xms20.txt)

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

[3] [https://retrocomputing.stackexchange.com/questions/1006/what...](https://retrocomputing.stackexchange.com/questions/1006/what- is-the-infamous-instruction-loadall-on-the-80286-and-what-was-it-used- for/1011)

</comment><comment><USER21> The article mentions confusion. That's an understatement. Information was much harder to come by at the time, you had to rely on articles in computer magazines. Also many bugs existed in memory drivers, not to mention interoperability problems, due to programmers not understanding the issues.

This brings back memories, but not particularly good ones.

</comment><comment><USER22> The original mistake was made by the IBM engineers that came up with that memory map. They reserved a few bytes at the beginning and then a bunch of bytes at the end. That really makes no sense. They could have avoided all the pain that followed by putting all the reserved space in a contiguous block at the beginning. Maybe they thought it was easier for application programmers to use smaller address numbers? Or maybe it was due to some hardware shortcut, which wouldn't be surprising considering they had already taken the shortcut of using the 8088 instead of 8086. This kind of story is repeated whenever temporary hacks turn into massive successes, for example Javascript's limitations that still haunt us today. If you dig down into these histories you almost always find that it's not the engineers' fault but shortsighted managers.

<comment><USER23> I thought it was because it's easier to decode a few upper address lines on the bus so each peripheral is cheaper and easier to build. If you put the hardware addresses in the lower address space you'd have to decode the entire address to see if the access is on your card.

I think the real problem was that people didn't want to let go of DOS. OS/2 1.x was a fine OS, especially from 1.2 onward and it ran great on a 286.

<comment><USER24> _" If you put the hardware addresses in the lower address space you'd have to decode the entire address to see if the access is on your card."_

That is incorrect. If your card has a block of 2^n bytes of memory, you need to check the (in this case) 20-n uppercut bits of an address to check whether it is in 'your' address range, whatever block your card is assigned to. Checking whether that is all zeroes isn't easier than checking whether it is, say, 42.

And I don't think people were attached to DOS; they were attached to their (expensive!) programs and those required DOS.

OS/2 tried to support those programs, but wasn't perfect, and even if it,did, it didn't give those programs more memory.

<comment><USER9> The real flaw was not where they put it, but that it was immobile, the whole block was "reserved".

If they made a few tweaks that allowed peripherals to slot into different spots using some kind of negotiation over the ISA bus this could have been avoided, but that was also way too sophisticated for what was a quick prototype.

</comment></comment></comment></comment><comment><USER25> I rememeber that I was very effective tunning the config.sys and autoexec.bat to grab the max conventional ram. If my memory don't fail, I think that I managed to get ~636-634KiB on my first PC (an AMD 386@40 with 4 MiB of RAM).

I usually, launch memmaker, and then fine-tune the config.sys & autoexec.bat . country.sys ? doskey.sys ? ansi.sys ? Remove it! I need moar free conventional ram !

<comment><USER26> That was my first thought—hmmm... memmaker.exe ought to take care of this.

</comment></comment><comment><USER27> I designed a game engine for a few games, implemented it on Windows 3.1, and assisted with its DOS implementation. The code running on this engine built equally conveniently for Windows or for DOS due to the design of the engine. The publisher wanted the games to launch and run decently if "mem/c" indicated 500K. This was what was typically available in a 1Meg machine if it had things like Netware installed. We achieved this in part with commercial source- licensed libraries and in part with Borland's VROOM overlay technology.

</comment><comment><USER28> Microsoft Mouse (software release 9.00) from 1993 was a coveted driver back in it's day. If I remember correctly I think it only took 2K of conventional memory and the rest shunted into upper memory. After discovering that on a BBS I rarely needed an alternative config.sys/autoexec.bat.

</comment><comment><USER29> It should be noted that some level of multitasking was achieved with so-called TSRs (terminate and stay resident programs). My preferred utility of course was Sidekick.

</comment><comment><USER30> For the first decade or so that I was programming, the 640k barrier was as normal as air.

Now I do back-of-envelope calculations that tell me a single data structure is 100MB, and I'm like, "Yeah that's fine."

</comment><comment><USER31> Should have some props in there for Topview, Desqview, and especially QNX...

<comment><USER23> Props from me. I loved Desqview, it worked great. I didn't really use high memory other than for Desqview and SmartDrv.

Once the 386 came around it was so much easier, Watcom C++ was my favorite way to take advantage of my luxurious 16MB I could afford at the time.

<comment><USER31> Compiling helloworld.c with one floppy and no hard drive on the original PC required one disk for each of the following: (1) source code, (2) cpp.exe, (3) cc1.exe, (4) cc2.exe, (5) lib manager (can't remember the name - <USER2> like "marion"?), (5) and the linker -- I think it was 8 floppy swaps total. It blows my mind that my first HD was 5 _MB_ and cost $800. Also missing was the programming side things: LocalAlloc vs. GlobalAlloc, low-mem HWNDs, etc. - <USER3> - don't miss that...

<comment><USER17> I realized yesterday that for years I've been mentally measuring data by how many Amiga 3.5 inch disks it would take to store. Noticed this when I was patting myself on the back for getting the build output of the tool I'm working on down below ~60 disks.

</comment></comment></comment></comment><comment><USER32> A lot of memories pop into my mind with this article including unrelated stuff as the first try of Linux, kernel 1.2.8, and the "how to setup the CDROM reader attached to soundcard ?" question.

To go back to the subject, I remember to have used a "driver" to free up some additional memory, but I can't remember the name and how it worked. May be I found it reading Imphobia ? The name may starts with a R.

There was the unreal mode / flat mode too : [https://en.wikipedia.org/wiki/Unreal_mode](https://en.wikipedia.org/wiki/Unreal_mode)

I've remember to have code a memory allocator for Turbo Pascal. With pure DOS (not Windows), it was easy to use after the setup.

</comment><comment><USER33> Great read.

Are there technical reasons why Microsoft didn't release a Protected Mode version of MS-DOS in the 80s, or was it just a case of trying to push users and developers to OS/2 and Windows?

It seems like such a no-brainer, especially since MS-DOS provided so few services to applications anyway. You have MS-DOS 8 and MS-DOS 16, and you let the user choose which version to boot into, or you automatically kick over to MS-DOS 16 when a Protected Mode app is launched. It seems a lot saner than forcing users to muck around in config.sys.

That people were forced to deal with the memory limitations of the 8088 PC well into the 90s is just bananas.

<comment><USER34> It's not quite that simple. DOS is not like what we think of as an OS today; more like some libraries that sit in RAM at known addresses plus a loader barely smart enough to transfer data from disk to RAM and start execution. All the intelligence is in the application program itself. And those programs were still stuck with 20-bit pointers.

It wasn't just a question of rewriting the OS, it was also a question of rewriting all the application software. Which eventually happened.

<comment><USER7> And why I half-jokingly consider unikernels "DOS in a can".

<comment><USER35> Nothing bars unikernels from running their code in protected memory as the sole non-ring-0 proc.

</comment></comment></comment></comment><comment><USER36> Very interesting article. I hadn't realized that Microsoft strategy of developing their market not by the merits of they product but by lock-in to use business programs (and also games and such) went back so far.

Also it's great to finally learn what "UMB" stands for in "DOS=HIGH,UMB". Never felt right to add that option without knowing its meaning :-).

</comment><comment><USER37> > "640 K ought to be enough for anybody."

Bill Gates never actually said this [1]. There are those who might attribute this to the Mandela Effect.

[1] [https://www.wired.com/1997/01/did-gates-really- say-640k-is-e...](https://www.wired.com/1997/01/did-gates-really-say-640k-is- enough-for-anyone/)

</comment><comment><USER38> Awesome article! Best read in a while. I wish it would continue to the state of things the next years, with DOS4GW, and Windows 95 and 98 still running on top of DOS. The article stops too early :)

</comment><comment><USER23> Shout out to Windows Real Mode, which had a built-in virtual memory manager that swapped out unused memory to disk. All of that required apps to participate, of course, but it could multi-task in the lower 640K.

<comment><USER39> Astonishingly, Real Mode still exists even on 64-bit Intel chips, and is still the default mode. Booting a modern OS involves a whole stack of bootstraps to jump from Real Mode to Protected Mode to Long Mode.

It's duct tape all the way down.

<comment><USER40> Actually, real mode hasn't been the default mode for a long while.

* [https://superuser.com/a/347115/38062](https://superuser.com/a/347115/38062)

* [https://superuser.com/a/695716/38062](https://superuser.com/a/695716/38062)

* [https://superuser.com/a/345333/38062](https://superuser.com/a/345333/38062)

<comment><USER39> I stand corrected, thanks.

</comment></comment></comment></comment><comment><USER41> So much time spent optimizing my system to provide as much "conventional memory" so I could run a performant BBS in 640K, with all the drivers and such. It's hard to imagine now.

</comment><comment><USER42> Intel could have allowed more memory in the real mode, instead of providing that only in protected mode incompatible with the existing software ecosystem.

</comment><comment><USER43> This reminds me of the OS/2 2.0 fiasco, which is so bad it is one of my favorite topics.

</comment><comment><USER44> I'm really surprised that the DOS extenders weren't the first solution to appear…

<comment><AUTHOR> If I understand the article correctly, DOS extenders weren't feasible until the 386, because the 286 couldn't switch out of protected mode and back to real mode except by doing a full reset.

<comment><USER45> There were effective 286 DOS Extenders. Zortech included the Rational Systems 286 DOS Extender with the Zortech C++ compiler.

<comment><USER46> After reading the article, I am really curious how these could work.

<comment><USER27> We're talking protected mode. The segment register would be an index into a table of segments of memory and the segments would be implemented in your RAM, and all of them would be accessible "at once" modulo the fact that there were only a few segment registers. The DOS extender could hack DOS so that you could in some fashion call DOS through "INT 21h" and it would do something (emulation, call through glue code into real mode etc). The call might require a transition into and out of real mode, which would not be cheap. Sometimes the only way to call DOS was to use "low" memory that was directly accessible from real mode, and you'd need to use special routines instead of malloc/free to manage that memory. You'd still have to call DOS through a hack but the memory arguments of the call would not need to be rearranged within the extender.

</comment></comment></comment></comment></comment><comment><USER47> I used to work as a technician getting DOS/Windows 3.X and OS/2 2.X systems working. There was a program I used to identify expansion cards and get the ID number off of them. It could detect memory size as well, but that doesn't work in modern systems anymore.

[https://sourceforge.net/projects/gconf/](https://sourceforge.net/projects/gconf/)

Had a VP with a WANG PC that used Microchannel, he needed Netware, AS/400, and the Wal-Mart client going at the same time and not cut into his 640K of DOS memory.

There was a trick to it. First using card IDs I found the option floppies for his expansion cards from CompUServe (As The Internet/WWW was in infancy and our employer paid for CompUServe to research things) and I re-arranged the expansion card memory to leave a 64K area that was not used that DOS could load drivers into it to free up the main 640K memory. At the time Netware and AS/400 used DOS drivers, while OS/2 had OS/2 drivers that could access the memory beyond it. This was before Windows 95 (It was in beta test at the time).

I had upgraded the VP to MS-DOS 6.22 used loadhigh and memmaker and other things and managed to get all three networks working with most of the 640K area free. No other tech had done things like that before.

I studied programming in college, but this gconf tool I wrote had helped me out a lot. I wrote it in college and then modified it to be named whichnet so that it could read Arcnet or Starnet network cards and use the correct Netware driver for DOS on a boot floppy disk. Either by using the expansion card ID to detect the right card or by reading ROM memory and look for patterns or a signature. It had worked 99% of the time, and in the 1% it had failed and I never learned why, but worked af\ter a reboot or shutdown and power up.

I wrote this HexStrip or HStrip to extract ASCII data out of Word Perfect or other files that got corrupt and could no longer be read. It is also good for scanning EXE and COM files in DOS to see if there is a virus that stores ASCII text when it infects without running the EXE or COM. I used it in Tradewars 2002 with the trader.dat to pull out all of his advice for playing the game in it. [https://sourceforge.net/projects/hstrip/](https://sourceforge.net/projects/hstrip/)

I had bought QEMM which helped as well, until the Windows 9X and Windows NT OS models put them out of business and Symantec bought out Quarterdeck and other companies.

Also, I think B000:0000 to B700:0000 was the monochrome memory that could be used to load things into it as well if you never used it. I used to write DOS memory maps, until DOS came with MSD.exe that could show used and unused memory maps. Intel 8086/8088 had 640K of RAM, and 384K of reserved memory, that some of it can be used by EMS for paging to load things into it to free up the 640K.

<comment><USER25> memmaker (really himen.sys if my memory don't fail me) had an option to use the monochrome memory</comment></comment>


Categorizing Posts on Tumblr - <AUTHOR> https://engineering.tumblr.com/post/148350944656 <comment><USER2> Did they ignore NSFW categories?

<comment><USER3> That, or fold them into stuff like "photography", "art", maybe "writing" for whatever fanfic stuff goes on.

</comment></comment><comment><USER4> What exactly is that "gif art" category? Do they mean...

• actual _art_ in the medium of gif, like this? [http://hexeosis.com/gif01/](http://hexeosis.com/gif01/)

• really just short videos with sound, i.e. "people sharing Vines on Tumblr"?

• subtitled clips from TV shows?

Those would all suggest very different business strategies Tumblr could pursue.

• The first means Tumblr's userbase is really just trying to use it "as if it were" Pinterest (i.e. "aesthetic blogging.") Tumblr could embrace and monetize that, but it would require a pivot that would probably remove (what many would see as) vital features from the site.

• The second means Tumblr's content spread is really just a reflection of the relative popularity of video-sharing services like Vine and Snapchat and Instagram among Tumblr's age-bracket[1]. Hard to monetize; it basically means Tumblr is just used for sharing things created elsewhere.

• The third means a set of Tumblr subscriptions essentially satisfies the same need that watching Entertainment Tonight does: seeing little highlights of everything that's come out recently, maybe with responses. Tumblr—or really, Yahoo—could certainly monetize the heck out of _that_ , but they'd have to have some humility to do it: Tumblr, in this use, isn't an audience to advertise to, but rather a huge set of content _creators_ you can advertise and cross-promote.

[1] [http://www.statista.com/statistics/199242/social-media- and-n...](http://www.statista.com/statistics/199242/social-media-and- networking-sites-used-by-us-teenagers/)

</comment><comment><USER5> So from the charts I see that tumblr is best used for gifs and astrology, maybe even gifs about astrology. This should be followed by hipster fashion and gossips. Social media at its best.</comment>


Landing a Job at 9 Hot Startups - <AUTHOR> http://mashable.com/2011/01/30/startup-jobs/

<comment><USER2> I'm a co-founder at Catch, EN is the Goliath we are battling who gets a heck of a lot of press.

We are looking for hackers to join our team in SOMA. We have a bunch of ex- Metaweb and Googlers hacking on Android, iOS, JS (Google Closure), Python (Pylons), and MongoDB.

We have a crazy amount of users on Android. =)

<https://catch.com/jobs>

</totally shameless plug>

<comment><USER3> fascinating.. your copy got to me - signing up now. I'm a personal analytics junkie - should be fun playing around with your web and iphone apps

<comment><USER2> Thanks! Please send in feedback or shoot me an email at aschobel [at] catch com

</comment></comment></comment><comment><USER4> Hey all, hope this isn't spammy, we were one of the featured companies in this article -- if anyone is looking for more information on Involver, I'd be happy to provide more info.

We are a RoR shop hiring in SF/Austin with over 150,000 customers (including some huge companies). There's more about us at www.involver.com

I was one of the founding employees and will happily answer questions or w/e -- you can post a reply or email firstname.lastname@example.com

</comment><comment><USER5> I'm wondering why there are so few comments on this post. It's hard to land a job at a startup?

<comment><USER6> The hardest part about landing a startup job right now is choosing which one to go with =)

Seriously, there are so many interesting startups popping up lately but, if the uptick in cold calls and emails are an indicator, apparently not so much of the necessary talent.

There are currently a lot of developers on the market in NYC but from the interviewing I have been assisting with, it seems to consist mostly of "lifers" (the 9-5 devs that are happy to just plod away on some big project, adding features or fixing bugs). I do not mean that in a condescending way; there is definite value in their work but it is simply not what a startup needs.

</comment></comment><comment><USER7> That's us, we're hiring! Join our awesome team.</comment>