No Intelligence Required: Her, Ex Machina and Interstellar - <AUTHOR> http://gregegan.customer.netspace.net.au/ESSAYS/NISF/NISF.html

<comment> dan-simon I agree on "Interstellar" and "Ex Machina", but I think Greg missed the point of "Her". True, it doesn't nearly do justice to the themes of artificial intelligence and human-machine interaction. But that's because it's not meant to--it's really just a romantic little film about human relationships and the difficulty of achieving intimacy and trust in the modern world. It never even attempts to explore, let alone explain, any differences between "Samantha" and actual humans--as portrayed, she's simply a fully human female with the unusual quirk of happening to live in cyberspace. And any sci-fi-heavy exposition regarding her technological nature would only have detracted from the film's very touching, and very human, charm.

</comment><comment><USER2> Wow, someone doesn't like movies very much. "But the dismaying fact remains that the majority of art-house cinema treats science fiction as a means to acquire a veneer of philosophical gravitas, while freeing the auteur from the burden of writing a story that makes the slightest bit of sense."

Science Fiction aside, you could say much the same thing about "Groundhog Day," "It's a Wonderful Life," and "Pan's Labyrinth." Any movie with a bit of "magical thinking" and "what if..." That's the whole point of huge swaths of movies from every category of cinema! Even romance and drama -- with seemingly solid footing in reality draws on the implausible to make things interesting. You really think a successful Richard Gere would fall head over heels in love with a prostitute (even one who looks like Julia Roberts)?

If you want "science" why are you looking in "science fiction"?

<comment><USER3> Maybe because Groundhog Day is just totally crazy and Her ... just a bit. The smaller the mistakes, the more they seem like laziness.

In Groundhog Day it seems like a constructed thing and the main plot that the protagonist lives one day again and again.

In Her it seems like a side-note, that a company is selling their super AI for way to much money to do things that don't need an AI in the first place.

If you want to use such things in your design/composition you have to embrace them and don't do them half-assed.

Ex-Machina had much better premises, but the actors were really bad and the story didn't play with these premises very well.

</comment></comment><comment><USER4> Anything from Greg Egan gets my attnetion!

</comment><comment><USER5> With regard to _Her_ — the only movie on this list that I've seen — I believe the author has approached the film from the wrong direction. There's an assumption often made amongst geeks and hackers that we'll know when we create the first "true" AI. I thoroughly enjoyed _Her_ , because the movie didn't delve in to the "who and how" details of the AI. If we strip away the assumption that we'll know when we create the first true AI, then the film's circumstances make much more sense.

Think about how applications like Siri work today. They have a very superficial appearance of AI, but they're not terribly convincing. Apple is making progress though. Siri surprises me all the time; in a good way. Periodically, I'll try something new; and occasionally, Siri delivers. It's progressive enhancement.

Fast-forward 25-50 years. Where is the line between what we have today and "true" AI? I keep quoting the word true because I believe the phrase "true AI" is apocryphal in the way the author uses it. True AI can mean many things. Two possibilities are:

1) We gain some deeper insight in to the mechanics of human consciousness, and set out to replicate that in software. When we achieve that, we've achieved "true AI".

2) We never really understand human consciousness, but we keep chasing the goal of _convincing_ AI. That is, AI that _seems_ human. In this chase, we achieve a convincing enough level of AI that the questions raised in the article — and in the movie — become relevant.

I believe the latter is a more likely scenario than the former.

Looking forward 25-50 years again, let's examine a future where Megacorp™ keeps iterating their AI product. Samantha could be just another major (vis a vis SemVer) release. In Megacorp's testing, the AI was very convincing, and they believed they had a leg up on the competition. They hadn't realized just how effective their new software was though. In testing, the software's access was limited to the sandbox of the testing environment, which used samples of information. Once released on to the Internet, with access to a vast number of connections and information, the software reaches levels of convincingness (a proxy for intelligence) that the authors hadn't anticipated.

        ...but that doesn't change the fact that we've spent all our time
        mired in the world view of a neurotic middle class man whose only
        real problems, and only real interest, are his dysfunctional
        romantic relationships. Jonze has taken what would in truth be a
        revolutionary event in human history and shrunk it down to an
        episode of Dr. Phil.

I hate to be so cynical, but have a look at the world around us. Wouldn't it be so perfectly human of us (as a society on the whole) to overlook the emergence of true AI while we ponder our navel? That is exactly the type of complication that Samantha is referring to. We have the capacity for rationality, but we're not 100% rational. That's what makes us human. That is, IMO, a major theme of _Her_.

PS - I am 100% certain that somewhere in the societal background, there is a Hacker News that exists in the world of _Her_. This community identified that this new software was a "game changer" early on, and many arguments ensued with regard to how this new AI will impact the world. Society at large, failed to notice.

<comment><USER6> Excuse me, but your dichotomy of two possibilities is facepalm-worthy. A few broad points:

A) _Consciousness_ , as in subjective experience, has very little to do with "artificial intelligence", in our current understanding. Only philosophers of mind continue to be obsessed with consciousness _qua_ consciousness, as if a program needs qualia to drive an automated car or solve a math problem.

B) We will damn well understand human consciousness and cognition, in terms of neurally-implemented statistical learning mechanisms. This will just require that one or two more generations of cognitive scientists and philosophers of mind who refuse to believe in statistical learning retire. The best current literature in neuroscience and cognitive science is all computational and statistical in nature.

C) We will not build "AI products" based on a One True Theory of Cognition. We will find that human cognition works as a singular, highly effective example of general, broad principles. This is why we already have lots and lots of highly functional statistical learning and inference systems, albeit not ones that can be directed at a keystroke to perform any inference a human being can perform. Of course, this is also what makes them useful: by restricting their hypothesis space, and thus the problems they can solve, we vastly reduce their need for training data compared to a generally-intelligent human, and thus make otherwise difficult inference problems tractable.

D) Those who understand the principles of cognition will notice and understand perfectly well when near-human or human-level "artificial intelligence" (inference engines) is/are built.

>Wouldn't it be so perfectly human of us (as a society on the whole) to overlook the emergence of true AI while we ponder our navel?

You're already doing it.

>We have the capacity for rationality, but we're not 100% rational. That's what makes us human.

I demand a definition of humanity that doesn't define my entire species as _crippled_ , and necessarily exclude all non-crippled life forms from humanity ;-).</comment></comment>


Show HN: Passwords Fountain – password manager interface as a PWA - <AUTHOR> https://github.com/kolodziejczakM/passwords-fountain <comment><USER2> I think a big reason why password managers tend to have native apps is so that the OS can better integrate with them. For example, iOS' `AuthenticationServices` API which can autofill username & passwords from a third party password manager. I don't think PWAs can achieve this yet. Personally I use Bitwarden, which offers both native and web client for all of my devices.

In any case, still very good to see more choices out there, and congrats on launching!

Edit: word

<comment><USER3> Do you use Bitwarden on iOS/iPadOS? How do you get it to auto fill anything? It's quite cumbersome changing Windows back and forth just to copy-paste some fields.

<comment><USER4> Settings > Passwords & Accounts > Autofill Passwords

Select BitWarden

—-

Or, in apps with a share button like Safari, Share > BitWarden > Select Account > Boom

</comment></comment></comment><comment><AUTHOR> I've just created Passwords Fountain - simple, ultra-optimised, password manager interface.

It's basically PWA app written in Preact with the help of other micro-sized libs like goober.js (CSS in JS).

Whole codebase can be found here [https://github.com/kolodziejczakM/passwords- fountain](https://github.com/kolodziejczakM/passwords-fountain).

If you're willing to check how it works, then official instance is here [https://passwords-fountain.com/](https://passwords-fountain.com/), but you can easily create your own, even free of charge (you need only static site hosting).

I hope you'll like it and I'm opened to your feedback.

</comment><comment> kuba-orlik I really like that it went in the PWA direction. I wish more apps did that and ditched the whole Android/iOS duopoly

<comment><USER5> Agreed, I'd prefer to use all ten fingers at a keyboard on a desktop web interface than waste time with just two on a mobile device. It's just a more productive way to spend your time. Also, I don't have an unlimited data plan anymore, since why would you ever need one if you're social distancing 100% of the time? Ideally I'd switch to prepaid. Half the time I forget where my phone is, and I'm much happier for it.

</comment></comment><comment><USER6> I see a lot of claims regarding controle of data. But only 1 option (Fauna.com) as to actually store the passwords. (Or am I missing something).

This would mean I do not only need to trust your code. I also need to trust this totally 3rd party with my passwords...

Further you list it works everywhere, but are missing a cli variant (so not everywhere).

As to the trust claim in the fake exchange between the 2 people. Nobody talks like that, if they do not want to use a password manager it is always another reason than trusting the code. (Or all you would need is some audits to create that trust) It just gives the feeling (to me) this is a piece of software looking for a problem to fix.

<comment><AUTHOR> First of all, thanks for valuable feedback :)

"But only 1 option (Fauna.com) as to actually store the passwords. (Or am I missing something)."

This is because I wanted to get some opinions from potential users before I'll invest more time in developing it and provide them with more options and additional tooling e.g. like CLI which I didn't even consider before (thanks again).

Even though this app looks very simple it took me a lot of time to get me to this point and release it as it is. I know that most users don't give a __*t, but I did care about the code quality, no without a reason. I wanted to make it easy to tinker and personalise - you don 't have to wait for me to change / add database provider or e.g. until I make it works without them.

"Nobody talks like that, if they do not want to use a password manager it is always another reason than trusting the code." I think you used "nobody" here the same way as I used "everywhere". Sometimes it's hard to evade generalisation, but I was thinking about devices with GUI.

Once more, thank you!

</comment></comment><comment><USER7> > We don't store any vulnerable data - your passwords neither land on > localStorage, sessionStorage, IndexedDB nor any server.

> In your database ([https://fauna.com/](https://fauna.com/)) passwords are > stored in encrypted version so nobody can steal them from there.

So fauna is not a server and not something running local in the browser from my reading of the above. Looking at fauna.com it seems like it absolutely runs on servers, just as a SaaS. What am I missing here?

Or do you just mean that the passwords are not stored on _your_ servers?

<comment><AUTHOR> Yes, I meant here any other servers but Fauna. I thought it'll be obvious from the context, but I'll think about rephrasing this part. Thanks! :)

</comment></comment><comment><USER8> It's awesome that you're making this. Reading your readme, I had some questions:

1\. Are your passwords encrypted whenever the bits aren't on your physical device?

2\. Are you using asymmetric cryptography to make sure only you hold the key to actually decrypt the passwords?

3\. What forms of MFA do you support for authentication in order to open your vault/decrypt your passwords?

4\. Where are you storing the decryption key?

<comment><AUTHOR> Great questions! I'll do my best to answer them:

1\. You can decrypt only one password at once. It's stored in memory then. Rest of passwords remain encrypted and they are also stored in memory after being downloaded. It means that after webpage / PWA is being refreshed (or closed) you have no passwords (in any form) in the memory.

2\. Passwords Fountain is using famously safe symmetric algorithm (AES-256). I think it would be hard use asymmetric approach in current architecture with staying user friendly in any way. Please note that there is no server between this app (interface) and Fauna (database) and I'm strongly against storing something needed to password decryption both in database (e.g. private key) and the browser. Becuase of that - you have to remember and protect your master key. Remember that you also have your dashboard after logging into FaunaDB account. You can verify database connections anytime you want.

3\. MFA is quite serious feature and this would need also server code which I wanted to avoid as much as possible - it's making creating custom instance harder. Also - I suppose, I would have to force users to use an additional app for this purpose e.g. Google Authenticator (because I don't want to pay for any SMS service), which would make the regular usage strongly inconvenient.

4\. Decryption key is stored in local variable (in memory) only for the moment it's really needed (from the moment after getting it from the user to putting it into decryption / encryption function). After this tiny time frame that aforementioned variable is getting back to its default value which is an empty string.

I hope you have now better understanding of how it works. If not - don't hesitate to ask additional questions ;)

</comment></comment><comment><USER9> > _In your database ([https://fauna.com/](https://fauna.com/)) _

Unless this is a product marketed exclusively at Evan Weaver, CEO of fauna.com, then this is not "my database".

<comment><AUTHOR> I completely understand your point of view, but I think that at this point it's more likely to add additional db providers / options to establish app <-> db connection, than listing some niche app on fauna.com.

</comment></comment><comment><USER10> No screenshots?

<comment><USER11> Agreed. I would appreciate if a demo account was provided so you could check it out without signing up to the third-party database service.

<comment><AUTHOR> There is link to Figma designs in the README. You can check there how it works without creating Fauna account, whole application flow is presented there ;)

</comment></comment></comment><comment><USER12> IDK WTF "PWA" in TFA means. SOS.

<comment><USER13> Anyone in the tech industry, which is Hacker News' target audience, knows what PWA means.

And it's gaining ubiquity outside the industry as well; a search via Qwant (so not personalized) tells you that it stands for Progressive Web Application. The only other contender for the front page is Public Works Administration, which isn't remotely applicable.

<comment><USER12> TY

<comment><USER14> I really don't get why abbreviated is such a long word...</comment></comment></comment></comment>


Google Play Music dies this year, YT Music library imports begin today - <AUTHOR> https://arstechnica.com/gadgets/2020/05/google-play-music-dies-this-year-yt-music-library-imports-begin-today/ <comment><AUTHOR> Probably worth including this link to the Ars collection of articles on products that Google has killed:

[https://arstechnica.com/series/google-kills- product/](https://arstechnica.com/series/google-kills-product/)

There's also Killed by Google:

[https://killedbygoogle.com/](https://killedbygoogle.com/)

</comment><comment><USER2> I bought into Google Pay back when they had the intro price of $7.99 a month and have kept it ever since. I don't really listen to Google Play, but every now and then I do. The primary reason why I keep it is so I don't have to watch the ads. For me, the cost of $7.99 is well worth not having to listen to the ads. I know not everyone would feel the same.

<comment><USER3> My only reason is that I get to send my own MP3s, which is very useful when the songs aren't in the catalogue or for stuff other than music.

</comment></comment><comment><USER4> Can anyone recommend good selfhosted alternatives to Google Play Music?

<comment><USER5> Navidrome is a recent in the scene of alternatives. I had been running Airsonic on a Pi for about 2yrs now, and recently started to test Navidrome. It is lighter on my Pi than Airsonic and also has a refreshing UI. Since Navidrome uses Subsonic apis, any app that supports Subsonic/Airsonic will support Navidrome too.

<comment><USER5> Missed to add link: [https://www.navidrome.org/](https://www.navidrome.org/)

</comment></comment></comment><comment><USER6> Definitely a huge UI downgrade.

<comment><USER7> Plus a clever way to invalidate all those old cheap grandfathered subscriptions: [https://news.ycombinator.com/item?id=22864853](https://news.ycombinator.com/item?id=22864853)

<comment><USER6> Android Police reports that the cheap grandfathered subscriptions are getting to keep it actually.

This mess seems entirely due to Google's internal management fiefdoms than anything to do with the user.

<comment><USER8> They are not.

I'have two family members which were offered the same pricing, BUT with terms clearly stating that 'google reserves right to change price any time' on the new youtube service.

I have this confirmed with YT/Google support tickets.</comment></comment></comment></comment>


Amazon Rolls Out Halo, a Wellness Tracker That It Says Can Also Sense Moods - <AUTHOR> https://www.wsj.com/articles/amazon-rolls-out-halo-a-wellness-tracker-that-it-says-can-also-sense-moods-11598543692 <comment><AUTHOR> [https://archive.vn/tT5uG](https://archive.vn/tT5uG)</comment>


Simple and fast CSS page transitions in your hybrid mobile app - <AUTHOR> http://trigger.io/cross-platform-application-development-blog/2012/09/05/simple-and-fast-css-page-transitions-in-your-hybrid-mobile-app/

<comment><USER2> For any blog post like this, the absolute first thing should be a demo. "Simple" and "fast" are claims that cant be verified by looking at code, and a demo is a primer that makes code easier to understand.

<comment><AUTHOR> You're right, you can see a simple transition here: <http://jsfiddle.net/Fqbym/>

You'd need to setup the Trigger.io build / test environment to see the full example code from the post used in a mobile app. Maybe next time we can show that to you in a screencast, we'll work on it.

<comment><USER3> If I have to set up a Trigger.io build/test environment to see something used in a mobile app, it fails on being simple. I know it's your platform and all and you're trying to sell it, but entice me to use it with breadcrumbs in the form of progressively more advanced demos up until I need Trigger.io to see the most advanced demos.

Is using/experimenting with Trigger.io as trivial as an apt-get or npm install?

</comment></comment></comment><comment><USER4> Good start, but it'd be nicer if the swipe gesture was tracked live and the transition performed once the touch point was released (taking velocity into account for bonus points). This'd be more like the iOS home screen switch gesture (imagine if that didn't track live!).

<comment><USER5> Hi, author of the post here. I'll admit I kept the premise simple here in order to provide a more introduction on how to "roll your own" effects without too much overhead.

The sort of thing you've described seems to have been implemented pretty well as a zepto plugin: <http://blog.kojo.com.au/flickable-zepto-plugin/> (in particular this demo: <http://blog.kojo.com.au/demos/flickable/demo2.html> ) which works wonderfully on my Galaxy Nexus, but I haven't had much of a chance to play with this yet!

<comment><USER4> That is nice, thanks for the link :). It's a pity the touch events don't include finger velocity -- you can confuse the velocity tracker in that example by swiping back and forth quickly before releasing.

Android has a whole bunch of velocity trackers, but they're probably expensive in JS (solve least squares, etc). Code is here: [https://github.com/android/platform_frameworks_base/blob/mas...](https://github.com/android/platform_frameworks_base/blob/master/libs/androidfw/VelocityTracker.cpp)

</comment></comment></comment><comment><USER6> There's a webkit bug that is pertinent here.

We can't accelerate animation on a mobile app that uses position:fixed for persistent headers due to <http://code.google.com/p/chromium/issues/detail?id=20574>

This makes for some jerky transitions, unfortunately, but the alternative is forgoing the simplicity and performance afforded by position:fixed for persistent nav.

<comment><AUTHOR> With trigger.io you can use native titlebar and tabbar elements so you don't have to mess around with position:fixed [http://docs.trigger.io/en/v1.4/modules/topbar.html#modules-t...](http://docs.trigger.io/en/v1.4/modules/topbar.html#modules- topbar)

:-D

</comment></comment><comment><USER7> why not use css transforms for the transitions?

<comment><USER5> The tutorial uses Zepto for animations, which backs onto CSS transforms.

"Zepto exclusively uses CSS transitions for effects and animation. jQuery easings are not supported."

From <http://zeptojs.com/#animate>

<comment><USER7> doesnt look like they implement 3d transforms which is where the performance would come from.</comment></comment></comment>


Jiggle syphon - <AUTHOR> https://en.wikipedia.org/wiki/Jiggle_syphon <comment><USER2> The actual term for what is essentially a check valve in a bottom of a pipe appears to be "inertial pump", as searching for that phrase brings up many relevant results, including this one with a good illustration of how it works:

[https://www.solinst.com/products/groundwater- samplers/404-in...](https://www.solinst.com/products/groundwater- samplers/404-inertial-pump/datasheet/)

</comment><comment><USER3> These work great! Bought one years ago to empty out our bird feeder in mosquito season: [https://www.amazon.com/dp/B000BG1X54/](https://www.amazon.com/dp/B000BG1X54/)

Only annoyance is that small leaves and twigs get stuck in the ball chamber but it's easy to clean it with pinkie finger or a stick.</comment>


Can I Make My Developers Write Efficient Code by Giving Them Slower Machine?  - <AUTHOR> http://programmers.stackexchange.com/q/13623/468

<comment><USER2> If you can get past the "condescending excuse to save on hardware costs" bit there's actually a glimmer of truth to this. People are generally more motivated to solve problems they can directly experience and therefore understand. Question is: can you get developers to develop on a fast machine but consistently use an emulator/testing environment that's slower? If they are motivated and disciplined I would say yes. But it's worth a thought.

<comment><USER3> There is a glimmer of truth to this idea, assuming developers are being lazy about performance, but I still think it will reduce productivity.

My experience: I work at a high frequency fund. We do not skimp on performance - I rewrote Java's Math.exp for speed, and I rewrote our data store reader (already optimized to be read sequentially) to use multiple cores. Nevertheless, slow performance == downtime. I should be writing code right now. Instead, I'm waiting for a simulator to finish testing my strategy. I've probably wasted hundreds of hours this year waiting for tasks to finish, in 5-15 minute chunks.

I think there is an easier solution. If your developers are being lazy about performance get new developers. If that really isn't an option, pay them more if the code runs faster.

<comment><USER4> _If that really isn't an option, pay them more if the code runs faster._

The problem with this, is that any benchmark can be gamed. However, if your software runs daily batch processes, you can keep track of processing time and take the average time per transaction. Measuring actual performance in the production environment would be much harder to game.

<comment><USER3> Since the problem is lazy programmers, we are probably discussing regime of doing sums in php rather than in the db. In this regime, legitimate performance improvements are usually easier than gaming benchmarks.

<comment><USER4> It's just better policy to ensure that some engineer like Wally thinking, "I'm gonna code me a minivan!" actually benefits the company if the plan is executed.

</comment></comment></comment></comment></comment><comment><USER5> Be took this approach, for what it's worth -- they sold two models of BeBox, and all developers were given the slower one.

They pointed this out very proudly in their launch pitch for BeOS, a pitch which focused as much on performance / concurrency advantages of BeOS over the then-lagging MacOS as it did on the novel API features of the OS.

Don't know whether that anecdote counts as for or against the idea, but it's certainly been tried...

<comment><USER4> I'd say for. A fully loaded Be desktop could easily weigh in at under 300MB. That would count as a "lightweight" Linux distro. BeOS was a lean machine.

<comment><USER6> I never developed for it, but I ran the free install years ago on (then) laughably slow hardware, and it was still quite snappy.

</comment></comment></comment><comment><USER7> Reminds me of the story of the discus the Americans brought to the first modern Olympics.

From <http://www.uh.edu/engines/epi1137.htm>:

"Robert Garrett, from Princeton, competed in several events. The discus was unknown in America so he had a blacksmith fashion one like those in Greek art. It weighed 20 pounds -- much too heavy to throw. Once in Greece, he found that a modern discus only weighed five pounds. He practiced with one for a few days. Then he dethroned the Greek champion. Garret came home with four gold medals."

</comment><comment><USER8> In today's environment, you can definitely make them want to quit sooner by giving them a slower machine.

<comment><USER9> I came to say this.

The reality is your programmers should instead have a low-level understanding of what their code does, and how it performs. They should then be using profilers and monitoring tools to ensure it's behaving inline with their expectations. One of my strengths is always being able to give a rough estimate as to how long a task should take before I've written it. The only surprise usually is if I find ways to make it _even faster_ than I assumed was possible, by finding clever techniques to use.

<comment><USER8> I agree with you.

I would add that in addition to having that low-level understanding, they should also _care_ about what their code does and how it performs.

That's where it tends to break down for me. For a lot of people in McProgramming jobs, they don't care, and rely on Moore's law to handle the rest, or mark it off as technical debt that can be paid off at some unknown time in the future (and that time never seems to arrive).

</comment></comment></comment><comment><USER10> We solved this problem for web development for orbs.com by doing the following:

Everyone has fast dev machines.

We access the site through a local domain name like orbs-sunny.com referring to my personal computer; however, this is routed through Nginx with throttling on to simulate a slower external connection.

If we need a faster connection for certain types of testing like uploading 100MB files, we use orbs-sunny-fast.com. This goes directly to our machine and skips nginx.

It is not perfect in that it doesn't simulate a slow computer; however, it's good enough to make everybody pay attention to speed.

We did this because speed related issues were often ignored at the time of original development. We found that the slowdown on execution hasn't slowed development since our app is supposed to be responsive anyway. If it's not responsive, it's much better to fix it while your head is in that space. This results in faster overall development.

Sunny

</comment><comment><USER11> Having a slow machine available to test your code on is a nice option, but I'd be very annoyed if I was forced to use it as my development environment.

Then again, it depends on what you're doing. I have a pretty slow netbook that I use when I travel. Working in Ruby or Java can be painful, but working in Lua feels exactly the same as on my Macbook Pro.

<comment><USER12> We just need to bring back the "Turbo" button.

<comment><USER13> New-ish MSI and Asus laptops actually have a Turbo button. It basically performs automatic CPU overclocking (at the expense of battery life).

</comment></comment></comment><comment><USER14> Developers benefit by having a fast machine. But it is also important that they feel the pain of using a slower machine if that is the target market.

<comment><USER15> If I had a dollar for every equivalent of "what do you mean slow, it's not when I try with 3 of <something that the app should process in thousands> on my overclocked XXX with 16 GB of RAM and 4 hard disks in 10000 rpm and RAID" I've heard or read I'd be very rich now.

The only competition they have is the other bad developer's all-time favorite "but it works and it's fast when you delete the database and start from that."

There are more bad than good developers (and managers!) in the world. They won't care to make anything faster than what's being "acceptable" _for them._ Case study: Adobe Reader.

</comment></comment><comment><USER16> Yes, and you can get your toddler to sleep later in the morning by keeping them up later in the evening.

Oh wait, no you can't.

</comment><comment><USER17> No, but you could make development cost a lot more.

</comment><comment><USER18> This is actually an intriguing question.

I remember reading a quote that claimed that the reason Windows UAC is so messed up is because all developers run as admins on their Windows machines, so they never bother to make their programs run without admin permissions. Opposed to, say, Linux, where the default is to run _without_ root priviliges, and only run as root for the things you really need.

</comment><comment><USER19> I am sort of confused. If you ask them to improve performance do they just ignore you?

I know with the current project I am on, we have a very specific cpu and memory usage requirement. This specific requirement is silly in what the customer demanded, but it is a requirement and it is our job to make it happen. There is no option to ignore it.

Don't give your developers an option. Set specific goals based on your target environment. The product is not ready to ship until it meets those goals. At the same time you have to be reasonable. Your goals must be based on what the applications are actually doing. If they are very graphics heavy, you may need faster hardware than if its just a standard office style app. Giving them slower hardware will never make impossible things possible.

</comment><comment><USER20> edit-compile part of the development cycle should take place on the best machine possible (or machines -- see <http://linux.die.net/man/7/icecream>), but the run/test part of the cycle should take place on the target machine.

</comment><comment><USER21> My guess is the answer is probably yes, if you give your developers slower machines, they will start optimizing things for performance.

However, I suspect they won't spend the time optimizing what you want them to. Good developers HATE being inefficient. Sitting around waiting for something to compile gets your out of the flow of writing and testing code.

So instead of spending all their time optimizing the app, I suspect they'll spend a disproportionate amount of time optimizing the build process.

Not really the outcome you want...

Now, as you suggest, if there's a way to slow down only the running of the app, and not the rest of the development process, that would be useful and probably would cause the sort of changes you're looking for.

</comment><comment><USER22> I don't have anything measurable, but I do work on a slow, glitchy VM with a bloated application on an old machine in some of my projects.. It takes in the several minutes for me to test any changes to the codebase.

It's possible that under the right conditions this might work (though I doubt it..), but in my situation the code has been steadily degrading due to refactoring being too painful of a wait, and having the time for a coffee break between any code change shakes any semblance of concentration on what you're working on straight out of you.

You might be better off deploying to a slower test machine and have it run some time-tests there.

</comment><comment><USER23> The converse is true-- you can get your developers to write slow and bloated code by giving them top of the line machines. Fast machines are good for quick builds, but taking the trouble to test the code somewhere else is usually too much.

</comment><comment><USER24> I once had a boss who refused to upgrade our machines from 486s to Pentiums because of this exact reason. What we later found out was that if we compiled the code on a 486, none of the newer SIMD instructions were used, so the performance difference was actually more pronounced than we first realized. We eventually had a special build environment, but the target market was newer processors anyway, so there was no reason, other than lack of funds, to not upgrade the engineers' machines.

</comment><comment><USER25> There's a similar thought process in the music production world:

Get punchier mixes by listening to wimpier speakers while you mix.

</comment><comment><USER26> That's like asking wether or not you'll make race car driver's faster by giving them slower cars for practice.

</comment><comment><USER27> This is why Russian programmers from the 80s were so good - that developed on crappy computers.

</comment><comment><USER28> In theory you could also make them write more efficient code by measuring the efficiency of their code.

Paul Grahm - sentence 7 <http://www.paulgraham.com/13sentences.html>

:)

</comment><comment><USER29> Wouldn't low-memory, single-processor VMs offer a decent first approximation?

</comment><comment><USER30> I'd say give them a virtual machine image to run with certain (slower) specs, and ask them to periodically try the app out on that. Their main dev machine needs to be fast though.

</comment><comment><USER31> If the answer to this question were "no", I'd expect developer productivity to have increased over the years in line with computer performance, all other things being equal.

</comment><comment><USER32> Let's see, I spend extra time compiling, my debug version runs a lot slower while I try to find the bug, and I get laughed at by people working at other companies. Not to mention crap machines might not even meet the specs of the development tools.

Thank $DIETY that this guy doesn't run a shop for embedded programmers.

</comment><comment><USER33> Yes, but they'll write it for someone else.

</comment><comment><USER34> Just give them profilers.

<comment><USER35> Not good enough. We have automated performance testing on older machines here. There was a case where something that ran blazingly fast on the developer's machine completely bombed the automated performance test on an older machine. In fact it ran several orders of magnitude slower. It turns out that the older machine had a smaller and less associative cache. On the developer's machine there were no memory accesses in the innermost loop, but on the older machine it was hitting memory several times in the innermost loop.

This is a case where the rated MIPS difference was less than a factor of 4, but the performance difference was orders of magnitude.

</comment></comment><comment><USER36> The simple fact that someone is asking this question makes the developer in me weep...

</comment><comment><USER37> Yes, they would be motivated to write optimized code rather than a bunch of crap. Their productivity may suffer, unless their tools were also optimized to run on these slower devices.

I normally write (or test) code in a virtual machine on an older system to make sure I force myself to think about impact to performance.</comment>


UMass vs. WPI for CS Degree with AI/ML Focus? - <AUTHOR> My kid got accepted to both Worcester Polytechnic Institute and University of Massachusetts Amherst.  His interest lies in AI, Machine Learning, Data Science and Robotics.
I'd appreciate opinion on which of the two might make a better choice for these fields and why.
Thanks. <comment><USER2> UMASS, Amherst FTW.</comment>


Resource list for crypto traders and investors - <AUTHOR> https://www.cryptotrader.tax/trading/the-ultimate-resource-list-for-crypto-traders-investors/ <comment><USER2> Check out [http://coinfox.co](http://coinfox.co) for portfolio tracking!

iOS and Android coming soon

</comment><comment><USER3> [https://www.cryptoisnotcryptocurrency.com](https://www.cryptoisnotcryptocurrency.com)</comment>


Constructing Hardware in a Scala Embedded Language - <AUTHOR> https://chisel.eecs.berkeley.edu/

<comment><USER2> Very interesting. One of my favorite aspects of scala is the ease of buildig DSLs with it.

On a side note, Scala seems popular at Berkley. (Amplab developed spark using scala)

Was that a spontaneous decision by graduate students or is there some faculty members who suggested going the scala way?</comment>


If carpenters were hired like programmers (2004) - <AUTHOR> http://dawood.in/if-carpenters-were-hired-like-programmers/

<comment><USER2> I hate to be so negative, but... ugh... This reads like a rant written by someone with very little professional technical experience, and it's just such a poor analogy.

Yes, there are a few tools that are as interchangeable as various types of wood, and there are some weird dogmas out there analogous to using rocks as hammers. But these are exceptions, not the rule.

Languages aren't interchangeable. Sure, any half decent programmer can pick up any sane language and be hacking something together in a day or two. However, most languages have idioms and subtle usage patterns that take far more time to learn than you'd estimate. You've mastered first principles? Awesome. Ever heard of an "unknown unknown?" This kind of thinking will have you tripping over them constantly. The best part is it will always look like you're tripping over your own shadow.

And guess what? Tools do have meaningful impact on the way you perform your work, and even how you think about problems. Sometimes these tools are old and at first they look a bit like swinging a rock, but the people around you with more experience are probably using them for a reason. Go find out what it is.

Actually, that brings about a larger point. If you find yourself agreeing strongly with the OP, maybe you need to force yourself to work through a different set of languages/frameworks/platforms/tools/philosophies for a month or so and test the idea that it's "toe-may-toe/toe-mah-toe."

<comment><USER3> You're right. They should be discussing the brand of the hammer.

<comment><USER2> Psh, there's no need to discuss it. Anyone who's ever framed knows it's best to swing an Estwing! :-)

</comment></comment></comment><comment><USER4> It can get pretty silly in any technical field:

Q: So, your resume says you've been a systems administrator for 10 years. Have you worked much with Linux?

A: Sure, almost all my experience has been with Linux.

Q: How much experience do you have with Red Hat. That is what we use here.

A: Hmmm. Red Hat. Most of the servers I've worked on are Debian based. But I worked a lot with Fedora in college.

Q: But not Red Hat?

A: Well I have some Red Hat experience. I had a temp job where I was setting up Red Hat servers back in 2008.

Q: How long was that.

A: About six months.

Q: Well, perfect! We have an internship available to someone with six months of Red Hat experience! But wait a minute... What version of Red Hat was that?

<comment><USER5> I've had this very interview, repeatedly, usually someone who doesnt know the difference between debian and a toaster oven.

</comment></comment><comment><USER6> In pretty much all of my interviews, there were always three phases:

1\. The interviewer asks about my portfolio, previous projects etc

2\. The interviewer asks obscure technical questions. I've been asked, more than once, about the structure of .NET assemblies and MSIL.

3\. The interviewer asks some abstract "outside the box" question, usually involving bit twiddling (they seem to like that)

They usually like the portfolio, and I usually screw up on the technical & outside the box questions. I always feel like saying "Look, here's the work I've done, you can see its quality. This is real life work I'm showing you here, not some obscure part of some technology neither I nor you care about. Hire me on that!" I've never understood why a good portfolio isn't enough to get you hired to most places. Oh well.

<comment><USER7> This is so so true in my experience as well. I think I've got a really rich portfolio of software I've built (and shipped) yet whenever I've interviewed anywhere it is barely a talking point (even if I try to steer conversation in that direction)...instead, it all comes down to answering some esoteric technical question almost completely unrelated to the domain I'll be working in.

The way most companies hire developers today is a complete and utter fucking travesty.

<comment><USER2> Reviewing your portfolio at a level which would show prowess in technical detail requires a lot of time. Answering a few bit twiddling questions dosen't, and they're almost always required to be asked to all candidates as a matter of policy. That said, if your portfolio very very easy to browse it'll definitely score you some points. Just make sure you've got the average person from the movie _Wall-e_ in mind when you're considering how to make it "easy to browse."

I'm responsible for a lot of technical interviews where I work. I think we've got a good process down. We have a simple "walk me through your resume" phone screen, then we send them two programming problems that take a few hours to complete, and then we bring them in for an on-site. If you pass the first phone screen and if you submit good-faith solutions to the problems, you're pretty much guaranteed an on-site.

The first of the two problems is more of an infrastructure type problem with an extensibility requirement. It involves looking for files in a directory and carrying out some simple pluggable actions on them. The second one involves writing a custom, optimized data structure. The naïve solution is very quick and easy to implement, but our performance threshold for the sample dataset requires a more advanced solution.

Almost everybody gets the infrastructure one w/o any problems. We mostly use it to look at their code style and how they'd structure an extensible program. Almost nobody submits a solution to the second problem that comes in below the maximum time specified in the performance threshold. This is okay, as the goal of the second interview is to discuss these solutions and the problem solving process that went into them in depth.

We hire a bunch of people who've gone on to perform well who didn't submit optimal solutions, and although it's rare, we've declined to hire people who did submit an optimal solution. It's the conversation we have that's important, not the code.

</comment></comment></comment><comment><USER8> This is pretty old (I think it started circulating around 2004? [4]) and was first publicly posted at jasonbock.net[1], although his site seems to be having problems so here is a cached version [2].

The intro posted there is as follows:

 _The following joke was posted to an internal Magenic[3] list. I don't know who actually wrote it, and I'll give credit if someone points out the creator of the joke. It perfectly illustrates what I think developers (especially consultants) have to go through all the time when they're interviewing for the next gig._

[1] [http://www.jasonbock.net/jb/Default.aspx?blog=entry.7c334037...](http://www.jasonbock.net/jb/Default.aspx?blog=entry.7c334037d1a9437d9fa6506e2f35eaac)

[2] [http://web.archive.org/web/20130210235908/http://www.jasonbo...](http://web.archive.org/web/20130210235908/http://www.jasonbock.net/jb/Default.aspx?blog=entry.7c334037d1a9437d9fa6506e2f35eaac)

[3] <http://magenic.com/>

[4] From the jasonbock.net post: _Posted at 10.13.2004 11:38:07 AM_

<comment><USER9> So what? It's not like the internet is some hive mind where if it's existed once it's been seen by everyone. Sometimes old things are new to a lot of people.

<comment><USER8> I don't think it's wrong to repost this, I was just providing some background for people who might be interested.

When I read this post I remembered the previous one so dug it up; turns out the post references the original source, which I had missed the first time 'round.

In any case, I enjoy knowing the history of "famous" internet things, and presume to think others might too.

<comment><USER9> Fair enough, I just presumed it was a more intellectual version of the standard "OLD!" comment you see on things, which tends to annoy me.

<comment><USER8> Maybe it's just because I spend too much time lurking here, but I see a relatively large number of re-posts (or things which I have read before somewhere).

I don't usually comment on these articles, however _especially_ when it looks like someone has lifted content I try and link back to the original (and original discussion where appropriate). In this case I was pushed to comment because I thought it was not attributed (and hence lifted) but in any case I am always concious of the type of post you outline - the 'OLD' comments.

I think a 'more intellectual' version of that comment is actually a good thing in general, mostly because it adds content rather than simply deriding, but it's always a tough question to decide if posting is the right choice or not. I'm happy enough with this post.

</comment></comment></comment></comment></comment><comment><USER10> PLEASE STOP THE METAPHORS!!! (shouting justified by how many of these have been written)

They don't add anything to the discussion. Do you need special techniques to work with walnut? I don't know and I bet the author doesn't either.

And where do you draw the analogy? What's the programming tool that's too specialized to be worth asking about? MSVC++? C++? Manual memory management?

This article doesn't make any useful claim about what level of precision interviewers should be looking for, and certainly doesn't make any convincing argument that it is the correct level.

</comment><comment><USER11> The carpenter made the mistake of answering the question he was asked, instead of the question the interviewer wanted the answer to.

LOTS of interviewers are going to have zero experience in the field they are hiring for. It will behoove the (carpenter|programmer|car salesman) to learn the language of the interviewer, so he or she can answer the questions the interviewer wants to ask, but doesn't have the vocabulary for.

<comment><USER12> How would you have answered differently?

</comment></comment><comment><USER13> I didn't find this very insightful or humorous. I guess it's trying to imply that specific prior experience is not very important which I would very much disagree with.

</comment><comment><USER4> Actually, nobody interviews carpenters. You either:

A. Call the carpenters' union and take whoever they send over.

B. Ask some carpenters you trust if they know any decent carpenters who are looking for work, and when they show up at the job site sober with appropriate tools, you put them to work.

It's a slightly different process than programming.

<comment><USER14> Speaking as a carpenter, you're quite right!

However every so often we _do_ have to advertise for a position, and then the process of weeding through the applications probably isn't so different from what everyone else has to do.

At this point in my career I can say that it's quite easy to spot a skilled carpenter if I spend a few hours with them. I imagine an experienced programmer could do the same. The problem is getting to that point.

<comment><USER15> > At this point in my career I can say that it's quite easy to spot a skilled > carpenter if I spend a few hours with them. I imagine an experienced > programmer could do the same. The problem is getting to that point.

Bingo, this whole topic in a nutshell.

</comment></comment></comment><comment><USER16> Watch this HN thread devolve into a battle of contrarians, in real time!

<comment><USER17> This thread won't devolve into a battle of contrarians.

<comment><USER6> The irony of this comment does not escape you, I hope

</comment></comment></comment><comment><USER18> This is the funniest thing I've seen on HN in a long time. So true -- a good programmer (carpenter) is a good programmer. Who cares what the latest language (wood) they've worked with?

<comment><USER19> what, really? I work either with kernel and system level code in C, or program analysis logics written in ocaml or c++. I've done that kind of programming for about ten years.

so I should seriously be able to look someone who has done web development for an equal amount of time and say "yeah, I'm a decent programmer, surely I can get to the bottom of your domain in a few months of learning as I go". really? if you had a choice between hiring someone who was an expert in a totally orthogonal domain or someone with experience in the domain you were working in, you would prioritize experience over familiarity? how is that working out for you?

<comment><USER20> The post was not really referring to a gap like that between systems programming and web development. It was referring to a gap like that between developing web applications in Ruby or Python. Drop a Django guy into a Rails project or vice versa and they will hit productivity parity within a very short span of time.

The problem that the post laments is that while there absolutely are separate domains within the programming field, HR people rarely have any idea what those domains actually are. Because of this, they tend to operate under the assumption that every single entity (language, framework, etc) is a different domain, and if you haven't worked with the right entity then you don't have enough experience.

Edit: To expand on this a bit further, your example of systems programming vs. web development is actually a perfect example of what the _right_ question would be for the interviewer to ask. Has the carpenter built a lot of houses, or have they built a lot of tables and chairs? What wood they used to build them doesn't matter much, but what they built with it is very important and is where the real domain gaps actually lie. This distinction crosses over to programming very well.

</comment></comment></comment><comment><USER21> So say the folks who think all wood is interchangeable. For instance, red oak and white oak are more than just differences in color. Someone with experience would know which one to use if one needed more resistance to water and rot (hint: white oak). Some woods are more workable with hand tools, and others machine better. This is the stuff you want someone to know.

I think there is some value in knowing the nuances of a new technology/language/wood. That could be the difference in whether you'll have to redo someone's work because they wanted to start their curly bracket on a new line in your javascript project. Of course, that won't excuse the non- technical HR person who skips your resume because their buzzword isn't listed there.

</comment><comment><USER22> Terrible analogy.

A better analogy would be to contrast the different styles of carpentry: things with moving parts vs things without them, things on a large scale vs intricate things on a small scale, etc.

</comment><comment><USER9> I think the fact that this joke has poked a nerve on so many people speaks to how true it is.

I suspect a lot of programmers get so attached to the knowledge they've accumulated, that they start to overvalue it. They assume that no outsider could easily pick up what took them years. But that's not really true -- if you've been around long enough, you start to see patterns, and a lot of things just fall into place. It's like learning a new natural language, the first one is hard, but each successive one becomes easier.

</comment><comment><USER23> This is funny, but also painful, because I feel like this is me. I've been working on every kind of computer problem I came across for 13 years, and I wasn't thinking about how any of it would look on my resume, and that much work is very hard to summarize.

I think of myself as a guy who can create or improve text files for computers. I think everyone needs this, but nobody wants this. I'm doing a terrible job of selling myself, and it's actually starting to hurt.

<comment><USER2> If by "text files" you mean source code, then yes, you're selling yourself totally wrong.

Don't sell what you do, sell what your work does. That is, sell the idea of the benefit of your work. Put it in terms of them, not you.

</comment></comment><comment><USER24> While I agree with the general idea of the analogy (that great programmers are effective, no matter how many specific years of experience they have with language X), it doesn't quite hold up. It would really only be accurate if learning to be effective with brown/walnut/etc. could take several months, as is the case with some programming languages/tools/methodologies.

<comment><USER15> What is this language you've been using that is so terribly different from what people learned in college that it takes the months to be _effective_ , not even efficient? Off the top of my head, I produce.... prolog and haskell. It's very, very unlikely you'd apply for a job that was looking for those languages without realizing it.

If you know java, you know python, and you know c, and you can think in algorithmic rather than implementation terms, then you're good for pretty much anything. The hard problems are the same everywhere: cache invalidation and naming things. (I'm only partially kidding.)

EDIT: Besides, if you're hiring for 3-5 years, the advantage language knowledge grants candidates becomes minimal, and the ability to apply old lessons, to learn, to adapt, dominates. If someone has issues learning a language, there are probably more striking problems that would prevent them from getting the job anyway.

<comment><USER24> The two you mention (Haskell and Prolog) are great examples of languages where people can actually have negative impact for a while until they really get up to speed with the language. Pretty much any functional or declarative language fits that bill, and definitely any Lisp. Maybe not 6 months, but definitely at least a couple of months to start contributing a lot of additional value (in addition to getting set up with the team's environment and workflow).

Amazingly, even if someone does learn Java, Python, and C, he or she is not necessarily able to generalize that knowledge to other languages, or even to larger-scale projects in those languages. For example, I wouldn't want to take someone with a lot of Python experience and a semester's worth of C, and put them on a large-scale firmware project or Linux-kernel-hacking project. There are a lot of ways somebody who _thinks_ they know C could mess up a project like that.

In general I agree with you: a truly smart engineer can pick things up as they go, especially on a longer time frame. However, this isn't always the case. Though my perception is admittedly warped a bit working in startups, where you need people to hit the ground running immediately.

<comment><USER15> Well, you have to remember that very few places uses lisp for that very reason (the benefits don't outweigh the training cost), and the few production bits of lisp code I have seen work like java (albeit less object-oriented) with macros.

Second, I only mentioned C because of its use in understanding computers. Memory management is definitely a skill that people should (but often don't) learn in college, at least to understand what's happening when your GC hits some GC-unfriendly code. So I agree that memory management (via C) is a niche skill, so the analogy outlined in the original post doesn't apply... but quite honestly, how many people on this site write C regularly enough that lack of knowledge of C is going to seriously impede them? The vast majority of jobs I see are for PHP, Python, Java, and C#, at which point the largest impediment is the time it takes to get the O'Reilly book.

<comment><USER24> I agree that most tools that are similar are fairly easy to switch between: PHP/Python/Ruby/Groovy, and Java/C#/C++, all imperative, OO, etc. Also, from a tools standpoint, Rails guys can use Django and vice versa, pretty much the same, for sure.

It also sounds like you agree that that's not so easily done with (quoting myself from above), "some programming languages/tools/methodologies." So sometimes, sometimes not.

So... we agree? :P

<comment><USER15> Yes, we agree. :)

</comment></comment></comment></comment></comment></comment><comment><USER25> please tell me most people aren't this silly when they interview folks.

have the carpenter build something (of trivial scope) while you watch. somewhat analogous to coding on the whiteboard in the interview.

come to think of it, it might be darn hard to interview carpenters. but if you watch them work for 2 hours you know everything.

<comment><USER15> > please tell me most people aren't this silly when they interview folks.

I would imagine much of the technical side of HN would be considered overqualified for the lowest quartile (completely arbitrary number) of jobs by interview quality... I've never witnessed this either, but I've seen it in tangential ways. The Daily WTF isn't fiction, unfortunately.</comment></comment>


K (2005) - <AUTHOR> http://archive.vector.org.uk/art10010830 <comment><USER2> I work in the financial industry and code in K3 (among a number of other languages).

Things I like: highly orthogonal & minimalistic design (basically vectors and functions acting on vectors), easy C FFI, well documented, satisfying to minify production code, my inflated salary (+job security for some).

Things I dislike: proprietary, impossible to skim, APL/J/K "culture", over- marketed, functions/operators overloaded in very unintuitive ways, lack of lexical scoping, interpreted languages falling out of vogue.

Overall, I recommend every coder to try K (or J or APL) at least once. They compare favorably to NumPy/R in many respects.

<comment><USER3> k3; 1010data? If so, I'm really curious: has the k3 fork you guys have bifurcated far enough that it no longer resembles k3? It makes me really curious, because substantially modified k doesn't really seem like k much at all anymore.

 _Things I dislike: [...] APL /J/K "culture",_

Ow. It cuts like a knife. Right in the heart! Is it the silly jokes? The bad memes in almost every presentation? That we think our approach is better than everyone else's because it produces better code, faster? That we like math?

<comment><USER4> 1010er here. I don't think Arthur would have trusted us with a fork if that was even a remote possibility. I find it true to the design and aesthetic of k3--you'd never notice if you didn't use the new features and they seem quite natural.

<comment><USER3> Thank you so much for answering! That's fascinating! I hope that at some point someone expands on what features have been added.

</comment></comment></comment></comment><comment> jim-jim-jim I've been seeing K mentioned a lot around here recently. Fostering interest in any array language is a good thing imo, but I'm curious about what draws people to K over J in particular. They're both ASCII based with APL heritage, but afaik J is free software and K isn't.

<comment><USER5> Performance, KDB+, simplicity.

I've heard it said that J is for people with brains too big for K. J can be difficult with its hooks, forks, trains, and other complex function application constructs.

Job prospects too. K is heavily used in the financial sector (even YC has postings for K jobs in its monthly listings) and pays extremely well for what is basically a database developer.

<comment> jim-jim-jim Thanks for the info. I think J's implicit combinators have made me a better tacit programmer, but over reliance on them can make things frustratingly ambiguous.

The monadic/dyadic overloading in all these langs doesn't always help either. I recall somebody here recently writing a K implementation where there was explicit syntax for the uh... adicity(?) of operators, but I forgot to bookmark it. Anybody know what I'm talking about?

<comment><USER6> k (well, some version of it) has something along those lines:

> _[the] `:` in `|:` is used to force the verb `|` to be interpreted as a > monad, as by default ambiguities are resolved in favour of dyads._

[http://www.math.bas.bg/bantchev/place/k.html](http://www.math.bas.bg/bantchev/place/k.html)

</comment></comment></comment></comment><comment><USER7> We used K/KDB at my first job out of college. One one hand, it was fast and terse.

The downside was that the code was nearly impossible to read by anyone but the original author, and for some reason they encouraged one-letter variables. This actually propagated to the rest of the code base (com.a.x).

<comment><USER3> Single letter variables are actually a feature, not a bug. (I think you'll be able to find some passionate defenses of it if you use HN search, better than I can do certainly.)

</comment></comment><comment><USER8> I've noticed the term "low code" being mentioned more often lately, but never in relation to array programming languages. In my opinion languages like k, q, apl and j are the most flexible and expressive low code programming platforms on the market.

</comment><comment><USER9> FWIW, this is from 1993, not 2005. [http://archive.vector.org.uk/10](http://archive.vector.org.uk/10)

</comment><comment><USER5> > K stands for "keys to the kingdom".

Lol. It's actually just the letter after J, since K was supposed to be the next in the APL-ish family.

<comment><USER8> Arthur wrote the article :)

<comment><USER5> Ha, I didn't notice that. But I've heard it before on the K list. I think it is more of a backronym than a serious statement. This is a guy who names his source files a.c, b.c, c.c, ..., z.c.

I'm unsure why Ken Iverson named the J language that though.

<comment><USER10> Probably because A through I were already taken.

</comment></comment></comment></comment><comment><USER11> I wrote a post on learning the prototype J interpreter that was written by Arthur Whitney: [http://bollu.github.io/#incunabulum-for-the-21st-century- mak...](http://bollu.github.io/#incunabulum-for-the-21st-century-making-the-j- interpreter-compile-in-2020)

It's an enjoyable codebase to stare at and figure out

</comment><comment><USER12> > v: 3 4 /a vector, i.e. a list of 2 atoms.

> v+'v /v plus EACH v, i.e. (3+3;4+4).

> 6 8

How is for EACH working here? Adding v (a 2-vector) to each element gives a 2-vector, so why isn't the result a 2-vector of 2-vectors?

<comment><USER9> It applies element-wise across both arrays. What you're describing is more like an each-right (+/:) or each-left (+\:).

        2019-09-25 14:44:44 2core 3gb avx2 © shakti l test
         v:3 4
         v+v
        6 8
         v+'v
        6 8
         +'[v;v]
        6 8
         v+/:v
        6 7
        7 8

         +/:[v;v]
        6 7
        7 8

<comment><USER12> Indeed, that was my confusion, thanks!

</comment></comment></comment><comment><USER13> Interested to see what happens with Shakti, the newer iteration of Kdb

<comment><USER14> I wish their site said more.

<comment><USER3> Are you on the mailing list? It's a bit slow, but seriously cool to see random people bring up strange bugs and Arthur going "thanks! fixed in the next release." over and over again like clockwork.

<comment><USER14> No, but I might add myself.

Speaking of fast bug fixes. 8th is a commercial Forth-like language for embedded, desktop, server, and iOS/Android that is kind of like that. It is basically a small (few MB) binary that is a full REPL that can cross-compile your code into an encrypted binary. It has nice GUI, SQL, Rest, REPL,JSON/CSV/XML...etc support all built-in as well as a bunch of other goodies. Releases happen very regularly and reported bugs are fixed incredibly fast. There is a forum with a lot of activity from the fairly small user base. Probably not everyone's cup of tea, but I've had a blast playing with the free version. The professional version is like $250 and after your free upgrades wear out you can then upgrade for a reduced cost. Full source is also available in the Enterprise edition with an NDA. In some ways it has some similarities with K.

Long story short to see hundreds of posts requesting some obscure feature of edge condition and seeing a reply a few hours later with "fixed". It seems to be a pretty mature language for one person to build. I have not bought a professional edition yet as I'm having fun with the free one and this is probably not something big corporate IT would like. If I start building enough tools at home, I might go in that direction. Also, no affiliation with the project, they just seem to get a lot of my wish list right. I really wish it was a free/open source project as I bet it would catch on more.

<comment><USER3> Yeah, I've heard of 8th! Absolutely sucks that it's proprietary, it's seriously cool. It's one of my favorite examples of how single-man dev "teams" are the most efficient.

<comment><USER14> Yeah, you get some advantages with a large language, but there is no coherant harmonizing force even with a BDFL like in Perl and Python.

Arthur's work is seriously impressive and something to motivate me to write my own tools.

</comment></comment></comment></comment></comment></comment><comment><USER15> You can pry C from my cold, dead hands.

<comment><USER3> No one's asking you to get rid of C; Arthur (the guy who wrote this article) actually wrote his own C compiler a few years ago!

Ever-elegant, it does away with precedence, which makes for much prettier code.

[http://www.kparc.com/b/](http://www.kparc.com/b/)

<comment><USER16> Holy shit, this is the craziest C code I've ever seen!

<comment><USER3> Is it? I find it quite beautiful. Have you read the ngn/k source?

<comment><USER16> No I haven't. I'll take a look. When I said the code looked crazy, I didn't mean to suggest it was bad code. It seems quite dense, I'd really like some explanation for how it works.

<comment><USER3> Courtesy of 'yiyus:

[https://docs.google.com/document/d/1W83ME5JecI2hd5hAUqQ1BVF3...](https://docs.google.com/document/d/1W83ME5JecI2hd5hAUqQ1BVF32wtCel8zxb7WPq-D4f8/edit?usp=sharing)

Also 'tlack's attempt at it:

[https://github.com/tlack/b-decoded](https://github.com/tlack/b-decoded)</comment></comment></comment></comment></comment></comment>


'False Dawn' Recovery Haunts Virus Survivors Who Fall Sick Again - <AUTHOR> https://www.bloombergquint.com/onweb/-false-dawn-recovery-haunts-virus-survivors-who-fall-sick-again <comment><USER2> My wife, son and I have had a weird experience like this. We were not test confirmed, but we are younger, so none of us had it _that bad_. We had a flu- like illness of coughing, tired, high fever. Then it subsided. Then a week or so later, I woke up in the middle of the night with shortness of breath. Felt like I had to mechanically breathe. Very unpleasant. Spent about two days or so like that, then was quite tired but could breathe a bit better. Then every week or so we will have another wave where we are pale, tired, headache and mild(er) shortness of breath. It feels like just recently we have come out of it, and we first had symptoms the second week of March.

<comment><USER3> I'm in the same boat. I've been having this on/off experience with difficulty breathing since the first week in March when I first experienced all the typical COVID-19 symptoms: mild fever, dry cough, fatigue, difficulty breathing. I was unable to get tested at the time, because it was early in the pandemic and testing was limited, so I was never officially told that I had it.

I seemed to recover a couple weeks later. But then I started having difficulty breathing again (without fever or cough this time). After another few days I'd start to feel better. Then I'd have a few days of difficulty breathing. I've been cycling between feeling okay and feeling bad ever since.

<comment><USER4> You should consider taking vitamin D. It seems to be a factor in severity of cases according to [1]. You could be deficient in D if you haven't spent much time out in the sunlight recently (likely for many of us, I suspect)

Vitamin D is essential, many people are deficient, and I don't think there are many risks in taking a supplement.

[1] [https://www.medrxiv.org/content/10.1101/2020.04.08.20058578v...](https://www.medrxiv.org/content/10.1101/2020.04.08.20058578v3)</comment></comment></comment>


Branched flow of light observed for the first time in a simple soap film - <AUTHOR> https://twitter.com/JamesDManton/status/1278640565039611904 <comment><USER2> Looks like lightning... I wonder if there is any similarity between this and lightning...</comment>


WePay's (YC S09) next chapter - <AUTHOR> https://blog.wepay.com/2017/10/17/wepays-next-chapter/ <comment><USER2> The enterprisiest announcement I've read in a long time. And I work at a big corp. Wouldn't be surprised if many people who read this actually don't even understand that it basically says "hi guys, we got bought."

It's also hard to figure out what WePay has actually been doing. Great enterprise speak again.

So, that's what the banking world looks like? Even more enterprisy than the Enterprise despite being a start-up?

<comment><USER3> I thought it was fairly clear. Chase wants to get into the fintech space so they acquired WePay.

<comment><USER4> Is there a a good definition for companies in the "fintech" space? Is it anyone building a product that lets consumers/enterprises receive and send payments over mobile/desktop/internet rather than physically going into a branch?

Curious as it seems to me (uninformed) that basically all banks already have fintech offerings and are built around networking and payments technology at their core.

<comment><USER5> I think fintech (like "edtech") is a little bit nebulous. I would say anything involving handling money is fintech. So stuff like Venmo or Robinhood. I would even go so far as to say certain data science companies are fintech in that their offerings cater to financial institutions.

</comment></comment></comment></comment><comment><USER6> I had breakfast with Bill a few years ago in Palo Alto. It was clear pretty quickly that WePay wasn't a good fit for us, but he still managed to navigate me through the competitive landscape and helped me figure out which product was right, pitfalls to avoid, regulations, etc. He even offered his help for the future, even though we were giving him zero business.

I'm writing all this because I left with the feeling that he was a genuinely great guy and that he deserved success. I'm glad it has finally come his way!

Best of luck!

PS: stay away from bitcoin.

<comment><USER7> What's with the PS? Did he tell you that or are you saying he shouldn't waste his newfound riches on bitcoin? Seems really out of context otherwise.

<comment><USER8> I believe he's referring to the statements made by Chase CEO Jamie Dimon on bitcoin: [https://www.cnbc.com/2017/09/12/jpmorgan-ceo-jamie-dimon- rai...](https://www.cnbc.com/2017/09/12/jpmorgan-ceo-jamie-dimon-raises-flag- on-trading-revenue-sees-20-percent-fall-for-the-third-quarter.html)

> It's just not a real thing, eventually it will be closed,

> Dimon also said he'd "fire in a second" any JPMorgan trader who was trading > bitcoin, noting two reasons: "It's against our rules and they are stupid."

<comment><USER7> Ah, good catch!

</comment></comment></comment></comment><comment><USER9> This is a pretty authentic and fairly clear note from an acquisition.

It's pretty clear it wasn't the home run that so many set out for when founding a company. I do expect this is a good landing out of this for many, yet now there are new challenges to navigate.

Nine years is no short time to labor through, especially when you're taking a giant risk and giving up things that software engineers could easily get in terms of work/life balance at an AWS/Google/Microsoft. Yet, you set out to change something in a noticeable fashion.

I truly hope Chase gives you the chance to do that, yes it's a big company. But, in the spectrum of big co's in the financial space they seem more open to innovation than so many others so... best of luck with what's next at Chase.

<comment><USER10> Sources say it's north of a $220m acquisition - I mean I know that's not a home run but I'm also pretty certain it's not a nothing outcome at all.

<comment><USER9> That is a solid outcome, but with nearly 80m (publicly) raised, likely not a giant return based on those numbers and length of company existing. Some may have done quite well, but plenty of unclear details. There are many notable home-runs for all players involved, FB, Whatsapp, etc, but those are often the exception.

This isn't to say it's a bad acquisition or should be dismissed as a failure. It just re-iterates that it's not all easy, glory, and success.

I do hope for the team involved it worked out just as they'd hoped, but from their post it feels like many hard years and more of a next chapter than the end. Best of luck to them all in the future.

<comment><USER11> A $220m+ acquisition is absolutely a home run, and likely a win for all involved, even with $80m raised.

FB and WhatsApp are once-in-a-decade type returns. In baseball parlance perhaps a World Series winning grand slam or a perfect game. You needn't exit for $19B for it to be a great outcome.

<comment><USER12> I mean, don't common stockholders (i.e. all employees) still basically get shafted in a down acquisition?

<comment><USER13> Say investors own 60% of the company. In an acquisition worth $220 million, 60% of the company would be worth $132 million. It's common for investors to have a 2x liquidation preference, meaning they get up to twice their money back before anyone other shareholders get $1. $80 million invested means investors get $160 million, more than the $132 million. $60 million would be left over for the founders and employees. There's enough money there to be a life altering amount for many people.

<comment><USER14> If you see a 2x liquidation preference on a term sheet in this market I would be really surprised. Virtually every term sheet that isn't the one before an IPO or a recap will be non-participating preferred.

<comment><USER13> I confess I'm not an M&A/finance/VC-funding wizard. Would you mind giving an example describing the scenario you describe?

<comment><USER14> Non-participating preferred means that either you are the first to get money off an exit up to the amount of your investment OR you convert to common and get your ownership percentage. For example, say you invested $10m into a company at $30m post and then owned 33%. If the company sold for $20m, you would get $10m and the common would split the remaining $10m. If the company sold for $30m you would get your $10m back either way. If the company sold for $100m, you would convert to common and get $33m.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> This is really interesting, because if I understood it correctly, WePay was basically a layer that sat on top of Vantiv's PayFac and made it easier for businesses (SaaS) to take payments on behalf of many merchants. In other words, let's say you setup a SaaS called "GymSAAS" that billed monthly fees (and took cut of each transaction) and your client was "Globo Gym" . GymSAAS could use WePay to collect the money for Globo Gym, take a cut and then pay Globo Gym every month the remaining amount. Using Vantiv's PayFac, it means you skip the tedious process of assigning a new merchant account for Globo Gym as they get underwritten in the industry of "gyms".

So what does this mean for Chase? Do they gut all of the plumbing out with Vantiv and move it over to Paymentec for processing? Does Paymentec even have a PayFac capability built into it?

<comment><USER16> No its not. What you describing is called "collusion fraud" and if caught it can land you/your company on MATCH list.

<comment><USER17> No, you're wrong. Collusion fraud is (generally) when a merchant uses stolen credit cards to process payments then absconds with the money before the customer disputes the charge.

What the parent is describing is PayFac (payment facilitator) which is where the card network and acquirer are aware of the merchant/sub-merchant relationship. You can determine if a payment is through PayFac by the tell- tale asterisk after the first 2 characters on the statement descriptor. For example, Square transactions process as "SQ*[Merchant Name]"

<comment><USER16> You are spreading misinformation. Collusion fraud occurs when you are approved for selling ebooks and you endup selling e-cigs, for example. Has nothing to do with using stolen credit cards, which obviously is a crime.

Source: 12 years of experience processing cards in CNP/MOTO environment.

<comment><USER15> > Collusion fraud occurs when you are approved for selling ebooks and you > endup selling e-cigs, for example.

This has literally nothing to do with what I originally posted.

Source: The parent comment.

</comment></comment></comment></comment></comment><comment><USER18> Early WePay customer. Implementor of a Java WePay API.

Huge congrats to the team!

One feature that stood out for me was the ability to issue refunds without fees. It was not common a few years ago. This allowed me to build an event ticketing platform where promoters could sell tickets. If an event is cancelled and we had already paid out funds to the promoter, my business could have been 'on the line' for the refunds.

Even though we were never a huge customer, the business didn't succeed, they still always treated us like we were important. This was a stark contrast to PayPal, whom they were originally trying to take down.

I suspect this merger is also about their fraud detection system. I hope Chase can put it to good use, they need it.

</comment><comment><USER19> Chase _just_ finished switching their "Quick Pay" infrastructure over to "Zelle", and now they're buying WePay. I wonder what they intend to _do_ with it?

<comment><USER20> Zelle is not really the same thing as what WePay does. Zelle is peer-to-peer payments, competitive with Paypal, Square Cash, Venmo, etc. (P2P is a term of art in the industry; it's not P2P in the Bittorrent sense. :)

WePay is about providing payments infrastructure to marketplaces and crowdfunding platforms (Lyft, GoFundMe, etc.). WePay are competitive with Stripe's Connect product (disclaimer: my employer). Braintree and Adyen also have similar products.

Congrats to the WePay folks. I hope this new chapter works out well for them!

<comment><USER21> Zelle is more than that: Zelle is a new interbank network for free and instant money transfers that avoids the Federal Reserve ACH system that PayPal, SquareCash, etc use which takes 24-36 business hours for money to move.

I'm surprised that Zelle is moving so slowly - it's a great selling point for a bank/CU. Alas, the system doesn't allow for non-personal payments, so the banks want to preserve their commercial payments processing income.

<comment><USER22> Zelle is not new. Zelle has existed as clearXchange since 2011. The Zelle branding is new as of 2016, but the underlying service has not changed. Most of the participating banks individually branded the service prior to the Zelle rebranding.

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

</comment></comment></comment></comment><comment><USER23> Pumped for these guys. I had a few different interactions with them in very small capacities over the years and they were always humble, genuine and supportive of the different projects/businesses.

Just nice, smart, unpretentious guys.

Congrats.

</comment><comment><USER24> I met Bill and Rich a decade ago in the Andala Coffee House in Cambridge.

They were kind, warm, quick with a joke, and even quicker to offer support, insight, and help to the fledgling group of young entrepreneurs.

I've taken vicarious delight from watching their success!

</comment><comment><USER25> Congrats Bill and Rich, and good luck at Chase.

</comment><comment><USER26> More consolidation in the age of corporate monopoly... I'm sure a nice exit for the founders and their investors.

</comment><comment><USER27> Congratulations to the WePay team! As a partner(At JotForm, we integrate forms with WePay), we are excited to hear that Chase is planning to grow WePay.

</comment><comment><USER16> Congratulation to Bill, Rich, Mark and Tina! I'm sure everyone else involved deserved this success as well.

</comment><comment><USER28> A bit of trivia: Chase was founded by Aaron Burr.

</comment><comment><USER29> "WePay and its employees will operate as Chase's payments innovation incubator in Silicon Valley"

Uh, oh. Does such a thing ever work?

<comment><USER30> The current wisdom is that if you leave yourself weak to disruptive innovation.

In the automotive world, everyone has a bet on self driving cars, for instance. Ford has Argo AI, GM has Cruise Automation.

For a contrast, look at Kodak. They pioneered the tech for digital camera sensors... and then did nothing with it, because they made money on film. Digital camera sensors killed film.

If you want a longer discussion on this, The Innovator's Dilemma is highly recommended. Here's a short summary: [https://www.youtube.com/watch?v=yUAtIQDllo8](https://www.youtube.com/watch?v=yUAtIQDllo8)

</comment></comment><comment><USER31> Congratulations on exiting.

</comment><comment><USER32> Congrats, well deserved.

</comment><comment><USER33> tl;dr - Their Incredible Journey (TM) ends at Chase

<comment><USER34> ROFL, this reminds me of Google Fiber's infamous "Advancing Our Amazing Bet" blog post, which was essentially an announcement that they were giving up on actually advancing the amazing bet. It became a running joke internally (at Alphabet) for a while.</comment></comment>


Ask YC: cheap/crowdsourced translations? - <AUTHOR>

I need to translate a few (10's) of strings for a site I have.  It's not important that the quality be stellar; it's all pretty standard stuff, and I don't really want to farm it out as a one-off job to a translation agency or something like that.<p>Any recommendations? <comment><USER2> I was once hired to fix the arabic translation done by someone on TranslatorBase.com

check 'em out :-)

<comment><AUTHOR> I'm wondering if there's anything more... "web two-ish" that people have used. I could probably just hassle a friend or something to do the translation; it's so small. But I'm curious. That looks like a decent site if you have a larger document.

<comment><USER2> What languages? I would do Arabic for you pro-bono, and it's up to you to donate something to any one of these:

<http://en.wikipedia.org/wiki/Category:Palestinian_charities>

:-)

<comment><AUTHOR> German in this case, but like I said, I'm pretty sure I can dig up someone locally that does German, so mostly I'm curious about services that do this kind of stuff.

<comment><USER3> Few tens of strings? I'll give it a try. Just pass over the first, let's say, twenty strings in a follow-up comment. German native speaker here.

</comment></comment></comment></comment></comment><comment><USER4> Have you tried Mechanical Turk?

</comment><comment><USER5> this is pretty much exactly what you're looking for:

<http://mygengo.com/></comment>


Ask HN: How to make An Android phone more private and secure - <AUTHOR> Does anyone have any advice on making an android phone more private (from google) and secure.
I have done some of the basics; turn off location, encrypt the phone, limited the access of some programs, etc.
I'd appreciate any deeper dives into this
Thanks <comment><USER2> I attempted this. I'm sure it's not water tight but it was successful at preventing me from giving away my usage data too easily.

In brief:

\- a custom android ROM and NO gapps \- no Google play services \- f droid for apps \- yalp store (from f droid) for must have play store apps (although support is questionable) \- I took a new email from proton mail \- OSM for maps. SUCKS but a good alternative. Can't complain. \- dickduckgo privacy browser \- then just avoid the big tech companies (google, Facebook, Amazon, etc)

Cons: a much less streamlined experience.

Pros: some peace of mind about data. Because the phone is more basic, you don't want to fiddle with it as much. Enjoy life!

<comment><AUTHOR> Thanks! I forgot to mention im on a pixel 3a. The only custom ROM I've found is GrapheneOS and its still a bit raw.</comment></comment>


Ask HN: How does your job hurt your health and how did you fix it? - <AUTHOR>

I'm finding all the sitting hurts my back and screen time hurts my eyes. So, I've started getting up and taking walks, but haven't taken the steps to try a pilates ball or standing desk. That doesn't even count the unhealthy eating habits I was starting to adopt, like unhealthy office snacks or eating out of boredom.<p>What is your experience and how did you fix the negative effects of your job? <comment><USER2> Most people will tell you to devote real time to exercise every day, which is correct, but I've never found that doable. I'm too busy/lazy/distracted. So I'm a big fan of little efforts.

Definitely eat better. That's easy, and takes little effort.

For eye strain, use a timer and follow the 20/20/20 rule - every 20 minutes look at something 20 feet away for 20 seconds (I built timerdoro.com just for this purpose, which I run in fluid).

For stiff back, and other aches and pains, try a standing desk. Whether you stand or not, set a timer to stretch every 20 minutes. Just come up with a simple routine and do it. It becomes pavlovian. :-)

For the last few weeks, I've done this 7-minute workout every day before I shower. [http://well.blogs.nytimes.com/projects/workouts/](http://well.blogs.nytimes.com/projects/workouts/) It's 7 minutes. I have no excuse not to do it.

In my experience, if you try to jump in with a big, real commitment, you'll fail. Try little hacks and routines instead.

</comment><comment><USER3> Not exactly what you are asking for, but perhaps of interest to you.

My problems started with exercises... I had a regimen of stationary biking for the whole winter (7 miles on alternate days). By late winter I had serious buttock pains sitting in a chair or driving after about 15-30 minutes. Dr and physio could not diagnose it. Finally did some internet self diagnosis and came up with piriformis syndrome - had to do with the biking/exercising one set of muscles in one direction and not exercising alternate muscles/directions. I am now following some exercises that take about 30 minutes per day, and give me considerable relief but there is no long term fix for this.

Moral: When you do exercise try to pick exercise that have many dimensions.

</comment><comment><USER4> My arms/hands have been in pain for the last 8 years. The only thing that has helped is finding remote dev positions where I can set my own schedule and workload, and avoiding companies demanding 50-60 hr work weeks like the plague.

I'm working anywhere from 20-30 hours a week now, and the pain is manageable. For the most part, clients are still pretty happy. It helps to find clients that are happy with the end result of your work in the time it takes you to produce it, as opposed to clients who think hours worked is the end all metric of productivity.

</comment><comment><USER5> When I first read this, I thought you meant _mental_ health... that's a different story!

Constant mousing was causing me wrist pain. I have since switched to using a trackball at work and a high quality standard mouse at home. Also I try to keep my chair and monitor at proper heights, as back problems will exacerbate wrist pain.

I highly recommend investing in a good ergonomic setup. If you are going to sit at a computer all day long, at least be comfortable!

<comment><AUTHOR> I think a discussion on mental health is appropriate here. Don't feel like you're limited to physical health.

</comment></comment><comment><USER6> I try to put my hands behind my head when I'm not typing or using the mouse (because otherwise they're always in front of me and my shoulder blades hurt like hell). I switch mouse hands when my shoulder starts to get sore. I work at a standing desk with a stool so I can sit when I need to. And when I'm not working I try to spend as little time in front of a computer as I can. I also do yoga.

</comment><comment><USER7> Go back to basics! Evolution is not fast enough, our bodies are still lagging and attuned to 10000 year old habits, such as existing in nature, walking and working in the fields. Though not advocating to go back 10000 years but at least walk and spend sometime in the nature, trek etc. Believe me it works

</comment><comment><USER8> I only have back-pain, no hands/eyes/head.

Started kickboxing, also got injured there.

</comment><comment><USER9> run for 30 min to an hour every day. I had all problems and everything is gone now....</comment>