tag:blogger.com,1999:blog-61846626457359827382024-02-07T03:45:22.267-08:00Rennie Sawade's Technology And Geekology BlogRenniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.comBlogger15125tag:blogger.com,1999:blog-6184662645735982738.post-63455085430364415112019-10-23T09:18:00.001-07:002019-10-23T11:13:30.416-07:00Laugh at the Thought of "Range Anxiety"<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9K2jTr4qcuwJP2wJtM666r7Al3A0amx2E7WADIwtjQuy-wmtX36l_q9SswdbQUALwg8SwIfby2VcRp4P7l_ibObo5YZcK8HpcHSm6tqJo9zDsYGwHoQZ13oclKZY7Z-voBNofMKEafvU/s1600/35900685135_a85cb158c3_w.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="264" data-original-width="400" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9K2jTr4qcuwJP2wJtM666r7Al3A0amx2E7WADIwtjQuy-wmtX36l_q9SswdbQUALwg8SwIfby2VcRp4P7l_ibObo5YZcK8HpcHSm6tqJo9zDsYGwHoQZ13oclKZY7Z-voBNofMKEafvU/s320/35900685135_a85cb158c3_w.jpg" width="320" /></a></div>
<br />
Maybe there is an unexpected trip I have to take, or maybe I forgot to plug in the night before. But in either case, the range indicator is near or maybe even below the required distance I need to travel. But, do I cower with fear? Am I paralyzed by this "Range Anxiety" that I read about online so frequently? My answer is a resounding "No." I laugh at the thought. Ha ha ha ha! Can you hear me laughing?<br />
<div>
Yes, I am a seasoned EV (electric vehicle) driver. I know how to double my available range, or sometimes increase it even greater than a factor of two. I will share my strategy on how I take on this challenge.<br />
<br />
<h3>
<b>The Heater is NOT your friend</b></h3>
</div>
<div>
Turn that heater off. Turn off the blower. If you are having trouble with window fog, run the defrost intermittently when needed and set it to a lower temperature to minimize power draw. If it is not raining, opening the window will get rid of window fog. Keep a blanket or two in the back for passengers' comfort. Many EVs have heated seats and sometimes a heated steering wheel. These are much more efficient, but only use if required.<br />
<br />
<h3>
<b>Headlights</b></h3>
</div>
<div>
If it is broad daylight, turn off the automatic headlights. If it is dawn or early evening, just have your running lights on. Obey local headlight law minimums and be aware of any special safety conditions. Only use the headlights as required.<br />
<br /></div>
<div>
<h3>
<b>Speed VS Distance</b></h3>
</div>
<div>
High speed is also your enemy. I use Waze navigation app to help me with this. Under navigation settings, select "avoid freeways." Usually taking the back roads is a shorter distance, but not always. Driving closer to 35 MPH instead of 60 or 70 MPH greatly increases your range. Slow moving heavy traffic also increases your range. As a side benefit, you may also see some scenic views that you have never seen before.<br />
<br /></div>
<div>
<h3>
<b>Radio/Console</b></h3>
</div>
<div>
Turn off your radio to save a small bit more power. Some EVs have the ability to turn off the console display (the one that shows non-essential items, such as the time and what station you are tuned to). Turn down dash display brightness.<br />
<br /></div>
<div>
<h3>
<b>Elevation</b></h3>
</div>
<div>
Drive with a 3-D mindset. What is the general elevation of your current location? What is the elevation of your destination? If you are driving to a lower elevation, GREAT! You are going to get some "free" distance. If your destination has a higher elevation, keep in mind that it is going to take more energy to climb to that elevation.<br />
<br /></div>
<div>
<h3>
<b>Charging Stations</b></h3>
</div>
<div>
Have accounts with several charging station networks, like ChargePoint, Semaconnect, Blink, etc. I make note of those charging stations where I can catch a cup of coffee and cop a kWh or two. Places like hospitals and park & rides can also have charging stations. Tell your representatives that you want more charging stations available to the public. The Koch brothers have a lot to do with the limited availability of charging stations that we see today. Talk to your electric utility company about EV charging station projects that they may have in the works. Let them know that you want to see them plan or finish those projects. It helps them to know that there is a demand.<br />
<br /></div>
<div>
<h3>
<b>What if I do run out of energy?</b></h3>
</div>
<div>
Don't panic! It's not that big of a deal if you have AAA or other auto club membership. When you request a tow truck, ensure that you request a flat bed tow truck. You want your EV loaded onto the bed of the truck, not towed behind. Towing an EV with its wheels on the road can damage your EV. Have the tow truck deliver your EV to a place where you can charge. The tow truck driver will help you push your car into position to charge.</div>
Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com0tag:blogger.com,1999:blog-6184662645735982738.post-56077162443360361032018-12-12T14:57:00.000-08:002018-12-12T14:57:34.060-08:00Did ya ever reset your router and discover you've lost your static IP configuration info?<h2>
The Problem </h2>
I just did that recently for a business client of mine. I was working on decommissioning a server, an old domain controller running the obsolete Windows Server 2003. The problem was that the DHCP service (which hands out IP addresses to computers on the local network) was running on this server. So, in order to decommission this server, I had to enable DHCP somewhere else on the network. The obvious choice is to turn on the DHCP service on the router.<br />
After a few failed attempts to log into the router (the password for that was missing as well), I was left with having to perform a factory reset on the router. After I was able to log into the router using the default, out-of-the-box credentials for the router, I came to realize that the router needed static IP configuration information for the Internet connection. Then, there is a moment of panic when I discovered that the business client no longer has the paper that with the scribbled IP configuration information on it.<br />
The ISP in this case is Frontier, which provides internet service for this business complex where my client occupies a small space in. There is at least one central router in the building that provides service to subscribers within the complex. Each subscriber has an Ethernet cable running into their office that connects to the business's router. But, without knowing your assigned IP address block and gateway address, the router is pretty much useless for connecting to the internet. So, my first thought was to contact Frontier and get the IP configuration from them.<br />
Well, that turned into hours on the phone getting information that was not useful at all in this scenario. They tried hard to find the information for me, but apparently the installer didn't record the static IP configuration information either. Frontier technicians tried to check their gateway to try to figure out the information to no avail. Well, that was very discouraging.<br />
<h2>
The Solution </h2>
However, all was not lost. I unplugged the Frontier Ethernet wire from the router and plugged it directly into my laptop. The network interface, seeing no DHCP service, sets a default IP configuration, which is not useful for meaningful communication on the network. However, it doesn't matter when using a tool like <a href="https://www.wireshark.org/" target="_blank">Wireshark</a>. I launched Wireshark, selected my network interface where the network cable was plugged in, and clicked the "Start capturing packets" button. That is when I saw the ARP packets coming from the gateway.<br />
The gateway sent an ARP packet to each of the IP addresses that is included in the local network sub-net configuration. Obviously there weren't devices at those IP addresses, but Wireshark still captured the ARP packets that were sent to the IP addresses configured for the client's address block. So, right away, I knew the IP address of the gateway. Also, seeing the number of IP addresses that the gateway sent ARP packets to, I could calculate the sub-net mask. There were 6 addresses plus the address for the gateway, so that requires 3 bits of the 32 bit IP address to be variable and the remaining 29 bits will be the same for all these IP addresses. Therefore 29 bits are the mask, which translates to 255.255.255.248.<br />
So, with that information, I could successfully configure the router. I didn't have Frontier's DNS IP addresses handy, so I just used Google's public DNS addresses (8.8.8.8 and 8.8.4.4). The client was back in business. And of course, I took note of the static IP configuration in a safe place so that this issue wouldn't happen again.Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com1tag:blogger.com,1999:blog-6184662645735982738.post-43682254711623105812017-07-03T16:58:00.001-07:002017-07-03T16:58:14.580-07:00How to block those dang "stay at our resort" spam calls<h3>
The problem</h3>
In the last couple months or so, I have been receiving spam calls from an automated caller that claims that I have stayed at one of their resorts. The recording is made to sound like a live person, but you cannot interrupt the caller no matter how loudly you yell for them to stop. They annoyingly call my cell phone at least once per week. The incoming call comes from a spoofed semi-random number.<br />
At first, it seemed that it would be difficult to block the calls given that it is from a random number. However, their is a pattern to the number. The spoofed number always shares the first 6 digits of my cell number. The last four digits are the ones that are randomized. The purpose of this is to make it look like it is a "local" call.<br />
<h3>
The Solution</h3>
After doing a bit of research, I settled on an app called "<a href="https://play.google.com/store/apps/details?id=org.mistergroup.muzutozvednout" target="_blank">Should I Answer?</a>". This app has a nice wild card feature for blocking ranges of phone numbers. So, the trick is to install the app, and then add a "private rating" for a phone number that is the first 6 digits of your phone number plus a "*". This will block these phony numbers. If there is a number that is in this range that you do want to receive calls from, just add it to your contacts.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik7xgMf6hnE5kdTucCDk0fCQzvQX97AnTey6ckX9YK0h0NUgdT5GTYvCWzBLcyqQpdhtcb7Dsbmoa_Ryl_Je4ZFe1fpJNOM22wne6LdK_yau_heZnM-9shoJjcj5zeBDFDaE8lwbwy_oE/s1600/Screenshot_20170703-110743.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="900" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik7xgMf6hnE5kdTucCDk0fCQzvQX97AnTey6ckX9YK0h0NUgdT5GTYvCWzBLcyqQpdhtcb7Dsbmoa_Ryl_Je4ZFe1fpJNOM22wne6LdK_yau_heZnM-9shoJjcj5zeBDFDaE8lwbwy_oE/s320/Screenshot_20170703-110743.png" width="180" /></a></div>
<br />
This solution is working great for me and I thought it was well worth sharing.Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com0tag:blogger.com,1999:blog-6184662645735982738.post-50830418643750552892017-02-03T08:03:00.001-08:002017-07-05T18:26:28.285-07:00Very Cool Video about Energy<a href="https://youtu.be/dr-3AzFevlE">https://youtu.be/dr-3AzFevlE</a>Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com0tag:blogger.com,1999:blog-6184662645735982738.post-49898937364132409242016-11-09T11:17:00.000-08:002016-11-09T11:17:14.665-08:00Why I like good old fashioned SQLEvery election year I work on the election portal at https://pacific.nwportal.info/. This year, instead of storing the election data that I retrieve from state and county sources in cache as JSON, I stored it in a SQLITE3 database. This added tremendous flexibility in dealing with election data.<br />
<br />
One of the new features of the election portal is the Balance of Power chart that shows which party, given current real-time election results, will be in control of the Washington State Senate and the Washington State House. This is where SQL comes in and helps eliminate the need for a bunch of code. For example, this is the SQL I created to determine how many candidates from each party are ahead in the election for the WA State House:<br />
Select Party, count(Party) Winning, MaxVotes from (select max(TotalVotes) MaxVotes, Party, Candidate, Race from (select rc.Name Race, c.Name Candidate, c.Party, sum(rs.votes) TotalVotes from races rc, candidates c, results rs, feeds f where f.ID = rc.FeedID and f.FeedType = "WAXML" and rs.CandidateID = c.ID and c.RaceID = rc.ID and rc.Name like "%State Rep%" group by c.Name) group by Race) group by Party;<br />
This statement returns a record set that looks like this:<br />
<b><span style="font-family: "Courier New",Courier,monospace;">Party Winning MaxVotes</span></b><br />
<span style="font-family: "Courier New",Courier,monospace;">Democratic 52 21822</span><br />
<span style="font-family: "Courier New",Courier,monospace;">Republican 46 22407 </span><br />
With this, it is easy to determine in code which party will control the house. I only use the "MaxVotes" value to know when the election reporting has started. If the value is 0, I know that the reporting has not begun yet and can set up my programming logic accordingly.Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com0tag:blogger.com,1999:blog-6184662645735982738.post-77830703906075600482016-11-08T11:03:00.000-08:002016-11-08T11:03:56.205-08:00Is your Drupal 8 site crashing on PHP 7?I ran into this problem on a Drupal 8 site running on bleeding edge technology. The site would not come up and it would display an error coming from Symfony "Request.php".<br />
It turns out that PHP 7 has some cool performance features including a feature where PHP will not create the standard global variables (like $_SERVER) if it doesn't see any references to them in the PHP code. The problem was that there were references to the global variables in Symfony, but there were no references within "index.php", so Symfony would crash the drupal site when it tried to access the $_SERVER global variable.<br />
A quick fix was to add this line to index.php: "$server = $_SERVER;" and the site was up and running.Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com1tag:blogger.com,1999:blog-6184662645735982738.post-64200505431862280862016-06-01T14:22:00.000-07:002016-06-01T14:23:54.564-07:00Determining the Age of Bing Maps Imagery<h2>
Context</h2>
At work, we use Bing Maps to provide users a way of visualizing their home and aiding them to select where their roof is for the purposes of calculating roof dimensions for the potential installation of solar panels. We don't use the image itself for this calculation; we use the location. The map just provides a visual aid so that the user can say "this is where the roof of my house is."<br />
Why do we use Bing Maps instead of Google Maps? In a word - price.<br />
<h2>
The Problem</h2>
Bing provides different imagery sets with the main ones being "Aerial" and "Birdseye" where "Birdseye" has the advantage of providing different "oblique-angle" images for each area. The problem is that not all Bing Maps images are created equal. In some areas of the US, the Birdseye image can be much older than the Aerial image, or vice versa. Depending on where a customer's address is, one image set could be much older than the other. This can result in the user looking at a map of trees or a desert with their house nowhere in sight. The user would have to guess which cactus is closest to where they think their roof-line might be.<br />
<h2>
Bing to the Rescue (or not)</h2>
Bing provides an API where you can retrieve the age of the imagery for a given imagery set. You can do this by using the <a href="https://msdn.microsoft.com/en-us/library/ff701716.aspx" target="_blank">API to retrieve the Imagery Metadata</a>. The idea would then be to get the metadata of both the Birdseye and Aerial imagery and use the newest one to determine which map to display to the user. However, there is another problem. Although Bing provides this nice API to retrieve the metadata which includes the imagery age by way of two properties: "vintageStart" and "vintageEnd", these properties are not returned for the Birdseye imagery. So, the imagery metadata is completely useless for trying to programmatically determine which imagery set is newer. Thanks, Microsoft!<br />
<h2>
The Solution</h2>
Well, we didn't find a solution, other than to add a configuration setting to determine which imagery set to use. However, a colleague of mine did <a href="http://xkcd.com/1688/" target="_blank">suggest a solution</a>. The only problem now is to somehow implement this flowchart using C#.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4WvOGezLGCrGQqKU7x_mQDX-uq78C6kbD_U-9KprFxfdxxxd8ySuN4vI_LGE6k0pQYidf_hoBLBWFv-35Kjta_MRSMp3bFg6TAP5TXJ6eCikMcJDXY86T5nS0DO2bY09qAhBWH1qvmbE/s1600/map_age_guide_large.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img alt="Map Age Guide" border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4WvOGezLGCrGQqKU7x_mQDX-uq78C6kbD_U-9KprFxfdxxxd8ySuN4vI_LGE6k0pQYidf_hoBLBWFv-35Kjta_MRSMp3bFg6TAP5TXJ6eCikMcJDXY86T5nS0DO2bY09qAhBWH1qvmbE/s400/map_age_guide_large.png" title="Map Age Guide" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://xkcd.com/1688/" target="_blank">Map Age Guide</a></td></tr>
</tbody></table>
<br />Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com2tag:blogger.com,1999:blog-6184662645735982738.post-44940095457309886792014-09-24T17:32:00.000-07:002014-09-24T23:40:01.634-07:00Inexpensive and Powerful VPSs<h4>
Major Cloud Services </h4>
Whenever I look around online at premium cloud services, such as Amazon's AWS or Microsoft's Azure, I always feel like a kid at a candy store. All the cool stuff like cloud computing, cloud storage, media services, and more are there. I have experimented with both of these major cloud services and found them very fast and very powerful. However, these services do cater to the corporate world, so the prices are more like what you would find in a more expensive department store than in a candy store. So, as an individual, I am like a kid in that department store, turning out his pockets but not finding quite enough change to buy that desired toy.<br />
<h4>
The Dime Store</h4>
When I was a kid, there were stores called "dime stores". They were "mom and pop" stores that were like a general store, or a convenience store that stocked many necessities, but they also had an aisle full of cool stuff for kids. Need a sling shot or engines for your model rocket? You could find it at the dime store. They had a lot of neat things that didn't cost that much. You could bring your change that you've been saving up to the dime store and come home with treasure.<br />
<br />
Now days, the dime store is extinct. Sure, we have "dollar stores" today, but they are not the same. Dollar stores are essentially chain stores full of industrial waste from China.<br />
<h4>
VPSDime</h4>
There are VPS and cloud services out there that do cater more to the "little guy". One of my favorites is <a href="http://www.dreamhost.com/r.cgi?1483346" target="_blank">DreamHost</a>. DreamHost has had VPS offerings for a while now and they are reasonably priced as long as you keep your memory allocation small. It makes it possible to run decent higher performing websites and web applications without breaking the bank.<br />
<br />
However, one disappointment I have with DreamHost VPS is the uplink speed (in relation to the server). My most recent uplink speed test with my DreamHost VPS showed that I was only getting about 30 Mb/s. This can be a limiting factor where scalability is concerned and for certain types of applications, including broadcasting.<br />
<br />
There are some new VPS stores on the block however, and one of those is <a href="https://vpsdime.com/aff.php?aff=359" target="_blank">VPSDime</a> (ah, the dime store is back!). For very low prices, they offer high memory VPS solutions. As long as you choose their Dallas or Seattle data center locations, you can also take advantage of SSD storage and a 10 Gb/s Internet connection. It almost seems to be too good to be true. However, I checked for online reviews and all seemed to be good, so I decided to try them out. So, for $14 per month, I got a VPS in the Seattle data center with a whopping 12GB of memory and 60GB of SSD storage. I also added a free "add on" called "Offloaded MySQL", which means your MySQL databases do not use up your SSD storage.<br />
<br />
<a href="https://vpsdime.com/aff.php?aff=359" target="_blank">VPSDime</a> does offer the CentOS 7 template that I am interested in, so I selected it for my VPS. Within a few minutes, my VPS was ready. One of the things I noticed right away was the SSD speed. Installing updates using YUM was extremely fast. Running "TOP" showed the available memory that I was expecting. So far so good.<br />
<br />
The next test I ran was the speed test. I wanted to see that 10 Gb/s connection in action. I ran the speed test a few times and I was getting uplink speeds between 300 and 400 Mb/s, which is more than 10 times of what I get with my DreamHost VPS. Very impressive, indeed.<br />
<br />
One thing to keep in mind however with VPSDime VPS is that it is un-managed. This means that you are not going to have those "one-click" installs that you have with a managed server, like you would have with DreamHost. You can opt for some managed capabilities with VPSDime if you pay more per month for one of the control panels that they offer. However, I am going to set up everything manually and save some cash.<br />
<br />
Stay tuned for my next blog post when I start setting up this VPSDime server for running some Joomla websites. I can't wait. :)Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com2tag:blogger.com,1999:blog-6184662645735982738.post-46696428590550638682014-01-21T16:18:00.000-08:002014-01-21T16:18:03.237-08:00New "Worst Passwords" and Keeping Your Strong Passwords SafeIn the new list of <a href="http://splashdata.com/press/worstpasswords2013.htm" target="_blank">25 worst passwords</a>, "password" moves from #1 to #2. The new #1 worst password is "123456". It is sound advice to not only use strong passwords (which contain a combination of letters, numbers and symbols), but to use different passwords for different websites.<br />
Another really good reason to have different passwords for different websites is that you will know exactly what got hacked. Once a while back, I had the same password on Skype and GMail. It was a password that wasn't real strong, but I thought it was strong enough because it contained both letters and numbers. I was wrong. It was somehow hacked and posted on some website in another country. Fortunately, I was tipped off by a warning from a fellow software engineer in that other country before any major damage could be done. Having the same password for both, I could not know which site was the source of the hacking. Was my password hacked on Skype first, or was it GMail?<br />
As computers get faster and more sophisticated, it is more important than ever to keep passwords unique and strong. Of course, SplashData recommends their product, <a href="http://www.splashid.com/" target="_blank">SplashID Safe</a>, to keep track of your passwords so that you don't have to rely on your "wet computer" to remember all those strong passwords. However, I also recommend <a href="http://keepass.info/" target="_blank">KeePass</a> which allows you to categorize your passwords. It also works well with having the password file saved in your cloud space and shared among more than one device. For instance, if you add a password on one device while you have your password file open on another device, you can still add a password on that other device and save it. It detects that the file was modified and merges the changes made by both devices so that you don't lose any added passwords.<br />
It also has another nice feature where you can double click to copy your password to the clipboard and paste it into the password field of a website or application without revealing what your password is. It automatically removes the password from your clipboard after a specified number of seconds (default is 12 seconds). This comes in very handy when you are doing online presentations and need to copy/paste a password without revealing it to your audience.<br />
<br />
Stay safe.Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com2tag:blogger.com,1999:blog-6184662645735982738.post-41469926758151709152013-11-10T09:54:00.000-08:002013-11-10T09:54:01.375-08:00Started using pfSense, Will Never Go BackI decided it was time to go over my home office network architecture and make some tweaks. The architecture that I started with is Comcast Business Class service for my ISP, and Windows Server 2008 that serves not only as my domain controller, but also as my NAT router and firewall.<br />
I had an older Windows XP computer that I figured I could still use as a firewall. I did some research on firewall software and chose <a href="http://www.pfsense.org/" target="_blank">pfSense</a>. pfSense is a free, open source firewall/router that is built upon <a href="http://www.freebsd.org/" target="_blank">FreeBSD</a>. I added a 2nd network card to the Windows XP box and installed pfSense, which replaced Windows XP. So now I have a dedicated firewall, with 2GB of memory and an Intel Pentium Dual E2180 @ 2.00 GHz CPU. I added it to my network and proceeded to do some tests.<br />
One other thing that I did was to add <a href="https://developers.google.com/speed/public-dns/docs/using" target="_blank">Google's public DNS</a> servers. The first test I ran was a DNS lookup from within pfSense itself. I used the DNS Lookup under the Diagnostics menu to look up a domain name, and I chose the <a href="http://www.democracynow.org/" target="_blank">Democracy Now!</a> domain name.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja-kfCN2Q_zG7pIvZLBXbj1frJy3IYXDSW_PN2K9c8JvVGsYlxj3ai11WlyxPtCzhMIoBaXaw81WxMWvHg-wZrpaPM0UC7cezY9uvQsn7x8V-npdTPnsrnecdfdjFqOJCVzZyslf1fdSg/s1600/DNS+Timings.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja-kfCN2Q_zG7pIvZLBXbj1frJy3IYXDSW_PN2K9c8JvVGsYlxj3ai11WlyxPtCzhMIoBaXaw81WxMWvHg-wZrpaPM0UC7cezY9uvQsn7x8V-npdTPnsrnecdfdjFqOJCVzZyslf1fdSg/s1600/DNS+Timings.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3oROMosXpYwh5cVWx4oioeXpMdedSsKnD1L6Tq-Yo94F6tDCZAwLbkeRdU8ZqiVKSyimYacdFVry_UOxFxK305okfYKr9ilzkgjyjjM1WdiOMnWLiNVao5sOXKucc3qEUeaByDJYWC34/s1600/DNS+Timings.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
Google's DNS servers are at 8.8.8.8 and 8.8.4.4, while Comcast servers are at 75.75.75.75 and 75.75.76.76. Google's DNS servers perform much better, so that is an improvement already.<br />
Next, I tested the throughput of my 2 routers - the Windows 2008 box vs the pfSense box. To do this, I used <a href="http://www.zdnet.com/broadband-speedtest/" target="_blank">ZDNet's Broadband Speed Test</a> from my workstation computer, which I alternatively configured to use my Windows 2008 box as the gateway and then configured to use my pfSense box as the gateway. With my workstation configured to use the Windows 2008 box, I was getting about 12 to 14 Mbps performance. With the pfSense box, my speed went up to 26 to 29 Mbps performance. Wow, what a performance improvement! I am really kicking myself now just thinking of all the bandwidth I was loosing in my network infrastructure, which translates to lost dollars.<br />
With this new configuration, I also get added security. With pfSense, I installed a package called <a href="http://www.snort.org/" target="_blank">Snort</a> that adds intrusion detection and prevention. Snort provides alerts for the incoming attacks that it detects. It always amazes me the number of continual attacks there are out in the Internet wilderness.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjea5jHpFDR-qpTRo6RiQ4gdr4gl33V2O_A8Oo-dZr42hkSxKYa6ryHacpoPvrF7EE1rfWMleegrO_ohdtCujOY2dTI3J2s41k0KnV5IH3bOKCczfrQ98E7oRe2eJWIPkaUbCR-mwfyWT8/s1600/pfSense+snort.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="620" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjea5jHpFDR-qpTRo6RiQ4gdr4gl33V2O_A8Oo-dZr42hkSxKYa6ryHacpoPvrF7EE1rfWMleegrO_ohdtCujOY2dTI3J2s41k0KnV5IH3bOKCczfrQ98E7oRe2eJWIPkaUbCR-mwfyWT8/s640/pfSense+snort.jpg" width="640" /> </a></div>
<div class="separator" style="clear: both; text-align: left;">
The moral of this story is, pay attention to your network infrastructure. You may be able to make large improvements in both performance and security. If you have an old computer that works, don't throw it away. Make it into a high performance router. </div>
<br />Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com0tag:blogger.com,1999:blog-6184662645735982738.post-60614076172922242482013-10-26T12:38:00.003-07:002013-10-26T12:38:56.595-07:00Gotta love Microsoft - still dishing out the classics<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP0D8tb9yiG3fJe_BcLjSPUxuN2kqRfe8TWVZf3ymwp_x85gm_DDcHbZU8k67RNOBNSOhI4VAW9KWyWQ6PHXlnzuqLECq4Oj9-c1PaLfaQvOUctxBgeHeAv9Yqqjap-l08lLTV-JYyu4o/s1600/divide+by+zero.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="149" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP0D8tb9yiG3fJe_BcLjSPUxuN2kqRfe8TWVZf3ymwp_x85gm_DDcHbZU8k67RNOBNSOhI4VAW9KWyWQ6PHXlnzuqLECq4Oj9-c1PaLfaQvOUctxBgeHeAv9Yqqjap-l08lLTV-JYyu4o/s320/divide+by+zero.png" width="320" /></a></div>
Haven't seen the old "Divide by Zero" in a while. Thanks Bing!Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com1tag:blogger.com,1999:blog-6184662645735982738.post-51682256691052000442013-07-26T11:49:00.000-07:002013-07-28T22:46:31.313-07:00WTF GoDaddy and Optimizing My Sites on Another ISP - DreamHostOne of the websites I have been working on was hosted at GoDaddy. I had a hosting plan there for years. several weeks ago, I had requested SSH shell access to my account. For some reason, GoDaddy had to move my hosted web account to another server in order to give me SSH access.<br />
Well, the move itself was not smooth. Turns out that one of my MySQL databases was running on an older MySQL server that was not supported on the newer host. So the migration ended up stuck in limbo. I found out that it was the database issue after I contacted GoDaddy support regarding the migration taking such a long time. They told me to upgrade the database. The only problem was, with the migration stuck in limbo, I couldn't access the databases from their control panel. I contacted their support again and explained the situation and told them just to delete the database because I didn't need that one.<br />
Well, that was too complicated for their "level 1" support, so they kicked it up to "level 2" support, where they upgraded the database, completed the migration, and fixed up all my PHP configuration files to point to the shiny new databases on the new database. All seemed to be good.<br />
The first time I tried to visit a site on the new server, all I got was one of those server error messages showing up in my browser where my site was supposed to be. After retrying the various sites that I have hosted their, the websites finally started appearing normally. I figured it must have been some transient temporary issue that occurred after the move to the new server.<br />
However, later I noticed that when I was in meetings with the groups that I created the websites for, that when I tried to pull up a website during the meeting, I was regularly disappointed by how slow the sites would load. They were loading very slowly, which made it difficult to discuss them during the meetings.<br />
Later, I used the free online analyzing tool, <a href="http://www.webpagetest.org/" target="_blank">WebPageTest</a>. It will give you real-world timings of all the aspects of loading a web page. And Wow. I couldn't believe how poor the performance was on the Godaddy server. It was taking more than 10 seconds just to get the first byte of response from the initial website request! Also, it was taking sometimes over a minute for the site to completely finish loading! There must have been something terribly wrong with the new server. So I contacted Godaddy support again.<br />
I had explained to them in the new ticket I submitted in detail what the issue was, what timings I was getting, and that I would periodically get server error messages. The response was that I should "upgrade" from a shared plan to a "hosted" plan for better performance, a "level 1" response I presume, especially given that I was already on a "hosted" plan.<br />
Then it came to me - I need to move my sites to another ISP. I have sites on BlueHost which are doing well. I also have a site on an Amazon EC2 micro server that screams. However, I noticed that DreamHost has a pretty good deal on virtual private servers (VPS) that have unlimited bandwidth and storage. I also like DreamHost because they are carbon neutral and employee owned. When you sign up, you also get a week for free on a VPS. Their VPS is also configurable on a sliding scale, literally. There is a slider control where you can dynamically change the amount of memory your server has, which also changes the amount that you are billed. So, you only pay for what you use.<br />
The DreamHost VPS is not as fast as an Amazon EC2 instance, but you get easy management through DreamHost's very own custom control panel. This makes it easy to set up multiple websites on your VPS, whereas on Amazon EC2, you have to do all the management yourself through SSH, or whatever applications you install.<br />
So, I chose to go with DreamHost, because the performance is good, and I can perform optimizations and use a cloud service to get even greater performance. I began by copying my site files from my GoDaddy server to the DreamHost server. I have many media files on one site, which would take a long time to download and then re-upload again. To speed the process up, I just connected via SSH to my new DreamHost server and used SCP to directly copy the files from my GoDaddy server. This worked like a charm. Then, I backed up my databases on GoDaddy and imported them into new databases at DreamHost. I got the sites all up and running and already they were performing much much better than they were with GoDaddy.<br />
Now for the optimizing. I ran <a href="http://www.webpagetest.org/" target="_blank">WebPageTest</a> on one of my sites and this is what I got:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1nbYl4B9ZTq9sADV3cO1008iYqSF737umFnL9KnfEIJP3_lEFJ1P8eqDWUAt1qnMy8Vn7RwEv3mHABtoPxq6cykYcmUeQrhFWHgLxa0xst8npuoCVPj0ToctWP13kL0LvoKUOL1ckP5c/s1600/Before+any+optimization.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1nbYl4B9ZTq9sADV3cO1008iYqSF737umFnL9KnfEIJP3_lEFJ1P8eqDWUAt1qnMy8Vn7RwEv3mHABtoPxq6cykYcmUeQrhFWHgLxa0xst8npuoCVPj0ToctWP13kL0LvoKUOL1ckP5c/s320/Before+any+optimization.png" width="320" /></a></div>
As you can see, it got some F's in some of the ratings. It also has an "X" for CDN which means that I am not using any cloud services for distributing static content. The first thing I did was to optimize some of the JPG images that I have on the site. The second step was to add some code to the ".htaccess" file on the server that is in the root website folder. I added these lines:<br />
<br />
<blockquote class="tr_bq">
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: Verdana,sans-serif;"><IfModule mod_expires.c><br /> # Activate mod_expires for this directory<br /> ExpiresActive on<br /><br /> # locally cache common image types for 7 days<br /> ExpiresByType image/jpg "access plus 7 days"<br /> ExpiresByType image/jpeg "access plus 7 days"<br /> ExpiresByType image/gif "access plus 7 days"<br /> ExpiresByType image/png "access plus 7 days"<br /> ExpiresByType image/x-icon "access plus 7 days"<br /><br /> # cache CSS, js, and other files<br /> ExpiresByType text/css "access plus 7 days"<br /> ExpiresByType application/x-javascript "access plus 7 days"<br /> ExpiresByType application/javascript "access plus 7 days"<br /> ExpiresByType text/javascript "access plus 7 days"<br /> ExpiresByType application/x-shockwave-flash "access plus 7 days"<br /></IfModule><br /><br />#Gzip<br /><IfModule mod_deflate.c><br /> AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css<br /> AddOutputFilterByType DEFLATE application/x-javascript application/javascript<br /> AddOutputFilterByType DEFLATE text/javascript image/x-icon<br /></IfModule><br />#End Gzip</span></span></span></blockquote>
<br />
The first set of lines enables caching of much of the static content on the client browsers computer. This speeds up browsing in that the browser only has to download the static content (images, etc.) once, instead of with each page load. It is important to note that if you are working on the site and are editing images, javascript files or other files that are cached, you will want to turn off caching in order to make it easier to test your changes.<br />
The second group of lines (under Gzip) tells the server to compress certain file types, which decreases the time that it takes for the browser to download these files. All of the standard, compressible file types are listed there. I also added the "image/x-icon" types. I wanted to provide a site icon file that supports higher resolution images. These icon files with higher resolutions can become large fast, because they are essentially raw bitmap files. The good news is that they are highly compressible, so by adding it to the "Gzip" list, you don't have to worry so much about the size.<br />
So, now for another test:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-L_B8VZHqqFrbg4Pksp8iql5-FcokDGR0ukIgvntmWhyphenhyphenPcismjOsdKWOBhjE2zPdQSc5xpV_QwsCAGgzwPXsFYUc3tZFPlG-jZQSYJSXLpztLdkWCch6gSR9hZ0aV4mI6fKdmZMdPjV4/s1600/After+htaccess+change.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-L_B8VZHqqFrbg4Pksp8iql5-FcokDGR0ukIgvntmWhyphenhyphenPcismjOsdKWOBhjE2zPdQSc5xpV_QwsCAGgzwPXsFYUc3tZFPlG-jZQSYJSXLpztLdkWCch6gSR9hZ0aV4mI6fKdmZMdPjV4/s320/After+htaccess+change.png" width="320" /></a></div>
The scores are much better here. 5 seconds for the first load is still a bit long. I might be able to shave that a bit more by installing a Joomla extension which combines the javascript and stylesheet files into one javascript file and one css file so that the browser only has to perform one download request for each type. However, I decided for now to move straight to enabling a cloud service. DreamHost supports easy integration with a free (yes, that's right - free) cloud service called CloudFlare. CloudFlare is ridiculously easy to use, especially with DreamHost. To enable it, just "edit" your "domain" for your website and turn it on:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN2Mb3iXx9GsGMz-B3DlAnQ-upiCcVfX6uwYksGcF6qYd5L3-AeaR-A-vgErhHEmzDJpYpkoou_bPkfyq9XFcm0aXAV5I6tZt2e7h5bFrWfQk4xj-Yul1Z9SXyg0SGn34IK_90YUiRrRA/s1600/Enabling+CloudFare.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN2Mb3iXx9GsGMz-B3DlAnQ-upiCcVfX6uwYksGcF6qYd5L3-AeaR-A-vgErhHEmzDJpYpkoou_bPkfyq9XFcm0aXAV5I6tZt2e7h5bFrWfQk4xj-Yul1Z9SXyg0SGn34IK_90YUiRrRA/s320/Enabling+CloudFare.png" width="320" /></a></div>
That is all there is too it. You have to wait several hours for it to fully take effect. I waited until the next day to run another test:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQh2-fRyvwWUONl9Bt01Jj_UVs31RaYKPMXXOT-nzMq-Vx0j4Hmqmy-rvPGEU72bZgeAa14Cp5_RoSeOVyfZ50weozzvgnMRNYlJlfIb2Dj2ZB0keINwjVpYo80o5sYt9JqpwFQoTUsjM/s1600/With+CloudFare+On.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="243" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQh2-fRyvwWUONl9Bt01Jj_UVs31RaYKPMXXOT-nzMq-Vx0j4Hmqmy-rvPGEU72bZgeAa14Cp5_RoSeOVyfZ50weozzvgnMRNYlJlfIb2Dj2ZB0keINwjVpYo80o5sYt9JqpwFQoTUsjM/s320/With+CloudFare+On.png" width="320" /></a></div>
Look at that! First view is now down to 2.4 seconds. Note that the "CDN" score now has a check mark in it. I am quite happy now with the performance improvements I was able to obtain.<br />
So, in conclusion, you can dump GoDaddy, move to a smaller ISP, such as DreamHost, and get near enterprise performance for your website for low cost. You don't have to dump more money into GoDaddy in an attempt to get reasonable service.<br />
<br />Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com1tag:blogger.com,1999:blog-6184662645735982738.post-14976511429454947262013-06-29T11:01:00.000-07:002013-06-29T11:01:04.531-07:00Kids and Reproducing Errors<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]--><br />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="371">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:8.0pt;
mso-para-margin-left:0in;
line-height:107%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
</style>
<![endif]-->
<br />
<div class="MsoNormal">
After spending over a day setting up more virtual servers in
my virtual domain, installing SQL Server, installing Microsoft System Center
Operations Manager and installing ACS Services, all on my laptop, I exclaimed
out loud, that I had successfully reproduced the customer’s issue.</div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
My older son heard and was confused by this. He asked me why
I would ever want to “re-create a problem”. I then explained to him that if you
can set up your own system that has the same problem as your customer’s system,
you are %90 closer to fixing the customer’s problem. Not only does this give
you tremendous insight as to what is causing the problem so that you can track
it down and fix it, it gives you a test bed so that you can verify that your
fix works.</div>
<div class="MsoNormal">
Of course, that opened the door to my wife’s story about way
back when she did a short stint as a support engineer and fixed a bug on the IBM
System/36 Operating System where she added an “else” to an “if” statement. It
is about the hundredth time that I heard it, but the kids didn’t remember
hearing it before and got a kick out of it. Gotta love her. ;)</div>
<div class="MsoNormal">
<br /></div>
Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com0tag:blogger.com,1999:blog-6184662645735982738.post-60775460183533110602013-06-10T10:54:00.000-07:002013-06-10T10:54:09.810-07:00Hyper-V on Windows 8I recently got a fairly high end laptop so that I could take my software development work with me wherever I go. My goal is to be able to get work done and score wife/family points by going to those various family functions too. "Go to your family reunion? Sure, just let me pack my laptop here". "Take the kids to their curling match up in Canada? Sure can Dear, I've got everything I need right here in my laptop bag". It has a quad core I7 with 16GB ram and a 1TB hard drive, which I replaced with a 1TB Seagate SSD/HD hybrid drive. It also came with Windows 8 Home, which I upgraded to Windows 8 Pro.<br />
I had started to install Oracle's Virtual Box when I couldn't get Virtual Box to recognize the hardware virtualization that I had enabled in the BIOS configuration. That was when I discovered Windows 8 had Hyper-V. The thing about Hyper-V, is that it takes over the hardware virtualization feature and leaves other VM software (such as Virtual Box) out in the cold. I could have disabled Hyper-V and been on my way, but I chose to check out the new Windows 8 Hyper-V technology. I have had nothing but fun with it. It perfect for some of the work that I do. I really love the "Dynamic Memory" feature that allows you to efficiently use memory amongst your various VMs. Here is a snapshot of my VMs that I currently have on my laptop.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixSnWLzo9YVGua7h94-s3DeHfbZwcNSeXgd4mGCgzONPtnRUF6NmhQBMRJ-KZ650bY9mVuszd_Alx9PfssqgE1Pxy0z-cUJV-qGKfOEvLuAFgtu70ib77SbGxdRg-aUMPHtasvV-MOBEg/s1600/VM+snapshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixSnWLzo9YVGua7h94-s3DeHfbZwcNSeXgd4mGCgzONPtnRUF6NmhQBMRJ-KZ650bY9mVuszd_Alx9PfssqgE1Pxy0z-cUJV-qGKfOEvLuAFgtu70ib77SbGxdRg-aUMPHtasvV-MOBEg/s320/VM+snapshot.png" width="320" /></a></div>
One of my jobs is to maintain and develop software that is built vertically on Microsoft's System Center Operations Manager. This software has some very large customers with large networks that they operate this software on. With Hyper-V, I am able to set up a complete virtual network, albeit on a much smaller scale, all on my laptop. As you can see, I can have several Windows Servers running with various services installed and still have plenty of memory left over for my host system, thanks to Dynamic Memory. You can see the server running SQL Server has allocated more memory because of the way SQL Server pre-allocates memory for fast queries.<br />
I also like the Hyper-V concept of Virtual Switches. This really helps in setting up a virtual domain. As you can see, I have one server working as a Domain Controller. The other servers, except for the NAT server (and of course Kubuntu) are part of the domain. I have two virtual switches set up, one is external and the other is private.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMOwZJtTGvPkNBuW21NBLpLuT32xs6YspYr3ftuv4hOPHIljR49Q56j0R5IOFptXKicnAFQd08gU7MZGaT5RlN0Gchofwl8JdeFVvLXu1Vz3ALkjudSi7uMPU2iuOLNcPknNHKLkEt6E/s1600/Virtual+Switch+snapshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUMOwZJtTGvPkNBuW21NBLpLuT32xs6YspYr3ftuv4hOPHIljR49Q56j0R5IOFptXKicnAFQd08gU7MZGaT5RlN0Gchofwl8JdeFVvLXu1Vz3ALkjudSi7uMPU2iuOLNcPknNHKLkEt6E/s320/Virtual+Switch+snapshot.png" width="320" /></a></div>
The NAT server connects to both switches and serves as the default gateway for the other Windows VMs. The Domain Controller also serves as DHCP and DNS for the private network on the private switch. And yes, I do know that the name of my private switch has "SCOM 2007" in it. I was going to have two separate switches from my SCOM 2007 and SCOM 2012 setups, but later I discovered that I really didn't need to. So, I'm just living with the name I currently have.<br />
This all seems to work great. There is just a minor issue a run into when, say I need to run out the door, and I close my laptop (where it sleeps or hibernates) and change locations. The servers still seem to run OK, however they seem to sometimes lose connectivity. I find that I may need to run "ipconfig /renew" on the NAT server. One time I had to do this on my other servers as well. One particularly peculiar thing was that a server had the gateway correct, but it's default DNS was pointed at the NAT server, even though the DHCP on the Domain Controller specifies the Domain Controller for the DNS. I think this has to do with a virtual network timing issue when my laptop wakes up again after sleeping. It's just a minor annoyance however.<br />
Why Kubuntu you might ask? Well, I have that for Ruby on Rails development. On a previous contract I was on at Amazon, I was developing Ruby on Rails in the Red Hat Linux environment. For my personal Ruby development, I decided to set up an environment on a Kubuntu VM in Hyper-V. I'll probably write more on that later.Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com0tag:blogger.com,1999:blog-6184662645735982738.post-33376244762122386142013-06-08T22:22:00.000-07:002013-06-08T22:22:01.400-07:00So, just what is a "Capacitator"<span class="userContent">One of the many "features" of living in a rural area is the water well, complete with water pump. Our water well happens to be shared among four houses. A couple days ago, the pump in our water well quit working. We eventually had to replace the pump, however, before
that, a component in the starter circuit "fried". One of my neighbors
replaced the component. However, it was another neighbo<span class="text_exposed_show">r,
an elderly gentleman, who told me which component was replaced. He said it was the "capacitator". Now, I am familiar with
capacitors, but this is the first I have heard of a "capacitator". I
tried to find one on the internet, but the search was fruitless. So, I had this mental picture of what a "capacitator" might look like and proceeded to
create this image in a much more shareable format.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicUQJYuKbGQ9pm1eDta-yqnUOuXAs_-XLpkDp3OlxyndawGk7BA1KXvMTk9Pv509e4WBb2gEx_b9UUfhodXn1ym6ZLaKMssvbfesALCa10YnuCsN2cMvClBie9e1R9XnurHHhlgfdIhuE/s1600/Capacitator.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicUQJYuKbGQ9pm1eDta-yqnUOuXAs_-XLpkDp3OlxyndawGk7BA1KXvMTk9Pv509e4WBb2gEx_b9UUfhodXn1ym6ZLaKMssvbfesALCa10YnuCsN2cMvClBie9e1R9XnurHHhlgfdIhuE/s320/Capacitator.jpg" width="320" /></a></div>
<span class="userContent"><span class="text_exposed_show">As you can see, I included capacitors on the right, and added what I suspect is a "capacitator" on the left. Now, I wonder what the electrical symbol for such a device looks like.</span></span>Renniehttp://www.blogger.com/profile/10362751498057848524noreply@blogger.com0