Ask HN: Can I store someone's Facebook password? - <AUTHOR> I'm building a service that logs in to someone's Facebook account and automates some tasks on there. This runs in the cloud without explicit login from the user, after we have initial permission. The easiest way for me to do this is to simply ask them for their Facebook password and store it on my servers. However, I suspect Facebook might not approve of this? I'm having trouble wading through their docs and finding anything relevant about approved ways of doing this. Any suggestions? <comment><USER2> As long as you're transparent about it and there's no other way to do this (I assume the API doesn't provide the features you need), it's a necessary evil.

However your biggest concern will be that logging into an account from a different area & ISP than the user will raise security alerts and lock the users out. I suggest you make a client-side solution instead (a desktop app or even a browser extension) so it operates from the same IP address that the user has.

<comment><USER3> Yea seems like the biggest problem will be Facebook's hairpin ban hammer if IP/geo/whatever isn't to their liking. Good suggestion re client side, will consider that as an option. Any other discussion groups you'd suggest on this topic?

</comment></comment><comment><USER4> Correct me if I'm wrong but I think it's unstable, you could lunch it and eventually got shutdown by Facebook or users might get annoying security alerts every time. I don't think it's possible because Facebook will get a tons of login requests from the same IP address (your cloud).

</comment><comment><USER5> I sincerely hope you're kidding and the people who replied positively are your fake accounts.

By doing that, you're app will be almost immediately blocked, hopefully banned, and likely also the user accounts banned.

The right way to do it is using fb api under its limitations. In addition, if I recall correctly, you'll need to refresh user's token every 30d, so you prob want an excuse for your users to come back to your site frequently, e.g. via an email that shows weekly stats.

<comment><USER6> No need to go ballistic over OP's Q.

Automation of tasks is in demand and is a good win-win business model.

There are different ways to do that - API could be the one, and different services do store users passwords to help users to do what they want and need.

No need to scream "banned".

<comment><USER3> Indeed there are many legit use cases and new tech that could be built on top of these platforms if they were more open.

GP brings up a good point about some recurring login mechanic, maybe something like that would work.

PS. Any other recommended sites to discuss this topic?

</comment></comment></comment><comment><USER7> They will not like that, and will likely take action against either you or your users (depending on the nature of your service) if they notice. Approved way is to use their API.

</comment><comment><USER8> Storing a password itself is not an issue. Password managers like LastPass do that. The automation bit is what might get you into uncharted waters though.</comment>


Teaching Method More Important Then Teacher - <AUTHOR> http://news.yahoo.com/s/ap/20110512/ap_on_sc/us_sci_teacher_or_tools

<comment><USER2> Irony: posted by someone who doesn't know when to use "then" and when to use "than".

<comment><USER3> Or it was simply a typo.</comment></comment>


Ask HN: Tons of new banks in my city. Why? - <AUTHOR> I live in Rochester, MN which is population ~110k.
There are TONS of new construction physical banks being built in town.  A small town that is already saturated with existing bank storefronts.  Why is this?
They are from many different financial institutions, so its not like one institution is growing.
Aren't most new banking clients going online? I can't wrap my head around the business case that would exist for a new bank storefront when there are already ton's of them in this small town. <comment><USER2> It is a way for banks to directly invest their own money (rather than depositors') in commercial real estate. Manhattan has something similar going on - ridiculous number of bank branches.</comment>


Ask HN: What kind of authentication model do you use for your API service? - <AUTHOR>

Ok, so I am building yet another API.
This time I wanted to go through some types of authentication implementations to see which one would be simplest for our customers to implement, and which one would be more secure.
How do you let your API users authenticate?
* Creating "Apps" in your service?
* User based Private/Public key?
* Username/Password
* oAuth?
Other ideas?
-- EDIT: Updated linebreaks in list. <comment><AUTHOR> Some resources if anyone is interested to read:

[http://blog.apigee.com/detail/do_you_need_api_keys_api_ident...](http://blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization/)

In short: [http://stackoverflow.com/questions/6767813/api-keys-vs- http-...](http://stackoverflow.com/questions/6767813/api-keys-vs-http- authentication-vs-oauth-in-a-restful-api)

<comment><AUTHOR> I would love more insights though - from real implementations! :)

</comment></comment><comment><USER2> I create mobile apps against a REST backend on GAE and I use just basic authentication over https for authenticating the users. I sha1 the password and compare against a sha1 value in the database. Simplest there is but maybe not as secure as other alternatives, but I have not found any big problems with this. Please tell me if I am missing something vital. Have bought a book about OAuth but have not opened it yet. :)

<comment><USER3> Read: <http://codahale.com/how-to-safely-store-a-password/>

Since you're running on GAE you're likely using either python or java:

Python bcrypt implementation: <http://www.mindrot.org/projects/py-bcrypt/>

Java bcrypt implementation: <http://www.mindrot.org/projects/jBCrypt/>

</comment></comment><comment><USER4> Have you considered 2 factor authentication? If you are concerned about security 2FA can give you more protection- \- Maruf

<comment><AUTHOR> Hey kuasha!

That sounds interesting, how would you implement that on an API level in a good way? I mean, the clients applications will most probably do automatic transactions all the time.

Are you thinking something like time-based sessions, which you have to authenticate on both ends - with a PK?

<comment><USER4> 2FA can use smart card- The device with TPM capability may work as a virtual smart card- This video is interesting- <http://www.youtube.com/watch?v=QmTpdZAC4_s> -

But Yes, I have to admit, for API, this may be overkill-

<comment><AUTHOR> So you would implement like a virtual smart-card in the Client application end that then communicates with the API in our end and authenticates?

I also think this might be a bit overkill - maybe something for real enterprise apps... :-)

But it's a cool thought!

Thanks for sharing!

</comment></comment></comment></comment><comment><USER5> oAuth, preferred for it's simplicity.

<comment><AUTHOR> I guess you are referring to version 1 of oAuth?

Seems like there is a lot of talk regarding the 2nd generation of oAuth.

Do you have any insight to share regarding that?</comment></comment>


Tips for Naming Web 2.0 Startups - <AUTHOR> http://www.folksonomy.org/2006/10/7_tips_for_naming_your_startup/ <comment><USER2> Good post - and very true.

Almost every popular site is no more than 2-3 syllables, memorable, easy to pronounce, and a .com. Google, MSN, Yahoo, Digg, Reddit, GMail, the list goes on...

Too bad the squatters have got almost every other URL out there that satisfies these criteria :)

<comment><USER3> Throw those criteria out the window. Squatting is such an uncreative thing, so squatters probably are unable to "think outside the box." I have stopped thinking these sites tell anything useful. What do you think of this one?

oi.oio.io

It's up for grabs (as of now), and I bet you'd remember it after a few seconds. It doesn't even need to follow a syllable rule. Too bad I don't have a product to match this name, but I think it's great. If you think otherwise, be sure to explain why.

</comment></comment><comment><USER3> Does folksonomy qualify as a good name? I registered a name that violates almost every point in every guideline list I have read to date. To oops or not to oops.

<comment><AUTHOR> ' _... folksonomy qualify as a good name ...'_

The irony of a site not following it's own suggestions. Maybe the suggestions are skewed to _theoretical_ commercial sites. Anyway they are only suggestions. For every case you could find a valid corollary. Delicious is a great one. Just how did it get so popular with that name?

<comment><USER3> del.icio.us is hard as hell to type. Here is my speculation.

First, "del" and "us" are easy to remember. Now you just place in the dots. So in terms of your memory, the difficult part is in the production phase (typing), not the storage and retrieval.

Second, I imagine most of its initial users were relatively well educated and web-wise.

Third, the lack of .com makes it unique, and at its time, a pioneer. The pioneer always has imitators, and we have seen plenty. Flickr is another one of those "pioneers."

And pioneers don't follow guidelines, because guidelines were based on the pioneers. So much for these tips; they should make a portfolio demonstrating how creative they are, like logo firms do. "Here are some example names we've come up with: 1. Folksonomy..." 4 syllables, 10 characters, and if you type properly, the second half of the word uses way too much index-finger.

<comment><AUTHOR> ' _... First, "del" and "us" are easy to remember. Now you just place in the dots. So in terms of your memory, the difficult part is in the production phase (typing), not the storage and retrieval. ...'_

Nice explanation. The way I remembered it was 'del' 'icio' 'us', pretty much the pattern you describe.

' _... And pioneers don't follow guidelines, because guidelines were based on the pioneers. ...'_

maybe that should have been a guideline.</comment></comment></comment></comment>


Ask HN: Best iPad Apps - <AUTHOR>

I just got a new iPad 2 for my 26th birthday and am looking for advice regarding what apps to install.<p>What apps do you guys find using most often? <comment><USER4> The problem I discovered is the iPad is very contextual to the user. It sort of adapts to your style way more than any othe device I've ever used. I use mine completely different to friends and my parents.

I also found I only consume media on media, I don't produce anything even tough I have assorts of apps for that reason. If you buy an Apple TV it also becomes an awesome sharing device.

My favourite consumption apps are:

\- Reeder

\- Zite

\- Flipboard (I personally think this is overrated but everyone else seems to love it)

Some free magazines:

\- Entrepreneur magazine

\- Hacker news magazine

\- Narrative Magazine

Plus I have a bunch of games I cycle through.

If you have a mac try and get apps that sync up to things you already use so you can have random thoughts on the go, and refine them later.

So for work I use:

\- evernote

\- omnigraffle

\- carbon fin outliner

\- wacom bamboo is the best hand writing app I've tried. The rest are utter rubbish.

\- remote desktop

I'll update if I think of anymore (haven't got my iPad here ATM).

</comment><comment><USER5> Carcassonne is game perfectly suited for tablet interaction: <http://carcassonneapp.com/>

<comment><USER6> There are quite a few good board game conversions out there. I also quite enjoy Carcassonne.

<comment><USER7> Agreed. I've been playing the hell out of Ticket To Ride. I love that they provide computer opponent play, play and pass multiplayer, and online multiplayer.

[http://itunes.apple.com/us/app/ticket-to- ride/id432504470?mt...](http://itunes.apple.com/us/app/ticket-to- ride/id432504470?mt=8)

<comment><USER6> I have as well. Great game.

</comment></comment></comment></comment><comment><USER8> Everybody on HN must have this apps:

1\. Idea Sketch - Idea Sketch lets you easily draw a diagram - mind map, concept map, or flow chart. 2\. Evernote. 3\. iMockups for iPad gives designers and developers with the ability to quickly draft wireframes for their websites and apps. 4\. KoderApp - a good, rich featured code editor for iPad. 5\. iSSH to control your servers.

<comment><USER9> For SSH, also check out Prompt from Panic. I recently switched from iSSH to Prompt.

</comment></comment><comment><USER10> A few I like:

        - Flipboard
        - has access to lots of news sites and presents them in really nice way
        - Reeder - really great Google reader client
        - Ebay - much nicer to use than the website
        - Twitter
        - Wunderlist - nice to do list tool
        - Instapaper
        - <USER2>
        - <USER3>

</comment><comment><USER11> Aweditorium:

<http://www.aweditorium.com/>

Probably the most visually appealing IPad muscic app.

Also, wearehunted.com has an IPad optimized html5 website that is worth checking out.

</comment><comment><USER12> I'm working on a blog post. Check for it in the morning. <http://www.blog.knolcano.com>

<comment><AUTHOR> Dead link. Kill the dubs (www)

<comment><USER12> Good catch. Here's the post: <http://blog.knolcano.com/5-ways-i-justify-my- ipad-investment>

</comment></comment></comment><comment><AUTHOR> I'll start it off with what I've gotten so far: * Boxee * flipboard * HBO GO (friend with an account) * EverNote * Dropbox

</comment><comment><USER13> The most used app on my iPad after the usual suspects: Amazon Kindle

</comment><comment><USER14> I use Flipboard pretty much every day, I can't recommend it enough.

</comment><comment><USER15> Nice post. I'd love to see comments on this.</comment>


Default Browser Styles Should Be the New Quirks Mode - <AUTHOR> https://medium.com/@CM30/default-browser-styles-should-be-the-new-quirks-mode-846a76fa21c <comment><AUTHOR> Well, it's an idea I've thought about recently. Why do we have to overwrite browser styles when in an ideal world, we should be able to disable them altogether?</comment>


Make Memes of Your Facebook Friends - <AUTHOR> http://www.mememyfriends.com/

<comment><USER2> The page gives no examples of pictures or memes and immediately asks for various permissions. I want to see what I'm getting myself into.

As a side note I hate that applications ask permission for my email address. Of course I used a dummy email address, but mememyfriends.com doesn't need an email address from me.</comment>


Show HN: ScholarCheck – Programmatically verify students' emails - <AUTHOR> http://www.scholarcheck.io

<comment><AUTHOR> I've launched ScholarCheck a few days ago to help businesses verify students' emails.

If you're a startup looking to implement student discounts, run a student giveaway or you have another use for our ScholarCheck, get in touch with us and we can arrange a special launch discount.

</comment><comment><USER2> I'd suggest having your landing page explain a few common scenarios of where using ScholarCheck would be helpful. I'm not clear on why someone would want to use this. (or who the target audience is)

</comment><comment><USER3> Do you filter out @alumni.* accounts? That was the go to way of getting student deals after graduating.</comment>


What Carriers Aren't Eager to Tell You About Texting (2008) - <AUTHOR> https://www.nytimes.com/2008/12/28/business/28digi.html <comment><USER2> If they're not willing to disclose information, we should simply assume the least favorable interpretation to them, and act and legislate accordingly.</comment>


Mmhmm: A video broadcasting app tailored for presentations - <AUTHOR> https://www.mmhmm.app/ <comment><USER2> i really want to help beta test this!</comment>


Inspiration is procrastination's cousin - <AUTHOR> http://stevecorona.com/inspiration-is-a-lie

<comment><USER2> I have to disagree with the author. Had plenty of good ideas while riding a bike, showering, etc. I would call that 'inspiration' and it didn't come from working, it actually came from not working.

I would agree that it's foolish to wait for inspiration to strike, but the fact that it's foolish to wait doesn't mean there is no such thing as inspiration.

</comment><comment><USER3> Well written. Inspiration comes from doing; a feeling of perseverance; a lot of passion. It does not mean that you have to keep working on your idea. You just have to live in it. No matter what you're doing, your mind has to start working on focusing on that one thing you're out to achieve.

</comment><comment><USER4> Inspiration exists and it will often only come when I am am not working. The catch, is that I have to have already done my work. There is a point at which I know that I need to stop working and give my mind a break. During that break, all of those thoughts are marinating in the back of my mind. A change of environment and activity will often make that inspired idea "click". For me, inspiration is allowing outside stimulus to act on the preparative work that you have already done. Inspiration is not lazy. Inspiration is patience and determination.

There are countless stories of people finding their best ideas while in the bath/shower, on a walk, on the toilet, etc. There is a reason for that.</comment>


Connected Car platform Automatic releases teen driving coaching program - <AUTHOR> http://techcrunch.com/2014/10/27/automatic-launches-license-a-coaching-program-for-teen-drivers-and-their-parents/

<comment><USER2> If you want drivers to be safe (read: boring), your goal is to make sure their skills are as poor as possible.

After learning to drive, I started to do the kinds of things that insurance companies/parents didn't want me to (sailing along straight, empty freeways at night, hard acceleration, hard braking, slight drifting on snow, but mostly very fast turns) because I felt 100% in control of the car the whole time. And I was. It's part of the hacker thing. You've given me a machine; I want to find out what I can make it do. And G-force is fun.

I don't touch the things that you really don't touch (distraction, intoxication, trains) but the rest of it, absolutely, because I can. I built up to things slowly - what happens if I wait just a _little_ longer to take my foot off the accelerator before making a right? And then I figured out what was _just_ past the threshold of comfort, and backed down. Never with pedestrians around, and never with passengers, but enough that I felt like if it were really a bad idea, it would have caused problems by now. I lost control exactly once, playing with snow alone on a deserted street well under the speed limit, and was still nowhere close to hitting anything.

When I see "maniacs" weaving through traffic or bikes not stopping at intersections, my response is usually to maintain course, because I know what they're thinking. They're thinking "I know exactly where I am, I know what space I occupy, I know what space I _will_ occupy, and I know that I have a reasonable margin such that we're not going to collide." I'll often think that their appetite for risk is irresponsibly high, but I have a certain respect for their certainty and I do my best to make sure they're right, and usually that means maintaining speed.

Drivers who are obviously distracted, on the other hand, freak me out. If someone is slow reacting to a green light, for instance, I will hate them intensely but I'll also stay the hell away, because they're probably still texting.

Engineering is actually at odds with safety here: a car that handled better would only have made me more comfortable. If you want people like me to always brake/accelerate/turn slowly, then you actually want us to feel _less_ in control and _less_ skilled.

Surveillance would probably work also, but I just found that marketing copy interesting. You don't want skilled drivers, you want drivers who are scared shitless and correspondingly conservative.

I find some support for my theory in the fact that the road up to Pike's Peak in Colorado is, statistically, one of the safest roadways in the United States. There are tons of hairpin turns with no guardrails where missing it by a few feet would mean a 3,000+ foot fall. But people respect that, and are consequently extremely careful and attentive.

</comment><comment><USER3> I bought the OBDLink to use with [Dash]([http://dash.by](http://dash.by)) and it annoyingly forgets to auto connect to my bluetooth. Now, want to switch to Automatic since they also have a web ui...</comment>


Liberia to receive Zmapp drug to treat Ebola virus - <AUTHOR> http://www.bbc.co.uk/news/world-africa-28749615

<comment><AUTHOR> Interesting move as this is an example of a drug with unknown efficacy in humans out in the wild. The arguments are ethics of untested drugs vs 'Ebola is killing at least half the people - how bad can it be?'

</comment><comment><AUTHOR> The Spanish Priest treated with ZMapp died [http://www.bbc.co.uk/news/world- europe-28754899](http://www.bbc.co.uk/news/world-europe-28754899)</comment>


Apple Customer Support Doesn't Know When To Stop - <AUTHOR>

Forwarded conversation Subject: Re: Mac App Store Account and Billing 23456; Follow-up: 123456 <comment></comment><comment></comment><comment></comment><comment>
From: <firstname.lastname@example.com> Date: Tue, Feb 28, 2012 at 8:05 PM To: firstname.lastname@example.com
Dear x,
Thank you for contacting iTunes Store Support. My name is Rachelle and I'll be your advisor for today. I'm sorry to hear that you're unable to download "OS X Lion" as you received a message stating the there's an unfixable problem with your computer. I apologize for the inconvenience this has caused you. Not to worry, I'll do my best to help you with this.
I understand that you'd like a refund for this item. Unfortunately, the order containing this item is currently processing. Your request is flagged for follow-up, and I x contact you once I have more information about your order. Please note that processing can take up to five business days from the date of purchase.
In regard to the message you received about your computer, I suggest that you call our AppleCare technical support team. A technical Advisor x be able to tell you about Apple's complimentary and fee-based support options as well as assist you in determining what option might be most helpful in this case. To find the appropriate phone number, please visit:
http://www.apple.com/support/contact/phone_contacts.html
I appreciate your patience and understanding about this matter. Thank you being an iTunes Store customer and have a great day!
Sincerely,
Rachelle iTunes Store/Mac App Store Customer Support
Please Note: I work TH-M, 4PM-1AM CT
Thank you for allowing me the opportunity to assist you. You may receive an AppleCare survey email; any feedback you provide would be greatly appreciated.
Customer First Name : x Customer Last Name : y email : email@example.com Web Order # : 12345 Support Subject : Mac App Store Account and Billing Sub Issue : undefined Comments : See additional info below OS version: Mac OS X 10.6.8 Country: United States Apple ID: firstname.lastname@example.com Specific request: I have a purchase or billing question Item title: Mac OS X Lion Order number: 123456 Details: I payed $30 to download Lion, but when I tried to install it, it reported that there was an unfixable problem with my computer. Now I'm stuck with an unusable copy of Lion and down $30. Could I please get a refund?
TrackID: 123456
</comment><comment>---- From: x y <email@example.com> Date: Tue, Feb 28, 2012 at 8:12 PM To: firstname.lastname@example.com
Thanks for your help Rachelle, and I look forward to hearing back about the refund. I already spoke to an Apple store employee, and they recommended that I back everything up and replace the hard drive. However, I plan on purchasing a new computer soon, so I am going to hold out on putting any more money into this one. --
x
</comment><comment>---- From: <email@example.com> Date: Wed, Feb 29, 2012 at 5:32 PM To: firstname.lastname@example.com
Dear x,
I appreciate your quick response. I'm glad to hear that you already received an assistance from our Technical Support team. I understand that you want a refund for "OS X Lion" as you won't be able to use it. Not to worry, I'll do my best to help you resolve this.
x, after reviewing the circumstances of your case, we determined that issuing you a refund for your purchase is an appropriate exception to the App Store Terms and Conditions, which state that all sales are final. You x see $30.29  added to your store credit balance in 24 hours. You may need to sign out of the iTunes Store and then sign back in before you see the credit in your account.
On behalf of iTunes Customer Support, I would like to extend our warmest thanks for the opportunity to help you today. Kindly let us know if you have any additional issues. Have a wonderful day!
</comment><comment>---- From: x y <firstname.lastname@example.com> Date: Wed, Feb 29, 2012 at 6:42 PM To: email@example.com
Thanks Rachelle, youdabest. --
x
</comment><comment>---- From: <email@example.com> Date: Wed, Feb 29, 2012 at 7:53 PM To: email@example.com
Dear x,
You're very welcome. I'm glad I was able to process your refund for "OS X Lion"
Nothing makes Apple happier than to hear that we have pleased our customers. I hope that you continue to enjoy the iTunes Store.
</comment><comment>---- From: x y <email@example.com> Date: Wed, Feb 29, 2012 at 8:16 PM To: firstname.lastname@example.com
You have pleased me, a customer. Enjoyment continues. --
x
</comment><comment>---- From: <firstname.lastname@example.com> Date: Wed, Feb 29, 2012 at 8:29 PM To: firstname.lastname@example.com
Hello x,
Gabrielle here from the iTunes Store.
On behalf of Rachelle, I'm so glad to hear the issue is now resolved. Nothing delights Apple more than hearing a happy customer.
Please feel free to contact us again in the future if you need any more assistance. We are always here and happy to help our valued customers.
Thank you so much for your dedication to Apple - We truly value your business and hope you x continue to enjoy using the store. It is after all, customers like you which keep our company alive.
I wish you the best and hope you have an excellent week, x!
Sincerely,
Gabrielle iTunes Store Customer Support http://www.apple.com/support/itunes/ww/
Please note: I work Sunday through Thursday, 4:30 PM - 11:30 PM EST.
</comment><comment>---- From: x y <firstname.lastname@example.com> Date: Wed, Feb 29, 2012 at 8:32 PM To: firstname.lastname@example.com
Gabrielle,
Thank you so much for picking up on behalf of Rachelle, who helped me admirably.
You make you sure you have an excellent week as well, even though it is almost done!
x
--
x
</comment><comment>---- From: <firstname.lastname@example.com> Date: Wed, Feb 29, 2012 at 8:44 PM To: email@example.com
Hello x,
Joanne, here from the iTunes Store. On behalf of Gabrielle, you're more than welcome! Nothing makes us happier than to hear that we have helped our customers. I wish you the best and hope that you x continue to enjoy shopping the iTunes Store in the future. Have a great day, x!
Sincerely,
Joanne Please Note:   I work Sunday, Wednesday and Thursday 8:00 AM to 4:30 PM Thank you for allowing me the opportunity to assist you.
</comment><comment>---- From: x y <email@example.com> Date: Wed, Feb 29, 2012 at 8:49 PM To: firstname.lastname@example.com
Joanne,
You are most gracious. You have a great day as well! Or evening actually, rather. Yeah! </comment><comment><USER2> I see that your first name is Will.

<comment><AUTHOR> I feared that as I was finding and replacing. Well, there goes my identity.

</comment></comment><comment><USER3> Why are you complaining about this?

<comment><AUTHOR> Not complaining, just thought it was funny how they had to have the last word.</comment></comment>


Scandy turns new Asus Zenfone AR into 3D scanner using new Scandy Core SDK - <AUTHOR> https://scandy.co/blog/scandy-pro-turns-new-asus-zenfone-ar-into-3d-scanner/ <comment><AUTHOR> Full disclosure: I work at Scandy and we're pretty excited about what we're accomplishing with the Zenfone. We're also working on putting 3D scanning on most Android phones with an attached 3D scanner. Feel free to ask me about it if you'd like!</comment>


Command line interfaces are reified UIs - <AUTHOR> http://www.expressionsofchange.org/reification-of-interaction/ <comment><USER3> _> There is, after all, no fundamental reason a GUI could not be designed with the goal of reification of interaction in mind; it's just that it is rarely done in practice._

If we have to search for an underlying reason, it's that most GUI interactions by most end users don't need reification and therefore, that code is not put in.

If the GUI has obvious needs for reification, the programmers account for it. Two examples that come to mind are computer chess games, and software audio workstations.

Many computer users who are comfortable with UNIX command line will nevertheless "move chess pieces" by clicking and dragging the piece from one square to another. However, virtually all chess programs still record the algebraic chessboard notation of each move and the players can see the tally of moves scrolling on the side of the board.

The other example has music producers mixing a song. They will adjust the sliders/faders of volume panning and the software will record their moves. It's known in the trade as "mix automation". When the song is played back, the software makes the sliders mimic the same moves. The automation in "reified" into a time graph[1] such that one can move the nodes around to fine tune the movements more precisely than the fingers did in real time.

As for other GUI applications like typical business data entry screens, etc... most GUI toolkits like C# Winforms, C++ Qt, HTML buttons, etc _do not include a macro recorder_ in the default event loop. Therefore, to "reify" the GUI in the same fashion as chess programs or the audio software requires grafting data structures and programming extra code to "record" the button presses into a timeline. Programmers won't do this unless there's a customer need for it. (E.g. Photoshop lets you reify the GUI as "actions" for later playback")

[1] example yellow line graphs the fader or knob changes: [http://cdm.link/app/uploads/2014/06/logicmixing-640x399.jpg](http://cdm.link/app/uploads/2014/06/logicmixing-640x399.jpg)

<comment><USER4> Paint.net is another example of an application that reifies its actions with a nice 'history' window that shows the semantic actions that the user has performed and allows you to jump back to earlier points in your history of editing the file. GIMP does something similar, it seems particularly common in image editing programs.

<comment><USER5> Ditto for AutoCAD -- I loved seeing how the equivalent CLI command appeared in the log as I was using the GUI to draw.

<comment><USER6> I was thinking about this just a few days ago. This seems like a much better way of teaching people shortcuts than a 20-page cheat-sheet or even "hints" in various menus. No UI clutter, no effort. The program just tells you how to do the same thing in another way. The more you do the "thing", the more likely you are to notice those tips and try out the shortcuts.

I don't think Paint.NET or GIMP do quite what you've described though. They show a history of action, but they don't show commands.

<comment><USER7> Now I don't have lots of experience with Blender, but I do remember that Blender when hovering a button shows the Title of the interaction, but also a description, shortcut AND the equivalent python code you can run in the terminal to achieve that action. That's pretty awesome.

Here is a example: [https://i.imgur.com/NNFruMx.jpg](https://i.imgur.com/NNFruMx.jpg)

</comment></comment></comment></comment></comment><comment><USER8> They reify UIs, but discoverability of functionality can be a real problem. Git, of course, is the classic example, because its "UI" is a hacked-together mess compiled over years and years and features were added piecemeal. But even for green-field CLI tools, it's a problem.

The real value of CLI tools is _extensibility_ and _scriptability_. You don't have to rely on the application developer inserting UI hooks everywhere; you just write a shell script, and in the absolute worst-case scenario use Expect to automate interactive processes. And adding a new subcommand is relatively trivial. The code is typically easy to trace the user input down to the internal machinery. The UI is a very simple function dispatch and argument- passing mechanism. There are no widgets to worry about, no switches or boxes to position.

Therefore CLI tools will always be beloved by power users and feared by everyone else. If you know exactly what you're doing, they can really speed up your workflow and provide and interface for precise, expressive control and automation. Otherwise, all but the best-designed CLI tools are intimidating and difficult to master. Who can remember all those switches? Having a bunch of labeled buttons laid out in a UI leads to a much lower cognitive load.

IMO the real value is in CLI applications that can be embedded in a GUI, but are embedded _transparently_ , in that the GUI can be scripted by simply scripting the underlying CLI. Git (Git GUI, GitHub, Tortoise, Tower, etc), Apt (Aptitude, others), TeX (Tex Live Manager, kinda), and others have good interfaces along these lines, but we're definitely in need of a good CLI interface for Rsync and Tar. Many CLI wrapper GUIs tend to be opaque and don't expose enough underlying functionality.

 _One standard for history-keeping is the following: If we start with a clean system, and replay all the commands from the history, will we end up with the same system?_

This is how Lighttable, Photoshop, and other Adobe CS products work. Also the Vim "undo tree" to some extent. It's an excellent feature.

<comment><USER9> From personal experience, many users fear all UIs. This because they fear that their actions will be irreversible more than anything else.

And frankly i suspect that CLI gets a bad rep because MacOS never had a CLI to begin with (OSX got one via its unix internals, but i am unsure Apple knew to value it), and DOS was minimalist to put it mildly.

Sadly this has lead to unix UI devs to disparage the CLI when they should embrace it. That a X11 GUI tool is a wrapper around CLI tools is not a hindrance but a boon.

It means that if the CLI tool behaves correctly, the GUI tool will as well. And if the GUI tool behaves incorrectly, the user can try the same in the CLI to see where the problem originates.

It is really sad to see the push towards using dbus rather than CLI to communicate between GUI and daemon, as so much potential information is obscured in the protocol.

<comment><USER10> That is very different from how I remember history. At least in Norway (and Nordic countries in general I presume), Apple never had much presence. Whatever they thought of the CLI, was rather irrelevant. Amiga and PC which was both popular in the 80s both had a command line.

I'd rather say that it was Windows which made the CLI look bad. They made people think that CLI means old fashion technology. Amiga like OS X had a window system and CLI from the beginning and so users did not view CLIs as old fashion technology but rather as one of several alternatives.

My experience from the time was that it was mainly PC Windows users who talked down CLIs because they viewed DOS as a antiquated. In some ways it makes sense as the DOS CLI has been horrible for decades and MS never put any effort into making it nice.

I'd say OS X could be thanked for resurrecting the CLI. I still encounter Windows developers who almost don't know about the CLI and who never uses it. I don't think you find and OS X developers in the same position.

<comment><USER9> Mac in Norway is an odd duck. It never caught on as a wide consumer computer, but has maintained a presence as the primary computing platform in media production.

</comment></comment></comment></comment><comment><USER11> > CLIs predate GUIs

I'd consider the front panel of physical buttons, switches, knobs and dials of early, pre-teletype computers to be much more like a GUI than a CLI. We circled back around to buttons and sliders, with state display laid out in 2D in ways our brains enjoy.

<comment><USER12> CLIs are powerful because, like programming languages, are close to human language.

Not surprisingly the following transitions happened in many industrial applications, complex vehicles, not to mention weapons (e.g. submarines):

"few knobs and dials" -> "airplane cockpit" -> airplane cockpit + keyboard and a simple CLI -> full scripting

</comment></comment><comment><USER10> I consistently surprises me how many people can't grasp the advantages of both approaches CLI and GUI.

For me the key thing about CLI's is the same as the benefit of plain text in the traditional unix style of thinking.

When your interface to any functionality is plain text you have the advantage that you can use any number of generic tools to manipulate that interface.

One example is how visual programming languages are mostly failures. It doesn't take long before the inherent problems of composing a program in a GUI is made clear. Text is easily malleable.

You see this on many levels. You might be in an IDE and need to change a value of multiple settings or duplicate some setting several times, except there is no tool in your IDE to actually do a substitution of values in arbitrary settings or do duplication.

However when settings are represented as just plain text, this becomes a trivial matter to solve.

One of the reasons I love macOS so much is that from the very beginning of OSX Apple made the interaction between GUI and CLI very smooth. They both have strengths and I am no fundamentalist, and so they should work well together. You see that in how Apple early supported things such as dragging and dropping objects from the GUI into the terminal.app or the "open" command which allowed you to invoke the appropriate GUI tool for a given file type from the CLI.

The Plan9 guys probably went furthest in this. They seemed to have woven GUI and CLI thinking tightly together.

</comment><comment><USER13> If you use Symbolics Genera (or the Common Lisp Interface Manager, see for example McCLIM), the GUI interactions will seen as 'gestures' and not as clicks. For example there could be a Select gesture. These gestures then invoke commands. The commands created by mouse gestures will be recorded in the interactor history like a command which has been typed to the interactor. Pointer gestures are : select, describe, delete, menu, edit,

Thus one gets a history of commands, which also can be reused, even from mouse gestures. Selecting a command from a menu or direct manipulation usually will lead to a recorded commnand in the interactor. The interactor runs a command loop.

<comment><USER14> EDA tools tend to be similar. GUI interactions result in Tcl commands that are automatically entered and executed in the Tcl window.

</comment></comment><comment><USER15> CLIs are (or can/should be) composable. This is what really makes functional programming languages so powerful -- they give you a few connective frameworks, and a box of components that can be glued into them, and one can compose great things from simple things.

Or, in other words, "|" in the shell is "." in Haskell (with operands reversed).

<comment><USER16> > _Or, in other words, "|" in the shell is "." in Haskell (with operands > reversed)._

Well for _real_ power you also throw partial application and arbitrary sub- lambdas / case-switches / let-binders into this mix and now that basic 'pluggable' composability truly _shines_ =)

</comment></comment><comment><USER17> The Morphic framework in Squeak Smalltalk was an excellent example of this idea. Every object essentially had a little REPL+IDE attached to it. The more standard Smalltalks weren't far off from this either. In just one afternoon, one of my coworkers wrote a utility allowing him to command-click anything in the GUI of our app and open a browser and inspector on it. The reason why he did that, is because he sorely missed an even more powerful utility of this type from his Symbolics Lisp days.

</comment><comment><USER9> This reminds me of an old osnews article i dug up a while back.

[http://www.osnews.com/story/6282/The-Command-Line--The- Best-...](http://www.osnews.com/story/6282/The-Command-Line--The-Best-Newbie- Interface/page1/)

It basically talk about teaching older people to use computers by way of the unix CLI.

</comment><comment><USER18> Regarding the benefits of CLIs, "reification" is only one benefit of many:

Economy:

Graphical protocols like X or web standards are much heavier over the wire than text, and are often not suitable for many use cases. There is also economy of movement, moving the hand back and forth from keyboard to mouse or up to the screen to tap.

Consistency:

Text is a relatively simple data format supported everywhere. Cutting and pasting data with images and formatting, for example, is often a mess or doesn't work.

Precision:

Mouse (and touch) input is imprecise and frustrating analog experience. Clicking on a specific point requires moving to it and not missing it. Grabbing an edge of a window is the least elegant gesture ever created. Text entry is precise and digital.

<comment><USER19> "Grabbing an edge of a window is the least elegant gesture ever created."

Yes! But only because they made it 1px wide, and do not auto increase the border once you get close ... really stupid and inconviniend.

</comment></comment><comment><USER20> In case you were wondering:

re·i·fy

make (something abstract) more concrete or real. "these instincts are, in humans, reified as verbal constructs"

</comment><comment><USER21> I absolutely agree about the benefits of reification.

In addition to creative authoring tools such as Photoshop which others have mentioned, I want to praise Microsoft's SSMS (SQL Server Management Studio). Some years ago, I had spent some time DBA'ing MS SQL Server and really enjoyed that tool. It's an extremely discoverable GUI for managing this very complex DBMS, and before every operation you perform through one of its wizards it would show you the T-SQL command it generated to perform that action, so you could review and/or script it.

I wish more sysadmin tools were like that.

</comment><comment><USER22> "Reification" has a fairly clear meaning in CS: basically, it refers to a situation when some feature in a language is made available as a value that can be "passed around" in the program and used somehow. Closures are a reification of functions and lexical environment; continuations a reification of control flow, etc. Classes can be reified as objects, so that we can receive a class as an argument and ask that class to spin off an object of the type that it represents. The _va_list_ type in C reifies function arguments (at least the trailing ones, of a variadic call) so then they can be passed to another function or functions.

We can take as our model of a simple UI the "dialog box", in which a user can prepare some inputs, and then submit. The "dialog box" corresponds to a function with arguments, and the sumbmission is a function call. So of course, in an underlying programming language, the equivalent can be reified as a first class function.

Even a relatively unsophisticated textual CLI can "reify" that at least by turning the concept of a "command" into a string value: there can be a variable that can hold a command, which can be passed around, dynamically calculated and altered, and executed.

The UI usually has no straightforward equivalent of "generate 100 instances of this dialog box invocation, feeding successive values from this list into the ID field ...". That sort of "reification" can occur with tools that automate the generation of events into the windowing system.

Graphical frameworks in which you can make "actor" objects and hook them up are kind of a reification of the GUI.

</comment><comment><USER23> I use the command line a lot for web dev but wouldn't say I was a real power user.

Pain points for me are discoverability and ease of making dangerous mistakes. I can't remember the command for every useful utility and it's very easy to accidentally break lots of things. Great power comes with great responsibility and all that.

What tools do you use for auto-complete-ish features on the command line? or anything to generally make using it easier.

<comment><USER24> Prezto for zsh has pretty good command line completion and a lot of plugins which are either on by default or available for you to flip the switch on. It's taught me some nifty bits of git, gpg and some others. [https://github.com/sorin-ionescu/prezto](https://github.com/sorin- ionescu/prezto)

I personally prefer working on a command line because it's _more_ discoverable to me than most gui's. This did take some getting used to though. The approach is different.

The worry over making dangerous mistakes is understandable. That said I have made very few big ones after a bit of learning, and it has also helped me _avoid_ making dangerous mistakes by facilitating the automation of otherwise delicate or involved tasks which would be unpleasant to click and type through.

</comment></comment><comment><USER25> Notebooks a la Jupyter do have all the qualities described in the article in graphical form. In fact any programmable system that allows combining multimedia objects could be shaped as a graphical CLI.

That kind of system would have been very hard to make with object oriented programming. But thanks to the recent advances in programming languages supporting asynchronism and composability, we'll see more of them.

</comment><comment><USER26> Interesting that as an example of the benefits of 'reification' the author gives the ability to copy/paste commands to execute them again.

Of course, this interaction with the command interface - that of selecting the previous command, copying it, then pasting it - is _not_ 'reified'. It is executed through the - we may have to admit it - _graphical_ interface through which you are interacting with the command line interface. It's not a purely textual interface, after all, since it includes graphical elements like a _cursor_.

As an experiment, consider that a voice assistant like Alexa or Siri is also effectively a command line interpreter, but that in those cases 'copy paste' is not available so easily. 'Siri, repeat back the last command I gave'?

So maybe the interface that is being praised here isn't the _command line_ but rather the graphical interface in which a command-reifying interface is hosted...

<comment><USER27> That's a bit of a stretch. I get by just fine in the console without making any real use of its gui-ness; !! is a lot more efficient than reaching for the rodent. Actually, I'm in the process of switching to a framebuffer console -- I mostly just need to get emacs to make use of my truecolor implementation and I'll be X free.

<comment><USER26> Sure, but your !! command isn't reified. Any edits you make to a command plucked from your command history aren't reified.

I didn't say anything about using a mouse to interact with the CLI - <USER2> and pasting don't require a mouse, but they do require a UI through which you can see what you're selecting and copying, even if it's just cursor key driven. And it's the original article which suggests copy/pasting commands from web pages or docs into your CLI, as well.

</comment></comment></comment><comment><USER28> What about reification of failure?

One supremely nice thing about *nix-style systems is that most programs will barf a number of complaints along the way to failure, while Mac/Windows counterparts typically fail silently or log errors to a mysterious per-app location.

</comment><comment><USER29> I've always wondered why every application doesn't just have a shell console hanging off the bottom of the window, the way browsers do.

We've already had a half-assed version for decades, part of nearly every GUI ever (though they're falling out of fashion these days): "status bars." And most OSes also already have a "scripting" mechanism that requires applications to expose a specific "scriptable API" (WSScript requiring ActiveX components on Windows, Automator requiring Apple Events on macOS.)

So just combine the two! The OS could have a "status-bar control" that you'd stick onto your main window of your app, which would start as a regular status bar, but have a little disclosure arrow—that would turn it into a full historical log of every previous "status", plus a REPL for entering script (probably with a dropdown to select which of the OS's available "scriptable languages" you're writing in.)

If you don't want to muck up your GUI, you could simply detect whether your GUI app has been launched _from_ an interactive terminal (i.e. whether stdin is a PTY) and then provide a regular REPL-like interface on the terminal. A lot of GUI apps already _log_ to stdout in the expectation that developers will be running them from the terminal; why not just add some more interactivity the same way?

\---

I should also mention a third, much less obvious route: Plan9's Acme editor, which isn't so much a "GUI editor" in the normal sense as it is a text buffer with a configurable space of API commands hanging off of it.

In Acme, the menu system (and its associated keyboard accelerators) are effectively just another text file that you can tab into and edit. Each thing you write into the menu is just a literal API call. Hitting that menu item will then call that API, passing the selection or the current buffer as necessary. [It's actually even more universal—in Acme, left-click selects and middle-click activates. You can write a command anywhere and then middle-click it. The menu just provides a convenient holding place for middle-click-able text.]

Acme has its own internal commands—sort of like Windows PowerShell—but it also allows you to just write regular shell commands into the menu as well. Activating a `wc -l` menu-command will literally just dump the output of `wc -l` into the status bar. Activating `tr A-Z a-z` will literally just tr(1) your selection/buffer into lowercase. Etc.

And I fudged a bit: the commands that are "internal" to Acme are just shell commands too. Since we're talking about Plan9, every process has its own environment, so Acme has a set of internal binaries that end up in its own /bin. These little "command" programs just use RPC to send commands to the current Acme instance. So the "scripting environment" here is literally the shell itself! (And you can "script" Acme from outside it, too, by mounting its command-binaries from wherever it keeps them, into _your_ process's /bin dir.)

</comment><comment><USER30> Not a native english speaker here, could someone explain what exactly "reified" means in this context? I tried searching online but it only led to further my confusion!

<comment><USER31> "reified" comes from the Latin "res" meaning "thing". It means "to make an abstract idea or concept into a real thing". For example, the Turing Machine model of computation is _reified_ in the form of actual computers.

</comment></comment><comment><USER32> GUIs might be easy to use (e.g: IIS manager), but when you have to manage 50 machines, programability is important and automation becomes more important.

<comment><USER9> And why, after so many years, MS introduced Powershell.

Now you can do a GUI-less Windows server install, as manage it completely over the CLI.

Never mind that with Windows 10 there is no damned way to tell Windows to request a new address from DHCP if the initial attempt failed. The only way to do so is via the CLI and ipconfig.

<comment><USER32> Powershell is fine. However the Windows philosophy is different.

In Unix, "everything is a file", and what is not a file, is a program that can be configured or a CLI with arguments that can be passed in programatically.

</comment></comment></comment><comment><USER33> The drawing tool Ronin is an interesting experiment in mixed-mode command/direct interaction: [https://www.youtube.com/watch?v=gifzjhyBwOc](https://www.youtube.com/watch?v=gifzjhyBwOc)

</comment><comment><USER34> I think what a lot of GUI's fail to do is to just get out of the way when it's failing to accomplish whatever task is at hand. You don't have the problem with CLI's most of the time because you probably have to implicitly compose commands to achieve the same thing the GUI might do in a single click.

A button might kick off a set of tasks and aggregate the output into a final success message. If it doesn't work there's almost no way to dig into what's going on or even attempt to get the program to an acceptable state with whatever data you're working with.

A CLI might have an analogous command that also kicks off a set of tasks but if it breaks/doesn't work and assuming the CLI is following a unixy model, you can run through specific commands diagnosing the issue or at the very least get to an acceptable state in your workflow that leaves you with a few options to work with.

Any GUI, in my opinion, should just be a visual abstraction from a set of executable tasks that can be run individually. Take something like Github's Desktop client. In yester-years, when it first came out, it was pretty bad at handling git rebasing operations. But because of the way git was built and used most of the time, the Desktop client actually just called into the gitlib API or even just straight up wrapped git commands. If something broke, just like rebasing, I could actually take to the command line, inspect the state of the repository, and continue with rebasing via the vanilla git commands. And even then, when a git command doesn't act right, it might actually just be a wrapper around other more internal commands that you can execute yourself (i.e., git pull is actually analogous to git fetch; git merge origin/*). Compare this to a TFS error I've been getting for a few months on a legacy repository, with little to no information across application and system logs, and almost no information via google: "Provided parameter is not valid." Neat.

I wish the described "composable application" if you will was just a standard across every application. Even in web applications I build I make sure there are "steps" in data processing instead of just monolithic operations. I take care to make sure steps can be kicked off individually with sane output. It seems like we lost this philosophy along the way across every level of application development and the linux ecosystem hasn't been immune from this in my experience. Windows has never really stepped foot in those waters until recently with PS. But most of the time, in my experience, we get GUI's with no recourse. If it breaks you just might be out of luck until a patch comes in or you can interact with the data yourself.

Maybe one day if a program (even a web app!) doesn't provide a set of clean commands to run we'd look at it like we do a badly designed GUI, with disdain and disgust.

</comment><comment><USER35> i guess we should start making them "clean" and start removing all those useful flags

</comment><comment><USER36> A debate that never grows old?

Against better judgment, I will bite.

The author makes a valid point. Consider command line history, and command line editing via vi or emacs bindings. I use sh like a REPL all day, every day. I make constant use of searching prior tasks with Ctrl-[ + / or fc -l. I also have hundreds of short, saved scripts.

I do not use a mouse or X11, no vim. I do not use a "clipboard", other than tmux buffers. Everything happens through editors/pagers like sed, vi and less. There is constant iteration. What is the GUI equivalent? Keyboard macros?

The ultimate aim is to make tasks _non-interactive_. To script away the interactive work. Automation. This is in direct opposition to the philosophy of the GUI: that work must be interactive, and to make interaction more pleasant.

But there are so many differences _and similarities_ between CLI and GUI. What really separates them and makes me choose one over the other? If I can pick just one point of differentiation: _Most times_ , CLI is more reliable. What does reliable mean here? It means robust. Less likely to fail.

Assume that for comparison we can have both GUI and CLI versions of the same applications. And that the GUI is more than just a "skin" over the CLI.

Show me a GUI application that is more reliable than the CLI version. I will take notice.

But to get me to switch away from CLI usage, one must show me _many_ GUI applications, all more reliable than their CLI versions.

An entire system of fast, robust GUI applications, all more reliable than CLI alternatives.

This might be possible. But it is not available as of today AFAIK. And I have to go with what works. Today.

FWIW, I am an end user not a developer.

<comment><USER16> > _FWIW, I am an end user not a developer_

Well now I'm really curious about your actual software use-cases here. _Because_ regardless of whatever "end user not dev" use-case I can think of, out of the many multiple dozens that instantly spring to mind, I cannot name a single one that has _not_ had for 1-2 decades multiple well-known, widely- used-daily, best-in-class apps or suites on the market that are fully GUI-no- CLI and are at the very least evidently "reliable enough". Whatever GUI app I have used in the past 10 years, we can talk GIMP/Paint/VS/Sublime/VLC/Photoshop/Lighttable/LuminanceHDR/Blender/Unity/Unreal/VScode/Thunderbird/Firefox/Chromium/archival- tools/file-explorers/countless-others --- not only have they been _utterly_ reliable and predictably delivered as was demandedd, their CLI alternatives hovered between non-existent and underfeatured.

So "end user not a dev" to me sounds like you must be a sys-admin or maybe, "author of man pages" ;)

<comment><USER37> About half of those guy apps you're presenting are irreplaceable. The other half are not. GIMP, Paint, Photoshop, Lighttable, VLC, LuminanceHDR, Blender, firefox, chromium (image/video viewers/editors, web browsers) are all about looking at, creating, and modifying things that are graphical in nature. Thunderbird, a mail reader, is about looking at things that are textual in nature. Same with file explorers, archival tools, and text editors. These things work fine with a cli interface. Unreal/unity are a bit of a special case -- there's nothing that does _exactly_ what they do from cli, because that's impossible, but it's more than possible to create large playable graphical video games directly with a text editor and a cli -- even if it's not possible to play them that way.

<comment><USER38> I don't have a lot of experience, but I suspect that many visual applications could be greatly improved by a well defined command language.

The various dialog boxes and widgets in apps like Gimp and Inkscape always seem fussy and annoying to me, especially when I know exactly what I want. If I could talk to the app, I would say "put margins 2cm from the page edge" or "position object X halfway between objects Y and Z", etc.

Blender has a Python console, and it's even somewhat discoverable because you can find out how to script an action you do in the UI, but the Python API is too verbose and ugly to be an actual daily mode of operation, I think.

<comment><USER37> Sure, there can be a textual component. This works out well and is even necessary in, e.g., game engines. But ultimately you're modifying an image and you need to be able to see the modifications as you make them even if the way you're making them is with the keyboard.

<comment><USER19> I think you missed his point: he meant manipulating an (vector) image with cli. So you type what to change and then you see the change.

<comment><USER37> No, I get that. But it's still fundamentally a gui application

</comment></comment></comment></comment></comment></comment></comment><comment><USER39> Graphical interfaces are useful to me personally because unlike a CLI, there is substantially less in the way of functionality that I have to remember, especially for programs which I rarely use. It is painful to input -h args and read through pages and pages of options to find a handful of the options that I need, especially when I am using something new.

I've given light thought to the possibility of writing some kind of hybrid which acts as a general purpose terminal, but can somehow provide more information in a graphical manner-even something like directory traversal would be drastically simpler, IMO. Of course, this is not a trivial problem.

Are there any existing shells which hybridize GUI and CLI?

<comment><USER40> Some of this depends on what you are used to. I prefer the command line myself but all my colleagues have these graphical interface things going on. So when I am working collaboratively on someone else's machine I have to endure things like graphical file browsers. This works great if you are working with images and need to see the thumbnails to visually identify something. But for me, seeing a GUI view of files, I can't make sense of it. It takes me time to scan and find what I was looking for. I would prefer to see results from the 'find' or 'ls' command. I can see what I am looking for that way but my colleagues don't understand what they are looking at.

This gets worse with applications. For instance there is a web server control panel called 'Cpanel' that people buy into because they don't want to do the command line. This one really is a 'sea of icons' and I have no idea how you are supposed to work like that. But to people who don't appreciate that on a server you probably want to just run a few things (all available in the history file), the 'sea of icons' provides a lot of help.

Those of us that use the command line are 'having a conversation' with our computers and 'teaching' these machines to do stuff. Meanwhile, the GUI folks are true 'users', there is no 'conversation', it is a fundamentally different relationship.

</comment></comment><comment><USER41> CLI is nothing more than a form of GUI. Hence GUI is fundamentally superior and the only ones willing to live in the Stone Age of CLI are some coders. What is more ironic is people who think that any CLI can come remotely close to the power , flexibility and extensibility of GUI. There is literally nothing that the GUI is not great at,it's just that most coders have no idea how to design a GUI and that is reflected in the terrible state of GUI APIs and coding in general. I have been coding 30 years now , started from CLI and as soon I could converted to GUIs and never looked back.</comment>


Lenovo launches HoloLens competitor - <AUTHOR> https://www.engadget.com/2019/05/13/lenovo-thinkreality-ar-vr-headset-hololens-2/ <comment><USER2> I wonder how this will play out with IP, given that Lenovo has been manufacturing a Windows Mixed Reality headset using Microsoft's VR/AR tech? They'd have to tread very carefully to avoid stepping on any MS patents etc. with inside-out tracking.

Also, once again (as with Valve vs. HTC) we see the pattern playing out:

1) Platform owner develops new tech to be used on their platform, tries to foster an ecosystem

2) Third parties develop products based on the tech

3) Third parties launch competing platform because in the end, platforms are more profitable than hardware

4) Market is fragmented and we can't have nice things

<comment><USER3> This is how it will play out:

1) MS will sue Lenovo.

2) China will threaten MS with consequences including no access to China market.

3) MS will withdraw the lawsuit and lick its wounds.

<comment><USER4> From my 9 years working in Microsoft China, I think Lenovo, Microsoft, and China all have a very good relationship. I'd be very surprised if Microsoft took action against Lenovo, I would be astounded if they went anywhere near where the Chinese government would admonish them.

<comment><USER5> I wouldn't be surprised here if Microsoft was even intentionally lending the IP. Microsoft doesn't want to be the sole hardware vendor in a category, so encouraging HoloLens clones is probably somewhere on their explicit agenda.

</comment></comment></comment></comment><comment><USER6> The only place I see such devices are highly polished demos to show the 'capabilities of AR/VR'. I've never seen such headsets used for anything even remotely useful (not considering gaming as extremely useful). I think the AR/VR craze is just here because we have nothing really new at the moment and investors want to pour money into something.

<comment><USER7> You've missed out something in between "games" and "useful".

The arts.

There's still a lot of interest (at least from where I'm standing) in VR etc as a creative medium. There's some really remarkable work being created.

<comment><USER8> Is there a good resource for finding such work?

I recently experienced some VR art at the Walker Art Center (museum of modern art) in Minneapolis and was decidedly underwhelmed.

<comment><USER9> There are plenty of others but these are some that have stood out to me.

SIGGRAPH has a VR Theatre where they show short VR films [1].

EyeJack is a platform for AR art, though you may need to visit an exhibit to see the actual art. [2]

[1] [https://s2018.siggraph.org/conference/conference- overview/co...](https://s2018.siggraph.org/conference/conference- overview/computer-animation-festival/vr-theater/)

[2] [https://eyejackapp.com](https://eyejackapp.com)

</comment></comment></comment></comment><comment><USER10> No 6DOF controllers. That's a pretty big weakness when it comes to interacting with AR objects.

</comment><comment><USER11> I've used a Google Glass, Oculus Rift, Cardboard VR systems and seen a demo of Oculus Rift. Is the Lenovo ThinkReality a real competitor? The market hasn't picked up VR for gaming and AR has flopped so far. How about high end systems for engineering and design. There could be a case where engineering speed and collaboration could increase from using a few of these systems at any company doing hardware design.

<comment><USER12> I don't think AR has flopped so far, but when it's used well it's not perceived as AR.

For example, my car has a rear camera, which overlays where you are going depending on the position of the steering wheel. This is reality augmented, but since it feels so natural, nobody thinks about this as AR.

<comment> sheep-a I'm not convinced... to me AR is an environment you can interact with or it interacts with the environment. Some lines drawn on a screen. meh

<comment><USER12> You're interacting: you have your controller, the steering wheel, and you are manipulating an object, the car, and the computer inside your car is using sensors to determine how you are performing inside your environment, and providing you with virtual information combined with real world information so you are better equipped to do your job, than without the additional information augmented to you reality.

</comment></comment></comment></comment><comment><USER13> Can't even visit because it's trying to redirect me through some ad tracking url. Wonder if it's just me

<comment><USER14> [http://archive.is/grv32](http://archive.is/grv32)

<comment><USER13> Thanks</comment></comment></comment>


Rebar and the Alvord Lake Bridge (2013) - <AUTHOR> http://99percentinvisible.org/episode/episode-81-rebar-and-the-alvord-lake-bridge/

<comment><USER2> The biggest issue is the bridge decks.

Epoxy rebar is a gaff. Any knicks or marks damage the coating.

Stainless steel is gaining speed but is very expensive.

And recently Carbon Fibre bar has been entering the market.

<comment><USER3> I vaguely remember an item on TV about how the Oregon DOT was protecting some of its historic bridges by spraying zinc on to the concrete and then applying a voltage between it and the rebar to counter or reverse the corrosion. This paper mentions the technique.

[http://www.oregon.gov/ODOT/HWY/REGION2/docs/area5/Cathodic%2...](http://www.oregon.gov/ODOT/HWY/REGION2/docs/area5/Cathodic%20protection.pdf)</comment></comment>


Show HN: March 2 Zero – Galvanizing climate change action - <AUTHOR> https://march2zero.com <comment><AUTHOR> Hi Justin here from March 2 Zero.

We are aiming to create a simple site that provides challenges for folks to reduce their carbon footprint.

It's centered around the month of March, similar to some other calendar-based charities/fund-raisers which are popular here down under.

At this stage it's a basic prototype, but we are trying to build momentum by getting some interest, participation and feedback. We are also seeking funding to achieve nonprofit status, and then to build out the functionally and content for global reach (is currently AU-centric)

Thanks for checking it out. We appreciate any constructive comments re: the site or pledges. Although prefer not to encourage general climate change debate here.

Any offers of voluntary assistance in terms of UX and FE engineering will be most gratefully received.</comment>


France Enters the Matrix - <AUTHOR> https://lwn.net/Articles/779331/ <comment><USER2> In my small bubble of tech news, France has popped up a few times. Found out recently that they are officially[0] using the privacy-respecting Qwant search engine. Several weeks ago, I learned that they have planned obsolescence laws[1] which makes them a pioneer in this area (from what I understand).

There's also an active non-profit organization using FOSS to create alternative, privacy-respecting, solutions to Google products (framasoft[2]). I mention this last one because I haven't come across a similar major undertaking (or similar mindset) in too many other countries.

Now they are evaluating Matrix for their communications needs. I can understand the importance of countries, nowadays, not relying too much on the services of companies tied to a specific country (namely the US) but I wonder what else is different about France? What else are they engaged in re: FOSS, privacy?

Or am I reading too much into this?

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

[1] [https://www.bbc.com/news/world- europe-42615378](https://www.bbc.com/news/world-europe-42615378)

[2] [https://framasoft.org/en/](https://framasoft.org/en/)

<comment><USER3> French citizen here. For as long as I can remember, there's been a strong will in the French FLOSS communities to develop local alternatives to the ever- expanding reach of the FAANG/GAFAM, for many reasons. The obvious one being the export of data outside actionable jurisdiction, but it could also be explained by differences in ideology.

As for what else we're doing, there's La Quadrature du Net (LQDN)[1] which took part in the recent Google €50m fine, some projects by concerned citizens to keep a watch on politicians[2] and tracking in mobile apps[3], but one of my favourite things comes from the increasing will to release "OpenData" (public data sets from various sources)[4] to let collectivities, regions and smaller units build tools to solve their local problems.

[1] [https://www.laquadrature.net/en](https://www.laquadrature.net/en)

[2] [https://projetarcadie.com/](https://projetarcadie.com/) (in French)

[3] [https://exodus-privacy.eu.org/en/](https://exodus-privacy.eu.org/en/)

[4] [https://www.data.gouv.fr/en/](https://www.data.gouv.fr/en/)

<comment><USER4> I would also add that there's a rich ecosystem of _extremely_ well-trained engineers coming from the Grandes Écoles system.

The result is a lot of top-notch contributors who get involved in FOSS projects in their 20s.

</comment></comment></comment><comment><USER5> I like the idea behind Matrix, but hosting it is really a pain. I've given up on it until it's a simple `docker-compose up -d` away from running a full instance.

To get back on topic, France has really got its FOSS movement moving. There are a TON of Mastodon and Peertube instances located there. It's admirable.

<comment><USER6> Being similarly frustrated with how complicated it is to set up, I've created an Ansible playbook to automate it all (and run all services in containers): [https://github.com/spantaleev/matrix-docker-ansible- deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy)

By default, it sets up Synapse and a bunch of other services around it that are necessary to really make it useful (Postgres instead of the default under- preforming SQLite; mxisd as the identity server; STUN/TURN server for WebRTC calls; riot-web; various bridges; etc)

<comment><USER7> Thank you for this. Very easy to use. Easily saved me a few hours of work.

</comment></comment></comment><comment><USER8> _> Because Matrix is inherently decentralized, no single server "owns" the conversations; all traffic is replicated across all of the involved servers. [...] Matrix is more like Git than XMPP, SIP, IRC, or many other traditional communication protocols._

The Matrix protocol is well worth the read. JSON-LD is a bit of a nightmare to work with, but the gist of it is a solid concept; it has drastically changed my approach to software design.

<comment><USER9> I'm considering evaluating Matrix for some upcoming projects I'll be working on. Thus far I've just skimmed the front page and the FAQ.

Could you expand on what you found particularly compelling about the protocol / API, and also how that's changed your software development approach?

<comment><USER10> The very high-level view is that Matrix is a set of protocols for syncing messages and state between servers. Matrix is to XMPP what NNTP is to SMTP. This makes multi-device and disconnections much easier to handle, because all you need to do is to wait for the messages to eventually arrive; this is in contrast to XMPP which favors direct routing of a message and synchronization is second.

In my own view it's a much more robust way of architecting communication: the server(s) should assume that remote parties will be off, and remote parties will come and get what they want at their own pace and time. Maybe they won't receive a few messages immediately but can immediately retrieve multiple when needed. With a stretch you could see a parallel with Kafka: instead of trying to send stuff to consumers as soon as it is produced, just store it, and when clients are up they'll process stuff.

<comment><USER11> I agree. One could use the Matrix specs to build some sort of message queue (using rooms) where human (text, markdown) and machine (json-ld) could communicate and interact..

</comment></comment></comment></comment><comment><USER12> The FOSDEM video: [https://fosdem.org/2019/schedule/event/matrix_french_state/](https://fosdem.org/2019/schedule/event/matrix_french_state/)

</comment><comment><USER13> I finally got around to brushing off the year's worth of dust that had accumulated on my Matrix account and signed in to Riot on my phone, as well as their web client. I was pretty pleased with how easy it was to connect to a Freenode channel. So far it seems to be a decent experience, I'm looking forward to using it over the next little bit.

</comment><comment><USER14> Things are still going strong for open source in France (despite de occasional setbacks) since France was rated in 2008 the no 1 country in the world in terms of open source adoption by Georgiatech:

[https://web.archive.org/web/20090424052832/http://www.redhat...](https://web.archive.org/web/20090424052832/http://www.redhat.com/about/where- is-open-source/activity/)

[https://web.archive.org/web/20090520231136/http://www.redhat...](https://web.archive.org/web/20090520231136/http://www.redhat.com/f/pdf/OSSI_Research.pdf)

More info (in French): [https://cnll.fr/media/etude-2017.pdf](https://cnll.fr/media/etude-2017.pdf) (with figures for the FR, DE, UK and rest of EU markets on slide 4).

</comment><comment><USER15> Recently I'm hearing more about Matrix. Does anyone have any input as to the pros and cons of Matrix vs xmpp?

<comment><USER16> It's quite subjective, but my view is Matrix is what XMPP would like if it was written today.

The main advantages are it is using JSON instead of XML, and HTTP instead of custom protocols so it can work directly from browsers and with lightweight mobile clients. It also has a lot built into the core protocol, where as to get XMPP to do anything useful you will need to use a lot of extensions (and ensure the server and all clients support them).

The only con is it's still a relatively young project. I'm not sure I would want to rely on it as my main form of communication in a company just yet, but for personal usage it is fine.

<comment><USER17> I can't see any advantage in using JSON and HTTP for a protocol. JSON shines for ad-hoc, untyped, structured message payloads rather than the strongly- typed semistructured text payloads possible with XML/SGML, and HTTP wasn't designed for federated protocols. It seems more like a fashion thing to me.

<comment><USER18> I kind of agree with you, but I'll add that XMPP usage of XML is weird enough that it makes it hard it use a normal XML parser / producer. Honestly I really wanted to like XMPP. I read all the specs at the time, even started to write some code, but all I can say is that it really sucks. I haven't looked at matrix yet, I hope it's better

<comment><USER19> Indeed! I was in the same boat - also started writing a client, but wasted too much time on the stupid XML stream idea.

Basically, chatting is message oriented, but the XMPP inventors thought it would be neat to start the connection with a tag like <beginconversation> which would then be dangling for the whole connection, preventing the use of a simple DOM XML parser (remember this is many years ago) for each message.

<comment><USER20> Any XML parser that I know can parse XML in a stream, that's all you need to handle an incoming XMPP stream.

Just an example, here is the XML parser that I wrote in PHP [https://github.com/movim/movim/blob/master/lib/moxl/src/Moxl...](https://github.com/movim/movim/blob/master/lib/moxl/src/Moxl/Parser.php) (127 lines), it basically handle the stream as an input and fire SimpleXML (can also be DOM XML) on the other hand.

This can handle thousands of XMPP messages (called stanza) per second :)

<comment><USER18> Can it handle plaintext XML suddenly becoming TLS encrypted? Because that's also what happens on any XMPP connection. If it can, then great but I guess it's more an exception than the rule

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> > the 0.99 version of the home server code is ACME-capable and can get a > certificate directly from Let's Encrypt;

How does this work? I assume a home server doesn't have a public DNS name, so what is used as the subject of the certificate then?

<comment><USER22> "home server" is the term for the server your account lives on in Matrix, not for "server you run at home", although you can of course do that.

</comment></comment><comment><USER23> Is anyone else increasingly uncomfortable with the "we'll solve the certificate problem by deferring to centralized registrars that surely keep their keys private from state actors." I mean, this is potentially not a risk if there is a recognizable way of communicating low-bandwidth fingerprints of the next encryption level, like ZRTP verification on voice. But note how WebRTC has done the same thing? And efforts to solve the problem are talked about and then, somehow, nothing ever happens with the standards.

It's enough to drive one paranoid.

</comment><comment><USER24> Matthew's talk at FOSDEM [0] was really nice. I've been using Matrix (mainly trough Riot) for a while, and encouraged my technically-minded friends to jump on it.

However, I would like to get my family to use something else than WhatsApp (which I refuse to use). I'm planning to do so, once I can sort out the following:

\- Riot is nice if you have a lot of high-density rooms (Fractal's "Banquet" use-case [1]), but not really there in terms of UX for small rooms with my family members

\- I would like to self-host if possible. However, I need to ensure that the server is reliable enough, and synapse seems to be quite resource-hungry.

Regarding the first issue, it seems that France's Tchap would solve it nicely, from what we were shown at FOSDEM. Unfortunately, the Readme in their repo is still Riot's, and it would seem that I have to build it myself [2]. I'll look a bit more into that nevertheless, and it should improve by June, from the article.

Regarding the second one, someone recently linked to this Gnome mailing list archive [3] where (in the reply) Matthew details a bit more his (then) long- terms plans for homeservers. Having one homeserver per device would solve most of my issues pretty neatly. I am not sure how far it is in the roadmap. I am also curious to know what's the status on that specific discussion topic: I was discussing just this the otherday on #postmarketos-offtopic:matrix.org [4]. I was interested in having a unique matrix daemon on a phone operating system to provide push support, maybe as well as a Matrix protocol broker.

Otherwise, for self-hosting with ~10-200 users, it looks like synapse has shed a lot of weight recently, and other homeservers implementations seem to be picking up steam, so we'll see how that goes. I am not sure how synapse would handle a dynamic IP __

For now, my gripes with the ecosystem are the following:

\- There doesn't seem to be easy ways of migrating: accounts, homeservers (including address and implementation, ex. migrating to/from synapse, Dendrite, Ruma...).

\- No easy way to manage multiple identities: work, home, etc. Multi-account clients or community-bound identities could probably help solve this. Ideally, it would be the later, and my account would be on multiple homeservers (backup plan for availability).

\- The search functionality is really lacking on most clients. No way to search my own messages, or at a specific time, in a specific community, etc.

It's also kind of fun to have both COI (chat over IMAP) and Matrix making the front page at the same time :)

[0]: [https://fosdem.org/2019/schedule/event/matrix_french_state/](https://fosdem.org/2019/schedule/event/matrix_french_state/)

[1]: [https://blogs.gnome.org/tbernard/2018/05/16/banquets-and- bar...](https://blogs.gnome.org/tbernard/2018/05/16/banquets-and-barbecues/)

[2]: [https://github.com/dinsic-pim/tchap-android](https://github.com/dinsic- pim/tchap-android)

[3]: [https://mail.gnome.org/archives/desktop-devel- list/2017-Sept...](https://mail.gnome.org/archives/desktop-devel- list/2017-September/msg00047.html)

[4]: [https://matrix.to/#/!VTQfOrQIBniIdCuMOq:matrix.org/$15496441...](https://matrix.to/#/!VTQfOrQIBniIdCuMOq:matrix.org/$15496441549459ctuml:librepush.net?via=fam- ribbers.com&via=matrix.org&via=disroot.org)

 __A bit off-topic, but my registrar doesn 't provide an API to update the DNS records on their servers. As a workaround, would there be a free dynamic DNS with an API out there? I don't care what the address would look like, as I would just use it as a CNAME record.

<comment><USER25> There's already people doing unofficial builds of Tchap which work against the public Matrix network rather than the .gouv.fr deployment - e.g. [https://github.com/14mRh4X0r/tchap- android](https://github.com/14mRh4X0r/tchap-android) and [https://git.snt.utwente.nl/14mRh4X0r/tchap- proxy](https://git.snt.utwente.nl/14mRh4X0r/tchap-proxy), although I'm not sure it's useful yet as more than an interesting experiment.

On the riot side, we're trying to do our best to make it support both Barbecue as well as Banquet use cases (assuming that's not a contradiction in terms).

In terms of other points:

> Having one homeserver per device would solve most of my issues pretty > neatly. I am not sure how far it is in the roadmap.

It's in the 'further still' column - we published the roadmap last week at [https://matrix.org/blog/2019/02/15/publishing-the-backend- ro...](https://matrix.org/blog/2019/02/15/publishing-the-backend-roadmap) \- look for the card labelled 'p2p homeservers'.

> \- There doesn't seem to be easy ways of migrating: accounts, homeservers > (including address and implementation, ex. migrating to/from synapse, > Dendrite, Ruma...).

There are scripts to do it, but it's a bit crap (similar to migrating between IMAP servers). We're working on fixing it properly via MSC1228 ([https://github.com/matrix-org/matrix- doc/pull/1228](https://github.com/matrix-org/matrix-doc/pull/1228))

> No easy way to manage multiple identities

Multiaccounts are next up for Riot.

> The search functionality is really lacking on most clients

yeah, we need to fix this.

</comment></comment><comment><USER26> The only advantage Matrix currently has comes from it's relative obscurity. It has ONE implementation. Once things start inevitably emerge, it'll run into all the same problems that truly distributed protocols have.

<comment><USER25> it's true that there's only one implementation that's production ready. however, there are several which work sufficiently that they can federate with it (dendrite, construct) which look to be on the right path. it'll be interesting to see if that all falls apart when they come of age; let's see :)

</comment></comment><comment><USER27> Does it support conversation trees like we do here on HN? Does it let you edit your messages?

<comment><USER25> no, threading isn't there yet. editing isn't either, but coming soon ([https://github.com/matrix-org/matrix- doc/pull/1849](https://github.com/matrix-org/matrix-doc/pull/1849))

<comment><USER27> This probably is my own problem but I totally hate threadless communication for whatever that goes beyond a personal chat for 2 people. IMHO every meaningful collaboration needs threads.

</comment></comment></comment><comment><USER28> I wish they stop wasting time by developing this Electron abomination and focus more on the native and mobile clients.

<comment><USER29> Riot-web is a really nice app. Drop it on any web server and you're done. I use it all day long to talk to my family on a self-hosted, non-federated matrix instance. If you use linux, Fractal is a pretty good option for a desktop application. The latest release is "beta" but very usable.

[https://matrix.org/docs/projects/client/fractal.html](https://matrix.org/docs/projects/client/fractal.html)

<comment><USER30> Curious if there was a reason you chose to self-host as opposed to using a public one on just starting your own room (I assume this is possible in the same way channels are in IRC)?

What was the drive to use 1, self-host and non-federate an instance of Matrix over another platform, and 2, why? With family especially, I would assume a simple WhatsApp/Signal group would have been easier for adoption.

<comment><USER29> My extended family of 16 which ranges in age from 5 to 85 uses this Matrix instance. We didn't want pictures of our young kids on Whatsapp (Facebook) servers. These young kids and grandparents don't have smartphones so Signal isn't an option. Also, many of us access Matrix on other devices and computers other than phones.

This is how the internet is supposed to be.

<comment><USER30> Thanks. I've been tossing up setting up a forum of sorts for some close friends, but I've been going back and forth on the two extremes; an obscure telnet-only accessible BBS for the nostalgia, or a Matrix/Riot page for the ease of use.

</comment></comment></comment></comment></comment><comment><USER31> I haven't tried Matrix yet, but I've tried some other chat platforms like Telegram and Discord, and was really disappointed with them compared to IRC.

I had to use their closed-source, bloated, binary blob GUI clients, couldn't logs the channels I was in (and so relied on having to log in to their servers to get backlogs, which was super annoying), and needed invites to get in to channels.

Apart from the superior multimedia capabilities of these clients, I saw absolutely no advantage of them over IRC clients (which could do useful things like logs all mentioned URLs and mentions of my nick to separate, logged tabs, and which I could run from the terminal and even from within Emacs).

I really hope Matrix is better in this regard, and I'm trying to keep an open mind, but so far attempts to create next generation chat services have been really underwhelming.

<comment><USER32> I find it compares favorably to IRC and XMPP. File transfers and offline messages and encryption "just working" without having to check if my client, other persons client and the server(s) support it (or having to bring helpers into the mix) is worth a lot.

<comment><USER33> Except you do have to check, as almost no clients support encryption fully.</comment></comment></comment>


Massachusetts man uses 3-D printer to make prosthetic hand for his son - <AUTHOR> http://now.msn.com/paul-mccarthy-massachusetts-man-uses-3-d-printer-to-make-prosthetic-hand-for-his-son <comment><USER2> This is great, even with all the caveats around it.

Some people can't currently afford real prosthetics, and they're stuck with things like "Soda Bottle Prosthetics" which is a neat hack, but decidedly suboptimal.

[http://blog.makezine.com/2009/02/05/plastic-soda-bottle- pros...](http://blog.makezine.com/2009/02/05/plastic-soda-bottle-prosthesis/)

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

Compare that to the teen who asked a Formula One team to help with a false arm (they didn't provide any money, but they helped with fundraising and engineering and now he has an amazing arm) [https://www.youtube.com/watch?v=Yvev6shNvSg](https://www.youtube.com/watch?v=Yvev6shNvSg)

Medical use of 3d printing is exciting. Even if it's a bit odd. Here's an advert which shows researchers looking at 3d printed proteins to understand protein folding better. The proteins look cute. They could probably sell a version of these as Mr Potato head style toys.

[http://www.3dsystems.com/learning-center/case- studies/nation...](http://www.3dsystems.com/learning-center/case- studies/nationwide-childrens-hospital-research-institute#.UnfJFnDGq0I)

That same company do a bunch of medical 3d printers ([http://www.3dsystems.com/3d-printers/professional/overview#h...](http://www.3dsystems.com/3d-printers/professional/overview#healthcare)) and they have an entry on Transmaterial about their printer than can use powders as fine as 3 microns. It can build layers of 10 microns. ([http://transmaterial.net/phenix-px/](http://transmaterial.net/phenix-px/))

<comment><USER3> The 'formula one team' link leads to the same video as the one under the 'soda bottle hack'. Is it this kid? [http://www.telegraph.co.uk/sport/motorsport/formulaone/87006...](http://www.telegraph.co.uk/sport/motorsport/formulaone/8700621/F1-fan- receives-bionic-hand-from-Mercedes-team.html)

<comment><USER2> Whoops yes, sorry!

</comment></comment></comment><comment><USER4> Almost makes me want to cry to see the impact this can have on someones life. And at such an absurdly low cost. It allows an agile development process for advanced prosthetic limbs.

Of course, the inventors who came up with the design deserve a huge amount of the credit for WHY this is possible. Bravo everyone, what a great story.

</comment><comment><USER5> Since the article doesn't include the relevant link - [http://www.thingiverse.com/robohand/designs](http://www.thingiverse.com/robohand/designs)

<comment><USER6> I've been following this Robohand project for quite some time now. They are based in South Africa, with a clinic there, and are trying to expand to the US (Atlanta) and Australia.

It started with a successful crowdsourcing campaign, but they've fallen short of their targets for two other campaigns to keep things growing. [http://www.indiegogo.com/individuals/2984667/campaigns](http://www.indiegogo.com/individuals/2984667/campaigns)

Right now we're building software that would allow them to crank out parts faster. I hope that it can help them out.

</comment></comment><comment><USER7> DIY prosthetics. This is awesome and cheaper. It's strange that some home made products are cheaper than their industrialized counterparts.

<comment><USER8> I'm guessing dad didn't pass this by the FDA and he's not protecting himself from his son suing him if everything related to the device doesn't turn out near perfect.

<comment><USER9> Well, that's a major win, then.

</comment></comment></comment><comment><USER10> This is great, and in the same ballpark as a project friend is doing: he had a disabled son who needed prosthetics to help maintain his posture, but the things were expensive and took months to get sorted out. Enter 3D scanning and printing to accelerate that. (Full background: [http://projectandiamo.com/background/](http://projectandiamo.com/background/))

Naveed's only just getting started out right now, but I bet he won't mind me saying that if you like what he's trying to do, and want to help, please do drop him a line.

</comment><comment><USER11> The first 3D printer I saw in person was a couple of years ago in Vienna and they were printing a new battery cover for an old gaming device. I was seriously impressed with the technology then, but this really reveals the potential. While obviously it's not on a level with specialized technologies, at least just now, I think the cost factors will drive some interesting applications. You can imagine what a few expensive high quality, but low running cost, printers in a handful of core Indian and Chinese hospitals might be able to do in medical areas where price is a large factor.

</comment><comment><USER12> I would guess the 3-D printed version is a lot less durable. Also a lot of the cost of prosthetics is the customisation to the individual, which I'm not sure the printer software could handle.

<comment><USER13> Why not - plenty of people could learn an open source tool like blender and produce another model can't they? As far as durability, I think that's fine for everyday tasks and might even make it a positive, easy to replace, customize for usage type etc.

<comment><USER12> Oh I agree! I was just thinking about the barrier to entry modifying CAD files. One thing I didn't immediately think of is if you screw up a dimension, you can just print out another to try again...I guess you could argue with the ability to keep improving it over time, the 3D version could have a better fit.

</comment></comment></comment><comment><USER14> It's interesting when you consider extending this trend further into medical device creation. Would you print an artificial bone? Artificial body parts?

At what point does the law have to step in and make it illegal to create things that are not protected by the layers of research, testing, and regulation.

<comment><USER15> It's been done. A replacement trachea was grown from scratch in a bio reactor by bathing a man made structure in stem cells. Then transplanting. [http://www.youtube.com/watch?v=R-qRRZfz4cM](http://www.youtube.com/watch?v=R-qRRZfz4cM)

<comment><USER16> "color" 3D printing, i.e. using different kind of cells that make up real liver

[http://www.wired.co.uk/news/archive/2013-04/24/3d-printed- li...](http://www.wired.co.uk/news/archive/2013-04/24/3d-printed-liver)

</comment></comment></comment><comment><USER17> Related articles:

Making advanced prosthetic hands for under $1000 using 3D printing:

[http://www.3ders.org/articles/20130905-making-advanced- prost...](http://www.3ders.org/articles/20130905-making-advanced-prosthetic- hands-for-under-using-3d-printing.html)

The video mentioned in the article:

[http://hackaday.com/2013/02/08/3d-printed-prosthetic-hand- he...](http://hackaday.com/2013/02/08/3d-printed-prosthetic-hand-helps-out- for-about-150/#more-94217)

I'm personally keeping an eye on this space, partly because robot hands are cool and partly because they're a huge help to what has historically been almost untreatable. (In the sense that treatment would never restore anything approaching prior functionality.)

</comment><comment><USER18> This is as cool or cooler as the tablet apps that replace thousand-dollar devices and allow even poor and uninsured autistic children to communicate. Congrats to the dad for being awesome.

</comment><comment><USER19> The world could be changing after all, I applaud the initiative. All positive. Thanks for sharing.

</comment><comment><USER20> I saw my first 3D printer this weekend in the MSoft store. Thought it was really cool and was going for a cool $2100.00.

</comment><comment><USER21> this is awesome

</comment><comment><USER22> I wonder how 3d printing could help in the 3rd world.

</comment><comment><USER23> I got 2 friends that just started a design studio and they are creating beautiful and affordable prosthetic legs [http://www.alleles.ca/](http://www.alleles.ca/)

<comment><USER24> They aren't making prosthetic legs. They're making cosmetic covers for prosthetic legs. There's a big difference there, in terms of durability of materials and engineering behind the design.

<comment><USER23> Yes, you are right but I think the idea is awesome!</comment></comment></comment>