Oracle acquires Sun: Who needs to look out now?

As a Java developer who does a lot of work with Oracle products including Jdeveloper and ADF, my head is still spinning a little from the news that Oracle is buying Sun Microsystems.

Oracle buying BEA hurt a little, though it was completely expected and a great move on Oracle’s part, I was a little sad to see the application server competition field drop by one but I was very happy that Oracle was smart enough to choose Weblogic.  At that point it was really the only the decision they could make.

With Oracle buying Sun there is a lot of synergy, there are many technologies that are duplicated among both companies.  Oracle owning both should make those technologies better and enable them to compete with the leaders in those respective areas.  The big ones that stick out for me:

!. Oracle’s JDeveloper and Sun’s NetBeans

Could they really afford to drop NetBeans, probably not, but can they afford to drop JDeveloper, no, not really.  Here the only thing that really makes sense is to merge the two, probably adding in the ADF wizards and goodies like that into NetBeans.  At least, that is what I hope they do.  JDeveloper isn’t bad, but I only ever use it to develop ADF projects and I bet many, many people are in that same boat.  Combining the two could end up giving Eclipse a run for it’s money, hopefully the competition just spurs both to be better.

2. Oracle’s Oracle VM and Sun’s Virtual Box

I haven’t had much experience with Oracle VM, but I have lately become a huge fan of Sun’s Virtual Box.  It’s a great product and it lets me do everything I want for free.  Will this continue to be the case?  I don’t know.  I’m not an expert on virtualization in the enterprise, I use it for desktop VMs, but I hadn’t seen much about Virtual Box working in that space.  I would imagine Oracle VM is all about virtualizing the network and competing with VMWare on that level.  With the two together VMWare’s got some competition.

3.  Oracle’s Unbreakable Linux and Sun Solaris

Oracle had a great jumpstart to their linux platform basing it on the RedHat codebase way back when.  Solaris was my first exposure to any type of Unix (Solaris and AIX, actually) and it has been around forever.  If the adoption of Linux has hurt anything, it’s probably been Solaris and through that, sales of Sun’s hardware.  Oracle says that their owning of Solaris will enable them to tune the Oracle Database software to run even better on it, and since according to Oracle, most of their database customers are using Solaris, I think they’ll probably do that.  I have no idea what will have to Unbreakable Linux though.  Who has to look out with this one?  I’d say IBM.  Buying Sun probably would have been good for them in the products space, I think the only area IBM is going to be competing in future is going to be services.  RedHat has Ubuntu to worry about on the desktop side and now a bigger threat from Oracle and Sun on the server-side, they have their work cut out for them.

4.  Oracle Database and Sun’s MySQL

MySQL has a huge customer base, most of them probably non-paying.  I think with this one, Oracle just adds it to their ever increasing repetoire of niche databases.  It won’t go away, but I see less adoption in the future, maybe a boost for PostgreSQL if they can get their act together.

5. Sun’s Java and Oracle’s ADF

Oracle has always been a big player in the specifications for the Java language.  I’m sure someone else will go into all the details, because I honestly don’t know them off the top of my head, but I do know that many technologies and ideas that ADF is based on where either approved JSR’s or close to approved JSR’s.  Does Oracle’s acquisition of Sun and Java mean that they will be better equipted to push trhough whatever they want to add to the language?  Well, I don’t think it will be quite that easy, but I’m sure it makes it easier.

I’ve always been a Java guy at heart, I work with Oracle technology sometimes, and I think they have really come a long way, but Oracle owning Java does kind of scare me a little.  One thing Oracle does really well, and JDeveloper is great at this, is making complex technologies easy to use.  It is what Microsoft does really well.  .NET makes easy the things that Java makes hard.  ADF actually does a lot of the same.  The combination of ADF and Java together could pose a big threat to Microsoft’s .NET if Oracle does it right.

My first thought about Oracle owning Java is that many developers are going to jump up and down about it and complain.  Some will probably jump ship, maybe to .NET but probably to Ruby or PHP or something else.  I don’t think many coroporations are going to change the direction of their IT departments though, so for them, it will be .NET or Java as it always has.  In the end, I thnk most Java developers are going to remain Java developers and hopefully Oracle’s backing of Java will just end up making it a better language to work with.

Microsoft might have more to worry about with Oracle owning Open Office now also.  I hope that Oracle continues to invest in it, or it’ll end up being Microsoft Office vs. Google Apps and that’s about it.  I’m all for cutting edge, but Gmail hasn’t come out of Beta yet and I’d like to see Microsoft have some competiion in this area.

So I wanted to get my thoughts out there while they were floating around in my head and hopefully yours so I could hear your opinions on the topic.  Please let me know what you think about this acquistion and what you think it means to the future of technology and competition in the field.

Share/Save/Bookmark

Why VirtualBox rocks!

First, let me tell you why VirtualBox doesn’t rock, it’s that copying VMs really seems to be more work that it needs to be. VMWare is much easier this way.

However, VirtualBox does rock, and I’m sometimes more clueless than I think I am.

As it turns out, VirtualBox has a feature (and has had it for some time now, hence the clueless part!) wherein the guest OS can run seamlessly on the host OS. Basically this means that instead of having to open a separate desktop that has the guest OS in it, you can open applications directly onto the desktop of the host operating system. Check out the picture of my desktop at home, it is Windows Vista running a VirtualBox VM with Ubuntu 8.10 installed.

VirtualBox Seamless Integration (Vista and Ubuntu)

VirtualBox Seamless Integration (Vista and Ubuntu)

I don’t know why I feel so strongly about this, but this is one of those small things that really makes me happy to be alive in this day and age. It is just plain cool. It would be cooler if I could transfer files from the VM to the Host just by dragging and dropping, but for now I’ll settle for being able to cut and paste between the two (yes, you can do that!).

How do you accomplish this, you ask? It’s straightforward actually.

1. Download VirtualBox from Sun.
2. Install it.
3. Create a VM.
4. On the guest OS, install the VirtualBox tools.
5. Restart the guest OS.
6. Click on Machine->Seamless.
7. Enjoy.

In my few days of experimenting I found that with Windows Vista as the host and Ubuntu as the guest, it worked practically flawlessly. With Ubuntu as the host and Windows xP as the guest, it was a little slow moving into seamless mode and has more graphical hiccups. It could be the graphics card in this desktop though. Even with the hiccups, it is pretty sweet however.

So it is official, VirtualBox is right up there with Synergy as the two tools that really make me happy and, in fact, more productive in my day-to-day.

Share/Save/Bookmark

Favorite Useful(and Mostly Free) Software for Ubuntu and Windows

Everytime I install an OS on a new machine there is a list of software that I install that I find I can’t live without.  I guess I could actually technically survive, but my life would be a shell of what it used to be.  When I decided to make the switch to Ubuntu from Vista, it was no different, and actually the list didn’t even need to change too much.

1. Firefox - First off, the browser.  Windows or Linux, I always go with Mozilla’s Firefox.  For some of my work I need to use IE to make sure a web application may look okay in both browsers, but if I’m just browsing, I use Firefox.  Of course, if I’m doing more than browsing, like programming javascript or updating CSS or figuring out some DHTML, then I’m still using Firefox, but this time with some plug ins or add-ons such as Web Developer and Firebug.

2. Pidgin - Next, I need to be able to communicate.  We use a couple of different IM clients including Skype and AIM and I have a few friends on both Yahoo Messenger and GoogleTalk.  So, while I use Skype on my laptop and I have Trillian installed there, typically in the office I’ll use an IM client on my desktop, and for Ubuntu, this has been Pidgin so far.  I’m new to using it, but so far, I like it.

3. Filezilla - Another bit of software that I use on both Windows and Linux is Filezilla.  While Linux certainly includes FTP and SFTP and all the protocols I could want, I still like Filezilla for it’s ease of use.

4. JDK - Since I spend a lot of time writing or reviewing Java code, I need a JDK installed.  Typically, I’ll install the latest JDK.

5. Eclipse - When coding, Eclipse is my IDE of choice, unless it’s ADF work that I’m doing.

6. JDeveloper - As I mentioned in my last post, I just installed JDeveloper.  JDeveloper might not be my first choice for straight up Java coding, but you really can’t do anything in ADF without it, so JDeveloper needs to be on my machine somewhere.

7.  Netbeans - Yea, I know, I already have 2 IDE’s installed, so why a 3rd?  Well, for two things, one, I been playing around a lot with Java FX and the preview panel in Netbeans is invaluable.  Secondly, I’ve recently been doing some XML modeling, and the best free tools I found for that are plugins to Netbeans.

8. VMPlayer - We have a demo environment that we use a lot and a couple of database installs, one is XE on a Windows machine and one is an Oracle development environment in Oracle Unbreakable Linux.  I like to have these on whichever machine I am using, so I have them in virtual machines that I can use with VMPlayer.  Very convenient.

9. Rev - Obviously if I started a software company, I think our products are useful.  So Rev is always with me for quickly creating CRUD applications that we may need.

10.  Synergy - One of my favorite programs ever, Synergy is a small application that allows you to share one keyboard and mouse across multiple machines and montitors.  For example, my set up right now inlcudes my laptop which runs Windows XP and has a nice little docking station with a 21″ LCD, to the right of that are 2 more slightly smaller LCD’s which are both connected to my workstation which is now running Ubuntu.  With Synergy, when I move my mouse off the right edge of my laptop’s monitor, it seamlessly moves to the left edge of my workstation’s monitor and I can now use my workstation.  I’ve been using Synergy for years now and if you are using more than one computer at your desk, I cannot reccomend it enough.

11.  OpenOffice - While I use Microsoft Office on my laptop for consistency and because I have noticed a couple quirks in OpenOffice that prevent me from making a document or presentation look exactly how I want it in both OpenOffice and Microsoft Office, I always install OpenOffice on my workstation.  This saves me a large amount of money and still lets me create and view documents on my workstation if I need to.

There are a couple other tools that I install if it’s a Windows machine or my laptop.

My laptop needs e-mail and up until a few weeks ago, that was always Microsoft Outlook.  Outlook is okay as an e-mail client and it let’s me set up appointments easily, but since we don’t have an Exchange server, I am certainly not tied to it and after a while it has gotten really excruciatingly slow upon startup.  Maybe because I have so many messages in my local inbox, I’m not sure, whatever it is, it even got to the point where it would hang starting up and I would have to force close it and start it again, practically everyday.  So, I made the switch to Mozilla’s Thunderbird and I haven’t looked back.  I probably should have done it a long time ago.

For IM, I use Trillian and Skype on Windows.  Until Trillian has seamless integration with Skype, I guess that is the way it will have to be.  Trillain is another great product, even the free version is great for integrating various IM services.

Ultraedit has been my text editor of choice in Windows, I bought a license a couple times and I haven’t regretted it, but I think Notepad2 isn’t so bad either so since Ultraedit is on my laptop, Notepad2 goes on any other Windows machine I may have (or VM).

Oracle XE - I do a lot of work with Oracle and Oracle XE is a nice lightweight db that lets me develop on my workstation. I must admit however, that I am somewhat stubborn and I long ago vowed that I would never install any Oracle database directly on my primary OS, so even if it is XE, I run it in a VM.  Less services running that way and then it’s only taking up resources when I need it.

Oracle SQL Developer - I have been a long time fan of Quest’s TOAD product for doing PL/SQL and SQL work in an Oracle database, but since SQL Developer was released and is free, and connects to a multitude of databases, i’ve been using it for a while now.

PuTTY - a great free ssh client for Windows, always goes with me.

VNC - Synergy isn’t going to help you connect to a machine with no monitor or a monitor in another room, so if it’s a Window’s machine, I’ll use Remote Desktop, but if it’s a Linux machine, I use VNC.

Google Desktop - I just love the search feature in Google Desktop.  I don’t use the sidebar anymore, but I keep it for the searching.  My laptop tends to have so many documents and e-mails that the search provided by Windows just wasn’t cutting it and while the index file that Google Desktp creates is rather large, I can’t use my laptop without it.

So that list turned out to be longer than I expected.  Hopefully you’ll find something useful on it.  If you have any suggestions of software that make your life easier, let me know.  One other wonderful application on Ubuntu is the package manager which makes finding and installing all types of software a breeze, I can’t help but wonder when Microsoft is going to hop on that bandwagon and make something as useful.

Share/Save/Bookmark

Application Modernization and Reuse

Lately we’ve been doing a lot of discussing about how to reuse components within an ADF application over on the ADF Methodogy Google Group. A lot of interesting comments have been made and Avrom even blogged about some in his post about SOA without the S.

A lot of clients we talk to are interested in modernizing their applications but they don’t always realize that in order to modernize a client/server application in a large enterprise environment AND take advantage of the technology they want to move to, a lot of work is involved. Not just in the actual development, but in the planning and designing of the new application.

Sure, the simplest approach is to just convert what you have and go with that, and in a lot of cases, that is a good first step, but it doesn’t make sense to just convert what you have to end up with the same exact application in a different technology stack, the only thing that is going to buy you is different support costs, probably along with a bunch of flack from the business who’s paying for the change.

Many large enterprises have already created a stockpile of available enterprise services that are meant to be re-used by new applications. Make sure that part of your modernization project is to take a step back and analyze what existing services already exist and how they can be used in your modernized version of the application you are migrating or converting.

After you have analyzed existing services, take the time to determine what this applicaiton that is being converted can offfer as far as services.  Does it make sense to provide some of this data as a service to the enterprise?  Are other applications going to be converted that will want to make use of the same data?

So though the application you are looking at may seem quite isolated, chances are, if it is part of a larger infrastructure, it really isn’t all that isolated at all, it’s just that the old technology couldn’t support it any other way.

Share/Save/Bookmark

Condemned by Google

Yep, our blog was subjected to hacking and some of the pages were injected with some “badware” links to some suspicious stuff. Sorry for the inconvenience. I’m also sorry that it took so long to find the offending posts. I cleaned up one post and couldn’t find anything else, but apparently I didn’t look far back enough.

I did a bunch of searching and found this wonderful utility, the Bad Neighborhood Link Checker and unlike Google which just said the site had some suspicious links on it somewhere but didn’t specify where, this told me what page had the suspicious links.

My thanks to Michael VanDeMar for making the tool available online and for free!

Share/Save/Bookmark

The Dark Side of Frameworks: Part II

My last post about frameworks criticized the Spring JDBC Template construct. I don’t really have anything against Spring in particular, I had just stumbled across the JDBC Template a few days earlier and thought it may help make my point. My point, which I attempted to illustrate by that post, was not that the Spring JDBC Template is useless, it is that frameworks in general, which exist to simplify development of complex technologies, by their nature redirect that complexity somewhere else. Hopefully that new complexity is less than the underlying technology and this is often the case. As an architect/designer/developer you should be aware of that the trade-off exists, what the trade off is going to be and make an informed decision.

1.  Configuration Files

Since I used Spring as an example once before, let’s move on to another one of my other favorite frameworks, Struts. Struts has seemed to have fallen out of favor of late, with many developers now hopping on the JSF bandwagon, including our shop. I had to basically be dragged away from it and forced into JSF. However, even though Struts was my framework of choice for years, it had some problems that really bugged me and are issues that still exist today in many frameworks.

One of the nice things about Java is that you can use a smart IDE and it will spot a lot of careless errors for you, especially simple typos. This is important for someone like me who likes to type fast and can tend to be somewhat careless. What I found with Struts is that I often had problems first setting up projects. For some reason I would always end up with a typo in the struts-config.xml file that would cause it to break when starting my application. Struts was never very good at letting me know what the exact problem was and this never ceased to infuriate me, so much so in fact, that one of our products, Rev, was born out of that frustration because it insured that I wouldn’t have to worry about typos impeding my ability to get an application up and running quickly. I continued to use Struts because it’s benefits outweighed it’s difficulties, it didn’t abstract too much of the HTTP layer so I could still understand what was going on pretty easily.

2.  Too much abstraction

Next, for me, came JSF. I actually only started using it because a project we were working on required a technology that was built upon JSF. Once I started using it, I could appreciate how it’s abstraction of the HTTP layer really made things easier for developers, especially for newbies who didn’t really know much about the HTTP layer. All of this abstraction, however, made it difficult to understand what was happening underneath the covers or exactly how it was happening. Some of the simple Javascript patterns I had been using in Struts to solve some common problems became more difficult. Have you ever looked at the source HTML to a JSF-backed page? It’s not nearly as simple and straight-forward as a page developed from Struts. I am still uncomfortable with the fact that I don’t know exactly how to create a request in JSF to accomplish some things seemingly trivial things, whereas the same things in Struts were really easy.

The other problem that I found as we continued to use the framework was that I could have developers who understood JSF and worked in it really well, but they didn’t understand some of the underlying concepts. When something unexpected happened, they weren’t sure where to look. This would occur when a developer’s first experience with developing web applications was with JSF.

That same problem occurs with any framework, since by their nature they abstract the complexity of some underlying technology. This is all well and good until things break. Obviously, Java itself is an abstraction of underlying technology, do I think we’d all be better off going back to assembly language and programming web applications in that? Of course not, but I think as a developer you should be aware of the pro’s and con’s of the frameworks you use.

You should also take it upon yourself to learn something of the underlying technologies so you aren’t completely clueless. I have interviewed plenty of so-called JSP developers who couldn’t tell me what pieces of code were executed on the server and which on the client, who didn’t understand the underlying concept that once your page was executing in the browser, you weren’t able to execute java commands inside a function in a page. I could understand how a newbie might have some problems with that, but an “experienced” JSP programmer?

3.  The Problem with Fixing #1 and #2

Often, with frameworks that become popular, it’s because the abstraction they provide is more useful than the underlying technology by itself and any new complexities it may introduce, it allows developers to become more productive, hopefully much more productive.

In my opinion, Oracle’s new version of ADF, 11g, is a framework that does just that, but it isn’t without it’s share of compexities either. ADF 11g makes a lot of building a web application declaritive. This may be a good thing, but again, you run into the problem of having to deal with many XML files. Oracle alleviated this problem to a very large degree by creating JDeveloper 11g which can handle building and validating the XML files for you. However, now we have a new problem. There are some mismatches between JDeveloper 11g and ADF 11g. In some cases, just because JDeveloper tells you something is wrong doesn’t mean it is wrong and won’t work. This hints at a larger problem: that both JDeveloper and ADF need to be maintained and released on the same cycles. If one falls behind in respect to changes that were made to the other, the usefulness of the collaboration between the two is degraded.

Also, again in ADF 11g, there is a larger issue. That is, if something acts in an unexpected manner, the developer now needs to understand an additional layer of complexity in order to debug the problem. Often the developer will need to resort to asking the experts via a forum or a bug report. Even if the product is open source and the developer could access the code itself, finding and fixing a problem deep within the framework will obviously detract from the usefulness of the framework itself.

None of these “dark sides”of frameworks are reasons not to use them, I use or have-used all of them, these are just issues that you should be aware of and investigate before using a framework. My “issues” (some may describe these as pet peeves) can be distilled into two main items, 1. Increased abstraction often leads to less understanding and 2. Declarative programming creates its own problems.

Obviously we are going the way of more abstraction, not less.  It will be  a great day when we no longer have to worry about the framework we are using breaking and exposing us to the dirty underbelly of technology behind it all.

</rant>

Share/Save/Bookmark

The Dark Side of Frameworks

Framework seems to be a pretty hot buzzword these days. Not that it hasn’t been for years, but now more and more clients are asking for frameworks for all kinds of things. Frameworks upon frameworks actually.

The most recent example is a client who wanted a framework that would wrap the way you could call stored procedures via JDBC. I was originally against the idea, but being all about customer service, I know when to give up the fight and just roll with it. What one of my developers ended up creating is a framework that wraps JDBC and allows you to save a few lines of code per procedure call, not bad really, but not really enough to change my mind about the whole thing in general.

I could see why they liked the idea, it did hide some of the perceived complexity from the user of the framework, but the reality was it really didn’t do too much more than make sure the close statement was in a finally block and allow the user of the framework to bypass seting all the parameters in a callable statement.

One framework we looked at using instead of creating our own was the Spring framework’s wrapper for JDBC. I don’t want to start a flame war, but honestly, what’s the deal with that monstrosity? What does it actually simplify? From the examples in the documentation I looked at, it seemed simple enough, but that was only because it was doing simple things. When I took a look at called Stored Procedures it didn’t look so simple any more.

Take the example of calling the sysdate() function from Oracle. This is the code for JDBCTemplate:

import java.sql.Types;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.datasource.*;
import org.springframework.jdbc.object.StoredProcedure;

public class TestStoredProcedure {

    public static void main(String[] args)  {
        TestStoredProcedure t = new TestStoredProcedure();
        t.test();
        System.out.println("Done!");
    }

    void test() {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("oracle.jdbc.OracleDriver");
        ds.setUrl("jdbc:oracle:thin:@localhost:1521:mydb");
        ds.setUsername("scott");
        ds.setPassword("tiger");

        MyStoredProcedure sproc = new MyStoredProcedure(ds);
        Map results = sproc.execute();
        printMap(results);
    }

    private class MyStoredProcedure extends StoredProcedure {

        private static final String SQL = "sysdate";

        public MyStoredProcedure(DataSource ds) {
            setDataSource(ds);
            setFunction(true);
            setSql(SQL);
            declareParameter(new SqlOutParameter("date", Types.DATE));
            compile();
        }

        public Map execute() {
            // the 'sysdate' sproc has no input parameters, so an empty Map is supplied...
            return execute(new HashMap());
        }
    }

    private static void printMap(Map results) {
        for (Iterator it = results.entrySet().iterator(); it.hasNext(); ) {
            System.out.println(it.next());
        }
    }
}

This is as excerpted from Chapter 11 of the Spring Framework Reference Documentation.

I am positive that if I showed that to the client as an implementation they would ask for a framework to wrap it to hide the complexity and what is the point in that?

The same thing is accomplished just using JDBC as follows:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TestStoredProcedure {

    public static void main(String[] args){
        TestStoredProcedure t = new TestStoredProcedure ();
        t.test();
       System.out.println("Done!");
    }

    public void test() {
        Connection connection = getConnection();
        String myDate = null;
        try {
            myDate = test(connection);
        } catch (SQLException e) {
            //Might want to do something more useful here.
           e.printStackTrace();
        } finally {
            try {
                connection.close();
            } catch (SQLException e) {
                //don't care right now if we can't close it.
            }
        }
        System.out.println("Date:"+myDate);
    }

    public String test(Connection conn) throws SQLException {
        String result = null;
        CallableStatement proc = conn.prepareCall("BEGIN ? := sysdate(); End;");
        proc.registerOutParameter(1, java.sql.Types.DATE);
        proc.execute();
        result = proc.getDate(1).toString();
        proc.close();
        return result;
    }

    public Connection getConnection() {
        Connection conn = null;
        try{
            Class.forName("oracle.jdbc.OracleDriver");
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

}

So what was gained with the framework? To me it doesn’t seem like much. I’m not sure where the exceptions went to, do I get a Runtime exception if sysdate isn’t a function? I guess it means the user doesn’t have to access the CallableStatement or ResultSet directly and that *may* be a good thing to some people. IMHO saving yourself from learning JDBC just means that you won’t know what the problem may be when things start to go wrong and you just limited your skillset to a framework that not everyone is going to use.

Many frameworks are useful and I realize this part of the Spring framework is one small piece that probably isn’t used by very many people, but again, that’s kind of my point. Why bother with that piece at all?

Share/Save/Bookmark

Architects vs Developers: Theory vs. Practice?

I have always fallen on the practical side of technical architecture. I think it is because I started my professional life as a developer and have evolved into more of an architectural role on the projects I work on. I have worked with many architects over the years, though, I’m not sure where their background lies as most of them seem to fall more on the theoretical side of the fence.  It isn’t too often I run across a so-called architect who has the practical side of software down also.

These theory architects are good at writing documents and drawing pictures, and they even have some really great ideas. The downside of these theoretical architects have, is that though they tend to do a lot of research and generally know what all the best practices are, they don’t generally get down and dirty with the tool set and thus don’t know what the real or potential problems are with some of the practices that they suggest.  If there isn’t someone involved in the design who is fluent in the toolset, you could waste a lot of time trying to implement something that isn’t going to work or even just making a lot of small changes that aren’t going to matter in the overall scheme of things.

Regarding this point, I was involved in an interesting conversation with a technical architect on a client’s project recently. This architect is a great guy and in general I respect his opinions and suggestions much more than I generally do when dealing with architect types. However, this time, his tendency to constantly push theoretical best practices over practical approaches was apparent to me and even the client.

In creating an ADF BC layer in JDeveloper, a developer will typically, no always, use the wizard included in JDevleoper (unless, of course, they are using Evo). The way the BC layer is defined, various Entities xml files are created from tables in the database and views are built from those entities. Finally, in what is called an Application Module, the Views are used by defining instances of those views for use in the module. Since these view instances are generated automatically, each view instance has a number appended to it to make it unique. Makes sense, right?

Well, this architect said that it was a “best practice” rename those instance variables into something more meaningful. Now while I agree that it may be nice to rename some of those instance vairables to be something more meaningful, is it really practical, and thus is it really a “best practice” or is it just a good idea?

I interjected that though it may be a good idea, it hardly seemed practical, afterall, if JDeveloper automatically generates the instance names, don’t you lose some of the benefit of the automatic generation when you need to go back and rename all of those instances? At this point, the client joined in the converstation and asked if he had used this best practice in the past.

The architect replied that it is always a best practice to rename files or variables such as those so that the names have meaning. The client asked again, “yes, but do people actually do that in a project? Have you worked on a project in which that was done?”

The architect, much to my surprise, replied with, “well, to tell you the truth, I have never actually seen it done.” I actually had to laugh a little bit. It was actually refreshing to hear an architect say that though something was theoretically a best practice, in reality, it wasn’t done because it wasn’t practical. In a lot of organizations, practicality often loses out to so-called “best practices” many a time. The funny thing was, that in this project, it actually made sense to name our view instances as he suggested, but only because the tool we were using, Evo, would be automatically generating the instance names.

Maybe this article was just an excuse to print one of my favorite Yogi Berra quotes, “In theory, there is no difference between theory and practice. In practice, there is.”

Share/Save/Bookmark

What’s in a name?

A lot of people ask us where the name Vgo Software comes from. (That’s pronounced Vee-Go Software in case you were wondering.)  Since I’m in Greece this week with a client and I haven’t posted anything in a while, I thought I would expound upon where our name came from.

Vgo Software Inc.Back in the day, we were just a consulting company. At that time I had come up with a prototype for what eventually became our Rev product. I remember writing an e-mail to my business partner about this prototype. While writing the e-mail I realized that I did not have a name for the project and started to think about what I would call it.

Earlier that day I had talked to a consultant that was working for us and who was a friend of mine. He told me that he had been experiencing bouts of dizziness earlier in the week and didn’t know what was causing it. After suffering for a couple of days without it getting any better he went to the doctor to see what the problem was. As it turned out, the doctor told him he either had a cancerous tumor in his ear or he had Vertigo.

Thinking about what to name the software, which was a code generator, I thought “Vertigo!” what a perfect name! It generates code so fast it will give you Vertigo. Well, I put that in the e-mail as the name of the prototype and the name stuck for a while but at some point before we actually released it somebody did a name search and determined that the name Vertigo was actually being used by another software company for another product.

About a week later we held our monthly staff meeting where we gather everyone from wherever they may be, talk about current company events, and have beer and pizza. We decided it would be a good time to come up with a new name (esp. after the beer part). After everyone throwing out various names for about an hour, we finally settled on a mutilated version of Vertigo, Vgo.

Well, Vgo eventually became our code generator, Rev, and the product built on top of that which was once referred to as Vgo4Oracle became Evo (anybody notice a pattern emerging?). Both products were part of the “Vgo Software Suite” of products and we eventually just started using the name of the software itself as the name of the company.

Share/Save/Bookmark

How Not To Prepare For a Demo

Well, it’s one of those weeks for me.  I have about a half a gajillion things to do and one of them includes preparing for a presentation on Monday.  I have had the presentation prepared for a few weeks now and I’ve even presented parts of it over the last month, but I haven’t done any part of the live demonstration yet.  In fact, besides having a vague idea of what I want to show I haven’t really had any time to figure out exactly what the demo is going to be.  Real professional of me, isn’t it?

I had put together what I thought was a solution for a common problem in converting forms to ADF.  I had done most of it on a plane from Connecticut to Austin, TX a few weeks ago.  I didn’t have a ton of time to test it before my laptop’s battery ran out, but it looked like it worked so I was counting on showing that solution during my presentation.  Unfortunately, now, 3 weeks later, and mere days before the presentation I loaded it up again and tried it out and it doesn’t actually work like I had hoped.

So here I am trying to figure out what is wrong with it and get it working, hopefully before Friday so I can run through it on Friday with some of the folks in the office before doing it live on Monday.

It isn’t the usual way I like to prepare for these things.  When doing product demos I have a machine dedicated to the demos that only gets updated when I know it works, especially since it frequently is used to show of “new” features that are in development, I like to make sure I have a script that works and that the environment is always the same.  Too many other things can go wrong to leave any of it untested.

Well, at least if there’s something I’m good at, it’s being able to come through under pressure.  Besides there’s always the flight to Georgia…

Share/Save/Bookmark