<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FamousPhil.com Admin Blog and More &#187; Technology</title>
	<atom:link href="http://famousphil.com/blog/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://famousphil.com</link>
	<description>My Personal Blog</description>
	<lastBuildDate>Mon, 06 Feb 2012 01:40:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MySQL Singleton Classes in PHP and Python</title>
		<link>http://famousphil.com/blog/2012/01/mysql-singleton-classes-in-php-and-python/</link>
		<comments>http://famousphil.com/blog/2012/01/mysql-singleton-classes-in-php-and-python/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 01:39:26 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Singleton]]></category>
		<category><![CDATA[Source Code]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1674</guid>
		<description><![CDATA[Phil gives the source code for implementing a MySQL singleton class in both PHP and Python.]]></description>
			<content:encoded><![CDATA[<p>Its now time to become serious with my blog again after such a long lapse in real content.</p>
<p>When building new applications, it always seems like I start with the grand picture requiring no massive data storage and shortly after I begin, I find myself needing a database connection.  I&#8217;ve made the mistake several times now of not starting with a dedicated database class that connects to MySQL, and I always find myself googling for pre-made classes that don&#8217;t do exactly what I need, so I&#8217;ve decided to post my own for future reference.  As a result, I&#8217;m going to make sure that when I Google, I find my own reference before someone else&#8217;s <img src='http://famousphil.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Hopefully this is useful to someone else.</p>
<p>PHP&#8217;s MySQL singleton class:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// Copyright (c) 2012 Philip Matuskiewicz www.famousphil.com

// To use:
// require_once(&quot;Mysql.php&quot;);
// $db = new Mysql();
class Mysql{
    private $server = &quot;localhost&quot;;
    private $username = &quot;&quot;;
    private $password = &quot;&quot;;
    private $database_table = &quot;&quot;;
    private static $instance;

    private function __construct(){
        $this-&gt;connect();
    }

    public function connect(){
        mysql_connect($this-&gt;server, $this-&gt;username, $this-&gt;password);
        mysql_select_db($this-&gt;database_table);
        $this-&gt;q(&quot;set names 'utf8'&quot;);
    }

    //query the database
    public function q($query){
        $r = mysql_query($query);
        return $r;
    }

    //returns an array containing all the rows that were returned
    public function qr($query){
        $r = $this-&gt;q($query);
        if (mysql_num_rows($r) &gt; 0) {
            $res = array();
            while ($arr = mysql_fetch_array($r)) {
               array_push($res, $arr);
            }
            return $res;
        } else {
            return null;
        }
    }

    //number of rows returned
    public function nr($query){
        return mysql_num_rows($this-&gt;q($query));
    }

    //last inserted row id is returned
    public function lid(){
        return mysql_insert_id();
    }

    //close the database connection
    public function c(){
        mysql_close();
    }

    public static function singleton(){
        if (!isset(self::$instance)) {
            $c = __class__;
            self::$instance = new $c;
        }
        return self::$instance;
    }

    public function __clone(){
        trigger_error('no clone', E_USER_ERROR);
    }
}

?&gt;
</pre>
<p>The Python MySQL singleton implementation is similar, but includes an external file named config.py in this example</p>
<pre class="brush: python; title: ; notranslate">
--&gt; config.py (configuration information for the MySQL class)
dbhost = &quot;localhost&quot;;
dblogin = &quot;&quot;;
dbpassword = &quot;&quot;;
dbname = &quot;&quot;;

--&gt; MySQL.py (The MySQL class)
#!/usr/bin/env python
# Copyright (c) 2012 Philip Matuskiewicz www.famousphil.com

#to include / use, insert the following lines in the code
#import imp;
#mysql = imp.load_source(&quot;MySQLConnector&quot;, &quot;PATH_TO_PYTHON_FILE/mysql.py&quot;).MySQLConnector();
#result = mysql.tryquery(&quot;Mysql Query Here&quot;);

import sys;
import os;
import string;
import base64;
import MySQLdb;#mysql library (you will need to install this on the system)

#MySQL Singleton Class
class MySQLConnector(object):
        _connection = None;
        _instance = None;

        def __init__(self):
                try:
                        if MySQLConnector._instance == None:
                                MySQLConnector._instance = self;
                                MySQLConnector._instance.connect();
                except Exception, e:
                        print &quot;MySQL Error &quot;+str(e);

        def instance(self):
                return MySQLConnector._instance;

        def get_connection(self):
                return MySQLConnector._connection;

        def connect(self, debug=False):
                try:
                        for line in open('includes/config.py'):
                                #this can be dangerous, but sources / executes lines in config.py, which contains the db info
                                #alternatively, you can just set the variables here manually
                                exec('%s = %s' % tuple(line.split('=', 1)));
                        MySQLConnector._connection = MySQLdb.connect(dbhost, dblogin, dbpassword, dbname);
                        if debug:
                                print &quot;INFO: Database connection successfully established&quot;;
                except Exception, e:
                        print &quot;ERROR: MySQL Connection Couldn't be created... Fatal Error! &quot;+str(e);
                        sys.exit();

        def disconnect(self):
                try:
                        MySQLConnector._connection.close();
                except:
                        pass;#connection not open

        #returns escaped data for insertion into mysql
        def esc(self, esc):
                return MySQLdb.escape_string(str(esc));

        #query with no result returned
        def query(self, sql):
                cur = MySQLConnector._connection.cursor();
                return cur.execute(sql);

        def tryquery(self, sql):
                try:
                        cur = MySQLConnector._connection.cursor();
                        return cur.execute(sql);
                except:
                        return False;

        #inserts and returns the inserted row id (last row id in PHP version)
        def insert(self, sql):
                cur = MySQLConnector._connection.cursor();
                cur.execute(sql);
                return self._connection.insert_id();

        def tryinsert(self, sql):
                try:
                        cur = MySQLConnector._connection.cursor();
                        cur.execute(sql);
                        return self._connection.insert_id();
                except:
                        return -1;

        #returns the first item of data
        def queryrow(self, sql):
                cur = MySQLConnector._connection.cursor();
                cur.execute(sql);
                return cur.fetchone();

        #returns a list of data (array)
        def queryrows(self, sql):
                cur = MySQLConnector._connection.cursor();
                cur.execute(sql);
                return cur.fetchmany();

#end class MySQLConnector
</pre>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2012/01/mysql-singleton-classes-in-php-and-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Listen To Your Music In Spotify For Free Without Wine (Guest Post)</title>
		<link>http://famousphil.com/blog/2012/01/listen-to-your-music-in-spotify-for-free-without-wine-guest-post/</link>
		<comments>http://famousphil.com/blog/2012/01/listen-to-your-music-in-spotify-for-free-without-wine-guest-post/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 17:51:35 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Spotify]]></category>
		<category><![CDATA[Wine]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1633</guid>
		<description><![CDATA[Phil&#8217;s Introduction to the post: This will be the last guest post that I accept indefinitely that doesn&#8217;t deal with a difficult problem that the poster hasn&#8217;t directly solved (basically, the same things I blog about).  I feel that these posts are deteriorating the quality of my site, and guest posters are simply looking for [...]]]></description>
			<content:encoded><![CDATA[<p>Phil&#8217;s Introduction to the post:<strong> This will be the last guest post that I accept indefinitely</strong> that doesn&#8217;t deal with a difficult problem that the poster hasn&#8217;t directly solved (basically, the same things I blog about).  I feel that these posts are deteriorating the quality of my site, and guest posters are simply looking for high page rank back links to their sites, instead of writing unique, original content that creates better rankings.  In a few days, I&#8217;ll be releasing some python source code for MySQL connectivity, Nginx for high traffic sites, and other tricky problems that I&#8217;m currently dealing with in attempt to re-rail my site back onto topic.  Anyways, Rebecca Jones has written about Listening to Spotify on Linux (without WINE which is a Windows Execution Emulator for Linux), I hope that you enjoy her guest post.</p>
<p><strong>Listen To Your Music In Spotify For Free Without Wine</strong></p>
<p>Music aficionados who delight in listening to millions of tracks through Spotify’s free version but feel petered out of needing Wine at the same time have just got some good news to enjoy. The DRM-based music streaming service now announces a new free version specifically for Linux users. Spotify for free will now enable listeners to indulge in gripping tunes without calling out for Wine.</p>
<p>Integrated with a host of great user –friendly features, the music streaming application allows users to listen to millions of songs, any time they like. One can simply rifle through Spotify for a particular song and start playing in unprecedented clarity. For those unaware, Spotify is music based software which provides users with an intuitive medium to search download and play their favorite songs.</p>
<p>Almost like a new music collection, Spotify brings forth convenient access to unlimited tracks and features compatibility with home audio systems and smartphones. The app also lends support to users’ desktop and Mac for tunes that should follow everywhere. At the same time, the app allows users to discover and share music with their closed ones. In fact, users can even hear what their friends are listening to – just by hitting ‘play’ on any music post.</p>
<p>However, Spotify distinguishes from Last FM and Pandora in a couple of significant ways. To state, the app lets music buffs listen to entire albums on demand. But, be careful as there are certain obnoxiously genre-defying advertisements contained. Irrespective of the pros and cons that it comes with, the app still emerges to be an ideal pick. With this one around, people can seamlessly search up and down for songs and share them with amigos.</p>
<p>Although Spotify was extended to several platforms, the software did arch shoulders for those who would always need Wine just to listen to the music. Previously, the Linux version for Spotify used to function merely with paid accounts. Nevertheless, the free version of Spotify for Linux is now anticipated to make things simpler for enthusiasts by large.</p>
<p>The native Linux adaptation starts up pretty quickly and does not gulp down much of a listener’s time while delivering a better experience than Wine. As far as the enrollment is concerned, users will be required to register for an account at Spotify’s official website before kicking off their musical journey. But, a bit to dismay, registering feels a dearth of a Facebook account since the company has made it mandatory to have an account on the stated social networking site.</p>
<p>Besides Spotify for free without Wine, the music streaming service can be downloaded either in Premium which makes users shell our £9.99 per month or in Unlimited which costs just about £4.99 per month. Those who do not wish to fork their pennies out can simply download the free version. However, irrespective of which subscription has been settled upon, the software ensures a thorough, rich music experience. So, what are you waiting for? Just head towards Spotify and we believe the rest you know!</p>
<p><strong>About the author</strong>: Rebecca is a blogger by profession. She loves writing on environment and technology. Beside this she is fond of books. She recently bought a <a href="http://www.gizmowatch.com/agp-graphics-card-10-prices-reviews-specs.html">AGP Graphics Card</a>. These days she is busy in writing an article on  <a href="http://www.styleguru.com/magnetic-earrings-7-comfortable.html">Magnetic Earrings</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2012/01/listen-to-your-music-in-spotify-for-free-without-wine-guest-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using URL Shortening Sites to Bypass Email Spam Filters</title>
		<link>http://famousphil.com/blog/2011/12/using-url-shortening-sites-to-bypass-email-spam-filters/</link>
		<comments>http://famousphil.com/blog/2011/12/using-url-shortening-sites-to-bypass-email-spam-filters/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 23:58:34 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1600</guid>
		<description><![CDATA[Melanie Slaugh talks about using URL shortening sites to bypass filters that otherwise would disable links found in emails and elsewhere.]]></description>
			<content:encoded><![CDATA[<p>I bring you a guest post from Melanie Slaugh. She does get a majority of this topic right, except for this is also an excellent way to get humans to click blindly too. I set up a twitter bot at one point that posted a shortened URL to a website that I worked on to artificially boost its traffic and market it. Surprisingly, posting to the trending topics on twitter with a related link and text generates a lot of traffic since a lot of people click links blindly. Anyways, here is Melanie&#8217;s post.</p>
<p>URL shortening sites like Tinyurl.com and Bitly.com are the new haunts for Tweeters who do not want long URLs to consume their restricted typing space. However, shortened URLs have another, more insidious use. They allow spammers and hackers to evade the timeworn email filters and gain entry to your inbox.</p>
<p>Most email anti-spam counteragents were generated even before the usage of embedded URLs in emails, not to mention abridged ones. Most contemporary anti-spam programs track back the URL to see if the site it originates from is hazardous. However, a shortened URL can be utilized by hackers in two distinctive ways.</p>
<p>The first way is simple. They tie the site they want you to get directed to into one of the identified and reliable URL shortening sites available for free to the community. Because the URL shortening site itself is reliable, the link is trusted. However, the link does not connect you to the URL shortening site; it connects you where it was originally fixated.</p>
<p>Secondly, hackers can get especially resourceful. Once the email program’s anti-spam filters determine the misapplication of the URL shortening sites, as some have already done, hackers produce their own URL shortening sites. Basically, they shorten a site that’s previously shortened. So, when you click on the link, you get forwarded not once, but twice. The first transferal is safe, the next is a hackers.</p>
<p>This is &#8220;yet another example of cyber-criminals adopting new technology to bypass traditional security measures,” said Bradley Anstis, vice-president of technical strategy at M86.</p>
<p>&#8220;A lot of the traditional anti-spam engines were developed before Twitter, so they are not geared up to recognize embedded URLs as seen in blended email threats in spam, let alone shortened URLs that link to malicious, or compromised Web pages,&#8221; Anstis said.</p>
<p>Some frightening statistics:</p>
<p>In May 2011, the global ratio of spam in email traffic from new and previously unknown bad sources increased by 2.9 percentage points since April 2011 to 75.8% (1 in 1.32 emails).</p>
<p>The global ratio of email-borne viruses in email traffic from new and previously unknown bad sources was one in 222.3 emails (0.450 percent) in May, a decrease of 0.143 percentage points since April. (From Net-security.org)</p>
<p>So, what can you do to guard yourself from hackers? For one, never click on an email link if you do not have confidence in the sender. Two, even if you do have faith in the sender, do your best to get to the link organically, meaning follow the regular method. If you are tracking a delivery, go through the main website in the place of clicking on the link. These modestactivities will help to keep your computer, and the data it holds, safe from hackers.</p>
<p><strong>Author Bio</strong></p>
<p>Melanie Slaugh is enthusiastic about the growing prospects and opportunities of various industries and writing articles on various consumer goods and services as a freelance writer. She writes extensively for internet service providers and also topics related to <a href="http://www.myispfinder.org/">internet providers in my area</a> for presenting the consumers, the information they need to choose the right Internet package for them. She can be reached at slaugh.slaugh907 @ gmail.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2011/12/using-url-shortening-sites-to-bypass-email-spam-filters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrating Exchange 2010 to new (upgraded) hardware</title>
		<link>http://famousphil.com/blog/2011/11/migrating-exchange-2010-to-new-upgraded-hardware/</link>
		<comments>http://famousphil.com/blog/2011/11/migrating-exchange-2010-to-new-upgraded-hardware/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 03:01:04 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Hosting / Server Administration]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[active directory]]></category>
		<category><![CDATA[exchange]]></category>
		<category><![CDATA[exchange 2010]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[owa]]></category>
		<category><![CDATA[Transfer]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1573</guid>
		<description><![CDATA[Phil walks through the process / potential problems of moving Exchange 2010 over to a new server.]]></description>
			<content:encoded><![CDATA[<p>Most of the Matthouse infrastructure is running on old Celeron processors and limited RAM, you may laugh at me, but that hardware has been very reliable and has lasted Matthouse for the better part of 3 years, and some of it may continue to power Matthouse well into the future!  But there are some applications out there that require a little more juice to run well, and (unfortunately) Exchange falls into this category.  I say it is unfortunate since the Exchange server hosts a handful (&lt; 10) mailboxes, yet it costs quite a bit to maintain compared to other Mail Transfer Agents (MTA).  So anyways, this blog is dedicated to the procedure that I took to migrate Exchange over to brand new, shiny, fast hardware.</p>
<p>First, I had Server 2008 R2 Datacenter as my operating system on both the existing server (denoted double) and the new server (denoted ruby).  The servers could clearly communicate with each other within the same datacenter as well so that file / data transfers could be effective.  The first thing to adding any server is to give the new server a name and know its network configuration details ahead of time.  I’m not going to go into details about how to install Windows, since it’s pretty simple.  Just make sure that you have the correct drivers installed for your server after the installation completes.</p>
<p>Note about installing Windows: just so that you don’t run into any issues with your system, make sure that your primary hard drive is attached to the first port for your motherboard’s interface, in my case, the first hard drive was connected to SATA 0.  If you don’t do this, you’ll run into a lot of problems and waste a lot of time (like I did!).  In addition, make sure that your BIOS has AHCI enabled prior to installing Windows, this also caused problems in my scenario.  Once Windows is installed, make sure that you can disable write caching on your hard disk without the operating system freezing (in computer management, under storage, right click the disk and optimize for quick removal).  If you followed the above, this shouldn’t cause Windows to hang, and will prevent Active Directory from incapacitating your system during the restart phase of the installation.  In addition, this is a good time to name your computer, join it to some default workgroup, add remote administration features, and change the time zone / clock settings.</p>
<p>Before continuing, I’d also recommend disabling Internet Explorer’s advanced security features; this is done by going to the computer management main screen and scrolling down, finding IE ESC and turning it off (acknowledging all of the warnings).  If you keep them on, you’ll find yourself doing way too much work to download necessary applications, etc.  These features are only useful if you plan on doing general web surfing on the server (which I would not recommend for security reasons).  I also activated windows, ran all the necessary windows updates (several reboots and optional updates as well).  After this all has been done, I ended up rebooting the machine a final time.</p>
<p>At this point, I installed several applications (using IE to get Google Chrome initially).</p>
<ul>
<li>Google Chrome (<a href="http://chrome.google.com/">http://chrome.google.com</a>) for web surfing / downloading the rest of these</li>
<li>Adblock plus for chrome (<a href="http://adblockplus.org/en/">http://adblockplus.org/en/</a>) to block malware / ads</li>
<li>7zip (<a href="http://www.7-zip.org/download.html">http://www.7-zip.org/download.html</a>) for good archive file support</li>
<li>Microsoft Security Essentials (<a href="http://windows.microsoft.com/en-US/windows/products/security-essentials">http://windows.microsoft.com/en-US/windows/products/security-essentials</a>), Windows 7 version works fine, this is a quick, safe, free antivirus solution for all of those who hate Symantec’s ability to slow down the entire system (hey, that’s me!)   This is also good for desktop users!  I would recommend disabling the scheduled Sunday scan since real-time protection is sufficient in my case.</li>
<li>Magic ISO (<a href="http://www.magiciso.com/tutorials/miso-magicdisc-overview.htm">http://www.magiciso.com/tutorials/miso-magicdisc-overview.htm</a>) to mount ISO images (including the Exchange 2010 ISO if you downloaded it from MSDN like I did).</li>
<li>Office Filter Packs which are a prerequisite for Exchange 2010 (<a href="http://www.microsoft.com/download/en/details.aspx?id=17062">http://www.microsoft.com/download/en/details.aspx?id=17062</a>)<span id="more-1573"></span></li>
</ul>
<p>At this point, I added 2 custom firewall rules on both servers that allowed unrestricted incoming traffic from each server.  I then started the Active Directory installer by installing the AD User Service Role, and then ran DCPromo.exe as suggested by the installer.  I did an advanced mode install, adding a new controller to an existing domain in an existing forest, installing the DNS role locally, and I let it install.  For the AD Restore Password, make sure you remember what you set it to since this will be the password to the local (inaccessible) administrator account on the server incase everything fails.  At this point, the server should reboot at least once on its own.</p>
<p>Next, I mounted the Exchange ISO and went through the step by step screens to install it.  For me, I installed the mailbox, client access, hub transport, and management tools roles.  I told it that the client role would be internet facing to the OWA website (matthouse.org).  Exchange takes roughly 3 hours to install at this point.  After it is done, you should enter the Exchange Management Console (EMC), enter a product key to active it, and add a send connector for your organization (for the new server specifically).  If you’re wondering why your server isn’t sending mail (and you’re new to this and installing Exchange for the first time), try adding a send connector that is internet facing and allows *, that will fix your problem.</p>
<p>You will want to run Windows updates again and make sure that all of the Exchange updates are installed before continuing.  This may require several reboots of the server.</p>
<p>At this point, Exchange should be synched with the other server mostly so it’s time to start migrating services.  I first recommend changing all of your DNS records for mail over to the new server and give them time to propagate (as per the Time to Live [TTL] value on the record).  I also did mailbox remove requests (through the EMC) to the database on the new server; this should be fairly intuitive for anyone with a background in at least some systems administration.  I also went through all the client access role options and made sure that the internal / external sites for IMAP, POP, OWA, OAB, and ECP were properly set up for my main OWA address (matthouse.org).</p>
<p>Since Exchange by default requires <a href="https://server/owa">https://server/owa</a> to gain access to Outlook Web Access [OWA], I needed to add a few files to the web root of the domain to properly forward the user onto the OWA website when they went to the main website.  To do this, simply go to the IIS manager, go to the Default Website, and right click and open the document root.  In here, add 2 files as follows:</p>
<p>Web.config:<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;configuration&gt;<br />
&lt;system.webServer&gt;<br />
&lt;httpErrors&gt;<br />
&lt;error statusCode=&#8221;403&#8243; subStatusCode=&#8221;4&#8243; path=&#8221;https://matthouse.org&#8221; responseMode=&#8221;Redirect&#8221; /&gt;<br />
&lt;/httpErrors&gt;<br />
&lt;/system.webServer&gt;<br />
&lt;/configuration&gt;</p>
<p>Default.aspx</p>
<p>&lt;script language=&#8221;c#&#8221; runat=&#8221;server&#8221;&gt;<br />
private void Page_Load(object sender, System.EventArgs e)<br />
{<br />
Response.Status = &#8220;301 Moved Permanently&#8221;;<br />
Response.AddHeader(&#8220;Location&#8221;,&#8221;https://matthouse.org/owa&#8221;);<br />
}<br />
&lt;/script&gt;</p>
<p>Basically, these 2 files will forward anyone from the web root to the appropriate OWA directory in SSL (https) mode.  I figure that anyone competent can figure out what needs to be changed, it isn’t rocket science, after all.</p>
<p>At this point, I added a real RapidSSL certificate to the server.  To do this, I went to the Exchange Management Console, went to the server tab, found the place to generate a CSR (Certificate Signing Request) and I created one.  I pasted everything from the CA (Certificate Authority) and imported it to Exchange and set all the services to use it (IIS, SMTP, POPS, IMAPS).  I also found the remote desktop session host manager window, right clicked the configuration of the server, and right clicked on rdp-tcp and went to properties.  I selected the general tab, selected the appropriate already installed certificate and ok’d everything, after restarting my RDP session, I had the new secure connection.</p>
<p>For anyone who is curious about anti-spam, there is a hidden anti-spam feature on the Exchange Hub Transport role, to get this, you can run the below steps in the Exchange PowerShell environment.  Afterwards, you will see an Anti-spam option in the Hub Transport role node under the Organization Configuration node of the EMC.  As for me, I opted for Forefront Protection 2010 (formerly Forefront Security 2010) since it provides a much more sophisticated scanning engine, although it does cost more and takes a lot more memory and configuration to get running smoothly.</p>
<ul>
<li>cd /</li>
<li>cd c:\</li>
<li>cd program files</li>
<li>cd microsoft</li>
<li>cd exchange server</li>
<li>cd v14</li>
<li>cd scripts</li>
<li>./install-AntispamAgents.ps1</li>
<li>Restart-Service MSExchangeTransport</li>
</ul>
<p>After all of this, I also found an IE9 / EMC interoperability bug where you can’t close the EMC if IE9 is installed on the system, this seems to be a bug with the Microsoft Management Console (MMC), so the patch can be directly downloaded from Microsoft, I would recommend searching Google for hotfix 2624899 to get the patch.  Keep in mind that a hotfix rollup in the future will include this patch from Microsoft so I’d recommend only installing it if you have this issue.</p>
<p>At this point, I’d recommend securing the firewall, RDP’s port, and adding some backup scripts.</p>
<p>Next, it is time to remove the old server.  I ran the following in the Exchange Management Power Shell Environment: “Get-Mailbox -Arbitration -Database db1 | New-MoveRequest -TargetDatabase db2”, where db1 is on the old server, and db2 is on the new server.  In EMC, I went to the organization node &gt; mailbox &gt; offline address book (OAB), added a new OAB generated by the new server and removed the existing one generated by the old server.  I also went to hub transport under organization, went to send connectors and removed the old server from the send connector.</p>
<p>On the new server, go to Active Directory Sites and Services under Administrative Tools and find each domain controller and view the properties.  Make sure the new domain controller is a global catalog and the old domain controller is not a global catalog server (respectively), these will be under the NTDS settings properties page.  Next, we need to transfer several roles, I used (<a href="http://www.petri.co.il/seizing_fsmo_roles.htm">http://www.petri.co.il/seizing_fsmo_roles.htm</a>) as a guide for this.</p>
<ul>
<li>open command prompt (run cmd)</li>
<li>ntdisutil</li>
<li>roles</li>
<li>connections</li>
<li>connect to server &lt;new domain controller&gt;</li>
<li>q</li>
<li>transfer naming master</li>
<li>transfer infrastructure master</li>
<li>transfer PDC</li>
<li>transfer RID master</li>
<li>transfer schema master</li>
<li>q</li>
</ul>
<p>On the old server, remove the Active Directory Certificate Services role if it exists (you can probably ignore any warnings since Exchange should be using external certificates).  You may have to reboot the server.  Finally, go to add/remove programs on the old server, and remove Exchange 2010 by deselecting all of the roles.  Exchange automatically detects if it is safe to remove everything and will transfer anything left behind over to the new server.  Do the same for Active Directory by running DCPromo.exe (under the Active Directory node of the server management console), and running through the prompt.  If you get any warnings / errors when attempting to remove Exchange / Active Directory, take the advice and don’t continue since you might end up creating a lot more work for yourself.</p>
<p>Once everything is removed, you can trash the old server from the network and Exchange has been successfully moved.  For me, I ended up having about 4 reboots that affected OWA for users for a total of roughly 5 minutes each while Exchange rebooted.</p>
<p>As usual, thanks for reading.  Disclaimer: this information is provided on an as-is basis, I do not guarantee that this will work in your scenario, but I hope that it can help someone else out that is having similar difficulties to the ones that I&#8217;ve described.</p>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2011/11/migrating-exchange-2010-to-new-upgraded-hardware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Tale of Woes with Charter Communications</title>
		<link>http://famousphil.com/blog/2011/11/why-our-internet-delivery-service-is-broken-%e2%80%93-a-tale-of-woes-with-charter-communications/</link>
		<comments>http://famousphil.com/blog/2011/11/why-our-internet-delivery-service-is-broken-%e2%80%93-a-tale-of-woes-with-charter-communications/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 14:58:54 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Cable]]></category>
		<category><![CDATA[Charter]]></category>
		<category><![CDATA[ISP]]></category>
		<category><![CDATA[problems]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1564</guid>
		<description><![CDATA[Sarah James posts about her difficulties with Charter Communications (Guest Post)]]></description>
			<content:encoded><![CDATA[<div>
<p>I bring you a guest post from Sarah James ( contactsarahjames [at] gmail [dot] com), this post is more or less Sarah&#8217;s view of Charter Communications which is a Cable ISP.</p>
<p>The Charter internet service is great when it works – not so much when it doesn’t. That’s not fully Charter’s fault of course, or at least it wasn’t in my case – the root of my problem was the fact that my new office existed on a street that has only just been built, and which had yet to be registered with any database up to and including the ne held by the Post Office.</p>
<p>Not ideal, especially when the Charter internet guys were due to show up on day one and install the system for me. Here’s how my tale of woes began:</p>
<p>The Post Office eventually updated my street address. But that updated didn’t appear anywhere outside of the Post Office’s own database for <em>three weeks.</em> I’m assuming that delivering fast internet updates isn’t a priority for an organisation that sometimes has problems delivering letters on time, if at all.</p>
<p>The Post Office was only the start of my problems. I had to order my Charter internet connection based on the address of a nearby building, which meant, when Charter came out to install it, that they wouldn’t fit it in the building I actually own. Fair enough. But it took ages to sort the whole thing out, going backwards and forwards between the Poster Office and Charter until I was blue in the face and a cast of thousands had turned up at both my actual address, and the address down the street I’d been using to get my stuff delivered in the first place.</p>
<p>I tried talking to Charter directly but of course you either end up in a queue a mile long or you have to use the online web chat assistant – who, given the speed and clarity of the Charter internet connection (once you’ve finally had it installed0, went unbelievably slowly. It was kind of like talking to a backwards six year old.</p>
<p>Question: with all this internet power at their fingertips, why are the web companies so bad at direct communication with their customers? On the one hand they sell these amazing services, which allow you to segue all sorts of communications requirements into a single connection (the payment plan is good too) – and on the other, they make communicating with them next to impossible (unless you’ve got all day to sit around doing nothing else except trying to get through to them).</p>
<p>Fortunately my Charter internet service has now been sorted – and I am enjoying the rapid broadband connection that I was promised in the first place. I have no beef with the quality of the service and the capabilities of the connection. I would just like to know why it takes around 12 different engineers to install a simple web connection. Though as I say the business with the Post Office can’t have helped much.</p>
<p>So come on, Charter, get it together in the back operations department. Use your own technology to power your online web assistant and maybe we’ll be able to get something done!</p>
<p><strong>About the author:</strong></p>
<p>Sarah James is associated with various internet security related companies including <a href="http://www.broadbandexpert.com/" target="_blank"><strong>broadband expert</strong></a> as their freelance and staff writer. She has been linked with some of the best web media companies and offers various ways for internet solutions. She excels in writing articles related to internet security, <a href="http://www.broadbandexpert.com/charter-cable-internet" target="_blank"><strong>charter internet</strong></a> plans, comcast deals etc.</p>
<p align="justify"><span style="font-family: 'Century Gothic'; font-size: xx-small;"><br />
</span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2011/11/why-our-internet-delivery-service-is-broken-%e2%80%93-a-tale-of-woes-with-charter-communications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Talking IMAP over a telnet connection</title>
		<link>http://famousphil.com/blog/2011/11/talking-imap-over-a-telnet-connection/</link>
		<comments>http://famousphil.com/blog/2011/11/talking-imap-over-a-telnet-connection/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 05:18:54 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[IMAPS]]></category>
		<category><![CDATA[OpenSSL]]></category>
		<category><![CDATA[Protocol]]></category>
		<category><![CDATA[telnet]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1558</guid>
		<description><![CDATA[Phil talks about how to use IMAP via Telnet in context of reading an email account on an IMAP server.]]></description>
			<content:encoded><![CDATA[<p>It has been some time since my last post, and I think this is going to be the norm for at least the next year, sadly.  Today’s topic is based on information that I needed about IMAP (Internet Message Access Protocol) last week. Basically, I’m developing an application for conceptual.ly that allows for normal users to enter their login information for their email and then the application will unsubscribe them from internet mailing lists that people often dislike, yet get plentiful email from.  Since the solution is completely artificial (and requires no human intervention), it exceeds what others have done in the past.</p>
<p>Unfortunately, computers are not able to think and identify patterns without a lot of help and special cases already entered into databases for them to compare against.  Thankfully, emailing lists have certain unique identifiers that allow this application to effectively identify and remove users from mailing lists, although I will not disclose exactly how it is done since that research was done on company time and therefore remains property of Conceptual.ly.  But I did want to take the time to publish a cheat sheet for those of you who need to communicate with IMAP servers via telnet.</p>
<p><strong>CONNECTING</strong>: The general command to telnet to an insecure IMAP server is “telnet imap.server.com 143”, remembering that IMAP runs on port 143.  If you’d like to connect through IMAPS over port 993, your computer will need OpenSSL and the command to do so is “openssl s_client -connect imap.server.com:993”.  OpenSSL will take care of all the connection securing / establishing for you, the commands following the initial connection are exactly the same.</p>
<p><strong>IDENTIFIERS</strong>: IMAP commands start with an identifier, I’ve seen “. “ as the identifier (a dot followed by a space) and I’ve also seen “a1 “ (a1 followed by a space) as the identifier.  I’ve also seen incrementing the 1 to 2, 3, etc work, and reading the RFC was not specific to what had to be used.  I typically use “. “ as my identifier and fall back to using a1 for all of the commands I enter, it has worked for every IMAP implementation I’ve dealt with thus far (including Gmail, Dovecot, AOL, and Exchange).</p>
<p><strong>LOGIN</strong>: To login to the IMAP server, you need to enter the identifier followed by “login username password” replacing username and password with the appropriate login information.  Note that your username may be your email address.</p>
<p><strong>LIST</strong>: This command is typically followed by a login and lists all of the available mailboxes in the IMAP account.  The syntax for this command is <em>list “” “*” </em> which simply gets all of the mailboxes and subfolders.  The usual response is * LIST (\HasNoChildren) “.” “INBOX” which can easily be parsed, the \HasNoChildren can change if there are children.  Usually with children, the output will make the actual folder (the last segment of the output) contain the parent and a . so that you can simply use this to formulate a connection to a specific folder to retrieve messages, etc.  This isn’t always the case, so it is helpful to use IMAP over telnet to verify the response of the command for the specific IMAP server that you are connecting to.</p>
<p><strong>STATUS</strong>: This command will return information about the folder you inquire about, I’ve only seen it return the total messages and unread messages in a folder in my experiences.  The syntax of this command is “STATUS FOLDER (flags which are optional)”.</p>
<p><strong>SELECT</strong>: In order to search or retrieve items from a folder, you must first select that folder.  The syntax of this command is “SELECT FOLDER”.</p>
<p><strong>SEARCH</strong>: This command has some ambiguity that caused me some difficulty that I will get to shortly.  The syntax for search is “SEARCH (PARAMS)”.  The parameters are identified in the RFC3501, but there are some specifics I’d like to talk about.  First, I’ve found that SENTSINCE does not need to be in (), instead you would do “SEARCH SENTSINCE 01-01-11 (PARAMS)”.  Next, if you want to search for more than 2 items using the OR syntax, you would need to use nested ORs, this might look like the following: “(OR (OR HEADER From yahoo.com BODY hello) BODY phil)” to search for a message that might be from yahoo.com (partial match) with the body containing hello, or just having “phil” in the body.  This works similarly for the AND parameter.  When search returns, it returns a space separated array of numbers which are identifiers for the FETCH command.  Remember that to search, you have to SELECT the folder to search first.</p>
<p><strong>FETCH</strong>: This command will retrieve messages from a folder, you must have selected that folder first before you can retrieve a message.  Typically, messages are identified by a number which the FETCH command uses, so a SEARCH is generally executed before fetching messages.  The syntax is “IDENTIFIER FETCH (PARAMS)”.  IDENTIFIER is the number that search returned, and there are numerous PARAMS that you can do.  I’ve seen (RFC822) work at grabbing the entire raw message source (both headers and body), but in AOL’s implementation it does not, so I’ve reverted back to getting the header and body of each message through 2 fetches, the first parameter is (RFC822.HEADER) and the second is (RFC822.TEXT).  I do not believe that IMAP servers return a decoded version of the message in all cases, so I also used an email parsing engine in Python to decode the message source that these commands returned.</p>
<p><strong>LOGOUT</strong>: The syntax for this command is “LOGOUT”.  It simply disconnects you properly from the IMAP server.</p>
<p>For the needs of my program, these were all the commands I needed, so I’d strongly suggest that you look at RFC 3501 at <a href="http://tools.ietf.org/html/rfc3501">http://tools.ietf.org/html/rfc3501</a> for more information about the IMAP protocol and its usage.</p>
<p>I would also like to note that GMail has added commands to their implementation that better follow the speed and reliability of their web interface, those commands can be found at <a href="http://code.google.com/apis/gmail/imap/">http://code.google.com/apis/gmail/imap/</a> (this was kind of hidden from my initial searches for information about GMail’s IMAP implementation, so I wanted to make this more visible).  If you use standard IMAP commands on Gmail, you can expect it to be much slower than other IMAP servers and much slower than their web interface.</p>
<p>Finally, AOL’s IMAP implementation doesn’t allow searching certain header fields and the body of the message, so I’d recommend testing your commands ahead of time to ensure you are getting responses that you expect.  As a tradeoff, AOL’s IMAP implementation is very fast at returning messages via the FETCH command, so where the SEARCH lacks ability on AOL’s IMAP server, the speed in downloading messages far makes up for this lack of functionality.  It is also possible that AOL’s IMAP implementation has certain extensions that I didn’t notice, so you may want to look into that possibility also if you’re dealing with their IMAP servers.</p>
<p>Hopefully this blog post can help someone save time so that they don’t have to do as much searching as I had to for connecting to IMAP servers.</p>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2011/11/talking-imap-over-a-telnet-connection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Is With the New Controversy Behind Ubuntu Unity?</title>
		<link>http://famousphil.com/blog/2011/10/what-is-with-the-new-controversy-behind-ubuntu-unity/</link>
		<comments>http://famousphil.com/blog/2011/10/what-is-with-the-new-controversy-behind-ubuntu-unity/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 02:46:00 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1556</guid>
		<description><![CDATA[Nadia Jones (guest poster) writes about the Ubuntu Unity interface that was released approximately 6 months ago with Ubuntu 11.04.]]></description>
			<content:encoded><![CDATA[<p><strong>I bring you a guest post from Nadia Jones this week</strong>!  I will return next week with a simplified IMAP reference guide.</p>
<p>&nbsp;</p>
<p>Over the past few months, a large subset of the Linux community has been all ablaze in disagreement and controversy. The disagreement has been over a dramatic change in interface to a popular operating system (referred to in the Linux world as a “distro”) called Ubuntu.</p>
<p><strong>Some Linux and Ubuntu Basics</strong></p>
<p>Before we get into the details, I think it is important to understand the basics of Linux and Ubuntu. Linux refers to the kernel of the operating system, the core under-the-hood process that handles things like hardware management, etc. The Linux kernel is completely open source, so there are many distros wrapped around it, each with their own combination of software, graphical front-ends, and what have you. Ubuntu, maintained by a company called Canonical, is believed to be the most popular free Linux distro.</p>
<p><strong>Ubuntu’s New Release: Unity</strong></p>
<p>Up until version 11.04, which released April 2011, Ubuntu has used a graphical front-end called Gnome. It is considered stable by many users and has had a long period of usage in Ubuntu. With the release of 11.04, Canonical experimented with a new front-end called Unity. So far, users have complained Unity being very buggy, counter-intuitive, and oversimplified.</p>
<p>For example, Unity has a new docking bar locked on the right side of the screen that is very similar to Apple’s docking bar at the bottom of Mac OS X. The problem with this dock is that it looks exactly the same regardless of which programs you have open on your system. So if you are juggling four separate windows of Google Chrome, and all of them are minimized, there is no taskbar-like setup to easily pick and chose which one Window you want. You can only see the one Google Chrome logo on the dock. Click it, and all your Chrome windows appear on the screen at once. There are many examples like this, in which everything seems to take one or two clicks too many. Essentially, they tried taking a page from Apple and achieved very little.</p>
<p>Perhaps the bigger upset is the buggy elements of Unity. Linux distros (including Ubuntu) are known and developed for their high efficiency and reliability. Very modest computer systems can run on Linux distros with no problem for hundreds of days, with no problems and requiring no restart. With Unity, many users are reporting that they have to force restart their systems every work or so because the unity dock locks up, windows will freeze, or any number of glitch, buggy reasons.</p>
<p><strong>Beyond User Experience, Where’s the Controversy</strong></p>
<p>Bugs are a part of any operating system, and in due time, they will likely be fixed. And the flaws of the user interface can be tweaked and customized with enough frustration and elbow-grease, so this shouldn’t be a permanent source of contention either. With two of the biggest complaints of Unity being fixable, this begs the question: Why is there all this controversy?</p>
<p>The most sensible explanation lies in the normative ethics of open source software development. There have been countless cases of developers making mistakes and bad decisions in creating and updating software. Typically, however, the developers listen to the feedback of their users and fix their mistakes.</p>
<p>Yet, when Mark Shuttleworth of Canonical got overwhelming feedback from Gnome developers that they didn’t like Unity and didn’t think it was a good fit for their system, Shuttleworth shifts Ubuntu to use Unity as the default front-end anyway. This effectively forced a split in the Ubuntu community. Many intermediate to advanced users will either revert back to using Gnome or find a different distro altogether. Yet Canonical is pushing forward as if there is no disagreement or problem whatsoever.</p>
<p><strong>Bottom Line</strong></p>
<p>While I do feel like this whole situation is a complete blunder on Canonical’s part, I do not think it will lead to any type of dramatic end to the company. Sure, some great developers and innovative users in the community may leave, but Ubuntu’s grasp over the Linux community is too big to lose hold.</p>
<p>I do think that Unity is fundamentally more cumbersome than Gnome. For a interface that is spreading to more and more school districts, public libraries, and government buildings due to its free pricing <strong>and</strong> ease of use, I worry that Unity is a step in the wrong direction. Still, I’m sure that the fact it is free will prevail over whatever ease of use obstacles Unity has.</p>
<p><strong><span style="text-decoration: underline;">Author Bio:</span></strong></p>
<p>This is a guest post by <strong>Nadia Jones</strong> who blogs at <a href="http://www.onlinecollege.org/">online college</a> about education, college, student, teacher, money saving, movie related topics. You can reach her at nadia.jones5 @ gmail.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2011/10/what-is-with-the-new-controversy-behind-ubuntu-unity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My first week with the iPad 2</title>
		<link>http://famousphil.com/blog/2011/09/my-first-week-with-the-ipad-2/</link>
		<comments>http://famousphil.com/blog/2011/09/my-first-week-with-the-ipad-2/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 03:32:22 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Mobile Technology]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1350</guid>
		<description><![CDATA[Phil discusses his positive first week impressions of the iPad 2 that he recently bought from the Apple corporation.]]></description>
			<content:encoded><![CDATA[<p>Last week, I finally broke down and got an iPad.  I did this partially because I wanted a new toy, and partially because I wanted to find out what the hype is with this gadget.  I’ve had several recommendations saying that I should buy one from many friends in the past, so I finally took the advice and jumped head into a product that I probably wouldn’t have looked at without the positive encouragement.  The final piece that really motivated me to get this product was that I would like to learn to develop for it, and I’ve found that the only way to effectively develop for anything, denoted X, is to be an active user of X.</p>
<p>After a week with the device, it makes sense to finally make an unbiased review of it.  When I first got home with it, I was really impressed with the design of the packaging.  Only Apple would put the iPad into a backpack style bag that’s really durable to carry out of the store, in addition, the packaging for the iPad was also well thought out.  There were tabs that easily allowed it to be pulled out of the box (no turning the box upside down, etc to remove it).  So after the unpackaging of it, I plugged it in to find that I needed to install iTunes to set it up.  This has got to be one of the worst things about Apple products, because I cannot stand iTunes, it’s just so bloated, and I manage my music library through other means!  Anyways, I installed iTunes and accepted the license agreement.  I couldn’t do much else though because iTunes couldn’t connect to my AppleID account because I firewall my internal network very heavily (which is fine).  Accepting the license agreement was enough to get the device to work without a computer; I quickly enabled the 3g access through Verizon and signed into the Apple Store using the 3g connection.</p>
<p>My first impression of the 3g access on my iPad was a very positive one, I actually get a little signal on the Manhattan, NY Subway which most phones I’ve used don’t even get, and I think this is because the antenna on the iPad is bigger.  This signal is just enough to check email and such, nothing too demanding.  I also get roughly 1.7Mbps down, and .42Mbps up on the 3g connection which is quite good for a Verizon mobile connection (EvDO at least, LTE would be pretty crappy).  I also love the fact that 3g is built in… so there is no tethering or anything of that sort.  Unfortunately, there are a few downfalls to the 3g model.  The first is that it will cost more and there is no way to sign up for a long term contract to get a big discount on the device (unlike phones).  I was pleased to find that the 2GB mobile data plan was only $30/month, which is well within my price range and usage range.  There are several other plans as well that are just as great.  If I were to recommend an iPad to anyone, I would strongly suggest the 3g model, just because you can use it anywhere without having to worry about being within range of a wireless signal.</p>
<p>I bought the smart magnetic cover for my IPad because I figured it would adequately protect it.  Although it does that, it really helps make the unit more dirty, especially if you goto a restaurant and put it on the table, since the cover that touches the screen also touches the table unless you put it in that triangle stand arrangement.  For general movement, the cover does a good job at protecting the screen.  Looking back, I wouldn’t change the decision to get the smart cover, but I do need to look into a carrying case / solution for this iPad.  It is too big to carry in a pocket, but it’s too small to put into my laptop case, and that presents a problem.  I currently carry it around on my side everywhere, which isn’t awful, but does make me more of a target when annoying people ask for money on the streets (it is NYC after all).  I haven’t quite found the perfect solution to this yet, but I’m sure it will come with time and more exposure to my options.</p>
<p>Apple is known for their App Store, and I someday hope to make some apps that appear in it.  For now, I downloaded several apps that made sense for my particular usage of the iPad… I’m going to just briefly mention them now.  The first application I got was Outlook Mail Pro by Code Before Dawn, which was meant to give a very similar interface to Outlook.  It works well for mail because the interface is well thought out (perhaps a bit better than the default mail app’s interface), but I still prefer using the built in Mail Application support for Exchange when it comes to the calendar, contacts, and task list access.  I also bought the iTap RDP application for remote desktop; it saves passwords and allows several bookmarks to remote desktops.  I use this for connecting to my remote windows computer for Trillian instant messaging and handling other issues that only a true computer can do.  Over 3g, the speed is phenomenal for response times to clicks and such.  I also bought the Remoter VNC application which supports SSH, Telnet, VNC, and other remote access protocols.  Remoter uses Putty keys for authentication which is why I sprung for this application over its competitors, and so far I’m very happy with it.  Other free apps that I got were Facebook, speed test, Skype, yelp (restaurant ratings), and Sirus XM (online subscription required).  Remember that Skype and Sirius will use a lot of data, so I tend to use Wi-Fi when I use those apps.  I did try a video chat on the Skype application and I believe that it works better on my iPad than it does on my main computer!</p>
<p>I will now go onto usability of the iPad.  When I first got the iPad, I was concerned that I wouldn’t be able to get used to the keyboard.  Honestly, at first, it was difficult to get used to since there is no bump on the F and J keys (home keys), so you have to look down to place your hands.  It was also weird not being able to rest my hands on the keys.  Overall though, I did quickly adjust to it and even with big hands, I can type fairly well on the keyboard.  One thing I did notice is at first my hands would always drift away and hit the wrong keys, but somehow that has gotten far better, I’m not sure if Apple is doing error correction or if I’m just getting better at keeping my hands in a consistent position while typing.  The second usability issue was the limited nature of most Apple products; fortunately, I haven’t hit any of these limitations that I couldn’t work around (e.g. remote desktop).  So far, my iPad is quickly replacing most of my computers since I’m quite used to it now (I’m actually typing this up on my iPad).  The battery life on the iPad is great, I haven’t had a single issue with battery life, and the lowest I was able to get the percentage to was 65% remaining, and that was after a full day of using it while visiting several parts of Manhattan.  This segue takes us into a side topic about the maps application.  So far, the iPad tends to be more reliable than my phone when it comes to placing a dot on the built in map telling me exactly where I’m at.</p>
<p>Overall, I love how fast the iPad is to display anything.  Unlike other things I’ve used, I can usually click something on the iPad and it loads instantly with very little delay.  I really like this about most Apple products and I wish that other competitors (e.g. Android) could make similar advancements in speeds for embedded devices.  Oh well, I’m sure that Google and their partners are working on this, and all good things take time to perfect.</p>
<p>So there you have it!  Overall, I would recommend the iPad to anyone, but at the same time, I really do think that you have to take the plunge yourself to discover if it is right for you.  I took the chance (with a 14 day return policy), and I found out that I definitely have great uses for my iPad, and I&#8217;m quickly learning why others strongly recommend it.</p>
<p>As always, thanks for reading, and I hope to post more frequently now that things are settling down in my life and are starting to become the same old routine, just another day.  I have a few interesting blogs on business and high traffic hosting coming soon, I just need the time to thoroughly review what I’ve already written for them so that they’re as clean and concise as possible.</p>
<p>Also, in the near future, FamousPhil will be getting a new, professional design (mobile and full computer oriented!), so that is something that you can look forward to!</p>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2011/09/my-first-week-with-the-ipad-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Resetting a Password on Mac OSX (Server)</title>
		<link>http://famousphil.com/blog/2011/08/resetting-a-password-on-mac-osx-server/</link>
		<comments>http://famousphil.com/blog/2011/08/resetting-a-password-on-mac-osx-server/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 03:39:06 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Hosting / Server Administration]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[reset]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[single user mode]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1239</guid>
		<description><![CDATA[Phil gives a step by step guide to resetting a user's password on Mac OS X without knowing the user's password.]]></description>
			<content:encoded><![CDATA[<p>Anymore, it seems like posting here is a seldom activity because I don&#8217;t often deal with server administration issues any longer (although I am working on changing that <img src='http://famousphil.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ).  Today, I was asked to reset the password on a Mac Server because the user didn&#8217;t remember the password.  Personally, I don&#8217;t know how a server oriented password can be lost, but whatever, I guess I&#8217;ve seen it all now <img src='http://famousphil.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Mac, like Linux and its BSD roots, has a flaw when you have physical access to the machine.  Basically, passwords are stored as password hashes in a simple file on the server.  To change the password of any user account, you basically have to gain write access to the said password (or shadow) file and change the hash to something that matches the new desired password.  Typically, this is very easy to do for any kind of Linux or BSD operating system.  For all of you Windows fans, Windows stores the passwords encrypted in SAM files (if I recall correctly), and there are also password reset disks available that you boot from and overwrite the administrator account password with your own password.  Once again, resetting a password is very easy to do to gain access to a machine provided you have physical access.  One tiny exception to this rule on every platform, if the encryption feature is enabled on a user account (provided it exists), the files that were encrypted will never be readable again if you change the password using this method.</p>
<p>Since this is resetting the password of a Mac, I&#8217;m only going to cover the Mac OS.  Mac, like Linux and BSD, has something called single user mode which is basically a recovery environment built into the operating system.  When something doesn&#8217;t work properly, this environment typically boots and gives the local user (on the console) a command prompt that is running as the root user (or superuser).  Typically in single user mode, the local hard disk is read only, but because you are root, you can simply change that to write mode.  Afterwards, its a matter of changing the password.  If you aren&#8217;t a single user mode fan, Mac even puts a reset password link in the utilities menu of their installation disk that does the work manually.</p>
<p>So, using the single user mode shell, here is the procedure to resetting the password of your mac:</p>
<ol>
<li>Shut down the computer</li>
<li>While holding the command (apple) key and S simultaneously, power the computer on</li>
<li>The command line will come up shortly</li>
<li>Type in &#8220;/sbin/mount -wu /&#8221; without the quotes, this enables writing to the root operating system directory</li>
<li>type in &#8220;passwd &lt;user&gt;&#8221;, where &lt;user&gt; is the username whose password needs to be reset</li>
<li>type in &#8220;reboot&#8221;</li>
<li>Login as the user that you reset the password for, using the new password you set.</li>
</ol>
<div>I&#8217;d like to mention that many other tutorials mention a lot of other commands that are required, these aren&#8217;t necessary since they&#8217;re checks on the operating system.  There is also a command called nidump which will give you the password hash to a user, this is useful if you want to spend the time cracking the password.  In my case, that was simply a waste of time.</div>
<div>Hopefully this helps someone else out.</div>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2011/08/resetting-a-password-on-mac-osx-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Revisiting Exchange 2010 SP1 PST Backups (Improved Script)</title>
		<link>http://famousphil.com/blog/2011/07/revisiting-exchange-2010-sp1-pst-backups-improved-script/</link>
		<comments>http://famousphil.com/blog/2011/07/revisiting-exchange-2010-sp1-pst-backups-improved-script/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 01:33:16 +0000</pubDate>
		<dc:creator>Famous Phil</dc:creator>
				<category><![CDATA[Hosting / Server Administration]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[exchange 2010]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[pst]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://famousphil.com/?p=1096</guid>
		<description><![CDATA[Phil revisits his Exchange 2010 SP1 PST backup script and introduces some server optimization tricks and an improved powershell script that emails detailed backup completion statuses. ]]></description>
			<content:encoded><![CDATA[<p>Over the past couple of months, I&#8217;ve found that the script that I posted at <a href="http://famousphil.com/blog/2011/01/a-decent-backup-strategy-for-exchange-2010-sp1/">http://famousphil.com/blog/2011/01/a-decent-backup-strategy-for-exchange-2010-sp1/</a> hasn&#8217;t been working perfectly for my needs.  This relatively short blog is kind of a back track blog to explain the issues and provide some fixes for them.</p>
<p>The original script I posted does not verify that the backups actually completed.  The emails I got were simply gibberish.  I was willing to accept that for a while until during monthly maintenance when I manually verify backups, I was finding that backups didn&#8217;t always complete.  I&#8217;ve tracked this down in the error logs and found that the memory in the server isn&#8217;t enough for the backups at times which has them fail at certain times.  Due to the lack of user base on my server (4 light users), I can&#8217;t justify adding more ram (I currently have 4GB) because I&#8217;d have to upgrade the entire server.  So instead, I did some RAM optimization and re-wrote the backup script to email me the actual backup names that completed successfully.</p>
<p>First for the tips.  I recently learned that Active Directory can be modified from the backend, so using this, I modified the Information Store service (store.exe) in Exchange to only use at most 512MB of ram.  I used the information at <a href="http://terrytlslau.blogspot.com/2011/03/limiting-exchange-server-2007-and-2010.html">http://terrytlslau.blogspot.com/2011/03/limiting-exchange-server-2007-and-2010.html</a> for doing this, I briefly repeat the procedure here in the even that this link is no longer reachable.</p>
<pre class="brush: bash; title: ; notranslate">
1. At Domain Controller, login as a Domain Administrator.
2. Click &quot;Start&quot;, enter &quot;adsiedit.msc&quot; into the search box, hit enter.
3. Right-click &quot;ADSI Edit&quot;, select &quot;Connect to&quot;.
4. Enable the Naming Context view, click ok to connect
4. Under the &quot;Naming Context&quot; menu, select &quot;Configuration&quot;.
6. Expand to &quot;Configuration &gt; Services &gt; Microsoft Exchange &gt;  &gt; Administrative Groups &gt; Exchnage Administrative Group &gt; Servers &gt;  &gt; InformationStore&quot;.
7. Right-click &quot;InformationStore&quot;, select &quot;Properties&quot;.
8. Select &quot;msExchESEParamCacheSizeMax&quot;.
9. This value is set in pages, in Exchange 2010 the size is 32KB/page; Exchange 2007 is 8KB/page.  Simply figure out the number of pages for the amount of ram you want to limit store.exe to using.

For instance, if you want to limit the Database Cache to 4 GB of an Exchange 2010 server, set msExchESEParamCacheSizeMax to 131072 (4 GB = 4.194.304 KB / 32 KB). If you want to limit the Database Cache to 2 GB of an Exchange 2007 server, set msExchESEParamCacheSizeMax to 262144 (2 GB = 2.097.152 KB / 8KB).
10. Ok everything and restart the Information Store service (possibly the server)
</pre>
<p>After limiting the Exchange Information Store service, I simply restarted the Information Store service and that seems to have fixed the gouging memory issue.</p>
<p>As a second optimization procedure, I started tackling the IIS Worker Processes.  Exchange has several application pools that it uses, you can think of an application pool in IIS as a separate instance of Tomcat or Apache for each website.  Application Pools isolate websites to that they can&#8217;t affect each other.  On the downside, application pools also hog a great amount of memory and for the features of Exchange that you may not use often (e.g. powershell, calendar, exchange control panel), it takes some time for these features to load initially (for me, its about 30 seconds).  My solution was to limit Exchange to two application pools.  For anything service related, I used the Exchange Service Pool (e.g. EWS, Powershell, Autodiscover), and anything client site based (e.g. OWA, Calendar, ECP, ActiveSync) in the OWA pool.  I still do not know if any update to Exchange may reverse this or break this, but I do keep it in mind during updates.  The result of doing this is that not only is memory consumption reduced significantly, but Outlook Web Access, Exchange&#8217;s Calendar display (for the public), and Exchange Control Panel all load much faster now since the overhead in IIS is already loaded.  Of course, I wouldn&#8217;t recommend doing this unless you can&#8217;t easily upgrade the amount of memory in your server.</p>
<p>Finally, I will leave you with an improved export script that replaces the script in my previous blog at <a href="http://famousphil.com/blog/2011/01/a-decent-backup-strategy-for-exchange-2010-sp1/">http://famousphil.com/blog/2011/01/a-decent-backup-strategy-for-exchange-2010-sp1/</a>.  This script verifies that all of the users were actually uploaded and emails the complete report to you (instead of some garble).  I&#8217;ve found it to be very helpful in determining if a mailbox was failing to export to a PST without having to login to the file server and check.  As always, use this script at your own risk, I am willing to provide limited support as time permits.</p>
<pre class="brush: powershell; title: ; notranslate">
# Exchange 2010 SP1 Mailbox Export Script
# Originally from Steve Goodman.
# Modified by Philip Matuskiewicz for Matthouse.us / famousphil.com 1/2/11 FIXED *7/2/11*

#define information here
$server = &quot;host.example.com&quot; #server hostname
$users = @(&quot;Joe&quot;, &quot;Mary&quot;, &quot;Phil&quot;) #users to archive
$destination = &quot;localhostpstbackups&quot; #network share to backup to
$emailfrom = &quot;server@yourdomain.com&quot;
$emailto = &quot;you@yourdomain.com&quot;
#define some internal variables
$output = &quot;&quot;
$error = 0
$date = Get-Date

#check for errors
if (!(Get-ExchangeServer $server -ErrorAction SilentlyContinue)){
    $output += &quot;Exchange Server $server not found`n&quot;;
	$error = 1
}
if (!(Get-MailboxDatabase -Server $server -ErrorAction SilentlyContinue)){
    $output += &quot;Exchange Server $server does not have mailbox databases&quot;;
	$error = 1
}

#create a batch job if the above tests succeeded
if ($error -ne 1){

	$jobname = &quot;Export_$($date.Year)-$($date.Month)-$($date.Day)_$($date.Hour)-$($date.Minute)-$($date.Second)&quot;
	$output += &quot;Job title is: '$($jobname)' `n&quot;
	Write-Output &quot;Job title is: '$($jobname)' &quot;

	foreach ($mailbox in $users){
		#remove existing PST file
		if (Get-Item &quot;$($destination)$($mailbox).PST&quot; -ErrorAction SilentlyContinue){
			Remove-Item &quot;$($destination)$($mailbox).PST&quot; -Confirm:$false
			$output += &quot;Existing PST was deleted (Normal): '$($mailbox)' `n&quot;
			Write-Output &quot;Existing PST was deleted (Normal): '$($mailbox)' &quot;
		} # end if

		#request a backup of the mailbox, Exclude the recoverable items / deleted items
		$mailboxjobname = &quot;$($mailbox)-$($jobname)&quot;
		New-MailboxExportRequest -BatchName $jobname -Mailbox $($mailbox) -FilePath &quot;$($destination)$($mailbox).PST&quot; -ExcludeDumpster -Name $mailboxjobname
		$output += &quot;Mailbox Queued: '$($mailbox)' `n&quot;
		Write-Output &quot;Mailbox Queued: '$($mailbox)' &quot;

	} #end foreach
} #end $error -ne 1

#wait for the jobs to complete
$time = 0;
while ((Get-MailboxExportRequest -BatchName $jobname | Where {$_.Status -eq &quot;Queued&quot; -or $_.Status -eq &quot;InProgress&quot;})){
	Write-Output &quot;Waiting on backup, it has been $($time) seconds&quot;
	$output += &quot;Waiting on backup, it has been $($time) seconds `n&quot;
	sleep 600 #10 minutes
	$time = $time + 720;
} #end while

#check for any jobs that didn't complete
$incomplete = Get-MailboxExportRequest -BatchName $jobname | Where {$_.Status -ne &quot;Completed&quot;} | Get-MailboxExportRequestStatistics | Format-List
$complete = Get-MailboxExportRequest -BatchName $jobname | Where {$_.Status -eq &quot;Completed&quot;} | Get-MailboxExportRequestStatistics | Format-List

if($incomplete){
	Write-Output &quot;ERROR: Something didn't complete, output is '$($incomplete)'&quot;
	$output += &quot;ERROR: Something didn't complete, output is '$($incomplete)' `n&quot;
}

if($complete){
	Write-Output &quot;Completed Successfully, output is '$($complete)'&quot;
	$output += &quot;Completed Successfully, output is '$($complete)' `n&quot;
}

# Remove Requests and clean up
Write-Output &quot;Cleaning up requests that were part of the job '$($jobname)'&quot;
$output += &quot;Cleaning up requests that were part of the job '$($jobname)' `n&quot;
Get-MailboxExportRequest -BatchName $jobname | Remove-MailboxExportRequest -Confirm:$false

#verify that all the PST files were created...
foreach ($mailbox in $users){
		#remove existing PST file
		if (Get-Item &quot;$($destination)$($mailbox).PST&quot; -ErrorAction SilentlyContinue){
			$output += &quot;PST FOUND!!!: '$($mailbox)' `n&quot;
			Write-Output &quot;PST FOUND!!!: '$($mailbox)' &quot;
		}else{
			$output += &quot;ERROR: PST NOT FOUND: '$($mailbox)' `n&quot;
			Write-Output &quot;ERROR: PST NOT FOUND: '$($mailbox)' &quot;
		}
}

$SmtpClient = new-object system.net.mail.smtpClient(&quot;double.matthouse.org&quot;)
$msg = new-object Net.Mail.MailMessage
$msg.From = &quot;$($emailfrom)&quot;
$msg.To.Add(&quot;$($emailto)&quot;)
$msg.Subject = &quot;EXCHANGE EMAIL BACKUP DETAILS&quot;
$msg.Body = $output
$SmtpClient.Send($msg)

Write-Output &quot;Script complete!&quot;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://famousphil.com/blog/2011/07/revisiting-exchange-2010-sp1-pst-backups-improved-script/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Served from: famousphil.com @ 2012-02-10 19:25:59 by W3 Total Cache -->
