Saturday, October 03, 2009

JCP Death spiral or "Normal for a Maturing Language"

140 characters wasn't enough to write my thoughts down on Stephen Colebourne's blog post about the JCP I came across via @snoopdave. Since I live in Java land I've thought a lot about the JCP, Java, and how things will be once Oracle absorbs Sun. No one really knows what Oracle may, or may not do with Java and the JCP but one thing I'm certain of is that things are changing whether Oracle does anything about it or not.

I've been following the long saga between The Apache Software Foundation and the Sun over Apache Harmony for a while now and there are definitely problems with the JCP that need to be resolved. Colebourne's post shows the declining trend in numbers of JSRs submitted to the JCP and brings up the question as to whether this is a sign of the times for the JCP or something normal for a maturing language such as Java.

I think the answer is a bit of both. As Colebourne points out, his chart only includes new JSRs and not ones that are in maintenance mode or being updated, such as Java EE 6 for example (which connects about 30 other JSRs, most of which are not new). Since Java is a large platform that has been around for quite some time now that seems very normal to me from a mature language.

The other part I'm starting to see comes more from how other standards outside of Java come about. To me, the JCP often is done in a backwards sort of manner where the spec is defined before any real code has been written. EJB is a good example of a spec that was very complicated and had to go through several painful revisions (Ask Java devs about EJB 2), before we started to see a push to make the spec simpler (EJB3). This sort of spec first code later attitude seems to be challenged more and more by the rough code, general consensus crowd. A couple of good examples that come to mind are Spring and OSGi which both came about outside of the JCP and both now have JCP experience in different ways.

Rod Johnson of Spring also believes in rough code, general consensus when he wrote about his and Spring Source's approach to the JCP. This move towards proving technologies and techniques before submitting a JSR is something we will see happen more and more as Java progresses. JSR330 - Dependency Injection for Java, is a good example of this happening. JSR330 combines the knowledge learned from Spring and Guice to define some basic annotations for Dependency Injection in Java.

In the end, I'm glad to see fewer JSRs being submitted and giving more time for techniques and technologies to adapt and mature before working through the JCP to define a standard. Now all we need to do is get more people to experiment with closures and reified Generics...

Thursday, January 29, 2009

Impressive = KeyJnote

I'm glad to see that KeyJNote has returned as Impressive. A while ago it seemed like KeyJNote had fallen off the face of the earth, but now its back with a new name. I'll have to try it out some more now that I can find it again.

Monday, January 12, 2009

Ubuntu on a Stick

I got a Patriot Xporter 32Gb thumb drive for Christmas and I finally got around to installing Ubuntu 8.10 on it. This was my first experience with installing any Linux distro on a thumb drive and booting from USB so it has been an interesting experience, here is what I encountered when trying to get my thumb drive working.

8.10 USB Startup Disk Creator

Of course, the first place I started was the USB Startup Disk Creator, which has been available since Ubuntu 8.04. The process is simple:

  • Popped in my USB drive.
  • Went to System>Administration>Create a USB Startup Disk
  • Selected my USB drive and selected the option "Stored in reserved extra space"
  • Adjusted the extra space slider to the full 32 Gb
  • Clicked "Make startup disk"

Easy.... and slow. It took a pretty good amount of time for the drive to be completely setup. Nothing too bad, but enough to get up and find something else to do for a while. Unfortunately something went wrong in the process or my laptop is messed up (which it could possibly be). When I restarted my computer and selected the USB drive as the primary boot device, I would only get that the drive was corrupted. I tried to troubleshoot the problem and also tried to recreate the startup disk to no avail.

I'm not sure what happened, but I'm pretty sure its something on my end (perhaps the USB drive) and not that of the USB Startup Disk creator. Fortunately, I found an alternative method that I did get working for me.

UNetbootin to the rescue

While searching around for clues to my problems from the startup disk creator, I ran across UNetbootin so I decided I'd give it a try. Here are the steps I took with UNetbootin:

  • Downloaded and started UNetboontin on my XP laptop.
  • Downloaded the Ubuntu 8.10 iso - (I actually already had an iso on the laptop, doh)
  • Selected my Distro - Ubuntu 8.10
  • Checked Disk Image and pointed UNetboontin to the Intrepid iso
  • Selected my USB drive as the device to be installed to
  • Pressed ok and sat back

The UNetbootin process was extremely easy to follow and it seemed to me that it took less time to format the disk and get the USB drive set up. After I finished, I rebooted XP and switched the boot device to USB again. This time it dropped right into the Ubuntu live menu where I started Ubuntu right up. Success! Both methods were extremely easy to use and weren't very time consuming.

Ubuntu from a thumb drive

Ubuntu takes quite a while to boot up from my thumb drive, but once it does its very responsive and quite fun to work with. Unfortunately you don't want to do too much disk intensive work since it seems like the writes are a little on the slow side, but bearable. Its been really fun to set up my own portable Ubuntu install with a decent amount of storage. In the coming months I'll try running the portable install on several computers to get a feel for how actually portable it is. For now though, I've been very pleased with the results and I look forward to using this as my portable Linux haven from now on.

This also has prompted me to consider picking up a couple 4 Gb thumb drives so I won't have to burn another install disk. I hate having so many piles of CD-Rs with different distros on it when I could just slap it on a thumb drive and go. (unless I can't boot from USB, but thats besides the point) So congrats to the Ubuntu team on a lovely tool as well as the Fedora team who helped motivate the Ubuntu team to improve their USB install tools as well.

Saturday, December 27, 2008

Education in Software Development

Computer Science just isn't hard enough.


Joel Spolsky of Joel on Software puts it plainly enough, but he isn't the only one who thinks CS courses need a change. Bjarne Stroustrup of C++ fame recently did an interview with Datamation discussing Educating Software Developers. As a student, I became very interested in how computer science courses could be changed along with different approaches that could be taken. Bjarne Stroustrup, unlike many in academia, has a strong background in commercial software development. Academia has been producing graduates who are unprepared to enter the world of a working software developer because computer science courses are not designed to help produce great software developers.

So how has my education affected me?

I graduated from Neumont University, a private, for-profit school that offers a Bacherlor of Science in Computer Science degree. Neumont's curriculum was created by Graham Doxey, Scott McKinley, and Marlow Einelund as a response to the growing demand for qualified CS graduates. Neumont attempts to fill the gap that many computer science courses create when a student graduates. New graduates often have little to no working knowledge of programming in the software development industry. Neumont's project-based curriculum teaches students early on how to work in teams to accomplish a goal.

The project-based teaching style at Neumont is what attracted me to the school.

So what did I like about Neumont's approach and what could be improved now that I've had some working experience with software development? Lets start out with what Neumont does right.

Project-based Learning

Serious programming is a team sport.

Bjarne Stroustrup emphasizes that serious programming is not done individually, it is done as a team, often working with other teams to accomplish a goal. Project-based learning helps teach students how to interact with other team members in an effective team dynamic.

Neumont's project-based curriculum works great in this aspect. From the very first quarter I started, I was working in at least one team to accomplish a programming goal. The course curriculum starts with small team projects and begins to add more and more responsibility to the teams as the students progress. By the time students are seniors, you are working most of your time in a group on projects. The Enterprise Project aspect places these groups inside real companies such as IBM, Novell, and EDS.

Business Skills

Project-based learning also helps Neumont emphasize the business side of software development. Working in teams allows us to learn how to communicate better among our our teams, other teams, and our teachers. Skills we need to learn how to function on a team come with experience. With each project we attempted, we learned how to work as a team and manage all the "soft" issues that come with teamwork.

There were teams that were great, and we learned how a well-gelled team comes together to produce great results. There were dysfunctional teams, where no one got along with each other and the project floundered. There was the prodigy programmer who obsessively controlled all their code and re-wrote any code he had to touch that wasn't written by him. There was the lazy teammate, the ever-late teammate, and your indecisive teammates. Each type I encountered helped me learn ways to work to keep my team as gelled as possible and ways to work with each type of teammate.

As Bjarne Stroustrup summarized, developers need to learn how to present clearly your projects, ideas, and the goals the project achieves. Neumont helped me improve my presentation skills dramatically from when I started school. Each quarter students do at least one presentation in front of their class. Most often it is at the end of a project class to present the project you worked on and attempt to 'sell' the product to the class.

Its easy to spot the difference between new students and those who have learned from a few bad presentations. As I learned more, my presentations sucked less and less and I was able to present a clear, concise idea of my teams project and what it could do.

Writing skills are also critically important as a student at Neumont. Email and IM are two major forms of communication between students, teams, and teachers. My time at Neumont quickly taught me how to keep my emails short and concise to keep the communication understandable. I also learned the importance of IM while going to Neumont. This has become very handy when I joined IBM since IM is now the preferred method of communication for many IBMers.

Learning

Probably the most important skill I learned from Nemont is also an important business skill that is can be very difficult to master. I have become a self-directed learner. I am by no means an expert at self-directed learning but by nature of the compressed course schedule at Neumont, I spent much of my time at Neumont teaching myself more about what we were learning in class.

I consider this the most valuable skill I learned from Neumont. It allows me to adapt to new changes in the workplace and to learn skills to stay ahead of the technology curve. At IBM, many of our teams are beginning to transition from the old-school waterfall method of software development to more agile practices. This transition seems to be a little more difficult for some of the developers who have been with IBM for a long time. Being a self-directed learner lets me cope with any transitions and learn how to work in new environments or programming languages more quickly.

Verdict

Overall I feel that I received a great education from Neumont that allowed me to learn in a style that feels very comfortable to me. Neumont's project-based curriculum is what made me decide to even attend school in the first place. I feel that I graduated with a great working knowledge of the business and soft skills that I need to really become a great software developer.

Neumont is not without faults, of course, there are many many things about the curriculum I feel need to be improved, but that will be the subject of another blog post soon enough. :-)



Image Attributions:

Image by: Sybren Stüvel
Image from: Neumont.edu
Image by: inju
Image by: jisc_infonet

Monday, November 17, 2008

Alt+Drag for Windows

altdrag is a little utility that gives Windows users a feature Linux users have had for a long time  now, the ability to move a window by holding alt and clicking on a window anywhere to move it around. This is one feature I constantly try to do in Windows. Its light on the memory usage and is in a 10k 7z file so check it out.

Monday, September 22, 2008

Chrome SSL Certificate Fun



One warning that has become very annoying to me in Firefox and Chrome is the self-signed certificate warning. Many sites on IBM's intranet use self-signed certificates and I hate having to wade through this screen the first time. Chrome uses the the operating systems certificate store so you simply need to add the certificate to your trusted root certificate authorities to bypass the signed certificate problem in Chrome. I found a way to import the certificate using IE on the Chrome Google Group

To import the certificate:

    • Go to the site in IE
    • Go to the security report (View > Security Report) and click 'View certificates'
    • In the Certificate Import Wizard press 'Next' and select 'Place all certificates in the following store'
    • Then choose Trusted Root Certification Authorities
    After that, you simply finish up the wizard and you're all done! Chrome will now see the certificate in the Trusted Root Certification Authorities and will stop throwing up the Certificate Not Trusted screen on any pages that use that certificate. This is very handy for those of us who use many intranet sites that are self signed.
    I imagine there are other, probably better ways so please let me know in the comments if there is an easier way.

    *edit* For those of you wondering if that first picture is a screenshot from my computer, I assure you it is not . I have not updated to Vista nor do I plan on updating to Vista.

    Sunday, August 31, 2008

    My Coding Dojo

    After reading Jeff Atwood's post on code kata I decided that I was going to start a Coding Dojo at work so I could improve my coding skills and learn new tricks from other developers. Since this is an ongoing process, I'm going to document our experiences here on my blog.

    Ideas

    After reading Jeff Atwood's code kata post, I followed a few of his links and read about Coding Dojos and where the dojo got its start: Dave Thomas' 21 Code Katas. Pragmatic Dave's code kata really got me excited and interested in how I could continually become a better programmer through disciplied practice. Work alone is just not enough, you have to sit down and actively try something new and fail at it a few times to learn. Work does not allow you to do that often, if ever. Now that the seeds have been planted, I need to figure out where to go next. I thought it might be a good idea to look for local dojos.

    Nothing in my area and nothing I could find at work either.

    OK. Now what?

    New Dojo

    It was time I started my own dojo, but how was I going to do that? To help me figure that out, I wrote down some ideas I should look into while I started this dojo.
    1. What do I want from the dojo
    2. How will the dojo help others around me
    3. How will the meetings go
      1. What kata should we use
      2. Meeting styles e.g. Randori Kata, Prepared Kata
      3. Meeting length
    4. How often will we meet
    5. How many people is the best size for a dojo
    Using these guides I had written I began to piece together my concept for the an IBM code dojo on my team wiki. Piece by piece I began to assemble what a code dojo would mean to me and my fellow IBMers. Along the way, I came to the conclusion that when starting a coding dojo, there is one important idea to remember:

    Above all things, do what works best for you and your dojo.

    What works best for my dojo may not work best for your dojo so don't feel you have to work the dojo in any sort of prescribed way. The best part of a coding dojo is that it is flexible and adaptive to the needs and desires of the members of the dojo. If you don't like doing the kata, then do something else that helps you learn and grow as developers.

    First Meeting

    After working out what I wanted the coding dojo to be for me, it was time to invite some people to join the dojo. Starting out I got about five people to join, by keeping the numbers small I can work with the dojo better so we can work out any kinks in how our dojo will operate.

    Before our first meeting, I had come up with some points I'd like to bring up. These might help you to work out a first dojo meeting as well.
    1. What I'd like to get from our dojo
    2. A brief description of how kata might work for us
    3. What everyone else would like to get from the dojo
    4. How often we should meet
    5. Introduce a sample kata (see Code Kata for some ideas)
    6. Introduce the dojo wiki
    7. Plan next dojo meeting and kata topic
    8. Write up a meeting retrospective
      1. What went well
      2. What didn't go well
      3. What could we improve next time
    After going through this agenda with the dojo, we had some great feedback on what we would like to achieve individually and as a dojo. We also got much of the administrative sort of work (meeting times / location) out of the way quickly with little hassle

    The Future

    My dojo will be holding its second meeting in the next few days, and as we grow and learn as a dojo I am going to document our progress here on this blog. As I document our progress, I'm going to be writing in a way that  others wishing to start their own dojo have some insight and suggestions on how to go about that. So for now, farewell and I'll be writing about our dojo in the next couple of weeks.

    Thursday, August 14, 2008

    Kicking Ass

    Creating Passionate Users was by far one of my favorite blogs I used to read, but unfortunately it has gone dark for now. Fortunately, Kathy Sierra has started microblogging over at Twitter and its great to read what she has to say again. Recently she tweeted something that really got my attention:

    We tell our authors: "Don't focus on making your BOOK better... focus on making the READER better." Often changes TOC (fewer topics) & tone

    This got me thinking... What am I doing on my blog to help you kick ass? When I thought about that, realized I wasn't doing anything to help readers kick ass. I had simply put up whatever idea comes to my head. Now I'd like to change my direction and write more on how I can help you, the reader, kick ass. Not only will this help you, but it helps me become a better writer, programmer, and technology enthusiast.

    Here's to helping each other kick ass.

    Wednesday, July 16, 2008

    Office Redesign

    Following a link from Stack Overflow's blog on Microsoft's new research lab got me thinking more about how important it is for developers and the rest of the business world really, to have offices designed to help them be more productive.

    I work for IBM and I can attest to how drab, corporate office designs can start to get to you after a while. While my office building is no Intel office layout, it was definitely designed with space efficiency in mind, not for those who are going to be working there.

    I first read about how important office design is from Peopleware back in school and it has really stuck with me. Peopleware suggests that its more important that offices are designed for the developers than for space efficiency. Programming is a creative effort and it is very important to create an environment that caters to the developers. After reading Peopleware I have become much more aware of the change major companies such as Google, Intel, and Microsoft have begun to take heed of their developers and actually design spaces to spur creativity and team building.

    A few changes I've begun to see in modern office designs:
    • Open Space
    • Individual Offices
    • Whiteboards everywhere
    • Reconfigurable spaces
    • Natural Lighting
    • Collaborative Spaces
    It is really exciting to see that large software companies begin to design offices with actual human being in mind instead of mindless corporate drones of years prior. This isn't just for crazy smaller sized companies with office fetishes anymore. I hope to see more design that focuses on attention to detail that Microsoft's new office design and Joel Spolsky's Fog Creek office design.

    After watching the Microsoft research office video, I feel like I might have some more energy talking about office layout. So this is it for now, but keep your eyes out for more articles on office layout and design in the future.

    Wednesday, June 04, 2008

    Office Design

    While I haven't worked in a real office for even a year yet, there are some things I've become acutely aware of regarding my office space. Office design and layout is incredibly important to everyone and can have a large impact on how I work. While I'm glad I'm not stuck in a cube farm and actually have an office where I can shut my door, there are still some things I think all offices should have. Here are just a few of the things I would like to see in my office.

    1. Ergonomic Chair


    Image by: Crouching Donkey

    I had the opportunity to use a nice ergonomic chair a few weeks ago and now I'm wondering how I still sit in a regular, barely adjustable chair. I was much more comfortable in the ergonomic chair and that allowed me to focus on my work better and for a longer period of time. My only problem with an ergonomic chair? They are pretty pricey, hopefully you can convince your work that you should be using an ergonomic chair.

    2. Adjustable Desk


    Biomorph Maxo

    I like having a nice big desk like I do at work, but what I don't like is that its one huge hunk of desk. My desk also lacks the under-desk keyboard and mouse tray, this has been making me keep my arms in a much more uncomfortable position and it has been making my shoulders ache. I've also been interested in sit-to-stand desks lately because I get tired of sitting all day at work and standing for a while would also help me make sure I'm taking regular breaks to reduce fatigue.


    3. Multiple Monitors


    Image by: Alastair Tse

    Right now I use my Lenovo T60p as my main computer, but I have two other desktops that are also being used. One of them runs without a monitor via VNC and the other uses a crappy old Dell CRT. As a developer, I would be so much more productive with at least two monitors, the studies, and developers using multiple monitors can't be wrong.

    Those for me, are the most important changes I would like to see in my office. Hopefully I can start working towards a more ergonomic, and productive office space.