Since I've been using Linux, I find it painful to use the old cmd shell in Windows anymore. I've been using Windows for years, but never really got excited about the command line. When I made the switch to Unix, the command line became fun for me. I had full blown access to my computer using nothing but my keyboard. More impressively, I had full blown access to other (*nix) computers using nothing but my keyboard as well... all within the same terminal shell.
To me, it feels as though Unix made the command line it's foremost tool. Anything and everything can be done from the command line. In many cases, I've heard that many of the Unix applications actually interface with the kernel using command line calls to the various shell apps. Whereas, I feel that Microsoft really focused on giving most of it's power through various forms and dialogs. Most anything can be done inside the cmd prompt, I'm sure, but most of the functionality is taught and shared through the various user interface applications. Don't get me wrong!! There is great power there and it's very useful for most people! Hell, it's what I got started on; I respect my roots. :)
I never really appreciated the command line until I got my Mac. My buddy, Ben, showed me how much power Mac's have using nothing more than Terminal.app. All the sudden it became fun for me. I could open my Terminal app and punch in basic commands to make my computer do things. It was like programming my computer without using an IDE. It was very different from anything I was used to in Windows. Once the commands became natural to me, I began plugging them together using pipelines and so forth. At some point it all clicked and I realized how powerful the command line really was. The more I used it, the more I found myself customizing it to fit my needs. I could change colors, change my prompt, change the way I edited the command line, and so forth. I have all kinds of aliases defined that do some pretty sophisticated stuff with a few keystrokes.
What are my options for command line goodness on Windows though?
PuTTY is an old school terminal emulator for Windows. This tool is used more for logging into other computers though. It's not really intended for managing your local client machine. I'm sure there are ways to make it work this way, but it's not a good replacement for cmd in my opinion. This applications is how I was first introduced to Linux and SSH; it gave me a bad taste for Linux right away.
Console is a replacement for cmd, and I've not yet downloaded it. It sounds to me like it is more of a shell consolidator. Basically, it allows you to choose any shell that you want using a tabbed interface. So in "programming terms" it's more of a composite shell. :) This doesn't give me my Unix tool set though with all the customizations that I'm used to in Unix though... Again, I need to look into this more, but it's what I've gathered from my (minimal) research.
Cygwin is a set of tools that sit inside of the Windows cmd terminal (if I understand correctly). It allows you to manage your computer using all the same application names (ls, pwd, cd, etc..) but this isn't really a full blown replacement for bash; rather a set of tools that mask the cmd terminal with Unix like tools IMO. I'd much rather have a full blown version of the Bourne Again SHell sitting inside Windows 7 instead.
Along comes Git Bash for Windows.
When I installed msysgit, (the Git binaries for Windows), it came with a "Git Bash" shell. At first I thought it was another version for the PuTTY terminal emulator. However, the more I use it the more I realized that it's the real deal. It is (almost) exactly like having a Unix Bash Shell inside Windows finally. I use it for everything now. I open it up when I sit down to work and it stays open until I close my laptop. Best yet, I can secure shell into my *nix VM's and manage them remotely from Windows now. I no longer have to open up PuTTY to login to my VM's. I can grep, find, pipe, less, generate ssh keys, you name it. I can even customize the shell with a .bashrc file. For example, my command line editor is configured to use vim keybindings (ie. set -o vi)... IN WINDOWS!! It's great!
The one thing I can't do with this shell is sudo commands with administrative privileged. However, that's more of a Windows vs. Linux thing, rather than a bash shell feature. To get around this, I simply have to open another Bash shell "As Administrator" and perform my operations inside that shell. I don't mind this trade off.
By far, my favorite feature of having a bash shell in Windows is that I have full vi (pronounced "vee eye") editing capabilities on any text file. I'm finding it harder and harder to live without this single feature.
There you have it... Check it out. Git Bash for Windows is the cats pajamas.
Random posts about trail running, computing, family-ing, thinking, and whatever else I choose to say.
Showing posts with label unix. Show all posts
Showing posts with label unix. Show all posts
Tuesday, March 27, 2012
Sunday, March 25, 2012
Hosting My Own Websites From Home
Last December, I purchased a handful of servers, along with some switches and a 7 ft tall rack to house them all off of a buddy. A month later, I got them setup at another buddies office, but after a few delays and realizations, I decided to bring them back home and set them up in my own house.
Doing this presented some challenges in regards to everything that comes with hosting your own servers in your own house. For example, the servers require a dedicated 220 service. Not only that, but I needed to put the servers in a place where they will stay dry and cool. Oh did I mention, the servers are loud as hell? Like "jet engine" loud... Lastly, in order for them to be useful, I needed to have my own dedicated static IP address running to the house. This one was the big one; it required that I switch from one ISP to another! With this change came a new TV service and everything. Yes, I'm committed to my goal of hosting my own sites. :)
Another big obstacle that I have yet to hurdle is that there is (currently) no place in our house that is ideal for setting these servers up that is dry / cool / sound proof. Given all of these factors, I've decided to shelve them for a few months and figure out a plan this summer to get a sound-proof room built with it's own thermostat in the garage with it's own 220 service (more on that in a later post).
In the meantime, I've configured my old development machine to be my web full time webserver; it's working great so far. The server is an old 4gb RAM / 64bit AMD box with a 160gb HD. I've wiped it clean and installed Ubuntu Server on it with OpenSSH and a simple LAMP configuration. I installed Git and configured Gitosis so that I can easily manage new code repositories from anywhere without ever logging in and configuring users and directories. The site is currently only hosting one Ruby on Rails site so far (which isn't online yet). Once I get everything ticking like clock work, I will host a slew of websites. Some for friends and family, but some for profit of course.
Everything has been pretty strait forward so far. The hardest part for me has been configuring the static IP. In the last 12 hours, I've spent 8 (solid) hours trying to get my network configured correctly. I've been through books, websites, Unix man pages, and a few shot-in-the-dark attempts. All that, and I'm still not online with it. It's amazing that I've made it as far as I have in the computer industry without fully understanding NAT, DHCP, DNS, and "Port Forwarding". I've learned more about these terms in one day than I have in the last 12 years, I still have quite a bit to learn too...
For now, Jennifer is just happy to have her internet back up. :) Tomorrow, I plan to call my ISP and have them walk me though it once and for all.
Doing this presented some challenges in regards to everything that comes with hosting your own servers in your own house. For example, the servers require a dedicated 220 service. Not only that, but I needed to put the servers in a place where they will stay dry and cool. Oh did I mention, the servers are loud as hell? Like "jet engine" loud... Lastly, in order for them to be useful, I needed to have my own dedicated static IP address running to the house. This one was the big one; it required that I switch from one ISP to another! With this change came a new TV service and everything. Yes, I'm committed to my goal of hosting my own sites. :)
Another big obstacle that I have yet to hurdle is that there is (currently) no place in our house that is ideal for setting these servers up that is dry / cool / sound proof. Given all of these factors, I've decided to shelve them for a few months and figure out a plan this summer to get a sound-proof room built with it's own thermostat in the garage with it's own 220 service (more on that in a later post).
In the meantime, I've configured my old development machine to be my web full time webserver; it's working great so far. The server is an old 4gb RAM / 64bit AMD box with a 160gb HD. I've wiped it clean and installed Ubuntu Server on it with OpenSSH and a simple LAMP configuration. I installed Git and configured Gitosis so that I can easily manage new code repositories from anywhere without ever logging in and configuring users and directories. The site is currently only hosting one Ruby on Rails site so far (which isn't online yet). Once I get everything ticking like clock work, I will host a slew of websites. Some for friends and family, but some for profit of course.
Everything has been pretty strait forward so far. The hardest part for me has been configuring the static IP. In the last 12 hours, I've spent 8 (solid) hours trying to get my network configured correctly. I've been through books, websites, Unix man pages, and a few shot-in-the-dark attempts. All that, and I'm still not online with it. It's amazing that I've made it as far as I have in the computer industry without fully understanding NAT, DHCP, DNS, and "Port Forwarding". I've learned more about these terms in one day than I have in the last 12 years, I still have quite a bit to learn too...
For now, Jennifer is just happy to have her internet back up. :) Tomorrow, I plan to call my ISP and have them walk me though it once and for all.
Tuesday, January 31, 2012
Regular Expressions vs. Legacy String Functions
Back in the day of Visual Basic 6, when you wanted to find some information from a long string, you were (almost) required to write a function that parses your string section by section and use switches or if blocks. In today's world, regular expressions lighten the load quite a bit. As I've been developing apps over the years, I've learned to love regular expressions and figured it was worth mentioning in a post.
Regular expressions are basically patterns that have their own parsing engine tied to them for stripping text-based information from a string of text. For example, say I want to strip a certain value from a nasty looking string, and I know that the string will be in a certain "format". By this I mean that there might be parts of the string that don't change, but the parts that do change, I want to use them for something else. Instead of cracking my knuckles and writing a loop to sift through the string character by character, I'm able to write an single expression to strip out "matches" one by one.
Consider the following connection string:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\data.xls;Extended Properties="Excel 8.0;HDR=YES";
From this string, I want to be able to pull out the value of 'Data Source' (in this case c:\data.xls) and the value of 'HDR' (ie. YES or NO). Back in the day, I would write a few lines of code to Split() the string into pieces and then strip those pieces into shorter pieces and save them into variables. Something like this:
Dim filePath As String
Dim hasHeader As Boolean
Dim sections() As String
sections = Split(connectionString, ";")
For Each section As String In sections
Dim pieces() as String
pieces = Split(section, "=")
If pieces(0) = "Data Source" Then
filePath = pieces(1)
Else
If pieces(0) = "Extended Properties" Then
Dim properties() As String
properties = Split(pieces(1), ";")
For Each prop As String in properties
Dim values() As String
values = Split(prop, "=")
If values(0) = "HDR" Then
hasHeader = CBool(values(1) = "YES")
End If
Next
End If
End If
Next
This might be over many peoples heads and it might be common knowledge for others. For me, it was way over my head for a few years. However, after using it so much and relying on it, it's become common knowledge; it is baked into my daily routines now. Regular expressions are a very common thing inside Vim, and many Unix command line programs. For example, if I were to paste the connection string into Vim, I could place my cursor at the beginning of the connection string and simply type "d/Data Source" and the entire string from "provider" all the way up to "Data Source" is removed.
Regular expressions are basically patterns that have their own parsing engine tied to them for stripping text-based information from a string of text. For example, say I want to strip a certain value from a nasty looking string, and I know that the string will be in a certain "format". By this I mean that there might be parts of the string that don't change, but the parts that do change, I want to use them for something else. Instead of cracking my knuckles and writing a loop to sift through the string character by character, I'm able to write an single expression to strip out "matches" one by one.
Consider the following connection string:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\data.xls;Extended Properties="Excel 8.0;HDR=YES";
From this string, I want to be able to pull out the value of 'Data Source' (in this case c:\data.xls) and the value of 'HDR' (ie. YES or NO). Back in the day, I would write a few lines of code to Split() the string into pieces and then strip those pieces into shorter pieces and save them into variables. Something like this:
Dim filePath As String
Dim hasHeader As Boolean
Dim sections() As String
sections = Split(connectionString, ";")
For Each section As String In sections
Dim pieces() as String
pieces = Split(section, "=")
If pieces(0) = "Data Source" Then
filePath = pieces(1)
Else
If pieces(0) = "Extended Properties" Then
Dim properties() As String
properties = Split(pieces(1), ";")
For Each prop As String in properties
Dim values() As String
values = Split(prop, "=")
If values(0) = "HDR" Then
hasHeader = CBool(values(1) = "YES")
End If
Next
End If
End If
Next
Look at all of that code!? Just to get two values from a single string. I used to write code like this in VB6 all the time. There are lots of assumptions in that code and it is not optimized at all, let alone understandable at first site. There are many chances for errors to happen in that code as well... Not fun.
Regular Expressions to the Rescue
When .NET was introduced, there was this new (to me) concept of regular expressions that allowed pieces to be picked out of the string as needed using a "pattern". This is very common in Unix and many other programming languages, but it was new to me at the time and intimidated me. It was one more thing I had to learn. I used to approach it with dread and felt like I had to relearn the syntax every time I used it.
Today, I actually think in regular expressions a lot of time. There are many special characters that allow the regular expression engine to understand certain functions. For example a "$" means "beginning of string". A "." means any character. A "+" means "one or more times". A "*" means "zero or more times". When you put these special characters together, you can do some very powerful things. There is all kinds of documentation on the internet to help you understand this language if you are interested. If you are new to computer programming, then I recommend that you learn this sooner than later. It will make your life much easier.
To get the values from the above connection string using regular expressions, it requires a very simple regular expression pattern:
provider\=microsoft\..+?\.oledb\..+;Data\sSource\=(?.*)\;Extended\sProperties\=\"".+\;HDR\=(?.+)\;\""
Once I've defined this pattern, I can use it to strip out the "filename" and "hasheader" values very quickly and efficiently. While this example is border-line elementary, consider stripping values from a 20kb Xml file or a huge Html string that you stripped from a web page. Better yet, consider the power that it offers you when parsing a 5mb log file for information.
This might be over many peoples heads and it might be common knowledge for others. For me, it was way over my head for a few years. However, after using it so much and relying on it, it's become common knowledge; it is baked into my daily routines now. Regular expressions are a very common thing inside Vim, and many Unix command line programs. For example, if I were to paste the connection string into Vim, I could place my cursor at the beginning of the connection string and simply type "d/Data Source
Here is a killer utility application that you should put on your thumb drive and use if you need to parse a large text file for values: http://regexlab.codeplex.com/
It's free, and I've found it to be very very powerful when constructing complex regular expressions in my daily programming tasks.
Regular expressions. Learn them. Use them.
Sunday, January 16, 2011
CodeMash v2.0.1.1 (Recap)
As I mentioned in my last post, Codemash is a top notch event.
Live Concert on Wednesday NightWednesday night ended rather perfectly actually. After the Pre-Compiler sessions, Chris Castle and The Womack Family Band showed up to rock out the attendee party in the grand hall area. These guys were awesome! I purchased a CD of the Womack Family Band after their set, and purchased Chris Castle's CD directly off of iTunes. They had a great sound, and best of all they were fairly local (Norwalk, Ohio).
I got to talk with a lot of people at the party, and Jennifer came to join me after she got the girls out of the water park. We had a great time and she got to see me in my element (true geek talk). I ran into a few people and we would just start talking about programming languages and different technologies. She was a sport and stood by my side with a smile the entire time. :) After the attendee party, we walked around and ended up sitting at the bar for another hour before calling it a night.
Chad Fowler KeynoteThat next morning, the alarm went off fairly early for me and I was out the door for breakfast around 7:30 am. Chad Fowler was the keynote speaker this morning and he did an AWESOME job. He talked about what defined "quality" in code and showed lots of different examples. One story that caught my attention was a discussion about a chunk of code that he looked at and thought it was horrible, but then later discovered that the code has not been touched in 20+ years and was still working... That little story gave me a whole new definition for "code quality".
Kids Programming - Aydin Acksu
After the keynote, I attended a session by my good buddy Aydin Acksu, titled "Kids Programming". Of course, my girls all met me there for it and they got to control me around a grid using commands: step, step, right, step, left, step, etc.. This taught them how how computer programs worked. Once they ran the the commands once, they would navigate Aydin back through the course to "test" the program, and then they "edited" the errors out to make it faster, and "tested" it again, etc... Basically everything a programmer does with a keyboard and a debugger. It was really cool how he approached the talk and all the kids in the class had a blast!
Rails A to Z - Matt Yoho
After that session I attended Rails A to Z by Matt Yoho (from EdgeCase). I learned quite a bit at this session and was amazed at how little code is required to make a Rails app. With about 10 lines of Ruby code, a user can connect to a database (build its schema), add records, and then disconnect (and destroy the table). This would take about 50 - 100 lines of c# code. Wow! Matt did a great job and he had my undivided attention for the entire hour.
WebMatrix 1.0 Product Launch - Josh Holmes
For lunch, we got to see WebMatrix 1.0 be launched to the world along with a lot of other amazing technologies (details). Codemash ain't no joke no more. This event has had all kinds of top notch speakers, and this year Microsoft had live streaming video from the conference to developers all over the world about this long awaited product launch. Congratulations to Codemash organizers for outdoing themselves each year. See Scott Guthrie's blog post for a list of everything that was announced today.
After the keynote, I skipped the next sessions, as there was nothing being presented that sparked my interest. I used this time to get in a quick run and workout in before the rest of the evening got ahead of me. I actually met a guy in the gym (ironically named Jim), who is close friends Mark Goodale (a local ultra-marathon hero). What a small world! We talked for about 30 minutes while we ran on treadmills next to each other.
Top Ten Tips for Moving from WinForms to WPF - Michael EatonThis session was pretty informative. Michael broke down all the differences between WinForms and WPF. I actually dabbled in WPF for a few weeks last month and got so frustrated with it. It was such a paradigm shift from everything I'd ever learned about windows application development. Buttons with click events and coordinates get's thrown out the window. Now developers use DataBinding to UIElements on various types of LayoutPanels through MVVM... Yeah!? Anyway, Michael's session confirmed that it wasn't just me. :) He gave some tips and suggested some 3rd party tools to help ease the pains. Great talk!
A Modern Open Source Development Environment - Gary BernhardtThis session was one that I was REALLY looking forward to even days before the conference. Gary uses terminal app and Vi as his development environment. This is what would eventually like to do as well so that I don't rely so much on VS2010.
Unfortunately the session was more about him showcasing how fast he types and navigates through different commands inside terminal. He didn't really focus on useful tips for users to do the same. It kind of turned into a "look what I can do" session, as opposed to a "here's how I do it" session. Don't get me wrong, I did learn something; I learned that I need to just bite the bullet and use vi exclusively outside of my day job. All in all, nothing very "constructive" came from this session (for me). He moved too fast, and assumed everybody in the session was familiar with Vi, Pyton, shell scripting, Git, and zsh.
He did answer a lot of questions about how he got so fast, but again he didn't explain anything with hard examples. It was mostly just pre-recorded videos of him typing in vi while he commented about his typos in real time, and then summed up the video with a benchmark. It wasn't what I thought it was going to be... :( I'm still a Gary fan though, and will continue to follow his blog: http://blog.extracheese.org/
Ford Fusion Keynote - Tj GiulliFor dinner, we all got to hear a developer from Ford talk about some of the new technologies that they are putting in cars, and it was pretty cool. Tj showed some of the new GUI's for the upcoming nav screens. He showed how traveling with a group of other drivers can be more "interactive" in that each car can talk to one another to know how low they are on fuel. Lots of other cool stuff was in here too, where the car could actually tweet it's status at any point along the route (ie. "Pulled into Taco Bell" or "I need fuel soon"). Pretty cool stuff really. Best yet, there was an API that was available to allow developers to tap into the engine and interface with it. However, I must admit that the API was a bit kludgy with their use of multiple yield keywords inside of a single void method. (?)
Cocktail Party, Jam Session, & Water Park Party
This is where it got fun! We all got to loosen up and mingle for the rest of the night. My good buddy, Greg Malcolm helped me setup my drums this year for the jam session. We had quite a turn out this year. Best of all Chris Castle and The Womack Family Band came back to the Kalahari to jam with us. They brought their gear back with them too. Of course, Carl was there and he's always a great entertainer. Again, we had quite a little crowd gathered up at a few points. There are a few videos on YouTube that showcase some of the shenanigans. :)
After the Jam session, Jennifer came to retrieve me so that we could all go to the water park and swim. The girls were so excited that I got to go with them and we had a blast!! We played water basketball, we hung out in the wave pool, and just relaxed and had a great time. After the water park, we split out separate ways and I went back to the grand hall to gather my drumset. As it turned out, I sat down and talked with Carl and Richard for a while on a couch and then we all headed back to the water park to mingle with other devs and get some drinks. There I met Justin Etheredge, and we talked for about 30 minutes about Ruby on Rails, and various javascript utilities that we used.
I didn't get back to the room til about 1 am.
Developing High Performance Web Applications with Javascript - Timothy FisherWell... I wanted to go to this, but couldn't. :( I slept in and rushed down to the breakfast area with moments to spare, then had to turn around and head back up to the room to get it back in order. Checkout was at 11 am and there was a LOT to do. Jennifer and I got it all done around 10:45 am. I kissed them all good bye and headed back down to the sessions... Jennifer was going to get some candy from the candy hut and then make the drive back home.
Rules for Good UX Design - Joe NuxollThis was a great session. Joe is an old Borland, turned Apple developer who now does other things I guess (?). Anyway, he had lots of useful information on what NOT to do with user interfaces (avoid "assy-ness"). :) He showed me some old user interfaces that mimicked some dialogs that I once (or twice) built that make end users cringe. He also showcased many user interfaces that were simply beautiful, and that hid a LOT of underlying complexity. This guy clearly knows his stuff and everybody in his session learned quite a bit about good UI design.
GitHub Keynote - Scott ChaconThe lunch keynote on Friday was pretty interesting. A developer from GitHub.com came to keynote about how they run their business. Basically, there is ZERO business processes or management structure across the entire company. Clearly it's working for them, but it has disaster written all over it in my eyes. From what he explains, people just kind of do whatever they want, whenever they want and for whatever reason. It's a very "open source" environment and sounds rather risky to me...
Everybody in the company has full trust of the entire enterprise. Everybody has the ability and permissions to do whatever they want. This means that anybody at GitHub.com (from the new guy to the CEO) could delete the entire site if they wanted to. Of course, this would never happen (or should never happen anyway), but the fact that there are no checks in place to prevent such a disaster seems a little haphazard to me. Scott indicates that everybody at GitHub gets the same pay. There are no vacations; you can just do what you want, whenever you want. No meetings, no deadlines, no feature list, no time frames, no nothing... It's amazing to me that they've had no problems yet. Good for them, but I (personally) like having a little bit of structure and credibility for my actions. Perhaps I'd feel different if I was put in this environment and saw it work. To me it seems a little chaotic and unpredictable.
How? It's because each employee is passionate about what they're doing.
Infinitely Extensible - Alex PapadimoulisThis was a great session. I follow Alex's blog (ie. The Daily WTF) and knew that this guy has seen it all. People send him code snippets from some of the most crazy logic puzzles. Many are just bad programming, but some are really funny dialog prompts that developers thing users would never see. Check out his blog to see what I mean. :)
Anyway, the session talked about how to keep it simple and avoid over-engineering simple problems. We as programmers do this by default; we over complicate everything and try to prepare for future enhancements that may never see the light of day. I really enjoyed his talk because it showed me things to look for when I sit down and start over engineering simple problems.
Anatomy of an E-Commerce Website - Joe WirtleyI was pretty excited about this session too. Joe is a really nice guy that I run into quite often around various events throughout the heartland area. His session was great and he basically just described how an international e-commerce site is setup to deliver real time results using caching and highly optimized data services across multiple databases. I learned quite a bit before I had to sneak out of his session...
Node.js - Open SpaceUnfortunately I had to sneak out of Joe's session because I was really interested in learning about node.js. It was an open space idea that somebody posted on the board and I wanted to see what it was all about. As it turned out, I got there way too late and didn't really get anything out of it. :(
Awards and Wrap-upAnother year passes, and I don't win a damn thing. GRR!! I guess I'll just have to come back next year and try again. :)
I'm now extremely excited about Ruby, Rails, Git, Shell scripting, Vi, and all things Unix. I plan to consume myself with knowledge of everything Ruby until I'm comfortable with all that it has to offer. While learning Ruby, I'll need to learn terminal app and vi pretty extensively. But that goes with the territory and hopefully I'll "get it" so that it can just get out of my way and I can focus on being productive on my Mac.
This all starts now!
Live Concert on Wednesday NightWednesday night ended rather perfectly actually. After the Pre-Compiler sessions, Chris Castle and The Womack Family Band showed up to rock out the attendee party in the grand hall area. These guys were awesome! I purchased a CD of the Womack Family Band after their set, and purchased Chris Castle's CD directly off of iTunes. They had a great sound, and best of all they were fairly local (Norwalk, Ohio).
I got to talk with a lot of people at the party, and Jennifer came to join me after she got the girls out of the water park. We had a great time and she got to see me in my element (true geek talk). I ran into a few people and we would just start talking about programming languages and different technologies. She was a sport and stood by my side with a smile the entire time. :) After the attendee party, we walked around and ended up sitting at the bar for another hour before calling it a night.
Chad Fowler KeynoteThat next morning, the alarm went off fairly early for me and I was out the door for breakfast around 7:30 am. Chad Fowler was the keynote speaker this morning and he did an AWESOME job. He talked about what defined "quality" in code and showed lots of different examples. One story that caught my attention was a discussion about a chunk of code that he looked at and thought it was horrible, but then later discovered that the code has not been touched in 20+ years and was still working... That little story gave me a whole new definition for "code quality".
Kids Programming - Aydin Acksu
After the keynote, I attended a session by my good buddy Aydin Acksu, titled "Kids Programming". Of course, my girls all met me there for it and they got to control me around a grid using commands: step, step, right, step, left, step, etc.. This taught them how how computer programs worked. Once they ran the the commands once, they would navigate Aydin back through the course to "test" the program, and then they "edited" the errors out to make it faster, and "tested" it again, etc... Basically everything a programmer does with a keyboard and a debugger. It was really cool how he approached the talk and all the kids in the class had a blast!
Rails A to Z - Matt Yoho
After that session I attended Rails A to Z by Matt Yoho (from EdgeCase). I learned quite a bit at this session and was amazed at how little code is required to make a Rails app. With about 10 lines of Ruby code, a user can connect to a database (build its schema), add records, and then disconnect (and destroy the table). This would take about 50 - 100 lines of c# code. Wow! Matt did a great job and he had my undivided attention for the entire hour.
WebMatrix 1.0 Product Launch - Josh Holmes
For lunch, we got to see WebMatrix 1.0 be launched to the world along with a lot of other amazing technologies (details). Codemash ain't no joke no more. This event has had all kinds of top notch speakers, and this year Microsoft had live streaming video from the conference to developers all over the world about this long awaited product launch. Congratulations to Codemash organizers for outdoing themselves each year. See Scott Guthrie's blog post for a list of everything that was announced today.
After the keynote, I skipped the next sessions, as there was nothing being presented that sparked my interest. I used this time to get in a quick run and workout in before the rest of the evening got ahead of me. I actually met a guy in the gym (ironically named Jim), who is close friends Mark Goodale (a local ultra-marathon hero). What a small world! We talked for about 30 minutes while we ran on treadmills next to each other.
Top Ten Tips for Moving from WinForms to WPF - Michael EatonThis session was pretty informative. Michael broke down all the differences between WinForms and WPF. I actually dabbled in WPF for a few weeks last month and got so frustrated with it. It was such a paradigm shift from everything I'd ever learned about windows application development. Buttons with click events and coordinates get's thrown out the window. Now developers use DataBinding to UIElements on various types of LayoutPanels through MVVM... Yeah!? Anyway, Michael's session confirmed that it wasn't just me. :) He gave some tips and suggested some 3rd party tools to help ease the pains. Great talk!
A Modern Open Source Development Environment - Gary BernhardtThis session was one that I was REALLY looking forward to even days before the conference. Gary uses terminal app and Vi as his development environment. This is what would eventually like to do as well so that I don't rely so much on VS2010.
Unfortunately the session was more about him showcasing how fast he types and navigates through different commands inside terminal. He didn't really focus on useful tips for users to do the same. It kind of turned into a "look what I can do" session, as opposed to a "here's how I do it" session. Don't get me wrong, I did learn something; I learned that I need to just bite the bullet and use vi exclusively outside of my day job. All in all, nothing very "constructive" came from this session (for me). He moved too fast, and assumed everybody in the session was familiar with Vi, Pyton, shell scripting, Git, and zsh.
He did answer a lot of questions about how he got so fast, but again he didn't explain anything with hard examples. It was mostly just pre-recorded videos of him typing in vi while he commented about his typos in real time, and then summed up the video with a benchmark. It wasn't what I thought it was going to be... :( I'm still a Gary fan though, and will continue to follow his blog: http://blog.extracheese.org/
Ford Fusion Keynote - Tj GiulliFor dinner, we all got to hear a developer from Ford talk about some of the new technologies that they are putting in cars, and it was pretty cool. Tj showed some of the new GUI's for the upcoming nav screens. He showed how traveling with a group of other drivers can be more "interactive" in that each car can talk to one another to know how low they are on fuel. Lots of other cool stuff was in here too, where the car could actually tweet it's status at any point along the route (ie. "Pulled into Taco Bell" or "I need fuel soon"). Pretty cool stuff really. Best yet, there was an API that was available to allow developers to tap into the engine and interface with it. However, I must admit that the API was a bit kludgy with their use of multiple yield keywords inside of a single void method. (?)
Cocktail Party, Jam Session, & Water Park Party
This is where it got fun! We all got to loosen up and mingle for the rest of the night. My good buddy, Greg Malcolm helped me setup my drums this year for the jam session. We had quite a turn out this year. Best of all Chris Castle and The Womack Family Band came back to the Kalahari to jam with us. They brought their gear back with them too. Of course, Carl was there and he's always a great entertainer. Again, we had quite a little crowd gathered up at a few points. There are a few videos on YouTube that showcase some of the shenanigans. :)
After the Jam session, Jennifer came to retrieve me so that we could all go to the water park and swim. The girls were so excited that I got to go with them and we had a blast!! We played water basketball, we hung out in the wave pool, and just relaxed and had a great time. After the water park, we split out separate ways and I went back to the grand hall to gather my drumset. As it turned out, I sat down and talked with Carl and Richard for a while on a couch and then we all headed back to the water park to mingle with other devs and get some drinks. There I met Justin Etheredge, and we talked for about 30 minutes about Ruby on Rails, and various javascript utilities that we used.
I didn't get back to the room til about 1 am.
Developing High Performance Web Applications with Javascript - Timothy FisherWell... I wanted to go to this, but couldn't. :( I slept in and rushed down to the breakfast area with moments to spare, then had to turn around and head back up to the room to get it back in order. Checkout was at 11 am and there was a LOT to do. Jennifer and I got it all done around 10:45 am. I kissed them all good bye and headed back down to the sessions... Jennifer was going to get some candy from the candy hut and then make the drive back home.
Rules for Good UX Design - Joe NuxollThis was a great session. Joe is an old Borland, turned Apple developer who now does other things I guess (?). Anyway, he had lots of useful information on what NOT to do with user interfaces (avoid "assy-ness"). :) He showed me some old user interfaces that mimicked some dialogs that I once (or twice) built that make end users cringe. He also showcased many user interfaces that were simply beautiful, and that hid a LOT of underlying complexity. This guy clearly knows his stuff and everybody in his session learned quite a bit about good UI design.
GitHub Keynote - Scott ChaconThe lunch keynote on Friday was pretty interesting. A developer from GitHub.com came to keynote about how they run their business. Basically, there is ZERO business processes or management structure across the entire company. Clearly it's working for them, but it has disaster written all over it in my eyes. From what he explains, people just kind of do whatever they want, whenever they want and for whatever reason. It's a very "open source" environment and sounds rather risky to me...
Everybody in the company has full trust of the entire enterprise. Everybody has the ability and permissions to do whatever they want. This means that anybody at GitHub.com (from the new guy to the CEO) could delete the entire site if they wanted to. Of course, this would never happen (or should never happen anyway), but the fact that there are no checks in place to prevent such a disaster seems a little haphazard to me. Scott indicates that everybody at GitHub gets the same pay. There are no vacations; you can just do what you want, whenever you want. No meetings, no deadlines, no feature list, no time frames, no nothing... It's amazing to me that they've had no problems yet. Good for them, but I (personally) like having a little bit of structure and credibility for my actions. Perhaps I'd feel different if I was put in this environment and saw it work. To me it seems a little chaotic and unpredictable.
How? It's because each employee is passionate about what they're doing.
Infinitely Extensible - Alex PapadimoulisThis was a great session. I follow Alex's blog (ie. The Daily WTF) and knew that this guy has seen it all. People send him code snippets from some of the most crazy logic puzzles. Many are just bad programming, but some are really funny dialog prompts that developers thing users would never see. Check out his blog to see what I mean. :)
Anyway, the session talked about how to keep it simple and avoid over-engineering simple problems. We as programmers do this by default; we over complicate everything and try to prepare for future enhancements that may never see the light of day. I really enjoyed his talk because it showed me things to look for when I sit down and start over engineering simple problems.
Anatomy of an E-Commerce Website - Joe WirtleyI was pretty excited about this session too. Joe is a really nice guy that I run into quite often around various events throughout the heartland area. His session was great and he basically just described how an international e-commerce site is setup to deliver real time results using caching and highly optimized data services across multiple databases. I learned quite a bit before I had to sneak out of his session...
Node.js - Open SpaceUnfortunately I had to sneak out of Joe's session because I was really interested in learning about node.js. It was an open space idea that somebody posted on the board and I wanted to see what it was all about. As it turned out, I got there way too late and didn't really get anything out of it. :(
Awards and Wrap-upAnother year passes, and I don't win a damn thing. GRR!! I guess I'll just have to come back next year and try again. :)
I'm now extremely excited about Ruby, Rails, Git, Shell scripting, Vi, and all things Unix. I plan to consume myself with knowledge of everything Ruby until I'm comfortable with all that it has to offer. While learning Ruby, I'll need to learn terminal app and vi pretty extensively. But that goes with the territory and hopefully I'll "get it" so that it can just get out of my way and I can focus on being productive on my Mac.
This all starts now!
Wednesday, January 12, 2011
CodeMash v2.0.1.1 (Pre-Compiler)
The time has arrived! I'm here at CodeMash and loving all the stuff that I'm learning so far!
I arrived yesterday around 1pm. When I arrived, I ended up geeking out in my room for a while, learning KnockoutJS. KnockoutJS is a very slick little javascript library that allows developers to integrate the MVVM architecture pattern into an Html page fairly easily. Anybody that is familiar with Silverlight or WPF will have no problem using it. However, for me it has been quite a learning curve since I'm not fluent in either. I've only been using the MVVM pattern (in my head) over the last month or two. I've never actually applied it until now.
Around 4pm, I headed down to the conference area and helped stuff the shwag bags with many other volunteers. They setup all the fliers and pamphlets on a table, and about 10 of us made a loop where we would walk around the table and grab one sheet at a time... At the end of the table, we would put the papers into a bag and start all over. I hung out in there for about an hour and a half before sneaking out the door.
After volunteering at the table, I got checked into the conference, then walked around the Kalahari for a while. While walking around, I actually ran into Carl Franklin from .NET Rocks. I stopped and talked to him for a little while, and was pretty surprised that he remembered me. After that, I went to the water park area and sent some water park pictures to my girls via Picture Mail.
Then around 7pm, I headed down to the gym to get my sweat on. I met a few guys (Chad and Bob) who were doing the P90X. They were on their 3rd month of the program and stated that they have noticed great results as well. We talked off and on for a while, then I headed back up to my room to get a shower before going down to the bar to "network" with some other geeks.
As it turned out, I actually ran into Chad and Bob again. We talked for quite a while, and then along came Greg Malcolm. Greg and I sat and talked and drank til about midnight. We talked about all things geeky, including Ruby, Rails, Javascript, Perl, Python, C#, ASP.NET, Git, SVN, and I think Scala actually came up once or twice. Around midnight, we both had our buzz on, so we went our separate ways to prepare for the big Pre-Compiler day.
Pre-Compiler
Whoops, I slept in a little. I had my alarm set for 5:30 am with hopes on getting a quick run in before breakfast. Instead, I woke up at 8:15. :) I scurried around and got ready to try and get a bit of breakfast before they took it away (@ 8:30). I made it! Barely, but I made it.
From breakfast, I went to the Ruby Koans lab hosted by Joe O'Brien and Marc Peabody of EdgeCase. I learned so much!! I basically learned that Ruby is the shit (this is a compliment for all my non-English speaking readers). I dabbled in the Ruby Koans last year at CodeMash, from a friendly tip. However, this year I dedicated myself to a full 3 hours of NOTHING BUT RUBY! Again, I can't say enough about Ruby. Joe and Marc are very passionate about the language and they are really good at getting people excited about the language and developer culture. I've already committed to attending the Columbus Ruby Brigade meeting on Monday. I made it through about 80 of the 274 Koans, and plan to finish them before Monday's meeting.
I had some great conversation with some smart people at my lunch table around Silverlight and WPF. Then from lunch, I decided to attend the Git Immersion presentation by Adam McCrea and Jim Weirich (also from EdgeCase). They did a great job explaining how Git is different from SVN and how it is an invaluable tool for all developers. Jim presented the Git system in such a way that made it easy to understand. I have it installed and will be using it quite often from now on.
The best part about both sessions today was that I got to use my crazy cool Bash and Unix knowledge in both sessions. Both sessions were 100% command line driven via Terminal.
Yeah, I'm having fun!
I arrived yesterday around 1pm. When I arrived, I ended up geeking out in my room for a while, learning KnockoutJS. KnockoutJS is a very slick little javascript library that allows developers to integrate the MVVM architecture pattern into an Html page fairly easily. Anybody that is familiar with Silverlight or WPF will have no problem using it. However, for me it has been quite a learning curve since I'm not fluent in either. I've only been using the MVVM pattern (in my head) over the last month or two. I've never actually applied it until now.
Around 4pm, I headed down to the conference area and helped stuff the shwag bags with many other volunteers. They setup all the fliers and pamphlets on a table, and about 10 of us made a loop where we would walk around the table and grab one sheet at a time... At the end of the table, we would put the papers into a bag and start all over. I hung out in there for about an hour and a half before sneaking out the door.
After volunteering at the table, I got checked into the conference, then walked around the Kalahari for a while. While walking around, I actually ran into Carl Franklin from .NET Rocks. I stopped and talked to him for a little while, and was pretty surprised that he remembered me. After that, I went to the water park area and sent some water park pictures to my girls via Picture Mail.
Then around 7pm, I headed down to the gym to get my sweat on. I met a few guys (Chad and Bob) who were doing the P90X. They were on their 3rd month of the program and stated that they have noticed great results as well. We talked off and on for a while, then I headed back up to my room to get a shower before going down to the bar to "network" with some other geeks.
As it turned out, I actually ran into Chad and Bob again. We talked for quite a while, and then along came Greg Malcolm. Greg and I sat and talked and drank til about midnight. We talked about all things geeky, including Ruby, Rails, Javascript, Perl, Python, C#, ASP.NET, Git, SVN, and I think Scala actually came up once or twice. Around midnight, we both had our buzz on, so we went our separate ways to prepare for the big Pre-Compiler day.
Pre-Compiler
Whoops, I slept in a little. I had my alarm set for 5:30 am with hopes on getting a quick run in before breakfast. Instead, I woke up at 8:15. :) I scurried around and got ready to try and get a bit of breakfast before they took it away (@ 8:30). I made it! Barely, but I made it.
From breakfast, I went to the Ruby Koans lab hosted by Joe O'Brien and Marc Peabody of EdgeCase. I learned so much!! I basically learned that Ruby is the shit (this is a compliment for all my non-English speaking readers). I dabbled in the Ruby Koans last year at CodeMash, from a friendly tip. However, this year I dedicated myself to a full 3 hours of NOTHING BUT RUBY! Again, I can't say enough about Ruby. Joe and Marc are very passionate about the language and they are really good at getting people excited about the language and developer culture. I've already committed to attending the Columbus Ruby Brigade meeting on Monday. I made it through about 80 of the 274 Koans, and plan to finish them before Monday's meeting.
I had some great conversation with some smart people at my lunch table around Silverlight and WPF. Then from lunch, I decided to attend the Git Immersion presentation by Adam McCrea and Jim Weirich (also from EdgeCase). They did a great job explaining how Git is different from SVN and how it is an invaluable tool for all developers. Jim presented the Git system in such a way that made it easy to understand. I have it installed and will be using it quite often from now on.
The best part about both sessions today was that I got to use my crazy cool Bash and Unix knowledge in both sessions. Both sessions were 100% command line driven via Terminal.
Yeah, I'm having fun!
Subscribe to:
Posts (Atom)
