W3C Working Draft: Clipboard API and events - <AUTHOR> http://www.w3.org/TR/clipboard-apis/

<comment><USER2> There's something that I really need to get off my chest and I looked for an occasion to vent my frustration for a while. I'm taking this occasion right now.

Instead of adding new APIs, is it possible to address the ENORMOUS elephant in the house: <textarea>'s API.

It's unusable. People have built workarounds for _years_ and yet, nothing has changed. Here's a few things to get started:

\- Autoresizing. CSS resize: auto; could work but I don't care how we do it.

\- Styling content. So we can use it to build IDE. So something like iA's editor can be built.

\- Tokenizer. This would help solve the above. Could be a strip down version of a HTMLElement. Or an approach like SVG. Anything. Lots of people have more experience than me on this matter. I'm sure some of you can come up with something.

\- Better input management. So we can build IDE with auto-indent.

The web is so dynamic now, and all the editor out there are ugly hacks that are so hard to maintain. Anyone who's built an interface over textarea/contentEditable shares my pain.

If, for whatever reason, it's impossible to have a textarea fullfill this job, then can we at least get a decent contentEditable implementation. It's so broken. On so many level.

I love you all, and I appreciate all the hard work, but I hate textarea's dumb API.

<comment><USER3> There's no reason that this can't be addressed while adding new APIs. They're not mutually exclusive.

</comment></comment><comment><USER4> Finally.

To me, this looks like a step further away from Flash (used for copying things to the clipboard), which I see as a great thing.

Also, I've been working on a password manager that could dramatically benefit from such an API. I hope that browser vendors will allow synthetic copy/paste (especially copy) events if explicitly allowed by the user (similar to how geolocation APIs work). This would be especially helpful for mobile devices where it's difficult to copy things at the moment.

</comment><comment><USER5> This is nice, and could really be useful. But it's raising a lot of privacy concerns. A lot of sensitive information is placed in the clipboard like private URLs and even passwords sometimes.

I think a whitelisting of sites is needed in the web browser to use this API.

<comment><USER6> They're aware of it: [http://www.w3.org/TR/clipboard-apis/#privacy- concerns](http://www.w3.org/TR/clipboard-apis/#privacy-concerns)

</comment></comment><comment><USER7> The problem I see with this spec (and the current implementation in browsers) is that you can't trigger a copy without having the user manually press ⌘C or do the platform equivalent command for that. That way you can't implement custom UI (like toolbars) or even have a link automatically copied to clipboard (by a URL shortener, or by a file upload website).

This is specially problematic on iOS and Android, where copy and paste depend on contextual popups/bars that only show up when you have text selection. This makes it much harder or impossible to implement advanced editors like say, a 3d modelling application, or image editor with copy and paste functionality on these platforms.

</comment><comment><USER8> The semantics of the "different" origin escaping will be interesting, in that they talk about about rich text editing and the clipboard API's usefulness there, but isn't removing the ability to copy/paste HTML 'formatted' text from another origin a part of that use case?

</comment><comment><USER9> I am constantly switching between my phone and laptop/desktop. Quite often I get a link on the phone that I would like to open on desktop or vice versa (say forward a link on desktop to someone on whatsapp on my phone).

Would be nice to have some kind of "paste to device X"

<comment><USER10> Take a look at pushbullet, it allows you to share items between devices, they also added a new feature which lets you share your clipboard between devices.

<comment><USER9> Thanks! Looks useful

</comment></comment></comment><comment><USER11> I'm very curious to see if this will make it possible to have password managers on Firefox OS.</comment>


Ubuntu for Android - <AUTHOR> http://www.ubuntu.com/devices/android <comment><USER3> This, or something like it, is the future: the computing device is portable, and adapts itself to the forms of input available. There's no reason why your display should have to be permanently attached to the device that drives it, and increasingly, it won't be.

I don't know what the implications are for Ubuntu or Android. But genuine support for a first-class computing experience is one of the few things that would tempt me back onto those platforms.

<comment><USER4> > _This, or something like it, is the future: the computing device is > portable, and adapts itself to the forms of input available_

Maybe it is, but it's not the future I'd like best.

I would like to have a desktop in the cloud, and data in the cloud, and nothing in my pocket; nothing to lose or break or have to make sure it still has juice.

When I get somewhere to work (a client's, a café, a friend's, etc.), I log in to my cloud desktop using whatever dumb machine is available, and off I go. Everything I do is automatically saved, backed up, versioned, synchronized for me.

A portable computer is useful in the subway, but at the office? What benefits do we stand to gain from still having things run or be stored on a local machine?

<comment><USER5> If you think your data "in the cloud" (which is just a way of saying "on other people's physical systems") is safe from theft, breakage or some foreign government agency pulling the plug, you haven't been paying much attention to reality lately.

And by "lately" I mean the past decade.

Don't get me wrong, I like the convenience of "the cloud". It's especially helpful in synchronizing all the data that I have on cheap and abundant storage on various devices.

We can have both. Why advocate giving up the one option that makes you independent from third party interference (or simply a lack of connectivity)?

<comment><USER6> Backup device manufaturers are really missing out on big bucks by not making a small NAS that downloads all you cloud data. Give it access to Google/Dropbox/Flickr etc an have it silently back everything up.

I hope they've thought of this and I've just missed it. They won't be able to sell USB based backup drives for much longer.

<comment><USER7> The device 'Time Machine' by Apple does exactly that.

<comment><USER6> No it doesn't, it backsup your Macs over wifi, and that's all it does. It won't access web services, which is they key point I was trying to make. The Time Capsule, and all home backup devices I can name, make the soon-to-be- outdated assumption that your data exists on a hard drive you own.

<comment><USER7> Well more elaborately your mac can access all web services and download all data which can then be wirelessly backed up by the time machine.

For example my Dropbox folder is automatically synced on my mac which is then automatically backed up by the time machine.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> You could push the ease-of-use even further with wireless HDMI, A2DP, and Bluetooth HIDs. Imagine: _sit at a desk, without your phone even leaving your pocket. The wireless HDMI monitor, Bluetooth keyboard, and Bluetooth A2DP speakers automatically pair up with your phone. You just start using the device, eg. show a video to your friends, or start working. Stand up and leave. The phone unpairs itself from the monitor/speakers/keyboard, free to be used by the next person._

(If security is a concern, make this less automatic, eg. make the pairing require pressing a button on the phone.)

I have been waiting for precisely that concept to take off for years, namely using your cellphone as your portable computer.

<comment><USER9> But with all that running, you won't be working for longer than an hour or two. I really like the Palm/HP Touchstone charger, and I wish wireless charging would take off. It'd be nice to just sit in my cube while all my devices charge in a 3' radius of my desk.

Why are there no wireless-charging mice?

<comment><USER8> True. Wireless HDMI is currently too power hungry for cellphones.

</comment></comment></comment><comment><USER10> Canonical may not have the resources or funds of Apple or Microsoft but they are innovating better than both at the moment. Unity is daring to be different on the desktop, and Ubuntu on Android is a simple idea that could really change the way people think about the PC. The ideas might not all work out in the long term but for sheer creative thinking you have got to applaud what they are doing.

</comment><comment><USER11> I know it's immature of me to note this, but what's up with the logo to the left of "Ready to talk?". Is it just me, or is it faintly reminiscent of... well, something else?

<comment><USER12> Ha. Maybe we're both immature, but you're not alone. I'm surprised none of the techies at Ubuntu picked up on it. Or maybe they did...

<comment><USER13> > _Or maybe they did..._

... which would explain why the "Get In Touch" button is in close proximity.

</comment></comment></comment><comment><USER14> We have struggled to get a BIOS that is Free / Libre And where does this leave us now? Just because Ubuntu is free, if the phone manufacturers start to get trusted mobile computing (tm) disease, we are still in trouble.

"Curated" is still not free

And there are some obvious holes - you cant carry a monitor around with you. So you need docking stations to plug into. Do you trust the keyboard in the Public library not to watch your keystrokes?

</comment><comment><AUTHOR> Not 100% sure but I think this is a chroot.

From the features page [0]:

        Ubuntu and Android share the same kernel. When docked,
        the Ubuntu OS boots and runs concurrently with Android.
        This allows both mobile and desktop functionality to
        co-exist in different runtimes.

[0] <http://www.ubuntu.com/devices/android/features-and-specs>

<comment><USER15> It looks great, but I still think Google needs to make it so when docked like this, what you see on the PC screen is the "tablet UI" of Android. It makes more sense, and you don't even have to waste resources running 2 OS's on a mobile processor.

<comment><USER16> If they did that all that happens is you're stuck with a crap tablet os and apps, the goal is a full-fledged workstation you can work on _without compromise_.

</comment></comment></comment><comment><USER17> Reminds me of doing the Debian chroot on the Nokia N8x0. That's been around for quite awhile. It's nice to be able to apt-get whatever you need. It's prohibitively slow to use on a device from 2007 though and overclocking is a bit risky and drains the battery quickly.

(Maybe I'm a dinosaur, but I still use one of these things rather than the brand new 1.2 GHz dual core Android phone sitting next to it in my bag.)

I don't really see this panning out unless Ubuntu runs on the mobile screen as well. I'd also hope that the curated experience can be replaced with, well, anything else. Ubuntu is increasingly becoming a forced experience and reconfiguring things is a waste of time. Configuring something to how you want to use it is also a lot more educational than trying to figure out where to disable the new configuration.

<comment><USER9> I use a chroot on my Touchpad to run Ubuntu with LXDE. It's... workable, but no where near "desktop" quality. The lack of a mouse kills it, and LXDE isn't really touch optimized. It's really nice to have around when there are apps you need to use that are run better (or easier) from a GUI, and the dual core 1.5Ghz processor with 1GB of RAM is sufficient to keep it running without hiccup (until I load Eclipse).

With some low-end (or ARM) optimization, Ubuntu would rock the mobile productivity world.

<comment><USER17> Have you tried eclim for 'mobile' development?

<http://eclim.org/>

Having a decent soft/hard keyboard is highly recommended. I played with this after having to push out an update connecting with VNC through an SSH tunnel to use Eclipse using the n810. It took ten times as long as it should have to fix two lines of code and build.

<comment><USER9> That's interesting, hadn't seen it before. I do use Vim on my laptop, but the HP webOS keyboard has some funky modifier keys. I'm not sure if it would work properly. Oh well that's the beauty of free software, I'll download and give it a shot.

Thanks!

</comment></comment></comment></comment><comment><USER18> If Microsoft was smart, this would be _exactly_ how their Win8 tablets should work - plug it into a dock and it turns into a Desktop PC. Ubuntu and Microsoft are in an awesome place here that Apple is going to miss out on.

<comment><USER19> I don't get it: what advantage do they have over Apple here?

<comment><USER6> Because Apple had said multiple times that they fundamentally don't believe in a one device world. Tablets are tablets, desktops are desktops. Mixing the two bastardizes both.

Microsoft doesn't agree, and Win8 is a hybrid that supports both interactions. Ubuntu is showing it will do the same.

Personally, I think Apple are seriously short-sighted in their approach. The other possibility I they are being very long sighted and waiting for the desktops' inevitable death in the consumer market. However, they've shown nothing that indicates they know how Mum and Dad are going to write their Christmas letters, or edit that important work document that has to get done _tonight_ but they're home sick.

<comment><USER20> > Microsoft doesn't agree, and Win8 is a hybrid that supports both > interactions. Ubuntu is showing it will do the same.

Yes, why do one thing _well_ when you can do two things _adequately_?

I think this fundamental difference separates Apple from nearly everyone else in the markets in which they compete.

Apple's vision is similar to Sun's: one ID that allows you to transport your data (incl. apps for appropriate platform) to all your Apple devices... Have you ever used a Sun-Ray[1]? It's like that, except for apps/data, not sessions.

Personally, I don't think Win8 is anything like Ubuntu for Android. Microsoft has the same problem as Apple: they don't want you to stop buying desktops, as both companies make a lot of money on continued sales of traditional computers. Whereas Apple created a whole new device platform in the iPad and iPhone, Microsoft is trying to merge the two markets back together... while at the same time relying on the computing profits to keep their overall margins up. Meanwhile Google and Canonical would happily cannibalize any revenue from desktops for the much greater potential in mobile.

<comment><USER6> I think it's a little early to say that Windows 8 will only make for an adequate tablet interface. Windows Phone shows they know what they're doing when they put their heart into it.

I don't think Apple wants to sell desktops at all. I think they'd like OS X gone in 5-10 years.

<comment><USER21> How would you write your iOS apps?

</comment></comment></comment></comment></comment></comment><comment><USER22> Is this going to be available to end users to install themselves, or is Canonical holding out for handset makers to respond to this and partner with them?

Sadly, since so many of the big Android guys are also in bed with or paying some kind of extortion to Microsoft, I would expect there to be some amount of pressure and possibly economic incentives for the big Android ODMs to NOT to ship this.

Beyond that, is any carrier going to be interested in offering subs Ubuntu? (Idk, maybe?) Put this into the hands of end users first even if it's a "sloppy" / hack-ish install. That's the way to get it out there.

</comment><comment><USER23> Video of ubuntu for android in use: <http://www.youtube.com/watch?v=gUXUjjg9qQ0>

</comment><comment><USER24> I admit, this would get me to bite the bullet if integrated with one of the existing laptop dock solutions for Android phones such as the Motorola Atrix 4G Lapdock or the ASUS Transformer Prime. Ubuntu is enough for me to do everything I need a computer for, except for some rare book keeping that has to be done over a VPN only supported on Windows/Mac. Instead of bringing my phone and laptop on all trips I'd just have my phone and laptop dock. The laptop docks seem much lighter and having the same stored data and same wireless data connection without tethering would be handy.

</comment><comment><USER25> I can see this working really well for younger users, non-power-users, and non-techies who want to carry around their desktop environment and whose needs are met by web apps like Google Docs.

I can also see its potential in developing countries where many people have a phone and a TV but not a PC.

The medium-term goal is sort of obvious: Ubuntu running on the phone with the ability to display Unity on its own tiny screen or on larger external displays and allowing the user to interact with it via touch or via external input devices like keyboards, mice, etc.

</comment><comment><USER26> I think this is a great step in the right direction, and we've already observed a compression of devices recently. Consider the Laptop, Desktop & phone. Who still uses a desktop? Its really just a matter of time until we compress the laptop and phone, we're a long way off in my opinion (in terms of actually usable hardware) but once we have the power and portable input devices (i think one could already structure an argument to say we have them) i don't know what would hold it back.

Good to see we're headed in a sensible direction.

</comment><comment><USER27> There is a video, showing the functionality. [0]

Now I begin to understand why Canonical made those recent changes. The Ubuntu part of it seems kinda slow, but smartphones are going to get faster. [1]

[0] <https://www.youtube.com/watch?v=gUXUjjg9qQ0> [1] [http://www.anandtech.com/show/5559/qualcomm- snapdragon-s4-kr...](http://www.anandtech.com/show/5559/qualcomm- snapdragon-s4-krait-performance-preview-msm8960-adreno-225-benchmarks)

</comment><comment><USER28> Is this the way Apple is headed? Just dock your iPhone, boom, OS X on the monitor.

<comment><USER29> That's where the whole world is headed. As a general consumer, why have a desktop when you can dock your phone/tablet and playback or stream videos, edit content and browse the web?

<comment><USER30> Well, because it's annoying to constantly have to dock your phone in order to use the desktop, for one thing.

What are the upsides here?

Synchronised calendar, user accounts, data, everything? You can do that without sharing the hardware. (Much harder to do it without relying on the internet, admittedly.)

Less maintenance because you don't have to worry about two devices?

Cost efficiency because you don't have to pay for a standalone computer? I suppose that's the big one, and I guess it's good enough. Then again, you could just get something like a Raspberry Pi for not much money. And if you need a dock, that won't be free, either.

Don't get me wrong, I see the potential, but I'm not sure it's where the world is headed. I guess it will be one of a large number of modes in which people use computers with displays larger than tablets.

<comment><USER19> Hmm. 12 to 15 years ago most laptop owners also had a desktop machine. Since then most of those users have gone laptop-only despite the fact that many (most?) of them face a similar annoyance to the one you give: they either dock their laptop when at their desk or they plug in an external monitor.

You can point out (correctly, IMO) that there were no truly satisfactory ways to sync laptop and desktop back when laptop-desktop owners went laptop-only, and I suppose you would claim that sync will work better this time because vendors and users "get the cloud" now. Hmm. Any laptop users who also run a desktop care to chime in on how annoying it is in the age of Dropbox to keep data on the two devices in sync?

</comment></comment></comment></comment><comment><USER31> _"Ubuntu is the killer app for multi-core phones in 2012"_

This text is displayed as if it's a quote, but as far as I can tell, it's not: <http://goo.gl/vKHOI> (link is to a Google search for the above text). If there's anyone from Canonical here, can you comment on why that is presented as a quote, or what/where it's a quote from, if it is in fact a quote?

<comment><USER32> As far as I see, this is the text of reference: _Newer multi-core processors are up to the job, and Ubuntu is the killer app for that hot hardware. It's the must-have feature for late-2012 high-end Android phones._

The quote itself is outside the text body and refers to the text body. For a marketing text like this, I don't think that kind of quoting is difficult to understand or swallow.

<comment><USER33> Yup, it's a pull quote.

<comment><USER34> Ya.

</comment></comment></comment></comment><comment><USER35> It's the official debut of PC Plus Era. This will be huge if Canonical and Google works together. Outstanding!

<comment><USER36> i don't see canonical and google working too closely together on this, as google has a competing OS that they're trying to push: chrome. and now with the introduction of chrome for android, there's no reason why your cell phone couldn't turn into a chromebox when it gets plugged into a similar dock.

</comment></comment><comment><USER37> Its the obvious extension of the current model. Kudos to Canonical for giving it a go.

I was expecting Apple or MS to move in this direction and I seem to recall a POC/patent application/Mock up from a few years back showing an iMac with a removable iPhone/iPod as the home directory. Maybe I'm misremembering.

</comment><comment><USER38> Can I only use Ubuntu when the phone is connected to a large monitor?

Even having access to some command line packages on the phone would be a big improvement over the minimal busybox stuff that comes with Android.

</comment><comment><USER39> I know this is Ubuntu on Android, but all I can think of is Windows 8. Doesn't this seem like an inevitability for Microsoft? Intel even has x86 mobile chips on the way.

</comment><comment><USER40> This is pretty cool, but it's an OEM-driven product, dependent on the phone maker to enable it. For over a year I 've been working on a port of X to Android as an application, running as a non-privileged user, displaying to a surface allocated through the Android Java API. The port is at <http://github.com/tmzt/androix> along with build instructions. (see the readme)

</comment><comment><USER41> And, with the "Cotton Candy" Android-on-a-thumbdrive, your next desktop could hang on your key chain.

[http://www.tomshardware.com/news/fxi-tech-cotton-candy- usb-e...](http://www.tomshardware.com/news/fxi-tech-cotton-candy-usb-exynos- computer,14471.html)

[http://www.tomshardware.com/news/fxi-android-ubuntu-arm- angr...](http://www.tomshardware.com/news/fxi-android-ubuntu-arm-angry- birds,14035.html)

</comment><comment><USER42> Does anyone have any real-world experience with this? It looks amazing, but I'd like to hear from someone who's lived with it (if you're out there)...

<comment><USER43> The motorola Atrix had demos of this concept. There was no ubuntu- it just was moto's skinning of android & a $200 docking station for your phone/keyboard/monitor.

It wasn't particularly successful.

</comment></comment><comment><USER44> Look at the place I live:

<http://www.youtube.com/watch?v=fvUXFav7aDk>

You do not want to "have everything" with you in your mobile while you are in a public place. I have a notebook and an iPad, and, of course, my 4 year old shitty Compaq laptop I take outside when I have meetings. I keep my files inside a truecrypt file vault just in case.

</comment><comment><USER45> Yesterday on reddit headline was something like "I can't believe you can play Grand Theft Auto on a _phone_" and my response was "I can't believe we call them phones, they are powerful pocket computers that just happen to have the ability to send and receive phone calls"

I wonder when they are going to come out with portable OLED display sheets and ultralight paper-based keyboards.

</comment><comment><USER46> I am so excited about this idea, being able to dock and have a full desktop with full applications and keyboard would be awesome. I have BusyBox on my Android phone but it usually isn't enough to make it function like a real Linux desktop. However, I hope that Canonical will stay true to itself and develop and release this as truly open software.

Edited for clarity.

</comment><comment><USER47> Did I just come out of a 40-day coma? What month is this?

"Android was designed for touch only, and has its hands full winning the tablet wars."

Be careful. I think Steve Jobs might've patented the reality distortion field.

"The Ubuntu desktop sets the standard for ease of use." Compared to what?

"And imagine TVs that become home PCs when you dock your phone: perfect for the emerging market where LTE will be the normal way for new users to connect to the Internet."

Great. My home connection's going to come with a 4GB monthly cap now too?

In a lot of ways this is actually a neat idea, and I could see something close to this catching on. I see a few problems though:

* As fast as my laptop is, I still sometimes wish it had a faster CPU, a better GPU, and more RAM. Modern phones are still around an order of magnitude slower and have a fraction of the RAM. They're not exactly desktop replacements.

* 64GB is an impressive amount of storage for a cell phone. It's pretty weak for a laptop.

* "The Cloud" is an order of magnitude or two slower than my local disk, and my local disk doesn't have a monthly data transfer limit.

* Normal people have no clue what Ubuntu is, and they're not exactly adopting it in droves, even without having to buy new hardware to support it.

So… neat idea, but I don't see this getting off the ground. If it does, though, I see a lot more idle sword fighting in my future.

</comment><comment><USER48> I never got my jet pack, but I DID get my handheld supercomputer. I love this. I love the idea of it and the 7 year old in me who had his world rocked by that TI-99/4A is stoked. I just can't be upset at any aspect of this - <USER2> computing dreams just keep coming true.

</comment><comment><USER49> Reminds me of this from 2011 [http://www.engadget.com/2011/01/06/motorola- atrix-4g-hd-mult...](http://www.engadget.com/2011/01/06/motorola-atrix-4g-hd- multimedia-dock-and-laptop-dock-hands-on/).

Which I think is _awesome_.

</comment><comment><USER50> Does anyone know who coined the "inside of every X there is a Y trying to come out"?

</comment><comment><USER51> So this isn't something I can actually buy if I understand this correctly, right?

</comment><comment><USER52> Just curious. What happens if the phone rings and you rip it out of the dock?

</comment><comment><USER53> So it doesn't seem like I can actually run this right now. Am I missing the link to actually get it and set it up? If there isn't one, why are they making an announcement?

</comment><comment><USER54> It sounds great, but I'm confused: Are they planning to give this away as a free download? They seem to be targeting manufacturers only.

</comment><comment><USER55> Finally an OS company has seen and grasped this big business opportunity. This could mean a big boom in Ubuntu users. A win for linux.

</comment><comment><USER56> To see in action, <http://www.youtube.com/watch?v=gUXUjjg9qQ0>

</comment><comment><USER57> I always find it odd that people call the hardware and OS by the same name.

My first impression was a virtualized Ubuntu on top of Android (the OS).

</comment><comment><USER58> Ubuntu is the future of open computing. Look what apple does to their OS X and what Microsoft is going to do with their windows.

</comment><comment><USER59> I don't understand what you use for input devices? Bluetooth keyboard and mouse paired with the phone?

<comment><USER30> Maybe the dock has a few USB ports? Otherwise, I'm not sure what exactly the dock does. You don't need a dock to connect a display to a phone with HDMI- out, which are the only phones supported.

<comment><USER60> I think the idea is so that you can just drop in a dock to connect USB, HDMI and power, rather than plugging and unplugging three different cables each time. That is, the dock wouldn't offer new kinds of ports, so much as collect them together for the user.

<comment><USER61> So instead of my company phone and company locked down desktop PC, I get one device which I can then plug into any dock in the building. IT Support only have to worry about one device instead of two.

</comment></comment></comment></comment><comment><USER62> So what do you do when the phone rings and you're doing something uninterruptible on the PC?

<comment><USER63> Ideally: pick the phone out of the dock and answer it. Your desktop session will pause until you return the phone to this (or another) dock. If what you're doing on the desktop is so important you can't pause it, don't take the call.

<comment><USER64> that doesn't seem ideal if the phonecall is about what you're doing on the desktop.

</comment></comment></comment><comment><USER65> I'll love to test this out as soon as possible. Getting my Android phone to try it out. ;)

</comment><comment><USER66> This is cool from a gee whiz/novelty standpoint, but in practice this will have very poor usability. Why? Good touch apps have terrible UI for keyboard & mouse interaction.

For example swiping, pinch to zoom, etc. Many apps use a swipe to the left or right to perform and action. How would this work with a mouse?

<comment><USER6> This isn't what they're proposing. What they're saying is that Android will be on the touchscreen, and Ubuntu will available on the main screen.

Presumably, Ubuntu apps will be given access to Android's data store and events, but Ubuntu apps won't run on the touchscreen, and vice versa.

</comment></comment><comment><USER67> I could've done without the goatse reference, Canonical.

</comment><comment><USER68> Linux for human beings for Android?

</comment><comment><USER69> still waiting for ubuntu car what taking them so long...

</comment><comment><USER70> Shut up and take my money. This is what I've been dreaming of since I got my smartphone. Why should I even have a netbook for general purpose computing? I want to go anywhere with my MID (mobile internet device).

<comment><USER71> feel the same. i am using an ubuntu laptop for a long time, and my 2 android phones tablets running ubuntu is like a mobility dream... i am excited.

</comment></comment><comment><USER72> I strongly believe, this would be just the beginning. Mobile phones give you three things - (recently, Horsepower), Mobility and Identity. And there are a plethora of things that could be powered with a combination of the three.

Weirdly, wrote about something like this, back in 2008. [http://www.vijayanand.name/2008/10/the-future-of-living- how-...](http://www.vijayanand.name/2008/10/the-future-of-living-how-3g-could- help/)

... in a nokia centric world, be it.

<comment><USER73> Yes, this is what we hope the future looks like. But, for this to happen, the device manufacturers need to collaborate. We still don't have a universal phone charging adapter. Imagine how messy things will get if Apple, Samsung, Nokia etc each start making their own docks which are not compatible with others.

<comment><USER72> Not "if", thats precisely what they will do. :)</comment></comment></comment>


Coding Horror: Should Competent Programmers be "Mathematically Inclined"? - <AUTHOR> http://www.codinghorror.com/blog/archives/001249.html <comment><USER7> First, Jeffs view of programming is too narrow. Secondly, and more importantly, so is his view of math.

Being "mathematically inclined" does not mean being well educated in mathematics. You don't need to be able to rigorously prove the fundamental theory of calculus to be a good programmer. Most of mathematics does not directly apply to programming but the thought processes are extremely similar. If you see someone sorting papers and try to figure out why they are doing it inefficiently, that is mathematical inclination. Its about thinking in algorithms, not mastering differential equations.

He's created the strawman that a strong mastery of mathematics is required for competent programming. That is not whats been said. A strong mathematical inclination is a way of looking at problems that programmers and mathematicians share. Its about seeing "through" problems and finding solutions. Its about reducing problems to previously solved problems (or simpler versions of themselves), etc. I can list a dozen ways in which programmers and mathematicians do similar things.

But, playing along with the strawman, real math becomes necessary in normal programming fairly often. Not 3d, Jeff, even 2d. What's the distance between a point and a line segment?

<comment><USER8> _What's the distance between a point and a line segment?_

let A, B be the 2D start and end points of a line segment. Let P be a 2D point.

We think about the problem and graph the problem like this:

                P
                .

      A </comment></comment><comment></comment><comment></comment><comment></comment><comment> B

Then we realize that we can re-frame the problem in terms of a right triangle:

                P
                .
              / |
            /   |
          /    _|
        /     | |
      A </comment><comment></comment><comment></comment><comment></comment><comment>- B
                Q

Now for some definitions. Let's define the vector operations that we'll be working with.

      class Vec2( object ):
        def __init__( self, x, y ):
          self.x = x
          self.y = y

This represents a 2D vector with properties 'x' and 'y'.

      def length( V ):
        return sqrt( V.x*V.x + V.y*V.y )

This computes the length of a 2D vector.

      def normalize( V ):
        V_len = length( V )
        return Vec2( V.x / V_len, V.y / V_len )

This computes a new vector that points in the same direction as V, but is of unit length ( length( normalize( V ) ) == 1.0 ).

      def dot( V1, V2 ):
        return V1.x*V2.x + V1.y*V2.y

This computes the "dot product" between two vectors. I'll clarify this operation in a moment.

Finally, for clarity and succinctness:

      V1 + V2 represents Vec2( V1.x+V2.x, V1.y+V2.y )

      V1 - V2 represents Vec2( V1.x-V2.x, V1.y-V2.y )

      S * V represents Vec2( S*V.x, S*V.y ), which
      scales the vector V by a factor of S.  So (2.0 * V)
      would result in a vector in the same direction as V,
      but twice as long.

_Goal: find the length of PQ_

First, we examine our graph above and write out the known and unknown quantities.

      AB = B - <USER6>
      AP = P - <USER6>
      AB_len = length( AB )
      AP_len = length( AP )
      Q = ?
      AQ = Q - <USER6>
      PQ = P - <USER6>

It looks like our first step is to compute Q.

 _A dot product trick_

The trick we'll use to solve this is via the following rule:

For any line that passes through A and B, dot( normalize( B - A ), P - A ) is the distance between A and the closest point on the line to P.

Huh?

Let me explain this thoroughly, so you can add it to your own toolbox for your entire life.

 _Building an intuitive understanding of vector math_

Imagine a line segment AB and a point P. Now picture point Q, which is the closest point to P on a line that passes through A and B, just like the graph above. You can use the dot product to find the distance between A and Q.

First, compute the vector AB by computing (B - A).

You can visualize this as follows. Picture a line segment from point A to point B. Now move it so that A is coincident with the origin (0,0). Since you moved it, you didn't change its length and you didn't change its direction, just its location. So the result of (B - A) could be intuitively described as "a line segment that begins at the origin (0,0) whose length and direction are equal to AB's".

The next step in the dot product trick is to set the length of (B - A) to 1.0, which is "unit length". A few related trivia notes:

\- if a vector's length is exactly 1.0, then it is called a "unit vector".

\- when you set a vector's length to 1.0, you have just "normalized" the vector.

\- normalized vectors are a succinct way to represent a direction in space, whether it be 1D, 2D, 3D, or any other D.

\- remember the 2D line equation "y = mx + b"? 'm' is the line's slope. In 2D space, slope is just an alternate way of representing a vector's direction. You can compute a vector V's slope as "rise over run" (V.y / V.x). The only advantage of using slope to represent a direction in 2D is that it's efficient to compute and to use. There are two big disadvantages. First, it's not immediately clear how we'd compute slope in 3D. But more importantly, you can't represent vertical lines with a slope. A vertical line has no 'run', so (V.x / 0.0) == undefined. In programming terms, this could cause problems. So slope is generally avoided for those reasons. I explained it here because I am hoping that it helps you to understand vectors more intuitively.

So, let's enumerate some features of unit length vectors:

\- they can be used to represent any direction in space.

\- the range of each component of a unit length vector is never outside of [-1.0 .. 1.0].

\- if you compute the dot product between a unit length vector and a point, you have _projected_ the point onto the vector. The result of the dot product is the distance between the origin and the closest point on the vector. -- _dot product trick_

\- the dot product of two unit length vectors is equal to the cosine of the angle between them. In other words, let V1 and V2 be unit length vectors. dot( V1, V2 ) == cos( angle between V1 and V2 ). Related facts:

\-- the dot product of two unit length vectors is always in the range [-1.0 .. 1.0].

\-- if V1 points in the same direction as V2 (that is, V1 == V2), then the dot product is 1.0.

\-- if V1 is perpendicular to V2, then the dot product is 0.0.

\-- if V1 points in the opposite direction of V2 (that is, V1 == -V2), then the dot product is -1.0.

\-- And now, for something fun (and totally optional -- if you don't really understand, don't sweat it. But hopefully it will be interesting rather than confusing): Imagine a light bulb at point L. Now imagine a sphere at point S, being lit by that light bulb. Imagine a point on that sphere, P. You can compute the lightbulb's effect on the sphere at that point as follows:

      L = lightbulb position
      S = sphere position
      P = point on sphere
      Ldir = normalize( L - P )
      surface_normal = normalize( P - S )
      light_intensity = max( 0.0, dot( surface_normal, Ldir ) )
      # that quanitity is called "NdotL" in computer graphics.
      # you would then multiply that quantity by the light's
      # "attenuation", which dims the light as it gets further
      # away.  But that's outside the scope of this example.
      # If you're interested in computer graphics,
      # the book "Realtime Rendering" is fantastic.

_Solving the problem, finally._

So, let's use our newfound ninja-guru knowledge of vectors and dot products to solve the original problem. After glancing at the above graph again, we remember we need to compute the length of the line segment PQ. One way to solve it is to compute the point Q, then length( Q - P ) is our answer. Getting down to business:

      def dist_point_to_line( A, B, P ):
        # represent the line segment AB as a vector.
        AB = B - <USER6>

        # determine the direction of B relative to A.
        AB_dir = normalize( AB )

        # compute the distance between A and Q using the dot
        # product trick.  The first argument is a unit length
        # vector.  The second argument is a point *relative to
        # that vector*.
        AQ_len = dot( AB_dir, P - A )

        # Now that we know the length of AQ, we can compute Q.
        # To do this, think of the following equation as "start
        # at A; move along the direction AB_dir by AQ_len units;
        # that position is Q."
        Q = A + AQ_len * AB_dir

        # return the length of PQ.
        return length( Q - P )

I hope the explanation was been illuminating, and not too confusing. If you have any questions, feel free to ask.

<comment><USER7> I got bad news. The question was to find the distance between a point and a line SEGMENT.

Luckily, since you know some math, and you understand what a dot product is, and how it relates to a projection, you can trivially extend your solution by checking to make sure Q is on AB, and then adjusting your answer if its not.

:)

<comment><USER8> Ahh, yes. Good catch. In the algorithm, simply clamp AQ_len to be >= 0.0 and <= AB_len. (Notice that you compute AB_len as a side effect of normalizing AB.)

</comment></comment></comment><comment><USER9> _I have not found in practice that programmers need to be mathematically inclined to become great software developers. Quite the opposite, in fact._

To anyone unsure about the above quote. Jeff is full of shit. Often he dances on the edge of wrong advice, today he has leaped over it.

You don't need to be a math whiz, but you damn sure need to be math inclined. At the very least you need logic. Any kind of graphics programming - math.

But if like Jeff your career consists of simplistic apps in VB, well then I still wouldn't call you a _great_ software developer without math.

Don't aim to be at best average in your career, it makes for a shitty professional life, which is a big chunk of your whole life.

<comment><USER10> Graphics programming is a very small subset of programming in general. You're basically saying "all programmers need math because some programming needs math"...

There's plenty of cutting-edge stuff to be done that doesn't require an intimate knowledge of mathematics. I would have to say that being good at _arithmetic_ seems to be pretty important in programming, though.

<comment><USER9> Graphics, physics, all my work in biotech, all my work in video edition, all work I've ever done. Vast sectors of programming are math intensive. There are few which aren't.

Also arithmetic and even more so logic pretty much = applied math.

<comment><USER11> Other programming areas that require math:

Pattern recognition, control systems, encryption, image and video compression (discrete cosine transforms in JPEG, discrete wavelet transforms in JPEG2000) any type of simulation (e.g. SPICE for electronic component simulation, RF simulation for electromagnetism, finite element models for mechanical systems) ...

Any type of planning system requires math (e.g. convex optimisation, network routing, etc...) - these types of things have huge applications in areas such as industrial engineering and network routing.

Basically all the interesting parts of programming require math.

</comment></comment></comment></comment><comment><USER12> "Knowing even a little of the right kinds of math can enable you do write some pretty interesting programs that would otherwise be too hard."

(one of the Yegge quotes in the article)

I think this nails it.

It's a Blub thing. Jeff sees little use for Math because he does not know of any mathematical solutions for the problems he encounters. But...how can he think of a mathematical solution for a problem if he doesn't know very much Math?

Google, of course, relentlessly applies Math to everything they possibly can. I think that has worked out rather well for them. The flip side is that they might lose a good designer occasionally with good subjective judgment about hard to quantify things.

<comment><USER13> "It's a Blub thing" nails it even better, IMO. PageRank, MapReduce, the Amazon recommendation algorithm, clustering algorithms, .... inventing those required a solid knowledge of and comfort with mathematics.

Of course, strictly speaking this doesn't mean that mathematics is necessary to do great work. Other qualities - say a good understanding of community (think Flickr), or psychology (Facebook), or design (37Signals) - can be equally useful. But, yeah, that post has "Blub" written all over it.

</comment></comment><comment><USER14> I get the impression that Jeff is a much better blogger than programmer. And he's not my favorite blogger. I say this not just from his self-deprecation, which I've learned not to take at face value. But these weird non-sequitur "questions" he comes up with for article titles suggests he is not at an adult level of proficiency with his craft. Asking whether programmers "should be 'mathematically inclined'" is like asking whether movie directors "should be visually creative." They damned well better be, or go find something to do with their lives that is not a waste of their and their audience's time.

When I was, oh, twenty or so, I used to be one of those systems programmers who thought that the fanciest data structure I'd ever need was a hash table. If you write real code, that other human beings use, one of those humans will eventually use it in a way you didn't anticipiate. And in that use, N will suddenly be large! The user will expect your code to work, and with reasonable resource consumption. "Mathematically uninclined" programmers' code will die with large N, and they're not "inclined" to fix it.

</comment><comment><USER15> I think that Mathematics is a much larger field than most people realize.

How can programmers not be mathematically inclined? Thinking logically about how to model and solve a system using abstract concepts. Computer science is a subset of applied mathematics.

<comment><USER16> _Thinking logically about how to model and solve a system using abstract concepts._

Which is often just as much or more in line with philosophical applications of logic than purely mathematical. As I noted in other comment, you could then argue that all philosophy and reasoning is basically conceptual mathematics, but people don't generally view philosophy this way despite the concept dating back 2500 years.

<comment><USER17> People don't view philosophy that way because philosophy never gets far from words. Philosophy and math started to fork at the point where people realized that substituting words into logical schema and then using logical transformations to create new sentences doesn't work reliably, and in fact doesn't really aid thought at all except by suggesting possibilities. At that point, logic became a philosophic failure, a dead end. A curiosity at best. There's still kind of a conceptual overlap; a philosopher might find it stimulating to think about the concept of N-value truth systems. However, he wouldn't think that mathematical theorems about such systems have any strict philosophical consequences. They would just be spurs for thought.

<comment><USER16> This was not the case at all where I did my undergrad, judging by the OpenCourseWare it doesn't appear to be the case at MIT and I would assume this is the same at any of the other major universities. Arguments were consistently and constantly described using symbolic logic and derivations.

I don't understand the animosity you have for philosophical logic. I've always felt it was an interesting compliment to what I did in computer science and it made me appreciate discrete math concepts to a greater degree. The fundamentals building blocks are the same, just a different application.

<comment><USER17> I don't have any animosity for philosophical logic, but I'm irked by the impression that mathematical logic's relevance to philosophy is as a tool of thought, i.e., that being a philosopher has some essential connection to being a practitioner of mathematical logic. Mathematical logic plays a similar role in philosophy that UML and design patterns play in programming. UML was hoped and perhaps originally intended (I don't honestly know) to be a powerful tool that could be used in CASE tools to _accomplish_ programming in an easier and more reliable way than the clearly insufficient way that program now. It turned out that problems could be solved that way, but only after so much difficult "traditional" preliminary work that nothing was saved. By and large, UML is only used for documentation of patterns and high-level documentation of systems. You can undoubtedly program without using UML and patterns as tools, and people disagree about whether they are even useful.

In a similar way, it was hoped that a sufficient understanding of logic would enable one to reach philosophical conclusions more easily, with complete reliability. This sounds ridiculously naive to us, but we have the advantage of hindsight. At one time it was thought that with the investment of sufficient philosophical thought, logical rules of thought could be distilled and used to settle real problems. Unfortunately, it turns out that every application of logical rules requires so much examination of the validity of the application that little advantage is derived from logic beyond its ability to suggest and describe possible lines of thought, in the same way that UML and design patterns _suggest_ and _communicate_ but cannot replace the work of programming nor ensure the validity of resulting programs. Symbolic logic cannot be used to validate philosophical thought. To take an example of a deeply "logical" work, if you translated Spinoza's Ethics into symbolic logic, you would see nothing except some very trivial stuff and probably numerous errors. The profundity of Spinoza's work has little to do with logic in the mathematical sense. Once philosophers realized that, mathematical logic quickly became an ex-wife they had dinner with once a month. Never entirely forgotten, always thought of with affection, an important part of one's development, not without interest, but not looked to as a source of growth and vitality. You can certainly be a keen and insightful philosopher (though an ignorant one) without any understanding of mathematical logic, and a deep study of mathematical logic is rather useless for philosophy.

Now we muse about the "unreasonable effectiveness of mathematics in the natural sciences." At one time we hoped pure logic would help us decide questions about God and morality, and now we have learned to be surprised that it is useful for anything at all! Mathematical logic is an active field of mathematics, and philosophers have many problems to ponder, but there is no philosopher reading set theory abstracts looking for support in a dispute about aesthetics or ontology. Logic has become a branch of mathematics partly because it is necessary for mathematics and can be studied as mathematics, but also because no field outside of mathematics requires the solution of any complex problems in mathematical logic.

Even Godel's Incompleteness Theorem, while containing rich philosophical implications, did not actually apply to any philosophical ideas outside of math or logic because philosophers had long since given up using mathematical rules to "prove" or "derive" philosophical results. Philosophers were, as always, using language to express, justify, and criticize philosophical work. The use of logic as a tool for rigorously validating philosophical arguments, which was the original basis for the connection between philosophy and logic, is still a pipe dream.

I don't mean to denigrate either mathematics or anything outside mathematics by this. I have a math degree, but I'm the first person to admit that mathematical logic tells you nothing reliable about the relationship between "Every X is a Y, and Z is an X," and "Z is a Y." A proposition in symbolic logic can be derived mechanically according to its rules, but philosophy is uncertain and requires judgment. Mathematics is a useful tool for the natural sciences; in philosophy, mathematical logical is occasionally a stimulating subject for thought, but not a significant tool.

<comment><USER18> >The use of logic as a tool for rigorously validating philosophical arguments, which was the original basis for the connection between philosophy and logic, is still a pipe dream.

That's not strictly true. The Arab and Scholastic philosophers constructed a philosophical world-view, largely based on Aristotelian logic, which internally consistent fairly comprehensive. What resulted in its downfall, was not the failure of logic, but the desire for absolute truth. All forms of logic, whether mathematical or syllogistic, require argument from premises, which means that ultimately one must start with first premises that cannot be proved and must merely be agreed upon (making truth a matter of consensus.) Descartes tried to rectify this situation by assuming away all assumptions and proving first premises in a vacuum. He didn't get far (made too many logical fallacies) but he started a fad that overtook the philosophical realm and continues to this day.

My point being, that the problem wasn't the language (despite what the deconstructuralists might say,) which, if common and well defined presents no barrier, but changing ends in philosophical discourse.

</comment></comment></comment></comment></comment></comment><comment><USER9> From crazy Jeff's own comments, and his own mouth:

 _> I was writing an Asteroids clone in Flash a few years back, I wrote my own insanely complicated functions for calculating directional velocity instead of using SIN and COS

fantastic, LOL! This supports Steve's position -- it illustrates that you'd need enough math background to at least know in what general direction you should be looking. And save yourself some coding time and pain to boot. Jeff Atwood on April 1, 2009 06:17 AM_

</comment><comment><USER19> I'm not qualified enough to comment on it. But I personally think Jeff is completely wrong. I'm a SDET (Test engineer) and am a history major. Couple of months back I asked people for math books related to computer science. I got some good feedback. I bought two books a)- What's mathematics b)- Discrete Maths by Susana App. I'm nowhere near a hardcore computer science student as I'm studying on my own. However, I've been able to solve recurrences, inductions and basic mathemtical proofs. I came across this beautiful function named "Ackerman function" and reading it was a pleasure. I don't take care of plants in my garden because it's necessary. I just do it for pleasure, literally. Same goes for maths though I'm pretty damm sure I will never able to do maths as good as Knuth but still. I've a long way to go. But I've ordered some books on proving theorems. I don't intend to become a hardcore mathematician but I would just like to get through this once (just for the sake of pleasure). Here is a personal story a)Once I finished basic Discrete Maths I was writing a command-line based twitter client for personal use and using their API recursion just came as a natural choice (it was so natural that I had to think of how I did it after seeing my code running--believe it or not) b)- I'm fairly confident (and cautious) when I write recursive code now. I'm , by all means, a very average programmer but I would like to think that I've improved a bit. I agree with Djikstra that learning your own language in depth is important for non-native speakers. Learning your language in depth widens your horizon and it creates clarity of thought. At least, I think it's important though I'm still a mediocre English speaker (yet).

</comment><comment><USER20> When Dijkstra said what he did, programmers made computers process data in an environment with a very high data/cycles ratio, and doing that efficiently has a pretty large intersection with math.

Today, there are very few environments that has a higher data/cycles ratio than anyehere in the Apollo program in the '60, and most of the "hard" problems you'll run in to on a day to day basis have been commoditized - you'll be hard pressed to find a programming language where quicksort is even marginally hard to get to. Projects like My/PostgreSQL, Lucene and so on makes fulltext searches over very large corpuses of data crazy simple, even on consumer hardware. When I did a Scientific Computing project in college three years ago, we ran out of data long before our laptop fans came on.

Math matters in computer science, but tooling is moving the "competent programmer"-demography farther and farther away from the "computer science"-demography. And that is a good thing, just like the separation of programmer and user which happened in the early 80's (I guess)

Final thought: A former boss once told me, regarding education, that he knew plenty of very good, but no really great, programmers that didn't go to college for math and/or comp.sci.

<comment><USER9> I know great coders, who quit their CS college program because they were bored. That doesn't mean they don't know a SHIT TONE of math.

</comment></comment><comment><USER21> Yes, competent programmers should be 'mathematically inclined' in a general way, not because high-level math is itself necessary for most programming but because 'mathematically inclined' is a decent proxy for the ability to manipulate abstractions, which is necessary for both math and programming.

</comment><comment><USER22> "A Mathematician's Lament: How School Cheats Us Out of Our Most Fascinating and Imaginative Art Form" explains why there is a common misconception on what the mathematics is.

 _A complete prescription for permanently disabling young minds — a proven cure for curiosity. What have they done to mathematics! There is such breathtaking depth and heartbreaking beauty in this ancient art form. How ironic that people dismiss mathematics as the antithesis of creativity. They are missing out on an art form older than any book, more profound than any poem, and more abstract than any abstract. And it is school that has done this! What a sad endless cycle of innocent teachers inflicting damage upon innocent students. We could all be having so much more fun._ </quote> ([pdf] (25 pages) <http://www.maa.org/devlin/LockhartsLament.pdf> )

Here's the corresponing discussion on HN <http://news.ycombinator.com/item?id=130499>

</comment><comment><USER23> From PG's article "Ideas for Startups" [<http://www.paulgraham.com/ideas.html>]

 _"...to attack hard problems you need powerful solvents. I find math is a good source of metaphors good enough that it's worth studying just for that..."_

</comment><comment><USER24> I've had a personal experience with people (not developers) who couldn't understand the concept of simplifying equations. So it was "add 20%, +8, x 2," or something to that effect. I said "you mean x 2.4 + 16". Their response was "just do what we said." So I think a minimum level of math is required, just like a minimum level of language skills.

<comment><USER25> Would the code for the simplified equation be commented so that a business type who wondered why it was represented that way would understand what underlying expression went into the code?

I heard a scary story from a professor of economics who teaches business students. She said she talked about multiplying some value by 20 percent, and wrote on the blackboard "* .2," and then had students ask her why she wrote ".2" on the board when she had just said "20 percent." It probably avoids business logic mistakes to make the steps VERY explicit, so that the businessperson doesn't try to "correct" some error in the formula.

<comment><USER26> "Would the code for the simplified equation be commented so that a business type who wondered why it was represented that way would understand what underlying expression went into the code?"

Why would a "business type" be looking at raw source code? (unless maybe said code is in COBOL)? I am not being sarcastic, but I've found even _good_ business folks, being lost in (what to my eyes was) very clean code.

<comment><USER25> I was wondering if it might be useful for subsequent programmer to be explain on the spot (as, for example, in an IM conversation--thanks for that follow- up) that the code is indeed doing what is desired by the business logic.

<comment><USER24> That was indeed my response. But it lessened my respect for the people in question.

</comment></comment></comment></comment></comment><comment><USER27> While I agree that programming and math are different fields, I have trouble believing that a great programmer would be unable to get through calculus (and vice-versa).

Another reason for the association of programming with math is that the two fields have an incredible intersection. As a math major, I took a lot of math courses that cross-listed with computer science or had a heavily computational component. Anyone who has taken numerical analysis or worked through the last third of the advanced algorithms book has seen the extent of this relationship.

There are huge classes of differential equations that can't be solved without programming. Same for optimization problems (the simplex method has to be one of the greatest intersections of math and programming in history). Simulation (and not just brain-dead random number slamming) has made it possible to solve probability problems that were unsolvable a couple of decades ago.

So while I tend to view math as domain knowledge for a programmer - ie., an area where you apply programming (like chemistry, real estate, acounting...), the relationship seems deeper and more natural.

</comment><comment><USER28> One thing that comes to mind is SQL. I've met many programmers who avoid complex SQL queries and use a "select all, then for loop" approach. Creating a complex SQL query is pure logic a ka maths.

<comment><USER29> Specifically it's operations on sets. Trying to manipulate, in your head, many sets of information - with aggregation and outer joins - to yield a solution set is highly mathematical.

<comment><USER26> "Specifically it's operations on sets"

more specifically on relations, though most database schema in the wild are not really relational. I've personally found knowing relational algebra a great help in designing db s, formulating queries and so on.

</comment></comment></comment><comment><USER14> Oh, wait a minute. It's April 1st, folks. Even Jeff Attwood might not be this bad a programmer.

<comment><USER19> Ah, but is it really a joke? I'm not too sure.

<comment><USER30> No, this isn't a joke. This is straight party line Jeff Atwood. Atwood babbles about his pseudo "intellectual curiousity" all the time. Jeff posts a lot of strange stuff. I think Jeff doesn't know C nor any other non-VB, non-.NET language and doesn't really know how computers work and does not math and tries to justify this lack of knowledge on his blog. It's one thing not to know something. It's quite another to pat yourself on the back for not knowing it. But he does this with quite a lot of words, usually not his own. He does this with many other things too; for instance, he essentially applauded himself for not knowing or having any idea once explained what the phrase "begging the question" meant.

Yet, somehow he is making a living off barely visible ads and no real job that he discusses; surely Stackoverflow is not making that much money.

<comment><USER31> _I think Jeff doesn't know C_

Here: <http://www.codinghorror.com/blog/archives/001216.html>

_surely Stackoverflow is not making that much money._

But StackOverflow delivers, more so than most YC startups.

<comment><USER30> Yeah, I knew he didn't know C. I agree about SO being more popular or whatever than many YC startups. However, my point was just kind of to be surprised that he is making enough money as a full time blogger posting such nonsense. :)

</comment></comment></comment></comment></comment><comment><USER32> Its very common for people that do not grok maths to confuse it with calculations.

</comment><comment><USER33> A lot of useful programming tools are mathematical. Bloom filters, machine learning, and big-O analysis (especially with amortization) come to mind. A competent programmer should be able to dive into those things if needed. (Needing to study up on Wikipedia first is fine, of course.)

</comment><comment><USER34> It totally depends on the type of programming. A lot of programming these days deals with business systems (after all, business tends to generate money. At least, I think that's the point). You may not need any kind of complex math to present interesting web applications or generate reports, or process credit cards. However, if you're in the business of developing applications to sell, or figuring the shortest path to send parts down a conveyor, or writing a compiler, you can see how you might need differing levels of complex mathematics. It all depends on your situation.

I do, however, agree with the point that in the general case, programmers tend to be able to learn quickly, and learn the types of things to help them with their current problem. But if you don't have a grounding to even know where to begin looking for answers, you have a bigger problem.

Certainly all programmers do not need heavy math skills. But it certainly never hurts. All things being equal, I know which one I would rather go with.

</comment><comment><USER35> Jeff needs to define his terms.

The problem is that what Dijkstra means by "competent programmer" is not what Jeff means. It's not just that they are talking about different levels of competence – they aren't even talking about the same discipline.

Dijkstra may have meant something like "doing meaningful work in computer science" or "solving algorithmic challenges". Jeff Atwood seems to mean something like "gluing libraries together to accomplish a business objective".

At the beginning of Jeff's post, it almost sounds like he has something interesting to say about the Dijkstra quote, but that's just because he confusingly uses the same word to mean something almost completely unrelated. As he says "the vast bulk of code that I've seen consists mostly of the 'balancing your checkbook' sort of math." I don't think that's quite what Dijkstra had in mind. Likewise, I suspect finding new algorithmic approaches to tough computational problems is not high among Atwood's interests.

</comment><comment><USER36> I don't think you _need_ to be mathematically inclined, but if you aren't then you probably won't enjoy programming very much (though you can certainly be competent at something without enjoying it). Not that daily programming involves a lot of non-trivial math, but for me programming is essentially a collection of little problems to solve, which I enjoy. Math, at least the parts of it I enjoy, is the same thing, a collection of little problems to solve.

Granted, this is coming from someone who enjoys math (the parts I understand anyway) and programming. I'd be curious to hear from someone who enjoys programming.

</comment><comment><USER37> While I agree with Jeff that Calculus isn't always necessary for programming, other areas of math definitely are.

Basic algebra, linear algebra, abstract algebra, discrete math... I apply concepts from these areas constantly.

</comment><comment><USER38> "Math" is just reasoning about any formally defined system. Programming _is a fucking subset of math._

So any competent programmer _necessarily_ has some kind of mathematical inclination.

</comment><comment><USER39> Er, if you are going to invoke Dijkstra, then you need to be aware of proving programs correct, and without at least a mathematical inclination, you are lost, no?

</comment><comment><USER40> As one of my math teachers said once, mathematics' greatest advantage to programmers, or people in general, is to train the mind at thinking analytically. Most people who have a good background in maths won't necessarily use it everyday, but the process of learning and using it itself makes you think more rationally, and gets you used to solving difficult problems with whatever tools are available.

It's boot camp for the brain.

</comment><comment><USER41> I think that the "right-brained" software engineers and programmers defended, especially in the comments, are probably why so much software sucks so bad. I think Dijsktra overstates the importance of "proving" in programming, but the necessity of mathematical type thinking for a clean design and a clean program is fairly clear.

</comment><comment><USER42> Programming doesn't require much math per se, but almost all domains in which a computer can help do require math.

If you don't know any math you could waste your time rederiving concepts from first principles when you could just have learned the established theory.

</comment><comment><USER43> If you hate math, and need a means to learn it forcibly, code video games, particularly 3D ones. The experience will probably break a few bones, but you'll come out learning more than you ever would have if you just kept writing webapps all day.

</comment><comment><USER44> Three of the four members of the US's team to the International Olympiad in Informatics (IOI) last year also attended Canada/USA Mathcamp. Take from that what you will.

<comment><USER38> To be fair, the ability to solve very difficult algorithmic problems is not particularly related to the ability to do many, many different kinds of programming.

</comment></comment><comment><USER30> Jeff Atwood posts more anti-intellectual drivel. News at 11.

</comment><comment><USER45> I think lumping all of Mathematics together in this context is mistaken.

It amounts to arguing that arithmetic is as relevant to programming as discrete mathematics are.</comment>


Show HN: Create AI Models from an Excel Spreadsheet - <AUTHOR> https://getyantra.com <comment><AUTHOR> Hey guys, I'm new to HN, and I would love your feedback. I'm an ML engineer from Toronto, and few of my non-technical friends wanted me to create ML models for them and eventually expanded to this project. This will allow non- technical people to create an ML model and use it really fast.

</comment><comment><USER2> FYI... [https://pasteboard.co/I8I0p3g.png](https://pasteboard.co/I8I0p3g.png)

(Mobile Safari, iOS 12.1.4)

<comment><AUTHOR> Thanks for pointing out. I'll fix the mobile version.</comment></comment>


Uber.com blocked in Portugal due to court decision (portuguese link) - <AUTHOR> http://observador.pt/2015/06/01/ja-nao-possivel-aceder-ao-site-da-uber-portugal-operadoras-comecaram-bloquear-acesso/

<comment><AUTHOR> The content is in portuguese (sorry about that). Seems like every ISP in Portugal is now blocking access to uber.com. I can still use the app, but I don't know how long it will last.

What the f is wrong with these guys? This is following a stupid "law" where cab drivers can now charge 20 euros (as soon as you sit inside the cab) to go to city centre. And yes, that's the minimum you'll pay when you arrive in Portugal.</comment>


With 30 tuners and 30 TB of storage, SnapStream makes TiVos look like toys - <AUTHOR> http://arstechnica.com/gadgets/2013/09/with-30-tuners-and-30-tb-of-storage-snapstream-make-tivos-look-like-toys/ <comment><USER2> From the article> The customers who are in the position to perform grand feats of copyright infringement are actually the exact same customers who would be filing the copyright infringement lawsuits. As long as the open recording and sharing of full broadcast-resolution TV stays in the realm of the media production companies making the TV in the first place, no one gets upset.

And this is exactly what the "media production companies" just don't get. The hypocritical "do as I say, not as I do" mentality when it comes to their customers goes a long way towards creating the environment they now find themselves in, rampant piracy of their works.</comment>


Growth, Inequality and Poverty Eradication in a Carbon-Constrained World [pdf] - <AUTHOR> http://wer.worldeconomicsassociation.org/files/WEA-WER-4-Woodward.pdf <comment><AUTHOR> Interesting paper on inequality

Conclusions:

>Even on the most optimistic assumptions, and even if we sustain the rate of increase in attention to poverty seen since the early 1990s, relying on global economic growth seems an almost certain route to ensuring that the poor are, indeed, "always with us": such benefits as may trickle down from global growth to the poorest will almost inevitably be countered by the adverse effects of climate change and the costs of adaptation.

>[improvements in growth have failed to make] the prospect of poverty eradication a realistic one, at least before the 23rd century, and, in all probability, ever</comment>


IStockPhoto revenues up - US Mega-Churches one of their biggest customers - <AUTHOR> http://www.theage.com.au/news/biztech/online-photo-group-has-divine-success/2008/09/25/1222217389321.html

<comment><USER2> I love IStockPhoto and stockexchange. That's how I get all the photos for my blog.

I like the flickr CC license too, but the byline for credit is irritating. I wish flickr would offer an option to either purchase or provide credit.

<comment><AUTHOR> I absolutely agree... I'm surprised Flickr hasn't responded with this already. These other sites must be eating to their user-base.</comment></comment>