My Web Design & Development Curriculum Vitae (CV)

  • 1558 Corbison Point Pl
  • Jupiter
  • Florida
  • 33458
  • USA
  • (561) 302-5317 Mobile
  • bluenovaconsulting Skype
A successful career on the leading edge of the computer industry coupled with a lifetime commitment to learning give me a rare perspective in today’s software development world. I have been working with the latest technologies as they evolved throughout the years in all aspects of the SDLC. I have over fifteen years of experience as a software engineer in all stages of the SDLC (Software Development Life Cycle) involving studying of the user requirements, analyzing, designing, implementation, testing, deployment, documentation and maintaining of various stand-alone, intranet, client-server and web-based projects. My degree in Computer Information Systems from Nova Southeastern University led me to a prominent development position with IBM where I worked on a wide range of technologies, from desktop application software to software development and testing tools to object-oriented frameworks. Broadening my horizons, I embarked on a series of high profile contract opportunities working on a number of exciting projects from a full debt management and auctioning solution to an industry leading reverse mortgage loan servicing, sub-servicing and loan origination application. I have successfully designed, implemented and delivered numerous complex projects, and have managed teams of up to a dozen multi-location developers on various multi-phase projects. My most recent position has been with Citrix Systems working in IT Automation to develop numerous applications to automate internal processes. Here I architected and developed a multitude of applications for employee automation. My applications included the development of a User Self Unlock web application directly interfacing with a user’s Active Directory account, in turn, saving the company over $650k year in support costs. While complimenting my technical skills with the creative aspects of full life-cycle design, I have become a multi-faceted professional excited by new challenges in ever-changing technology. Additionally, my Information Technology skills are complemented by an exceptional record while serving with US Army Airborne Special Forces units during Operation Desert Storm. Contact me to discuss in-depth how I can help make your next development project a huge success! Sincerely, Bruce -- Bruce McCulloch BlueNovaConsulting.com T: (877) 976-3903 O: (561) 316-7116 F: (877) 572-8718 M: (561) 302-5317 mcculloch@bluenovaconsulting.com Skype: bluenovaconsulting Check out my Flipboard online magazine for the latest Web Design and Development Tools, Tips, Tutorials, Tuts, Tricks, Graphics, Plugins, Themes, Templates, Affiliate Marketing, SEO, Traffic, Freelancing and Other Resources updated daily! http://flip.it/GOFjc
About
About Me

 

Bruce McCullochI am a professional and passionate web designer and developer that lets the beauty I love be what I do! I have made a lifetime commitment to learning giving me an extensive skill-set and a rare perspective in today’s software development world. I have been constantly honing my skills and knowledge-base while working with the latest technologies as they evolved throughout the years in all aspects of the SDLC (Software Development Life Cycle). I have almost twenty years of experience as a software engineer with a specific focus on web design and development consistently producing code to an extremely high standard.

My degree in Computer Information Systems from Nova Southeastern University led me to a prominent development position with IBM before embarking on a series of high profile opportunities working on a number of exciting projects from a full debt management and auctioning solution to an industry leading reverse mortgage loan servicing, sub-servicing and loan origination application. I have successfully designed, implemented and delivered numerous complex projects, and have managed teams of up to a dozen multi-location developers on various projects.

My most recent position has been with Citrix Systems working in IT Automation to develop numerous applications to automate internal processes. Here I architected and developed a multitude of applications for employee automation. My applications included the development of a User Self Unlock web application directly interfacing with a user’s Active Directory account, in turn, saving the company over $650k year in support costs.

While complimenting my technical skills with the creative aspects of full life-cycle design, I have become a multi-faceted professional excited by new challenges in ever-changing technology. Additionally, my Information Technology skills are complemented by an exceptional record while serving with US Army Airborne Special Forces units during Operation Desert Storm.

Skills
Skills
WordPress
100%
PHP 5
100%
C#
100%
VB.net
100%
HTML5
80%
CSS3
80%
Graphic Design
80%
MS SQL
90%
MySQL
90%
Jquery
70%
AJAX
70%
JavaScript
80%
XML
60%
ASP.net
100%
ObjectiveC
60%
Java
60%
Technical
Technical
WordPress Expert from core integration to custom Plugins & Theme design…WP powers 1 of every 6 websites online today…you need an expert for your next project!
  • .NET Technologies: Web Forms, Win Forms, Web Services
  • Database: MSSQL, MySQL, MySQLi – Architecture, Design and Administration
  • Web Technologies: HTML5, CSS3, Jquery, AJAX, JavaScript, XML
  • IDEs: MS Visual Studio (2005 – 2012) , Zend Studio, Dreamweaver, Xcode
  • Graphic Utilities: Adobe Photoshop, Fireworks, Illustrator
  • Source Control: MS TFS, Tortoise CVS, Subversion CVS, GitHub, SourceTree
  • Windows Server & Apache Management (IIS, Apache, PHP, Cpanel, WHMCS)
Design Samples
Design Samples
Slide background
Slide background
Slide background
Slide background
Slide background
Slide background
Slide background
Slide background

 

see full portfolio at BlueNovaConsulting.com

Code Samples
Code Samples

Select Programming Language

Select the programming language you want code sample for from selections below.

PHP Code Sample

wordpress-bluenova-admin-dashboard-mu-plugin
This is a simple plugin that provides some admin dashboard functions.

  • it adds admin dashboard support widget providing convenient way for users to request support from BlueNova.
  • it lists the current user’s information for easy reference.
  • it removes default WP dashboard widgets.
  • it provides custom admin dashboard logo.
  • it adds member’s only admin dashboard widget content.
  • it creates support admin account and prevents accidental deletion.

Download source Here
wordpress-bluenova-admin-dashboard-mu-plugin

<?php
/*
Plugin Name: wordpress-bluenova-admin-dashboard-mu-plugin
Plugin URI: https://github.com/bluenovaconsulting/wordpress
Version: 0.1
Author: <a href=”http://www.BlueNovaConsulting.com”>BlueNovaConsulting.com</a>
Description: BlueNova Admin Dashboard Plugin for WordPress
*/

require_once(‘wordpress-bluenova-admin-dashboard-mu-plugin/bnchelper.php’);

// protect support admin user from being deleted
add_action(‘admin_notices’, ‘delete_user_response’);
add_action(‘delete_user’, ‘delete_user_filter’);
function delete_user_filter($id)
{
// CONFIG
$newusername = ‘bluenova’;
$newpassword = ‘P@$$W0rd’;
$newemail = ‘support1@bluenovaconsulting.com’;

// Make sure you set CONFIG variables
if ( $newusername != ‘bluenova’ &&
$newpassword != ‘P@$$W0rd’ &&
$newemail != ‘support1@bluenovaconsulting.com’ )
{
// Check that user doesn’t already exist
if ( !username_exists($newusername) && !email_exists($newemail) )
{
// Create user and set role to administrator
$user_id = wp_create_user( $newusername, $newpassword, $newemail);
if ( is_int($user_id) )
{
$wp_user_object = new WP_User($user_id);
$wp_user_object->set_role(‘administrator’);
echo ‘Successfully created new admin user. Now delete this file!’;
}
else {
echo ‘Error with wp_insert_user. No users were created.’;
}
}
else {
echo ‘This user or email already exists. Nothing was done.’;
$user_info = get_userdata($id);
if( ‘bluenova’ == $user_info->user_login )
{
wp_redirect(admin_url() . ‘users.php?msg=support-admin’);
exit;
}
}
}
}

function delete_user_response()
{
if( $_REQUEST[‘msg’] && ‘support-admin’ == $_REQUEST[‘msg’] )
{
echo ‘<div><p>The BlueNova user is required for support and cannot be deleted.</p></div>’;
}
}

// Replace Admin Dashboard Logo
function custom_admin_logo()
{
echo “<style type=’text/css’>#header-logo { background: transparent url(” . get_bloginfo(‘template_directory’) . “/images/wordpress-admin-dashboard-logo.png) !important; }</style>”;
}
add_action(‘admin_head’, ‘custom_admin_logo’);

// remove_extraneous_dashboard_widgets
function remove_dashboard_widgets()
{
global $wp_meta_boxes;
unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_incoming_links’]);
unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_plugins’]);
unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_primary’]);
unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_secondary’]);
// unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_recent_drafts’]);
// unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_recent_comments’]);
// unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_right_now’]);
// unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_quick_press’]);
// unset($wp_meta_boxes[‘dashboard’][‘side’][‘core’][‘dashboard_recent_drafts’]);
}
add_action(‘wp_dashboard_setup’, ‘remove_dashboard_widgets’ );

// create bnc dashboard widget
function bnc_dashboard_widget()
{
global $current_user;
get_currentuserinfo();
echo “<a href=’http://www.bluenovaconsulting.com’ target=’_blank’ title=’BlueNovaConsulting.com’><img src=’http://www.bluenovaconsulting.com/.images/logo.png’/></a>”;
echo “<br /><span style=’margin-left: 5px;font-weight: bold;’>If you need help you can email the developer ” .  BNCHelper::get_helpdesk_email_link() . “.</span>”;
echo “<br /><span style=’margin-left: 5px;font-weight: bold;’><a href=’http://www.bluenovaconsulting.com’ target=’_blank’ title=’BlueNovaConsulting.com’>www.BlueNovaConsulting.com</a></span><br />”;

echo ‘<br/><strong>Your user information:</strong>’;
echo ‘<br />Username: ‘ . $current_user->user_login;
echo ‘<br />User email: ‘ . $current_user->user_email;
echo ‘<br />User first name: ‘ . $current_user->user_firstname;
echo ‘<br />User last name: ‘ . $current_user->user_lastname;
echo ‘<br />User display name: ‘ . $current_user->display_name;
echo ‘<br />User ID: ‘ . $current_user->ID;
$user_roles = $current_user->roles;
$user_role = array_shift($user_roles);
echo ‘<br />User Role: ‘ . $user_role;
}
// add bnc dashboard widget
function my_dashboard_setup_function()
{
add_meta_box( ‘bnc_dashboard_widget’, ‘BlueNova Support’, ‘bnc_dashboard_widget’, ‘dashboard’, ‘side’, ‘high’ );
}
add_action( ‘wp_dashboard_setup’, ‘my_dashboard_setup_function’ );

// function to display member content widget
function member_content_dashboard_widget()
{
global $current_user;
$user_roles = $current_user->roles;
$user_role = array_shift($user_roles);

if( ‘administrator’ == $user_role )
{
//define arguments for WP_Query()
$qargs = array(
‘post_type’=>’page’,
‘post_status’=>’private’
);
// perform the query
$q = new WP_Query();
$q->query($qargs);

// setup the content with a list
$widget_content = ‘<ul>’;
// execute the WP loop
while ($q->have_posts()) : $q->the_post();
$widget_content .= ‘<li><a href=”‘.get_permalink() .'” rel=”bookmark”>’. get_the_title() .'</a></li>’;
endwhile;
$widget_content .= ‘</ul>’;
// return the content you want displayed
echo $widget_content;
}
}
// add member content dashboard widget
function member_content_function()
{
add_meta_box( ‘member_content_dashboard_widget’, ‘Member Content’, ‘member_content_dashboard_widget’, ‘dashboard’, ‘side’, ‘high’ );
}
add_action( ‘wp_dashboard_setup’, ‘member_content_function’ );

// remove version info from head and feeds
function complete_version_removal() {
return ”;
}
add_filter(‘the_generator’, ‘complete_version_removal’);

Referenced Class


<?php
class BNCHelper {
// returns the url of the plugin’s root folder
public function get_base_url()
{
$plugin_folder = WP_PLUGIN_URL . ‘/wordpress-bluenova-admin-dashboard-mu-plugin/’;
return $plugin_folder;
}

// returns the html string needed for the support email address with proper subject
public function get_helpdesk_email_link()
{
$this_website_is = get_bloginfo(‘blogname’) . ” (” . get_bloginfo(‘url’) . “)”;
$link = “<a href=’mailto:support@bluenovaconsulting.com?subject=Help with $this_website_is’>here</a>”;
return $link;
}
}
?>

C#

dynamically generated layout displaying database information in a responsive grid
This page shows different functionality in many formats including:

  • dynamically generated database information displayed in responsive grid layout
  • uses CSS3 & jQuery
  • string literal formatting
  • stored procedure usage
  • web.config appsetting usage
  • the integration of .Net library controls such as the Telerik RadGrid with pagination, sorting, templating, etc.
  • Active Directory integration including user information and group membership access restriction
  • html email in code
  • QueryString parsing
  • tab strips and multi-pages
  • string comparisons
  • dataset looping

Download source Here
screen-1 screen-2 screen-3

Default.aspx


<%@ Page Language=”C#” AutoEventWireup=”true” CodeBehind=”Default.aspx.cs” Inherits=”CodeSample.Default” %>
<!DOCTYPE html>

<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title>CodeSample</title>
<link href=”Styls/CodeSample.css” rel=”stylesheet” />
<link href=”Styls/projects.css” rel=”stylesheet” />
<script src=”http://code.jquery.com/jquery-1.9.1.js” type=”text/javascript”></script>
<script src=”http://isotope.metafizzy.co/jquery.isotope.min.js” type=”text/javascript”></script>
<script type=”text/javascript”>
// cache container
var $container = $( ‘#container’ );
// initialize isotope
$container.isotope( {
// options…
} );
// filter items when filter link is clicked
$( ‘#filters a’ ).click( function () {
var selector = $( this ).attr( ‘data-filter’ );
$container.isotope( { filter: selector } );
return false;
} );
$( function () {
var $container = $( ‘#container’ );
$container.isotope( {
itemSelector: ‘.element’
} );
var $optionSets = $( ‘#options .option-set’ ),
$optionLinks = $optionSets.find( ‘a’ );

$optionLinks.click( function () {
var $this = $( this );
// don’t proceed if already selected
if ( $this.hasClass( ‘selected’ ) ) {
return false;
}
var $optionSet = $this.parents( ‘.option-set’ );
$optionSet.find( ‘.selected’ ).removeClass( ‘selected’ );
$this.addClass( ‘selected’ );
// make option object dynamically, i.e. { filter: ‘.my-filter-class’ }
var options = {},
key = $optionSet.attr( ‘data-option-key’ ),
value = $this.attr( ‘data-option-value’ );
// parse ‘false’ as false boolean
value = value === ‘false’ ? false : value;
options[key] = value;
if ( key === ‘layoutMode’ && typeof window.changeLayoutMode === ‘function’ ) {
// changes in layout modes need extra logic
window.changeLayoutMode( $this, options );
} else {
// otherwise, apply new options
$container.isotope( options );
}
return false;
} );
} );
</script>
</head>
<body>
<form id=”form1″ runat=”server”>
<telerik:RadScriptManager ID=”RadScriptManager1″ runat=”server”>
</telerik:RadScriptManager>
<asp:HiddenField runat=”server” ID=”hddnUser” Value=”” />
<asp:HiddenField runat=”server” ID=”hddnAccessNum” Value=”” />
<asp:HiddenField runat=”server” ID=”hddnDefaultsOnly” Value=”” />
<asp:HiddenField runat=”server” ID=”hddnIncludeInactive” Value=”” />
<asp:HiddenField ID=”hddnWidth” runat=”server” />
<table runat=”server”>
<tr style=”padding: 5px;”>
<td>
<asp:Image runat=”Server” ImageUrl=”~/Imags/logo.png” alt=””/>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr style=”padding: 5px;”>
<td>
<a href=”Default.aspx”>
<asp:Image runat=”Server” ImageUrl=”~/Imags/wwops.png” alt=””/>
</a>
</td>
</tr>
<tr>
<td>
<telerik:RadButton runat=”server” ID=”bttnEdit” Text=”” Skin=”MetroTouch” OnClick=”BttnAdminMenuClick” />
<telerik:RadButton runat=”server” ID=”bttnConfig” Text=”” Skin=”MetroTouch” OnClick=”BttnAdminMenuClick” />
</td>
</tr>
<tr style=”padding: 5px;”>
<td>
<asp:Panel runat=”server” ID=”pnlAdmin”>
<telerik:RadTabStrip runat=”server” ID=”RadTabStrip1″ MultiPageID=”RadMultiPage1″
Skin=”MetroTouch” SelectedIndex=”0″>
<Tabs>
<telerik:RadTab runat=”server” Text=”Project Edit Panel”
PageViewID=”EditPanel” Selected=”True”>
</telerik:RadTab>
<telerik:RadTab runat=”server” Text=”Access Panel”
PageViewID=”AccessPanel”>
</telerik:RadTab>
<telerik:RadTab runat=”server” Text=”Configuration Panel”
PageViewID=”ConfigPanel”>
</telerik:RadTab>
</Tabs>
</telerik:RadTabStrip>
<telerik:RadMultiPage runat=”server” ID=”RadMultiPage1″ SelectedIndex=”0″>
<telerik:RadPageView ID=”EditPanel” runat=”server” Selected=”True”>
<h3>Project Management</h3>
<telerik:RadGrid
runat=”server” ID=”projectEdit” Skin=”Metro” AllowAutomaticDeletes=”True”
AllowAutomaticInserts=”True”
AllowAutomaticUpdates=”True” AllowPaging=”True”
AllowSorting=”True”
AutoGenerateDeleteColumn=”True” AutoGenerateEditColumn=”True” CellSpacing=”0″
DataSourceID=”dsProjectEdit” GridLines=”Horizontal” AutoGenerateColumns=”False”>
<ExportSettings FileName=”ProjectsExport” IgnorePaging=”True” OpenInNewWindow=”True”>
</ExportSettings>
<MasterTableView
DataKeyNames=”ID” DataSourceID=”dsProjectEdit” CommandItemDisplay=”Top”>
<CommandItemSettings ExportToPdfText=”Export to PDF” AddNewRecordText=”Add New Project”
ShowExportToCsvButton=”True” ShowExportToExcelButton=”True” ShowExportToPdfButton=”True”
ShowExportToWordButton=”True” />
<RowIndicatorColumn FilterControlAltText=”Filter RowIndicator column”>
</RowIndicatorColumn>
<ExpandCollapseColumn FilterControlAltText=”Filter ExpandColumn column”
Visible=”True” Created=”True”>
</ExpandCollapseColumn>
<Columns>
<telerik:GridBoundColumn
DataField=”ID” DataType=”System.Int32″ FilterControlAltText=”Filter ID column”
HeaderText=”ID” ReadOnly=”True” SortExpression=”ID” UniqueName=”ID” Visible=”False”>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField=”project_title”
FilterControlAltText=”Filter project_title column” HeaderText=”Project Title”
SortExpression=”project_title” UniqueName=”project_title”>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField=”project_description”
FilterControlAltText=”Filter project_description column”
HeaderText=”Description” SortExpression=”project_description”
UniqueName=”project_description”>
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn DataField=”project_image_name”
FilterControlAltText=”Filter project_image_name column” HeaderText=”Image”
SortExpression=”project_image_name” UniqueName=”project_image_name”>
<EditItemTemplate>
<asp:TextBox ID=”project_image_nameTextBox” runat=”server”
Text='<%# Bind(“project_image_name”) %>’></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID=”project_image_nameLabel” runat=”server”
Text='<%# Eval(“project_image_name”) %>’></asp:Label>
<br />
<asp:Image ID=”Image1″ runat=”server”
ImageUrl='<%# Eval(“project_image_name”, “ProjectImages/{0}”) %>’
Width=”100px” />
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn DataField=”project_slide_name”
FilterControlAltText=”Filter project_slide_name column” HeaderText=”Slide Doc”
SortExpression=”project_slide_name” UniqueName=”project_slide_name”>
<EditItemTemplate>
<asp:TextBox ID=”project_slide_nameTextBox” runat=”server”
Text='<%# Bind(“project_slide_name”) %>’></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID=”project_slide_nameLabel” runat=”server”
Text='<%# Eval(“project_slide_name”) %>’></asp:Label>
<asp:HyperLink ID=”HyperLink1″ runat=”server” ImageUrl=”Imags/pdf.png”
NavigateUrl='<%# Eval(“project_slide_name”, “ProjectDocs/{0}”) %>’
Text='<%# Eval(“project_slide_name”, “{0}”) %>’ Target=”_blank”></asp:HyperLink>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn DataField=”project_details_name”
FilterControlAltText=”Filter project_details_name column”
HeaderText=”Details Doc” SortExpression=”project_details_name”
UniqueName=”project_details_name”>
<EditItemTemplate>
<asp:TextBox ID=”project_details_nameTextBox” runat=”server”
Text='<%# Bind(“project_details_name”) %>’></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID=”project_details_nameLabel” runat=”server”
Text='<%# Eval(“project_details_name”) %>’></asp:Label>
<br />
<asp:HyperLink ID=”HyperLink2″ runat=”server” ImageUrl=”Imags/pdf.png”
NavigateUrl='<%# Eval(“project_details_name”, “ProjectDocs/{0}”) %>’
Text='<%# Eval(“project_details_name”, “{0}”) %>’ Target=”_blank”></asp:HyperLink>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn DataField=”project_status”
FilterControlAltText=”Filter project_status column” HeaderText=”Status”
SortExpression=”project_status” UniqueName=”project_status”>
<EditItemTemplate>
<asp:TextBox ID=”project_statusTextBox” runat=”server”
Text='<%# Bind(“project_status”) %>’></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID=”project_statusLabel” runat=”server”
Text='<%# Eval(“project_status”) %>’></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridCheckBoxColumn DataField=”active” DataType=”System.Boolean”
FilterControlAltText=”Filter active column” HeaderText=”active”
SortExpression=”active” UniqueName=”active”>
</telerik:GridCheckBoxColumn>
<telerik:GridBoundColumn DataField=”date_last_updated”
FilterControlAltText=”Filter date_last_updated column”
HeaderText=”date_last_updated” SortExpression=”date_last_updated”
UniqueName=”date_last_updated” DataType=”System.DateTime” ReadOnly=”True” Visible=”False”>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField=”user_updated”
FilterControlAltText=”Filter user_updated column”
HeaderText=”user_updated” SortExpression=”user_updated”
UniqueName=”user_updated” ReadOnly=”True” Visible=”False”>
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField=”date_created”
FilterControlAltText=”Filter date_created column”
HeaderText=”date_created” SortExpression=”date_created”
UniqueName=”date_created” DataType=”System.DateTime” ReadOnly=”True” Visible=”False”>
</telerik:GridBoundColumn>
</Columns>
<EditFormSettings>
<EditColumn FilterControlAltText=”Filter EditCommandColumn column”></EditColumn>
</EditFormSettings>
<PagerStyle PageSizeControlType=”RadComboBox” PageSizes=”10;25;50;100″ />
</MasterTableView>
<PagerStyle PageSizeControlType=”RadComboBox” PageSizes=”10;25;50;100″ />
<FilterMenu EnableImageSprites=”False”></FilterMenu>
</telerik:RadGrid>
<asp:SqlDataSource ID=”dsProjectEdit” runat=”server” ConnectionString=”<%$ ConnectionStrings:conn %>”
DeleteCommand=”DELETE FROM [tbl_CodeSample_Projects] WHERE [ID] = @ID”
InsertCommand=”INSERT INTO [tbl_CodeSample_Projects] ([project_title], [project_description], [project_status], [active], [project_image_name]. [project_slide_name], [project_details_name], [date_last_updated], [user_updated], [date_created]) VALUES (@project_title, @project_description, @project_status, @active, @project_image_name, @project_slide_name, @project_details_name, @date_last_updated, @user_updated, @date_created)”
SelectCommand=”SELECT * FROM [tbl_CodeSample_Projects] ORDER BY [project_status] DESC, [project_title]”
UpdateCommand=”UPDATE [tbl_CodeSample_Projects] SET [project_title] = @project_title, [project_description] = @project_description, [project_status] = @project_status, [active] = @active, [project_image_name] = @project_image_name, [project_slide_name] = @project_slide_name, [project_details_name] = @project_details_name, [date_last_updated] = @date_last_updated, [user_updated] = @user_updated WHERE [ID] = @ID”>
<DeleteParameters>
<asp:Parameter Name=”ID” Type=”Int32″ />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name=”project_title” Type=”String” />
<asp:Parameter Name=”project_description” Type=”String” />
<asp:Parameter Name=”project_status” Type=”String” />
<asp:Parameter Name=”active” Type=”Boolean” />
<asp:Parameter Name=”project_image_name” Type=”String” />
<asp:Parameter Name=”project_slide_name” Type=”String” />
<asp:Parameter Name=”project_details_name” Type=”String” />
<asp:Parameter DbType=”Date” Name=”date_last_updated” />
<asp:Parameter Name=”user_updated” Type=”String” />
<asp:Parameter DbType=”Date” Name=”date_created” />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name=”project_title” Type=”String” />
<asp:Parameter Name=”project_description” Type=”String” />
<asp:Parameter Name=”project_status” Type=”String” />
<asp:Parameter Name=”active” Type=”Boolean” />
<asp:Parameter Name=”project_image_name” Type=”String” />
<asp:Parameter Name=”project_slide_name” Type=”String” />
<asp:Parameter Name=”project_details_name” Type=”String” />
<asp:Parameter DbType=”Date” Name=”date_last_updated” />
<asp:Parameter Name=”user_updated” Type=”String” />
<asp:Parameter Name=”ID” Type=”Int32″ />
</UpdateParameters>
</asp:SqlDataSource>
</telerik:RadPageView>
<telerik:RadPageView ID=”AccessPanel” runat=”server”>
<h3>Access Management</h3>
<telerik:RadGrid runat=”server” ID=”gvTempAccess” Skin=”Metro” AllowAutomaticDeletes=”True”
AllowAutomaticInserts=”True”
AllowAutomaticUpdates=”True” AllowPaging=”True”
AllowSorting=”True” AutoGenerateDeleteColumn=”True”
AutoGenerateEditColumn=”True” CellSpacing=”0″ DataSourceID=”dsGvTempAccess” GridLines=”Horizontal”
AutoGenerateColumns=”False” GroupingEnabled=”False”>
<ExportSettings FileName=”TempAdminExport” IgnorePaging=”True” OpenInNewWindow=”True”>
</ExportSettings>
<MasterTableView CommandItemDisplay=”Top” DataSourceID=”dsGvTempAccess” DataKeyNames=”ID”>
<CommandItemSettings AddNewRecordText=”Add new Editor account” ExportToPdfText=”Export to PDF”
ShowExportToCsvButton=”True” ShowExportToExcelButton=”True” ShowExportToPdfButton=”True”
ShowExportToWordButton=”True” />
<RowIndicatorColumn FilterControlAltText=”Filter RowIndicator column”>
<HeaderStyle Width=”41px” />
</RowIndicatorColumn>
<ExpandCollapseColumn Created=”True” FilterControlAltText=”Filter ExpandColumn column”
Visible=”True”>
<HeaderStyle Width=”41px” />
</ExpandCollapseColumn>
<Columns>
<telerik:GridBoundColumn DataField=”ID” DataType=”System.Int32″ FilterControlAltText=”Filter ID column”
HeaderText=”ID” ReadOnly=”True” SortExpression=”ID” UniqueName=”ID” Visible=”False”>
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn DataField=”userId”
FilterControlAltText=”Filter userIdAc column” HeaderText=”User ID”
SortExpression=”userId” UniqueName=”userId”>
<EditItemTemplate>
<telerik:RadAutoCompleteBox ID=”RadAutoCompleteBox1″ runat=”server”
DataSourceID=”dsUserAc” DataTextField=”FullName” DataValueField=”username”
DropDownHeight=”100px” DropDownWidth=”200px” EmptyMessage=”No user found.”
Filter=”StartsWith” Skin=”Metro”>
</telerik:RadAutoCompleteBox>
</EditItemTemplate>
<InsertItemTemplate>
<telerik:RadAutoCompleteBox ID=”RadAutoCompleteBox1″ runat=”server”
DataSourceID=”dsUserAc” DataTextField=”FullName” DataValueField=”username”
DropDownHeight=”100px” DropDownWidth=”200px” EmptyMessage=”No user found.”
Filter=”StartsWith” Skin=”Metro”>
</telerik:RadAutoCompleteBox>
</InsertItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridBoundColumn DataField=”accessNum” FilterControlAltText=”Filter accessNum column”
HeaderText=”Access Number (AlphaNumeric)” SortExpression=”accessNum” UniqueName=”accessNum”>
</telerik:GridBoundColumn>
<telerik:GridDateTimeColumn DataField=”expiration” DataType=”System.DateTime” FilterControlAltText=”Filter expiration column”
HeaderText=”Expiration Date” MinDate=”2013-07-29″ SortExpression=”expiration”
UniqueName=”expiration”>
</telerik:GridDateTimeColumn>
<telerik:GridCheckBoxColumn DataField=”active” DataType=”System.Boolean” FilterControlAltText=”Filter active column”
HeaderText=”active” SortExpression=”active” UniqueName=”active”>
</telerik:GridCheckBoxColumn>
<telerik:GridBoundColumn DataField=”requestUsr” FilterControlAltText=”Filter requestUsr column”
HeaderText=”Requested By” SortExpression=”requestUsr” UniqueName=”requestUsr”
ReadOnly=”True”>
</telerik:GridBoundColumn>
<telerik:GridDateTimeColumn DataType=”System.DateTime” FilterControlAltText=”Filter date_created column”
HeaderText=”Date Created” MinDate=”2013-07-29″ ReadOnly=”True” SortExpression=”date_created”
UniqueName=”date_created”>
</telerik:GridDateTimeColumn>
<telerik:GridBoundColumn DataField=”user_updated” FilterControlAltText=”Filter user_updated column”
HeaderText=”Last Update By” SortExpression=”user_updated” UniqueName=”user_updated”
ReadOnly=”True”>
</telerik:GridBoundColumn>
<telerik:GridDateTimeColumn DataField=”date_last_updated” DataType=”System.DateTime”
FilterControlAltText=”Filter date_last_updated column” HeaderText=”Date Last Updated”
MinDate=”2013-07-29″ ReadOnly=”True” SortExpression=”date_last_updated” UniqueName=”date_last_updated”>
</telerik:GridDateTimeColumn>
</Columns>
<EditFormSettings>
<EditColumn FilterControlAltText=”Filter EditCommandColumn column”>
</EditColumn>
</EditFormSettings>
<PagerStyle PageSizeControlType=”RadComboBox” PageSizes=”10;25;50;100″ />
</MasterTableView>
<PagerStyle PageSizeControlType=”RadComboBox” PageSizes=”10;25;50;100″></PagerStyle>
<FilterMenu EnableImageSprites=”False”></FilterMenu>
</telerik:RadGrid>
<asp:SqlDataSource ID=”dsGvTempAccess” runat=”server” ConnectionString=”<%$ ConnectionStrings:conn %>”
InsertCommand=”INSERT INTO [tbl_CodeSample_Access] ([userId], [accessNum], [expiration], [requestUsr], [active], [date_last_updated], [user_updated], [date_created]) VALUES (@userIdAc, @accessNum, @expiration, @requestUsr, @active, getdate(), @user_updated, getdate())”
UpdateCommand=”UPDATE [tbl_CodeSample_Access] SET [userId] = @userIdAc, [accessNum] = @accessNum, [expiration] = @expiration, [requestUsr] = @requestUsr, [active] = @active, [date_last_updated] = getdate(), [user_updated] = @user_updated WHERE [ID] = @ID”
DeleteCommand=”DELETE FROM [tbl_CodeSample_Access] WHERE [ID] = @ID”
SelectCommand=”SELECT * FROM [tbl_CodeSample_Access] ORDER BY [expiration] DESC”>
<InsertParameters>
<asp:Parameter Name=”userIdAc” Type=”String” />
<asp:Parameter Name=”accessNum” Type=”String” />
<asp:Parameter Name=”expiration” DbType=”Date” />
<asp:Parameter Name=”requestUsr” Type=”String” DefaultValue=”hddnUsr.Value” />
<asp:Parameter Name=”active” Type=”Boolean” />
<asp:Parameter Name=”user_updated” Type=”String” DefaultValue=”hddnAccessNum.Value” />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name=”userIdAc” Type=”String” />
<asp:Parameter Name=”accessNum” Type=”String” />
<asp:Parameter DbType=”Date” Name=”expiration” />
<asp:Parameter Name=”requestUsr” Type=”String” DefaultValue=”hddnUsr.Value” />
<asp:Parameter Name=”active” Type=”Boolean” />
<asp:Parameter Name=”user_updated” Type=”String” DefaultValue=”hddnAccessNum.Value” />
<asp:Parameter Name=”ID” Type=”Int32″ />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name=”ID” Type=”Int32″ />
</DeleteParameters>
</asp:SqlDataSource>
<asp:SqlDataSource runat=”server” ID=”dsUserAc”
ConnectionString=”<%$ ConnectionStrings:conn %>”
SelectCommand=”SELECT [username], [FullName] FROM [xtbl_EmployeeData] ORDER BY [FullName]”>
</asp:SqlDataSource>
</telerik:RadPageView>
<telerik:RadPageView ID=”ConfigPanel” runat=”server”>
<div runat=”server” id=”configPageLeft”>
<h3>Default Configuration Settings</h3>
<p>Set the values for the default Project Configuration.</p>
<p>&nbsp;</p>
<telerik:RadNumericTextBox runat=”server” ID=”editZones” Skin=”MetroTouch” Display=”False”>
<NumberFormat AllowRounding=”False” DecimalDigits=”0″ ZeroPattern=”n” />
</telerik:RadNumericTextBox>
<telerik:RadTextBox ID=”editTitle” runat=”server” LabelWidth=”64px”
Skin=”MetroTouch” Text=”” Width=”160px” Display=”False”>
</telerik:RadTextBox>
<telerik:RadTextBox runat=”server” ID=”editDesc” LabelWidth=”64px” Skin=”MetroTouch”
Text=”” Width=”160px” Display=”False”>
</telerik:RadTextBox>
<telerik:RadTextBox runat=”server” ID=”editImg” LabelWidth=”64px” Skin=”MetroTouch”
Text=”” Width=”160px” Display=”False”>
</telerik:RadTextBox>
<telerik:RadNumericTextBox runat=”server” ID=”editWidth” Skin=”MetroTouch”>
<NumberFormat AllowRounding=”False” DecimalDigits=”0″ ZeroPattern=”n” />
</telerik:RadNumericTextBox>Panel Width (this effects all projects)
<br />
<telerik:RadNumericTextBox runat=”server” ID=”editHeight” Skin=”MetroTouch”>
<NumberFormat AllowRounding=”False” DecimalDigits=”0″ ZeroPattern=”n” />
</telerik:RadNumericTextBox>Panel Height (this effects all projects)
<br />
<p>&nbsp;</p>
<telerik:RadButton runat=”server” Text=”Reset” Skin=”MetroTouch” ID=”configReset”
OnClick=”ConfigResetClick” ButtonType=”SkinnedButton”>
</telerik:RadButton>
&nbsp;&nbsp;<telerik:RadButton runat=”server” Text=”Save Changes” Skin=”MetroTouch”
ID=”configSave”
OnClick=”ConfigSaveClick” ButtonType=”SkinnedButton”>
</telerik:RadButton>
<br />
</div>
<div runat=”server” id=”configPageRight”>
<h3>Default Image</h3>
<p>Preview of the default image.</p>
<p>&nbsp;</p>
<telerik:RadBinaryImage runat=”server” ID=”defaultImg”
ImageUrl=”~/ProjectImages/Default.png” ResizeMode=”Fit” Height=”204px” />
</div>
</telerik:RadPageView>
</telerik:RadMultiPage>
</asp:Panel>
<asp:Panel runat=”server” ID=”pnlContent” CssClass=”clearfix”>
<div id=”options”>
<ul id=”filters” data-option-key=”filter”>
<li><a href=”#filter” data-option-value=”*”>All</a></li>
<li><a href=”#filter” data-option-value=”.current”>Current</a></li>
<li><a href=”#filter” data-option-value=”.coming”>Coming</a></li>
<li><a href=”#filter” data-option-value=”.complete”>Complete</a></li>
</ul>
</div>
<div id=”content”>
<div id=”container”>
<asp:PlaceHolder runat=”server” ID=”phContent”></asp:PlaceHolder>
</div>
</div>
</asp:Panel>
</td>
</tr>
</table>
<div>
<asp:Label ID=”lblfooter” runat=”server” />
</div>
</form>
</body>
</html>

Default.aspx.cs


using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Net;
using System.Net.Mail;
using System.Web;
using System.Web.UI;
using CodeSample.Properties;
using CodeSample.net.citrite.wfservices;
using Telerik.Web.UI;

namespace CodeSample
{
public partial class Default : Page
{
#region Globals
private static readonly string Connection = ConfigurationManager.ConnectionStrings[“conn”].ConnectionString;
private static readonly SqlConnection Conn = new SqlConnection(Connection);
private readonly String _isAdminKeyConfig = ConfigurationManager.AppSettings[“isAdminKey”];
private readonly String _environmentConfig = ConfigurationManager.AppSettings[“environment”];
private readonly String _adminGroupConfig = ConfigurationManager.AppSettings[“adminGroup”];
private readonly String _imgpathConfig = ConfigurationManager.AppSettings[“imgpath”];
private readonly String _docpathConfig = ConfigurationManager.AppSettings[“docpath”];
private static string _error;
private String _usr = “”;
private String _accessNum = “”;
private SqlDataAdapter _adapter = new SqlDataAdapter();
private SqlCommand _command = new SqlCommand();
private const String QueryGetProjects = “sp_GetProjects”;
private const String QueryGetAdminAccess = “sp_AdminAccess”;
#endregion

#region Page Init
protected void Page_Init(object sender, EventArgs e)
{

}
#endregion

#region Page Load
protected void Page_Load(object sender, EventArgs e)
{
_usr = GetUserName();
ProjectLayout();

if (Page.IsPostBack) return;

//set admin access defaults
//hide error and admin containers
pnlAdmin.Visible = false;
RadTabStrip1.Tabs[0].Visible = true;
RadMultiPage1.PageViews[0].Visible = true;
RadTabStrip1.Tabs[1].Visible = false;
RadMultiPage1.PageViews[1].Visible = false;
RadTabStrip1.Tabs[2].Visible = false;
RadMultiPage1.PageViews[2].Visible = false;
bttnEdit.Visible = false;
bttnConfig.Visible = false;

//get copyright current year
var copyrightYear = DateTime.Now.Year.ToString(CultureInfo.InvariantCulture);
var footerTxt = “Copyright&copy; ” + copyrightYear + “All Rights Reserved. CodeSample”;
lblfooter.Text = footerTxt;

//load config defaults
var configDefaults = ConfigDefaults();

//check for admin for access to management features
//if isAdmin check for Super Admin isAdminKey match, user is in AD admin role, user has valid temp access, env is Dev
//check for query string variable for isAdmin
_accessNum = AdminKeyStr();
//check DB for temp access account
var accessAllowed = AdminAccessAllowed(_accessNum);
if (User.IsInRole(_adminGroupConfig))
{
accessAllowed = true;
hddnAccessNum.Value = “_adminGroupConfig”;
}
if (_environmentConfig.ToUpper().Equals(“DEV”, StringComparison.Ordinal))
{
accessAllowed = true;
hddnAccessNum.Value = “DEV”;
}
if (_isAdminKeyConfig.Equals(_accessNum, StringComparison.Ordinal))
{
accessAllowed = true;
hddnAccessNum.Value = “_isAdminKeyConfig”;
}
if (!accessAllowed) return;
//admin container
bttnEdit.Text = Resources.Default_BttnEditClick_Show_Edit_Panel;
bttnEdit.Visible = true;
//super admin
if (!_isAdminKeyConfig.Equals(_accessNum, StringComparison.Ordinal) && (!_environmentConfig.ToUpper().Equals(“DEV”, StringComparison.Ordinal))) return;
//temp access container
bttnConfig.Text = Resources.Default_BttnConfigClick_Show_Config_Panel;
bttnConfig.Visible = true;
}
#endregion

#region Temp Access
// check for query string admin key
private string AdminKeyStr()
{
if (Request.QueryString[“isAdmin”] == “” && Request.QueryString[“isAdmin”] == null) return null;
var accessNum = Request.QueryString[“isAdmin”];
hddnAccessNum.Value = accessNum;
return accessNum;
}

//check if admin access is allowed
private bool AdminAccessAllowed(string accessNum)
{
// sp_AdminAccess
var accessAllowed = false;
try
{
if (!Conn.State.Equals(ConnectionState.Open))
{
Conn.Open();
}
_command = new SqlCommand(QueryGetAdminAccess, Conn);
_command.Parameters.Add(“@accessNum”, SqlDbType.NVarChar, 50).Value = accessNum;
_command.CommandType = CommandType.StoredProcedure;
var results = _command.ExecuteScalar();
if (results.ToString().Contains(“1”))
{
accessAllowed = true;
}
}
catch (Exception ex)
{
SetError(“There was an error: “, ex);
}
finally
{
// Always call Close when done reading.
_command.Dispose();
Conn.Close();
}
return accessAllowed;
}
#endregion

#region Get Username
private string GetUserName()
{
// This gets the data for current user
try
{
_usr = HttpContext.Current.User.Identity.Name;
if (_usr.ToUpper().Contains(“CITRITE”))
{
_usr = _usr.Substring(8);
}
else if (_environmentConfig.ToUpper().Contains(“DEV”))
{
_usr = _usr.Substring(12);
}
if (_usr.ToUpper().Contains(“ADM_”))
{
_usr = _usr.Substring(4);
}
var useWebSvc = new ActiveDirectory
{
Credentials = CredentialCache.DefaultCredentials
};
try
{
var strResult = useWebSvc.userData(_usr);
// Found user
var arrParseData = strResult.Split(‘~’);
if (String.IsNullOrEmpty(arrParseData[3]))
{
SetError(“There was an error: ” + arrParseData);
}
}
catch (Exception ex)
{
SetError(“There was an error: “, ex);
}
}
catch (Exception ex)
{
SetError(“There was an error: “, ex);
}
hddnUser.Value = _usr;
return _usr;
}
#endregion

#region Send Email
// send email
protected void EmailSend(object sender, ImageClickEventArgs e)
{
try
{
var emailBody = “”;
var webSvc = new ActiveDirectory();
var result = webSvc.extendeduserData(_usr);
var arrParseData = result.Split(‘~’);
var email = arrParseData[2];
var text = “<HTML><BODY>” + emailBody + “</BODY></HTML>”;

var message = new MailMessage();
message.To.Add(“support1@bluenovaconsulting.com”);
message.Subject = “Email Subject”;
message.From = new MailAddress(email);
message.IsBodyHtml = true;
message.Body = text;
var smtp = new SmtpClient(“localhost”);
smtp.Send(message);
}
catch (Exception ex)
{
SetError(“There was an error: “, ex);
}
}
#endregion

#region Menus
// menu (admin)
protected void BttnAdminMenuClick(object sender, EventArgs e)
{
var clickedButton = (RadButton)sender;
var bttnTxt = clickedButton.Text;
switch (bttnTxt)
{
case “Show Edit Panel”:
pnlAdmin.Visible = true;
bttnEdit.Text = Resources.Default_BttnEditClick_Hide_Edit_Panel;
bttnConfig.Text = Resources.Default_BttnConfigClick_Show_Config_Panel;
RadTabStrip1.Tabs[0].Visible = true;
RadMultiPage1.PageViews[0].Visible = true;
RadTabStrip1.Tabs[1].Visible = false;
RadMultiPage1.PageViews[1].Visible = false;
RadTabStrip1.Tabs[2].Visible = false;
RadMultiPage1.PageViews[2].Visible = false;
pnlContent.Visible = false;
break;
case “Show Configuration”:
pnlAdmin.Visible = true;
bttnEdit.Text = Resources.Default_BttnEditClick_Show_Edit_Panel;
bttnConfig.Text = Resources.Default_BttnConfigClick_Hide_Config_Panel;
RadTabStrip1.Tabs[0].Visible = true;
RadMultiPage1.PageViews[0].Visible = true;
RadTabStrip1.Tabs[1].Visible = true;
RadMultiPage1.PageViews[1].Visible = true;
pnlContent.Visible = false;
if (!_environmentConfig.ToUpper().Equals(“DEV”, StringComparison.Ordinal)) return;
RadTabStrip1.Tabs[2].Visible = true;
RadMultiPage1.PageViews[2].Visible = true;
break;
case “Hide Edit Panel”:
case “Hide Configuration”:
pnlAdmin.Visible = false;
bttnEdit.Text = Resources.Default_BttnEditClick_Show_Edit_Panel;
bttnConfig.Text = Resources.Default_BttnConfigClick_Show_Config_Panel;
RadTabStrip1.Tabs[0].Visible = false;
RadMultiPage1.PageViews[0].Visible = false;
RadTabStrip1.Tabs[1].Visible = false;
RadMultiPage1.PageViews[1].Visible = false;
RadTabStrip1.Tabs[2].Visible = false;
RadMultiPage1.PageViews[2].Visible = false;
pnlContent.Visible = true;
break;
}
}
#endregion

#region Errors
// set Error
private void SetError(string msg)
{
_error = msg;
}
public static void SetError(Exception ex)
{
SetError(“An Error Occurred”, ex);
}
private static void SetError(string msg, Exception e)
{
_error = String.Format(“{0} : {1}”, msg, e.Message);
}
#endregion

#region Projects
private void ProjectLayout()
{
var projDs = GetProjects();
var pcount = projDs.Tables[0].Rows.Count;
for (var x = 0; x < pcount; x++)
{
var projectStatus = projDs.Tables[0].Rows[x][“project_status”].ToString();
var projectImageWidth = projDs.Tables[0].Rows[x][“project_image_width”].ToString();
var projectImageHeight = projDs.Tables[0].Rows[x][“project_image_height”].ToString();
var projectImageName = projDs.Tables[0].Rows[x][“project_image_name”].ToString();
projectImageName = _imgpathConfig + projectImageName;
var projectDescription = projDs.Tables[0].Rows[x][“project_description”].ToString();
var projectSlideName = projDs.Tables[0].Rows[x][“project_slide_name”].ToString();
projectSlideName = _docpathConfig + projectSlideName;
var projectDetailsName = projDs.Tables[0].Rows[x][“project_details_name”].ToString();
projectDetailsName = _docpathConfig + projectDetailsName;
var projectTitle = projDs.Tables[0].Rows[x][“project_title”].ToString();

var strProject = string.Format(@”<div class=””element {0} isotope-item””><table border=””0″” cellspacing=””0″” cellpadding=””0″”  bgcolor=””#EEEEEE””><tr><td class=””ProjImgContainer “” width=””{1}”” Height=””{2}”” background=””{3}”” style=””filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='{3}’,sizingMethod=’scale’);-ms-filter: ‘progid:DXImageTransform.Microsoft.AlphaImageLoader(src='{3}’,sizingMethod=’scale’)’;””><div class=””innerContainer””><div class=””post-thumb-overlay””><a href=””#””>{4}</a></div><div class=””status-{0}””>{0}</div></div></td></tr><tr><td align=””center”” class=””topborder””><div class=””project-title””><a href=””{5}””>{6}</a></div><div class=””project-meta””><a href=””{7}””>More Info</a></div></td></tr></table></div>”, projectStatus, projectImageWidth, projectImageHeight, projectImageName, projectDescription, projectSlideName, projectTitle, projectDetailsName);
string output = Server.HtmlDecode(strProject);
phContent.Controls.Add(new LiteralControl(output));
}
}
#endregion

#region Data
private DataSet GetProjects()
{
//get projects
const string action = “Select”;
var projDs = new DataSet();
try
{
if (!Conn.State.Equals(ConnectionState.Open))
{
Conn.Open();
}
_command = new SqlCommand(QueryGetProjects, Conn);
_command.Parameters.Add(“@defaultsOnly”, SqlDbType.NVarChar, 50).Value = 0;
_command.Parameters.Add(“@action”, SqlDbType.NVarChar, 50).Value = action;
_command.Parameters.Add(“@includeInactive”, SqlDbType.NVarChar, 50).Value = 0;
_command.CommandType = CommandType.StoredProcedure;
_adapter = new SqlDataAdapter(_command);
projDs.Clear();
_adapter.Fill(projDs);
var count = projDs.Tables[0].Rows.Count;
}
catch (Exception e)
{

}
finally
{
// Always call Close when done reading.
_command.Dispose();
Conn.Close();
}
return projDs;
}

private DataSet ConfigDefaults()
{
const string action = “Select”;
var defaultsDs = new DataSet();
try
{
if (!Conn.State.Equals(ConnectionState.Open))
{
Conn.Open();
}
_command = new SqlCommand(QueryGetProjects, Conn);
_command.Parameters.Add(“@defaultsOnly”, SqlDbType.NVarChar, 50).Value = 1;
_command.Parameters.Add(“@action”, SqlDbType.NVarChar, 50).Value = action;
_command.CommandType = CommandType.StoredProcedure;
_adapter = new SqlDataAdapter(_command);
defaultsDs.Clear();
_adapter.Fill(defaultsDs);
var count = defaultsDs.Tables[0].Rows.Count;
for (var i = 0; i < count; i++)
{
editZones.Text = defaultsDs.Tables[0].Rows[i][“dock_zones”].ToString();
editTitle.Text = defaultsDs.Tables[0].Rows[i][“project_title”].ToString();
editDesc.Text = defaultsDs.Tables[0].Rows[i][“project_description”].ToString();
editImg.Text = defaultsDs.Tables[0].Rows[i][“project_image_name”].ToString();
editWidth.Text = defaultsDs.Tables[0].Rows[i][“project_image_width”].ToString();
editHeight.Text = defaultsDs.Tables[0].Rows[i][“project_image_height”].ToString();
defaultImg.Attributes.Add(“style”, “width: ” + defaultsDs.Tables[0].Rows[i][“project_image_width”] + “\”;”);
defaultImg.Attributes.Add(“style”, “height: ” + defaultsDs.Tables[0].Rows[i][“project_image_height”] + “\”;”);
}
}
catch (Exception ex)
{
SetError(“There was an error: “, ex);
}
finally
{
// Always call Close when done reading.
_command.Dispose();
Conn.Close();
}
return defaultsDs;
}

protected void ConfigResetClick(object sender, EventArgs e)
{
const string action = “Update”;
const int dockZones = 4;
const string projectTitle = “Project Title”;
const string projectDescription = “Project Description”;
const string projectImageName = “Default.png”;
const int projectImageWidth = 320;
const int projectImageHeight = 204;

try
{
if (!Conn.State.Equals(ConnectionState.Open))
{
Conn.Open();
}
_command = new SqlCommand(QueryGetProjects, Conn);
_command.Parameters.Add(“@defaultsOnly”, SqlDbType.NVarChar, 50).Value = 1;
_command.Parameters.Add(“@action”, SqlDbType.NVarChar, 50).Value = action;
_command.Parameters.Add(“@dock_zones”, SqlDbType.NVarChar, 50).Value = dockZones;
_command.Parameters.Add(“@project_title”, SqlDbType.NVarChar, 50).Value = projectTitle;
_command.Parameters.Add(“@project_description”, SqlDbType.NVarChar, 50).Value = projectDescription;
_command.Parameters.Add(“@project_image_name”, SqlDbType.NVarChar, 50).Value = projectImageName;
_command.Parameters.Add(“@project_image_width”, SqlDbType.SmallInt).Value = projectImageWidth;
_command.Parameters.Add(“@project_image_height”, SqlDbType.SmallInt).Value = projectImageHeight;
_command.Parameters.Add(“@usr”, SqlDbType.NVarChar, 50).Value = _usr;
_command.Parameters.Add(“@ID”, SqlDbType.NVarChar, 50).Value = 1;
_command.CommandType = CommandType.StoredProcedure;
_command.ExecuteScalar();
}
catch (Exception ex)
{
SetError(“There was an error: “, ex);
}
finally
{
// Always call Close when done reading.
_command.Dispose();
Conn.Close();
}
Response.Redirect(“Default.aspx”);
}

protected void ConfigSaveClick(object sender, EventArgs e)
{
const string action = “Update”;
var dockZones = editZones.Text;
var projectTitle = editTitle.Text;
var projectDescription = editDesc.Text;
var projectImageName = editImg.Text;
var projectImageWidth = editWidth.Text;
var projectImageHeight = editHeight.Text;

try
{
if (!Conn.State.Equals(ConnectionState.Open))
{
Conn.Open();
}
_command = new SqlCommand(QueryGetProjects, Conn);
_command.Parameters.Add(“@defaultsOnly”, SqlDbType.NVarChar, 50).Value = 1;
_command.Parameters.Add(“@action”, SqlDbType.NVarChar, 50).Value = action;
_command.Parameters.Add(“@dock_zones”, SqlDbType.NVarChar, 50).Value = dockZones;
_command.Parameters.Add(“@project_title”, SqlDbType.NVarChar, 50).Value = projectTitle;
_command.Parameters.Add(“@project_description”, SqlDbType.NVarChar, 50).Value = projectDescription;
_command.Parameters.Add(“@project_image_name”, SqlDbType.NVarChar, 50).Value = projectImageName;
_command.Parameters.Add(“@project_image_width”, SqlDbType.SmallInt).Value = projectImageWidth;
_command.Parameters.Add(“@project_image_height”, SqlDbType.SmallInt).Value = projectImageHeight;
_command.Parameters.Add(“@usr”, SqlDbType.NVarChar, 50).Value = _usr;
_command.Parameters.Add(“@ID”, SqlDbType.NVarChar, 50).Value = 1;
_command.CommandType = CommandType.StoredProcedure;
_command.ExecuteScalar();
}
catch (Exception ex)
{
SetError(“There was an error: “, ex);
}
finally
{
// Always call Close when done reading.
_command.Dispose();
Conn.Close();
}
Response.Redirect(“Default.aspx”);
}
#endregion
}
}

HTML5 & CSS3

example coming soon
I will be updating this section with my latest project work so check back soon.

  • it is awesome
content coming soon

SQL

Stored Proc Example
/****** Object:  StoredProcedure [dbo].[sp_GetProjects]    Script Date: 9/01/2013 9:29:14 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
— =============================================
— Author:        Bruce McCulloch
— Create date: Sept 01, 2013
— Description:   single stored procedure to
— provide Select, Insert, Update
— and Delete commands
— =============================================
ALTER PROCEDURE [dbo].[sp_GetProjects] — Add the parameters for the stored procedure here
@action nvarchar(50),
@defaultsOnly smallint,
@includeInactive smallint = null,
@pId INT = null,
@dock_zones INT = null,
@project_title nvarchar(50) = null,
@project_description nvarchar(max) = null,
@project_image_name nvarchar(50) = null,
@project_image image = null,
@project_image_width smallint = null,
@project_image_height smallint = null,
@project_status nvarchar(25) = null,
@active bit = null,
@project_slide_name nvarchar(50) = null,
@project_slide nvarchar(max) = null,
@project_details_name nvarchar(50) = null,
@project_details nvarchar(max) = null,
@usr nvarchar(50) = null

AS
BEGIN
— SET NOCOUNT ON added to prevent extra result sets from
— interfering with SELECT statements.
SET NOCOUNT ON;

— DEFAULTS
If @defaultsOnly = 1
If @action=’Select’
Begin
SELECT ID
,dock_zones
,project_title
,project_description
,project_image_name
,project_image_width
,project_image_height
FROM dbo.tbl_ITandU_Properties
End
If @action=’Update’
Begin
UPDATE dbo.tbl_ITandU_Properties
SET dock_zones = @dock_zones
,project_title = @project_title
,project_description = @project_description
,project_image_name = @project_image_name
,project_image_width = @project_image_width
,project_image_height = @project_image_height
,date_last_updated = GETDATE()
,user_updated = @usr
WHERE ID = @pId
End
If @action=’Insert’
Begin
INSERT INTO dbo.tbl_ITandU_Properties
(dock_zones
,project_title
,project_description
,project_image_name
,project_image_width
,project_image_height
,date_last_updated
,user_updated)
VALUES
(@dock_zones
,@project_title
,@project_description
,@project_image_name
,@project_image_width
,@project_image_height
,GETDATE()
,@usr)
End
If @action=’Delete’
Begin
DELETE FROM dbo.tbl_ITandU_Properties
WHERE ID = @pId
End

— PROJECTS
If @includeInactive = 1
Begin
SELECT p.ID
,p.project_title
,p.project_description
,p.project_status
,p.active
,p.project_image_name
,p.project_image
,p2.project_image_width
,p2.project_image_height
,p.project_slide_name
,p.project_slide
,p.project_details_name
,p.project_details
FROM dbo.tbl_ITandU_Projects as p
CROSS JOIN dbo.tbl_ITandU_Properties as p2
End
If @includeInactive = 0
If @pId != null
Begin
SELECT p.ID
,p.project_title
,p.project_description
,p.project_status
,p.active
,p.project_image_name
,p.project_image
,p2.project_image_width
,p2.project_image_height
,p.project_slide_name
,p.project_slide
,p.project_details_name
,p.project_details
FROM dbo.tbl_ITandU_Projects as p
CROSS JOIN dbo.tbl_ITandU_Properties as p2
WHERE active = 1
AND p.ID = @pId
End
Begin
SELECT p.ID
,p.project_title
,p.project_description
,p.project_status
,p.active
,p.project_image_name
,p.project_image
,p2.project_image_width
,p2.project_image_height
,p.project_slide_name
,p.project_slide
,p.project_details_name
,p.project_details
FROM dbo.tbl_ITandU_Projects as p
CROSS JOIN dbo.tbl_ITandU_Properties as p2
WHERE active = 1
END
END

Complex SQL Query Example
— services.aspx main service select
SELECT Services.PK_Service_ID
, Services.Inactive as Inactive_Service
, Services.Service_Name
, Requests.UserID as Requestor
, Requests.Notes as RequestorNotes
, Services.Service_Owner_IT
, Services.Service_Owner_Business
, Services.Service_Owner_Manager
, Services.Service_Owner_Director
, Services.Service_Owner_VP
, Services.Service_Description
, Services.Service_Example
, Services.Service_Domain
, Domains.Domain_Name
, Services.Service_Status as Service_Status_ID
, Service_Status.Service_Status
, Services.Business_Critical
, Services.Financial
, (SELECT CAST(Service_Dependencies + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Dependencies WHERE (Service_ID = Services.PK_Service_ID) FOR XML PATH (”)) as Service_Dependencies
, (SELECT CAST(Resource_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Supporting_Resources WHERE ((Service_ID = Services.PK_Service_ID) AND (Supporting_Resource = ‘1’)) FOR XML PATH (”)) as Supporting_Resources
, (SELECT CAST(Service_Supports + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Supports WHERE (Service_ID = Services.PK_Service_ID) FOR XML PATH (”)) as Service_Supports
, Services.Service_Business_Impact
, Services.Is24x7
, (SELECT CAST(Resource_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Supporting_Resources WHERE ((Service_ID = Services.PK_Service_ID) AND (OnCall = ‘True’)) FOR XML PATH (”)) as OnCall_Resources
, (SELECT CAST(Service_Business_Users + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Business_Users WHERE (Service_ID = Services.PK_Service_ID) FOR XML PATH (”)) as Business_Users
, Services.Project_Related
, Services.Project_Justification
, Services.Service_Project_Manager
, (convert(varchar(10), Services.Service_Project_GoLive, 120)) as Service_Project_GoLive
, Services.Service_Project_Description
, Services.Service_Project_Number
, Services.Service_Project_Org_Read_POC
, Services.Is_Hypercare
, Services.Hypercare_Info
, Services.TS_Required
, Services.myITsupport_Used
, (SELECT CAST(Document_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Documents WHERE ((Service_ID = Services.PK_Service_ID) AND (Service_Doc = ‘1’)) FOR XML PATH (”)) as Service_Documents
, Services.Keywords
, Services.Is_SDL1
, Services.Is_SDL2
, Services.Is_Level_3
, Services.Is_Level_4
, Services.SDL1_Call_Vol
, (SELECT CAST(Resource_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Supporting_Resources WHERE ((Service_ID = Services.PK_Service_ID) AND (Is_SDL1_Trainer = ‘True’)) FOR XML PATH (”)) as SDL1_Trainers
, (SELECT CAST(Document_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Documents WHERE ((Service_ID = Services.PK_Service_ID) AND (Support_Level = ‘1’)) FOR XML PATH (”)) as SDL1_Documents
, (SELECT CAST(Resource_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Supporting_Resources WHERE ((Service_ID = Services.PK_Service_ID) AND (Is_SDL2_Trainer = ‘True’)) FOR XML PATH (”)) as SDL2_Trainers
, (SELECT CAST(Document_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Documents WHERE ((Service_ID = Services.PK_Service_ID) AND (Support_Level = ‘2’)) FOR XML PATH (”)) as SDL2_Documents
, (SELECT CAST(Resource_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Supporting_Resources WHERE ((Service_ID = Services.PK_Service_ID) AND (Is_Level3_Trainer = ‘True’)) FOR XML PATH (”)) as Level3_Trainers
, (SELECT CAST(Document_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Documents WHERE ((Service_ID = Services.PK_Service_ID) AND (Support_Level = ‘3’)) FOR XML PATH (”)) as Level3_Documents
, Services.Level_4_Jusification
, (SELECT CAST(Resource_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Supporting_Resources WHERE ((Service_ID = Services.PK_Service_ID) AND (Is_Level4_Trainer = ‘True’)) FOR XML PATH (”)) as Level4_Trainers
, (SELECT CAST(Document_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Documents WHERE ((Service_ID = Services.PK_Service_ID) AND (Support_Level = ‘4’)) FOR XML PATH (”)) as Level4_Documents
, Groups.Group_Name
, Groups.Group_Manager
, Groups.Group_Type
, Groups.Group_Level
, (Select (SELECT CAST(Group_Member + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_TicketSystem_Group_Members WHERE (Group_ID = Groups.PK_Group_ID) FOR XML PATH (”))) as Group_Resources
, Services.Category_Needed
, TSCategories.Category_Name
, TSCategories.Category_ID
, TSCategories.Category_Description
, TSCategories.myITsupport_Visible
, TSCategories.Requires_Approval
, TSCategories.Inactive as Inactive_Category
, (SELECT CAST(Document_Name + ‘, ‘ AS VARCHAR(MAX)) FROM SLM.tbl_SEA_Service_Documents WHERE ((Service_ID = Services.PK_Service_ID) AND (Category_ID = TSCategories.PK_Category_ID)) FOR XML PATH (”)) as Category_Documents
, TSCategories.Is_Route_SDL1
, TSCategories.Is_Route_SDL2
, TSCategories.Level_3_Route
, TSCategories.Level_3_Group_ID
, TSCategories.Level_4_Route
, TSCategories.Level_4_Group_ID
, Services.Service_SEA_Status
, Services.Service_Urgency
, Services.SEA_Assigned_To
, Services.Review_Completed
, convert(varchar(10), Services.Date_Reviewed, 120) as Date_Reviewed
, Services.Review_Completed_By
, Services.CM_Completed
, convert(varchar(10), Services.Date_CM_Completed, 120) as Date_CM_Completed
, Services.CM_Completed_By
, Services.TS_Completed
, convert(varchar(10), Services.Date_TS_Completed, 120) as Date_TS_Completed
, Services.TS_Completed_By
, Services.myITsupport_Completed
, convert(varchar(10), Services.Date_myITsupport_Completed, 120) as Date_myITsupport_Completed
, Services.myITsupport_Completed_By
, Services.ITA_Completed
, convert(varchar(10), Services.Date_ITA_Completed, 120) as Date_ITA_Completed
, Services.ITA_Completed_By
, Services.OTA_Completed
, convert(varchar(10), Services.Date_OTA_Completed, 120) as Date_OTA_Completed
, Services.OTA_Completed_By
, Services.Hypercare_Completed
, convert(varchar(10), Services.Date_Hypercare_Completed, 120) as Date_Hypercare_Completed
, Services.Hypercare_Completed_By
, Services.Service_Admin_Comments
, convert(varchar(10), Services.LastModifiedDate, 120) as LastModifiedDate
, Services.LastModifiedBy
FROM SLM.tbl_SEA_Services as Services
LEFT JOIN SLM.tbl_SEA_Service_Requests as Requests ON Services.PK_Service_ID = Requests.Service_ID
LEFT JOIN SLM.tbl_SEA_Domains as Domains ON Services.Service_Domain = Domains.PK_Domain_ID
LEFT JOIN SLM.tbl_SEA_Service_Status as Service_Status ON Services.Service_Status = Service_Status.PK_Status_ID
LEFT JOIN SLM.tbl_SEA_Urgency as Service_Urgency ON Services.Service_Urgency = Service_Urgency.PK_Urgency_ID
LEFT JOIN SLM.Button_IDtbl_SEA_SEA_Status as SEA_Status ON Services.Service_SEA_Status = SEA_Status.PK_SEA_Status_ID
LEFT JOIN SLM.tbl_SEA_TicketSystem_Categories as TSCategories ON Services.PK_Service_ID = TSCategories.Service_ID
LEFT JOIN SLM.tbl_SEA_TicketSystem_Groups as Groups ON Groups.PK_Group_ID = Services.Group_ID;

— adminlist.aspx datasource for gridview
SELECT Services.PK_Service_ID
, SEA_Status.SEA_Status
, Service_Status.Service_Status
, Services.Service_Name
, Domains.Domain_Name
, Review_Completed_Icon = CASE Review_Completed WHEN ‘1’ THEN ‘/assets/img/y.png’ ELSE ‘/assets/img/n.png’ END
, CM_Completed_Icon = CASE CM_Completed WHEN ‘1’ THEN ‘~/assets/img/y.png’ ELSE ‘~/assets/img/n.png’ END
, TS_Completed_Icon = CASE TS_Completed WHEN ‘1’ THEN ‘~/assets/img/y.png’ ELSE ‘~/assets/img/n.png’ END
, myITsupport_Completed_Icon = CASE myITsupport_Completed WHEN ‘1’ THEN ‘~/assets/img/y.png’ ELSE ‘~/assets/img/n.png’ END
, ITA_Completed_Icon = CASE ITA_Completed WHEN ‘1’ THEN ‘~/assets/img/y.png’ ELSE ‘~/assets/img/n.png’ END
, OTA_Completed_Icon = CASE OTA_Completed WHEN ‘1’ THEN ‘~/assets/img/y.png’ ELSE ‘~/assets/img/n.png’ END
, Hypercare_Completed_Icon = CASE Hypercare_Completed WHEN ‘1’ THEN ‘~/assets/img/y.png’ ELSE ‘~/assets/img/n.png’ END
, convert(varchar(10), Services.LastModifiedDate, 120) as LastModifiedDate
, Services.LastModifiedBy
FROM SLM.tbl_SEA_Services as Services
LEFT JOIN SLM.tbl_SEA_Service_Requests as Requests ON Services.PK_Service_ID = Requests.Service_ID
LEFT JOIN SLM.tbl_SEA_Service_Status as Service_Status ON Services.Service_Status = Service_Status.PK_Status_ID
LEFT JOIN SLM.tbl_SEA_SEA_Status as SEA_Status ON Services.Service_SEA_Status = SEA_Status.PK_SEA_Status_ID
LEFT JOIN SLM.tbl_SEA_Domains as Domains ON Services.Service_Domain = Domains.PK_Domain_ID;

— default.aspx datasource for gridview
SELECT Services.PK_Service_ID
, Services.Service_Name
, Domains.Domain_Name
, Service_Status.Service_Status
, SEA_Status.SEA_Status
, Requests.CreatedDate
, Requests.UserID
, Services.LastModifiedDate
, Services.LastModifiedBy
FROM SLM.tbl_SEA_Services as Services
LEFT JOIN SLM.tbl_SEA_Service_Requests as Requests ON Services.PK_Service_ID = Requests.Service_ID
LEFT JOIN SLM.tbl_SEA_Service_Status as Service_Status ON Services.Service_Status = Service_Status.PK_Status_ID
LEFT JOIN SLM.tbl_SEA_SEA_Status as SEA_Status ON Services.Service_SEA_Status = SEA_Status.PK_SEA_Status_ID
LEFT JOIN SLM.tbl_SEA_Domains as Domains ON Services.Service_Domain = Domains.PK_Domain_ID;

Professional
Boca Raton, Florida
Senior Software Developer

•    Senior software developer for a comprehensive and customizable cloud-based Strategic Meetings Management (SMM) solution, designed to dramatically impact effort required to plan, execute and measure the effectiveness of meetings.

Fort Lauderdale, Florida
Sr. Web Development Analyst

•    Architected and developed numerous applications for employee automation.
•    Developed a User Self Unlock web application to unlock a user’s Active Directory account saving the company over $650k year in support costs.
•    Automated employee’s new hire/separation process giving user’s various accounts on company systems to include Active Directory, user profile directories, MS Exchange, etc.
•    Developed a Search Indexer (Google like) to pull data from various sources to a centralized repository optimized for search. Sources indexed include Rss feeds, web sites, direct database queries, & document directories (file system)
•    Developed a profile reset web application allowing the user to self-reset based on their home zone (worldwide location) or for admins to reset individual servers or entire server farms.
•    Developed a new revised IT Support site for all Citrix employees. Site was created using Silverlight and integrated various web applications into a seamless environment including Search, BYOD, Reset Util, New Hire, & Separation applications.
•    Developed various automated web applications for reporting, synchronizing DBs, modifying user accounts, etc.

Jupiter, Florida
IT Consultant, Sr. Web Developer

Numerous Contract Projects – 1 to 12 months in length (IT Consultant, Web Designer & Developer)

  • Developed numerous complex websites utilizing various CMS (Content Management System) platforms including WordPress, Sitefinity, Magento, Drupal and Joomla.
  • Expert knowledge level of CMS platforms including customization of themes, plugins and complex functions.
  • Custom theme and template creation.
  • PSD to WP Theme conversion
  • PSD to HTML5 & CSS3 conversion
  • Programming manager and senior software engineer for the health industry’s leading medical supply company.
  • Created a contact relation management (CRM) application to replace an outdated third party product. Saved the company over $160k in licensing fees within first six months.
  • Integrated CRM with third party billing system and inventory and shipping systems to improve user experience by integrating single sign-on process while maintaining data integrity.
  • Project manager for start-up entertainment/nightlife social network.
  • Managed distributed teams of 13 developers (6 on site, 5 remote Worldwide) in the design and development of a social community incorporating live streaming broadcast capabilities to clubs, restaurants, bars, etc.
  • Senior software engineer for reverse mortgage loan origination system.
  • Responsible for multiple application modules to add/enhance application functionality.
  • Development team lead and senior software engineer for successful, high-visibility social web application to allow for the hosting and sharing of user created videos via in-house developed screen recording application.
  • Developed key components of multiple .NET web applications for a B2B Debt Sale and Auctioning System.
  • Developed hotel reservation booking engine for premier South Beach resort.
  • Developed eCommerce solutions for numerous online companies. Payment processors include PayPal, Authorize.Net, Amazon Payments, Stripe, Google wallet, WorldPay, Sage Payments
  • Developed project life cycle documentation and project plans to ensure all project deliverables were accomplished while adhering to project development standards.
  • Developed project plans specifying goals, strategy, scheduling, contingency plans, and allocation of available resources.
  • Created automated test cases and scenarios utilizing ‘TestComplete’ by Smart Bear.
  • Web and Windows Testing, Cross-Browser Web Testing & Distributed Testing With TestExecute by Smart Bear.
Champion Communications
West Palm Beach, Florida
Software Engineer
  • Managed and delivered all aspects of a Java based network indexing system enabling remote management of hardware, software and services.
  • Managed and delivered all aspects of an ASP.NET based network log harvesting system enabling a centralized knowledge base of system files.
  • Designed and developed key components of a Java/JSP web application for home based telecommunications.
  • Addressed issues of performance, scalability, reliability, manageability and security.
  • Designed use cases, activities, states, objects and components.
  • Fully responsible for product conceptualization, design, implementation, quality assurance, and maintenance on numerous projects.
Boca Raton, Florida
Software Developer / Test Team Lead
  • Team member developing a “Digital Rights Management Solution” for secure distribution of multimedia content over the web.
  • Team member developing a “content manager” application for the disbursement of multimedia elements to a “content host”.
  • Team member developing multiple content hosts to contain and secure multimedia packages using DB2 and SQL back-end.
  • Team member developing a “clearinghouse” application to process online payments.
  • Involved in all aspects of QA/Testing process including developing and writing test plans, scenarios and scripts, execute tests, regression testing and verification/validation.
  • Responsible for planning and executing manual tests as well as preparing operational test materials.
  • Generated test plans, team schedules and defect lists to meet promised deadlines.
  • Formulated, refined and executed functional test cases with supporting matrices based on system functional requirements.
  • Analyzed test results for accuracy and continuity in the application being tested.
Education
Nova Southeastern University
  • Major:  Computer Information Systems
  • Minor:  Computer Science
  • Degree:  Baccalaureate “Bachelor’s” Degree Science
Military
U.S. Army 18th Airborne Division

2nd Battalion, 1st Air Defense Artillery Regiment

  • Honorable Discharge
  • Decorated Gulf War VFW
  • Top Secret Security Clearance (currently inactive)
Hire Me
Hire Me
Bruce McCulloch
5500 Military Trail,
Suite 22251
Jupiter, Florida 33458
Business Website:
BlueNovaConsulting.com
Skype: bluenovaconsulting
T: (877) 976-3903
O: (561) 316-7116
F: (877) 572-8718
M: (561) 316-5317
Hire Me:

Your Name (required)

Your Email (required)

Your Phone (required)

Subject

Your Message

Enter the text from the image below.
captcha

Where am I?
Download