Ask HN: As a web developer, do I have to know what Docker and Kubernetes are? - <AUTHOR> Hey, everyone, i am a javascript web developer, I have worked on both Node and Angular (Back and Front) but right now on Front. I know docker and kubernets are all the rage but i was busy learning Node and Angular i had one and a half year of experience still getting better in both. So what i want to know is Why do we need Docker and Kubernetes as in simple term (Explain like i am 5) and i am also working on my side project so whether knowledge of them will help me to make a good decision regarding my projects.
SORRY FOR BAD ENGLISH <comment><USER3> At the risk of displeasing the Docker crowd, I would say you can get pretty far without them.

In general, I see a lot of people learning and using BuzzWord solutions for problems that they don't have.

In most cases, you'll have some problem and look for a solution to it. If your problem is spending a lot of time messing around with dependencies and deployments and "but it works on my machine" type issues, then Docker may well be the solution.

If you learn a solution and then see what problems it can solve (Hey, everyone is talking about Docker. Let me learn it too), you'll end up frustrated and confused.

Of course, it's a balance -- often you can learn about problems that you didn't even know you had by learning about new technology. But so far I see more people erring towards "Let's fix these problems I don't have" than "I'll just keep doing things this slow old way because I don't want to keep up with tech movements"

<comment><USER4> Having worked for for about 18-20 different clients I can count on my left hand the number of places that had turn-key, repeatable dev environments. Repeatable prod environments are usually better but not always.

Quite honestly to most lazy developers the idea of repeatable and turn-key environments is anathema to them. "It's time consuming". "It's boring." "It's Somebody Else's Job." It is now my number one way to determine actual seniority and skill level in a developer during interviews.

Docker is not the panacea, but it's a game changer for many people as it lowers the barrier to entry for these things. We should embrace containers for what they are -- a very useful tool.

<comment><USER5> > turn-key, repeatable dev environments

> We should embrace containers for what they are

Um.. relatively unrelated to the problem you described?

Containers are about isolating one or more processes, memory, network, disk etc from the rest of the host system. This can be used to achieve security benefits, and/or to resolve dependency differences.

The problem of repeatable dev environments is solved almost always by a single concept: script it, either using shell scripts, or a configuration tool like Chef, Puppet, etc.

In Vagrant, this means one or more provisioning scripts executed in the guest environment (usually a VM, might be LXC or Docker). In Packer, this peans one or more provisioning scripts executed in the guest environment (usually a VM, might be LXC or Docker). In Docker, surprise fucking surprise, it's a script executed in the guest environment.

<comment><USER4> No, they are not unrelated. Isolation yes, and through that, you get repeatability. We can all agree that declaratively describing your environment (Salt, Chef) is preferable to the rather simplistic Dockerfiles currently in use, but both aim to accomplish the same time. I remember the pre-container days of re-running Salt/Puppet scripts over and over again in a VM until it works. Nothing wrong with that - they're great tools. I also remember the pre- Salt/Puppet days of using shell scripts. None of the above are great: conf. management + docker is a better solution long-term for building a container image.

<comment><USER5> My point is that Docker itself brings nothing to that 'repeatability' table. You _have_ that with shell scripts, salt/chef/puppet/what have you, all of which can be run on any environment that meets the baseline requirements for your project.

</comment></comment></comment></comment></comment><comment><USER6> Docker & kubernetes are modern Dev ops tools - the former abstracts away the host specific quirks, and the latter allows managing many (docker) containers in production.

Should you learn this - it depends. If you plan on building microservices whose devops you'll need to manage, docker is highly recommended. You can get away not learning kubernetes by relying on AWS ECS equivalents, and that's probably what you should do as a beginner wanting to deploy.

If your app architecture is event-driven, and can be rest based AWS lambda is a great option where you don't have to learn either. Beware of costs if invoking in the millions, but if your service ever scales to that, you've probably already found a lucrative opportunity that can afford experienced help

<comment><USER4> Sorry, but you don't need to be building microservices to even consider using tools like Docker and Kubernetes.

The former (or containers in general) is an excellent way to build repeatable and re-usable environments for development, then your test and CI environment(s), and then finally production, as you -- in a greenfield project, for instance -- crystallise your requirements as you go from the trappings of a blank project to a final one.

To say that either tool is aimed at microservices _only_ is very misleading.

I will also take some exception to the notion that using Lambda with event sourcing means you don't have to _learn_ how Lambda or, indeed, event sourcing works (pros and cons).

OP, your main goal is to ask yourself:

      a) Can these two tools make my life easier (Docker? Definitely. K8s? Maybe.)
      b) Do they improve the quality of the work I do so my client/boss is happy?

<comment><USER6> Repeatable, reusable environments for development doesn't _need_ docker. And my statement on AWS Lambda is valid - while learning is always a net positive, knowing the innards of lambda's container scheduling isn't necessary for using it. One needn't learn chip design to program a computer, but you probably will write better assembly code of you designed the processor

<comment><USER4> They don't _need_ it - but they sure do make it easier.

</comment></comment></comment></comment><comment><USER7> Using docker can greatly improve your development situation. For example, you can use docker to define the full environment needed to run your web app, meaning you can have another dev running it with "docker run", and not needing to install any local dependencies, as everything (web server, node etc) is contained inside the docker container. This turns out also be useful for your future self, when you in 2 years from now are having troubles re-creating the environment needed for running your service.

Docker orchestrate can further improve your development situation, in which you can use it to define and test out multiple virtual servers on your laptop, such as the database, the file server and the web server.

<comment><USER5> Quite honestly Vagrant will do all of that for development.

<comment><USER4> Yes, with the caveat that if you already use a hypervisor for your main dev environment then running another inside it with Vagrant's default VBox setup is likely to either be very slow or not work at all.

Docker will also layer and cache each command greatly speeding up the "build&test" cycle of writing and running Docker containers. With Vagrant you're re-running _everything_ every time.

Furthermore, you can actually use Docker with Vagrant also nowadays.

<comment><USER5> This sounds like a rare scenario, much more common these days I believe would be a non-Linux host, with a Linux "guest" server environment.

If you want to use Docker, you're then automatically using a hypervisor anyway.

> With Vagrant you're re-running everything every time.

Are you talking about the time to provision a non-created environment?

On a clean install, sure, that might take a while if your base-box doesn't have the dependencies you require - but most developers wouldn't often need to re-build their Vagrant environment for a project from scratch (i.e. vagrant destroy is not likely to be a common task). And that whole situation is moot if you use or build a more appropriate base box.

<comment><USER4> Is it that uncommon? Mac users using a hypervisor? Windows using running Linux in a Virtualbox? That's pretty common in corporate environments...

I am talking about rebuilding the Vagrant image every time you change it - <USER2> you are wont to do during the initial step of creating it. Sure, once it's written (by someone who has to spend a fair amount of elapsed time doing trial-and-error tweaks) then you don't have to re-cycle the image. On the other hand, that too can result in people using stale images over time as the configuration drifts.

<comment><USER5> > Mac users using a hypervisor? Windows using running Linux in a Virtualbox?

Vagrant works natively on Macs and Windows, unlike Docker. There is zero reason to run it inside an already virtualised environment on those machines.

> I am talking about rebuilding the Vagrant image every time you change it

You know you don't need to destroy the vagrant environment to re-run the provisioning scripts, if something changes.. right?

> Sure, once it's written (by someone who has to spend a fair amount of > elapsed time doing trial-and-error tweaks)

With the minor exception of a few Vagrant specific optimisations (a `vagrant` user with the predefined SSH key & passwordless sudo, for example) during base-box building, literally nothing in a Vagrant provisioning environment _needs_ to be specific to Vagrant.

Also - if you're building base-boxes, it's probably worthwhile forking an existing project that targets your Distro/OS of choice and customising from there.

> On the other hand, that too can result in people using stale images over > time as the configuration drifts.

Why? If it's a small change, just set the provisioner to `run: "always"` and it will run on every up. Assuming the changes (i.e. new/updated deps, or config files being copied) are small, it'll be almost instantaneous.

From everything you've said, I'm very curious _how_ you use Vagrant (if at all). It isn't intended to be used like Docker, where you package up an entire image completely ready to use with 0 cycles needed to configure _anything_ , and an update means a new image.

</comment></comment></comment></comment></comment></comment><comment><USER8> You can worry about Kubernetes later for now just understand docker basics. Docker really is a game changer.

Want to try something in Postgres 9.4, you can do it with just one command, want Rabbit MQ with web stomp enabled, get it with just one command.

Setting up Environments with Docker is ridiculously easy, Docker files are pretty intuitive and easy to understand.

</comment><comment><USER9> I was running my side project without docker and trust me it was making my life hell due to the difference in production and development environment and also a fear that if I drop this server how the hell am I gonna setup another server with a small amount of downtime. I started moving my side project to docker and in the process learned a lot about it. Now I can't work without a docker . It's not perfect but God it's so much better

</comment><comment><USER10> You don't have to, but docker + docker-compose is excellent for getting a development stack setup with extremely little effort (and other tooling you may need) - such as postgres/mysql/redis/mongodb/couchdb/jenkins/etc...

You don't need to learn how to build containers. Just the basics of how docker works.

<comment><USER10> Also it allows you to run a bunch of services with little resources and minimal config. I have a OVH $7/mo VPS running

\- reverse proxy (traefik) \- 2 web apps \- jenkins \- postgres \- riemann \- thumbor (thumbnailing service)

</comment></comment><comment><USER11> In the amount of time it took for you to write this question and parse the subsequent opinions, rants and religious arguments, you could have followed a basic Docker tutorial, written a simple Dockerfile and answered the more important questions: Is this useful to me? Can I be more productive with these tools?

:)

</comment><comment><USER12> Yes. It's ubiquitous now. It'll be a bit like everyone around you talking about the "Upside Down". And you have no idea because you never watch tv except for Emily Chang. Plus, you can understand it in under 1 hour:

[https://training.docker.com/introduction-to- docker](https://training.docker.com/introduction-to-docker)

If you are into Node, I'd also get up to speed with Serverless Deployments and Lambda Functions. Buzzwords, yes. But also modern, powerful and game changing. And most importantly, you won't have to worry about any devops internals ;)

[https://cloud.google.com/functions/](https://cloud.google.com/functions/)

</comment><comment><USER13> i'd suggest learning the following:

1) how to write dockerfiles [1]

2) docker build, tagging, and push

3) docker run and docker exec

4) docker-compose

anything beyond that is probably not worth it unless you're also responsible for your infrastructure.

[1] [https://docs.docker.com/engine/userguide/eng- image/dockerfil...](https://docs.docker.com/engine/userguide/eng- image/dockerfile_best-practices/#minimize-the-number-of-layers)

</comment><comment><USER14> I would say it's worth learning Docker.

I've been using it since 2014 and it's one of the best software related moves I've made.

I wouldn't say I'm a super fan boy of anything, and I typically only use tools when they make my life way better. Docker is one of those tools because it helps me set up development environments for the web applications I develop, as well as help me move those apps to production seamlessly.

I'm a freelance dev so I have a lot of projects on my machine, and it's amazing to be able to spin up and shut down each app in seconds and also hand everything over to a client and have them run 1 command to get everything up and running regardless of whether they are running Mac, Windows or Linux.

When it comes to production, it's as simple as installing Docker and then running a few commands to have everything up and running with total confidence that it works. That's what Docker can give you in the end with not too much effort.

The reason it's a lot better than a VM is how fast and efficient it is. There's no massive disk space overhead and containers start in milliseconds, not minutes. Honestly it's not even comparable to a VM. There's just too many wins that make it an entirely different beast.

If you don't want to put in the 50 or 100+ hour grind of learning it on your own, I've assembled a 5 hour premium video course that will teach you how to dockerize your own web apps. You'll walk away fully able to use Docker in the real world. There are node examples too. This course is everything I've learned in the last 3 years of using Docker and is filled with best practices from real world usage and feedback from hundreds of people.

You can find that course at [https://diveintodocker.com/](https://diveintodocker.com/).

If you have any questions let me know. I'd be glad to help. I'm also a Docker Captain (Docker reached out to me to become a trusted content provider) so I'm not just pitching you on buying something (if I didn't fully believe in Docker I wouldn't be spending my time personally using it).

I also have plenty of free Docker related material on my blog[0] and Youtube[1]. The first hour of my premium course is available on Youtube, no strings attached.

[0]: [https://nickjanetakis.com/blog/tag/docker](https://nickjanetakis.com/blog/tag/docker)

[1]: [https://www.youtube.com/watch?v=XeSD17YRijk&list=PL-v3vdeWVE...](https://www.youtube.com/watch?v=XeSD17YRijk&list=PL-v3vdeWVEsXT-u0JDQZnM90feU3NE3v8)</comment>


Study Asserts Startling Numbers of Insider Trading Rogues - <AUTHOR> http://dealbook.nytimes.com/2014/06/16/study-asserts-startling-numbers-of-insider-trading-rogues/?_php=true&_type=blogs&_r=0 <comment><USER2> Professional traders have known this for decades. Watching for signs of insider movement and then jumping on has been a popular strategy since forever. (Of course, you have to know how to read the charts... the signs are subtle and ambiguous.)

I sometimes wonder if we wouldn't be better off without the charade of insider trading laws. We could just drop them and stop pretending the water isn't shark-infested. Ironically, Wall Street might oppose this as it might make it harder to attract suckers to the game (if I may mix metaphors).

<comment><USER3> Some level of uniformity in not-bilking-your-shareholders expectation is probably a good thing, lest management contracts become laden with redundant boilerplate.

Insider trading rules certainly hurt the efficient market hypothesis. If your goal is accurate pricing above all else, insider trading laws are bad news.

</comment></comment><comment><USER4> This is the "Brazilian brothers" case mentioned in the article: [http://dealbook.nytimes.com/2013/10/10/two-brazilian- brother...](http://dealbook.nytimes.com/2013/10/10/two-brazilian-brothers-to- pay-nearly-5-million-in-insider-trading-case/)

</comment><comment><USER5> Another reason could be that there are some really smart dudes profiting using only public or non-material non-public information. It seems hard to disentangle those two sources of information and I can't find anything about it yet in the paper.

<comment><USER6> Also if you have the raw feeds you can try to detect suspicious activity and then use that activity as a signal for your own trades. If you trade based upon public data (what winds up being insider trading) without knowing the inside information is it insider trading?

<comment><USER7> But where would that activity come from in cases other than the relatively few activist and hostile takeovers?

<comment><USER6> Why there is a sudden surge in options activity with no underlying stock movement or news could be very, very specific to the stock and requires understanding of why that might happen. I'm not sure computers have all the info they need (at this point in time) to make that determination with precise accuracy. But, you can simply ask the computer to notify you when it occurs so that you can use your brain to try to make sense of it.

<comment><USER7> The question is how could that movement be a result of impending M&A activity without insider information?

<comment><USER5> Well observations of public information that are not widely disseminated or are hard to interpret. For example

1) Change in behavior of insiders because of regulations which leaks information, e.g. sudden silence on a certain subject

2) Observed activity of key persons, e.g. the CEO of a company being spotted with other CEO's

Mosaic theory[1] allows such things under the right circumstances and this would influence price.

[1]: [http://en.wikipedia.org/wiki/Mosaic_theory_%28investments%29](http://en.wikipedia.org/wiki/Mosaic_theory_%28investments%29)

</comment></comment></comment></comment></comment></comment><comment><USER8> I'm not very surprised by this. Information gets spread very quickly for this type of activity, infact there are entire funds created around the merger arbitrage scene.

Typically this information is told to a fund by the investment banker or company itself, and then the fund would become "restricted" on the company, meaning once they know a deal is in the works, they can't act on it until the deal has been reported.

Funds know that they are being very closely watched. Some funds do cheat, ala SAC [http://www.bloomberg.com/news/2014-04-10/sac-judge- approves-...](http://www.bloomberg.com/news/2014-04-10/sac-judge-approves- record-insider-trading-accord-with-u-s.html), but the vast majority don't intentionally trade on the news.

The article didn't mention it but I'd guess most insider trading happens form individual accounts and not funds. The risk reward just isn't really there for most funds, compared to individual investors.

</comment><comment><USER9> Another argument for breaking up Wall Street and other hives of corruption like Washington DC. There is no reason that those two locations in particular should need to by physically concentrated around a physical location like that.

Some will cry and whine about proximity to the transaction switches, but even that's a policy issue. There is no particular reason that transactions need to be completed in milliseconds rather than actual seconds or even minutes. There are no legitimate efficiencies to be had, only corruption of process and skimming.

The concept of physical co-location of core functions of society and economy are ripe for corruption and doe not provide any advantages that are not utterly overshadowed by the advantages of distribution. It is essentially the transparency and sunlight that disinfects society by spreading out the corruption making it more easily found and identifiable. Distributed government and financial sectors are essentially the transparency that inoculates against corruption.

<comment><USER10> Distributed government services just makes the pork and corruption harder to control. All the way back in the early years of the Republic Jefferson had to fight against spreading federal functions and contractors all over the country. He knew the only hope for controlling waste and pork was to keep it concentrated in DC.

</comment></comment><comment><USER3> Does anyone have a link to a reliable reference on what does and does not constitute insider trading in the eyes of the SEC?

Is there a clear definition for what constitutes actionable information?

<comment><USER11> I bet they prefer keeping it broad and ambiguous. It's a great US law enforcement tradition.</comment></comment>


Ask HN: Does anyone else find Firefox hard to develop for? - <AUTHOR> I know that there has been a recent push in many privacy conscious circles to move from Chrome to firefox. I haven't been able to move from Chrome myself due to work and some personal extensions ive created that I don't want to re-write/re-configure.
Also, I think the dev-tools are comparable between chrome and ff.
Anyways, I've been working on some web-apps recently that are going to be firefox supported, but I just find there are so many things on caniuse.com where there is only partial support for firefox. Things from flexbox to range inputs are mostly working 'except for a few bugs' which often impact my work and are annoying/impossible to work around?
I just find way more stuff in firefox that renders differently compared to any other major browser. <comment><USER2> Can you explain what you mean by other browsers? What other browsers are there?

As far as I can tell, Firefox is the only remaining rendering engine that isn't Blink/Webkit-based.

</comment><comment><USER3> Only people who haven't developed HTML/JS during the "browser wars" and don't know what is actually hard :-)</comment>


Rocking GTD with Trello - <AUTHOR> http://accidentalhacker.com/post/37883161398/rocking-gtd-with-trello

<comment><USER2> I use Trello as my planning tool but my setup is pretty "light".

I have a "Next" board which is basically my daily TODO list (I mostly use a notebook for this but move the stuff I want to do the next day to Next in the evening) which contains TODO and DONE

I have an "Ideas" board to capture long term/random stuff. The Lists are topics like "Programming", "Writing" etc

Then I have a "Personal" and "Work" board with topic lists to do the midterm planning. The "Work" one has a list for each programming project I work on for example.

I also have a "Self Investment" board that contains my couple of items I want to get better at during the next 6 month (Lists will be something like "French", "Erlang")

I also have a "Books etc" board where I keep track of interesting books ot buy (and track progress of mostly technical books I read usually with chapter checklists). The etc. part is interesting blogposts, youtube videos, TED talks and so forth

Lastly I have a single board "Dissertation" which should be self explanatory :D

I use a notebook to capture stuff on the road, I'm pretty low tech for a tech guy. It's a small one that fits in my pocket and basically I create an entry for each day with my stuff to do. I use the last pages and write in reverse order on them to capture ideas (those are then transfered to Trello and crossed out)

I actually combine this with the Promodoro technique so each entry in my notebook will have a couple of [] that are 20 minute chunks.

I'm always looking for ways to optimize my time management so any suggestions are welcome. I don't really use tags in Trello, I tag my books with them into owned, owned digital and want to buy but there has to be better ways of using tags :D

</comment><comment><USER3> Interested to see how people rock GTD with Trello _in practice_ \- does anyone have a non-sensitive task list they could share?

How do you manage contexts? Do you have one board for work & home? Do you map it 1:1 to your kanban board at work?

I love Trello but I use it for my 40 000ft view of projects — if a card requires multiple steps I tend to turn it into a project in OmniFocus.

<comment><USER4> Khanacademy has a public board: <https://trello.com/board/exercises/4d87e664967a0775082939ab>

</comment></comment><comment><USER5> I use <http://chizzl.com/> for this. 'Dead simple, and has the multi- dimensional prioritizing ability to encourage working on the important things.

</comment><comment><USER6> i still use rememberthemilk for this purpose. once you get used to all the keyboard shortcuts on their site it becomes a second nature to rock your list.. i love that i can "u" to add url, or "d" to add/remove a date.. j,k to navigate, 1,2,3 to prioritize, email into my inbox, and make some of my lists public.

i suppose Trello would be better geared if your lists were shared among multiple people, as that's more of their domain

<comment><USER7> I love both Trello and Remember the Milk, using them for different purposes, but keyboard shortcuts shouldn't be one of your reasons for one tool versus the other. Both tools allow you to specify most of the information you want right at construction time (e.g., <N> "Remember the milk #groceries ^Soon ^1" <RET>, makes a new card, labels it Groceries, and puts it at position 1 in the "Soon" list--basically the same as RTM's <C> "Remember the milk #groceries !1" <RET>). Both tools let you search from the keyboard ("F" for Trello, "/" for RTM). Both let you assign due dates from the keyboard, with "D". Both let clear out cards from the keyboard, with "C" for Trello, "XC" for RTM. Noticing a pattern here?

I love RTM, and I think there are good reasons for using it, but keyboard shortcuts shouldn't be one of them.

<comment><USER6> i guess that depends what is important to you. I highly value being able to skip the mouse. this is also my #1 feature of gmail, and biggest gripe with Outlook (it has most keyboard support but some is missing or hard to remember intuitively). Thanks for the good tip about construction! Often times though, items are managed after creation and that's where keyboard support comes in handy for me.

<comment><USER7> I think I'm missing something. Most of those shortcuts I gave are post- creation. You can use Trello fully from the keyboard; is there something specific not available that's bugging you?

<comment><USER6> my bad. not as familiar with Trello but if it has a full navigation support via keyboard than should be as quick to use as RTM. Fogcreek guys are very smart so I'm sure that implementation is a pleasure to work with. Did you switch to Trello for GTD stuff?

</comment></comment></comment></comment></comment><comment><USER8> Anyone who hasn't tried the Trello iPhone app should check it out. It's free and even better than the website version.

<comment><AUTHOR> Yeah, the iPhone app is sweet. I mainly use it for capturing tasks when I'm not at home. It's nice to finally have one place to put things.</comment></comment>


Lens (The Kubernetes IDE) v3.5.0-RC.1 - <AUTHOR> https://github.com/lensapp/lens/releases/tag/v3.5.0-rc.1 <comment><USER2> I am in the middle of a k8s project, and tried out this tool briefly. I mostly love the UI! I guess I am newer to k8s, and am getting sick of typing all the same commands looking for pod descriptions, logs, and shell access. This tool is fantastic for debugging. I love being able to access pod shells instantly. I love seeing most of the k8s objects I have one click away! I have not yet tried out k9s, nor do I have prometheus installed in my cluster.

I have one feature request, and two gripes :)

Feature Request: Why is there not a big ol' search bar across the top so I can filter resources by label, or by resource name? I might hazard that caching resource names/labels across all object types, and letting users filter those would be a pretty fun feature.

Gripe One: I am on a flaky VPN connection into my cluster, and Lens wholesale drops the UI if the cluster is unresponsive for a second or two until I reconnect.

Gripe Two: Is it weird to call this an "ide" without giving me a YAML editor and file management? I could do everything in the terminal, which is alright I guess, but I figure editing/applying/inspecting all of that in the same app would be pretty chill! I currently use Pycharm to manage my yaml files, bash scripts, and some python code, but it clearly lacks all the k8s goodies Lens has.

I like the tool!

</comment><comment><USER3> This looks cool, I'm not too sure about clicking a button and it installing a seperare prom into the cluster though..

Anyone use it without that feature, or is it really neccessary?

For now, k9s is ok

<comment><USER4> We've been using this at work, and it's been fine without installing anything to the cluster. The only thing missing is the CPU/Memory/Filesystem stats, which is no great loss.

</comment></comment><comment><USER5> [https://k8slens.dev/](https://k8slens.dev/) provides more info.</comment>


Stones Thrown at Giants Just Bounce Off - <AUTHOR> http://blog.itrealm.net/2008/08/stones-thrown-at-giants-just-bounce-off.html

<comment><USER2> Many people wanted Cuil to succeed, and there was obviously alot of interest in it when it launched. It could have gained traction quickly. Cuil's launch wasn't problematic because Google, Yahoo, MSN, etc... are too big. They struggled because their product sucked.</comment>


What Gives Android? - <AUTHOR>

As an avid android user, I want my 4.4 KitKat update  yesterday. How can nearly every iOS update be done on the actual release day while Android takes days to get pushed to mobile devices? <comment><USER2> iOS the software that runs on Apples devices and the "release date" of a new iOS version is the day that iOS is deployed on these devices.

Android is a cross platform technology that companies (including google) use as a fundament to build software that runs on mobile devices. The release date of a new Android version is the day that companies can start making such software.

So these are two different types of technologies, from different companies. It is not surprising that rollouts do not look the same.

It would of course have been possible for Google to wait for the announcement of a new Android version until after they are finished making the software for all their Nexus devices. But I guess that this has little benefits for Google or its customers, so they don't do it.

<comment><AUTHOR> thanks! I've just noticed Google trends in the past to not rollout software to say a nexus 4 the same time as the nexus tablet. full rollouts on all devices would be ideal, but I guess that is asking for alot.</comment></comment>


Heartbleed and Static Analysis - <AUTHOR> http://blog.regehr.org/archives/1125

<comment><USER2> It's interesting that these sorts of problems with memcpy, etc., always boil down to the same thing - C arrays are lowered to simple pointers when they are passed as function arguments. This means they lose their array bounds, frustrating attempts at overflow detection. This has caused endless bugs and endless workaround schemes of varying complexity. I wrote about it as "C's Biggest Mistake" a while back:

[http://www.drdobbs.com/architecture-and-design/cs-biggest- mi...](http://www.drdobbs.com/architecture-and-design/cs-biggest- mistake/228701625)

and offered a simple adjustment to C to fix it. I quote from the article:

All it needs is a little new syntax:

        void foo(char a[..])

meaning an array is passed as a so-called "fat pointer", i.e. a pair consisting of a pointer to the start of the array, and a size_t of the array dimension. Of course, this won't fix any existing code, but it will enable new code to be written correctly and robustly.

<comment><USER3> I've always been curious why C was designed this way, was it thought to offer any advantages or just done to make the compiler writer's job easier?

<comment><USER4> Unix and C were written in an agile fashion. C was a step up from a macro assembler, to be used for writing an operating system. String manipulation is rare in operating systems, certainly in those days (even if you felt a need, you don't have much room to create new strings in if your system and its applications must run in 64 kilobytes of RAM (144 kB for the PDP 11/45; see [http://cva.stanford.edu/classes/cs99s/papers/ritchie- thompso...](http://cva.stanford.edu/classes/cs99s/papers/ritchie-thompson- unix-time-sharing-system.pdf))

The filesystem was about the only place where strings got manipulated and there, filenames were stored in fixed-size (14 bytes) buffers. Since all code could know strings were at most 14 bytes, having a complex type (pointer,length) was deemed a waste of memory and performance there. Everything else followed from that.

</comment></comment></comment><comment><USER5> Static analysis (and other "expensive" techniques) should really be standard on something as critical as OpenSSL.

If I compare the effort we've had to go through building things that are allowed into a banking environment the OpenSSL project is very underfunded. Somehow we have to solve this "tragedy of the commons" problem in open source. OpenSSL must be worth millions of dollars to so many companies, but almost no- one cares about it. It seems very strange that the project is not getting BIG corporate sponsorship, given the value of the data it helps to protect.

<comment><USER6> The problem is that it's worth a relatively small amount of money to each of a huge number of people. We don't have a good way to pool funds for maintaining open source software in such a situation.

Crowdfunding seems to be the obvious solution. But I asked in a previous Heartbleed discussion whether people would be willing to try it for OpenSSL, and got no response.

Someone else commented that maybe Google will take over OpenSSL, or at least become a major contributor to it. It probably is in their interests to make sure this doesn't happen again -- maybe it's worth a large enough amount of money to them to justify dedicating a couple of engineers to it for a couple of years, which is what it seems to need.

</comment></comment><comment><USER7> Presumably, the static analysis won't find this bug because the 'out of bounds' memory that heartbleed accesses isn't necessarily out of bounds?

As has been explained elsewhere, OpenSSL has a wrapper around malloc() and free() so that it re-uses allocations. This means that the 64k of buffer used to send the heartbeat response is data that has never been free()d and has previously been written to by the process.

To make the static analysis spot this kind of thing, I'd guess you'd have to mark/label the OpenSSL allocators as being 'like' malloc. Likewise, valgrind would also not spot the faults without extra knowledge.

</comment><comment><USER8> I presume, from their silence, that competing products also fail to find this bug?

<comment><USER9> There are numerous reasons for this, as Regehr points out. None of these products are "sound". In other words, they aren't guaranteed to find everything. Most of the time, these are tradeoffs to reduce the number of false positives and to speed up the analysis, which come with the risk of false negatives, as is the case here.

<comment><USER10> Indeed, trading off sensitivity for specificity is always a win when trying to sell static analysis to people.

Considering that any non-trivial piece of software has a fairly large number of bugs, you can dial the sensitivity way down and still find some bugs, and the high specificity looks really impressive "Most of what it labelled as bugs really were!"

Consider the hypothetical situation where your piece of software has 40 bugs in it (but you don't know that).

If you see a report of 10 bugs and 6 of them are real, that looks more impressive than a report of 100 bugs where 20 of them are real, despite the fact that the latter actually found more bugs. In fact there is a non-trivial chance that the first 5 or 10 bugs you look at in the latter will be false- positives.

Obviously if your specificity goes too low, the payoff of inspecting each report starts to become questionable, but I think that to successfully market an analysis took, you need to sacrifice more sensitivity for specificity than merited by a rational analysis of the cost/benefit of detecting the bugs early.

</comment></comment></comment><comment><USER11> Very interesting article!

A small typo, there's a sentence after the Frama-C code block that ends _" [...] and that a subsequent memcpy() of the two regions will return zero"_ which should have a s/memcpy/memcmp/. Quite obvious, but in an article such as this it's best to be precise of course.

</comment><comment> Ono-Sendai I think this is a good demonstration of the limitations of static analysis - for a language like C, there will always be bugs that can't be found statically.

<comment><USER12> Unless you're willing to move the burden to the programmer, to prove correctness.

Bugs can always be found statically, but there may always be bugs that evade all the static analysis you happened to do.

</comment></comment><comment><USER13> Also of note was Leslie Lamport's recent talk on how Amazon uses TLA+ to verify algorithms.

<comment><USER14> Googled to no avail... link please?

<comment><USER13> [http://channel9.msdn.com/Events/Build/2014/3-642](http://channel9.msdn.com/Events/Build/2014/3-642)</comment></comment></comment>


Periodic Table of Technology - <AUTHOR> https://curiosity.com/topics/the-periodic-table-of-technology-lays-out-which-advances-are-coming-next-curiosity/ <comment> tony-allan I wanted to read the story but the pop-up subscribe box took forever to dismiss. Didn't bother continuing. FAIL.

<comment><AUTHOR> Doh! That is a definite issue the web. So intrusive. Sorry man.</comment></comment>


Show HN: Customizable Image Zoom with Pure JavaScript - <AUTHOR> http://desmonding.me/zooming/ <comment><USER2> I also made a similar library in TypeScript[1], great work. What's the legacy browser support like on this library?

[1] [https://github.com/MikeBull94/zoom.ts](https://github.com/MikeBull94/zoom.ts)

<comment><AUTHOR> Thanks;) Since CSS Transform is required, it basically means IE 10+...I do not have access to those "legacy browsers", so hopefully I can get feedbacks from other people.

</comment></comment><comment><USER3> [https://github.com/kingdido999/zooming](https://github.com/kingdido999/zooming)</comment>


Nokia set to strike back at Android - <AUTHOR> http://www.ft.com/cms/s/0/bc0e1db8-c027-11df-b77d-00144feab49a.html

<comment><USER2> Nokia reminds me of Nortel as it was imploding in the early 2000s. Nortel also had tens of thousands of employees and huge market share, albeit in a shrinking market. They were both technology standard-bearers in countries not normally known for tech, and a source of national pride.

Nortel's size and market share were always held up to justify why they remained relevant, and to argue that a recovery was perpetually just around the corner. It was hard to believe that a company which was enormously profitable just a few years back could be driven to bankruptcy so quickly through poor products and abysmal management.

</comment><comment><USER3> Gamble,

you are so wrong. I was working for Carly at Lucent in '99. Both Lucent and Nortel was showing gigantic growth with huge sales and profits figures but it was all a ponzi scheme.

They were selling to all these CLECs and vendor financing the CLECs. That means while Nortel is selling a lot of stuff, no money is coming in because Nortel is financing all the sales itself.When the dotcom boom crashed, the CLECs run out ot capital and couldn't pay back Nortel and Lucent. Both companies have to take huge write-offs and face huge cash crunches.

Compare that to Nokia. Nokia's in its last quarter generated EUR 1 billion of free cashflow. Just for comparison, Google generated $2.35 billion in free cashflow.

</comment><comment><USER4> Paywall... anyone got the article without it?

<comment><AUTHOR> Registration is free</comment></comment>


GoAWK: an AWK interpreter written in Go - <AUTHOR> https://github.com/benhoyt/goawk <comment><USER2> I would love to see support for calling out into go functions. The go stdlib so often has good implementations of functionality in places where things like the python stdlib doesn't.

There are some obvious questions around calling conventions and error handling, method invocation, etc. but nothing there seems totally insurmountable. Having a compliant implementation as a jumping off point is a great start.

Looking at the interp internals, the representation of function call expressions might need a little bit more structure to pull this off (rather than just a big switch for the awk builtins and user calls as just more awk instructions plopped inline). Furthermore there are questions about how exactly to represent go objects but I suspect with some boxing it could be made relatively ergonomic.

<comment><USER3> That's a neat idea! (Though not necessarily in the spirit of AWK as a simple text processing language. :-) I _started_ playing with something like this in a previous language interpreter I made in Go ([https://github.com/benhoyt/littlelang/blob/master/interprete...](https://github.com/benhoyt/littlelang/blob/master/interpreter/native.go)). It's definitely possible to do with the reflect package, though it wouldn't be trivial to do a full implementation.

</comment></comment><comment><USER4> This is really cool! It's rare to see new implementations of awk these days. Bonus points for running it through the nawk test suite.

In my opinion /usr/bin/awk is a thing of beauty. Certainly it's the most usable out of the trifecta of scripting languages that are mandated by POSIX.

(There's /bin/sh, where merely _using_ variables can quickly turn into a quoting nightmare. But the true nightmare material is /usr/bin/sed, which has actually been shown [1] to be a Turing complete language!)

[1] [http://www.catonmat.net/ftp/sed/turing.txt](http://www.catonmat.net/ftp/sed/turing.txt)

<comment><USER5> Hmm… you missed ed, which is apparently Turing complete as well, at least arguably [1]. And apparently newer versions of POSIX also mandate m4…

[1] [https://nixwindows.wordpress.com/2018/03/13/ed1-is-turing- co...](https://nixwindows.wordpress.com/2018/03/13/ed1-is-turing-complete/)

</comment></comment><comment><USER6> Looks like a really good project, especially with the collection of test- files.

I had fun fuzzing the "real" awk, finding a couple of trivial segfaults. If you've not already experimented with fuzzing I'd recommend it - I found a few minor issues in my own simple-interpreter, and language, via feeding them malformed scripts.

</comment><comment><USER7> I've been playing with writing a Python-based AWK-inspired library over the last couple weeks. This isn't an implementation of AWK like here, but a Python interpretation of "If I wanted to do the sort of things that AWK is good at, in Python, what would that look like?"

For example, to extract and add line numbers to SQL table definitions:

      t = gawk.Gawk(sys.stdin)
      t.context.data = ''
      @t.range(r'CREATE TABLE', r');')
      def line(context, line):
          context.data += (('line %d:' % context.range.line_number) + line)
          if context.range.is_last_line:
              print(context.data)
              context.data = ''
      t.run()

[https://github.com/linsomniac/gawk](https://github.com/linsomniac/gawk)

I've used AWK for close to 30 years, but I've never achieved or maintained any level of proficiency at it. I pretty much just use it for "{ print $1, $3 }" in a filter or the like. Every time I try to do something more complicated I spend an hour or more futzing around with it and more often than not getting to: almost but not quite" where I want to be. This is, of course, a me failing not an awk failing.

But it's left me wanting something that would make doing awk-like processes easy in Python, which I'm very proficient at.

I ended up using the name "gawk" because it's an English word and nods to the AWK inspiration, but then I remembered GnuAWK so I'll probably rename it.

<comment><USER8> Yeah Gawk is Gnu's Awk, its a well established name.

Your code snippet does showcase Awk's utility. It brutally cuts through all the ceremony around reading and iterating over lines.

</comment></comment><comment><USER9> This is so cool! I have been calling out to GNU Awk in like 50% of our SciPipe workflow tasks lately (See e.g. [1]) ... now I should be able to keep it all inside Go/SciPipe.

[1] [https://github.com/pharmbio/ptp- project/blob/master/exp/2018...](https://github.com/pharmbio/ptp- project/blob/master/exp/20180426-wo-drugbank/wo_drugbank_wf.go#L177-L329)

</comment><comment><USER10> Haven't tried it yet but my favorite part is that it's embeddable in your own programs.

<comment><USER8> Just in case it's useful, you can embed/extend awka or mawk or rather the library they are based on. Gawk allows extending it but the interface is not pretty.

</comment></comment><comment><USER11> I am a big fan of awk. I find it very beautiful. I admire the authors of awk so much. When I read the awk programming book, I find that has such clarity of thought. Kudos to you for your implementation!

<comment> another-cuppa I'm so glad I spent about twenty minutes to learn awk several years ago. That's really all it takes to learn it and you get incredible power.

</comment></comment><comment><USER12> Ha. I was just thinking how useful it would be to have the awk programming language available in a tool that natively understood csv files. Suddenly that seems a lot more doable!

<comment><USER3> Interesting point. I've though that AWK should have a mode where it does proper quote parsing of CSV files. Maybe I'll add a -csv option for that (or just have it do it automatically when the FS is ',' \-- though that wouldn't be backwards compatible).

<comment><USER13> You probably know it already, but in case not, the CSV format is not fully standardized, and so there are variations. So you might have to handle those to provide better support of the feature, if you implement it.

[https://en.wikipedia.org/wiki/Comma- separated_values](https://en.wikipedia.org/wiki/Comma-separated_values)

For example, csv.reader in Python's csv module in the stdlib, has a dialect argument, due to this.

[https://docs.python.org/2/library/csv.html](https://docs.python.org/2/library/csv.html)

[https://docs.python.org/3/library/csv.html](https://docs.python.org/3/library/csv.html)

</comment></comment></comment><comment><USER8> Ah! This makes me wish for an awk with first class channels and loadable modules. Gawk does allow talking over sockets but this would have been so much sweeter.

One thing hope this implementation remedies is the absence of a linear time string concatenation in awk. Awk has split but no join. Only way I know is to iteratively join two strings which has a quadratic running time.

<comment><USER3> Huh, interesting. So one thing I haven't focused on much yet is performance. It is slightly faster than "one true awk" on large inputs with very simple programs, so I'm guessing Go's I/O speed is pretty good, but the actual interpreter itself is significantly slower than awk's as yet -- hoping to work on that soon.

I haven't looked at linear-time string concat. Interesting point -- I'll put it on my TODO list. Though I think instead of string building you could simply use printf to write output and that would be linear time.

<comment><USER4> Yes, if the "destination" is stdout (or a pipe/file) then the obvious loop works just fine:

      function join(ARRAY) {
        for (i=0; i in ARRAY; i++) printf "%s", ARRAY[i];
      }

But if you need the result back as a string for further processing, the obvious methods are not linear:

      function join(ARRAY,_s) {
        for (i=0; i in ARRAY; i++) _s=_s ARRAY[i];
        return _s;
      }

      # try to be clever and join 2 items at the same time
      function join2(ARRAY,_s) {
        for (i=0; i in ARRAY; i+=2)
          _s=sprintf("%s%s%s",_s,ARRAY[i],ARRAY[i+1]);
        return _s;
      }

I for one definitely miss having a join() function, and it seems odd that this natural complement to the split() function was never implemented...

</comment></comment></comment><comment> yjftsjthsd-h This is beautiful. I really love that awk has numerous implementations running around.

</comment><comment><USER14> Great work. Reimplementing a practical and useful mini-language in another language is always a useful exercise.

I'm curious though, why code the lexer and parser by hand? What's the state of lexing/parsing in the Go world?

<comment><USER3> Couple of reasons. 1) Because I'm a fan of few dependencies and lex/yacc are non-Go dependencies. 2) I've never used them and it'd probably take me longer to learn them than hand-write a lexer and parser. 3) Writing a lexer is trivial, and writing a recursive-descent parser is fun and not that hard.

As to the state of lexing/parsing in the Go world. There's a simple scanner (text/scanner) in the stdlib. I've run across this quite neat parser library that's based off structs and tags: [https://github.com/alecthomas/participle](https://github.com/alecthomas/participle) ... but I really don't know the landscape very well.

</comment></comment><comment><USER15> I feel let down, GAWK would have been a great name.

<comment><USER16> Since the mascot is a gopher... GOPHAWK.

<comment><USER17> You could try to make GOPHAWK yourself.</comment></comment></comment>


Ask HN: From which date on do you have to add (2018) to the title? - <AUTHOR> This is a very important question. <comment><USER2> Usually the tag is only absolutely necessary when you're re-posting something that's already on HN and feel that enough time has passed that the link merits another discussion. If it's from 2018 but it's never been posted before, it doesn't really matter.

</comment><comment><USER3> 01/01/2019

</comment><comment><USER4> Anecdotally, most posts on HN refer to content created in the last ~ 2 weeks.

I would expect to start seeing people add (2018) once we hit February.</comment>


Beating the Arc Challenge in Haskell - <AUTHOR> http://gist.github.com/260052 <comment><USER3> Very nice work, and the code is clear and beautiful to a Haskell illiterate such as myself. But I have a problem. If your solution involves writing a library and importing it, have you really written a program with "only 13 nodes total"? If the answer is yes, then why can't I just put _that_ program into a library, call it from a new program with only 1 or 2 nodes, and say "look at the size of this!"?

It's not obvious what counts as "the language" and what as "a library". Is printf part of C?

I suppose one could argue that if a library is general enough to make an entire class of programs shorter, as opposed to a few specific programs, then it gets to count as "the language". But that doesn't resolve the question so much as reword it.

Anyway, this is probably more of an objection to the original challenge than it is to this lovely Haskell code.

<comment><USER4> Yes, I had the same problem with the initial challenge. I could patch virtually and programming language implementation such that it would be possible to write a 5 line web app, but that doesn't really say much about the language.

<comment><USER5> The criterion for tests like this is whether you're relying on stuff you'd expect any language already to have, or not. Features fall on a continuum in that respect. You'd expect any language to be able to add two numbers; you couldn't expect a language to have a library for parsing some format you'd just invented; other features fall somewhere between these extremes.

I honestly didn't think any of the things I did in the original Arc challenge required features that wouldn't already have existed in a language that had been used for web programming. All it does is ask the user to input something, then show it on another page. It's practically the hello world of stateful web apps. It seemed reasonable to expect any language that had been used for web apps would already have had convenient libraries for doing such basic things.

<comment><USER4> I did a quick Ruby version just to serve a basis for my point:

<http://pastie.org/750268>

The reason I posted that was precisely because of the point where Arc shines: no inline HTML. But in practice, I want to avoid putting my presentation logic inline with my programming logic anyway.

And I fear that's the problem with the challenge; it seems to be highlighting the wrong kind of simplicity. I could add a few utility functions to make Ruby able to generate that HTML with a tiny amount of code, but I wouldn't ever actually use those functions in a real program.

Edit: Out of curiosity, I just implemented a pseudo-concision-obsessive "library" so see how a Ruby version might look:

<http://pastie.org/750269>

I'll note that Rails _does_ have things like those that are often used templates.

Another edit: Moved code samples to pastie for readability.

<comment><USER6> The other matter of style is whether the order of the code matches the order in which the user interacts with it.

The three steps in user experience order:

      first:  a form to accept input,
      second: a link to click
      third:  a printout of the input

Here are the orders used in code:

      Ruby+sinatra:   third, first, second
      arc version 1:  third, second, first (original)
      arc version 2:  second, third, first (May 2009)
      Haskell+custom: first, second, third

Interesting results, I think Haskell wins here. Though technically it fails the challenge (the arc version 2 example fails too) since the supporting library was written after the challenge was considered by the author of the example.

<comment><USER7> The Perl+Continuity solution also uses "first, second & third" style and does it nicely without sessions and adheres to challenge by being an established library: <http://arclanguage.org/item?id=805>

Here is a version using the HTML::AsSubs module:

        use Continuity;
        use HTML::AsSubs;
        Continuity->new->loop; # This starts the webserver

        sub main {
            my $request = shift;
            my $p = 'foo';

            $request->print( aform( $p )->as_HTML );
            my $foo = $request->next->param( $p );
            $request->print( w_link()->as_HTML );
            $request->next->print( "You said: $foo" );
        }

        sub aform {
            form(
                input( { type => 'text', name => $_[0] } ),
                input( { type => 'submit'} )
            );
        }

        sub w_link { a( { href => '.' }, 'Click Here' ) }

</comment></comment></comment></comment></comment></comment><comment><USER8> I'm not sure haskell won here. I think maybe programming with monads won.

No, really. Web programming and continuation monads seem to have really it it off together. When you add them to another language, you get similar results (e.g., <http://intensivesystems.net/tutorials/web_sessions.html>).

<comment><USER9> For pure shortness, I think HTML + JavaScript won here:

<http://arclanguage.org/item?id=979>

The Haskell example is interesting, though, because it shows a working webapp in Haskell, and it's not even that scary.

<comment><USER8> Except that these two code examples do two very different things. The Haskell version actually uses a continuation to run multiple requests The Javascript version modifies local mutable state. The Haskell version does it via server interaction, which makes it much more useful to modern web apps.

</comment></comment></comment><comment><USER10> Haskell is that rare beast: a language that Lispers may envy.

<comment><USER11> Isn't this problematic? Lispers fling around lots of superlatives, as if their favorite language will never be dethroned from its position atop the language kingdom. And they always felt justified about this.

Shouldn't we confront them about this?

I do think there's a science of programming languages which can inform us how to best design the tools we use. Isn't it just possible that these Hindley- Milner languages are the next step in the progression that LISP started?

Look at the transition from Newtonian to Einsteinian mechanics. They were both great at the time of release, but one is clearly a step forward. The former is usually embeddable within the latter, but edge cases in the former don't quite work the same in the latter. And some cases in the former are just downright illegal in the latter. And unfortunately, the latter is a lot more complex for the power users. But, the latter is more expressive, teaches us more about the world... and enables completely new possibilities like nuclear fusion/fission.

This is like the difference between dynamic and static typing. Dynamic typing is certainly embeddable within Haskell. Just define a data type Dyn which is the sum of types Int, String, Float, [Dyn], and Dyn -> Dyn. You will see how much LISP is possible without much added syntactic cruft. But Haskell users don't need and want to operate in this way, because they can leverage the benefits of static typing.

Remember, these things don't come from whims of clever people or corporations. LISP and Haskell both come from research of very fundamental ideas. his is much more like real science than social science. And we should keep our eyes open to the future of this field, instead of proclaiming that we're finally done with our "100 year language".

<comment><USER12> There isn't some unified continuum of power in languages, though. There are some problems for which a H-M-ish type system is a tremendous advantage, and there are others for which it gets in the way. Same with lazy evaluation - <USER2> can make a problem much simpler _or_ much harder to reason about. Sometimes using a language built from the ground up to support distributed and concurrent programming (e.g. Erlang), unification and backtracking (Prolog), or constraint programming is the right tool for the job. Sometimes being able to work close to the Unix kernel or run on an embedded system without an OS is more important.

Languages are a means to an end -- they help manage complexity while solving a problem. There's value in being able to extend a language's semantics to support a superset of several major language families, but unless handled very carefully, it can turn the host language into a sprawling mess in the process.

<comment><USER13> That's why we need a language with a scalable type system that supports both static and dynamic typing. (Actually VB had that years ago with Variant data types, but the rest of the type system was horrible.)

<comment><USER12> I suspect it might be fruitful to do static analysis for constraints, with type identity as just one attribute. While inferring that X is an int is useful, inferring that it's an int which is always positive and less than 256 would allow a lot of other optimizations. Even if an inference engine can't completely prove something is always a (string * int list) pair, it would still be useful to know that it's (string * (either int or double) list), and the list cannot be empty. Etc. Type declarations or inference are a bit all- or-nothing, and I think being able to read through the properties that the compiler could infer (or at least confirm) would help find bugs, suggest optimizations, etc.

If I ever get past the first dozen projects on my list, I'd like to write a compiler for a dialect of Prolog designed with constraint analysis in mind. (I also need to read more about what's already been tried, first - this is just me being curious about how far constraint analysis could go and wondering out loud.) It would be tricky, but more feasible with Prolog-like semantics than in, say, C.

</comment></comment></comment></comment></comment><comment><AUTHOR> By the way, I would be really interested in Arc's solution to the second program I've shown.

</comment><comment><USER14> I truly don't get what this is trying to demonstrate?

I mean, I could write a one word web app:

        dwim

(Details of the standard library implementation are left as an exercise.)

</comment><comment><USER15> I'm a bit late here, but if you want to really smash the challenge, you can use Lisp style metaprogramming with my Hasp program. Something like this is possible (10 nodes):

        def arc
          with->>= name input
            link "click here"
            display++ "you said: " name

</comment><comment><USER16> I am trying to run the haskell code in Ubuntu 9.10 with ghc6, but:

      Failed to load interface for `Control.Applicative.Error':
          locations searched:
            Control/Applicative/Error.hi
            Control/Applicative/Error.hi-boot

Which library am I missing? apt-file search for Control/Applicative/Error.hi yielded none.

Help appreciated from all HN-reading haskell'ers.

<comment><AUTHOR> do a "cabal install applicative-extras", that should help.</comment></comment>


All the ways America has chosen to execute people since 1776 - <AUTHOR> http://qz.com/346332/all-the-ways-america-has-chosen-to-execute-people-since-1776/

<comment><USER2> Grim stuff and morbidly interesting, though the article was a little light on exposition.

Things I noticed: one lethal injection around 1820; an 'other' in the 1950's (what was that?), a peak in the state's blood thirst in the 1930's, and a moratorium in the '70s I didn't know about.

<comment><USER3> Would also be interested to know more about the one in 1820 and 1950. There's nothing on the lethal injection wikipedia page.</comment></comment>


Show HN: Nestor – Your team's intelligent assistant on Slack - <AUTHOR> https://www.asknestor.me/join/hacker-news <comment><USER2> I really like the "The Office" chat usage example. That was a nice touch.

<comment><USER3> I don't see that example, where did you find it?

<comment><USER2> Should be on the right side of the page.

<comment><USER3> Ah yes! LOL, thanks.

</comment></comment></comment></comment><comment> SPD-13 Can I be assured that if I tell this bot to get lost he won't take it literally and hide itself among all my other slackbots?

<comment><AUTHOR> yes nestor doesn't take insults personally.

</comment></comment><comment><USER4> Is there a reason you guys decided to have it "listen" to all messages as opposed to requiring a /slash command (which would then only send /slash messages to your servers?)

<comment><USER5> _" Your messages are not stored on Ask Nestor's servers and actions are only taken on direct messages to Nestorbot and messages that include Nestorbot."_

You have to DM or @ the bot.

</comment></comment><comment><USER6> What does Nestor offer over Hubot [+]?

[+] [https://hubot.github.com/](https://hubot.github.com/)

<comment><AUTHOR> * Natural Language instructions -- no need to remember commands, just speak to it like you would to a human. * Easier to integrate new services * No need to maintain servers

<comment><USER6> Thank you!

<comment><USER7> And it helps you cut down your to-do list. ;)

</comment></comment></comment></comment><comment><USER8> You guys just sent me like 100k invites lol

<comment><AUTHOR> oh is it when you signed in here: [https://help.asknestor.me](https://help.asknestor.me) ?

(edit: I'm using the slackin app: [https://github.com/rauchg/slackin](https://github.com/rauchg/slackin) and looking into what happened)

</comment></comment><comment><USER9> Looks cool. We're using Hubot more and more, but this does look like an easier, friendlier alternative.

What's the pricing model? Is it hosted? How extensible / hackable is it? Who's behind it? Would be great to get a bit more detailed info. I couldn't find much info on the page.

<comment><AUTHOR> I'm one of the makers of Nestor (previously co-founded @nitrousio).

\- Pricing model will be based on number of integrations that you have (there will be some integrations that are free to use: yelp, uber, etc.) \- API is planned so that you can add your own services.

Join Nestor's Slack room [https://help.asknestor.me](https://help.asknestor.me) for more info!

Edit: PS - If you'd like to try out Nestor without having to add it to your team, you can join this Slack: [https://help.asknestor.me](https://help.asknestor.me)

<comment><USER10> Looks pretty cool! You might want to check out the calendar integration.

[http://i.imgur.com/iSagoii.png](http://i.imgur.com/iSagoii.png)

I connected my Google Calendar, but it doesn't seem to work.

<comment><AUTHOR> thanks for the report, looking into it!

edit: you can join the Nestor Slack: [https://help.asknestor.me](https://help.asknestor.me) if you need more assistance.

<comment><USER11> [https://help.asknestor.me/](https://help.asknestor.me/) is erroring for me (Application Error)

<comment><AUTHOR> yup i was using slackin ([https://github.com/rauchg/slackin](https://github.com/rauchg/slackin)) and i think there's a bug that caused it to send shitloads of emails to users so i've disabled it.

please email firstname.lastname@example.com for an invite to the Nestor slack.

</comment></comment></comment></comment></comment></comment><comment><USER12> Neat. Would love to hear more about whether you decided to roll your own NLP or use an API.

</comment><comment><USER13> Great tool guys. Also named as me hahahaha hope the best for you! Good luck on the launch :)

</comment><comment><USER14> it looks like the stripe integration is searching in the year 2016 - [http://cl.ly/image/3p1l1m2Z2b41](http://cl.ly/image/3p1l1m2Z2b41)

something you may want to take a look at

<comment><AUTHOR> thanks will look into it! pls join the nestor slack at [https://help.asknestor.me](https://help.asknestor.me) if you need more help.

<comment><AUTHOR> i was using slackin ([https://github.com/rauchg/slackin](https://github.com/rauchg/slackin)) and i think there's a bug that caused it to send shitloads of emails to users so i've disabled it.

please email email@example.com for an invite to the Nestor slack.

<comment><USER15> Got a DNS mail returned error.

</comment></comment></comment></comment><comment><USER16> is Nestor named after the butler in the Tintin stories?

<comment><AUTHOR> huge fan of the tintin comics :)

<comment><USER16> Then you should mention it somewhere.

</comment></comment></comment><comment><USER17> How are you going to monetize this?</comment>


Introducing SPECS – Design/Development Collaboration Tool by CanvasFlip - <AUTHOR> https://www.canvasflip.com/specs-the-design-hand-off.php <comment><AUTHOR> Hey Guys, I'm vipul - one of the co founders at CanvasFlip. we just launched our design/development collaboration tool. Waiting for you guys to try this out and share your feedback.

Cheers, VM</comment>


Using Hacker News for Blog Comments - <AUTHOR> http://simeramov.com/2010-06-hn

<comment><AUTHOR> Initially I decided to go without comments. I haven't considered Disqus in the first place as it's too much everything for me so I would have to go and hide various stuff via CSS (and keep it updated). Also I am not a fan of JavaScript loading after the fact. I also generally like blogs without comments and didn't want them on my blog.

But then it hit me, why not use HN for comments? Everything clicked in and I decided to go that route. At least experimentally for now.

Two downsides:

1\. One has to have an account here. This is partially mitigated by having the reply box available even if you are not logged in or registered, encouraging to comment/log in/open an account.

2\. One has to self-submit.

Additional benefit is that HN contains a target audience I am interested in, thus making comments better but also forcing me to post better stuff.

</comment><comment><USER2> +1 - My playflow at the moment is to follow the HN rss in google reader, open the comments in one tab and the article in another, because the comments here tend to be way more interesting than the comments there.

Re: the comment about Disqus, I wonder if there is an integration of some sort to be had - Disqus really, really rocks, but the community on HN is better and more established than the commenters on any given blog.

</comment><comment><USER3> I don't think it's likely that the creators of HN would support this, as it would conflict with a startup Y Combinator invested in (Disqus, <http://disqus.com/about/>), whose _sole_ purpose is to provide coment system for sites and blogs. Of course, HN creators also founded YC, hence the conflict.

</comment><comment><USER4> I would like to mix in HN comments, but I don't like that people would have to register to comment. So I guess I would still like to have another type of comment available.

</comment><comment><USER5> I like it. In fact, I confess that lately I've been thinking of HN as Daring Fireball's comment feed.

<comment><USER6> Me too. I think pg already does this as well -- he used to for reddit, which was how I found reddit to begin with.

The only problem is that for daring fireball, you can be sure that someone will submit. If you do this for your own blog, you are forced to self-submit for comments.

<comment><USER7> Might just be my opinion, but I think we should get over the "shame" in self- submitting.

Ideally I think the author SHOULD self-submit. I find it odd that another person can gain karma for the actual author's work.

</comment></comment></comment><comment><USER8> I think this essentially what has started to happen. I would like to do this myself, at least.</comment>


Poll: Business People Say Twitter More Important Than LinkedIn - <AUTHOR> http://www.readwriteweb.com/archives/poll_business_people_say_twitter_more_important_th.php <comment><USER2> The inherent flaw in this type of poll is that it relies on the bias of those polled and not on their actual results. So a question like "Where did you get the most customers from last month" would get a result based on the person's actual experience.

While a question such as "what is the most important platform" asks them to make a judgement which can be based on all kinds of biases. Twitter, for example, has a massive marketing campaign right now with all the celebrity attention. So it will be on people's mind.

But that doesn't necessarily mean anything in regards to it's business importance.

I know some will say people talking about a technology makes it important but that's just not true. To give a non-tech example every business seminar I've been to in the last 5 years has brought up Six Sigma. But I've rarely if ever seen it actually implemented.

<comment><USER3> _So a question like "Where did you get the most customers from last month" would get a result based on the person's actual experience._

I think the honest answer at far too many companies is "I don't know because either we don't track that or nobody tells me about it", which would probably get coded on the poll as "Well, I think it is conferences, so I'm going to pick conferences".

</comment></comment><comment><USER4> Only because twitter has less upkeep (your twitter profile is never 68% complete) and because twitter lets you get the word out without having to correspond with N people 1:1.

Twitter is a megaphone, LinkedIn is an interview booth.

<comment><USER5> I figured it was because nobody's hiring right now.

</comment></comment><comment><USER6> Highly misleading topic line here, and to a lesser degree on readwriteweb.com. The actual question was

> "What is the most important new platform for brands to master?"

The question implies a more public-facing concern than what LinkedIn is intended to do.

</comment><comment><USER7> Wisdom of Crowds != Wisdom of Intellectuals</comment>


Incanter (Clojure) cheat sheet - <AUTHOR> http://incanter.wordpress.com/2009/10/22/incanter-cheat-sheet/

<comment><AUTHOR> Incanter is a R-like library for Clojure.</comment>


OpenOffice could shutter due to lack of volunteer developers - <AUTHOR> https://www.engadget.com/2016/09/04/openoffice-retirement-plan/ <comment><USER2> See also: [https://news.ycombinator.com/item?id=12411747](https://news.ycombinator.com/item?id=12411747)

</comment><comment><USER3> It is "Apache OpenOffice", not plain OpenOffice.

I hope they are honest enough to hand over the assets to the Document Foundation.</comment>


How I designed my own job and life - <AUTHOR> http://www.perhakansson.com/post/23560977985/for-the-past-few-years-i-have?84325d60

<comment><USER2> This is pure fluff</comment>


For 15 Years, New Orleans Was Divided into Three Separate Cities - <AUTHOR> http://www.atlasobscura.com/articles/for-15-years-new-orleans-was-divided-into-three-separate-cities <comment><USER2> I am unfamiliar with New Orleans' history and am confused by the article: "The Second Municipality, which the Americans controlled..." and "The First Municipality included all of the French Quarter..."

Then I read "In the First Municipality, English was the language of commerce and government; in the other two, French dominated."

Did the Second Municipality, American-controlled, have the French language dominate? Or is one of the preceding sets of statements off a bit?

<comment><USER3> The second set of statements is in error...it should read "In the Second Municipality, English...".

<comment><USER2> Thanks.

</comment></comment></comment><comment><USER4> A quirk resulting from this is that New Orleanians refer to medians as "neutral grounds," as there was a median separating the american sector from the french quarter where trade between the two occured(this is now canal st.).

<comment><USER5> Isn't "neutral ground" for "median" a British usage?

<comment><USER6> I'm British and I didn't recognise either term. I had to head for Wikipedia to translate to British English ("central reservation").

<comment><USER5> I was wrong. My thinking seems to have been "I've seen that before; the British have a different term; ergo it's British." In fact, "neutral ground" was familiar from Walker Percy's novel _The Moviegoer_ , which is set in New Orleans.

</comment></comment></comment></comment><comment><USER7> Good to see the verb "whap" getting an outing. Is that a word with which American readers are familiar?

<comment><USER8> In the south it is a colloquialism used by older generations. I heard it all the time when I was a child, but it has fallen out of favor (even in the south) with the rise of TV English.

</comment></comment><comment><USER9> I don't know if I should be impressed by their ingenuity or disgusted by their reasoning.

<comment><USER10> Divide & Conquer is an old trick, no ingenuity there.

</comment></comment><comment><USER11> #maps</comment>


Hundreds of thousands still using breached usernames and passwords - <AUTHOR> https://secalerts.co/article/hundreds-of-thousands-still-using-breached-usernames-and-passwords/e1412d1b <comment><USER2> So, the problem here is that many of these tools just look to see if you're using an address that is known to have been compromised on that site. But I changed my password on that site, so I'm no longer vulnerable to that compromise. But the tool just sees my address and doesn't know of or acknowledge the fact that I have already remediate that one.

As for using an insecure password, I fix those as I come across them, and store the new fixed password in my secure password manager. But just because I happen to have used a password in the past on a given site that is now known to be weak, doesn't mean that password on that site has actually been compromised — the password is just weak and needs to be replaced.

These tools need to get better at detecting the real compromise and the remediation thereof, and not just crying wolf over the fact that my e-mail address on that site may have lead attackers to a password that I once used long ago, but which I haven't used anywhere else.</comment>


Jsdom 4.0 – JavaScript standards-compliant DOM for io.js - <AUTHOR> https://github.com/tmpvar/jsdom/blob/master/Changelog.md#400

<comment><USER2> > Note that as of this release, jsdom no longer works with Node.js™, and > instead requires io.js. You are still welcome to install a release in the > 3.x series if you are stuck on legacy technology like Node.js™.

Ouch.

I'm glad there was a semver update, but I imagine projects with more than a few dependencies will start feeling the effects of this fragmentation soon...

<comment><USER3> I wonder if some sort of compatibility shim library will eventually pop up for Node.js to combat this issue.

<comment><USER4> Why bother with a compatibility shim for legacy versions of V8 instead of just updating to stable V8?</comment></comment></comment>


Video review: Google's Nexus 5X is a new twist on an old success - <AUTHOR> http://www.networkworld.com/article/2998186/mobile-wireless/video-review-google-nexus-5x-android-6-smartphone.html <comment><AUTHOR> The Nexus 5X is a capable successor that will please people looking for a mid- priced smartphone with a great camera and the latest version of Android. Buying a Nexus device brings the added benefit of regular over-the-air updates from Google.</comment>


The Crankiest Group in Cyberspace - <AUTHOR> https://www.echonyc.com/about/ <comment><USER2> Found a write-up from 2017 in The Atlantic:

[https://www.theatlantic.com/technology/archive/2017/05/echo-...](https://www.theatlantic.com/technology/archive/2017/05/echo- growing-old-online/524577/)

> In the intervening decades, Echo has never changed its primitive interface. > To navigate within it, you can't just click on links, but have to type in > Echo-specific commands: j cen; l a m; sh 123. You don't access it in your > browser, but through a telnet client, a program that allows you to access > the command line interface of another computer. It doesn't support images or > sound, much less video. It doesn't even have colors. It's text-only, and > even editing text is a time-consuming pain in the ass.

</comment><comment><USER3> >"The conversations on Echo are not on the web (yet). Once you have a userid (also called a login id) and a password, you must either dial us up directly, or telnet to us from anywhere in the world on the internet. When you open an account, we'll send you instructions in the mail (postal mail). This will take a couple of days."

</comment><comment><USER4> Oh, this is lovely. It's what we had before Dejanews and Altavista and Google came along and indexed everyone for free-text search. You could have conversations and reasonably expect that only people looking up the _forum topic_ would then be able to see the conversations you'd had. This is dreamy.

I hope they never allow web (Google etc) search indexing of any kind, it would destroy them utterly.

</comment><comment><USER5> I thought _we_ were the crankiest group in cyberspace.

Anyway, how NYC-centric is it?

</comment><comment><USER6> > Copyright 1998-2001,

Sounds like an alt.flame offshoot going back to BBS tech

<comment><USER7> A fish, a gun, and a smoking barrel.

</comment></comment><comment><USER8> I miss suck.com

<comment><USER7> A fish, a gun, and a smoking barrel.

</comment></comment><comment><USER9> is there a remotely compelling reason for me to trust them with my physical address?

<comment><USER10> if only there was some way to receive mail without providing your physical address. perhaps some sort of numbered "box" at the post office that could receive mail for you to retrieve at your convenience.

<comment><USER11> Will the postal services deliver to _just_ a PO Box number, or do they require a name? Because giving out a name can be rather threatening, especially if you live in a small town or there's someone in the group that's near you.

<comment><USER5> Technically, name must match a name on the account.

</comment></comment></comment></comment><comment><USER12> Wait, the crankiest group in Cyberspace isn't Star Wars fans?</comment>


Aggressively Stupid: The Story Behind After Dark (2007) - <AUTHOR> https://lowendmac.com/2007/aggressively-stupid-the-story-behind-after-dark/ <comment><USER2> This program was so popular, references to it were made on _Beverly Hills, 90210_. When the "Peach Pit After Dark" nightclub opened, the wordmark above the nightclub entrance was the same as that of the screen saver After Dark. There was also a flying toaster on the door, and some of the disco lights had flying toaster stencil masks in front of them, projecting toasters onto the dancefloor.

It was a very rare instance of a real-world computer culture reference appearing in something as aggressively pop culture as 90210.

</comment><comment><USER3> A thread from 2017: [https://news.ycombinator.com/item?id=14900647](https://news.ycombinator.com/item?id=14900647)

2014: [https://news.ycombinator.com/item?id=7702105](https://news.ycombinator.com/item?id=7702105)

A bit from 2010: [https://news.ycombinator.com/item?id=1338175](https://news.ycombinator.com/item?id=1338175)

(These links are for the curious. Reposts are ok after a year or so: [https://news.ycombinator.com/newsfaq.html](https://news.ycombinator.com/newsfaq.html))

</comment><comment><USER4> I have my own fond memories of After Dark, especially the Satori module. The colored whorls Satori produced were so aesthetically pleasing, and I do think part of its durability would be the "organic" quality of the render, a quality probably partly due to the excellence of After Dark's randomization.

Jack Eastman attributes quite a bit of After Dark's success among the competition due to the team's striving for high quality randomness:

> The other thing we were careful to do was not to put the toasters on a track > and repeat the show. Random numbers were always important from that point > on. I had done Monte Carlo simulations in my physics work and knew how to > produce random numbers in various distributions. I think that was an > important idea – we had these little movies, but you couldn't predict them.

> Competitors didn't have that insight. With After Dark you could just zone > out and watch for a long time. Plus it was really a screen saver – it > wouldn't do to have images sitting in one place or in repeating patterns. > [0]

[0] [https://lowendmac.com/2007/aggressively-stupid-the-story- beh...](https://lowendmac.com/2007/aggressively-stupid-the-story-behind-after- dark/)

<comment><USER5> Example of even how the most absurd successes often have nailed the important details really well.

</comment></comment><comment><USER6> I didn't realize that implementing a screen saver for Mac back then required such low-level hacking. I guess that shouldn't be surprising, if the OS didn't have built-in support for screen savers.

The interview briefly mentions that the same company, Berkeley Systems, developed a screen magnifier for people with low vision. They also developed a screen reader, OutSpoken [1], for blind people. Utilities like those also required low-level hacking.

[1]: [https://en.wikipedia.org/wiki/OutSpoken](https://en.wikipedia.org/wiki/OutSpoken)

</comment><comment><USER7> Run a mac emulator to save your screen in your browser: [https://archive.org/details/AfterDark2](https://archive.org/details/AfterDark2)

</comment><comment><USER8> another screen saver was Johnny Castaway. Was an IT guy at a company in the late 90s and this screen saver was on many workstations where I worked. Was always intriguing to see what Johnny would be into next...

[https://www.youtube.com/watch?v=r10WuRo7c50](https://www.youtube.com/watch?v=r10WuRo7c50)

<comment><USER9> Special dates would do certain things. Occasionally he'd leave the island.

</comment></comment><comment><USER10> I miss Lunatic Fringe. Simple enough to be learned quickly but interesting enough to not get bored.

<comment><USER11> Was reminded of this game while reading the article but was racking my brain to remember the name. Thanks for mentioning it, fond memories.

</comment></comment><comment><USER12> Every time I opened a network share or similar "slow" device on Windows XP's File Explorer (alas not in Windows 7 or 10) I'm reminded of After Dark, since that sweeping flashlight (that goes left/right) is more or less exactly copied from Disney Mickey Mouse something/screensaver which was a clone of After Dark.

</comment><comment><USER13> Screen savers were such a fun thing, two decades ago. It feels like all of the fun has been crushed out of computing these days.

Why so serious?

<comment><USER14> I am starting think it is the money that strips all of the fun out of it. Most software developers are not developing for fun these days. They are interchangeable cogs developing CRUD for soulless corporations whilst praying not to be rifed in the next culling. It is hard to produce art in that environment.

</comment></comment><comment><USER15> Not exactly the same thing, but 'Wallpaper Engine' is very highly rated on Steam for its ability to create highly customized 2d/3d live wallpapers for Windows PC's.

</comment><comment><USER16> Another mesmerizing screen saver is Electric Sheep, which just keeps getting better and better over time, as it evolves in response to user's feedback:

[https://news.ycombinator.com/item?id=17861723](https://news.ycombinator.com/item?id=17861723)

Electric Sheep is generative crowdsourced evolutionary art that enables viewers to vote for their favorite "sheep" animations to send them off to the pasture to breed with other user's favorites with genetic cross-over and mutation.

So it just gets better and better, in response to what people actually enjoy!

[https://electricsheep.org/#/about](https://electricsheep.org/#/about)

[http://scottdraves.com/sheep.html](http://scottdraves.com/sheep.html)

[http://scottdraves.com/flame.html](http://scottdraves.com/flame.html)

[http://flam3.com/](http://flam3.com/)

[https://web.archive.org/web/20050425102606/http://flam3.com/...](https://web.archive.org/web/20050425102606/http://flam3.com/flame.pdf)

Once I fell asleep while watching Star Trek Deep Space 9 on Netflix, and then half woke up after the Electric Sheep screen saver has kicked back in but I didn't realize it, so my brain struggled for several minutes trying to make sense of the never-ending wormhole sequence that I though was an out-of- control shuttlecraft lost in space!

[https://news.ycombinator.com/item?id=15668253](https://news.ycombinator.com/item?id=15668253)

I have spent so many hours staring at Electric Sheep, thinking and wondering about how it works, that I finally looked it up, and found the papers about it!

It took less time to read the papers than it took to stare at the screen all day tripping out and wondering, but I like to do both.

The Flame Algorithm

Flames are algorithmically generated images and animations. The software was originally written in 1992 and released as open source, aka free software. Over the years it has been greatly expanded, and is now widely used to create art and special effects. The shape and color of each image is specified by a long string of numbers - a genetic code of sorts.

[http://flam3.com/](http://flam3.com/)

The Fractal Flame Algorithm

[https://web.archive.org/web/20050425102606/http://flam3.com/...](https://web.archive.org/web/20050425102606/http://flam3.com/flame.pdf)

Evolution and Collective Intelligence of the Electric Sheep

[http://draves.org/aoae07/draves-aoae07.pdf](http://draves.org/aoae07/draves- aoae07.pdf)

The Electric Sheep and their Dreams in High Fidelity

[http://draves.org/npar06/npar06draves.pdf](http://draves.org/npar06/npar06draves.pdf)

infinite evolving crowdsourced artwork

[https://github.com/scottdraves/electricsheep](https://github.com/scottdraves/electricsheep)

Copyright Spotworks LLC GPL2 Licensed see

[https://github.com/scottdraves/electricsheep/blob/master/cli...](https://github.com/scottdraves/electricsheep/blob/master/client_generic/COPYING)

2015.05 moved from code.google.com repo 2011.01.30 based on revision 1546 on sf.net

The Electric Sheep is a cyborg mind. It harnesses the collective intelligence of 450,000 computers and people to create abstract art with mathematics and Darwinian evolution. The result is seamless, organic, and infinite. See also [http://electricsheep.org](http://electricsheep.org) and [http://scottdraves.com](http://scottdraves.com) .

The rendering engine is a separate project at [https://github.com/scottdraves/flam3](https://github.com/scottdraves/flam3)

</comment><comment><USER17> I had this screen saver when I was 12 maybe (15 years ago) in which these two armies would fight each other forever. Like infantry and tanks and helicopters would come out on each side and blow each other up. I've been trying to find it for a long time, does anyone know what it is? It ran on WinXP.

</comment><comment><USER18> For *nix screensaver fans feeling nostalgic, there's an XScreensaver version for iOS, FYI

<comment><USER19> XScreensaver is also available for Android, and likely for windows/Mac as well.

</comment></comment><comment><USER20> Does an After Dark clone exist for the modern Mac?

<comment><USER21> Yes: [http://en.infinisys.co.jp/product/flyingtoasters/index.shtml](http://en.infinisys.co.jp/product/flyingtoasters/index.shtml)

It works fine on High Sierra but probably won't on Catalina, you can download the trial version and give it a spin though.</comment></comment>


An IT graduate now requires a breadth of skills - <AUTHOR> http://www.ft.com/cms/s/0/fbf20f4a-4c87-11dd-96bb-000077b07658.html <comment><USER2> IT graduates _always_ required a breadth of skills.

The mystery is why they now need to be told this, rather than showing up with them already.

<comment><USER3> Because there are very few software engineering degree programs. And between the computer science degrees and visual basic factories there's a wide gulf of nothingness where people who want to be good software engineers should be getting their training.

In other words, I'm very happy with my CS degree, but I learned almost all of my software engineering skills outside of the classroom.

<comment><USER4> _I learned almost all of my software engineering skills outside of the classroom_

Me too.

I _have_ to believe that this is the norm, not the exception. No matter how much you learn in school, you're never completely ready. You'll probably pick up much, if not most, of what you really need to know on the job.

<comment><USER5> Now asks yourselves this - how many of the skills you picked up during your work experience could have been as effectively learned in a classroom setting?

I worked for 16 months in between 3rd and 4th years where part of my job was doing requirements gathering. When I went back to school I had a course that included a section on requirements gathering and I know for a fact it would have made very little sense had I not done it for real beforehand.

<comment><USER6> Things usually make more sense when you implement your learning. Abstract knowledge is often easily forgotten or poorly grasped, learnt knowledge less so.

</comment></comment></comment></comment></comment><comment><USER5> When I started school, they told us that 4 years of busting your ass in engineering will do nothing but prepare you to start learning when you get a job. Back in 1st year, I thought they were just trying to scare us noobs, but only after a few years did I realize how right they were. There is such a dizzlingly wide array of things to learn, you can't do much except learn the basics.

As if learning the basics of your field isn't time consuming enough, companies now want universities to do their job on top of this as well. Sorry, but that's a bit like demanding that someone teach wisdom - it just ain't gonna happen.

This is just companies whining and looking for ways to offload costs. The missing skills they're complaining about can be developed very quickly (6 months to a year) by any competent grad that's put in a challenging-enough position. The problem is, such positions are a bit hard to find - when the days of paternalistic companies went away, so did the idea of hiring, training and investing in new grads, and too many of the internships and coops that are out there now are just cheap crap work.

</comment><comment><USER7> Let's add: interviewing, negotiation, business cognition, written and oral communication, facilitation, creative reasoning, etc.

</comment><comment><USER8> I agree with you. Its nice article.</comment>


The Science Behind the Need to Stand - Results of Take-a-Stand Project - <AUTHOR> http://www.juststand.org/tabid/756/language/en-US/default.aspx

<comment><USER2> No description of their methodology. I can surmise some of it from their results, and things that trigger alarms in my head:

\- All of the metrics are subjective judgements from the participants of how they feel, and I can only assume the people knew they were participating in this study because it's hard to hide the fact that you're asked to stand several times a day. So, placebo effect.

\- No listing of the questions themselves - were they leading?

\- No data on how many people started the study and how many were around at the end.

Standing instead of sitting may be beneficial, but I don't think this study, as presented, actually supports that conclusion.

</comment><comment><USER3> 7 or 8 people got one of these things at my office. and it was a pretty random assignment (for the record, i wasnt one of them and probably wouldnt have taken it had i been offered). basically there were a few free ones that were offered to 8 people (that didnt either ask or not ask for them). but all accepted. after 1 year, none of the original people that got them still have them. it took a week for some, a few months for others to give it up but in the end, everyone did. for some, it was more a function of the "ricketyness" of the ergotron device. since the whole set up (keyboard, mouse included) has to be able to move up and down its not very fixed to anything. so it wiggles and shakes as you type or click. and its bulky, takes up space on your desk, forces you to put the monitor at the very edge of the desk, killing any room on your desk for anything else you dont want to reach around a monitor and giant bar to get to. for all who used it, any benefit of being able to stand up didnt outweigh these costs. before i saw this ridiculous "study" i disliked the product. now seeing the "study", i dislike the company. unfortunate.

<comment><AUTHOR> I'm the software development director here at Ergotron. We appreciate your feedback and I will forward this to product development. It will help us improve our product. About the study, we supplied the product used in the study, but it was conducted by Health Partners Journey Well and we have no input on the results. BTW, the detailed results and methodology haven't been released by Health Parters Journey Well yet. I am told they will release those details but we don't know when.

</comment></comment><comment><USER4> I was already pretty sold on the concept, but the infographic definitely pushed me to make it more of a priority at my workplace. However, this site seems to be ultimately trying to promote the Ergotron store, yet it took me way too long to find the tiny Products link at the top.

If you're gonna sell something, sell something. :P

<comment><AUTHOR> I'm the software development director here at Ergotron. The purpose of Juststand.org is to bring awareness to the benefits of standing and the risks of sitting too much. Will we benefit from that awareness? Yes, we hope so. But the purpose of the site is not to just simply push our product. On the products page of juststand.org we link to some competitors products as well as our own. [http://www.juststand.org/tabid/660/language/en- US/default.as...](http://www.juststand.org/tabid/660/language/en- US/default.aspx)

<comment><USER5> I, for one, appreciate what you guys are doing. Kudos for setting up the site and including competitors' products. We need more stand up products and studies like this.

</comment></comment></comment><comment><USER6> I'm now at around two months of experimenting with a standing desk made of 2x4's and pine boards.

Despite using a ~28" high stool to vary my foot and leg positions for stretches and rest, I find that my flexibility has significantly worsened in specific ways. I do the 'old man groan' when I need to hoist a foot up to pull on a sock or tie my shoe. I've never done that before. Tension in my lower back is much higher. My forward bend flexibility is much worse than when I sat in a chair, despite regular stretching.

My neck feels better (an ongoing issue for a few years), but I have muscle pain in the left side of my upper back. It's due to some combination of holding my shoulders back and my arms up, something I never thought would present a problem. (I left-hand mouse, by the way, which is likely exacerbating the issue)

I'm a reasonably fit person who visits the gym every other day for about 1.5 hours (30 mins cycling, 1 hr of weight training). In the past, I've been an avid rock climber, cyclist, and yogi, so I'm fairly well in tune with my body's flexibility and strength.

Next steps:

1) Play with monitor height even more. I think it's crucial to elevate your monitor, but my Dell monitor's stand is still keeping it a little too high. I haven't yet determined the right height to achieve a neutral neck position.

2) Build a better chair. I suspect that support of the elbows and forearms may be important for shoulder health when it comes to day-in, day-out human- computer interfacing. I will take a mold of my back and build a chair back from it, providing lumbar, spine, and elbow support, with nothing to encourage my shoulders to rotate forward (a persistent problem with every chair I've had).</comment>