Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Java Programming

Neal Gafter On Java Under Oracle 130

An anonymous reader writes "Microsoft's Neal Gafter, who was primary designer and implementer of the Java SE 4 and 5 language enhancements and now works for Microsoft on .NET platform languages, discusses the impact of Oracle's acquisition of Sun on Java, makes the case for adding segmented stacks and a meta-object protocol to Java, and offers some insights into how Java and C#/.NET compare." The first couple of answers meander a bit, but after that the interview picks up and is a pretty good read.
This discussion has been archived. No new comments can be posted.

Neal Gafter On Java Under Oracle

Comments Filter:
  • Shills (Score:5, Insightful)

    by MightyMartian ( 840721 ) on Wednesday September 14, 2011 @02:59PM (#37402720) Journal

    I gather he drank the kool-aid when he went through the door. I'm halfway through the interview and its basically ".NET is better than Java"

    • by Anonymous Coward

      Well it doesn't take shilling to know that it is better than java under most circumstances.

    • Re: (Score:3, Insightful)

      At least he explains why. MS has way more resources than Sun ever could manage. It surprises me that Java even got out the door, honestly. Also recall that MS hired the best and brightest away from Borland a few years before the inception of .NET. And look, the best of them (Anders) architects C# now.
      • Re:Shills (Score:4, Insightful)

        by buchner.johannes ( 1139593 ) on Wednesday September 14, 2011 @03:58PM (#37403364) Homepage Journal

        At least he explains why. MS has way more resources than Sun ever could manage. It surprises me that Java even got out the door, honestly.

        Also recall that MS hired the best and brightest away from Borland a few years before the inception of .NET. And look, the best of them (Anders) architects C# now.

        It might also have something to do that when C# turned up, Java was already a mature language and approached the various problems. Of course, if you do something later, you learn from previous attempts, so it couldn't be worse just from that fact. Since C# never aimed to run on non-windows, it's also not a fair comparison of designs, because the goals were different.

        • by nmb3000 ( 741169 )

          Since C# never aimed to run on non-windows, it's also not a fair comparison of designs, because the goals were different.

          Plain wrong. C# is a platform-agnostic language with a standards-defined specification [ecma-international.org]. The CLR and CIL specifications are also 100% platform independent.

          What is tied to Windows is Microsoft's implementation of their CLR and CIL compiler. This is what Mono implements for other platforms.

          • Re:Shills (Score:4, Insightful)

            by Billly Gates ( 198444 ) on Wednesday September 14, 2011 @05:06PM (#37404194) Journal

            The MSIL output is loaded with calls to win32 and COM/DCOM. .NET was designed for Java initially. When talks with Sun failed C# was made to run only on Windows and use the .NET API instead.

            In essence it was made to quickly be a defacto .NET language tied with Visual Studio. Sure you can use Mono C# but what is the point of not using .NET? The reason why C# apps can't be recompiled on Linux are simply winforms by their very nature are abstraction layers of Com/DCOM. Add then threading and networking and it probably has more ties to things like NDIS and VMS/NT style threads and other nasties. You have to emulate Windows to get anything done.

            Sure the spec is free and I think Moto (can't remember exact name) was made for FreeBSD that was an acutal C# compiler but it did not create MSIL or use .NET.

            If free software advocates are serious they need to invent an alternative to .NET and some tools to make it competive before Mono can be taken seriously as a cross platform tool. Reinventing .NET and Winforms is a losing battle that will make many programmers switch to Windows and stay there for development costs.

            • by ndykman ( 659315 )

              If I remember correctly, the project was code-named Motor, and Microsoft partnered with Corel to release a commerical version of it.
              Didn't go very far.

              The compiler did create MSIL (it was targeted for the CLR, and MSIL is the low-level assembly language of the CLR), and had the basic .Net libraries, which were much smaller then. This core is still quite portable, but it is a much smaller part of the the whole .Net platform now.

              The basic point does remain, that there is a significant effort in bringing the w

          • Plain wrong. C# is a platform-agnostic language with a standards-defined specification. The CLR and CIL specifications are also 100% platform independent.

            Agreed, but only in a theoretical sense and only if you're talking about the language specifically. Microsoft's .NET efforts were focused on Windows (at least until XNA and compact framework came along). That's reflected in the API and development tools (hello VisualStudio). You've got to think that Sun might have spent more energy on innovation if they

            • by Anonymous Coward

              Not even Microsoft uses WPF. Why should Mono bother implementing something that's not their goal. Most of .NET code is business logic, back end, etc. with boring UI just like Java (up until they introduced Silverlight).

              And Mono implements many things that Microsoft .NET does not implement. Language concepts are fully supported, APIs are not. Do I care about the Windows API on Linux? No, I care about GTK# bindings, Unix bindings, etc.

          • Kinda right, kinda wrong (I guess you might not be a developer or might not have been in the enterprise software field when Java and later .NET first emerged, which would explain why you don't understand the considerable limitations of .NET). What actually matters is the millions of lines of code in the libraries. The language and language implementation is meaningless in comparison. Basically the .NET libraries only work on Windows and Mono have essentially declared that some libraries will only ever work
          • Re: (Score:3, Insightful)

            by peppepz ( 1311345 )
            The ECMA specification dates back to version 2.0 (in 2006, 5 years ago) and even back then, it didn't cover the whole standard library for C#, which is more important than the language itself. C#'s de facto standard library, .NET, is not standardized and has plenty of links to Windows.

            The current version of C# (4.0, from 2010), has no standard defining it, besides its Windows-only implementation.

          • Since C# never aimed to run on non-windows, it's also not a fair comparison of designs, because the goals were different.


            Plain wrong. C# is a platform-agnostic language with a standards-defined specification [ecma-international.org]. The CLR and CIL specifications are also 100% platform independent.

            You honestly think that Microsoft never making a non-windows part of the VM wasn't part of the Microsoft intention to make it a Windows language? The reality is that C# IS a Windows language. You're either very

          • Erm, great - so where's that 100% compatible version of the CLR and libraries that can seamlessly run any .Net app built making use of the 'official' libraries on windows, linux & unix (x86, x86-64, ARM variants of both),

            Oh, right. Java is still the only place to get that. If you build using standard .Net 3+ libraries, you're limited to Windows platforms. At least you'll get ARM architecture back under Windows 8...

            The CLR and CIL specs were submitted for standardization for PR purposes only. If they

        • At least he explains why. MS has way more resources than Sun ever could manage. It surprises me that Java even got out the door, honestly.

          Also recall that MS hired the best and brightest away from Borland a few years before the inception of .NET. And look, the best of them (Anders) architects C# now.

          It might also have something to do that when C# turned up, Java was already a mature language and approached the various problems. Of course, if you do something later, you learn from previous attempts, so it couldn't be worse just from that fact. Since C# never aimed to run on non-windows, it's also not a fair comparison of designs, because the goals were different.

          I've been a Java/EE developer for the last 12 years, and Java has given me a good way to put food on the table, but even I have to say that this is just not true, and that is not the case here. C# has become a superior language over Java because C# has been lead by more pragmatic PL designers than Gosling ever was. Not to take away from Gosling's genius, but his major contribution by now has become the VM, not the primary high-level language running on top of it (Java.)

          The design of C# has been more than

      • Sun had lots of capital in the 1990s and made billions in revenue when Java was in development. It was before NT slaughtered them and before the great recession and when Wall Street had faith to invest in Sun. I think Java was very well designed for its time in the early 1990s. Sun's obsession with making sure it had to be run on a VM with no executables killed it. Sun wanted software to run on Solaris more than having it mult-platform in a successful way, as many would write java programs but make sure the

    • by lgw ( 121541 )

      Java and .Net (that's .Net the runtime library, not ASP.Net or any of the confusing array of other stuff called .Net) have been leap-frogging each other for a while now. C# with .Net 4 was "everything in Java 6, and some better stuff". I hope Java 7 is "everything in .Net 4 and some better stuff", but I haven't studied it yet.

      Certainly the competition between these languages has been great for developers using either!

      • Java 7 is, unfortunately, extremely lack-luster. That, combined with whOracle in charge, doesn't bode well IMHO.

        If only MS actively supported cross-platform .NET, so we had an alternative to Java...

        • The sun is setting on Java indeed. (no pun intended)

          Java will exist as Cobol exists for many decades on crappy intranet apps for IE 6 and for newer mainframe and as/400 apps. I learned true object oriented programmimg on it after I had issues with C++. Java takes millions of lines of code to get anything done in any moderately complex web apps vs PHP and even ASP.Net.

          It is a shame as it hurts Linux, but many companies are willing to drop down $100,000 in licensing fees for IIS, SQL Server, and Windows Serve

          • The sun is setting on Java indeed. (no pun intended)

            Java will exist as Cobol exists for many decades on crappy intranet apps for IE 6 and for newer mainframe and as/400 apps.

            What does IE 6 has to do with intranet apps, COBOL or Java? And what's wrong with enterprise computing in big-iron hardware? And who the hell develops in AS/400 anymore? Do you really know what you are talking about?

            I learned true object oriented programmimg on it after I had issues with C++.

            Strange, I thought one learned OO modeling (not just programming) on a language agnostic way. Also, as a person has worked with C++ (and C) and Java and other OO and non-OO languages, this statement makes no sense to me at all.

            Java takes millions of lines of code to get anything done in any moderately complex web apps vs PHP and even ASP.Net.

            Fortunately, the bulk of Java development is not on web apps alone. A

    • Well yeah, but it is. In what way except licencing do you prefer Java?

      • Better cross-platform compatibility. Mono just plain sucks.

        • Yes it does.

          I mentally clumped that under licencing because I think Miguel can't attract developers due to fear of MS's control, but you're right - that is a reason to develop in Java.

      • by devent ( 1627873 )

        * Better tooling support (ant, maven, grandle, open source plugins),
        * free IDEs (Eclipse, Netbeans, IntelliJ, for C# you only have VS),
        * more open source libraries, and more active open source community
        * simpler language that doesn't change with each version,
        - checked exceptions
        - no struct/class
        - no op-overloading
        * it's cross-platform (I can run my applications on all Windows versions, all Linux distributions, on MacOS and on the BSDs if need to, while developing exclusively on Linux).
        * support for multiple

        • Very good summary.

          I would add that .NET has much better multiple language support as Scala and Jython are not mature as Lambda is going to be added in Java 8 officially. Iron Python is python for .NET and I believe more languages too have .NET support. That makes it sweet as anyone with a different language can share code as one executable with .NET. Some people were hoping gnome shell 3 would be .NET based a few years ago on Mono as it would help multiple language support and finally give C# apis so it is

        • > Tool support

          There's an awful lot of .net tools available. Whether they are better is subjective.

          > Free IDEs

          VS is effectively free. You only pay for the professional version which isn't needed by most people. There's also MonoDevelop though it's not at the same level.

          > More Open Source Libraries and community

          Well yes, but I could say "More libraries" and a larger community. Obviously .net is less popular with Open Source proponents.

          > simpler language that doesn't change with each version,

          I'

          • by devent ( 1627873 )

            > VS is effectively free. You only pay for the professional version which isn't needed by most people. There's also MonoDevelop though it's not at the same level.

            Yes most stuff from MS is "effectively free". But you are always a second class citizen if you use the free stuff. With Java and Linux I have the first class software for free, the same software that Google, Amazon and FB is using.

            For me it's more psychology. If I use the crippled versions, I always feel that I'm missing something and always to

    • by Toonol ( 1057698 )
      I gather he drank the kool-aid when he went through the door. I'm halfway through the interview and its basically ".NET is better than Java"

      .Net was designed after Java, and with Java's mistakes in mind. Java has .Net beat on cross-platform functionality, but that's about it. Personally, C# just seems a cleaner language, and a has a MUCH cleaner API.
    • by GWBasic ( 900357 )

      I gather he drank the kool-aid when he went through the door. I'm halfway through the interview and its basically ".NET is better than Java"

      Java and Lamp's advantages have more to do with deployment simplicity then quality of language. C# is a better language, but there's so much more to a development platform then the language or even the VM. With PHP you can just open the script in any text editor and change it without having to recompile. Java has a much more robust open-source / Linux deployment scenario compared to Mono.

      Having used PHP, C#, and Java, I'll gladly state that even though C# / .Net is the best language and VM; Java and Lamp ar

      • I gather he drank the kool-aid when he went through the door. I'm halfway through the interview and its basically ".NET is better than Java"

        Java and Lamp's advantages have more to do with deployment simplicity then quality of language. C# is a better language, but there's so much more to a development platform then the language or even the VM. With PHP you can just open the script in any text editor and change it without having to recompile. Java has a much more robust open-source / Linux deployment scenario compared to Mono.

        Having used PHP, C#, and Java, I'll gladly state that even though C# / .Net is the best language and VM; Java and Lamp are often a better fit for what people are trying to make.

        Bingo. Finally someone who summarizes the Java/C# state of affairs rather well. I've been doing Java for so long (and tired of its verbosity) that I'm just enamored with C#'s way of doing things. It is simply a better language. But as you said, language itself is not the only factor to take into account when creating and deploying solutions.

        I cannot say that Java and LAMP-based solutions are often a better fit for what people are trying to make (since I've seen truly large scale MS-based solutions that w

    • by Xest ( 935314 )

      Why does that require drinking the kool-aid? It's actually the truth nowadays.

      Java has stagnated in recent years, not least because of the Oracle takeover of Sun. .NET has kept moving at a better pace, and because of that it has left Java behind in a few areas. It also had the advantage of being built after Java such that it could avoid some of Java's shortcomings in C# - operator overloading, cleaner method of integrating unmanaged code etc.

      In the early days Java was certainly still better anyway, but now?

  • by Anonymous Coward on Wednesday September 14, 2011 @03:04PM (#37402770)

    ( Oracle )
    nealgafter
    ( J a v a )

  • Pedantry, but there was no Java SE 4. Confusingly it is Java2, version 1.4. Then they went to Java 5, 6, 7, but kept the internal version number as 1.5, 1.6, 1.7, and it's still "Java 2 platform, standard edition".

    • Pedantry, but there was no Java SE 4. Confusingly it is Java2, version 1.4. Then they went to Java 5, 6, 7, but kept the internal version number as 1.5, 1.6, 1.7, and it's still "Java 2 platform, standard edition".

      Yeah, but with respect, while Slashdotters may be pedantic on occasion (and gratuitously so), you can normally argue that there *might* be a point.

      Whereas Java's stupidly inconsistent naming and numbering scheme over the years reflects nothing more than a succession of pointless changes made by stuffed shirts in marketing to justify their jobs, cosmetic changes for changes sake that did nothing but confuse things. (*) Actually worrying about the "correct" nomenclature when everyone knows what is meant see

      • by leenks ( 906881 )

        Oh sure, I couldn't care either - other than the version number has been ridiculously inflated to meaningless proportions! :-)

        • I respectfully disagree. I care.

          I've had several nasty experiences with Java, and while I am onboard with the concept and will support java initiatives in the enterprise.. the stunts they have pulled over the years does not help. Not at all.

          And yes, if you are 'in the know' then you are FINE. If you are not, or are not technical.. it's really confusing and does not help when presenting technology options to a bunch of PHBs.

          So, I'd mod leenks up .. this is a good point to discuss and is very relevant. Consid

  • As a Microsoft employee I'm sure he'll give a fair and balanced review with no influence in comparing them. You know, like the Microsoft "Get The Facts" comparison between Windows and Linux.

  • The Ruby/Scala/Python/Erlang/Hipster crowd wants closures, and they're the most important thing in the world. Oh and operator overloading. Oh and no checked exceptions. See other languages don't have those things. And we want all languages to be the same. So Java needs those things.


    All this engineering mubmo jumbo about segemented stacks is for weenies. Languages Features are the most important part of a language, how it runs isn't important anymore.
    • by gafter ( 197274 ) *

      All this engineering mubmo jumbo about segemented stacks is for weenies. Languages Features are the most important part of a language, how it runs isn't important anymore.

      Yeah, and all this talk about automated memory management (garbage collection) and array bounds checking is for weenies too.

      Seriously, safety from stack overflow is a language feature, just like reliable tail recursion.

  • Yeah i am still waiting for that. And after scouring through message boards, old blog posts/interviews from java designers of old and looking at other people wanting to do the same thing, the reason that java still does not allow or never intended you to overload operators? Simply because they say so and that's that. That's not a very good way to handle things in my opinion. Is the '+', '-', '*', '/' etc good enough for most people? Sure. Obviously if you just search 'java overload operators' you will clear
    • by Anonymous Coward

      Sure there is. It's called Scala.

    • Java was designed to be cleaner than C++ and easier to develop and read. Operator overloading can be abused just like pointers and casting. What Sun did was write down a list of things bad in C++ and make sure they were gone in Java.

      You can use pointers and casting in Java, but you need to use the api to do it for you.

      • by Desler ( 1608317 )

        How is operator overloading any worse than creating a member function that does something contrary to what the name says? Eliminating something entirely because someone could do something wrong is idiotic.

        • Next time you'll want custom operator precedence.

          • Haskell doesn't seem to have problems.
            • If the fact that the nobody is using it isn't a problem ...

      • What Sun did was write down a list of things bad in C++ and make sure they were gone in Java.

        I feel operator overloading is one of those features that is mis-categorized as being fundamentally bad when in fact it was only temporarily bad. I suspect that a lot of people got giddy when the feature was popularized by C++ and wrote a lot of bad code as a result, but with time and maturity people have learned how to handle this feature sensibly. My evidence? C# supports operator overloading and I've never seen

    • by Desler ( 1608317 )

      Java has operator overloading it's just taken away from the programmers. String concatenation with + is done through oppressor overloading. Unfortunately the java designers think no one else should be able to do so to stop them from doing.bad things. But then again these are the same people who develop the jvm which is doing its best to pass flash as being the most exploitable piece of software running on your system so maybe they aren't the best to be.lecturing others on bad practices.

    • Operators imply commutivity (a+b = b+a). You can't guarantee that if the function is implemented by a or b. It's a bad idea that leads to subtle errors down the road.
      • by AuMatar ( 183847 )

        No, the + operator implies commutivity. Not all do. Division doesn't. >, >, don't. I agree that you shouldn't use + for string concatenation because it isn't commutitive, but there's no reason other operators can't be overlaoded, or that + couldn't be when the result is commutitive.

        • You're right, strictly speaking, but what I was referring to was commutivity of the algorithm, not necessarily the result. You want to know that whatever decides (a gt b) is also going to decide whether (b gt a).
      • by Desler ( 1608317 )

        So that's why it was bad for the Java developers to overload the + operator for string concatenation, right?

        • Yes. At least for me with Cpp, using + for string concatenation leads to more headaches than it's worth. I prefer to use boost::format.
    • by Bob9113 ( 14996 )

      the reason that java still does not allow or never intended you to overload operators? Simply because they say so and that's that.

      The reason Java does not allow operator overloading is to make it harder for rookies to shoot themselves or others in the foot. Same as Java's typing; duck-typing is more powerful, but more subject to pebkac errors.

      • but there are a lot of things besides operator overloading that can shoot you in the foot. Do we scale down the language to the point of developers not having to debug their errors or perhaps no mechanism for a program to even crash? If you are a rookie there is no way to put a value as a noob to a language making mistakes, debugging your code, stepping through it, finding the errors and learning from your wicked ways.
        • by Bob9113 ( 14996 )

          Do we scale down the language to the point of developers not having to debug their errors or perhaps no mechanism for a program to even crash?

          Not in all cases. There is a time and place for a language like that. Squeak comes to mind; an outstanding environment in which to start kids off with programming. But I don't think most production languages should be like that.

          I think production languages should run the spectrum from Squeak to pure Lisp (or whatever is on the "OMFG that's peculiar and powerful" end o

      • to make it harder for rookies to shoot themselves or others in the foot.

        It's amazing how few geeks understand why this makes Java so successful. So many languages are written for the right tail of the programmer-quality bell curve, while Java aims for the large area in the middle. That, and it works reliably - one time I ported a network analyzer to Linux using JNI and the damn thing just worked.

    • Compare to Smalltalk - once you decide that everything is an object, you pretty much have to either support operator overloading, or not support operators at all.

      Java on the other hand has both primitive and object types, each with a distinct set of operators. That is, aside from the awkward case of '+' for string concatenation, and the effects of auto-[un]boxing, and maybe some other bits and bobs I've forgotten about.

      But note that the operators provided for primitives are all 'numbers'-related, since the

  • I lost ALL interest in developing in the java platform (certainly a painful decision as it was my weapon of choice), I truly belive Oracle will be harmful to java, they will twist everything that's good about the platform for the sake of near-sighted business. They are the new AOL (remember winamp?), they will kill every piece of code in the sun ecosystem that depends on the community to survive. They just dont get it.
    • And even if 5% of the non-paying Java users out there decide to convert to some future paid-java enterprise license version, Oracle ends up winning :(

    • by Anonymous Coward
      and whats the other choice? .net?

      Please, you are just spreading FUD and garbage just to stir crap up, so shut the F up. The only way Oracle can be harmful is to simply not update Java. It's GPL'd, so Oracle can't close it off. Please educate yourself.
      • by Desler ( 1608317 )

        C, c++, ruby, python, scheme, d and the list could go on and on. Last time I checked those all still existed and weren't magically disappeared.

      • Re: (Score:2, Insightful)

        by snemarch ( 1086057 )
        It might be GPL'd, but what about involved patents? Considering how Oracle is playing, I'm mentioning the P word isn't entirely FUD :(
        • It might be GPL'd, but what about involved patents? Considering how Oracle is playing, I'm mentioning the P word isn't entirely FUD :(

          What about the patents Linux
          What about the patents Windows
          What about the patents OS X
          What about the patents .NET
          What about the patents Java
          What about the patents etc.

          Is this the new "think of the children"? Patents are everywhere. Oracle is well defended, so are the others. Take your pick and move on.

          • Oh, I'm not afraid of Java being targeted by others - I'm afraid of what stupid moves Oracle might pull in their typical short-sighted near-future-revenue kind of way. IMHO suing Google over android/dalvik isn't exactly helping java.

            My post above is missing a "afraid" between "I'm" and "mentioning", btw.

    • You know it is frustrating because if Java looses so does Linux and Windows wins and becomes more entrenched. Php is the only choice left and web servers are the only servers left running Unix as Windows is eating up everything else in site.

      I like to daydream what an alternative universe is like if the DOJ got their way and split MS into 3 companies 12 years ago. C# and .NET are really great and if they existed on Linux the world would be a better place. If they were split my guess is today we would have la

      • by Desler ( 1608317 )

        I hear there's this new thing called mono that brings c# and .net to linux.

        • I hear there's this new thing called mono that brings c# and .net to linux.

          You really only just "heard" that of this "new" Mono, or you were just being so wittily sarcastic and implying that it's a good solution?

          It's a great solution!... If you don't mind it being condemned to being perpetually behind the curve, that is, catching up to Microsoft's current version and almost getting there (if they're lucky) around the point that MS release the next one, which they- of course- have a head start on.

          And if you don't mind all the bits that are- in the real world- needed for compati

        • by leenks ( 906881 )

          mono brings a partial (and buggy) implementation of .NET to linux, that no corporate IT department will let near their systems because it is practically impossible to get any meaningful support for, and is not endorsed by MS as a .NET implementation. Wake me up if that changes.

  • See subject.

  • The guy seriously thinks about some hanging-on-by-bleeding-fingernails edge case stuff.
    I just don't see it being relevant to any real world situation.
    From the part where he says "I work with compilers..." and, you know, just do int i = 1+1+1+1 a few thousand times... and it will blow the stack. Help me understand why anybody cares if that doesn't compile?

    Here's the quote (emphasis added):

    I work with compilers and it's easy to crash the Java compiler just by writing, you know, int i = 1+1+1+1 and just do that a few thousand times. And the semantic analyzer will be trying to analyze that, or the parser will be trying to parse it and it will just blow the stack.
    And what happens is, the process crashes.
    You know, there's no good recovery from that. And you can fix it by [saying], "Well, we start over again but I'll just allocate more stack". The problem is, you can't necessarily know ahead of time how much stack to allocate to any given thread.

    • People don't write that kind of stuff, it's still an issue from a VM design standpoint because in some cases code geneneration tools might. This can be frustrating and/or introduce extremely difficult-to-trace runtime bugs into your system if, for example, your framework du jour does runtime code generation/modification deep under the hood in order to implement AOP or a scripting language or something.
  • Segmented stacks is an implementation issue. Java on z/OS has had segmented stacks from the very beginning because it runs on LE (the z/OS Unix layer) and that's what LE does. You still have a problem with thousands of threads though because you have to choose an initial stack segment size. Too big and you still consume loads of memory, too small and there is an overhead associated with crossing the segment boundary (e.g. page fault).
  • I read this as. .
    "Submission: Neal Gafter on Java"

    That sounds about right.

Maybe you can't buy happiness, but these days you can certainly charge it.

Working...