Exploring the depths and potentials of ASP.NET RSS 2.0 or Subscribe to .BenRush by Email
 Friday, February 17, 2006

I have a philosophy on contracting that is shared by some, and not-so-shared by others; nonetheless it appears to be a rather successful one so I thought I'd share it right quick (this won't take too long).

The idea behind contracting work is that you are given a job because you are seen as a smart business move - not because you're somehow smarter. The important thing to remember here is that you are not considered technically better (more capable of user the computer, of learning, etc.) by any stretch of the imagination by the one cutting your check than anyone else on their internal team. What I mean by that statement is that, even though you are getting the job, you ought to consider that many people inside the team that's contracting you could also get the job done too. Even if they (those paying for you) don't see this, you ought to always think that way. What makes you valuable is:

1) Your autonomous capabilities,
2) Your one-time use and disposability,
3) Your speed,
4) Your knowledge/experience

Each one of these factors boils down to one simple thing: money. Given your autonomous nature, the people contracting to you expect that they can treat you as relatively hands off for small periods of time and that you are capable of using common sense to achieve goals with the rest of the team. Your contractee is expecting that you are not going to go "off into the weeds" all too often, that they won't have to babysit you, and that you'll be able to show results relatively fast. Your one-time use and exposability is important as those paying for you only have to be responsible for you during this particular project - they don't have to pay for health insurance, they don't have to worry about someone stealing you away - all in all you're seen as fairly low risk. These are important factors, but the most important are the last two that I mentioned: speed and expertise. You are, by the hopes of those buying you, a catalyst for the project - you are the molecule that, when snapped into the rest of the project, speeds the reactions and gets the thing done.

So, these are all kind of introductory thoughts - but what is my philosophy? My philosophy is that if you're getting paid to work at X dollars per hour, you ought to constantly judge your work by that rate; and so if you have a bad day, or you suddenly become an ignoramous about something and fail to get something done by your own internal clock - you charge less (in other words, you don't charge for the hours you spend screwing up, only those you spend doing something right). I'm an optimizer, I prefer to think in terms of how something can be done more effectively the next time around - and so I only charge for what I think I'M worth, and my judgement system is often a lot harsher than anyone else I've met. The result: less wack-off'ery and more focus as you suddenly tell yourself "I shouldn't just dork around on this project, because I'm only going to pay myself what I'm worth" - I find that every project I'm on I get to understand my limitations better, and gain a hell of a lot more focus and effeciency. I'm a huge fan of building into my environment certain external pressures and realities that keep me focused - reality doesn't waver (like an alarm clock), however we often do internally.

Another interesting side-effect of this philosophy is that my endeavor to understand things is highly restricted during 'contract mode'. Contracting is about application - you ought to be applying your talents when the stage lights are on, not uncovering technologies and learning how to use them: you are under the gun, and they aren't paying you to appease some inner demon (daemon?) to get to the bottom of things and figure out how they work. This reminds me of the days back in high school when I used to try out for honor bands - when I would audition, I would perform what I practiced; and I never asked myself, "Man, I wonder why Bach decided to use this particular chordal progression".

The reason some don't like this philosophy of mine too well is that, as contractors, we are here to make money - which often means hours (paid by the hour). The thing is, though, that you ought to look at the world four dimensionally (that is, by including time) and realize that,

1) You really don't want to be stuck on this one project forever,
2) They don't want you stuck on this one project forever

...basically, my theory is that if you get one job done well, there'll be more waiting for you. Don't try to suck all your money out of one project or look for that golden project - look for continuity instead (you can always get dropped, remember that).


kick it on DotNetKicks.com
Friday, February 17, 2006 2:20:32 PM (Central Standard Time, UTC-06:00)  #    Comments [0] - Trackback
Computing | Ranting

Anyone ever hear of this?


kick it on DotNetKicks.com
Friday, February 17, 2006 1:32:57 PM (Central Standard Time, UTC-06:00)  #    Comments [0] - Trackback


http://mywn.co.uk/personal/users/jamesweston/images/MSOffice_word_tomanytoolbars.jpg


kick it on DotNetKicks.com
Friday, February 17, 2006 1:31:50 PM (Central Standard Time, UTC-06:00)  #    Comments [0] - Trackback

 Thursday, February 16, 2006

...as life grows on and I continue to be faced with greater and greater challenges, I'm often times reminded of a lesson I learned from a book a while ago. The interesting thing is, as experience often grows, the simple things we read suddenly take flight and we see exactly what they actually mean; it's like something becomes much more real to us and we start to actually understand it in a three-dimensional fashion. The lesson basically goes like this:

In picking a problem to work on, you take the liklihood that you'll solve the problem (as a guessed percentage) and multiply it in your head by some kind of relatively constant scale of importance - the result is a fairly pseudo-quantitive representation of whether the problem should even be attempted when considering other problems seen under the same light.

A good example of that is a bug you may encounter as a software developer - or a particular article you notice online, etc. You are presented with a problem of understanding the bug, or of understanding the article or of attacking a particular problem of some other type when you are also faced with other problems around you (this always happens, as there is never just one potential problem at a time we face as developers). How do you pick and choose your battles? Do you attack each and every problem you encounter? Is this feasible? The reasonable ones realize it isn't and so scale themselves appropriately.

I have started doing this more and more recently and have felt myself become more effective as a problem solver in general.


kick it on DotNetKicks.com
Thursday, February 16, 2006 1:13:02 AM (Central Standard Time, UTC-06:00)  #    Comments [0] - Trackback
Computing | Personal Adventures | Ranting
 Wednesday, February 15, 2006

    Blindly and ignorantly type these commands:

    sqlplus /nolog
    connect sys/manager as sysdba
    shutdown immediate
    startup


kick it on DotNetKicks.com
Wednesday, February 15, 2006 3:22:21 PM (Central Standard Time, UTC-06:00)  #    Comments [1] - Trackback
Computing

Check it out and download it here.


kick it on DotNetKicks.com
Wednesday, February 15, 2006 1:42:39 AM (Central Standard Time, UTC-06:00)  #    Comments [0] - Trackback

 Tuesday, February 14, 2006

I give no guarantees, I give nothing - so don't bug me, I slapped it together last night on my third or fourth Guinness...

Imports System.Web
Imports System.Configuration

' TODO: Add thread safety.
' TODO: Optimize open/closure of data connections per routine call.
Public Class Provider
    Inherits System.Web.SiteMapProvider

    Public Overrides Function FindSiteMapNode(ByVal rawUrl As String) As SiteMapNode
        Try
            ' TODO: clean up this code by taking out the redundant snippets.
            Me.OpenConnection()
            Dim command As Oracle.DataAccess.Client.OracleCommand = Me.m_Connection.CreateCommand()
            command.CommandText = "select * from BEN.SITEMAPNODES WHERE URL = '" + rawUrl + "'"
            Dim adapter As New Oracle.DataAccess.Client.OracleDataAdapter(command)
            Dim node As New SiteMapNodeDS()
            adapter.Fill(node.SITEMAPNODES)
            If node.SITEMAPNODES.Count = 1 Then
                ' we have a single result, which is what we want.
                Dim sn As New SiteMapNode(Me, node.SITEMAPNODES(0).ID.ToString(), node.SITEMAPNODES(0).URL, node.SITEMAPNODES(0).TITLE, node.SITEMAPNODES(0).DESCRIPTION)
                Return sn
            Else
                If node.SITEMAPNODES.Count > 1 Then
                    Throw New System.ApplicationException("Too many rows returned; this violates the restraint.")
                End If ' otherwise error.
            End If
            Return Nothing
        Finally
            Me.CloseConnection()
        End Try
    End Function 'FindSiteMapNode

    Public Overrides Function GetChildNodes(ByVal node As SiteMapNode) As SiteMapNodeCollection
        Try
            Me.OpenConnection()
            Dim command As Oracle.DataAccess.Client.OracleCommand = Me.m_Connection.CreateCommand()
            command.CommandText = "select * from BEN.SITEMAPNODES where ROOTNODE = " + node.Key
            Dim adapter As New Oracle.DataAccess.Client.OracleDataAdapter(command)
            Dim nodeDS As New SiteMapNodeDS()
            adapter.Fill(nodeDS.SITEMAPNODES)
            If nodeDS.SITEMAPNODES.Count > 0 Then
                Dim coll As New SiteMapNodeCollection()
                Dim row As SiteMapNodeDS.SITEMAPNODESRow
                For Each row In nodeDS.SITEMAPNODES.Rows
                    coll.Add(New SiteMapNode(Me, row.ID.ToString(), row.URL, row.TITLE, row.DESCRIPTION))
                Next row
                Return coll
            Else
                Return Nothing
            End If
        Finally
            Me.CloseConnection()
        End Try
    End Function 'GetChildNodes

    Public Overrides Function GetParentNode(ByVal node As SiteMapNode) As SiteMapNode
        ' TODO: implement security trimming.
        Try
            Me.OpenConnection()
            Dim command As Oracle.DataAccess.Client.OracleCommand = Me.m_Connection.CreateCommand()
            command.CommandText = "SELECT * FROM BEN.SITEMAPNODES WHERE ID = (SELECT ROOTNODE from BEN.SITEMAPNODES where ID = " + node.Key + ")"
            Dim adapter As New Oracle.DataAccess.Client.OracleDataAdapter(command)
            Dim ds As New SiteMapNodeDS()
            adapter.Fill(ds.SITEMAPNODES)
            If ds.SITEMAPNODES.Count = 1 Then
                Return New SiteMapNode(Me, ds.SITEMAPNODES(0).ID.ToString(), ds.SITEMAPNODES(0).URL, ds.SITEMAPNODES(0).TITLE, ds.SITEMAPNODES(0).DESCRIPTION)
            Else
                If ds.SITEMAPNODES.Count > 1 Then
                    Throw New System.ApplicationException("Too many parent nodes found, this violates the constraint rules.")
                Else
                    Return Nothing
                End If
            End If
        Finally
            Me.CloseConnection()
        End Try
    End Function 'GetParentNode

    Protected Overrides Function GetRootNodeCore() As SiteMapNode
        Try
            Me.OpenConnection()
            Dim command As Oracle.DataAccess.Client.OracleCommand = Me.m_Connection.CreateCommand()
            command.CommandText = "SELECT * FROM BEN.SITEMAPNODES WHERE ROOTNODE = -1"
            Dim adapter As New Oracle.DataAccess.Client.OracleDataAdapter(command)
            Dim node As New SiteMapNodeDS()
            adapter.Fill(node.SITEMAPNODES)
            If node.SITEMAPNODES.Count = 1 Then
                Return New SiteMapNode(Me, node.SITEMAPNODES(0).ID.ToString(), node.SITEMAPNODES(0).URL, node.SITEMAPNODES(0).TITLE, node.SITEMAPNODES(0).DESCRIPTION)
            Else
                If node.SITEMAPNODES.Count > 1 Then
                    Throw New System.ApplicationException("More than one root node discovered, this violates the parent restraint.")
                Else
                    Return Nothing
                End If
            End If
        Finally
            Me.CloseConnection()
        End Try
    End Function 'GetRootNodeCore

    Private Function OpenConnection() As Oracle.DataAccess.Client.OracleConnection
        If Me.m_Connection Is Nothing Or Me.m_Connection.State <> System.Data.ConnectionState.Open Then
            Me.m_Connection = New Oracle.DataAccess.Client.OracleConnection()
            Try
                Me.m_Connection.ConnectionString = "Data Source=DEV1_BEN;User Id=ben;Password=xxx;"
                Me.m_Connection.Open()
            Catch
            End Try
        End If
        Return Me.m_Connection
    End Function 'OpenConnection

    Private Sub CloseConnection()
        If Not (Me.m_Connection Is Nothing) Then
            Me.m_Connection.Close()
            Me.m_Connection.Dispose()
            Me.m_Connection = Nothing
        End If
        Return
    End Sub 'CloseConnection
    Private m_Connection As Oracle.DataAccess.Client.OracleConnection
End Class 'Provider

 


kick it on DotNetKicks.com
Tuesday, February 14, 2006 11:31:38 AM (Central Standard Time, UTC-06:00)  #    Comments [1] - Trackback
Computing

http://authors.aspalliance.com/aldotnet/examples/translate.aspx


kick it on DotNetKicks.com
Tuesday, February 14, 2006 11:16:01 AM (Central Standard Time, UTC-06:00)  #    Comments [0] - Trackback
Computing

Computers Blogs - Blog Top Sites

Archive
<February 2006>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011
Blogroll
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2009
Benjamin Rush
Sign In
Statistics
Total Posts: 444
This Year: 0
This Month: 0
This Week: 0
Comments: 128
Themes
Pick a theme:
All Content © 2009, Benjamin Rush
DasBlog theme 'Business' created by Christoph De Baene (delarou)