- No operator overloading. As a result, every container type is accessed differently. Arrays use . Lists use At(). Hashmaps use Get(). Matrices, vectors, and complex numbers are absurdly verbose, because I cannot overload addition and multiplication.
I honestly don't miss that. Probably because I've seen it misused/abused too many times. And, quite frankly, the "lasagna code" aspect of OOP (this class is built from that class which is built from that class; which one actually implements that method?) is bad enough without operator overloading.
- Lack of first class functions. As a result, callbacks required the absurdity of implementing the Callable interface. This has been improved recently with the addition of lambda statements.
That used to be my favorite gripe. Then I discovered abstract classes, where some of the methods are actual code and some of them are, to borrow C++ parlance, virtual. I quickly discovered that I could implement an instance of an abstract class, plug in a method definition inline (not quite the same, but similar enough) and get on with life.
- Lack of properties. As a result, I cannot expose anything as public, because I might want to add additional code at some point in the future. Therefore, I must have an explosion of getters/setters.
You can make properties public. It's considered bad practice, but you can do it. And, instead of creating 101 boilerplate getters/setters, add Lombok. Makes it a little closer to CLOS, where the system can auto-create getters/setters, so long as they're the typical, boring ones you expect.
I find it horribly limiting. But I'm finding tips and tricks along the way which make it slightly more bearable. In the meantime, it's been putting a roof over my head, clothes on my back and food on my table for most of a decade. Java is a "paycheck language" (something people learn SOLELY because it can provide a paycheck, not because they like it or find it exciting; see COBOL and RPG decades ago). So long as you recognize that, it can be tolerable, if never exciting.
I'm not asking for gpu updates or new apps. I am asking that the google apps (gps, gmail, etc) WORK. they all crash and are not reliable on my N1. if I start out on a road trip, I have to be sure to reboot my phone so that gps won't crash. every day, several times a day, the touch screen locks up and buzzes at you (a day1 problem for n1 users which google has never even tried to fix).
the hardware is fine! it all still works. but its insecure as hell, apps don't often run right and I had to use another mail client to read my gmail mail (if that's not a slap in the face to google, I'm not sure what is. yes, gmail app on a google phone does not work and won't work from now on since its not supported anymore; nothing is 'supported' anymore on my phone).
why do I keep this phone? well, I now know google's story and this will be repeated again and again and again. if I buy something android it will fail in a year or two and I'll be abandoned again in short order after that. I'm already tired of the whack-a-mole mentality google has on their 'products'. they simply don't care. quality at google is a sorry joke. not sure when it all went to hell, but it surely has.
I have to second this.
I had a Droid Incredible 2 which gave me > 3 years of wonderful service. It was, originally, shipped with Froyo but OTA updated to Gingerbread. It had a beautiful screen. Good audio. Small enough that I could hold and operate it in one hand (can't do that with my new LG G3) but large enough that I could read a LOT of stuff on it. RSS news feeds. Web sites. Entire books on Safari To Go.
But it was never updated beyond Gingerbread. Some of the apps were updated, but not all. In the end, many websites caused the built-in browser to crash. I got to the point that I had to use a tablet or laptop to look at news from certain sites (*cough*Inhabitat*cough*). Then Google Drive was broken into Google Sheets and Google Docs. And Google Sheets would no longer allow me to update from my phone. I have my grocery list on Google Sheets, such that all of the people for whom I shop can update the list whenever and from wherever and I can do all the buying. I had to export the silly thing to a PDF to view it on my phone. I couldn't delete things from the list as I went, indicating to my family what I'd purchased.
If the apps, such as the web browser and Google Sheets, still worked properly I'd likely STILL be using that device.
Agreed, I don't NEED all the new shiny. Just keep the existing apps WORKING, reliably.
The Java system that emerged to meet these needs is simple, so it can be easily programmed by most developers; familiar, so that current developers can easily learn Java; object oriented, to take advantage of modern software development methodologies and to fit into distributed client-server applications; multithreaded, for high performance in applications that need to perform multiple concurrent activities, such as multimedia; and interpreted, for maximum portability and dynamic capabilities.
When James Gosling was determining what language to use for his VM, he originally looked at C++. But he found that most programmers had a hard time with the non-C parts of C++. So he pointedly created something which avoided those advanced parts. Originally called Oak, we call it Java today.
In short, he created a dumbed-down language which was usable by "most" programmers. He wasn't shooting for the top of the bell curve; he wanted "most" of it. Java is a stretch for truly clueless programmers (I'm acquainted with some people who "just couldn't get Java") and annoying as hell to the truly great programmers.
So I don't know where we keep getting this myth that programmers either stink or rock. Most of the Fortune 500 is actively looking for Java devs. Most of them won't put up with people like Linus Torvalds (a self-described "opinionated git") but you need to be able to wrap your head around the basics of functional decomposition and object-oriented analysis and design. So, you need to be at least mediocre. Java has become the COBOL of the modern era. And you certainly didn't have to be a rock star to write COBOL.
"Because the transformers which convert distributed power (typically lower frequency and higher voltage) to the household power (60 Hz / 240 VAC split-phase) are made to work efficiently, one-way. Going the other way, they are considerably less efficient."
Everything on a power grid operates at exactly the same frequency. DC interconnects and other exotic technology aside, it is one gigantic synchronous machine. If load increases faster than supply the frequency of the entire gird slows down a tiny amount, as supply increase and load drops, the frequency goes up a tiny amount. Supply is continuously adjusted to keep the frequency stable. It is like a train. Locomotives tend to speed it up, wagons tend to slow it down, but it is all going at the same speed.
The POWER required has to match, input to output. On that count, I will agree with you. In that regard, it's synchronous. And if I want to grid-tie an inverter, the inverter must be able to match voltage, frequency and phase to what is being supplied to the house. And yes, when you change the load applied to an AC generator, the frequency will vary slightly, but they have feedback mechanisms on those to keep frequency within a very narrow range. But the electricity reaching my home is coming from multiple power plants; if this one varied frequency significantly, it would throw it out-of-sync with that one, hence the feedback and regulation of same.
May I direct your attention to this article? I know for a fact that the rural electrical coop, to which I'm attached, is sending out well over 1 kV to the transformer outside my house. The transformer is converting it to 240VAC 60 Hz split-phase, and it's compensating for the fact that the 2, 120 VAC channels in my home are not perfectly balanced. So the transformer is fairly sophisticated, in that regard. But sending 240 VAC split-phase long distance is going to require some VERY thick lines to avoid resistance losses. They avoid this by transmitting very high voltages (some places, over 1 megaVolt) and keeping the current down. That minimizes transmission losses. The distances involved STILL get some significant losses, but they'd be FAR worse if they were transmitting 240 VAC, long-distance.
It's about GBP30-40 for a 100Ah 12V car lead-acid battery on a random site. These are mass-produced, cheap and easily available. Granted that they are heavy and large, but... scaling up... that's 1.2KWh alone. We'd only need ten car batteries to match it. That's GBP300-400.
Why, then does it cost the equivalent of nearly $3,500 (GBP2200) for the same here?
Sure, we allow leeway for different voltages (necessary for high-current loads, etc.), different technologies, deep-cycle, etc. but... that's a five-to-seven-fold increase over what we're using now for quite basic solar, wind, etc. power storage and can be obtained from any garage. And 10 car batteries aren't prohibitively large, expensive, difficult to handle, etc.
With 10 year warranty and 2KW peaks? That's way within range of such a pack. Hell, stick a decent split charger / inverter on the end, one designed for home use, and it still comes nowhere near the price of this home battery.
Is my maths wrong? Have I missed something? Quite what are we trying to sell here apart from an overpriced battery and some electronics on either end of it?
It's one thing to sell a battery. Musk is selling the complete package:
The lithium batteries he's using aren't exactly cheap; you're quite right that lead-acid batteries are cheaper. But the electronics needed to interface the batteries to the home add considerably to the price. And a good charge controller, with lithium batteries, will get a lot more charge/discharge cycles, meaning it will last a lot longer than lead-acid batteries.
IIUC, he's going for a system which will work, reliably, mostly invisibly, for over a decade. That takes some engineering. To make a battery last longer, you typically only discharge it part of the way. Let's say you go for 80% Depth of Discharge. That means you need 1.25 x as much battery capacity but you will get a lot more charge/discharge cycles out of it than 100% (that will kill a lithium battery, typically in < 100 cycles). Going to 66% DoD will require 1.5 x as many batteries but give you considerably more charge/discharge cycles. No word on what DoD level he's charging/discharging the batteries.
I have a Camry Hybrid. It has NIMH batteries. The system does about 25% DoD, meaning that the batteries really don't store much. But they last and last and last.
I don't necessarily think of it as being beyond your abilities as much as outside of the scope of your abilities; is managing inherently more difficult than developing? For some people sure, but I think perhaps looking at the career ladder hierarchically is part of what leads us into this. My boss is not a great coder (he started out coding) but he is a great negotiator, salesman and organizer. It takes all sorts, right?
I don't know that it's inherently more difficult. It IS, however, a very DIFFERENT skillset. And just because I'm good at communicating with a computer (programming) doesn't mean I'm good at communicating with management. Indeed, if the Programmers' Stone is to be believed, programmers and managers are very different in how they comprehend stuff, not to mention how they communicate.
The truly gifted can speak both languages. Most of us speak only one. And we don't even realize there IS another way to comprehend/communicate. If/when we do, though, it result can be wonderful.
IMHO, the things every programmer-promoted-to-management needs to know are found in that link and in The Mythical Man-Month. I, routinely, run into situations where management still hasn't learned the lessons from that book. And life for me, as a programmer with ZERO interest in going into management, would be so much better if they would learn from that tome.
at considerable expense. And that latter part, well, you KNOW they're not going to let their executives and/or shareholders eat that cost. And many utilities are regulated, such that they have to get approvals for rate increases. Which aren't easy to get. So there's technical reasons AND financial reasons for the utilities to grip.
Put a battery pack on your home, like one of these. Get an inverter which feeds excess to the battery and NEVER exports to the grid. The power company loses their only technical reason to gripe, because you are no longer doing Net Metering. At that point, it's all about the Benjamins.
Indeed, if you get to the point where your home is truly Net Zero, long-term, you can go completely off-grid. At which point they no longer have a say in the matter.
Nobody said computers were going to be polite.