Showing posts with label nerdage. Show all posts
Showing posts with label nerdage. Show all posts

Monday, October 08, 2007

ALT.NET Conference Sessions: Architecture

I rummaged Technorati and looks like a lot of people already put up their summaries / impressions of the sessions at the ALT.NET Conference in Austin, TX. Here's some more about some of the sessions that I'm not seeing much discussion about: Architecture (Trends and Observations) The architecture chat started off a little sparse, but fattened up nicely fairly quickly. Aaron Armstrong was driving the conversation to see what people were seeing in architectures. There were a lot of familiar terms on the whiteboard (I can't really remember them all, did anyone write this down?) I stood up and talked about the Model-View-Presenter architecture of the WinForms application I'm working on at work (picture 1, picture 2). I have a post about it that I'm planning to turn into a series of posts with some code and stuff. There was some interest in the data binding work I was doing, too. I'll talk more about that later. The main point that I was trying to make was that you can have multiple Models that don't know anything about the Views and are tied together using the Presenters. You can have multiple Models aggregated (in whole or partially) into one or more Views. Aaron asked how someone would handle the scenario where you have a composite View in a WinForms application. The approach I would use would be to expose the different sub-Views on the composite View as properties and use an Inversion of Control framework to tie it all together. In the application I'm working on, I'm using Spring.NET to tie everything together (coincidentally, Mark Pollack was in the back of the room). My property data binding would then keep everything in sync. The conversation then moved to more distributed architectures and web-related systems. There was some mention of the technique of using commodity hardware and/or software to create cheaply replaceable systems. On a similar note, Amazon released a white paper (papers?) on "Dynamo", their network architecture. It is designed with the simple fact that hardware will fail and needs to be easily (and cheaply) replaceable. We also talked about Service-Oriented Architecture and what to do about data. Some people feel compelled to integrate all the databases and data sources into one unified database. This leads to some friction as the different functions of the system move forward. When the data stores are properly separated, then the needs of the different applications (or services) can be met without affecting other applications (or services) that may be using the same data store. Everyone agreed that the database should not be used as an integration tool. Someone (I forget who) also explained the idea of thinking of the data flowing through the distributed system as a "document" instead of just messages going back and forth. We also talked a little about how to have a good architecture while still doing agile development. Agile development is against "Big Design Up Front", but sometimes you will need to have a vision and an architecture to scale properly. The main idea is to keep the architecture simple at first, get the project working, then make refinements as needed. Don't optimize too early, otherwise you may end up debugging strange issues that would not have risen from a simpler design. Also, you can more easily optimize when you start from a simple design and you can do small steps at a time to keep the system stable as you try to improve performance. That's all I can remember off the top of my head. I'm sure others will fill in the gaps and make corrections. All in all, it was a very interesting talk. Software Architecture is one of the subjects that I am very interested in and I found it very invigorating to hear from others and their thoughts on architecture.

ALT.NET Conference Sessions: DSL

I rummaged Technorati and looks like a lot of people already put up their summaries / impressions of the sessions at the ALT.NET Conference in Austin, TX. Here's some more about some of the sessions that I'm not seeing much discussion about: Domain-Specific Languages for Business Users / Developers The DSL talk started off a little rough (the organizer wasn't there), but Arafat Mohamed stepped up and started the conversation. Just about everyone in the room was there to learn about DSLs and were not really using them in their projects. We talked about what we thought a DSL really was. It seems that just about anything can be a DSL (depending on how specific you are to what domain). According to Martin Fowler, "a domain-specific language is a veneer over an API" (I think that's the verbage he used). He differentiates between an internal DSL (one that is consumed by developers) versus an external DSL (one that is consumed by the users). Martin Fowler has some more information on his website. There is also some information on Wikipedia. One of the primary applications for DSLs that I can think of is a business rules engine. For example, you have a cell phone provider who has complex billing semantics and wants to be able to add new rules easily. There are a lot of concerns with this, however. Developers may not want the analysts modifying the behavior of the system as they may not be as disciplined. On the flip side, managers want the analysts to do the work to keep the developer freed up. It is a delicate balance that can only really be helped by properly training the analysts so that they know the proper practices. You can also avoid problems by creating the proper tooling. Going to the more practical side... Scott Guthrie pointed out that IL had some pragmas that could be used to give the debugger hints on what the original source file was and what line of that source file corresponds to the generated code. He said that they used this mechanism for debugging the generated code from XAML, XOML and the other declarative constructs. You could also use Boo as a meta-language to construct your DSL. In theory, Visual Studio should be able to debug Boo since Boo compiled to IL and _should_ have the line numbers and source file information embedded in the PDB files. (in theory). Boo is also the source of Boobs (the build system with an oral fixation) and Binsor. Oren (Ayende) has a lot of posts regarding Boo. Also, if you want good IDE support for Boo, look at SharpDevelop. If you need to develop your own language from scratch, Antlr seems to be the way to go. The people in the room who had used it said it was better than the old-school lexx / yacc approach. There are a lot of concerns though in creating a DSL in that you would have to maintain it and train everyone how to use it. This reminds me of two things: 1) Wasabi, the language created by Joel Spolsky for FogBugz (linky) 2) The MUMPS System (linky) In both cases, developers will basically have a bunch of work that they can't really put on their resume because their expertise is in an in-house language. A DSL may create the same sort of situation. Also, whoever develops the DSL will be the authority on it and if he/she decides to leave the company without properly documenting it, the DSL will be useless. At the end of the session, I think everyone got a good feel for the positives and negatives of creating and using domain-specific languages. I learned that I would need to think long and hard before considering implementing a DSL and that there are a lot of solutions (Boo, Ruby, scripting) that would require a lot less work up front and would provide fellow developers with some take-aways. Another summary on the DSL session: David Woods

Saturday, February 24, 2007

Linux Love

A while back I posted about my Gentoo Linux Laptop. It served me well, but it was becoming a hassle keeping it up to date. I was checking for updates like daily and then watching all the updates compile. It was an addiction. I found myself visiting http://packages.gentoo.org several times a day to see what new stuff was out, then I would curse myself for not being able to remotely SSH into the box to do upgrades. I'm admitting that I have a problem, and that I have addressed it. I wiped my Linux partition on the laptop and installed Ubuntu 6.10 (Edgy). The update process only includes necessary security / bugfix updates (not full system upgrades). The release process is every 6 months, so I can expect a full system upgrade every 6 months. That's manageable. Plus, all the updates are binary so they'll just install smoothly. Someone else has already done all the footwork for me. THIS is what Linux is all about, making life easy. However, don't get me wrong, I'm still a big Gentoo fan, but just not for my primary laptop that has a Pentium M 1.7GHz with 512MB RAM. It's not a beast, but does the job. Compiling stuff takes time and I don't want to have to deal with it. My desktop, on the other hand, is (well, was) a beast. Now it is slowly becoming obsolete. I need to replace it with a sexy Core 2 Duo system. Mmmmmm.... tasty. But that will have to wait. Right now I don't really use it all that much, favoring the laptop for day-to-day stuff. I don't do much independent development either. Plus, the northbridge and GPU fans are crapping out on me and I need to replace (or supplement) them. I think I should put the graphics card (Radeon 9800 All-In-Wonder) in my brother's desktop and then sell the motherboard (dead NIC, messed up NB fan), and processor (2.4GHz with a big-ass heat-sink and fan) on eBay or something. Speaking of Linux love, my girlfriend is teasing me with thoughts of putting together a Linux-based multimedia system for streaming Chinese soap operas into the living room. That's hot.

Tuesday, August 15, 2006

Yikes, it's been a while

Hmm, it's been a while... it seems that life has gotten in the way of me updating my blog. No matter. Things are going very well according to plan. I'm starting working on my MBA (at the University of Houston, GO COOGS!) next week. (YAY!) Aaaaand... work is really great. I got back from the Dr. Dobbs Journal Architecture and Design World (learned a lot and met some interesting people). Umm... other than that, things are pretty much going steady and nice. My laptop battery (Dell 600m) is one of the recalled ones (kinda makes sense, the side of the computer where the battery is heats up a bit). Still, Dell is making it super easy, just type in your battery serial number, then fill in your address info and "voila" you will have your new battery (and instructions on disposing of your old one) within 20 days (ish). We'll see how long it REALLY takes. I'm finally starting to use Visual Studio 2005 (good grief, it's about time!). I wish Microsoft would hurry up and release their SP1 patches for Visual Studio 2003 and 2005. I'm also starting to learn more about web services and such. Very interesting. Oh, my abstract was accepted for the Baker Hughes Technology Forum 2006! Party on! I'm going to talk about how Inversion of Control can streamline the build / debug / test process. I'm also going to give a presentation for my group about all the goodies I learned at the Dr. Dobb's AD World thingy. I went to my last HDNUG (www.hdnug.org) (Houston Dot Net Users Group) meeting that I'll be able to attend for a while. I won a book (Test Driven Development (the NUnit book)), and a Best Buy gift card (shweeeeet). TDD is very interesting, I need to finish that book and send the HDNUGgers a review. I really want to start an independent project (been wanting to for a loooong whiles now). I'm thinking either an email-based game engine or perhaps a good subversion (subversion.tigris.org) client for GNOME. Not sure yet. Both would be fun projects. The former would be a .NET 2.o project using Windows Forms (or GTK#) and the latter would be GTK+ and C/C++. Oooooh... tasty. But... alas. School will take up a lot of my time I believe (and I really want to make sure I have enough time to get back into running). At one time, I was able to run almost 3 miles straight... I need to work back up to that. I've been going to the gym on a very regular basis now so far this year. I need to get my run on Tuesdays and Thursdays so I can keep up the burn. My goal of being under 200 lbs by end of the year doesn't seem like its going to happen. But hey, my clothes all fit better and I can wear some brand size 34 jeans, so that's a huge step in the right direction. In Nerdage news... I'm toying with the idea of upgrading my computer to the behemoth gaming machine worthy of an uber-nerd. Mmmmm.... silicon wafery goodness. Vee shall see how that little plan goes... Ah... hopefully I'll be keeping up with this blog more. It is very refreshing being able to dump my brain out here for my own posterity.

Sunday, February 19, 2006

Fun at Work

I've been having some crazy fun at work! Our project is progressing very well and I've added some really sexy features to it. I found that I enjoy writing tools / scripts for developers more than writing applications for customers. (Unfortunately, the latter are more prone to paying for software than the former) ',;-) I am the resident build-master in my department. I manage the build scripts and make sure that people don't check in stuff that breaks the build. I could call myself a "Build Nazi", but that may carry the wrong connotation. I think of myself more like the "Soup Nazi", but with software builds instead of jambalaya. What is this commit? Huh? NO BUILD FOR YOU! Heh heh heh...
Yea, so. Fun at work. I think it's very important to have fun at work irregardless (not a real word) of anything. My modus operandi is that if I'm not having fun at work at the moment, I need to get up, walk around, and go bug some of my coworkers. After all, what good is having coworkers if you don't go bother them everyone once in a while to let them know you're still around.
I know there's some nerdage in this post somewhere... heh. Oh yea, the software I'm working on! Great stuff. I wrote a GUI framework a whiles back for this application and I'm finally getting some integration work done to pull pieces into it. Basically, you start with a skeleton application that has some menus predefined, a toolbar, a sidebar, and a main work area. You can define plugins via .xml files that exist in the distribution tree. These files are pulled in automatically when the application starts. I've been using Spring (for .NET) [linky: http://www.springframework.net]. They still have some bugs in there, but it's coming along really well. I think I had a post about it before... [linky]. Anyhoo, Spring is an "Inversion of Control" or "Dependency Injection" container. You describe objects in xml files and how to instantiate them. Each object may require other objects in the container to be set in the constructor or via properties (this determines the instantiation order). Check out the website, they have links to some articles regarding the topic. I may even write a paper or something about my GUI framework... oooh... great idea. So yea, the nerdage part of this is that you can drop new pieces into the application by dropping a folder into any subfolder of the application and then restarting the application. It will automagically pull in the new pieces and fire up the application. My boss liked it, I did a short demo where I pulled in a few pieces and showed how they were in the app, then deleted a folder, restarted the app and showed that the features were missing. So, the great part is that when I do a "debug" build, it will pull in all our testing plugins that test the individual controls or features as well as the whole application. When we want to do a "release" build, it won't pull those folders in. If we wanted to update a feature, we could just remove the folder and put the new one in. If we wanted to add a new feature, all we do is push the folder into the filesystem. Sexy! My job satisfaction has been skyrocketing these last two weeks. I owe it to my overdue vacation in California. (Nice place to visit, but I wouldn't live there unless I got some crazy crazy job offer or something I couldn't pass up). I couldn't move there though... I would miss my family and my girlfriend. I dunno what it was, but after I got back from my vacation, my fingers had a mind of their own (don't think dirty thoughts, I'm talking about typing). I think I'm going to need a new keyboard soon... my old one at work is a biohazard area. I've spilled coffee, orange juice (both from an orange and from a bottle), milk, water, and random bits of food on it. It contains 2.5 years of hair, flecks of skin and boogers. I'm not afraid to admit that when I'm deep in thought, I pick my nose (I'm trying to pick my brain, but haven't been quite able to reach it). I have hairy hands and they like to shed. Back to job satisfaction... Yea. We have a really small group (4 developers) so I get a lot of freedom when it comes to what tools to use and I have a say in how the project goes programming-wise (15%... the manager has more pull than me, go figure). All this work on the build script and integrating into my GUI framework have been very invigorating. There's some thing beautiful about pulling a source tree, running one command, then firing up a working application. Mmmm... hotness. This high should last until mid to late June, at which time I hope to start up another high (with a new project). Ahhhh.... yummy.

Friday, January 27, 2006

Email Clients... revenge of the suck!

Waaaaaaaaah... ok. I'm really frustrated with email clients right now on Windows. On Linux, I use Evolution (which is not perfect, but close). On Windows, I don't use an email client, but my mom does. She needs an email program that's easy to use and also a calendar application. Outlook 2000 She used to use Outlook 2000, but she had a lot of problems with spam. Outlook 2000 has a really stupid spam filter that just filters the sender (which is totally ineffective since spammers swap out their from addresses frequently). Outlook 2000 also has some inherent problems in how it deals with messages. If you get an email with images that are pulled from the internet, it will automatically display those images (suck!). If there are hyperlinks in a message, there is no way to see where they point until you click them (suck!). When you are composing a message and you want to select addressees, there is no clear way as to how it generates the autocompletion list. I have yet to figure it out. SUCK! Yea... Roadrunner email We have roadrunner and I set my mom up with a roadrunner email address a long while ago. Back then, GMail didn't exist and Yahoo had a really cruddy interface. What I wanted to do was let her use Outlook which she was used to using. Little did I know the entire valley of suck that awaited my mom in that email account. No spam filtering, 20 MB limit, an absolutely excremental webmail interface. Boo. So, many spam messages later, I decided to try and be creative. I got her a GMail account (which is great, by the way) and set up roadrunner to forward all mail to GMail, then set up Outlook to pull messages from GMail. Yay, it was working great! Except... in a few days, her roadrunner mailbox filled up and started bouncing messages. Apparently, roadrunner email doesn't believe in deleting messages that it forwards (even though EVERY other email service will remove / archive / trash messages that are auto-forwarded to another email account. SUCK! So, that idea was shot down... which leads me to...... Thunderbird Mozilla Thunderbird is hotness. 1.5 RC1 was out and I installed that. It was updated to RC2 and that becamse the final 1.5. Great, party down. Thunderbird has integrated spam filtering, a sane address book, a sane message composition system, and a nice simple interface. It detects phishing, doesn't automatically show internet images, deals with attachments in a totally sexy way. Thunderbird is great. Except... when it comes to dealing with messages sent from Outlook. Most of the people who send my mom mail (or at least the source of the chain mail, jokes, funny attachments, whatever) use Outlook (2000, 2002 or 2003). Outlook viciously mangles messages when they get forwarded by everyone. The HTML messages get totally messed up with the tables in tables in div's in tables in div's in whatever. Clicking "forward" makes Thunderbird cry. Sometimes, when Outlook forwards an inline image, it doesn't show up in other email clients. Also, when you try to forward an email with an inline image in Thunderbird, it doesn't send the image along. For some reason, the IMG tag has a "moz-do-not-send=true" attribute which tells Thunderbird to not send the image (even though I told Thunderbird to always send images instead of just linking them). Hmm. Apparently this is a known bug in Thunderbird and will be fixed in mid-February when 1.5.0.1 is released. Hmm... waiting sucks, and I don't want to subject my mom to nightly builds that may cause her to grumble curses in my general direction. Also, Thunderbird doesn't have a built-in calendar (yet) that works well. Sunbird is still a ways off (still very unstable). Mozilla Lightning (Thunderbird + Sunbird) is something I'm really looking forward to. But... alas, I needed a calendar too... which leads me to.... Outlook 2003 I decided to bite the bullet and put Outlook 2003 on my mom's computer. Installation was easy (a few hundred megs for an email client does sound a bit excessive, though). It has email, calendar, tasks, the works. Sounds good. However... I quickly realized that Outlook 2003 is not a big jump from Outlook 2000. It had a few of the nasties fixed such as blocking messages from the internet and showing hyperlink destinations. But... without installing Microsoft Word, the email composition is dismal. Entering addressees sucks as bad as in Outlook 2000. In fact, it is exactly the same. The whole application looks like a patchwork. There are pieces that look new and flashy, and there are a lot of pieces that look like they were left in there from Outlook 2000. Suck. Suck. Suck. I was thoroughly unimpressed. Suck. It has a few nice features in the email component, but nothing that Thunderbird didn't do (except for dealing with messages sent from Outlook well). On the bright side, my mom is now able to forward all the messages she wants without incident. She also has a decent calendar app that she can use to set reminders and stuff. But... she's stuck with a substandard spam filter and a clunky interface. She got used to Thunderbird's hotness and going to Outlook is like jumping 6 years into the past. Suck. Chances are that we'll put Thunderbird back on there sooner or later... then I'll be happy again. Or, we can wait until Evolution gets ported to Win32 and she'll have the hotness of Evolution (with calendaring as well). It will be a happy day for me when I can share the hotness of Evolution with the Win32ers. I don't know why this whole episode got me all worked up... I guess it's just that I get so frustrated with bad software. I'm a bit of a selective perfectionist when it comes to software, you could say. ',;-) />

Sunday, January 08, 2006

Gentoo Linux Laptop

Yay! My new laptop is in and it's HOT! I spent the last 24+ hours (awake and asleep) setting it all up. Now it is built up and stable, party on! I'm running Gentoo Linux built from Stage 3, but I had to rebuild everything because GCC 3.3 was on the LiveCD but it doesn't support a Pentium M architecture directly. I had to build stuff with GCC 3.3 to get it to boot on its own, then I upgraded to GCC 3.4 and rebuilt everything with the proper optimizations. It runs like a dream! I'll post some screenshots later...

Monday, January 02, 2006

Back to work...

Well, the holidays are officially over, time to get back to the daily grind. I'm looking forward to it, actually. That means I'll have more nerdy things to report on! (When I'm home, I try to nerd out as much as possible, but the holidays are usually very busy with non-nerdy things) ',;-) Right now at work I'm working on a GUI framework based on the Spring Framework for .NET (http://www.springframework.net). It's an "Inversion of Control" (IoC) container that is a port of the same framework for java (which seems to be popular). It allows us to develop software in parallel and forces us to take a component-oriented approach to development. I'll post some more juicy bits about it later, right now I need to get to bed because I'll be waking up at 4:30am tomorrow... gnight!