Wednesday, October 29, 2008

Spotlight on a Good Example of an On-Line Portfolio


Digg!


To get lost in a few interesting games as well as learn a few tips and techniques of graphics programming, visit F. Permadi's site

http://www.permadi.com


While I was looking for information on how to do something in Flash MX 2004 about a year ago, I stumbled on a web site from F. Permadi. This site contains some really good examples of "graphics programming with a computer science twist", as well as well-explained tutorials on Flash and HTML/CSS.

What I found interesting about the site was it was a good example of an on-line career portfolio. I would like to focus on why this site is a good example of a career portfolio.

  • He Explains Exactly What He Does in the "About" Section

    One of the things that experienced entrepreneurs teach entrepreneurs-to-be and salespeople is the "elevator pitch". It means "tell me enough information about yourself from the time we enter the elevator to the time I get off on my floor". His "About" section is a good example of the "elevator pitch": he tells the reader a little bit about himself, he tells the reader his skill set, he tells the reader about his education, and he gives a way to contact him.

  • He Publishes Examples of His Work, Including the Source Code and Tutorials

    Just like artists put examples of their work in their portfolios, he has published examples of his own work on the site. Note that he has also published tutorials and source code to some of the applications to demonstrate that he really did do the work. If you're an IT professional publishing your portfolio, be sure to publish examples demonstrating that you have done the work or you know how to do the work.

  • He Publishes Information About His News and Awards

    In a career portfolio, don't be afraid to broadcast your accomplishments! In the "News and Awards" section, he noted the recognition that he received in various publications for his work. If you have a blog, and it was chosen to be a "Blog of Note", publish that news. If you have won awards for your work, mention them.

  • The Site is Professional

    I cannot emphasize the importance of a professional looking site. It demonstrates to the reader that the person is serious about his or her profession. If you are going to develop an on-line portfolio, look into taking the time to make the site somewhat appealing. If you are not a creative dynamo, or if you are not a web developer, recruit a friend to help you. Another alternative is to use a pre-fabricated site like Blogger as your front-end user interface, and have links to your projects hosted on a web or file server.



If you're a graphics programmer looking for tips and techniques, visit his site. If you're a student looking for good examples of career portfolios, visit his site.

Networking Students: Do You Know Your Line Signal Levels?


Digg!

Telecommunications and networking students usually need to learn the intricacies of cabling, such as DS-1/T1 lines. To help break up the monotony of lectures, I created a game (in Flash MX 2004) that I have the students play in class to help them learn the line information, such as the bit rate of lines and how many of the smaller lines does it take to make the line.

If you are a telecom/networking student, give the game a try!






The only reason why I didn't publish it because Flash MX 2004 is a few versions old (it's up to Adobe Flash CS4). However, if you are interested in the source, please drop a comment to this blog, and I'll publish the source.

Monday, October 27, 2008

C# and SharePoint 2007 Tutorial - Getting the Total Responses for All the Surveys on a SharePoint Site


Click the link to download the source code for this post

Licensing and Warranty

You may use the code as you wish - it may be used in commercial or other applications, and it may be redistributed and modified. The code is provided "as-is". No claim of suitability, guarantee, or any warranty whatsoever is provided. By downloading the code, you agree to defend, indemnify, and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys' fees) resulting from or relating to any use of the code by you.




A project that I'm currently working on for my CIO is to create more robust reports from surveys created in SharePoint 2007. I'm using a SQL Report Server Project to build these reports from the data entered on a SharePoint survey. In order to be able to create a report, the SharePoint survey needs to have responses. I really didn't want to spend time manually checking each survey to see whether it has responses. I wrote a program using C# to automatically check the surveys on the SharePoint site and return the item counts (responses) to me via e-mail.

Overview


The program uses the Microsoft.SharePoint library to access the SharePoint site, and it uses the System.Net.Mail library to send the e-mail. To keep the program flexible, I keep the "to e-mail", "from e-mail", SharePoint site URL, and SMTP server name in the app.config file. That way, if there's a change to any addresses, I can just change the config file instead of having to change and to recompile any code.

In a nutshell, the program does the following:

  • It gets the values from the app.config file

  • It opens the SharePoint site

  • It loops through the Lists collection of the site and returns the item count (responses)

  • Sends the results to the e-mail address referenced in the "to e-mail" element of app.config



Highlights


Traversing through the Lists collection on the SharePoint site
Starting from line 25 in the source (Program.cs), it uses the SPSite class and the SPWeb class (Microsoft.SharePoint) to open the site (as referenced in app.config). Using a foreach loop, it looks at each list in the collection and returns the value in the Items property of the list, which is the total number of responses for the survey. Here is the code snippet:


using (SPSite site = new SPSite(strURL))
{
  using (SPWeb web = site.OpenWeb())
  {
    foreach (SPList list in web.Lists)
    {
      msgSB.Append(list.Title);
      msgSB.Append(" - ");
      SPListItemCollection items = list.Items;
      msgSB.Append("Total items: " + items.Count);
      msgSB.Append("\r\n");
      msgSB.Append("\r\n");
    }
  }
}


Note that msgSB is an instance of the StringBuilder class, and I am recording all the results in this instance.


If your SMTP server requires a specific ID and password for authentication, you can use the System.Net.NetworkCredential class to specify the ID and password. Here is a code snippet on how to set up your SmtpClient instance to use the specific credentials:


System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(ID, password, domain);
smtpClient.Credentials = credentials;


If you are going to use this method, please be aware of some security precautions, such as not storing the ID, password, and domain in clear view of the naked eye. For example, if you want to store this information in the app.config file: encrypt the values, put the encrypted values in the app.config file, and use the code to decrypt the values.

Sending an E-Mail
The MailMessage class sends the e-mail. However, I wouldn't be able to send an e-mail without referencing an SMTP server. The SmtpClient class is used to "set up" the SMTP server. Below is the code snippet, found on line 42 in the source.


String message = msgSB.ToString();
MailMessage mail = new MailMessage(fromEmail, toEmail, subject, message);
String mailServer = Properties.Settings.Default.mailServer;
SmtpClient emailClient = new SmtpClient(mailServer);
emailClient.UseDefaultCredentials = true;
emailClient.Send(mail);


Note that I'm converting the StringBuilder instance (which contains the results) into a string. Also note that the UseDefaultCredentials property is set to true, which means that the program will use the current logged in user's credentials to authenticate against the SMTP server. One of the ways that network administrators prevent hackers from hijacking their SMTP server to use for sending spoof e-mails is they configure the SMTP server to require authentication.

The app.config file


Since it's possible that addresses can change due to machine upgrades and domain name changes, I stored the following four values in the app.config file:

  • <toEmailAddress> - The e-mail address of the person who should receive the report

  • <fromEmailAddress&; - The e-mail address of the person of the "sender". This is typically a "webmaster" address or a generic "SharePoint administrator's" e-mail address

  • <surveyURL> - The ROOT URL where the surveys are located. For example, if your surveys are on site http://bogussite/surveys, enter http://bogussite/surveys.

  • <mailServer> - The name of the SMTP server



In the source code, I wrote an explanation of what values should be in each element. You will need to replace that information with the actual values.
Here is an example configuration snippet of the app.config file:


<SurveyListCount.Properties.Settings>
  <setting name="toEmailAddr" serializeAs="String">
    <value>jennifer.lewis@mymwalimu.org</value>
  </setting>
  <setting name="fromEmailAddr" serializeAs="String">
    <value>webmaster@bogus.com</value>
  </setting>
  <setting name="surveyURL" serializeAs="String">
     <value>http://SomeSharePointSite/SurveysSubsite</value>
  </setting>
  <setting name="mailServer" serializeAs="String">
    <value>SMTP.BogusSite.com</value>
  </setting>
</SurveyListCount.Properties.Settings>




Before Using the Code for Your Own Solution:

  • The compiled program (binary) must reside on the same machine where SharePoint 2007 is installed, or you will get errors.

  • Ideally, you want to have your surveys in a separate subsite of your site collection. If you have other lists in your site collection or subsites, the program will pick up the item counts of those lists as well.

  • If you want the program to run at a certain time (ex: every Wednesday evening), you will need to use Windows Scheduler to schedule the binary to run automatically.


Wednesday, October 22, 2008

C# Tutorial - Jewelry Pricing Calculator


Click the link to download the source code for this post

Licensing and Warranty

You may use the code as you wish - it may be used in commercial or other applications, and it may be redistributed and modified. The code is provided "as-is". No claim of suitability, guarantee, or any warranty whatsoever is provided. By downloading the code, you agree to defend, indemnify, and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys' fees) resulting from or relating to any use of the code by you.




One of the things that I do on the side is make jewelry. In fact, I'm in the process of starting a jewelry business. In order to sell the jewelry, I need to determine what to charge for each piece. I decided to make myself a tool (using C#) that I can use to find out what to charge for jewelry.

In a nutshell, users of this application enters the cost of materials, the hourly rate, and the number of hours it took to make the piece. Once that information is entered, the tool will calculate the minimum price to charge and the maximum price to charge based on an equation used for determining MSRP (Manufacturer's Suggested Retail Price).



The application also has checks to make sure that the user entered decimal values in the fields, and since this is a multi-form application, it has checks to make sure that the form is closed before it attempts to open the form.

The application uses a variety of different components, such as:

  • String formatting

  • Toolbar and menu

  • Timer

  • Rich Text Box



Here are some code snippets highlighting some of the things that the application does.
Using the Timer to make a "rotating banner"
On the main application form (Form1.cs), I created a "banner" displaying directions on how to use the application. In order to do the rotating banner, I used the timer control, the label control, and a string array containing the messages.
1) I defined a label on the form (called lblHelp).
2) I added a Timer object on the form. I configured the following properties:

  • Enabled = true

  • Interval = 5000 (5 seconds)


3) In the program (line 14), I defined a string array containing the messages. I also defined a variable to keep track of the current position.


int pos = 0;
string[] textToDisplay = new string[] { "Enter the total cost of materials used for the project. For example, if you purchased a lot of 20 beads for $5.00, and you used 10 beads, the total cost would be $2.50", "Enter the hourly wage for the person who made the jewelry", "Enter the total hours it took to make the project. Round up to the nearest 15 minutes. For example, if the project took you 38 minutes, round it to 45 minutes.", "Select Action - Calculate from the menu, or click the calculator button at the top of the screen." };


4) In the Tick event of the timer (line 185), I added the following code to change the message in the label:


pos++;
if (pos == textToDisplay.Length)
{
  pos = 0;
}
lblHelp.Text = textToDisplay[pos];


In this snippet, I am changing the position of the array. In order to prevent the application from "crashing" because the position of the array is bigger than the array, I check to see if pos is equal to the number of elements in the array (textToDisplay[pos]). If it is equal, then I reset the position to 0. Remember that arrays in C# are base 0 arrays, which means that the first element in the array is position 0. Finally, I set the value of the label to the value in the current position of the array.

Getting the Application Version
One of the things that I wanted to display in the about form (frmAbout.cs) was the current version of the application. Using the System.Diagnostics.FileVersionInfo class, I can get the version of any file. In this case, I want to get the version of the executable file that's created from this project. Here is the snippet (line 17):


System.Diagnostics.FileVersionInfo thisVersion = System.Diagnostics.FileVersionInfo.GetVersionInfo("JewelryPricingCalculator.exe");




Alternative to using the foreach loop for checking whether a form is open in C#
Forms in VB .NET have a slick property called Visible that will indicate whether a form is visible (open) or not. Remember that Microsoft developed the .NET architecture for flexibility. If you import the Microsoft.VisualBasic.dll in your project and you make a reference to the dll (using Microsoft.VisualBasic;), you can utilize the Visible property in C#. However, with C#, you still have to define an instance of the form. Here is an example:


Form2 f = new Form2();
if (f.Visible == true)
{
  f.Focus();
}
else
{
  f.Show();
}




Checking to see if a form is already open
Since this is a multi-form application, I wanted to check whether the form is already open before I attempt to open the form. In order to do this (in Form1.cs), I use a foreach loop through the Application.OpenForms object. Here is the code snippet (line 164) determining whether the help form is already open:


bool helpOpen = false;
frmHelp helpF = new frmHelp();
foreach (Form a in Application.OpenForms)
{
  if (a is frmHelp)
  {
    helpOpen = true;
    break;
  }
}

if (helpOpen)
{
  helpF.Focus();
}
else
{
  helpF.Show();
}



As you'll noticed in this example (versus the previously published examples), I took user experience into consideration. Even so, there's always more that can be done. If you are going to experiment with this code, here are some suggested things to try:

  • Using the Crystal Reports component in Visual Studio, create a report of the results and allow the user to print that report

  • Use the app.config file to control certain numbers and constants, such as overhead markup percentages and cost markup numbers.

  • Using this application as a foundation, create a database back-end and use the application as the interface to a database containing your prices.



Enjoy!


Supplemental Information: The Equation
The equation used to calculate the retail price for jewelry is: total cost + labor + overhead.

To calculate the total cost, you take the cost of the materials used for the piece and multiply that number by 2 (for retail pricing) or by 1.4 (for wholesale pricing). Example: if you bought a lot of 20 beads for $5.00, and you used 10 beads, your total cost is $2.50 * 2 = $5.00 (for retail). Note that some people take the cost of the lot of beads into consideration for the total cost, ex: $5.00 * 2 = $10.00 (for retail), since you may have leftover beads that you can't reuse in other projects.

To calculate the labor, you multiply the hourly rate by the hours worked. Typically, you want to round up to the quarter hour. For example, if your hourly rate is $10.00, and it took you 20 minutes to create a piece, you multiply $10 * .5 (30 minutes) = $5.00.

To calculate overhead (rent, electricity, consumables, travel time, etc), you can do one of two equations:
- For minimum overhead, you take the total cost + labor and multiply it by .20.
- For maximum overhead, you take the total cost + labor and multiply it by .25.

Tuesday, October 21, 2008

C# Tutorial - Filter Contents of a File Containing a Word or Phrase


Click the link to download the source code for this post

Licensing and Warranty

You may use the code as you wish - it may be used in commercial or other applications, and it may be redistributed and modified. The code is provided "as-is". No claim of suitability, guarantee, or any warranty whatsoever is provided. By downloading the code, you agree to defend, indemnify, and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys' fees) resulting from or relating to any use of the code by you.




If any of you ever had to filter through Internet server logs to troubleshoot a problem (ex: every time someone accesses somepage.aspx, the server returns an HTTP error 500), you can understand how painful it can be - especially if your log has a lot of transactions in the file. I wrote this "quick-and-dirty" application to allow me to just filter out the lines that I'm looking for, and save the results to another file.
This application uses the System.IO library for file processing. It also uses the OpenFileDialog and SaveFileDialog objects to allow a person to select a file and save a file.

In a nutshell, this is what the application does:

  • It allows a user to type in a file name or select a file (using the OpenFileDialog object)

  • It allows the user to enter a word or phrase to look for (or leave the field blank for all the data)

  • It uses the System.IO object FileInfo to check the file size to see if it's greater than 5MB. (If it is, it warns the user that the file is large and asks if s/he wants to continue)

  • It uses the System.IO classes StreamReader and FileInfo to open and read the contents of the file

  • It uses the IndexOf function of the string class to find out whether the line contains the entered word or phrase (if one was entered)

  • For better memory management, it uses the StringBuilder to build the results

  • For saving the contents of the file, it uses the SaveFileDialog to allow the user to select where to save the contents. Then, it uses the System.IO classes Stream and StreamWriter to write the output to a file.



Here are some code snippets highlighting some of the things the application does:
Checking the file size and asking the user if s/he wants to continue
While I was using this, I found that large files really took awhile to load in the application. What I wanted to do to improve the user experience is to warn the user if s/he is trying to open a file that is greater than 5MB. I wanted to make sure that the user still wanted to continue. Here is the code snippet (found in Line 71 in the source):


// Check the size of the file
FileInfo fi = new FileInfo(txtFileName.Text);
// Warn user that the file is huge if file > 5 M
if (fi.Length > 5000000)
{
  DialogResult answer;
  answer = MessageBox.Show("The file you selected is large and may take some time to load. Are you sure you want to open this file", "Confirm Open Large File", MessageBoxButtons.YesNo);
  if (answer.ToString() == "No")
  {
    txtFileName.Focus();
    return;
  }
}


In this snippet, I am using the Length property of the FileInfo class to determine the size of the file. Since it returns the value in bytes, I need to check the byte size. Since I'm giving the user an "are you sure" type box, I need to be able to capture the results from the MessageBox. The DialogResult class is what the MessageBox returns when an action is taken (a button is clicked).
Notice that have a return statement. For you VB .NET programmers, this is the equivalent of an Exit Sub statement. Rather than put the code in a massive if-else loop, I just add the return statement to exit from the function if the user does not want to continue.

Setting the Filters for the OpenFileDialog and SaveFileDialog
By default, no filters are set. So when your user opens the dialog box, nothing will show up under the "File Type". In order to set the filters for text files only, do the following:


FileDialog.Filter = "Text Files|*.txt";


Where FileDialog is the instance of your OpenFileDialog or SaveFileDialog. The first part is the text to display in the drop-down box. The second part is the files to display that match the extension. Each section is separated by a pipe (|).
If you want to do multiple types, do the following:


FileDialog.Filter = "All Files|*.*|Text Files|*.txt";



Writing the contents of a text box to a file
I wanted to be able to write the filtered results to a file in case I need that file for other applications or purposes. Here is the code snippet (found on line 53 in the source):


// Get the contents of the text file
Stream saveStream = sfdContent.OpenFile();
StreamWriter sw = new StreamWriter(saveStream);
sw.Write(txtResults.Text);
sw.Close();


In this snippet, I am using the OpenFile function of the SaveFileDialog class (the instance is called sfdContent) to get the value entered by the user. I am then using the System.IO classes Stream and StreamWriter to take the contents of the text box and write it to a file.

I have placed a link to the source code for you to use to help with your studies. If you are looking for more practice, here are some suggestions for improving the application:

  • Make a progress bar so it will display when someone tries to open a large file

  • Give users the ability to change the "skin" of the application

  • Add a menu

  • Add an "About" option with release notes

  • Add a splash screen

  • Change the look and feel of the screen

Saturday, October 18, 2008

Spotlight on an Example of Student Entrepreneurship

In previous articles, Getting a Job in a Tough Economy and Beating the Catch-22 of Aspiring Digitheads, I mention entrepreneurship as a way to gain experience in the field. In this article, I want to show you an example of two students who are using entrepreneurship as a way to gain experience.

For assistance with your networking and PC needs, or for networking/PC tips and , visit M & J PC Consulting

http://www.mjpcconsulting.com

Jonathan Geyer and Mike McCoy are two students of mine who have started M & J PC Consulting a few years ago. The company specializes in providing networking and PC solutions for both home and business users. As an added bonus, their site also contains free networking and PC tips and techniques to the general public.

From a student's perspective, Mike and Jon's efforts are a good example of "selling yourself" to the job market.

  • They offer services and explain what they have done


    If someone is looking at either one of them as an employee or contracting candidate, one has an idea of what Mike and Jon has done in networking and PC work. As someone who has had experience with making decisions on hiring personnel, a pet hate of mine is technical interviews that ask "test questions" rather than ask questions to demonstrate experience (example question: "In a Class C network address, which part of the address is the network address?" vs. "Have you ever had to subnet a network, and if so, demonstrate the process that you went through to do this"). Being able to answer "test questions" doesn't necessary demonstrate to me that one can do the job; it only demonstrates that one knows how to study and memorize. I'm more interested in seeing what the person can do and has done.

  • Having the business highlights their secondary skills

    Non-IT companies who are looking for IT personnel don't want "digitheads" only. They want people who also have a good understanding of how business works so these people can provide IT solutions that will help grow a business. The employees must also have good oral and written communication skills, as well as good customer service skills. Having their own company demonstrates to employers and customers that Mike and Jon understands general business rules, the needs and limitations of business, and the strategies to help a business grow. They also highlight their other secondary skills by explaining that much of their business comes from recommendations. If they didn't have the communication or customer service skills, they would probably not be successful.

  • Their site can be used as part of their career portfolio

    The purpose of a career portfolio is to show potential employers and customers what you can do. The site highlights a number of skills that Mike and Jon both have.

  • They are keeping their options open regarding employment

    In my opinion, people who limit themselves with their employment options (location, employment status, type of company) won't make as much strides as someone who is more open to their employment options. Having their own business keeps Mike and Jon's employment options open. They can run the business full time, or they can run the business part time and supplement their income in other ways. They can also relocate if they so desire.



If you are student who is looking for help on a networking or PC topic, an example of a career portfolio, or an example of starting a business, visit their site. If you are a business looking for IT networking contractors, I can attest that both Mike and Jon are experienced in PC and networking and they both do a fantastic job.

Thursday, October 16, 2008

Fonts, fonts, and more good fonts...

While I was looking for some free fonts to use for site and application development, I stumbled across this site - Dafonts.com. This site is a community where font developers publish fonts that they have created. A number of the fonts on the site are free (both for personal use and public domain), but some are not. The person or company will typically publish the usage license with the font.


 Remember that publishing your work on IT community sites is a way to build your career portfolio!


If you're looking for some unusual fonts to use in your graphics or web applications, give the web site a try. If you are a font developer, review the web site to see if you would like to publish your work on this site.

Monday, October 13, 2008

C# Tutorial - A Simple File Search Utilities

The search tool in Microsoft Windows is a nice tool, but I find that it has limitations. For example, if I'm searching for files that contain a word or a phrase, it doesn't necessarily display all the files containing that word or phrase, especially if the file type is a script or a program.


Click the link to download the source code for this post

Licensing and Warranty

You may use the code as you wish - it may be used in commercial or other applications, and it may be redistributed and modified. The code is provided "as-is". No claim of suitability, guarantee, or any warranty whatsoever is provided. By downloading the code, you agree to defend, indemnify, and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys' fees) resulting from or relating to any use of the code by you.




While I was practicing my C# skills, I wrote a simple search utility (using Visual Studio 2003) a few years ago that will search through all files for a word or phrase. This little program also gave me some practice with the System.IO functions.

How It Works
Basically, the user enters a directory to search through (either a mapped directory {drive letter} or a network share) and enters the word or phrase to search for. When the user clicks search, the program does the following:

  • It uses the function System.IO.Directory.Exists to check whether the directory exists

  • If the directory exists, it uses the DirectoryInfo class to capture the directory information, and then uses the FileInfo class to capture the list of files that exist in the directory.

  • Using a for loop, it loops through the list of files. During each iteration of the loop, it opens each file and uses another for loop to read through the contents of the file. During each iteration of the loop, it uses the IndexOffunction to check whether the phrase is in the file. If it's found (IndexOf > -1), write the name of the file in the results box. (For efficiency, break out of the loop and go to the next file).


Here is the code snippet of the process:

if (System.IO.Directory.Exists(txtDirectory.Text))
{
   txtResults.Text = "";
   DirectoryInfo dir = new DirectoryInfo(txtDirectory.Text);
   FileInfo[] fileList = dir.GetFiles();
   FileInfo currFile;
   StreamReader s;
   string fileToOpen;
   bool hasPhrase = false;

   for (int x = 0; x < fileList.Length; x++)
   {
     //Open the file
     currFile = fileList[x];
     fileToOpen = dir.ToString() + "\\" + currFile.ToString();
     s = File.OpenText(fileToOpen);

     // Find the text pattern in the file
     string read = null;
     while ((read = s.ReadLine()) != null)
     {
       if (read.IndexOf(txtPhrase.Text) > -1)
       {
       hasPhrase = true;
       break;
     }
   }

   // If the text pattern is in the file, write the file name in the output
   if (hasPhrase)
   {
     txtResults.Text += currFile.Name;
     txtResults.Text += "\r\n";
   }

   currFile = null;
   s.Close();
   s = null;
   hasPhrase = false;

}


If you want to look at the code and/or use it as a foundation for your project, click on the link at the beginning of this post. {I recreated the code in Visual Studio 2005.} Note that this program is just a simple example; it is not robust! For more practice, here are some suggested changes to make to the original code:

  • Change the code to allow it to traverse through subdirectories

  • Change the code to handle wildcards

  • Add good error handling (try-catch loops) to the code

  • Allow the user to open the file by clicking on the file name in the results list

  • Allow the user to click "browse" and select a directory from a list.

  • Enhance the look and feel

  • Refactor some of the code for better performance (ex: use a StringBuffer where appropriate)

Thursday, October 9, 2008

"Jazzing Up" Your Blog

In Tuesday's post, I talked about two things to help you with job seeking in the tough economy: having a career portfolio and maintaining a professional social networking site. A blog is one way to accomplish both of these tips. A number of artists - famous and obscure - have blogs that also act as a career portfolio highlighting their work. "Techies" also have blogs giving tips and techniques on various topics. One of the reasons why I have a blog, other than having a tool for providing supplemental information to my students, was to have something for my career portfolio.

When I was looking for some tips to add some functionality to my blog (particularly add a button indicating whether I'm "online" on Yahoo! Messenger), I stumbled upon another blog - Daily Technology Tips, authored and maintained by Sunil Kumar Gupta. I was really impressed with the information that was available on this blog. He has a boatload of information and tips on tools that one can add on one's blog to "jazz it up", as well as other tips that one wouldn't think of with their blog. For example, in his August 17th posting, he talks about protecting your blog from being copied using Google.

If you are thinking of starting a blog, or if you already have a blog, take the time to go to Sunil's blog and see if there is anything that you can use on your own site.

P.S. - I put his blog under the "Links" section of this blog.

Tuesday, October 7, 2008

Getting a Job in a Tough Economy

It's all over the news: The world markets are plummeting, and it's more than likely that the United States will be in a deep recession. It's not good news to job seekers, especially the soon-to-be college graduates. It's much more difficult to find a job in a tough economy. If there is no immediate need for employees, employers will establish "hiring freezes" until times get better. If there is an immediate need for employees, employers will be very particular.

Just because it's more difficult to find a job in a tough economy doesn't mean that it's impossible to get a job. In the recession of 1992-1993, with unemployment rates similar to what they are now, I was able to get a job shortly after college graduation.

What can you do to set yourself apart from the rest of the pack?


  • If you are not graduating college/university just yet, get an internship in your field, or get a job in your field

    Generally, employers think that work experience is more important that GPA/QPA (but your GPA/QPA is important for landing internships, so you shouldn't slack!). The person who did two years worth of internships in his/her field with the GPA/QPA of 3.25 will get hired over the person with a 4.0 GPA/QPA with no experience in his/her field of study. Employers understand that for an entry-level position, there is going to be a learning curve, but they also want someone that doesn't require "hand-holding" in a professional environment. Internships give students practical experience in their field, as well as experience in a business environment.

    Another option, especially for those in your 3rd or 4th year, is to get a job in your field. It may not be your ideal position, but it still counts as experience. Plus, it will allow you to "get your foot in the door" of a company. Typically, companies will try to fill positions from within before placing the ad on Monster or Dice. When the ideal position becomes available, you have a better chance of getting the position. For example, if you are studying network engineering, find a position as a help desk or desktop support analyst. Most lower-level help desk/desktop support analysts only require 2 years education. Many IT personnel have gotten their start at a help desk.

  • Develop a career portfolio


    If you are unsure of how to create a career portfolio, read the following article from
    Quint Careers

    Many in the arts and entertainment business already have this, but what about those in other fields? In my opinion - everyone, regardless of the field, should have a professional portfolio. What is a career portfolio? It is a book, media and/or website that contains samples of your work as well as any special accomplishments, such as professional certifications, patents, newspaper articles about your accomplishments in your line of work, and awards. (Note: for those of you in technology, you should also either have a web site where people can see samples of your work, or you should have a list of links where you have published your work).

  • Gain experience (and build your social network) by volunteering

    Volunteering your services helps you gain practical experience in your field. If you are volunteering for a major organization, like a place of worship or a not-for-profit organization, you can also possibly meet contacts that may be able to help you find a job in your field. It's not just about what you know - who you know is a major factor of finding employment. It's estimated that about 60-80% of people who find jobs find them through people they know. Even if the people you meet are not in your field, they may know someone that can help you.

  • Practice your presentation

    Presentation counts. Period, full stop. If you don't make a good presentation at your interview, you won't get the job regardless of your record. Presentation is the total package. It means: a firm handshake, confident (but not arrogant) speaking, good answers, interest in the company, and making a nice appearance. Part of the interview process is a lesson in sales. You are selling yourself to the company. You are trying to show the company why they should hire you. There are numerous articles and television shows advising you how to dress for an interview, so if you are unsure of how to dress for the interview, read the articles or watch the shows. If you can, work with your career advisor or mentor on practicing your interviewing skills. They can advise you on how you speak, how you carry yourself, how you answer, and how you pose your questions.

  • Develop a secondary professional skill that will distinguish you from the pack


    Examples of secondary skills:


    - A second language

    - For computer and technology majors - another major in a business or medical field

    - Oral and written communicator

    - Knowing basic IT skills and troubleshooting techniques if you are not an IT person

    I know that most of you would probably think I'm being a little too elementary by mentioning the word "professional", but I'm sure that there would be one person out there that would think that being able to smash beer cans on one's head counts as a secondary skill!
    Why is having a secondary skill important? In order to remain competitive, businesses usually look for people who can contribute more than their skills to help the company grow. In the case of technology, non-technology businesses who need IT people want people who are more than just "geeks" - they want people who also understand "the business". You need to know more than your field. A highly valued secondary skill is knowing how to communicate in a second language because many businesses deal with international markets.

  • If it's financially feasible and you are an undergrad, get the advanced degree.

    Companies are upping the ante with a job position's education requirements. Jobs that only required a 4-year degree at one time are now requiring a graduate degree (Master's or Doctorate). If you are financially able to continue your education, do so. It will be helpful to your career in the long run.

  • Consider contracting or "temping"

    Some people may turn up their nose at this suggestion, but this is actually a good opportunity, especially in the tough economy. Companies may be reducing their spending, but there are projects that must be completed. For human resources, it is cheaper to hire contractors for the duration of the project than it is to hire employees for the project. If you join a contracting firm or a temporary agency, you will probably find work quicker than you would finding a full time job. Contracting or "temping" also has its benefits: it is a nice opportunity for those who want to gain experience in working in different businesses or environments, and it is ideal for someone who is not quite sure in which industry s/he want to work.

  • Keep your financial and criminal nose clean

    For most of you, this is common sense. In these tough economic times, this is NOT the time to get a DUI, nor it is the time to "max out" on your credit cards. Many of you know that companies do felony criminal background checks on you. However, some will do misdemeanor criminal background checks on you as well. For example, if you are applying for an outside sales position (you go to client sites to sell product), and your driver's license is suspended because of a DUI, you will probably not get the job. Some of you may also be aware that companies now do credit checks on potential employees to indicate how responsible the potential employees are. In some cases, if you have poor credit, the company will not hire you. During your final two years in school, stay out of criminal trouble, follow a strict budget, and pay your bills on time.


    If you do have a felony conviction on your record, you may want to read this article on seeking employment with a criminal record.

    What if it's too late? What if you have something recent on your record? What if your credit is poor? It doesn't necessarily mean that you won't get a job, but it does mean that you'll probably have a more difficult time finding a job that most. For example, if you have a misdemeanor conviction for shoplifting, you will more than likely not be able to get a job in a financial institution. If you have poor credit, you may have a difficult time getting a job that has an expense account because the lending institution will not grant you a credit card, even if it is the business's account. You should start making an effort on cleaning up your credit report. If you have a misdemeanor on your record, you may not have to worry too much, but you will need to be aware that it may disqualify you from certain jobs. However, if you have a felony on your record, you should read the article that appears at the right hand side of this paragraph.

  • Keep your social networking site professional

    I have written an article on this blog about this topic (It's in the archive), but I think that it's worth mentioning again. While pictures of you acting silly while you're drunk or high may impress your friends, it won't impress your future employers. This is also not the time to publish provocative pictures of yourself in states of undress, unless you are trying to get a job as a model. You may also want to be careful about what you write on the blog.

    This is the time to change the focus of your social networking site to become as an business advertisement for you. Use it to publish samples of your work and to tout your achievements in your line of work.


Monday, October 6, 2008

Wicked Cool Sites for SharePoint Development Help

SharePoint development is not as bad as I thought it would be, but finding information about SharePoint development is pretty difficult, in my opinion. I don't mean using SharePoint Designer for customizing pages or creating custom workflows. I mean using C# or VB.NET to interact with SharePoint.

I found a few sites that are really helpful:

  • Microsoft's Home Page for SharePoint Developers - This site contains webcasts, whitepapers, and tutorials on using .NET with SharePoint. It also has a Virtual Lab to try the exercises. (Note: I didn't try the Virtual Lab)

  • SharePoint for Developers - this series written by Microsoft MVP Gunnar Peipman talks about using .NET to interact with SharePoint. While the series is not complete yet, there is enough information to get one's feet wet, so to speak.



CodeProject also has a lot of code examples of using .NET with SharePoint. If you want to download the examples, you will need to register for the site, but registration is free.

If you don't have time to develop a solution, CodePlex has a lot of open source solutions for SharePoint.

Even though this site focuses more on using SharePoint Designer for site customization, I think it's worth a mention:

  • SharePoint for Developers - These are webcasts sponsored by Microsoft that give fantastic information on how to customize the SharePoint site with SharePoint Designer.

Friday, October 3, 2008

Where have I been?

Wow, it's been over a year since I posted!

There was a reason why I haven't posted for awhile. A quote that comes to mind explaining what happened comes from, of all people, professional wrestler Roddy Piper - "Just when you think you know the answers, I change the questions!" I felt like that was what the higher power said to me this past year. Those changed questions really took much of my time.

Some of the changed questions weren't sinister - in fact, they were pretty damn good!

I was content at the place where I was working (a robotics company) until March. Not thrilled or happy, but content. The kind of work that I was doing wasn't really what I wanted to do, but it paid the bills. I wasn't really looking to stay at the job for a long time, but I wasn't really looking to go somewhere else, either. I was just buying my time for a year or two until I decided whether I wanted to go for a PhD or change careers completely. Out of the blue, I got a phone call from a "headhunter" talking about my ideal job. At this job (an energy company), I would get to use my newly acquired masters degree, PLUS I was going to learn and work in SharePoint, the "next big thing" in IT and business. On top of that, it was a 15% salary increase PLUS great benefits that were dirt cheap. Ready for the twist? I was on the fence about taking the job! I figured "better the devil you know than the devil you don't know". It was my mother who talked me out of that way of thinking. Surprisingly, she really gave me the business! After her pep talk (more like a "kick-in-the-butt" talk), I turned in my notice and started my ideal job three days before my birthday.

[Another good thing that came out of that job - I became an "urbanite". I moved to the city, about 1/2 mile from my job. My new apartment has a killer view - it overlooks the river, trees and a walking path. Nice.]

Unfortunately, some of those changed questions were sinister.

I was diagnosed with a massive tumor in July. Fortunately, it was benign, but it was causing life-threatening health problems. I had to get surgery and treatment in order to get well. The surgery and treatment were aggressive, and both took a toll on me. On top of that, the tests that I had to go through to make sure that I didn't have cancer were taxing as well. The thought that was going through my mind was, "Is it really worth it to go through all this? Maybe I'm better off just trusting my luck." I'm glad I went through the hell. I'm fully recovered, and I'm able to do the things that I couldn't do for a year and a half.

Now that I'm back in full swing, I will be writing on this blog again. Here is a sneak peek at some of the topics that I'll be covering:

  • Post-secondary education advice and issues - I still teach part time at a post-secondary institution, and I love it!

  • Linux (particularly Fedora) - I do a lot of work on my own and in the classroom on Linux (Fedora distro).

  • What I learned with SharePoint - Since I'm learning how to design and develop in SharePoint, I thought that I would share some things that I've encountered.



I also want to do more work on my website My Mwalimu. I changed the focus of the site where it will now contain educational games and cartoons (hope Spring's eternal on the cartoons - I can write scripts, but I can't draw worth bleep.) It will allow me to keep up on my tech skills and practice foreign languages. If you have any ideas, or if you want to display your work on the site, please let me know.

I'll see you soon!
-- Jennifer

P.S. Although I put writing on this blog on the back burner, I read other people's blogs, both technology related and non-technology related. My favorite blog is Uncle Eddie's Theory Corner. This man is a talented artist, writer and comedian with knowledgable opinions on any subject.