My client in Cincinnati is having issues with one of their Java based web applications. The application is throwing an out of memory error. One of the vendor's application development personnel traced it back to a local byte array object. He said "it can’t be the problem because it is created in a method. I don't have to null the object because it is garbage collected". In Java, you are taught that any variables created in a method call persist only for the life of that method call. When the method has completed, all objects are out of scope, so they are to be garbage collected. Java uses implicit object creation and destruction, so the application developer can focus on the problem. Like any rule though, there are exceptions. If your local variable is referencing an external object, and that reference is still live, your local object still persists in memory. Since the method has been garbage collected, the object will stay in memory and not be freed until you restart the server. The best example of this is creating a database connection object. If you don’t call the close method and null it, the object will persist until the JVM is shut down. This called a stale connection. Even though you may have created the connection in a method, the object doesn’t get collected. Look at the following code:
package test;
public class MemTest
{
private final int dataSize = (int) (Runtime.getRuntime().maxMemory() * 0.9);
public byte[] func()
{
byte[] data = new byte[dataSize];
System.out.println("func: byte array created in func");
System.out.println("func: Total Mem=" + Runtime.getRuntime().totalMemory()
+ " Free Mem=" + Runtime.getRuntime().freeMemory());
return data;
}
public static void test()
{
MemTest jmp = new MemTest();
System.out.println("Max Mem=" + Runtime.getRuntime().maxMemory()
+ " dataSize=" + jmp.dataSize);
System.out.println("Total Mem=" + Runtime.getRuntime().totalMemory()
+ " Free Mem=" + Runtime.getRuntime().freeMemory());
byte[] data1 = jmp.func();
System.out.println("byte array returned in jmp.func, size=" + data1.length);
System.out.println("Total Mem=" + Runtime.getRuntime().totalMemory()
+ " Free Mem=" + Runtime.getRuntime().freeMemory());
jmp = null; // this does not do anything as data1 still has a reference to the byte[] returned from jump.func()
// data1 = null; // if data1 is not set to null here to remove to the reference to the byte[], data2=jump2.func() will hit OutOfMemory exception
MemTest jmp2 = new MemTest();
byte[] data2 = jmp2.func();
System.out.println("byte array returned in jmp2.func, size=" + data2.length);
System.out.println("Total Mem=" + Runtime.getRuntime().totalMemory()
+ " Free Mem=" + Runtime.getRuntime().freeMemory());
}
public static void main(String[] args)
{
System.out.println("--test1--");
test();
System.out.println("--test2--");
test();
System.out.println("--test3--");
test();
System.out.println("--test4--");
test();
}
}
If you run this code, it will throw an out of memory exception. Uncomment the data1= null statement and run again. This application is the 1.4 JDK, and the newer JDKs are doing a better job at handling this situation. I also know that there are 2 things to remember in application development, don’t assume anything, and rules were meant to broken. I still have some testing to do, but I am sure my Cincinnati client will be happy.
I presented at this year’s JavaOne, and I recently got my results. I presented last year too, and I received my first JavaOne rock star award. Many of my Cincinnati application development colleagues wanted to know if I did it again, and the answer is technically no, but still a good show. JavaOne rock stars are awarded for technical presentations. My presentation was considered a panel discussion, so not eligible for awards. Our panel received a score of 4.68 out of 5.00 by our peers. I personally recieved a nice note for JFrets. Over 90% found our talk useful. The top 25% of talks began at 4.20, so clearly our presenters would have had the rock star status.
I am working on a new project called History Slider, that if in a demo state, I will give a talk on next year. So you may see the JavaOne rock star status by my name once again.
This is the last of a three part series; part one is here and part two is here. Many application development guys are wondering, what is the Cloud, and what is the Sun Cloud? Think of Cloud computing as a virtualized data center. In part one I talked about VirtualBox, which allows you to virtualize network components and resources. Think of VirtualBox working on the atomic level, taking small resources to create a virtualized network. Now Cloud computing takes all of the virtualized networks and utilizes them as resources in a virtualized data center. The Sun Cloud is a set of APIs to let you manage networks and storage areas as resources. You can cluster or categorize networks in any way you wish. You can manage user access to the resources, not unlike application development teams utilize in web applications.
What does all this mean to application development and management? It means that you can create a single network and copy or clone it. For example, you can create a single network instance with servers, storage areas databases, and clone the entire network for each region you manage. That means all networks are managed in one spot, and all regions are setup exactly the same. No application compatibility issues. You can, of course, add or remove components, but they are all have the same infrastructure. You can upgrade the virtual network, and pass the changes to the other regions. The electricity saved by running virtualized datacenters would be significant. You can connect to your partners’ virtualized networks to access their data. For application development teams, that would change how we design applications if we have access to external data and applications.
This was my fifth JavaOne conference. Since it is always at the Moscone center, I know pretty much every nook and cranny of JavaOne. Although smaller this year, I thought this was the best one yet. The people there were truly happy to be there, and combined with takeover news and a bad global economy, a bigger sense of cooperation. I would highly recommend coming to one if they still have one. Nobody, not even James Gosling (I was in a group of 20 who had a 45 minute meeting with him) knows if there will be one next year. The reason you come to JavaOne is not the presentations (they are great!), but the people. Meeting and befriending people who created your favorite blog, book, or technology is the reason to come. I remember meeting Craig McClanahan (co-creator of struts) in 2004, and saying "that’s Craig freaking McClanahan!" Last year, I was honored a share a picture of beer with him, Jarda Tulach (inventor of NetBeans), and Geertjan Wielenga (JavaLobby blogger extraordinaire). Application development people get to "network" with the best and brightest architects, technical press, and business owners. This year I got hang with the JUG leaders, NetBeans Dream Teamers, and the JavaFX guys. I wrote, and helped edit a YouTube video "pushing Java", and met more of my fellow Java music software developers. I literally have friends from all over the world (yes Cincinnati too), and I am considered an honorary Brazilian because of JavaOne. Larry Ellison, if you are reading this, please don’t stop JavaOne!
Part one discussed Open Solaris. Part Two is all about what is new with JavaFx and the Java Store.
I have talked about, and been impressed with JavaFX since its debut at JavaOne 2007. It was a key part of my presentation to Cincinnati area application development members that year. For those application development people who don’t know what JavaFx is, I blogged about it here. So what’s new really with it? The JavaFx in 2007 was JavaFX script. JavaFX was limited in where you could run the script. In January, JavaFX released its first runtime, and now JavaFX 1.2 is out. You can have graphic designers create media for your application using JavaFX production and easily import them into JavaFx. The JavaFx language can now be run on the desktop, web page or mobile device. JavaFx has been integrated with the new version of web start, but more on that later. New widgets have been created, and third-party widgets are being created at JavaFx widgets. There still are issues, though. Some swing like widgets like menus and tables have not been completely done. You can create a wrapper around Swing components, but it’s not the same as a native widget. Integration with NetBeans 6.7 isn’t there because of the new designer isn’t ready, but an update is scheduled at the end of July The reason I think application development teams should use JavaFX, is that the same code can run in multiple areas. I can now create a desktop application and have it run on the web and mobile devices without having to rewrite my code.
The JavaFX designer will help in a wider adoption rate of JavaFX for the things it can do. A big part of JavaFx is making animation simple to create. With the timer piece of designer, it’s a breeze. In the demo here, (starts 10:25 in) you can take an image, give it a starting point, and pick intermediate points and the times and the designer creates all of timings for you. You can bind media and widgets to data or events. For example you can drop a video and some buttons on the scene. You then drag a link from a button to the media, and all available actions popup (play, pause, etc.). Select the action in the popup and it’s done. Application development guys can create a media player in minutes. You can open different windows with different screen sizes, and all of the children inherit their changes from the parent. You can edit each screen though, and those changes are kept for that window.
What is the Java Store, and why do I need it? The Java store is a warehouse for free, and for fee Java applications. Right now, everything is for free while the community decides the best way to charge (or not) for applications. If you need an application quickly, you can check the store without having to do extensive searching, or worse, recreating the wheel. The cool thing about the store is its use of the new Web Start technology. Users can preview the application before keeping the application. If you decide to keep the application, just drag it to your desktop. It’s just that easy.
This is my third year at trying to boil down 4 days of experiences into an abbreviated post or presentation for application development teams and management of the Cincinnati and Dayton areas.
As mentioned previously, the major topics were Cloud computing and JavaFX, but a new item that I am impressed with is Open Solaris. Version 2009.06 was released at CommunityOne. I am not a Sun representative and I have not been a Solaris user, but there are some great features that I think are cool. Before I get into the new features, let me give you some background. Solaris was Sun's proprietary OS that has a reputation as a fast, enterprise operating system, using ZFS as their file system. Sun open sourced Solaris a couple of years ago. Application development teams who use Solaris will tell you about the worthiness of DTrace, a system debugging tool. It is the one thing that Linux engineers really want to integrate.
There is not a lot of Solaris usage in Cincinnati, and I don’t have a dedicated box for Solaris, so I never used it, but that may change. Like Linux, you can get a "live" version on a disc to try out. I am currently playing with VirtualBox, a open source virtualizer. Unlike VMware, both the player and recorder are free. To tell you how cool it is, I was running an Ubuntu VM on a live Solaris session with Windows as the host OS!
The other reason for my excitement is project Crossbow. Project Crossbow is a networking virtualization project aimed for usage in the cloud. Before my application development friends tune out due to buzzword overkill, let me explain. Project Crossbow can virtualize your entire network including your NICs and switches. The really cool part is that they have a cool GUI that allows you to drag and drop your network pieces. You need a firewall? Drop it into your network. It’s already configured and ready to use. Need another server? Just drop it in and connect it to your network. Since the network is virtualized, you can create your own network from virtualized pieces from any VM. That’s where the cloud comes in. Virtual networks and hardware can be added or removed at any time, if they were not virtualized by you. You could connect to your partner’s network, and if anything changes on their end, the changes would be reflected in their VM. I would strongly urge application development people who dislike/don't understand networking to use project Crossbow, and for free virtualization, use VirtualBox.
The Cincinnati market is known for being conservative when it comes to using software. Most application development people I know would say that big software, from the big firms, either three lettered companies, or their name ending in “soft”, are the only code found in shops. There is the occasional open source item here and there, but usually in smaller shops. Why is that? Well, some firms don’t create their custom application development, they just enhance out of the box software. They need a vendor to yell at and fix things when it breaks, because their staff can’t fix the code, or don’t have access to it. For many firms, it is better to pay a vendor for support than to maintain it themselves. As long as you can point to somebody, it’s ok. Some firms actively fear that open source means that everyone will have their intellectual property somehow. They fail to realize that it is the same proprietary code that everyone uses too. Since, you have the source code, you can see if there is a backdoor coded in the application, something you can’t do with proprietary code.
With these fears aside, many firms, even in Cincinnati, are looking to use open source solutions for their issues. Certainly many are using the free (as in beer) code to save costs. I hope though that some firms will see how this free (as in liberty) also helps their business. It’s a tough call whether to purchase a pre-made business process package (I am looking at you SAP), or to roll your own. I think the best of both worlds would be to use an open source application, and to enhance it. It is a popular misconception that you MUST contribute code, or that you can’t change the code. You can create your own code for use; you can’t sell the application with YOUR enhancements as YOUR NEW application. There is some legal wrangling, yes, but the bottom line is that you have application development teams, so use them. Your best business plan is to use your process as a competitive advantage, not to shoehorn your process into software that all of your competitors use. I think the goal is to beat them, not join them.
The best thing to do is to give your application development team a couple of old boxes to play with, and let them do some research on applications that can save your money, and are flexible enough to work with your processes. You may end up with an inexpensive system, and get that application that outperforms your competitors.
Coming back to Cincinnati is the hardest part of JavaOne. On a physical level, my body just got acclimated to west coast time, and now I am subjecting it back to east coast time. It’s more than just sleep, its food too. Instead of eating breakfast at 8:00 am, I am having it at 11:00 am. It takes me until Wednesday until I feel like I am in the right time zone. On an application development level, it’s a mixed bag. I have the emails and duties that I left for a week, and now I need to complete 2 weeks worth of work in one week. I also forgot that I was presenting a JavaScript lunch and learn. On the plus side, I do feel motivated to work on my JFrets project, and continue on my new project called history slider. It’s amazing how a TODO list goes from avoidable task to an application development imperative after meeting with your peers. I have some new contacts and great ideas for new enhancements after presenting again. Last week seemed like both 2 days and 2 months, and sleeping as often as I could, I think I am back to normal.
I was hoping to post more last week on JavaOne, but it was a busy week. First, let me get my application development friends up speed. The general theme at this year's conference was Clouds and JavaFX. There were many talks on what Clouds were, how to deploy them, and the new tools available to utilize them. Sun is promoting their Cloud, but there were plenty of talks on Amazon's EC2. JavaFX was also a big player this year. There were talks on creating and utilizing JavaFX, but the most of the focus was on the upcoming tools, importing of graphics, and deployment of JavaFX. Tor Norbye is working on an excellent visual tool for JavaFX that should ship by the end of this year. Think of dragging and dropping widgets and just wiring them up. If any application development team members are interested, materials will be posted on Java's Software Developers Network (SDN) site.
Personally, it was probably my favorite J1. I meet a lot of new people from the Java User Group (JUG) and JUG-USA, the JavaFX team, and members of the NetBeans Dream Team. Sven Raimers, a Dream Team member, and his team won a Duke's choice award for his work on satellite tracking and data collection. I was fortunate enough to be in a small group of application development team members to meet and have a Q&A with James Gosling. I wrote the text for a Java video called "Pushing Java". It is up on Youtube, so check it out. I did present this year as part of the "Making Music With The java Programming Language". I also had a "Java Rockstar" interview here. I met many great people, and made some new friendships.
Today's keynote was similar to last years speech. Most application development people have already heard of JavaFX. JavaFX now runs on Blu-Ray, BlackBerry, aNd now your TV! LG has a Java enabled TV. The big news was the announcement of the Java App store Beta. Right now everything is free. Sun wants community feedback of the for pay portion of the store. As far as I know, it's any type of Java application. check out
here for details. Larry Ellison came upto publicly speak about Java. Larry said that he wasn't going to change anything. As any JavaOne attendee will know, James Gosling shoots custom T-Shirts into the crowd. I was fortunate to get one. Stay tuned for more Rocker coverage of J1!
I am now in San Francisco at the CommunityOne event. The focus this year is on Open Solaris and Cloud computing. The question I always have about Cloud is what is it really? Well from what I have seen and the people who know it tell me that it’s a kind of enterprise MVC design pattern, with cool tools. Think about creating your own virtual network. If you want a firewall, you drag a firewall to your network design. It works right there, or you can configure it to your needs if need be. You can virtually set up your Dev, test, and prod areas, and swap out your back end data store, or change parts of your system. You can backup your data to the cloud and access it anywhere. You can also pay for what you use in your data center.
As a JavaOne alum, today is very much about catching up with old friends. I am setting up lunches, dinners, and “networking” events. It is tough to go to the Thirsty Bear, but that’s what I do!
I will be giving daily updates as I can, so stay tuned!
Microsoft has announced that support for Office 2000 ends on July 14th, with Office Update closing on August 1st. In case management and application development members think "well that’s an old version, nobody hacking it anymore", 15 bugs were fixed this year, 12 critical. If you are thinking of upgrading, Office 2007 uses a new format. I would suggest using Open Office unless you using a lot of macros in your Office. Open Office can read your Word documents, but uses an open, readable format. My kids use Open Office for their school work, even though the school requires Word. The best part is that Open Office is free. Try it out in a test environment, and let some of your users try it out for a while. People are change adverse, but there can be valid concerns. Document the issues and create a transition document if you decide to use it in your business.
To all my application development friends, I am going to JavaOne 2009 as a Java Music panelist, thanks to my friend Dave Koelle (creator of http://www.jfugue.org/). Dave had to pull out of the panel, and suggested I take his place. The good news is that I am going and presenting, but I only have 2 weeks to revive my demo. I have last year's demo in my back pocket, but something new needs to be added. I do have left handed capability, but that's not enough. I have a mostly finished JavaFX version, so if I can finish it, that will be my goal. On the non-presenting side, I will be looking at cloud computing, more JavaFx, and Android stuff (I have a G1). Dave has challenged me for next year, so how about Java music apps on smart phones?
Drop me a line if you are going, and come see me Friday, Jun 5th!
Application development guys like to think that their code is always rock solid. The users aren’t reporting errors, so everything is fine… or is it? Profiling is the process of looking into the objects and their effects on an application. I have used several products at my current client to help identify trouble spots in their vendor’s application.
Heap analyzer
This is a free product from IBM that reads heap dump information, and shows the object tree, number of objects, and their memory usage. There are available analyzers for NetBeans and Eclipse too. This type of profiler is great for finding what objects are taking up the most memory, or finding multiple instances of a class where you would expect one.
SiteScope
Another profiling tool I would recommend to application development members is SiteScope by HP. SiteScope monitors the application while it is running and reports it findings on a predetermined time frame. The statistics are put into a graph for easy analysis. This tool reports on items like caching, response times, JVM usage (free and used), memory and CPU. It is configurable, and the graphs are readable. I use this tool to quantify our performance from build to build, to ensure a fix works.
PMAT
Another profiling tool I use is the Pattern Modeling and Analysis Tool (PMAT), a free tool from IBM. While running a Java application you can turn on a JVM switch called verbose GC. This switch logs all of the Garbage Collection statistics to an XML file. PMAT reads the file and presents the information in a graphical format. It will even make suggestions based on the information.
Whether you use these tools, or something similar, it is important for application development teams to profile their application for performance. A profiled application ensures that the application is running at its best, but also the application development member may learn something about application development too
The recent Swine Flu fears highlights what I think all application development team members already know, nearly all organizations are unprepared for any major disruption. Recently my boss blogged about this from a management perspective, but I think the technical side needs to be addressed.
First let me ask a question, how much work can you get done if your servers were down? Everyone, not just application development team members would answer "nothing". With that in mind, let me ask some other question about your preparedness. When was the last time you implement your disaster recovery plan? Where is the plan? When did you last review it? How many of your staff (not just application development) can work remotely. Can your system handle the increased remote traffic? It’s not just as easy as "send everyone home". If you have problems answering these questions, or you don’t have a plan in place, look for technical consultants to help. You may even have a great plan in place, but the recent economic downturn may have created big holes in your plan. Even if the Swine Flu doesn’t become a pandemic, the CDC reports that 36,000 people in the US die from the flu every year. It is also tornado season, a little review may be the difference between business survival and bankruptcy.
The news this week is Oracle buying Sun. As a Java application development guy, this is very important news. I recently wrote about my feelings for an IBM merger, so this pairing is interesting. Larry Ellison had big praise for Solaris and Java, but nothing on MySQL. This is my take on the big points and questions I have.
Solaris
It is apparent that Oracle wants an OS to be a full service enterprise application development provider. They want to compete against Microsoft and IBM. I don’t see Oracle doing anything to hurt Solaris. I think Oracle can do a better job than Sun in this regard, as long as they use Sun’s customer service model.
Java
Oracle is a big Java user. The question for me is will Oracle "IBMify" Java? Creating proprietary hooks where none is needed to make a profit is dead wrong. Java is the dominate language, but other languages were dominate in the past. If Oracle can resist the temptation and just be the caretaker, java application development will be dominant for some time. If not, Java is open source, which means a "free" Java will be around, but multiple, incompatible versions of Java will kill it. I see Scala as a viable successor to Java, so I think the fragmentation issue will disrupt application development, but not move everything to .Net.
NetBeans
The fate of my favorite IDE is in much better hands with Oracle than IBM. NetBeans is a big part of Sun’s offerings, so I don’t think there is an issue.
MySQL
Many people lament that Oracle has MySQL finally. There is some well founded concern, but I see Oracle using MySQL as an entry into smaller markets. If you can brand MYSQL as Oracle’s "lite" database, then small businesses can use MySQL, and then seamlessly move to Oracle when the business grows.
Questions
What about JavaFX? This is the first step to the great convergence of write one set of code to run on mobile desktop and web. How much autonomy will Sun staff have? What about Glassfish? Only time will tell.
If you are long term Java application development person, you are probably familiar with Enterprise Java Bean (EJB) 2.0 . They have been notoriously difficult to use, so the popularity of Object relational mapping tools like hibernate became the standard use for enterprise application development. Sun had JDO, but it was little improvement. The key functionality of Hibernate was the use of Plain Old Java Objects (POJO) to handle the heavy lifting. The big issue with hibernate was that it was resource intensive, which left non-enterprise projects without this useful technology.
Sun worked with the ORM teams and the community to create Java Persistence Objects (JPA) to replace EJB, and to create single standard technology. The big advantage of JPA is application development teams can use it for both EE and SE projects. I have many database driven projects written in Swing. It is time consuming and boring to write boiler plate code to handle moving data to/from the database. JPA removes the plumbing part of my project, so I can focus on problem to solve. My IDE of choice is NetBeans, and has complete integration with JPA, so I can use tools to make my basic connections. Typically in Swing I would create a POJO that represents a row in the JTable. I would then create a custom table model object that uses an array list of row objects to populate the table. I wrote a method that reads from the database, creates rows objects, store the row objects in an array list, move the array list to model, and set the model to the table. With JPA and NetBeans I can bind the JTable to a database table, select which fields to display, and JPA entity classes are created for me. I just save 1 – 4 hours of design and implementation time! JPA uses annotations to specify the database, table and relationships (if connecting to multiple tables). I have a single object to do all of my connection, display, and CRUD functions. JPA uses Oracles toplink to help with the heavy lifting. For those of you application development guys who like to do it yourself, there are tutorials on the sun site.
The best part is that JPA is used in my JSF projects, so I use the same patterns for web application development and desktop application development. There is a learning curve, and Java 6 is needed, but it is well worth you time to learn JPA!
With the economic news being what it is and it being Friday, I decided to lighten it up a bit. We application development types are known for our twisted, not-so-mainstream places on the Internet. Back in the day there was "Foamy the Squirrel" (not for work consumption), and "Homestar Runner". YouTube has somewhat replaced the flash sites for interesting content, with "Chad Vader", "Ask A Ninja", and "Harry Potter Puppet Pals". My new favorite on YouTube is "B&J Supers Squad". It shot as a PSA with guys dressed up as Batman and the Joker performing tasks like how to properly ride a bike and lifting heavy objects. For application development types who are NOT squeamish, I recommend "Klaus the Forklift Driver" on YouTube. It’s in German with English subtitles. It is both disturbing and very funny. So I showed you mine, what crazy clip, flash site, or Geek underground item do you have for me?
A recent hardware phenomenon is the rise of the netbook. Some application development guys may know the difference, but most of IT does not. A netbook is primarily used for web browsing and email, has a screen size of 5 to 9 inches, weighs 2 to 3 pounds, and sells for $300 - $400. Its price and form factor makes it a great buy for application development guys (and others) that don’t/can’t use a cell phone for Internet, and don’t/can’t use a big laptop. The most popular manufacturer is ASUS with their EEE line of netbooks. The ASUS initially shipped with Linux, but now also has Windows XP. New Windows systems, like Vista and Windows 7 are too resource intensive for netbooks.
There are 2 issues creeping in with the netbooks; the rising capabilities of Smartphones, and the blurring of netbooks. As some of may know, I have a G1 (Android) phone. I have a reasonable internet experience, camera, and phone in a small package. I can add useful and silly applications at will, and I have the Internet where ever I have a signal. The form factor for me, and I believe most application development people is very important. My G1 fits in my pocket, and looks like a phone. No one questions me on what I am doing if I am checking my mail or looking something up. It looks like I am texting. If I was wondering around the campus with a netbook, someone may question me on bringing an "outside" laptop to work.
The bigger issue with netbooks comes from the manufacturer themselves. With the popularity of ASUS, nearly all hardware vendors carry some kind of "netbook". Is a 13" laptop with Windows 7 and weighs 4 pounds a netbook, or an under powered laptop? Some vendors are trying that. The initial point was a cheap, light laptop that performed basic functions. If you want application development power, get a laptop. The waters are going to be muddied further when a netbook with Android is introduced later this year. I think the lines between Smartphone, netbook, and laptop will continue to blur due to cheaper, faster processors, smaller and efficient flash drives, and OSes using minimal resources.
I recently read an on article on Computerworld that researchers have found that IT workers who are "slackers" (usually application development guys) are more productive than the "by the book" guys. A slacker is a person (usually an application development guy) the surfs the Internet, makes a personal call , checks his mail/social network, etc. instead of strictly doing his work, and not "wasting" company resources. I know there are management types that would disagree with this. The article states that the brain works on a problem consciously and unconsciously, and often the answer comes when application development people are not overly focused on the issue. That's why most answers come the next morning after we have "slept" on it. A certain level of "peace of mind" also helps when a midday family update is needed.
I personally believe this is true. If you have been stuck on an issue, or have been slogging all day on a task, a break from the routine is needed. I am in information technology consulting, and the expectation is to work on problems continuously. If I am doing a short term assignment, let’s say 2 weeks, I would not be "slacking". If I am on a long term project though, it would be necessary. Application development people are not robots, I have days where everything falls into place, and I am getting many things done. Other times, I am not motivated or physically or mentally ready for work. For the record, my slacking consists of reading the latest technical news and Java technology advancements (like JavaFX, or Android). I am also keeping an eye on economic news too, because it is necessary for assisting in managerial decisions. It’s good to know that we "slacking" application development guys are more productive. Now get back to work!
I wrote recently about that there isn’t "good" guy. I have also written about my OS choice. Microsoft recently created an ad, which showed a "user" buying a laptop with Microsoft instead of an Apple laptop. Her specs were to buy a 17 inch laptop for under a $1000.00. When the only Apple laptop in her price range was a 13" model, her quip was "well I guess I am not cool enough for Apple". I read the reactions from various stories about this ad, and I found them as laughable as the ad itself.
First, let’s talk about the ad. She wants a 17" laptop for under $1000. As an application development guy, I want to know why. Is she watching movies? If that is the case, couldn’t she get a docking station and big monitor? Is she doing application development? I don’t think so. She ended up with an HP, which I have had issues with in the past. I had a cheap HP which had terrible hardware design. I wonder if the laptops are any better. One of the reasons for the higher price for an Apple is that they control the entire hardware. It’s true vendor lock in, but you will never have hardware/software compatibility issues. Microsoft’s OS works on everything, with varying degrees of success.
Now let’s talk about the responses. As a longtime application development guy, I can tell you that Apple users are about the most pompous, arrogant users around. I don’t know if it’s the "boutique" price they paid for their machines, or just because it’s Apple, but their users are snarky about any other OSes. I heartily enjoyed the "I ‘m a Mac" ads. They are funny, and mostly true. The MS ad is not funny, but mostly true. I thought it to be a reasonable response to the Apple ads. MS machines are cheaper. Deal with it Apple fans. You sound whiny.