Skip navigation

Category Archives: General Discussion

Everything that goes on here.

Spun up another blog dedicated to her crafting:

and from my understanding is willing to craft things for other people as well if they are interested…

I’m not sure how the female readership is to my blog, but men if you have wives or kids, it might be worth showing them so they can follow it. Thanks.

Here’s the link to her announcement post.

Alright, so Active Directory Asset Management.  What is it?

Well a, not so, unique problem facing every enterprise large or small, is asset management.

Now asset management is not a one dimensional issue, there are requirements and facets to it that shift depending on the person you ask.  From an engineering and maintenance standpoint at my company we have needs of tying important information as closely to the asset as possible, yet removed enough that it’s accessible even when the asset is not.  So what does that mean?

I want to have information tied to the machine but not dependent on the machine.  Something that contains properties that can be modified by the machine, yet retrievable apart from the machine.  Well that’s a relatively simple solution, LDAP, or Active Directory as the case may be.

In this case, my co-worker David Renfrow has opted to utilize the AD Computer Object Description property to store the strings that uniquely identifies our asset.  At present the tool is used to search for specific values in objects, to get/set the string values, and lastly to export findings from the search to a csv report bundled into a single self contained HTA.

image

For the next release I intend to implement error handling, and a potential DB write out function as well as domain search base targeting. At present it only pulls from the Domain of the querying asset, so in a multi domain forest that can be a problem.

Current Version Code Below:


<html>
	<head>
		<title>Active Directory Asset Manager (ADAM)</title>
<!--<description>
	Tool:		Active Directory Asset Manager
	
	Authors: 	David Renfrow, Daniel Belcher 
	
	Tool Info: 	The tools purpose is to retrieve, query, and 
				set system specific information	to a string in 
				the ADO Description property.  This string is 
				specially formatted	to retrieve in a specific way:
				
		<Server>;<Sixdot>;<Purpose>;<Location>;<Domain>;<SLA>;
	<SrvContact>;<SrvManager>;<SGPrimary>;<SGBackup>;<DBAPrimary>;<DBABackup>
				
</description>-->
	<HTA:APPLICATION 
		ID="ADAM" 
		APPLICATIONNAME="ADAM"
		BORDER="thin"
		SINGLEINSTANCE="yes"
	>

<SCRIPT LANGUAGE="VBScript">
'-----------Application Initialization-----------------------------------------
'On Error Resume Next
Dim oConn, oCmd, item, oComputer, strDomain, Dict

Sub Window_onLoad
	window.resizeTo 625,725
	
	Set oConn = CreateObject("ADODB.Connection")
		oConn.Provider = "ADsDSOObject"
	Set oCmd =  CreateObject("ADODB.Command")
	Set Dict = New cls_Dict

	strDomain = Dict.DistinguishedDomainName
	
	
End Sub 
'----------------Controls------------------------------------------------------
Sub getproc()
	On Error Resume Next

	strComputer = ServerName.Value
	ADLookUp(strComputer)
	Description = oComputer.Get("Description")
	If Err.Number <> 0 Then
		Err.Clear
		Description = ";;;;;;;;;;;"
	End If
	strOut = Split(Description,";")

	DataArea.innerHtml =	"<table border=""""1"""">" & "<tr>" & _
		"<td>Server</td>"&"<td>"&UCase(strComputer)& "</td>" & "</tr><tr>" & _
		"<td>SixDot</td><td>"&strOut(1) & "</td>" & "</tr><tr>" & _
		"<td>Purpose</td><td>"&strOut(2) & "</td>" & "</tr><tr>" & _
		"<td>Location</td><td>"&strOut(3) & "</td>" & "</tr><tr>" & _
		"<td>Domain</td><td>"&strOut(4) & "</td>" & "</tr><tr>" & _
		"<td>SLA</td><td>"&strOut(5) & "</td>" & "</tr><tr>" & _
		"<td>Srv Contact</td><td>"&strOut(6) & "</td>" & "</tr><tr>" & _
		"<td>Srv Manager</td><td>"&strOut(7) & "</td>" & "</tr><tr>" & _
		"<td>SG Primary</td><td>"&strOut(8) & "</td>" & "</tr><tr>" & _
		"<td>SG Backup</td><td>"&strOut(9) & "</td>" & "</tr><tr>" & _
		"<td>DBA Primary</td><td>"&strOut(10) & "</td>" & "</tr><tr>" & _
		"<td>DBA Backup</td><td>"&strOut(11) & "</td>" & "</tr><tr>" & _
		"<td>Last Updated</td><td>"&strOut(12) & "</tr></table>"
			
	servername.value = UCase(strComputer)
	sixdot.value = strOut(1)
	purpose.value = strOut(2)
	loc.value = strOut(3)
	domain.value = strOut(4)
	sla.value = strOut(5)
	srvcontact.value = strOut(6)
	srvmanager.value = strOut(7)
	sgprimary.value = strOut(8)
	sgbackup.value = strOut(9)
	dbaprimary.value = strOut(10)
	dbabackup.value = strOut(11)

	oConn.Close
End Sub

Sub setproc()
	strComputer = ServerName.Value
	ADLookUp(strComputer)
	if sixdot.value = "" then sixdot.value = "NA"
	if purpose.value = "" then purpose.value = "NA"
	if loc.value = "" then loc.value = "NA"
	if domain.value = "" then domain.value = "NA"
	if sla.value = "" then sla.value = "NA"
	if srvcontact.value = "" then srvcontact.value = "NA"
	if srvmanager.value = "" then srvmanager.value = "NA"
	if sgprimary.value = "" then sgprimary.value = "NA"
	if sgbackup.value = "" then sgbackup.value = "NA"
	if dbaprimary.value = "" then dbaprimary.value = "NA"
	if dbabackup.value = "" then dbabackup.value = "NA"
	oComputer.Put "Description", servername.value&";"&sixdot.value&";"& _
			purpose.value&";"&loc.value&";"&domain.value&";"&SLA.value&";"& _
			srvcontact.value&";"&srvmanager.value&";"&sgprimary.value&";"& _
			sgbackup.value&";"&dbaprimary.value&";"&dbabackup.value&";"&date
	oComputer.SetInfo
	oConn.Close
End Sub

Sub clearproc
	dataarea.InnerHTML = ""
	servername.value = ""
	srvcontact.value = ""
	sixdot.value = ""
	srvmanager.value = ""
	purpose.value = ""
	sgprimary.value = ""
	loc.value = ""
	sgbackup.value = ""
	domain.value = ""
	dbaprimary.value = ""
	sla.value = ""
	dbabackup.value = ""
End Sub

Sub searchproc()

	If Dict.Exists("ADRecords") Then
		Dict.Remove("ADRecords")
	End If
	
	msg = Null
	
	Call ADSearch(search.value)
	For Each item In Dict.ReturnArray("ADRecords")
		temp = Split(item,"|x|")	
		msg = msg &"<b>Name:</b><em> " & UCase(temp(0)) & "</em><br>" _
				& "<b>Description:</b><em> " & temp(1) & "</em><br><br>"
	Next
	
	dataarea.innerhtml = "<input type="&Chr(34)&"button"&Chr(34)&" value="& _
	Chr(34)& "Export to CSV"&Chr(34)&" onclick="&Chr(34)&"export"&Chr(34)& _
	"/><br>" & msg
	
End Sub

Sub export()

	Dim oFso, FileHandle
	Set oFso = CreateObject("Scripting.FileSystemObject")
	temp = Split(Date,"/")
	sDate = temp(0)&temp(1)&temp(2)
		
	Set FileHandle = oFso.OpenTextFile _
		(Dict.CurrentDir&"ServerOut-"&sDate&".csv", 2, True)
		FileHandle.WriteLine "Server,SIXDOT,Purpose,Location,Domain,SLA," & _
"Srv Contact,Srv Manager,SG Primary,SG Backup,DBA Primary,DBA Backup,Modified"
		
		For Each item In Dict.ReturnArray("AdRecords")
			temp = Split(item,"|x|")
			strWrite = Replace(temp(1),",","-")
				strWrite = Replace(strWrite,";",",")
					strWrite = Replace(strWrite,"-",";")
			FileHandle.WriteLine strWrite
		Next
	FileHandle.Close
	
	dataarea.innerhtml = "<p>Report written to:<br>" & _
					"<em>"&Dict.CurrentDir&"serverout-"&sDate&".csv</em></p>"
End Sub

'-----------------Working Functions--------------------------------------------
Public Function ADLookUp(strComputer)

	oConn.Open "Active Directory Provider"
	Set oCmd.ActiveConnection = oConn
	oCmd.CommandText = _
		"Select * from 'LDAP://"&strDomain&"' " _
        & "Where objectCategory='computer' AND name = '"& strComputer &"'" 
	oCmd.Properties("searchscope") = 2
	oCmd.Properties("Page Size") = 1000
	Set oRecord = oCmd.Execute

	For Each item In oRecord.Fields
		Set oComputer = GetObject(item)
	Next
End Function

Public Function ADSearch(strProperty)

	oConn.Open "Active Directory Provider"
	Set oCmd.ActiveConnection = oConn
	oCmd.CommandText = "Select Name, Description, DistinguishedName from " &_
	"'LDAP://"&strDomain&"' Where objectCategory='computer'" 
	oCmd.Properties("Page Size") = 1000
	oCmd.Properties("searchscope") = 2
	Set oRecord = oCmd.Execute
	oRecord.MoveFirst
	
	Do Until oRecord.EOF
	On Error Resume Next 
		Set oComputer = GetObject _
		("LDAP://" & orecord.Fields("distinguishedName").value)
			Description = oComputer.Get("Description")
			If InStr(1,LCase(Description), LCase(strProperty)) <> 0 Then
				Call Dict.ItemList("ADRecords",orecord.Fields("name").value& _
				"|x|" & Description)
			End If
		Description = Null
		oRecord.MoveNext
	Loop
	oConn.Close
End Function
'----------------Class Objects-------------------------------------------------

Class cls_Dict
'Class wrapper for the scripting.dictionary
	Private oDict, oNet, Comparemode, strSplit, oFso, oWShell, oADSI

'---------------------------------------------------------

Private Sub Class_Initialize()
'Dictionary class init subroutine    
    If Debugmode Then On Error Goto 0 Else On Error Resume Next
		Set oDict 	= CreateObject("Scripting.Dictionary")
		Set oNet	= CreateObject("Wscript.Network")
		Set oFso	= CreateObject("Scripting.FileSystemObject")
		Set oWShell = CreateObject("Wscript.Shell")
		Set oADSI = CreateObject("ADSystemInfo")
		
		Dim strUserDomain : strUserDomain = oADSI.DomainDNSName
		Dim strDomain : strDomain = Split(strUserDomain,".")
		For Each item In strDomain
			strDNDomain = strDNDomain & "DC="&item&","
		Next
		oDict.CompareMode = 1
			strSplit = "|:|"
		Call oDict.Add("CurrentDir",oWShell.CurrentDirectory&"")
		Call oDict.Add("computername", oNet.Computername)
		Call oDict.Add("Windir",LCase(oWShell.ExpandEnvironmentStrings _
			("%windir%")))
		Call oDict.Add("CurrentUser",LCase(oNet.UserName))
		Call oDict.Add("Domain",LCase(oNet.UserDomain))
		Call oDict.Add("DomainDN",Left(strDNDomain,(Len(strDNDomain)-1)))
		Call SetOsVer
End Sub

'---------------------------------------------------------

Private Sub Class_Terminate()
'Dictionary class termination subroutine
	If IsObject(oDict) then Set oDict = Nothing
End Sub

'---------------------------------------------------------

Public Property Get CurrentDir
'Returns Current Directory for the script
	CurrentDir = oDict.Item("CurrentDir")
End Property

'---------------------------------------------------------

Public Property Get ComputerName
'Returns the machine name for the current machine
	ComputerName = oDict.Item("computername")
End Property

'---------------------------------------------------------

Public Property Get CurrentUser
'Returns the machine name for the current machine
	CurrentUser = oDict.Item("CurrentUser")
End Property

'---------------------------------------------------------

Public Property Get Domain
'Returns the machine name for the current machine
	Domain = oDict.Item("Domain")
End Property

'---------------------------------------------------------

Public Property Get DistinguishedDomainName
'Returns the Distinguished Name for the Domain
	DistinguishedDomainName = oDict.Item("DomainDN")
End Property

Public Property Get Windir
'Returns the windows directory for the local machine
	Windir = oDict.Item("windir")
End Property

Public Property Get SystemRoot
'Returns the appropriate system directory system32 or syswow64

	If InStr(StrReverse(oDict.Item("CurrentOsVer")), "46x") <> 0 Then 
		SystemRoot = Windir & "syswow64"
	Else
		SystemRoot = Windir & "system32"
	End If

End Property
'---------------------------------------------------------

Public Sub Add(strKey,strValue)
'Method to Add a key and item
	If Debugmode Then On Error Goto 0 Else On Error Resume Next

    Dim EnvVariable, strSplit

    	strSplit = Split(strValue, "%")
	If IsArray(strSplit) Then 
    	EnvVariable = oWShell.ExpandEnvironmentStrings _
    		("%" & strSplit(1) & "%")
    	strValue = strSplit(0) & EnvVariable & strSplit(2)
    			If strValue = "" Then
    				strValue = strSplit(0)
    			End If
    End If
	If oDict.Exists(strKey) Then
		oDict(strKey) = Trim(strValue)
	Else
		oDict.Add strKey, Trim(strValue)
	End If
End Sub

'---------------------------------------------------------

Public Function Exists( strkey)
'Method to check existance of a key
    If Debugmode Then On Error Goto 0 Else On Error Resume Next
	
	If oDict.Exists(strKey) then 
		Exists = True
	Else
		Exists = False
	End If

End Function

'---------------------------------------------------------

Public Function Keys()
'Method to retrieve an array of keys
    If Debugmode Then On Error Goto 0 Else On Error Resume Next

	If IsObject(oDict) Then
		Keys = oDict.Keys
	End If
End Function

'---------------------------------------------------------

Public Function Items()
'Method to retrieve an array of items
    If Debugmode Then On Error Goto 0 Else On Error Resume Next

	If IsObject(oDict) Then
		Items = oDict.Items
	End If
End Function

'---------------------------------------------------------
Private Sub SetOsVer()
'Sets a comparable OSVer key item into the dictionary
		If DebugMode Then On Error Goto 0 Else On Error Resume Next

		Dim x, VersionCheck	
		
	VersionCheck = owShell.RegRead("HKLMsoftwaremicrosoft" _
					& "windows ntcurrentversionproductname")

			If ofso.folderexists("c:windowssyswow64") Then
				x = "x64"
			Else
				x = "x86"
			End If
		Call oDict.Add("CurrentOsVer",VersionCheck & " " & x)
End Sub
	Public Property Get OsVer()
		OsVer = oDict.Item("CurrentOsVer")
	End Property

'---------------------------------------------------------
Public Property Get AppName()

	AppName = Left(WScript.ScriptName, Len(WScript.ScriptName) - 4)
End Property 

'---------------------------------------------------------

Public Property Get Key( strKey)
'Property to retrieve item value from specific key
    If Debugmode Then On Error Goto 0 Else On Error Resume Next

		Key = Empty
	If IsObject(oDict) Then
		If oDict.Exists(strKey) Then Key = oDict.Item(strKey)
	End If
End Property

'---------------------------------------------------------

Public Sub ItemJoin(strKey, strItem)
'Method to concactenate new items under one key at the end of the string
    If Debugmode Then On Error Goto 0 Else On Error Resume Next
	Dim concat
	If Not oDict.Exists(strKey) Then
		Call oDict.Add(strkey, stritem)
	Else
		concat = oDict.Item(strKey)
		concat = concat & " " & strItem
			oDict.Remove(strKey)
		Call oDict.Add(strKey,concat)
	End If
End Sub

'---------------------------------------------------------

Public Sub ItemList( strKey,  strItem)
'Method to concactenate new items under one key at the end of the string
    If Debugmode Then On Error Goto 0 Else On Error Resume Next
	Dim concat
	If Not oDict.Exists(strKey) Then
		Call oDict.Add(strkey, stritem)
	Else
		concat = oDict.Item(strKey)
		concat = concat & "|:|" & strItem
			oDict.Remove(strKey)
		Call oDict.Add(strKey,concat)
	End If
End Sub

'---------------------------------------------------------

Public Sub ItemJoinRev( strKey,  strItem)
'Method to concactenate new items under one key at the start of the string
    If Debugmode Then On Error Goto 0 Else On Error Resume Next
	Dim concat
	If Not oDict.Exists(strKey) Then
		Call oDict.Add(strkey, stritem)
		Exit Sub
	Else
		concat = oDict.Item(strKey)
		concat = strItem & " " & concat
			oDict.Remove(strKey)
		Call oDict.Add(strKey,concat)
	End If
End Sub
	
'---------------------------------------------------------	

Public Function ReturnArray( strKey)
'Method to return an item as an array
    If Debugmode Then On Error Goto 0 Else On Error Resume Next
	
	Dim ItemToSplit, ItemArray
	
	ItemToSplit = oDict.item(strKey)
	
	ItemArray = Split(ItemToSplit, strSplit)
	
	ReturnArray = ItemArray	
	
End Function
	
'---------------------------------------------------------	

Public Sub Remove( strKey)
'Method to remove a key value
	oDict.Remove(strKey)
End Sub

'---------------------------------------------------------

Public Sub RemoveAll()
'Method to remove all data from the dictionary
	oDict.RemoveAll
End Sub

End Class
'------------------------------------------------------------------------------
</script>

<body bgcolor="silver">
	<table>
	<tr>
	<td>Server</td><td><input type="text" name="servername" size="30"></td>
	<td>Srv Contact</td><td><input type="text" name="srvcontact" size="30"></td>
	</tr>
	<tr>
	<td>SIXDOT</td><td><input type="text" name="sixdot" size="30"></td>
	<td>Srv Manager</td><td><input type="text" name="srvmanager" size="30"></td>
	</tr>
	<tr>
	<td>Purpose</td><td><input type="text" name="purpose" size="30"></td>
	<td>SG Primary</td><td><input type="text" name="sgprimary" size="30"></td>
	</tr>
	<tr>
	<td>Location</td><td><input type="text" name="loc" size="30"></td>
	<td>SG Backup</td><td><input type="text" name="sgbackup" size="30"></td>
	</tr>
	<tr>
	<td>Domain</td><td><input type="text" name="domain" size="30"></td>
	<td>DBA Primary</td><td><input type="text" name="dbaprimary" size="30"></td>
	</tr>
	<tr>
	<td>SLA</td><td><input type="text" name="sla" size="30"></td>
	<td>DBA Backup</td><td><input type="text" name="dbabackup" size="30"></td>
	</tr>
	</table>
	<p>
	<input type="button" value="Get" onclick="getproc"/>
	<input type="button" value="Set" onclick="setproc"/>
	<input type="button" value="Clear" onclick="clearproc"/>
	<input type="button" value="Search" onclick="searchproc"/>
	<input type="text" value="keyword" name="search">
	</p>
	<hr>
	<div id = "DataArea"></div>
</body>

</html>

I’ve got to say, I really hate all the formality surrounding urination into a cup.  I’m just glad they don’t require a stool sample.

Has anyone ever NOT felt awkward while taking one of these tests?  A normal process that is in and out becomes an entire convoluted process of cup examination, documentation, and a general desire for direction on how to do something that comes as naturally as well, going.  Not to mention the fun mind games that you start to go through such as: “how many poppy seed muffins have I had lately?  Oh lord, they are going to think I’m a heroine addict… great”.

3592fv

 

Anyway, I’ve got a few things I plan on posting surrounding an AD property lookup and inventory tool a friend of mine at work and I have been shooting back and forth as well as the promised CMLogonFramework (cm7).

MMS was a blast. The amount of information, and networking possible is just staggering. I was also pleasantly surprised to find strong brothers in the faith while I was out in Vegas as well.

I’m excited about the future with CM12, Intune, App-v, Powershell, Server 12, Hyper-v, and Ops Man. I had an interesting conversation today over lunch about the essential folly of strict delegated authority and technology specialization that happens inside corporations. I would like to hit a few of the high points I was arguing to substantiate my claim that smaller work forces with broader skill sets offered a stronger IT work force as a whole. In terms of retention, satisfaction, cost of operation, and potential for innovation.

Employee retention and satisfaction will increase.

As I had posted on here previously, money does not serve as a motivational tool for cognitive tasks; which we can all agree on is where most IT engineering level jobs reside. Give enough money that money is not an issue, and you’ve essentially reached the end of money’s power of motivation over your employees. So then how do we motivate these employees to do more? Essentially, give them more to do; or give them diversity in their work and more to solve.

So? What can we conclude from that?

That a highly technical person (who is paid appropriately) will become a more productive (and one could read loyal) employee if given more opportunities to work.

What does delegated authority, and technology specialization teach us? Don’t give them enough money to make money NOT an issue, but instead give them a fixed growth path, and limit their technical involvement to one area. Generally this breeds a mercenary type behavior born of a loss of interest resulting in poor production. This WILL result in higher turn over as employees seek better opportunities, generally using a skill set they cultivated on the previous company’s dime… So why isn’t retention an issue? That’s lost revenue in training, hiring, terminations, and man hours to complete the tasks involved with all of this.

Reduced headcounts, with improved availability

Doing more with less, or less with more. Lets just look at this for a minute and really think this through.

t*(e^x)=c

Technologies that need to be supported (t) times the total number of employees (e) required for each piece (x) then I can get a rough estimate of my required headcount. To keep it simple lets assume that ideally these technologies can be supported 1 for 1. If I find myself in a specialized state the value of x will have to be 2. In some cases you could get away with 1, but if this is a tier 2 or higher item you are at a serious risk in terms of support availability. This is a problem with specialization, you can cross train, but rarely does that cross training work appropriately for hand off in a crisis situation.

However if your standard mode of operation allows for covering multiple areas then workloads will delegate themselves between employees evenly. When one leaves another can step in line to carry that workload without any impact. You have effectively reduced your required workload by 1 per technology. Now of course this is very basic, and doesn’t account for a lot of variables that would exist such as synergies that already exist, but if one adopts distributed responsibility more synergies will be found and that head count will reduce. Salaries will be released to go back into the company, and to the salaries of your remaining talent.

You’ve now found the way to take the subject of money off the table, and increased your support availability. When I talk about availability, I don’t just mean in terms of support, but even in project through put and time lines. You won’t be hit as hard by your “so and so guy”‘s vacation in terms of project completion.

Innovation’s will be found more frequently

I’m not going to go too deep on this as it’s a pretty simple benefit to identify. You have more eyes on something, the greater the chance is you find an improvement to that.

You will have an increasingly more motivated work force

By establishing a distributed responsibility system you have also given your employees two of the 3 fundamental keys for motivation.

  1. Autonomy
  2. Mastery

How so, you might ask? By exposing your employees to more technology and work you have given, or even forced them into a state of self governance. They are given the reigns to see what is needed and respond accordingly to those needs which in turn will result in mastery of the technologies that they support. Look, we can spend as much time as we want discussing how people learn and what makes the best teacher, but inevitably we all know that experience is king.

Great, I’m sold, so what are the pitfalls?

You need to identify the right talent, and you need to always evaluate service level requirements and demand.

These are areas that require strong management to be able to identify. In truth, you could spend a lot finding a solid recruiter for talent selection, but I think your current teams should be more involved in selecting their peers. The reality is, they are your source that should let you know if the new person will have the technical chops and personality to fit in and do the work.

Anyway, I could go on further extolling the merits of this model, but I feel most my points would just be beating a dead horse so I’ll stop now.

Have a good one.


Edit:

So valve’s employee handbook and business model serves as an excellent (and humorous) example for what I’m talking about.

yea, that is hppening

For those who are closely involved in my life, and I have not told yet… Yes, I still have a job.

However, with this splash of good news comes the realization that I am about to enter into a whirlwind of intense workloads and even more intense deadlines. I still intend to post my logon framework here (hopefully within the month) so there is still that to look forward too. I apologize to anyone who has or is checking this on a fairly regular basis that I’ve been so flakey this year on posting.

Oh, and I’m going to Vegas next week for MMS!

vegas

Ran into this on a failing MP repair in our DMZ.  The error was a 1603, and according to the mp.msi logs it was unable to create the virtual directories for the MP to function.  What was looking like a complete IIS rebuild turned out to be a known issue surrounding BITS; and a far simpler solution then I had originally imagined.

The long and short or it; uninstall and reinstall the BITS feature, then reinstall the MP site component and bam.

 

To say I’ve been a bit busy lately would be the understatement of the year.

Finalizing critical content packages to allow the decommission of our previous systems management software.  Transitioning our infrastructure to the new systems as well, and performing software rationalizations in our environment has put me at a limit to sitting and writing.

Oh, did I mention general systems integration for a new company that I’m not certain I have a future with still?

I do thoroughly enjoy the work though as it’s largely technical and requires little (or allows for little) theory crafting sessions on the best possible way.  Don’t get me wrong, I love planning, but planning without action to me is just a miserable existence.  I don’t thrive on anarchy, but I enjoy doing work as opposed to talking about it; and I enjoy clutch situations at times.


In other, life altering news; our daughter was officially diagnosed with Cerebral Palsy last week.  I’m not really sure where else to go with that outside of the fact it is what it is.  It was a rough day last Monday when we got the news; but I think I am past the diagnosis and back to looking at my daughter for what she is, not what she will or will not be.

I have said these things to you, that in me you may have peace.  In the world you will have tribulation.  But take heart; I have overcome the world. – John 16:33

When I see my beautiful daughter smile, I’m reminded how lucky I am that she’s alive and in our care.  Even if that burden is great, I gladly bear it; as would most parents.  I’m sure there will still be anger, and pain dealing with this so please, if you have been then continue to pray for us.


Will on the other hand, my main man.  He’s absolutely digging “getting muscles” lately and is continually asking me if such and such builds muscles, or telling me how or where he got some new muscle. He’s also been doing a really great job lately with being a responsible big brother to his sister in her trials.  Admittedly he still gets frustrated at times with the amount of attention his sister receives, but his love and encouragement for her continues to amaze me and makes me proud to be his father.

So back to the building muscles thing.  I came home last night from work, and my son comes yelling  “DADDY COME HERE I WANT TO SHOW YOU SOMETHING”.  So I walk into the family room, and he’s taken a toy shopping cart and pulled it up to the mantle, and proceeds to do wide grip overhand chin ups.  It was a rest day for me too so I just did some yoga that night as well, which my son was MORE than eager to get involved in; the entire time explaining to me how or why it builds muscles.  That kid is awesome.


Hah, well I ended up writing a lot more then I expected; I should quit while I’m ahead.  Take care until next time.

A reasoning individual without doubt is unreasonable.

-Daniel Belcher

Reason:

  1. a basis or cause, as for some belief, action, fact, event, etc.
  2. The mental powers concerned with forming conclusions, judgments, or inferences.
  3. Sound judgment; good sense

Reasoning:

  1. The act or process of a person who reasons.
  2. The process of forming conclusions, judgements, or inferences from facts or premises
  3. The reasons, arguments, proofs, etc., resulting from this process

Reasonable:

  1. Agreeable to reason or sound judgement; logical.

Doubt:

  1. to be uncertain about; consider questionable or unlikely; hesitate to believe
  2. To be uncertain about something; be undecided in opinion or belief.

 

For one to reason, they must be able to question the very premise of that which they currently believe, else that reasoning is suspect and lacking in sound judgment.  Mind you, there is reasonable doubt, and that is what I’m speaking to directly here.

So how’s it going?

Alright, so current progress.  I am into week 5 of my regimen.  Current overall gains and losses are roughly 10% body fat (roughly 33mm of fat density), and +6 lbs of lean body mass with an overall weight loss of 10 lbs.

I actually had greater gains in my LBM, but lost a pound due to less then ideal caloric intake the last week of January.  I’ve since adjusted my caloric intake now and feel the difference in the gym and see it in the mirror.

 


So what am I eating?


Well, first my rule of thumb. 

Clean calories (few indulgences)

Avoid sugars, natural or refined (occasional exceptions for glycogen levels post workout)

Little to No dairy

No additional fats

      • 2 Egg White and Oatmeal Pancakes with Sugar Free syrup and 1 cup of cheerios dry with 12oz black coffee.
  • 5oz Eye of round (steak) with green beans and onions and 1/2c dry oats (with a dash of Truvia)
  • 4oz Turkey tenderloin on toasted wheat with mustard and pickles
  • 5oz Pulled chicken breast with Texas Pete Buffalo sauce and pickles 12oz black coffee
  • 1/2c oats with 1 scoop protein powder 8oz water
  • 1 scoop protein powder 8oz water & 6oz with C4 workout days / 5oz Pulled chicken breast and brown rice mixed on off days
  • 5oz Eye of round (steak) with green beans and onions
  • 1 – 2 gallons of water during the course of the day

I’ve also swapped my breakfast a few times for an Acai Berry + Blue Berry + Banana + Protein Powder smoothie a few mornings when sugars were needed.

I will shuffle my meals around on occasion for variety, but largely stick to heavy digesting protein in the morning and night with lighter ones during the day and strong morning carb intake with 0 after my workout in the evenings.  Currently my macros break down to:

Protein / Carbs / Fat

51 / 41 / 8

I don’t think these macro levels are sustainable, but I am attempting to cut while still developing clean muscle.  So essentially I’m walking a fine line of keeping my carbs at a level they keep glycogen levels up and aid in muscle repair with plenty of protein for the repair and limiting fats in an attempt to promote stored fat usage in these processes.

I can generally tell when I’m firing off fat for energy because it’s a really short burst of power then just an overall dip in my lifts.  Nights where I’ve felt it worse then others I’ve put some cheerios in my belly with my last meal.

 


What about the gym?


 

Well this is where it gets interesting.  As I stated before, I am following Kris Gethin’s 12-week hardcore plan.  Now I’m going to stop here for one second and kind of plug both bodybuilding.com and Kris Gethin.  If you are interested in fitness, don’t know where to start, or are a fitness junkie and just want more and more information then Bodybuilding.com is one of the best resources I could recommend.  As for Kris Gethin, there is something to be said for a personal trainer who takes the time to throw together such in depth material and post it for free.  Does he profit from this stuff, sure, he’s a BB employee; but he has a passion for what he does, and WANTS to help others reach their goals.

With all that being said, I largely stick to his prescribed workouts for the day with little to no variation.  If I’ve made variations it’s been to either:

  1. Increase intensity
  2. Equipment not available
  3. Focus on lagging areas
  4. Recovery dates have been shuffled as well

 

Generally speaking though it’s a 5 day split which simply means 2 on 1 off 3 on 1 off (or some variant).  Kris shuffles that schedule a lot for multiple reasons and shuffles targeted muscle groups quite a bit as well.

Low intensity cardio in the morning, and evening even on off days (for me around 124 – 135 bpm) @ 20 – 30 minutes.  Something I’m also doing that Kris has in his program I like is ending with 150 abdominal twists.

I think anyone starting out should really give this a go.  I highly recommend following a structured plan like Kris’s initially to really glean useful information and discipline.  With this plan he offers a video a day to give you little tid bits of information that will really help to educate you as much as motivate you.  Also for women, there are plenty of free plans to follow as well such as Jamie Eason’s Live Fit.

I wish I had known about BB back when I really started.  After spending the past 4 years dealing with my fitness and health I finally feel like I’ve learned to listen to what my body is telling me and respond in kind.

 

Sum it up?

  • Keep excess calories and fat in check.
  • Increase thermogenesis through constant eating and cardio
  • Vary routines and resistance volume to force muscles to adapt and grow

 

Have a good one.

I’ve got a fairly large amount of content I’d like to post and discuss:

  • Current workout/diet regiment, and results so far
  • SCCM health check script and logon framework I’ve been working on
  • Theological view on harmony, and mans self importance

However, between my work schedule, and workout schedule I’ve had little free time and now I’m fighting a sinus infection. Instead of just blowing off my blog completely I wanted to of course post this, as perhaps more an outline for subjects I wish to cover this coming month.

Until then, take care.