<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-20307088</id><updated>2012-01-07T10:28:05.376-05:00</updated><category term='show'/><category term='logoff'/><category term='yahoo'/><category term='url'/><category term='navbar'/><category term='javascript'/><category term='cellphone'/><category term='admin'/><category term='mshot'/><category term='Explorer'/><category term='Amazon'/><category term='feisty'/><category term='privacy'/><category term='template'/><category term='date'/><category term='firefox'/><category term='reminder'/><category term='xampp'/><category term='sharepoint'/><category term='spreadsheet'/><category term='excel'/><category term='tremulous'/><category term='css'/><category term='quicklaunch'/><category term='web 2.0'/><category term='bookmarklet'/><category term='browser'/><category term='spam'/><category term='runas'/><category term='domain'/><category term='link'/><category term='windows'/><category term='email'/><category term='hive'/><category term='gate'/><category term='jaunty'/><category term='jackal'/><category term='atan atan2'/><category term='pipes'/><category term='xp'/><category term='safari'/><category term='linux'/><category term='apache'/><category term='max_allowed_packet'/><category term='LAMP'/><category term='navigation'/><category term='ut2004'/><category term='mysql'/><category term='IE6'/><category term='logic'/><category term='php'/><category term='patterns'/><category term='security'/><category term='foxit'/><category term='phpmyadmin'/><category term='toolbar'/><category term='bookmarks'/><category term='wordpress'/><category term='pdf'/><category term='filter'/><category term='mvc'/><category term='VBA'/><category term='outlook'/><category term='fawn'/><category term='blogger'/><category term='custom'/><category term='open office'/><category term='desktop'/><category term='minify'/><category term='ipod'/><category term='flickr'/><category term='html'/><category term='bookmark'/><category term='delicious'/><category term='icon'/><category term='history'/><category term='search'/><category term='server'/><category term='unreal'/><category term='IE'/><category term='ubuntu'/><category term='password'/><category term='gmail'/><category term='boolean'/><category term='label'/><title type='text'>Minor Point</title><subtitle type='html'>Technical notes and solutions to common problems</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-20307088.post-4333714674148654669</id><published>2012-01-02T21:29:00.000-05:00</published><updated>2012-01-02T21:29:24.140-05:00</updated><title type='text'>Deck of Cards Exercises</title><content type='html'>The &lt;i&gt;Deck of Cards&lt;/i&gt; exercises.&lt;br /&gt;&lt;br /&gt;For each suit, perform a certain exercise:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Clubs    = burpees&lt;/li&gt;&lt;li&gt;Hearts   = pushups&lt;/li&gt;&lt;li&gt;Spades   = jumping jacks&lt;/li&gt;&lt;li&gt;Diamonds = sit ups&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Use the value of the card as the number of repetitions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;2-10  = number of reps on the card&lt;/li&gt;&lt;li&gt;Jack  = 11 reps&lt;/li&gt;&lt;li&gt;Queen = 12 reps&lt;/li&gt;&lt;li&gt;King  = 13 reps&lt;/li&gt;&lt;li&gt;Ace   = 15 reps&lt;/li&gt;&lt;li&gt;Joker = 30/60/90 second rest -OR- 10/15/20 reps of all exercises&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-4333714674148654669?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/4333714674148654669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=4333714674148654669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4333714674148654669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4333714674148654669'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2012/01/deck-of-cards-exercises.html' title='Deck of Cards Exercises'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-5953953377540276521</id><published>2011-06-18T16:39:00.002-04:00</published><updated>2011-06-18T16:46:54.925-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atan atan2'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Implementing ATAN2</title><content type='html'>An implementation of ATAN2 in PHP.  PHP implements ATAN2 but I needed to figure out the algorithm for a microcontroller that didn't, so I prototyped it in PHP.&lt;br /&gt;&lt;br /&gt;Here is the code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;class Math {&lt;br /&gt;  public static function atan2( $dy, $dx ) {&lt;br /&gt;    if( $dy &gt; 0 ) {&lt;br /&gt;      if( $dx &gt; 0  ) $tcl = atan($dy/$dx);&lt;br /&gt;      if( $dx &lt; 0  ) $tcl = M_PI - atan(-$dy/$dx);&lt;br /&gt;      if( $dx == 0 ) $tcl = M_PI/2;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if( $dy &lt; 0 ) {&lt;br /&gt;      if( $dx &gt; 0  ) $tcl = -atan(-$dy/$dx);&lt;br /&gt;      if( $dx &lt; 0  ) $tcl = atan($dy/$dx) - M_PI;&lt;br /&gt;      if( $dx == 0 ) $tcl = -M_PI/2;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if( $dy == 0 ) {&lt;br /&gt;      if( $dx &gt; 0  ) $tcl = 0.0;&lt;br /&gt;      if( $dx &lt; 0  ) $tcl = M_PI;&lt;br /&gt;      if( $dx == 0 ) $tcl = 0.0; // the 2 points are the same, default to zero&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return $tcl;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;And here is an example of how to use it:&lt;pre&gt;$heading = 270.0;  // degrees&lt;br /&gt;$Ax =  0.00;&lt;br /&gt;$Ay =  0.00;&lt;br /&gt;$Bx = -7.89;&lt;br /&gt;$By = -0.86;&lt;br /&gt;&lt;br /&gt;// get target distance and bearing in degrees&lt;br /&gt;$dx = $Bx-$Ax;&lt;br /&gt;$dy = $By-$Ay;&lt;br /&gt;$dist = sqrt( pow($dx,2) + pow($dy,2) );&lt;br /&gt;$dir = Math::atan2( $dy, $dx ) * 180 / M_PI;&lt;br /&gt;printf( "Target spotted at %0.3f degrees, distance %0.3f !!\n", $dir, $dist );&lt;br /&gt;&lt;br /&gt;// get new heading&lt;br /&gt;$diff = $heading - $dir;&lt;br /&gt;if( $diff &lt; -180 ) $diff += 360;&lt;br /&gt;if( $diff &gt; 180 ) $diff -= 360;&lt;br /&gt;printf( "Turn %s %0.3f degrees\n", ($diff &lt; 0 ? 'left' : 'right'), $diff );&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-5953953377540276521?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/5953953377540276521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=5953953377540276521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5953953377540276521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5953953377540276521'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2011/06/implementing-atan2.html' title='Implementing ATAN2'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-7159429399842692690</id><published>2011-06-18T15:00:00.011-04:00</published><updated>2011-06-18T18:44:20.959-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='boolean'/><category scheme='http://www.blogger.com/atom/ns#' term='spreadsheet'/><category scheme='http://www.blogger.com/atom/ns#' term='gate'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><title type='text'>Implementing Logic Gates in a Spreadsheet</title><content type='html'>Here are some of the basic logic gates, implemented as spreadsheet formulas.&lt;br /&gt;&lt;br /&gt;&lt;table border='1'&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Gate&lt;/th&gt;&lt;th&gt;Spreadsheet Formula&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;AND&lt;/td&gt;&lt;td&gt;AND(A,B)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OR&lt;/td&gt;&lt;td&gt;OR(A,B)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;NOT&lt;/td&gt;&lt;td&gt;NOT(B)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;NAND&lt;/td&gt;&lt;td&gt;NOT(AND(A,B))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;NOR&lt;/td&gt;&lt;td&gt;NOT(OR(A,B))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;XOR&lt;/td&gt;&lt;td&gt;OR(AND(A;NOT(B));AND(NOT(A);B))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;XNOR&lt;/td&gt;&lt;td&gt;NOT(OR(NOT(OR(A,NOT(OR(A,B)))),NOT(OR(B,NOT(OR(A,B))))))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;It is possible to implement any gate using only NOT and OR (NOR), or with NOT and AND (NAND) gates. For example, here is an AND gate implemented using only NOT and OR gates:&lt;br /&gt;&lt;br /&gt;&lt;table border='1'&gt;&lt;tr&gt;&lt;td&gt;AND using only NOR gates&lt;/td&gt;&lt;td&gt;NOT(OR(NOT(OR(A,A));NOT(OR(B,B)))&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;With AND, OR and NOT, we can implement a half adder, like this:&lt;br /&gt;&lt;br /&gt;&lt;table border='1'&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Column A&lt;/th&gt;&lt;th&gt;Column B&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;A&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;B&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Carry (AND)&lt;/td&gt;&lt;td&gt;=AND(B1;B2)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sum (XOR)&lt;/td&gt;&lt;td&gt;=OR(AND(B1;NOT(B2));AND(NOT(B1);B2))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;By string together two half adders and OR-ing the carry bit, we can create a full adder:&lt;br /&gt;&lt;br /&gt;&lt;table border='1'&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Bit&lt;/th&gt;&lt;th&gt;Spreadsheet Formula&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;A&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;B&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cin&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cout&lt;/td&gt;&lt;td&gt;=AND(B2;B3)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sum&lt;/td&gt;&lt;td&gt;=OR(AND(B2;NOT(B3));AND(NOT(B2);B3))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cout&lt;/td&gt;&lt;td&gt;=AND(B6;B4)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sum&lt;/td&gt;&lt;td&gt;=OR(AND(B4;NOT(B6));AND(NOT(B4);B6))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cout&lt;/td&gt;&lt;td&gt;=OR(B7;B5)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sum&lt;/td&gt;&lt;td&gt;=B8&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;Implementing a 4-bit adder is just a matter of simply replicating the full adder logic four times:&lt;br /&gt;&lt;br /&gt;&lt;table border='1'&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;8&lt;/th&gt;&lt;th&gt;4&lt;/th&gt;&lt;th&gt;2&lt;/th&gt;&lt;th&gt;1&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Input A&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Input B&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;A&lt;/td&gt;&lt;td&gt;=B2&lt;/td&gt;&lt;td&gt;=C2&lt;/td&gt;&lt;td&gt;=D2&lt;/td&gt;&lt;td&gt;=E2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;B&lt;/td&gt;&lt;td&gt;=B3&lt;/td&gt;&lt;td&gt;=C3&lt;/td&gt;&lt;td&gt;=D3&lt;/td&gt;&lt;td&gt;=E3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cin&lt;/td&gt;&lt;td&gt;=C12&lt;/td&gt;&lt;td&gt;=D12&lt;/td&gt;&lt;td&gt;=E12&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cout&lt;/td&gt;&lt;td&gt;=AND(B5;B6)&lt;/td&gt;&lt;td&gt;=AND(C5;C6)&lt;/td&gt;&lt;td&gt;=AND(D5;D6)&lt;/td&gt;&lt;td&gt;=AND(E5;E6)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sum&lt;/td&gt;&lt;td&gt;=OR(AND(B5;NOT(B6));AND(NOT(B5);B6))&lt;/td&gt;&lt;td&gt;=OR(AND(C5;NOT(C6));AND(NOT(C5);C6))&lt;/td&gt;&lt;td&gt;=OR(AND(D5;NOT(D6));AND(NOT(D5);D6))&lt;/td&gt;&lt;td&gt;=OR(AND(E5;NOT(E6));AND(NOT(E5);E6))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cout&lt;/td&gt;&lt;td&gt;=AND(B7;B9)&lt;/td&gt;&lt;td&gt;=AND(C7;C9)&lt;/td&gt;&lt;td&gt;=AND(D7;D9)&lt;/td&gt;&lt;td&gt;=AND(E7;E9)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sum&lt;/td&gt;&lt;td&gt;=OR(AND(B7;NOT(B9));AND(NOT(B7);B9))&lt;/td&gt;&lt;td&gt;=OR(AND(C7;NOT(C9));AND(NOT(C7);C9))&lt;/td&gt;&lt;td&gt;=OR(AND(D7;NOT(D9));AND(NOT(D7);D9))&lt;/td&gt;&lt;td&gt;=OR(AND(E7;NOT(E9));AND(NOT(E7);E9))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cout&lt;/td&gt;&lt;td&gt;=OR(B8;B10)&lt;/td&gt;&lt;td&gt;=OR(C8;C10)&lt;/td&gt;&lt;td&gt;=OR(D8;D10)&lt;/td&gt;&lt;td&gt;=OR(E8;E10)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sum&lt;/td&gt;&lt;td&gt;=B11&lt;/td&gt;&lt;td&gt;=C11&lt;/td&gt;&lt;td&gt;=D11&lt;/td&gt;&lt;td&gt;=E11&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-7159429399842692690?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/7159429399842692690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=7159429399842692690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/7159429399842692690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/7159429399842692690'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2011/06/implementing-logic-gates-in-spreadsheet.html' title='Implementing Logic Gates in a Spreadsheet'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-3002412134577615028</id><published>2011-06-11T13:25:00.032-04:00</published><updated>2011-06-11T21:18:38.056-04:00</updated><title type='text'>Radians made easy</title><content type='html'>If you are in danger of losing your Geek cred because you don't understand radians, fear not! Radians aren't bad, &lt;a href="http://www.imdb.com/title/tt0096438/quotes"&gt;they're just drawn that way&lt;/a&gt;.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;What is a radian?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-rDTJl6X6ojE/TfOc8gdYI4I/AAAAAAAAAEc/OrTXx69Lbg0/s1600/Radian.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="175" src="http://3.bp.blogspot.com/-rDTJl6X6ojE/TfOc8gdYI4I/AAAAAAAAAEc/OrTXx69Lbg0/s200/Radian.jpg" style="border: 0px none;" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Diagram A&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;You already know some things about degrees, like there are 360 degrees in a circle and that you can measure an angle with two points on the circle's edge (see Diagram A).&lt;br /&gt;&lt;br /&gt;Radians are just another way to measure angles. Here's how:&lt;br /&gt;&lt;br /&gt;Start with a circle. The radius of the circle is a line from the center of the circle to a point on the edge. In Diagram A, that's the line CA. Start point A moving counterclockwise around the circle. It will trace out an arc as it travels. When the arc is as long as the radius of the circle, stop. Call that point B. You now have an arc AB, and an angle ACB. That angle at C is equivalent to one radian. So, the length of arc AB is the same as the length of the radius of the circle, which is line CA. Here's the rule:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;The lengths of the arc and the radius are equal.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;Next, you already know that the ratio of the circumference of a circle to its diameter is pi, or π, which is 3.14. The formula is C = πd. Since the radius of a circle is half the diameter, then d = 2r, so C = πd = π2r, more commonly written C = 2πr.&lt;br /&gt;&lt;br /&gt;Since C  = 2πr, and since we already said the radius of the circle equals one radian, setting r = 1 means that C = 2π radians. In other words, there are 2π radians in the circumference of the circle, which is 360 degrees. So, 360 degrees = 2π radians. Knowing that, we can now convert between radians and degrees.&lt;br /&gt;&lt;br /&gt;Since there are 2π radians in 360 degrees, we get: 2π rad = 360 deg. Diving both sides by 2π, rad = 360/2π = 180/π. And, because 360 deg = 2π rad: dividing both sides by 360, deg = 2π/360 = π/180. To summarize:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Given degrees, you get radians with rad = deg &lt;/i&gt;× &lt;i&gt;180/π.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Given radians, you get degrees = rad &lt;/i&gt;× &lt;i&gt;π/180.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Radians for common degrees&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You'll see charts that tell you 90 degrees equals π/2 radians, or 315 degrees equals 7π/4 radians. How did they get that?&lt;br /&gt;&lt;br /&gt;Remember that C = 2π, meaning that there are 2π radians in 360 degrees. To find out how many radians are in, for example, 90 degrees, we just multiply 2π by the ratio 90/360, like this:&lt;br /&gt;&lt;br /&gt;radians = 90/360 × 2π.&lt;br /&gt;&lt;br /&gt;Reducing the fraction, we get ¼ × 2π, which simplifies to 2π/4, or π/2. So 90 degrees = π/2 radians.&lt;br /&gt;&lt;br /&gt;Let's do a few more:&lt;br /&gt;&lt;br /&gt;180 degrees = 180/360 × 2π = ½ × 2π = 2π/2 = π radians.&lt;br /&gt;270 degrees = 270/360 × 2π = ¾ × 2π = 6π/4 = 3π/2 radians.&lt;br /&gt;360 degrees = 360/360 × 2π = 2π radians.&lt;br /&gt;&lt;br /&gt;Try the calculations for yourself! 45, 135, 225, and 315 degrees are all common angles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-3002412134577615028?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/3002412134577615028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=3002412134577615028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3002412134577615028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3002412134577615028'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2011/06/radians-made-easy.html' title='Radians made easy'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-rDTJl6X6ojE/TfOc8gdYI4I/AAAAAAAAAEc/OrTXx69Lbg0/s72-c/Radian.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-1912285329664119558</id><published>2011-05-07T17:26:00.016-04:00</published><updated>2011-06-18T11:41:08.216-04:00</updated><title type='text'>Cheaper Gas Calculator (spreadsheet)</title><content type='html'>Is is worth driving to a more distant gas station to buy gas that's slightly cheaper?  Here's a spreadsheet to find out. Just copy and paste into cell A1 in your favorite spreadsheet program, then enter your own data in cells A1 through A6. Your savings in cells A14 and A15 should be a positive number to make the trip worth while.&lt;br /&gt;&lt;br /&gt;In cells A5 and A6 just put the one-way distance to the away station. The spreadsheet automatically calculates the round-trip cost.&lt;br /&gt;&lt;br /&gt;Tested in Excel, OpenOffice Calc and Gnumeric.&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;tank size (gallons)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;29.55&lt;/td&gt;&lt;td&gt;miles per gallon&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3.619&lt;/td&gt;&lt;td&gt;local price per gallon&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3.599&lt;/td&gt;&lt;td&gt;away price per gallon&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2.00&lt;/td&gt;&lt;td&gt;miles to local station (one way)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5.00&lt;/td&gt;&lt;td&gt;miles to away station (one way)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;=A1*A3&lt;/td&gt;&lt;td&gt;cost to fill up at local station&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;=A1*A4&lt;/td&gt;&lt;td&gt;cost to fill up at away station&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;=A8-A9&lt;/td&gt;&lt;td&gt;savings from cheaper gas&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;=(A6-A5)*2&lt;/td&gt;&lt;td&gt;extra round trip distance to away station&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;=A12/A2&lt;/td&gt;&lt;td&gt;extra gallons to drive to cheaper station and back&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;=A13/A3&lt;/td&gt;&lt;td&gt;extra travel cost to away station (based on local gas price)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;=A10-A14&lt;/td&gt;&lt;td&gt;savings (loss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;=A16/A1&lt;/td&gt;&lt;td&gt;savings (loss) per gallon&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-1912285329664119558?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/1912285329664119558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=1912285329664119558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1912285329664119558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1912285329664119558'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2011/05/cheaper-gas-calculator-spreadsheet.html' title='Cheaper Gas Calculator (spreadsheet)'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-4763245985030835408</id><published>2011-05-07T09:38:00.001-04:00</published><updated>2011-05-07T09:38:38.866-04:00</updated><title type='text'>How to disable the AVG Free banner in the main User Interface window</title><content type='html'>&lt;ol&gt;&lt;li&gt;Navigate to C:\Program Files\AVG\AVG10&lt;/li&gt;&lt;li&gt;Rename avgfree_us.mht to avgfree_us.mht.bak&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-4763245985030835408?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/4763245985030835408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=4763245985030835408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4763245985030835408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4763245985030835408'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2011/05/how-to-dosable-avg-free-banner-in-main.html' title='How to disable the AVG Free banner in the main User Interface window'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-223140365201175384</id><published>2011-04-09T07:43:00.000-04:00</published><updated>2011-04-09T07:43:49.226-04:00</updated><title type='text'>Highlighting rows in Excel having specific text</title><content type='html'>We have an Excel spreadsheet and we'd like to somehow highlight cells containing specific text.&amp;nbsp; For example, we have the following data in cells A1 through A10 and we want to highlight any row containing the letter 'F', in this case cells A3, A5 and A8.&lt;br /&gt;&lt;br /&gt;ABC&lt;br /&gt;BCD&lt;br /&gt;DEF&lt;br /&gt;GHI&lt;br /&gt;EFG&lt;br /&gt;JKL&lt;br /&gt;CDE&lt;br /&gt;FGH&lt;br /&gt;KLM&lt;br /&gt;HIJ&lt;br /&gt;&lt;br /&gt;First we need a formula that allows us to identify whether a cell contains the target text.&amp;nbsp; We can use the Search() function, like this: =SEARCH("F",A1).&amp;nbsp; Search returns the position of the first letter in the search string if it is found, otherwise it returns a #Value error.&amp;nbsp; This works well, but we are not interested in the position of the text, just whether or not it is found.&amp;nbsp; We also need to deal with the #Value error when the text is not found.&amp;nbsp; Here's how:&lt;br /&gt;&lt;br /&gt;=NOT(ISERROR(SEARCH("F",A1)))&lt;br /&gt;&lt;br /&gt;This formula will return TRUE if the text is found, or FALSE if it is not.&amp;nbsp; Now all we need is a way to highlight the cells containing the search text.&amp;nbsp; Enter conditional formatting!&lt;br /&gt;&lt;br /&gt;Move the cursor to cell A1 and hit Formatting --&amp;gt; Contitional formatting in the menu.&amp;nbsp; Change the dropdown from "Cell value is" to "Formula is".&amp;nbsp; Then paste your formula in the formula box and set the background to red.&amp;nbsp; This will have the effect of setting the cell background to red if the cell contains the text we are looking for.&amp;nbsp; Hit OK to save.&lt;br /&gt;&lt;br /&gt;Now hit the paintbrush button in the toolbar to copy this format to all the other cells.&amp;nbsp; You should see the cells with the letter F highlighted in red.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-223140365201175384?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/223140365201175384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=223140365201175384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/223140365201175384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/223140365201175384'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2011/04/highlighting-rows-in-excel-having.html' title='Highlighting rows in Excel having specific text'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-5564740595688704530</id><published>2011-02-12T10:52:00.003-05:00</published><updated>2011-02-12T10:55:07.301-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='excel'/><category scheme='http://www.blogger.com/atom/ns#' term='date'/><title type='text'>Detecting Dates in Microsoft Excel Spreadsheets</title><content type='html'>Microsoft Excel does not have an "isdate()" function, making it hard to determine whether a cell contains a date.&lt;br /&gt;&lt;br /&gt;Excel VBA provides a function, but a formulaic solution also exists.&amp;nbsp; The trick is to realize that:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Dates are stored as numbers in Excel, and&lt;/li&gt;&lt;li&gt;You can use the Cell() function to return the format of a cell.&lt;/li&gt;&lt;/ol&gt;Armed with these two pieces of information, we can write a formula that returns TRUE (or one) if:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The cell contains a number, and&lt;/li&gt;&lt;li&gt;Is formatted as a date.&lt;/li&gt;&lt;/ol&gt;Here's how.&lt;br /&gt;&lt;br /&gt;Use the IsNumber() function to determine whether or not the value contained in a cell is a number, like this: =ISNUMBER(A1).&lt;br /&gt;&lt;br /&gt;Use the Cell() function to get the format of a cell, like this: =CELL("format",A1).&lt;br /&gt;&lt;br /&gt;If Cell() returns a result in the range "D1" to "D5", the target cell -- in this case A1 --&amp;nbsp; is formatted as a date.&amp;nbsp; Therefore, we can write: =OR(CELL("format",A6)={"D1","D2","D3","D4","D5"}).&lt;br /&gt;&lt;br /&gt;Or, more compactly: =OR(LEFT(CELL("format",A6),1)="D").&lt;br /&gt;&lt;br /&gt;Now we just need to combine the two formulas with an And(), like this:&lt;br /&gt;=IF(AND(ISNUMBER(A5),LEFT(CELL("format",A5),1)="D"),1,0).&lt;br /&gt;&lt;br /&gt;This formula returns one if the cell is a number and it is formatted as a date, otherwise it returns a zero.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-5564740595688704530?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/5564740595688704530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=5564740595688704530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5564740595688704530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5564740595688704530'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2011/02/detecting-dates-in-microsoft-excel.html' title='Detecting Dates in Microsoft Excel Spreadsheets'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-3052005190328563465</id><published>2011-01-29T13:29:00.007-05:00</published><updated>2011-01-29T13:38:59.944-05:00</updated><title type='text'>Anonymous Inner (Lambda) Functions with PHP</title><content type='html'>&lt;code&gt;&amp;lt;?php&lt;br /&gt;$str = "hello world!";&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/* 1. won't work with with anonymous inner (lambda) function before PHP 5.3&lt;br /&gt;&amp;nbsp; $str = preg_replace_callback(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; '/world/',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function( '$match', 'return "michael";' ),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $str ); */&lt;br /&gt;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;/* 2. use create_function instead */&lt;br /&gt;$str = preg_replace_callback(&lt;br /&gt;&amp;nbsp; '/world/',&lt;br /&gt;&amp;nbsp; create_function( '$match', 'return "michael";' ),&lt;br /&gt;&amp;nbsp; $str );&lt;br /&gt;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;echo $str ; // output: hello michael!&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-3052005190328563465?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/3052005190328563465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=3052005190328563465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3052005190328563465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3052005190328563465'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2011/01/anonymous-inner-lambda-functions-with.html' title='Anonymous Inner (Lambda) Functions with PHP'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-1609541096146888188</id><published>2010-11-16T20:33:00.000-05:00</published><updated>2010-11-16T20:33:54.042-05:00</updated><title type='text'>Firefox scrolling problem - fixed!</title><content type='html'>I use the keyboard arrow keys to scroll up and down web pages in  Firefox.&lt;br /&gt;&lt;br /&gt;Lately, Firefox has changed its scrolling behavior and now jumps from the top of a page all the way down to the bottom when I press  the down arrow.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pressing F7 toggles "caret browsing".&lt;/b&gt;&lt;br /&gt;The reason for the behavior is that at some point I hit F7, which  turned caret browsing off, thus changing the browser's behavior. Pressing F7 again restored the expected behavior.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-1609541096146888188?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/1609541096146888188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=1609541096146888188' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1609541096146888188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1609541096146888188'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/11/firefox-scrolling-problem-fixed.html' title='Firefox scrolling problem - fixed!'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-1611472555229848213</id><published>2010-09-10T17:13:00.009-04:00</published><updated>2010-09-10T21:13:20.184-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LAMP'/><category scheme='http://www.blogger.com/atom/ns#' term='phpmyadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Reinstalling a LAMP stack on Ubuntu</title><content type='html'>This is to reinstall a LAMP stack on Ubuntu Jaunty, but it should work for pretty much any version.&lt;br /&gt;&lt;br /&gt;Shut down Apache:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo /etc/init.d/apache2 stop&lt;/div&gt;Shut down MySQL:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo /etc/init.d/mysql stop &lt;/div&gt;Remove the entire LAMP stack:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get purge apache2 php5-mysql libapache2-mod-php5 mysql-server php5 phpmyadmin&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Note the use of &lt;i&gt;purge&lt;/i&gt; instead of &lt;i&gt;remove&lt;/i&gt; -- this gets rid of configuration files as well.&lt;/li&gt;&lt;li&gt;You will need to download everything from the archives during the reinstall.&lt;/li&gt;&lt;li&gt;Stuff in /var/www will &lt;u&gt;not&lt;/u&gt; be removed. &lt;/li&gt;&lt;/ul&gt;Now perform a new installation:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install apache2 php5-mysql libapache2-mod-php5 mysql-server php5 phpmyadmin&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-1611472555229848213?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/1611472555229848213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=1611472555229848213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1611472555229848213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1611472555229848213'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/09/ubuntu-jaunty-lamp-stack.html' title='Reinstalling a LAMP stack on Ubuntu'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-8134802138761058351</id><published>2010-09-09T10:44:00.007-04:00</published><updated>2010-12-14T12:44:31.502-05:00</updated><title type='text'>How to find the last used row in a spreadsheet without using VB</title><content type='html'>I frequently copy spreadsheets between Microsoft Excel and Open Office Calc and I sometimes have a need to find the last row being used in a spreadsheet.&amp;nbsp; But since Open Office does not support Visual Basic for Applications (VBA), I needed a formulaic approach.&lt;br /&gt;&lt;br /&gt;Here is the formula: {=MAX(NOT(ISBLANK($A$1:$A$65536))*ROW($A$1:$A$65536))}&lt;br /&gt;&lt;br /&gt;This is an &lt;i&gt;array formula&lt;/i&gt;, meaning, it will iterate over a range automatically and evaluate the formula for each cell in the range.&amp;nbsp; (NOTE: Don't forget to press CTRL-SHIFT-ENTER to save it after you are done editing the cell, otherwise it won't be saved as an array formula!)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How does it work?&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The array formula starts at cell A1 and works its way down to cell A65536.&amp;nbsp; Along the way it performs ISBLANK() on each cell it encounters.&amp;nbsp; ISBLANK() evaluates to &lt;i&gt;true&lt;/i&gt; for each blank (empty) cell.&lt;/li&gt;&lt;li&gt;Surrounding that, we have a NOT() function, which reverses the result from ISBLANK giving us &lt;i&gt;false&lt;/i&gt; for blank cells and &lt;i&gt;true&lt;/i&gt; for non-blank cells.&amp;nbsp; We now have a list of which cells are blank and which are non-blank.&lt;/li&gt;&lt;li&gt;We then multiply that result by the ROW() number of each cell in the range, which is the same row number you see down the left side of the spreadsheet.&amp;nbsp; Since &lt;i&gt;false&lt;/i&gt; is equivalent to zero and &lt;i&gt;true&lt;/i&gt; is equivalent to one, this has the effect of multiplying the row number for each blank cell by zero and each non-blank cell by one.&amp;nbsp; We now have a value of zero for each blank cell, and the value of the row number for each non-blank cell.&lt;/li&gt;&lt;li&gt;Finally, we take the MAX() of the list, which gives us the largest number in the list.&amp;nbsp; The largest number will be the last row used in the sheet. &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-8134802138761058351?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/8134802138761058351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=8134802138761058351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/8134802138761058351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/8134802138761058351'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/09/how-to-find-last-used-row-in.html' title='How to find the last used row in a spreadsheet without using VB'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-6659391340258404036</id><published>2010-08-28T12:20:00.004-04:00</published><updated>2010-09-10T21:23:24.738-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='spam'/><title type='text'>Protect your email address with javascript</title><content type='html'>Spam is the bane of mankind's existence.  Although modern spam filters do a good job of keeping your inbox clean, you can take some additional steps to protect yourself.  One is to prevent your email address from being harvested from your web site.  Spammers have crawlers that troll through web pages looking for the pattern name@site.com, or something similar.&lt;br /&gt;&lt;br /&gt;If you want to put an email contact on your web site, but also want to avoid spammers, you can use JavaScript.  Here's the code.  Copy it into the body of your contact web page, then change the name and site.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;How to protect your email address&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;e = 'name' + '@' + 'site.com';&lt;br /&gt;document.write( "&amp;lt;a href='mailto:" + e + "'&amp;gt;" + e + '&amp;lt;/a&amp;gt;' );&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;noscript&amp;gt;Please turn on JavaScript!&amp;lt;/noscript&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-6659391340258404036?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/6659391340258404036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=6659391340258404036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/6659391340258404036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/6659391340258404036'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/08/protect-your-email-address-with.html' title='Protect your email address with javascript'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-3582050311390794042</id><published>2010-08-24T19:17:00.003-04:00</published><updated>2010-08-28T11:51:38.236-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='bookmarks'/><category scheme='http://www.blogger.com/atom/ns#' term='IE6'/><title type='text'>IE tip - use the Explorer view to organize your bookmarks</title><content type='html'>To show all your favorites in an Explorer view:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to Favorites --&gt; Organize Favorites in the menu.&lt;/li&gt;&lt;li&gt;Hold the shift key down when clicking on Favorites.&lt;/li&gt;&lt;/ol&gt;The Explorer view allows you to select multiple bookmarks at once, making it much easier to move things around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-3582050311390794042?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/3582050311390794042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=3582050311390794042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3582050311390794042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3582050311390794042'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/08/ie-tip-use-explorer-view-to-organize.html' title='IE tip - use the Explorer view to organize your bookmarks'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-125039377453825019</id><published>2010-08-15T20:25:00.011-04:00</published><updated>2010-08-28T12:34:04.217-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='url'/><category scheme='http://www.blogger.com/atom/ns#' term='bookmarklet'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><title type='text'>Bookmarklet for Creating an Amazon Affiliate Link</title><content type='html'>Bloggers who run Amazon affiliate sites know how difficult it can be to add Amazon product links to your site.  A key problem is the sheer length of the link url.&lt;br /&gt;&lt;br /&gt;Fortunately, Amazon supports a considerably shorter format url, having the form: http://www.amazon.com/dp/ProductID/?tag=YourAssociateID.  This is helpful, but you still need to construct the link, then copy/paste it into your page.&lt;br /&gt;&lt;br /&gt;I have created a bookmarklet to help.  Drag &lt;a href="javascript:var%20t='YourAssociateId',h=document.location.href,p=h.split('/')[5];(function(){w=window.open('','','width=600,height=400');d=w.document;d.writeln('The%20Amazon.com%20link%20is:&lt;br%20/&gt;'+h+'&lt;p%20/&gt;');d.writeln('Your%20short%20affiliate%20link%20is:&lt;br%20/&gt;http://www.amazon.com/dp/'+p+'/?tag='+t);})();"&gt;Make Amazon Link&lt;/a&gt; to your bookmarks toolbar to install it, then right-click, select "properties" and change the '&lt;span style="font-family:courier new;"&gt;YourAssociateID&lt;/span&gt;' text to your actual associate id.  That's it!&lt;br /&gt;&lt;br /&gt;You can check the link with Amazon's&lt;a href="https://affiliate-program.amazon.com/gp/associates/network/tools/link-checker/main.html"&gt; link checker&lt;/a&gt; to be sure everything will work correctly.&lt;br /&gt;&lt;br /&gt;Here is the bookmarklet code in a more readable format for those who might be interested:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;javascript:&lt;br /&gt;&lt;br /&gt;var t='YourAssociateID',&lt;br /&gt;h=document.location.href,&lt;br /&gt;p=h.split('/')[5];&lt;br /&gt;&lt;br /&gt;(function(){&lt;br /&gt;w=window.open('','','width=600,height=400');&lt;br /&gt;d=w.document;&lt;br /&gt;d.writeln('The Amazon.com link is:'+h+'&lt;p&gt;');&lt;br /&gt;d.writeln('Your short affiliate link is:&lt;br /&gt;http://www.amazon.com/dp/'+p+'/?tag='+t);&lt;br /&gt;})();&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-125039377453825019?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/125039377453825019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=125039377453825019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/125039377453825019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/125039377453825019'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/08/bookmarklet-for-creating-amazon.html' title='Bookmarklet for Creating an Amazon Affiliate Link'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-6928482225204045812</id><published>2010-08-14T18:14:00.001-04:00</published><updated>2010-08-28T11:52:51.044-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='ut2004'/><title type='text'>30 Tips for Winning Unreal Tournament 2004</title><content type='html'>I play a lot of Onslaught Torlan in Unreal Tournament 2004.  These are tips on tactics to help you win the game with this map, but many of the tips will work with other maps or other game types.  Either way, you must practice!&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Get out of your base fast.  The faster you build nodes, the better chance you have beating the other team.&lt;/li&gt;&lt;li&gt;Don't defend your base.  I see this all the time.  Teams that are losing start to hang around the base attempting to fend off attackers.  Don't.  The only sure way to avoid attacks on your base is to make sure your team controls the nodes.&lt;/li&gt;&lt;li&gt;Playing "Instant Action" on your own?  Prevent the bots from taking the best vehicles by repairing the vehicles (alt-click when using the link gun).  Bots will veer away, leaving the ride for you.&lt;/li&gt;&lt;li&gt;Another Instant action tip: Bots only go to the top of the central tower in Onslaught Torlan when the Redeemer is up there.  If you start to see bots head up there, try to kill them and get there first.&lt;/li&gt;&lt;li&gt;Give rides in vehicles leaving the base or any other node.  A little teamwork goes a long way.&lt;/li&gt;&lt;li&gt;Don't flak the Manta at the start of the game.  If you get to the manta first, get in, but make it go lower so others can jump on.  You can get three or four people on it besides the pilot.  Drop everyone off at the first node so they can link and power it up fast.&lt;/li&gt;&lt;li&gt;Set your keyboard up.  The default setups are not intuitive.  You don't want to think, just react.  That means a good keyboard setup.  Here's mine (I'm a lefty):&lt;ul&gt;&lt;li&gt;right hand for the keyboard, left hand for the mouse.&lt;/li&gt;&lt;li&gt;up, down, left, right arrows: movement.&lt;/li&gt;&lt;li&gt;ctrl = up, shift = down.  This works for both vehicles and personal movement (shift to crouch, ctrl to jump). This keeps my right hand on the arrow keys, with the ctrl and shift buttons in easy reach of my thumb.&lt;/li&gt;&lt;li&gt;space = drop item or exit a vehicle (useful for the manta trick, described below).&lt;/li&gt;&lt;li&gt;mouse wheel to scroll thru weapons.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Trade graphics for speed.  you don't need your system slowing you down during a mano-a-mano fight.  Reduce graphics detail as much as you can stand while still keeping the game looking as good as possible.&lt;/li&gt;&lt;li&gt;Shock gun tip: A lot of guys like to use the shock gun in one on one fights.  The secret to surviving a shock gun attack is to run toward the attacker.  He needs to be a certain distance from you for the weapon to be effective.&lt;/li&gt;&lt;li&gt;Avoid one on one fights if you can.  It's far more effective to fire the Goliath tank from a distance than to engage in personal battles.&lt;/li&gt;&lt;li&gt;Kill the Gnome screensaver.  If you are running in Linux (I'm using Jaunty), kill the screensaver before starting play.  Otherwise, you get unpredictable behavior when it kicks in, which can be a problem during battles.  I use a launcher bash script that looks like this:&lt;/li&gt;&lt;code&gt;#!/bin/sh&lt;br /&gt;killall gnome-screensaver 2&gt;/dev/null&lt;br /&gt;/usr/local/bin/ut2004 2&gt;/dev/null&lt;br /&gt;gnome-screensaver&lt;br /&gt;exit 0&lt;/code&gt;&lt;li&gt;Ditch the assault rifle.  It's useless, and I don't want to scroll through it with the mouse wheel.  Toss it away with the ThrowWeapon key (usually the backslash).&lt;/li&gt;&lt;li&gt;Turn off ambient sounds and music.  You want to hear people coming up behind you!&lt;/li&gt;&lt;li&gt;Manta trick: Fly at top speed directly toward someone.  They will try to aim their Avril at you.  Before they can lock on, jump out, which will prevent them from locking on, but the manta will continue forward and run over them!&lt;/li&gt;&lt;li&gt;Turn off voice chat.  Most teams don't use it effectively, and it is usually very annoying.  Same with text to speech.&lt;/li&gt;&lt;li&gt;If you get the Raptor coming out of the base at the start of the Torlan game, start the first node, then head to the central tower right away to get the Redeemer.&lt;/li&gt;&lt;li&gt;Just after the game starts, head to the enemy base.  There is usually no one there, and you can steal their shield and Big Keg o Health.  It helps you and denies it to the enemy, always a good thing.&lt;/li&gt;&lt;li&gt;If you are falling from a high place, activate your shield gun.  Program your middle mouse button to activate the shield gun so you don't have to fumble with the keyboard.&lt;/li&gt;&lt;li&gt;Turn on "always run". There is absolutely no point in walking anywhere.&lt;/li&gt;&lt;li&gt;From the Hellbender side turret (the one that shoots out the energy balls that you can then shoot and cause a chain reaction), shoot the most distant ball first.  This gives you an element of surprise.&lt;/li&gt;&lt;li&gt;When in the hellbender rear turret, remember that many vehicles do not need a full charge to be destroyed.  For example, destroying a Raptor takes one full charge on the first shot, then only a slight charge on the second shot.  You do not need to wait for the weapon to fully charge again.&lt;/li&gt;&lt;li&gt;Scorpion tip: Do not charge the weapon fully before firing.  Just a short charge up to three energy balls, then let go.  You get a much faster rate of fire than way.  Keep doing it, and you can cause destruction to a node or enemy vehicle much more quickly than waiting for a full charge each time.&lt;/li&gt;&lt;li&gt;The flack cannon is very effective against the Goliath (tank).&lt;/li&gt;&lt;li&gt;You can shoot effectively from the bridge that goes over the central canyon in Torlan.  But it is very hard to hit you unless the enemy comes up there.&lt;/li&gt;&lt;li&gt;When powering up a node, pay attention to the energy level indicator (your maps must be on to see it!).  When it turns from yellow to green, head to the next node.  You do not need to power it up fully.  It will continue powering up on its own.  In Onslaught Torlan, the timing works out so the next node will be active exactly as you arrive there with the Manta.&lt;/li&gt;&lt;li&gt;Don't try to guide the Redeemer toward a target.  It is too easy to shoot down, expecially in Instant Action mode.  Instead, sacrifice yourself in a suicide attack.  For example, while above your target, say a node, jump out of the Raptor from a good height.  While falling, select the Redeemer, then just before hitting the ground, fire it into the target.  Try to land behind the turret so it protects you from the blast, and you might survive.&lt;/li&gt;&lt;li&gt;If you are building nodes well, you will be able to tell the next enemy node to attack.  Try to get there early to take out the turret, before the node is enabled for your attack.  That way, the enemy has a much less effective defense, and you don't have to fight off the turret while trying to destroy the node.&lt;/li&gt;&lt;li&gt;You don't have to be right up against a vehicle to get into it.  Hit the "Use" key from a few steps away.  This lets you get into a vehicle more quickly when you are racing a teammate for the Manta.&lt;/li&gt;&lt;li&gt;Transporting to the center node takes you into the canyon when the double damage is about to appear.&lt;/li&gt;&lt;li&gt;When fighting in the Goliath (tank), turn the tank body in the same direction as the turret to swing the gun around faster.&lt;/li&gt;&lt;/ol&gt;Maps on Gentlemen!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-6928482225204045812?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/6928482225204045812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=6928482225204045812' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/6928482225204045812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/6928482225204045812'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/08/30-tips-for-winning-unreal-tournament.html' title='30 Tips for Winning Unreal Tournament 2004'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-5892775519770928626</id><published>2010-08-14T10:32:00.004-04:00</published><updated>2010-08-28T11:53:27.410-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='url'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><title type='text'>amzn.to link shortener</title><content type='html'>Amazon links can be very long indeed.  You want to be able to turn this:&lt;br /&gt;&lt;br /&gt;http://www.amazon.com/gp/product/B000CSWCQA?ie=UTF8&amp;amp;tag=goodforgeek-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000CSWCQA&lt;br /&gt;&lt;br /&gt;into this:&lt;br /&gt;&lt;br /&gt;http://amzn.to/cRH47b&lt;br /&gt;&lt;br /&gt;How to use amzn.to?  Amazon has signed up with &lt;a href="http://bit.ly/"&gt;bit.ly&lt;/a&gt; and reserved the amzn.to domain, so that if you use the bit.ly service, your shortened link will reference amzn.to, which redirects to bit.ly, is translated back to the long url form, and then redirects to &lt;a href="http://www.amazon.com/?tag=goodforgeek-20"&gt;Amazon.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Disclosure: &lt;a href="http://goodiesforgeeks.wordpress.com/"&gt;Goodies for Geeks&lt;/a&gt; is an Amazon affiliate site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-5892775519770928626?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/5892775519770928626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=5892775519770928626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5892775519770928626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5892775519770928626'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/08/amznto-link-shortener.html' title='amzn.to link shortener'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-1371807610468556931</id><published>2010-08-07T20:32:00.007-04:00</published><updated>2010-08-07T20:41:58.828-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='wordpress'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='mshot'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>How to turn off page previews in Wordpress</title><content type='html'>By default, Wordpress.com enables an annoying feature they call mShots, which provides a pop-up preview of a page when you hover your mouse over a link.&lt;br /&gt;&lt;br /&gt;Having &lt;a href="http://minorpoint.blogspot.com/2010/07/automatic-drop-down-menus-considered.html"&gt;previously ranted about dropdown menus&lt;/a&gt; that are activated by hovering your mouse over a link, you can imagine how I feel about this.&lt;br /&gt;&lt;br /&gt;To turn it off for Wordpress.com blogs:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to Appearance --&gt; Extras&lt;/li&gt;&lt;li&gt;Yncheck the "Enable &lt;em&gt;mShots&lt;/em&gt; site previews on this blog" checkbox to disable it on your blog.&lt;/li&gt;&lt;li&gt;Click "Update Extras" to save the changes.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-1371807610468556931?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/1371807610468556931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=1371807610468556931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1371807610468556931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1371807610468556931'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/08/how-to-turn-off-page-previews-in.html' title='How to turn off page previews in Wordpress'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-1652271008553415166</id><published>2010-07-20T20:24:00.004-04:00</published><updated>2010-07-20T22:32:35.932-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='domain'/><category scheme='http://www.blogger.com/atom/ns#' term='custom'/><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='template'/><title type='text'>Blogger custom domain displays blank white page</title><content type='html'>You changed to a &lt;a href="http://www.google.com/support/blogger/bin/answer.py?hl=en&amp;answer=55373"&gt;custom domain&lt;/a&gt; and now Blogger is displaying a blank white page?  My experience: something is wrong with the Blogger template.  Here's how to fix it:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Change back to Blogger hosting from Settings tab --&gt; Publishing.&lt;/li&gt;&lt;li&gt;Go to Blogger Template Designer and change your template to something new.  You may want to back up your current template first!&lt;/li&gt;&lt;li&gt;Check the preview to make sure the changes look ok.&lt;/li&gt;&lt;li&gt;Save.&lt;/li&gt;&lt;li&gt;Do not change back to custom domain hosting yet!  Wait a bit.&lt;/li&gt;&lt;li&gt;Check that your blog is displayed properly by Blogger.&lt;/li&gt;&lt;li&gt;Now change back to your custom domain.  Wait a bit more.  Maybe an hour.&lt;/li&gt;&lt;li&gt;Your custom domain should be  displaying your new template.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-1652271008553415166?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/1652271008553415166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=1652271008553415166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1652271008553415166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1652271008553415166'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/07/blogger-custom-domain-displays-blank.html' title='Blogger custom domain displays blank white page'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-6489903645695453143</id><published>2010-07-20T18:57:00.002-04:00</published><updated>2010-08-02T19:20:14.457-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Automatic drop-down menus considered harmful</title><content type='html'>Web designers - making your menu drop  down when a user's mouse hovers over it  is highly annoying.  It ends up dropping down and getting in the way  while I am  moving my mouse to a different, unrelated location on the page.  Please write your code so drop down  menus are only activated with a click, not a  hover.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-6489903645695453143?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/6489903645695453143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=6489903645695453143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/6489903645695453143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/6489903645695453143'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/07/automatic-drop-down-menus-considered.html' title='Automatic drop-down menus considered harmful'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-4062934776233719253</id><published>2010-07-18T18:12:00.005-04:00</published><updated>2010-07-20T20:45:05.573-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='outlook'/><category scheme='http://www.blogger.com/atom/ns#' term='password'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><title type='text'>How to change your Outlook 2003 email password</title><content type='html'>I can never remember where to find this option, so here it is.  Note that you will need to know your domain first (for step 7).&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Tools --&gt; Options --&gt; Other tab&lt;/li&gt;&lt;li&gt;Click Advanced Options under General&lt;/li&gt;&lt;li&gt;Click Custom Forms button&lt;/li&gt;&lt;li&gt;Click Password button&lt;/li&gt;&lt;li&gt;In the window to change your password:&lt;/li&gt;&lt;li&gt;Enter your username (your Outlook login)&lt;/li&gt;&lt;li&gt;Enter your domain&lt;/li&gt;&lt;li&gt;Enter the password you want (twice) and click OK&lt;/li&gt;&lt;li&gt;You will get a message confirming that your password has changed&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-4062934776233719253?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/4062934776233719253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=4062934776233719253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4062934776233719253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4062934776233719253'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/07/how-to-change-your-outlook-email.html' title='How to change your Outlook 2003 email password'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-5205356463835114844</id><published>2010-07-18T17:56:00.005-04:00</published><updated>2010-07-20T20:45:46.552-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='navbar'/><category scheme='http://www.blogger.com/atom/ns#' term='navigation'/><title type='text'>How to remove the left side navigation bar from Sharepoint</title><content type='html'>&lt;ol&gt;&lt;li&gt;Site Actions --&gt; Edit Page&lt;/li&gt;&lt;li&gt;Click Add a Web Part (left or right side, it doesn't matter)&lt;/li&gt;&lt;li&gt;Scroll down and check the Content Editor checkbox&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You will see a message: "To add content, open the tool pane and then click Rich Text Editor";&lt;/li&gt;&lt;li&gt;Click the "open the tool pane" link&lt;/li&gt;&lt;li&gt;Click the source editor button, paste in the following code and click the save button:&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;.ms-navframe {&lt;br /&gt;  display: none;&lt;br /&gt;}&lt;br /&gt;.ms-quickLaunch {&lt;br /&gt;  display: none;&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Expand the layout category and click the hidden checkbox to prevent the Content Editor Web Part from appearing on the page&lt;/li&gt;&lt;li&gt;Click Exit Edit Mode&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;To change the Content Editor Web Part later:&lt;ol&gt;&lt;li&gt;Site Actions --&gt; Edit Page&lt;/li&gt;&lt;li&gt;You will see a (Hidden) Content Editor Web Part&lt;/li&gt;&lt;li&gt;Click the Edit dropdown button to Modify Shared Web Part or Delete&lt;/li&gt;&lt;li&gt;If necessary, click Add a Web Part, then the "Advanced Web Part gallery and options" link&lt;/li&gt;&lt;li&gt;Click "Hidden Web Parts under the "Browse" section&lt;/li&gt;&lt;li&gt;Select your Web Part under the Web Part List section&lt;/li&gt;&lt;li&gt;Click the Add button at the bottom&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-5205356463835114844?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/5205356463835114844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=5205356463835114844' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5205356463835114844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5205356463835114844'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/07/how-to-remove-left-side-navigation-bar.html' title='How to remove the left side navigation bar from Sharepoint'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-417650986505187664</id><published>2010-05-31T13:15:00.004-04:00</published><updated>2010-07-20T22:23:16.382-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hive'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='logoff'/><title type='text'>How to solve a slow logoff issue on Windows XP</title><content type='html'>&lt;ol&gt;&lt;li&gt;Install User Profile Hive Cleanup Service from: http://www.microsoft.com/downloads/details.aspx?FamilyID=1B286E6D-8912-4E18-B570-42470E2F3582&amp;amp;displaylang=en&lt;/li&gt;&lt;li&gt;Edit the registry entry to have UPHClean only report what processes it finds preventing profiles from unloading (i.e., do not have it take action to allow the profile to unload).  To do this, use the registry editor to set HKLM\System\CurrentControlSet\Services\UPHClean\Parameters\REPORT_ONLY to 1.&lt;/li&gt;&lt;li&gt;Reboot&lt;/li&gt;&lt;li&gt;Log in and log out to reproduce the problem.&lt;/li&gt;&lt;li&gt;Run the event viewer with Start --&gt; Run --&gt; eventvwr.msc&lt;/li&gt;&lt;li&gt;You will see an entry in the event log that identifies your problem.  In my case, it was: "The following handles opened in user profile hive TOSHIBA\michael (S-1-5-21-3611688261-1266376050-2465371254-1005) are preventing the profile from unloading: TvsTray.exe (2344)"&lt;/li&gt;&lt;li&gt;A little research on TvsTray indicated it is not a necessary process.&lt;/li&gt;&lt;li&gt;Use sysinternals/autoruns.exe to prevent this process from running at logon.&lt;/li&gt;&lt;li&gt;Reboot again.&lt;/li&gt;&lt;li&gt;Log in and log out to try to reproduce the problem.  It did not occur.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-417650986505187664?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/417650986505187664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=417650986505187664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/417650986505187664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/417650986505187664'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/05/solving-slow-logoff-issue-on-windows-xp.html' title='How to solve a slow logoff issue on Windows XP'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-8697525666260936364</id><published>2010-02-15T21:14:00.004-05:00</published><updated>2010-07-22T19:07:16.122-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jackal'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='jaunty'/><category scheme='http://www.blogger.com/atom/ns#' term='open office'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>How to upgrade to Open Office 3.1.1 in Ubuntu Jaunty</title><content type='html'>&lt;a href="http://www.webupd8.org/2009/05/install-openoffice-31-in-ubuntu-jaunty.html"&gt;This is what finally worked for me&lt;/a&gt;, although some folks have had problems, judging from the comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-8697525666260936364?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/8697525666260936364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=8697525666260936364' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/8697525666260936364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/8697525666260936364'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2010/02/upgrading-to-open-office-311-in-ubuntu.html' title='How to upgrade to Open Office 3.1.1 in Ubuntu Jaunty'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-8784267154197199902</id><published>2009-10-31T10:18:00.004-04:00</published><updated>2009-10-31T10:22:22.937-04:00</updated><title type='text'>Creating Passionate Users</title><content type='html'>This is the worst advice in the world.&lt;br /&gt;&lt;br /&gt;All you micro-ISV's, listen up.&lt;br /&gt;&lt;br /&gt;I'm never going to be passionate about your tool.  I'm just using it to accomplish &lt;span style="font-style: italic;"&gt;something else&lt;/span&gt; that I'm passionate about.&lt;br /&gt;&lt;br /&gt;I'm not passionate about your hammer.  I am passionate about the deck I am using it to build.&lt;br /&gt;&lt;br /&gt;Your tool should be transparent to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-8784267154197199902?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.google.com/search?q=creating+passionate+users' title='Creating Passionate Users'/><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/8784267154197199902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=8784267154197199902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/8784267154197199902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/8784267154197199902'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/10/creating-passionate-users.html' title='Creating Passionate Users'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-4232743770372174824</id><published>2009-09-19T09:24:00.001-04:00</published><updated>2009-09-19T09:24:50.154-04:00</updated><title type='text'>Feed Validator</title><content type='html'>Problems parsing someone's RSS feed?  http://feedvalidator.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-4232743770372174824?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/4232743770372174824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=4232743770372174824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4232743770372174824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4232743770372174824'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/09/feed-validator.html' title='Feed Validator'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-954416995561208385</id><published>2009-09-19T09:12:00.006-04:00</published><updated>2010-07-22T19:06:06.114-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Windows Search not finding your files?</title><content type='html'>http://support.microsoft.com/?kbid=309173&lt;br /&gt;&lt;br /&gt;Follow the steps in method 2:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;search --&gt; change preferences --&gt; with indexing service (for faster local searches)&lt;/li&gt;&lt;li&gt;do not turn on the index service&lt;/li&gt;&lt;li&gt;instead, change indexing service settings (advanced)&lt;/li&gt;&lt;li&gt;show/hide console tree&lt;/li&gt;&lt;li&gt;right-click indexing service on local machine&lt;/li&gt;&lt;li&gt;properties&lt;/li&gt;&lt;li&gt;generation tab --&gt; click checkbox to index files with unknown extensions&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ok&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-954416995561208385?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/954416995561208385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=954416995561208385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/954416995561208385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/954416995561208385'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/09/windows-search-not-finding-your-files.html' title='Windows Search not finding your files?'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-7630648350604103913</id><published>2009-09-10T23:07:00.006-04:00</published><updated>2010-07-22T19:07:43.133-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jackal'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='jaunty'/><category scheme='http://www.blogger.com/atom/ns#' term='open office'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Where is the Ubuntu Jaunty  login screen background image?</title><content type='html'>If you want to use this image for your wallpaper, the default welcome screen background image is here: /usr/share/gdm/themes/Human.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-7630648350604103913?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/7630648350604103913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=7630648350604103913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/7630648350604103913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/7630648350604103913'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/09/where-is-ubuntu-jaunty-login-screen.html' title='Where is the Ubuntu Jaunty  login screen background image?'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-2383091615236074115</id><published>2009-09-10T16:22:00.005-04:00</published><updated>2010-07-22T19:08:22.084-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jackal'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='jaunty'/><category scheme='http://www.blogger.com/atom/ns#' term='ut2004'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>How to install UT2004 on Xubuntu Jaunty Jackal</title><content type='html'>&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;Download UT2004-LNX-Demo3334.run.gz from http://www.fileshack.com/file_download.x/4569#&lt;/li&gt;&lt;li&gt;Extract UT2004-LNX-Demo3334.run from the archive.  This is a bash script.  Save it to your desktop.&lt;/li&gt;&lt;li&gt;Change the file to executable mode with &lt;span style="font-style: italic;font-family:courier new;" &gt;chmod 755 .&lt;/span&gt;&lt;span style="font-style: italic;font-family:courier new;" &gt;/UT2004-LNX-Demo3334.run&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Run the file with: &lt;span style="font-style: italic;font-family:courier new;" &gt;sudo ./UT2004-LNX-Demo3334.run&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Take the default configurations.&lt;/li&gt;&lt;li&gt;Run the program from the menu, or from the terminal command with: &lt;span style="font-style: italic;font-family:courier new;" &gt;/usr/local/bin/ut2004&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;If you get an error like: /usr/local/bin/ut2004-bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory, you will need to download and install libstdc++5.  Enter this command line from the terminal: &lt;span style="font-style: italic;font-family:courier new;" &gt;sudo apt-get install libstdc++5&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-2383091615236074115?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/2383091615236074115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=2383091615236074115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/2383091615236074115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/2383091615236074115'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/09/installing-ut2004-on-xubuntu-jaunty.html' title='How to install UT2004 on Xubuntu Jaunty Jackal'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-3309935153796416901</id><published>2009-06-26T21:40:00.002-04:00</published><updated>2010-07-22T19:08:42.110-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='minify'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CSS Minify in PHP</title><content type='html'>&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;error_reporting( E_ALL | E_STRICT );&lt;br /&gt;&lt;br /&gt;class CSSMinify {&lt;br /&gt;  private $css=null;&lt;br /&gt;&lt;br /&gt;  public static function Minify( $file=null ) {&lt;br /&gt;    if( $css = @file_get_contents( $file ) ) {&lt;br /&gt;      // remove comments&lt;br /&gt;      $css = preg_replace( '/\/\*(.|[\r\n])*?\*\//', '', $css);&lt;br /&gt;&lt;br /&gt;      // remove LF, CR&lt;br /&gt;      $css = preg_replace( '/\n|\r/', '', $css );&lt;br /&gt;&lt;br /&gt;      // change TAB to SPACE&lt;br /&gt;      $css = preg_replace( '/\t/', ' ', $css );&lt;br /&gt;&lt;br /&gt;      // reduce multiple whitespace to single space&lt;br /&gt;      $css = preg_replace( '/\s+/', ' ', $css );&lt;br /&gt;&lt;br /&gt;      // Remove unneeded spaces&lt;br /&gt;      $css = preg_replace( '/\s*({|}|:|;|,)\s*/', "$1", $css );&lt;br /&gt;&lt;br /&gt;      // remove unneeded semicolon&lt;br /&gt;      $css = preg_replace( '/;}/', '}', $css );&lt;br /&gt;&lt;br /&gt;    } else {&lt;br /&gt;      throw new Exception( "Can't open file: $file" );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return $css;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// usage:&lt;br /&gt;try {&lt;br /&gt;  echo CSSMinify::Minify( 'style.css' );&lt;br /&gt;} catch( Exception $e ) {&lt;br /&gt;  echo $e-&gt;getmessage();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-3309935153796416901?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/3309935153796416901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=3309935153796416901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3309935153796416901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3309935153796416901'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/06/css-minify-in-php.html' title='CSS Minify in PHP'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-1155768694568952046</id><published>2009-06-10T15:49:00.003-04:00</published><updated>2010-07-22T19:09:21.682-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='show'/><category scheme='http://www.blogger.com/atom/ns#' term='quicklaunch'/><category scheme='http://www.blogger.com/atom/ns#' term='desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='icon'/><title type='text'>Show Desktop icon dragged off the quicklaunch bar?</title><content type='html'>Deposit the icon that is now on your desktop into %Appdata%\Microsoft\Internet Explorer\Quick Launch.&lt;br /&gt;&lt;br /&gt;For example: C:\Documents and Settings\USERNAME\Application Data\Microsoft\Internet Explorer\Quick Launch&lt;br /&gt;&lt;br /&gt;Et viola!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-1155768694568952046?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/1155768694568952046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=1155768694568952046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1155768694568952046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1155768694568952046'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/06/show-desktop-icon-dragged-off.html' title='Show Desktop icon dragged off the quicklaunch bar?'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-5862533988197675100</id><published>2009-04-11T10:10:00.009-04:00</published><updated>2010-07-22T19:09:43.747-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>MVC in PHP - a more complex example</title><content type='html'>A slightly more sophisticated example.  This one drives a simple form to enter and validate an email address.  The email validation is weak, but it's not this point of this example.&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;Things to note:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;The model uses the PHP magic methods __get() and __set() to avoid the need for getters and setters&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Form validation goes in the model, not the controller&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The controller's purpose is to instantiate the model and the view.  A more complex example would show logic in the controller to discover which model and view to invoke.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Formatting goes in the view, not the model.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;class Email {&lt;br /&gt;  public static function validate( $email ) {&lt;br /&gt;    $regexp = '/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.com$/';&lt;br /&gt;    return( preg_match( $regexp, $email ) );&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Model {&lt;br /&gt;  private $vars = array();&lt;br /&gt;&lt;br /&gt;  public function __construct() {&lt;br /&gt;    $this-&amp;gt;email = $_POST['email'];&lt;br /&gt;    if( $_POST['submitCheck'] == 1 ) {&lt;br /&gt;      $this-&amp;gt;errors = Email::validate( $_POST['email'] ) ? 'Good email address' : 'Bad email address';&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // use PHP "magic" methods to avoid lots of getters and setters&lt;br /&gt;  public function __set( $key, $value ) {&lt;br /&gt;    $this-&amp;gt;vars[$key] = $value;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function __get( $key ) {&lt;br /&gt;    return( array_key_exists( $key, $this-&amp;gt;vars ) ? $this-&amp;gt;vars[$key] : null );&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class View {&lt;br /&gt;  public function __construct( $model ) {&lt;br /&gt;    $email = $model-&amp;gt;email;&lt;br /&gt;    $errors = $model-&amp;gt;errors;&lt;br /&gt;    include 'template.php';&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Controller {&lt;br /&gt;  public static function process() {&lt;br /&gt;    new View( new Model() );&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Controller::process();&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Here is the associated HTML code for the view:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;?php print '&amp;lt;form method="POST" action="' . $_SERVER['PHP_SELF'] . '"&amp;gt;' . "\n";?&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;&amp;lt;?php echo $errors; ?&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;Email: &amp;lt;input name='email' type='text' size='25' maxlength='25' value="&amp;lt;?php echo $email; ?&amp;gt;" /&amp;gt;&lt;br /&gt;&amp;lt;input type='submit' value='Submit'&amp;gt;&lt;br /&gt;&amp;lt;input type='hidden' name='submitCheck' value='1' /&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-5862533988197675100?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/5862533988197675100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=5862533988197675100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5862533988197675100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/5862533988197675100'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/04/mvc-in-php-more-complex-example.html' title='MVC in PHP - a more complex example'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-887156192137973110</id><published>2009-04-11T09:57:00.006-04:00</published><updated>2010-07-22T19:09:54.034-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>MVC in PHP - Explained in less than one page of code</title><content type='html'>Tired of long-winded explanations of MVC?  Sick of looking at "small" MVC frameworks with dozens of files and tons of code that doesn't answer your basic questions?&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;If you just want to look at some simple code to understand the concept, this is the shortest MVC example I can come up with.  Less than a page of code.&lt;br /&gt;&lt;p /&gt;&lt;br /&gt;This example has limited functionality and no error checking.  All it does is display the current time.  But it should get the basic MVC concepts across.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;class Model {&lt;br /&gt;  private $dt;&lt;br /&gt;&lt;br /&gt;  public function __construct() {&lt;br /&gt;    $this-&amp;gt;dt = time();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function getTime() {&lt;br /&gt;    return $this-&amp;gt;dt;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class View {&lt;br /&gt;  public function __construct( $model ) {&lt;br /&gt;    echo "&amp;lt;h1&amp;gt;date( 'g:i a', $model-&amp;gt;getTime() )&amp;lt;/h1&amp;gt;\n";&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Controller {&lt;br /&gt;  public static function process() {&lt;br /&gt;    new View( new Model() );&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Controller::process();&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-887156192137973110?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/887156192137973110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=887156192137973110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/887156192137973110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/887156192137973110'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/04/mvc-in-php-explained-in-one-page-of.html' title='MVC in PHP - Explained in less than one page of code'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-3090760828938335033</id><published>2009-04-04T11:35:00.005-04:00</published><updated>2010-07-22T19:10:54.568-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='foxit'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='toolbar'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>How to remove the Foxit Toolbar from Your Browser</title><content type='html'>The new version of Foxit Reader for PDF files installs a toolbar in your browser.  Even if you uninstall Foxit, the toolbar remains.&lt;br /&gt;&lt;br /&gt;To uninstall the Foxit toolbar, go into Add/Remove Programs and select the Ask Toolbar (note, there is no Foxit toolbar).&lt;br /&gt;&lt;br /&gt;Click the Change/Remove button.&lt;br /&gt;&lt;br /&gt;The Foxit reader should remain installed and continue working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-3090760828938335033?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/3090760828938335033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=3090760828938335033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3090760828938335033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3090760828938335033'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/04/removing-foxit-toolbar-from-your.html' title='How to remove the Foxit Toolbar from Your Browser'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-1638377249039066118</id><published>2009-01-10T11:46:00.005-05:00</published><updated>2010-07-22T19:11:37.191-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod'/><category scheme='http://www.blogger.com/atom/ns#' term='privacy'/><title type='text'>How to clear search terms from iPod Safari</title><content type='html'>The solution that worked for my IPod Touch can be found &lt;a href="http://mikecane2008.wordpress.com/2008/04/14/reference-iphoneipod-touch-clear-history/#comment-10971"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If the link is not working, the steps are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open Safari&lt;/li&gt;&lt;li&gt; Tap on the bookmark icon at the bottom of the screen&lt;/li&gt;&lt;li&gt; Tap on the history tab&lt;/li&gt;&lt;li&gt; Tap on clear at the bottom left of the screen&lt;/li&gt;&lt;li&gt; Done, the History is gone, including Google / Yahoo search&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Clearing browser history through Settings --&gt; Safari --&gt; Clear History only clears the browser history, not the search terms for Google or Yahoo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-1638377249039066118?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/1638377249039066118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=1638377249039066118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1638377249039066118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/1638377249039066118'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2009/01/clearing-search-terms-from-ipod-safari.html' title='How to clear search terms from iPod Safari'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-4395877303949646892</id><published>2008-08-10T21:26:00.005-04:00</published><updated>2010-07-22T19:11:57.466-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP Class Generator</title><content type='html'>&lt;PRE&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;class ClassGenerator {&lt;br /&gt;  public static function create( $class, $fields ) {&lt;br /&gt;    $n = count( $fields );&lt;br /&gt;    print "&amp;lt;?php\n\n";&lt;br /&gt;&lt;br /&gt;    // class declaration&lt;br /&gt;    print "class $class {\n";&lt;br /&gt;&lt;br /&gt;    // member declarations&lt;br /&gt;    print "  private ";&lt;br /&gt;    for( $i=0 ; $i&amp;lt;$n ; $i++ ) {&lt;br /&gt;      print '$' . $fields[$i] . ( $i &amp;lt; $n - 1 ? ", " : "" );&lt;br /&gt;    }&lt;br /&gt;    print ";\n\n";&lt;br /&gt;&lt;br /&gt;    // constructor&lt;br /&gt;    print "  public function __construct( ";&lt;br /&gt;    for( $i=0 ; $i&amp;lt;$n ; $i++ ) {&lt;br /&gt;      print '$' . $fields[$i] . ( $i &amp;lt; $n - 1 ? ", " : "" );&lt;br /&gt;    }&lt;br /&gt;    print " ) {\n";&lt;br /&gt;    for( $i=0 ; $i&amp;lt;$n ; $i++ ) {&lt;br /&gt;      print '    $this-&amp;gt;set' . ucfirst( $fields[$i] ) . '( $' . $fields[$i] . " );\n";&lt;br /&gt;    }&lt;br /&gt;    print "  }\n";&lt;br /&gt;&lt;br /&gt;    // getters and setters&lt;br /&gt;    for( $i=0 ; $i&amp;lt;$n ; $i++ ) {&lt;br /&gt;      print "\n";&lt;br /&gt;&lt;br /&gt;      print "  public function set" . ucfirst( $fields[$i] ) . '( $' . $fields[$i] . " ) {\n";&lt;br /&gt;      print '    $this-&amp;gt;' . $fields[$i] . ' = $' . "$fields[$i];\n";&lt;br /&gt;      print "  }\n\n";&lt;br /&gt;&lt;br /&gt;      print "  public function get" . ucfirst( $fields[$i] ) . "() {\n";&lt;br /&gt;      print '    return( $this-&amp;gt;' . $fields[$i] . " );\n";&lt;br /&gt;      print "  }\n";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    print "}\n\n";&lt;br /&gt;&lt;br /&gt;    print "?&amp;gt;\n";&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;ClassGenerator::create( "Address", array( "street", "city", "state", "postalCode", "country" ) );&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/PRE&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-4395877303949646892?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/4395877303949646892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=4395877303949646892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4395877303949646892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4395877303949646892'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2008/08/php-class-generator.html' title='PHP Class Generator'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-3459477375798486366</id><published>2007-12-22T13:05:00.001-05:00</published><updated>2010-07-22T19:13:02.646-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server'/><category scheme='http://www.blogger.com/atom/ns#' term='fawn'/><category scheme='http://www.blogger.com/atom/ns#' term='tremulous'/><category scheme='http://www.blogger.com/atom/ns#' term='feisty'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>How to set up a Tremulous server on Ubuntu Linux</title><content type='html'>I did this on Feisty, but it should work for other versions:&lt;br /&gt;&lt;br /&gt;1. Download the .run file from sourceforge:&lt;br /&gt;&lt;br /&gt;sudo wget http://prdownloads.sourceforge.net/tremulous/tremulous-q3-1.0.2-installer.x86.run?download&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Run the install:&lt;br /&gt;&lt;br /&gt;sudo sh ./tremulous-1.1.0-installer.x86.run&lt;br /&gt;&lt;br /&gt;Take all the defaults, except also install the dedicated server option.  I installed to /usr/local/games/tremulous.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Modify the server name in the config file:&lt;br /&gt;&lt;br /&gt;cd /usr/local/games/tremulous&lt;br /&gt;sudo vi base/server.cfg&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. Copy the patched version of tremded from tjw's site (contains important admin improvements).  Assuming that you are still in /usr/local/games/tremulous, type:&lt;br /&gt;&lt;br /&gt;sudo wget http://tjw.org/tremulous/linux/tremded.x86&lt;br /&gt;chmod 755 tremded.x86&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. Copy the game.qvm file from tjw's site:&lt;br /&gt;&lt;br /&gt;sudo wget -O ~/.tremulous/base/vm/game.qvm http://tjw.org/tremulous/game.qvm&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTE:&lt;/span&gt; The instructions for these two steps can be found at tjw's site &lt;a href="http://tjw.org/tremulous/SETUP.txt"&gt;here&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTE:&lt;/span&gt; The qvm file (Quake Virtual Machine) and tremded files must match or the server will not run!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. Run the server in test mode with:&lt;br /&gt;&lt;br /&gt;sudo ./tremded.x86 +set dedicated 1 +exec server.cfg&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTE:&lt;/span&gt; "dedicated 1" does not send a heartbeat to the master server.&lt;br /&gt;You will see the game console.  Type "status" to ensure the game is running.&lt;br /&gt;&lt;br /&gt;Use the 'dedicated 2' option if you want your server to appear in the master server list.  Otherwise the server will only appear in your local network list what you run the client.&lt;br /&gt;&lt;br /&gt;To make a public server, make sure to assign a static IP address to your server, and set up your router to forward port 30720 traffic to that address.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://tremulous.net/forum/index.php?topic=3586.0"&gt;this discussion&lt;/a&gt; for the details.&lt;br /&gt;&lt;br /&gt;8. Get a list of console commands with:&lt;br /&gt;&lt;br /&gt;cmdlist&lt;br /&gt;&lt;br /&gt;For example, change the map by issuing the command: map &lt;mapname&gt;; example: map atcs&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9. To shutdown the game, type:&lt;br /&gt;&lt;br /&gt;killserver&lt;br /&gt;&lt;br /&gt;10. To exit the game console, type:&lt;br /&gt;&lt;br /&gt;quit&lt;br /&gt;&lt;br /&gt;&lt;/mapname&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-3459477375798486366?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/3459477375798486366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=3459477375798486366' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3459477375798486366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/3459477375798486366'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2007/12/how-to-set-up-tremulous-server-on.html' title='How to set up a Tremulous server on Ubuntu Linux'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-8361007769571471929</id><published>2007-11-12T21:44:00.002-05:00</published><updated>2010-07-22T19:14:10.256-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delicious'/><category scheme='http://www.blogger.com/atom/ns#' term='bookmark'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='reminder'/><category scheme='http://www.blogger.com/atom/ns#' term='pipes'/><title type='text'>Del.icio.us Reminder Service with Yahoo! Pipes</title><content type='html'>This is a Yahoo! pipe that mimics the TagMindr.com reminder service.  It scans your del.icio.us bookmarks for the tags 'mymindr' and 'reminder:yyyy-mm-dd', then returns the results.  If you specify your output as rss, you can subscribe to this pipe with your favorite newsreader.  Use it to bookmark links, then remind you on a specific date.  No more forgetting those gift ideas!&lt;br /&gt;&lt;br /&gt;Here's how to do it:&lt;br /&gt;&lt;br /&gt;Head over to &lt;a href="http://pipes.yahoo.com/pipes/person.info?eyuid=1XXym2A.pGX68NIkUroU"&gt;http://pipes.yahoo.com/pipes/mlf1660&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Clone the pipe to make your own copy.&lt;br /&gt;&lt;br /&gt;Enter your del.icio.us username into the default field of the username input.&lt;br /&gt;&lt;br /&gt;Enter the date you want the pipe to search your del.icio.us tags for.  The date formatter will reformat it to the correct format.  For example, you could put 12/1/07 for December 1, 2007, and it will be reformatted to 2007-12-01.  However, entering 'now' into the default value will be more useful, and is necessary if you want to set up an automatic feed to your news reader.  The 'now' function returns the current server date and time, set to the GMT/UTC timezone.  Adjust for your own timezone by adding or subtracting the appropriate number of hours, such as now - 5hours.&lt;br /&gt;&lt;br /&gt;Save and run the pipe.&lt;br /&gt;&lt;br /&gt;Finally, under the 'More options' dropdown, select either 'Subscribe wih Bloglines, or 'Get as RSS' if you use a different news reader.  To manually subscribe to the pipe's rss output, the url will be something like:&lt;br /&gt;&lt;br /&gt;http://pipes.yahoo.com/pipes/pipe.run?_id=[your pipe id here]&amp;amp;_render=rss&amp;amp;dateinput1=now+[+ or -]+[your GMT offset here]&amp;amp;username=[your del.icio.us username here]&lt;br /&gt;&lt;br /&gt;Your reader will invoke the pipe, which will scan del.icio.us bookmarks for the mymindr and reminder date tags.  If a hit is found, your news reader will display the bookmark reminder for you, on the date that you specified in the reminder tag.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-8361007769571471929?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/8361007769571471929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=8361007769571471929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/8361007769571471929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/8361007769571471929'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2007/11/delicious-reminder-service-with-yahoo.html' title='Del.icio.us Reminder Service with Yahoo! Pipes'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-7404947906899475585</id><published>2007-10-27T11:37:00.003-04:00</published><updated>2010-08-14T18:02:08.894-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cellphone'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><title type='text'>How to forward Gmail messages to your cellphone</title><content type='html'>You can do this even if your cellphone account doesn't have any internet access.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Find your cell phone service provider's SMS gateway &lt;a href="http://en.wikipedia.org/wiki/SMS_gateways#Email_to_SMS"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Create a GMail filter that matches certain criteria, say from:wife or from:BigImportantClient.&lt;/li&gt;&lt;li&gt;In the Next Step, click the "Forward it to" checkbox, and fill in the textbox with the SMS gateway email adress.  For T-Mobile, this would be &lt;i&gt;number&lt;/i&gt;@tmomail.net, for example 8005551212@tmomail.net.&lt;/li&gt;&lt;/ol&gt;Test your setup by sending mail to your GMail account.  It may take a few minutes for the message to be forwarded, so be patient.&lt;br /&gt;&lt;br /&gt;Be aware that certain fees may be applied by your service provider.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-7404947906899475585?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/7404947906899475585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=7404947906899475585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/7404947906899475585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/7404947906899475585'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2007/10/forward-your-gmail-to-your-cellphone.html' title='How to forward Gmail messages to your cellphone'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-221934674632642784</id><published>2007-10-10T19:15:00.002-04:00</published><updated>2010-07-22T19:15:27.889-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filter'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='label'/><title type='text'>GMail hack: How to identify messages without an attachment</title><content type='html'>I send email to my own GMail account all the time, both to back up files, and as a to-do list of things I need to take care of later.  As a general rule, if the message has an attachment, I'm probably trying to back up a file.  If there is no attachment, the message should go to my to do list for later action.&lt;br /&gt;&lt;br /&gt;I wanted to set up a filter to be able to distinguish between the two types of messages.  The filter should apply a label based on whether or not the message has an attachment.  For messages with an attachment, the filter should apply a "backup" label, and for those without an attachment, it should apply a "to do" label.&lt;br /&gt;&lt;br /&gt;It turns out that GMail search cannot find just messages that do not have an attachment.  It does a good job at finding messages &lt;i&gt;with&lt;/i&gt; attachments, but otherwise returns a mixed set of messages with and without attachments.  For example, negating the "has" operator with "-has:attachment", does not return the expected result.&lt;br /&gt;&lt;br /&gt;The solution is to apply a label to messages having an attachment, then search and filter with the "-label" operator.  Here's how:&lt;br /&gt;&lt;br /&gt;STEP 1: LABEL MESSAGES THAT HAVE ATTACHMENTS&lt;br /&gt;&lt;br /&gt;Search for messages having an attachment by using the "has:attachment" operator, then apply the "backup" label to the result set.&lt;br /&gt;You can also create a filter for messages having an attachment, then apply the "backup" label in the next step.&lt;br /&gt;&lt;br /&gt;STEP 2: SEARCH FOR MESSAGES WITHOUT THE LABEL&lt;br /&gt;&lt;br /&gt;Now you can search for messages without attachments by using the "-label:hasAttachment" operator.  GMail will return only the messages that do &lt;i&gt;not&lt;/i&gt; have an attachment.&lt;br /&gt;&lt;br /&gt;MAKING IT AUTOMATIC.&lt;br /&gt;&lt;br /&gt;You can set up a filter to apply the the "backup" label automatically.  Enter (from:me to:me has:attachment) as the filter criteria in the "Has the words" field.  Then in the next step, apply the "backup" label.&lt;br /&gt;&lt;br /&gt;All incoming messages having an attachment will receive the "backup" label, and you can now search your messages for your backed up files with "(from:me to:me label:backup)".&lt;br /&gt;&lt;br /&gt;However, this only solves part of the problem.  What if you want a filter to apply your "to do" label to messages that do not have attachments?  In that case, you set up a second filter to with "(from:me to:me -label:backup)".  Negating the label operator will give you only the messages without attachments.&lt;br /&gt;&lt;br /&gt;Notice that it's important that the previous filter run first, so that the "backup" label is applied.  Otherwise the "-label:backup" operator will not work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-221934674632642784?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/221934674632642784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=221934674632642784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/221934674632642784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/221934674632642784'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2007/10/gmail-hack-identifying-messages-without.html' title='GMail hack: How to identify messages without an attachment'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-4402527893380324451</id><published>2007-09-25T22:19:00.001-04:00</published><updated>2010-07-22T19:17:57.191-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='max_allowed_packet'/><category scheme='http://www.blogger.com/atom/ns#' term='phpmyadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='xampp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>MySQL server has gone away</title><content type='html'>Handling error 2006: MySQL server has gone away on a windows xampp installation.&lt;br /&gt;&lt;br /&gt;Summary: xampp installation on Windows XP, error encountered by a PHP script while uploading large files to a mysql database server.&lt;br /&gt;&lt;br /&gt;This is caused by a mysql max_allowed_packet setting, which by default is set to 1M.&lt;br /&gt;&lt;br /&gt;You can confirm the setting by&lt;br /&gt;&lt;ul&gt;&lt;li&gt;checking the value in sql by issuing a show variables command, or&lt;/li&gt;&lt;li&gt;by checking the system variables in phpmyadmin.&lt;/li&gt;&lt;/ul&gt;To change the setting, you need to edit the my.cnf file in your c:\...\xampp\sql\bin directory and change the default value of 1M to something larger, for example 16M.  NOTE: Change the directory path to its actual value.&lt;br /&gt;&lt;br /&gt;You may see the file named simply as "my", and it may also look like a shortcut.  In this case, you cannot click on the file icon to open it.  Instead, go start --&gt; run and issue the command: notepad.exe c:\...\xampp\mysql\bin\my.cnf.  Again, change the directory path to its actual value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-4402527893380324451?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/4402527893380324451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=4402527893380324451' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4402527893380324451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/4402527893380324451'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2007/09/mysql-server-has-gone-away.html' title='MySQL server has gone away'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-496815454207826221</id><published>2007-07-25T13:14:00.001-04:00</published><updated>2010-07-22T19:18:33.518-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='admin'/><category scheme='http://www.blogger.com/atom/ns#' term='runas'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Windows RunAs Problems Helped</title><content type='html'>This is a nasty hack to handle a MS security model shortcoming.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Secondary Logon service must be enabled!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Write this bat file as a wrapper for runas.  Put it in a shared area, such as C:\Documents and Settings\All Users\Documents&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You can't pipe a password in to runas.  For example, this won't work: ECHO %PASSWORD% | runas /user:%USERNAME% %CMD%.  Instead, you can use the /savecred switch to save the password to the system.  You must run the program once so the password is saved, like this: runas /savecred /user:%USERNAME% %CMD%.  You will be prompted for the password this once time, but the system will look up the password next time you run it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Set up an admin level user with a password, then edit the registry to keep the user from appearing on the welcome screen, like this: HKEY_LOCAL_MACHINE&lt;wbr&gt;\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&lt;wbr&gt;\SpecialAccounts\UserList.  Add the username you wish to hide as a DWORD value. Set the value to 0 (zero).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Execute a batch script like this:&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="margin-left: 40px;"&gt;@ECHO OFF&lt;br /&gt;SET USERNAME=computer-name\user-name&lt;br /&gt;SET PASSWORD=password&lt;br /&gt;SET CMD="C:\Program Files\program to run"&lt;br /&gt;RUNAS /SAVECRED /USER:%USERNAME% %CMD%&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-496815454207826221?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/496815454207826221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=496815454207826221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/496815454207826221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/496815454207826221'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2007/07/windows-runas-problems-helped.html' title='Windows RunAs Problems Helped'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20307088.post-113604957687210251</id><published>2006-01-03T23:30:00.001-05:00</published><updated>2010-07-21T21:19:51.295-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flickr'/><title type='text'>Getting hits on Flickr</title><content type='html'>Besides by taking great pictures I mean ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keep adding new content&lt;/span&gt;&lt;br /&gt;It's like blogging.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tag early and often.&lt;/span&gt;&lt;br /&gt;As many as you can think of: rose flower red thorn petal zuzu. Nikon. You get the idea. People search on tags.  Include synonyms -- multiple words with the same or similar meanings (tv/television, or Netherlands/Holland/Dutch), and plurals (cat and cats) since you don't know what variant people might use.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Add good titles and descriptions.&lt;/span&gt;&lt;br /&gt;People also search on titles and descriptions.  Be titular and descriptive.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Enable your comments.&lt;/span&gt;&lt;br /&gt;Make sure other Flickr users can comment on your photos. Check your default settings. If you upload as private, then change to public, you may not be getting what you want.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Join lots of groups.&lt;/span&gt;&lt;br /&gt;Then add your photos to the group pool. &lt;span style="font-style: italic;"&gt;Read the terms.&lt;/span&gt; Don't abuse the group.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Make contacts.&lt;/span&gt;&lt;br /&gt;Find popular people and make contact with them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Comment&lt;/span&gt;&lt;br /&gt;Comment on their photos.  Be generous and supportive.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Link&lt;/span&gt;&lt;br /&gt;This idea might be a bit controversial, but it's like a trackback. Comments accept some HTML. Put a link to one of your photos in your comment about someone else's photo. Photos selected as &lt;span style="font-style: italic;"&gt;interesting&lt;/span&gt; (see the Explore page) get lots of views and therefore lots of comments. People will be reading them and might click on your link and even view your photo stream (be sure to put a link to the other person's picture in your own comments to drive traffic back their way).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Take pictures of news events&lt;/span&gt;&lt;br /&gt;Like the fire in London&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Take pictures of gaffes&lt;/span&gt;&lt;br /&gt;Darwin awards, a crashed UPS truck, a defaced Starbucks sign&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nudes&lt;/span&gt;&lt;br /&gt;'Nuff said&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Blog&lt;/span&gt;&lt;br /&gt;Draw attention to your photos in your blog.  Not a blogger?  You're about the only one!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Subscribe to your recent activity feeds.&lt;/span&gt;&lt;br /&gt;This won't get you more hits, but at least you don't have to keep logging on to Flickr to see what's going on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20307088-113604957687210251?l=minorpoint.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://minorpoint.blogspot.com/feeds/113604957687210251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20307088&amp;postID=113604957687210251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/113604957687210251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20307088/posts/default/113604957687210251'/><link rel='alternate' type='text/html' href='http://minorpoint.blogspot.com/2006/01/getting-hits-on-flickr.html' title='Getting hits on Flickr'/><author><name>michael</name><uri>http://www.blogger.com/profile/17461895994537138518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
