Ask HN: What if an employer simply never lets you purchase your options? - <AUTHOR> I've been an employee of a number of startups. I've bought options quite a few times.
This last startup I worked for always had excuses to not give us the 409a information. After 1.5 years, for other reasons, I felt it was time to move on.
60 days has gone by, and I've been emailing, but no options have come to exercise. I've only got 30 more days as it  is mentioned in my contract.
Is there anything that can legally be done? <comment><USER2> Ask a simple question, get a simple answer. Get a lawyer immediately and have them file. There are a number of infractions here. How you use those infractions to your best interest in a civil law case will be best decided by a competent lawyer. I would imagine you could get a consultation rather quickly on this one.

Also, it would be in your best interest to keep all documentation and call 2 - 3 laws to get a good feel for what they will do on the case.

</comment><comment><USER3> You have a contract- what's a lawyer say about it?</comment>


Popular LA Arcade Raises $60K to Renovate, Gets Denied by City Council - <AUTHOR> http://kotaku.com/popular-la-arcade-raises-60k-to-renovate-gets-denied-1713927133

<comment> anti-shill arcades just draw lots of juvenile deliquents with their leather jackets and slicked-back ducktails.</comment>


Bret Victor - Inventing on Principle - <AUTHOR> http://www.youtube.com/watch?v=PUv66718DII

<comment><AUTHOR> What inspiring and awe-inspiring talk! I discovered this video thanks to this post on HN <http://news.ycombinator.org/item?id=4171058>

</comment><comment><USER2> Great talk - a lot to be learned in his approach to creation on a digital medium. His unique speaking style is awesome ha

</comment><comment><USER3> Definitely one of my favorite talks.</comment>


Show HN: Dimple – A Hacker News Reader for Android - <AUTHOR>

I updated my hacker news client and released the new version as a beta. Now it display the news items in "Google Now story card" style (There are thumbnails for articles too). Few new features like automatically loading items while scrolling, News article sharing are also implemented in this version.
Screenshot : http://i.imgur.com/aaVmqJz.png
G+ Community Page : https://plus.google.com/communities/118167818139031156233
Blog post : https://kasungamlath.com/2015/07/24/Dimple-Hacker-News-Reader/
Appreciate if you can give it a try. Any feedback is appreciated, thank you! <comment><AUTHOR> Here is a link to the app in google play :[https://play.google.com/store/apps/details?id=com.kasungamla...](https://play.google.com/store/apps/details?id=com.kasungamlath.hackernews) . But you won't have access to the new version unless you are a beta user(member of of above G+ community).</comment>


European Commission not GDPR compliant though it was responsible for the law - <AUTHOR> https://inews.co.uk/news/uk/gdpr-eu-commission-not-compliant/ <comment><USER2> The title is kind of misleading considering that the article clearly states that GDPR doesn't apply to European institutions. (Apparently European institutions are "'separate' from GDPR for 'legal reasons'" and "subject to a new law that 'mirrors' GDPR which will come into effect in the autumn".)

<comment><USER3> Yes, since GDPR only applies for non-regulated areas where no other law is effective. In the EU government there a bunch of other laws effective which overrides GDPR.

</comment></comment><comment><USER4> I am not surprised and It's even worse: important parts of European countries themselves aren't ready as well. In the Netherlands parts of the taxes and even the authority that is going to do the checking.

I've been doing quite a few GDPR projects, even a GDPR website for a Dutch GDPR lawyer that used to be a developer and specializes in GDPR for small/medium American/Canadian SaaS and App companies. A lot of companies doing business in the EU need someone guiding them through the process and a EU Representative as well. The big companies charge you an arm and a leg. If your GDPR guy knows the tech scene and understands code and systems, it can really speed things up!

<comment><USER5> This all GDPR market is all bullshitting. There are no guidances and nobody really knows how to implement it as law is vague. "GDPR guy" is a snake oil salesman.

<comment><USER6> A "GDPR Guy" isn't necessarily snake oil if you had a person or a team that their job was to work with a DPA prior to the GDPR to implement previous data protection regulations.

That relationship is very important as it's essentially a lobby.

However beyond that it's very hard to definitely make any claims and currently also use lawful basis other than consent that are not tied to pre-existing contracts.

Other parts of the law like those which refer to anonymization including pseudo-anonymization, deletion and processing halt are also very tricky to implement currrently in a guaranteed manner.

For example if I pseudo or fully anonymize a piece of information what is the benchmark that i need to ensure that it's complaint?

How resilient does it need to be against cross referencing? Specifically for examples how many additional pieces of information does one need to de- anonymize my information before my process is consider non complaint?

Do I need only to consider information that i collect or process in this benchmark? Or do I need to evaluate my process against any potential information that can be gathered about a data subject by any other party?

</comment></comment></comment><comment><USER7> They were not compliant with the cookies law either. They did not show warnings that other websites show and they used Google Analytics years after cookies law went into effect.

Also, look at europa.eu now. See the cookie law popup? I don't.

</comment><comment><USER8> They were hacked. This doesn't imply they were not complying with the GDPR.

The fact that this leaked addresses of people also doesn't imply anything special. A webshop, for example, also needs to store addresses of people temporarily.

<comment><USER9> Quite a lot more permanent than you would imagine, say a purchase goes wrong and there is a fraud investigation etc. so most countries have laws that require such shops to have the info for at least a year or two.

<comment><USER10> Yes, but you don't store it in plain text using excel files.</comment></comment></comment>


The Inductive Deductive Schism - <AUTHOR> http://flowchainsensei.wordpress.com/2012/07/12/the-inductive-deductive-schism/

<comment><AUTHOR> Interesting perspective that a business person tends to ask 1\. Do we trust them? 2\. Will it suit our business? 3\. Do we understand it? 4\. Will it work?

while technologists tend to proceed from "Will it work?" toward "Do we trust them?"</comment>


California's housing situation is a mess. Proposition 10 isn't going to help - <AUTHOR> http://www.latimes.com/politics/la-pol-sac-skelton-proposition-10-20181008-story.html <comment><USER2> If the state loosens the reins on rent control, watch out!

Right now, single family homes are exempt from rent control. An owner can raise the rent as they see fit (within reason). If SFHs come under rent control I think you'll see a lot of people just not renting their homes or condos out at all.

This happened in Toronto last year. Similar to SF, units built after 1991 were exempt from rent increase limits. Now it's all units.

So if you owned a condo in Toronto and it was worth $600K, it's probably worth a lot less if you're currently renting it out because that tenant has just locked in their rent for the foreseeable future.

<comment><AUTHOR> Then that'd be a good thing? If people are not renting their homes or condos out, they can't just let them sit empty and will have to sell them at some point which increase housing supplies.

<comment><USER2> They certainly can leave them empty. There are ~20,000 vacant units in SF where the owners have determined it's cheaper to keep them empty than rent them out.[1]

They either keep them as second homes or hold as an investment (no tenant means when they sell the price isn't depressed).

If real estate is appreciating 10% per year and you own a $2M home, that's $200K in appreciation each year. Sure, you might get $60K per year if you rent it, but if you have rent control, you'll never be able to sell it at market rates.

[1][https://sf.curbed.com/2017/7/12/15961486/sf-tax-landlord- hom...](https://sf.curbed.com/2017/7/12/15961486/sf-tax-landlord-homes- apartments-vacant)</comment></comment></comment>


Former Microsoft employee is 'fixing' Windows 8 - <AUTHOR> http://www.foxnews.com/scitech/2012/03/14/former-microsoft-employee-is-fixing-windows-8/

<comment><USER2> Looks like he's probably got too many hits, here's the google cache update today. [http://webcache.googleusercontent.com/search?q=cache:6Ja4qtJ...](http://webcache.googleusercontent.com/search?q=cache:6Ja4qtJoUjAJ:www.fixingwindows8.com/+fixing+windows+8&cd=8&hl=en&ct=clnk&gl=ca)

</comment><comment><USER3> This story was covered by Fox News? Really?</comment>


Wahooly, the Klout and Kickstarter hybrid, opens to startups - <AUTHOR> http://gigaom.com/2011/12/19/wahooly/

<comment><USER2> I always wonder about these startups whose entire business model depends on other startups. Isn't that way too limited a market to endure? Do these people even _intend_ to live out this decade?

<comment><USER3> you do know that you're on a Y Combinator site?</comment></comment>


What's your favorite web template company? - <AUTHOR>

I'm presently looking for some template companies to replace the face of our site, I'm just interested in picking up a $50 one or something in that general range. I want a nice clean face before we put up anything, as the domain is already live. Does anyone have a company they really like? I was just browsing through some of the templates on freelancer but only saw a few I might like, but they look like I've seen them everywhere already. <comment><USER2> themeforest.net is pretty good.</comment>


How (and why) FreeDOS keeps DOS alive - <AUTHOR> http://www.computerworld.com.au/article/603343/how-why-freedos-keeps-dos-alive/ <comment><USER2> I just use DOSBOX for running my DOS games and DOS applications. It can emulate different graphics adapters and sound cards. Even the PCJr and Tandy 1000 graphics and sound.

FreeDOS is a good replacement of DOS. I remember there was a FreeGEM which lead to OpenGEM: [http://www.freedos.org/software/?prog=opengem](http://www.freedos.org/software/?prog=opengem)

OpenGem is based on DRI's GEM GUI for DOS.

DRI had DR-DOS and later Open-DOS.</comment>


Rootless containers feature merged into runC - <AUTHOR> https://github.com/opencontainers/runc/pull/774 <comment><USER2> One thing that really excites me about getting this into runC is that now we can work on making other parts of container orchestration and management run as an unprivileged user.

Huge props to the Cloud Foundry team who already have taken rootless containers and have some experimental support for them[1]. It'd be awesome if we could do something similar to Kubernetes so that you could start clusters as an unprivileged user (in my mind the networking is the hardest part and I think the only way right now is to implement pseudo-bridge interfaces in userspace). But I'm pretty excited about the possibilities. :P

[1]: [https://github.com/cloudfoundry/garden-runc- release/blob/dev...](https://github.com/cloudfoundry/garden-runc- release/blob/develop/docs/rootless-containers.md)

<comment><USER3> I'm sure if you ask nicely, Pivotal, IBM, SAP or Google would host a merge party for you. All are present in Sydney.

Disclosure: I work for Pivotal.

<comment><USER2> While it'd be really cool to go to said offices for a merge party, I feel like that might be a bit too self-indulgent. Though meeting some of the Pivotal team in Sydney might be fun. :P

<comment><USER4> Hey, another Sydneysider here (currently based in China), did some early implementations with LXC, eg. [https://github.com/globalcitizen/lxc- gentoo](https://github.com/globalcitizen/lxc-gentoo) (in US) and talked with the IBM guys at that time.

Nitpicks: About ~9min in your talk on a user namespace slide you talk about device creation restrictions implying it is linked to user namespaces but I am pretty sure that is the device cgroup's job and it's possible to bugger that up if you're not careful. Similarly at 19:50 or so I believe the statements about things not working only apply to some container systems, eg. IIRC _mknod_ can be allowed and controlled on a per- _major:minor_ basis via the device cgroup.

Another security area I looked at was docker grsec incompatibilities, eg. [https://github.com/docker/docker/issues/20303](https://github.com/docker/docker/issues/20303) though didn't get closure despite suggesting what IMHO seems a decent fix. Meh.

Re: ~32:50 + crystal balling: My personal impression is that the whole container based infrastructure / development trend will continue to snowball in to larger devops solutions that automatically secure systems in many ways (via cgroup configurations, kernel security toolkit policies such as syscall and device whitelisting, readonly path lockdowns, network traffic and bandwidth restrictions, etc.) over the next few years. Existing tools like _atime_ , _fsnotify_ and network traffic dumps should make this pretty easy. IMHO it should be a natural progression for obtaining low hanging security enhancements currently unused due to configuration complexities. It will be basically enabled through decent workflow (ie. CI/CD + testing), and may result in a "safe CFLAGS"-like set of aggressiveness presets for new services. Thought this out and implemented to some extent while at Kraken (~2011-2015). (Now working on a more hardware/mech eng. related business and am not longer spending time in the area. Down for a drink next trip though, email in profile!)

<comment><USER2> > About ~9min in your talk on a user namespace slide you talk about device > creation restrictions implying it is linked to user namespaces [...]

No, mknod() is also gated by a capable(CAP_MKNOD) check if the node is a character or block device (see vfs_mknod). Which you can't have if you've created an unprivileged namespace. Devices cgroup is an additional restriction but you hit capable(CAP_MKNOD) long before that check.

> Similarly at 19:50 or so I believe the statements about things not working > only apply to some container system

The entire talk is about rootless containers, so I'm specifically talking about the case where you have only mapped a single user and don't have the ability to modify cgroups. I'm well aware how to grant access to devices if you have root -- the whole point of rootless containers is that you don't have root. ;)

> Re: ~32:50 + crystal balling: [...]

Yeah, I wrote that slide about 10 minutes before my talk. My point was that I'm really hoping one day we see containers (or specifically the sandboxing capabilities of containers) be integrated into normal applications and extended to the point where every user uses this stuff. And as you said, the main benefit is that you can then apply a bunch of useful security profiles that knock out the low-hanging fruit.

<comment><USER4> _No, mknod() is also gated by a capable(CAP_MKNOD) check if the node is a character or block device (see vfs_mknod). Which you can 't have if you've created an unprivileged namespace. Devices cgroup is an additional restriction but you hit capable(CAP_MKNOD) long before that check._

 _Namespaces_ (of which there are many, so 'unpriveleged' must be qualified) != _cgroup controllers_ (of which there are similarly many) != _capabilities_ (of which there are also many).

IIRC these are _separate and no use of one implies the other_. Therefore I do not understand your comment and believe it may be in error, as it seemed both in your talk and in this reply that you are implying a link is now implied at the kernel level. I strongly suspect that your impression comes from container userland runtime system specific code (in which my "for some of these comments it depends which container runtime you are using" comment stands), and I strongly doubt it is kernel code, but am always more than willing to be re- educated.

<comment><USER2> > Namespaces (of which there are many, so 'unpriveleged' must be qualified) != > cgroup controllers (of which there are similarly many) != capabilities (of > which there are also may).

You're correct that namespaces != cgroups. But capabilities are actually part of namespaces (well, specifically the user namespace but a lot of permission checks in the kernel depend on other namespaces and having capabilities in pinned namespaces). So while you could say that capabilities != namespaces it's not really accurate since they are quite inter-related. Not to mention that every process is in a set of cgroups and namespaces and has a set of capability sets.

As for the specific example of mknod, here's a link to the relevant kernel source[1]. You're not correct in your assumption.

cgroups and namespaces are separate when you are actually administrating them, and they are wholly separate subsystems. However, at the end of the day any security policy will have to be applied to whatever syscalls they apply to. capable(CAP_MKNOD) is a namespace check, and devcgroup_inode_mknod is a cgroup check.

> I strongly suspect that your impression comes from container userland > runtime system specific code

I read the kernel code for namespaces and cgroups all the time when debugging issues. I'm well aware how containers work from both the userspace abstraction side as well as the kernel side (and have written kernel code for containers too).

> and I strongly doubt it is kernel code, but am always more than willing to > be re-educated.

See the link[1] for the example of mknod. My point was that both cgroups and namespaces gate the requirements for creating new devices. And that makes logical sense because any user can create a new user namespace with full capabilities, but the device cgroup rules aren't changed by doing that (so it would allow for unprivileged users to do all sorts of bad things as a result).

[1]: [https://github.com/torvalds/linux/blob/fe82203b63e598c34d96e...](https://github.com/torvalds/linux/blob/fe82203b63e598c34d96e846dea49679a726fc7a/fs/namei.c#L3660)

<comment><USER4> Yes, _obviously_ mknod is capability checked in the kernel, as there is a capability with that very name. Where else would it occur? I never suggested otherwise.

My point was that in your talk and comments you make some suggestions which I feel are misleading or inaccurate. In some cases this is probably because you are discussing your own implementation. In other cases this is because I believe your use of terminology is incorrect or misleading, eg. capabilities are not 'part of' namespaces, any more than block devices are 'part of' the filesystem. Similarly, the phrase 'unprivileged namespace' comes across as exceptionally obtuse, given that most security checks occur in other kernel subsystems, and a holistic conception is implied by the word 'unpriveleged'. Naming is hard, but kernel terminology should already be consistent.

I can't see us getting anywhere further with this discussion but an honest thanks for taking the time to respond.

<comment><USER2> > Yes, obviously mknod is capability checked in the kernel, as there is a > capability with that very name.

Yes, and it's checked against the root user namespace, not your current one. Which means that it's not as simple as "do I have this capability". It's "do I have this capability _in this user namespace_ ". Which is what I said originally, so I'm not sure what you're debating here.

> My point was that in your talk and comments you make some suggestions which > I feel are misleading or inaccurate. In some cases this is probably because > you are discussing your own implementation.

Can you give some examples? If I'm wrong about something, I'd love to see an example of it so I can correct it in the future. In particular, I'd like to know what parts of my discussion are related to runC's implementation of containers.

> capabilities are not 'part of' namespaces, any more than block devices are > 'part of' the filesystem

Capabilities are effectively 4 bitmasks that are scoped to user namespaces. Yes, they aren't technically part of "struct user_namespace_t" but the way they are used make them quite intricately related. Much more intricately related than block device inodes in a filesystem.

> given that most security checks occur in other kernel subsystems, and a > holistic conception is implied by the word 'unpriveleged'.

But those security checks generally will use either ns_capable (so they're all hooked up to the user namespace scoping logic), basic UID/GID checks (which are also hooked up to user namespace mapping logic) or some other security framework that is effectively an additional ACL (and isn't the purview of namespaces anyway).

The main complaint I would understand from the use of "unprivileged namespace" is that the kernel doesn't actually mark namespaces as being privileged or unprivileged, it just so happens that unprivileged namespaces act slightly differently because of how they are set up. But AFAICS that's not the argument you're making.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> What is the status of TCP/IP networking in rootless runC? How can incoming and outgoing connections be restricted?

<comment><USER2> You can't both use iptables and have access to host network interfaces (as an unprivileged user), if that's what you mean. You can either create a network namespace and manage network interfaces (but not have a bridge to the host) or just deal with what access you're given. In the future my plan is to write a CNI plugin that implements pseudo-bridges in userspace so that you could get both (though I'm not sure if it'll work at the moment).

But if you're an administrator you can restrict it like any other process.

</comment></comment><comment><USER6> related talk cyphar gave at linux.conf.au 2017 on this topic: [https://www.youtube.com/watch?v=r6EcUyamu94](https://www.youtube.com/watch?v=r6EcUyamu94)

</comment><comment><USER7> A semi off-topic note:

As shown in the linked thread, this Hacker News submission was promoted via an image of the submitted link in /newest. This is a modern form of vote manipulation (although in this case perhaps unintentionally) which seems to be the rage nowadays, especially on a certain other social-voting website. (The content of the submission is good/important regardless, but others should keep in mind that this form of voting manipulation isn't clever)

<comment><USER8> I'm not sure I understand how this is vote manipulation? Surely they are just replying to the "somebody should post this to HN" comment by showing that they did? Why does an image get illegitimate votes?

<comment><USER7> Posting an image makes it obvious what to upvote. (as opposed to replying "I posted on Hacker News")

But even then that would technically be vote manipulation because it's drawing attention to an immature submission. (and there is little genuine reason to do so. The only counterexample I can think of is using HN as a comments section)

<comment><USER9> There were 15 participants in the GitHub issue. Hardly enough people to manipulate anything, so obviously that was not the intention. Even though some 300 people are watching the repo as a whole I doubt that many of them would see that particular comment. As the parent to your comment said, a screenshot is a reasonable way to inform the others in the thread that the link has been posted.

I am against vote-manipulation of course but I don't think that this is an instance of it.

<comment><USER10> This thread has 71 points in 3 hours. Having 15 people upvote it all at once could get it onto the front page, where it then keep getting upvoted naturally.

</comment></comment></comment></comment></comment><comment><USER11> This is huge, major props to cyphar and the runC folks. Congrats! The result of 11mo of dev work. Dope AF.

<comment><USER2> <3 The one thing I've really learned from all of this is just how many different things can break if you take away root privileges from a process. I'm kinda excited to see how much of cri-o and kubernetes we can make run as an unprivileged user (especially given how Cloud Foundry has already taken advantage of this).

<comment><USER12> And when we finally bridge the containers seriously with criu for container migrations, wow.

<comment><USER3> I've been nagging anyone who will listen that this ought to be done. (Easy for me: I don't have to do it. I will of course take credit to the fullest extent the law allows.)

</comment></comment></comment></comment><comment><USER13> If a rootless container process runs as the root user and can't be switched, is it considered to be "root" as far as the kernel is concerned? As in, does it have access to root-only kernel features (like the root keychain)?

<comment><USER2> No, the kernel knows what it's "real" UID and GID are. It even knows what unmapped UIDs and GIDs are. I haven't tried to access the root keychain inside a rootless container, but if it does work I would consider that to be a vulnerability in the kernel.

</comment></comment><comment><USER14> Is rootless containers safe now? It is not turned on by default in ArchLinux because of security concerns[1].

[1]: [https://bugs.archlinux.org/task/36969](https://bugs.archlinux.org/task/36969)

</comment><comment><USER15> what is the diffference between runc and rkt? they both implement OCI right?

<comment><USER2> I'd compare runC to LXC as opposed to rkt. It just takes a path and configuration and starts a container, without managing images or networking topologies. rkt is on the same level as cri-o (or containerd) since it also implements image handling as well as other related things.

Also, rkt (by default at least) uses systemd-nspawn to create containers. In runC we have our own implementation called libcontainer.</comment></comment>


Google updated their logo by shifting 1 px - <AUTHOR> http://www.dnaindia.com/scitech/report-were-you-able-to-spot-that-change-in-the-new-google-logo-1991933

<comment><USER2> Previous discussion from a different source: [https://news.ycombinator.com/item?id=7795969](https://news.ycombinator.com/item?id=7795969) (50 points, 5 days ago, 37 comments)

</comment><comment><USER3> We won't stand for this :) [https://www.facebook.com/groups/1482913141943660/](https://www.facebook.com/groups/1482913141943660/)</comment>


Ask HN: Is there any way to find out the recently published NPM packages? - <AUTHOR> <comment><AUTHOR> [https://libraries.io/search?order=desc&platforms=NPM&sort=cr...](https://libraries.io/search?order=desc&platforms=NPM&sort=created_at) Answered on reddit.</comment>


Ask HN: How to make a self-driving car? - <AUTHOR> In the light of the recent thread [1], I started to wonder about the knowledge, manufacturing processes, hardware and especially software involved in creating a self-driving car. Has anybody managed to build a functional prototype on his/her own? I think we need bigger challenges in tech than creating another Uber/FB/Tinder clone.<p>[1] https://news.ycombinator.com/item?id=16600388 <comment><USER2> As ocdtrekkie mentions, the CommaAI is an option that offers a little hand holding in the sense that instructions are available. I actually went through the process of building one and hooking it up to my car and deciphering my cars CAN bus messages. It's pretty interesting and would definitely recommend it.

As for making your own, it depends on how good you want it to be. For example, the CommaAI is simple to do even from scratch but not super cutting edge. On the other hand theres companys out there using additional radars and Lidar which increases the cost and complexity. But in theory you'd just need to mount a machine in the trunk of your car, hook it up to your cars computer (have a car capable of being controlled solely via computer), hook up any additional sensors. Then write the software that can fuse all of the incoming data and use it to send messages to the car.

If this is something you're interested in learning about you can check out Udacity's SDC Nanodegree

</comment><comment><USER3> George Hotz's comma.ai started as something he built in his garage. (From the original video, you could see off-the-shelf stuff like AmazonBasics USB hubs and all.)

Everything's open source, and if you want to build your own self-driving car, probably start there. They're selling more or less all of the parts you need, albeit in a very DIY fashion.

I think the most recent part they've started selling is something to more directly interface with the car's accelerator pedals, for example.

</comment><comment><USER4> I wouldn't let them loose on the road, but it is fairly easy nowadays to build a rudimentary one. See for example [http://www.donkeycar.com/](http://www.donkeycar.com/), [https://makezine.com/projects/build-autonomous-rc-car- raspbe...](https://makezine.com/projects/build-autonomous-rc-car-raspberry- pi/), [https://zhengludwig.wordpress.com/projects/self-driving- rc-c...](https://zhengludwig.wordpress.com/projects/self-driving-rc-car/).

The rest is a matter of scaling up, both in car size (easy) and in software (lots of work)

</comment><comment><USER5> There are a number of tech companies building self driving cars. This isn't the kind of challenge one would take on on their own, as you need hardware, software, automotive, and many other specialties to handle this. Just vehicle dynamics alone are important</comment>


Wanted: News feed without Covid-19 - <AUTHOR> Would somebody please develop news and content content aggregator without any coverage on COVID-19 .<p>Had enough of COVID-19 media and would like read something, anything else. <comment><AUTHOR> [https://chrome.google.com/webstore/detail/kardashian- filter/...](https://chrome.google.com/webstore/detail/kardashian- filter/kbnhlagadnlfihhgjkmcaffjadkadoap?hl=en)

Kardashian filter seem to do the trick. Add options with virus related keywords and voilà. Stress free surfing is back.

</comment><comment><AUTHOR> [https://pasteboard.co/J03OioS.png](https://pasteboard.co/J03OioS.png)</comment>


How Old School C Programmers Process Arguments - <AUTHOR> http://www.usrsb.in/How-Old-School-C-Programmers-Process-Arguments.html <comment><USER4> I have to say, to reasonably experienced C programmers, this code should be pretty clear. If you need that whole paragraph to understand (* ++argv)[0], you might be an awesome programmer, but you're not yet a reasonably experienced C programmer. ;)

I do think this is even more concise than they would have written in maintained code. In particular, I believe the missing {}'s for the 'while' and 'for' loops whouldn't have been left away, but I might be mistaken. Compare, for example, with this gem:

[https://www.cs.princeton.edu/courses/archive/spr09/cos333/be...](https://www.cs.princeton.edu/courses/archive/spr09/cos333/beautiful.html) (submitted as [https://news.ycombinator.com/item?id=5672875](https://news.ycombinator.com/item?id=5672875) some time ago)

There Kernighan talks about a piece of code written by Rob Pike for inclusion in a different book; the code was written to be as small as possible while still including some useful functionality. In particular, Pike made well- considered choices about which functionality to include and which to exclude, but there are also some of those expressions that will not be completely transparent to the beginner C programmer. But the goal was writing _short_ code, and _clarity_ came secondary, but also emerged partly as a result of the first.

<comment><USER5> > If you need that whole paragraph to understand (* ++argv)[0], you might be > an awesome programmer, but you're not yet a reasonably experienced C > programmer. ;)

Lines like that have far too much information density for my old brain, anymore.

Things that went through my poor brain: "Why pre-inc/decrement? Why the +1 on the for? Did he actually get the precedence of the operators correct? Okay, it looks like argc and argv will be mangled if you actually want to do anything else with them. I see comparing to '\0' with no count limit--is there a buffer overrun lurking here?. Does that error handling actually work--that loop can't exit with that condition unless the second clause does something.

And that was like--30 seconds?

I'd assign argc and argv to something else so if I need them later for something they are in their original state. I'd give myself a variable that points to each individual argv on each iteration, and I'd call it something. I'd make the error handling more explicit so if I had to add another case later I wouldn't have to rack my brain about whether the error gets handled. Etc.

Apparently I've become an inflexible, washed-up, old fart because I just don't enjoy writing C code with that kind of puzzle-like quality anymore.

<comment><USER6> i disagree with the sentiment and preferences expressed in your comment. the code on display is at the sweet spot of complexity _given the scope of task at hand_. your preferences might lead to code with lower complexity of any given expression, but there would be a higher number of expressions, higher number of statements, and higher number of names. that would mean _higher_ complexity of the full code. should we ban multiplication on the basis that X times Y is the same as X plus X plus X...?

> Why pre-inc/decrement?

as opposed to what? nothing? clearly, the code needs to advance the iterators before dereferencing.

> Why the +1 on the for?

because it's interested in the option _name_ as opposed to the leading dash: argv[0][0] is '-' (see the while above), the switch is looking at argv[0][1].

> Did he actually get the precedence of the operators correct?

not sure what this is about, the only involved expression has explicit parentheses (out of necessity).

> Okay, it looks like argc and argv will be mangled if you actually want to do > anything else with them.

yes... and? mutating a local int and a local pointer is bad? how would you go about this without mutating an iterator?

> I see comparing to '\0' with no count limit--is there a buffer overrun > lurking here?

nope, it's an array of null-terminated strings.

> Does that error handling actually work--that loop can't exit with that > condition unless the second clause does something.

i do not understand what you're pointing at here.

> I'd assign argc and argv to something else so if I need them later for > something they are in their original state.

consider they're already local names, and YAGNI. do alias them _if you need them later_ , not because you might one day.

> I'd give myself a variable that points to each individual argv on each > iteration, and I'd call it something.

you would give yourself a possible bug and an obligation to keep the two things in sync.

> I'd make the error handling more explicit so if I had to add another case > later I wouldn't have to rack my brain about whether the error gets handled.

what is more explicit than

        printf("Illegal option %c\n", *s);

?

i'd really love to see your preferred version of the snippet from TFA. i posit it'd be two to three times as long, and its total complexity would be similarly increased.

<comment><USER5> > Why pre-inc/decrement?

No, why "pre-" instead of "post-"? Is that a real requirement , or is this an old C++ programmer who knows to write pre-crement in order to avoid creating unnecessary copies?

> Did he actually get the precedence of the operators correct?

It's because I see a "chain" of operators and I have to think about it.

> nope, it's an array of null-terminated strings.

Is it? What happens when I pass 256 '-' characters. Or maybe 32767/32768/65535/65536? Or maybe ...

> Does that error handling actually work--that loop can't exit with that > condition unless the second clause does something.

If I need to add a second unflagged argument, that error condition test also needs to be updated. It's an annoyance.

A lot of this is no big deal in this code.

The problem is that code is habit. You will carry the habits from short code over to long code. So, when you are now parsing 45 flags and 8 arguments, you will write code the same way and it _WILL_ have bugs.

</comment></comment></comment></comment><comment><USER7> So it will admit any combination of -n and -x. In particular, these things won't raise an error:

        find - <USER3>
        find - - <USER3>
        find -xnxn hello
        find -x -n -x hello
        find -xxx -nnn -xn hello

Yes, the code has an impressive logic density, but there's a reason why modern programmers moved away from such style.

<comment><USER8> _In particular, these things won 't raise an error_

They don't necessarily need to be. Repeating the same option can either have no effect (|), invert the option (^), or increase something (as in -vvvvv.) IMHO it's a good thing when there are no error cases --- it basically means the entire input space has a defined effect.

<comment><USER9> Raising an error is an _intentionally defined_ effect.

Doing something under-defined, by accident, that you'll at some point break because you weren't thinking of that specific edge case when e.g. refactoring, for someone else who didn't actually _intend_ to exercise that edge case but never realized they were doing so as they never received an error... well, not my cup of tea.

<comment><USER10> And causing errors for everything will cause your program to bug out in perfectly valid cases.

Defensive versus total programming. Either have their place, but ...

Thing is most programmers vastly overestimate the case for defensive programming. In practice, most programs need to run. So for instance, the control loop for a nuclear reactor is not defensively programmed. It never, ever, ever gets to yield an error. Why ? Because the system is not "fail- safe". If the program ever were to say "this doesn't make sense, I'm quitting (or otherwise doing nothing)", there is nothing guaranteeing the system is in a safe state, and so it may melt down. A bug that fails to notice a critical condition, and ignores it, on the other hand leaves the system under the control of the operator, and nothing (should) go wrong (meaning the second level checks should catch the problem)

The general guideline is defensive programming when starting up, with a force switch to override it (so the system can be (re)started if operators decide that's the best outcome). Once the program is running, total programming should be your go-to solution. When in doubt, do the best you can and continue on to the next request.

Since I've been programming million qps+ systems, I've learned that there's even nothing wrong with almost totally ignoring errors. You'd be surprised how well the following works: before handling a request, note down the time (using the cheap instruction), then every time you leave your method, check the time. If it's over a timeout, increase a counter, log if not logged in the past 10s, and send an empty reply. This makes the developer's job harder, but makes everybody else a lot happier.

<comment><USER9> > And causing errors for everything will cause your program to bug out in > perfectly valid cases.

Erroring out is admittedly not a panacea to every situation, but the user- facing end of a command line interface is pretty low hanging fruit and a pretty obvious place to error out. The nuclear reactor equivalent wouldn't be the low level control loop, it'd be how the display panels react to operator inputs and sensors - the red lights they turn on, the klaxons they sound, the systems they engage to attempt to put the reactor into a safe state when it thinks it's getting ready to melt down.

And even for that low level control loop, you'd better believe they're thinking very very hard about, and once again _intentionally define_ , how they handle any edge cases they can think of, not just throwing caution to the wind and letting the program's behavior fall where it may.

Even for a rocket, sometimes the best answer is "do nothing - and let the range safety systems blow the damn thing up if that wasn't the right answer."

> Since I've been programming million qps+ systems, I've learned that there's > even nothing wrong with almost totally ignoring errors. You'd be surprised > how well the following works: before handling a request, note down the time > (using the cheap instruction), then every time you leave your method, check > the time. If it's over a timeout, increase a counter, log if not logged in > the past 10s, and send an empty reply. This makes the developer's job > harder, but makes everybody else a lot happier.

Totally ignoring errors leaves you with crashy garbage that does _not_ accomplish your goal of high uptime/availability/not corrupting data in C++ - I'd wager you're dealing with safer languages to type that with a straight face! Even there, though, you probably write code to at least _handle_ null references and other edge cases. You might not trigger fatal assertion dialogs, you might not log to some fancy telemetry system, you might not even log at all - but _something_ to handle error conditions.

And if you're writing that code _anyways_ , you might as well write some logs/telemetry as well to make your devs lives easier. You don't have to force it into the face of your end users, you don't have to make the whole thing explode in the face of adversity, but some opt-in dev tools for yourself tends to be nice.

A fun trick from gamedev: "Assertion" macros that force you to include an error handling statement (often a simple "return;"). Devs get to check out if that null pointer passed to your leaderboards is a systemic bug that broke all leaderboards, gamers get to keep their quest progress instead of the entire game crashing because a server being down or giving a malformed response means the game doesn't know how to handle updating a single leaderboard occasionally.

Best of both worlds. Be greedy - you can have happy users _and_ devs.

<comment><USER10> > Totally ignoring errors leaves you with crashy garbage that does not > accomplish your goal of high uptime/availability/not corrupting data in C++ > - I'd wager you're dealing with safer languages to type that with a straight > face! Even there, though, you probably write code to at least handle null > references and other edge cases. You might not trigger fatal assertion > dialogs, you might not log to some fancy telemetry system, you might not > even log at all - but something to handle error conditions.

That is exactly what I mean. Defensive programming is erroring out and refusing to do anything from that point forward (think of it like an uncaught exception with less information). "Total" programming is doing the best you can, given what's available. Generally if I am unable to do something, or look something up, I'll return a partially filled out request, log it (logs are rate-limited VERY early in the logging process), and increase a counter created for that particular case.

(I do use C++ often, but we use variable guards to guard against null pointers, use-after-free, and sharing (unless explicit)).

> A fun trick from gamedev: "Assertion" macros that force you to include an > error handling statement

Link ? I'm interested.

<comment><USER11> > Defensive programming is erroring out and refusing to do anything from that > point forward (think of it like an uncaught exception with less information)

I'm not sure where you got that impression, but it's not the generally accepted definition.

 _Defensive programming_ does not imply crash/abort/exit, it just simply implies a style of programming where you don't trust "things will always be ok". That could involve checking every input for correctness, checking every function output, handling all exceptions, etc. Yes, a defensive method could throw an exception on invalid input, but if the entire program is written defensively, then it should be handled and potentially continued.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Extract this into its own function and you basically have getopt() --- the POSIX version, not the rather more bloaty GNU version that has sometimes- unexpected behaviour (like reordering arguments).

If you like this sort of source code, I'd also recommend looking at the BSD standard utilities --- they have a similar simple and concise style.

Yet there's still one small simplification that can be made: the condition in the inner loop doesn't need "!= '\0'".

If there are many pure-binary options, then putting them in a bitflag is also an easy extension to the present code:

        char binopts[] = "abcdefg";
        char *opt;
        if(opt = strchr(binopts, *s))
         options |= 1 << (optidx - opt);
        else
         // put the switch(*s) here

_Nowadays they just haul in the software weenies with their fancy objects and methods. Lost is the subtle art of manipulating arrays of pointers to strings of characters._

Indeed, compare with the "modern" way of doing it:

[https://github.com/commandlineparser/commandline/tree/master...](https://github.com/commandlineparser/commandline/tree/master/src)

...or something slightly simpler (because it's only one file!):

[https://github.com/mono/mono/blob/master/mcs/class/Mono.Opti...](https://github.com/mono/mono/blob/master/mcs/class/Mono.Options/Mono.Options/Options.cs)

It may seem like an exaggeration, but in my experience working with C# and Java, code like that is the norm --- the core functionality is obscured by being scattered amongst a large amount of "fluff" and it's hard to get the whole picture of how it works because the flow jumps around so much. In contrast, the C code in this article can be understood by just staring at it for a little bit --- the entire functionality is contained within less than a dozen lines.

<comment> Const-me > compare with the "modern" way of doing it

The examples you've linked implement much larger set of functionality.

They de-serialize arguments into strongly typed values (validating arguments), validate against unknown commands/options, print various help messages, support globalization, support arrays in a single argument, and lots more.

Sure it's overkill for a simple app with just a couple of options, but once you have sufficiently complex command line interface, this modern way becomes much simpler than what's possible with C.

Compare with "old school" way of doing it: [https://github.com/gcc- mirror/gcc/blob/master/gcc/opts.c](https://github.com/gcc- mirror/gcc/blob/master/gcc/opts.c) [https://github.com/gcc- mirror/gcc/blob/master/gcc/opts-globa...](https://github.com/gcc- mirror/gcc/blob/master/gcc/opts-global.c) [https://github.com/gcc- mirror/gcc/blob/master/gcc/opts-commo...](https://github.com/gcc- mirror/gcc/blob/master/gcc/opts-common.c)

BTW that thing isn't even localized, i.e. everything's US English-only.

<comment><USER12> What in the world is this inconsistent and bizarre spacing around brackets? I literally thought it was a new syntactical construct in C when my eyes first landed on it!

      cl_options [next_opt_idx].neg_index == opt_idx

      old_decoded_options[i].errors & ~CL_ERR_WRONG_LANG

and the parentheses too... why in the world do they do this?

      set_option (opts, (generated_p ? NULL : opts_set),
    		opt_index, value, arg, kind, loc, dc);

<comment><USER13> Once upon a time, programmers didn't have IDE's, Emacs, or even text editors. I'd been programming for seven or eight years before Bill Joy created vi. Each programmer and each program had its own style.

Often, a program's layout reflected the programmer's inner thoughts as he or she worked through the creation of the code. Expressions were written like a mathematician might write, with spacing and bracketing reflecting some way of thinking about the grouping of the abstractions at hand.

This is just a random routine, written around 1975, from Niklaus Wirth's PL/0 compiler for Pascal, the programming language that he created. The indenting is wild by contemporary standards:

        procedure getch;
        begin if cc = ll then
           begin if eof(input) then
                      begin write(' program incomplete'); goto 99
                      end;
              ll := 0; cc := 0; write(cx: 5,' ');
              while not eoln(input) do
                 begin ll := ll+1; read(ch); write(ch); line[ll]:=ch
                 end;
              writeln; readln; ll := ll + 1; line[ll] := ' ';
           end;
           cc := cc+1; ch := line[cc]
        end {getch};

Early C code too, even in the Unix kernel, was often dense and hard to understand (the kernel was under 10,000 lines back then). See Lions' Commentary [2]. Here's a small function, setfs(), line 7167 of the system 6 Unix kernel in Lion's book. In particular note the lack of indention under the for loop:

        setfs(dev)
        {
           register struct mount *p;
           register char *n1, *n2;

           for(p = &mount[0]; p < &mount[NMOUNT]; p++)
           if(p->m_bufp != NULL && p->m_dev == dev) {
                   p = p->m_bufp->b_addr;
                   n1 = p->s_nfree;
                   n2 = p->s_ninode;
                   if(n1 > 100 || n2 > 100) {
                           prdev("bad count, dev);
                           p->s_nfree = 0;
                           p->s_ninode = 0;
                   }
                   return(p);
           }
           panic("no fs");
        }

It seems obvious now that standard and consistent formatting make programs easier to understand. Why did we old timers do that to ourselves? First, short programs were easier to keypunch or enter via a teletype machine. Second, we had a plenty of time to study our code. Turn around time for a compilation, from submission to printed listing, could take 30 minutes to 12 hours.

[1] [http://pascal.hansotten.com/niklaus- wirth/pl0/](http://pascal.hansotten.com/niklaus-wirth/pl0/)

[2] John Lions, Lion's Commentary on Unix 6th Edition with Source Code. [https://www.amazon.com/Lions-Commentary-Unix- John/dp/1573980...](https://www.amazon.com/Lions-Commentary-Unix- John/dp/1573980137/ref=sr_1_1?ie=UTF8&qid=1517149381&sr=8-1&keywords=lion%27s+commentary)

<comment><USER14> >Often, a program's layout reflected the programmer's inner thoughts

And often it reflects the programmer's inner carelessness and disrespect for other programmers who have to deal with their code.

</comment></comment></comment></comment></comment><comment><USER15> Skimmed through the article and found a small mistake.

      That means that (*argv)[0] is the first character of the program name and (*argv)[1] is the first character of the first argument.

(*argv)[1] is the second character of the program name (in this case), not first character of first argument.

</comment><comment><USER16> "That's how Kernigham and Ritchie did it in 1978. Nowadays they just haul in the software weenies with their fancy objects and methods." No, we use getopts(3C). For decades now. I even use getopts in my shell programs. For old UNIX hands, using getopts in C or in shell programming is certainly nothing new. How, you ask? Simple! Watch this: while getopts hDd: Option do case "$Option" in h) Usage ;;

          D)
            Debug=true
          ;;

          d)
            Destination="$OPTARG"
          ;;
        esac
      done
      shift `expr $OPTIND - 1` # I did not use $((OPTIND - 1)) for a reason!

Bam! Your program will now behave exactly as every other UNIX executable, especially if you do not name it with .sh postfix and make it executable, the user won't be able to tell the difference between it or say, ls(1)! Having said that, the example in the article cements what I've been saying all along: C is more than fine in the programming hands of a thoughtful mind.

</comment><comment><USER17> On the topic of processing command-line arguments and the recent post on obscure things you can do with C: My "magic getopt" ([http://www.daemonology.net/blog/2015-12-06-magic- getopt.html](http://www.daemonology.net/blog/2015-12-06-magic-getopt.html)) does some very evil things to make it possible to write a "normal-looking" C getopt look which accepts both short and long options.

</comment><comment> d--b Mmh, what's so special about this? A C# version is pretty close...

        int i=0;

        while(i < args.Length-1 && args[i][0] == `-`) {

          for (var j=1; j<args[i].Length; j++) {

            switch(args[i][j]) { case `x`: ...

<comment><USER18> The pointer tricks on argv.

</comment></comment><comment> mjl- this is how they did it somewhat later in plan 9, with macro's:

ARGBEGIN{ default: usage(); case 'm': m = ARGF(); break; case 'p': pflag = 1; break; }ARGEND

[https://github.com/9fans/plan9port/blob/master/include/libc....](https://github.com/9fans/plan9port/blob/master/include/libc.h#L919-L940) [https://github.com/9fans/plan9port/blob/master/src/cmd/mkdir...](https://github.com/9fans/plan9port/blob/master/src/cmd/mkdir.c#L57-L71)

<comment><USER19> The Plan 9 solution always felt really logical imo.

<comment> mjl- i agree. too "clever", feels like a needless optimization. (optimizing for fewer keystrokes to type? or obscurity?)

btw, many of the plan 9 commands use slightly different/custom option parsing. probably for historic reasons.

<comment><USER20> No, this isn't clever at all. Its an optimization for when you need to write a lot of little utilities that need to parse arguments. It probably came out of a day of writing tools, and after the fifth time of rewriting that while/for loop someone got pissed and made that macro. I use this macro all the time on both 9front and unix because it makes parsing arguments trivial (and I don't use long options, but that's more because I'm a plan 9/unix extremist than for any technical reasons).

</comment></comment></comment></comment><comment><USER21> "What's so cool about this is its flexibility."

This is something I have never understood.

I am a connoisseur of command line progams. I have used hundreds of them over decades. I write command line programs and scripts every week. It is an obsession. Yet I am embarassed to admit that honestly I have never understood the benefits of flexibility with passing arguments. I never understood the "getopt" movement. I do not use it. All my programs are very simple and straightforward without heaps fo options.

I apologise for being obtuse, but what am I missing?

To anyone who might be offended: I am not criticising flexibility of commandline arguments or its coolness. I just want to understand what are the practical advantages over something more simple and less flexible, like what I prefer. Only if I understand the advantages can I be an advocate for using numerous commandline options and flexibile parsing.

(Theres another post about setenv et al. on the front page right now. For programs that read from environ variables -- which can be a better alternative to using heaps of commandline options IMO -- I just use envdir from daemontools.)

<comment><USER22> > _Yet I am embarassed to admit that honestly I have never understood the > benefits of flexibility with passing arguments._

It's about not having to remember what goes before what, if you can put them like this or that, etc ON TOP of remembering the arguments themselves.

> _All my programs are very simple and straightforward without heaps fo > options._

If your programs are basically ./a.out then perhaps you're not the target audience for getopts?

<comment><USER18> Easy to sort out with an help flag.

<comment><USER22> Easy, but also one more needless impediment to just using the damn thing.

</comment></comment></comment></comment><comment><USER23> One thing an old school C programmer would not do is neglect to put parens around their blocks.

<comment><USER24> On the contrary! We force all our blocks to consist of a single statement so that we can always omit the damn parens.

<comment><USER25> Are you saying you need statements in your loop blocks!? I just added this to a school assignment:

        for (String next = in.readLine();
             next != null && dictionary.add(next);
             next = in.readLine());

...you can sense my contempt for this assignment. I would of course never do this in a real program.

</comment></comment></comment><comment><USER26> I wasn't all that impressed with the code - too 'clever' and concise for me.

I wouldn't be surprised if it let a bunch of unexpected inputs through as another commentor pointed out.

That may have been okay back then but in today's hostile environment and with so many people around that aren't natural programmers who dream of pointers you probably want something a bit more verbose.

I've been programming C since the late 80s so I'm not a new-comer. But I'm not a fan of that code even though I can understand it okay.

The more experience I get and the more people I work with, the simpler I like my code to be. I'll always take simplicity over speed and concision if I can.

</comment><comment><USER27> The getopt() arguments we used to have on USENET before gnu swept the board..

</comment><comment><USER28> Maybe I've forgotten more C than I'd like to admit,

      while (--argc > 0 && (*++argv)[0] == '-')

      ...
      Notice that the decrement always occurs before the '>' is
      evaluated. This would be true even if it were postfix (i.e., argc-- > 0).

but isn't the last statement ("This would be true even if...") in error? IIRC a post-decrement would occur _after_ the '>' is evaluated.

edit: clarity

<comment><USER29> The decrement is the same either way, the value yielded by the decrement expression would however be different. I don't like the wording either.

</comment></comment><comment><USER30> What's clever about this? It's a little obtuse and overly permissive. How do most developers parse arguments? I suspect it would be a for loop with nested if statements - since you can't switch on strings. If you expect a value to follow the flag you increment the counter in your if block and 'continue'.

</comment><comment><USER31> It's nice and smart, but also notice how it needs a whole web page to explain and would happily compile after a lot of invisible single-letter changes that would introduce horrible bugs. There is value in the old ways of writing software, I just wouldn't throw out modern software engineering just yet.

<comment><USER32> Any competent C programmer shouldn't need _any_ explanation of that simple example.

Granted pointers, just like objects in more "modern" languages, take some while for new programmers a while to get their heads around.

<comment><USER33> >Any competent C programmer shouldn't need any explanation of that simple example.

Interesting point, and I agree. I read that code a little earlier today, and (was a bit surprised to see that) I could understand it pretty much right away, even though I have not used C a lot for a while. I did use it a lot earlier though, on both Unix and DOS/Windows, and I do remember poring over that K&R book early in my C career, and working out the meaning of each line of code in almost the whole book. That may be why I could figure out quickly what it meant, now. More cryptic stuff might take a while to figure out, though, but the point I want to make is that the general principle remains the same: you have to understand what each line and even what each token (of the code) in each line is doing, how it works, etc., by reading the books and docs, by trial and error, modifying the code and seeing the modified output, using debugging print statements, isolating smaller chunks of code and running them to see how they work and if your mental model of what is happening matches reality, etc.

</comment></comment></comment><comment><USER34> Wow, the amount of compactness and craftsmanship in these lines of code is amazing.

<comment><USER35> I think there's nothing magical about it at all. It's rather that "modern software architecture" (examples for what I mean linked in another comment here about C# and Java) is a disaster.

<comment><USER36> It might not even be that. I presume that kind of code used to be written with pen and paper, a compilation cycle almost prohibitively expensive.

When you sit down and just design a piece of code for hours as to not waste your compilation cycle, I would guess that you naturally end up being fairly crafty after some time.

<comment><USER32> Nope, you just end up thinking that compactly as you type.

When I learned C it was a given to code efficiently. Pointer manipulation and efficient structure packing was expected, and therefore taught. You'd rule out of an interview anyone who didn't easily grok it.

It's probably no surprise that the fastest GUI editor I've used to date ran on a 7.1MHz machine. Such is "progress"!

<comment><USER37> Just because I'm curious, CygnusEd?

<comment><USER32> Yes indeed. :)

Most impressive, I think, is that it managed to be so fast and include smooth scrolling.

<comment><USER33> Brief was pretty fast too. I only used it briefly (heh), but read in some computer magazines at the time, that it used a lot of code optimizations, one of which was that it used assembly language code, and another being (IIRC) that it used BIOS calls to dynamically change the speed of movement of the cursor when it detected that you pressed an arrow key for a longer time (probably by changing the key repeat rate or reducing the repeat time), so that when you did that, movement through the file would be faster. The idea being that a user pressing the arrow key for a longer time probably meant to move through a longer section of the file (than usual) to reach some other distant place in it, so Brief figures this out and assists them with that, by scrolling faster with that BIOS technique.

Anecdote: On a trip to the US (Boston), I once met Norm Miles, who, my US colleague said, was the creator of Brief.

The Brief editor is actually still available, here, and for free now:

[http://www.briefeditor.com/](http://www.briefeditor.com/)

[https://en.wikipedia.org/wiki/Brief_(text_editor)](https://en.wikipedia.org/wiki/Brief_\(text_editor\))

</comment></comment></comment></comment></comment></comment></comment><comment> Chiba-City The original getopt was a really tight library.</comment>


How to render a press release tolerable - <AUTHOR> http://reprog.wordpress.com/2010/10/02/how-to-render-a-press-release-tolerable/

<comment><USER2> The best way to write a press release is to provide valuable information.

For example, let's start with this "tolerable" press release example from the OP:

"PRLog (Press Release) – Oct 01, 2010 – Newburyport, MA. October 1, 2010 — eZuce Inc. has developed alliances with technology vendors to enhance its solutions portfolio. Through development efforts and integration testing and certifications, eZuce delivers technology innovations that address the requirements of enterprises and enables customers to transition from their legacy systems."

I know it is just an example, but it is worthless, meaningless e-business- speak. What is the company that a contract was forged with. What are the specific services? What are the numbers? Who is the audience and who will this help?

I was annoyed at a former company because the company hired someone to do press releases, just so we'd have them. In the end, we had meaningless dribble like this. Good press contains meaningful content.</comment>


Communly: Connect with others across shared interests - <AUTHOR> http://communly.com

<comment><AUTHOR> There's still a few bugs, but we're working on ironing them out. :)</comment>


D&D Meets the Electronic Age - <AUTHOR> http://odd74.proboards.com/thread/11485/meets-electronic-age <comment><USER2> One of my favorite RPG games is Space Station 13; in that part of the game is to ACTUALLY role play your job, instead of just being a wizard and having certain abilities and thats as far as you go. That's one of the best things about getting together with a bunch of friends in a D&D match; coming up with entertaining quests. But it's rare to find a game that actually encourages the role playing aspect, and a large part of SS13 is the stuff that other players / admins will do to spice up the gameplay for others.

For the unfamiliar, here's an example of some of the gameplay of a janitor: [https://www.youtube.com/watch?v=KpBxqZYgem8](https://www.youtube.com/watch?v=KpBxqZYgem8)

<comment><USER3> What you look for is not a game _system_ , but a game _master_. At the beginning of every decent rule book is a sentence equivalent to this: "this book is by no means definitive; if tearing it apart and throwing it out of the window is what brings you and your team most joy, you should tear it apart".

If you enjoy playing a character and you want it to be the most important aspect of the game, you need to look for something called "storytelling" and you need to find a game master who favours this playing style.

You can easily do storytelling in (otherwise heavily formalized) D&D/d20, it only takes rest of your team to agree.

</comment></comment><comment><USER4> One of the first programs my father wrote in the 70s/80s was a DnD dice rolling simulator, I believe in assembly. I've heard similar stories from others who began programming in that era. It's interesting how many "nerds" got their start in development through RPGs.

<comment><USER5> Makes sense. Why spend several minutes rolling dice and writing stuff down when you can have the computer do the dice rolling in under a second, and then print out a character sheet?

It makes even more sense for point buy systems, where you frequently want to run a lot of "what-if" scenarios, and getting the math right is tedious.

</comment></comment><comment><USER6> One of my favorite hobby projects is a dice-rolling gaming aid that morphed to a place where people can play RPGs online together over the years:

[https://rolz.org/](https://rolz.org/)

Due to time constraints I've been neglecting it during the last months, but I'm looking forward to jumping back into development at some point.

When it started out, it was barely more than a Google search-like input box that would parse and execute RPG-style dice codes that I needed for GMing my own games. Over time, users had a lot of feature requests and this is how it got to today's state...

<comment><USER7> Have you seen [http://gamesbyemail.com/news/diceomatic](http://gamesbyemail.com/news/diceomatic) ? It may bring a little bit of joy to your life.

<comment><USER6> Yes :) thanks anyway!

</comment></comment></comment><comment><USER8> One thing that frustrates me is my endless quest to find a decent electronic character sheet. They're like the to-do list app that's never quite what you want.

<comment><USER9> Fight Club 5 on iOS is pretty good, I'd recommend trying it out if you have an iPhone/iPad. A bonus nicety is that it can back up to iCloud so you can sync between devices easily (and without a service that might one day go down).

</comment></comment><comment><USER10> Funny that this should come up as I am currently building a game master assist for Cosmic Patrol (cosmic-patrol.com). I'm fairly new to rpgs and I didn't have the dice needed to play so I hacked out some python functions to roll the right dice and I've kept expanding it to handle more stuff.

</comment><comment><USER5> FYI, a little googling will find the original article from 1979.</comment>


Show HN: Ryze- Automated Investing for Bitcoin (Beta/MVP) - <AUTHOR> Hello YC Community,
I'm Abhay, a co-founder at Ryze. Ryze manages your investment in Bitcoin with our quantitative strategies.
We launched our beta in mid-August and are outperforming a Bitcoin buy-and-hold strategy by ~11% for our 70 users. Our MVP integrates with Coinbase to manage the funds in your account.
Any feedback would be appreciated.
Try it out here: ryzecrypto.com <comment><USER2> Nice Results, Could you send a doc of the performance?</comment>


Ask YC: Any suggestion/ideas for a college project - <AUTHOR>

YC folks:
    I'm searching for a new project/idea for my friend, who needs to do a college project (3 months timeframe). Preferably web based, desktop client is also ok.
 Appreciate any suggestions. Thanks in advance. <comment><USER2> \- a custom search engine that will be what I would call the 'free associative' little brother to what google does. It automatically finds all synonyms to the words you have entered and their first level 'strong' associations by counting digrams in the text body. It then _removes_ all the results from the set that google or any other regular search engine would show you.

\- 'deadmansknob', I've been playing around with this idea for a long time but never got around to building it, a service which you need to check in to periodically and when you don't one or more emails are sent out. 3 levels of 'periods', a day, a week, a month and trigger-able alarms for special cases (such as holidays).

You'd use that to set up a series of emails containing messages to people that you only want activated in case something happens to you. The various levels are to make sure that really crucial information can be held back in case you are in some kind of accident but still alive. Expand featureset at will :)

\- World Wide orphans: a place where you can dump your no longer wanted domain. It would automatically spider the old site and then set up a web server to handle the reguests. Strictly static. For people that run out of $ on their hosting that put lots of time and effort into sites that then disappear from the net. This would hopefully kill a portion of the spammers that buy expired domains. Simply assign the domain to WW orphans.

\- a good replacement to IUMA. Bandwidth costs have come down considerably and I'm sure you could do it if you stayed away from fancy offices and executive ferraris.

\- an interactive tour of the genome (ajax based)

\- a site where hackers can challenge each other with problems

\- ajax based corewars

\- a revival of webrings. I thought they were really neat, if done right I'm fairly sure it would take off. Alternative link structures are very interesting. A star based on that gorgeous treeview thingy I posted yesterday would be nice too.

\- an interactive book written by the audience. I call this one for obvious reasons the never ending story. At any point in the books you can branch the story and continue it in a different way. Some clever ui to indicate the forks where they exist, the default is the first thread that was written for a given level in the tree

\- a site where you could registrate all your property until you flipped a switch indicating it was stolen the site would be 'blank' for you. Serial numbers, photographs and so on all could be uploaded to the site. Then when your home has been burglarized or some other property was lost or stolen you could make the pages active. Search engines would pick it up. If somebody would then want to buy something on ebay or some other auction site or if they found something they could use the site to find out about you by matching the property and alert you.

need more ? This is just my list of stuff that I haven't gotten around to (yet) that might be on the level of a college student (if he's good), all of them could be done in 3 months with some dedication.

Let me know if you pick any of them and I'll send you my outline on what I think it would take.

Same goes for anybody else reading this that thinks cool, I want to go do that. I'd be just as happy seeing somebody else build this stuff than doing it myself, there are only so many keystrokes in a lifetime (and I've already had my fair share of them ;) )

My email address is in my profile in case you need it. Best of luck!

<comment><AUTHOR> Excellent. Thanks a bunch! I love the "site where hackers can challenge each other with problems"

</comment></comment><comment><USER3> It highly depends on how much you are willing to do. I mean, the possibilities are endless. Some come to my mind are:

* compiler/interpreter of some languages (for simplicity, usually Scheme or something easy) to Javascript, with good interface to Javascript code. Optimize the produced code. Bonus: full reflection (aka incremental compiling) support. Another bonus: mixed solution, with javascript for new users, and plug-in for accelerated speed.

* Telnet/SSH/VNC in Browser. I have seen some solutions, but all of them are primitive, especially with respect to the screen size

* Games, as always. Bonus: 3D.

* Geolocation-based stuffs. These are really hot these days, eh?

See, just one minute, and all kinds of thing flash through one's mind. Of course, you have only 3 months, which makes any of these extremely challenging.</comment>


The King's Death Points to Thailand's Paradox - <AUTHOR> http://www.npr.org/sections/parallels/2016/10/13/497693229/the-kings-death-points-to-thailands-paradox <comment><USER2> The say democracy is one of the most inefficient forms of government in existence. Way more inefficient, for example, than a benevolent dictator. However, democracy is the only type of government that is effective at mitigating tyranny.

Here's to hoping Thailand can prevent such a fate for itself in the future.

<comment><USER3> > However, democracy is the only type of government that is effective at > mitigating tyranny.

Is that actually true? We have so few examples to work with, and one of them includes the Weimar Republic.

<comment><USER4> And more usefully the first, second and third French republics. Not to mention the US's second constitution prior to its 13th amendment, or for that matter the CSA.

Then there are cosmetic democracies like China, most of the 'stans, Zimbabwe....the list is long. in fact I suspect countries with a cosmetic veneer exceed true democracies, which if nothing else points to the moral strength democracies seem to have. To paraphrase Groucho Marx: "Democracy is crucial if people are going to support the government. If you can fake that you've got it made."

(Despite all that I remain a big fan of democracy.)

<comment><USER5> I'd say most if not all of those "true democracies" only have a veneer of democracy to some degree as well.</comment></comment></comment></comment>


Load Balancing HTTPS with Let's Encrypt and HAProxy - <AUTHOR> https://fly.io/articles/load-balancing-https-with-lets-encrypt/ <comment><USER2> Honestly this is not great.

HAProxy is an amazingly powerful tool, and you're using it like a brick. What's more, instead of building a wall with that brick, you're burying it in the mud and saying "Tadaa".

The irony of having HAProxy in place to load balance/failover between two web servers, but then stopping HAproxy every time you need to renew a certificate is amazing.</comment>


Roku BrightScript is a powerful bytecode-interpreted scripting language - <AUTHOR> https://developer.roku.com/docs/references/brightscript/brightscript-language-reference.md <comment><USER2> Webpage doesn't work on Firefox on Android. It's absurd that any person/company is failing at mobile-friendly static sites 12 years after the iPhone came out.

<comment><AUTHOR> Doesn't work as in doesn't display? It is a developers page, so I'd imagine they're more concerned with desktop view.</comment></comment>


ATM Fraud at Aldi: Terminals modified in manufacturer's factory. - <AUTHOR> http://news.softpedia.com/news/Hackers-Install-Tampered-Payment-Terminals-at-Grocery-Retailer-160163.shtml <comment><USER2> <rant silly="probably">

There is no secret that the whole present-day credit card system is conceptually screwed up. You have to trust way too many parties, starting from your bank (that's okay) and ending with the passing-by stranger behind your back (who can glance and memorize your card name and number, and that's not okay) and store's security guard, watching the camera above your head.

The systems where a customer can use small and secure device to generate one- time token for a specified amount of money and specified merchant are already invented. They would almost completely stop the card fraud. But that not gonna happen anytime soon, because most customers are too illiterate (since when they gonna teach the very basics of cryptography at schools?) and business is too lazy (this is why 3-D Secure failed - almost nobody cared to support it because "everything works" the old completely insecure way).

</rant>

<comment><USER3> Had an experience with 3-D Secure just last week:

* SO asks me to buy some printer ink for her at a particular online store that sells such things, SO gives me her Visa card.

* I do the deed and while I'm checking out online I come to a page that tells me it has been detected that I am a part of the "Verified by Visa" program and that I will be redirected to a page to facilitate said verification by Visa.

* I'm redirected to a page that by the URL and branding I assume is owned by the bank that provides the merchant facilities for the ink cartridge website. This page partially loads but then dies because my NoScript Firefox add-on disallows the JS on the page. I'm left looking at a button that says something like "Click to enter your password" but due to JS being disabled, it does nothing when you click on it and even if it did, I would not know what password to enter. I do some Googling on Verified by Visa and how it might relate to our particular bank, but find very little other than pages filled with sales-speak on how Verified by Visa makes things more secure.

* Conversation ensues: Me: "Do you have a password for your Visa card?" SO: "Password? I have a pin number..." Me: "No I think it's different to your pin number" SO: "I have no idea what you're talking about." Temperature starts to rise as it's late and it's been a long day. Conversation escalates but is defused just in time before it goes nuclear.

* I enable JS, the page then reloads and errors out because now it's been detected that I've done something out of the ordinary flow and it's all bets off. I get back to the original ink cartridge website to find my shopping cart empty.

* I select all the products I want to purchase once more and not realising at this stage what Verified by Visa actually is and my tired and befuddled mind already convinced that the bank has enrolled my SO in some added security scheme and that she's forgotten that they gave her a password, I try using my own MasterCard to pay and find out that actually I hit the same thing, only with MasterCard it's called MasterCard SecureCode. Fortunately, Since I enabled JS last time, I get through it this time, interestingly without having to enter any password, even though the explanatory text on the page still tells me I will need to. This is lucky because I have no password for my MasterCard either.

* The next day, SO goes to the bank, the person behind the counter has no idea what Verified by Visa or MasterCard SecureCode actually is. They tell her they do not supply passwords for credit cards. SO calls me and asks me to explain what happened to the person at the bank, more frustration ensues. SO eventually finds someone at the bank who knows vaguely what she's talking about and he tells her that they don't supply passwords for credit cards, but that you should be able to set one up through the checkout process of this random, not particularly trusted website that she buys printer cartridges from.

* I do more research and find out that yes, this is all in fact 3-D Secure under different names and I now have a rough idea of what the deal actually is.

I'm going to have to put some of the blame for this whole cluster fuck onto myself because I'm meant to know about this stuff, I'm paranoid enough to be using NoScript and that night was not my most blindingly brilliant moment of deductive reasoning in general. But none the less, this was without a doubt the worst experience of eCommerce that I have had in all the years I have been buying stuff off the Internet. Regardless of the merit of 3-D Secure it's self, if this is the current state of its implementation then yeah, no thanks.

<comment><AUTHOR> Oh god yeah, I've had a credit card in a permanently blocked state through that exact thing. The credit card provider told me they couldn't unblock it. Visa told me it wasn't blocked. Yet even in IE afterwards I still couldn't use the thing.

This was not good for the Credit Card company, but a great way of me getting rid of a balance.

</comment></comment></comment><comment><USER4> this wasn't on ATMs, it was on the credit card payment machines at the registers.

<comment><USER5> Which is odd since, doesn't ALDI not accept credit cards?

<comment><USER6> I've paid by debit card at my local Aldi (ham FYI).

</comment></comment></comment><comment><AUTHOR> Sorry, I do apologise for mentioning ATM instead of the payment terminals. It wasn't what I meant and I don't mean to mislead anyone off the back of it. My bad. Sorry once again.

</comment><comment><USER7> I don't see anything in there that would indicate the readers were tampered at the factory. Am I missing it or is there another source that says this?

<comment><AUTHOR> Check the last sentence.

<comment><USER7> ahh, thanks.

</comment></comment></comment><comment><USER8> I see we are still losing the rights for the moniker "Hacker".</comment>


Attention new products: Focus on your core feature - <AUTHOR> http://fliggo.posterous.com/attention-new-products-focus-o <comment><USER2> This post answers the thread earlier today about what to build, how to plan for future users, etc.

Again: We at JamLegend call it the minimum valid test. Others call it core features, but it's what you need to get a prototype to market.

<comment><USER3> Minimum valid test sounds cooler.

</comment></comment><comment><USER4> So how little should you deliver to users as an first release to get the right balance between getting the great feedback, and not loosing a lot of your initial users because its too simple for their needs?

You can either launch too early and it doesn't compare with other more mature services feature wise, or launch too late, and the software is a bit bloated or another service has got a massive lead by introducing one of your main features! (or something along those lines)

<comment><USER5> So there are two types of products. Products that are new, never-before-seen ideas, and products that are big twists or features added to existing products.

If you are building a new product, build the simplest thing possible to complete the use case. Don't worry about the fonts or ajax, don't worry about anything other than 'did we meet our core scenario -- did the user get what he/she wanted?' And then test this on the user -- does this help you?

If you are building a tweak or revision of some existing thing, go for the out-there features and see if those actually stick to users. If you are writing a new blogging platform, for example, it's expected that you'll be able to add, remove, and edit posts, and you'll have a great RSS feed. Users will assume you'll have that, and if you don't have it right now, you'll add it. In this case, build the parts that are truly novel. And then check this with your users -- is this something they want?

A good example is Zenter (YC startup acquired by google). They didn't build the "save" feature into their web presentation app until very late because it's assumed that you can save a presentation -- they instead focused on the cool stuff that people didn't expect -- collaborating on the web on your presentation, sharing it live, etc.

The bottom line is, build the minimum form of the unique thing first, and see if it sticks. Don't worry about being too simple -- your users will let you know if you don't meet their needs.

<comment><USER4> That's very good advice, thanks!</comment></comment></comment>


Timeline JS - Beautifully crafted timelines - <AUTHOR> http://timeline.verite.co/ <comment><USER2> This is absolutely gorgeous. A great addition to this would be state loading via a URL hash, kind of like Timemap.js does it.

Example:

[http://timemap.googlecode.com/svn/tags/2.0.1/examples/state....](http://timemap.googlecode.com/svn/tags/2.0.1/examples/state.html#zoom=8&center=44.04811573082351,13.29345703125&date=1500-01-21T12:17:37Z&selected=artists-0)</comment>


Show HN: Simplexhc, a Haskell to LLVM compiler - <AUTHOR> https://pixel-druid.com/blog/this-week-in-simplexhc-october-29th-2017/ <comment><USER2> So now we can compile Haskell to JavaScript and WebAssembly?</comment>


Show HN: First Clojure project - <AUTHOR> https://github.com/gaving/gitlab-users

<comment><AUTHOR> Rather than a hello world, a GUI to show users on a GitLab instance.</comment>


UW Study On Why Women Avoid Computer Science Careers  - <AUTHOR> http://www.geekwire.com/2013/study-women-choose-computer-science-careers-nerd-stereotypes/

<comment><USER2> Wow the comment on the actual article with the screenshot of the ad banners gave me a good laugh</comment>


Man Walks All Day to Create Spectacular Snow Patterns - <AUTHOR> http://www.mymodernmet.com/profiles/blogs/simon-beck-snow-art <comment><USER2> Also see Jim Denevan for sand versions: <http://jimdenevan.com/>

</comment><comment><USER3> Figuring out the shortest path to completing these patterns might be a fun challenge.

<comment><USER4> I was thinking more along the lines of the most compressible path...ie., the shortest set of instructions that can produce the pattern. Sort of like knitting patterns, "knit one, pearl two." It seems like he must be figuring out some reasonably simple step sequences to make it all work.

</comment></comment><comment><USER5> How did he manage to walk with such precision? Assuming it isn't just photoshop.

<comment><USER6> He's a true hacker and a craftsman.

He seems to have a lot of practice and hours to line things up for each one. They don't look perfect. Maybe he just does it by eye? GPS?

<comment><USER7> A "hacker"? He makes art in the snow.

<comment><USER8> <http://www.catb.org/jargon/html/H/hacker.html> Numbers 6 and 7 both apply, et the least.

Why does the appellation bother you so?

</comment></comment></comment></comment><comment><USER9> Unbelievable, especially considering that it is going to be short lived. Similar but more elaborate - <http://www.youtube.com/watch?v=ga5s_qYgJS8> They destroy it at the end :(

</comment><comment><USER10> It seems like it would be really run the try to repo this with robots.

</comment><comment><USER11> I'm wiling to bet you could, and for a lot of money. If you did have the above mentioned robot to make it a push-button exercise, I'm pretty sure that there would be farmers on with prominent fields near motorway and tourist site willing. It's almost green advertising, 100% biodegradable and with a reusable robot. No. Nothing is sacred.

</comment><comment><USER12> sadly if you visit this url via ipad all you get is unreadable/unuseable swipeware.

</comment><comment><USER13> my friends and i did a pretty decent scale mario in college [0]. it got decent coverage and was actually pretty cool. that said... these obviously blow mine out of the water. :)

[0] [http://www.njit.edu/features/sceneandheard/mariointhesnow.ph...](http://www.njit.edu/features/sceneandheard/mariointhesnow.php)

edit: did i really call it "great fun"? everyone do me a favor and skip the text.

</comment><comment><USER14> I bet this guy can make a mean snow angel.

Seriously though, these are amazing. I sometimes have problems drawing a "perfect" square without a ruler...

</comment><comment><USER15> Crazy man ;) Great to see people like that and sometimes to take some of the positive craziness with you. This made my day.

</comment><comment><USER16> Evidence against extra-terrestrial origin for crop-circles, for the doubters.

<comment><USER17> Nice try, anal-probing aliens, but you can't fool me. I'm onto you.

</comment></comment><comment><USER18> Government coverup! Definitely created by extraterrestrials who know trigonometry.

</comment><comment><USER19> Why is this shit on Hacker News? This is not reddit. This is not even new.

Flagged.

<comment><USER20> It's on Hacker News because I find it interesting and it was new to me. Up voted.

<comment><USER21> rorrr's message is unnecessarily rude, but I don't think he's wrong.

It's a very interesting feat, but it's just a showcase of his realizations, unrelated to computers or science. His thought process or his planning for making such patterns would probably fit here more than this post.

I don't think it's a problem either, because such posts are rare, but I would be disappointed if Hacker News was filled with this kind of post.

<comment><USER22> It has prodded at least one HN reader to speculate about making these patterns with robots[1], and another to wonder about solving shortest path[2]. Sounds like "of interest to hackers". This is late Saturday and peoples' interests wander further afield than optimizing CDNs.

[1] Can you make a business selling robots that let a ski resort decorate itself? Can you sell ads on unused winter pastures?

[2] If you consider each footprint to be a salesman's stop, then I think the answer is "Yes, but…"

<comment><USER6> _Can you sell ads on unused winter pastures?_

IS NOTHING SACRED TO YOU PEOPLE?!!!

<comment><USER23> All caps is reserved for the high priests of my religion. Why are you debasing my belief system like this? :(</comment></comment></comment></comment></comment></comment>


A Messenger bot acquires 100k users in 2 days - <AUTHOR> https://medium.com/@jswallez/from-1-to-100k-users-in-48-hours-b8c3f306fc17#.u86c02ijt <comment><AUTHOR> I feel this might be one of the first "bot success stories".

If these guys confirm their trajectory, it would prove that the sharing feature recently added by the Messenger team was a key element. I would have thought that this sort of explosive virality would have to wait for bots allowed in groups, but I am very happy to be proven wrong. This is very good for the whole ecosystem.

</comment><comment><USER2> Finding the right balance between AI and human responses is an interesting problem I look forward to learning more about if Peter keeps up the transparency.

<comment><AUTHOR> I think in this case most of the value is provided by humans tutors. AI is here only as a fallback / to tell jokes / to triage spammers

I always feel like messaging platforms bots and AI get presented as one and the same, but I think they are very, very different things. Bots = a way to provide a service on platforms on which users spend 60% of their time. Absolutely fundamental trend. AI = a way for these apps to communicate using natural language. Insignificant at this stage</comment></comment>


XIM4: Mouse and keyboard gaming on Xbox One - <AUTHOR> http://www.youtube.com/watch?v=TsI7-hUhXTY#t=341

<comment><USER2> I would be happy if the XO recognized USB mouse inputs for non-gaming actions.

While it recognizes a Logitech wireless keyboard, it does not recognize the same keyboard's trackpad. For entering messages, codes, and even web browsing, mouse interactions would make the XO a better media center.</comment>


Authors, poets replace reporters at an Israeli newspaper for one day - <AUTHOR> http://www.forward.com/articles/107571/ <comment><USER2> I think it is funny that they tampered with all the serious news stories but dared not replace the sports section.

<comment><USER3> My favorite sports writer:

[http://thebivouac.wordpress.com/2008/07/16/the-kentucky- derb...](http://thebivouac.wordpress.com/2008/07/16/the-kentucky-derby-is- decadent-and-depraved/)

</comment></comment><comment><USER4> Kinda reminds me of the time Robert Frost was a technical writer for a day :-)

      The Thread Not Traversed

      TWO threads diverged in a yellow stack,
      And sorry I could not traverse so
      And be one parser, long I stood
      And looped through one as long as I could
      To where it spawned in the overflow;

      Then invoked the other, as just as fair,
      And having perhaps the faster stats,
      Because it was hashed and wanted wear;
      Though as for that the data there
      Had run them into third normal form,

      And both that session equally lay
      In objects no instance had trodden class.
      Oh, I kept the version for another day!
      Yet knowing how code leads on to code,
      I doubted if I should ever unit test.

      I shall be documenting this with a sigh
      Somewhere many transactions hence:
      Two threads diverged in a stack, and I—
      I took the one less traversed by,
      And that has caused the site to fly.

</comment><comment><USER5> Has anyone got a link to any of the cited articles? I haven't had luck Googling their English website haaretz.com or the Hebrew website haaretz.co.il .

<comment><USER6> I don't know if any of this was translated to English, the Hebrew articles are here: <http://www.haaretz.co.il/hasite/spages/1091226.html>

It was done as part of "Book Week", which is celebrated every year around this time in Israel. They got some of Israel's leading writers like David Grossman and Etgar Keret to take part and some of the stories are excellent.

My favorite touch was the weather report, which contains a poem for summer written by one of Israel's best known poets, Roni Somek. The weather reports talks of hot & humid early summer weather, and he writes (roughly translated):

      Summer is the least
      sharp pencil of the seasons' box
      I write with it
      a love letter
      to the tailor who cut off
      the women's blouses
      and skirts
      a few inches
      of winter.
      This year too, perhaps
      it will be hot in the valleys

(It's a lot better in the original form ;)) <http://www.haaretz.co.il/hasite/spages/1091757.html>

<comment><USER7> Any idea what the paper, English edition of Haaretz had today if not translations of these articles?

<comment><USER6> The authors didn't really write the whole newspaper, just some magazine-style reports and some of regular features - weather report, TV critic, letters to the editor (by another poet) etc. News, sports etc items were still there, written by the regular reporters.

(BTW, in general, Haaretz in English is quite different and better quality than the Hebrew version. This is perhaps why Haaretz is held in much higher regard outside Israel.)

<comment><USER7> What makes the English Haaretz better? I don't speak Hebrew but I remember comparing the (paper) English and Hebrew editions of Haaretz and not noticing much difference. I can't specifically recall looking past the front page though.

My tour guide in Israel was a former Haaretz English translator and he nitpicked several things in my English copy, saying their translators had gotten sloppy since he left.

<comment><USER6> In the Hebrew version, every other article contains spelling mistakes and glaring errors - and that's before the simply poor, Techcrunch-like level of reporting standards. Due to financial issues and internal power struggles, Haaretz lost many of its experienced writers and editors in the last decade and is unable to attract new talent when it pays sub-minimum wage salaries.

(This is true for most of Israeli media, btw, it's just that Haaretz is for some reason held at higher regard by outsiders)

All this seems to affect the English version less, probably because it contains a small number of editors/writers relative to the Hebrew one, and they tend to have learned their craft in the US/UK, which still have far better journalism standards than most of the world.

</comment></comment></comment></comment></comment></comment><comment><USER8> Google Translator (Hebrew > English) of the articles: [http://translate.google.com/translate?u=http%3A%2F%2Fwww.haa...](http://translate.google.com/translate?u=http%3A%2F%2Fwww.haaretz.co.il%2Fhasite%2Fspages%2F1091226.html&sl=iw&tl=en&hl=en&ie=UTF-8)</comment>


The Rise of Behavior Generated Content - <AUTHOR> http://www.mikesingleton.net/2010/01/24/the-rise-of-behavior-generated-content/ In 2009 there was a huge emergence of a new* type of content that was accelerated by the efforts of services trying to increase their virality through social networks: behavior generated content (BGC). <comment><USER2> Is this the same concept as the 'Implicit Web'? <http://en.wikipedia.org/wiki/Implicit_Web>

</comment><comment><USER3> How do people feel about using behavior generated content on their sites? Is there anyone who has seen a significant benefit to incorporating that? It does seem to be on the rise but I'm not sure what data is out there to support the idea that it is useful. (Although I'd like to find it if anyone has any leads.)</comment>