<?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-3034230779454603134</id><updated>2011-11-27T15:43:02.852-08:00</updated><category term='oregon'/><category term='sad'/><category term='Arcade'/><category term='Microsoft'/><category term='DNS'/><category term='Desktop'/><category term='Free Software Foundation'/><category term='Standards'/><category term='perl'/><category term='Photos'/><category term='search engine'/><category term='Philosophy'/><category term='Free Software'/><category term='Eben Moglen'/><category term='Windows'/><category term='Wine'/><category term='open source'/><category term='Firewall'/><category term='Kitten-Fu'/><category term='freedom'/><category term='Chromium'/><category term='Themes'/><category term='Games'/><category term='bing'/><category term='Chrome'/><category term='python'/><category term='FTP'/><category term='Food'/><category term='Networking'/><category term='script'/><category term='keyboard'/><category term='apt-cacher-ng'/><category term='compiz'/><category term='Terminal'/><category term='Apache'/><category term='Web Apps'/><category term='review'/><category term='Religion'/><category term='blogs'/><category term='Mercury'/><category term='metacity'/><category term='humor'/><category term='MySQL'/><category term='recycling'/><category term='law'/><category term='Office'/><category term='Thunderbird'/><category term='tutorial'/><category term='Opera'/><category term='Sounds'/><category term='Pericles'/><category term='Server'/><category term='OpenOffice'/><category term='robots'/><category term='chroot'/><category term='vnc'/><category term='Google'/><category term='Gnome'/><category term='electronics'/><category term='patents'/><category term='PHP'/><category term='sudo'/><category term='Firefox'/><category term='software'/><category term='Linux'/><category term='Operating Systems'/><category term='Ubuntu'/><category term='Cookies'/><category term='Databases'/><category term='Television'/><category term='bloat'/><category term='data'/><category term='ATtiny2313'/><category term='File Management'/><category term='UVOG'/><title type='text'>Open Computing</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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>64</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-5076077426021013608</id><published>2011-02-23T13:15:00.000-08:00</published><updated>2011-02-23T13:20:57.864-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bing'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine'/><title type='text'>Google vs Bing</title><content type='html'>As a computer instructor, I am often asked why I prefer Google over Yahoo or Microsoft's search engine (whatever they are calling it this year). &amp;nbsp;80% of the world uses Google, which can be a little scary to think about. &amp;nbsp;It would be so easy for them to abuse their power. &amp;nbsp;I will be the first to admit that they have gotten a little less cool in the last five years, and I wish they had an advanced version that had less hand-holding and would let me just get on with my searches, but even with all that, Google is miles above their competition in a few key areas. &amp;nbsp;(I'm not going to really talk about Yahoo here, they have about the same market share as Microsoft, but they have too many ads and they don't try very hard to make their search better than any one else's)&lt;br /&gt;&lt;br /&gt;No matter how "evil" Google gets, rest assured that Microsoft has done worse. &amp;nbsp;I should give some of Microsoft's history on here sometime, that would be fun. &amp;nbsp;Let's just say that you don't get to the top of the Business software game by being nice.&lt;br /&gt;&lt;br /&gt;Google still has a sense of humor, although it's been getting dimmer over the years, and their April fools jokes are more about highlighting their newest product than having fun, and the Google Doodles are more about public relations than about celebration. &amp;nbsp;But, compared to any of the older corporations, Google is as playful as a puppy.&lt;br /&gt;&lt;br /&gt;Google is a friend to Linux and Mac. &amp;nbsp;Because of the other markets that Microsoft is in, they cannot afford to be nice to Linux or Mac, and the more "features" they have that are incompatible the more people who will be unhappy with a move away from windows. &amp;nbsp;Enter Silverlight, .Net, ActiveX and all of their other web products. &amp;nbsp;Try using IE9 on anything but the newest Windows. &amp;nbsp;And, I'm using Google Chrome on my Ubuntu box to write this post.&lt;br /&gt;&lt;br /&gt;Lastly, Google's results are better. &amp;nbsp;I have a fun example for you all, and I know it's nothing but one example, but it shows what each company thinks of getting relevant search results to the user, and really, at the end of the day, that's what we are all looking for.&lt;br /&gt;&lt;br /&gt;I did a straight image search for the word rose, and then added the color filter of green, and here are the results:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xeXN0pF5auA/TWV3dl9A36I/AAAAAAAAABQ/BO2nZYNBlHY/s1600/bing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="http://2.bp.blogspot.com/-xeXN0pF5auA/TWV3dl9A36I/AAAAAAAAABQ/BO2nZYNBlHY/s320/bing.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Bing has ONE green rose out of fifteen results. &amp;nbsp;You get better results searching for green rose in the first place and ignoring the color filter.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-06OHTq33JaA/TWV3frmDfuI/AAAAAAAAABU/o_1T2mFCpSA/s1600/google.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://4.bp.blogspot.com/-06OHTq33JaA/TWV3frmDfuI/AAAAAAAAABU/o_1T2mFCpSA/s320/google.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Google has twelve green roses, two pictures from the movie Green Rose, and ONE rose that is not green.&lt;/div&gt;&lt;br /&gt;Like I said, this isn't a rigid test, just one example I stumbled on while working on a lesson plan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-5076077426021013608?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/5076077426021013608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=5076077426021013608' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5076077426021013608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5076077426021013608'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2011/02/google-vs-bing.html' title='Google vs Bing'/><author><name>communitycomputercenter</name><uri>http://www.blogger.com/profile/12516899405069258544</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://2.bp.blogspot.com/-xeXN0pF5auA/TWV3dl9A36I/AAAAAAAAABQ/BO2nZYNBlHY/s72-c/bing.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-1413292011643116050</id><published>2011-01-08T02:51:00.000-08:00</published><updated>2011-01-10T04:05:30.209-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kitten-Fu'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='UVOG'/><title type='text'>2D Games with Kitten-Fu, Part Three</title><content type='html'>Alright, so &lt;a href="http://opencomputing.blogspot.com/2010/12/2d-games-with-kitten-fu-part-two.html"&gt;last time&lt;/a&gt; I promised you a second cat and some grass for them to walk on.  When I originally got this far in my program I just copied and pasted and created a few if statements in order to take care of the second cat, but instead I'm going to use objects because they are going to be more efficient in this case (where the cats aren't significantly different in how they behave.)&lt;br /&gt;Kitten-Fu is at version alpha 17 now, which is what i will be using for this tutorial.  The earlier and later versions should be 100% compatible with what we have done so far.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Sprites&lt;/h3&gt;&lt;br /&gt;We have two sprites to create before we work on the next bit of programing.  The first is a copy of our first cat with some coloring changes.  I also changed the head shape and the way the tail waves-this way they will both have a little different character without needing to re-do all that animation work from earlier.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ZF1ngbiTm1w/TShHfIerhWI/AAAAAAAAAR0/_hRvYU4GXdk/s1600/spottedtail-big.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 80px;" src="http://2.bp.blogspot.com/_ZF1ngbiTm1w/TShHfIerhWI/AAAAAAAAAR0/_hRvYU4GXdk/s320/spottedtail-big.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5559772340166559074" /&gt;&lt;/a&gt;&lt;br /&gt;Next, I'll make a ground sprite.  I'm not really happy with the way this turned out.  I'm thinking of making a new sprite that is just grass and will be placed higher on the screen along with a second sprite of just dirt at the bottom to give it that street fighter pseudo 3D feel.  Remember, I am sticking to 4 colors per 16x16 block to help keep the 8bit retro style.  Also remember that transparent counts as a color.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZF1ngbiTm1w/TShH6hCSifI/AAAAAAAAAR8/X4z_epU9KsQ/s1600/ground-big.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 80px; height: 80px;" src="http://3.bp.blogspot.com/_ZF1ngbiTm1w/TShH6hCSifI/AAAAAAAAAR8/X4z_epU9KsQ/s320/ground-big.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5559772810614835698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;The Code&lt;/h3&gt;&lt;br /&gt;Let's start with adding the ground tile, since that's pretty simple.  First create the ground stamp:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -210px;"&gt;stamp ground("ground.png");&lt;/pre&gt;No need to worry about slicing it at this point.  When we have more variety then we can convert it, but for now a stamp will work just fine.&lt;br /&gt;&lt;br /&gt;Next, let's add a for loop that utilizes the stamp we just created and place it at the beginning of our painting section (after we clear the screen, of course)&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 77px;"&gt;  for (int i = 0; i &lt; 8; i++) {&lt;br /&gt;    ground.put(i*16, 104);&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;If you compile your program now, it should display the ground tiles across the bottom of the screen.&lt;br /&gt;&lt;br /&gt;So far we have just been using structured programing, meaning the code just goes through in order what we told it to do without employing any fancy code.  We're going to get a whole lot fancier in just a bit.  The next thing we are going to do is add a second cat.  We COULD just copy our code and rename all of our variables with a 1 and 2 after them, but what if we need to add a third or fourth cat? (for example if we were making a kitteny RPG)  That would get old really fast as we duplicated all of our code four times.  So, to solve that we are going to employ classes.&lt;br /&gt;&lt;br /&gt;I'm going to move all of the code having to do with the cat logic and painting into a kitten class.  Since I am still fairly new to object oriented programing, I don't really feel like I can explain what I'm doing in very high detail, so I'm just going to show you what I ended up with.&lt;br /&gt;&lt;br /&gt;If you don't know what a class is, you can think of it as a cookie cutter that you create with its own variables and functions (these have different names when they are a part of a class ... whatever)  Once we have the class/cookie cutter set up, we can use it to create instances of our class (the actual cookies).  This way, we can tell the program what a cat should look like and then make as many as we need with minimal needless duplication of code.&lt;br /&gt;&lt;br /&gt;If you know HTML at all, this has the same function as CSS does, it's f*ing amazing and lets you do all sorts of cool things to control all your similar processes all at once.&lt;br /&gt;&lt;br /&gt;Without further ado, let's look at the kitten class code (this goes right after we include KFu on line 5.)  Actually, I take that back, I'm going to be converting the code into object orientedness in two passes.  This first will be the game logic, the second will be the painting portion which I will cover in more depth than the game logic.  okay, for real this time:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -60px"&gt;int framecount = 0;&lt;br /&gt;&lt;br /&gt;class kitten {&lt;br /&gt;  public:&lt;br /&gt;  int kx;&lt;br /&gt;  int ky;&lt;br /&gt;  int walkleft;&lt;br /&gt;  int walkright;&lt;br /&gt;  int facing;&lt;br /&gt;  kitten();&lt;br /&gt;  void step();&lt;br /&gt;  private:&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;I made framecount into a global variable for now and changed the k1x and k1y variables into just kx and ky (make sure they get changed in all the places you were using them!)&lt;br /&gt;&lt;br /&gt;Next, let's make the constructor:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -270px"&gt;kitten::kitten() {&lt;br /&gt;  kx = 110;&lt;br /&gt;  ky = 88;&lt;br /&gt;  walkleft = 0;&lt;br /&gt;  walkright = 0;&lt;br /&gt;  facing = 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You'll notice that the above code was basically used to declare and initialize the variables that we're using in this class.  Go ahead and delete the duplicate variables at the top of main().&lt;br /&gt;&lt;br /&gt;At this point we need to create an instance of our kitten class in main().  I'm going to call it kitten1, but you can name it anything you like.  Since we are going to add the paint routine to the class, we will need to call it after we create the screen, so go ahead and add this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 71px"&gt;  kitten kitten1;&lt;/pre&gt;&lt;br /&gt;And now let's make a method (it's basically a function) which will take our actual game logic code that we reference the kitten in and make it available to use with the class:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -390px"&gt;void kitten::step() {&lt;br /&gt;  if (framecount%2 == 0) {&lt;br /&gt;    if (walkleft == 1) {&lt;br /&gt;      kx = (kx - 1);&lt;br /&gt;      if (kx &lt; -16) { kx = 128; }&lt;br /&gt;    }&lt;br /&gt;    if (walkright == 1) {&lt;br /&gt;      kx = (kx + 1);&lt;br /&gt;      if (kx &gt; 128) { kx = -16; }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Again, you'll want to delete the code that we have now duplicated and replace it with the following:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 105px"&gt;  kitten1.step();&lt;/pre&gt;&lt;br /&gt;Before we're done, take a look at the SDL input handling.  We use walkleft, walkright and facing there ... we'll need to point these to our kitten1 instance of the kitten class by adding kitten1. in front of each variable.&lt;br /&gt;&lt;br /&gt;Okay!  Go ahead and compile your code and make sure it still runs at this point before you continue.  If you get an error, read it and take a good look at the line number it gives (if it gives one).  Make double sure that you didn't leave anything important out like a semi-colon or a brace.  If you still can't get it to compile, take a look at the sample code at the end of this post - we are doing some major revisions to the structure of the code and that can be a little confusing at times.&lt;br /&gt;&lt;br /&gt;Once you have your code compiling and running again, let's break it again!  we're going to turn the painting routine into another method in our class.&lt;br /&gt;&lt;br /&gt;Before we start, we need to change the way we declare our slices and stamps again so that we can separate them into variable declarations and variable values just like we did with the other variables.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 942px;"&gt;  stamp* sprites;&lt;br /&gt;  sprites = new stamp("kitten1.png", KFU_LOAD_FLIPH | KFU_LOAD_NORMAL);&lt;br /&gt;  slice* stand;&lt;br /&gt;  stand   = new slice(*sprites, 0, 0, 16, 16);&lt;br /&gt;  slice* walk[4];&lt;br /&gt;  walk[0] = new slice(*sprites, 16, 0, 16, 16);&lt;br /&gt;  walk[1] = new slice(*sprites, 32, 0, 16, 16);&lt;br /&gt;  walk[2] = new slice(*sprites, 48, 0, 16, 16);&lt;br /&gt;  walk[3] = new slice(*sprites, 32, 0, 16, 16);&lt;br /&gt;&lt;/pre&gt;I also got rid of the kitt1 from the name of the variables since that won't make a lot of sense when it is part of a generic class.&lt;br /&gt;&lt;br /&gt;So, what are those asterisks that we added to our code for?  &lt;!-- Usually when we create a variable the compiler knows how much space to allot it determined by its type, so an int will get 4 bytes of memory to store its value.  Well, when we create our own types, such as step or when we use a type that has been created for us such as slice, stamp etc from KFu, then how does the compiler know how much space to allow?  The asterisk is used to denote that the variable in question is not going to be created yet, so just save a spot in memory large enough to keep a pointer to the REAL data that will have space allocated for it when it is created.  --&gt; They are memory pointers that we are using to separate the variables.  Jeff is possibly changing kfu to make this easier, so I'm not going to try and explain it :-) If you want to know more, read a good introduction to pointers in c++.&lt;br /&gt;&lt;br /&gt;Next, we should add the following to the private section of our class:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 942px;"&gt;  stamp* sprites;&lt;br /&gt;  slice* stand;&lt;br /&gt;  slice* walk[4];&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And the following to our constructor:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 942px;"&gt;  sprites = new stamp("kitten1.png", KFU_LOAD_FLIPH | KFU_LOAD_NORMAL);&lt;br /&gt;  stand   = new slice(*sprites, 0, 0, 16, 16);&lt;br /&gt;  walk[0] = new slice(*sprites, 16, 0, 16, 16);&lt;br /&gt;  walk[1] = new slice(*sprites, 32, 0, 16, 16);&lt;br /&gt;  walk[2] = new slice(*sprites, 48, 0, 16, 16);&lt;br /&gt;  walk[3] = new slice(*sprites, 32, 0, 16, 16);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now, we need to make a method that replaces the painting code:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 942px;"&gt;void kitten::paint() {&lt;br /&gt;  if (walkleft == 1) {&lt;br /&gt;    walk[anim4]-&gt;put(kx, ky);&lt;br /&gt;  } else if (walkright == 1) {&lt;br /&gt;    walk[anim4]-&gt;put(kx, ky, KFU_PUT_FLIPH);&lt;br /&gt;  } else {&lt;br /&gt;    if (facing == 0) {&lt;br /&gt;      stand-&gt;put(kx, ky);&lt;br /&gt;    } else {&lt;br /&gt;      stand-&gt;put(kx, ky, KFU_PUT_FLIPH);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Since we use the variable anim4 in our class method, let's make it a global variable next to framerate for now.  And then of course delete the original painting code and point to the class method with the following:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 942px;"&gt;  kitten1.paint();&lt;/pre&gt;&lt;br /&gt;Pretty cool, huh?  Make sure your code still runs and debug as necessary.&lt;br /&gt;&lt;br /&gt;wooo .. let's take a deep breath and take a look over all the code.  Clean up any extra spaces and comment as necessary.  Make sure you understand and recognize all of the various parts of the program still.&lt;br /&gt;&lt;br /&gt;Now for the fun part, let's add that second kitten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-1413292011643116050?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/1413292011643116050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=1413292011643116050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1413292011643116050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1413292011643116050'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2011/01/2d-games-with-kitten-fu-part-three.html' title='2D Games with Kitten-Fu, Part Three'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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://2.bp.blogspot.com/_ZF1ngbiTm1w/TShHfIerhWI/AAAAAAAAAR0/_hRvYU4GXdk/s72-c/spottedtail-big.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-3059511337442112180</id><published>2010-12-07T23:15:00.000-08:00</published><updated>2010-12-09T17:59:15.839-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kitten-Fu'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='UVOG'/><title type='text'>2D Games with Kitten-Fu, Part Two</title><content type='html'>When we left off in &lt;a href="http://opencomputing.blogspot.com/2010/12/2d-games-with-kitten-fu-part-one.html"&gt;part one&lt;/a&gt;, you should have had a kitten that skated across the screen forward and backward.  This would be awesome for a hover ship, but let's animate our little cat so that its legs move while it is walking.  (oh, I'm also using the KFu alpha 13 library now)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Sprites&lt;/h3&gt;&lt;br /&gt;We're going to use a sprite sheet for our cat, so that means adding all of our cat's various poses to a single .png file.  I'm going to limit myself to 16x16 for each of the kitten's poses, that way I don't have to keep track of what size I made what, and it helps with the retro look too.  Kitten-Fu allows you to specify any size you choose, just make sure you keep good track of your sprites if you make them irregular.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZF1ngbiTm1w/TP9LvybyiTI/AAAAAAAAARY/n4ntjndsgTo/s1600/kitty1v.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 319px; height: 80px;" src="http://3.bp.blogspot.com/_ZF1ngbiTm1w/TP9LvybyiTI/AAAAAAAAARY/n4ntjndsgTo/s320/kitty1v.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5548236550308006194" /&gt;&lt;/a&gt;&lt;br /&gt;You can see four poses of my cat here.  The first is the original position from part one, the second is with the right legs extended, the third is with all four legs in the middle.  I was purposely vague on which leg was in front for this middle pose so that I didn't need to draw a second center pose.  The last position is with the left legs extended.  It took me quite a while to get the animation correct.  If you are drawing your own sprites, I would recommend that you get the basic shape you want, then code the animation sequence, and then fine tune it when you can see the changes in action.  I used a couple of YouTube videos to help me get the leg shapes correct.&lt;br /&gt;&lt;br /&gt;My first attempt at animating my cat was in the middle of the night while I was almost asleep.  I'm including it here as an example of what &lt;b&gt;not&lt;/b&gt; to do!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ZF1ngbiTm1w/TP9MA5SB0cI/AAAAAAAAARg/cjFlRMIfkwo/s1600/kitty0animated.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 80px; height: 80px;" src="http://2.bp.blogspot.com/_ZF1ngbiTm1w/TP9MA5SB0cI/AAAAAAAAARg/cjFlRMIfkwo/s320/kitty0animated.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5548236844203889090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;The Code&lt;/h3&gt;&lt;br /&gt;So far we've only been working with a KFu stamp, and we really haven't tapped its full potential at all.  One of the cooler things a stamp is good for is making "slices".  A slice is a piece of a stamp that is cut out and used as a sprite the same way we used the stamp in part one.  What makes a slice special is that it doesn't take up more space in memory to use it.  We can load one sprite sheet, and then cut multiple slices from it, creating a veritable cornucopia of sprites on the actual screen!&lt;br /&gt;&lt;br /&gt;After we add the new kitten poses, we can leave our stamp code the same, but we're going to add our slice code underneath:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -195px"&gt;  slice kitt1stand(kitt1, 0, 0, 16, 16);&lt;/pre&gt;&lt;br /&gt;We'll also want to change where we put the kitt1 stamp to refer to the slice instead:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -780px"&gt;  kitt1stand.put(k1x, k1y);&lt;/pre&gt;&lt;br /&gt;Now we're going to use an array of slices for our animated kitten.  An array is a way to give a list of items numbers rather than names--this can be quite handy as we will see in a moment.  In this case, we're going to pre-load all four frames of our animation, and save them as slices.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -240px"&gt;  slice* kitt1walk[4];&lt;br /&gt;  kitt1walk[0] = new slice(kitt1, 16, 0, 16, 16);&lt;br /&gt;  kitt1walk[1] = new slice(kitt1, 32, 0, 16, 16);&lt;br /&gt;  kitt1walk[2] = new slice(kitt1, 48, 0, 16, 16);&lt;br /&gt;  kitt1walk[3] = new slice(kitt1, 32, 0, 16, 16);&lt;/pre&gt;&lt;br /&gt;You can see that for each slice above (for the animation and the first pose in kitt1stand) there are a couple different parts:&lt;br /&gt;&lt;br /&gt;kitt1stand or kitt1walk[x] are both slice names that we use later to call them into use, and after that are our options in the parentheses.  kitt1 refers to the stamp that we set up earlier on line 12 of part one.  The series of numbers refer to the x-position and y-position (the top left corner of the slice), and the height and width of the slice.  Of course the slices could overlap if we wanted them to, but for now that would make our cat look like a mutant.&lt;br /&gt;&lt;br /&gt;We can't just replace kitt1stand with kitt1walk, otherwise our kitten would be animated even while it was standing still, so we need a way to tell if the cat is moving, and only show the animated slice array while that is true.&lt;br /&gt;&lt;br /&gt;We already have a walkleft and a walkright variable that is set to true while the cat is moving, so we can just multi-purpose them!  The way we're going to solve our animation problem for now is to set a counter that will rotate through the numbers 0-3 every x frames.  We'll feed this number into the kitt1walk array and this will flip between all of the slices of the array in order.  Add the following code right before you clear the display and begin painting. (and, don't forget to add any relevant variable declarations at the top of the program!)&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -825px"&gt;  // ANIMATION //&lt;br /&gt;  if (framecount%8 == 0) {&lt;br /&gt;    ++anim4;&lt;br /&gt;    if (anim4 &gt;= 4) {&lt;br /&gt;      anim4 = 0;&lt;br /&gt;    }&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;Then, to make the counter tick, add the following to increment the frame counter every time through the game loop (I added it directly underneath the GAME LOGIC heading.)&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -705px"&gt;  ++framecount;&lt;/pre&gt;&lt;br /&gt;We can re-use this counter for anything that we want to also run with four frames, as long as we don't mind that it is running in tandem with our cat.&lt;br /&gt;&lt;br /&gt;Now that we've set up our animation, let's get it painted to the screen.  Add a ///&amp;nbsp;PAINTING&amp;nbsp;/// heading underneath the animation code, and let's add some if statements around where we put kitt1stand.  Basically, if walkleft or walkright equal 1, then we display kitt1walk, otherwise we display kitt1stand.  I could write out the code for this a little more compactly than I have it below, but since we are about to add flipping, this sets up our statement nicely for that:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -1050px"&gt;  if (walkleft == 1) {&lt;br /&gt;    kitt1walk[anim4]-&gt;put(k1x, k1y);&lt;br /&gt;  } else if (walkright == 1) {&lt;br /&gt;    kitt1walk[anim4]-&gt;put(k1x, k1y);&lt;br /&gt;  } else {&lt;br /&gt;    kitt1stand.put(k1x, k1y);&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;If you make your program at this point, you'll notice that the cat, although animated, moves way too fast (even for a ninja cat.)  We need a way to slow that kitten down.  How about a throttle on the game process?  every x frames, we will register a movement.  If we were working with smaller pixels, this would be less of a problem, but when your cat moves at 30 pixels per second, and your screen is only 128 pixels across ...&lt;br /&gt;&lt;br /&gt;In the GAME LOGIC section, underneath the frame counter, let's stick our movement controls into a throttle of sorts:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -735px"&gt;  if (framecount%2 == 0) {&lt;/pre&gt;&lt;br /&gt;Now when you make the file, the cat walks slower but, especially if you're on an older / slower computer, you'll notice that the cat fluctuates in speed depending on your CPU usage.  That's because I forgot that we need to use KFu's FPS thingy.  To set it up, we need to add the following lines to the top of our actual game code, right after we finish declaring our variables and slices.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -330px"&gt;  fps framerate(1000/30);&lt;br /&gt;  framerate.start();&lt;/pre&gt;&lt;br /&gt;Then, at the bottom, right before we flip to the screen, add the following:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -1245px"&gt;  framerate.delay();&lt;/pre&gt;&lt;br /&gt;we could have named framerate anything, and set the speed to anything we wanted.  I can imagine that you could change this number for underwater scenes, or something like that.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ZF1ngbiTm1w/TP9fNaQyRII/AAAAAAAAARo/75omZPAm2RI/s1600/kitty1animated.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 80px; height: 80px;" src="http://1.bp.blogspot.com/_ZF1ngbiTm1w/TP9fNaQyRII/AAAAAAAAARo/75omZPAm2RI/s320/kitty1animated.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5548257949936403586" /&gt;&lt;/a&gt;&lt;br /&gt;Everything should work now except for the fact that your cat can only face one direction!  Let's fix that (although, the moonwalking kitten is pretty cool.)&lt;br /&gt;&lt;br /&gt;KFu already has options set up to allow for flipping, all we need to do is activate them.  First, we need to create a flipped "instance" of our stamp.  This creates a complete copy of the stamp in the memory, so don't flip or rotate more than you'll actually need for your program.&lt;br /&gt;&lt;br /&gt;Your new stamp declaration should look like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -210px"&gt;  stamp kitt1("kitten1.png", KFU_LOAD_FLIPH | KFU_LOAD_NORMAL);&lt;/pre&gt;&lt;br /&gt;FLIPH is for flip horizontal, and then NORMAL is so you can load the regular file.  If you don't declare any positional variations, KFu assumes you only wanted NORMAL, but as soon as you start declaring variations, you have to tell it exactly what you want.&lt;br /&gt;&lt;br /&gt;Do you remember where we made our if statement a bit long winded for our cat animation?  Change your slice code to the following for when the cat is walking right:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0 -1170px"&gt;    kitt1walk[anim4]-&gt;put(k1x, k1y, KFU_PUT_FLIPH);&lt;/pre&gt;&lt;br /&gt;Now, the only remaining 'error' is when your cat stops walking, it always faces left ...  Using a variable on the key presses, see if you can flip kitt1stand to face the correct direction after he finishes walking.  I have a solution in the code included at the bottom of the post--see if you can figure it out without looking.&lt;br /&gt;&lt;br /&gt;So, I lied about showing you how to add another cat, that will have to wait until part three.  We'll create a kitten object, and work on the logic that will make kitten-2 follow kitten-1, as well as some grass for them to walk on.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Files&lt;/h3&gt;&lt;br /&gt;You can download everything from part 2 here: &lt;a href="http://communitycomputercenter.com/userfiles/kittens-02.tar.gz"&gt;kittens-02.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* * *&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-3059511337442112180?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/3059511337442112180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=3059511337442112180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3059511337442112180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3059511337442112180'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/12/2d-games-with-kitten-fu-part-two.html' title='2D Games with Kitten-Fu, Part Two'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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/_ZF1ngbiTm1w/TP9LvybyiTI/AAAAAAAAARY/n4ntjndsgTo/s72-c/kitty1v.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-3421080180180551753</id><published>2010-12-03T15:28:00.000-08:00</published><updated>2010-12-16T18:16:22.391-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kitten-Fu'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='UVOG'/><title type='text'>2D Games with Kitten-Fu, Part One</title><content type='html'>As part of the UVOG arcade project, Jeff has been working on a 2d graphics library for C++ called Kitten-Fu.  It's cute and fuzzy like a kitten but powerful like a ninja ...&lt;br /&gt;&lt;br /&gt;I'm going to be using Kitten-Fu (KFu) and other open software to create a retro, side-scrolling game about ... what else, ninja cats.&lt;br /&gt;&lt;br /&gt;As a way of introduction, I am a novice programmer who has dabbled in PHP and AVR Assembler.  I'm going to be blogging my very first C++ program during this series.&lt;br /&gt;&lt;br /&gt;First, we need to install the KFu library.  KFu has a couple of dependencies, so make sure you install them first:&lt;br /&gt;&lt;br /&gt;&lt;div class="term"&gt;&lt;em&gt;$&lt;/em&gt; sudo apt-get install build-essential libsdl1.2debian libsdl1.2-dev libsdl-image1.2 libsdl-image1.2-dev&lt;/div&gt;&lt;br /&gt;Once you have that, go to the &lt;a href="http://uvog.org/uvogwiki/index.php/Kitten-Fu"&gt;Kitten-Fu wiki page&lt;/a&gt; and download the latest version of the library.  I'm going to be using KFu alpha 10 to start with.  After you have the file downloaded, extract it and in a terminal, navigate to the extracted files and type:&lt;br /&gt;&lt;br /&gt;&lt;div class="term"&gt;&lt;em&gt;$&lt;/em&gt; sudo make install&lt;/div&gt;&lt;br /&gt;Now we have access to the KFu C++ libraries and can use them in our program.&lt;br /&gt;&lt;br /&gt;Now, let's create a folder for our program to live in, for example: /home/yourName/Programing/kittens&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Sprites&lt;/h3&gt;&lt;br /&gt;I already know that I want my program to involve cats, and since I'm better at drawing than coding at this point, I'm going to start by drawing a sprite and then worry about getting it to the screen.  For sprite creation, I use a program called &lt;a href="http://mtpaint.sourceforge.net/"&gt;MTPaint&lt;/a&gt; which is a great pixel editor.  You can use any graphics program you like.&lt;br /&gt;&lt;br /&gt;I drew my first cat at 16 by 16 pixels and in 4 colors, one of which (black) will end up transparent.  I saved my sprite as an 8bit .png, which is an indexed file format - perfect for making a retro game.  You could also use a 24bit .png which has alpha transparency (various shades of transparent) which lets you have pretty, smooth and curvy edges all at once!  Make sure to let the file know that you want the first color to be transparent.  In MTPaint this is through the save dialog.  Here's a screenshot of my final kitty:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_d0CxiLB7l4Y/TPgjWBvFYwI/AAAAAAAAAAg/CrRY-K902hI/s1600/kitten1-disp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_d0CxiLB7l4Y/TPgjWBvFYwI/AAAAAAAAAAg/CrRY-K902hI/s1600/kitten1-disp.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Code&lt;/h3&gt;&lt;br /&gt;Okay now let's create our program files.  I like to work with Nano, a command line text editor.  You should use whichever program you are comfortable with as long as it's a text editor and not a word processor.  (ie, not Open Office Writer or AbiWord, but using Kate or Gedit is fine)&lt;br /&gt;&lt;br /&gt;In my kittens folder, I create a new file titled kittens.cc with the following contents:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;// kittens&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include "KFu/KFu.h"&lt;br /&gt;using namespace kfu;&lt;br /&gt;&lt;/unistd.&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This tells me the name of my new program, and that I want to use the KFu library.  Save the file and then create another empty file named Makefile.  A makefile is a type of script file so that you don't have to type out the compile instructions every time:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;all: kittens_norun&lt;br /&gt;&lt;br /&gt;kittens_norun: kittens.cc&lt;br /&gt;&lt;tab&gt;&amp;nbsp;&lt;/tab&gt;g++ -o kittens kittens.cc -lKFu -Wall --pedantic&lt;br /&gt;&lt;br /&gt;kittens: kittens_norun&lt;br /&gt;&lt;tab&gt;&amp;nbsp;&lt;/tab&gt;./kittens&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;IMPORTANT: The spaces on lines 4 and 7 are really tabs, make sure you replace them in your code.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Okay, save that, and now let's get that sprite to the screen!  Open kittens.cc and add this to your file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -75px"&gt;int main(int argc, char* argv[]) {&lt;br /&gt;  screen display(128, 120, 640, 480);&lt;br /&gt;  stamp kitt1("kitten1.png");&lt;br /&gt;&lt;br /&gt;  kitt1.put(100, 100);&lt;br /&gt;  display.flip();&lt;br /&gt;&lt;br /&gt;  sleep(5);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Before we talk about what everything does, let's make sure it works:&lt;br /&gt;&lt;br /&gt;&lt;div class="term"&gt;&lt;em&gt;$&lt;/em&gt; &lt;kbd&gt;make kittens&lt;/kbd&gt;&lt;/div&gt;&lt;br /&gt;A smallish black screen should pop up and have a little cat standing in the middle of it, and then it should close after 5 seconds.  If this didn't happen, look back over all your code, and double check that everything is correct.  I do have the project files included at the bottom of this post if you need them.&lt;br /&gt;&lt;br /&gt;So, let's take a look at the code we just added.  &lt;tt&gt;int main(...) { ... }&lt;/tt&gt; is the wrapper for our actual program.  Pretty much everything we do will be included inside of it.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;screen display(128, 120, 640, 480);&lt;/tt&gt;  This sets up the parameters of our game screen.  The first two numbers are the width and height of the game window.  The next two numbers are the width and height of the screen.  The game space will expand and center in the available screen space.  This lets you change the size of the pixels on the screen.  With the setup that we're using, we'll have a fairly small screen, and the pixels will be magnified x4.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;stamp kitt1("kitten1.png");&lt;/tt&gt;  This line sets up our stamp, giving it a name (kitt1) and telling it which file to use.&lt;br /&gt;&lt;br /&gt;That's it for the setup, now we get to actually place the kitten on the screen.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;kitt1.put(100, 100);&lt;/tt&gt;  Here, we name our stamp, tell it to "put" it to the screen, and tell it the x and y coordinates.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;display.flip()&lt;/tt&gt; is what actually paints the sprites to the screen.  Very important, don't leave this out!&lt;br /&gt;&lt;br /&gt;The last thing we do is tell it to do nothing for 5 seconds (&lt;tt&gt;sleep(5);&lt;/tt&gt;) and then it gets the the final } and closes our program.&lt;br /&gt;&lt;br /&gt;There are two things we need to add to our "game" to make it a bit more functional: movement, and a way to close it when we want rather than only letting it last for 5 seconds.  Both of these are going to involve key presses, so let's add those in!&lt;br /&gt;&lt;br /&gt;In between the screen set up and where we actually paint the cat, let's add a section:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -135px"&gt;/// HANDLE EVENTS ///&lt;br /&gt;  while (SDL_PollEvent(&amp;event)) {&lt;br /&gt;    switch (event.type) {&lt;br /&gt;      case SDL_KEYDOWN:&lt;br /&gt;        switch (event.key.keysym.sym) {&lt;br /&gt;          case SDLK_ESCAPE: done = 1; break;&lt;br /&gt;          default: break;&lt;br /&gt;        }&lt;br /&gt;      break;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This basically says, look at all the keys that are down, if you see the escape key get pressed, then done equals 1 and then skip to the end of this section.&lt;br /&gt;&lt;br /&gt;You will also need to add the following line to the top of your program, right after &lt;tt&gt;int main() {&lt;/tt&gt; in order to access the SDL event handling.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -90px"&gt;SDL_Event event;&lt;/pre&gt;&lt;br /&gt;Now, we need to tell the program that it should should skip on down to the end of the entire program when we press escape.&lt;br /&gt;&lt;br /&gt;So, surrounding everything but the first few lines of setup, add a while statement:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -75px"&gt;int main(int argc, char* argv[]) {&lt;br /&gt;  SDL_Event event;&lt;br /&gt;  screen display(128, 120, 640, 480);&lt;br /&gt;  stamp kitt1("kitten1.png");&lt;br /&gt;&lt;br /&gt;  while (!done) {&lt;br /&gt;    ... your code ...&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We're going to have to set up the variable at the very top of our program, in between main() and the SDL_Event line:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -90px"&gt;int done = 0;&lt;/pre&gt;&lt;br /&gt;Now, we can clean up our code by removing &lt;tt&gt;sleep(5);&lt;/tt&gt; as well as &lt;tt&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/tt&gt; since we aren't using them any more.&lt;br /&gt;&lt;br /&gt;I guess I should mention that you should be compiling and running your program in between each set of changes so that you see the progression as we go along.&lt;br /&gt;&lt;br /&gt;So, let's make that kitten move!  Add the following line underneath the escape key press:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -270px"&gt;case SDLK_LEFT: walkleft = 1; break;&lt;/pre&gt;&lt;br /&gt;This sets the walkleft variable to 1.  Add the walkleft variable underneath the done variable:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -90px"&gt;int walkleft = 0;&lt;/pre&gt;&lt;br /&gt;All by itself, that doesn't do anything--we need to use that variable in an if statement in order to change the coordinates of our cat.&lt;br /&gt;&lt;br /&gt;First, change &lt;tt&gt;kitt1.put(100, 100);&lt;/tt&gt; to:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -405px"&gt;kitt1.put(k1x, k1y);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;now, let's preset our kitten's coordinates to the bottom right of the screen by setting our variables:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -105px"&gt;int k1x = 110, k1y = 88;&lt;/pre&gt;&lt;br /&gt;Now all we have to do is create our if statement and place it right before we put the cat to the screen:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -420px"&gt;/// GAME LOGIC ///&lt;br /&gt;  if (walkleft == 1) {&lt;br /&gt;    k1x = (k1x - 1);&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;If you run the file now, you'll notice that the cat smears itself across the screen, we need a way to clear the screen each time we paint.  So let's add the following right before we "put" our cat to the screen:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -495px"&gt;display.clearSurface();&lt;/pre&gt;&lt;br /&gt;Next, we need to get the kitten to stop moving after you let go of the left arrow.  We need to add a whole section to our Handle Events section right after the &lt;tt&gt;break;&lt;/tt&gt; for &lt;tt&gt;case SDL_KEYDOWN:&lt;/tt&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -390px"&gt;case SDL_KEYUP:&lt;br /&gt;        switch (event.key.keysym.sym) {&lt;br /&gt;          case SDLK_LEFT: walkleft = 0; break;&lt;br /&gt;          default: break;&lt;br /&gt;        }&lt;br /&gt;      break;&lt;/pre&gt;&lt;br /&gt;To get the kitten to wrap around to the other side, add the following tight after we decrement our x position:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code" style="background-position: 0px -645px"&gt;if (k1x &lt; -16) { k1x = 128; }&lt;/pre&gt;&lt;br /&gt;The numbers I chose here make sure that the kitten disappears off the screen before it re-appears on the other side.&lt;br /&gt;&lt;br /&gt;You should be able to add all of the code to move the kitten to the right rather than just the left.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opencomputing.blogspot.com/2010/12/2d-games-with-kitten-fu-part-two.html"&gt;Next time&lt;/a&gt; we'll flip the kitten, animate it and add another kitten to follow it around!&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Files&lt;/h3&gt;&lt;br /&gt;You can download everything from part 1 here: &lt;a href="http://www.communitycomputercenter.com/userfiles/kittens-01.tar.gz"&gt;kittens-01.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* * *&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-3421080180180551753?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/3421080180180551753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=3421080180180551753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3421080180180551753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3421080180180551753'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/12/2d-games-with-kitten-fu-part-one.html' title='2D Games with Kitten-Fu, Part One'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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://1.bp.blogspot.com/_d0CxiLB7l4Y/TPgjWBvFYwI/AAAAAAAAAAg/CrRY-K902hI/s72-c/kitten1-disp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-1907723983027994010</id><published>2010-09-20T15:19:00.001-07:00</published><updated>2010-09-20T15:20:48.480-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Arcade'/><category scheme='http://www.blogger.com/atom/ns#' term='UVOG'/><title type='text'>UVOG Arcade Machine</title><content type='html'>Umpqua Valley Opensource Group is building a classic-style Arcade machine (with a few innovations.)  I am in charge of drawing the sprites for one of the games, so I spent the weekend studying 8-bit video game palettes.&lt;br /&gt;&lt;br /&gt;I settled on using limitations similar to the 8-bit NES.  The NES itself only had around 54 possible colors on the system palette (technically there were 64 color indexes, but 10 of them were black and two were white!) There were also many additional limitations on how many colors could be used at a time on the screen as well as how many could be used per tile or sprite.&lt;br /&gt;&lt;br /&gt;I am using the same basic ideas to restrict the artwork for this game, but I have created an expanded palette using a full range of 64 different colors.  I also hand-tuned the choice of colors, and re-ordered the palette in a more sensible way.&lt;br /&gt;&lt;br /&gt;Because the Arcade Machine is an Open Source Project, my palette is Open Source as well. I am calling it the UVPALETTE.  It is available as a GPL (GIMP PaLette; which is usable in mtPaint also, and is basically a text file with a list of RGB values) at the following address:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://communitycomputercenter.com/userfiles/UVPALETTE.GPL"&gt;http://communitycomputercenter.com/userfiles/UVPALETTE.GPL&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I also have a demo of the palette here is a PNG file:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_d0CxiLB7l4Y/TJfap1rpLBI/AAAAAAAAAAM/G9WG5Keird8/s1600/uvpalette-demo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_d0CxiLB7l4Y/TJfap1rpLBI/AAAAAAAAAAM/G9WG5Keird8/s1600/uvpalette-demo.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In order to make discussing and working with the palette easier, I have prescribed a canonical name for each color:&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;Names of colors on the first row (0x00 - 0x0F) Black, Dark Blue, Dark Cerulean, Dark Mint, Dark Green, Dark Lime, Dark Yellow, Dark Tan, Dark Orange, Dark Red, Dark Rose, Dark Orchid, Dark Violet, Dark Indigo, Forest, Charcoal.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;Names of colors on the second row (0x10 - 0x1F) Gray, Blue, Cerulean, Mint, Green, Lime, Yellow, Tan, Orange, Red, Rose, Orchid, Violet, Indigo, Brown, Slate.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;Names of colors on the third row (0x20 - 0x2F) Silver, Light Blue, Light Cerulean, Light Mint, Light Green, Light Lime, Light Yellow, Light Tan, Light Orange, Light Red, Light Rose, Light Orchid, Light Violet, Light Indigo, Jade, Chalk.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;Names of colors on the fourth row (0x30 - 0x3F) Pale White, Pale Blue, Pale Cerulean, Pale Mint, Pale Green, Pale Lime, Pale Yellow, Pale Tan, Pale Orange, Pale Red, Pale Rose, Pale Orchid, Pale Violet, Pale Indigo, Gold, White.&lt;/div&gt;&lt;br /&gt;Here is another version of the palette demo with the prescribed color names listed for quick reference:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_d0CxiLB7l4Y/TJfa0bmBlfI/AAAAAAAAAAU/YqXCNEesYEo/s1600/uvpalette-named.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_d0CxiLB7l4Y/TJfa0bmBlfI/AAAAAAAAAAU/YqXCNEesYEo/s1600/uvpalette-named.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-1907723983027994010?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/1907723983027994010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=1907723983027994010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1907723983027994010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1907723983027994010'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/09/uvog-arcade-machine.html' title='UVOG Arcade Machine'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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://2.bp.blogspot.com/_d0CxiLB7l4Y/TJfap1rpLBI/AAAAAAAAAAM/G9WG5Keird8/s72-c/uvpalette-demo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-2014672387665251228</id><published>2010-09-03T15:23:00.000-07:00</published><updated>2010-09-05T14:55:17.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='robots'/><category scheme='http://www.blogger.com/atom/ns#' term='ATtiny2313'/><title type='text'>Robot Logic, Part 1</title><content type='html'>&lt;div&gt;UVOG has decided to make a robot as a club project.  It will consist of Open Hardware and Open Software, and be easy for people to make at home on the cheap by repeating our steps.&lt;/div&gt;&lt;div&gt;My specialty is the software.  So far, we have decided to use a handful of ATtiny2313 chips to control the various appendages and modules of the robot.  The ATtiny2313's will be hooked up to a root controller of a type that is yet to be determined.  So, I'm going to be learning AVR assembler to program the ATtiny2313 chip, but for now, I've been doing my experimenting with C.  Assembler actually looks easier to use in this case, since I am so interested in direct pin manipulations and our memory space is so limited (2k program memory plus 256 bytes of SRAM and 256 bytes of EEPROM.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of my eventual goals is to learn the self-programming functions of the AVR instruction set so that I can reprogram any chip in the robot in place without any additional wiring other than that which we are using to send instructions from the root controller to the sub-controllers, but for now (until I have taught the chip how to do this), I have to use an external programmer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Programming the Microcontroller&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've used three different programming boards for the 2313 so far.  The first one was a hand-made parallel port programmer, which pulled its current from a USB connector.  The second one is a board from Evil Mad Scientist which connects to the PC entirely with USB, through an adapter.  Both of these were ok, except I kept having to pull the IC from the programming board, and put it on my breadboard for testing, then after failing (it is inevitable), pulling it again and returning it to the programming board.  The third programmer is also a hand-made one, but this time it has two female headers running the length of the chip that I can plug test wires into.  It also has a six-pin connector to attach or detach the parallel cable, which is a lot easier than running around behind the computer every time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My debugging process now looks like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Plug the IC into the programming board.  Plug the USB and Parallel into the PC, and plug the other end of the Parallel into the programming board.  I will leave the IC , the USB and the Parallel (on the PC side) plugged in the entire time I'm working.  The only cable I will unplug during the debug process is the programming board side of the parallel cable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So far, I have not been using the UCSK, MISO, MOSI, or RESET pins (a.k.a., pins 1, 17, 18, or 19) in my actual experiment, so I can leave the IC on the test board, and hook up my other components by jumping a wire from the headers to the breadboard.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I unplug the single wire going from GND (pin 10) to the breadboard's ground bus, and I plug in the six-pin parallel connector, then run "make", and my toolchain compiles and automatically uploads the compiled code into the chip.  Next, I plug the wire from pin the breadboard's ground bus back into pin 10 (GND) on the header, and I unplug the six pin connector, which releases the RESET pin causing the chip to boot up and run my code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When I want to test again, I simply unplug GND and plug the six pins back in.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If I simply need to reset the chip to test the boot sequence again without reprogramming it, I can either apply a GND lead to the reset pin, or plug the 6-pin parallel connector in momentarily to accomplish the same thing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;How I Plan to Use the Chip&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The 2313 has a nice amount of general purpose input/output pins.  They have given names to the pins to indicate how they are treated internally as "ports."  Along the "left side" of the chip, we have RESET (which doubles as PA2),  then we have PD0, PD1, PA1, PA0, PD2, PD3, PD4, PD5, and GND.  And going up the right side of the chip we have PD6, PB0 through 7, and VCC (our voltage source.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For most of the chips in this project, I plan to use them in the following way:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pin 1, 10, and 20 are keeping their purposes as RESET, GND, and VCC. Although repurposing RESET is possible, it is dangerous because it disables the programmability of the chip (RESET is normally held low while the chip is flashed.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All the other pins down the left side are going to be used as inputs, in addition to pin 11 (the bottom pin on the right side.)  This gives us a total of nine input pins which are known internally as PORTA and PORTD (with the exception of PORTA bit 2, which is reset.)  When used as inputs, the values are actually read from the ports called PINA and PIND.  All of the remaining pins on the right side will be used for outputs, which is known internally as PORTB.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Quick Review:&lt;/div&gt;&lt;div&gt;&lt;b&gt;Input: &lt;/b&gt; 2 bits of PORTA and all 7 bits of PORTD. (actually PINA and PIND)&lt;/div&gt;&lt;div&gt;&lt;b&gt;Output: &lt;/b&gt; All 8 bits of PORTB.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some of our inputs have special functionality that we will be interested in, so we need to be careful to reserve those for the purposes we intend to use.  Specifically, pin 6 and 7, a.k.a., PORTD2 and PORTD3 are the lines used to raise INT0 and INT1.   INT0 is interesting to us, because it is the only regular user-definable interrupt that can raise the micro-controller out of its power-saver or sleep condition. (I don't remember exactly the term used for this particular sleep mode at the moment.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I plan to use INT0 and INT1 to "talk to the chip" from the root controller.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This leaves us with the following general purpose inputs, which I would tend to utilize in the following manner:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most Significant - - - - - Least Significant&lt;/div&gt;&lt;div&gt;PD6, PD5, PD4, PA1, PA0, PD1, PD0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If I care to get this into a single byte (sans the high bit), I think I can do so by performing the following bitwise operation:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;MyInput = ((PIND &amp;amp; 0x73) | ((PINA &amp;amp; 0x03) &lt;&lt;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because the ATtiny2313 uses internal pull-up resistors, the default state of all the pins will read as high values (1).  To toggle a pin, we must apply ground to it, which will lower it to zero.  In other words, when we are dealing with inputs, "low means active."  We might, therefore, want to inverse the value of all bits of input, so that we can logically use 1 to indicate active and 0 to indicate inactive.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Gotta run, I will post more on this later.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-2014672387665251228?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/2014672387665251228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=2014672387665251228' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2014672387665251228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2014672387665251228'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/09/robot-logic-part-1.html' title='Robot Logic, Part 1'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-9116025769439572493</id><published>2010-08-19T12:46:00.000-07:00</published><updated>2010-08-19T13:24:17.632-07:00</updated><title type='text'>Support for older Intel Graphics Chipsets in Lucid Lynx</title><content type='html'>For those having trouble getting Intel Brookdale G [82845G/GL] and similar chipsets to work on Ubuntu 10.04, I have good news.  The Ubuntu Wiki has &lt;a href="https://wiki.ubuntu.com/X/Bugs/Lucidi8xxFreezes"&gt;a page containing workarounds and fixes for the issue&lt;/a&gt;.  My preferred choice right now is to install the backported Maverick kernel. This is also good news, because Ubuntu 10.10 should be expected to work on these machines without adjustment.  Of course, if you just want the system to work with basic office-style functionality, VESA mode is a good alternative, but it will disable accelerated video.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-9116025769439572493?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/9116025769439572493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=9116025769439572493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/9116025769439572493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/9116025769439572493'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/08/support-for-older-intel-graphics.html' title='Support for older Intel Graphics Chipsets in Lucid Lynx'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-5388122982586686454</id><published>2010-08-12T15:15:00.000-07:00</published><updated>2010-08-12T15:16:12.266-07:00</updated><title type='text'>Linux can do this</title><content type='html'>Nuff said. &lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/c1TOAXAbOAI?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/c1TOAXAbOAI?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-5388122982586686454?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/5388122982586686454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=5388122982586686454' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5388122982586686454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5388122982586686454'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/08/linux-can-do-this.html' title='Linux can do this'/><author><name>robots_unix</name><uri>http://www.blogger.com/profile/16991921542825149149</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-3034230779454603134.post-569789616113798805</id><published>2010-08-03T17:02:00.000-07:00</published><updated>2010-08-09T22:03:30.093-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Tutorial on making colored maps</title><content type='html'>This Tutorial uses a Python script and free SVG maps to make maps based on csv data files!  I know what I'm going to be doing tonight when I get off work!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flowingdata.com/2009/11/12/how-to-make-a-us-county-thematic-map-using-free-tools/"&gt;How to make a US county thematic map using free tools&lt;/a&gt; [flowingdata.com]&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ZF1ngbiTm1w/TFiurXNMurI/AAAAAAAAARA/1kE0Q5TPzjI/s1600/unemployment.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="http://4.bp.blogspot.com/_ZF1ngbiTm1w/TFiurXNMurI/AAAAAAAAARA/1kE0Q5TPzjI/s320/unemployment.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5501339004820044466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edit:&lt;/b&gt;&lt;br /&gt;Michael made his own version of the same map following the tutorial!  Here it is:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ZF1ngbiTm1w/TGDdfII6ErI/AAAAAAAAARI/mpZriVdoqCQ/s1600/newmap.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 208px;" src="http://1.bp.blogspot.com/_ZF1ngbiTm1w/TGDdfII6ErI/AAAAAAAAARI/mpZriVdoqCQ/s320/newmap.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5503642271477273266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- &lt;br /&gt;&lt;br /&gt;Sites I used along the way:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://johnbokma.com/mexit/2009/09/26/python-downgrading-beatifulsoup.html"&gt;http://johnbokma.com/mexit/2009/09/26/python-downgrading-beatifulsoup.html&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2"&gt;http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://gs.statcounter.com"&gt;http://gs.statcounter.com&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Move Beautiful Soup to the /lib/Python folder&lt;br /&gt;--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-569789616113798805?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/569789616113798805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=569789616113798805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/569789616113798805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/569789616113798805'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/08/tutorial-on-making-colored-maps.html' title='Tutorial on making colored maps'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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://4.bp.blogspot.com/_ZF1ngbiTm1w/TFiurXNMurI/AAAAAAAAARA/1kE0Q5TPzjI/s72-c/unemployment.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-7977832677994314470</id><published>2010-08-03T13:16:00.000-07:00</published><updated>2010-08-03T13:19:11.395-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patents'/><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Eben Moglen'/><category scheme='http://www.blogger.com/atom/ns#' term='Free Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Free Software Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>Video, State of Free Software</title><content type='html'>Listen to &lt;a href="http://www.fsf.org/blogs/community/lp2010-moglen-state-of-free-sw"&gt;this video&lt;/a&gt; of Eben Moglen's presentation on the State of Free Software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7977832677994314470?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7977832677994314470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7977832677994314470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7977832677994314470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7977832677994314470'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/08/video-state-of-free-software.html' title='Video, State of Free Software'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-1682521769897624395</id><published>2010-08-02T23:41:00.000-07:00</published><updated>2010-08-03T00:35:30.569-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='law'/><category scheme='http://www.blogger.com/atom/ns#' term='recycling'/><category scheme='http://www.blogger.com/atom/ns#' term='oregon'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>Oregon's E-Cycle program flawed</title><content type='html'>We are required by law to print the following three lines on receipts for purchases of new computers or monitors, or to distribute one of several graphical alternatives:&lt;br /&gt;&lt;br /&gt;Oregon E-Cycles: Free Recycling&lt;br /&gt;for Computers, Monitors and TVs&lt;br /&gt;www.oregonecycles.org 1-888-5-ECYCLE&lt;br /&gt;&lt;br /&gt;Unfortunately, the Oregon E-Cycles program is seriously flawed and could hurt the freedom of the economy and the freedom of choice of consumers. Don't get me wrong. I support and encourage recycling and care for the environment, but this law over-reaches its purpose. The e-cycle website states: "Only those brands listed as pending or compliant may be sold in or into Oregon. If a brand is not listed, it may not be sold. Sales restrictions apply to all types of sales including retail, catalog, phone and Internet sales."&lt;br /&gt;&lt;br /&gt;The DEQ decides the fee that a particular manufacturer must pay to register. If they don't pay up, they aren't allowed to sell their product [legally] in Oregon. DEQ determines the fee based on statistical information which they acquire in order to determine the market share held by the brand in question. They start with national statistics and adjust it based on a limited amount of local statistics. The minimum fee right now is $40. If a brand has more than 0.01% market share based upon DEQ's manipulated statistics, the fee goes up to $200. For brands with more than 1%, the fee is $15,000, which is the amount they are apparently collecting from prominent national manufacturers such as Dell and HP-Compaq.&lt;br /&gt;&lt;br /&gt;Imagine if every state implemented an identical program. Dell would have to pay three quarters of a million dollars every year just to be an authorized manufacturer, and that money does not go towards recycling. The manufacturers pay for the recycling fees themselves. A little shop that assembles generic computers would have to pay a combined $2000 to all fifty states, which might be more than they make in computer sales during the year, especially if new computer sales is not their main line of business.&lt;br /&gt;&lt;br /&gt;This is, of course, a bad scenario. It is unlikely that all fifty states would demand payment from a vendor. The states would have to become aware of that brand being imported into their state before they would likely make such a demand, and even so, is it enforceable if another state demands that you pay them a fee just because someone carried your product across state lines?&lt;br /&gt;&lt;br /&gt;Also, what's to say that a particular state can't raise the rates or file you in a higher market-share tier in order to pressure you out of the business. If I was a vendor in another state, and Oregon DEQ contacted me, I would be tempted to simply disable shipping to Oregon on my website, and place a warning label on my packaging saying that the product may not be imported into Oregon by the original owner--that's right! Used and refurbished equipment is exempt from the program.&lt;br /&gt;&lt;br /&gt;Here's the bad part of the law: Oregon is shooting itself in the foot because it is trying to force manufacturers around the world to comply with its fees, which could reduce the choice that customers living in Oregon have on what they may purchase. Someone will have to set up a company just across the border that will purchase a new computer for you from a non-compliant manufacturer, then resell it to you as used equipment.&lt;br /&gt;&lt;br /&gt;Frankly, I shouldn't have to pay fees to any other states, and other companies shouldn't have to pay fees to my state. &lt;b&gt;No taxation without representation! &lt;/b&gt;If the states want to have purchasers pay fees because they purchased a computer or monitor, then the state should include this on the tax forms for their own residents.&lt;br /&gt;&lt;br /&gt;Now, from the retailer point of view. Other than my purchasing options being limited by a list of brands put out by DEQ, which is quite disturbing, I also notice that I had the choice of using the three lines shown above on my receipts, or including one of the other printed materials of which there is a wide variety. The problem? All the materials are in color, and the section on logos specifically says that if you need alternate format logos including B&amp;amp;W that you must contact DEQ manually to request it. Why would a recycle program require me to print in color? They must want me to recycle my cyan and yellow toner cartridges on my laser printer more often. Well, I opted for the three lines instead to conserve toner, and to avoid showing the logo of this program which I detest.&lt;br /&gt;&lt;br /&gt;Think about how much time and money is wasted handling all the extra paperwork, calculating annual market share reports, and certifying manufacturers. This process needs to stop.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;If you too find this law to be over-reaching and limiting of your freedom, or believe that it does not serve the interests of recycling or caring for the environment, please contact your state senators and let them know that the flaws of this program need to be exposed so that action may begin to correct it and implement proper recycling legislation in its place.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-1682521769897624395?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/1682521769897624395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=1682521769897624395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1682521769897624395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1682521769897624395'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/08/oregons-e-cycle-program-flawed.html' title='Oregon&apos;s E-Cycle program flawed'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-8056964136360675303</id><published>2010-07-27T11:59:00.000-07:00</published><updated>2010-07-27T12:09:17.837-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='bloat'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenOffice'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Office'/><title type='text'>Response to .DOC Attachment</title><content type='html'>&lt;div&gt;What do you do when you receive an email file attachment in Microsoft's .DOC format?  Sure, we could open it in OpenOffice.org and go about our business, but there's no guarantee that this will remain true for future versions of .DOC.  Use of proprietary formats are a danger to interoperability and to future innovation.  One good thing to do is to reply to the email and explain why they should send the attachment in a standard format.  I've seen several canned email responses in the past, but most are too brief to explain the issue, or too harsh in their wording to satisfy my tastes.  I was prompted to write a response after receiving such an email attachment today, and I have combined some of the best ideas from elsewhere and added some of my own.  Here is what I would recommend:&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;The document you have sent was not saved in an accepted format for Internet mail.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It was saved in a proprietary format that is unreadable on several types of computers because the method for decoding the document is kept secret by Microsoft and is purposefully changed with each new release of Microsoft Word so that existing users of Microsoft Word will be forced to pay for expensive upgrades in order to continue to read Word Documents sent by others. For example, in 2010, Microsoft Office Home &amp;amp; Business 2010 was priced at $279.99, and Microsoft Office Professional 2010 was priced at $499.99.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recent versions of Word have started using a newer, patented OOXML format. In many countries, it is actually illegal for other products to decipher this format. This is a lock-in technique used by Microsoft to maintain their monopoly on Office software, and by extension, their monopoly on the operating system market, since they have not released a cross-platform version of Microsoft Office compatible with other operating systems.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In most cases, the size of the file saved in Microsoft's secret, proprietary format is also substantially larger than a standards compliant file containing the same information and the same formatting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is also important to note that Microsoft Word documents are often infected with viruses. Excel, Access, and Power Point files are also vulnerable to infection. This potential for infection is largely due to the Macro language and the "Visual Basic for Applications" language which are built into the format to provide powerful programming capabilities. While powerful, these features were not protected with proper security precautions, and the majority of users do not actually use these features or even know that they exist.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What to do instead:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you continue to use Microsoft Word, please have the courtesy to “Save As” one of the following formats: ODT (if available), DOS Text, HTML, or Portable Document Format (PDF) and after saving, send the resulting file as an attachment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Alternatively, you could use a product such as AbiWord, KOffice, Google Docs, NeoOffice, or OpenOffice.org that allows you to save your document in the Open Document Text Format (ODT), which is an ISO/IEC International Standard, and is supported by such notable companies as Apple, Adobe, Google, IBM, Intel, Nokia, Novell, and Sun Microsystems. If you don't have one of these programs, I would recommend OpenOffice.org, which may be downloaded free of charge and used for any purpose, personal or commercial.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A third option is to simply type your message directly into mail (instead of typing into Microsoft Outlook or Microsoft Word) so that you won't need to use an attachment at all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the highly unlikely event that your document cannot be converted to an open, non-proprietary format, consider printing it and mailing it by post, or scanning it, and sending it in a standard graphic format such as PNG or JPG.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thank you.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-8056964136360675303?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/8056964136360675303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=8056964136360675303' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8056964136360675303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8056964136360675303'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/07/response-to-doc-attachment.html' title='Response to .DOC Attachment'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-3433712857155927328</id><published>2010-07-13T22:39:00.000-07:00</published><updated>2010-07-14T00:24:05.623-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='Databases'/><title type='text'>Open Database Conventions</title><content type='html'>I've been using a set of database table and field naming conventions and related standards that have been gradually adopted and refined over the last 10 years.  I decided today that it would be a good idea to share these with others, particularly because I decided to bring Jim from UVOG in on a database project I'm starting on.  I realized that sharing them with others on an even wider scale might be a good thing on the off-chance that, if someone else out there adopts them, and if our code ever ends up crossing paths, we will gain greater interoperability and understanding on account of using the same techniques.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Feel free to take some or all of these ideas and implement them in your own projects.  I am willing to hear feedback and incorporate it back into the standard if you think there's a better way to do something that I've mentioned.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some of these conventions will apply specifically to MySQL, while others will apply to the greater spectrum of databases.   My experience spans MS Access, MS SQL Server, dBase, FoxPro, the Apollo Database Engine, and MySQL, with some very light experience in SQLite and PostgreSQL, but the bulk of my work today happens in MySQL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Naming the Database&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The name of the database itself is the least of my concerns.  I would just recommend that in code that operates with or upon the database, this value should be easily configurable along with the hostname, port, and authentication credentials, so that any database could be selected.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Naming Tables&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The name of a table should be a succinct name descriptive of what is to be represented by a single record in the table.  If each record in the table represents an account, for example, name the table "account" (in the singular, all lowercase.)  The reason we use singular forms is so that dot notation naming of fields makes sense when read out loud, for example, account.balance. There are many reasons we use all lowercase.  Most production Database servers are case sensitive, and by using all lowercase we can eliminate the possibility of an error relating to case.  It also improves code readability when SQL statements are written out with keywords and function names capitalized and with table and field names in lowercase.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is a special case of naming in the event of a junction table.  (A junction table is used to create a many-to-many relationship between two tables, and consists of nothing more than an id field, and foreign keys for the two tables whose records it is tying together.)  The name of a junction table should be the name of the other two tables mashed together, with the name of the greater entity first.  For example, if I have a company table and an customer table, and customers are potentially associated with multiple companies, I would name the junction table companyemployee, and it would contain id, kcompany, and kemployee, in that order.  If there is a toss-up in determining which entity is "greater," place the two table names in alphabetical order.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Naming Fields&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Always name your fields as though they are going to be used in dot notation.  We want account.balance, not account.accountbalance, so do not redundantly repeat the table name within the field name. Avoid abbreviations that seem like a hack.  For example, number is better than "no" or "num."  Widely used abbreviations like ipaddress, ssn, or id are ok--be particularly careful to avoid expanding acronyms that are not expanded in common speech.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;The Primary Key&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to be properly maintained, every record needs to be addressable by a unique identifier.  This identifier should not be meaningful in any real-world way for reasons that are explained in depth elsewhere, but I will give one brief example.  If you were making an employee database, you might be tempted to use a person's SSN as the primary key for the employee table.  Three years after the program is written, your company might hire someone who is in the country on a work visa, and therefore does not have an SSN, and now your system is broken.  One will follow this line of thinking out and conclude that the key should be completely arbitrary and meaningless so that no such conflicting situation may ever occur.  Additionally, for the sake of consistency, the primary key field in each table you make should be of the same name and type.  I recommend naming the first field of each table "id", setting it to "auto_increment," and setting it to become the PRIMARY KEY index.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The value of this id field should be used internally for programming purposes and for describing relations between tables, but it should never be shown prominently to the user.  If it is shown, it is merely for debugging or reference purposes.  The number in this field, once generated, should not be changeable by the user, is not guaranteed to be sequential with the records around it, and is not guaranteed to fall into any range of values more specific than those allowed by an int (11) field.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Foreign Keys&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A foreign key can be thought of as a "pointer" referring from the current record out to another record in another table (or possibly another record in the same table.)  All foreign keys should be prefixed with the letter "k" (meaning key), and should either be named "parent" if the key is referring back to the same table for the purpose of producing a hierarchical system, or if referring to another table, it should be given the name of the table into which it points.  If more than one key in a record must point to the same table for different purposes, the purpose should be appended to the name followed by an underscore.  For example, kaddress_from and kaddress_to would be pointers to two records in the table named "address."  The relation to one of them is described as "from" and the other as "to."  This is the only time an underscore is permitted to be used in a field name, and the purpose of the underscore is to make the table name unambiguous.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When possible, try to put keys to parent records or records which are considered to "own" the current record near the top of the field listing, following just after id.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If these standards are followed for the primary key and foreign key fields, I could look up any reference using the following technique:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Given a field whose name begins with "k":  Take everything in the field name following the "k" up to the end of the name, or up to (but not including) the first encountered underscore "_" character, and consider this to be the "lookup table name," if such a table exists.  Retrieve the data by issuing a query in the form of:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SELECT * FROM [lookup table name] WHERE id = [value of the field]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Choosing Appropriate Data Types for Fields&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Always choose the most restrictive type that can safely store the data, including valid values that you might not anticipate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;KEY FIELDS&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;For id fields or foreign key fields, use INT (11)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For boolean (yes/no or true/false) fields, use TINYINT (1)   A value of zero means false, and any nonzero value means true.  You can distinguish between individual nonzero values for record housekeeping if you wish, as long as others reading the data as merely true or false will not be under a misconception from not making such a distinction.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;CURRENCY&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;For currency values less than a million dollars, use DECIMAL (8, 2) --- increase the first size by a sufficient number of digits if you need larger currency values.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;NUMERIC DATA&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For numeric data involving whole numbers or integers only, use INT (11) --- unless the size is astronomical, in which case, you will need to upgrade to a larger type.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For weights or non-integer quantities less than ten thousand, use DECIMAL (8, 4) --- increase the first size if values beyond ten thousand are needed, or both sizes if more precision than four decimal positions is needed.  Four decimal places was chosen so that a number like 12.05% could be fully represented as 0.1205.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;DATES AND TIMES&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For date or time values or stamps where the "time part" has meaning (particularly in sorting), use the DATETIME type.   A value of "0000-00-00 00:00:00" means not entered or unknown.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For date values where the time is irrelevant, use the DATE type.  A value of "0000-00-00" means not entered or unknown.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;MULTIPLE CHOICE&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For multiple choice values:  If there are a discrete number of choices presently and in the near future, few choices (about 8 or less), and little or no benefit would be had by allowing the user to customize the set of choices, an enumerated value may be used.  Example:  alignment ENUM ('left', 'right', 'center') DEFAULT 'left'&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For multiple choice values where the choices are numerous or user defined or potentially user managed, a foreign key and a lookup table should be used instead of an enum.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;STRINGS OF TEXT (NO MULTI-LINE VALUES)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For any string data:  If the options are very well established, choose the smallest size category from the table below that can hold all possible values, or for data that is free-form, choose one category larger than you think is really necessary.  I will give some example with each size category:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;VARCHAR (4) -- A standard name suffix like Jr., Sr., II., III.&lt;/div&gt;&lt;div&gt;VARCHAR (8) -- Data known for certain to be less than or equal to 8 characters.&lt;/div&gt;&lt;div&gt;VARCHAR (16) --  A zip code.  (Minimum to store a US zip code is presently 9 digits plus one hyphen.)&lt;/div&gt;&lt;div&gt;VARCHAR (24) -- A phone number, with decorations. The following number is 23 characters long, including spaces:  +1 (541) 375-0448 x8888&lt;/div&gt;&lt;div&gt;VARCHAR (32) -- Product codes, SKU numbers, or generated numbers that are guaranteed to be less than or equal to 32 characters.&lt;/div&gt;&lt;div&gt;VARCHAR (48) -- A first(given) name by itself, or a last name(surname) by itself.&lt;/div&gt;&lt;div&gt;VARCHAR (64) -- A full name field (first and last name together.)&lt;/div&gt;&lt;div&gt;VARCHAR (128) -- An email address.&lt;/div&gt;&lt;div&gt;VARCHAR (248) -- A web address.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PARAGRAPHS OF TEXT, NOTES, MESSAGE CONTENT, CODE SNIPPETS&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For anything multi-line, or potentially longer than 248 characters, use the TEXT type.  If the data or text will be more than a couple of kilobytes, investigate the LONGTEXT type.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;IMAGES OR BINARY FILES&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don't like big files taking up space in my InnoDB tables and slowing down my replication server.  Instead, I store the original filename only (and only as a convenience) in a VARCHAR field, and then save the file separately named based upon the table name and record number the file is associated with.  If I need to replicate these files, I let rsync take care of that.  If the "attached" files MUST be synchronized with the other data in the record at any given moment, then it might be acceptable to resort to BLOB fields.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Order of Fields&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When creating tables, the order of the fields really doesn't matter to the database engine. The sequence, therefore, should be chosen for purposes of clarity in documentation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, that's all I have for now.  Have at it, tear it up, and send me suggestions.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-3433712857155927328?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/3433712857155927328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=3433712857155927328' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3433712857155927328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3433712857155927328'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/07/open-database-conventions.html' title='Open Database Conventions'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-6962573817211557202</id><published>2010-07-13T08:25:00.001-07:00</published><updated>2010-07-13T13:51:27.650-07:00</updated><title type='text'>ACNG Client side perl script part two</title><content type='html'>Please refer to these previous articles :&lt;a href="http://opencomputing.blogspot.com/2010/07/speeding-up-your-updates-with-ubuntu.html"&gt; Setting up ACNG&lt;/a&gt; &lt;a href="http://opencomputing.blogspot.com/2010/07/apt-cacher-ng-client-side-perl-script.html"&gt;ACNG client side perl script&lt;/a&gt; for set up and scripting Apt-Cacher-NG.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have made some modifications to the perl script to allow for simple gui integration.&lt;br /&gt;Props to @gpled for showing me zenity a couple of months ago.&lt;br /&gt;&lt;br /&gt;Change this:&lt;br /&gt;#!usr/bin/perl -w&lt;br /&gt;#script by @robots_unix&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;print "Are you at CCC?";&lt;br /&gt;$name = ;&lt;br /&gt;chomp ($name);&lt;br /&gt;if ($name eq "yes"){ &lt;br /&gt;&lt;br /&gt;To this:&lt;br /&gt;&lt;br /&gt;#!usr/bin/perl -w&lt;br /&gt;#script by @robots_unix&lt;br /&gt;system('zenity --title "Apt-Cacher-NG" --text "Are you at CCC?" --list --radiolist --column "ACNG" --column "Toggle" False no True yes&gt; aptyesno');&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;open(APT, "Location of aptyesno");&lt;br /&gt;$name = &lt;APT&gt;;&lt;br /&gt;if ($name eq "yes\n"){&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then right-click on gnome-panel, click add to panel, click create custom application launcher, then for the command  type: sudo perl location of your perl script.&lt;br /&gt;&lt;br /&gt;Now you can change the hosts file by just clicking an icon on your gnome-panel.&lt;br /&gt;&lt;br /&gt;Have fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-6962573817211557202?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/6962573817211557202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=6962573817211557202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/6962573817211557202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/6962573817211557202'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/07/acng-client-side-perl-script-part-two.html' title='ACNG Client side perl script part two'/><author><name>robots_unix</name><uri>http://www.blogger.com/profile/16991921542825149149</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-3034230779454603134.post-8371265120516814551</id><published>2010-07-12T12:40:00.000-07:00</published><updated>2010-07-12T12:52:44.919-07:00</updated><title type='text'>Moving the close, minimize and maximize to the right side again</title><content type='html'>I just installed Wubi and Ubuntu 10.04 and love it!!&lt;div&gt;But I was used to the close buttons being on the right&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;type in the terminal&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;gconftool-2 --set /apps/metacity/general/button_layout --type string menu:minimize,maximize,close&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;you can also change it manually:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;a href="http://www.howtogeek.com/howto/ubuntu/put-closemaximizeminimize-buttons-on-the-left-in-ubuntu/"&gt;http://www.howtogeek.com/howto/ubuntu/put-closemaximizeminimize-buttons-on-the-left-in-ubuntu/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;just type in terminal:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 14px; line-height: 17px; "&gt;&lt;em style="font-style: italic; font-weight: normal; "&gt;gconf-editor&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 14px; line-height: 17px; "&gt;&lt;em style="font-style: italic; font-weight: normal; "&gt;&lt;br /&gt;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 14px; line-height: 17px; "&gt;&lt;span style="font-weight: normal; "&gt;then open apps -&gt; metacity -&gt; general&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; "&gt;&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 14px; line-height: 17px; "&gt;&lt;span style="font-weight: normal; "&gt;and change button layout on the right side to:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:Verdana;font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 17px;"&gt;menu:minimize,maximize,close&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:Verdana;font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 17px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:Verdana;font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 17px;"&gt;I hope that is helpful&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'Lucida Grande';"&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-8371265120516814551?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/8371265120516814551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=8371265120516814551' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8371265120516814551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8371265120516814551'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/07/moving-close-minimize-and-maximize-to.html' title='Moving the close, minimize and maximize to the right side again'/><author><name>Michael</name><uri>http://www.blogger.com/profile/15703804696957522260</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Aen0M3MeXJA/S-31O7p8ZEI/AAAAAAAAABw/_HX99TFvU6U/S220/michael.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-3435410201511844461</id><published>2010-07-12T12:38:00.000-07:00</published><updated>2010-07-12T12:40:43.058-07:00</updated><title type='text'>Linux Chrome fix backspace as back button</title><content type='html'>I like to be able to go back when browsing without using my mouse. I have found an extension which fixes the backspace so that it now goes back.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Install the extension:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.chromeextensions.org/appearance-functioning/backspace-as-back-for-linux-2/"&gt;http://www.chromeextensions.org/appearance-functioning/backspace-as-back-for-linux-2/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then click the radio button:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: medium; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;Activate Backspace for navigation in history object&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: medium; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: medium; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;And hit save. That is all.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-3435410201511844461?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/3435410201511844461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=3435410201511844461' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3435410201511844461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3435410201511844461'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/07/linux-chrome-fix-backspace-as-back.html' title='Linux Chrome fix backspace as back button'/><author><name>Michael</name><uri>http://www.blogger.com/profile/15703804696957522260</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Aen0M3MeXJA/S-31O7p8ZEI/AAAAAAAAABw/_HX99TFvU6U/S220/michael.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-8081650366489284138</id><published>2010-07-12T10:59:00.001-07:00</published><updated>2010-07-12T12:07:22.718-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apt-cacher-ng'/><category scheme='http://www.blogger.com/atom/ns#' term='Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Speeding up your Updates with Ubuntu and APT Cacher NG</title><content type='html'>If you are in a building with more than one computer running Ubuntu, you may have wondered why everyone has to download updates separately.  The answer is, they don't.  Here's how to accomplish it with a tool called apt-cacher-ng.&lt;div&gt;&lt;br /&gt;&lt;div&gt;apt-cacher-ng is a fork of a project called apt-cacher, which in turn is an alternative to apt-proxy which is poorly maintained and upon my testing, was unreliable.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Setting up the APT Cacher Server&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Begin by installing apt-cacher-ng from Synaptic Package Manager, or from the Terminal with the following command:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;sudo apt-get install apt-cacher-ng&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By default, the version of apt-cacher included with Ubuntu does not currently include security updates.  We can easily add the security updates in, however, by following these steps:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As root, create a new file called /etc/apt-cacher-ng/ubuntu_security&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;sudo nano /etc/apt-cacher-ng/ubuntu-security&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This file will be a list of mirrors from which the updates may be downloaded.  We only want to insert a single line, the location of Ubuntu's official security updates server:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;blockquote&gt;http://security.ubuntu.com/ubuntu&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Save and close the file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, edit the file /etc/apt-cacher-ng/acng.conf&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;sudo nano /etc/apt-cacher-ng/acng.conf&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While we're here, you will see a couple of lines like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;# Set to 9999 to emulate apt-proxy&lt;/div&gt;&lt;div&gt;Port:3142&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I recommend that you follow the instructions and set the port to 9999 to emulate apt-proxy. Not only will this make your server compatible with systems expecting an apt-proxy server, but it will also make the port number easier for you to remember.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, look for this section:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;# Repository remapping. See manual for details.&lt;/div&gt;&lt;div&gt;# In this example, backends file is generated during package installation.&lt;/div&gt;&lt;div&gt;Remap-debrep: file:deb_mirror*.gz /debian ; file:backends_debian&lt;/div&gt;&lt;div&gt;Remap-uburep: file:ubuntu_mirrors /ubuntu ; file:backends_ubuntu&lt;/div&gt;&lt;div&gt;Remap-debvol: file:debvol_mirror*.gz /debian-volatile ; file:backends_debvol&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We're going to add one more line at the end of this section to describe the Ubuntu Security repository that we are adding (make sure the following all goes on one line):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;blockquote&gt;Remap-ubusec: file:ubuntu_security /ubuntu-security ; http://security.ubuntu.com/ubuntu&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, save changes to this file and restart the apt-cacher-ng service.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;sudo service apt-cacher-ng restart&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If all went well, the server is now working.  No you may proceed to setting up the clients.  &lt;i&gt;&lt;span class="Apple-style-span"  style="color:#CC6600;"&gt;I strongly recommend making the server into a client of its own apt-cacher, as there is no reason for that system to download the updates from the Internet twice.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;b&gt;Setting up an APT Cacher Client&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The basic idea of how to set up a client is to change all the lines in /etc/apt/sources.list to point at the local apt-cacher-ng server instead of at the internet servers.  I recommend taking an additional step first so that you can easily flex between different servers.  We will create a hostname alias called "apt-cacher" that points at your apt-cacher-ng server so you can simply re-point the hostname whenever you want to switch servers.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;sudo nano /etc/hosts&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We will add our own entry just after these two lines:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;127.0.0.1    localhost&lt;/div&gt;&lt;div&gt;127.0.1.1     your-computer-name&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If the apt-cacher-ng server is running on the same computer which you are setting up as a client, its IP address will be 127.0.0.1, otherwise, you need to find (or set) the static LAN IP address for your server.  I will assume it is 192.168.1.10 in this example because that's what it is in our building here at CCC.  The line you will add will look like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;192.168.1.10    apt-cacher&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Save and close the hosts file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we will replace the entries in the sources.list to point at the cacher:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;sudo nano /etc/apt/sources.list&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The easiest way to handle this will be a search and replace.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, replace every instance of "us.archive.ubuntu.com" with "apt-cacher:9999" (no quotes on either)  If you are using nano, this is accomplished by pressing Ctrl+W, Ctrl+R, then entering the search string and pressing enter, then entering the string to replace it with, and pressing enter again, then when prompted, press "A" for all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, replace every instance of "security.ubuntu.com/ubuntu" with "apt-cacher:9999/ubuntu-security" (no quotes on these, either.)  If you are using nano, use the same steps as given above.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(In this example, we won't be handling the partner repository or any third party repositories which you might have installed.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Save and close your sources.list.   Your final sources.list if you are running Ubuntu 10.04 Lucid Lynx will look something like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;# deb cdrom:[Ubuntu 10.04 LTS _Lucid Lynx_ - Release i386 (20100429)]/ lucid main restricted&lt;/div&gt;&lt;div&gt;# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to&lt;/div&gt;&lt;div&gt;# newer versions of the distribution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;deb http://apt-cacher:9999/ubuntu/ lucid main restricted&lt;/div&gt;&lt;div&gt;deb-src http://apt-cacher:9999/ubuntu/ lucid main restricted&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;## Major bug fix updates produced after the final release of the&lt;/div&gt;&lt;div&gt;## distribution.&lt;/div&gt;&lt;div&gt;deb http://apt-cacher:9999/ubuntu/ lucid-updates main restricted&lt;/div&gt;&lt;div&gt;deb-src http://apt-cacher:9999/ubuntu/ lucid-updates main restricted&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu&lt;/div&gt;&lt;div&gt;## team. Also, please note that software in universe WILL NOT receive any&lt;/div&gt;&lt;div&gt;## review or updates from the Ubuntu security team.&lt;/div&gt;&lt;div&gt;deb http://apt-cacher:9999/ubuntu/ lucid universe&lt;/div&gt;&lt;div&gt;deb-src http://apt-cacher:9999/ubuntu/ lucid universe&lt;/div&gt;&lt;div&gt;deb http://apt-cacher:9999/ubuntu/ lucid-updates universe&lt;/div&gt;&lt;div&gt;deb-src http://apt-cacher:9999/ubuntu/ lucid-updates universe&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu &lt;/div&gt;&lt;div&gt;## team, and may not be under a free licence. Please satisfy yourself as to &lt;/div&gt;&lt;div&gt;## your rights to use the software. Also, please note that software in &lt;/div&gt;&lt;div&gt;## multiverse WILL NOT receive any review or updates from the Ubuntu&lt;/div&gt;&lt;div&gt;## security team.&lt;/div&gt;&lt;div&gt;deb http://apt-cacher:9999/ubuntu/ lucid multiverse&lt;/div&gt;&lt;div&gt;deb-src http://apt-cacher:9999/ubuntu/ lucid multiverse&lt;/div&gt;&lt;div&gt;deb http://apt-cacher:9999/ubuntu/ lucid-updates multiverse&lt;/div&gt;&lt;div&gt;deb-src http://apt-cacher:9999/ubuntu/ lucid-updates multiverse&lt;/div&gt;&lt;div&gt;&lt;div&gt;## Uncomment the following two lines to add software from Canonical's&lt;/div&gt;&lt;div&gt;## 'partner' repository.&lt;/div&gt;&lt;div&gt;## This software is not part of Ubuntu, but is offered by Canonical and the&lt;/div&gt;&lt;div&gt;## respective vendors as a service to Ubuntu users.&lt;/div&gt;&lt;div&gt;# deb http://archive.canonical.com/ubuntu lucid partner&lt;/div&gt;&lt;div&gt;# deb-src http://archive.canonical.com/ubuntu lucid partner&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;deb http://apt-cacher:9999/ubuntu-security lucid-security main restricted&lt;/div&gt;&lt;div&gt;deb-src http://apt-cacher:9999/ubuntu-security lucid-security main restricted&lt;/div&gt;&lt;div&gt;deb http://apt-cacher:9999/ubuntu-security lucid-security universe&lt;/div&gt;&lt;div&gt;deb-src http://apt-cacher:9999/ubuntu-security lucid-security universe&lt;/div&gt;&lt;div&gt;deb http://apt-cacher:9999/ubuntu-security lucid-security multiverse&lt;/div&gt;&lt;div&gt;deb-src http://apt-cacher:9999/ubuntu-security lucid-security multiverse&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After you have have saved your sources.list, run the following command:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;sudo apt-get update&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This will download the package index from the apt-cacher server.  You should see lots of "Get" "Hit" and "Ign" lines coming from http://apt-cacher (and other lines for partner and 3rd party servers) if everything is working right.  Remember that the update command will still be running at the normal speed because it has to fetch the indexes from the Internet every time to determine if the cache needs to download any new files.  Also, the first time a given package is downloaded will still be at normal speed, as well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To try it out, run sudo apt-get upgrade to download any available updated packages, or just install a new package of your choice.   The apt-cacher should be functioning from the command line tools, from Update Manager, and from Synaptic Package Manager.  Just remember not to adjust your repository checkboxes under the "Ubunto Software" tab in Synaptic's Settings:Repositories menu, because it no longer knows which repositories we've enabled (they are visible, however, on the "Other Software" tab, and you may adjust them there.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;How To Switch Locations&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are using a laptop or netbook, you may appreciate the ability to quickly switch from one loication to another, and even to be able to download updates when you are not near your regular apt-cacher-ng server at all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have come up with a strategy to accomplish this.  All you need to do (and you must do this while your current apt-cacher-ng server is accessible), is repeat the above steps for "&lt;b&gt;Setting up the APT Cacher Server&lt;/b&gt;" on your local machine, then you can simply edit your /etc/hosts file and change the entry for apt-cacher to point at 127.0.0.1 when you're on the run, or back to your server's IP when you are at home or work.  Making that one line change will allow you to continue using all of the APT tools smoothly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is one disadvantage, especially for netbooks or devices with smaller hard drives, and that is that you will be storing two different caches on your hard drive for files which were downloaded while "on the go", one in the apt-cacher folder, and the other in the system's regular apt system cache under /var/cache/apt&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because of this, you may want to occasionally issue the command:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sudo apt-get clean&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This will clean the system cache of installed packages out of /var/cache/apt, saving some disk space.  This is generally a good idea to do on any Ubuntu system with disk space limitations, whether or not you are running apt-cacher-ng.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, if you ever need to delete the files under /var/cache/apt-cacher-ng, you may safely do so, and apt-cacher will download them again the next time they are needed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Congratulations on successfully setting up apt-cacher-ng -- I hope!  It has saved hours and hours of downloading here in our classroom.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-8081650366489284138?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/8081650366489284138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=8081650366489284138' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8081650366489284138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8081650366489284138'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/07/speeding-up-your-updates-with-ubuntu.html' title='Speeding up your Updates with Ubuntu and APT Cacher NG'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-253729807304692196</id><published>2010-07-12T08:37:00.000-07:00</published><updated>2010-07-12T12:15:41.465-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apt-cacher-ng'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><title type='text'>Apt-Cacher-NG Client side perl script</title><content type='html'>First off a short explanation of Apt-Cacher-NG (acng) is in order. Based on a similar project simply called Apt-Cacher, acng is a download proxy for software packages, primarily for Debian/Ubuntu clients. (http://freshmeat.net/projects/acng/)&lt;br /&gt; The way it works is the server at Community Computer Center, goes out to the official package and release servers and downloads the latest updates, that way when I, or anyone else wants to download updates, our computers simply have to download from the CCC server over the lan, which makes the download about ten times faster.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;(Editorial Note:  If you haven't set up apt-cacher-ng yet, &lt;a href="http://opencomputing.blogspot.com/2010/07/speeding-up-your-updates-with-ubuntu.html"&gt;follow this post first&lt;/a&gt;.)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The only downside is whenever I want to download the updates and I'm not at CCC, I have to go and edit the hosts file in /etc, so I wrote a perl script to cut down on the steps.&lt;br /&gt;&lt;br /&gt;Copy the code into a text file and save it as a .pl, then to use, type sudo perl yourfile.pl.&lt;br /&gt;While this is not the most elegant solution, it was my first attempt at using perl, enjoy.&lt;br /&gt;&lt;br /&gt;#!usr/bin/perl -w&lt;br /&gt;#script by @robots_unix&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;print "Are you at CCC?";&lt;br /&gt;$name = &lt;stdin&gt;;&lt;br /&gt;chomp ($name);&lt;br /&gt;if ($name eq "yes"){        #When I'm at CCC&lt;br /&gt;open(INFILE, '&gt;/etc/hosts');&lt;br /&gt;print INFILE "127.0.0.1 localhost&lt;br /&gt;127.0.1.1 uname&lt;br /&gt;apt-cacher_ip apt-cacher&lt;br /&gt;#127.0.0.1 apt-cacher&lt;br /&gt;apt-cacher_ip server name&lt;br /&gt;# The following lines are desirable for IPv6 capable hosts&lt;br /&gt;::1     localhost ip6-localhost ip6-loopback&lt;br /&gt;fe00::0 ip6-localnet&lt;br /&gt;ff00::0 ip6-mcastprefix&lt;br /&gt;ff02::1 ip6-allnodes&lt;br /&gt;ff02::2 ip6-allrouters&lt;br /&gt;ff02::3 ip6-allhosts\n";&lt;br /&gt;close(INFILE);&lt;br /&gt;}else{            #When I'm not at CCC&lt;br /&gt;open(INFILE, '&gt;/etc/hosts');&lt;br /&gt;print INFILE "127.0.0.1 localhost&lt;br /&gt;127.0.1.1 uname&lt;br /&gt;#apt-cacher_ip apt-cacher&lt;br /&gt;127.0.0.1 apt-cacher&lt;br /&gt;apt-cacher_ip    servername&lt;br /&gt;# The following lines are desirable for IPv6 capable hosts&lt;br /&gt;::1     localhost ip6-localhost ip6-loopback&lt;br /&gt;fe00::0 ip6-localnet&lt;br /&gt;ff00::0 ip6-mcastprefix&lt;br /&gt;ff02::1 ip6-allnodes&lt;br /&gt;ff02::2 ip6-allrouters&lt;br /&gt;ff02::3 ip6-allhosts\n";&lt;br /&gt;close(INFILE);&lt;br /&gt;}&lt;br /&gt;}&lt;/stdin&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-253729807304692196?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/253729807304692196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=253729807304692196' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/253729807304692196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/253729807304692196'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/07/apt-cacher-ng-client-side-perl-script.html' title='Apt-Cacher-NG Client side perl script'/><author><name>robots_unix</name><uri>http://www.blogger.com/profile/16991921542825149149</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-3034230779454603134.post-4509527988334153885</id><published>2010-07-10T17:38:00.000-07:00</published><updated>2010-07-10T17:52:23.698-07:00</updated><title type='text'>Mutt and gmail</title><content type='html'>I think gmail is cool but it could be quicker to use. Right now it is slow and if you use the html version it lacks shortcuts. I think the cool way to go is to install mutt and use it to read your mail from the terminal. This article talks about some of the reasons why it is nicer and some methods to use to make mutt notify you about new mail. And how you might be able to use gmail contacts inside mutt. I think it would be cool to use googlecl to grab a contact while in mutt.&lt;div&gt;install mutt with gmail through IMAP&lt;/div&gt;&lt;div&gt;&lt;a href="http://crunchbanglinux.org/wiki/howto/howto_setup_mutt_with_gmail_imap"&gt;http://crunchbanglinux.org/wiki/howto/howto_setup_mutt_with_gmail_imap&lt;/a&gt;&lt;/div&gt;&lt;div&gt;I like the fact you can make your own shortcuts in mutt that go to certain folders that you have set up like gmail has.&lt;/div&gt;&lt;div&gt;the following will make it so you go to the inbox when typeing gi and others.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;bind editor &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt; noop &lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;macro index gi "&lt;change-folder&gt;=INBOX&lt;enter&gt;" "Go to inbox" &lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;&lt;change-folder&gt;&lt;enter&gt;macro index ga "&lt;change-folder&gt;=[&lt;span class="search_hit" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(51, 51, 51); background-color: rgb(255, 255, 153); "&gt;Gmail&lt;/span&gt;]/All Mail&lt;enter&gt;" "Go to all mail" &lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;macro index gs "&lt;change-folder&gt;=[&lt;span class="search_hit" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(51, 51, 51); background-color: rgb(255, 255, 153); "&gt;Gmail&lt;/span&gt;]/Sent Mail&lt;enter&gt;" "Go to Sent Mail" &lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;macro index gd "&lt;change-folder&gt;=[&lt;span class="search_hit" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(51, 51, 51); background-color: rgb(255, 255, 153); "&gt;Gmail&lt;/span&gt;]/Drafts&lt;enter&gt;" "Go to drafts"&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;br /&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;all the rest of the options are listed in the link above. I like the fact that you can change the editor for mutt too.&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;and the wiki might be helpful&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;a href="http://wiki.mutt.org/index.cgi?MuttGuide"&gt;http://wiki.mutt.org/index.cgi?MuttGuide&lt;/a&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;if anyone tries to install gmail or another client with mutt then post here and let us know how it went.&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "&gt;&lt;space&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;change-folder&gt;&lt;enter&gt;&lt;br /&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/enter&gt;&lt;/change-folder&gt;&lt;/space&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&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/3034230779454603134-4509527988334153885?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/4509527988334153885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=4509527988334153885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4509527988334153885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4509527988334153885'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/07/mutt-and-gmail.html' title='Mutt and gmail'/><author><name>Michael</name><uri>http://www.blogger.com/profile/15703804696957522260</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Aen0M3MeXJA/S-31O7p8ZEI/AAAAAAAAABw/_HX99TFvU6U/S220/michael.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-2669376339712292185</id><published>2010-07-09T22:13:00.000-07:00</published><updated>2010-07-09T22:23:42.854-07:00</updated><title type='text'>Too many messages in mutt</title><content type='html'>I have learned something useful for anyone that uses mutt to mail from the terminal. I can be used to get messages from cron that runs periodically. Cron can run as much as once a minute. My cron has been sending me the message "don't update" for 6 months. It has caused about 40MB or 29000 messages to pile up in mutt. Now I have fixed the problem so it won't echo out for success. It should only tell me about failures not successes since they don't happen very often.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Usually you can delete hundreds of messages by holding down the delete button but since I had so many messages I had to learn how to delete bult amounts of mutt mail all at once. Here is how to do it:&lt;/div&gt;&lt;div&gt;type D&lt;/div&gt;&lt;div&gt;This will tell mutt to delete using a certain pattern. I tried using "update" but it didn't work so I figured out what will tag all of the messages at once.&lt;/div&gt;&lt;div&gt;type .&lt;/div&gt;&lt;div&gt;Thats right, a period.&lt;/div&gt;&lt;div&gt;Then type $ to have mutt ask if you want to purge 29000 messages. It takes a second and its done.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-2669376339712292185?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/2669376339712292185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=2669376339712292185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2669376339712292185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2669376339712292185'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/07/too-many-messages-in-mutt.html' title='Too many messages in mutt'/><author><name>Michael</name><uri>http://www.blogger.com/profile/15703804696957522260</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Aen0M3MeXJA/S-31O7p8ZEI/AAAAAAAAABw/_HX99TFvU6U/S220/michael.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-2279789255424543885</id><published>2010-06-20T14:15:00.001-07:00</published><updated>2010-06-22T18:29:16.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Terminal'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Using Exclamation marks in Google Command Line</title><content type='html'>As I found out in my previous post, you can't just add an ! into your post without getting a bash error.  You can sort of escape them with a /, but then they both show up (like this: /!), which is silly.  You can get around this by first, making sure that you use single quotes around your post and then adding a $ right before the quote that begins your post:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: monospace; padding: 2px 3px; background: #beb;"&gt;google blogger --title 'this is a blog post' $'this is an exciting blog!'&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-2279789255424543885?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/2279789255424543885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=2279789255424543885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2279789255424543885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2279789255424543885'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/06/using-exclamation-marks-in-google_8138.html' title='Using Exclamation marks in Google Command Line'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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-3034230779454603134.post-4561257238204256665</id><published>2010-06-19T00:24:00.001-07:00</published><updated>2010-06-19T00:24:44.472-07:00</updated><title type='text'>Testing out the new Google CLI</title><content type='html'>Wow, Google keeps surprising me with new toys.  I know I could just log into the GUI, but this is just too cool(bang)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-4561257238204256665?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/4561257238204256665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=4561257238204256665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4561257238204256665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4561257238204256665'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/06/testing-out-new-google-cli.html' title='Testing out the new Google CLI'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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-3034230779454603134.post-2347512998527104729</id><published>2010-06-01T17:11:00.000-07:00</published><updated>2010-06-01T17:19:12.311-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Ubuntu 10.04 Lucid Lynx</title><content type='html'>We've had the chance to install Ubuntu 10.04 "Lucid Lynx" on several machines now.  Except for one particular model of Dell, the experience has been wonderful.  The boot time is great--less than 10 seconds on reasonably new hardware.  The new default visual theme is refreshing and beautiful.  It "just works," which is more than I can say for the aging Windows XP at this time, even when used with older hardware that it should "know about."&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In fact, this release has been so good, that I've now reinstalled my personal notebook computer with a fresh copy of Lucid.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are some downsides, such as the lack of customization in the login screen (a problem that has carried over from the previous release, Karmic Koala) but the trade off for speed and stability is well worth it, and I'm sure the missing options will be reintroduced in time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For fun, I also tried installing Debian Squeeze, and was not as happy with the outcome.  The Ubuntu team really does do a lot of work to make Linux more user-friendly.  I also tried Linux Mint 9 Isadora, which is based off of Ubuntu Lucid Lynx, and it seems quite formidable in its own right.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of note--I particularly like the inclusion of the new Thunderbird 3 email client.  It has some amazing features, but its attempt to autodetect the settings for my mailbox was a failure, and I had to manually set the options the correct way--a task I don't think a normal user would have been able to do, since it involved turning off features that were turned on that in past versions of Thunderbird never were turned on.   On the positive side, I love the new "Smart Folders" and the improved search capabilities.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-2347512998527104729?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/2347512998527104729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=2347512998527104729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2347512998527104729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2347512998527104729'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/06/ubuntu-1004-lucid-lynx.html' title='Ubuntu 10.04 Lucid Lynx'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-7108276226199159641</id><published>2010-06-01T13:45:00.000-07:00</published><updated>2010-06-01T13:48:17.185-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Community Computer Center</title><content type='html'>Susie and I have opened a new business with an emphasis on Free Software.  It is called the Community Computer Center, and is a "brick and mortar" store which sells GNU/Linux-based desktop and laptop computers, does computer repairs (including Linux conversions), and teaches a variety of classes from "introduction to computers" up to database design and programming.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We are also making Open Computing into our businesses' official blog, and its posts will be featured on the home page of our site, &lt;a href="http://communitycomputercenter.com"&gt;communitycomputercenter.com&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7108276226199159641?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7108276226199159641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7108276226199159641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7108276226199159641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7108276226199159641'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/06/community-computer-center.html' title='Community Computer Center'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-2129533396478569742</id><published>2010-05-15T13:42:00.000-07:00</published><updated>2010-05-15T13:54:39.244-07:00</updated><title type='text'>Working Video - Intel 82810 CGC, Lucid Lynx, emachines T1105, BenQ FP553</title><content type='html'>I had a lot of trouble with this video configuration:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm reviving an old emachines computer, model T1105.  It has onboard Intel 82810 graphics, and I have it plugged into a BENQ 15" flat panel, model FP553.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I installed Ubuntu 10.04 Lucid Lynx, and as it boots up, I see something vaguely resembling a boot graphic (the words Ubuntu 10.04 centered on the screen with dots under it), then the screen flickers between black screen and a text console login prompt for a few seconds, until it finally leaves me at a login prompt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After much struggling, and attempting to add a better PCI graphics, card, just to find out that the system became unstable with random reboots (probably because of the low wattage PSU in an emachine,) I reverted back to using the onboard card and attempted to solve the problem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I installed all the latest updates using sudo apt-get update and sudo apt-get install to grab the kernel that was held back in the regular update.  Still no good, then I generated an xorg.conf manually by doing this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sudo Xorg -configure&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It dumps the conf into your user's home directory as xorg.conf.new, so we copy it back like this&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sudo cp ~/xorg.conf.new /etc/X11/xorg.conf&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, I edited the xorg.conf:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sudo pico /etc/X11/xorg.conf&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;WARNING:  Do not perform the below operation if you are using a CRT monitor.  I am adjusting the refresh rates to radically different values, and it could harm a CRT monitor.  This is only proven to work with the BENQ FP553.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I found the section labeled Monitor, which looks like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Section "Monitor"&lt;/div&gt;&lt;div&gt;        #DisplaySize      310   230     # mm&lt;/div&gt;&lt;div&gt;        Identifier   "Monitor0"&lt;/div&gt;&lt;div&gt;        VendorName   "BNQ"&lt;/div&gt;&lt;div&gt;        ModelName    "Benq FP553"&lt;/div&gt;&lt;div&gt;        HorizSync    50.0 - 54.0&lt;/div&gt;&lt;div&gt;        VertRefresh  48.0 - 49.0&lt;/div&gt;&lt;div&gt;        Option      "DPMS"&lt;/div&gt;&lt;div&gt;EndSection&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So that is the default for this monitor right now.  I am pretty sure its wrong, because the vert refresh rate only allows a 1 hz variance between 48 and 49!   Well, I decided to just open it up, by changing the HorizSync to 20.0 - 94.0 and the VertSync to 38.0 - 79.0, so my final section looks like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Section "Monitor"&lt;/div&gt;&lt;div&gt;        #DisplaySize      310   230     # mm&lt;/div&gt;&lt;div&gt;        Identifier   "Monitor0"&lt;/div&gt;&lt;div&gt;        VendorName   "BNQ"&lt;/div&gt;&lt;div&gt;        ModelName    "Benq FP553"&lt;/div&gt;&lt;div&gt;        HorizSync    20.0 - 94.0&lt;/div&gt;&lt;div&gt;        VertRefresh  38.0 - 79.0&lt;/div&gt;&lt;div&gt;        Option      "DPMS"&lt;/div&gt;&lt;div&gt;EndSection&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Saved my changes, ran sudo /etc/init.d/gdm start, and voila!  It works.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is a cleaner way.  I should narrow it down to the correct specs.  But i'm happy for now.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-2129533396478569742?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/2129533396478569742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=2129533396478569742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2129533396478569742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2129533396478569742'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2010/05/working-video-intel-82810-cgc-lucid.html' title='Working Video - Intel 82810 CGC, Lucid Lynx, emachines T1105, BenQ FP553'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-8852846637389775600</id><published>2009-11-06T13:10:00.000-08:00</published><updated>2009-11-06T13:17:09.071-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>One Thing Linux Doesn't Support (Yet)</title><content type='html'>&lt;span style="font-style: italic;"&gt;Today I got a phone call that helped me realize one thing that Linux can't do, at least not yet:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"Hello Sir, I am calling from [unintelligable speech], to help improve the performance of your computer."&lt;br /&gt;&lt;br /&gt;"Ok."&lt;br /&gt;&lt;br /&gt;"I will tell you how to do this.  The first thing you need to do is turn your computer on."&lt;br /&gt;&lt;br /&gt;"It is already on."&lt;br /&gt;&lt;br /&gt;"Then I will have you click on Start."&lt;br /&gt;&lt;br /&gt;"I don't have a Start button."&lt;br /&gt;&lt;br /&gt;"... You have a Macintosh?"&lt;br /&gt;&lt;br /&gt;"No, I have Linux."&lt;br /&gt;&lt;br /&gt;"Excuse me?"&lt;br /&gt;&lt;br /&gt;"I have Linux."&lt;br /&gt;&lt;br /&gt;"You have a Linux?"&lt;br /&gt;&lt;br /&gt;"Yes."&lt;br /&gt;&lt;br /&gt;"I am sorry sir, we only provide technical support for Windows computers.  Goodbye."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-8852846637389775600?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/8852846637389775600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=8852846637389775600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8852846637389775600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8852846637389775600'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2009/11/one-thing-linux-doesnt-support-yet.html' title='One Thing Linux Doesn&apos;t Support (Yet)'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-8463378857892648433</id><published>2009-03-27T14:15:00.001-07:00</published><updated>2009-03-27T14:23:33.504-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Sounds'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Calling Microsoft</title><content type='html'>I had to call Microsoft to activate my copy of Windows XP Pro (too many re-installs), and I was surprised at how HORRIBLE their user interface was.  When you call, the first thing you hear is a error loud chime.  The same sound you hear when you try to do something that is not allowed.  Then, after answering a couple questions, you are asked to read off about 40 digits.  After each set of 6, there is another (different) error chime.  I won't even mention that there is no way to shorten the call by answering the questions prematurely .. but that's another topic.&lt;br /&gt;&lt;br /&gt;So, I figure, either someone designed the call-in program who had never really used Windows to any large extent (and thus did not recognize that the sounds would put fear in the hearts of their callers (maybe a Mac user!)).  Or, they did it on purpose to try and scare off the software thieves.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-8463378857892648433?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/8463378857892648433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=8463378857892648433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8463378857892648433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8463378857892648433'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2009/03/calling-microsoft.html' title='Calling Microsoft'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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-3034230779454603134.post-5080425872311812662</id><published>2009-01-01T14:57:00.000-08:00</published><updated>2009-01-01T21:06:26.640-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>My Comprehensive List of Free or Open Source Software for XP</title><content type='html'>I received a brand new hard drive (400GB SATA) for Christmas this year (thanks Mike!), and so I am spending today reinstalling my main computer with Windows XP Pro.  Unlike most &lt;b&gt;Linux&lt;/b&gt; distributions, Windows is devoid of any useful programs after it has been freshly installed (no, I'm not saying that windows is a linux distro).  As I reinstall all of my old programs, I'll be keeping track of them here for future reference, and maybe some passer-by (that's you) will find it useful.&lt;br /&gt;&lt;br /&gt;I got tired of adding text and links about halfway through - I will update tomorrow or so.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The Operating System:&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Windows XP Pro&lt;/h3&gt;Much better than XP Home, if you are going to use your computer in any custom way, or on a network.  I'm not even going to go into Windows Vista here.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Debian, Etch&lt;/h3&gt;&lt;a href="http://www.debian.org/"&gt;Debian&lt;/a&gt; will be installed as a dual boot on my 80GB drive... I've only used &lt;a href="http://www.mandriva.com/"&gt;Mandriva&lt;/a&gt; and &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu/Xubuntu&lt;/a&gt; thus far, so this will be exciting.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Appearance:&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Royale Noir XP Theme&lt;/h3&gt;Download the &lt;a href="http://www.istartedsomething.com/20061029/royale-noir/"&gt;Royale Noir theme&lt;/a&gt; and follow the instructions.  This will give you a darker (navy or black) version of the Windows Media Center theme.  Or, you could set the theme to Windows Classic and forget about trying to look snazzy.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Desktop Wallpaper&lt;/h3&gt;Go visit &lt;a href="http://www.smashingmagazine.com/category/graphics/"&gt;Smashing Magazine&lt;/a&gt; and download a desktop wallpaper.  They scour the web for amazing wallpapers so you don't have to.  It doesn't matter what you pick as long as it isn't the default 'blissful hill'.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Internet:&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Browsers&lt;/h3&gt;As a web developer, I install every browser, but only really use &lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;Firefox&lt;/a&gt;.  &lt;a href="http://www.opera.com/"&gt;Opera 9&lt;/a&gt; seems comparable, but it comes down to 1) extensions and 2) familiarity.  &lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt; isn't ready for consumer use yet, &lt;a href="http://tredosoft.com/Multiple_IE"&gt;Internet Explorer 6&lt;/a&gt; is a dinosaur, and &lt;a href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx"&gt;Internet Explorer 7&lt;/a&gt; is slow / annoying to use.  I let Windows install IE7, and then install multiple IEs in order to get IE6.  This lets Microsoft update IE7 for me, so I have the latest version for testing.  &lt;a href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt; is fast, but I don't like the User Interface - it's too hard to find the features I am looking for (without even knowing if they exist).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Browser Plugins&lt;/h3&gt;&lt;a href="http://www.adobe.com/shockwave/welcome/"&gt;Flash and Shockwave&lt;/a&gt;, &lt;a href="http://get.adobe.com/reader/"&gt;Acrobat Reader&lt;/a&gt;, &lt;a href="http://www.apple.com/quicktime/download/"&gt;Quicktime&lt;/a&gt; (skip if you plan on installing iTunes), &lt;a href="http://www.java.com/en/download/help/6000010300.xml"&gt;Java&lt;/a&gt;, &lt;a href="http://www.real.com/"&gt;Real Player&lt;/a&gt; or you can install &lt;a href="http://www.codecguide.com/download_real.htm"&gt;Real Alternative&lt;/a&gt; which lets you play the RM files without the terrible media player!&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Pidgin&lt;/h3&gt;&lt;a href="http://www.pidgin.im/"&gt;Pidgin&lt;/a&gt; is an all-in-one Instant messenger.  I like it for the custom smiley themes and plugins.  I used to use &lt;a href="http://www.ceruleanstudios.com/"&gt;Trillian&lt;/a&gt;, but it conflicted with my computer for some unknown reason.  &lt;a href="http://www.trillian.im/"&gt;Astra&lt;/a&gt; looks awesome, but it's been coming soon for at least two years, probably more.  &lt;a href="http://www.digsby.com/?utm_campaign=new_w&amp;utm_content=new&amp;utm_medium=new&amp;utm_source=new"&gt;Digsby&lt;/a&gt; looks kind of cool, and if Pidgin ever fails me, I'll try it out.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;mIRC&lt;/h3&gt;&lt;a href="http://www.mirc.com/"&gt;mIRC&lt;/a&gt; is the best IRC client that I've tried.  The UI is simple yet powerful.  Lots of bells and whistles if you want them.  And no fluff graphics either.  I turn the theme to dark as soon as I install it.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Thunderbird&lt;/h3&gt;&lt;a href="http://www.mozilla.com/en-US/thunderbird/"&gt;Thunderbird&lt;/a&gt; is better than Outlook Express.  There might be a better free email client, but this one is good enough for me.  I don't like the default theme, so I install &lt;a href="https://addons.mozilla.org/en-US/thunderbird/addon/1388"&gt;Azerty Mail&lt;/a&gt; instead.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Azureus&lt;/h3&gt;&lt;a href="http://azureus.sourceforge.net/"&gt;Azureus&lt;/a&gt; (or Vuze) is a pretty good P2P app.  Vuze sucks, change it back to the classic mode.  Useful for downloading the latest Linux Distributions.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;eMule&lt;/h3&gt;&lt;a href="http://www.emule-project.net/home/perl/general.cgi?l=1&amp;rm=download"&gt;eMule&lt;/a&gt; is good for downloading old, hard to find programs.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;LimeWire&lt;/h3&gt;&lt;a href="http://www.limewire.com/download/"&gt;Limewire&lt;/a&gt; is great for getting viruses and spyware!&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;AVG 8&lt;/h3&gt;Before installing Limewire, make sure you have some basic anti-virus protection.  Unless someone out there knows of a better free anti-virus, I am currently recommending &lt;a href="http://free.avg.com/download-avg-anti-virus-free-edition"&gt;AVG-Free&lt;/a&gt;.  &lt;a href="http://www.avira.com/en/download/index.html"&gt;Avira&lt;/a&gt; is also good, but has pop-up advertisements.  Clamwin sucks, as does Avast.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Spybot S&amp;D&lt;/h3&gt;&lt;a href="http://www.spybot.com/en/download/index.html"&gt;Spybot&lt;/a&gt;'s most useful feature is the teatimer system change monitor.  This alerts you to changes to your registry, startup, browser, context menus, etc.  Better than Vista's watch-dog because it actually tells you what is happening, and saying no lets the program continue to run as if it HAD made the change rather than just stopping the program from running altogether.  I use this for programs like quicktime that want to add a startup entry so that it will load faster.  Since I only use quicktime once every couple months, this is hardly a good use of my start-up space.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;FileZilla&lt;/h3&gt;This is a great program, but I have not had good luck with version &lt;a href="http://filezilla-project.org/download.php?type=client"&gt;3.x&lt;/a&gt;.  I can only assume that it DOES work for most people or they would have fixed the issue already (disconnects every few minutes).  If you can find version 2.x, it's pretty darn good.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Firefox Add-ons:&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Camifox theme&lt;/h3&gt;There are a lot of good themes for Firefox, but &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7527"&gt;Camifox&lt;/a&gt; is nice and simple without looking ugly.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3682"&gt;Add to Search Bar&lt;/a&gt;&lt;/h3&gt;This lets you add any search box to the firefox search in the upper right-hand corner, instead of relying on the ten or so default ones.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3255"&gt;Cookie Swap&lt;/a&gt;&lt;/h3&gt;Cookie Swap lets you quickly switch between named sets of cookies so that you can use multiple accounts with the same service without re-logging in all the time.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7400"&gt;Edit Middle&lt;/a&gt;&lt;/h3&gt;An AwesomeBar hack.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7423"&gt;Enter Selects&lt;/a&gt;&lt;/h3&gt;AwesomeBar Hack&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3176"&gt;Favicon Picker&lt;/a&gt;&lt;/h3&gt;Lets you change or add a favicon to any of your bookmarks.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/433"&gt;Flash Block&lt;/a&gt;&lt;/h3&gt;Special mention to this extension for older computers that can't handle the amount of flash that some websites use.  Or, if your eyes can't handle it!&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2410"&gt;Foxmarks&lt;/a&gt;&lt;/h3&gt;Useful if you have more than one computer, dual boot, or have ever lost all your bookmarks when your HD crashed.  It synchronizes all of your bookmarks with their server, so that when you add a bookmark it is added to all of your computers.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7377"&gt;Go Parent Folder&lt;/a&gt;&lt;/h3&gt;Lets you go to the parent folder after searching for a bookmark in the organizer.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="http://www.google.com/notebook/download"&gt;Google Notebook&lt;/a&gt;&lt;/h3&gt;A notetaking thingy - there are some problems with it, but I haven't gotten around to trying any of the other similar extensions yet.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="http://www.google.com/tools/firefox/toolbar/FT3/intl/en/index.html"&gt;Google Toolbar&lt;/a&gt;&lt;/h3&gt;Essential for the 'Go to Next Search Word' buttons.  I can't use the web without them.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7429"&gt;Hide Unvisited&lt;/a&gt;&lt;/h3&gt;AwesomeBar Hack&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/249"&gt;HTML Validator&lt;/a&gt;&lt;/h3&gt;A Web Dev tool that tells me how many errors a web page has.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7637"&gt;Old Location Bar&lt;/a&gt;&lt;/h3&gt;AwesomeBar hack - Tries to make the AwesomeBar just be a location bar, it isn't quite sufficient, and I'm not sure if it helps or hinders more ...&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/42"&gt;OpenBook&lt;/a&gt;&lt;/h3&gt;Lets you customize the add bookmark dialog.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1759"&gt;Organize Status Bar&lt;/a&gt;&lt;/h3&gt;Firefox 3 didn't have the same status bar layout as FF2, this will let you move things around however you like.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1730"&gt;ScribeFire&lt;/a&gt;&lt;/h3&gt;A quick blog editor.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7755"&gt;Show Keywords&lt;/a&gt;&lt;/h3&gt;AwesomeBar Hack&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4072"&gt;Smart Bookmarks Bar&lt;/a&gt;&lt;/h3&gt;Transforms your bookmark bar into a list of single icons.  This is where the favicon picker comes in handy.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8485"&gt;Tagmarks&lt;/a&gt;&lt;/h3&gt;I haven't tried this one yet.  It lets you add little icons to your bookmarks, visually placing them into categories for you.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7269"&gt;Unsorted Bookmarks Folder Menu&lt;/a&gt;&lt;/h3&gt;This places your unsorted bookmarks in a folder that is accessible from the bookmarks menu.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;Web Developer&lt;/a&gt;&lt;/h3&gt;By far the most useful extension that I have installed.  It is the swiss army knife of web development tools.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Applications:&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Open Office&lt;/h3&gt;&lt;a href="http://www.openoffice.org/"&gt;Open Office&lt;/a&gt; is free and comparable to Microsoft Office.  Writer is AWESOME! much better than Word for pretty much anything.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Google Earth&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Edit Pad&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Graphics and Design:&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Paint.NET&lt;/h3&gt;&lt;a href="http://www.getpaint.net/"&gt;Paint.NET&lt;/a&gt; is a free photo editor along the lines of Photoshop.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Picassa&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Inkscape&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Pepekura&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;SketchUp&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Audio/Video:&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;CDex&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Winamp&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Streamripper&lt;/h3&gt;&lt;a href="http://streamripper.sourceforge.net/"&gt;Streamripper&lt;/a&gt; rips individual songs from streamed internet radio stations. If you use the WinAmp version, make sure to get a &lt;a href="http://streamripper.sourceforge.net/srskins.php"&gt;custom skin&lt;/a&gt; for it, the default one is (was) terrible.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;iTunes&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Cool Edit replace&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;DivX&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step Voice Recorder&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Video LAN&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Switch Sound Converter&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Tools:&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Sequoia View&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;WinRar&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;TweakUI&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;For good measure, here's a list of the proprietary/non-free programs that I use:&lt;br /&gt;&lt;br /&gt;Photoshop 7 or CS3&lt;br /&gt;Flash&lt;br /&gt;InDesign&lt;br /&gt;Adobe Acrobat&lt;br /&gt;Microsoft Publisher&lt;br /&gt;Nero 6&lt;br /&gt;FolioBound VIEWS (if anyone knows of a good replacement, leave me a note!)&lt;br /&gt;PowerDVD (same for PowerDVD)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-5080425872311812662?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/5080425872311812662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=5080425872311812662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5080425872311812662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5080425872311812662'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2009/01/my-free-open-source-software.html' title='My Comprehensive List of Free or Open Source Software for XP'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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-3034230779454603134.post-4864799688004481862</id><published>2008-12-16T20:28:00.000-08:00</published><updated>2008-12-16T21:26:04.066-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='File Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='Photos'/><title type='text'>Picasa 3</title><content type='html'>I have a LOT of photos on my computer (approx. 23,000).  They range from family snapshots to references for various art projects to charts and diagrams relating to topics that interest me and so on.  I currently use Windows Explorer to sort out my images, and as of yet, I haven't found anything that works better.  If explorer had tagging or virtual folders or something, it would be all I needed.  All of the programs that DO offer those things do so in a poor manner or are seriously lacking in the stability / usability areas.  I tried Picasa when Google first bought it, and found it wanting in a number of areas, but uninstalled it because it was unstable and caused my computer to crash.  Now that Picasa 3 is out, I thought I'd give it a try.  My thoughts, and a wish-list:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Good&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It's stable now!  I've added all my pictures, and it still runs.  I can't add hundreds of photos to the photo-deck thing without it getting pretty slow, but i can offload them fairly easily.&lt;br /&gt;&lt;br /&gt;The collage maker is awesome, and I used it to create the back of a calendar yesterday, and it was great.  The only thing that would make it better would be to allow you to individually move the photos around, rather than relying on "Scramble" to put them in the right place.&lt;br /&gt;&lt;br /&gt;The thumbnail view is pretty good, the slider bar on the right takes some getting used to, but it's cool when you do.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Okay&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The User Interface has a lot to be desired, but once you find what you are looking for, most tasks are easy and straightforward.  Exceptions will be covered in a sec.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Bad / Annoying&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When you're importing your initial collection, you cannot import a single set of folders, sort them into albums then add a second set of folders and still be able to easily see what you just added.  You can sort by creation date, but when you have such a variety of images that isn't helpful - new folders appear randomly in the folders list.  The same goes for all of the folder sort options.  You can sort albums by when you added them to Picasa, but not folders.&lt;br /&gt;&lt;br /&gt;Albums are great, but you can only place them in the Album collection, not in any user created collection.  This is my biggest beef with Picasa - collections AND albums are both virtual organizers, why do they not work together?  If this was added, I think it would finally do the one thing I want a program like it for: to organize my photos.&lt;br /&gt;&lt;br /&gt;You also cannot place a folder into more than one collection!  This means that there is no way for me to put a collection of photos in more than one place.  What if I want to put my photos from a Grand canyon trip with other photos from that year, with other photos of my family and with pictures of the Grand Canyon.  Currently, there is no way to do this efficiently.  Either, I have to create an album for each subset of images which multiplies quickly and gets to be too much to deal with (remember, I have 20k photos) OR, create collections and choose one collection for each folder.  Since there are no other sub folders, this also multiplies fairly quickly.&lt;br /&gt;&lt;br /&gt;If I could only add photos to Albums, with a way to have subsets IN the albums (even if it just kept track of which folder it came from) and then add those to my custom collections.&lt;br /&gt;&lt;br /&gt;After adding all my photos to Picasa, I ended up with 500 folders that got stuck into the Other Stuff folder.  There is no difference (for me) between these photos and the ones in the Folders collection, so, I want to move ALL of them to the main Folders collection.  There is NO way to move more than one folder to a new collection at the same time.  It might work well for five or sic folders, but I don't want to individually move 500 folders (right click, choose move to collection, choose Folders from a list, repeat).&lt;br /&gt;&lt;br /&gt;How does Picasa decide what gets imported into Folders and what gets imported into Other Stuff?  About a third of my folders went into the Other Stuff collection rather than the Folders collection.  I looked it up on their website, which told me that these are folders which have other types of content in them.  But, I looked at the source folders, and many of them are all JPGs - I think this must be a bug.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Missing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I wish I could select multiple photos between folders.  I know I can push-pin them into the "shelf", but this gets annoying, and it's easy to forget that you are required to do so.  It's also easy to forget to empty the shelf after moving them somewhere.&lt;br /&gt;&lt;br /&gt;Currently you can only email photos with a Gmail account or Thunderbird.  I know why, but it would be nice to be able to send with other clients (hotmail, yahoo, outlook, etc)&lt;br /&gt;&lt;br /&gt;I remember tagging was a big thing in the older version of Picasa, but it conspicuously hard to get to without using CTRL-T or CTRL-K - and you can't see them either, or look at a list of tags or ... I think they are trying to phase them out, which is too bad - a well designed tagging system can be used for almost anything - which is what a good app can do.  It's like a food processor that can only accept foods that are a certain size or shape or color.  It seems arbitrary to the people who are trying to use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-4864799688004481862?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/4864799688004481862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=4864799688004481862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4864799688004481862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4864799688004481862'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2008/12/picasa-3.html' title='Picasa 3'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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-3034230779454603134.post-8572251852991405536</id><published>2008-10-11T13:17:00.000-07:00</published><updated>2008-10-11T13:55:19.358-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='Wine'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Chromium'/><category scheme='http://www.blogger.com/atom/ns#' term='Opera'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>AwesomeBar and Me - Why I've left Firefox.</title><content type='html'>I upgraded to Firefox 3 back when it was in beta.  Then, I uninstalled and went back to Firefox 2.  I tried it again a few weeks later.  Then, I uninstalled and went back to Firefox 2.&lt;br /&gt;&lt;br /&gt;This was quite a while ago, but I will explain how I felt at the time:&lt;br /&gt;&lt;br /&gt;Something was lacking in Firefox 3 that made me uncomfortable, and unable to be productive. Namely, the address bar, which had been replaced with something called the AwesomeBar.  My main beef with the AwesomeBar actually isn't its ugly look, or the fact that it retrieves bookmark results, but rather, the fact that it requires visual interaction to be used effectively.  The address bar was reliable.  I knew what it would do when I typed.  Its algorithm was something that could be fully comprehended in my head.  I knew if I had cleared my history before starting, and had gone to calendar.google.com once, then visited ubuntu.com and apple.com and microsoft.com that I could simply press Alt+D "c" down enter to go back to calendar.google.com.  Furthermore, it was the same knowledge I used to operate the old Start-&gt;Run dialog back in Windows, and the same knowledge I use to operate every autocomplete field in every website and every dialog box in both Windows and Linux.&lt;br /&gt;&lt;br /&gt;With the AwesomeBar, my absolute and complete knowledge of the data being searched was taken away. Sure, I know which types of things it searches, but I don't know what data was present (in page Titles, for example)  The extra steps are that I would have to press Alt+D, type, then &lt;span style="font-weight: bold;"&gt;look at the results&lt;/span&gt; and determine if there was an error, if so, I would have to &lt;span style="font-weight: bold;"&gt;arrow to the desired result&lt;/span&gt; before pressing enter.  The developers of Firefox knew this, that's why they redesigned the widget visually to try to create enough visual distinction so that it could be scanned quickly. The problem is, I don't want to visually scan it at all.  That isn't something I have ever been accustomed to doing and it slows me down and takes my focus away from the page I was browsing.&lt;br /&gt;&lt;br /&gt;Since that time, I have continued to use "good old" Firefox 2. However, for whatever reason, my Firefox 2 installation began to become unstable. It would freeze up requiring restarts quite often, usually when I click on a javascript-based link. I finally got irritated, and decided that maybe it would be time to update or switch.&lt;br /&gt;&lt;br /&gt;First, I tried Crossover Chromium.  It is goofy because of its dependence on wine.  I will give it another chance when it has been ported natively to Linux.&lt;br /&gt;&lt;br /&gt;I searched through the Firefox add-ons/extensions to see what has been created, and found both "oldbar" and "Old Location Bar" - I had tried oldbar before, so I decided to go with "Old Location Bar," bit the bullet, upgraded to Firefox 3, and installed the extension.  I didn't read carefully enough, and I presumed Old Location Bar would do what I wanted, as people were praising it for being better than oldbar. I was disappointed with Old Location Bar.  It still didn't solve my problem at all.&lt;br /&gt;&lt;br /&gt;Firefox 2 is freezing up.  Firefox 3 is not efficient.  I decided to go "old school" and switch to Opera.&lt;br /&gt;&lt;br /&gt;I installed Opera 9.27 from the Hardy repository.  Just a little ugly feeling in the menus, but the toolbars are not too bad.  I can live with this.  Alt+D doesn't work!  Dang.  So, I did this:&lt;br /&gt;&lt;br /&gt;Tools -&gt; Preferences -&gt; Shortcuts -&gt; Keyboard setup - Opera Standard -&gt; Edit.&lt;br /&gt;&lt;br /&gt;The one under "Browser Window" that says "Focus address field | Focus message list" I clicked, and changed to "d alt", clicked OK, and clicked OK again.  Alt+D ... works!&lt;br /&gt;&lt;br /&gt;Now I did some experiments with the address bar.  It works!&lt;br /&gt;&lt;br /&gt;I realize I'm not using the latest release of Opera.  I may try upgrading and see if it still works.  But, as long as it does what I need, maybe this older release is fine.&lt;br /&gt;&lt;br /&gt;As I save this post, regrettably, I will change my default browser to Opera and uninstall Firefox 3.  It isn't because I wanted to.  It's because I was forced out.  If I knew how to fork the Firefox code and reinstall the genuine old Address Bar, I would rather do that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-8572251852991405536?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/8572251852991405536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=8572251852991405536' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8572251852991405536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8572251852991405536'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2008/10/awesomebar-and-me-why-ive-left-firefox.html' title='AwesomeBar and Me - Why I&apos;ve left Firefox.'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-7878873650260715206</id><published>2008-07-10T00:29:00.000-07:00</published><updated>2008-07-10T01:26:12.578-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bloat'/><category scheme='http://www.blogger.com/atom/ns#' term='sad'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Firefox 3</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ZF1ngbiTm1w/SHXDcrzcskI/AAAAAAAAACg/16ZTR72HBfs/s1600-h/firefox.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_ZF1ngbiTm1w/SHXDcrzcskI/AAAAAAAAACg/16ZTR72HBfs/s200/firefox.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5221294240568226370" /&gt;&lt;/a&gt;After using FF3 for a while, it's time to give a review.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Smart Location Bar, AKA the Awesome Bar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's not really fair starting with the worst feature in the new Firefox, but I'm not the one who named it the awesome bar, so I don't feel too bad.&lt;br /&gt;&lt;br /&gt;This is the only new feature that actually HINDERS my use of the internet.  I have a few different early extensions installed to try and revert it back to usefulness, but alas, it's still broken.  Instead of the old, type what you want to get what you want, now the procedure is much more arcane.  Firefox tries to guess which sites you would like to visit by looking in your history, favorites and so on.  If I am typing in the address bar, I am usually typing an address, rather than fumbling around trying to find a site I have been to.  If I wanted to open one of my favorites, I would ... use my favorites! If I'm looking for a site I visited last week, I would search through my history.&lt;br /&gt;&lt;br /&gt;I'll use a visit to Firefox.com as an example of the new process.  in FF2 if I wanted to go to firefox.com, I would type &lt;i&gt;firef&lt;/i&gt; in the address bar, and by that time, I would be able to pick firefox.com off of the drop down list by pushing the down arrow once or twice and then pushing enter.&lt;br /&gt;&lt;br /&gt;Now, however, when I type in &lt;i&gt;firefox&lt;/i&gt;, I get every website that has firefox anywhere in it's address, title or even a keyword I added to one of my favorites.  I have to either, type the entire address out, or search though a lengthy list in order to reach my destination.&lt;br /&gt;&lt;br /&gt;I am just waiting for the perfect extension that will fix my complaints.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tagging!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was very excited about adding tagging to firefox, but it was fairly poorly implemented, so .... more waiting for the bugs to be worked out.&lt;br /&gt;&lt;br /&gt;I have a complex bookmark sorting system involving 200 folders, sub folders and sub-sub folders.  Firefox doesn't give you a way to know what tags you have already used.  In huge multi-user systems, letting each user tag items and then reaping the combined efforts of the masses is a great idea.  But, the individual needs a concrete way (or ways!) to stay consistent and organized.  After all, that's the point of having bookmarks in the first place - finding them again.&lt;br /&gt;&lt;br /&gt;There were quite a few bugs involving duplicate tags, blank tags and so on.  There is no way to tag a bookmark when you add it through the menu, nor can you add tags when you right click a bookmark in the bookmark menu.&lt;br /&gt;&lt;br /&gt;That said, I can happily ignore the tags until they fix them, unlike the awesomebar, which broke a feature I use(ed) regularly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Themes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I don't care all that much for the default XP or linux themes, and winstripe, the theme I was using on FF2 (since I didn't like its default theme either) isn't going to be updated to FF3.&lt;br /&gt;&lt;br /&gt;I've been using Qute, but it's a bit too bubbly and soft for me.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Memory Leaks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nope, still leaky.  It might even be worse now.  A few minutes ago, FF3 was using 300,000 K .. after a restart, it's using 137,000.  I believe that FF2 only used about 40,000 while running.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Anything good about it?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes!  There are a few nice things about the new version.  Animated PNGs! I haven't tried any out yet, but as a web developer, this is a step in the right direction.&lt;br /&gt;&lt;br /&gt;FF3 seems more stable than 2, less crashes and firefoxen running after you close them.&lt;br /&gt;&lt;br /&gt;Most extensions are being ported over to FF3, so I won't have to leave much behind.&lt;br /&gt;&lt;br /&gt;Over all, I am disappointed in all of the new features, but only one of them has made my life difficult so far.  I feel that the Firefox team was rushed, or they are getting to large, or something and inefficiency has crept in.  Either way, FF3 was released before it was really ready for all of the fans.  So, I guess I'll be waiting for 3.1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7878873650260715206?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7878873650260715206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7878873650260715206' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7878873650260715206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7878873650260715206'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2008/07/firefox-3.html' title='Firefox 3'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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://bp1.blogger.com/_ZF1ngbiTm1w/SHXDcrzcskI/AAAAAAAAACg/16ZTR72HBfs/s72-c/firefox.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-3535092946401410540</id><published>2008-06-28T12:07:00.000-07:00</published><updated>2008-06-28T12:23:28.969-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Thunderbird'/><category scheme='http://www.blogger.com/atom/ns#' term='bloat'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Ubuntu Hardy Heron is Unstable</title><content type='html'>I've been running Hardy now for quite a while, and I've come to the conclusion that it isn't stable.  I will probably be downgrading to Gutsy very soon, however much I dislike the idea of doing so.  To me, downgrading doesn't feel like I'm being part of the solution, but rather that I'm just bypassing the problem.&lt;br /&gt;&lt;br /&gt;Here are the things I've been having problems with so far in Hardy.  And, for the record, I've tried all of these things with compiz disabled as well, with no improvement:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;On occasion (sometimes as frequently as once an hour), gnome-terminal will open with a blank (frozen, not invisible) window, there will be a grey bar where the menus should be, and I have to terminate the process.  I've tried waiting it just stays there blank.  Once this happens, nautilus, gedit, and even some of the file-related dialog boxes, and possibly the pop-down calendar from the gnome panel all crash in the same way, creating a blank box, and in the case of anything associated with the gnome panel, freezing the panel entirely.  Restarting GDM doesn't help.  I've tried everything.  There seems to be nothing logged showing that there was any problem.  Rebooting is the only solution.&lt;/li&gt;&lt;li&gt;Firefox 3.  Not only is it annoying (due to AwesomeBar), but it feels less polished than Firefox 2.  My Firefox 2 did crash every once in a while.  I finally decided to reinstall Firefox 2, and give it a try.  Firefox 3 unfortunately did things to the configuration which makes Firefox 2 suck as well, since it tries to run off of the same settings.  I deleted the extensions.rdf file and start FF2 and everything seems almost OK.  But, if I ever run FF3 again, it ruins FF2 (removes all extensions, mostly.)  This means I cannot ease into FF3 while still using FF2 for my day to day work.  I will thus be uninstalling FF3.&lt;/li&gt;&lt;li&gt;Random lock-ups.  I haven't had this problem as much as some people have been reporting, but I have had some unusual lock-ups.  One of them involved my screen suddenly appearing scrunched left-to-right and streched up-and-down with big black bars on either side and everything completely frozen (including the mouse pointer) requiring a hard reset.&lt;/li&gt;&lt;li&gt;Thunderbird is barely usable.  I use Thunderbird with an IMAP account.  Previously, it has worked like a charm, but now all of a sudden, it routinely crashes without an explanation.  It seems to crash in two different ways.  The first way will be, while checking my inbox, new messages will appear, but the program is still catching up (not usable yet), and all of a sudden the entire program will just disappear.  Messages, and the main window, poof, they're gone.  No word as to why.  This happens about 1 in 5 times that I open Thunderbird.  The other one happens about 3 out of 5 times that I open thunderbird, and it involves clicking on my Inbox and the program immediately going comatose.  When compiz is on, the window dims to a dark gray to show me that the program isn't responding, and no matter how long I wait, it never wakes back up.  I have to kill the process (or click the X and force quit it) in order to try again.  Yes, that adds up to 4 out of 5 tries that Thunderbird doesn't work.  Every once in a while I am lucky and it will work, in which case it is usually stable for the entire session until I close it.&lt;/li&gt;&lt;/ol&gt;I'm a web developer.  Browsing the web, using SSH through a terminal, and checking my email are nearly all that I do on my computer, and Hardy Heron isn't ready for ANY of those tasks.  Gutsy Gibbon worked perfectly with all of them.  I will probably be moving back to gutsy, but I'm afraid of what a downgrade might involve as far as my user configuration files are concerned.  I guess I will be making backups before downgrading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-3535092946401410540?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/3535092946401410540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=3535092946401410540' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3535092946401410540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3535092946401410540'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2008/06/ubuntu-hardy-heron-is-unstable.html' title='Ubuntu Hardy Heron is Unstable'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-5533563285525584963</id><published>2008-05-04T18:58:00.000-07:00</published><updated>2008-11-05T15:48:34.791-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Themes'/><title type='text'>Using a dark theme in ubuntu</title><content type='html'>After installing a dark theme on my "new" laptop the other day, I've been adding quite a few tweaks in order to make it render correctly with the rest of Ubuntu 08.04 - Hardy Heron.&lt;br /&gt;&lt;br /&gt;Theme installed: Darklooks - you can find it in Synaptic Package Manager (gnome-themes-extras).&lt;br /&gt;&lt;br /&gt;Edit the theme file:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: monospace; padding: 2px 3px; background: #beb;"&gt;cd /usr/share/themes/Darklooks/gtk-2.0/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;edit gtkrc, changing lines 181 and 182 from:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: monospace; padding: 2px 3px; background: #beb;"&gt;        bg[NORMAL] = @tooltip_bg_color&lt;br /&gt;        fg[NORMAL] = @tooltip_fg_color&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;to:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: monospace; padding: 2px 3px; background: #beb;"&gt;        bg[NORMAL] = @tooltips_bg_color&lt;br /&gt;        fg[NORMAL] = @tooltips_fg_color&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will keep the theme from crashing, I have yet to change the notifications and tooltips to be a dark color rather than yellow.&lt;br /&gt;&lt;br /&gt;Enable the darklooks theme for gnome.&lt;br /&gt;&lt;br /&gt;You can test it by opening firefox.  If you have done the last step correctly, the theme should stick.  Otherwise, it will revert back to a blocky theme.&lt;br /&gt;&lt;br /&gt;Now for specific Apps, these tweaks are not theme specific - they should fix most dark themes.&lt;br /&gt;&lt;br /&gt;The biggest concern for most people will be &lt;b&gt;Firefox&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;First, make a backup of your .mozilla profile folder (in your home folder)&lt;br /&gt;uninstall firefox-3, and then install:&lt;br /&gt;&lt;br /&gt;firefox-2&lt;br /&gt;firefox-2-gnome-support&lt;br /&gt;msttcorefonts&lt;br /&gt;&lt;br /&gt;Why are we doing this?  Firefox 3 has automated gtk integration - but, all those large dark widgets on top of light colored sites ... not very pretty.  Firefox 2 has a way to get around this, but as of this post, Firefox 3 has disabled that option.  You can write to your nearest Firefox developer and ask for this to be added back in!&lt;br /&gt;&lt;br /&gt;Once you have firefox 2 up and running, merge your profile data back into your new .mozilla folder (bookmarks, add-ons, etc)&lt;br /&gt;&lt;br /&gt;Go into the firefox preferences Edit &gt; Preferences , and choose the Content tab.  Click on the Colors button, and make sure 'Use System Colors' is unchecked.  Save your changes and close that window.  Next click on the Advanced fonts tab, and change the monospace font size to 14.  Save and close all the way.&lt;br /&gt;&lt;br /&gt;Download &lt;a href="http://zebby.org/files/darkThemeTweaks.zip"&gt;this archive&lt;/a&gt;, and extract it to a convenient place.&lt;br /&gt;&lt;br /&gt;go to: /home/**/.mozilla/firefox/**/chrome , replacing the ** s with your user name and the correct profile code.&lt;br /&gt;&lt;br /&gt;If you want to keep the &lt;span style="font-weight:bold;"&gt;ugly&lt;/span&gt; firefox 2 widgets, move the 'userContent-restore to firefox defaults.css' file into this folder, and remove everything after Content.&lt;br /&gt;&lt;br /&gt;If you want prettier widgets, move the 'userContent.css' file into the chrome folder.  You will not need to change its name.  Next, go to /usr/share/firefox/res , and make a backup of your forms.css file.  This folder belongs only to root, so you may have to do this in terminal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: monospace; padding: 2px 3px; background: #beb;"&gt;sudo mv forms.css forms-backup.css&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or some other such name.  DO NOT SKIP THIS STEP!  you should always make a backup when changing system files.  Now, move the form-widgets folder, again using the terminal:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: monospace; padding: 2px 3px; background: #beb;"&gt;sudo cp -r where/ever/you/extracted/the/folder/form-widgets /usr/share/firefox/res/form-widgets&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You should be done!  You can use &lt;a href="http://www.yourhtmlsource.com/forms/basicforms.html"&gt;this page&lt;/a&gt; to test with.  &lt;br /&gt;&lt;br /&gt;If you know css, you can edit any of the .css files to change anything you like.  You can also change the way the widgets look by opening them in your favorite image editing program.&lt;br /&gt;&lt;br /&gt;These are the web pages that I visited in order to put all of these files together (along with a lot of my own tweaking):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ubuntu-forums.com/showthread.php?s=cb2e4ace942ce11ca4b3b365136a328a&amp;t=369596"&gt;Firefox Widgets&lt;/a&gt;&lt;br /&gt;&lt;a href="http://bbs.archlinux.org/viewtopic.php?id=42336"&gt;Instructions for FF3&lt;/a&gt; I found this after I uninstalled FF3, according to a comment, it only works for FF2 ...&lt;br /&gt;&lt;a href="http://userstyles.org/styles/2456"&gt;the stylish style referenced above&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mozilla.org/unix/customizing.html"&gt;the unhelpful mozilla page&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=661234"&gt;specific Darklooks theme problems&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=509241"&gt;ubuntu forum thread with some helpful links&lt;/a&gt;&lt;br /&gt;&lt;a href="http://stebalien.com/2008/05/make-firefox-3-autocomplete-bar-work.html"&gt;a possible fix for the auto complete bar in FF3&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.beryl-themes.org/content/show.php/Grey+Neu?content=60824"&gt;some good info&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Things to fix still:&lt;br /&gt;&lt;br /&gt;When you search for a word, it still uses a minty green color&lt;br /&gt;The address bar on a secure page clashes, but is readable.&lt;br /&gt;In the built in firefox boxes with hint text (like the search bar on the top right), the text is too dark to read easily.&lt;br /&gt;&lt;br /&gt;One more thing!  If you want to, you can install the stylish firefox extension, and then install a &lt;a href="http://www.valacar.com/userstyles/"&gt;dark google theme&lt;/a&gt;, that way it will feel more like the rest of your desktop.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Open Office:&lt;/b&gt;&lt;br /&gt;I haven't opened up anything but Writer, so, I don't know what else needs fixing yet.&lt;br /&gt;&lt;br /&gt;Download &lt;a href="http://zebby.org/files/images_tango.zip"&gt;this archive (7.7mb)&lt;/a&gt; and move the images_tango.zip file into /usr/lib/openoffice/share/config/  Don't extract it.&lt;br /&gt;&lt;br /&gt;To change the icon theme so that it matches better (unless you like orange of course), go to the Tools &gt; Options menu.  Under the OpenOffice.org section, choose View.  Change the icon size to small (if you think they are too large), and set the style to tango.&lt;br /&gt;&lt;br /&gt;Next, to change the page background color from dark gray to white, choose Appearance from the left.  Change document background to white, and font color to black.  As you run into any other glitches, you can change them here.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pidgin:&lt;/b&gt;&lt;br /&gt;First, make sure you are running the new pidgin, it should be 2.4.1 or higher.  If you have Hardy Heron installed, you are good to go.&lt;br /&gt;&lt;br /&gt;In the Tools &gt; Plugins menu, turn on 'Conversation Colors' and set Sent and Received Messages to #ADADAD (you can go lighter or darker, at your preference).&lt;br /&gt;&lt;br /&gt;Next, turn on the 'Pidgin GTK+ Theme Control', and set the hyperlink color to #576BBE , the Sent Message Name color to #8496DD , and the Received Message Name color to #EA987D .  Again, you can change these as you like, but this is a good starting place.&lt;br /&gt;&lt;br /&gt;If you have a smaller screen (1024x768), you won't be able to see the save or close button.  Click tab until you get to the re-read gtkrc files, then click tab again, and push your [ENTER] key.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Gedit:&lt;/b&gt;&lt;br /&gt;Open Gedit, \go to the Edit &gt; Preferences menu, and choose the Fonts and Colors Tab.  Change the theme to Oblivion.  This theme is not ideal, color wise, but it's readable!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Terminal:&lt;/b&gt;&lt;br /&gt;Open up your terminal, go to the Edit &gt; Current Profile menu, choose the Colors tab, you can try using the colors from the system, or change the scheme white or green on black.  Whichever suits your fancy.  You can also change the colors individually if you like.&lt;br /&gt;&lt;br /&gt;That's it for now, as I use the theme, I know I'll run into more things that need fixing, and I will either add them to this post, or make a new one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-5533563285525584963?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/5533563285525584963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=5533563285525584963' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5533563285525584963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5533563285525584963'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2008/05/using-dark-theme-in-ubuntu.html' title='Using a dark theme in ubuntu'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-3127653435347901332</id><published>2008-04-10T19:53:00.000-07:00</published><updated>2008-04-10T19:56:28.249-07:00</updated><title type='text'>Curious Photo</title><content type='html'>This is what the sprinkler head looks like in a room at the Holiday Inn.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_pjKa81RsGtk/R_7TBwbXK2I/AAAAAAAAABI/37YhqBV-vsk/s1600-h/100_3059.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_pjKa81RsGtk/R_7TBwbXK2I/AAAAAAAAABI/37YhqBV-vsk/s320/100_3059.JPG" alt="" id="BLOGGER_PHOTO_ID_5187815847910386530" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-3127653435347901332?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/3127653435347901332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=3127653435347901332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3127653435347901332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3127653435347901332'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2008/04/curious-photo.html' title='Curious Photo'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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://bp2.blogger.com/_pjKa81RsGtk/R_7TBwbXK2I/AAAAAAAAABI/37YhqBV-vsk/s72-c/100_3059.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-8327348998283349112</id><published>2008-04-09T01:00:00.000-07:00</published><updated>2008-04-25T12:24:51.709-07:00</updated><title type='text'>Ideal Compiz Settings</title><content type='html'>My friend Mike asked me to post a tutorial explaining how I configure my Compiz and why I make the choices I do. I'm not going to explain how to install compiz, as there are plenty of other sites out there explaining this process already.&lt;br /&gt;&lt;br /&gt;My choices are intended to leverage Compiz to improve the level of usability, while at the same time remaining visually impressive. A lot of thought has gone to my keybinding choices to make them logical and optimal. Window Manager tasks will be performed using the Super (Windows) key as a modifier. This includes commands to launch a new window. Desktop Cube tasks will be performed using the Control+Alt modifiers. Control and Alt (when used individually as modifiers) are left for controlling applications. As you set some of the keys below, you'll run into some conflicts and need to choose something like "Set Anyway" but we will change the conflicting keys as we proceed further into the setup.&lt;br /&gt;&lt;br /&gt;To get started, the first thing you need to do is install the preferences panel for "Advanced Desktop Effects Settings":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sudo apt-get install compizconfig-settings-manager&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lets begin by configuring the General Options. Enter all values excluding the quotes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;General Options&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Commands:&lt;/span&gt;&lt;br /&gt;"Command line 0" = "/usr/bin/gnome-screensaver-command --lock"&lt;br /&gt;"Command line 1" = "gedit" &lt;span style="font-style: italic;"&gt;Or the graphical text editor of your choice.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Desktop Size:&lt;/span&gt;&lt;br /&gt;"Horizontal Virtual Size" = 4&lt;br /&gt;"Vertical Virtual Size" = 1&lt;br /&gt;"Number of Desktops" = 1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Display Settings:&lt;/span&gt;&lt;span style="font-style: italic;"&gt;  These are fairly ordinary, but I repeat them here because having them properly configured will ensure a smooth display.&lt;br /&gt;&lt;/span&gt;"Texture Filter" = "Good"&lt;br /&gt;"Detect Refresh Rate" = Checked&lt;br /&gt;"Lighting" = Checked&lt;br /&gt;"Refresh Rate" = 60 (Or your screen's redraw Hz at the current resolution.)&lt;br /&gt;"Sync to VBlank" = Checked&lt;br /&gt;"Detect Outputs" = Checked&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Actions:  &lt;/span&gt;&lt;span style="font-style: italic;"&gt;I'm only listing the ones I changed from the defaults.&lt;/span&gt;&lt;br /&gt;"General: Run Dialog" = "&lt;super&gt;r"&lt;br /&gt;"General: Hide all windows and focus desktop" = "&lt;super&gt;d"&lt;br /&gt;"General: Toggle Window Maximized" = "&lt;super&gt;x"&lt;br /&gt;"General: Toggle Window Shaded" = "&lt;super&gt;Up"&lt;br /&gt;"General: Open a Terminal" = "&lt;super&gt;c"&lt;br /&gt;"Commands: Run command 0" = "&lt;super&gt;l"&lt;br /&gt;"Commands: Run command 1" = "&lt;super&gt;e"&lt;br /&gt;&lt;br /&gt;Now I will cover each and every plug-in which I have enabled. I recommend disabling all the other plug-ins by removing the tick from the check-box, unless you have a specific use for them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:180%;" &gt;Accessibility&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;ADD Helper&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ADD helper is a quick way to subdue all the windows except the one currently focused by fading them out to dark gray.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Misc. options:&lt;/span&gt;&lt;br /&gt;"Brightness" = 30&lt;br /&gt;"Saturation" = 50&lt;br /&gt;"Opacity" = 100&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Actions:&lt;br /&gt;&lt;/span&gt;"Toggle ADD Helper" = "&lt;super&gt;p"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Negative&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Being a true geek, I often use my computer at night, sometimes while other people are trying to watch movies which aren't interesting enough to keep my attention. Negative is great when computing in the dark, to reduce eye-strain and to reduce the amount of light emitted from the screen which may disturb others.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Actions&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;"Toggle Window Negative" = "&lt;super&gt;n"&lt;br /&gt;"Toggle Screen Negative" = "&lt;super&gt;m"&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Desktop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Desktop Cube&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;This is the foundation for perhaps the most famous eye-candy provided by compiz.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;General:&lt;/span&gt;&lt;br /&gt;"Mipmap" = Checked&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Behavior:&lt;br /&gt;&lt;/span&gt;"Inside Cube" = Not Checked&lt;br /&gt;"Acceleration" = 4.0000&lt;br /&gt;"Speed" = 1.5000&lt;br /&gt;"Timestep" = 1.2000&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Transparent Cube:&lt;/span&gt;&lt;br /&gt;"Opacity During Rotation" = 75.0000&lt;br /&gt;"Opacity When Not Rotating" = 100.0000&lt;br /&gt;"Fade Time" = 1.0000&lt;br /&gt;"Transparency Only on Mouse Rotate" = Checked.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Actions:&lt;/span&gt;&lt;br /&gt;"Unfold" = "&lt;control&gt;&lt;alt&gt;space"&lt;br /&gt;"Next Slide" = "space"&lt;br /&gt;"Prev Slide" = ""&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Expo&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Appearance:&lt;br /&gt;&lt;/span&gt;"Reflection" = Checked. &lt;span style="font-style: italic;"&gt;I like the  look of this plug-in better when the reflection is enabled, but if it runs slowly, you can turn it off.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Actions:&lt;br /&gt;&lt;/span&gt;"Expo" = "&lt;control&gt;&lt;alt&gt;Down"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Rotate Cube&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Here we make some minor adjustments to sweeten the animation.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;General:&lt;/span&gt;&lt;br /&gt;"Edge Flip Move" = Checked.&lt;br /&gt;"Edge Flip DnD" = Checked.&lt;br /&gt;"Flip Time" = 350&lt;br /&gt;"Pointer Sensitivity" = 1.0000&lt;br /&gt;"Acceleration" = 1.0000&lt;br /&gt;Snap to Top Face = Checked.&lt;br /&gt;Speed = 2.0000&lt;br /&gt;Timestep = 1.0000&lt;br /&gt;Zoom = 0.0000&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Actions:&lt;/span&gt;&lt;br /&gt;"Initiate", Key = "None", Button = "&lt;control&gt;&lt;alt&gt;Button1"&lt;br /&gt;"Rotate Left" = "&lt;control&gt;&lt;alt&gt;Left"&lt;br /&gt;"Rotate Right" = "&lt;control&gt;&lt;alt&gt;Right"&lt;br /&gt;"Rotate Left with Window" = "&lt;super&gt;Left"&lt;br /&gt;"Rotate Right with Window" = "&lt;super&gt;Right"&lt;br /&gt;&lt;br /&gt;&lt;/super&gt;&lt;/super&gt;&lt;/alt&gt;&lt;/control&gt;&lt;/alt&gt;&lt;/control&gt;&lt;/alt&gt;&lt;/control&gt;&lt;/alt&gt;&lt;/control&gt;&lt;/alt&gt;&lt;/control&gt;&lt;/super&gt;&lt;/super&gt;&lt;/super&gt;&lt;/super&gt;&lt;/super&gt;&lt;/super&gt;&lt;/super&gt;&lt;/super&gt;&lt;/super&gt;&lt;/super&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Animations&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Fading Windows&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Window Decoration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I will finish this post soon and revise it.  I wanted to post it now because it is useful even as is, and the new compiz settings manager (available in Ubuntu Hardy Heron) is slightly different so I need to go back through and update it for that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-8327348998283349112?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/8327348998283349112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=8327348998283349112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8327348998283349112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/8327348998283349112'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2008/04/ideal-compiz-settings.html' title='Ideal Compiz Settings'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-3277716148452133535</id><published>2008-04-09T00:44:00.000-07:00</published><updated>2008-04-09T00:59:28.451-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='metacity'/><category scheme='http://www.blogger.com/atom/ns#' term='keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='Gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='compiz'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Windows+L to Lock Screen.</title><content type='html'>Aka &lt;super&gt;L or &lt;mod4&gt;L. For the past several releases Gnome/Metacity have an issue with setting certain keyboard binding shortcuts involving the WinKey.&lt;br /&gt;&lt;br /&gt;There are really normally two bugs involved. The&lt;span style="font-weight: bold;"&gt; first bug&lt;/span&gt; is that Gnome doesn't think the Win key is a modifier, so it registers as Super_L (meaning the Left Super Key as a standalone) whenever you try to bind a shortcut using that key. This can be fixed through System -&gt; Preferences -&gt; Keyboard -&gt; Layout Options -&gt; Alt/Win Key Behavior.  Choose the option labeled "Super is mapped to the Win-keys (default)"   Yes, I know it says default, but it isn't really.  You'll notice that one or two other options in the same series are also labeled default.&lt;br /&gt;&lt;br /&gt;The&lt;span style="font-weight: bold;"&gt; second bug&lt;/span&gt; is that there are two separate shortcut managers, metacity and gnome-settings-daemon, and one of them (gnome-settings-daemon) happens before gnome does its magic modifier mappings, the other happens after. Basically this means that when you set the key bindings under Keyboard Shortcuts in preferences, you are using a certain key layout when you make your selection, but when the keys actually get interpreted, they are using a different (and defective) layout, which lacks certain keys -- such as the Windows key. So far, there's not really a good way to fix the problem, but there is a way to work around it. Instead of letting gnome-settings-daemon handle the task you are trying to assign, find an alternate way to perform the task using metacity (or compiz).   Open up gconf-editor from a terminal, then go to /apps/metacity/global_keybindings where you will find a series of run_command_X options from 1 to 12. Fill in one of them with the value &lt;super&gt;l  (you actually type it like that, with the angle brackets, etc.)  then fill in the corresponding command_X item in /apps/metacity/keybinding_commands  with the command you are trying to launch, which - if you are trying to bind Windows+L is most likely:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/usr/bin/gnome-screensaver-command --lock&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will launch the gnome screensaver and lock the screen.&lt;br /&gt;&lt;br /&gt;I know this isn't perfect, but a workaround is better than nothing. I hope it was helpful!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-3277716148452133535?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/3277716148452133535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=3277716148452133535' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3277716148452133535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3277716148452133535'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2008/04/windowsl-to-lock-screen.html' title='Windows+L to Lock Screen.'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-6308653733172443056</id><published>2008-03-13T22:13:00.000-07:00</published><updated>2008-03-13T22:18:04.649-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='bloat'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Desktop Diet!</title><content type='html'>A great presentation by Rasterman, the head coder of Enlightenment.&lt;br /&gt;&lt;br /&gt;&lt;embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-2856531066533504890&amp;hl=en" flashvars=""&gt; &lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;I tried out E17 the other day, and it's not as good as I hoped it would be.  Ah well!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-6308653733172443056?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/6308653733172443056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=6308653733172443056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/6308653733172443056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/6308653733172443056'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2008/03/desktop-diet.html' title='Desktop Diet!'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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-3034230779454603134.post-5840054091982009315</id><published>2007-12-02T12:53:00.000-08:00</published><updated>2007-12-02T12:54:58.812-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Happy Linux Thoughts</title><content type='html'>I'd just like to post a link to a great linux blog:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://happylinuxthoughts.blogspot.com/"&gt;HappyLinuxThoughts&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-5840054091982009315?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/5840054091982009315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=5840054091982009315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5840054091982009315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5840054091982009315'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/12/happy-linux-thoughts.html' title='Happy Linux Thoughts'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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-3034230779454603134.post-726054027302218227</id><published>2007-09-17T18:03:00.000-07:00</published><updated>2007-09-18T05:30:21.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux Blog Online</title><content type='html'>I'd just like to tell everyone about &lt;a href="http://linuxblogonline.org/"&gt;this&lt;/a&gt; blog - it's informative, interesting and &lt;span style="font-style:italic;"&gt;funny!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-726054027302218227?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/726054027302218227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=726054027302218227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/726054027302218227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/726054027302218227'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/09/linux-blog-online.html' title='Linux Blog Online'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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-3034230779454603134.post-7077980063565003205</id><published>2007-07-23T19:25:00.000-07:00</published><updated>2007-07-23T19:29:40.054-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='Gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='vnc'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Scrambled Xvnc Keyboard Mapping on Ubuntu Feisty</title><content type='html'>This is just a bug workaround:&lt;br /&gt;&lt;br /&gt;If you log in through Xvnc (I use it with xinetd) and see the gdm screen, log in to gnome fine, but then after that your keyboard comes out scrambled, here's a quick and dirty fix (you'll have to do this from a console that is working, maybe SSH?):&lt;br /&gt;&lt;br /&gt;sudo mv /usr/share/xmodmap/xmodmap.us /usr/share/xmodmap/xmodmap.us.bkup&lt;br /&gt;&lt;br /&gt;Of course, this only works if you were using the US keyboard layout.  This is not ideal, but it gets the job done in this particular case.&lt;br /&gt;&lt;br /&gt;The fix for this is apparently already in the upstream code and should be available in the next gnome update from Ubuntu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7077980063565003205?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7077980063565003205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7077980063565003205' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7077980063565003205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7077980063565003205'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/07/scrambled-xvnc-keyboard-mapping-on.html' title='Scrambled Xvnc Keyboard Mapping on Ubuntu Feisty'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-774844887283161420</id><published>2007-07-19T15:21:00.000-07:00</published><updated>2007-07-19T15:23:18.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DNS'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><title type='text'>Resolve Windows Machine Name</title><content type='html'>First, add "wins" to the end of your hosts: line in /etc/nsswitch.conf.&lt;br /&gt;&lt;br /&gt;Second, run &lt;span style="font-weight: bold;"&gt;apt-get install winbind&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;This will allow your DNS to resolve "windows" network-neighborhood style machine names (Samba, SMB, Network Name Resolution)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-774844887283161420?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/774844887283161420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=774844887283161420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/774844887283161420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/774844887283161420'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/07/resolve-windows-machine-name.html' title='Resolve Windows Machine Name'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-5147856919921831749</id><published>2007-05-22T10:26:00.000-07:00</published><updated>2007-05-22T10:41:59.786-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cookies'/><category scheme='http://www.blogger.com/atom/ns#' term='Philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Apps'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>iGoogle is not My Google.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_pjKa81RsGtk/RlMoWcbg2nI/AAAAAAAAAAM/74HfDPO4u70/s1600-h/06-07-28-445093538.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_pjKa81RsGtk/RlMoWcbg2nI/AAAAAAAAAAM/74HfDPO4u70/s320/06-07-28-445093538.jpg" alt="" id="BLOGGER_PHOTO_ID_5067438371775765106" border="0" /&gt;&lt;/a&gt;This is not strictly open source related, but it is in the interests of most Internet users, so:&lt;br /&gt;&lt;br /&gt;I'm surprised that no one has spraypainted an "i" in front of their logo on their building after what they've done to Google Personalized Home. &lt;br /&gt;&lt;br /&gt;The consensus seems to be that everyone tolerated Google Personalized Home because it gave us some good toys to play with, but as soon as they changed the name to iGoogle that was one step too far.  Our favorite search engine now looked tacky and obviously is being driven by someone from the traditional side of Internet marketing instead of the normal trendy Google-type folks.&lt;br /&gt;&lt;br /&gt;Well, I came up with a hack that will remove iGoogle, sort of.  At first, I tried to remove the new iGoogle Logo, but to no avail.  I tried everything.  I even replaced the header section with a search box module.  None of it felt right.  Even if I switched out the logo, the best I could do was use past holiday logos, no thanks!  Maybe this hack will be for you:&lt;br /&gt;&lt;br /&gt;The reason I use iGoogle is to look at the modules on occasion.  I want to use "Classic" search, however.  So I came up with a URL that will take you to iGoogle *once*, and immediately unset the cookie value that keeps you at iGoogle.  So, I made a Bookmark in my Bookmark Toolbar Folder called "iGoogle Once" and pointed it to this URL:&lt;br /&gt;&lt;br /&gt;http://www.google.com/ig?sa=p&amp;pref=ig&amp;amp;pval=1&amp;q=/webhp&lt;br /&gt;&lt;br /&gt;If you want to give it a whirl, just try it &lt;a href="http://www.google.com/ig?sa=p&amp;amp;pref=ig&amp;pval=1&amp;amp;q=/webhp"&gt;here&lt;/a&gt;.  You can see your iGoogle page, with all the modules, and you can even search, and then if you go back to Google.com it takes you to Google Classic, instead of "remembering" that you selected iGoogle and throwing you back into it.&lt;br /&gt;&lt;br /&gt;There is one caveat:  You must click "&lt;a href="http://www.google.com/url?sa=p&amp;pref=ig&amp;amp;pval=1&amp;q=/webhp"&gt;Classic Home&lt;/a&gt;" once before this will work, and if you click "iGoogle" on the top of the home page, it will keep you on iGoogle until you click Classic Home again.  In other words, you must only use the "iGoogle Once" bookmark to visit iGoogle lest you become iTrapped.&lt;br /&gt;&lt;br /&gt;I hope this was useful!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-5147856919921831749?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/5147856919921831749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=5147856919921831749' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5147856919921831749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5147856919921831749'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/05/igoogle-is-not-my-google.html' title='iGoogle is not My Google.'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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://bp2.blogger.com/_pjKa81RsGtk/RlMoWcbg2nI/AAAAAAAAAAM/74HfDPO4u70/s72-c/06-07-28-445093538.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-6306810573716540734</id><published>2007-04-23T12:15:00.000-07:00</published><updated>2007-04-23T12:27:52.571-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='Gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Getting rid of the tooltips in the Gnome panel</title><content type='html'>Tooltips in the panel seem pointless to me, they hardly ever tell you more information that you can already gather by just reading the menu entry.  If you are using Compiz or Beryl and have menu effects turned on, all those tooltips popping up and sparkling everywhere could get old very fast.&lt;br /&gt;&lt;br /&gt;Here's how to get rid of them:&lt;br /&gt;&lt;br /&gt;Open a terminal and type &lt;span style="font-family: monospace; padding: 2px 3px; background: #beb;"&gt;gconf-editor&lt;/span&gt;.  This should open the Gnome Configuration Editor.  Navigate to Apps &gt; Panel &gt; Global and uncheck &lt;span style="font-style: italic;"&gt;tooltips_enabled&lt;/span&gt;.  Enjoy your tooltip-free Gnome Panel!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0HewCIyJI/AAAAAAAAAAg/7eWboRsRqk8/s1600-h/Screenshot-Configuration+Editor+-+global.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0HewCIyJI/AAAAAAAAAAg/7eWboRsRqk8/s320/Screenshot-Configuration+Editor+-+global.png" alt="" id="BLOGGER_PHOTO_ID_5056706181478271122" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-6306810573716540734?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/6306810573716540734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=6306810573716540734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/6306810573716540734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/6306810573716540734'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/04/getting-rid-of-tooltips-in-gnome-panel.html' title='Getting rid of the tooltips in the Gnome panel'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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://bp2.blogger.com/_ZF1ngbiTm1w/Ri0HewCIyJI/AAAAAAAAAAg/7eWboRsRqk8/s72-c/Screenshot-Configuration+Editor+-+global.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-162416272621000876</id><published>2007-02-25T21:28:00.000-08:00</published><updated>2007-02-26T00:32:54.605-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Apps'/><title type='text'>Operating Online</title><content type='html'>After looking at the new &lt;a href="http://www.google.com/a/"&gt;Google Apps&lt;/a&gt;, I started thinking of the future of online applications, and where you could go if you had an operating system designed to take advantage of that system.&lt;br /&gt;&lt;br /&gt;What if each user owned one static ip and a "home server".  This server would be built into their computer, and would not require any major set-up.  The server would be used to store data from online applications and serve them out again when asked for by the user.  The other option is to create centralized data-servers that you can rent to hold your data. (A distinct up-side to keeping your files on a local server is that you can access them even if your internet connection stops working.)&lt;br /&gt;&lt;br /&gt;At this point, the only thing required of your OS is to run a web-browser and possibly store, send and receive files.  By freeing up the need for excessive amounts of CPU, hard drives, and video, computers could be made smaller and cheaper and more portable.  These "portals" could be set up in a library or a school at which point a user could access their files in an environment that would be almost indistinguishable from their home computer.  Also, since it all runs through a basic browser, you could access your files ad applications from a standard computer as well.&lt;br /&gt;&lt;br /&gt;I'm excited to see where this type of technology could lead, although I don't see being able to edit files that push 100mb over the net any time soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-162416272621000876?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/162416272621000876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=162416272621000876' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/162416272621000876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/162416272621000876'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/02/operating-online.html' title='Operating Online'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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-3034230779454603134.post-2205084930737393574</id><published>2007-02-24T16:30:00.000-08:00</published><updated>2007-02-24T17:08:24.948-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='Desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='Television'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Watching Television on the Internet</title><content type='html'>After making the switch to Desktop Linux, I have finally got around to figuring out what to do for entertainment.  Getting DVD media to play was a breeze, perhaps because it seems to be the first thing anyone asks after getting their OS up and running.  Of course, we should do our best to push for open formats to replace DVD, but in the real world a little bit of "closed media" is likely to keep people from actively using Open Source everything-else.  If a computer can't fulfill the basic human need for entertainment, it won't last long.&lt;br /&gt;&lt;br /&gt;My next place to turn was to Television programs.  There are a few series that I have enjoyed in the past, and I just gave away my 23" television to free up some space in the apartmet, leaving me with a 13" TV that I have decided only to use for 8-bit Nintendo.  Television over the Internet would be a sweet alternative.  Some shows are available for "free" viewing on their official websites, others are not.&lt;br /&gt;&lt;br /&gt;The shows I think I'm interested in viewing right now are: 24 (Fox), LOST (ABC), The O.C. (Fox), The Office (NBC), Prison Break (Fox) and Veronica Mars (CW).&lt;br /&gt;&lt;br /&gt;I will chronicle my level of success in this endeavor here:&lt;br /&gt;&lt;br /&gt;I asked &lt;a href="http://www.myspace.com/jfaninord"&gt;my brother&lt;/a&gt; "So how does one watch TV on the Internet?" and off the top of his head he referred me to ABC's website.  I want to say "well done" to ABC for their &lt;a href="http://dynamic.abc.go.com/streaming/landing"&gt;episodes available online&lt;/a&gt;.  They have done a decent job and it seems like Flash player is all that is required, making it a trivial matter to watch their content in Firefox on Linux.  This takes care of my need for LOST, and opens up the possibility to some new programs which at the moment don't look very compelling for me, but may be possibilities.  The first episode I watched had the same commercial played in every single break.  I wonder about the effectiveness of this, and would have rather seen three separate commercials, even if they were all for the same product, simply because watching the same thing three times within an hour is not more productive than seeing it once.&lt;br /&gt;&lt;br /&gt;Next I turned to Fox.  Obviously I'm a fan of Fox, I have my eye on three of their shows, and I have purchased more Fox DVD box sets than any other show.  In fact, it may well be true that every DVD box set I own is produced by Fox.  The programs they put out seem to be of a high quality.  I looked up the web site for Fox, clicked on Prison Break, and saw an inviting link that I may be able to watch full episodes for free.  It directed me to a MySpace page belonging to Fox, which was a bit surprising:  I thought MySpace was home to teenagers, not corporations.  I observed right away that the site wasn't as clean and streamlined as ABC's, but then I got confronted with a major problem:&lt;br /&gt;&lt;blockquote&gt;We're sorry, but only the following operating systems are supported at this time:&lt;br /&gt;&lt;br /&gt;Microsoft Windows 2000/XP (not Vista)&lt;br /&gt;(Intel) Apple Macintosh OS X or later&lt;br /&gt;(PPC) Apple Macintosh OS X or later&lt;br /&gt;&lt;br /&gt;Please check back soon for support for other operating systems.&lt;br /&gt;&lt;/blockquote&gt;It seems that Fox also has its programs available on iTunes, but I hear they will only play on the newer iPod devices, and the free iTunes software is only supported on Windows and Macintosh.  I read an interesting article about "DVD-Jon" and some of his buddies writing some software that would let you purchase songs at the iTunes store using Linux, but I think it only worked for music, and furthermore, it was abandoned and does not work with the current iTunes Store.  I would pay Fox directly to watch these shows if I could.  So it sounds like I may have to wait until the current seasons of 24, The O.C., and Prison Break are released on DVD (if they are.)&lt;br /&gt;&lt;br /&gt;NBC doesn't offer any apparent way to play full episodes from their websites, and if they are offering them for viewing in other venues they are not making this obvious by advertising them in any way. They do seem to offer short video clips and deleted scenes, etc., but I'm not one for spoilers.  I will investigate at a later time to see if they offer them through another outlet, but except for my academic curiosity to investigate this at a later time, they would have lost my viewership.&lt;br /&gt;&lt;br /&gt;The CW has a full episode feature, which links to &lt;a href="http://video.cwtv.com/#"&gt;this page&lt;/a&gt;, but the center area of the page just remains a white box and selecting a series from the right-hand list doesn't seem to do a thing.  Right clicking on the white reveals that it is a Flash player.  I don't know why it is broken, but I will presume they aren't supporting the Linux version of Flash (I don't know how that is possible), but I will give it another shot later in case they are just temporarily down.&lt;br /&gt;&lt;br /&gt;So it looks like ABC wins.  Stay tuned for an upcoming article on why even their solution isn't the best choice and why Television producers need to make some decisions in the upcoming years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-2205084930737393574?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/2205084930737393574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=2205084930737393574' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2205084930737393574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2205084930737393574'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/02/watching-television-on-internet.html' title='Watching Television on the Internet'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-7720546544372869053</id><published>2007-02-05T02:10:00.000-08:00</published><updated>2007-02-05T02:46:40.246-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='sudo'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Why do we sudo in Ubuntu, and who is Charlie Root?</title><content type='html'>It is a tradition in Linux and other Unix-like operating systems to have a superuser account named root.  root is named such because "he" has full access to everything in the filesystem from the root directory "/" on down the line (whereas most ordinary users only have limited access with full access in their home directory alone.)  root has a home directory too, named after himself, found at /root, not to be confused with "/" which is also called the root directory.  :-)  You'll notice that on most systems his home directory is not in the same place as the other user's home directories (usually /home/yourname).&lt;br /&gt;&lt;br /&gt;In some Linux distributions, you log in to the root account frequently to perform administrative tasks on the machine, but in Ubuntu and a few other modern distros, this is not the case.  Instead, we use a tool called sudo.&lt;br /&gt;&lt;br /&gt;sudo means "&lt;span style="font-weight: bold;"&gt;s&lt;/span&gt;witch &lt;span style="font-weight: bold;"&gt;u&lt;/span&gt;ser and &lt;span style="font-weight: bold;"&gt;do&lt;/span&gt;."  There is another command called su (switch user), which can be used to switch to another user and open a shell, which is great if you know their password (which su prompts for), but on Ubuntu you aren't &lt;span style="font-weight: bold;"&gt;supposed&lt;/span&gt; to know the root password.  That's right, that is how it is designed, and you should not change it unless you have a really good idea of what you are doing.  The reason you don't know the root password on Ubuntu is that you don't need it at all because the admin group to which all "Administrator" users belong is listed in the sudoers list (/etc/sudoers)  If I needed to change the owner of a file (hypothetically called myfile), and I need root access in order to do this, I would type:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sudo chown jeffd myfile&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I will be prompted for a password.  This is not the root password, but your own password.  It is requested as a security precaution before proceeding to run the program with root access.  After entering the password, the command "chown jeffd myfile" is executed as root, after which control returns to your ordinary user (subsequent commands are not executed as root, although if you sudo again within about five minutes, the Ubuntu defaults are set to not ask you for the password again.)&lt;br /&gt;&lt;br /&gt;So what if you need to do several commands as root?  In all the other Linuces, you just log into a shell as root.  Well, if you really want to do this, you can either type &lt;span style="font-weight: bold;"&gt;sudo bash&lt;/span&gt; (to open the bash shell) or &lt;span style="font-weight: bold;"&gt;sudo su root&lt;/span&gt; (to open root's default shell).  Either way, you will enter your own password and then be presented with a root shell prompt.  When you are done with the shell prompt, type &lt;span style="font-weight: bold;"&gt;exit&lt;/span&gt; to return to your own shell.  Do not forget this step!  It is never a good idea to run applications or compile things as root.  You should perform these tasks as your own user.  In fact, some newer Linux software is designed so that it will actually refuse to compile or run as root, giving you a gentle slap on the wrist.&lt;br /&gt;&lt;br /&gt;Again, please do not change the root password.  Doing this will only weaken the security of your system, and make it easier for you to get into bad administrative habits.&lt;br /&gt;&lt;br /&gt;If you are using gnome and would like to launch a graphical application as root you use gksudo instead of sudo, but it works the same way aside from its name and the way that the password prompt appears in a window.&lt;br /&gt;&lt;br /&gt;Oh, one last thing:   I mentioned Charlie Root in the subject.  This is the full name sometimes given to the root user, when a first and last name are required (for example, in the address headers of administrative emails automatically generated by the system and sent to the root account.)  I think this name is only used on BSD Unix systems, (FreeBSD, OpenBSD, and NetBSD), so you may not ever see it in Ubuntu, but because I was familiar with administering FreeBSD servers, it is still the name I affectionately call the root user by.  Here's some more &lt;a href="http://en.wikipedia.org/wiki/Charlie_Root"&gt;Charlie Root trivia&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7720546544372869053?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7720546544372869053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7720546544372869053' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7720546544372869053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7720546544372869053'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/02/why-do-we-sudo-in-ubuntu-and-who-is.html' title='Why do we sudo in Ubuntu, and who is Charlie Root?'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-1897943509919479359</id><published>2007-02-05T01:40:00.000-08:00</published><updated>2007-02-05T02:07:10.691-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux Kernel Modules</title><content type='html'>This brief post is designed to explain what a Loadable Kernel Module is.&lt;br /&gt;&lt;br /&gt;In the beginning, there was the Linux Kernel.  Linus Torvalds designed it so that the code you needed to operate the base devices on your system would be compiled into the kernel, after all, as Open Source Software, everyone had the capability (if not the skill) to recompile the source as needed.&lt;br /&gt;&lt;br /&gt;Around 1995, Loadable Kernel Modules (LKM's) were introduced into Linux.  While not entirely synonymous, these are about the closest things in Linux to what windows users would know as Device Drivers (something like Windows .vxd's)&lt;br /&gt;&lt;br /&gt;An LKM is a separately compiled piece of source code, which is linked against the kernel you are running so that it is "pluggable" and can be enabled or disabled even while the base Linux kernel is running.  To see what Kernel Modules you have installed you can type lsmod at a shell prompt.  Here's what I see on my Dell Inspiron 6000 notebook (this list is a little long, but just skim it quickly so you get the idea of what is there):&lt;br /&gt;&lt;br /&gt;Module                  Size  Used by&lt;br /&gt;binfmt_misc            13448  1&lt;br /&gt;rfcomm                 42260  0&lt;br /&gt;l2cap                  27136  5 rfcomm&lt;br /&gt;bluetooth              53348  4 rfcomm,l2cap&lt;br /&gt;xt_limit                3840  2&lt;br /&gt;xt_pkttype              2944  1&lt;br /&gt;xt_tcpudp               4480  28&lt;br /&gt;ipt_LOG                 8320  11&lt;br /&gt;xt_state                3328  6&lt;br /&gt;iptable_mangle          3968  0&lt;br /&gt;iptable_nat             8964  0&lt;br /&gt;iptable_filter          4224  1&lt;br /&gt;ip_conntrack_irc        7920  0&lt;br /&gt;ip_nat_ftp              4736  0&lt;br /&gt;ip_nat                 19884  2 iptable_nat,ip_nat_ftp&lt;br /&gt;ip_conntrack_ftp        8816  1 ip_nat_ftp&lt;br /&gt;ip_conntrack           53088  6 xt_state,iptable_nat,ip_conntrack_irc,ip_nat_ftp&lt;br /&gt;,ip_nat,ip_conntrack_ftp&lt;br /&gt;nfnetlink               8088  2 ip_nat,ip_conntrack&lt;br /&gt;ip_tables              15204  3 iptable_mangle,iptable_nat,iptable_filter&lt;br /&gt;x_tables               16132  7 xt_limit,xt_pkttype,xt_tcpudp,ipt_LOG,xt_state,i&lt;br /&gt;ptable_nat,ip_tables&lt;br /&gt;speedstep_lib           5764  0&lt;br /&gt;cpufreq_userspace       5408  0&lt;br /&gt;cpufreq_stats           7744  0&lt;br /&gt;freq_table              6048  1 cpufreq_stats&lt;br /&gt;cpufreq_powersave       2944  0&lt;br /&gt;cpufreq_ondemand        8876  0&lt;br /&gt;cpufreq_conservative     8712  0&lt;br /&gt;video                  17412  0&lt;br /&gt;tc1100_wmi              8324  0&lt;br /&gt;sbs                    16676  0&lt;br /&gt;sony_acpi               6412  0&lt;br /&gt;pcc_acpi               14080  0&lt;br /&gt;i2c_ec                  6272  1 sbs&lt;br /&gt;i2c_core               23424  1 i2c_ec&lt;br /&gt;hotkey                 11556  0&lt;br /&gt;dev_acpi               12164  0&lt;br /&gt;button                  7952  0&lt;br /&gt;battery                11652  0&lt;br /&gt;container               5632  0&lt;br /&gt;ac                      6788  0&lt;br /&gt;asus_acpi              17688  0&lt;br /&gt;ipv6                  271136  18&lt;br /&gt;sg                     37020  0&lt;br /&gt;sd_mod                 22528  0&lt;br /&gt;lp                     12964  0&lt;br /&gt;tsdev                   9152  0&lt;br /&gt;psmouse                41352  0&lt;br /&gt;usb_storage            74816  0&lt;br /&gt;libusual               16912  1 usb_storage&lt;br /&gt;serio_raw               8452  0&lt;br /&gt;snd_hda_intel          20244  2&lt;br /&gt;snd_hda_codec         164480  1 snd_hda_intel&lt;br /&gt;8139cp                 24960  0&lt;br /&gt;8139too                29056  0&lt;br /&gt;ati_agp                10636  0&lt;br /&gt;agpgart                35016  1 ati_agp&lt;br /&gt;shpchp                 42144  0&lt;br /&gt;pci_hotplug            32828  1 shpchp&lt;br /&gt;parport_pc             37796  1&lt;br /&gt;parport                39368  2 lp,parport_pc&lt;br /&gt;usbhid                 45280  0&lt;br /&gt;pcspkr                  4352  0&lt;br /&gt;mii                     6912  2 8139cp,8139too&lt;br /&gt;snd_pcm_oss            47232  0&lt;br /&gt;snd_mixer_oss          19328  1 snd_pcm_oss&lt;br /&gt;snd_pcm                84356  3 snd_hda_intel,snd_hda_codec,snd_pcm_oss&lt;br /&gt;snd_timer              25348  1 snd_pcm&lt;br /&gt;snd                    58116  10 snd_hda_intel,snd_hda_codec,snd_pcm_oss,snd_mix&lt;br /&gt;er_oss,snd_pcm,snd_timer&lt;br /&gt;soundcore              11232  1 snd&lt;br /&gt;snd_page_alloc         11528  2 snd_hda_intel,snd_pcm&lt;br /&gt;evdev                  11392  1&lt;br /&gt;ext3                  142344  1&lt;br /&gt;jbd                    62100  1 ext3&lt;br /&gt;ehci_hcd               35208  0&lt;br /&gt;ohci_hcd               22788  0&lt;br /&gt;usbcore               134656  6 usb_storage,libusual,usbhid,ehci_hcd,ohci_hcd&lt;br /&gt;ide_generic             2432  0&lt;br /&gt;ide_cd                 33696  0&lt;br /&gt;cdrom                  38944  1 ide_cd&lt;br /&gt;ide_disk               18560  3&lt;br /&gt;atiixp                  7824  1&lt;br /&gt;generic                 6276  0&lt;br /&gt;sata_sil               11016  0&lt;br /&gt;libata                 74764  1 sata_sil&lt;br /&gt;scsi_mod              144392  4 sg,sd_mod,usb_storage,libata&lt;br /&gt;thermal                15624  0&lt;br /&gt;processor              31560  1 thermal&lt;br /&gt;fan                     6020  0&lt;br /&gt;ehci_hcd               35208  0&lt;br /&gt;ohci_hcd               22788  0&lt;br /&gt;usbcore               134656  6 usb_storage,libusual,usbhid,ehci_hcd,ohci_hcd&lt;br /&gt;ide_generic             2432  0&lt;br /&gt;ide_cd                 33696  0&lt;br /&gt;cdrom                  38944  1 ide_cd&lt;br /&gt;ide_disk               18560  3&lt;br /&gt;atiixp                  7824  1&lt;br /&gt;generic                 6276  0&lt;br /&gt;sata_sil               11016  0&lt;br /&gt;libata                 74764  1 sata_sil&lt;br /&gt;scsi_mod              144392  4 sg,sd_mod,usb_storage,libata&lt;br /&gt;thermal                15624  0&lt;br /&gt;processor              31560  1 thermal&lt;br /&gt;fan                     6020  0&lt;br /&gt;fbcon                  41376  0&lt;br /&gt;tileblit                3840  1 fbcon&lt;br /&gt;font                    9344  1 fbcon&lt;br /&gt;bitblit                 7296  1 fbcon&lt;br /&gt;softcursor              3328  1 bitblit&lt;br /&gt;vesafb                  9244  0&lt;br /&gt;capability              5896  0&lt;br /&gt;commoncap               8704  1 capability&lt;br /&gt;(END)&lt;br /&gt;&lt;br /&gt;To activate a compiled module that isn't showing on this list, the tool modprobe is used.  For example, while I was getting my proprietary wireless card working, I had to run:&lt;br /&gt;&lt;br /&gt;modprobe ndiswrapper&lt;br /&gt;&lt;br /&gt;To remove a module, you can use:&lt;br /&gt;&lt;br /&gt;modprobe -r ndiswrapper&lt;br /&gt;&lt;br /&gt;Or, alternatively:  rmmod ndiswrapper&lt;br /&gt;&lt;br /&gt;That being said, you probably shouldn't be adding or removing modules if everything is working fine, unless you have a very good reason to do so.&lt;br /&gt;&lt;br /&gt;The very brave and memory-thrifty user might scour the list analyzing the sizes and if a module is unused and unneeded, remove it.  For example, since I don't plan on using any bluetooth devices whatsoever, I might remove bluetooth, l2cap, and rfcomm, which are all related to bluetooth.  (I looked them up on Google to make sure.)  But, since I'm not really that adventurous, and don't know if there are any side effects, I'm not going to do that. :-)&lt;br /&gt;&lt;br /&gt;Some modules of note in my list are snd_hda_intel &amp; snd_hda_codec, which make my particular variety of sound card work, and... hmm, It's gone now.  I could have sworn ndiswrapper was in my list, as I jumped through all sorts of hoops to get my wireless networking working with it, but I don't see it now.  The network card is working, though, so I'm not going to touch it.  None of the other modules I have installed are of particular interest to me:  They have been doing their job, and I haven't had to even know they are there.&lt;br /&gt;&lt;br /&gt;Well, I hope this was a little helpful in understanding what LKM's are and how to manage them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-1897943509919479359?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/1897943509919479359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=1897943509919479359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1897943509919479359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1897943509919479359'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/02/linux-kernel-modules.html' title='Linux Kernel Modules'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-7622996769678189692</id><published>2007-01-27T20:05:00.000-08:00</published><updated>2007-01-27T20:30:19.788-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mercury'/><category scheme='http://www.blogger.com/atom/ns#' term='Desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Converted from Windows XP to Ubuntu Linux</title><content type='html'>I'm now running Ubuntu Linux 6.10 (Edgy Eft) on my Dell Inspiron 6000 notebook computer.  I have named this computer Mercury (as opposed to Pericles, the Ubuntu web server that I've been writing about thus far.)&lt;br /&gt;&lt;br /&gt;There were a couple pieces of hardware that I had to tinker with in order to get it working or optimized:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Wireless: BCM4318 AirForce One 54g 802.11g Wireless LAN Controller&lt;/li&gt;&lt;li&gt;Graphics: Intel Mobile 915GM/GMS/910GML Express Graphics Controller&lt;/li&gt;&lt;/ul&gt;Here is a list of the software I'm running on the system so far.  This list isn't exhaustive, but basically includes things I frequently use and things that I had to deliberately install:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Gnome (desktop environment)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mozilla Firefox (web browser)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Evolution Mail&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Kopete (with MSN, Google Talk, Yahoo! Messenger, AIM, ICQ, and IRC connections.)&lt;/li&gt;&lt;li&gt;Tomboy Notes (a Wiki-like sticky note applet)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;gnubiff (a tray notification tool to make a penguin dance if I have any email.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;xmms (music player)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Totem xine (movie player)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Codecs for virtually all Windows and Macintosh audio and video formats and full DVD playback.&lt;/li&gt;&lt;li&gt;wine (a windows API replacement layer to support a few windows apps that I still use.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;VirtualDub (a GPL'ed video manipulation program for Windows.  I run this through wine.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Internet Explorer 6 (I use this to test the websites I develop for my business. It also runs through wine, and I installed it using the very convenient &lt;a href="http://www.tatanka.com.br/ies4linux/page/Main_Page"&gt;IEs4Linux script&lt;/a&gt;.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;vmware player (I have it set up to boot off of a 6GB raw SCSI partition, with the MBR and other partitions mapped to zero so they cannot be affected by the virtual machine.  I use this to run a few design tools that I don't have functional Linux equivalents for yet.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Compiz (eye candy for Linux.)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I will be following this up with a series of posts to explain how I have already (or will yet) accomplish any non-trivial configuration tasks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7622996769678189692?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7622996769678189692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7622996769678189692' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7622996769678189692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7622996769678189692'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/01/converted-from-windows-xp-to-ubuntu.html' title='Converted from Windows XP to Ubuntu Linux'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-7032213935875473207</id><published>2007-01-26T18:19:00.000-08:00</published><updated>2007-01-26T19:10:51.865-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='Philosophy'/><title type='text'>Using Standard Dates</title><content type='html'>Working on a project recently, I received feedback from another team member that "all date formats, whether for entry or exhibit, should be in a readable &amp; usable format, i.e. mm/dd/yyyy."  Although offense was probably not intended, I was extremely disappointed and even a bit insulted by this request, as I had taken care to represent date formats in a consistent, readable, and usable way throughout the project, or at least to choose tools that did so by default.&lt;br /&gt;&lt;br /&gt;While not strictly an "Open Software" issue, I think usability issues and internationalization issues are often in the interests of Open Software advocates, so I thought I'd take a bit of time to discuss the ISO Date Format, why it is important, why and where you should consider using it and teaching other people about it.&lt;br /&gt;&lt;br /&gt;For those who have not been officially introduced to it yet, the international standard (iso) date format is:&lt;br /&gt;&lt;br /&gt;YYYY-MM-DD&lt;br /&gt;&lt;br /&gt;YYYY is the year on the Gregorian calendar, MM is the month from 01 to 12, and DD is the day of the month from 01 to 31.&lt;br /&gt;&lt;br /&gt;For example, 2007-01-26 represents the 26th day of January, 2007.&lt;br /&gt;&lt;br /&gt;Prior to standardization, common ways to represent this date are numerous, including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1/26/07&lt;/li&gt;&lt;li&gt;26/1/07&lt;/li&gt;&lt;li&gt;07/1/26&lt;/li&gt;&lt;li&gt;26.1.2007&lt;/li&gt;&lt;li&gt;26-JAN-2007&lt;/li&gt;&lt;li&gt;26-January-2007&lt;/li&gt;&lt;/ul&gt;Each of these included variants with either slashes, hyphens, or periods.  Sometimes the usage of a particular one of these formats focused around a geographic location, such as the M/D/YY which was somewhat prevalent in the United States, and other times they would focus around groups with special interest or profession.&lt;br /&gt;&lt;br /&gt;The trouble with nonstandard dates is that they cannot be interpreted in a consistent manner.  It becomes especially problematic when the day of the month is less than 12, and the month is rendered numerically, making  the month and day field entirely indistinguishable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[&lt;span style="font-weight: bold;"&gt;Tip:&lt;/span&gt; In addition to being more legible, the ISO format also has the benefit of being able to be sorted chronologically in its raw format by any alphanumeric sorter, such as in a spreadsheet.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With the advent of the Internet era, we now have instant communication around the globe.  The ISO date format is an absolute &lt;span style="font-weight: bold;"&gt;must&lt;/span&gt; in order to achieve effective and expected communication in regards to dates.&lt;br /&gt;&lt;br /&gt;There are still some places where it would be appropriate to use other date formats, for example:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In a localized or personalized formal invitation such as a wedding or graduation announcement where a verbose format such as "Tuesday, the first of January, two thousand eight" would be &lt;a href="http://www.ehow.com/how_3244_write-wedding-invitation.html"&gt;appropriate&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;In any educational material instructed someone how to interpret legacy date formats, or for use in examples to teach someone how to read ISO date format compared to their historic format.&lt;/li&gt;&lt;li&gt;In a dynamic environment (such as a preferences page) where the reader (not the publisher) has specifically requested their date to be presented in a non-standard format.&lt;/li&gt;&lt;li&gt;Interoperation with legacy applications or that are unable to be upgraded at the time.  Even in this case, ISO should also be supported so that you do not become the reason the other application is unable to be upgraded, and visible representations outside of these legacy communications should be translated back into the standard format.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Anything other than these examples only serves to create confusion as the ISO date format comes into greater use.&lt;br /&gt;&lt;br /&gt;When the opportunity presents itself you should not be shy, but be prepared to teach others about using the ISO date format, especially if you or they are in an industry where they transact business or correspondence on the Internet.  Only a few moments of explanation can save them much confusion or embarrassment that could result from misinterpreted dates or missed appointments.&lt;br /&gt;&lt;br /&gt;For more information on ISO 8601 date format see:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.w3.org/QA/Tips/iso-date"&gt;Quality Web Tips from the W3C - Use international date format.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/ISO_8601"&gt;Wikipedia Article on ISO 8601&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;a href="http://www.hermetic.ch/cal_stud/formats.htm"&gt;Article by Peter Meyer&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;a href="http://www.iso.org/iso/en/prods-services/popstds/datesandtime.html"&gt;The International Standard Organization's own article on the subject.&lt;/a&gt;&lt;/span&gt;&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/3034230779454603134-7032213935875473207?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7032213935875473207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7032213935875473207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7032213935875473207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7032213935875473207'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/01/using-standard-dates.html' title='Using Standard Dates'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-4503871995671292915</id><published>2007-01-08T22:38:00.000-08:00</published><updated>2007-01-08T22:57:16.144-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='vnc'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu Edgy Eft Xvnc Disconnect Problem</title><content type='html'>Diagnosis of Problem:&lt;br /&gt;&lt;br /&gt;I installed the Automatic Updates on Ubuntu Edgy Eft recently, sometime around January 06 (2007-01-06), and after a reboot, my Xvnc running through xinetd stopped receiving connections.  It disconnects immediately after connecting, or immediately after receiving the password.  Log files turn up almost nothing, there is a "xinetd[nnnn]: warning: can't get client address: Transport endpoint is not connected" error showing up in /var/log/daemon.log and /var/log/syslog and upon telnetting to the vnc port I received nothing but RFB 003.008 (the usual VNC protocol greeting) followed by an immediate drop of the connection.  xinetd does pass the connection to VNC, we know this because the greeting is given, but an examination of the running processes will not show Xvnc in the list because it closes immediately after opening.&lt;br /&gt;&lt;br /&gt;Running Xvnc server manually with the appropriate options and connecting to it with vncviewer resulted in a gray screen (so-called "root-weave") with an X or a watch cursor on it, and the gdm (Gnome) session never starts.&lt;br /&gt;&lt;br /&gt;The Solution:&lt;br /&gt;&lt;br /&gt;Temporary solution: This happened because of an upgrade in the vnc4server package.  Run synaptic package manager, search for vnc4server, click on it, go to Packages, Force Version and choose the previous version.  Downgrade to the previous version and you should be alright for now.  Wait until the next version comes out before you attempt to update this package again.&lt;br /&gt;&lt;br /&gt;How I Found the Solution:&lt;br /&gt;&lt;br /&gt;It took me many hours, but I found the answer on &lt;a href="https://launchpad.net/ubuntu/+source/vnc4/+bug/78282"&gt;https://launchpad.net/ubuntu/+source/vnc4/+bug/78282&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The person who first reported the bug incorrectly listed the date of the upgrade as 2006-01-06 (happy new year feranick).&lt;br /&gt;&lt;br /&gt;I hope this helps!  Drop a comment to let me know if this post eased your pain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-4503871995671292915?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/4503871995671292915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=4503871995671292915' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4503871995671292915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4503871995671292915'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2007/01/ubuntu-edgy-eft-xvnc-disconnect-problem.html' title='Ubuntu Edgy Eft Xvnc Disconnect Problem'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-4524518715233522687</id><published>2006-12-30T15:01:00.000-08:00</published><updated>2006-12-30T15:06:57.906-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cookies'/><category scheme='http://www.blogger.com/atom/ns#' term='Religion'/><category scheme='http://www.blogger.com/atom/ns#' term='Philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='Food'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Open Source Religion</title><content type='html'>Last week, Susie and I provided the topic for the small Quaker meeting we've been attending as visitors (neither of us are officially Quakers).  The topic we picked:  Open Source.&lt;br /&gt;&lt;br /&gt;The results?  Spectacular.  Almost everyone in the group understood and embraced the philosophy of Open Source.  Many went home after the meeting to dabble with Open Source products, or followed up by asking questions.  We also provided Ubuntu cookies as refreshments.&lt;br /&gt;&lt;br /&gt;While there are some actual &lt;a href="http://en.wikipedia.org/wiki/Open_source_religion"&gt;Open Source religious movements&lt;/a&gt; out there it is impressive to know that the Religious Society of Friends seems to take so well to the idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-4524518715233522687?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/4524518715233522687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=4524518715233522687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4524518715233522687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4524518715233522687'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/open-source-religion.html' title='Open Source Religion'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-6123088645701622935</id><published>2006-12-10T02:48:00.000-08:00</published><updated>2006-12-10T02:51:26.730-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><title type='text'>Pericles Lives!</title><content type='html'>&lt;a href="http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html"&gt;Pericles&lt;/a&gt; is now open for business!  It was only down for an hour, coming back online at 1:14.  Everything I set out to complete was done, but I had to scramble to fix a few loose ends.  Namely, I forgot to unpack one of the websites during the prior step because its archive had been placed in the wrong folder.&lt;br /&gt;&lt;br /&gt;The system is running much faster.  I'm sure there are still mistakes, so I'm going to go through and test each site meticulously to make sure things are smooth.&lt;br /&gt;&lt;br /&gt;Hurray for Open Source!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-6123088645701622935?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/6123088645701622935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=6123088645701622935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/6123088645701622935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/6123088645701622935'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/pericles-lives.html' title='Pericles Lives!'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-3989525149275524158</id><published>2006-12-09T22:52:00.000-08:00</published><updated>2006-12-09T23:09:43.040-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><category scheme='http://www.blogger.com/atom/ns#' term='FTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Transferring the Hosted Content</title><content type='html'>Well, here I am.  I took a break from Friday evening until this evening and then got back to work, and I have just finished the most terrible and nasty job of transferring the hosted site content over to &lt;a href="http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html"&gt;Pericles&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Compress, copy, uncompress, change a few paths, add to /etc/hosts to "trick" the server into thinking the DNS is pointed here already when its still really on the old box, and edit /etc/apache2/pericles.conf (I include this from the main httpd.conf file) to tell it to pull from 192.168.0.1 instead of the real VirtualHosting IP.  Run apache2 -k restart, and try it out in Firefox.  Wash, Rinse, Repeat.  About 35 times.&lt;br /&gt;&lt;br /&gt;One of the things I had to do was set permissions on the web files so that my scripts were able to write to the folders they needed to.  In Ubuntu, the default Apache2 user seems to be www-data.&lt;br /&gt;&lt;br /&gt;After testing all the sites, it is now time to set up the necessary FTP accounts with access to their proper folders, to change the IP &lt;span style="font-weight: bold;"&gt;*back*&lt;/span&gt; to the real one in the pericles.conf, to install a fresh grab of the mysql database, to change the IP of the machine itself,  and then to physically swap boxes and bring the new server online.  After that, I expect chaos :-)  Just kidding.  I think I've checked everything out.  I'm also limiting myself to finish this in the next 3 hours or else to hold off until another night so that this operation doesn't run into morning time.&lt;br /&gt;&lt;br /&gt;I'll report back again once more progress has been made.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-3989525149275524158?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/3989525149275524158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=3989525149275524158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3989525149275524158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/3989525149275524158'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/transferring-hosted-content.html' title='Transferring the Hosted Content'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-4667837419295347754</id><published>2006-12-09T20:23:00.000-08:00</published><updated>2007-09-18T05:31:14.971-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cookies'/><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='Food'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu Cookies</title><content type='html'>I saw &lt;a href="http://blog.josephhall.com/2006/11/sugar-cookies.html"&gt;this post&lt;/a&gt; and decided that the world needs more Ubuntu cookies.&lt;br /&gt;&lt;br /&gt;I actually wrote a very long and detailed post about how I made these, *but* through some freak accident, I selected all my text, opened the context menu, and selected 'insert dummy lorem ipsum'.  Firefox+Blogger wouldn't let me undo, so, you get the abridged version now.&lt;br /&gt;&lt;br /&gt;I started out by mixing up the dough using the recipe provided by Joseph Hall.  It turned out the consistency of frosting... I've made sugar cookies before, and the dough was more like soft play-dough, I added 3/4 cup more flour but it didn't help.  Before I chilled the dough, I added the food coloring that way the dye could be dispersed evenly.&lt;br /&gt;&lt;br /&gt;I'm doing the whole thing with a minimum of special tools, just my hands, parchment paper, four and a large cutting board (and something round I still have to find ).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ZF1ngbiTm1w/Ri0M3QCIyLI/AAAAAAAAAAw/vkADanE4W4A/s1600-h/100_1906.jpg"&gt;&lt;img style="margin: 0px auto 10px; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_ZF1ngbiTm1w/Ri0M3QCIyLI/AAAAAAAAAAw/vkADanE4W4A/s200/100_1906.jpg" alt="" id="BLOGGER_PHOTO_ID_5056712099943205042" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ZF1ngbiTm1w/Ri0M9gCIyMI/AAAAAAAAAA4/09bJGWFwUCE/s1600-h/100_1908.jpg"&gt;&lt;img style="margin: 0px auto 10px; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_ZF1ngbiTm1w/Ri0M9gCIyMI/AAAAAAAAAA4/09bJGWFwUCE/s200/100_1908.jpg" alt="" id="BLOGGER_PHOTO_ID_5056712207317387458" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0NIwCIyNI/AAAAAAAAABA/B9W_Fvy68sk/s1600-h/100_1909.jpg"&gt;&lt;img style="margin:0px auto 10px; text-align:center; cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0NIwCIyNI/AAAAAAAAABA/B9W_Fvy68sk/s200/100_1909.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056712400590915794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since the dough was so soft, it was a lot easier to roll the logs, then place them on the parchment paper, &lt;i&gt;then&lt;/i&gt; flatten them.  Otherwise they kept breaking apart as I moved them.&lt;br /&gt;&lt;br /&gt;The main thing I didn't care for in Joseph Hall's version of these cookies was the mid-section, it was too big in proportion to the rest of the pieces compared to the actual logo.  So, I made sure to make mine smaller, although I hope it's not too small.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0OVwCIyRI/AAAAAAAAABg/sXbQBrE5J1g/s1600-h/100_1912.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0OVwCIyRI/AAAAAAAAABg/sXbQBrE5J1g/s320/100_1912.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056713723440843026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I started at 8:00pm, it's now 10:20pm - time to roll out the piece-between-the-head-and-arms.  After they freeze, it'll be time to assemble the whole thing.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ZF1ngbiTm1w/Ri0NqACIyOI/AAAAAAAAABI/gyDWgIPu-b0/s1600-h/100_1913.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ZF1ngbiTm1w/Ri0NqACIyOI/AAAAAAAAABI/gyDWgIPu-b0/s200/100_1913.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056712971821566178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I accidentally tried to add the impressions for the head into the main section .. oops.&lt;br /&gt;&lt;br /&gt;10:40pm, If you ever do anything like this, make sure to measure the circumference of your center log and figure out how wide to make the wrapper.  (hmm, I should probably do that for the outer wrapper)  I got it right on the third try.  Luckily the dough was stiff enough for me to unroll it when I got it wrong.  I have a little yellow left, but the other pieces were all the right length.&lt;br /&gt;&lt;br /&gt;11:15pm, I took the pieces for between the head and arms out and let them thaw while I added the indentations to the main log.  I started by using a dry erase marker, but ended up using my thumbs.  The dividing piece was hard to stick on because of all the flour I had used - but I don't think I could have rolled out the dough without the flour, so perhaps some water would have helped stick the pieces all together.  I just hope the final product doesn't fall apart when I cut it.&lt;br /&gt;&lt;br /&gt;Adding the heads was easy, even though they kept snapping.  I kept the whole thing rolled up in parchment paper to hold it together while it freezes up again.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0OBwCIyPI/AAAAAAAAABQ/I-8VXggPX-w/s1600-h/100_1914.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0OBwCIyPI/AAAAAAAAABQ/I-8VXggPX-w/s200/100_1914.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056713379843459314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I can see that the final wrapping piece will need to be wider, so I'm thawing it out while I type this.&lt;br /&gt;&lt;br /&gt;11:30pm, all finished! Now I understand the large center piece!  it would have been much easier, but I think I'd still rather have the logo be the right proportions.  I'll let it freeze for an hour, then cook a few and see how they worked out.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ZF1ngbiTm1w/Ri0OgQCIySI/AAAAAAAAABo/pcxE6vT42Oc/s1600-h/100_1915.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_ZF1ngbiTm1w/Ri0OgQCIySI/AAAAAAAAABo/pcxE6vT42Oc/s320/100_1915.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056713903829469474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;12:30pm, the dough was pretty solid, so I cut off four inches from the "bad end" where all the ends weren't the same size, sliced them and stuck them in the oven.  The biggest problem was that the various sections didn't want to stick together.  Part of the reason they won't stick together is because they were all frozen pieces, and there wasn't any soft dough to stick too.  My solution is to set a piece of the log out so it can all thaw, then solidify it again.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0OswCIyTI/AAAAAAAAABw/4i3MPtd2yrU/s1600-h/100_1916.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_ZF1ngbiTm1w/Ri0OswCIyTI/AAAAAAAAABw/4i3MPtd2yrU/s200/100_1916.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056714118577834290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;12:45pm, BLAST!  the cookies spread! (a lot)  I think there was either something very wrong with the recipe, or there's something very wrong with one of my ingredients.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ZF1ngbiTm1w/Ri0O1ACIyUI/AAAAAAAAAB4/p8tz5BSu5K0/s1600-h/100_1917.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_ZF1ngbiTm1w/Ri0O1ACIyUI/AAAAAAAAAB4/p8tz5BSu5K0/s200/100_1917.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056714260311755074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll have to try this again with a recipe of dough I know doesn't spread.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-4667837419295347754?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/4667837419295347754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=4667837419295347754' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4667837419295347754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/4667837419295347754'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/ubuntu-cookies.html' title='Ubuntu Cookies'/><author><name>Susie Day</name><uri>http://www.blogger.com/profile/11165536000543428173</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://bp0.blogger.com/_ZF1ngbiTm1w/Ri0M3QCIyLI/AAAAAAAAAAw/vkADanE4W4A/s72-c/100_1906.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3034230779454603134.post-2819208039653462957</id><published>2006-12-06T16:23:00.000-08:00</published><updated>2006-12-06T17:24:38.387-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Migrating MySQL Data</title><content type='html'>Its time to migrate a copy of the MySQL data so that I can begin testing the websites running on &lt;a href="http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html"&gt;Pericles&lt;/a&gt; in a closed environment before I let this out into the wild.&lt;br /&gt;&lt;pre&gt;sudo /etc/init.d/mysql stop&lt;/pre&gt;&lt;br /&gt;The data lives in /var/lib/mysql&lt;br /&gt;&lt;br /&gt;I'm cool with that, but I'm going to replace it with my existing data, so first I'll rename it to preserve the original:&lt;br /&gt;&lt;pre&gt;cd /var/lib&lt;br /&gt;sudo mv mysql mysql-original&lt;br /&gt;sudo mkdir mysql&lt;br /&gt;sudo chown mysql.mysql mysql&lt;/pre&gt;&lt;br /&gt;Next, I unpack my MySQL backup, which was archived from my replication slave a couple days ago.  Since I'm going to make this into the new master, I'll first use this data as a testbed and afterwards I'll replace it with a fresh copy when I'm really ready to switch masters.  My data is  currently about 1 gigabyte, which shrinks to 111 megabytes when compressed, so it takes about five minutes to copy and longer to unpack.  I should point out that innobase and myisam data on Linux and Windows are "binary compatible" so they can be copied directly across the board, but you need to make sure your mysql configuration files have the same innodb settings in them, &lt;span style="font-style: italic; font-weight: bold;"&gt;or else&lt;/span&gt;.  Oh yeah, I should also mention that the MySQL version numbers are both very close, and up to date, so the fields in the user tables and so forth are the same format.  I wouldn't recommend migrating a MySQL 4.0 database to a MySQL 5.0 environment using this technique because the user fields changed a bit.&lt;br /&gt;&lt;br /&gt;I deleted the master.info file so that this server won't try to connect to the replication master like the replication slave from which it was copied was programmed to do.  I'll configure it to be a replication master once I do the real thing.&lt;br /&gt;&lt;br /&gt;I had to change my bind-address=0.0.0.0 in /etc/mysql/my.cnf in order to get the MySQL to bind to all network interfaces (I need to be able to connect from several networks.)  This is ok, because the mysql users table has restrictions on which users are allowed to connect from which hosts.  I wanted to change it in /var/lib/mysql/my.cnf which seemed to be recommended by the heading in /etc/mysql/my.cnf, but copying the cnf file and changing it there did not make any difference, so I resorted to changing the /etc/mysql/my.cnf version of the file.&lt;br /&gt;&lt;br /&gt;Starting up MySQL I see this:&lt;br /&gt;&lt;pre&gt;error:  'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'&lt;/pre&gt;&lt;br /&gt;Now I need to add back in the debian-sys-maint user that I lost by overwriting the user tables.  This is easy, because they leave the random password sitting unencrypted in /etc/mysql/debian.cnf&lt;br /&gt;&lt;br /&gt;I did this by logging into MySQL from the command line interface as root, and executing the following commands:&lt;br /&gt;&lt;pre&gt;USE mysql;&lt;br /&gt;CREATE USER 'debian-sys-maint'@'localhost';&lt;br /&gt;UPDATE user SET password = PASSWORD('PasswordCopiedEarlier') WHERE user = 'debian-sys-maint';&lt;br /&gt;GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost';&lt;br /&gt;FLUSH PRIVILEGES;&lt;/pre&gt;&lt;br /&gt;I now stopped and started the MySQL server:&lt;br /&gt;&lt;pre&gt;sudo /etc/init.d/mysql stop&lt;br /&gt;sudo /etc/init.d/mysql start&lt;/pre&gt;&lt;br /&gt;This worked like a charm; I no longer see the error message, which means debian-sys-maint can do its magic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-2819208039653462957?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/2819208039653462957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=2819208039653462957' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2819208039653462957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/2819208039653462957'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/migrating-mysql-data.html' title='Migrating MySQL Data'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-471485139619373285</id><published>2006-12-06T15:03:00.000-08:00</published><updated>2006-12-06T16:19:55.301-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Converting Hardcoded Pathnames</title><content type='html'>The next step on my adventure with &lt;a href="http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html"&gt;Pericles&lt;/a&gt; is to convert all of the hard-coded pathnames from &lt;span style="font-style: italic;"&gt;F:\Web&lt;/span&gt; to &lt;span style="font-style: italic;"&gt;/var/www&lt;/span&gt; (as well as any other hardcoded paths I find.)  I've been pretty careful not to use hard-coded names in unnecessary places, putting most of them in simple configuration include files and so forth, because I knew from the beginning that this day would come.&lt;br /&gt;&lt;br /&gt;I typed grep and it turns out that I have a convenient version of Turbo grep (comes with any Insprise/Borland product of the last decade), but GNU grep should work just as well.  The syntax for turbo grep that I'm using is:&lt;br /&gt;&lt;br /&gt;grep -di "f:" *.ph*&amp;gt;hardcoded&lt;br /&gt;&lt;br /&gt;I'm using *.ph* because I am searching all *.php and *.ph files.  I typically use *.ph for include files instead of *.inc, the -di means search subdirectories and ignore case, and I keep my data and web files on the F: drive.  I'm redirecting the output to a file named hardcoded so that I can use it as a checklist.  I'll do the same thing again but, like this:&lt;br /&gt;&lt;br /&gt;grep -di "c:" *.ph*&amp;gt;&amp;gt;hardcoded&lt;br /&gt;&lt;br /&gt;To get all references to anything on the C: drive (I know I refer to an executable font conversion tool from one place, for example.) and the double angle brackets mean to append the result to my previous file instead of overwriting.&lt;br /&gt;&lt;br /&gt;Now that I have my checklist, here's the plan:&lt;br /&gt;&lt;br /&gt;I want to convert all the code while still on the Windows box to support Linux based on a single configuration change.  I will make an include file with one function in it that takes any path given as a parameter and if it starts with /var/www, to convert it back to F:/Web.  This will allow Linux to be the native language with a "patch" for Windows support.  This should have been part of my plan from day 1 (two years ago), but it didn't occur to me.  The idea is that I can replace this function with an "identity" function such as:  function linpath($a) { return $a; } in order to use raw Linux paths instead of Windows.&lt;br /&gt;&lt;br /&gt;I will also do similar adaptations on a situational basis as I run into any F: or C: references that can't be solved with the above include file.&lt;br /&gt;&lt;br /&gt;I anticipate some difficulties with file permissions since Apache on Linux is more secure than Apache on windows.  My main resolution to this will be to consolidate the affected items that need to be accessed into consistent areas that the Apache process has access to read.  If I have any chroot issues, I can overcome them with the use of mount --bind as explained in my article on &lt;a href="http://opencomputing.blogspot.com/2006/12/ftp-server-on-ubuntu.html"&gt;setting up FTP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This path translation will probably be the most tedious task in the Pericles project.  I'll report back when I have finished.&lt;br /&gt;&lt;br /&gt;4:18 P.M. - Upon more deliberate consideration, I have determined to abandon this undertaking and instead to change the paths manually.  Why?  There only seems to be about one per website, with an odd exception here or there.  The trouble crops up when deciding exactly how to include the file with the path mapping function without using a path for itself.  Furthermore, even if I install it into the default includes path, it seems silly to include a file only to help correctly include another file.  May as well just change them when the time comes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-471485139619373285?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/471485139619373285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=471485139619373285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/471485139619373285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/471485139619373285'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/converting-hardcoded-pathnames.html' title='Converting Hardcoded Pathnames'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-270911352601963855</id><published>2006-12-06T14:26:00.000-08:00</published><updated>2006-12-06T14:43:45.864-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><category scheme='http://www.blogger.com/atom/ns#' term='DNS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Fixing rndc error with bind9</title><content type='html'>While setting up DNS on &lt;a href="http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html"&gt;Pericles&lt;/a&gt; I did run into one snag:&lt;br /&gt;&lt;br /&gt;rndc: connect failed: connection refused&lt;br /&gt;&lt;br /&gt;The first thing to know, is that in Ubuntu Server's default setup, the /var/log/syslog file contains errors relating to bind and rndc startup.  I watched this file and found some syntax errors as I tried to resolve this problem, and I recomend you do the same.  Here is my solution:&lt;br /&gt;&lt;br /&gt;Careful, this will overwrite your rndc.conf (run this while in the /etc/bind folder):&lt;br /&gt;&lt;pre&gt;rndc-confgen &gt; rndc.conf&lt;/pre&gt;&lt;br /&gt;Open the new rndc.conf.  First, take the hyphen out of all the rndc-key names.  I don't know why.  rndckey is what I ended up needing.  I think maybe bind9 removed support for the hyphen in these names, but rndc-confgen didn't know it.&lt;br /&gt;&lt;br /&gt;Now, copy the bottom section (the commented out part) out, we're going to paste it into the top of named.conf.local, and uncomment it.  Save changes to rndc.conf, and after pasting the other section into named.conf.local change the part inside the allow { } to localhost;  instead of 127.0.0.1, for similar reason as before it seems to want a name instead of a hardcoded IP in this version.&lt;br /&gt;&lt;br /&gt;I killed the named process then tried starting it again, and once again.  I found an error in my syntax by looking at /var/log/syslog, and after fixing this it worked without any error.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-270911352601963855?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/270911352601963855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=270911352601963855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/270911352601963855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/270911352601963855'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/fixing-rndc-error-with-bind9.html' title='Fixing rndc error with bind9'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-7026421920308719913</id><published>2006-12-06T13:22:00.000-08:00</published><updated>2006-12-06T14:43:22.523-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><category scheme='http://www.blogger.com/atom/ns#' term='DNS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>DNS with bind9 on Ubuntu</title><content type='html'>I just finished setting up bind on &lt;a href="http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html"&gt;Pericles&lt;/a&gt;, and it wasn't too bad.&lt;br /&gt;&lt;br /&gt;Bind was already installed by using the LAMP option on the Ubuntu Server disc.  The configuration files for it are found in /etc/bind.  I have a tool written as a Windows console application that dynamically cranks out my forward files for me based on templates, so I ported that over and ran it with wineconsole.  It worked.  I had to make a change in the named.conf.local file because for some reason bind on Linux seems to require a full path in the zone lines:&lt;br /&gt;&lt;pre&gt;zone "whatever.tld" IN { type master; file "/etc/bind/forward/whatever.tld.zone"; };&lt;/pre&gt;&lt;br /&gt;On windows, I didn't need /etc/bind/ prefixing those, because the paths were relative to the conf file.  No big deal, however--it was an easy change.&lt;br /&gt;&lt;br /&gt;I dropped a script into /usr/local/sbin called redns&lt;br /&gt;&lt;br /&gt;It does the following:&lt;br /&gt;&lt;pre&gt;/etc/init.d/bind9 stop&lt;br /&gt;/usr/local/sbin/dnsgen.sh&lt;br /&gt;/etc/init.d/bind9 start&lt;/pre&gt;&lt;br /&gt;This simply stops bind, regenerates the forward files using my tool (the dnsgen.sh file launches it with wineconsole), and then starts up bind again.&lt;br /&gt;&lt;br /&gt;If you get an rndc error, &lt;a href="http://opencomputing.blogspot.com/2006/12/fixing-rndc-error-with-bind9.html"&gt;here's how I fixed it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I will port the dnsgen tool over to a native application at some future point, but I'm in a hurry right now because my WAMP server is starting to have MySQL blackouts requiring a reboot.  It seems to be something to do with a file handle getting a lock stuck on it, because stopping and starting the MySQL daemon doesn't improve the situation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7026421920308719913?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7026421920308719913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7026421920308719913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7026421920308719913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7026421920308719913'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/dns-with-bind9-on-ubuntu.html' title='DNS with bind9 on Ubuntu'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-1560613604374911703</id><published>2006-12-06T04:03:00.000-08:00</published><updated>2006-12-06T14:43:03.042-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Configuring PHP</title><content type='html'>I'm now trying  to get PHP working on &lt;a href="http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html"&gt;Pericles&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The first thing I should point out, is that I started by doing a vanilla LAMP install from the Ubuntu Server disc.  This means I already had Apache2 and PHP5 installed "out of the package", but they aren't configured adequately for my needs.&lt;br /&gt;&lt;br /&gt;I dropped a simple file in /var/www that would echo the output of phpinfo() so that I could compare it with my existing WAMP server's setup.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;If you don't have Apache working yet...&lt;br /&gt;&lt;br /&gt;You can use php5-cli (install this with Synaptic) as an alternative to view the phpinfo() at a shell prompt:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;php&lt;br /&gt;&amp;lt?php echo phpinfo(); ?&amp;gt;&lt;br /&gt;(Press CTRL+D)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A plain text rendering of phpinfo() will appear, which you can scroll back to view in your console buffer.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Here are the major differences that I need to adjust:&lt;br /&gt;&lt;br /&gt;magic_quotes_gpc needs to be turned off.  It's a stupid thing, blast them for making it default to on.  post_max_size and upload_max_filesize need to be increased, because I have people uploading large megapixel images through http forms.  2M doesn't quite cut it any more these days.  The gd module needs to be enabled.  The zip module, or a substitute for it, needs to be enabled (I use this to automatically unpack files uploaded to a designated FTP account for daily processing.)  I notice a few other differences, but I think they're minor.  If I run into problems with them later, I'll follow up with details on how to fix them.&lt;br /&gt;&lt;br /&gt;I discovered that by installing the php5-gd package with Synaptic, and then restarting Apache I gained gd2 support.  That was easy.  To restart Apache:&lt;br /&gt;&lt;pre&gt;sudo apache2 -k graceful&lt;/pre&gt;&lt;br /&gt;This does a graceful restart (it won't force any connections to close that are still opened).  I realize this is a new box, so there won't be any connections hanging open anyway, but it is good to get into this habit early on.&lt;br /&gt;&lt;br /&gt;I reloaded the phpinfo() test file, and there is now a section for gd which says version: 2.0 or higher, and everything looks enabled (freetype, t1lib, gif, jpg, png, wbmp)&lt;br /&gt;&lt;br /&gt;I think the zip module I was using was part of pecl.  I know pecl is similar to pear, and now that I think about it, I know I'll need pear support too, so if it hasn't already been done, php5-cli and php-pear should now be installed with Synaptic.  The reason we need to install php5-cli is because pear is a command-line utility, and requires the command-line version of PHP in order to run.  Don't worry: php5-cli and libapache2-mod-php5 peacefully coexist.  I opened a shell, typed &lt;span style="font-style: italic;"&gt;pear&lt;/span&gt;, and there it is!&lt;br /&gt;&lt;br /&gt;On a whim, I typed &lt;span style="font-style: italic;"&gt;pecl&lt;/span&gt;, and it also runs.  It looks like pear and pecl come as a pair (no pun intended).&lt;br /&gt;&lt;br /&gt;Back to Synaptic, we need to install php5-dev because we will need a tool called phpize in order to complete the next step.  php5-dev has several dependencies that it will automatically install.&lt;br /&gt;&lt;br /&gt;Now, the magic command:&lt;br /&gt;&lt;pre&gt;sudo pecl install zip&lt;/pre&gt;&lt;br /&gt;When its finished, it will say:  You should add "extension=zip.so" to php.ini&lt;br /&gt;&lt;pre&gt;cd /etc/php5/apache2&lt;br /&gt;sudo editor php.ini&lt;/pre&gt;&lt;br /&gt;Do what it says.  Add the line &lt;span style="font-style: italic;"&gt;extension=zip.so &lt;/span&gt;at the very end of the file, because that's where the automatically added extensions (mysql, mysqli, gd) ended up.&lt;span style="font-style: italic;"&gt;&lt;/span&gt;  You may want to also add the same line into the /etc/php5/cli/php.ini so that you have zip support when you use php for shell scripting.&lt;br /&gt;&lt;br /&gt;Save your changes and:&lt;br /&gt;&lt;pre&gt;sudo apache2 -k graceful&lt;/pre&gt;&lt;br /&gt;If you look at the phpinfo() output again, you'll now see the zip section near the bottom.  This is&lt;br /&gt;really easy.&lt;br /&gt;&lt;br /&gt;While we're editing these two ini files, lets search for and change the following lines to these new values:&lt;br /&gt;&lt;br /&gt;memory_limit = 16M&lt;br /&gt;post_max_size = 16M&lt;br /&gt;magic_quotes_gpc = Off&lt;br /&gt;upload_max_filesize = 10M&lt;br /&gt;&lt;br /&gt;Remember to set these for both /etc/php5/apache2/php.ini and /etc/php5/cli/php.ini&lt;br /&gt;&lt;br /&gt;Another tool I sometimes use (if I need to programatically submit a post):&lt;br /&gt;&lt;pre&gt;sudo pear install HTTP_Request&lt;/pre&gt;&lt;br /&gt;Well, I think that's everything I use.  Restart apache2 one last time and see if it all works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-1560613604374911703?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/1560613604374911703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=1560613604374911703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1560613604374911703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1560613604374911703'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/configuring-php.html' title='Configuring PHP'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-7115780696052694669</id><published>2006-12-05T22:15:00.000-08:00</published><updated>2006-12-06T00:02:05.960-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Welcome to Your Linux Filesystem</title><content type='html'>If you're trying Linux (or Unix) for the first time, you may be alarmed when you first see the filesystem.  Windows users (who install fresh) are used to seeing something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Volume in drive C has no label.&lt;br /&gt;Voume Serial Number is EXPE-NSIV&lt;br /&gt;&lt;br /&gt;Directory of C:\&lt;br /&gt;&lt;br /&gt;12/05/2006 04:04 AM             0   AUTOEXEC.BAT&lt;br /&gt;12/05/2006 05:34 AM    12,286,482   AVG7QT.BAT&lt;br /&gt;12/05/2006 04:13 AM           241   boot.ini&lt;br /&gt;12/05/2006 04:04 AM             0   CONFIG.SYS&lt;br /&gt;12/05/2006 05:28 AM         &amp;lt;dir&amp;gt;   Documents and Settings&lt;br /&gt;12/06/2006 01:22 AM   267,964,416   hiberfil.sys&lt;br /&gt;12/05/2006 04:04 AM             0   IO.SYS&lt;br /&gt;12/05/2006 04:04 AM             0   MSDOS.SYS&lt;br /&gt;08/03/2004 01:38 PM        47,564   NTDETECT.COM&lt;br /&gt;08/03/2004 01:59 PM       250,032   ntldr&lt;br /&gt;12/06/2006 01:21 AM   402,653,184   pagefile.sys&lt;br /&gt;12/06/2006 10:44 PM         &amp;lt;dir&amp;gt;   Program Files&lt;br /&gt;12/05/2006 05:26 AM         &amp;lt;dir&amp;gt;   RECYCLER&lt;br /&gt;12/06/2006 11:28 PM         &amp;lt;dir&amp;gt;   WINDOWS&lt;br /&gt;      10 File(s)  683,201,919 bytes&lt;br /&gt;       4 Dir(s)   984,405,442 bytes free&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The picture in Linux is very different:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;bin   cdrom  etc   initrd      lib         media  opt   root  srv  tmp  var&lt;br /&gt;boot  dev    home  initrd.img  lost+found  mnt    proc  sbin  sys  usr  vmlinuz&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As one continues to use Windows, the root directory of your boot drive continues to gain a few additional files (fewer in the latest versions than in the past, mostly all you'll see is logs now)  In Linux, the root directory almost invariably remains pristine without much variation from the 22 items listed above.  I never had anyone bother to explain these to me, so I thought this might be a useful subject to cover for those becoming acquainted with Linux for the first time.&lt;br /&gt;&lt;br /&gt;/bin/    ... This is like the Windows folder (or more accurately, like the old DOS folder), in that it holds the basic system tools that all users may access.  In Linux, these are considered "essential" programs.&lt;br /&gt;&lt;br /&gt;/boot/   ... This folder holds the files for the boot loader.  It is similar to ntldr on a Windows system.&lt;br /&gt;&lt;br /&gt;/cdrom/ ... This is just a convenient symbolic link to /media/cdrom (see below)&lt;br /&gt;&lt;br /&gt;/dev/    ... This folder holds devices, which in Linux are treated like files.  The items listed in here are visualized in a method similar to serial ports (COM1, COM2) and parallel ports (LPT1) in Windows or DOS.&lt;br /&gt;&lt;br /&gt;/etc/    ... System-wide program settings are held here.  This is similar to the HKEY_LOCAL_MACHINE hive in the Windows Registry, or the "C:\Documents and Settings\All Users\Application Data" folder.  For newer and more elaborate packages, a specific subdirectory within /etc is usually created to hold system-wide settings for the package.&lt;br /&gt;&lt;br /&gt;/home/   ... Each local user gets a home directory here.  This is similar to the "Documents and Settings" folder in Windows, with the root of each home directory being considered similar to the Windows "My Documents" folder.&lt;br /&gt;&lt;br /&gt;/lib/    ... *.so Libraries (sets of compiled functions in shared object files, used by many programs)  These are like the *.DLL files found in the C:\WINDOWS\System or C:\WINDOWS\System32&lt;br /&gt;&lt;br /&gt;/lost+found/ ... This is where files recovered during a file system check (fsck) are placed.  I like to think of it as similar in its temporary nature to the Windows RECYCLER folder, but it isn't really the same purpose.  (Windows places deliberately deleted files in RECYCLER until you empty the Recycle Bin.)  In reality, the Windows chkdsk utility saves recovered fragments directly in the root.&lt;br /&gt;&lt;br /&gt;/mnt/    ... This is where mount points go for temporarily mounted filesystems.  On Windows, you would use A: B: and possibly D: E: or F: for this sort of storage, but in Linux drives get mapped to a mountpoint in the root ("/") filesystem. &lt;br /&gt;&lt;br /&gt;/media/  ... This is similar to /mnt, but specifically for removable media such as a CD-ROM drive which is typically found in /media/cdrom.  On a Windows system, this would be found as D:, E:, or F:.&lt;br /&gt;&lt;br /&gt;/opt/    ... Optional software packages are installed into this folder.  It is similar to "Program Files" on a Windows system.  In reality, this folder is slightly confusing and hardly used, it serves arguably the same purpose as /usr/local (see below)&lt;br /&gt;&lt;br /&gt;/proc/   ... This holds a virtual filesystem with kernel and process information.  There really isn't a Windows equivalent, but it gives access to information somewhat similar to what can be found in the Microsoft "System Information" tool (click Start, Help and Support.  Click Support button on the Toolbar, under Tools and Links on the left side click Advanced System Information, and then in the details pane click View detailed system information.  They make this really easy to get to.  To do the same thing in Linux you type &lt;span style="font-style: italic;"&gt;cd /proc&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;/root/   ... This is the home directory for the main system administrator account.  In Linux, the administrator is named root (because they have access to the whole filesystem from the root down).  Root shouldn't represent an individual, but is an account used during administrative tasks by utilities such as sudo or su.  Thus, the administrator will also have their own personal account, as well.&lt;br /&gt;&lt;br /&gt;/sbin/   ... This folder is similar to /bin/ but contains utilities specifically for tasks restricted to the superuser (i.e. root, the system administrator).  See also /usr/sbin, and /usr/local/sbin.&lt;br /&gt;&lt;br /&gt;/tmp/    ... Temporary files.  This is similar to C:\TEMP, C:\TMP, or "C:\Documents and Settings\UserName\Local Settings\Temp" on a Windows system.&lt;br /&gt;&lt;br /&gt;/usr/    ... This contains "user" files, meaning non-system files (the system should be able to boot without these files).  It contains another bin, lib, and sbin with like meanings to their root level counterparts, excepting that the files are non-essentials.  It also contains include (standard include files) and src (kernel source code), which are useful for developers, X11R6 which is where the graphical "X Window System" resides, and local where another set of bin, include, lib, sbin, share, and src reside which are considered specific to this single host (machine).  I should point out that /usr is limited to &lt;span style="font-weight: bold;"&gt;read only&lt;/span&gt; data.  Host specific (machine specific) data is stored in /usr/local rather than directly in /usr.&lt;br /&gt;&lt;br /&gt;/var/ ... Variable files.  This includes logs, databases, websites, and temporary email files.  There is another tmp folder in here, which is preferred in lieu of /tmp when the system is in multiuser mode.&lt;br /&gt;&lt;br /&gt;I will soon post a follow-up article on Filesystem Permissions in Linux.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7115780696052694669?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7115780696052694669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7115780696052694669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7115780696052694669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7115780696052694669'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/welcome-to-your-linux-filesystem.html' title='Welcome to Your Linux Filesystem'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-7791154980641436358</id><published>2006-12-05T21:52:00.000-08:00</published><updated>2006-12-06T14:42:28.002-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><category scheme='http://www.blogger.com/atom/ns#' term='FTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='chroot'/><title type='text'>FTP Server on Ubuntu</title><content type='html'>I have a couple of clients who will be uploading data packets to &lt;a href="http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html"&gt;Pericles&lt;/a&gt; on a daily basis, so I decided to install vsftpd.&lt;br /&gt;&lt;br /&gt;Using Synaptic Package Manager, I installed the latest version.  The configuration file can be found and edited (as root, so use sudo) in /etc/vsftpd.conf but since FTP settings are so diverse depending on your needs, I am not going to go into the details of the conf file here, except to say that you should read and carefully select your options.  I decided to set chroot_local_user=YES for security reasons, so that my authenticated users cannot browse files outside of their home directory, and I set pasv_enable=YES, pasv_min_port=62000 and pasv_max_port=64000 in order to match the &lt;a href="http://opencomputing.blogspot.com/2006/12/firewall-on-ubuntu-using-iptables.html"&gt;iptables Firewall restrictions&lt;/a&gt; I had previously enabled.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;NOTE:  If you list pasv_min_port but forget pasv_enable=YES, vsftpd might give you the very unhelpful error message: "unrecognised variable in config file"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since I have a few users who are allowed to do maintenance on their own websites, and I don't use ~/public_html since I don't allow shell access to these users, nor do I want to have to visit their home directory to do maintenance or backups myself, I will be needing to grant them access to specific folders in the system's  /Web directory.  My first thought was to do a symbolic link, but since they are in a chroot jail, the symbolic link can't get out of the jail either.  Hard links would work, except that you can only hard link a file, not a whole directory.  It looks like mount --bind is the answer.  You can test out this arrangement by performing the following at a shell prompt, replacing jeffd with your own username and /Web/sample with the actual path to the path you are granting access to:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;mkdir /home/jeffd/sample&lt;br /&gt;sudo mount --bind /Web/sample /home/jeffd/sample&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, list the files in the /home/jeffd/sample directory.  You will see that it is equivalent to /Web/sample.  To unmount:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sudo umount /home/jeffd/sample&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Once you're satisfied with this arrangement, you can edit /etc/fstab (again, remember to use sudo) and append lines in the following format for each path you want to map:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/Web/sample  /home/jeffd/sample  none  bind 0 0&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, reboot if you want to test it (sudo reboot now).  Voila!&lt;br /&gt;&lt;br /&gt;Now, lest you think yourself &lt;span style="font-style: italic;"&gt;clever&lt;/span&gt; and try chrooting from a shell prompt to test the restricted environment, it will not work.  You would need to have a copy of /bin/bash and some of its required libraries from /lib (or /lib64 as the case may be) residing within the target root in order to do so.  Since you aren't going to be allowing shell access into the chroot area, but only FTP, this shouldn't be a problem so don't bother trying it.  If you DO try it, and you've only copied /bin/bash, you'll get a misleading error that /bin/bash can't be found even if its there because it can't find the files it needs in /lib.  If you DO copy /lib and get in, you won't be able to do anything fun anyway because you don't have the basic tools like ls in order to operate, so just don't try this.&lt;br /&gt;&lt;br /&gt;Once you're up, FTP in and verify your chroot setup by trying to cd to the root or elsewhere that you are not allowed to go, and make sure your mount bind works by putting some files there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7791154980641436358?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7791154980641436358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7791154980641436358' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7791154980641436358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7791154980641436358'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/ftp-server-on-ubuntu.html' title='FTP Server on Ubuntu'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-7724759956727210532</id><published>2006-12-05T20:15:00.000-08:00</published><updated>2006-12-06T14:41:27.007-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><category scheme='http://www.blogger.com/atom/ns#' term='Firewall'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Firewall on Ubuntu using iptables</title><content type='html'>I decided to start by adding a firewall to &lt;a href="http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html"&gt;Pericles&lt;/a&gt;, and a little searching revealed that iptables is exactly what I need for the very simple setup I am planning on running.  Even if you run a separate firewall or router as a gateway, it may not be a bad idea to install iptables on your machine as well so that you can have full control over what goes in and out in the event that you ever have any guest machines connected on the network inside of the firewall.&lt;br /&gt;&lt;br /&gt;The Ubuntu server distribution came with iptables preinstalled, I just had to create scripts to set up the firewall and get them to automatically start when the machine boots up.&lt;br /&gt;&lt;br /&gt;I started here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://easyfwgen.morizot.net/gen/index.php"&gt;Easy Firewall Generator for IPTables&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I generated a simple script, enabling SSH, DNS, Web Server, and a couple of other services I use on the first Ethernet interface (&lt;span style="font-style: italic;"&gt;eth0&lt;/span&gt;), copied and pasted it into an editor (running under &lt;span style="font-weight: bold;"&gt;sudo&lt;/span&gt;) and modified it slightly:&lt;br /&gt;&lt;br /&gt;I searched and found the line for the HTTP service:&lt;br /&gt;&lt;br /&gt;$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT&lt;br /&gt;&lt;br /&gt;I copied and pasted this and changed the port number to a few other ports I need open for specialized purposes.  (Since I do more than just basic web hosting, I have clients using custom software that connect to specific ports.)&lt;br /&gt;&lt;br /&gt;If you need to open a range, use something like 3000:3010 in place of the 80 in the above line.&lt;br /&gt;&lt;br /&gt;Try to open as few ports as possible.  That's kind of the point of a firewall.&lt;br /&gt;&lt;br /&gt;Also, search for "ping", and you'll find a note on a line you can uncomment to allow pinging to your server.  I prefer to allow pinging, you may choose not to.  If you want pinging, uncomment it so it looks like this:&lt;br /&gt;&lt;br /&gt;$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT&lt;br /&gt;&lt;br /&gt;Now save the finished file as /etc/init.d/iptables (which did not exist when I started)&lt;br /&gt;&lt;br /&gt;Set the permissions so that it matches the rest of the files in /etc/init.d:&lt;br /&gt;&lt;pre&gt;sudo chmod 755 /etc/init.d/iptables&lt;/pre&gt;&lt;br /&gt;Please test your firewall by running &lt;span style="font-style: italic;"&gt;./iptables start&lt;/span&gt; from the shell prompt.  Remember, it won't close any ports that are already opened, so try opening a second ssh session or whatnot to verify that you can still access your box before deciding to make this firewall permanent.  I recommend leaving some distinguishable port closed so you can verify that iptables is working--for example, I disabled icmp ping, and when I pinged the box and saw Request timed out, I &lt;span style="font-weight: bold;"&gt;knew&lt;/span&gt; that my firewall was working, so then I edited the iptables script to enable pinging again.&lt;br /&gt;&lt;br /&gt;Once you are satisfied that it is working according to your desires, you need to add iptables to the list of daemons to automatically start for the various runlevels when your machine is booted up:&lt;br /&gt;&lt;pre&gt;sudo update-rc.d iptables defaults&lt;/pre&gt;&lt;br /&gt;Finally, reboot your system and make sure the firewall comes up:&lt;br /&gt;&lt;pre&gt;sudo reboot now&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-7724759956727210532?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/7724759956727210532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=7724759956727210532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7724759956727210532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/7724759956727210532'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/firewall-on-ubuntu-using-iptables.html' title='Firewall on Ubuntu using iptables'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-1123938436682784691</id><published>2006-12-05T19:51:00.000-08:00</published><updated>2006-12-06T14:44:47.795-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Wine'/><category scheme='http://www.blogger.com/atom/ns#' term='Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Pericles'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>WAMP to LAMP</title><content type='html'>I'm starting a series to document my progress on converting a very specialized WAMP server over to a LAMP server.&lt;br /&gt;&lt;br /&gt;WAMP = Windows, Apache, MySQL, PHP&lt;br /&gt;LAMP = Linux, etc.&lt;br /&gt;&lt;br /&gt;I am going to name this box Pericles (Mostly for the sake of giving it a tag in the blog so that you can read all about its life by clicking &lt;a href="http://opencomputing.blogspot.com/search/label/Pericles"&gt;Pericles&lt;/a&gt; here or on the sidebar.)&lt;br /&gt;&lt;br /&gt;To begin with, I want to explain why I was using a WAMP server to begin with.  Most people either go all Microsoft or all Open Source.  This server was born to fulfill one pressing need:  A friend of mine had a website already written in ASP that he needed a new hosting provider for, and neither of us had time to deal with anything as serious as a rewrite at that time.  So, we found a neat plug-in for Apache on windows that allowed it to execute ASP code.  This worked, and our small Web-hosting business was born.&lt;br /&gt;&lt;br /&gt;Fast-forward two years.&lt;br /&gt;&lt;br /&gt;We now host around twenty websites on this box, and the need for ASP is gone because the original site has been rewritten in PHP.  Furthermore, the specs on that box were outdated when we started, and it is time for a faster CPU.  We bought a new system at the Day After Thanksgiving sale and we are now ready to go Open Source.&lt;br /&gt;&lt;br /&gt;We've installed Ubuntu 6.10 (Edgy Eft) from the Server disc, and then added the ubuntu-desktop package manually to get a GUI desktop.  We need the GUI desktop for a couple of reasons:  1) We're new at administering Linux and it helps us feel a little more confident.  2)&lt;br /&gt;I've developed a few tools over the past two years that handle frequent back-end tasks as Windows applications.  I don't have time to port them all at once, so I am going to have to do it piece by piece, thus I will run the unported tools by using Wine in the meantime.&lt;br /&gt;&lt;br /&gt;Once I got Edgy booting smoothly and configured for our graphics card (it required a resolution tweak using &lt;span style="font-style: italic;"&gt;dpkg-reconfigure xserver-xorg&lt;/span&gt; to get it looking correct on our LCD) this is our official starting point.&lt;br /&gt;&lt;br /&gt;To follow our ongoing drama, click on the &lt;a href="http://opencomputing.blogspot.com/search/label/Pericles"&gt;Pericles&lt;/a&gt; category/label in the sidebar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-1123938436682784691?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/1123938436682784691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=1123938436682784691' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1123938436682784691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/1123938436682784691'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/12/wamp-to-lamp.html' title='WAMP to LAMP'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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-3034230779454603134.post-5436186956721813500</id><published>2006-11-29T01:42:00.000-08:00</published><updated>2006-11-29T01:48:48.783-08:00</updated><title type='text'>Welcome to Open Computing</title><content type='html'>We're here to advocate the use of Open Source and Free Software.  Our goals are to:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Help by sharing details of our experiences as we try to use Open Software to accomplish various real life tasks.&lt;/li&gt;&lt;li&gt;Educate people about Open Source Software and what it can do for them.&lt;/li&gt;&lt;li&gt;Contribute to Open Source projects by identifying and reporting bugs and spending time on various Open Source projects, including the possibility of aiding in development.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;By doing these things we can help to make a difference in people's lives.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3034230779454603134-5436186956721813500?l=opencomputing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomputing.blogspot.com/feeds/5436186956721813500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3034230779454603134&amp;postID=5436186956721813500' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5436186956721813500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3034230779454603134/posts/default/5436186956721813500'/><link rel='alternate' type='text/html' href='http://opencomputing.blogspot.com/2006/11/welcome-to-open-computing.html' title='Welcome to Open Computing'/><author><name>Jeff Day</name><uri>http://www.blogger.com/profile/11675035864869123800</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></feed>
