Chat


Observatories

April 14, 2009

Easy way to remove files from git index after deleting from the file system only

The easiest way I have fixed this is using git commit -am "your commit message here"

February 14, 2009

Coding Presentation Tips

Last night I presented an implementation of a calendar in ruby with Grant. I reviewed Grant's code while he reviewed mine.

It was a lot of fun and I really enjoyed the experience. Almost like a roast, but with code. I struggled a bit through the presentation with how things were being implemented and with relaying the problem that we were solving to the audience.

Afterwards Scott informed me that a better way to begin this presentation would have been to start with the client code, the use of the solution. What is your code allowing to happen. How is it being used. This information will at least let people up front know what is up and why you have written your code. Tests can do this for you, but if you could show this in the context of a real world example it will stick in their mind.

I thought about this and think that it is how I will begin technical demonstrations for the foreseeable future. Give people the reason, give them the why and then show the how. Otherwise the audience will lose patience and just start twittering.

November 14, 2008

ZenTest autotest is now autospec for rspec

I spent a long time tonight trying to figure you why I couldn't make autotest work with rspec.  I was eventually able to make it work, but when reading the rspec changelog I noticed this tidbit. 

Version 1.1.5 / 2008-09-28
IMPORTANT: use the new 'autospec' command instead of 'autotest'. We changed
the way autotest discovers rspec so the autotest executable won't
automatically load rspec anymore. This allows rspec to live side by side other
spec frameworks without always co-opting autotest through autotest's discovery
mechanism.

This of course means that the rspec gem distributes autospec and that you should use that to find your _spec files. Anyone using this in their terminal "RSPEC=true autotest" should now use "autospec".

Continue reading "ZenTest autotest is now autospec for rspec" »

September 17, 2008

Testing a new rssmix

We are setting up a couple of our blogs at wprj to be posted on www.mtmjobs.com

September 11, 2008

UpdateFrom is out of ASP.NET MVC Preview 5

Well I really liked the UpdateFrom method that lived in System.Web.MVC.BindingHelperExtensions.  I dug it all the way back when it was actually an extension method, but the latest version of ASP.NET MVC Preview 5 has kicked it out.  I haven't read it anywhere but microsoft seems to desire that we think of viewdata as being an extension of the model.  So now you use UpdateModel and so you switch it up by passing the form keys so that it knows what properties to update, not a name value collection.

This really isn't that big a deal as far as fixing your code.  I resolved my issues using a find and replace in visual studio using regular expressions.  For the find I used BindingHelperExtensions.UpdateFrom\(({:w}), Request.Form\); and for the replace I used UpdateModel(\1, Request.Form.AllKeys);.  As I need to do more I will make note of what is needed to get Preview 5 rolling.

June 13, 2008

Leopard Gem Update - Ruby head files not found

I just got my new macbook pro, so after I pulled down Textmate I was ready to start hacking on rails.  I fired up the command prompt and did a "sudo gem update" to get up to rails 2.1 so I could use git plugins and other great new features.  Well right after I kicked that off I started to get "can't find header files for ruby".  To fix this all you need to do is install xcode.  Also make sure you do that you do a gem install rails to get activeresource.  After this you should be good to go.

June 06, 2008

New Blog New Focus

Over the past year I have grown quite a bit as a developer and realized that I should talk more about being open to expanding your knowledge outside of the technologies you are currently comfortable with.  One year ago I was a ASP.NET C# webform developer that didn't know exactly why people didn't like ASP.NET and considered it a leaky abstraction.  


I really wanted to get better with testing my software and the path that lead to developing testable websites brought me to the View-Presenter pattern.  This pattern worked wonders to be able to test a webform site and really allowed me to focus on the TDD experience.  During this work I felt that I was finally writing some rock-solid code that was doing what I thought I wanted it to, and with the testing would keep doing it through the changes.

After getting comfortable with this I started to look into Ruby on Rails since there was so much talk about it and how completely agile it was.  The first couple of months that I sat down and used ruby I was not sure that it was worth looking at.  Some of my posts here show my skepticism that I felt.  I thought that without a compiler and with the looseness of the language that "real" applications weren't possible and that it was more the realm of the casual developer that didn't have to make a serious professional program.

After struggling for a couple of months I started to see the light.  Once I was writing tests and really understanding what I could do with Ruby, using C# started to become frustrating.  To get software written in Ruby you really can just go and have a great amount of ease in re-factoring your code because everything isn't tied down so tightly that you had to expressly expose all aspects to being extended or overridden.  In Ruby if you want to replace functionality of a class you can, no special keywords or design considerations.  With C# the style of code that you have to write to become testable changes from what you would write even with good OO principles.

I was learning Ruby so that I could create Rails applications.  What I have enjoyed about Rails the most would be the guidance and ease of developing an application.  Testing is required practically and supported to an extent I had never seen.  The design of the system made sense, it is put together by people that used it daily.  It is added to by people using it and the community was very helpful and exciting to be around.  I was very excited, but thought there must be something that makes Rails development not as easy as it seems.  Otherwise why isn't everyone developing using it?  So far I have not run into frustration.  The only aspect that I am hesitant of is running the web servers using rails.  At the start of my experience there seemed to be quite a bit of memory usage and a need to do frequent server resets.

Worried about this I didn't feel comfortable pushing the technology to co-workers since I didn't want to recommend a system that may not be as solid as what we were used too.  Then Microsoft announced that they would be making a version of ASP.NET that is built with an MVC architectural pattern.  Initially this was somewhat exciting.  All of the benefits of rails I thought, but with the stability of .NET.  

So far this has been a good direction for Microsoft, but it feels to me like I know that the people writing it aren't thinking about using it first.  They are driven by the desire to make maintaining the software easy.  This has led to pain in my experience.  Releases aren't very easy to use with testing.  There are side projects that have been created to ease this, but it is obvious to me that these solutions could have come from the actual framework creators.  To me there is still this we will make the framework you figure out if it works for you mentality.  Usually this isn't a problem if that attitude is from people that are working with the technology, but here I don't believe this is the case.  

I have more and more felt that Ruby on Rails is the best way to develop web based software.  I am more intrigued every day and have yet to run into a decision that I thought was made without the first priority being a benefit to the usage of the framework.  Now with this experience I wonder what other languages and skills would help me solve problems better.  This will be my focus on this blog so that I can chronicle my experience and hopefully meet more people that enjoy solving problems the best way they can.

March 17, 2008

Tulsa Ruby Workshop

The Tulsa.rb group will be hosting a workshop on April 28th, 2008 from 10:00 AM to 4:00 PM. They are going to be covering some great topics especially for people extremely new to ruby.

January 15, 2008

RenderUserControl from Controller

Ran into a situation today where I wanted to render a ViewUserControl from my controller.  I had a couple of hard times getting this done with the Microsoft MVC CTP1, but finally have it working.  We did this to support using the Prototype observe to get behavior similar to a cascading drop down.

ASPX View Page

 <% using (Html.Form<Web.Controllers.PlaqueOrderController>
          (action => action.Create())) { %>  
  Season: 
    <p> 
       <%= Html.Select("SeasonId", ViewData.Seasons, "Name", "Id")%>  
    </p> 
  Statistic: 
  <div name="statistic" id="statistic"> 
    <p>
      <select disabled="disabled">
        <option>Select Sport</option>
      </select>
    </p>
  </div>
 <% } %>
 <script type="text/javascript"> 
   Event.observe("SeasonId", "change", function() { 
          new Ajax.Updater('statistic', '/PlaqueOrder/GetStatistics/'
                           + $F("SeasonId")) }); 
 </script>

 

This will observe the season drop down and when it is changed call the PlaqueOrder controller's GetStatistics action passing the selected SeasonId to the action. The action in the controller then looks like this.  I should mention that I'm using LLBLGen for the ORMapper here.

 

PlaqueOrderController

[ControllerAction]
public void GetStatistics(int id) 
{ 
   SeasonEntity season = new SeasonEntity(id); 
   HtmlHelper helper = new HtmlHelper(
                             new ViewContext(this.ControllerContext, 
                                             this.ViewData, 
                                             this.TempData));
   string html = helper.RenderUserControl(
                       "/Views/PlaqueOrder/Statistic.ascx", season);
   Response.Write(html); 
}

 

We had to give the absolute path to the RenderUserControl because we kept getting The relative virtual path 'Statistic' is not allowed here when we used helper.RenderUserControl("Statistic").  We also had to use Response.Write to get the html created from the ViewUserControl to the browser to replace the innerHtml of the statistic div.  Next is the ViewUserControl.

 

Statistic.ascx

<%@ Control Language="C#" AutoEventWireup="true"
    CodeBehind="Statistic.ascx.cs" 
    Inherits="Web.Views.PlaqueOrder.Statistic" %>
<%= Html.Select("StatisticId", 
                ViewData.Sport.Statistics, "Name", "Id")%> 

 

And here is the codebehind that types the ViewUserControl to the Season that we are passing as the ControlData.

 

Statistic.ascx.cs

namespace Web.Views.PlaqueOrder 
{ 
   public partial class Statistic : 
                 System.Web.Mvc.ViewUserControl<SeasonEntity> 
   { } 
}

 

We had a hard time find much information how to do this.  I'm sure there are other ways to accomplish this, but to us being able to render a ViewUserControl from a Controller is helpful with how we have used Prototype for AJAX communication.

November 12, 2007

Rails Notes

I'm reading through Agile Web Development With Rails tonight and have come across a couple of interesting tidbits that may be good to know later.

When writing code in .rhtml files

<% 3.times do %>
  Test<br />
<% end %>

will result in the following html

Test<br />

Test<br />

Test<br />

to prevent this add a minus (-) before the close of the code sections to indicate that the last line break should be ignored.

<% 3.times do -%>
  Test<br />
<% end -%>

Also there is a helper method "h" that is really nice. It will parse any string into the markup required to cause the string to be rendered as it should. This eases site design and helps to protect from some hacks. So

<% h("3 < 4") %>

is translated to

3 &lt; 3

as desired.

Also something that is worth noting is that the views have access to all instance variables in the controller that calls them, even private variables.