<?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-7179488321815826736</id><updated>2011-11-27T15:17:36.979-08:00</updated><category term='SMIL'/><category term='Windows XP'/><category term='parallel computing'/><category term='email-to-blog-post'/><category term='nextgen'/><category term='app development'/><category term='php basics'/><category term='purpose'/><category term='SVG'/><category term='wolframalpha'/><category term='mySQL permissions'/><category term='analytics'/><category term='git setup'/><category term='Trace'/><category term='iphone'/><category term='iphoneupdates'/><category term='mySQL tables'/><category term='xawtv'/><category term='OWASP'/><category term='OSCON'/><category term='git'/><category term='LinkedIn'/><category term='rails'/><category term='iTouch'/><category term='apps'/><category term='Tracks'/><category term='php variable'/><category term='lame'/><category term='new job'/><category term='VoiceML'/><category term='search_engine'/><category term='mySQL users'/><category term='Time Management'/><category term='server upgrades'/><category term='mySQL'/><category term='CSS'/><category term='html as text'/><category term='camera'/><category term='Camellia'/><category term='#magento'/><category term='security'/><category term='job transition'/><category term='WML'/><category term='OSX'/><category term='Open Office'/><category term='form action'/><category term='server administration'/><category term='Google Analytics'/><category term='Firefox'/><category term='consistency'/><category term='desktop'/><category term='unemployment'/><category term='Eclipse'/><category term='HTML'/><category term='web application considerations'/><category term='Glom'/><category term='ipod touch'/><category term='phpInfo()'/><category term='ruby'/><category term='MathML'/><category term='DVCS'/><category term='easy database'/><category term='wiki'/><category term='javascript'/><category term='mySQL grant'/><category term='apple'/><category term='tablet'/><category term='connect mySQL to PHP'/><category term='InkML'/><category term='php data retrieval'/><category term='iTablet'/><category term='Busy'/><category term='analysis'/><category term='remote access'/><category term='rumors'/><category term='IRC'/><category term='internet'/><category term='html converter'/><category term='XHTML'/><category term='web server'/><category term='Lively'/><category term='driving'/><category term='web application security'/><category term='Operating System'/><category term='upgrades'/><category term='distrubuted version control'/><category term='birthday'/><category term='ruby gem'/><category term='perspective'/><category term='php POST'/><category term='php'/><category term='php Calendar'/><category term='SSML'/><category term='verizon'/><category term='Magento'/><category term='careers'/><category term='linux commands'/><category term='Open Source'/><category term='basic linux'/><category term='ruby on rails'/><category term='markup tags'/><category term='Linux'/><category term='web cam'/><category term='web programming languages'/><category term='Interesting Sites'/><category term='git tutorial'/><category term='Ubuntu'/><category term='image processing'/><category term='SVN'/><category term='freenode'/><category term='knowledge_engine'/><category term='gitosis'/><category term='e-commerce'/><title type='text'>It's All About Perspective</title><subtitle type='html'>Perspective. Sometimes things that seem bad turn out to be good. I'll be discussing my transition from science to technology and all the interesting things that I stumble across during this time.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-5807358639553147858</id><published>2009-07-30T22:51:00.000-07:00</published><updated>2009-07-30T23:23:57.834-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DVCS'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='gitosis'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><category scheme='http://www.blogger.com/atom/ns#' term='distrubuted version control'/><title type='text'>Setting Up 'git' on Windows? My Huge Increase in Traffic Says You Are...</title><content type='html'>Thanks to a couple links from other sites I've noticed that many Windows users are interested in accessing git repos. The current Windows git client allows for much of the standard git usage on Windows. However, there may be an even better option for Windows users. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using Eclipse to Manage Gitosis&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my many stumblings with getting Windows to even speak with a git server I noticed that it would be much easier if I could manage my gitosis setup through Eclipse. Since I have Eclipse on the triplets (The PC, Ubuntu and Mac Mini) I would be able to add and administrate my projects and users from any computer. Since I managed to get the standard Windows git client to work once I generated, uploaded and added my public key to the gitosis repository I figured that it should be a snap to use Eclipse and the git plugin to manage the gitosis repository. Well, it was not a snap but once I figured out the issue it did seem fairly simple. The trick is that Windows doesn't seem to handle the public keys very well. So, while I thought I was good to go Eclipse has it's own SSH key management. So, once you generate the public/private key pair in Eclipse, add that to your gitosis repository (I chose a different user name for the standard and Eclipse Windows user ie 'username' and 'usernameeclipse'). This allows me to choose whichever method is most efficient at the time. Once those changes have been added, you should have access to the 'gitosis-admin' repo from Eclipse and can then manage the repository from there. Although it may not be needed in this instance, some of the more powerful features in git have not been added to the Eclipse plugin. Having all options available (like using git-gui) can make some complex operations easier outside of Eclipse for the time being.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-5807358639553147858?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/5807358639553147858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=5807358639553147858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5807358639553147858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5807358639553147858'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/07/setting-up-git-on-windows-my-huge.html' title='Setting Up &apos;git&apos; on Windows? My Huge Increase in Traffic Says You Are...'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-3949100969611729979</id><published>2009-07-06T22:27:00.000-07:00</published><updated>2009-08-03T01:05:17.631-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='OSX'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='gitosis'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Sharing git repositories with Gitosis on Ubuntu, Windows, and OSX using Eclipse and CLI</title><content type='html'>&lt;span style="font-weight: bold;"&gt;UPDATE: 8/2/2009 (Added additional information regarding Windows)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Even small web projects can gain a significant benefit in using a version control system. Many web projects are available using SVN, but an increasing number are turning to git for various benefits such as the ease of working with a distributed development team, easy branching and merging, hooks/scripts at important points (such as a pre-commit validation of structure or a post-commit database schema update script), support for submodules (a type of inline repository/mini-code-base if you will) and more.&lt;br /&gt;&lt;br /&gt;I won't start with creating the repository and will assume you already have a server or host providing a repository location. So let's say that you've got yourself a server and some client machines where the clients have an ssh client, a version of git, and Eclipse. You also have your server running ssh, git and gitosis. The server doesn't need to have Eclipse (unless you're running a machine as both a git/gitosis server and your client workstation. The problem is, your client machines may be Windows, Mac or some flavor of Linux. So perhaps I want to assume different 'roles' as I work on different machines. Luckily I can use any of the systems, but if I want to include my friend the systems administrator who wants to use straight command line git, a graphics guru wants his OSX desktop apps and our handy frontend developer who needs some Windows (Either WinXP or Vista) tools. Isn't it nice that they're all making it easy on you? So, how can we make all the users happy, with the minimal amount of disruption possible in their desired workflow?&lt;br /&gt;&lt;br /&gt;Everyone won't get their way, but the compromise to make it work allows everyone to push and pull from a central location. It's a foundation to build on. So what's our final goal? We need to be able to push to a central location from a Linux command line, Ubuntu let's say. We need to be able to use Eclipse (whether on a Mac, Ubuntu desktop, or Windows XP) to push and pull from a central repository. We won't worry about fancy stuff just yet. Let's focus on getting our code here, changing it and pushing it back.&lt;br /&gt;&lt;br /&gt;I'm not currently aware of any Widows git/gitosis setups but if anyone out there knows of any let me know about them in the comments. So, from our Linux command line, we created a new git repository within gitosis. If you have already gone through a tutorial or two and managed to get gitosis up and running, then adding a new project should be a snap for you. We have added our entry in gitosis.conf, created the initial local repository and pushed it to the server and are now starting to add our users for the project. Here's where you can make everything go right, or get set up for a huge fail later. The biggest mistake you can make is to generate bad keys. Since we are administering this from a Linux command line, we know that this user is setup correctly. I'll cover the Windows instructions first as that seems to require the most configuration to work properly. From there, many instructions will be similar for both Mac/Linux users so reading through the Windows instructions can be helpful for Mac/Linux users too. Let's get our WinXP user set.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;WinXP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Fire up Eclipse, then under Preferences (General -&gt; Network Connections -&gt; SSH2 and work under the "Generate Key" tab). It is extremely important that you make triple sure you generate it correctly here. Once you have generated the key, send the public key generated here to the gitosis admin and he'll add you to the both the keydir and to the project entry in gitosis.conf and then push it to the git server. As per the gitosis instructions, the key should be in the 'user.pub' format with 'user' being the name added to the gitosis.conf file under the project. Once the changes are pushed to the git server you should be able to use Eclipse and the Git plugin to import a git repository.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Importing a git repository in Eclipse&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The sequence of steps seems quite important. Not performing an action in this exact order seems to break the imported repo. I'm not 100% sure why just yet. After installing the git plugin and restarting Eclipse, you should now be able to go to File -&gt; Import and select 'git repository' From there simply use 'ssh://gituser@[192.168.1.X -or- somewhere.net]/repository.git' and hit 'Next'. It should show you a list of branches (or just master) and after clicking 'Next' you can choose if you want to import a project (I don't)  and then 'Finish'.&lt;br /&gt;&lt;br /&gt;From there immediately create a new project (I've found it helpful to match the repository and project name without an extension) and hit 'Next'. You should now see your project in Eclipse and our final step is that we only have to let Eclipse know that it's a git project you can share with other people. Yes, I agree it's redundant since we already told Eclipse we are importing from a git repository, but bear with me. Now just right-click on the project, select 'Team-&gt;Share' and then select 'git' from the list and that's it! Your project is imported and ready to use. You can now make changes and use the Team -&gt; Commit and Team -&gt; Push to change and share your changes.&lt;br /&gt;&lt;br /&gt;There is a different git client available for Windows which has more advanced features than what the Eclipse plugin provides. You should install a program available on Google code called 'msysgit' which provides a handy way to browse the history of your repository. It also gives you a different interface to merge changes from the remote repository if Eclipse doesn't seem to work for you. If all you need is the basic features available in Eclipse then you should be fine without it. But since neither the Eclipse plugin nor msysgit have all the features you might want it's nice that they overlap and complement each other.&lt;br /&gt;&lt;br /&gt;After you install msysgit you will have access to a right-click menu of 'git gui' or 'git bash'. So if you browse to your workspace and use git-gui on your Eclipse project directory you can use more commands available from the git-gui interface. Especially with git, you should ALWAYS, before you commit your changes, pull any changes from the branch where you are pushing to. If you do not, this can lead to a 'non-fastforward' situation where you can't push your changes to the repository because the code in the repository has changed since the last time you pulled from it. The git-gui interface for fetching those changes makes it easy to see what's changed since then in your pull. Once you successfully merge your changes in git-gui, you can flip back to Eclipse and refresh the directory and see your new changes.&lt;br /&gt;&lt;br /&gt;Now comes the trick which can cause you many hours of pain. Due to some weird issue with Windows and SSH key management, it appears to treat Eclipse and the 'git-gui' separately with regards to keys. So to skirt the issue you must generate a second key from within git-gui (or through git-bash if you are already comfortable with generating a key using a command-line interface) and upload THAT to the git/gitosis server as well. Yes, I agree it's annoying but I haven't found a way around it just yet. Since I occasionally use both programs, I need the repository to accept changes from either program. You can use the same passphrase for both keys, but you'll need to setup two users to make it happen. I have used a 'user-e' and a 'user-g' scheme where the -e represents the Eclipse key user and the -g represents the git-gui user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Mac OSX&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luckily here we're much better off with regards to key management. Just as before, you can generate the key from within Eclipse, or, in terminal using the 'ssh-keygen -t rsa' command works. But in this case we only need to do it once. The reason is that the key handling is much better here and regardless of where we generate the key only that one will be used when you hand it off to the gitosis admin whether you are in Eclipse or using terminal. Again, this key.pub gets uploaded to the gitosis admin and pushed to the git host. From there, you can use Eclipse as described above (Import-&gt;Create New Project-&gt;Share As 'git') or there are a few other git tools for OSX you can use that I'll leave you to Google. So as before: Import a git repository from the location you provide. Create a new project with the same name. Share the project as a git repository. Pull, make changes, push. Again, since the tools aren't implemented perfectly, you may need more advanced tools available with other git clients. Though, for many projects all you need is Eclipse, git, and you're good to go.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Ubuntu Desktop&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Install Eclipse + git plugin. Generate key with 'ssh-keygen -t rsa' + upload to gitosis admin. Pull from and push to the repository you provide. Finally, something easy.  :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Goals Check&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So let's recap. Our git server has repositories managed by gitosis accessed from a Linux command line. We can also access our new repository in Eclipse from a Linux, OSX, and Windows desktop environment. Check.&lt;br /&gt;&lt;br /&gt;One final test is let's make sure that a remote client can also access the repository. Up to this point you may have been using a local hostname for the server, or maybe the IP address. Maybe that's all you need for a local network. Perhaps your friends are across the world and don't want to have to remember your IP address but rather a simple domain name. If you're behind a firewall (a Linksys home router maybe...) you'll need to log into the admin panel for the router and make sure that port 22 is open and pointing to the correct machine. Grab a free domain name from DynDns and point it at your home router. You should now be able to pull from 'ssh://gituser@free.dyndns.net/repository.git' as long as your keys have been correctly generated and installed correctly by the gitosis admin.&lt;br /&gt;&lt;br /&gt;Questions? Problems? Let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-3949100969611729979?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/3949100969611729979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=3949100969611729979' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3949100969611729979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3949100969611729979'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/07/sharing-git-repositories-with-gitosis.html' title='Sharing git repositories with Gitosis on Ubuntu, Windows, and OSX using Eclipse and CLI'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-159251892821708489</id><published>2009-06-06T13:29:00.000-07:00</published><updated>2009-06-11T00:22:25.626-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='e-commerce'/><category scheme='http://www.blogger.com/atom/ns#' term='DVCS'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='Magento'/><category scheme='http://www.blogger.com/atom/ns#' term='git setup'/><category scheme='http://www.blogger.com/atom/ns#' term='distrubuted version control'/><title type='text'>How to 'git' Git - A tutorial for creating, using and maintaining repositories for DVCS (distibuted version control systems) for web applications</title><content type='html'>After many hours of struggling...I think I'm close. I almost understand 'git'. No master for sure, but I can get through the basics required to maintain a web application. Many thanks to the people on IRC who humored me for far too long.&lt;br /&gt;&lt;br /&gt;Here's Why You Use git&lt;br /&gt;&lt;br /&gt;There are many different version control systems out there. Some are better suited to a specific language or platform, while others are more flexible. It's a simple case of the best tool for the job. If you are a single person and want to incorporate version control into your workflow then git will work well for you as it allows you to have the main repository local to you and then the ability to share later if you want. If you are a team, then allowing developers to work locally and push clean changes to a central repository may be how you want to operate. The nice thing about git is it allows you to be flexible. You can start with a big group, a few guys or just one person. Depending on the working environment perhaps a central repository system such as SVN may be appropriate as well. Just make sure you choose the right tool for the job.&lt;br /&gt;&lt;br /&gt;Now here's how to start using git in about 10 lines (Quick Start)&lt;br /&gt;&lt;br /&gt;On remote (where you want the repository to be maintained but won't be worked on):&lt;br /&gt;1.) mkdir repository-name.git&lt;br /&gt;2.) cd repository-name.git&lt;br /&gt;3.) git --bare init&lt;br /&gt;&lt;br /&gt;On local machine (where you will be working on):&lt;br /&gt;1.) mkdir repository-name.git&lt;br /&gt;2.) cd repository-name.git&lt;br /&gt;3.) git init&lt;br /&gt;4.) touch some.kindof.file&lt;br /&gt;5.) git add some.kindof.file&lt;br /&gt;6.) git commit -a -m "Added initial file. Maybe a readme or a project definition"&lt;br /&gt;7.) git remote add origin &lt;protocol:location&gt; (ip: git: ssh: or user@host:) (path/to/repo.git)&lt;br /&gt;8.) git push origin master&lt;br /&gt;&lt;br /&gt;That's it. Our repository is being held on the server and a copy is now in sync on our local machine. Now just start adding and altering files and try to remember "Commit early and often" so as each change can be rolled back. If you're just starting out, don't worry about taking up too much space by committing a good descriptive message with every small commit. There's a technique where you can 'squish' several commits into a single one and then cleanup the final message before pushing it to a remote branch. Now it's just a matter of checking out branches, pulling in remote changes often and then resubmitting quality changes. Merging will be needed and there's some other nifty techniques and commands we won't explore.&lt;br /&gt;&lt;br /&gt;How about something harder?&lt;br /&gt;&lt;br /&gt;Let's import something from a SVN repository using git-svn. I'll be demonstrating with the Magento e-commerce application. You can run this on the server or your local client. I might suggest the server if it's faster than your local PC. We'll start with:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mkdir magentosvn.git&lt;br /&gt;cd magentosvn.git&lt;br /&gt;git svn init &lt;repository location&gt; http://svn.magentocommerce.com/source/branches/1.3&lt;br /&gt;git svn fetch (Go get a cup of coffee, it could take a while depending on size)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That's it again. See how simple this can be? Now you're free to check out branches, review history and do what you do. I may cover pushing back to the SVN repository some other time. Now just clone the repository and you've got yourself an e-commerce application.&lt;br /&gt;&lt;br /&gt;Having problems? Having success? Let me know if this was helpful by leaving a comment.&lt;br /&gt;&lt;br /&gt;Thanks to the following pages:&lt;br /&gt;http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html&lt;br /&gt;http://www.kernel.org/pub/software/scm/git/docs/everyday.html&lt;br /&gt;http://git.or.cz/gitwiki/GitCheatSheet&lt;br /&gt;http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html&lt;br /&gt;http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way&lt;br /&gt;http://toolmantim.com/articles/setting_up_a_new_remote_git_repository&lt;br /&gt;http://wiki.sourcemage.org/Git_Guide&lt;br /&gt;http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-push/&lt;br /&gt;http://cworth.org/hgbook-git/tour/&lt;br /&gt;&lt;br /&gt;Gitosis Setup Help&lt;br /&gt;http://www.simplicidade.org/notes/archives/2008/09/installing_gito.html&lt;br /&gt;&lt;br /&gt;Git-SVN Pull, Merge, or Rebase&lt;br /&gt;http://stackoverflow.com/questions/582348/using-git-svn-pull-merge-or-rebase&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-159251892821708489?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/159251892821708489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=159251892821708489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/159251892821708489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/159251892821708489'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/06/how-to-git-git-tutorial-for-creating.html' title='How to &apos;git&apos; Git - A tutorial for creating, using and maintaining repositories for DVCS (distibuted version control systems) for web applications'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-5498135473404516773</id><published>2009-05-25T10:24:00.000-07:00</published><updated>2009-05-25T11:04:05.974-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nextgen'/><category scheme='http://www.blogger.com/atom/ns#' term='upgrades'/><category scheme='http://www.blogger.com/atom/ns#' term='rumors'/><category scheme='http://www.blogger.com/atom/ns#' term='iTouch'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod touch'/><category scheme='http://www.blogger.com/atom/ns#' term='iphoneupdates'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Next Gen iPhone Rumors - Wired.com Round-Up Post &amp; Four Wanted Features</title><content type='html'>Wired has posted an article (&lt;a href="http://www.wired.com/gadgetlab/2009/05/iphonerumors"&gt;Everything We’ve Heard About the Next iPhone&lt;/a&gt;) with next gen iPhone rumors. Rather than rehash everything they've said and just repeat the article with my predictions, or spout off more stuff like I did for the &lt;a href="http://altdotperspective.blogspot.com/2009/04/five-ways-apple-can-improve-itablet.html"&gt;iTablet rumors&lt;/a&gt;, I'd rather list the items I'd like to see on the next gen devices, iPhone and iPod Touch included.&lt;br /&gt;&lt;br /&gt;1.) Faster processors, more RAM, more storage.&lt;br /&gt;&lt;br /&gt;-These should be fairly standard in an incremental upgrade. One of the drawbacks is that powerful processors use more power so battery life might suffer. It would certainly allow for increased capabilities for iApps.&lt;br /&gt;&lt;br /&gt;2.) Improved Audio/Video capabilities.&lt;br /&gt;&lt;br /&gt;-The iPhone should get video recording features as well as a front facing camera. The iPod Touch should also get these features in addition to a microphone. It's one of the few features that disappointed me regarding the iPod Touch. So many times I wish I could have said 'Next!' into a microphone to advance the track playing rather than pull it out of my pocket. &lt;br /&gt;&lt;br /&gt;3.) Even better screen&lt;br /&gt;&lt;br /&gt;-I was very impressed with the quality of the screen on the iPod Touch. I doubt that it's high up on the list of features since the current models perform just fine. I'd still like to see some newer technology in the screen such as OLED and an even higher resolution. I can't complain about the current resolution, but I can certainly want more.&lt;br /&gt;&lt;br /&gt;4.) Longer battery life&lt;br /&gt;&lt;br /&gt;-Again, I can't complain about the battery life, with the exception of using juice -sucking Wi-Fi, but a longer lasting battery wouldn't hurt. I would even be ok with adding another couple grams to the device weight, or even adding a little bit to the thickness to obtain it. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It seems to come down to the old mantra of 'Bigger, Better, Faster, More' for updates. What do you think? What would you like to see? Do you think a compass is a worthwhile addition to the iPhone? If you've got an iPhone, what do you want from it, if you don't, what's holding you back from getting an iPhone/iPod Touch?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-5498135473404516773?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/5498135473404516773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=5498135473404516773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5498135473404516773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5498135473404516773'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/05/next-gen-iphone-rumors-wiredcom-round.html' title='Next Gen iPhone Rumors - Wired.com Round-Up Post &amp; Four Wanted Features'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-8872817344993506216</id><published>2009-05-15T15:43:00.000-07:00</published><updated>2009-05-15T15:50:55.000-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IRC'/><category scheme='http://www.blogger.com/atom/ns#' term='e-commerce'/><category scheme='http://www.blogger.com/atom/ns#' term='#magento'/><category scheme='http://www.blogger.com/atom/ns#' term='LinkedIn'/><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='Magento'/><category scheme='http://www.blogger.com/atom/ns#' term='freenode'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Magento e-commerce</title><content type='html'>Most days you'll find me in a few places related to the Magento e-commerce platform. You'll likely find me in the #magento channel on the 'freenode' server in IRC. I'm usually trying to help people with the issues they're having and offer help or answer questions for those thinking about getting into programming or customizing Magento. You can also find me on LinkedIn and answering questions about e-commerce and other web design topics.&lt;br /&gt;&lt;br /&gt;There's several features that I like about Magento and I'm looking forward to sharing all that information with the readers here. I'm working on a fairly large tutorial for taking the current version of Magento from SVN and moving it to GIT for version control. I've also got a wiki in the works if anyone wants to help out by adding articles to it or reviewing it prior to launch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-8872817344993506216?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/8872817344993506216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=8872817344993506216' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/8872817344993506216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/8872817344993506216'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/05/magento-e-commerce.html' title='Magento e-commerce'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-1978518411972309928</id><published>2009-05-15T11:40:00.000-07:00</published><updated>2009-05-15T15:52:02.189-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wolframalpha'/><category scheme='http://www.blogger.com/atom/ns#' term='knowledge_engine'/><category scheme='http://www.blogger.com/atom/ns#' term='search_engine'/><title type='text'>WolframAlpha Launching in a Few Hours?</title><content type='html'>The &lt;a href="http://www.wolframalpha.com/index.html"&gt;WolframAlpha Computational Knowledge Engine&lt;/a&gt; should be up and running at 7PM CST tonight. I'm looking forward to trying a few queries just to see what gets spit out. It will be interesting to phrase questions as questions rather than trying to focus on keywords in order to get information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-1978518411972309928?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/1978518411972309928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=1978518411972309928' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/1978518411972309928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/1978518411972309928'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/05/wolframalpha-launching-in-few-hours.html' title='WolframAlpha Launching in a Few Hours?'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-5379710969369835759</id><published>2009-05-15T10:01:00.000-07:00</published><updated>2009-05-15T15:51:39.253-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='camera'/><category scheme='http://www.blogger.com/atom/ns#' term='iTouch'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod touch'/><title type='text'>iPod Touch Browser Share Increases and New iPod Touch With Camera?</title><content type='html'>The iPod Touch certainly shouldn't be ignored. Here's an article on the &lt;a href="http://blogs.zdnet.com/gadgetreviews/?p=3960&amp;tag=rbxccnbzd1"&gt;iPod Touch browser&lt;/a&gt; (and iPhone with other browsers) are ranked traffic wise. I have to say that I think some people are too focused on the iPhone and it's capabilities and neglect the iPod Touch. Although I wish that Apple had included two features in the iPod Touch: The camera and the built-in microphone. I can live with out the GPS and monthly data plan cost.&lt;br /&gt;&lt;br /&gt;Several other articles have come out recently with rumors about the &lt;a href="http://blogs.zdnet.com/gadgetreviews/?p=4361"&gt;new iPod Touch&lt;/a&gt; models possibly could include a &lt;a href="http://www.appleinsider.com/articles/09/05/15/apples_future_ipods_rumored_to_get_cameras_like_iphone.html"&gt;camera for the iTouch&lt;/a&gt; like the iPhone. It seems likely to happen considering the cases have a spot that could be easily changed to hold a camera. I don't know why they didn't do it on the second generation except maybe to have something to add to the third generation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-5379710969369835759?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/5379710969369835759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=5379710969369835759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5379710969369835759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5379710969369835759'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/05/ipod-touch-browser-share-increases-and.html' title='iPod Touch Browser Share Increases and New iPod Touch With Camera?'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-7431013703135684194</id><published>2009-05-11T18:19:00.000-07:00</published><updated>2009-05-15T15:28:12.591-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='verizon'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Linux For Everyone</title><content type='html'>After reading an article in the ToyBox on zdNet about &lt;a href="http://blogs.zdnet.com/gadgetreviews/?p=3936"&gt;switching to linux&lt;/a&gt;, I thought I'd post an update on how the Verizon internet hook-up worked. &lt;br /&gt;&lt;br /&gt;I felt a little apprehensive reading some online posts about Verizon not being very Linux friendly. I almost reformatted the hard drive and installed Windows XP just to be sure her high-speed internet could be hooked up. But, it seems to have gone just fine and Verizon seems too support Linux computers (Ubuntu 8.10 desktop in this case).&lt;br /&gt;&lt;br /&gt;I'm happy that there weren't any issues getting it installed and configured. Now the questions was, "Would me Mom be able to use Linux when her work computer was Windows?" It turns out that it's a bit of a transition, but not too bad. The interface being more Apple-like than Windows was hard for her to adjust to, but so far so good.&lt;br /&gt;&lt;br /&gt;Anyone else had any issues getting Verizon and Linux to talk when hooking up high-speed internet?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-7431013703135684194?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/7431013703135684194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=7431013703135684194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7431013703135684194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7431013703135684194'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/05/linux-for-everyone.html' title='Linux For Everyone'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-3675190851754842081</id><published>2009-05-04T22:52:00.000-07:00</published><updated>2009-05-04T22:57:57.424-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Trace'/><category scheme='http://www.blogger.com/atom/ns#' term='app development'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod touch'/><category scheme='http://www.blogger.com/atom/ns#' term='apps'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Finally Beat Trace on my iPod Touch</title><content type='html'>I downloaded an app called Trace the other day and I finally beat it. The clock says 100% complete at 111:54.24. It was a great game that took timing, skill and a keen eye to pick out the route to get through each level. I'm hoping to be getting a Mac here soon to jumpstart the App development process. I've got some fun ideas I'll just have to see if I can pick up the programming fast enough to make it worth it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-3675190851754842081?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/3675190851754842081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=3675190851754842081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3675190851754842081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3675190851754842081'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/05/finally-beat-trace-on-my-ipod-touch.html' title='Finally Beat Trace on my iPod Touch'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-7972245953861433207</id><published>2009-05-03T14:49:00.000-07:00</published><updated>2009-05-04T22:57:27.926-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='upgrades'/><category scheme='http://www.blogger.com/atom/ns#' term='email-to-blog-post'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod touch'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='remote access'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Office'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Setting up Linux for Mom</title><content type='html'>I&amp;#39;m setting up a Linux machine for my Mom. I was going to do WinXP,  &lt;br&gt;but since she&amp;#39;ll just be using the web, email, and typing up a few  &lt;br&gt;documents here and there... Why not do the simplest thing possible?&lt;p&gt;I had set this Ubuntu desktop up a few months ago and even after it&amp;#39;s  &lt;br&gt;been off for months it fired up right away. It&amp;#39;s not the fastest thing  &lt;br&gt;ever, but it&amp;#39;s free. To get all the updates was a bit of a pain. Some  &lt;br&gt;of the packages were unavailable and there were quite a few. It&amp;#39;s  &lt;br&gt;still not complete, but of&amp;#39;s functional. After installing all the  &lt;br&gt;updates I could get I just had to make sure that all the required  &lt;br&gt;programs were there.&lt;p&gt;OpenOffice, Firefox... I really can&amp;#39;t think of much else required.  &lt;br&gt;Essentially this is just a glorified web browsing machine and document  &lt;br&gt;creator.&lt;p&gt;In order to simplify the administration, I set myself as the admin and  &lt;br&gt;added the two accounts that will be used. After it&amp;#39;s setup there, I&amp;#39;ll  &lt;br&gt;be testing my remote admin skills on it to make sure she doesn&amp;#39;t have  &lt;br&gt;to worry about updates and if she needs help I can use remote desktop  &lt;br&gt;to show her how to do whatever she needs.&lt;p&gt;I&amp;#39;m glad I took the time to do this long ago. It is coming in handy  &lt;br&gt;now even though at the time I thought I would be using the machine for  &lt;br&gt;something different than it will actually be used for.&lt;p&gt;I&amp;#39;ll be lugging an old CRT monitor up there for initial use bit the  &lt;br&gt;goal is to hook it up to the LCD TV there. I suspect I need a cable to  &lt;br&gt;hook it up that way, but in the end it will be worth it to not need  &lt;br&gt;that monitor. It will also make the screen much easier to use/see.&lt;p&gt;Has anyone else given their parents a Linux setup to use? I&amp;#39;d like to  &lt;br&gt;hear what your experience was.&lt;p&gt;Until next time...&lt;p&gt; From my iPod&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-7972245953861433207?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/7972245953861433207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=7972245953861433207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7972245953861433207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7972245953861433207'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/05/setting-up-linux-for-mom.html' title='Setting up Linux for Mom'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-2459357744263292722</id><published>2009-05-01T22:28:00.000-07:00</published><updated>2009-05-04T22:55:51.186-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email-to-blog-post'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod touch'/><title type='text'>Email to Blog Post From My iPod Touch</title><content type='html'>Since I received my wonderful new toy, I just had to test and see how Blogger accepts emails from my iPod Touch and turns them into blog posts. &lt;br /&gt;&lt;br /&gt;&lt;br &gt;From my iPod&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-2459357744263292722?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2459357744263292722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2459357744263292722'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/05/testing-email-to-blog-post-from-my-ipod.html' title='Email to Blog Post From My iPod Touch'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-7362463469960271046</id><published>2009-04-27T09:32:00.000-07:00</published><updated>2009-05-02T06:18:20.380-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Busy'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod touch'/><category scheme='http://www.blogger.com/atom/ns#' term='birthday'/><title type='text'>Happy Birthday To Me</title><content type='html'>Well, it's my birthday and I couldn't have had a better weekend. I had some great friends come down from Seattle and they all surprised my by pitching in and buying me a shiny new &lt;a href="http://www.apple.com/ipodtouch/"&gt;iPod Touch&lt;/a&gt; off my Amazon wish-list. It's crackalicious! &lt;br /&gt;&lt;br /&gt;Rather than ignore my friends as we traveled to the coast, I left the &lt;acronym title="iPod Touch"&gt;IPT&lt;/acronym&gt; at home to the &lt;a href="http://hmsc.oregonstate.edu/"&gt;Mark Hatfield Marine Science Center&lt;/a&gt; in Newport, OR to watch an octopus try to get out of the tank but instead it got to eat a crab. We then enjoyed some excellent beer (and a great tour) at the &lt;a href="http://www.rogue.com/locations/locations.php"&gt;Rogue Brewery&lt;/a&gt;. A bunch of us even joined the Rogue Nation and since it was my bithday I got two FREE pints and a t-shirt. You just can't beet free beer and clothing. &lt;br /&gt;&lt;br /&gt;After all that we headed home to grab some dinner from my favorite pizza joint in Corvallis...&lt;a href="http://www.adpizza.com/"&gt;American Dream Pizza&lt;/a&gt;. We went home, drank some beer, played some Apples to Apples and watched Super Troopers. The next morning we had leftover pizza for breakfast, traveled to &lt;a href="http://www.hazelnuthill.com/"&gt;Hazelnut Hill&lt;/a&gt; for some excellent chocolates and then my friends headed back home after I again thanked them for their gifts. Thanks again guys and gals!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-7362463469960271046?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/7362463469960271046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=7362463469960271046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7362463469960271046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7362463469960271046'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/04/happy-birthday-to-me.html' title='Happy Birthday To Me'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-5945266529978741048</id><published>2009-04-19T05:15:00.000-07:00</published><updated>2009-05-02T06:02:09.297-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Analytics'/><category scheme='http://www.blogger.com/atom/ns#' term='unemployment'/><category scheme='http://www.blogger.com/atom/ns#' term='job transition'/><category scheme='http://www.blogger.com/atom/ns#' term='analytics'/><category scheme='http://www.blogger.com/atom/ns#' term='new job'/><title type='text'>Increased Blog Traffic by 1000%, Decreased Job Hours by 50%</title><content type='html'>Well it seems that sometimes good is offset by the bad.&lt;br /&gt;&lt;br /&gt;My previous post regarding my obtaining a second job received enough traffic to spike the &lt;a href="http://www.google.com/analytics"&gt;&lt;acronym title="Google Analytics"&gt;GA&lt;/acronym&gt;&lt;/a&gt; traffic by 1000%. Great! I'm glad to see that there's a few hundred people who consider this interesting enough to read and some even on a regular basis. I'd greatly appreciate comments regrading what you find interesting, boring and what you'd like to see more of. &lt;br /&gt;&lt;br /&gt;However, due to the continuing economic downturn (&lt;a href="http://www.kgw.com/news-local/stories/kgw_041709_news_unemployment_state_ranking.e3ceb3da.html" title="KGW news story - Oregon Unemployment second highest in nation"&gt;Oregon unemployment second highest in nation&lt;/a&gt; :(  ) my hours at one of my jobs has been cut in half. Luckily, I can shift some of the hours lost to another job and hopefully make up for the loss of income. I know there's plenty of you out there who are in the same boat, or worse. Maybe your hours were cut by 100%. How have you been surviving? What kind of plans do you have to transform yourself or your skills? Are any of you working on job related personal training in your spare time to ensure that if jobs open, you have current, relevant skills to offer an employer?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-5945266529978741048?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/5945266529978741048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=5945266529978741048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5945266529978741048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5945266529978741048'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/04/increased-blog-traffic-by-1000.html' title='Increased Blog Traffic by 1000%, Decreased Job Hours by 50%'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-400286030640186720</id><published>2009-04-12T21:09:00.001-07:00</published><updated>2009-05-01T22:21:40.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iTablet'/><category scheme='http://www.blogger.com/atom/ns#' term='tablet'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Five Ways Apple can Improve the iTablet</title><content type='html'>So &lt;a href="http://www.crn.com/mobile/216500356"&gt;it's possible&lt;/a&gt; Apple's working on a tablet like device (iTablet, iTab, iSlate, iBoard?). The question remains whether the device will be more MacBook than iPhone. I'm placing my bet on the device being more iPhone like. With the profitable success of the App Store, I don't doubt that the device will attempt to capitalize on that success.&lt;br /&gt;&lt;br /&gt;But, with all the features the iPhone and iPod Touch are lacking, this gives Apple a chance to correct a few things. Here's a few things I'd like to see on the iTablet in addition to some of the more standard or expected features:&lt;br /&gt;&lt;br /&gt;1.) Better accessory support. USB devices.&lt;br /&gt;2.) Blu-Ray drive. Need to watch HD movies.&lt;br /&gt;3.) Video/Camera capture at moderate quality. &lt;br /&gt;4.) Heavier battery for longer life.&lt;br /&gt;5.) Flash/Full Browser Support&lt;br /&gt;&lt;br /&gt;If I'm going to pay extra for brand, then I guess I should expect more for my money. I'll have to look into non-phone Android platforms or the &lt;a href="http://www.techcrunch.com/2009/04/10/about-those-new-crunchpad-pictures/"&gt;Crunchpad&lt;/a&gt; (if it ever comes out) Anything anyone else would like to see in an iPad Touch?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-400286030640186720?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/400286030640186720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=400286030640186720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/400286030640186720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/400286030640186720'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/04/five-ways-apple-can-improve-itablet.html' title='Five Ways Apple can Improve the iTablet'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-5669494539471336665</id><published>2009-04-11T16:54:00.001-07:00</published><updated>2009-04-15T21:33:57.350-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='careers'/><category scheme='http://www.blogger.com/atom/ns#' term='Busy'/><category scheme='http://www.blogger.com/atom/ns#' term='new job'/><title type='text'>Hard Work Pays Off</title><content type='html'>It's great to have a job these days. It's even better to have two. I'm curious how many other people out there are working two jobs. Are you considering getting another job?&lt;br /&gt;&lt;br /&gt;I'm lucky that I have two skill sets that pay rather well. Web Development and Laboratory Experience. I've been doing web design/development since 2002, though mostly as a way to avoid doing homework and create interesting pages. I've also worked in various molecular biology labs and tissue culture labs doing DNA extractions, amplifications, running gels and staining the results, analyzing returned sequences...all the stuff that CSI morphs into a 20 second montage. (Jerry Bruckheimer rant removed for brevity)&lt;br /&gt;&lt;br /&gt;I get to work part-time as a web developer for a company here in Corvallis and part-time for the USDA as a lab technician. I'm doing the two things I love to do and getting paid for it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-5669494539471336665?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/5669494539471336665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=5669494539471336665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5669494539471336665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5669494539471336665'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/04/hard-work-pays-off.html' title='Hard Work Pays Off'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-2656263771516298773</id><published>2009-04-08T00:19:00.000-07:00</published><updated>2009-04-08T00:33:36.278-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='analysis'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel computing'/><category scheme='http://www.blogger.com/atom/ns#' term='purpose'/><category scheme='http://www.blogger.com/atom/ns#' term='web application security'/><title type='text'>Parallels</title><content type='html'>We all like to draw parallels between past experiences, things we've seen, and even experiences we would expect to have in certain situations. Things are easier to analyze, interpret, and remember when they fit neatly in our boxes, but that doesn't always hold true. As an example, the fact that I have four working computers in my garage, is a lot like someone who has several project cars. We could just get rid of the 'junk'. But we have reason to hold onto it for the time being. I also have my own &lt;a href="http://images.google.com/images?hl=en&amp;q=laminar+flow+hood&amp;btnG=Search+Images&amp;gbv=2&amp;aq=f&amp;oq="&gt;laminar flow hoo&lt;/a&gt;d (When I eventually get to use it, I'll &lt;a href="http://phytoartis.blogspot.com/"&gt;let you know here&lt;/a&gt;) but I can't set it up anywhere yet. I just wonder if I'm crazy for keeping them around. I do use the computers occasionally but just not lately. Or am I the next guy with a million dollar business that started in the garage?&lt;br /&gt;&lt;br /&gt;I have a purpose for the computers, it's just a matter of taking the time to get everything ready. I mean, I want to setup a small grid/cloud to process genetic data for fun. I'd like to learn some nifty virtualization, massively parallel computing and data analysis tricks at the &lt;a href="http://en.wikipedia.org/wiki/Terrabyte"&gt;TB&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/Petabyte"&gt;PB&lt;/a&gt; scale. What kind of genetic modeling or intra-cellular biochemistry visualization can I come up with? &lt;br /&gt;&lt;br /&gt;I'd also like to be able to setup a small network to test web application security with a mock client/server/attacker group. Some day I'll get it all setup and working. Of course, I'll be posting all the progress here so you can follow along.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-2656263771516298773?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/2656263771516298773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=2656263771516298773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2656263771516298773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2656263771516298773'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/04/parallels.html' title='Parallels'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-2476113309737361367</id><published>2009-04-07T01:17:00.000-07:00</published><updated>2009-04-07T02:14:31.661-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='consistency'/><category scheme='http://www.blogger.com/atom/ns#' term='perspective'/><category scheme='http://www.blogger.com/atom/ns#' term='Busy'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Management'/><title type='text'>Consistency</title><content type='html'>In a recent &lt;a href="http://www.linkedin.com/answers/using-linkedIn/ULI/452412-26323481"&gt;LinkedIn question&lt;/a&gt;, the question was how to capitalize on ideas for revenue generation for big businesses. My response (if you haven't read it) was that the ideas themselves aren't worth much. It's the ability to execute and deliver on those ideas that generates value. If you walk into a pitch meeting with a great idea, but no clue how to get from concept to cash...you'll be leaving fairly disappointed. It's a discussion on the delivery and follow-through that has inspired this post.&lt;br /&gt;&lt;br /&gt;I'm sure like many people, I just might have a few good ideas. I'm directly working on some while others must be relegated to the dreaded 'back burner'. It's simply a matter of resources. There's only so many projects a person can work on and manage to deliver something meaningful. I may not have a clue (Yes I do*) what I'm going to do once I learn how to run a massively-parallel cloud/cluster/server farm. Since I can't deliver something meaningful, I spend the few resources I have right now working on projects that will bring me achievable results that I want. &lt;br /&gt;&lt;br /&gt;What do I want? I want to be able to explain what I did, and why I think it's cool. Sometimes it's for personal reasons and it's only important that I'm interested in the results. Usually, I have something to gain by completing the project although, that reward isn't always financial. I have an incentive to be able to work with Magento better not just because I can earn money freelancing, but because I like to understand how it was all put together. Whether it's a Rails project, a simple javascript widget, a new web site, or a neat way to reduce the number of product images required using an integrated image manipulation library and some creative PHP generated links...there's only one thing that matters. Accomplishment.&lt;br /&gt;&lt;br /&gt;Which brings us to consistency. Whether it's delivering an entirely redesigned site to a client, or simply showing off a small section that's been modified, I want to deliver consistently high-quality work.  I hope we all want to turn in our best work which highlights our skills and justifies our pay! We want to be able to create something better than what was asked for. But often times there is exactly enough room in the schedule to deliver the minimum and usually no more. After all, if there was extra time to work on this portion, we incorrectly estimated our needs. Besides, I don't know of anyone who has a 'to-do' list with just one or two items on it that they can cross off and be done with. Most of us have a list seemingly a mile long.&lt;br /&gt;&lt;br /&gt;So how can we balance our desire to do the best work we can with the limitations of our respective employers' budgets and patience? For me, it's been about finding the correct balance between the pixel perfect idea in my head, and how soon my boss wants it done. Sometimes, in showing off progress on a specific task the results are imperfect in my mind, but 'good enough for now' in the eyes of my employer. Maybe a few elements aren't aligned perfectly but spending another hour fixing the browser inconsistency to have it perfect isn't worth it. Plenty of other priorities to work on.  &lt;br /&gt;&lt;br /&gt;To finish up this (very late) rambling, in order to keep myself more organized I created a system of note cards where the size depends on the task. A simple task my only need a 3x5 index card but more complex one may need a 5x7 index card. Each card has a single task on it with the steps that I took to complete it. Any additional notes should fit on the card as well. For example, my "Launch New Sale Campaign" card has roughly the following steps:&lt;br /&gt;&lt;br /&gt;1.) Confirm email launch deadline. Email -&gt; out = Visitors -&gt; in. &lt;br /&gt;2.) Get final checks/sign-off on page variations. Validate pages.&lt;br /&gt;3.) Confirm discounts/sales work with test scripts.&lt;br /&gt;4.) Prepare changes to various banners/elements. Push to test server.&lt;br /&gt;5.) Run all tests. Pray to various deities for no FAIL.&lt;br /&gt;6a.) If PASS, push to production server. Go home and drink beer. &lt;br /&gt;6b.) If FAIL, go flog responsible party until PASS. Then push to production.&lt;br /&gt;&lt;br /&gt;This way, I have a nice repository on my desk of good information. With everything organized, anyone can find the information for a variety of tasks should I be away for a day and something goes bad. I also back-up the hard copy with a wiki. It's nice to have easy step-by-step instructions as some of the tasks only happen monthly and without repetition, it's not easy to remember what happened last time. Plus, late in the day on Friday when I can hear the beers calling me from home, it's helpful to have a brain back-up that keeps the task time short. &lt;br /&gt;&lt;br /&gt;And, with the same instructions followed each time- I'm more consistent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-2476113309737361367?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/2476113309737361367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=2476113309737361367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2476113309737361367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2476113309737361367'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/04/consistency.html' title='Consistency'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-3553670197643189574</id><published>2009-04-04T11:12:00.000-07:00</published><updated>2009-10-12T20:10:49.966-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='new job'/><title type='text'>No Joke...I Have a Second Job!</title><content type='html'>Government jobs are notoriously filled with forms, paperwork, and a general 'Ewww' feeling when dealing with the dreaded Red Tape. However, I recognize that I am extremely lucky to have not one, but three jobs that I enjoy.&lt;br /&gt;&lt;br /&gt;The first job has been mentioned before: working for Old Creek developing for their domain. It's a job that really requires knowing everything from the web hosting level including .htaccess, managing files, and upgrading applications... all the way up to the higher level implementation of &lt;acronym title="Hyper Text Markup Language"&gt;HTML&lt;/acronym&gt; and &lt;acronym title="Cascading Style Sheets"&gt;CSS&lt;/acronym&gt; for the content pages and e-mail marketing campaigns. There's also figuring out the basic and novel applications provided by integrating various javascripts such as &lt;a href="http://www.google.com/analytics"&gt;Google Analytics&lt;/a&gt;, &lt;a href="http://www.google.com/websiteoptimizer"&gt;Website Optimizer&lt;/a&gt;, the Ratings &amp;amp; Reviews powered by &lt;a href="http://js-kit.com/"&gt;js-kit.com&lt;/a&gt;, as well as an interesting way to monitor which users of specific search engines call us more often. (Thanks &lt;a href="http://www.mongoosemetrics.com/"&gt;Mongoose Metrics&lt;/a&gt;, we've seen a difference!)&lt;br /&gt;&lt;br /&gt;We've got many plans to improve how our site works for customers. We'd like to really give consumers a feeling for both the quality and how our products will look and last in their home.&lt;br /&gt;&lt;br /&gt;The major change for today is the beginning of a new job working for the &lt;acronym title="United States Department of Agriculture"&gt;USDA&lt;/acronym&gt;. Specifically, I work for the &lt;a href="http://www.ars.usda.gov/main/site_main.htm?modecode=53-58-00-00"&gt;&lt;acronym title="Agricultural Research Station"&gt;ARS&lt;/acronym&gt; in Corvallis, OR&lt;/a&gt; and work in the &lt;a href="http://www.ars.usda.gov/main/site_main.htm?modecode=53-58-15-00"&gt;&lt;acronym title="National Clonal Germplasm Repository"&gt;NCGR&lt;/acronym&gt; in the Tissue Culture lab&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;acronym title="National Clonal Germplasm Repository"&gt;NCGR&lt;/acronym&gt; is a unit that uses &lt;a href="http://en.wikipedia.org/wiki/Cell_culture"&gt;Cell Culture&lt;/a&gt; techniques including &lt;a href="http://en.wikipedia.org/wiki/Tissue_culture"&gt;Tissue Culture&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Micropropagation"&gt;Micropropagation&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Cryopreservation"&gt;Cryopreservation&lt;/a&gt; in addition to various other molecular biology procedures. The &lt;acronym title="National Clonal Germplasm Repository"&gt;NCGR&lt;/acronym&gt; collects and preserves genetic diversity of agriculturally important world food crops. &lt;a href="http://www.ars-grin.gov/cgi-bin/npgs/html/stats/site.pl?COR"&gt;Over 14,000 accessions&lt;/a&gt; have been recorded and stored. In case of a major crop loss or other disaster, the material is stored and can be recovered without being affected by the disease or event.&lt;br /&gt;&lt;br /&gt;I've &lt;a href="http://phytoartis.blogspot.com/"&gt;started a new blog&lt;/a&gt; to record my experiences in the position (&lt;a href="http://phytoartis.blogspot.com/"&gt;link here&lt;/a&gt;) and hope to be able to provide insights into research and new techniques in the tissue culture and cryopreservation fields from the scientists who are carrying out the experiments. I'm really looking forward to contributing to the ongoing research and hope that my experience in designing and preparing plant tissue culture media can improve the records and performance of the unit. After all, if the plant material is going to be stored for 5, 50, or 500 years...I'd like whoever is refreshing the material to have the highest quality plants they can get.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-3553670197643189574?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/3553670197643189574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=3553670197643189574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3553670197643189574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3553670197643189574'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/04/no-jokei-have-second-job.html' title='No Joke...I Have a Second Job!'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-3159134631837623457</id><published>2009-03-28T13:03:00.000-07:00</published><updated>2009-10-12T20:11:32.177-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='job transition'/><category scheme='http://www.blogger.com/atom/ns#' term='new job'/><title type='text'>Update... 6mo later</title><content type='html'>Well, after my last post regarding the 2008 OSU Career Fair, I landed the job that had the most opportunity. I now work part-time at Old Creek as a web developer for their primary e-commerce domain. It's a great job. I enjoy the challenges regarding implementing pages in HTML, CSS, javascript and the occasional bit of PHP and XML to make the site visually appealing and to help enhance the conversions of visitors to purchasers.&lt;br /&gt;&lt;br /&gt;Since the job is part-time, I continued to work as a consultant to help other companies and individuals meet their web and technology goals. I also continued looking for an additional part-time job. If the paperwork works out I'll be starting working for the USDA in just a few days. I'll hopefully be starting a new blog regarding the experiences there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-3159134631837623457?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/3159134631837623457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=3159134631837623457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3159134631837623457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3159134631837623457'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2009/03/update-6mo-later.html' title='Update... 6mo later'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-4211348290855333410</id><published>2008-10-21T16:11:00.000-07:00</published><updated>2008-10-21T16:14:31.910-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='careers'/><category scheme='http://www.blogger.com/atom/ns#' term='Busy'/><category scheme='http://www.blogger.com/atom/ns#' term='job transition'/><title type='text'>Yet again....life takes over.</title><content type='html'>Still just busy. I had been doing some consultant work for people. Helping them with programming, web page creation and generally sorting out their technological problems. Today I attended the OSU carrer fair. Out of the dozen resumes I handed out I'm hoping that I will get about two or so replies back. There's more tomorrow so here's hoping.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-4211348290855333410?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/4211348290855333410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=4211348290855333410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/4211348290855333410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/4211348290855333410'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/10/yet-againlife-takes-over.html' title='Yet again....life takes over.'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-7243417246970762985</id><published>2008-09-29T20:13:00.001-07:00</published><updated>2008-09-29T23:24:44.394-07:00</updated><title type='text'>Where did I go?</title><content type='html'>I was gone for about a month. What was I doing? Just busy with life. A bit of reading and learning and it's time to commit some of what I've learned to memory. I've learned that I do this best when I teach it to others. So I should be putting up some tutorials on what I've learned. Those should be coming in the next few weeks. Hopefully I'll be getting a job which will take up some time, but I need more pay than the consulting I've done on the side.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-7243417246970762985?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/7243417246970762985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=7243417246970762985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7243417246970762985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7243417246970762985'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/09/where-did-i-go.html' title='Where did I go?'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-2142275772423224562</id><published>2008-08-06T08:36:00.000-07:00</published><updated>2008-08-06T08:40:41.444-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSCON'/><category scheme='http://www.blogger.com/atom/ns#' term='Interesting Sites'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>I Knew It Would Happen</title><content type='html'>I'm still sad that I missed out on OSCON'08 up in Portland. But, the attendees and presenters haven't let me down. I've found a couple of reports from bloggers (and I know more attendees still have yet to write something up about it) online and now O'Reilly has posted several of the talks. &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/proceedings"&gt;OSCON'08 Presentations&lt;/a&gt;! It'll take me months to go over it all but it will be great when I finally make it through everything.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-2142275772423224562?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/2142275772423224562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=2142275772423224562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2142275772423224562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2142275772423224562'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/08/i-knew-it-would-happen.html' title='I Knew It Would Happen'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-6268042148329889458</id><published>2008-07-29T13:40:00.001-07:00</published><updated>2008-07-29T13:42:28.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='job transition'/><category scheme='http://www.blogger.com/atom/ns#' term='lame'/><title type='text'>Busy!</title><content type='html'>Aren't we all? Too much to do. Too little time. Jobs, jobs, jobs. I keep applying. They keep not hiring. Sheesh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-6268042148329889458?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/6268042148329889458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=6268042148329889458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6268042148329889458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6268042148329889458'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/07/busy.html' title='Busy!'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-1555055659122570171</id><published>2008-07-13T09:49:00.000-07:00</published><updated>2008-07-13T10:32:15.773-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interesting Sites'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Tracks'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Management'/><title type='text'>Ruby on Rails Places Of Interest</title><content type='html'>While improving my skills I often turn to good ole Google to help me find someone who has done a particular task or solved a problem. During the course of this reasearch I often find excellent sites that aren't always directly related. Here's what I found yesterday:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.railsjedi.com/"&gt;RailsJedi&lt;/a&gt;: Lots of great information on some pretty advanced Rails techniques but one of the things I found there was a link to a site that he (Jacques Crocker) had built called OpenSource Rails.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.opensourcerails.com/"&gt;OpenSource Rails&lt;/a&gt;: This site has plenty of links to Ruby on Rails projects that are in progress or at a release point. I checked out lots of the sites listed. Some were functional and looked pretty nice. Others were broken. One of the sites that caught my eye was Tracks.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rousette.org.uk/projects/"&gt;Tracks&lt;/a&gt;: Tracks is a Ruby on Rails implementation of the GTD (Getting Things Done) method of staying productive. I downloaded and installed it (I might cover that in a later post) and started messing around with it. Some parts of the program didn't work for me, but since I just installed it I figure I've got a bit of customizing to do before everything works great. &lt;br /&gt;&lt;br /&gt;LovdByLess: A social networking platform. It was neat, but not what I was interested in. However, the creators of LBL are those behind LessEverything. I like their attitude toward making things simple. It was there that I stumbled across a &lt;a href="http://b.lesseverything.com/2008/6/30/ndas-are-unnecessary-because-ideas-are-worthless"&gt;blog post by them regarding NDA's &lt;/a&gt;(Non-disclosure agreements). I may not agree with their reasoning behind why NDA's are worthless, but I do agree with their statement that ideas are almost worthless, it's the execution that's worth the money. &lt;br /&gt;&lt;br /&gt;http://www.clockingit.com/: Yet another time management and billing type application. What sets this one apart is that it's free and hosted. I'd like to compare this app and Basecamp to see what features they have in common and what is unique about each one. &lt;br /&gt;&lt;br /&gt;Yet another one of those things I should have done is putting all the neat things I find while researching into posts. I've got way too many bookmarks and hopefully I can move some of them out of my bookmarks tab and into a better place. I'll be posting about more of the other neat things I've found in the past couple of months.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-1555055659122570171?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/1555055659122570171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=1555055659122570171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/1555055659122570171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/1555055659122570171'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/07/ruby-on-rails-places-of-interest.html' title='Ruby on Rails Places Of Interest'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-5050358854049778097</id><published>2008-07-11T20:07:00.000-07:00</published><updated>2008-07-11T20:07:36.072-07:00</updated><title type='text'>Making Money With Google Lively</title><content type='html'>Having played with &lt;a href="http://googleblog.blogspot.com/2008/07/be-who-you-want-on-web-pages-you-visit.html"&gt;Google Lively &lt;/a&gt;for a couple of days I've got to say...I need a faster computer. Joining a room with even a couple of people crashed my browser. However, I was able to maintain a small room and add a couple of couches, a rug, some plants and a flatpanel TV hung from the ceiling. Check out my Lively room embedded in my blog. Hopefully I'll catch you there.&lt;br /&gt;&lt;br /&gt;Sadly, some people have already started sex channels in the hopes of....well I'm betting they're trying to make money. But, if you're a developer and a new service comes out you should at least try it out lest you miss the next 'big thing'. So I started thinking: How could a developer make money with Lively? Second Life, as a virtual world, already has a couple of cottage industries building themselves around it such as marketing, customer service and even companies which build the models and sell them to consumers. Reuters even has a news presence in Second Life. What will become of Lively should it's popularity begin to rival SL? I suspect the same kind of companies will spring up including:&lt;br /&gt;&lt;br /&gt;Model Creation: For just a couple of dollars you could have a custom person, set of clothes, household items, or even a house created for you. I predict a high popularity for male models that look like (current heartthrob) and female models that look like (current hot actress). Will Google stick with dollars or use something similar to the Linden dollar? Hey Google, will you send me a laptop if I suggest a way for you to advertise in Lively? What if in between chat blurbs a character says, "Hey, why don't you check out my sweet Nike shoes that I got on Nike.com?" Or let users download clothes sponsored by fashion companies? There's got to be money there.&lt;br /&gt;&lt;br /&gt;Customer Service: In some small way, even if the exchange with a customer service rep was exactly the same on the phone, I have a feeling that interacting with something that looks like a person may increase customer satisfaction. If all else fails...you can alteast puke on the avatar. One of the neat aspects is that the flatpanel TV's in Lively can stream YouTube. It will be better when someone can control the video as well. In one room I was greated by a horrendous screaming. It took me a minute to realize that someone was screaming "LEAVE BRITNEY ALONE!". I don't think I could leave that room fast enough. How about something less grating on the eardrums? How about attending class where the video is streamed from a classroom and you attend virtually? How about remote computer assistance where users can enter a room by entering a special code they've purchased from a specific vendor? Then they are greeted by a company avatar who walks them through (or through one of the TV's...maybe using GoToMeeting?) how to fix a problem?&lt;br /&gt;&lt;br /&gt;Virtual Web Surfing: What if Google found a way to use virtualization to let you surf the internet, while surfing the internet? That would be really wierd, but it may help avoid certain browser vulnerabilities because the browser will be virtual. Google also gets all that data they like some much by watching where people go and how they surf the internet.&lt;br /&gt;&lt;br /&gt;Surveys: There's got to be a way to do surveys or focus groups in Lively. I'm sure the companies that hold focus groups would love to avoid the overhead of actually having a room to put people in, but I seriously doubt that those companies will ever give up studying human behavior from behind the safety of one-way mirrors.&lt;br /&gt;&lt;br /&gt;There are certainly other ways to make money. I'd love to hear some other ideas in the comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-5050358854049778097?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/5050358854049778097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=5050358854049778097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5050358854049778097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5050358854049778097'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/07/making-money-with-google-lively.html' title='Making Money With Google Lively'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-8753049696673111872</id><published>2008-07-08T22:38:00.001-07:00</published><updated>2008-07-08T22:41:37.394-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lively'/><title type='text'>Google Lively....isn't.</title><content type='html'>I was excited to try out Google's new Lively service. I've already added it to my blog as a widget (some dimensions need to be worked out but...) and it would be great to let people interact with me not just in comments, but actually interact when I'm around. However, I got to login in once and now I can't get back. It seems &lt;a href="http://groups.google.com/group/lively-help-sign-inaccess-issues/topics"&gt;I'm not the only one&lt;/a&gt; who's having problems. I'm sure Google will have it fixed soon enough but for now....my poor room looks bare with only a couple of plants and couches. Here's hoping that Google gets this going.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-8753049696673111872?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/8753049696673111872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=8753049696673111872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/8753049696673111872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/8753049696673111872'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/07/google-livelyisnt.html' title='Google Lively....isn&apos;t.'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-7055545969106623300</id><published>2008-07-08T20:38:00.000-07:00</published><updated>2008-07-08T22:22:01.455-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OWASP'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><title type='text'>Happenings.</title><content type='html'>What a weekend!&lt;br /&gt;&lt;br /&gt;The family visited and we went to the Oregon Coast Aquarium. I took some photos, we went to the beach (too windy) and saw some cool stuff. &lt;br /&gt;&lt;br /&gt;Also I was added as a reviewer for the &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Ruby_on_Rails_Security_Guide_V2"&gt;OWASP Ruby on Rails security guide&lt;/a&gt;. I've looked over what &lt;a href="http://www.rorsecurity.info/"&gt;Heiko Webers &lt;/a&gt;has written and it's a must read for not just RoR developers, but everyone. It's a great read for those interested in securing their applications. The advice is superb and includes short, easy to (SHA) digest sections (no salt required) with bits of example code that you can apply to your projects. The finalized version should be out about mid-September.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-7055545969106623300?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/7055545969106623300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=7055545969106623300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7055545969106623300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7055545969106623300'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/07/happenings.html' title='Happenings.'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-8646875092280055454</id><published>2008-06-28T12:57:00.000-07:00</published><updated>2008-06-28T13:09:50.844-07:00</updated><title type='text'>Linktastic</title><content type='html'>Sometimes you just find things that are too useful not to pass along. Here's a couple of links that have been helpful to me as I'm searching around for information on how to accomplish a specific task.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fairleads.blogspot.com/2007/12/rails-20-and-scaffolding-step-by-step.html"&gt;Fairleads&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A great tutorial on how to get up an running on Rails. The techniques shown here give you a good grounding on some important RoR concepts.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://matthewcarriere.com/2008/6/23/using-select-reject-collect-inject-and-detect"&gt;Ruby Loops and Important Iterators&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yet more great info on getting things from a collection of...things. So basic, but so important.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tutorialspoint.com/ruby-on-rails/index.htm"&gt;Tutorials Point (Ruby on Rails)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you haven't been here yet, go now. There's yet more useful and important information about Ruby on Rails (among other things).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rubyflow.com/"&gt;RubyFlow&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Want to stay up to date on Ruby news? Rubyflow has the latest news from people in the know on Ruby information.&lt;br /&gt;&lt;br /&gt;I'll have more links later. Right now, it's too hot to think here. It's 85F in the house, 95F in the greenhouse (crap). And having three computers running in an upstairs bedroom next to the attic (I swear my Attic extends the Broiler class) is too much. If/When it cools off a bit I'll try to come back with more goodies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-8646875092280055454?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/8646875092280055454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=8646875092280055454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/8646875092280055454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/8646875092280055454'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/linktastic.html' title='Linktastic'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-3553324026834142831</id><published>2008-06-25T11:53:00.000-07:00</published><updated>2008-06-25T21:02:31.196-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby gem'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL'/><title type='text'>Installing Ruby on Rails</title><content type='html'>PHP can be a lot of fun, but as a web professional we always have to be on the lookout for new methods of development. One of the new methods of designing web applications and sites is Ruby on Rails.&lt;br /&gt;&lt;br /&gt;What is Ruby on Rails?&lt;br /&gt;&lt;br /&gt;I'll skip the history of both Ruby and Rails to give you the short and skinny. Ruby is an object oriented programming language just like Java and C++. But unlike those two languages the syntax of Ruby is fairly unorthodox. If you had written a loop in C++ or java it may look like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;for (int i = 0, i &lt;&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In Ruby a loop looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;for i in 1..10&lt;br /&gt;do something&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;One thing of note is how many (dots) you put in the structure. If you use two (..) it is the same as using all 10 iterations. If you use three dots (...) it will stop just before the limit.&lt;br /&gt;&lt;br /&gt;Rails is not really a programming language but more of a way of looking at how a web application is structured. Rails only has you create the MVC, or Model-View-Controller, for the objects in your application. If you look back at the Web Server Setup and the Calendar example in the PHP section, the same application could be created in Rails simply by telling Rails that there is a 'Calendar' model which has the same kinds of fields as the PHP version. Then, by creating some code in the 'controller' section you can let Rails handle all the database updating and manipulation just like the 'addEvent.php' page we had created and finally the 'view' handles just that. When you look at the Calendar, what do you want to see? This part of a Rails application defines how an object is displayed when a user browses to it.&lt;br /&gt;&lt;br /&gt;Together the Ruby on Rails framework is designed to help you create dynamic sites as easily as possible. Let's install the goodies and we'll get going on creating a simple RoR application. Since we're (hopefully) still working on the system you had setup before let's get the latest packages we need:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install ruby rdoc irb libyaml-ruby libzlib-ruby ri libopenssl-ruby ruby1.8-dev build-essential&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This installs the Ruby basics, rdoc (a helpful documentation script), irb (an interactive console where you can test ruby code), and some additional libraries. If that goes well, we need to install a couple more components to get enhanced functionality. For this section, we actually don't want to use 'apt-get' the package hasn't quite been modified to be installed that way just yet. What we need now is a package called 'RubyGems'. Think of RubyGems in terms of the following analogy.&lt;br /&gt;&lt;br /&gt;apt-get is to ubuntu as&lt;br /&gt;RubyGems is to Ruby&lt;br /&gt;&lt;br /&gt;RubyGems allows you to install neat little packages that you can include in your Ruby code to perform certain helpful functions without you having to write the Ruby code yourself. The reason for installing RubyGems separately is that 'apt-get' might get confused when you tell RubyGems to update itself. But, until that gets sorted out, let's get those gems installed. I'd recommend doing this from your home directory though you can do it from anywhere you have permissions. When you tar the rubygems file you'll see lots of stuff be unpacked and when you run the 'setup.rb' script you'll see even more stuff fly by.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo wget "http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz" &lt;br /&gt;sudo tar -xvzf rubygems-1.2.0.tgz&lt;br /&gt;sudo rm rubygems-1.2.0.tgz&lt;br /&gt;cd rubygems-1.2.0&lt;br /&gt;sudo ruby setup.rb&lt;br /&gt;cd ..&lt;br /&gt;sudo rm -r rubygems-1.2.0&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Once that's done we just need to tweak a few more things. First we should ensure we have the latest Gem version by running:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo gem update --system&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;We can finally install Rails to get ourselves going.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo gem install rails&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Depending on your system speed this could take a bit of time. If you like, you can skip some of the documentation parts by adding a '--no-ri --no-rdoc' to the above command and it's up to you whether having the documentation is worth it or not. The final piece of the puzzle is to get all these parts working together with a database. Rails is compatible with several database systems including mySQL, SQLite and postgreSQL. Many other adapters are being written to interface with other databases.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install libmysql-ruby&lt;br /&gt;sudo apt-get install libmysqlclient15-dev&lt;br /&gt;sudo gem install mysql&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The gem install could take some time but it is the final step. You now have all the components required for creating a Ruby on Rails site! In the next post I'll walk you through making something comparable to the PHP calendar application we made earlier using RoR. Happy Railing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-3553324026834142831?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/3553324026834142831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=3553324026834142831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3553324026834142831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3553324026834142831'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/installing-ruby-on-rails.html' title='Installing Ruby on Rails'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-1501746491363230889</id><published>2008-06-23T21:18:00.000-07:00</published><updated>2008-06-23T21:38:09.138-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Camellia'/><category scheme='http://www.blogger.com/atom/ns#' term='image processing'/><category scheme='http://www.blogger.com/atom/ns#' term='xawtv'/><category scheme='http://www.blogger.com/atom/ns#' term='web cam'/><title type='text'>Interesting Image Alterations</title><content type='html'>It really wasn't that hard. Just a simple:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo install xawtv&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Restart the computer and by running:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo xawtv&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I can access my webcam connected to my Ubuntu desktop and easily snap pictures. I've been thinking about installing the &lt;a href="http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome"&gt;'Motion' detector&lt;/a&gt; so that each time I sit down here it will snap a picture and upload it to a web server. Maybe I'll alter my profile picture link to point to that photo so my profile picture is updated whenever the Motion records a new image.&lt;br /&gt;&lt;br /&gt;One of the neat applications I've seen out there involves the use of the &lt;a href="http://camellia.sourceforge.net/index.html"&gt;Camellia Image Processing library&lt;/a&gt;. Camellia supports some nice image manipulation functions in an easy to use package that's compatible with Ruby. I'll try to put up some demo pictures and examples tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-1501746491363230889?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/1501746491363230889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=1501746491363230889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/1501746491363230889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/1501746491363230889'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/interesting-image-alterations.html' title='Interesting Image Alterations'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-2673064222978214746</id><published>2008-06-23T14:03:00.000-07:00</published><updated>2008-06-23T15:15:10.294-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SMIL'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='VoiceML'/><category scheme='http://www.blogger.com/atom/ns#' term='SSML'/><category scheme='http://www.blogger.com/atom/ns#' term='MathML'/><category scheme='http://www.blogger.com/atom/ns#' term='markup tags'/><category scheme='http://www.blogger.com/atom/ns#' term='InkML'/><category scheme='http://www.blogger.com/atom/ns#' term='WML'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Markup Tags and Describing Data</title><content type='html'>In case you were wondering (even though I know you're not) HTML wasn't the first real markup language. Markup languages have been around in a form similar to HTML since the 1960's. &lt;a href="http://www.helsinki.fi/~ssyreeni/texts/htmltut/htmltut"&gt;Here&lt;/a&gt;'s a quick history from decoy that I thought was pretty nice. I've tried to avoid Wikipedia lately only because I'd rather see what I can find in the dark corners of the internet.&lt;br /&gt;&lt;br /&gt;I've taken a real liking to the standard bearers of markup languages (XML and XHTML) but am finding some interesting things hiding in the lessor known ones. WML, SVG, SMIL, InkML, SSML, VoiceML, MathML.&lt;br /&gt;&lt;br /&gt;WML: Wireless Markup Language. With the rising numbers of mobile devices many high traffic sites have already created some versions of their site that can be displayed on the smaller screens associated with mobile devices. Using a combination of Wireless Application Protocol (WAP) and geotagging (identifying a specific coordinate by latitude and longitude) a service could combine information about a specific device's location (as reported by GPS) with a specific website (or a page within that site). For example, if someone was browsing your site while walking down the street- your site may know what companies are located close by. Your site could display ads based on the proximity of the store to the device's location (or by price paid for the ad) thus tempting the user to purchase a specific product or service. Maybe as as someone walks by an ad campaign could offer a special discount to entice the user into coming into the store.&lt;br /&gt;&lt;br /&gt;SVG: Scalable Vector Graphics. May websites are using Flash in order to draw attention to ads or to provide a fun, interactive experience to users. In order to develop Flash you must use proprietary software that can get rather expensive not to mention it can be difficult to get the two to work together. Since SVG is a W3C standard, it will work with all the standard browser components like the DOM and stylesheets such as CSS or XSL.&lt;br /&gt;&lt;br /&gt;SMIL: Synchronized Multimedia Integration Language. Think slideshow but better. Combining many markup tricks presentations can be created combining pictures, video, audio, text and even other presentations. Powerpoint can create the same kind of slideshows and display even them in a browser. Using SMIL can give you flexibility to incorporate many documents (even at presentation time) in order to create an up to the minute display.&lt;br /&gt;&lt;br /&gt;InkML: Drawing pad input. Touch screens are becoming cheaper and more widely available. InkML is a standard for recognizing input from handwriting input devices such as drawing pads or signature pads. It can even be used for signature verification. &lt;br /&gt;&lt;br /&gt;SSML: Speech Synthesis Markup Language. It literally says it all. Using SML will allow you to create documents for those with visual imparements who are using a voice browser. This is similar to Voice ML (Voice Markup Language) but where the VoiceML is more geared toward telephone systems (voice menus, speech recognition, phone tone recognition...), SSML is related more to accessibility. I can't wait for an application based on SSML, written in several languages to be a self paced language tutor. It'd be even better if it intergrated VoiceML to help you correct your pronunciation. The two standards are both part of the VXML or Voice Extensible Markup Language, which are being improved upon yet again. I see TONS of action happening in the voice area of markup languages.&lt;br /&gt;&lt;br /&gt;MathML: Math Markup Language. Is a way to properly describe and display mathematical equations. I belive that a ChemicalML shouldn't be far behind allowing us to describe chemicals. &lt;br /&gt;&lt;br /&gt;I'm not sure how long it will be (years) before all of these technologies come together where I can walk down the street, opt into a special offer from a local merchant (say a healthy snack) then be able to snap pictures of items in the store and see reviews on them (was it any good?) and then pay for it wirelessly.&lt;br /&gt;&lt;br /&gt;Another neat language is BioPAX which, eventually, will be used to describe certain biological interactions and molecules like RNA, DNA, messenger molecules and pathway information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-2673064222978214746?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/2673064222978214746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=2673064222978214746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2673064222978214746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2673064222978214746'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/markup-tags-and-describing-data.html' title='Markup Tags and Describing Data'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-6101336596934186069</id><published>2008-06-23T13:52:00.000-07:00</published><updated>2008-06-23T14:01:09.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Glom'/><category scheme='http://www.blogger.com/atom/ns#' term='easy database'/><title type='text'>Need a Small Business Database Fast?</title><content type='html'>Try &lt;a href="http://www.glom.org/wiki/index.php?title=Main_Page"&gt;Glom&lt;/a&gt;. Glom allows you to quickly create not only good relational databases, but the user interface as well. This may greatly help database designers. Rather than trying to get complete requirements out of a customer, sit them down and have them draw what they want then you can fill in the details. I'll be checking it out in the next couple of weeks just to play around with it. I'll make a database for all the houseplants I have just to give it a go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-6101336596934186069?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/6101336596934186069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=6101336596934186069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6101336596934186069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6101336596934186069'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/need-small-business-database-fast.html' title='Need a Small Business Database Fast?'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-6521820683337200388</id><published>2008-06-23T13:37:00.000-07:00</published><updated>2008-06-23T19:10:49.111-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mySQL users'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL permissions'/><category scheme='http://www.blogger.com/atom/ns#' term='web application considerations'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL grant'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL'/><title type='text'>A Sequel to mySQL</title><content type='html'>In setting up a web server there are hundreds of considerations that need to be made regarding the purpose of the server, the estimated load on the server, whether the server will be handling internal, external or all traffic on a network. Will it be serving static HTML? Dynamic content like PHP or Ruby on Rails? Will it need to support Flash, videos, gigabytes of pictures, thousands of users, or just email?&lt;br /&gt;&lt;br /&gt;If you manage to come to a conclusion, then you get to figure out not only how all the pieces fit together, but how they fit together securely. There are many programs that can be running on a server to handle traffic and processing, is every single one running at the lowest permission level possible? Did you change the permissions on a directory to 777 (meaning anyone can read, write or delete the file) but forget to change it back so only a certain process can handle it?&lt;br /&gt;&lt;br /&gt;When running dynamic applications using mySQL, you can create a host of special users that only have permissions to read, write, or delete certain tables. By using multiple users to accomplish a certain level of security and restricting the access you create a level of safety so that if one user is compromised by a design flaw in a specific page, it won't necessarily compromise the entire site. &lt;a href="http://mcc.hydromet.ru/docs/mysql/manual_Privilege_system.html"&gt;This&lt;/a&gt; link has some great info on user permissions in mySQL, while &lt;a href="http://www.securityfocus.com/infocus/1667"&gt;this&lt;/a&gt; site has some additional information on other design considerations and more coverage of granting permissions.&lt;br /&gt;&lt;br /&gt;I would be remiss if I didn't also mention the &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/grant.html"&gt;mySQL documentation&lt;/a&gt; as well discussing the GRANT syntax as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-6521820683337200388?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/6521820683337200388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=6521820683337200388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6521820683337200388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6521820683337200388'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/sequel-to-mysql.html' title='A Sequel to mySQL'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-6229278005710393456</id><published>2008-06-23T13:30:00.001-07:00</published><updated>2008-06-23T13:37:29.870-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html as text'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='html converter'/><title type='text'>Posting HTML and PHP</title><content type='html'>Having created the tutorial to hopefully get someone up and running on php, I needed to enter a bit of HTML code to show someone what they should see. Since I am typing this on a page written in HTML, by entering HTML and hitting the 'publish' button the text area has a nasty habit of rendering what I typed as HTML. That's not what I wanted so I found this handy tool that you can use to easily convert code to HTML safe code. I'll have to look into creating a tag that displays the content as text only. Something like &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;htmloff&amp;gt;Code in here&amp;lt;/htmloff&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Where any tags in the code part are treated as text. Thanks to the folks at  &lt;a href="http://www.tutorialtastic.co.uk/converter.php"&gt;Tutorialtastic&lt;/a&gt; for creating this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-6229278005710393456?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/6229278005710393456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=6229278005710393456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6229278005710393456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6229278005710393456'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/posting-html-and-php.html' title='Posting HTML and PHP'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-162735901761199328</id><published>2008-06-23T12:48:00.000-07:00</published><updated>2008-06-23T13:29:45.547-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php data retrieval'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Web Server Part Eight (Viewing Dynamic Content)</title><content type='html'>Well, we're almost done. We've made a form to add content, created the needed databases and users and even added some content. Let's create the final page to display the data.&lt;br /&gt;&lt;br /&gt;Create the 'showEvents.php' file and add the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;!-- &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;default.css&amp;quot; /&amp;gt; --&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Show Events&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Event Info&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;?php // Make a MySQL Connection&lt;br /&gt;mysql_connect(&amp;quot;localhost&amp;quot;, &amp;quot;phpTest&amp;quot;, &amp;quot;phpPass&amp;quot;) or die(mysql_error());&lt;br /&gt;mysql_select_db(&amp;quot;phpCalTest&amp;quot;) or die(mysql_error());&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nothing out of the ordinary here. HTML info, creating connections, selecting a database.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;$result = mysql_query(&amp;quot;SELECT * FROM tblEvents&amp;quot;)or die(mysql_error());&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ok, this warrants a closer look. We've opened a new block of php code, and told it to perform a mysql_query and given it a SQL statement which gets all (*) entries from tblEvents. It then takes all those entries and stores them into a variable called $result. Now that we have the information, we need to look at it entry by entry.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;print &amp;quot;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EVENT NAME&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;EVENT STARTS&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;EVENT ENDS&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;CALENDAR&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;LOCATION&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;RECUR&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;&lt;br /&gt;while($row = mysql_fetch_array($result)){&lt;br /&gt;&lt;br /&gt;print &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;quot;.$row['eventName'].&amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;print &amp;quot;&amp;lt;td&amp;gt;&amp;quot;.$row['eventBegins'].&amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;print &amp;quot;&amp;lt;td&amp;gt;&amp;quot;.$row['eventEnds'].&amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;&lt;br /&gt;//print &amp;quot;&amp;lt;td&amp;gt;&amp;quot;.$row['calId'].&amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;$calIdOfEvent = $row['calId'];&lt;br /&gt;$retrieveCal = mysql_query(&amp;quot;SELECT calName FROM tblCalendars where calId=$calIdOfEvent&amp;quot;)or die(mysql_error());&lt;br /&gt;$temp = mysql_fetch_array($retrieveCal)or die(mysql_error()); &lt;br /&gt;print &amp;quot;&amp;lt;td&amp;gt;&amp;quot;.$temp['calName'].&amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;&lt;br /&gt;print &amp;quot;&amp;lt;td&amp;gt;&amp;quot;.$row['eventLocation'].&amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;print &amp;quot;&amp;lt;td&amp;gt;&amp;quot;.$row['CalEventRecur'].&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;We'll break this down line by line. The first mess is simply letting up our table and giving us some pretty headers making the table easy to read. The next statement is a 'while' loop. It will do something while a certain condition is true. In this case, it will create all the information between the two curly braces for every entry in the database. When it has finished going through all the entries, it will stop.&lt;br /&gt;&lt;br /&gt;The next group of three lines simply puts the information about the event(name, start and end times) into the table. The next group is rather interesting. It starts off with a comment. The statement looks the same as the previous ones but let's think about not only our table design, but relational database structure as well. The value that is actually stored in that field is the unique ID number of a certain calendar. We don't really want to display some number, we want to show the name of the calendar itself. That means we have to fetch that information from the tblCalendars. That is exactly what the next few lines do. We take the number in the 'calId' field from tblEvents and find the matching calName in tblCalendars that has the same calId. Once we find that, put the calendar name into the table.&lt;br /&gt;&lt;br /&gt;After that we finish putting the data into the table, close it all up, add a link to the createEvent.php and that's it. Your first php driven dynamic website is done. You can now play with adding as many events as you want.&lt;br /&gt;&lt;br /&gt;I'll revisit this example in the future to improve on the (many) things that are wrong with the design. This was just a basic example to help you get started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-162735901761199328?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/162735901761199328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=162735901761199328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/162735901761199328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/162735901761199328'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/web-server-part-eight-viewing-dynamic.html' title='Web Server Part Eight (Viewing Dynamic Content)'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-3635496355726329966</id><published>2008-06-23T10:59:00.001-07:00</published><updated>2008-06-23T13:54:11.203-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mySQL users'/><category scheme='http://www.blogger.com/atom/ns#' term='php variable'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL permissions'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL tables'/><category scheme='http://www.blogger.com/atom/ns#' term='form action'/><category scheme='http://www.blogger.com/atom/ns#' term='php POST'/><category scheme='http://www.blogger.com/atom/ns#' term='connect mySQL to PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL'/><title type='text'>Web Server Part Seven (Adding Dynamic Content)</title><content type='html'>So we've got our form set. We enter some data and if we click on the button, we might get an error. One reason is because the page doesn't exist yet. Let's now create the 'addEvent.php' page.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;!-- &amp;lt;link rel="stylesheet" type="text/css" href="default.css" /&amp;gt; --&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Event Adder&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Adding Event&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Again, we start with a normal beginning.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;// Assign variables&lt;br /&gt;$calName = $_POST['calName'];&lt;br /&gt;$calAuthor = $_POST['calAuthor'];&lt;br /&gt;$eventName = $_POST['eventName'];&lt;br /&gt;$eventLocation = $_POST['eventLocation'];&lt;br /&gt;$eventBegins = $_POST['eventBegins'];&lt;br /&gt;$eventEnds = $_POST['eventEnds'];&lt;br /&gt;$eventRecur = $_POST['eventRecur'];&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ok, now we see the 'php function start' identified by the '&amp;lt;?php' symbol. Next we assign variable names for all the input text from the previous page. PHP will send all this information over because you used the 'post' command. So now you see that we have a whole bunch of variables that refer to what the user entered. Good practice says that you should validate the data before trying to assign it to each variable. If it fails for one reason or another you should return the user back to the form with a message that says "Try Again" and gives them the reason for the rejected form.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// Open connection and store data&lt;br /&gt;mysql_connect("localhost", "phpTest", "phpPass") or die(mysql_error());&lt;br /&gt;mysql_select_db("phpCalTest") or die(mysql_error());&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Well now things just got tricky. Here's why.&lt;br /&gt;&lt;br /&gt;We just asked for a connection on the 'localhost' (that is the computer that the database resides on) and to login with the username 'phpTest' and the password 'phpPass' Of course, putting the password in plain text is a BAD IDEA, but for now we'll work with it. The 'or die' statements simply say that if we can't perform the action we stop what we are doing and return an error.&lt;br /&gt;&lt;br /&gt;The next line asks to use the database named 'phpCalTest' and here lies the second problem. We have not created the user 'phpTest' or the database 'phpCalTest'. Here is where we must break from php to discuss mySQL.&lt;br /&gt;&lt;br /&gt;Ok, we know that we need to create two things in mySQL. One: a database named 'phpCalTest' and a user named 'phpTest' that can access that database. The assignment of permissions is one of the more critical parts to writing a secure application. If you give too much access you leave security holes, but if you restrict access too much, you may get caught unable to access data you need. Luckily mySQL has the ability to create, remove and modify permissions.&lt;br /&gt;&lt;br /&gt;Let's get going on this database shall we? First you should access your server and open up the mysql console like so:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mysql -h 'host' -u root -p&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mysql -u root -p&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you access mysql remotely enter the host information, if you're working on that system, you can leave out the host information. This logs us in as root and puts us in the mysql console. You should see:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mysql &gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;From here we need to enter some mysql commands:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;create database phpCalTest;&lt;br /&gt;use phpCalTest;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This creates the database and opens it up so we can use it. Here we need to pause and think about our design choices. How exactly do I want to store this data so that I don't repeat myself (or repeat as little as possible)? In thinking about it I decided that I want to keep a list of calendars separate from the list of events. For each calendar I want to give it a unique number, a name and an author (just like on the createEvent.php page, there is space to add that information). So I will use the following command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;create table tblCalendars(calId int not null auto_increment, primary key (calId), calName varchar(30), calAuthor varchar(30));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ok, I have my table of calendars, how about events? I decided that each calendar can have many events (then an event must belong to a certain calendar), and each event has a unique number, a name and the other information on the createEvent.php page.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;create table tblEvents(eventId int not null auto_increment, primary key (eventId), eventName varchar(30), eventBegins datetime, eventEnds datetime, calId int, eventLocation varchar(30), eventRecur varchar(1);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Notice how there is a field named 'calId' in the event table. It is this field which ties the two together. So let's look at that for a moment. We are storing a unique calendar number in the same row as a unique event. The power of this lies in the fact that we may have dozens of calendars and thousands of events. Rather than store the actual names of the calendars (What if it was named 'the_longest_calendar_name_I_have_ever_seen'? Users could mistype that, and it's easier to store a 10-15 digit number, than a 42 character text entry. Multiply this simple savings of say 32 bytes by a million records and you've saved a bit of space in the database and enforced 'referential integrity'. This means that if you present the user with only a few options and limit what they can enter you can ensure that when a user selects "Unique Entry" they all match up whereas if the value were typed in you may end up with "a unique entry" or "uniqueentry" or some other variation that would cause the values to not display together.&lt;br /&gt;&lt;br /&gt;We've got our table all set, time to create a user.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;create user phpTest identified by 'phpPass';&lt;br /&gt;grant all on table phpCalTest to user phpTest;&lt;br /&gt;quit&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This creates a the user and gives that user permission to work on phpCalTest and then exits mysql. This is good. As a rule, you should avoid using the 'root' user in all cases as it can create security issues. Restricting a user to work on only a limited amount of tables is a good security practice. Try relogging on to mysql, but now as the user you just created and selecting some data:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mysql -u phpTest -p&lt;br /&gt;phpTest&lt;br /&gt;&lt;br /&gt;use phpCalTest;&lt;br /&gt;select * from tblCalendars;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You should get an 'empty set' notice, but other than that you should now be able to access the database from the addEvent.php page. Let's go back and finish it.&lt;br /&gt;&lt;br /&gt;Keep adding onto your addEvent.php file:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mysql_query("insert into tblCalendars(calName, calAuthor)values('$calName', '$calAuthor')");&lt;br /&gt;$calID = mysql_insert_id();&lt;br /&gt;mysql_query("insert into tblEvents(eventName,&lt;br /&gt;eventBegins,&lt;br /&gt;eventEnds,&lt;br /&gt;eventLocation,&lt;br /&gt;calId,&lt;br /&gt;eventRecur)&lt;br /&gt;values('$eventName',&lt;br /&gt;'$eventBegins',&lt;br /&gt;'$eventEnds',&lt;br /&gt;'$eventLocation',&lt;br /&gt;'$calID',&lt;br /&gt;'$eventRecur')")&lt;br /&gt;or die(mysql_error());&lt;br /&gt;mysql_close();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ok, here is where things get interesting. This entire block only does one thing. Inserts the values that you received from the createEvent.php page into the appropriate field in the correct table. So the first insert statement adds the calendar name and author to the table. What about that unique number for each calendar? It's added each time you put something in there so you don't have to add it but look at the next line.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$calId = mysql_insert_id();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This line makes note of that unique number so we can tell the event what calendar it belongs to. In the next insert statement you can see where the $calId variable is inserted into the calId field of tblEvents. After that it is good practice to close the mysql connection, but not required.&lt;br /&gt;&lt;br /&gt;The final part of the 'addEvent.php' file is just a table that repeats what data was entered so the user can see it in addition to a link to 'showEvents.php'&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;print "&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Calendar Name:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;";&lt;br /&gt;print $calName;&lt;br /&gt;print "&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Calendar Author:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;";&lt;br /&gt;print $calAuthor;&lt;br /&gt;print "&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Event Name:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;";&lt;br /&gt;print $eventName;&lt;br /&gt;print "&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Event Start Date and Time:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;";&lt;br /&gt;print $eventBegins;&lt;br /&gt;print "&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Event End Date and Time:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;";&lt;br /&gt;print $eventEnds;&lt;br /&gt;print "&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Event Repeats:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;";&lt;br /&gt;print $eventRecur;&lt;br /&gt;print "&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;amp;#34&amp;amp;#50&amp;amp;#34 align=&amp;amp;#34center&amp;amp;#34&amp;gt;&amp;lt;/table&amp;gt;";&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="/showEvents.php"&amp;gt;Show All Events&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The important note here is the '?&amp;gt;' which is the 'php closing tag'&lt;br /&gt;&lt;br /&gt;With all that in your 'addEvent.php' file, open up the 'createEvent.php' and enter some data. For the time being you should enter the Event Start and End times in the format required by the mysql datetime format. Later, you can accept other styles of date and time entries, but for now you're stuck entering it a specific way. Enter the dates as 'YYYY-MM-DD HH:MM:SS' for proper storage. If you didn't pick up on it earlier, the eventRecur field is only one character long. I decided that I would store how often the even happens with a 'd' for daily, a 'w' for weekly and a 'm' for monthly. You can add more letters, but they will be truncated just as if you entered one of the other fields longer than 30 chanacters. Again, this should be validated before inserting into the database to ensure we have good data. When done, click the button!&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;code&gt;&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-3635496355726329966?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/3635496355726329966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=3635496355726329966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3635496355726329966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/3635496355726329966'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/web-server-part-seven-adding-dynamic.html' title='Web Server Part Seven (Adding Dynamic Content)'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-2680228506454003530</id><published>2008-06-23T10:16:00.000-07:00</published><updated>2008-06-23T13:27:02.139-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='form action'/><category scheme='http://www.blogger.com/atom/ns#' term='phpInfo()'/><category scheme='http://www.blogger.com/atom/ns#' term='php Calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='php basics'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL'/><title type='text'>Web Server Part Six (Entering Dynamic Content)</title><content type='html'>So we can now create some content. But I'm sure you want to spice things up a bit. Great. Let's see if you have php running on your server. PHP is an easy way to get started creating dynamic websites by pulling in information from a database. You probably already have a database installed on your computer (mySQL) that works great with php.&lt;br /&gt;But let's test. Create a new file in your webserver directory called 'info.php' and add the following content:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt; PHP Test Script &amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;phpinfo( );?&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This handy little function gives you some info on your operating environment. In fact, if you leave this in your directory and someone with less than kind intentions finds it, it can give them more than enough information about your system to quickly search for some vulnerabilities and cause problems. Ok, so how do you use this to create something useful? Let's make a nice three page database driven PHP application to display some events that we create. It will be very basic and it won't include validation but it will work to store events.&lt;br /&gt;&lt;br /&gt;How are we going to structure this? I've chosen to use three separate pages to accomplish a couple of things. I have already decided how I'm going to store information relating to events and rather than explain now, I'll insert the design comments on table structures as we move along.&lt;br /&gt;&lt;br /&gt;1.) showEvents.php&lt;br /&gt;This page will display all the events in the database. All formatting of the information (how it is displayed) should go here.&lt;br /&gt;&lt;br /&gt;2.) createEvent.php&lt;br /&gt;This page will contain a form that a user enters information into. There should be a link on the showEvents.php pages to point users this direction to add more events.&lt;br /&gt;&lt;br /&gt;3.) addEvent.php&lt;br /&gt;This page will do the actual processing and storing of the data. This page controls what happens to the data (especially if there are errors) and how it is put into the database. If the storage is successful, we should display a link back to the showEvents.php page so users can see that their data did get updated.&lt;br /&gt;&lt;br /&gt;Let's start with the createEvent.php page:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&amp;lt;!-- &amp;lt;link rel="stylesheet" type="text/css" href="default.css" /&amp;gt; --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;title&amp;gt;Create a New Event&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Add the event details in this form&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nothing special here. I left in a reference to a 'default.css'. When you want to add a stylesheet, you're ready. If you just want to see the info, you can comment it out. It's much easier to debug the PHP/HTML and CSS separately.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;form action="addEvent.php" method="post"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Calendar Name:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type="text" name="calName" /&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Calendar Author:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type="text" name="calAuthor" /&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Event Name:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type="text" name="eventName" /&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Event Location:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type="text" name="eventLocation" /&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Event Start Date and Time:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type="text"name="eventBegins" /&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Event End Date and Time:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type="text"name="eventEnds" /&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Event Repeats:&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type="text" name="eventRecur" /&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;td colspan="2" align="center"&amp;gt;&amp;lt;input type="submit" /&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ok here's one important part. First off, the 'form action' is the name of the page we will create that will do the processing. A more advanced technique is to do the processing on the same page as the form. This allows you to put data back into the original user form if something has failed (a value is incorrect and won't store in the DB for example).&lt;br /&gt;&lt;br /&gt;After that is a standard table to make the data output nicely. As you look at the form, notice how I have given each 'input text' a name. This name is the same as it will be in the database. So, by looking at all the names, you can infer some of the field names in the database.&lt;br /&gt;&lt;br /&gt;At the bottom is a button that takes up two columns and centers to put the button at the bottom of the form so the user will click it when they are done entering data. Normally, the first action the button sholud take is to validate ALL USER INPUT. This is important so that you get good, valid user data and for security. If a user starts putting in SQL type commands your application may return bad data in addition to other negative consequences. For this example we are skipping validation because I'm the only user for now.&lt;br /&gt;&lt;br /&gt;That's it for this page. Load it up in your browser and you should see a nice form ready for user input.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-2680228506454003530?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/2680228506454003530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=2680228506454003530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2680228506454003530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2680228506454003530'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/web-server-part-six-entering-dynamic.html' title='Web Server Part Six (Entering Dynamic Content)'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-7467930795965025827</id><published>2008-06-22T11:43:00.000-07:00</published><updated>2008-06-23T13:25:51.188-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Web Server Setup Part Five (Basic Content)</title><content type='html'>Ok, so we have:&lt;br /&gt;A server up and running&lt;br /&gt;A place to put content (/var/www/)&lt;br /&gt;A method to add content (SSH and copying files)&lt;br /&gt;&lt;br /&gt;Let's add some content.&lt;br /&gt;&lt;br /&gt;I want to replace the boring "It works!" page, with what will be my future homepage. So let's make some HTML and maybe a stylesheet.&lt;br /&gt;&lt;br /&gt;Let's start with a simple HTML file:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;link rel="stylesheet" type="text/css" href="default.css" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;title&amp;gt;My XHTML Page&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;div id="container"&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&amp;lt;a href="Contact'&amp;gt;mailto:myname@gmail.com"&amp;gt;Contact Me&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;a href="http://validator.w3.org/check/referer"&amp;gt;Validate XHTML&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;a href="Validate'&amp;gt;http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fmysite.com%2Findex.html&amp;amp;amp;profile=css21&amp;amp;amp;usermedium=all&amp;amp;amp;warning=1&amp;amp;amp;lang=en"&amp;gt;Validate CSS&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And here's a simple stylesheet.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#container {&lt;br /&gt;background-color : black;&lt;br /&gt;width : 100%;&lt;br /&gt;margin : 0;&lt;br /&gt;}&lt;br /&gt;body {&lt;br /&gt;background-color : black;&lt;br /&gt;}&lt;br /&gt;p {&lt;br /&gt;font-family : Verdana, Helvetica, sans-serif;&lt;br /&gt;font-size : 12pt;&lt;br /&gt;color : blue;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Replace the 'index.html' and add the 'default.css' to your '/var/www/' directory and open up a web browser and point it to your server. You've got content. Really from here all you have to do is keep adding your content and occasionally click on the validation links to ensure you're keeping your content according to the w3c standards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-7467930795965025827?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/7467930795965025827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=7467930795965025827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7467930795965025827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/7467930795965025827'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/web-server-setup-part-five-basic.html' title='Web Server Setup Part Five (Basic Content)'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-8307414246629310874</id><published>2008-06-22T10:54:00.000-07:00</published><updated>2008-06-22T11:38:16.529-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server upgrades'/><category scheme='http://www.blogger.com/atom/ns#' term='server administration'/><category scheme='http://www.blogger.com/atom/ns#' term='remote access'/><title type='text'>Web Server Setup Part Four (Remote Access)</title><content type='html'>Well we've learned how to move around and create new files on our webserver, but if you've got two computers and you are running back and forth to type commands (maybe your other computer is in a different room) you're thinking that there's got to be a better way. There is. One of the programs that is likely installed is called SSH. What it allows you to do is to remotely log into your computer and execute commands. What 'SSH' stands for is 'secure shell', the shell allows a user to execute commands and the secure part is that all the information you send is encrypted. If you love using a command line, you can use:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ssh 127.0.0.1 -l {username}   Use the server IP and username with no curly braces&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It will ask for your password and then it's exactly like you were sitting in front of the other computer. For those working in multiple platforms (Windows/Mac/Linux) if you have a GUI there are several programs available that you can download and use. Just do a quick search for 'SSH clients' and you should have many different options. I'm using a program called 'SSH Secure Shell' written for Windows and it has worked quite well for me. It allows me to store many different IP addresses and logins for those computers. It also comes with file transfer abilities so I can easily upload files from my Windows computer to the Linux server. &lt;br /&gt;&lt;br /&gt;What if, for some reason you don't have SSH installed? If you're using Ubuntu (or another Debian based distro) there's a wonderful built in service called the 'Synaptic Package Manager' which allows you to easily get and install updates and new programs. For instance, if you wanted to install ssh:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install ssh&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Pretty easy huh? What about installing updates to the OS itself? Easy as well:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get update&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;All this does is look at the list of available update sites and make sure that it has the most current list of updates. To actually upgrade the OS:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get upgrade&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you have updates to install it will ask you first and notify you how much additional space it will take. Sometimes it may require retrieving several MB of updates, other times it's only a couple of KB. I would not reccommend putting these commands into a 'cron' task. Why not? I think that automatic updating could have a negative effect in some cases if an update accidentally made certain programs incompatible. Say an update to one medule caused the php module to no longer work. Suddenly any php driven site you have doesn't work. It's best to do the updates when YOU are ready-- after making a backup of course so you can rollback any negative changes.&lt;br /&gt;&lt;br /&gt;One additional important consideration and the drawback of using SSH for upgrades...what if one of the upgrades is for SSH? You can't very well upgrade it while you are using SSH. In this case doing updates at the console may be better than managing it remotely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-8307414246629310874?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/8307414246629310874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=8307414246629310874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/8307414246629310874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/8307414246629310874'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/web-server-setup-part-four-remote.html' title='Web Server Setup Part Four (Remote Access)'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-2852352618577957225</id><published>2008-06-21T19:21:00.000-07:00</published><updated>2008-06-21T21:56:03.276-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='basic linux'/><category scheme='http://www.blogger.com/atom/ns#' term='linux commands'/><title type='text'>Web Server Setup Part Three (Getting Around)</title><content type='html'>I'll hope that your installation went well. I'll pretend that everything went well, the OS installed from CD and you've rebooted and maybe see the Ubuntu login. Login to your newly created system and let's start poking around. This post will focus on helping you get familiar with Linux commands, moving around the system, editing files and generally teach you just enough to mess up the system on your own.&lt;br /&gt;&lt;br /&gt;Let's stop for a moment and think about where we are headed. If all you are interested in is getting a functional webserver to create webpages with HTML and CSS...you're probably done. If you know what the IP of your server is, (your server may actually have three different IP addresses that point to the same place!) you should be able to point a browser at the IP address and see a page loaded. All you have to do is change the content of the page and when you refresh your browser you should see the changes.&lt;br /&gt;&lt;br /&gt;Lets start with what you see on the screen after logging in:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;someuser@someserver:~$&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If this is what you see, the little wavy line (~ tilda) tells you you are in your home directory. Let's leave ourselves a note here. We can easily create a file by 'touching' it into existance.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;touch mynote.txt&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nothing happened? Oh but it did...let's look at the list of files in your home directory using 'ls' (let's say it's short for 'look-see')&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ls&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You should see that there is a file named 'mynote.txt' Why don't we put something useful in there? How do we edit a file? There are several text editors available. 'vim' is popular, you can also use 'nano' I'll use 'nano' to edit this file.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;nano mynote.txt&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will open up the file in the nano text editor, but, it's empty because we haven't put anything there yet. Lets put some good information in there:&lt;br /&gt;&lt;br /&gt;&lt;text&gt;&lt;br /&gt;So far we have learned that we can use 'ls' to see what files are in a directory and we can use 'touch' to create a file. We can use 'vim' or 'nano' to edit the information in a file.&lt;br /&gt;&lt;/text&gt;&lt;br /&gt;&lt;br /&gt;How do we save the file? Down at the bottom of the screen is a list of commands. Hit 'Ctrl + X' to exit and the program will ask you to if you want to save. Hit 'y' and it will ask you if you what name you want to save the file as. This can be useful if you want to save the file under a different name than you opened it under.&lt;br /&gt;&lt;br /&gt;Well, we've left us a good note here...let's go exploring. I'll point out some important things along the way. How do we get out of here? We use the 'cd' (short for change directory) command to move through different directories. To go back a directory, use '..' as your directory.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd ..&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note that the space between the 'cd' and the '..' is important. You should now see that your command prompt says:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;someuser@someserver:/home$&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is telling you that you are in the 'home' directory. What's in here? Why don't you have a look-see and find out?&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ls&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;All I see is my login name? You should note that because the list has a different color, it's actually not a file, but a directory. So if you had multiple users here, you should see a folder for each user. Let's go back one more directory and see what's there.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd ..&lt;br /&gt;ls&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Whoa. Lot's of stuff here, more colors for the folders. These help you identify certain aspects about those folders. I'll leave it up to you to decipher what means what here. There are four folders I'll point out that I feel are important (for this lesson):&lt;br /&gt;&lt;br /&gt;bin: This folder contains binary files. Here you may create files that execute several commands for you. Much like batch files in Windows systems. Creating scripts here can make automating tasks easier, but used wrong, can make it much easier to screw things up. Really fast.&lt;br /&gt;&lt;br /&gt;etc: This folder contains...lots of stuff. Here's a neat little trick to help you see everything in the directory easier.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ls &amp;#124more&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The '&amp;#124' character is called 'pipes' and using 'more' will only allow what can fit on the screen to be displayed. You can use 'enter' to go to the next line, or use 'space' to scroll one screen at a time. How else could this little trick be useful? Let's say you had a system error and you wanted to look at the system log. Why open the file, then scroll all the way to the end then close it? By using this handy command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;dmesg syslog.conf &amp;#124tail&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It will only print out the last 10 lines of the file! Back to the directory at hand, /etc/ contains a variety of important files that are important to the proper operation of the server. The other VERY important set of files here are the 'cron' files. Cron, has it's roots in time related words. Thus, 'cron' handles certain time related tasks. Want to send yourself an email each day at a certain time with data related to server stats? You can. How about a report each week or month? Yup, you can do that too with 'cron' tasks.&lt;br /&gt;&lt;br /&gt;home: If you remotely log into your system, you can upload files here under your login name. This is your area to save stuff. I mean, it wouldn't really make sense to save YOUR files in someone ELSE's home directory would it?&lt;br /&gt;&lt;br /&gt;var: Ahhh my favorite folder... in fact, let's navigate there now.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd /var/&lt;br /&gt;ls&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;What have we here? Lots of neat stuff but (for me) the most important thing is the 'www' folder. Yup. The files here are the ones that are returned to people requesting web pages.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cd www&lt;br /&gt;ls&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Hey, an index.html page! What's in it?&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;nano index.html&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Lets change this page from 'It works' to 'This is my page', then hit 'Ctrl + X' and save the file. You may get an error. Why? Linux tries to be very secure even if you don't want it to be. If you haven't done anything in awhile, it may think that you have stepped away from the keyboard and it could be anyone typing this. How do we reassure the computer that it is indeed you, and you do want to perform the action you stated? By using 'sudo' before we perform an action. So you have to close the file with out saving it and then type:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo nano index.html&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now make your changes and save it.&lt;br /&gt;&lt;br /&gt;I'm going to go over two final commands and you should have a pretty good grasp on getting around in Linux.&lt;br /&gt;&lt;br /&gt;Let's say we are going to try some experimental change to the 'index.html' file. Let's make a backup by creating a back-up. Don't forget about 'sudo', otherwise you might not be able to do certain commands.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo cp index.html index.html.bak&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In Windows based systems, you could only have three characters after a (dot). Not in Linux. Let's look in our directory now with 'ls'. You should see now that there are two files. You can easily change the original file however you choose, save it and then check your changes in a web browser. Once you are satisfied, we should remove the backup file for two reasons. One: to keep the file system clean. Two: Security. If you are halfway through some complex changes and you needed to perform some test using a fake user, leaving the test file in an active web server directory can leave huge holes in security. Let's get rid of the backup.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo rm index.html.bak&lt;br /&gt;ls&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You should only see the 'index.html' file remaining. I think that's about it for moving around, creating, editing and removing files. Removing directories is a bit trickier but more on that later. Tomorrow, I'll show you how to remotely log into your server, upload files and do (just about) anything that you could do if you were sitting right in front of the computer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-2852352618577957225?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/2852352618577957225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=2852352618577957225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2852352618577957225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/2852352618577957225'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/web-server-setup-part-three-getting.html' title='Web Server Setup Part Three (Getting Around)'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-5273452554527705986</id><published>2008-06-21T18:26:00.001-07:00</published><updated>2008-06-21T19:21:12.691-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating System'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Web Server Setup Part Two (The Operating System)</title><content type='html'>So you have a working computer and now you need to choose how to get the computer up and running and serving web pages. First we need the most basic kind of program to tell the computer how to start up and allow you to tell it what to do. We need to choose an operating system. This decision is also closely tied to what kind of webpages we want to create.&lt;br /&gt;&lt;br /&gt;How much support are we really going to need to get this going? If this is more for a professional venture, you may want to lean toward choosing a Microsoft based system. Microsoft has some good programs out there to incorporate and link together many components of your network. IIS, ActiveDirectory, SQL Server are components you will need to understand how to integrate with each other in order to serve certain flavors of web pages. Writing ASP (Active Server Pages), .Net (Dot Net), Silverlight and traditional pages can all be accomplished on such a system. I won't say that is a complete list of what can be accomplished, but it's enough of a primer that if those are the technologies that interest you...have at it. Install your (Windows Genuine Advantage certified copy of course) copy of Windows and then look up how to obtain the other various software programs in order to get started. There are many sites available to help you with setup, troubleshooting, and problem solving...though they may come at a price.&lt;br /&gt;&lt;br /&gt;Your other option is to go with a freely available operating system such as Linux. While these also can be used for professional ventures (What OS do you think the server hosting this site is running on?), you may not always have the option of paid, professional help. For a DIY'er, sometimes the lack of support is a good challenge and can help you learn more. In other cases it may cause significant amounts of frustration. I have chosen to continue down this path for the tutorial. Even if you have been a long time Windows user, don't run away yet! You shouldn't be scared of using Linux.&lt;br /&gt;&lt;br /&gt;Linux Operating Systems&lt;br /&gt;&lt;br /&gt;Choosing a Linux operating system is much like choosing a car. There are several different brands of Linux, and in some cases, several different flavors of that specific vendor's distributions. I'll mention a few and how you can go find more.&lt;br /&gt;&lt;br /&gt;Ubuntu&lt;br /&gt;&lt;br /&gt;This is my current choice. I have found that most hardware is supported, it has a very intuitive installer and installs a nice clean system. Ubuntu has both a desktop version (with a full GUI like Windows) and a server version (text based only, but doesn't suck memory like a GUI would). The desktop version even comes with a 'Live CD' so that you can try it before wiping out your system to install it. This can also help determine if your system can support Ubuntu. I have gone with the server because I'm using older hardware.&lt;br /&gt;&lt;br /&gt;DSL (Damn Small Linux)&lt;br /&gt;&lt;br /&gt;This is one of my favorites. The entire operating system will fit in 50MB and supports hardware as old as the 486 style archetecture systems with only 64MB of RAM. The entire operating system can be run from RAM and gives a full GUI with a web browser and a suite of other tools to use. This is the only distro I have found that will run on an old Celeron 600 with 64MB of RAM. It can be installed to a USB drive and run from there on some of the more modern computers. It really is a great setup, but I haven't played with it nearly as much as Ubuntu...yet.&lt;br /&gt;&lt;br /&gt;Others&lt;br /&gt;&lt;br /&gt;Mint, RedHat, Fedora, and OpenSUSE are some of the other variants available. You can go browse these and more at &lt;a href="http://www.distrowatch.com/"&gt;www.distrowatch.com&lt;/a&gt;. The site provides news, updates, release information, and notes on HUNDREDS of versions of Linux available. Which one to choose? Unless your job is to evaluate new versions of Linux it would be hard to try them all. It's easiest to pick one that's atleast in the top 10. Those seem to have the most current support. The great thing is that even if you learn one it won't take much to switch to a different flavor. Like getting into a car you've never driven before. At first it's wierd, but you get comfortable over time.&lt;br /&gt;&lt;br /&gt;Rather than reinvent the wheel, Falko Timme has a fantastic tutorial with more screenshots over &lt;a href="http://www.howtoforge.com/perfect-server-ubuntu8.04-lts"&gt;at HowToForge&lt;/a&gt; than I think I've ever seen for an installation tutorial. I would recommend following that if you are playing along at home. The only difference I have done is that I really don't need a DNS server because I'm not an ISP providing web services. If you have issues during the installation, don't despair. You might try a couple of different distros before settling on one you like...or finding one that works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-5273452554527705986?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/5273452554527705986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=5273452554527705986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5273452554527705986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5273452554527705986'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/web-server-setup-part-two-operating.html' title='Web Server Setup Part Two (The Operating System)'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-5607158060741744534</id><published>2008-06-21T15:51:00.000-07:00</published><updated>2008-06-21T18:26:11.004-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web server'/><category scheme='http://www.blogger.com/atom/ns#' term='web programming languages'/><title type='text'>Web Server Setup Part One (The System)</title><content type='html'>There's plenty of web hosts out there. Many offer free services such as hosting and predesigned web pages so you can just focus on creating content. The advantages are that you don't have to worry about any of the hardware setup, security, creating the web programs and upgrading of the systems and software.&lt;br /&gt;&lt;br /&gt;However, the disadvantage is that you may lose some flexibility. If you wanted to mess around with a Ruby on Rails website, you'd have to find a web host that will allow it. Want to try creating your own CGI scripts? Maybe you want to try some more cutting edge programming and require a specific environment. Do you want to setup a server for yourself or your company to test out new software, or make updating client sites easier? You can do all these things with your own private web server.&lt;br /&gt;&lt;br /&gt;Maybe you've heard of virtualization. Virtualization is essentially runnning an entire operating system as if it were a program. When you run a word processor on your computer, you can open up two different word processors and you can copy some text between them. Or maybe copy some text from a web browser to notepad so you can save it on your computer. Virtualization allows you to run operating systems as if they were programs. There's more power than just being able to copy text or files between different operating systems. Unfortunatly, running an OS virtualized will eat a lot of system resources and takes a fairly powerful computer. That's why the next few posts will discuss setting up a dedicated server that is capable of sending email, serving websites with traditional HTML, as well as being able to take advantage of Javascript, Ruby on Rails, CGI, PHP, Flash and can take advantage of whatever Web 2.0 techniques you want.&lt;br /&gt;&lt;br /&gt;I'm hoping that you have an old computer sitting around that you can use. If you use some older equipment you likely won't be able to support 1000's of users, but you will be able to setup some pretty good sites in your own personal sandbox.&lt;br /&gt;&lt;br /&gt;The system I used is an old PIII-500 with 512MB of RAM. It' s more than enough for me to have about a dozen web sites on the computer. It could support hundreds of sites, but I'm the only one really using it though I do let friends occasionally look at stuff I have there. The more power your server has of course the faster it will be, but at a certain point you're really just wasting resources. Do you really need a quad-core Xenon with 8GB of RAM and a 10,000 RPM, 500GB RAID array? (Answer: yes) If you don't happen to have one of those lying around use what you have. If you do have an extra one, please contact me for shipping information. Some computers you thought were barely worth keeping can surprise you and still run a web server.&lt;br /&gt;&lt;br /&gt;I won't cover building a computer from parts, I won't cover setting up your network so assuming you have a computer put together and plugged in to your internet connection...we're ready to get started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-5607158060741744534?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/5607158060741744534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=5607158060741744534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5607158060741744534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5607158060741744534'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/web-server-setup-part-one-system.html' title='Web Server Setup Part One (The System)'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-6946152664870554489</id><published>2008-06-21T12:41:00.000-07:00</published><updated>2008-06-21T15:51:27.426-07:00</updated><title type='text'>Perspective</title><content type='html'>It's all about seeing things from a different angle. It's difficult at times to see how something bad could possibly have any good in it.&lt;br /&gt;&lt;br /&gt;Recently I changed jobs. I did all the right things. Filled out resumes, did the interviews and got a decent job in software. I gave notice to my employer and started to transition out and train the replacements. A week before I took the job I got a call.&lt;br /&gt;&lt;br /&gt;"We don't have a job for you."&lt;br /&gt;&lt;br /&gt;Great. Luckily I arranged to stay with my job at the time for a little longer and started looking for another job. Still haven't found one yet but I keep looking. From the end of April to the start of June I transitioned out of my old job, looked for work and needed to build a portfolio of work for prospective employers to view. Since I'm changing from a biotechnology lab supervisor to a web technology position, all employers are asking for samples of your prior work. Although I did do some web design about 8 years ago, I don't have anything current.&lt;br /&gt;&lt;br /&gt;I'll post some screenshots of what I come up with in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-6946152664870554489?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/6946152664870554489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=6946152664870554489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6946152664870554489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/6946152664870554489'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/perspective.html' title='Perspective'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7179488321815826736.post-5937304734734844812</id><published>2008-06-21T12:21:00.000-07:00</published><updated>2008-06-21T12:40:53.094-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perspective'/><category scheme='http://www.blogger.com/atom/ns#' term='driving'/><category scheme='http://www.blogger.com/atom/ns#' term='job transition'/><title type='text'>Things Aren't Always What They Seem</title><content type='html'>Welcome to altdotperspective!&lt;br /&gt;&lt;br /&gt;I should have started this years ago.&lt;br /&gt;&lt;br /&gt;Had I began back then I would have called this the "Fourth Gear blog". About two years ago I took a job and started driving 112 miles a day to get to work and back. It was a good two hours of driving as long as there was no traffic or accidents. I had thought about bringing my camera to catch anything interesting I might see, trying to get pictures of reckless drivers (hopefully their licence plate) and other thoughts I had on the way home.&lt;br /&gt;&lt;br /&gt;Sadly I didn't. But, there's no better time than now to start. The past few months have been interesting as I left my old job, got a new job five minutes from home, had the job pulled out from under me, and have been working since then to keep improving my skills so I can get the job I want (again).&lt;br /&gt;&lt;br /&gt;As I keep working on these skills I'll post the interesting tidbits that I find as I work and maybe I'll open up my personal web server to traffic one of these days. Since I'm about two years behind I've got a lot of posts to make up for. Let's get started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7179488321815826736-5937304734734844812?l=altdotperspective.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://altdotperspective.blogspot.com/feeds/5937304734734844812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7179488321815826736&amp;postID=5937304734734844812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5937304734734844812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7179488321815826736/posts/default/5937304734734844812'/><link rel='alternate' type='text/html' href='http://altdotperspective.blogspot.com/2008/06/things-arent-always-what-they-seem.html' title='Things Aren&apos;t Always What They Seem'/><author><name>Anthony Shireman</name><uri>http://www.blogger.com/profile/12915230103590657808</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
