Sunday, January 22, 2012

University of Texas Software Engineering Master's Degree - My favorite Classes

I hope this ranking of my favorite classes is helpful to other students trying to schedule their classes. I am currently attending the University of Texas Masters Degree program in Software Engineering. When you pay for the program out of your own pocket like I did, it becomes very important to get the most out of each class. I have little enthusiasm for spending 3,500 dollars for a course and not getting much value. Note that this is my opinion.

 
Course
my ranking
time commitment
comments
Professor
Communication Networks
1
high
Bard is great. In an Internet world, this is very relevant information, it answered many long time questions that I have had about how the Internet works. Workload is high. Bard is entertaining. He is an ex marine and prides himself in the difficulty of tests. Sometimes his tangents are more interesting than the lectures. He is full of interesting information. He helped build UT's network so he has quite a bit of experience.
Bard
Software Architecture
-
-
Would have liked to taken instead of requirements. Barber teaches both classes.
Barber
Distributed Security
-
-
Would like to have taken.
Bard
Embedded Systems
5
medium-high
Bard is awesome. We had a guest speaker from ARM which was enlightening. In general, I wish the program had more guest speakers.
Bard
Mobile Computing
3
medium-high
Julian is a energetic teacher, and includes humor along with interesting information.
Julian
Distributed systems
2
high
Garg is awesome. I was skeptical about this subject, but it was eye opener to learn about the world of distributed systems. With Google and other cloud architectures becoming increasingly important, this is a very relevant topic. This course was a mix of theory and current industry applications. Course load was heavy.
Garg
Data Engineering
-
-
I didn't take but I hear that prof is a bit disorganized.
Maranker
Software Metrics
6
light
Krasner is a dynamic guy, very entertaining. He was a VP at Lockheed Martain and has many good stories to tell. He brings in more interesting guest speakers than any other professor.
Krasner
Engineering Lifecycle
7
medium
Summer course, I enjoyed the architecture conference at the end of the course. The course requires writing several papers. If you know your master's report topic, you can write papers regarding your master's report topic.
Krasner, Julian,
Kursid, Barber
Program Management
-
light
would like to have taken. I hear the professor is dynamic and the workload is light
McCann
Requirements
8
light
 I did not enjoy the topic and feel like Professor Barber lacked enthusiasm at times. But I did very much appreciate the relatively light workload. :). For those who write requirements, this may be quite valuable. Professor Barber definitely knows what she is talking about. I would have liked to see more agile practices integrated. I felt her toolset is a bit antiquated. (It is obvious that she hasn't updated her materials in years)
Barber
Advanced Software Tools
-
high
I hear that some people like it and others did not. This is a java-centric tools class.
Miranker
Masters Report
n/a
high
_
n/a
Data Mining
4
high
Very interesting and relevant topic. Ghosh is a genius and a genuinely nice guy. He has taken out Mathematica in order to focus on more practical topics (I appreciate this). The workload is definitely high. I will know more by the end of the semester, but so far I am convinced this will be useful in our information age.
Ghosh
Validation
9
medium
Professor Kursid was not engaging. He focused on topics from his own thesis and his graduate professor, rather than the larger industry. The textbook did not do a good job of selling me on why validation is important or getting me excited about the topic (like the other courses did). Other students have expressed similar sentiment.
Kursid

Thursday, December 01, 2011

Security with Visual Understanding – A Kinect Project

I gave a presentation today in my Embedded Systems class titled: “Seeing Machines”. The presentation describes my project in which I created a security camera which leverages the skeletal recognition capabilities of the Kinect to detect when someone walks in view of the Kinect camera, upon which it takes pictures and uploads them to a private Picasa library. If 10 seconds passes without receiving authentication from the person who set the alarm off, an audible alarm will sound, and an SMS text message will be sent to notify the owner that an intrusion has been detected.

The Kinect represents some amazing technology. I predict some really interesting technology coming out in the next 5 years which leverages the depth data and skeletal tracking capabilities of Kinect.

My paper can be downloaded at this link: Seeing Machines, a paper by Joseph Fluckiger

Note: view the speaker notes to see links to some of the amazing Kinect projects I found during my research.

Wednesday, November 09, 2011

Narcotic Pain Killers are Overprescribed

 

I am a Software Architect for a Fortune 500 company. My job is to take large amounts of information, filter through it and find the important facts, trends, techniques, subtleties, and truths. Let me take a moment to talk about a truth of the US Medical system.

1) The US Healthcare system over prescribes narcotic pain killers.

I broke my collar bone on Friday while playing soccer and had surgery this morning to have a plate implanted over the two pieces of my collar bone. After the surgery the nurses insisted that I take narcotic pain killers to for the unbearable pain they described I would have once the local block wore off. They even convinced my wife who is a fan of natural foods and medicines that I absolutely had to have narcotic pain killers. All the way to the car the nurse pleaded to my wife to make sure that I took them. I didn’t because I value my brain cells. Guess what, I was fine. I was uncomfortable for 4 hours between 8pm and 12am, but I used ice which eased the pain just as well as a narcotic drug could have. Ice does not have harmful side effects and is not addictive. It is also harder for insurance companies, doctors and pharmacies to make healthy margins on. So that is why doctors prescribe narcotic pain killers. First, they have a monopoly on being able to prescribe them, and secondly, they are a great source of recurring revenue.

Before I sound disgruntled, let me say that I am very happy with my orthopedic surgeon. I think he did a good job. He was helpful and friendly, skillful and most importantly didn’t cut any of my arteries while installing hardware in my shoulder. I will be forever grateful to him and his staff for fixing me. However, I hope that you will share this truth with your doctor and start a grass roots effort to help our HealthCare system focus on wellness and not profit margins which will save the great US of A from exploding Healthcare costs while improving personal health, and happiness.

 

Next time: How healthcare providers and insurance companies collude to overbill patients…

Saturday, October 29, 2011

SmartStepsUtil - A Utility Class for WinForms

I’ve been using a utility class I wrote called “SmartStepsUtil” since 2007.  I’ve decided to share it with the world. It turns your WinForms app into a “Console” simply helping you to write colored text to a RichTextBox.

image

I’ve used SmartStepsUtil on a few applications including SharePoint SUSHI. It makes it easy to quickly give feedback to the user about what is going on. It is thread safe, so you can call it from a background thread. Feel free to change it as needed.

It just amazes me how many applications don’t give feedback to the user. Or they have complex UIs with textboxes all over the place. SmartSteps util brings the best of a Console application (simple UI, live feedback) into a Winforms app. To use SmartStepsUtil, copy into your application

Methods:

- AddtoRichTextBox()
- ScrollToBottom()
- ClearRichTextBox()

Preset Styles to choose from to write to console:

public enum StyleType
{
    bodyBlack,
    bodyBlackBold,
    bodyBlue,
    bodyBlueBold,
    bodyChocolate,
    bodyChocolateBold,
    bodyDarkGray,

     …

Applications I’ve written using SmartStepsUtil:

SharePoint SUSHI

SNAGHTML55ade1a

BearWarePro Load Tester (affectionately called “The Punisher” Smile)

 

Source for SmartStepsUtil:

/*
Written by Joseph Fluckiger, 2007
Home page: http://josephfluckiger.blogspot.com/
*/
using System;
using System.Drawing;
using System.Windows.Forms;

namespace SmartStepsUtility
{
public static class SmartStepUtil
{
/// <summary>
/// Singleton Reference to RichTextBoxInstance. Set this Instance on application startup.
/// </summary>
public static RichTextBox RichTextBoxInstance { get; set; }

/// <summary>
/// Add to RichTextBox with Style
/// </summary>
public static void AddToRichTextBox(string strText, StyleType style)
{
AddToRichTextBox(strText, style, EnumIcon.no_icon);
}

private static void AddToRichTextBox(string strText, StyleType style, EnumIcon icon)
{
switch (style)
{
case StyleType.bodyBlack:
AddToRichTextBox(strText, Color.Black, 8, false, icon);
break;
case StyleType.bodyBlackBold:
AddToRichTextBox(strText, Color.Black, 8, true, icon);
break;
case StyleType.bodyBlue:
AddToRichTextBox(strText, Color.Blue, 8, false, icon);
break;
case StyleType.bodyBlueBold:
AddToRichTextBox(strText, Color.Blue, 8, true, icon);
break;
case StyleType.bodyChocolate:
AddToRichTextBox(strText, Color.Chocolate, 8, false, icon);
break;
case StyleType.bodyChocolateBold:
AddToRichTextBox(strText, Color.Chocolate, 8, true, icon);
break;
case StyleType.bodyDarkGray:
AddToRichTextBox(strText, Color.DarkGray, 8, false, icon);
break;
case StyleType.bodyOrange:
AddToRichTextBox(strText, Color.Orange, 8, false, icon);
break;
case StyleType.bodyRed:
AddToRichTextBox(strText, Color.Red, 8, false, icon);
break;
case StyleType.bodySeaGreen:
AddToRichTextBox(strText, Color.SeaGreen, 8, false, icon);
break;
case StyleType.bodySeaGreenBold:
AddToRichTextBox(strText, Color.SeaGreen, 8, true, icon);
break;
case StyleType.titleBlack:
AddToRichTextBox(strText, Color.Black, 14, true, icon);
break;
case StyleType.titleBlue:
AddToRichTextBox(strText, Color.Blue, 14, true, icon);
break;
case StyleType.titleChocolate:
AddToRichTextBox(strText, Color.Chocolate, 14, true, icon);
break;
case StyleType.titleSeagreen:
AddToRichTextBox(strText, Color.SeaGreen, 14, true, icon);
break;
default:
AddToRichTextBox(strText, Color.Black, 8, false, icon);
break;
}
}

public static void AddToRichTextBox(string strText)
{
AddToRichTextBox(strText, Color.Black, 8, false, EnumIcon.no_icon);
}

public static void AddToRTBnl(string strText)
{
AddToRichTextBox(strText + "\r\n", Color.Black, 8, false, EnumIcon.no_icon);
}

public static void AddToRichTextBox(string strText, Color textColor, float fontSize, bool bold)
{
AddToRichTextBox(strText, textColor, fontSize, bold, EnumIcon.no_icon);
}

public static void AddToRichTextBox(Exception ex)
{
AddToRichTextBox(ex + "\r\n", StyleType.bodyRed, EnumIcon.no_icon);
}

/// <summary>
/// Delagate for thread safely adding to Richtextbox
/// </summary>
private delegate void delAddToRTB(string strText, Color color, float fontSize, bool bold, EnumIcon icon);

/// <summary>
/// Threadsafe call to add to Richtexbox
/// </summary>
public static void AddToRichTextBox(string strText, Color textColor, float fontSize, bool bold, EnumIcon icon)
{
if (RichTextBoxInstance.InvokeRequired)
{
RichTextBoxInstance.BeginInvoke(new delAddToRTB(AddToRichTextBox), new object[] { strText, textColor, fontSize, bold, icon });
return;
}
FontStyle style1 = bold ? FontStyle.Bold : FontStyle.Regular;
if (fontSize <= 0)
{
fontSize = 8;
}
var font1 = new Font("Courier New", fontSize, style1, GraphicsUnit.Point, 0);
RichTextBoxInstance.SelectionStart = RichTextBoxInstance.TextLength;
RichTextBoxInstance.SelectionFont = font1;
RichTextBoxInstance.SelectionColor = textColor;
RichTextBoxInstance.SelectedText = strText;
AddIcon(icon);
}

public static void ScrollToBottom()
{
if (RichTextBoxInstance.InvokeRequired)
{
RichTextBoxInstance.BeginInvoke(new Action(ScrollToBottom));
return;
}
RichTextBoxInstance.Focus();
RichTextBoxInstance.Select(RichTextBoxInstance.Text.Length, 0);
RichTextBoxInstance.ScrollToCaret();
}

public static void ClearRichTextBox()
{
if (RichTextBoxInstance.InvokeRequired)
{
RichTextBoxInstance.BeginInvoke(new Action(ClearRichTextBox));
return;
}
RichTextBoxInstance.Clear();
}

private static void AddIcon(EnumIcon icon)
{
if (icon != EnumIcon.no_icon)
{
var font1 = new Font("Wingdings", 10f, FontStyle.Regular, GraphicsUnit.Point, 0);
RichTextBoxInstance.SelectionStart = RichTextBoxInstance.TextLength;
RichTextBoxInstance.SelectionFont = font1;
switch (icon)
{
case EnumIcon.brown_arrow:
RichTextBoxInstance.SelectionColor = Color.Brown;
RichTextBoxInstance.SelectedText = AsciiToStringUtil(182);
break;
case EnumIcon.green_check:
RichTextBoxInstance.SelectionColor = Color.Green;
RichTextBoxInstance.SelectedText = AsciiToStringUtil(252);
break;
case EnumIcon.orange_dotdotdot:
RichTextBoxInstance.SelectionColor = Color.Orange;
RichTextBoxInstance.SelectedText = AsciiToStringUtil(160) + AsciiToStringUtil(160) + AsciiToStringUtil(160);
break;
case EnumIcon.red_x:
RichTextBoxInstance.SelectionColor = Color.Red;
RichTextBoxInstance.SelectedText = AsciiToStringUtil(251);
break;
}
}
}

private static string AsciiToStringUtil(int asciiCode)
{
return ((char)asciiCode).ToString();
}

public enum EnumIcon
{
brown_arrow,
green_check,
no_icon,
orange_dotdotdot,
red_x
}

}

public enum StyleType
{
bodyBlack,
bodyBlackBold,
bodyBlue,
bodyBlueBold,
bodyChocolate,
bodyChocolateBold,
bodyDarkGray,
bodyOrange,
bodyRed,
bodySeaGreen,
bodySeaGreenBold,
titleChocolate,
titleSeagreen,
titleBlue,
titleBlack
}

}