<?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-4213476024161017641</id><updated>2012-02-01T20:40:19.966-08:00</updated><category term='test'/><category term='python'/><title type='text'>Technology Bits</title><subtitle type='html'>I am always exploring interesting tidbit in technology. I will keep a blog of my path to discovering new technology.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><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><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>79</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4213476024161017641.post-2176969394231137194</id><published>2012-01-22T22:15:00.000-08:00</published><updated>2012-01-22T22:15:29.803-08:00</updated><title type='text'>Password strength</title><content type='html'>Recently I joined Lastpass.com for free password management. It is great to have this secure website help keep my passwords safe while using a different password for every site I have registered at. I the past I had used the same password but now they are all 30 characters using letters, numbers and special characters. Here is a sample password that lastpass will generate for you:z$7cAP%#Ak%r39x!PU5e2Nq1As*2NpI have changed 35 or so different sites passwords to different passwords and it was simple. Now if one site stores the passwords in plain text and a hacker gets it then I will just change that one password to a different one using lastpass in a minute. And the hacker won't be able to get into any of my other sites.One thing I liked was how secure you can make lastpass forum for instance. They allow your password to be upto 255 characters. But while I was changing passwords I found something surprising. The only 2 sites that I wasn't able to use my 30 character password on was financial sites. Wellsfargo forces it to be 14 or less and paypal.com forces the password to be 20 or less. How come all the biggest sites on the internet let you use a 30 character password and then where you want a stronger password it has to be half the size? I think they should allow 255 character passwords. It isn't something that should use more computer power to store a longer password. It's just one line of code usually to change the length allowed in login systems.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2176969394231137194?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2176969394231137194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2176969394231137194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2176969394231137194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2176969394231137194'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2012/01/password-strength.html' title='Password strength'/><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-4213476024161017641.post-2512901160436364353</id><published>2011-12-10T10:55:00.001-08:00</published><updated>2011-12-10T11:04:36.866-08:00</updated><title type='text'>Saving includes to a variable</title><content type='html'>I was reading a forum post and they wanted to save an include to a variable when making new forums on their website. I thought about it and here is what I came up with:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;function get_include($path, $cat_id = null){&lt;br /&gt;     ob_start(); // start buffer&lt;br /&gt;     include $path;&lt;br /&gt;     $content = ob_get_contents(); // assign buffer contents to variable&lt;br /&gt;     ob_end_clean(); // end buffer and remove buffer contents&lt;br /&gt;     return $content;&lt;br /&gt;}&lt;br /&gt;$render = array();&lt;br /&gt;$render[] = "testing1";&lt;br /&gt;$render[] = "testing2";&lt;br /&gt;$category['fid'] = '134';&lt;br /&gt;echo "&amp;lt;pre&amp;gt;";&lt;br /&gt;$render[] = get_include('add_forum.php', $category['fid']);&lt;br /&gt;$render[] = get_include('add_forum.php', $category['fid']);&lt;br /&gt;print_r($render);&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and the forum_add.php looks like this:&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;echo "here is your id: $cat_id";&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The result looks like:&lt;br /&gt;&lt;code&gt;Array&lt;br /&gt;(&lt;br /&gt;    [0] =&amp;gt; testing1&lt;br /&gt;    [1] =&amp;gt; testing2&lt;br /&gt;    [2] =&amp;gt; here is your id: 134&lt;br /&gt;    [3] =&amp;gt; here is your id: 134&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Isn't this a nice way of both saving an include to a file and passing a variable to the include in a function.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2512901160436364353?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2512901160436364353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2512901160436364353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2512901160436364353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2512901160436364353'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/12/saving-includes-to-variable.html' title='Saving includes to a variable'/><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-4213476024161017641.post-5362242008108315951</id><published>2011-11-25T14:20:00.001-08:00</published><updated>2011-11-25T14:57:31.371-08:00</updated><title type='text'>Quick install LAMP server on Ubuntu</title><content type='html'>Here is the site I am going to summarize here:&amp;nbsp;&lt;a href="https://help.ubuntu.com/community/ApacheMySQLPHP"&gt;https://help.ubuntu.com/community/ApacheMySQLPHP&lt;/a&gt;&lt;br /&gt;I am using Ubuntu 10.10 for this install. It should take 10 minutes or so to follow these steps.&lt;br /&gt;The fastest way to install Appache2, PHP5.3, and MySQL is to use this command:&lt;br /&gt;&lt;code&gt;sudo tasksel install lamp-server&lt;/code&gt;&lt;br /&gt;If you are using 11.04 then tasksel might not be installed. Then use this to install it:&lt;br /&gt;&lt;code&gt;sudo apt-get install tasksel&lt;/code&gt;&lt;br /&gt;Tasksel will install the Lamp server but won't remove it, but we won't need to remove it.&lt;br /&gt;At this point go to http://localhost and it should say "It works!"&lt;br /&gt;Next use this command to make a new site:&lt;br /&gt;&lt;code&gt;sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mysite gksudo gedit /etc/apache2/sites-available/mysite&lt;/code&gt;&lt;br /&gt;Make a folder in your home folder called webhome or anything you want to put your website in instead of the default var/www because I like to be able to edit the website files from my home so I own them and don't have to use sudo to edit them as root. Edit the DocumentRoot line to point to your new web root: /home/user/webhome/&lt;br /&gt;Change the Directory directive by fixing the path to point to your webhome folder. Instead of &amp;lt;Directory /var/www/&amp;gt; use &amp;lt;Directory /home/user/public_html/&amp;gt;&lt;br /&gt;After saving the file in gedit use these commands to disable the default website and enable the new website.&lt;br /&gt;&lt;code&gt;sudo a2dissite default &amp;amp;&amp;amp; sudo a2ensite mysitesudo /etc/init.d/apache2 restart&lt;/code&gt;&lt;br /&gt;Next make a index.php file in the webhome folder that says:&lt;br /&gt;&lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/code&gt;Now go to: http://localhost&lt;br /&gt;You should see the php configuration showing all the php settings.&lt;br /&gt;This was pretty easy. They have streamlined alot of these steps.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-5362242008108315951?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/5362242008108315951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=5362242008108315951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5362242008108315951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5362242008108315951'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/11/quick-install-lamp-server-on-ubuntu.html' title='Quick install LAMP server on Ubuntu'/><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-4213476024161017641.post-6800426110831941299</id><published>2011-11-22T00:39:00.001-08:00</published><updated>2011-11-22T01:07:42.362-08:00</updated><title type='text'>Idea for making midi or tracker sequencer in html</title><content type='html'>I would like to make a sequencer in html5. I think its possible and I have been researching how it can be done. The main problem will be making it work in the main browsers and not just 1 or 2. You could make tracker mod music play from firefox by installing vlc and check vlc firefox plug-in when you install it. That works and allows you to add files to the playlist using simple javascript. I made a demo which plays, stops, goes to next track and pauses the music. It works but then the next problem would be how to make the .it or .xm or .mid or .mod file on the fly using the server. Would that be done using a batch command run from php or could it be made using pure php. This would be faster than creating wave or mp3s on the fly and uploading them.&lt;br /&gt;Here is a link to VLC's wiki talking about how to make the embeded object work in firefox and controlling it using js.&lt;br /&gt;&lt;a href="http://wiki.videolan.org/Documentation:WebPlugin#Playlist_object"&gt;http://wiki.videolan.org/Documentation:WebPlugin#Playlist_object&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then I thought this was not really good either since its using old technology and when I refreshed the page it would crash the plugin too. I found a new way to run midi type files in firefox at least and maybe Chrome, Safari or Opera which use webkit.&lt;br /&gt;&lt;br /&gt;I found this site:&lt;br /&gt;&lt;a href="http://weare.buildingsky.net/processing/audionode.js/examples/index.html"&gt;http://weare.buildingsky.net/processing/audionode.js/examples/index.html&lt;/a&gt;&lt;br /&gt;The top example works sort of:&lt;br /&gt;http://weare.buildingsky.net/processing/audionode.js/examples/drum-machine.html&lt;br /&gt;It uses javascript and html5's audio object to create audio from scratch like wave files.&lt;br /&gt;&lt;a href="https://wiki.mozilla.org/Audio_Data_API"&gt;https://wiki.mozilla.org/Audio_Data_API&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You tell it what the sample rate is and then feed it all the data in an array. 44100 samples per second is the normal rate. Its the quality of CD's and it seems to work. There is a website I found which converts .midi files to wave channels on the fly in javascript on the client and plays them using firefox.&lt;br /&gt;&lt;a href="http://jsspeccy.zxdemo.org/"&gt;http://jsspeccy.zxdemo.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It will take time to learn how to use this to make a cool sequencer program all on the web but it looks like it would be possible. I just need to know how to make sounds either wave files or how to make track files and then convert them to wave files to play in the browser. Its easy to make a simple sine wave but how do you introduce other sounds into the mix?&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-6800426110831941299?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/6800426110831941299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=6800426110831941299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6800426110831941299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6800426110831941299'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/11/idea-for-making-midi-or-tracker.html' title='Idea for making midi or tracker sequencer in html'/><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-4213476024161017641.post-5898191531335748013</id><published>2011-11-06T16:46:00.000-08:00</published><updated>2011-11-06T16:47:00.688-08:00</updated><title type='text'>Get amazon ASIN using javascript</title><content type='html'>I was wondering how this can be done and found a couple answers on:&lt;a href="http://stackoverflow.com/questions/1764605/scrape-asin-from-amazon-url-using-javascript"&gt;http://stackoverflow.com/questions/1764605/scrape-asin-from-amazon-url-using-javascript&lt;/a&gt;&lt;br /&gt;url = window.location.href;&lt;br /&gt;url.match("/([a-zA-Z0-9]{10})(?:[/?]|$)");&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-5898191531335748013?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/5898191531335748013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=5898191531335748013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5898191531335748013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5898191531335748013'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/11/get-amazon-asin-using-javascript.html' title='Get amazon ASIN using javascript'/><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-4213476024161017641.post-8249841285180444615</id><published>2011-10-31T13:48:00.000-07:00</published><updated>2011-10-31T13:48:37.085-07:00</updated><title type='text'>Hierarchy in databases for folders</title><content type='html'>I have been building a folder system that stores files and revisions to these files in the folders. I have now added deleting the folders or files by turning a column isDeleted = 1 or 0 when it is deleted so I can keep them in side until a certain time has gone by before moving them to an old table or delete them.&lt;div&gt;I am using a PHP class:&amp;nbsp;&lt;a href="http://www.php4every1.com/scripts/walker-class/"&gt;http://www.php4every1.com/scripts/walker-class/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;It was made for a comment system but I converted it to show the folder structure by building an unordered list for each root node and using lots of DIVs and spans with CSS to show the mini folders with plus and minus signs that will hide or unhide the inside list to show or hide a list of folders. This works for many levels. Then I made 2 columns on the right of the tree structure that shows 2 levels of the folders at any point. Then by clicking on any folder in the 2nd column it moves to the first column and shows the files and folders that are in it, in the second column or just a blank folder and file icon to allow you to add new folders and files. I also implemented a right click menu to add or remove files and folders. Then I made the folders and files draggable so we can move them to other folders either in the tree on the left or another folder in one of the 2 columns we navigate in.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Now the problem I have to solve is how to keep them in order when I move a folder to another place. My folder tree walker fails to build the tree when it reads the table from top to bottom because I moved the folder above the point where the parent is so when it tries to find the parent for the child folder I moved it can't find it because the child it mentioned before the parent is listed in the database. I need to make a column that lists the tree in order from the root nodes out to the children. I have to do this because I don't want every person that views the page to have recursively find all the nodes since this won't scale well. I have to redo the order of the folders each time a new folder is added or a folder is moved.&amp;nbsp;&lt;/div&gt;&lt;div&gt;I read an article online:&amp;nbsp;&lt;a href="http://www.ferdychristant.com/blog/archive/DOMM-7QJPM7"&gt;http://www.ferdychristant.com/blog/archive/DOMM-7QJPM7&lt;/a&gt;&lt;/div&gt;&lt;div&gt;about a way to make adding a folder easy. It uses a lineage column that lists all the ids from the root to the present like 1-4-8 and when you add a child to 8 you will just add "-9" to the 9th folder in the system that's being placed inside the 8th folder. If I use this method then when I move a folder with many folders inside then I need to rewrite the lineage for each folder recursively using the parent of the folder it is being placed in as the base for the new location the folders are being moved to.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Then I read this article:&amp;nbsp;&lt;a href="http://evolt.org/node/4047/"&gt;http://evolt.org/node/4047/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;It mentions another way of fixing this by running a stored procedure when you insert a new folder where all folders after it it incremented by 1 id.&lt;/div&gt;&lt;div&gt;This article:&amp;nbsp;&lt;a href="http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/"&gt;http://www.alandelevie.com/2008/07/12/recursion-less-storage-of-hierarchical-data-in-a-relational-database/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;talks about other methods of working with this data. I am going to try pulling all the data out of the database using a single select and then build the tree in php and then update the sequence in the database afterward. I can do this each time a folder is moved.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8249841285180444615?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8249841285180444615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8249841285180444615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8249841285180444615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8249841285180444615'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/10/hierarchy-in-databases-for-folders.html' title='Hierarchy in databases for folders'/><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-4213476024161017641.post-7638389953050796385</id><published>2011-10-24T15:02:00.000-07:00</published><updated>2011-10-24T15:11:02.715-07:00</updated><title type='text'>Google Docs spreadsheet automatic email sending</title><content type='html'>&lt;br /&gt;This script sends an email using google docs spreadsheets.&lt;br /&gt;Here is a script I made that sends an email to people if a cell doesn't say email sent. It uses cells that exist to put together the body and subject of the email. You can do alot more with this but its good enough to work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;function sendEmails2() {&lt;br /&gt;&amp;nbsp; var sheet = SpreadsheetApp.getActiveSheet();&lt;br /&gt;&amp;nbsp; var startRow = 2; &amp;nbsp;// First row of data to process&lt;br /&gt;&amp;nbsp; var numRows = 10000; &amp;nbsp; // Number of rows to process&lt;br /&gt;&amp;nbsp; // Fetch the range of cells A2:N10000&lt;br /&gt;&amp;nbsp; var dataRange = sheet.getRange(startRow, 1, numRows, 14)&lt;br /&gt;&amp;nbsp; // Fetch values for each row in the Range.&lt;br /&gt;&amp;nbsp; var data = dataRange.getValues();&lt;br /&gt;&amp;nbsp; for (var i = 0; i &amp;lt; data.length; ++i) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var row = data[i];&lt;br /&gt;&amp;nbsp; &amp;nbsp; var emailAddress = row[6]; &amp;nbsp;// First column&lt;br /&gt;&amp;nbsp; &amp;nbsp; var message = row[12]; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Second column&lt;br /&gt;&amp;nbsp; &amp;nbsp; var emailSent = row[13]; &amp;nbsp; &amp;nbsp; // Third column&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (emailSent != EMAIL_SENT) { &amp;nbsp;// Prevents sending duplicates&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(emailAddress.length == 0){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //sheet.getRange(startRow + i, 15).setValue("stop");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; var subject = "Sending emails from a Spreadsheet";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; MailApp.sendEmail(emailAddress, subject, message);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sheet.getRange(startRow + i, 14).setValue(EMAIL_SENT);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Make sure the cell is updated right away in case the script is interrupted&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SpreadsheetApp.flush(); &lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-7638389953050796385?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/7638389953050796385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=7638389953050796385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7638389953050796385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7638389953050796385'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/10/google-docs-spreadsheet-automatic-email.html' title='Google Docs spreadsheet automatic email sending'/><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-4213476024161017641.post-3132604042774456855</id><published>2011-10-21T21:06:00.000-07:00</published><updated>2011-10-24T15:05:15.137-07:00</updated><title type='text'>Excel Indirect function</title><content type='html'>I just used Excel today to make some reports and this is a simple form or the function I made:&lt;br /&gt;&lt;br /&gt;=INDIRECT("'" &amp;amp; D4 &amp;amp; "'!" &amp;amp; C4)&lt;br /&gt;&lt;br /&gt;If you put the values from D4 and C4 into their places it looks like this:&amp;nbsp;=INDIRECT("'test'!a1").&lt;br /&gt;What this does is print what ever is in A1 of the test sheet. What is nice is it looks at a cell in the spreadsheet to choose the sheet to look for values in. So you could have a dropdown box show a list of the sheet names that you get from a settings sheet that you update each time you add a sheet. Then you can make reports that will update for you every time you change what is in the dropdown menu. I also use vlookups to lookup exactly what ranges to use in the dynamic indirect function. That way you can put most of the function code in one place in the table that the vlookup looks at instead of putting all the index or match function text in every place that uses the indirect function. I was having the vlookup table calculate what row each section start of stops so we can do a count of cells within that section from the indirect function without all the overhead that the vlookup table does.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-3132604042774456855?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/3132604042774456855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=3132604042774456855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3132604042774456855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3132604042774456855'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/10/excel-indirect-function.html' title='Excel Indirect function'/><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-4213476024161017641.post-5670698091863120076</id><published>2011-10-11T20:06:00.000-07:00</published><updated>2011-10-24T15:05:15.195-07:00</updated><title type='text'>Shared online Tracker like Google Docs</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="kl" dir="ltr" id=":1of" style="margin-bottom: 0.2em; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;I thought of a cool idea for a collaborating tracker.&lt;/span&gt;&lt;/div&gt;&lt;div class="kl" dir="ltr" id=":1o3" style="margin-bottom: 0.2em; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;How hard would it be to make a shared online tracker&amp;nbsp;where every note you add to the tracker I see on my version of the online program as if we were both on the same computer.&lt;/span&gt;&lt;/div&gt;&lt;div class="kl" dir="ltr" id=":27z" style="margin-bottom: 0.2em; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Its like google docs for music trackers.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;T&lt;span dir="ltr" id=":27w"&gt;he tracks would have to be able to be encoded and decoded fast and compressed and sent accross the net or peices of the file to tell the other collaborators that are using it right now what changed. Like ajax in an online or off line tracker program.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;span dir="ltr"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;If you like this idea then comment.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-5670698091863120076?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/5670698091863120076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=5670698091863120076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5670698091863120076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5670698091863120076'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/10/shared-online-tracker-like-google-docs.html' title='Shared online Tracker like Google Docs'/><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-4213476024161017641.post-1062816545119560693</id><published>2011-10-06T22:29:00.000-07:00</published><updated>2011-10-24T15:05:15.104-07:00</updated><title type='text'>New ways of hacking websites</title><content type='html'>What if someone could send you a link to their page and in that page it could make you post a form that you can't see. This form could send money from the bank account they are logged into to the attackers account. All they have to do is send them to the right page and with the right parameters sent along it will send the money to the attacker. There are a couple ways of fixing this. The bank could use a token that can only be used once along with other parameters int he form that have different values everytime so the attacker wouldn't know what the names of the hidden fields are without going to the banks website and getting their form. If they could use PHP curl request with the banks sessionid it would be relatively easy to get the form contents and then fill in the right values into it and send the form off to the bank website and they would think it was from them. They would also use curl to not only send the sessionid but also change the referer to say it came from the banks website page where the form is. That page could also be a unique url everytime as well. Then the curl request would need to know what page to download the form. They would go to the page where the user clicks to get the form and it would create the unique url for the form there so the attacker may get the form that way. How does the attacker get the sessionid? They use javascript to somehow run document.cookie on another tab than the one they are on now. If this works then they have the sessionid and can then refresh the page quickly after the js is done getting the sessionid and once it has refreshed the page will run php code to make the curl request to the page where the bank website is. This could be any website that has forms. This is just an example with a bank to show how important it is for websites to secure their sites using some of these techniques or others. Another thing the bank website can do to make it hard to run their form without being on their site is using dynamic named functions in php. Use the create_function function in PHP to make a custom custion that is written alittle bit differently each time in a way that ensures the user is logged in:&lt;br /&gt;&lt;a href="http://php.net/manual/en/function.create-function.php"&gt;http://php.net/manual/en/function.create-function.php&lt;/a&gt;&lt;br /&gt;But if the hacker has your sessionid I don't know how this will be good enough.Here are some interesting pages on the subject:&lt;br /&gt;&lt;a href="http://4diggers.blogspot.com/"&gt;http://4diggers.blogspot.com/&amp;nbsp;&lt;/a&gt;&lt;br /&gt;Here is an article about cross domain ajax and how cross domain ajax could break any web application&lt;a href="http://shiflett.org/blog/2006/aug/cross-domain-ajax-insecurity"&gt;http://shiflett.org/blog/2006/aug/cross-domain-ajax-insecurity&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1062816545119560693?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1062816545119560693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1062816545119560693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1062816545119560693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1062816545119560693'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/10/new-ways-of-hacking-websites.html' title='New ways of hacking websites'/><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-4213476024161017641.post-3338665124632862738</id><published>2011-08-28T15:24:00.000-07:00</published><updated>2011-10-31T13:58:04.552-07:00</updated><title type='text'>image test to local site</title><content type='html'>&lt;br /&gt;&lt;xmp&gt;Reading a php page with only an image is a method a hacker could use to get your cookie info if they could get that image tag onto a secure site or blog.&amp;amp;lt;br /&amp;amp;gt;&amp;amp;lt;img alt="no image" src="http://stokescomp.com/sample/test.php" style="display: none;" /&amp;amp;gt;&lt;/xmp&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-3338665124632862738?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/3338665124632862738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=3338665124632862738' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3338665124632862738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3338665124632862738'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/08/image-test-to-local-site.html' title='image test to local site'/><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-4213476024161017641.post-8000126443188704661</id><published>2011-08-22T13:53:00.000-07:00</published><updated>2011-10-31T11:54:29.009-07:00</updated><title type='text'>Error when trying to use JSON and jquery libraries together</title><content type='html'>For the fix for this just use json2.js instead of json.js:&lt;br /&gt;&lt;a href="https://github.com/douglascrockford/JSON-js"&gt;https://github.com/douglascrockford/JSON-js&lt;/a&gt;&lt;br /&gt;The problem was that he was replacing the json function in the object.prototype and this breaks jQuery since this is not a very good idea. The new json2.js is much better. Below is the troubles I was having and how I solved it with the json.js but later I ran into other things that was broken in jQuery because of json.js. So just use json2.js instead.&lt;br /&gt;I got this error when I had both json.js and jquery scripts in the same html file:&lt;br /&gt;JSON.parse: unexpected character So I tried updating to the newest jquery 1.6.2 and I got this error: c.replace is not a function&lt;br /&gt;I spent a couple hours trying to track it down. &lt;br /&gt;I noticed that when I leave out the json.js file there are no errors when running any jquery code. &lt;br /&gt;First I looked in json.js and found the lines that made it fail.&lt;br /&gt;In json.js it has this code at the end to actually make the parseJSON function if it doesn't exist:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;if(!Object.prototype.toJSONString){&lt;br /&gt; Object.prototype.toJSONString=function(filter){return JSON.stringify(this,filter);};&lt;br /&gt; Object.prototype.parseJSON=function(filter){return JSON.parse(this,filter);};&lt;br /&gt;}}());&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now I tracked this down to the exact part of the jquery code that was causeing the problem.&lt;br /&gt;There is a function called by(a,c) in the jquery file. The variable c had these values:&lt;br /&gt;paddingLeft&lt;br /&gt;paddingRight&lt;br /&gt;opacity&lt;br /&gt;function (filter) { "use strict"; return JSON.stringify(this, filter); }&lt;br /&gt;When it got to the function here it fails since thats not a string but a function that was created using JSON's Object.prototype.toJSONString=function(filter)&lt;br /&gt;I don't know why the function is in this list of css types. To fix it I replaced:&lt;br /&gt;c=c.replace(bp,"-$1").toLowerCase();&lt;br /&gt;with:&lt;br /&gt;c=c.toString().replace(bp,"-$1").toLowerCase();&lt;br /&gt;the toString changes the function to a string.&lt;br /&gt;Then when I run the code it gets to the json function and tries to pass an object to json so I fixed it like this:&lt;br /&gt;&lt;code&gt;Object.prototype.parseJSON=function(filter){if((typeof filter) == 'object') return;return JSON.parse(this,filter);};&lt;/code&gt;&lt;br /&gt;This checks if its an object instead of the expected string and returns nothing if thats the case.&lt;br /&gt;I don't want to spend more time trying to figure out the root problem but this hack will make it work for now.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8000126443188704661?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8000126443188704661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8000126443188704661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8000126443188704661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8000126443188704661'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/08/error-when-trying-to-use-json-and.html' title='Error when trying to use JSON and jquery libraries together'/><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-4213476024161017641.post-4891428501743311117</id><published>2011-08-22T08:20:00.000-07:00</published><updated>2011-10-24T15:05:15.190-07:00</updated><title type='text'>Neat asynchronous uploads</title><content type='html'>I am letting people upload multiple documents at a time to be added as revisions to existing documents. If the file name matches it shows them the revs that exist. &lt;br /&gt;While they enter a description for the files the upload moves the files to a temp folder:&lt;br /&gt;I move the files asynchronously using a hidden iFrame and a target on the form pointing to the name of the iFrame. The php thats echoed there includes js that will change a button from loading to Open for each file so they can open pdfs from the files temp location.&lt;br /&gt;Without refreshing I upload the document and allow them to open it while its in a temp folder on the server. Then when they have finished adding a description for it then the file is moved to the real folder where all the other files are. The database has a hierarchical table that shows where in the virtual folders for these files are even though they are in the same folder in the physical server.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4891428501743311117?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4891428501743311117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4891428501743311117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4891428501743311117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4891428501743311117'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/08/neat-asynchronous-uploads.html' title='Neat asynchronous uploads'/><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-4213476024161017641.post-1211503801769907969</id><published>2011-08-14T19:02:00.000-07:00</published><updated>2011-10-24T15:05:15.115-07:00</updated><title type='text'>XMP tags</title><content type='html'>I found out recently about a tag in html I didn't know about called XMP. They make it so all the code that you put in them is shown and the browser won't interprit them as html. Here is an example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;xmp&gt;&lt;p&gt;testing a paragraph&lt;/p&gt;&lt;/xmp&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1211503801769907969?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1211503801769907969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1211503801769907969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1211503801769907969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1211503801769907969'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/08/xmp-tags.html' title='XMP tags'/><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-4213476024161017641.post-4176249103880788161</id><published>2011-08-14T18:20:00.000-07:00</published><updated>2011-10-24T15:05:15.175-07:00</updated><title type='text'>PHP Daemon runs out of file resources</title><content type='html'>http://gnuvince.wordpress.com/2008/10/28/php-wrong-for-long-running-processes-wrong-for-america/&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;$fd = fopen('/etc/passwd', 'r');&lt;br /&gt;echo &amp;quot;$fdn&amp;quot;;&lt;br /&gt;fclose($fd);&lt;br /&gt;&lt;br /&gt;$fd = fopen('/etc/fstab', 'r');&lt;br /&gt;echo &amp;quot;$fdn&amp;quot;;&lt;br /&gt;fclose($fd);&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And this shows the usual: &lt;br /&gt;&lt;code&gt;$ php fds.php&lt;br /&gt;Resource id #5&lt;br /&gt;Resource id #6&lt;/code&gt;&lt;br /&gt;Python doesn't have this problem though.&lt;br /&gt;&lt;br /&gt;PHP is reusing the file descriptors but counting up its file resource. When it gets to 2^31-1 files and then goes into negative numbers and when it gets to 0 it crashes. How can the process use that many file handles in a few weeks time?&lt;br /&gt;&lt;br /&gt;How do you reuse old file descriptors or resources after they are closed so you can run the php script forever?&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4176249103880788161?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4176249103880788161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4176249103880788161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4176249103880788161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4176249103880788161'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/08/php-daemon-runs-out-of-file-descriptors.html' title='PHP Daemon runs out of file resources'/><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-4213476024161017641.post-8615482081443538763</id><published>2011-08-02T20:15:00.000-07:00</published><updated>2011-10-24T15:05:15.237-07:00</updated><title type='text'>Clearing multiple setTimeouts with js</title><content type='html'>&lt;a href="http://garbageburrito.com/blog/entry/555/slideshow-clearing-all-javascript-timers"&gt;http://garbageburrito.com/blog/entry/555/slideshow-clearing-all-javascript-timers&lt;/a&gt;&lt;br /&gt;I was making timers and was having trouble clearing them since if you use the same variable to save each timer and you use clearTimeout(timer); it only clears the last timer and not all of them. You can't just call clearTimeout 3 times to clear them. So I found this col code to put setTimeouts into an array and clear them before you set more.&lt;br /&gt;&lt;br /&gt;Make many timers and clear them any time.&lt;br /&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;br /&gt;timers = new Array();&lt;br /&gt;&lt;br /&gt;function resetTimeouts() {&lt;br /&gt;  timers = new Array();&lt;br /&gt;}&lt;br /&gt;function clearTimeouts() {&lt;br /&gt;  for (var i= 0;i &lt; timers.length; i++) {&lt;br /&gt;    clearTimeout(timers[i]);&lt;br /&gt;  }&lt;br /&gt;  //resetTimeouts();&lt;br /&gt;  timers = new Array();&lt;br /&gt;}&lt;br /&gt;//stop any timer&lt;br /&gt;clearTimeouts();&lt;br /&gt;timers.push(setTimeout("alert('timer here');", 2000))&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then if you make many timers and then you make more you want to clear all the old ones each time you make more so the old ones aren't triggered after new ones are made.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8615482081443538763?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8615482081443538763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8615482081443538763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8615482081443538763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8615482081443538763'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/08/clearing-multiple-settimeouts-with-js.html' title='Clearing multiple setTimeouts with js'/><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-4213476024161017641.post-4585255822962027899</id><published>2011-08-02T20:13:00.000-07:00</published><updated>2011-10-24T15:05:15.185-07:00</updated><title type='text'>HDs prices have dropped</title><content type='html'>3TB Hard drives are now $130 on newegg.com&lt;br /&gt;Thats the cheapest I have seen. This is 4.3 cents a GB and the cheapest I knew about before was 5cents a GB.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4585255822962027899?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4585255822962027899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4585255822962027899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4585255822962027899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4585255822962027899'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/08/hds-prices-have-dropped.html' title='HDs prices have dropped'/><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-4213476024161017641.post-807200715657902204</id><published>2011-07-06T17:04:00.000-07:00</published><updated>2011-10-24T15:05:15.222-07:00</updated><title type='text'>VBA code for copying range of cells in excel</title><content type='html'>I helped someone make a copy of some cells in an excel spreadsheet using VBA. Thy were adding a recipe to another worksheet.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;'move to the AddRecipes tab&lt;br /&gt;Sheets("AddRecipes").Select&lt;br /&gt;'select the range of recipe ingredients and then copy the selection.&lt;br /&gt;Range("C11:C30").Select&lt;br /&gt;Selection.Copy&lt;br /&gt;'select the dessert sheet&lt;br /&gt;Sheets("DessertIngredients").Select&lt;br /&gt;'select the range and then paste there using the dynamic variables in the for loop&lt;br /&gt;Range(Cells(Row1 + 1, Column1), Cells(Row1 + 21, Column1)).Select&lt;br /&gt;ActiveSheet.Paste&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-807200715657902204?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/807200715657902204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=807200715657902204' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/807200715657902204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/807200715657902204'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/07/vba-code-for-copying-range-of-cells-in.html' title='VBA code for copying range of cells in excel'/><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-4213476024161017641.post-8142817428327086526</id><published>2011-07-01T16:41:00.000-07:00</published><updated>2011-10-24T15:05:15.227-07:00</updated><title type='text'>Making php control sessions</title><content type='html'>PHP can be insecure using session variables. One reason is because if you are on a shared host like Dreamhost or godaddy you have other people on your server and the default place to store session files with your session_id and session data is /tmp which anyone can read and use that information for anything they want. I just looked in the tmp folder on a shared host and there were 14000 session files from the last 2 days. That's not good at all. First thing you should do is move the place it is stored to a place in your home directory so only you can read them. &lt;br /&gt;Fix this with the following change to your php.ini file. Make sure to make this new folder writable too.&lt;br /&gt;&lt;code&gt;change this:&lt;br /&gt;session.save_path = "/tmp"&lt;br /&gt;to this:&lt;br /&gt;session.save_path = "/home/username/tmp"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Also change your default session name so anyone looking at your website be not recognize the session_id when they see it:&lt;br /&gt;&lt;code&gt;change this:&lt;br /&gt;session.name = PHPSESSID&lt;br /&gt;to something like this:&lt;br /&gt;session.name = fh4hd4kjddj5fhk2jdkjfh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I made a demo of how to make this work completely with MySQL using this code:&lt;br /&gt;&lt;a href="http://www.josephcrawford.com/php-articles/going-deep-inside-php-sessions/"&gt;http://www.josephcrawford.com/php-articles/going-deep-inside-php-sessions/&lt;/a&gt;&lt;br /&gt;There were some problems with his code so I am putting a version here that works including a demo page for running it.&lt;br /&gt;&lt;br /&gt;I made a session like this:&lt;br /&gt;&lt;code&gt;$_SESSION['name'] = 'mike';&lt;br /&gt;and it serializes it and sticks it in the file like this:&lt;br /&gt;s:16:"name|s:4:"mike";";&lt;br /&gt;We will be putting this in the database instead of the file system.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;first make a db.php file with this in it:&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;include "helper_mysql.php";&lt;br /&gt;if($_SERVER['HTTP_HOST'] == 'localhost') $con_server = "localhost";&lt;br /&gt;else {echo "not localhost";exit();}&lt;br /&gt;&lt;br /&gt;$con_username = "username";&lt;br /&gt;$con_password = "password";&lt;br /&gt;&lt;br /&gt;$con = @mysql_connect($con_server,$con_username,$con_password);&lt;br /&gt;if (!$con){&lt;br /&gt;  die('Could not connect to Database');&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Make the table for mysql with this SQL:&lt;br /&gt;&lt;code&gt;CREATE TABLE sessions &lt;br /&gt;(session_id INT PRIMARY KEY AUTO_INCREMENT&lt;br /&gt;, ses_id VARCHAR(100)&lt;br /&gt;, last_access INT&lt;br /&gt;, ses_start INT&lt;br /&gt;, ses_value VARCHAR(5000)&lt;br /&gt;);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Next is the mysql_helper function I have used with a few changes to add this variable to keep track of the number of results as a global variable: $number_results&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;$number_results = 0;&lt;br /&gt;function mysql_magic()&lt;br /&gt;{&lt;br /&gt;    global $con, $con_server, $con_username, $con_password, $con_database, $number_results;&lt;br /&gt; $number_results = 0;&lt;br /&gt;    $narg = func_num_args();&lt;br /&gt;    $args = func_get_args();&lt;br /&gt;    &lt;br /&gt;    if (!$con)&lt;br /&gt;    {&lt;br /&gt;        $con = mysql_connect( $con_server, $con_username, $con_password );&lt;br /&gt;        @mysql_select_db( $con_database, $con );&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    $req_sql = array_shift($args);&lt;br /&gt;    $req_args = $args;&lt;br /&gt;    &lt;br /&gt;    $req_query = mysql_bind($req_sql, $req_args);&lt;br /&gt;    $req_result = mysql_query($req_query);&lt;br /&gt;    &lt;br /&gt;    if (!$req_result)&lt;br /&gt;    {&lt;br /&gt;        trigger_error(mysql_error());&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    if (startsWith($req_sql, 'delete') || startsWith($req_sql, 'update') || startsWith($req_sql, 'truncate'))&lt;br /&gt;    {&lt;br /&gt;        return mysql_affected_rows(); // -1 || N&lt;br /&gt;    }&lt;br /&gt;    else if (startsWith($req_sql, 'insert'))&lt;br /&gt;    {&lt;br /&gt;        return mysql_insert_id(); // ID || 0 || FALSE&lt;br /&gt;    }&lt;br /&gt;    else if (endsWith($req_sql, 'limit 1'))&lt;br /&gt;    {&lt;br /&gt;  $number_results = mysql_num_rows($req_result);&lt;br /&gt;        return mysql_fetch_assoc($req_result); // [] || FALSE&lt;br /&gt;    }&lt;br /&gt;    else if (startsWith($req_sql, 'select count(*)'))&lt;br /&gt;    {&lt;br /&gt;        $line = mysql_fetch_row($req_result);&lt;br /&gt;        return $line[0]; // N&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;  $number_results = mysql_num_rows($req_result);&lt;br /&gt;        return mysql_fetch_all($req_result); // [][]&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function mysql_bind($sql, $values=array())&lt;br /&gt;{&lt;br /&gt;    foreach ($values as &amp;$value) $value = mysql_real_escape_string($value);&lt;br /&gt;    $sql = vsprintf( str_replace('?', "'%s'", $sql), $values); &lt;br /&gt;    return $sql;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function mysql_fetch_all($result)&lt;br /&gt;{&lt;br /&gt;    $resultArray = array();&lt;br /&gt;    while(($resultArray[] = mysql_fetch_assoc($result)) || array_pop($resultArray));&lt;br /&gt;    return $resultArray;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function startsWith($haystack,$needle,$case=false) {&lt;br /&gt;    if($case){return (strcmp(substr($haystack, 0, strlen($needle)),$needle)===0);}&lt;br /&gt;    return (strcasecmp(substr($haystack, 0, strlen($needle)),$needle)===0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function endsWith($haystack,$needle,$case=false) {&lt;br /&gt;    if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);}&lt;br /&gt;    return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Next is the session class which will be used to run opening, closing, reading, writing, destroying, and garbage collecting the session.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;class Session&lt;br /&gt;{&lt;br /&gt;    private $ses_id;&lt;br /&gt;    private $table;&lt;br /&gt;    private $ses_life;&lt;br /&gt;    private $ses_start;&lt;br /&gt;   &lt;br /&gt;    public function __construct($table = 'sessions')&lt;br /&gt;    {&lt;br /&gt;        $this-&amp;gt;_table = $table;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public function open($path, $name)&lt;br /&gt;    {&lt;br /&gt;  echo "opening&amp;lt;br /&amp;gt;";&lt;br /&gt;        $this-&amp;gt;_ses_life = ini_get('session.gc_maxlifetime');&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public function close()&lt;br /&gt;    {&lt;br /&gt;  echo "closing&amp;lt;br /&amp;gt;";&lt;br /&gt;        $this-&amp;gt;gc();&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public function read($ses_id)&lt;br /&gt;    {&lt;br /&gt;  global $number_results;&lt;br /&gt;  if(isset($this-&amp;gt;_ses_id)) $ses_id = $this-&amp;gt;_ses_id;&lt;br /&gt;  echo "reading&amp;lt;br /&amp;gt;";&lt;br /&gt;        $session_sql = "SELECT * FROM " . $this-&amp;gt;_table. " WHERE ses_id = '$ses_id' LIMIT 1";&lt;br /&gt;        $session_row = mysql_magic($session_sql);&lt;br /&gt;        if (!$session_row) return '';&lt;br /&gt;        if ($number_results&amp;gt; 0)&lt;br /&gt;        {&lt;br /&gt;            $ses_data = unserialize($session_row["ses_value"]);&lt;br /&gt;            $this-&amp;gt;_ses_start = $session_row['ses_start'];&lt;br /&gt;            return $ses_data;&lt;br /&gt;        } else {&lt;br /&gt;   if(!isset($this-&amp;gt;_ses_id)) $this-&amp;gt;_ses_id = $ses_id;&lt;br /&gt;            return '';&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public function write($ses_id, $data)&lt;br /&gt;    {&lt;br /&gt;  global $number_results;&lt;br /&gt;  if(!isset($this-&amp;gt;_ses_id)) $this-&amp;gt;_ses_id = $ses_id;&lt;br /&gt;  echo "writing&amp;lt;br /&amp;gt;";&lt;br /&gt;        if(!isset($this-&amp;gt;_ses_start)) $this-&amp;gt;_ses_start = time();&lt;br /&gt;        $session_sql = "SELECT * FROM " . $this-&amp;gt;_table. " WHERE ses_id = '" . $this-&amp;gt;_ses_id . "' LIMIT 1";&lt;br /&gt;        mysql_magic($session_sql);&lt;br /&gt;  &lt;br /&gt;        if( $number_results == 0 )&lt;br /&gt;        {&lt;br /&gt;            $session_sql = "INSERT INTO ".$this-&amp;gt;_table." (session_id, ses_id, last_access, ses_start, ses_value) VALUES (NULL, '".$this-&amp;gt;_ses_id."', ".time().", ".$this-&amp;gt;_ses_start.", '".serialize($data)."')";&lt;br /&gt;        } else {&lt;br /&gt;            $session_sql = "UPDATE ".$this-&amp;gt;_table." SET last_access=".time().", ses_value='".serialize($data)."' WHERE ses_id='".$this-&amp;gt;_ses_id."'";&lt;br /&gt;        }&lt;br /&gt;        $session_res = mysql_magic($session_sql);&lt;br /&gt;        if (!$session_res) return FALSE;&lt;br /&gt;        else return TRUE;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public function destroy($ses_id)&lt;br /&gt;    {&lt;br /&gt;  echo "deletinging&amp;lt;br /&amp;gt;";&lt;br /&gt;  //delete the session from the database&lt;br /&gt;  if(!isset($this-&amp;gt;_ses_id)) $this-&amp;gt;_ses_id = $ses_id;&lt;br /&gt;  $session_sql = "DELETE FROM sessions WHERE ses_id = '" . $this-&amp;gt;_ses_id . "'";&lt;br /&gt;  $session_res = mysql_magic($session_sql);&lt;br /&gt;        if (!$session_res) return FALSE;&lt;br /&gt;        else return TRUE;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public function gc()&lt;br /&gt;    {&lt;br /&gt;  echo "gcing&amp;lt;br /&amp;gt;";&lt;br /&gt;        $ses_life = time() - $this-&amp;gt;_ses_life;&lt;br /&gt;        $session_sql = "DELETE FROM " . $this-&amp;gt;_table. " WHERE last_access &amp;lt;$ses_life";&lt;br /&gt;        $session_res = mysql_magic($session_sql);&lt;br /&gt;        if (!$session_res) return FALSE;&lt;br /&gt;        else return TRUE;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now the following will use the code that we have shown you so far. It will do many different kinds of things with sessions so you can see how it works.&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;$database = "test";&lt;br /&gt;include "db.php";&lt;br /&gt;mysql_select_db($database, $con);&lt;br /&gt;require_once('session.php');&lt;br /&gt;&lt;br /&gt;define( 'UA_THRESHOLD', 25 );&lt;br /&gt;define( 'PW_MAX_CHECKS', 3 );&lt;br /&gt;require_once('session.php');&lt;br /&gt;&lt;br /&gt;$s = new Session();&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Change the save_handler to use&lt;br /&gt;* the class functions&lt;br /&gt;*/&lt;br /&gt;session_set_save_handler (&lt;br /&gt; array(&amp;$s, 'open'),&lt;br /&gt; array(&amp;$s, 'close'),&lt;br /&gt; array(&amp;$s, 'read'),&lt;br /&gt; array(&amp;$s, 'write'),&lt;br /&gt; array(&amp;$s, 'destroy'),&lt;br /&gt; array(&amp;$s, 'gc')&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;session_start();&lt;br /&gt;//uses the destore function to delete your session.&lt;br /&gt;&lt;br /&gt;echo "session_id: ".session_id()."&amp;lt;br /&amp;gt;";&lt;br /&gt;&lt;br /&gt;//how do you change php's current session_id to the custom string like below.&lt;br /&gt;//changing the session_id but it only changes it temporarily for this page and in the database. &lt;br /&gt;//If you echo session_id() again after refreshing the page you will find that the session_id is put back to the randomized session_id.&lt;br /&gt;//you should make the session_id a psudo random id like: sess_id_, random 26 character string, IP address, timestamp in seconds, unique_id&lt;br /&gt;//it would look like this:  sess_id_4e0e4d31ba4981223439051270011309560113165&lt;br /&gt;&lt;br /&gt;$new_session_id = "sess_id_".str_replace(".","",uniqid("",1).$_SERVER['REMOTE_ADDR']).time()."165";&lt;br /&gt;//this will show something like this:&lt;br /&gt;//sess_id_4e0e4d31ba4981223439051270011309560113165&lt;br /&gt;//the 165 at the end would be incremented by 1 each time a session is made so its harder to duplicate&lt;br /&gt;//only do this when you are loging in or if you want to reset the session to be different every time you go to another page or refresht he current page. You will have to test this to see what works best for you. The more often people get new sessions the less likly a hacker is able to get the session and use it before it is invalidated. It depends on the importance of your user data.&lt;br /&gt;session_id($new_session_id);&lt;br /&gt;&lt;br /&gt;echo "here is the new session_id: ".session_id()."&amp;lt;br /&amp;gt;";&lt;br /&gt;echo "&amp;lt;br /&amp;gt;session values: &amp;lt;pre&amp;gt;";&lt;br /&gt;print_r($_SESSION);&lt;br /&gt;echo "&amp;lt;/pre&amp;gt;";&lt;br /&gt;&lt;br /&gt;$_SESSION['message'] = "setting session vars in the database: yay!!!";&lt;br /&gt;$_SESSION['number'] = 1.3432;&lt;br /&gt;$_SESSION['user'] = 'stokescomp';&lt;br /&gt;$_SESSION['unset_me'] = 'I will be unset';&lt;br /&gt;$_SESSION['list_array'] = array(1,4,6,8,'help');&lt;br /&gt;&lt;br /&gt;//this will call the write function and remove that value from the session&lt;br /&gt;unset($_SESSION['unset_me']);&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;br /&amp;gt;session values: &amp;lt;pre&amp;gt;";&lt;br /&gt;print_r($_SESSION);&lt;br /&gt;echo "&amp;lt;/pre&amp;gt;";&lt;br /&gt;&lt;br /&gt;//this removes the session from the database by calling the destory method so they will have to relogin&lt;br /&gt;//session_destroy();&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That's it and this will make working with sessions much more secure.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8142817428327086526?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8142817428327086526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8142817428327086526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8142817428327086526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8142817428327086526'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/07/making-php-control-sessions.html' title='Making php control sessions'/><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-4213476024161017641.post-4069415263872560860</id><published>2011-07-01T15:54:00.000-07:00</published><updated>2011-10-24T15:09:48.779-07:00</updated><title type='text'>Making php control sessions</title><content type='html'>PHP can be insecure using session variables. One reason is because if you are on a shared host like Dreamhost or godaddy you have other people on your server and the default place to store session files with your session_id and session data is /tmp which anyone can read and use that information for anything they want. I just looked in the tmp folder on a shared host and there were 14000 session files from the last 2 days. That's not good at all. First thing you should do is move the place it is stored to a place in your home directory so only you can read them. &lt;br /&gt;Fix this with the following change to your php.ini file. Make sure to make this new folder writable too.&lt;br /&gt;&lt;code&gt;change this:&lt;br /&gt;session.save_path = "/tmp"&lt;br /&gt;to this:&lt;br /&gt;session.save_path = "/home/username/tmp"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Also change your default session name so anyone looking at your website be not recognize the session_id when they see it:&lt;br /&gt;&lt;code&gt;change this:&lt;br /&gt;session.name = PHPSESSID&lt;br /&gt;to something like this:&lt;br /&gt;session.name = fh4hd4kjddj5fhk2jdkjfh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I made a demo of how to make this work completely with MySQL using this code:&lt;br /&gt;&lt;a href="http://www.josephcrawford.com/php-articles/going-deep-inside-php-sessions/"&gt;http://www.josephcrawford.com/php-articles/going-deep-inside-php-sessions/&lt;/a&gt;&lt;br /&gt;There were some problems with his code so I am putting a version here that works including a demo page for running it.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4069415263872560860?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4069415263872560860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4069415263872560860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4069415263872560860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4069415263872560860'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/07/making-php-control-sessions_01.html' title='Making php control sessions'/><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-4213476024161017641.post-1578743748189588865</id><published>2011-06-30T00:54:00.000-07:00</published><updated>2011-10-24T15:05:15.123-07:00</updated><title type='text'>Seesions in the database</title><content type='html'>I found a helpful article showing how to use a class.&lt;br /&gt;&lt;a href="http://www.josephcrawford.com/php-articles/going-deep-inside-php-sessions/"&gt;http://www.josephcrawford.com/php-articles/going-deep-inside-php-sessions/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It has problems and I spent time fixing all the problems and will post the code when its ready.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1578743748189588865?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1578743748189588865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1578743748189588865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1578743748189588865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1578743748189588865'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/06/seesions-in-database.html' title='Seesions in the database'/><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-4213476024161017641.post-3235276234203857752</id><published>2011-06-20T18:54:00.000-07:00</published><updated>2011-10-24T15:05:15.142-07:00</updated><title type='text'>How to make and use MySQL stored functions using PHP</title><content type='html'>How to make a useful function in mysql&lt;br /&gt;I am going to show how to make MySQL functions that insert data into a people table in MySQL. I will also show how to make a function that returns a value of the average age of the people in the table.&lt;br /&gt;Log into MySQL with the following line:&lt;br /&gt;&lt;code&gt;mysql -u Username -p&lt;/code&gt;&lt;br /&gt;Then open the database you will use like this:&lt;br /&gt;&lt;code&gt;use test&lt;/code&gt;&lt;br /&gt;First create a table called people and run this in MySQL:&lt;br /&gt;&lt;code&gt;CREATE table people(id int(10) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT&lt;br /&gt;,name VARCHAR(50)&lt;br /&gt;,age INT&lt;br /&gt;);&lt;/code&gt;&lt;br /&gt;You can insert a user in mysql or in PHP. It will use the same SQL code either way.&lt;br /&gt;You can add people with their ages to a list in 2 different ways. You can either write static PHP code and pass the name and age into the SQL code via varables and execute it or you can write a MySQL function and pass it the name and age values to insert into the table via parameters.&lt;br /&gt;Here is how you would insert using the last blogs method using the mysql_magic function:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$age = 15; &lt;br /&gt;$name = 'Mike';&lt;br /&gt;$insert = mysql_magic("INSERT INTO people VALUES(NULL,?,?)", $name, $age);&lt;br /&gt;echo "insert".$insert;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now we will make a MySQL function that will do our inserts for us.&lt;br /&gt;type this in the MySQL prompt:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;DROP FUNCTION IF EXISTS insert_people;&lt;br /&gt;DELIMITER $&lt;br /&gt;CREATE FUNCTION insert_people(name VARCHAR(50), age INT)&lt;br /&gt;  RETURNS INT&lt;br /&gt;   BEGIN&lt;br /&gt;    INSERT INTO people VALUES(NULL, name, age);&lt;br /&gt;    RETURN 1;&lt;br /&gt;END$ &lt;br /&gt;DELIMITER ;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;   &lt;br /&gt;Here is how you would execute the insert statement from a PHP script:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$name = "Bill";&lt;br /&gt;$age = 20;&lt;br /&gt;$insert = mysql_magic('SELECT insert_people(?,?) AS the_insert', $name, $age);&lt;br /&gt;echo $insert[0]['the_insert']."&lt;br /&gt;";&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;If the value echoed is a 1 then it worked.&lt;br /&gt;Now lets make a function that will average the ages of the people:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;DROP FUNCTION IF EXISTS average_age;&lt;br /&gt;DELIMITER $&lt;br /&gt;CREATE FUNCTION average_age()&lt;br /&gt;RETURNS INT&lt;br /&gt;BEGIN&lt;br /&gt;DECLARE lv_avg_age INT;&lt;br /&gt; SELECT AVG(age) INTO lv_avg_age FROM people;&lt;br /&gt; RETURN lv_avg_age;&lt;br /&gt;END$&lt;br /&gt;DELIMITER ;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;   &lt;br /&gt;Now get the average from php:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$average = mysql_magic('SELECT average_age() AS the_average');&lt;br /&gt;echo "The average age is: ".$average[0]['the_average'];&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;If there is something you would like to see here let me know and I will add it.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-3235276234203857752?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/3235276234203857752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=3235276234203857752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3235276234203857752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3235276234203857752'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/06/how-to-make-and-use-mysql-stored.html' title='How to make and use MySQL stored functions using PHP'/><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-4213476024161017641.post-4220572403402782768</id><published>2011-06-13T09:31:00.001-07:00</published><updated>2011-10-24T15:05:15.180-07:00</updated><title type='text'>PHP helper function for making SQL queries easy</title><content type='html'>Go get this function called mysql_magic at:&lt;br /&gt;&lt;a href="http://www.php.net/manual/en/ref.mysql.php#100626"&gt;http://www.php.net/manual/en/ref.mysql.php#100626&lt;/a&gt;&lt;br /&gt;This function listed in PHP's manual looks very promising for making query's easy to use but just passing the query plus the parameters to a function that uses php's mysql_bind function plus the function returns a resultset if its a select and will also work for a delete or update statement which exits the function sooner than normal.&lt;br /&gt;to use the function use these:&lt;br /&gt;&lt;code&gt;$nb_affected = mysql_magic('delete from users');&lt;br /&gt;$nb = mysql_magic('select count(*) from users');&lt;br /&gt;$one_row = mysql_magic('select * from users limit 1');&lt;br /&gt;$all_rows = mysql_magic('select * from users where name = ?', 'John');&lt;br /&gt;$id = mysql_magic('insert into users(name,rank) values(?,?)', 'Vincent', 3);&lt;br /&gt;http://www.php.net/manual/en/ref.mysql.php#100626&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To make the function work with the example below make this change to the function.&lt;br /&gt;&lt;code&gt;global $con, $con_server, $con_username, $con_password, $con_database;&lt;br /&gt;&lt;br /&gt;if (!$con)&lt;br /&gt;{&lt;br /&gt;    $con = mysql_connect( $con_server, $con_username, $con_password );&lt;br /&gt;    @mysql_select_db( $con_database, $con );&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;I will show you how to use it next. Make a table called data in mysql.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CREATE TABLE data (age INT,name VARCHAR(50));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Next insert a couple rows.&lt;br /&gt;&lt;code&gt;INSERT INTO data VALUES(20,'Bill');&lt;br /&gt;INSERT INTO data VALUES(18,'Mark');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I put the function mysql_magic in a file called mysql_helper.php into the include path, but you can put it in the same folder as your webpage that will be doing mysql queries. This is all I did to make it work:&lt;br /&gt;&lt;code&gt;include "helper_mysql.php";&lt;br /&gt;$con_server = "localhost";&lt;br /&gt;$con_username = "username";&lt;br /&gt;$con_password = "password";&lt;br /&gt;$con = @mysql_connect($con_server,$con_username,$con_password);&lt;br /&gt;if (!$con){&lt;br /&gt;  die('Could not connect to Database');&lt;br /&gt;}&lt;br /&gt;$con_database = "test";&lt;br /&gt;mysql_select_db($con_database, $con);&lt;br /&gt;$all_rows = mysql_magic('select * from data');&lt;br /&gt;echo "&amp;lt;br /&gt;&amp;lt;pre&amp;gt;".print_r($all_rows,true)."&amp;lt;/pre&amp;gt;";&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now you will see the result will show all the rows from the table:&lt;br /&gt;&lt;code&gt;Array&lt;br /&gt;(&lt;br /&gt;    [0] =&gt; Array&lt;br /&gt;        (&lt;br /&gt;            [age] =&gt; 20&lt;br /&gt;            [name] =&gt; Bill&lt;br /&gt;        )&lt;br /&gt;&lt;br /&gt;    [1] =&gt; Array&lt;br /&gt;        (&lt;br /&gt;            [age] =&gt; 18&lt;br /&gt;            [name] =&gt; Mark&lt;br /&gt;        )&lt;br /&gt;)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Then you can use the following to insert more data into the table.&lt;br /&gt;&lt;code&gt;$insert = mysql_magic("INSERT INTO data VALUES(15,'Ron')");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Now for a more useful example. Use ?'s to signify a parameter to bind variables to. &lt;br /&gt;&lt;code&gt;$age = 25;&lt;br /&gt;$name = "Sally";&lt;br /&gt;$insert = mysql_magic("INSERT INTO data VALUES(?,?)",$age, $name);&lt;br /&gt;//after inserting use the following to see what the table looks like now.&lt;br /&gt;echo "&amp;lt;br /&gt;&amp;lt;pre&amp;gt;".print_r($all_rows,true)."&amp;lt;/pre&amp;gt;";&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;In the next post I will show how to make a stored procedure or function in MySQL and call it using the magic_mysql function when you want to insert data into the data table.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4220572403402782768?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4220572403402782768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4220572403402782768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4220572403402782768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4220572403402782768'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/06/php-helper-function-for-making-sql.html' title='PHP helper function for making SQL queries easy'/><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-4213476024161017641.post-1196547976508439747</id><published>2011-06-07T20:07:00.000-07:00</published><updated>2011-10-24T15:05:15.110-07:00</updated><title type='text'>How to get the current time in a timezone of choice</title><content type='html'>type this in a php page to get the time where you live. The -6 means go to 6 hours before greenwhich time.&lt;br /&gt;&lt;code&gt;$tz = -6;&lt;br /&gt;$date = gmdate('m/d/Y', time()+($tz*3600));&lt;br /&gt;echo $date;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1196547976508439747?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1196547976508439747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1196547976508439747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1196547976508439747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1196547976508439747'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/06/how-to-get-current-time-in-timezone-of.html' title='How to get the current time in a timezone of choice'/><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-4213476024161017641.post-1536816501397162835</id><published>2011-06-07T15:09:00.000-07:00</published><updated>2011-10-24T15:05:15.119-07:00</updated><title type='text'>Running php from the commandline</title><content type='html'>if you want to run a short snibit of code from the command line use this syntax:&lt;br /&gt;&lt;code&gt;php -r "echo 'test';"&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1536816501397162835?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1536816501397162835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1536816501397162835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1536816501397162835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1536816501397162835'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/06/running-php-from-commandline.html' title='Running php from the commandline'/><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-4213476024161017641.post-8491903177961362613</id><published>2011-05-05T21:11:00.000-07:00</published><updated>2011-10-24T15:05:15.232-07:00</updated><title type='text'>a nice list of firebug extensions</title><content type='html'>&lt;a href="http://getfirebug.com/wiki/index.php/Firebug_Extensions"&gt;http://getfirebug.com/wiki/index.php/Firebug_Extensions&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I love firebug and here are all the extensions for it. One thats nice is Yslow that will tell you how you can make your site's performance better.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8491903177961362613?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8491903177961362613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8491903177961362613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8491903177961362613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8491903177961362613'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/05/nice-list-of-firebug-extensions.html' title='a nice list of firebug extensions'/><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-4213476024161017641.post-2761942080543657806</id><published>2011-05-05T21:05:00.000-07:00</published><updated>2011-10-24T15:05:15.132-07:00</updated><title type='text'>making your own selectors in jquery</title><content type='html'>It was really cool when I found out you can make your own jquery selectors. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/"&gt;http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;for instance you can do this&lt;br /&gt;$.extend($.expr[':'],{&lt;br /&gt;    inline: function(a) {&lt;br /&gt;        return $(a).css('display') === 'inline';&lt;br /&gt;    }&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;then use it like this&lt;br /&gt;$(':inline'); // Selects ALL inline elements&lt;br /&gt;$('a:inline'); // Selects ALL inline anchors&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;the article also teaches how to store data in elements and ways you can get at that data with regular expressions. This is good because sometimes I store data in made up parameters in the dom but this is not valid html but if you store key value pairs with javascript on certain elements you can store stuff in the webpage and get it using jquery selectors or select certain items with a dom  flag set using the data method of jquery.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2761942080543657806?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2761942080543657806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2761942080543657806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2761942080543657806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2761942080543657806'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/05/making-your-own-selectors-in-jquery.html' title='making your own selectors in jquery'/><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-4213476024161017641.post-4159729314294075925</id><published>2011-05-02T20:44:00.000-07:00</published><updated>2011-10-24T15:05:15.170-07:00</updated><title type='text'>Javascript escaping in an onclick handler</title><content type='html'>I was having trouble escaping quotes that are in an onclick handler.&lt;br /&gt;The problem is that the onclick event is surounded by double quotes so there can not be any double quotes inside. I have javascript code in there that has single quotes and I escape other single quotes like this \' but double quotes can't be escaped. I found that a good way of allowing double quotes inside is to contert them to javascript escape characters such as \042 or \x22 or \u0022 which are all interprited by javascript as double quotes. If you use the &amp;#034; then you find out that the browser converts them to their double quote equivalents before the javascript engine can see them and then it causes javascript errors because it finds a double quote inside the onclick events double quotes and not the html entities. &lt;br /&gt;Here is a list of other possibilites.&lt;br /&gt;&lt;a href="http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/"&gt;http://stackoverflow.com/questions/97578/how-do-i-escape-a-string-inside-javascript-inside-an-onclick-handler&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;here is the php functions that will take care of both the above javascript escaping and html escaping as well&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;function esc_js($value){&lt;br /&gt;  //use this in onclick handlers where all quotes need to be seen as quotes by javascript&lt;br /&gt;  //here is the double quote equivilent \x22&lt;br /&gt; //here is the single quote equivilent \x27&lt;br /&gt; $value = str_replace("\"","\\x22",$value);&lt;br /&gt; $value = str_replace("'","\\x27",$value);&lt;br /&gt; return $value;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function esc_html($value){&lt;br /&gt;  //this encodes both single and double quotes so they appear in textbox values correctly&lt;br /&gt; $value = htmlentities($value,ENT_QUOTES);&lt;br /&gt; return $value;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;$val1="test's test";&lt;br /&gt;$val2='test"s test';&lt;br /&gt;$val3="test\"s test's";&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="" onclick="alert('&amp;lt;?php echo esc_js($val1);?&amp;gt;');return false"&amp;gt;test 1&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;a href="" onclick="alert('&amp;lt;?php echo esc_js($val2);?&amp;gt;');return false"&amp;gt;test 2&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;a href="" onclick="alert('&amp;lt;?php echo esc_js($val3);?&amp;gt;');return false"&amp;gt;test 3&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4159729314294075925?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4159729314294075925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4159729314294075925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4159729314294075925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4159729314294075925'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/05/javascript-escaping-in-onclick-handler.html' title='Javascript escaping in an onclick handler'/><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-4213476024161017641.post-2612279851185910816</id><published>2011-04-21T09:16:00.001-07:00</published><updated>2011-10-24T15:05:15.127-07:00</updated><title type='text'>session tracking for users</title><content type='html'>I want to make it hard for a hacker to get my users information. I will use this method I found on the page I mentioned yesterday.&lt;br /&gt;&lt;a href="http://phpsec.org/projects/guide/4.html"&gt;http://phpsec.org/projects/guide/4.html&lt;/a&gt;&lt;br /&gt;This page also uses this great article about securing sessions:&lt;br /&gt;http://shiflett.org/articles/the-truth-about-sessions&lt;br /&gt;&lt;br /&gt;First I will check to see if the user identifier is stored in the session. If it is then they are logged in since I will only set this variable after they successfully enter their user name and password. When they login successfully I store the IP address and their browser agent and a secret string of text that can be the same for all users or I could use a combination of username and random characters. This second identifier will be passed in the URL so the attacker would need more than just the sessionid to impersonate them. Is this secure?&lt;br /&gt;Then a hacker will have to steal the session_id and impersonate them and have the same IP address and browser agent string converted to a sha1 fingerprint and store it in the url. So this would be an example:&lt;br /&gt;sha1("Mozilla/5.0 GeckoSECRET_PHRASE78.0.23.128")&lt;br /&gt;this is: 3fb195ec6fe52981918b9065b8362a0efed8858f&lt;br /&gt;then when you are logged in you would be at: http://example.com/admin.php?secret_fingerprint=3fb195ec6fe52981918b9065b8362a0efed8858f&lt;br /&gt;This script can be included in any page. I call it validate_login.php&lt;br /&gt;&lt;code&gt;if(!isset($_SESSION)) session_start();&lt;br /&gt;//starts the database connection&lt;br /&gt;require_once("includes/db.php");&lt;br /&gt;//stores the log function&lt;br /&gt;require_once("includes/functions.php");&lt;br /&gt;$phpself = $_SERVER['PHP_SELF'];&lt;br /&gt;//the user_identifier will be a 13 character random string of text like DA3591BAC915 that is stored for each user to identify them with something besides the primary key&lt;br /&gt;if(isset($_SESSION['USER_IDENTIFIER'])){&lt;br /&gt;    if ($_GET['secret_fingerprint'] != sha1($_SERVER['HTTP_USER_AGENT'] . "SECRET_PHRASE" . $_SERVER['REMOTE_ADDR'])){&lt;br /&gt;        /* Make them login again */&lt;br /&gt;        include('login.php');&lt;br /&gt;        exit();&lt;br /&gt;    }&lt;br /&gt;} else if(isset($_POST['submitlogin'])){&lt;br /&gt;    $user = mysql_real_escape_string($_POST['user']);&lt;br /&gt;    $password = sha1(mysql_real_escape_string($_POST['password']));&lt;br /&gt;    &lt;br /&gt;    //authenticate user&lt;br /&gt;    $sql = "SELECT user_identifier FROM user WHERE user = '$user' AND password = '$password'";&lt;br /&gt;    &lt;br /&gt;    $result = @mysql_query($sql);&lt;br /&gt;    if(!$result) {echo "There was an error";log(mysql_error($con)." sql: $sql ");exit();}&lt;br /&gt;    if(mysql_num_rows($result) == 0){echo "You need to user the right user or password";include('login.php'); exit();}&lt;br /&gt;    $row = @mysql_fetch_array($result);&lt;br /&gt;    $_SESSION['USER_IDENTIFIER'] = $row[0];&lt;br /&gt; &lt;br /&gt;    //only pass this in the url so it has to exist in a GET parameter for the user to be allowed to stay logged in&lt;br /&gt;    $secret_fingerprint = sha1($_SERVER['HTTP_USER_AGENT'] . "SECRET_PHRASE" . $_SERVER['REMOTE_ADDR']);&lt;br /&gt;    &lt;br /&gt;    //send them to the page that requested to login&lt;br /&gt;    header('Location: ' . $_SERVER['PHP_SELF'] . '?secret_fingerprint='.$secret_fingerprint);&lt;br /&gt;    exit();&lt;br /&gt;} else {&lt;br /&gt;    //they aren't logged in yet : show the login form here&lt;br /&gt;    include('login.php');&lt;br /&gt;    exit();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Here is an example page that requires the use of above authentication plus has a logout link and a link to another page. When we go to another page we have to include the secret finger print that has their IP address and browser hashed with an sha1 hash or they will not be authenticated and will have to log in again.&lt;br /&gt;This page is admin.php&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;include('validate_login.php');&lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;You are logged in now&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;a href="logout.php?logout=1&amp;amp;to=&amp;lt;?php echo $phpself;?&amp;gt;"&amp;gt;Log off&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;Go to another secure page on the &amp;lt;a href="anotherpage?secret_fingerprint=&amp;lt;?php $_GET['secret_fingerprint'];?&amp;gt;"&amp;gt;site&amp;lt;/a&amp;gt;.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This also has a logout link that logs the user out. Here is a good logout script:&lt;br /&gt;logout.php&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;if(!isset($_SESSION)) session_start();&lt;br /&gt;if(isset($_GET['logout'])){&lt;br /&gt; session_destroy();&lt;br /&gt; unset($_SESSION);&lt;br /&gt; $to = $_GET['to'];&lt;br /&gt; &lt;br /&gt; //send them to the page they were being sent to&lt;br /&gt; header('Location: http://'.$_SERVER['SERVER_NAME'].':/'.$to);&lt;br /&gt; exit();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Here is the login script login.php:&lt;br /&gt;&lt;code&gt;&amp;lt;form action="&amp;lt;?php echo $phpself;?&amp;gt;" method="post"&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Email&amp;lt;br /&amp;gt;&amp;lt;input type="text" value="&amp;lt;?php if(isset($_POST['user'])) echo $_POST['user'];?&amp;gt;" name="user"&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Password&amp;lt;br /&amp;gt;&amp;lt;input type="password" name="password"&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;&amp;lt;input type="checkbox" name="rememberme"&amp;gt; Remember Me&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;input type="submit" value="Log In" name="submitlogin"&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;a href="#"&amp;gt;Lost your password?&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you need a registration script just leave a comment.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2612279851185910816?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2612279851185910816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2612279851185910816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2612279851185910816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2612279851185910816'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/04/session-tracking-for-users.html' title='session tracking for users'/><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-4213476024161017641.post-3430061194582434490</id><published>2011-04-20T11:13:00.000-07:00</published><updated>2011-10-24T15:05:15.153-07:00</updated><title type='text'>Jquery selectors are cool</title><content type='html'>&lt;a href="http://www.codylindley.com/jqueryselectors/"&gt;http://www.codylindley.com/jqueryselectors/&lt;/a&gt;&lt;br /&gt;These are very useful for web programming with javascript Jquery.&lt;br /&gt;You can use these kinds of Jquery selectors to loop through all the elements that match many different kinds of selectors such as class, id, or just first or last or nth or parent or child.&lt;br /&gt;So you can actually do things not just to children but to parents of an element too.&lt;br /&gt;&lt;br /&gt;I have used this kind of selector to get the id or other information from the first td in each row of a table. And to change the background color of the rows as you pass through them too.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-3430061194582434490?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/3430061194582434490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=3430061194582434490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3430061194582434490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3430061194582434490'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/04/jquery-selectors-are-cool.html' title='Jquery selectors are cool'/><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-4213476024161017641.post-6449296179823232387</id><published>2011-04-20T10:58:00.000-07:00</published><updated>2011-06-14T19:11:50.715-07:00</updated><title type='text'>PHP session variables securit</title><content type='html'>PHP stores information in sessions to keep track of what user someone has logged in as. The session variables has a session_id that can be taken through sniffing or man in the middle attacks. After they take your session_id they can apply it to their own computer and then they will be you until you log out and your session is destroyed. I would like to test these theries out to see how to make it impossible for this to work. I can track the user in one browser and not let them use that session_id in another browser. tracking IP addresses don't work because AOL changes your IP address every time you go to a new page.&lt;br /&gt;&lt;br /&gt;Here are some links I am studying right now.&lt;br /&gt;&lt;a href="http://blogs.sitepoint.com/notes-on-php-session-security/"&gt;http://blogs.sitepoint.com/notes-on-php-session-security/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://phpsec.org/projects/guide/4.html"&gt;http://phpsec.org/projects/guide/4.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.sitepoint.com/php-security-blunders/"&gt;http://blogs.sitepoint.com/php-security-blunders/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think eventually I will want to go to a more secure method and not store anything other than a sessionid that is stored in the database that stores the other information  that would normally be stored in a session variable like username, full name, if they are an employee and what page they are on or other information.&lt;br /&gt;Read this page for information on how to use sessions in a database:&lt;br /&gt;&lt;a href="http://www.oracle.com/technetwork/articles/mclaughlin-phpid1-091467.html"&gt;http://www.oracle.com/technetwork/articles/mclaughlin-phpid1-091467.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-6449296179823232387?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/6449296179823232387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=6449296179823232387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6449296179823232387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6449296179823232387'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/04/php-session-variables-securit.html' title='PHP session variables securit'/><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-4213476024161017641.post-5700474376486622158</id><published>2011-04-12T14:46:00.000-07:00</published><updated>2011-06-14T19:14:08.304-07:00</updated><title type='text'>A fun little MySQL puzzle</title><content type='html'>I was looking for a way to convert a column in the database that has things like this: M1.1 and M1.2 all the way up to M1.15 into something like this:&lt;br /&gt;M1.01 and M1.02 all the way up to M1.09 and M1.1 (for 10) and M1.15 for any above 10.&lt;br /&gt;&lt;br /&gt;I used mysql like this&lt;br /&gt;&lt;code&gt;SELECT item as `the item to fix`,&lt;br /&gt;SUBSTRING_INDEX(item,'.',1) as `the part to the left of the period`,&lt;br /&gt;SUBSTRING_INDEX(item,'.',-1) as `the part to the right of the period`,&lt;br /&gt;if(SUBSTRING_INDEX(item,'.',-1) &lt; 10,&lt;br /&gt; CONCAT(SUBSTRING_INDEX(item,'.',1),'.','0',SUBSTRING_INDEX(item,'.',-1))&lt;br /&gt;,&lt;br /&gt; if(SUBSTRING_INDEX(item,'.',-1) = 10,&lt;br /&gt;  CONCAT(SUBSTRING_INDEX(item,'.',1),'.',1)&lt;br /&gt; ,&lt;br /&gt;  item&lt;br /&gt; )&lt;br /&gt;) as `the fixed value`&lt;br /&gt;FROM `data` where item like '%.%'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;SUBSTRING_INDEX gets the text to the left of the first occurrence of the '.' if you use a 1 for the 3rd parameter and it gets the text to the right of the last occurrence of the '.' if you set the 3rd parameter to a -1.&lt;br /&gt;Cool little puzzle that took 10 minutes to solve.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-5700474376486622158?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/5700474376486622158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=5700474376486622158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5700474376486622158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5700474376486622158'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/04/fun-little-mysql-puzzle.html' title='A fun little MySQL puzzle'/><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-4213476024161017641.post-5848115490048946176</id><published>2011-04-12T09:51:00.000-07:00</published><updated>2011-06-14T19:13:51.305-07:00</updated><title type='text'>Getting web request with GET request in Excel</title><content type='html'>I found a cool easy way to do a GET request to any website and use any parameters needed.&lt;br /&gt;One method to get code from a webpage and use it is here:&lt;br /&gt;&lt;a href="http://scriptorium.serve-it.nl/view.php?sid=40"&gt;http://scriptorium.serve-it.nl/view.php?sid=40&lt;/a&gt;&lt;br /&gt;and another I use is here:&lt;br /&gt;&lt;code&gt;Function testHttpGet()&lt;br /&gt;    Dim oHttp As Object&lt;br /&gt;    Set oHttp = CreateObject("Microsoft.XMLHTTP")&lt;br /&gt;    MyUrl = "http://10.0.21.130/test.php?name=mikeqq"&lt;br /&gt;    oHttp.Open "GET", MyUrl, False&lt;br /&gt;    oHttp.send&lt;br /&gt;    'MsgBox oHttp.Status&lt;br /&gt;    If oHttpPost.Status &lt; 300 Then&lt;br /&gt;    SomeVar = oHttpPost.responseText&lt;br /&gt;    MsgBox SomeVar&lt;br /&gt;    End If&lt;br /&gt;End Function&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Just put this code in a module in Excel and then call it from in the spreadsheet somewhere. So now I can have excel give and get commands from a PHP script and could even act like a cron job by executing every once in a while!&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-5848115490048946176?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/5848115490048946176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=5848115490048946176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5848115490048946176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5848115490048946176'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/04/getting-web-request-with-get-request-in.html' title='Getting web request with GET request in Excel'/><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-4213476024161017641.post-1386928880872025600</id><published>2011-04-12T06:20:00.000-07:00</published><updated>2011-06-14T19:12:18.073-07:00</updated><title type='text'>Mysql Master - Slave replication server</title><content type='html'>I put together an Ubuntu 10.10 server with MySQL on it. I did it in VmWare Player and made it so what ever inserts I put in the master computer database gets put into the slave instantly. I'm going to try doing lots of inserts to see how long till it catches up. I can use PHP to programatically decide what SQL queries go to which database.&lt;br /&gt;A great article I found this in is here&lt;br /&gt;&lt;a href="http://www.oracle.com/technetwork/articles/dsl/white-php-part2-355138.html"&gt;http://www.oracle.com/technetwork/articles/dsl/white-php-part2-355138.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1386928880872025600?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1386928880872025600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1386928880872025600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1386928880872025600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1386928880872025600'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/04/mysql-master-slave-replication-server.html' title='Mysql Master - Slave replication server'/><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-4213476024161017641.post-1858839304299245232</id><published>2011-04-08T22:50:00.000-07:00</published><updated>2011-06-14T19:13:30.477-07:00</updated><title type='text'>Dynamic caching of webpages</title><content type='html'>I read an interesting article on Oracles site on how to &lt;a href="http://www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html"&gt;scale PHP pages for high traffic to scale web applicatons&lt;/a&gt;&lt;br /&gt;I can see how this would be powerful. I have made php pages before that are very complex and if there were thousands of people coming every minute it would kill the sever unless it only had to load a certain page once every hour or so. Then if there are any updates they will only be updated and seen by everyone visiting once an hour instead of the instant they appear.&lt;br /&gt;&lt;br /&gt;instead of having to run php all the time you just run it once an hour and write the content to a textfile with the name of the file being the url of the file plus any variables or get parameters that make the page unique or look different. All requests for the next hour will just read a text file with the webpage in it. &lt;br /&gt;I will try an example in php and put it here.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;$timeout = 60; // One Hour is 3600&lt;br /&gt;$file = 'C:/Users/mike/Desktop/webhome/cachingtest/tempcache/'.sha1($_SERVER['REQUEST_URI']);&lt;br /&gt;if (file_exists($file) &amp;&amp; (filemtime($file) + $timeout) &amp;gt; time()){&lt;br /&gt; //only show the cached copy of the page&lt;br /&gt;    readfile($file);&lt;br /&gt;    exit();&lt;br /&gt;} else {&lt;br /&gt;    // Setup saving and let the page execute:&lt;br /&gt;    ob_start();&lt;br /&gt;    register_shutdown_function(function (){&lt;br /&gt;  Global $file;&lt;br /&gt;        $content = ob_get_flush();&lt;br /&gt;        file_put_contents($file, $content);&lt;br /&gt;    });&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;h2&amp;gt;Testing saving the current page from cache and only loading a fresh copy after a certain time limit has passed.&amp;lt;/h2&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1858839304299245232?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1858839304299245232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1858839304299245232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1858839304299245232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1858839304299245232'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/04/dynamic-caching-of-webpages.html' title='Dynamic caching of webpages'/><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-4213476024161017641.post-8482986091538645030</id><published>2011-03-15T21:41:00.000-07:00</published><updated>2011-06-14T19:13:07.695-07:00</updated><title type='text'>javascript attributes</title><content type='html'>I was trying to find a way to make an image grow big and then small each time you click on it. I used these functions&lt;br /&gt;&lt;br /&gt;&lt;code&gt;function open_enlarge(plan){&lt;br /&gt; $('#'+plan).addClass('largemap');&lt;br /&gt; $('#'+plan).removeClass('smallmap');&lt;br /&gt; document.getElementById(plan).setAttribute('onclick', 'close_enlarge("'+plan+'");');&lt;br /&gt; $('#addjob_floorplan').attr('onclick', 'close_enlarge("addjob_floorplan")');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function close_enlarge(plan){&lt;br /&gt; $('#'+plan).removeClass('largemap');&lt;br /&gt; $('#'+plan).addClass('smallmap');&lt;br /&gt; document.getElementById(plan).setAttribute('onclick', 'open_enlarge("'+plan+'");');&lt;br /&gt; $('#addjob_floorplan').attr('onclick', 'open_enlarge("addjob_floorplan")');&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Then it didn't work in internet explorer so I decided to go with a simpler way with jQuery with only 1 function call toggling 2 classes back and forth instead of having to change the onclick event and having to make it different for Internet explorer 7:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;function open_enlarge(plan){&lt;br /&gt; $('#'+plan).toggleClass('largemap','smallmap')&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8482986091538645030?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8482986091538645030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8482986091538645030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8482986091538645030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8482986091538645030'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/03/javascript-attributes.html' title='javascript attributes'/><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-4213476024161017641.post-1020350179534652227</id><published>2011-03-15T11:21:00.000-07:00</published><updated>2011-03-15T11:24:46.169-07:00</updated><title type='text'>Test case Idea for php, javascript and mysql</title><content type='html'>I want to make some kind of test case for my websites&lt;br /&gt;&lt;br /&gt;It automatically runs a script to recreate the test database each time abd then run the same javascript commands that a user would run normally.&lt;br /&gt;&lt;br /&gt;The script would pretend to be a user and then analyze the finished data and expect the same result every time and if its different then it will report an error with details after the test. It will log errors during the test as well. It could be logged on a file or emailed or in a database you can look at from in the admin of the website and have the test done everyday or manually started.&lt;br /&gt;My sites usually have alot that goes on and if there was something to run that tests everything or at least the hardest problems to catch then it would be worth the effort&lt;br /&gt;especially when the changes I make can break something only the customers would see.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1020350179534652227?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1020350179534652227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1020350179534652227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1020350179534652227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1020350179534652227'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/03/test-case-idea-for-php-javascript-and.html' title='Test case Idea for php, javascript and mysql'/><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-4213476024161017641.post-3095907225148874996</id><published>2011-02-06T22:51:00.000-08:00</published><updated>2011-06-14T19:15:35.397-07:00</updated><title type='text'>script in CMD to copy only files that don't already exist</title><content type='html'>The following script will be written to copy.bat or something like that. When it runs it will copy the files that don't exist yet and skip them if the file does exist. This way it won't accidentally overwrite the file after you make changes to it.&lt;br /&gt;&lt;code&gt;set file=copy_mike.pdf&lt;br /&gt;call:copy&lt;br /&gt;set file=copy_jim.pdf&lt;br /&gt;call:copy&lt;br /&gt;set file=copy_bob.pdf&lt;br /&gt;call:copy&lt;br /&gt;&lt;br /&gt;echo done&lt;br /&gt;pause&lt;br /&gt;goto :EOF&lt;br /&gt;&lt;br /&gt;:copy&lt;br /&gt;if not exist %file% (&lt;br /&gt;call:process&lt;br /&gt;)&lt;br /&gt;goto :EOF&lt;br /&gt;&lt;br /&gt;:process&lt;br /&gt;copy blank.pdf %file%&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-3095907225148874996?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/3095907225148874996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=3095907225148874996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3095907225148874996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3095907225148874996'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2011/02/script-in-cmd-to-copy-only-files-that.html' title='script in CMD to copy only files that don&apos;t already exist'/><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-4213476024161017641.post-1711685424598113299</id><published>2010-11-23T12:54:00.000-08:00</published><updated>2010-11-23T12:58:19.384-08:00</updated><title type='text'>Facebook BigPipe is great!</title><content type='html'>BigPipe has been around for a while in Facebook. I love how the pagelets load all at once so that the first one to get loaded comes first. Also the idea of prolonging the javascript until all page content is loaded it a great idea. &lt;br /&gt;Here is the page about BigPipe:&lt;br /&gt;&lt;a href="http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919"&gt;http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919&lt;/a&gt;&lt;br /&gt;I love this idea and may implement it on a site next time I am building a multimedia site. The nice thing is the main parts of the site are loaded very fast and then the rest are loaded with AJAX.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1711685424598113299?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1711685424598113299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1711685424598113299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1711685424598113299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1711685424598113299'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/11/facebook-bigpipe-is-great.html' title='Facebook BigPipe is great!'/><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-4213476024161017641.post-160201709984898985</id><published>2010-10-02T13:51:00.000-07:00</published><updated>2011-06-14T19:18:29.838-07:00</updated><title type='text'>Javascript is Crazy</title><content type='html'>I have found out that javascript has some things that you have to be aware of or errors can creep into your code and you wouldn't know why.&lt;br /&gt;&lt;br /&gt;I found this page that shows some weirdness of Javascript.&lt;br /&gt;&lt;a href="http://www.ozzu.com/programming-forum/javascript-get-array-key-name-t43467.html"&gt;http://www.ozzu.com/programming-forum/javascript-get-array-key-name-t43467.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is no real associative array in Javascript. In most languages such as PHP you can do this.&lt;br /&gt;&lt;code&gt;$person = array();&lt;br /&gt;$person['eyes'] = 'blue';&lt;br /&gt;$person['hair'] = 'brown';&lt;br /&gt;$person[1] = 'a number';&lt;br /&gt;echo count($person); //returns 2&lt;br /&gt;&lt;br /&gt;$person['length'] = '1 foot';&lt;br /&gt;echo count($person); //returns 3&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;In Javascript here is what I found out.&lt;br /&gt;You can try the same thing but it won't work right.&lt;br /&gt;One reason is you have to get to Javascript associative arrays by its properties. Normally if you use numbers instead of words in the array keys you can go through the array with a for loop using:&lt;br /&gt;&lt;code&gt;for(x=0;x &amp;lt; person.length;x++){alert(x);}&lt;/code&gt;&lt;br /&gt;When you use that with associative arrays it will show a length of 0 in the array. But you can loop through the array using for(x in person){alert(x);}&lt;br /&gt;&lt;br /&gt;Here is the example for Javascript:&lt;br /&gt;&lt;code&gt;person = new Array();&lt;br /&gt;person[0] = 'a number';&lt;br /&gt;person['eyes'] = 'blue';&lt;br /&gt;person['hair'] = 'brown';&lt;br /&gt;&lt;br /&gt;alert(person.length); //returns 1 It only sees the associative array&lt;br /&gt;alert(person.toString());&lt;br /&gt;&lt;br /&gt;person['length'] = 99;&lt;br /&gt;alert(person.length); //returns 99 this is the weird part&lt;br /&gt;alert(person.hair); // returns brown&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;And if you use a string like 'one foot' for the length is will create an error since it is only expecting a number here. The length property is set by using x = new Array(99); and this is for making the array resized so if you made 3 items in the array then set the array to a size of 2 with:&lt;br /&gt;&lt;code&gt;x['length'] = 2;&lt;/code&gt;&lt;br /&gt;You will notice that you won't be able to get at the 3rd array since the length has been truncated.&lt;br /&gt;&lt;br /&gt;To go through the array above in Javascript you need to use the&lt;br /&gt;&lt;code&gt;for(x in person){&lt;br /&gt; alert(x);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;This is the way to get at the associative properties of the array.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-160201709984898985?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/160201709984898985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=160201709984898985' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/160201709984898985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/160201709984898985'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/10/javascript-is-crazy.html' title='Javascript is Crazy'/><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-4213476024161017641.post-4641304732251983822</id><published>2010-07-09T09:59:00.000-07:00</published><updated>2010-07-09T10:28:05.255-07:00</updated><title type='text'>Getting MySQL data into XML easily</title><content type='html'>I have been experimenting with XML lately and have found a great article for using XSLT to make an html table using an sql query from a database.&lt;br /&gt;&lt;a rel="pingback" href="http://blog.mclaughlinsoftware.com/2008/08/29/querying-oracle-directly-from-xml/"&gt;http://blog.mclaughlinsoftware.com/2008/08/29/querying-oracle-directly-from-xml/&lt;/a&gt;&lt;br /&gt;It will use some of the instructions from this blog post:&lt;div&gt;&lt;a href="http://blog.mclaughlinsoftware.com/2008/08/29/querying-oracle-directly-from-xml/"&gt;http://blog.mclaughlinsoftware.com/2008/08/29/querying-oracle-directly-from-xml/&lt;/a&gt;&lt;br /&gt;&lt;div&gt;You will need a couple things to make this work.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;download Xalan and unzip it to C:/xalan-j_2_7_1&lt;/div&gt;&lt;div&gt;http://xml.apache.org/xalan-j/downloads.html&lt;/div&gt;&lt;div&gt;Then download the mysql J connector:&lt;/div&gt;&lt;div&gt;&lt;a href="http://dev.mysql.com/downloads/connector/j/"&gt;http://dev.mysql.com/downloads/connector/j/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Go into the zip and take it out and put it in the xalan folder&lt;/div&gt;&lt;div&gt;Mine was put here:&lt;/div&gt;&lt;div&gt;C:/xalan-j_2_7_1/mysql-connector-java-5.1.13-bin.jar&lt;/div&gt;&lt;div&gt;Next make an xsl file and name it mysql.xsl and put this in it:&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 595px; height: 400px; background-color: #dddddd; color: 000000; font-family: arial; font-size: 12px; text-align: left; border: 0px solid 00000; overflow: auto; padding: 4px;"&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version="1.0"&lt;br /&gt;xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&lt;br /&gt;xmlns:sql="org.apache.xalan.lib.sql.XConnection"&lt;br /&gt;extension-element-prefixes="sql"&amp;gt;&lt;br /&gt;&amp;lt;xsl:output method="html" /&amp;gt;&lt;br /&gt;&amp;lt;xsl:template match="/"&amp;gt;&lt;br /&gt;&amp;lt;xsl:variable&lt;br /&gt;name="movies"&lt;br /&gt;select="sql:new('com.mysql.jdbc.Driver','jdbc:mysql:///storedb','student','student')" /&amp;gt;&lt;br /&gt;&amp;lt;xsl:variable name="streaming" select="sql:disableStreamingMode($movies)" /&amp;gt;&lt;br /&gt;&amp;lt;xsl:variable&lt;br /&gt;name="queryResults"&lt;br /&gt;select="sql:query($movies,'SELECT i.item_title, i.item_asin, i.item_release_date FROM storedb.item i')" /&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;MySQL Result Set&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body style="font-family: sans-serif;"&amp;gt;&lt;br /&gt;&amp;lt;table border="1" cellpadding="5"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;xsl:for-each select="$queryResults/sql/metadata/column-header"&amp;gt;&lt;br /&gt;&amp;lt;th&amp;gt;&amp;lt;xsl:value-of select="@column-label" /&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;xsl:apply-templates select="$queryResults/sql/row-set/row" /&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&amp;lt;xsl:value-of select="sql:close($movies)" /&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;xsl:template match="row"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;xsl:apply-templates select="col" /&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;xsl:template match="col"&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;xsl:value-of select="text()" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;Next run these commands from command prompt:&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\xalan.jar;.&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\serializer.jar&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\xercesImpl.jar&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\xml-apis.jar&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\xsltc.jar&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\mysql-connector-java-5.1.13-bin.jar&lt;/div&gt;&lt;div&gt;java org.apache.xalan.xslt.Process -XSL mysql.xsl &gt; mysql.html&lt;/div&gt;&lt;div&gt;Now you should have an html document called mysql.html all ready to look at in a browser with the database tables showing in html format.&lt;/div&gt;&lt;div&gt;I will show an example:&lt;/div&gt;&lt;br /&gt;&lt;table cellpadding="5" border="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;th&gt;item_title&lt;/th&gt;&lt;th&gt;item_asin&lt;/th&gt;&lt;th&gt;item_release_date&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;"Good Eats with Alton Brown, Vol. 6 (3 - Pack): Tossed Around, Veggie Eats, Breakfast Eats 2"&lt;/td&gt;&lt;td&gt;143499&lt;/td&gt;&lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;"Good Eats with Alton Brown Vol. 8, Delicious Dishes (3 - Pack): Condiment Nation, Ocean Edibles 2, Veggie Eats 2"&lt;/td&gt;&lt;td&gt;143510&lt;/td&gt;&lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Sports Medicine Imaging DVD: Single User&lt;/td&gt;&lt;td&gt;477044&lt;/td&gt;&lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Musculoskeletal MRI DVD: Single User&lt;/td&gt;&lt;td&gt;477087&lt;/td&gt;&lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4641304732251983822?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4641304732251983822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4641304732251983822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4641304732251983822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4641304732251983822'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/07/getting-mysql-data-into-xml-easily.html' title='Getting MySQL data into XML easily'/><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-4213476024161017641.post-89449092695495813</id><published>2010-07-07T19:55:00.001-07:00</published><updated>2010-07-09T10:32:33.632-07:00</updated><title type='text'>Converting html codes to html entities</title><content type='html'>I found this helpful site to convert the html entities like &lt; into &amp;amp;lt;&lt;br /&gt;&lt;a href="http://centricle.com/tools/html-entities/"&gt;http://centricle.com/tools/html-entities/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And then url encode / decoding is good too:&lt;br /&gt;&lt;a href="http://meyerweb.com/eric/tools/dencoder/"&gt;http://meyerweb.com/eric/tools/dencoder/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-89449092695495813?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/89449092695495813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=89449092695495813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/89449092695495813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/89449092695495813'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/07/converting-html-codes-to-html-entities.html' title='Converting html codes to html entities'/><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-4213476024161017641.post-8976524192319606263</id><published>2010-07-07T18:54:00.000-07:00</published><updated>2010-07-07T19:48:20.794-07:00</updated><title type='text'>XSLT and iTunes parsing into HTML table</title><content type='html'>I will now show some code that I have been tweaking from a site:&lt;div&gt;&lt;a href="http://www.movable-type.co.uk/scripts/itunes-albumlist.html"&gt;http://www.movable-type.co.uk/scripts/itunes-albumlist.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It wasn't working so I had to play with it some until I understood how it works. XSLT is powerful when it comes to converting xml to any format you want.&lt;/div&gt;&lt;div&gt;I will show the example xslt style document I changed from the site above to make really cool looking iTunes tables showing all your music sorted by genre and the times and sizes of each.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First download the &lt;a href="http://xml.apache.org/xalan-j/downloads.html"&gt;Xalan&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Find your itunes xml document in My Music folder in My Documents for your current user then open the iTunes folder and copy the iTunes Music Library.xml to your xalan folder and rename it to itunes.xml&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is where mines was found:&lt;/div&gt;&lt;div&gt;C:\Documents and Settings\mike\My Documents\My Music\iTunes&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now make an itunes.xsl file and put this in it:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="width: 595px; height: 400px; background-color: #dddddd; color: 000000; font-family: arial; font-size: 12px; text-align: left; border: 0px solid 00000; overflow: auto; padding: 4px;"&gt;&amp;lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;xsl:key name="songsByAlbum" match="dict"&lt;br /&gt; use="string[preceding-sibling::key[1]='Album']"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:key name="songsByGenre" match="dict"&lt;br /&gt; use="string[preceding-sibling::key[1]='Genre']"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template match="/plist/dict/dict"&amp;gt;&lt;br /&gt; &amp;lt;html&amp;gt;&lt;br /&gt; &amp;lt;style&amp;gt;&lt;br /&gt; table,th,td{border:1px solid black;padding:3px;}&lt;br /&gt; th{text-align:left;background-color:#3333CC;}&lt;br /&gt; .indent{border:0px;width:10px;}&lt;br /&gt; .genre{background-color:#7094FF;}&lt;br /&gt; .album{background-color:#3366FF;color: #222}&lt;br /&gt; &amp;lt;/style&amp;gt;&lt;br /&gt;   &amp;lt;body&amp;gt;&lt;br /&gt;     &amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;th colspan="2"&amp;gt;Genre / Album&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Artist&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Time&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Size&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;       &amp;lt;xsl:for-each select="dict[generate-id(.)=&lt;br /&gt;           generate-id(key('songsByGenre',string)[1])]"&amp;gt;&lt;br /&gt;         &amp;lt;xsl:sort select="string[preceding-sibling::key[1]='Genre']"/&amp;gt;&lt;br /&gt;         &amp;lt;xsl:for-each select="key('songsByGenre',string)[1]"&amp;gt;&lt;br /&gt;        &lt;br /&gt;           &amp;lt;xsl:call-template name="albumsInGenre"&amp;gt;&lt;br /&gt;             &amp;lt;xsl:with-param name="genre"&lt;br /&gt;                 select="string[preceding-sibling::key[1]='Genre']"/&amp;gt;&lt;br /&gt;           &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;          &lt;br /&gt;          &lt;br /&gt;            &lt;br /&gt;         &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;       &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;/table&amp;gt;&lt;br /&gt;   &amp;lt;/body&amp;gt;&lt;br /&gt; &amp;lt;/html&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="albumsInGenre"&amp;gt;&lt;br /&gt; &amp;lt;xsl:param name="genre"/&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;tr&amp;gt;&amp;lt;td class="genre" colspan='5'&amp;gt;&amp;lt;b&amp;gt;&amp;lt;xsl:value-of select="$genre"/&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;xsl:variable name="song" select="/plist/dict/dict/dict"/&amp;gt;&lt;br /&gt; &amp;lt;xsl:for-each select="$song[generate-id(.)=&lt;br /&gt;     generate-id(key('songsByAlbum',string[preceding-sibling::key[1]='Album'])[1])]"&amp;gt;&lt;br /&gt;   &amp;lt;xsl:sort select="string[preceding-sibling::key[1]='Album']"/&amp;gt;&lt;br /&gt;   &amp;lt;xsl:for-each select="key('songsByAlbum',string[preceding-sibling::key[1]='Album'])&lt;br /&gt;       [string[preceding-sibling::key[1]='Genre']=$genre][1]"&amp;gt;&lt;br /&gt;     &amp;lt;tr&amp;gt;&lt;br /&gt;       &amp;lt;td class="indent"&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;       &amp;lt;td class="album" align='left'&amp;gt;&amp;lt;xsl:call-template name="albumName"/&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;       &amp;lt;td class="album" align='left'&amp;gt;&amp;lt;xsl:call-template name="artistName"/&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;       &amp;lt;td class="album" align='right'&amp;gt;&amp;lt;xsl:call-template name="iTunesTimeAlbum"/&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;       &amp;lt;td class="album" align='right'&amp;gt;&amp;lt;xsl:call-template name="iTunesSizeTotal"/&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;     &amp;lt;/tr&amp;gt;&lt;br /&gt;   &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt; &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="albumName"&amp;gt;&lt;br /&gt; &amp;lt;xsl:value-of select="string[preceding-sibling::key[1]='Album']"/&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="artistName"&amp;gt;&lt;br /&gt; &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;   &amp;lt;xsl:when test="true[preceding-sibling::key[1]='Compilation']"&amp;gt;&lt;br /&gt;     &amp;lt;i&amp;gt;Compilation&amp;lt;/i&amp;gt;&lt;br /&gt;   &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;   &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;     &amp;lt;xsl:value-of select="string[preceding-sibling::key[1]='Artist']"/&amp;gt;&lt;br /&gt;   &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt; &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="iTunesTimeAlbum"&amp;gt;&lt;br /&gt; &amp;lt;xsl:variable name="tracksInAlbum"&lt;br /&gt;     select="key('songsByAlbum',string[preceding-sibling::key[1]='Album'])"/&amp;gt;&lt;br /&gt; &amp;lt;xsl:variable name="t"&lt;br /&gt;     select="sum($tracksInAlbum/integer[preceding-sibling::key[1]='Total Time'])"/&amp;gt;&lt;br /&gt; &amp;lt;xsl:call-template name="formatTime"&amp;gt;&lt;br /&gt;   &amp;lt;xsl:with-param name="t" select="$t"/&amp;gt;&lt;br /&gt; &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="formatTime"&amp;gt;&lt;br /&gt; &amp;lt;xsl:param name="t"/&amp;gt;&lt;br /&gt; &amp;lt;xsl:if test="$t != 0"&amp;gt;&lt;br /&gt;   &amp;lt;xsl:variable name="h" select="floor(($t div (1000*60*60)))"/&amp;gt;&lt;br /&gt;   &amp;lt;xsl:variable name="m" select="floor(($t div (1000*60)) mod 60)"/&amp;gt;&lt;br /&gt;   &amp;lt;xsl:variable name="s" select="floor(($t div 1000) mod 60)"/&amp;gt;&lt;br /&gt;   &amp;lt;xsl:if test="$h != 0"&amp;gt;&amp;lt;xsl:value-of select="$h"/&amp;gt;:&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;   &amp;lt;xsl:value-of select="format-number($m,'00')"/&amp;gt;:&amp;lt;xsl:value-of select="format-number($s,'00')"/&amp;gt;&lt;br /&gt; &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="iTunesSizeTotal"&amp;gt;&lt;br /&gt; &amp;lt;xsl:variable name="tracksInAlbum"&lt;br /&gt;     select="key('songsByAlbum',string[preceding-sibling::key[1]='Album'])"/&amp;gt;&lt;br /&gt; &amp;lt;xsl:variable name="s"&lt;br /&gt;     select="sum($tracksInAlbum/integer[preceding-sibling::key[1]='Size'])"/&amp;gt;&lt;br /&gt; &amp;lt;xsl:value-of select="format-number($s div (1000*1000),'00.00')"/&amp;gt;MB&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="formatSize"&amp;gt;&lt;br /&gt; &amp;lt;xsl:param name="s"/&amp;gt;&lt;br /&gt; &amp;lt;xsl:if test="$s != 0"&amp;gt;&lt;br /&gt;   &amp;lt;xsl:value-of select="floor($s)"/&amp;gt;GB&lt;br /&gt; &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="iTunesSizeTotalorig"&amp;gt;&lt;br /&gt;   &amp;lt;xsl:variable name="s" select="sum(dict/integer[preceding-sibling::key[1]='Size'])"/&amp;gt;&lt;br /&gt;   &amp;lt;xsl:value-of select="floor($s div (1000*1000))"/&amp;gt;MB&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now you just open command prompt and paste this into it:&lt;/div&gt;&lt;div&gt;set CLASSPATH=C:\JavaDev\Java5\ojdbc5.jar;.&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\xalan.jar;.&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\serializer.jar&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\xercesImpl.jar&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\xml-apis.jar&lt;/div&gt;&lt;div&gt;set CLASSPATH=%CLASSPATH%;C:\xalan-j_2_7_1\xsltc.jar&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next paste this line:&lt;/div&gt;&lt;div&gt;java org.apache.xalan.xslt.Process -IN itunes.xml -XSL itunes.xsl -HTML &gt; itunes.html&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now after pressing enter you should have an html file in the xalan folder and it will be formated like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table style="border:1px solid black;padding:3px;"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;th colspan="2" style="border:1px solid black;padding:3px;text-align:left;background-color:#3333CC;"&gt;Genre / Album&lt;/th&gt;&lt;th style="border:1px solid black;padding:3px;text-align:left;background-color:#3333CC;"&gt;Artist&lt;/th&gt;&lt;th style="border:1px solid black;padding:3px;text-align:left;background-color:#3333CC;"&gt;Time&lt;/th&gt;&lt;th style="border:1px solid black;padding:3px;text-align:left;background-color:#3333CC;"&gt;Size&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td colspan="5" style="border:1px solid black;padding:3px;background-color:#7094FF;"&gt;&lt;b&gt;General Classical&lt;/b&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border:1px solid black;padding:3px;border:0px;width:10px;"&gt;&lt;/td&gt;&lt;td align="left" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;Bibbidi Bobbidi Bach&lt;/td&gt;&lt;td align="left" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;Scott Tennant&lt;/td&gt;&lt;td align="right" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;07:31&lt;/td&gt;&lt;td align="right" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;07.22MB&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td colspan="5" style="border:1px solid black;padding:3px;background-color:#7094FF;"&gt;&lt;b&gt;Soundtrack&lt;/b&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border:1px solid black;padding:3px;border:0px;width:10px;"&gt;&lt;/td&gt;&lt;td align="left" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;Les Miserables 10th Anniversary Concert Disc 1&lt;/td&gt;&lt;td align="left" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;1995 Royal Albert Hall Concert Cast&lt;/td&gt;&lt;td align="right" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;03:15&lt;/td&gt;&lt;td align="right" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;03.12MB&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="border:1px solid black;padding:3px;border:1px solid black;padding:3px;border:0px;width:10px;"&gt;&lt;/td&gt;&lt;td align="left" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;Les Miserables 10th Anniversary Concert Disc 2&lt;/td&gt;&lt;td align="left" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;1995 Royal Albert Hall Concert Cast&lt;/td&gt;&lt;td align="right" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;03:09&lt;/td&gt;&lt;td align="right" style="border:1px solid black;padding:3px;background-color:#3366FF;color: #222"&gt;03.02MB&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Isn't that cool? You could also use the path to the itunes xml file in the xalan if you like what you see and then it will just convert to html what ever you have now.&lt;/div&gt;&lt;div&gt;This works for me too if you are in the xalan folder or where ever you have your itunes.xsl file and where you want your itenues.html to be written or you may change those as well:&lt;/div&gt;&lt;div&gt;java org.apache.xalan.xslt.Process -IN "C:\Documents and Settings\mike\My Documents\My Music\iTunes\iTunes Music Library.xml" -XSL itunes.xsl -HTML &gt; itunes.html&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8976524192319606263?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8976524192319606263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8976524192319606263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8976524192319606263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8976524192319606263'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/07/xslt-and-itunes-parsing-into-html-table.html' title='XSLT and iTunes parsing into HTML table'/><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-4213476024161017641.post-3517632462178484939</id><published>2010-07-07T18:19:00.000-07:00</published><updated>2010-07-08T15:09:37.759-07:00</updated><title type='text'>learning XSLT and xml to csv to Oracle or MySQL</title><content type='html'>I have been learning some XSLT&lt;div&gt;Here is a good place to start learning how to use it to convert xml to html.&lt;/div&gt;&lt;div&gt;This is the page on W3 schools teaching about the for-each loop that lets you loop through the xml code then you can select the xml elements you want to grab.&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.w3schools.com/XSL/xsl_for_each.asp"&gt;http://www.w3schools.com/XSL/xsl_for_each.asp&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can also convert xml to csv and then to a database if you want. Here is a good tutorial on how to do this:&lt;/div&gt;&lt;div&gt;&lt;a href="http://blog.mclaughlinsoftware.com/oracle-sql-programming/how-to-convert-xml-to-csv-and-upload-into-oracle/" rel="pingback"&gt;http://blog.mclaughlinsoftware.com/oracle-sql-programming/how-to-convert-xml-to-csv-and-upload-into-oracle/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also if you want to take a csv file and put it into a MySQL database this is what you do:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif; font-size: 13px; color: rgb(17, 0, 0); "&gt;&lt;pre class="sql" 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; width: auto; clear: none; overflow-x: visible; overflow-y: visible; "&gt;&lt;span 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; "&gt;&lt;span class="Apple-style-span"   style="font-size:100%;color:#993333;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px; line-height: 15px;"&gt;&lt;b&gt;DROP TABLE IF EXISTS &lt;span class="Apple-style-span"  style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;movie&lt;/span&gt;;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="sql" 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; width: auto; clear: none; overflow-x: visible; overflow-y: visible; font-size: 12px; line-height: 1.333; white-space: pre; font-family: monospace; "&gt;&lt;span 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(153, 51, 51); font-weight: bold; "&gt;CREATE&lt;/span&gt; &lt;span 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(153, 51, 51); font-weight: bold; "&gt;TABLE&lt;/span&gt; movie &lt;span 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(102, 204, 102); "&gt;(&lt;/span&gt; role VARCHAR&lt;span 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(102, 204, 102); "&gt;(&lt;/span&gt;&lt;span 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(204, 102, 204); "&gt;30&lt;/span&gt;&lt;span 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(102, 204, 102); "&gt;)&lt;/span&gt; &lt;span 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(102, 204, 102); "&gt;,&lt;/span&gt; actor VARCHAR&lt;span 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(102, 204, 102); "&gt;(&lt;/span&gt;&lt;span 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(204, 102, 204); "&gt;30&lt;/span&gt;&lt;span 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(102, 204, 102); "&gt;)&lt;/span&gt; &lt;span 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(102, 204, 102); "&gt;,&lt;/span&gt; movie VARCHAR&lt;span 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(102, 204, 102); "&gt;(&lt;/span&gt;&lt;span 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(204, 102, 204); "&gt;60&lt;/span&gt;&lt;span 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(102, 204, 102); "&gt;)&lt;/span&gt;&lt;span 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(102, 204, 102); "&gt;) &lt;/span&gt;&lt;span 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; "&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;engine=memory;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;TRUNCATE &lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px; color: rgb(17, 0, 0); line-height: 15px; white-space: pre; "&gt;movie&lt;/span&gt;;&lt;/div&gt;&lt;div&gt;LOAD DATA LOCAL INFILE 'path_to_csv/movie.csv'&lt;/div&gt;&lt;div&gt;INTO TABLE movie&lt;/div&gt;&lt;div&gt;FIELDS TERMINATED BY '\t'&lt;/div&gt;&lt;div&gt;ESCAPED BY '\\'&lt;/div&gt;&lt;div&gt;LINES TERMINATED BY '\r\n'&lt;/div&gt;&lt;div&gt;IGNORE 1 LINES;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The csv is taken into the table with the load data local infile command.&lt;/div&gt;&lt;div&gt;Drop table will drop the table so you can create it again next time you use this command so it is a re-runnable script.&lt;/div&gt;&lt;div&gt;Truncate just removes all data in the table. The Oracle script on blog.mclaughlinsoftware.com uses an external table which makes it so when you read from the table movie you are really reading from the csv file so when ever you change the csv the data in the database is automatically changed when you read from it next. Like: &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#990000;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SELECT * FROM&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; movie;&lt;/span&gt;&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;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-3517632462178484939?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/3517632462178484939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=3517632462178484939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3517632462178484939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3517632462178484939'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/07/learning-xslt-and-xml-to-csv-to-oracle.html' title='learning XSLT and xml to csv to Oracle or MySQL'/><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-4213476024161017641.post-3542398314495184390</id><published>2010-06-28T10:32:00.000-07:00</published><updated>2010-06-28T10:42:41.171-07:00</updated><title type='text'>Making sounds or notes with internal speakers</title><content type='html'>&lt;div&gt;If you have qbasic you can try this:&lt;/div&gt;&lt;a href="http://www.youtube.com/watch?v=hITypVqHWjk"&gt;http://www.youtube.com/watch?v=hITypVqHWjk&lt;/a&gt;&lt;div&gt;here is the code that will play a song.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PLAY "T120 &amp;lt;&amp;lt; e8e8f8g8g8f8e8d8c8c8d8e8e8d12d4"&lt;br /&gt;PLAY  "e8e8f8g8g8fe8d8c8c8d8e8d8c12c4"&lt;br /&gt;PLAY  "d8d8e8c8d8e12f12e8c8d8e12f12e8d8c8d8P8"&lt;br /&gt;PLAY  "e8e8f8g8g8fe8d8c8c8d8e8d8c12c4"&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The T120 is the tempo and the &amp;lt;&amp;lt; means go down 2 octaves&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then I also got my internal pc speakers to play different tones with this python code:&lt;/div&gt;&lt;div&gt;&lt;div&gt;import winsound&lt;/div&gt;&lt;div&gt;winsound.Beep(337, 200);&lt;/div&gt;&lt;div&gt;winsound.Beep(437, 200);&lt;/div&gt;&lt;div&gt;winsound.Beep(537, 200);&lt;/div&gt;&lt;div&gt;winsound.Beep(637, 200);&lt;/div&gt;&lt;div&gt;winsound.Beep(737, 200);&lt;/div&gt;&lt;div&gt;winsound.Beep(937, 200);&lt;/div&gt;&lt;div&gt;winsound.Beep(637, 200);&lt;/div&gt;&lt;div&gt;winsound.Beep(337, 200);&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;although it is not as music sounding. But I may try making it sound better later.&lt;/div&gt;&lt;div&gt;The first parameter of the winsound.Beep is the frequency and the second is the length of the note.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-3542398314495184390?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/3542398314495184390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=3542398314495184390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3542398314495184390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3542398314495184390'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/06/making-sounds-or-notes-with-internal.html' title='Making sounds or notes with internal speakers'/><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-4213476024161017641.post-1922379418961709347</id><published>2010-06-26T07:33:00.000-07:00</published><updated>2010-06-26T07:37:41.468-07:00</updated><title type='text'>mod re-write is awsome</title><content type='html'>&lt;div class="message_next"&gt;I think I found how to make multiple mod re-write rules in  one htaccess file&lt;/div&gt; &lt;div class="message_next"&gt;you just write the regular expression line&lt;/div&gt; &lt;div class="message_next"&gt;then do another afterward&lt;/div&gt; &lt;div class="message_next"&gt;and if it doesn't match the first it tries the  second line.&lt;/div&gt; &lt;div class="message_next"&gt;then I was wondering if you could use this to make it so  that no one can visit a certain page such as your js or css folder without being  redirected to somewhere else.&lt;/div&gt;&lt;div class="message_next"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="message_next"&gt;&lt;a href="http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html"&gt;http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1922379418961709347?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1922379418961709347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1922379418961709347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1922379418961709347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1922379418961709347'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/06/mod-re-write-is-awsome.html' title='mod re-write is awsome'/><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-4213476024161017641.post-582389957772998962</id><published>2010-06-21T17:00:00.001-07:00</published><updated>2010-06-21T17:00:31.902-07:00</updated><title type='text'>foo</title><content type='html'>command line posting&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-582389957772998962?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/582389957772998962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=582389957772998962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/582389957772998962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/582389957772998962'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/06/foo.html' title='foo'/><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-4213476024161017641.post-2635621100726097821</id><published>2010-06-20T19:02:00.001-07:00</published><updated>2010-06-20T19:02:39.035-07:00</updated><title type='text'>blog</title><content type='html'>I just posted this from GoogleCL!&lt;br /&gt;I hope they keep improving this service&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2635621100726097821?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2635621100726097821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2635621100726097821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2635621100726097821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2635621100726097821'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/06/blog.html' title='blog'/><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-4213476024161017641.post-4258023765609064465</id><published>2010-06-20T18:41:00.000-07:00</published><updated>2010-06-20T18:50:37.019-07:00</updated><title type='text'>WOW GoogleCL</title><content type='html'>I can now edit my google docs from the commandline in Windows!&lt;div&gt;This is great. I got a list of my contacts to the screen easily. Now I am going to try editing a google docs document.&lt;/div&gt;&lt;div&gt;to install google CL go here&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/googlecl/"&gt;http://code.google.com/p/googlecl/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;download &lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; white-space: nowrap; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;a href="http://code.google.com/p/googlecl/downloads/detail?name=googlecl-0.9.7.tar.gz" title="mostly minor bugfixes; add a few contacts and calendar enhancements"&gt;googlecl-0.9.7.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/gdata-python-client/"&gt;http://code.google.com/p/gdata-python-client/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;then download &lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; white-space: nowrap; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;&lt;a href="http://code.google.com/p/gdata-python-client/downloads/detail?name=gdata-2.0.10.tar.gz" title="gdata-2.0.10.tar.gz"&gt;gdata-2.0.10.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Now uncommpress these files to 2 different folders then to install you have to install python.&lt;/div&gt;&lt;div&gt;I already had it installed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now go to:&lt;/div&gt;&lt;div&gt;C:\googlecl\gdata-2.0.10&lt;/div&gt;&lt;div&gt;run this command from that folder&lt;/div&gt;&lt;div&gt;python setup.py install&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now go to C:\googlecl\googlecl-0.9.5 &lt;/div&gt;&lt;div&gt;and do this command  as well&lt;/div&gt;&lt;div&gt;python setup.py install&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now go to C:\googlecl\googlecl-0.9.5\src&lt;/div&gt;&lt;div&gt;and run this:&lt;/div&gt;&lt;div&gt;python google&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now you should get a &lt;/div&gt;&lt;div&gt;&gt;&lt;/div&gt;&lt;div&gt;now type&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; "&gt;contacts list name,email&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Now it will ask you for your email for google.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;It should open your browser for you now you type in your password.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Next press enter and that is it. Soon it will print all the contact info for you.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&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:monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;All the info you need is here for more commands&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;a href="http://code.google.com/p/googlecl/"&gt;http://code.google.com/p/googlecl/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;type help and you get:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Welcome to the Google CL tool!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;Commands are broken into several parts: service, task, options, and arguments.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;The available services are 'picasa', 'blogger', 'youtube', 'docs', 'contacts', 'calendar'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&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:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;docs command options are&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Did not recognize task, please use one of ['edit', 'delete', 'list', 'upload', 'get']&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4258023765609064465?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4258023765609064465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4258023765609064465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4258023765609064465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4258023765609064465'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/06/wow-googlecl.html' title='WOW GoogleCL'/><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-4213476024161017641.post-940356289697275210</id><published>2010-06-20T18:25:00.007-07:00</published><updated>2010-06-20T18:25:47.273-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>test post from BloggerClientTest</title><content type='html'>Hey look, another test!&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-940356289697275210?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/940356289697275210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=940356289697275210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/940356289697275210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/940356289697275210'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/06/test-post-from-bloggerclienttest.html' title='test post from BloggerClientTest'/><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-4213476024161017641.post-214067385656648046</id><published>2010-06-20T18:25:00.001-07:00</published><updated>2010-06-20T18:25:05.689-07:00</updated><title type='text'>test from python BloggerTest</title><content type='html'>This is only a test.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-214067385656648046?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/214067385656648046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=214067385656648046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/214067385656648046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/214067385656648046'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/06/test-from-python-bloggertest.html' title='test from python BloggerTest'/><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-4213476024161017641.post-7264738760215143310</id><published>2010-05-28T08:50:00.001-07:00</published><updated>2010-05-28T08:57:18.831-07:00</updated><title type='text'>I have found a great way to use excel for user defined functions</title><content type='html'>&lt;div&gt;&lt;a href="http://blog.mclaughlinsoftware.com/2010/05/28/udf-replaces-vlookup/"&gt;http://blog.mclaughlinsoftware.com/2010/05/28/udf-replaces-vlookup/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;I have found a great site that tells how to make a grade lookup in excel without using arrays. &lt;/div&gt;&lt;div&gt;It uses virtual lookups:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  border-collapse: collapse; color: rgb(17, 0, 0); -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif;font-size:13px;"&gt;&lt;pre class="vb"   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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  font-family:monospace;font-size:12px;"&gt;&lt;span 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(0, 128, 0); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;'Define a single dimension array of a UDT (record) &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/pre&gt;&lt;pre class="vb"   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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  font-family:monospace;font-size:12px;"&gt;&lt;span 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(0, 0, 128); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Dim&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; VirtualLookup(1 &lt;/span&gt;&lt;span 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(0, 0, 128); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;To&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; 15) &lt;/span&gt;&lt;span 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(0, 0, 128); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;As&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; VirtualLookup    &lt;/span&gt;&lt;/pre&gt;&lt;pre class="vb"   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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  font-family:monospace;font-size:12px;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;/span&gt;&lt;span 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(0, 128, 0); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;' Record initialization &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;/pre&gt;&lt;pre class="vb"   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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  font-family:monospace;font-size:12px;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;VirtualLookup(1).lowerLimit = 0.93  &lt;/span&gt;&lt;/pre&gt;&lt;pre class="vb"   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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  font-family:monospace;font-size:12px;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;VirtualLookup(1).upperLimit = 1#  &lt;/span&gt;&lt;/pre&gt;&lt;pre class="vb"   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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  font-family:monospace;font-size:12px;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;VirtualLookup(1).letterGrade = &lt;/span&gt;&lt;span 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(128, 0, 0); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;"A"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="vb" face="monospace" size="12px" 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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  "&gt;&lt;span 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(128, 0, 0); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="vb" face="monospace" size="12px" 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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  "&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Then you can get and use the values in the lookups like you would with a vlookup in excel.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="vb" face="monospace" size="12px" 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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  "&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;In a for loop you do this to make the grade = to the vlookup&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="vb" face="monospace" size="12px" 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; width: auto; clear: none; overflow-x: visible; overflow-y: visible;  line-height: 1.333; white-space: pre;  "&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style=" line-height: normal; white-space: normal;  color: rgb(17, 0, 0); font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, sans-serif;"&gt;&lt;pre class="vb" 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; width: auto; clear: none; overflow-x: visible; overflow-y: visible; line-height: 1.333; white-space: pre; font-family: monospace; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;grade = VirtualLookup(i).letterGrade&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I have also been learning how to make arrays in vba  in excel&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.anthony-vba.kefra.com/vba/vbabasic3.htm#Declaring_Array_With_Dim_Statement"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;http://www.antho&lt;/span&gt;ny-vba.kefra.com/vba/vbabasic3.htm#Declaring_Array_With_Dim_Statement&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-7264738760215143310?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/7264738760215143310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=7264738760215143310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7264738760215143310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7264738760215143310'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/05/i-have-found-great-way-to-use-excel-for.html' title='I have found a great way to use excel for user defined functions'/><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-4213476024161017641.post-2541601334169356998</id><published>2010-05-18T15:12:00.000-07:00</published><updated>2010-05-18T16:29:06.967-07:00</updated><title type='text'>Online Radio for free</title><content type='html'>I created my own online streaming radio station that allows people to listen to your music as you stream it. So everyone that listens will hear the same thing at the same time. I did this with Windows XP but linux would be even better to use. &lt;div&gt;I installed Icecast2 which is the program that shows you the radio stations that you are streaming. Make sure to look at the settings first by clicking edit configuration in the configuration menu. Next click the start server button. You can see your music streams by going to for example http://localhost:8000&lt;/div&gt;&lt;div&gt;But once you set up your own VPN or website you can use that ip address to allow anyone to listen. But if you are listening to copyrighted music make sure it requires a password so only you can listen to it. I will add a post sometime about how I got my own website built using dyndns.org for free and can host the website from my own laptop or any other computer using a dynamic ip address.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After I installed Icecast2 I looked on their website and found 3rd party client that will read a playlist of mp3's or ogg file and send them to the Icecast2 service which sends them on to the listeners. I picked Ezstream for the client. All you have to do is make a m3u playlist with a program like VLC. I added as many songs as I wanted to the VLC player then clicked playlist menu and then save playlist to file. I put this file in the Ezstream folder. I also edited the ezstream_mp3.xml file in the example folder and moved it into the root of Ezstream folder instead of the example folder. Next add Ezstream to environment path so you don't have to travel to that folder while in CMD. Then type the command:&lt;/div&gt;&lt;div&gt;ezstream -c ezstream_mp3.xml&lt;/div&gt;&lt;div&gt;This will start the streaming if you did everything right. Then just go to the localhost:8000 address to see all your streams. Click the m3u link to the right to download the m3u playlist that you can open with VLC or any other music player. It will start playing the stream. It took me about 3-4 hours to get everything to work. It would have taken less time if I knew what I was doing.&lt;/div&gt;&lt;div&gt;After getting it to work on localhost I made it work onn my VPN and it works. I also added another xml file for Ezstream that pointed to a different m3u playlist so when someone goes to your port 8000 address page they will see both streams. But you have to have 2 command prompt windows open and do the ezstream -c command using both of your xml files one in each of the cmd windows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What will I try in the future? I want to use mysql and php with this type of streaming to allow uses to login to a website and they can look through the music that is available and pick music to be qued up next on the radio station. When there is no music qued it will pick a random genre and play the music in that genre for 1 hour and then pick another genre. Too many music stations I know of play a small amount of songs and repeat songs all day. I would want songs to repeat once a week so it doesn't get boring to listen to all day.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2541601334169356998?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2541601334169356998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2541601334169356998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2541601334169356998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2541601334169356998'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/05/online-radio-for-free.html' title='Online Radio for free'/><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-4213476024161017641.post-5542038366111118758</id><published>2010-05-18T14:09:00.000-07:00</published><updated>2010-05-18T15:11:14.989-07:00</updated><title type='text'>MySQL table is full error for InnoDB</title><content type='html'>I was playing with importing data from csv into a table that is only in memory with InnoDB and it came up with an error:&lt;div&gt;"table is full"&lt;/div&gt;&lt;div&gt;There was 107,000 records added and it stopped before finishing the import.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;-- here is the sql code that I used to make the table&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;SELECT 'ITEM_IMPORT' AS "Drop Table";&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;DROP TABLE IF EXISTS item_import;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;-- ------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;-- Create ITEM_IMPORT table.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;-- ------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;SELECT 'ITEM_IMPORT' AS "Create Table";&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;CREATE TABLE item_import&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;( item_barcode                CHAR(14)     NOT NULL&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;, item_type                   INT UNSIGNED NOT NULL&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;, item_title                  CHAR(60)     NOT NULL&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;, item_subtitle               CHAR(60)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;, item_rating                 CHAR(8)      NOT NULL&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;, item_release_date           DATE         NOT NULL&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;, screen_type&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;INT UNSIGNED DEFAULT NULL&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;) ENGINE=memory;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style=" white-space: normal; font-family:Georgia, serif;"&gt;&lt;span style="font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style=" white-space: normal; font-family:Georgia, serif;"&gt;&lt;span style="font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;-- loads the csv into the temporary table&lt;/span&gt;&lt;/span&gt;&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;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;LOAD DATA LOCAL INFILE 'C:/Documents and settings/mike/Desktop/datawarehousing/import.csv'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div color="transparent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background- "&gt;&lt;span&gt;&lt;span&gt;INTO TABLE item_import&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div color="transparent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background- "&gt;&lt;span&gt;&lt;span&gt;FIELDS TERMINATED BY ','&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div color="transparent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background- "&gt;&lt;span&gt;&lt;span&gt;ENCLOSED BY '"'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div color="transparent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background- "&gt;&lt;span&gt;&lt;span&gt;ESCAPED BY '\\'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div color="transparent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background- "&gt;&lt;span&gt;&lt;span&gt;LINES TERMINATED BY '\r\n';&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div color="transparent" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background- "&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-color: transparent; "&gt;&lt;span&gt;&lt;span&gt;to fix the limit on the amount of rows in the InnoDB table change or add the following line to the my.ini if you are using windows: &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-color: transparent; "&gt;&lt;span&gt;&lt;span&gt;max_h&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;eap_t&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;able_size = 600M &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-color: transparent; "&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;span class="Apple-style-span"  style=" white-space: pre-wrap; font-family:Verdana;"&gt;I tested this and it enabled me to add 4 million rows in the table. Since it is a table in memory it removed the tables data as soon as you exit mysql.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-5542038366111118758?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/5542038366111118758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=5542038366111118758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5542038366111118758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5542038366111118758'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/05/mysql-table-is-full-error-for-innodb.html' title='MySQL table is full error for InnoDB'/><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-4213476024161017641.post-6425171653150115544</id><published>2010-05-14T18:14:00.000-07:00</published><updated>2010-05-14T19:40:44.843-07:00</updated><title type='text'>Cool new trick to use to stop system beep</title><content type='html'>My computer is a Dell inspiron 1521 and the system beep it makes when ever I make an error while typing commands in MySQL are so loud it startles me. I wanted to stop the beeps so I googled it and found this &lt;a href="http://bugs.mysql.com/bug.php?id=17088"&gt;page&lt;/a&gt; or &lt;a href="http://blog.netnerds.net/2007/05/5-ways-to-stop-windows-vista-xp-2003-from-beeping/"&gt;here&lt;/a&gt;. Hope it helps. All you need to do is use a -b in the mysql sartup command like this:&lt;div&gt;C:\Documents and Settings\mike&gt;mysql -uuser -ppassword -b&lt;/div&gt;&lt;div&gt;now you can type a bad command and it won't beep at all. Another method to use to stop it until you restart the computer is:&lt;/div&gt;&lt;div&gt; net stop beep&lt;/div&gt;&lt;div&gt;the beeps will now be off.&lt;/div&gt;&lt;div&gt;then use:&lt;/div&gt;&lt;div&gt;net start beep&lt;/div&gt;&lt;div&gt;and the beep starts up again.&lt;/div&gt;&lt;div&gt;If you want it to stop for good then use this line:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(51, 51, 51); -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:verdana, arial, helvetica, sans-serif;font-size:13px;"&gt;&lt;strong&gt;sc config beep start= disabled&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(51, 51, 51); -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:verdana, arial, helvetica, sans-serif;font-size:13px;"&gt;then use&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(51, 51, 51); -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:verdana, arial, helvetica, sans-serif;font-size:13px;"&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;strong&gt;sc config beep start= auto&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(51, 51, 51); -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:verdana, arial, helvetica, sans-serif;font-size:13px;"&gt;to turn it back on&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-6425171653150115544?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/6425171653150115544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=6425171653150115544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6425171653150115544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6425171653150115544'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/05/cool-new-trick-to-use-to-stop-system.html' title='Cool new trick to use to stop system beep'/><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-4213476024161017641.post-4830020537525341314</id><published>2010-05-11T08:50:00.000-07:00</published><updated>2010-05-11T08:55:47.832-07:00</updated><title type='text'>Some cool things I may write more about</title><content type='html'>&lt;div&gt;&lt;div class="message"&gt;on newegg 1TB drive is $70 free shipping now&lt;/div&gt;&lt;div class="message"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="message"&gt;7Gbps wireless coming in ayear or so using the 60Ghz band instead of 5&lt;/div&gt;&lt;div class="message"&gt;&lt;a href="http://www.betanews.com/article/WiGig-publishes-7-Gbps-wireless-home-networking-spec/1273504044"&gt;http://www.betanews.com/article/WiGig-publishes-7-Gbps-wireless-home-networking-spec/1273504044&lt;/a&gt;&lt;/div&gt;&lt;div class="message"&gt;&lt;div class="message_next"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="message_next"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="message_next"&gt;2TB sd cards coming&lt;/div&gt;&lt;div class="message_next"&gt;&lt;div class="message"&gt;&lt;a href="http://www.wired.com/gadgetlab/2009/01/two-terabyte-sd/"&gt;http://www.wired.com/gadgetlab/2009/01/two-terabyte-sd/&lt;/a&gt;&lt;/div&gt;&lt;div class="message_next"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="message_next"&gt;&lt;div class="message_next"&gt;connectify allows you to make your computer into a wifi access point but it requires Windows 7&lt;/div&gt;&lt;div class="message_next"&gt;the address to download: &lt;a href="http://www.connectify.me/"&gt;http://www.connectify.me/&lt;/a&gt;&lt;/div&gt;&lt;div class="message_next"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="message_next"&gt;inSSIDer&lt;/div&gt;&lt;div class="message_next"&gt;is a tool that scans your area and shows all the radios in your area and the channel they use&lt;/div&gt;&lt;div class="message_next"&gt;here is an image of it&lt;/div&gt;&lt;div class="message_next"&gt;&lt;a href="http://img.brothersoft.com/screenshots/softimage/i/inssider-226405-1238385723.jpeg"&gt;http://img.brothersoft.com/screenshots/softimage/i/inssider-226405-1238385723.jpeg&lt;/a&gt;&lt;/div&gt;&lt;div class="message_next"&gt;great tool for seeing every ones mac address and the security of all the access points&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;&lt;br /&gt;&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;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img.brothersoft.com/screenshots/softimage/i/inssider-226405-1238385723.jpeg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 600px; height: 507px;" src="http://img.brothersoft.com/screenshots/softimage/i/inssider-226405-1238385723.jpeg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="message"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="message"&gt;&lt;div class="message_next"&gt;&lt;div class="message_next"&gt; &lt;div class="message_next"&gt;&lt;br /&gt;&lt;/div&gt; &lt;div class="message_next"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4830020537525341314?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4830020537525341314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4830020537525341314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4830020537525341314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4830020537525341314'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/05/some-cool-things-i-may-write-more-about.html' title='Some cool things I may write more about'/><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-4213476024161017641.post-6280290123002722894</id><published>2010-02-21T19:05:00.000-08:00</published><updated>2010-05-18T15:37:01.682-07:00</updated><title type='text'>More Secure Passwords</title><content type='html'>One thing I have seen alot of among other computer savy friends and most of the people I know is  they all use the same user name and password when they sign up for new website  accounts. No one wants to have to remember more than one account password. And if we did use more than one password we would just add a number or increment the number by one. This is because humans have a hard time remembering more than one thing at a time when it is something they do all the time. I have  found a website I am going to try that will let you type one password and it will make new random passwords for sites without making you remember them. Once you log in to the site that remembers your passwords it will let you log into many of your favorite sites quickly and no one will be able to unlock all your passwords from these sites. It is nice because the more sites you log into the more likely you are to run into  one that is storing you password in plain text and someone might figure it out and unlock your other sites.&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;Here it is:&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="border-collapse: separate; color: rgb(0, 0, 0);  font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-family:'Times New Roman';"&gt;&lt;span class="Apple-style-span"  style="border-collapse: collapse;   text-align: left;font-family:Verdana,Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;a href="http://www.passpack.com"&gt;http://www.passpack.com&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-6280290123002722894?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/6280290123002722894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=6280290123002722894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6280290123002722894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6280290123002722894'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2010/02/more-secure-passwords.html' title='More Secure Passwords'/><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-4213476024161017641.post-8382046290684368316</id><published>2009-12-03T00:12:00.000-08:00</published><updated>2009-12-03T00:16:32.515-08:00</updated><title type='text'>I use google voice with php</title><content type='html'>I have figured out how to send make a php page use my google voice web widget dynamically! I wanted to pull numbers out of a database to call if I wanted to instead of just using it manually. I could call someone at any time programatically and they would pick up the phone and wonder who was calling them and it would be my voice mail giving them my custom message or I could tell it to call me if I want to talk to them when they pick up. I could use it to talk to someone that has a busy phone and as soon as they actually pick up it will call me. here is the php code I used to make it call someone to call me.&lt;br /&gt;&lt;br /&gt;it worked great!! I got it to work with the php code and each time I refresh the page it calls again. This is nice!&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;$url = 'https://clients4.google.com/voice/embed/webButtonConnect';&lt;br /&gt;//person wanted to call me&lt;br /&gt;$phone = '2089991234';&lt;br /&gt;$postVars = array(&lt;br /&gt; 'showCallerNumber' =&gt; '1',&lt;br /&gt; 'callerNumber' =&gt; "$phone",&lt;br /&gt; 'buttonId' =&gt; '9ea ... 91d3166',&lt;br /&gt; 'name' =&gt; 'mike'&lt;br /&gt; );&lt;br /&gt;$t = http_build_query($postVars);&lt;br /&gt;&lt;br /&gt;$ch = curl_init();&lt;br /&gt;curl_setopt($ch,CURLOPT_URL,$url);&lt;br /&gt;curl_setopt($ch,CURLOPT_POST,count($postVars));&lt;br /&gt;curl_setopt($ch,CURLOPT_POSTFIELDS,$t);&lt;br /&gt;curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt; $result = curl_exec($ch);&lt;br /&gt; curl_close($ch);&lt;br /&gt; echo $result;&lt;br /&gt;?&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8382046290684368316?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8382046290684368316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8382046290684368316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8382046290684368316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8382046290684368316'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2009/12/i-use-google-voice-with-php.html' title='I use google voice with php'/><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-4213476024161017641.post-5363998345077360768</id><published>2009-11-10T16:35:00.000-08:00</published><updated>2009-11-10T18:28:17.670-08:00</updated><title type='text'>Using Excel to read a database</title><content type='html'>I am going to make excel get data from a database.&lt;br /&gt;First you need a driver called MyODBC that will interface between  excel and the mysql server&lt;br /&gt;http://dev.mysql.com/downloads/connector/odbc/5.1.html#win32&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-5363998345077360768?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/5363998345077360768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=5363998345077360768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5363998345077360768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5363998345077360768'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2009/11/using-excel-to-read-database.html' title='Using Excel to read a database'/><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-4213476024161017641.post-4332408791649144223</id><published>2009-10-27T17:19:00.000-07:00</published><updated>2009-10-27T17:24:00.157-07:00</updated><title type='text'>Etherpad collaboration for coders</title><content type='html'>Here is a great tool that lets programmers and other people share their code among anyone in a team.&lt;br /&gt;http://etherpad.com/&lt;br /&gt;I shall try it and report back.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-4332408791649144223?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/4332408791649144223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=4332408791649144223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4332408791649144223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/4332408791649144223'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2009/10/etherpad-collaboration-for-coders.html' title='Etherpad collaboration for coders'/><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-4213476024161017641.post-239101756621612047</id><published>2009-10-25T22:32:00.000-07:00</published><updated>2009-10-25T22:35:57.638-07:00</updated><title type='text'>Lego land on street view</title><content type='html'>So google is now mapping places like Lego land and not just on the streets.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/trike"&gt;http://www.google.com/trike&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;here are some places they are mapping&lt;br /&gt;&lt;ul class="samples"&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://maps.google.com/?ie=UTF8&amp;amp;ll=33.126051,-117.311454&amp;amp;spn=0,359.956269&amp;amp;z=15&amp;amp;layer=c&amp;amp;cbll=33.125949,-117.311426&amp;amp;panoid=Xze3yHzz_ZiA7ofpeZsutQ&amp;amp;cbp=12,355.52,,0,5.71&amp;amp;utm_campaign=en&amp;amp;utm_medium=lp&amp;amp;utm_source=en-lp-na-us-gns-svn"&gt;LEGOLAND California&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://maps.google.com/?ie=UTF8&amp;amp;ll=32.775855,-117.071793&amp;amp;spn=0,359.978135&amp;amp;z=16&amp;amp;layer=c&amp;amp;cbll=32.775851,-117.071892&amp;amp;panoid=_LuCH0jWiO0uGHlFCm6UVw&amp;amp;cbp=12,3.07,,0,-1.71&amp;amp;utm_campaign=en&amp;amp;utm_medium=lp&amp;amp;utm_source=en-lp-na-us-gns-svn"&gt;&lt;img src="http://maps.google.com/help/maps/images/sdsu.jpg" /&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://maps.google.com/?ie=UTF8&amp;amp;ll=32.775855,-117.071793&amp;amp;spn=0,359.978135&amp;amp;z=16&amp;amp;layer=c&amp;amp;cbll=32.775851,-117.071892&amp;amp;panoid=_LuCH0jWiO0uGHlFCm6UVw&amp;amp;cbp=12,3.07,,0,-1.71&amp;amp;utm_campaign=en&amp;amp;utm_medium=lp&amp;amp;utm_source=en-lp-na-us-gns-svn"&gt;San Diego State University&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://maps.google.com/maps?ie=UTF8&amp;amp;ll=34.007962,-118.499168&amp;amp;spn=0,359.825077&amp;amp;z=13&amp;amp;layer=c&amp;amp;cbll=34.008028,-118.499088&amp;amp;panoid=59fEuFakYSRK2kasR05cHw&amp;amp;cbp=12,51.56,,0,3.41&amp;amp;utm_campaign=en&amp;amp;utm_medium=lp&amp;amp;utm_source=en-lp-na-us-gns-svn"&gt;&lt;img src="http://maps.google.com/help/maps/images/pier.jpg" /&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://maps.google.com/maps?ie=UTF8&amp;amp;ll=34.007962,-118.499168&amp;amp;spn=0,359.825077&amp;amp;z=13&amp;amp;layer=c&amp;amp;cbll=34.008028,-118.499088&amp;amp;panoid=59fEuFakYSRK2kasR05cHw&amp;amp;cbp=12,51.56,,0,3.41&amp;amp;utm_campaign=en&amp;amp;utm_medium=lp&amp;amp;utm_source=en-lp-na-us-gns-svn"&gt;Santa Monica Pier&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&lt;li style="margin-right: 0pt;"&gt; &lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;sll=36.612634,-121.896229&amp;amp;sspn=0.055392,0.087547&amp;amp;ie=UTF8&amp;amp;radius=2.43&amp;amp;rq=1&amp;amp;layer=c&amp;amp;cbll=36.621652,-121.910619&amp;amp;panoid=WV94NhZSUVVRx-5eXI3PRg&amp;amp;cbp=12,109.849930863999,,0,4.116386554621843&amp;amp;ll=36.621659,-121.910648&amp;amp;spn=0,359.867821&amp;amp;z=14&amp;amp;utm_campaign=en&amp;amp;utm_medium=lp&amp;amp;utm_source=en-lp-na-us-gns-svn"&gt;&lt;img src="http://maps.google.com/help/maps/images/monterey.jpg" /&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;sll=36.612634,-121.896229&amp;amp;sspn=0.055392,0.087547&amp;amp;ie=UTF8&amp;amp;radius=2.43&amp;amp;rq=1&amp;amp;layer=c&amp;amp;cbll=36.621652,-121.910619&amp;amp;panoid=WV94NhZSUVVRx-5eXI3PRg&amp;amp;cbp=12,109.849930863999,,0,4.116386554621843&amp;amp;ll=36.621659,-121.910648&amp;amp;spn=0,359.867821&amp;amp;z=14&amp;amp;utm_campaign=en&amp;amp;utm_medium=lp&amp;amp;utm_source=en-lp-na-us-gns-svn"&gt;Monterey Bay Bike Trail&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;      They are accepting suggestions for places to map until Wednesday October 28, 2009&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-239101756621612047?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/239101756621612047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=239101756621612047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/239101756621612047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/239101756621612047'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2009/10/lego-land-on-street-view.html' title='Lego land on street view'/><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-4213476024161017641.post-8241218108550685201</id><published>2009-10-25T22:30:00.000-07:00</published><updated>2009-10-25T22:32:42.913-07:00</updated><title type='text'>rome Catacombs in 3d</title><content type='html'>&lt;p&gt;Very cool 3d mapping of underground catacombs.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;But, until now, they have never been fully documented, their vast scale only recorded with handmade maps. &lt;/p&gt;   &lt;p&gt;That is now changing, following a three-year project to create the first fully comprehensive three-dimensional image using laser scanners. &lt;/p&gt;&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/2/hi/europe/8027650.stm"&gt;http://news.bbc.co.uk/2/hi/europe/8027650.stm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8241218108550685201?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8241218108550685201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8241218108550685201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8241218108550685201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8241218108550685201'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2009/10/rome-catacombs-in-3d.html' title='rome Catacombs in 3d'/><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-4213476024161017641.post-8823898035290094954</id><published>2009-10-13T12:11:00.000-07:00</published><updated>2009-10-13T12:47:15.787-07:00</updated><title type='text'>Creating html emails</title><content type='html'>I have learned how to use php to put html into emails!&lt;br /&gt;This will be useful.&lt;br /&gt;&lt;?php&lt;br /&gt;$admin= "emailfrom@gmail.com";&lt;br /&gt;$email = "emailto@gmail.com";&lt;br /&gt;$subject = "HTML in email";&lt;br /&gt;$message = "&lt;p style="'color:green;"&gt;";&lt;br /&gt;$headers = "MIME-Version: 1.0\nContent-type: text/html; charset=UTF-8\n";&lt;br /&gt;//$headers = "To: $firstname $lastname &lt;$email&gt;\n";&lt;br /&gt;$headers .= "From: Your Agri-med Perscription &lt;$admin&gt;\n";&lt;br /&gt;$mail = mail($email, $subject, $message, $headers);&lt;br /&gt;if($mail) echo "The email has been send.";&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;So that is all that is required. There are many email clients out there such as yahoo, gmail, hotmail, outlook&lt;br /&gt;and they all see html in emails differently. They all have different support for html and css. Test your emails out with as many of these as you can to make sure your email styles are supported.&lt;br /&gt;&lt;br /&gt;look at this page to learn what your emails look like in different clients and what features each support.&lt;br /&gt;&lt;a href="http://www.email-standards.org/clients/"&gt;http://www.email-standards.org/clients/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8823898035290094954?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8823898035290094954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8823898035290094954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8823898035290094954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8823898035290094954'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2009/10/creating-html-emails.html' title='Creating html emails'/><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-4213476024161017641.post-2570090737201795268</id><published>2009-10-07T23:03:00.000-07:00</published><updated>2009-10-07T23:34:16.144-07:00</updated><title type='text'>Google Barcodes</title><content type='html'>Today we had a barcode that said google on the home page.I learned that there is a really cool project google has been working on.&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0pt; padding: 0px; float: left;" src="http://chart.apis.google.com/chart?cht=qr&amp;amp;chs=200x200&amp;amp;chl=I+am+sending+this+text+to+show+that+you+can+save+any+data+in+a+barcode%2C+even+a+whole+book%21&amp;amp;chld=L%7C0" /&gt;&lt;br /&gt;This is a cool new type of barcode I have not heard of before. The QR code is a way to put up to 4000 letter characters and 10000 numbers in a barcode. I love the fact that you can control the level of accuracy. You can make it so between 7 and 30% of the barcode could be covered and unreadable and no data will be lost because the data is redundant like RAR files can be. It is like stiped harddrives in the way that if one of them is destroyed the others still have the files that were lost on the harddrive that failed. Read about how google charts API works to let you make these cool barcodes.&lt;br /&gt;&lt;a href="http://code.google.com/apis/chart/types.html#qrcodes"&gt;http://code.google.com/apis/chart/types.html#qrcodes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can also use it to store a contact including about 10 different parts to it.&lt;br /&gt;It can store a geographic location including how many meters above the area.&lt;br /&gt;It can also store a SMS message, or an e-mail or a calendar event. Try out generating these barcodes and more in the following online demo.&lt;br /&gt;&lt;a href="http://zxing.appspot.com/generator/"&gt;http://zxing.appspot.com/generator/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;These barcodes will someday be used more as maybe something that can add events to your google calendar or add anyones contact info from a book into your email profile. Mobile phones can read these barcodes and so it is a pretty new technology that will be helpful to someone someday.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2570090737201795268?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2570090737201795268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2570090737201795268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2570090737201795268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2570090737201795268'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2009/10/google-barcodes.html' title='Google Barcodes'/><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-4213476024161017641.post-2751681320419439371</id><published>2008-04-10T10:55:00.000-07:00</published><updated>2008-04-10T11:05:02.958-07:00</updated><title type='text'>re enabling the backspace in Ubuntu firefox</title><content type='html'>I have been using firefox in windows for a long time. I like pressing the backspace when I want to go back in the browser. I have switched to Linux and noticed that the default behavior for the back space and shift backspace is a page up and page down. I found a way to fix this issue from this sie &lt;a href="http://lifehacker.com/software/firefox-tip/set-backspaces-firefox-behavior-269945.php"&gt;here.&lt;/a&gt;&lt;br /&gt;I will tell you how it is done encase the link doesn't work. In fire fox type about:config in the url address bar. Then find the preference name: "browser.backspace_action". Change its value to 0 to chage the default behavior of the backspace to really go back in the browser. Then shift backspace will go forword also. I really like this fix. Leave comments if you liked this article.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2751681320419439371?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2751681320419439371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2751681320419439371' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2751681320419439371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2751681320419439371'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2008/04/re-enabling-backspace-in-ubuntu-firefox.html' title='re enabling the backspace in Ubuntu firefox'/><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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4213476024161017641.post-1703485329309197888</id><published>2008-01-20T20:28:00.000-08:00</published><updated>2008-01-20T20:35:16.749-08:00</updated><title type='text'>IGoogle is not permanent any more</title><content type='html'>Some people say once you go to igoogle.com and start personalizing a google page then you can't get to plain google by clicking on your home page any more. Well I figured a way around it.&lt;br /&gt;Type this in for your home page: http://www.google.com/url?sa=p&amp;amp;pref=ig&amp;amp;pval=1&amp;amp;q=/webhp&lt;br /&gt;Then when you go to the home page it will be go straight to the classic home instead of going to igoogle.com.  Have a great day.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1703485329309197888?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1703485329309197888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1703485329309197888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1703485329309197888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1703485329309197888'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2008/01/igoogle-is-not-permanent-any-more.html' title='IGoogle is not permanent any more'/><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-4213476024161017641.post-7212886306247730232</id><published>2007-12-01T18:05:00.000-08:00</published><updated>2007-12-01T18:13:39.371-08:00</updated><title type='text'>A little change</title><content type='html'>I am going to start to blog about some nice programs that help me get things done better and some of the nice thing they help me do. I use a program called DAEMON Tools to use ISO images on my computer. I also found a couple other tools that are like it. To download DAEMON Tools go to this website: http://www.disc-tools.com/download/daemon&lt;br /&gt;This tool lets you load an ISO image on to your computer as an extra letter even though you have just one drive in your computer. You can actually have as many drives as you have letters in the alphabet. There are other types of images too such as .bin and .nrg and .cue files. Sometimes .cue and .bin files go together. You place the cue and bin in one folder. The cue file is very small. Then you point Nero to the cue file and it burns the .bin file for you.  That is good for now.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-7212886306247730232?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/7212886306247730232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=7212886306247730232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7212886306247730232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7212886306247730232'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2007/12/little-change.html' title='A little change'/><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-4213476024161017641.post-2270062723305796959</id><published>2007-11-11T14:09:00.001-08:00</published><updated>2009-10-07T19:16:00.501-07:00</updated><title type='text'>Welcome</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204); font-family: trebuchet ms,geneva;font-size:180%;" &gt;Welcome to Zoho Writer&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style="font-family:trebuchet ms,geneva;"&gt;Your Word Processor on the Web&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms,geneva;"&gt;Thanks for signing up with Zoho Writer!&lt;br /&gt;&lt;br /&gt;Zoho Writer is the word processor designed for you, the next generation web citizen. Built using AJAX technology, it's fast and revolutionizes the way you work with documents. Having all your documents online (and offline too! we'll get back to that later!!), you have access to them from any computer, at home or at work. And no more emailing them back-and-forth to your colleagues, clients or friends for review, thanks to its instant collaboration, inline commenting and chat facilities.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;It will take a lot more than this short welcome document to list all of Zoho Writer's features and hence a chosen few of the Zoho Writer's functionalities below :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);"&gt;Formatting Options:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;Bold&lt;/span&gt;,&lt;span style="font-style: italic;"&gt; italicize&lt;/span&gt;,&lt;span style="text-decoration: underline;"&gt; underline&lt;/span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: rgb(141, 201, 25);font-family:trebuchet ms,geneva;" &gt;&lt;span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; set back ground color&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span&gt;  &amp;amp; &lt;span style="color: rgb(255, 0, 0);"&gt;color&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt; your&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt; words&lt;/span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span&gt;&lt;a href="http://zoho.com/"&gt; link to a web page&lt;/a&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span&gt;Set margins,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span&gt; use cool smileys &lt;img alt="cool" src="http://zoho.com/images/zwprdimgs/smiley-cool.gif" border="0" /&gt;&lt;/span&gt; and do much more. Use the same keyboard shortcuts as with any other word processing application for accessing these functions.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 153, 204); font-family:trebuchet ms,geneva;" &gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;No Searching Within Menus:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;Most functions are available at a click, thanks to the friendly toolbar. And for the super user in you, a few extra features are accessible with just an extra click.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;br /&gt;&lt;img name="toolbar.png" src="http://zoho.com/images/zwprdimgs/toolbar.png" align="bottom" border="1" hspace="0" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold; font-family:trebuchet ms,geneva;" &gt;&lt;span&gt;&lt;span style="color: rgb(0, 153, 204);"&gt;Spell Check&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;What's a word processor without a spell checker? Zoho Writer's does all the dirty spell checking work for you so that you needn't worry about whether it's receive or recieve &lt;span style="color: rgb(255, 102, 0);"&gt;&lt;img alt="wink" src="http://zoho.com/images/zwprdimgs/smiley-wink.gif" align="absmiddle" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;table style="width: 100%; height: 275px;" border="1" cellpadding="0" rules="none" frame="void"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);font-family:trebuchet ms,geneva;" &gt;Pictures&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 315px;" valign="top"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align: justify;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;Want to decorate your document with pictures &amp;amp; images? Insert pictures and images in your Zoho Writer documents as you would in a normal word processor. Pull and place pictures both from your desktop as well as from the web.&lt;br /&gt;&lt;br /&gt;See how the image/picture looks like using 'Image Preview'. Shrink to fit in case the image/pic is of larger size.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;And set properties for the inserted pic/image like border, spacing as well.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;span style="font-size:100%;"&gt;&lt;img src="http://zoho.com/images/zwprdimgs/beach.jpg" style="width: 300px; height: 227px;" align="bottom" border="1" hspace="5" /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;/span&gt;&lt;table style="width: 100%;" border="1" cellpadding="0" rules="none" frame="void"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="width: 190px;" valign="top"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms,geneva;" &gt;&lt;span&gt;Tags as Folders&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204); font-family:trebuchet ms,geneva;" &gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;img name="tag.png " src="http://zoho.com/images/zwprdimgs/tag.png" align="bottom" border="1" hspace="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="color: rgb(102, 102, 102);"&gt;Get the best of both worlds&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;. Tags are the new folders. Not sure whether you want to put a document in the &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(102, 102, 102); font-style: italic;"&gt;Sales &lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;or &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(102, 102, 102); font-style: italic;"&gt;Marketing &lt;/span&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;folder? That's where tags-as-folders come in. Make the document available in both the folders! Now, isn't that handy?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:100%;"&gt;Post to your blog&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="color: rgb(102, 102, 102); text-align: justify;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;Being on the web, you can post to your blog from within Zoho Writer. As you have seen above, Zoho Writer's WYSIWYG editor is more feature-rich than a typical blog editor's. Be it Blogger.com, Wordpress.com, Livejornal, Typepad or any blog that supports metaWeblog API, you can make the post from Zoho Writer. You can add tags and make the post optionally as a draft as well!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;img name="blog.png" src="http://zoho.com/images/zwprdimgs/blog.png" align="bottom" border="0" hspace="0" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="width: 624px; background-image: none; float: none; text-align: left; vertical-align: top; height: 174px;" border="0" cellpadding="0" rules="none" frame="void"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="2" style="width: 50%;" height="20" valign="top"&gt;&lt;span style=" color: rgb(102, 102, 102);font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 153, 204);"&gt;&lt;span style="font-size:100%;"&gt; Comments&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=" color: rgb(102, 102, 102);font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;Add inline comments to particular paragraphs /sentences of a document. You &amp;amp; your friends (or your team members &amp;amp; your boss) canadd comments in a document you are collaborating on. Adding contextual comments is very useful for reviewing purposes. And this comes in handy for journalists/editors &amp;amp; teachers/students, in particular.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 50%;" valign="top"&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;img name="comments.jpg" src="http://zoho.com/images/zwprdimgs/comments.jpg" align="right" border="0" hspace="0" vspace="0" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="width: 50%;" valign="top"&gt;&lt;div style="text-align: right;"&gt;&lt;span style=" color: rgb(102, 102, 102);font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=" color: rgb(102, 102, 102);font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);"&gt;&lt;span style="font-size:100%;"&gt;Bulleted Lists&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Zoho Writer makes it easy&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol style="color: rgb(102, 102, 102);"&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;to have&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;numbered or&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="list-style-type: none; list-style-image: none; list-style-position: outside;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;bulleted lists.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;And there is support for&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;multiple levels as well&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="list-style-type: none; list-style-image: none; list-style-position: outside;"&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:100%;"&gt;Insert Tables&lt;/span&gt; &lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;&lt;span style="font-family:trebuchet ms,geneva;"&gt;&lt;span style="font-size:85%;"&gt;Make tables and adjust the cell properties with ease. Pick easily the number of rows/columns.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;table style="width: 100%;" border="1" cellpadding="7" rules="all" frame="box"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background-image: none; vertical-align: top; width: 25%; background-color: rgb(132, 199, 237); text-align: left;" valign="top"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-family:trebuchet ms,geneva;"&gt;&lt;span style="font-size:85%;"&gt;Column Header1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 33.33%; background-color: rgb(132, 199, 237);" valign="top"&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;Column Header2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 33.33%; background-color: rgb(132, 199, 237);" valign="top"&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;Column Header3&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="width: 25%; font-family: trebuchet ms,geneva;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;Table Cell 11&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 33.33%; font-family: trebuchet ms,geneva;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;Table Cell 12&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 33.33%; font-family: trebuchet ms,geneva;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;Table Cell 13&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="width: 25%; font-family: trebuchet ms,geneva;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;Table Cell 21&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 33.33%; font-family: trebuchet ms,geneva;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;Table Cell 22&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 33.33%; font-family: trebuchet ms,geneva;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;Table Cell 23&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="width: 25%; font-family: trebuchet ms,geneva;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;Table Cell 31&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 33.33%; font-family: trebuchet ms,geneva;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;Table Cell 32&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 33.33%; font-family: trebuchet ms,geneva;" valign="top"&gt;&lt;span style="font-size:85%;"&gt;Table Cell 33&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;table style="width: 100%; height: 305px;" border="1" cellpadding="0" rules="none" frame="void"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="width: 50%;" valign="top"&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);"&gt;&lt;span style="font-size:100%;"&gt;Share your documents&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="width: 50%;" valign="top"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="width: 50%; text-align: justify;" valign="top"&gt;&lt;span style="color: rgb(102, 102, 102);font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;Instead of mailing your documents to everyone, share them. And Zoho Writer makes it more than just sharing.&lt;br /&gt;&lt;br /&gt;You can give Read or Write permissions for each sahring participant. Collaborate real-time on the document and there's the added chat functionality as well!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="width: 50%; text-align: right;" valign="top"&gt;&lt;img name="share-documents.jpg" src="http://zoho.com/images/zwprdimgs/share-documents.jpg" align="bottom" border="1" hspace="10" /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: right;" align="left"&gt;&lt;/div&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);"&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);"&gt;&lt;span style="font-size:100%;"&gt;Go Offline&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);"&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: justify; color: rgb(102, 102, 102);"&gt;&lt;span style=" font-weight: normal;font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;Not sure you'll have internet access all the time? Zoho Writer allows you to take your documents offline. You can view your latest 25 documents now but editing support is coming soon. Stay tuned!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: rgb(102, 102, 102);font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="color: rgb(102, 102, 102); text-align: justify;"&gt;&lt;table style="width: 100%;" border="1" cellpadding="0" rules="none" frame="void"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="width: 75%;" valign="top"&gt;&lt;span style="color: rgb(0, 153, 204); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Integration With Other Zoho Apps&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="width: 25%;" valign="top"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="width: 50%;" valign="top"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;Zoho Writer comes from the widely diversied stable of Zoho. Signing up with Zoho Writer allows you to access a plethora of Zoho apps - be it our web based spreadsheet tool, Zoho Sheet, the online presentation creator, Zoho Show or the net meeting enabler, Zoho Meeting.&lt;/span&gt;&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;The integration doesn't stop with just single sign-on. You can embed sheets and slideshows. And here's more - any change done to the sheet/slideshow gets automatically reflected in your Zoho Writer document!&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="color: rgb(102, 102, 102);"&gt;&lt;span style="font-size:85%;"&gt;Those are just a few things that can be done with Zoho Writer. You will get to discover more as you work with Zoho Writer.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style="width: 50%;" valign="top"&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;img name="switchto.png" src="http://zoho.com/images/zwprdimgs/switchto.png" align="bottom" border="1" hspace="15" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;span style="font-size:85%;"&gt;We have a very active forums at &lt;a href="http://forums.zohowriter.com/" target="_blank"&gt;http://forums.zohowriter.com&lt;/a&gt;. And your queries, valuable feedback comments are most welcome at &lt;a href="mailto:feedback@zohowriter.com?subject=" target="_blank"&gt;feedback@zohowriter.com&lt;/a&gt; as well.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms,geneva;" &gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 204);"&gt;&lt;span style="color: rgb(102, 102, 102); font-family:trebuchet ms,geneva;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms,geneva;"&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;&lt;span style="font-size:85%;"&gt;Again, thanks for signing up with Zoho!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2270062723305796959?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2270062723305796959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2270062723305796959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2270062723305796959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2270062723305796959'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2007/11/welcome.html' title='Welcome'/><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-4213476024161017641.post-8605830347905851076</id><published>2007-08-13T23:41:00.000-07:00</published><updated>2007-08-13T23:47:18.986-07:00</updated><title type='text'>How to change IP address from the Windows command line</title><content type='html'>&lt;h2&gt;Check out this web page:&lt;/h2&gt;&lt;span style="font-size:85%;"&gt;http://www.daybarr.com/blog/2007/05/11/how-to-change-ip-address-from-the-windows-command-line&lt;br /&gt;It explains how to use comand prompt to change your ip address, gateway and dns servers plus how to chage it back to dhcp again. It uses netsh.&lt;br /&gt;This is how you set your ip address, subnet mask and gateway:&lt;br /&gt;&lt;br /&gt;netsh interface ip set address "Local Area Connection" static 192.168.1.140 255.255.255.0 192.168.1.1 1&lt;br /&gt;netsh interface ip set dns "Local Area Connection" static 4.2.2.2 primary&lt;br /&gt;&lt;br /&gt;Then back to DHCP&lt;br /&gt;netsh interface ip set address "Local Area Connection" dhcp&lt;br /&gt;netsh interface ip set dns "Local Area Connection" dhcp&lt;br /&gt;&lt;br /&gt;This is so helpful. You just put this code in to a text file and change the extension from txt to cmd. Then you can open it and it will set your ip address. Then have another file that will change it back to DHCP again.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8605830347905851076?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8605830347905851076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8605830347905851076' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8605830347905851076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8605830347905851076'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2007/08/how-to-change-ip-address-from-windows.html' title='How to change IP address from the Windows command line'/><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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4213476024161017641.post-1802174839097912697</id><published>2007-08-09T17:57:00.000-07:00</published><updated>2007-08-09T18:01:39.335-07:00</updated><title type='text'></title><content type='html'>The AMD Phenom™ Processor will be here by the end of 2007!&lt;br /&gt;&lt;br /&gt;It will have four cores and will have a range of speed of 1.8-2.3 Ghz at first.&lt;br /&gt;&lt;br /&gt;I can't wait till DDR3 gets cheaper. Right now it costs $400-500 to get 1GB. DDR2 costs $40-50 for the same amount with a speed of 800Mhz. DDR3 has speeds of 1066-1333Mhz. &lt;a href="http://www.extremetech.com/article2/0,1697,2159795,00.asp"&gt;Look at this bench marking site comparing the two.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After reading the above article you will notice that DDR3 has barely any improvement on DDR2. Someone should test them in a 64bit Windows Vista computer and see if there is any improvement then.&lt;br /&gt;&lt;br /&gt;There is another nice technology that is coming called bluetooth 3.0 which is supposed to greatly speed up the transfer of data wirelessly to other bluetooth devices. Right now with version 2 the speed is 3Mbps. Well when the new version 3 comes out that speed will be increased to 480Mbps which is like firewire and USB2.0!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oi-us.com/Dynamic/News,intLangID,1,intCategoryID,11,intItemID,43.html"&gt;I like this article about the 480Mbps speed&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The current standard version 2 uses the 2.4Ghz band. &lt;a href="http://www.twice.com/article/CA6428041.html"&gt;Here is a quote from the following site:&lt;/a&gt; "In other developments, the SIG said it continues to work with the &lt;span&gt;WiMedia Alliance to incorporate 6GHz-band ultra-wideband technology into the 3.0 version of the specification, tentatively dubbed High Speed Bluetooth. The 480+Mbps spec is due by the end of the year, about six months behind what the SIG called an aggressive schedule announced last year.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-1802174839097912697?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/1802174839097912697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=1802174839097912697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1802174839097912697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/1802174839097912697'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2007/08/amd-phenom-processor-will-be-here-by.html' title=''/><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-4213476024161017641.post-6559531858733039180</id><published>2007-02-04T14:09:00.000-08:00</published><updated>2007-02-04T14:16:53.166-08:00</updated><title type='text'>My Goal for Ubuntu is compatability with Windows</title><content type='html'>I am starting to use Ubuntu Linux on my home built computer. I love using this new operating system.&lt;br /&gt;I like it better than Windows XP.&lt;br /&gt;I post some snags that some people might run into when they try Ubuntu. There isn't anything that Ubuntu willl not do. If you are having trouble with anything email me and I will try to help. Look at my posts and you might find out how to fix a problem you are having. My goal is to find a way to do anything windows can do. So far in my adventures it is compatible.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-6559531858733039180?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/6559531858733039180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=6559531858733039180' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6559531858733039180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/6559531858733039180'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2007/02/my-goal-for-ubuntu-is-compatability.html' title='My Goal for Ubuntu is compatability with Windows'/><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-4213476024161017641.post-5749264521098772942</id><published>2007-01-26T00:27:00.000-08:00</published><updated>2007-01-26T00:48:00.820-08:00</updated><title type='text'>Installing flash 9 in ubuntu</title><content type='html'>I wanted to look at the stock market in google:&lt;br /&gt;&lt;a href="http://finance.google.com/finance?q=goog&amp;hl=en"&gt;http://finance.google.com/finance?q=goog&amp;amp;hl=en&lt;/a&gt;&lt;br /&gt;When I right clicked on the flash program which is the moving chart I noticed that I was using version 7. The newest version is 9.&lt;br /&gt;These instructions are for firefox in Ubuntu Edgy Eft.&lt;br /&gt;First click tools and add-ons. Then click on plugins, then go down and click on flash version 9 for windows. It takes you here: &lt;a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"&gt;http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&lt;/a&gt;&lt;br /&gt; Download option 1. Open the archive file you just downloaded called: install_flash_player_9_linux.tar.gz and click extract and then extract again and it goes it to a folder on the desktop.&lt;br /&gt;Next open a terminal and type:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cd Desktop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;next, type:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cd install_flash_player_9_linux&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;this takes you into the file that was extracted to the desktop. Now type:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sudo ./flashplayer-installer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;now it asks you the root password. Then it asks you for the directory where firefox or what ever browzer you use is. I typed the following:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/usr/lib/firefox&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;then it will install to that dir ectory, press enter and it should say finished installing.&lt;br /&gt;Now go here and right click on flash movie to see what version you are using.&lt;br /&gt;&lt;a href="http://finance.google.com/finance?q=goog&amp;hl=en"&gt;http://finance.google.com/finance?q=goog&amp;amp;hl=en&lt;/a&gt;&lt;br /&gt;good luck &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-5749264521098772942?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/5749264521098772942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=5749264521098772942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5749264521098772942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5749264521098772942'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2007/01/installing-flash-9-in-ubuntu.html' title='Installing flash 9 in ubuntu'/><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-4213476024161017641.post-2431763954152884516</id><published>2007-01-17T19:58:00.000-08:00</published><updated>2007-01-17T20:17:13.407-08:00</updated><title type='text'>Force ubuntu to keep old package installed</title><content type='html'>I use vnc to login as another user on my computer from another computer.  I can even login as another user from anywhere that has the internet. My vnc program was uptodate and it doesn't work unless I use the last version of vnc4server. So I open synaptic package manager and find vnc4server. The version I use that works is 4.1.1+xorg1.0.2-0ubuntu1. This version is for Edgy but a new update came called edgy security. When I install this version I can't login to one of my users from another computer while I am already logged on in the physical computer. So I clicked on vnc4server in synaptic package manager and clicked on package tab and force version then I chose the older release. Now the problem is when I turn on my computer the auto updater keeps bugging me so I found a work-around.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-2431763954152884516?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/2431763954152884516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=2431763954152884516' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2431763954152884516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/2431763954152884516'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2007/01/force-ubuntu-to-keep-old-package.html' title='Force ubuntu to keep old package installed'/><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-4213476024161017641.post-8529739712622219189</id><published>2006-12-25T11:16:00.000-08:00</published><updated>2006-12-25T11:30:02.269-08:00</updated><title type='text'>Installing GLX and Beryl using Gnome and Nvidia</title><content type='html'>I got this info from:&lt;br /&gt;http://www.ubuntuforums.org/showthread.php?t=127090&lt;br /&gt;First click System-Administration-Synaptic Package Manager&lt;br /&gt;It usually asks for your password to continue. Click on Reload to download the most recent package list. Next click Mark All Upgrades, Apply to install any upgrades available.&lt;br /&gt;Next open Settings and then Software Sources, I have the first four boxes checked including (multiverse).&lt;br /&gt;Click on third party tab and click add button. Add this line:&lt;br /&gt;http://nvidia.limitless.lupine.me.uk/ubuntu edgy stable&lt;br /&gt;deb http://ubuntu.beryl-project.org edgy main&lt;br /&gt;This is the key for beryl for i386 or 64bit. Download the following file to the desktop.&lt;br /&gt;http://ubuntu.beryl-project.org/root@lupine.me.uk.gpg&lt;br /&gt;do a reload and update again&lt;br /&gt;find and uninstall nvidia-glx and nvidia-kernel-common&lt;br /&gt;I only had nvidia-kernel-common installed so I uninstalled it.&lt;br /&gt;now reload and update&lt;br /&gt;remove xorg-common and install xserver-xorg&lt;br /&gt;This will install Xorg 7.0, which is very compatible with Xgl.&lt;br /&gt;Next search for nvidia-glx and check it to be installed. Make sure nvidia-kernel-common is due to be installed then click apply. It will take a while to download, It was about 30Mb and 4 files for me.&lt;br /&gt;Then save a copy of your xorg.conf file just incase the follow changes make it so you can't get back in to your gui user interface.&lt;br /&gt;sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf_backup1&lt;br /&gt;Now edit the xorg.conf file like this:sudo nano -w /etc/X11/xorg.conf or sudo gedit /etc/X11/xorg.conf&lt;br /&gt;under the Section "Module" add # on the following lines like this:&lt;br /&gt;#       Load    "GLcore"&lt;br /&gt;#       Load    "dri" &lt;-- Ati users should not include # Let it load dri.&lt;br /&gt;and add following line&lt;br /&gt;&lt;br /&gt;Load "glx"&lt;br /&gt;&lt;br /&gt;When you are done, it should look something like this:&lt;br /&gt;Section "Module"&lt;br /&gt;#          Load        "GLcore"&lt;br /&gt;           Load         "i2c"&lt;br /&gt;           Load         "bitmap"&lt;br /&gt;           Load         "ddc"&lt;br /&gt;#          Load       "dri" &lt;--  the # should only be applied by nvidia owners&lt;br /&gt;           Load         "extmod"&lt;br /&gt;           Load         "freetype"&lt;br /&gt;           Load         "glx"&lt;br /&gt;           Load         "int10"&lt;br /&gt;           Load         "type1"&lt;br /&gt;           Load         "vbe"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;nder Section "Device", have it look something like this:&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;       Identifier      "NVIDIA Corporation NV40 [GeForce 6800 LE]"&lt;br /&gt;       Driver          "nvidia" &lt;--- ATI users should use the fglrx driver&lt;br /&gt;       BusID           "PCI:1:0:0"&lt;br /&gt;       Option "NvAGP" "1"        &lt;-- Ati users can ignore this.&lt;br /&gt;       Option          "RenderAccel"           "true"      &lt;-- Ati users can probably ignore this. Don't think drivers support it&lt;br /&gt; &lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;when glx-nvidia is installed corectly then check to see if direct rendering is working.&lt;br /&gt;type in a terminal:glxinfo&lt;br /&gt;&lt;br /&gt;If it is working then the results will be: direct rendering=yes&lt;br /&gt;If this is right then you did everything right and beryl can be installed.&lt;br /&gt;&lt;br /&gt;Next find and install beryl-manager using Synaptic pkg manager&lt;br /&gt;also find emerald and emerald-themes, click to install them. This should give a whole list of all the files to be installed:&lt;br /&gt;beryl&lt;br /&gt;beryl-core&lt;br /&gt;beryl-manager&lt;br /&gt;beryl-plugins&lt;br /&gt;beryl-plugins-data&lt;br /&gt;beryl-settings (version&lt;br /&gt;emerald&lt;br /&gt;libberylsettings0&lt;br /&gt;libemeraldengine0&lt;br /&gt;libxcomposite1&lt;br /&gt;click apply&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-8529739712622219189?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/8529739712622219189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=8529739712622219189' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8529739712622219189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/8529739712622219189'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2006/12/installing-glx-and-beryl-using-gnome.html' title='Installing GLX and Beryl using Gnome and Nvidia'/><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4213476024161017641.post-5247411723972729323</id><published>2006-12-25T10:35:00.000-08:00</published><updated>2006-12-25T10:38:32.595-08:00</updated><title type='text'>I changed permission of home folder with bad results</title><content type='html'>I acidentally changed the permisions in my home directory.&lt;br /&gt;When I restarted the computer I was welcomed with this message&lt;br /&gt;&lt;br /&gt;your $HOME/.dmrc file has incorrect permissions and is being&lt;br /&gt;ignored. .dmrc file sould be owned by user and have 644 permissions. It also said that It needs the right permisions to write to the .dmrc file. And other user can't have access to it.&lt;br /&gt;That is wht I did. I changed the permisions so everyone can access my home/user folder. Then this message came up when I rebooted.&lt;br /&gt;I messed with the settings of my home foler and then when I logged back in it was a blank desktop and then it logged off after 5 seconds or so.&lt;br /&gt;&lt;br /&gt;I found a site that helped me fix this problem. I used another user to search the internet:&lt;br /&gt;http://ubuntuforums.org/archive/index.php/t-91455.html&lt;br /&gt;Then I loged off and pressed ctrl-alt F1 to switch to the terminal. I logged on and typed the following code.&lt;br /&gt;&lt;br /&gt;cd ~&lt;br /&gt;sudo chmod 644 .dmrc&lt;br /&gt;sudo chown username .dmrc&lt;br /&gt;sudo chmod 755 /home/username&lt;br /&gt;sudo chown username /home/username&lt;br /&gt;&lt;br /&gt;then type this to check permissions:&lt;br /&gt;ls .dmrc -l&lt;br /&gt;it gave me this:&lt;br /&gt;-rw-r--r-- 1 mike mike 26 2006-12-20 22:24 .dmrc&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-5247411723972729323?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/5247411723972729323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=5247411723972729323' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5247411723972729323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/5247411723972729323'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2006/12/i-changed-permission-of-home-folder.html' title='I changed permission of home folder with bad results'/><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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4213476024161017641.post-7159731480801462263</id><published>2006-12-20T14:12:00.000-08:00</published><updated>2006-12-20T14:17:03.116-08:00</updated><title type='text'>Installing Quicktime plug-in for Firefox.</title><content type='html'>I am trying to install quick time to play streaming trailors on quicktime.com&lt;br /&gt;I installed gxine and gxineplugin. Now when I try playing a streaming movie it opens gxine and says buffering %19 and at the same time it will start playing and the buffering will stay at that percent but the screen is blank.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-7159731480801462263?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/7159731480801462263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=7159731480801462263' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7159731480801462263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7159731480801462263'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2006/12/installing-quicktime-plug-in-for.html' title='Installing Quicktime plug-in for Firefox.'/><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>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4213476024161017641.post-817195401604348530</id><published>2006-12-20T14:01:00.000-08:00</published><updated>2006-12-20T14:19:06.268-08:00</updated><title type='text'>HowTo play an Encrypted DVD on Edgy Eft</title><content type='html'>It worked for me to install libdvdread3 from Synaptic Package Manager.&lt;br /&gt;Also enable (multiverse) by clicking settings and Repositories. Check the third box down. Also install Gxine to play the movies. Totem-xine doesn't work for me.&lt;br /&gt;I noticed there is a slight flicker when watching DVDs. It will flicker every 10 seconds or so for a split second.&lt;br /&gt;I used this site to find out how to play DVDs:&lt;br /&gt;&lt;a href="http://ubuntuguide.org/wiki/Ubuntu_Edgy"&gt;http://ubuntuguide.org/wiki/Ubuntu_Edgy&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-817195401604348530?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/817195401604348530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=817195401604348530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/817195401604348530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/817195401604348530'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2006/12/howto-play-encrypted-dvd-on-edgy-eft.html' title='HowTo play an Encrypted DVD on Edgy Eft'/><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-4213476024161017641.post-7466910519026766841</id><published>2006-12-19T16:29:00.000-08:00</published><updated>2006-12-19T17:10:13.163-08:00</updated><title type='text'>Starting the install of Windows XP + Ubuntu</title><content type='html'>I just started the install of my new computer system. I save 50GB of data that I will port over to the new computer once it is installed. Some of it I will burn onto DVDs.  I am splitting the 200 GB hard drive in to several partitions. I installed the hard drive as master and started the computer with windows XP Pro disk. It started the install and asked to press F8. Which I did, and then it asked to pick a partition. I want to setup 40GB for the system files only. It said there are only 190,000 MB available on the hard drive. There are exactly 200 billion bytes on the hard drive.&lt;br /&gt;&lt;a href="http://compreviews.about.com/od/storage/a/ActualHDSizes.htm"&gt;http://compreviews.about.com/od/storage/a/ActualHDSizes.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-7466910519026766841?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/7466910519026766841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=7466910519026766841' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7466910519026766841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/7466910519026766841'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2006/12/starting-install-of-windows-xp-ubuntu.html' title='Starting the install of Windows XP + Ubuntu'/><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-4213476024161017641.post-3732653671505313735</id><published>2006-12-19T14:21:00.000-08:00</published><updated>2008-12-11T02:54:54.817-08:00</updated><title type='text'>Here is the past, before the Journey starts.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Aen0M3MeXJA/RbxY3c_XpZI/AAAAAAAAAAM/uUV2DZw3QCs/s1600-h/Michael+with+white+hair-+For+Blogger.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_Aen0M3MeXJA/RbxY3c_XpZI/AAAAAAAAAAM/uUV2DZw3QCs/s400/Michael+with+white+hair-+For+Blogger.png" alt="" id="BLOGGER_PHOTO_ID_5024988993936663954" border="0" /&gt;&lt;/a&gt;So here is where I am going to record my progress, as I install Ubuntu Edgy Eft 6.10 on one hard drive. I have two 200 GB hard drives, which I got at Staples. They had a sale the day after Thanksgiving, last year and so it was $40 after rebates. I installed Windows XP Pro on it. Then this year I went to the sale at Staples again, and this time I got a 200GB hard drive for $20 after rebates. That is only $.10 per GB. With that price I could get a Tera-byte drive for $100. I remember paying $120 for a 20GB hard drive in 1999. At that price it would cost $6000 to buy a Tera-byte drive in 1999.&lt;div class="blogger-post-footer"&gt;This feeding thing is neat.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4213476024161017641-3732653671505313735?l=ubuntujourney.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ubuntujourney.blogspot.com/feeds/3732653671505313735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4213476024161017641&amp;postID=3732653671505313735' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3732653671505313735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4213476024161017641/posts/default/3732653671505313735'/><link rel='alternate' type='text/html' href='http://ubuntujourney.blogspot.com/2006/12/here-is-past-before-journey-starts.html' title='Here is the past, before the Journey starts.'/><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Aen0M3MeXJA/RbxY3c_XpZI/AAAAAAAAAAM/uUV2DZw3QCs/s72-c/Michael+with+white+hair-+For+Blogger.png' height='72' width='72'/><thr:total>4</thr:total></entry></feed>
