Archive for July, 2006

Texas Instruments

Friday, July 28th, 2006

I’m so excited. I just accepted a position at Texas Instruments, in the Educational & Productivity Solutions division. They are responsible for development of all the of graphing calculators including the TI-83, TI-84, TI-93, TI-72, and Voyager 200 lines of calculators (if don’t know what they are because you have been hiding under a rock for about 15 years, ask your kids, and most likely they use one everyday in school in their algebra, geometry, calculus, and physics classes). I went on a tour of the facility yesterday, and I have to say I was very impressed. My jaw dropped open when I got to play with the new products (none of which will be do out here in the US anytime soon). Essentially this facility is the R&D lab for those types of products that TI develops.

It brought back a lot of memories. One of my old hobbies in high school was writing games for these TI calculators. It’s how you could look busy in class but really be playing. Just load up your favorite clone of Pac Man or Space Invaders and to the teacher you were graphing out your problems. I even used to sell a pack of assorted games I wrote or downloaded off the web, to all the other kids at lunch for $2-5 each. Just transfer them from my calculator to their calculator over the data cable and take the money. I was one of the only people with a calculator to calculator cable so I had a little monopoly.

I can’t talk about anything specifically I seen there at TI (had to sign a NDA even before the interview), but it’s very exciting because I’m going to be working on some very cutting edge hardware here. Of course I’m not allowed to say if this job will involve mono or not, but I can say my mono experience was a major reason why they chose me. I’m coming on as a software engineer on the desktop integration side of things (specially making sure everything is cross platform). This is almost a dream job for me because I get to use each of my best talents here. It’s also an amazingly short commute (about 3 miles or about 2 stops on the DART rail), and not only that but it just happens to be a Fortune 500 company as well.

I can’t wait!

Enterprise What?

Sunday, July 16th, 2006

What really makes something “enterprise” in context of software development?
“Enterprise” is a term that I hear so much it gets under my skin now days. “Enterprise Quality”, “Enterprise Software”, or “Enterprise Capable” are all terms I hear a lot. If you think of J2EE or enterprise services in the .NET realm, enterprise means component re-usability and persistence, transactions and fault tolerance, and scalability. Thing’s that enterprises (as in large companies) have to worry about when handling thousands of simultaneous processes. It means using ideas like the preallocation of data, persisting and storing state of objects, pooling and caching resources across all running sessions, and working with models, frameworks, and design patterns that scale almost effortlessly.

However I think the term sometimes gets confused with another word, “quality”. “Enterprise” does not mean “higher quality”, although many “enterprise” capable applications require a bit of planning so the code is more likely to be a bit higher quality but that’s mostly just a by-product of the extra planning. I know a good number of “enterprise” level applications that are written horribly and pretty much nothing more then just amazing beasts (one I know makes me giggle thinking about it), but would still be considered “enterprise” in every respect because they all still manage to hit that factor of being able to handle thousands of simultaneous processes.

Nearly any language in almost any platform can be “enterprise” capable if it can support those basic concepts or has anough flexablilty to build them yourself. That includes C/C++ (of course), Mono/.NET, Java, Python, Ruby, and even ColdFusion and PHP to some extent if the applications are designed correctly. It’s nice when something in the platform supports those “enterprise” concepts out of the box, but normally, if your language can support threading and OOP type concepts, you can roll your own “enterprise” level scaffolding for your project to get the job done in many cases. Even J2EE is written in Java.

Recently though, I heard some F.U.D. from a very notable person that claimed that Mono wasn’t an “enterprise level platform”. That really bothered me, more because this was coming from an architect, and architect of a very well known and respected piece of software. However after listening to him I doubt he has ever really worked with Mono. He was focusing on the original goal of Mono as said by Miguel when creating the project, that Mono was to help in the rapid development of desktop applications (to help the desktop Linux world keep up, stay maintainable, and grow as fast as windows). The idea behind what he was saying was that many of the “enterprise” level features you see most often are not really necessary in single user environments. He used the fact that our “System.EnterpriseServices” namespace as not being complete as his fuel to help prove his point. He was also making a lot comparisons to VB6 when writing GUI applications (which is not to be confused with VB6 in combination with COM+ which gives VB6 the ability to be some what “enterprise” capable).

It all got under my skin though I thought his comparison of VB6 to Mono was really very funny. The biggest reason being that VB6 doesn’t support threading and only really faked the concepts of OOP development. For that reason you couldn’t roll your own enterprise capable framework written in VB6 itself very effectively because of language and platform limitations. You couldn’t do like how I said before how many J2EE implimentations are written in Java and write COM+ inside VB6. Also, it is true that we don’t support System.EnterpriseServices, but that’s more because EnterpriseServices is simply just a wrapper on COM+ services provided by Windows, so its something that isn’t cross platform capable, and for that matter is even hardly used even in pure .NET in running on Windows only type setups. It’s so easy to roll your own enterprise level concepts in .NET without the need to use EnterpriseServices, so many just don’t use it (that and you don’t get that bad taste in your mouth from using anything COM related).

Also Mono, since just shortly after its conception, has been moving to be so much more then just being a platform built for desktop applications that it started out to be. Mono itself is modeled directly around the standards published by Microsoft that define .NET as well as all the standard class libraries. The design of the class libraries and languages built on top of it are really built to be a best fit for almost any scenario (just in the same way as Java and Python). It’s not intended just for the web like PHP and ColdFusion are, nor is meant for just desktop applications like the way VB6 and VBA are designed. It might be a different story if Miguel chose to start from scratch on designing a new platform altogether.

We might not have an nice prepackaged application server solution to host your components and maybe give nice you a pretty admin interface or xml config file to setup all those nice features like component pooling and caching that you see in many off the shelf application servers in Java or with Component Services with COM+ (unless you consider XSP for web services), which means you have to write your own service daemons in many cases to do that sort of thing. We also might not have (as some would consider) the legacy EnterpriseServices so it means doing anything you want from that namespace yourself, which I know many of us would rather do anyways for the control and simplicity of doing it the .NET way. Mono supports object serialization, remoting, and web services which makes pooling, persistence, and handling state very easy to do on your own. You can still write a true “enterprise level” middle tier and even host them in their own application server, and do all of that with just a little extra planning.

One really great of example of Mono working as enterprise level product is imeem. Over at imeem, they run Linux and Mono on their applications servers and they deal with the massive amount of concurrent connections from all the client applications accessing the service at any given time. They are great example of how Mono is completely capable of being enterprise worthy. Some other great examples can be found in SecondLife’s use of Mono to power its scripting language and also with Novell’s iFolder solution.

About the time we release 2.0, I think we should rename Mono in the Mono 2.0 release to “Mono 2.0 Enterprise Edition” (or M2EE), just for fun. :-)

Life experiences

Tuesday, July 11th, 2006

It blows my mind. I’ve skipped so many steps in life.

I’m only one month shy of 22. Out of everything, the one thing that sucks the most about being a 22 year old software engineer is being 22. Many of my colleague are around twice my age or at least in their 30s. Anyone below 25 in my field is rare professionally speaking. Many of the people I work with have kids, houses, cars, etc. I’m just a kid really. It’s so much harder when I can’t rent a car and get carded everywhere I go. Can’t get a loan because I just haven’t been around long enough to build up any credit.

I’ve been in the job market programing since I was 14 years old even while going to high school at the same time (working summers and with work study programs for half my school days). That gives me 7 1/2 years of work experience and about 10 years general programming experience (was writing BASIC applications in Quick-Basic when I was 12) which is pretty much makes me a senior level developer in many companies. I’m not in to for the money so much as I like programing in general. That is to say the money isn’t to bad.

I’m always been a little overwhelmed with everything and because of that I’ve had to grow up extremely fast but always gotten by pretty well. I’ve have never once worked in any type of job that wasn’t tech related. Never once worked at a fast food place or bagging groceries or anything like that like almost everyone of my friends my age where doing. I didn’t even start driving (legally :-) ) until I was 20. Never needed to drive anywhere. I always managed without it. I even got by with my out of state expired drivers permit instead of real driver’s license. Never had to ware a tie more then past the interview most places ethier. Just never had to do it and I’ve worked at some pretty big places.

Working on and learning new engineering practices and methodologies and how they fit into software development, figuring out the complexities of how SOX compliance plays into IT these days, constantly figuring out how things work and why they are designed the way they are, and learning how to be mature and professional on a job site. That’s my teenage years in a nut shell. A young nerd trying to make it as software engineer.

However, more recently, I took some risks and now it looks like I might have made some bad choices. Funds are running dry waiting on paychecks. So long to the end of those contracts and getting paid. Way after I really need it. These long waiting periods that wouldn’t bother most of those 25 to 40 year old colleague of mine. Waiting for checks to clear, shiping and handling, mail delays, and holidays making things move slower and slower. I don’t have the luxury of credit cards and loans here so I have few options. Makes me feel like a kid. When I’m broke, I’m totally broke. Really I’m a victim of horrible timing and not enough planning for this scenario I guess so I’m having a really tough period personally. I’m trying to pull a few rabbits out of my hat to get by this month and hoping I get lucky and I hoping I get through this bad patch. This is one of the worst though. I’m hopping it will all work out ok.

I wish signing bonuses where more common place in software engineering jobs or there were venture capitalists that invested in individuals. :-) Oh well. Live and learn. Life experiences are fun :-)

Open Source Java

Saturday, July 1st, 2006

Not sure if this legit, but it looks as if Sun might be releasing a version of Java under an open source license in a few months. It would make sense. However I doubt if Sun would open up some of its process in the guiding and development of Java’s features. A lot is really hard to say right because a lot is license dependent. If they do something similar to Microsoft’s Roter, and its shared source license, then I don’t think this is even news worthy. However if they go for license that is GPL compatible, then they might have something. In the mean time, the world keeps spinning. So many other ways to get open source java and like the link says other projects are nearly 90% there already, so its a little late for Sun.