<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Developer formerly known as Jason Starin</title>
	<atom:link href="http://jasonstarin.com/wp/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://jasonstarin.com/wp</link>
	<description>Developer, Writer, Eccentric, etc</description>
	<lastBuildDate>Sat, 12 Feb 2011 13:26:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Good Habits for Novelists and Independent Developers  I</title>
		<link>http://jasonstarin.com/wp/?p=88</link>
		<comments>http://jasonstarin.com/wp/?p=88#comments</comments>
		<pubDate>Sat, 12 Feb 2011 13:26:04 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=88</guid>
		<description><![CDATA[Many developers are best described as lazy.  Not lazy in the fat slob on a couch, eating potato chips while they don&#8217;t even throw enough effort into playing World of Warcraft, but rather they&#8217;re like lizards on hot rocks.  They will not move from a comfort zone, aim for elegant,  no maintenance solutions, and generally [...]]]></description>
			<content:encoded><![CDATA[<p>Many developers are best described as lazy.  Not lazy in the fat slob on a couch, eating potato chips while they don&#8217;t even throw enough effort into playing <a href="http://us.battle.net/wow/en/">World of Warcraft</a>, but rather they&#8217;re like lizards on hot rocks.  They will not move from a comfort zone, aim for elegant,  no maintenance solutions, and generally follow the cow road approach to development through a problem.</p>
<p>Never heard the way cow roads were built?  My grandfather explained the concept to me.  A road engineer, before there was a Civil Engineer&#8217;s exam, would drive a cow forward with harness and leads.  Up hills, through valleys, to shallow fording a river and through deer trails.  A cow you see, is lazy and instinctively chooses the way that uses the least energy, employs the best advantages of terrain to advantage.  But cows get stuck in briers, lose their way in the forest, have to be rescued by cowboys when a nasty storm comes up?  These are true, a Cow isn&#8217;t smart, a cow is simply wise when it comes to being lazy.  The cow may lead you astray, but typically if you can&#8217;t get a cow to move up a mountain, after driving him forward, and she keeps lying down, rather than moving forward, it&#8217;s time to get the dynamite out and blow a pass through the mountains.</p>
<p>Programmers subscribe to the cow metaphor.  Follow the herd and lay gravel and then pavement behind you in a smooth grade that people can work through.  Find cracks or problems in the pavement?  Patch it, feature enhance it, and move on.  Given the Pigs and Chicken metaphor of Agile development, I think that the cow metaphor is also appropriate, despite the Zen master focus many attribute to the modern Agile developer, the lazy cow is still Zen, still in keeping with the mentality of clean, re-factored code that reads easily.</p>
<p>The Novelist is no less a lazy cow than the developer.  They research furiously for the route to a good manuscript and a way to tell their story.  Their outlining is akin to the planning session, their mandatory writing sessions like the developer&#8217;s quiet hours, while they try to focus on specific projects and get the work done.  While often, a novelist might sit on his warm rock and bask in the completion skills and efforts they have, the good novelist knows that they have to constantly change, learn and adapt themselves to the market and the endeavors they choose.</p>
<p>I comment on novelists, only as an outsider looking in.  While I&#8217;ve written several novels, I haven&#8217;t managed to publish them yet.  I write at least 1750 words a day on one of them, typing furiously to complete this or that story in the twenty minutes I throw at them.  At 190,000 to 250,000 words per novel and 360 days of honest writing a year, that&#8217;s more than 2 novels a year worth of writing, but as any novelist, even an amateur might tell you, there&#8217;s fat to be trimmed and set aside or thrown away.</p>
<p>Software development, especially on independent and open source projects learns much from these good habits.  Writing 1000 lines of code in an hour is actually quite easy once you&#8217;ve outlined your problems.  Many writers write with a solid outline and I know few developers who write their best code without the framework.</p>
<p><a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">Clean code</a>, a book I can&#8217;t recommend and both fight with my dying breath enough, has many examples for building solid code.  Early on they talk about functions or methods having and doing only one thing well.  I&#8217;ve read writing books that talk about the elegant, short sentence that does a dozen things, but is a singular focus and idea.  I think clean code was talking about that sort of thing.  If you write a beautiful method, that joins 4 methods together, has no technical debt, had the <a href="http://www.junit.org/">JUnit </a>written first, and has readable variables and functionality that transfers the knowledge of what it says and does to any developer in less than a second, then you have achieved that synthesis of code that novelists call their golden sentences.</p>
<p>I&#8217;m rambling&#8230;</p>
<p>How can I sum up my first post about this topic?</p>
<p>Good Habits for writers and Novelists:</p>
<ol>
<li>Set daily goals, for authors, at least 1500 words a day, for coders, make it a number of classes and or lines of code that at least amounts to an hour a day, every day, even on your birthday.</li>
<li>Write small, cow road sentences or functions, that do a lot, with a little, plow through where you need to.</li>
<li>Use dynamite when the problems are too big.  Ask for help, blow through your problems, get them done.</li>
</ol>
<p>(Author&#8217;s note:  Some of my posts have been sitting in draft mode for several months.  I decided to release the last two, mainly because I commented about both of these as advice in the last week or so.  They&#8217;re not as polished as I&#8217;d like, but I&#8217;m hoping their serial nature will force me to come back and fix a few of these.)</p>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=88</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Business Side of Technology Contractors I</title>
		<link>http://jasonstarin.com/wp/?p=85</link>
		<comments>http://jasonstarin.com/wp/?p=85#comments</comments>
		<pubDate>Sat, 12 Feb 2011 12:50:59 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Career]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=85</guid>
		<description><![CDATA[Making 200,000 a year and spending like you're making 120,000 a year is a great way to save money for lean times and grow your business. ]]></description>
			<content:encoded><![CDATA[<p>I like Contractors and many times I&#8217;ve loved being a <a title="Legal Definition of a Contractor" href="http://legal-dictionary.thefreedictionary.com/Independent+Contractor">contractor</a>, but there are a few small things I&#8217;ve learned along the way that outline the <a title="Do the Hustle" href="http://www.youtube.com/watch?v=gFz2WkVAk38">Hustle</a> of it all.</p>
<p>As a Contractor you&#8217;re an at will employee and the first on the chopping block should a company feel any financial strain.  For that reason, most contractors I know charge a high rate to cover for the lean times should they not have a job in place to quickly fail over to.  Fail over jobs could be an entire post, but the short and long of it is that while you&#8217;re working for one customer, you have to at least remain friendly if unavailable to the next set of customers and be prepared to do small weekend projects if they come up, to keep a modicum of good will.  You need to clear these side projects with your current employer, before you take the jobs.  I know this sounds rough, but the typical arrangement is, &#8220;Hey boss, you know I&#8217;m a contractor, I need to slide some work in next week for an old client.  It will be strictly weekend and night stuff,&#8221; and move on.  They can say no, but they have to weigh that against the eventual end of your projects and what they&#8217;d feel like if they couldn&#8217;t get a hold of you to finish a few things for them.  If they start out with a &#8220;No&#8221; it&#8217;s usually okay to mention the complexities of the contracting world, and move on.</p>
<p>This leads me to how much to charge.  At various times in the tech industry, there have been soft and there have been lucrative times in the technology market.  Competition has appeared from <a title="Evaluation of Wealth" href="http://www.youtube.com/watch?v=4LPCtdPKjaM">global sources.</a> In the United States, where I live, there&#8217;s an old formula for figuring out an hourly rate.</p>
<p>For <a title="What is a W-2?" href="http://www.investorwords.com/5269/W_2_Form.html">W-2</a> Employment the equation is, how much do you want to make a year, divided by 2000, and you get your hourly rate.</p>
<p>Want to make 200,000 a year?  100 dollars an hour will get you there.</p>
<p>Want to make 30,000 a year?  15 bucks an hour will make it work.</p>
<p>For <a href="http://www.wisegeek.com/what-is-a-1099-form.htm">1099</a> Contractors the formula is a bit more complicated.  A simple conversion done by many is 16% greater than the W-2 rate.  This covers the 10% self-employment taxes and the 6% that the typical W-2 job pays for pitiful benefits.</p>
<p>Want to make 120,000 a year? divide by 2K, get 60 bucks an hour, multiply by 1.16 and you need to be charging 69.60 an hour to get close.  If you&#8217;re under 35, your garbage health insurance policy is 500 a month, not including family members, you&#8217;re paying 250 a month in disability and term life insurance(never to be discounted), and trying to squirrel some of this money away for the eventual lay off and/or transfer times.  Many Contractors find agencies, leagues or other groups to help provide insurance benefits.  While some folks can get group policies through their churches or civil work groups, I&#8217;m fond of <a href="http://www.fracturedatlas.org/">Fractured Atlas</a> a group I joined to support and promote some of my non-developer activities.  While I work to live in the technology sector, I do have those novels and screenplays in a drawer that I keep picking up, have a movie under my belt, and love my Bonsai.  Technology folks tend to have interesting hobbies and many of those hobbies have support groups or guilds that also provide access to decent insurance and benefits to help alleviate the costs.  As a larger note, contractors often should have a Liability policy, if they&#8217;re not being represented by a contracting firm.  The liability policy is not a sign that you&#8217;re weak and are going to mess up so badly they&#8217;re going to need to soak your insurance company for 2 million dollars to cover the hole.  It&#8217;s a sign to your employer that you mean business, and should you fail or flounder, you&#8217;re willing to pay for your mistakes and make things right, one way or another.</p>
<p>There&#8217;s hope though in the above configuration of benefits versus hourly rate.  Life and employers like round numbers when possible.  In negotiations, it&#8217;s best to chose numbers divisible by 10 and 25 for rates.  If 69.60 comes up in calculations, it&#8217;s usually okay to ask for 70 or even 75.  While it does not fully compensate for the level of quality collective bargaining provides, it does provide more money to even out the road.  That said, what&#8217;s better than 75 is 100.  Making 200,000 a year and spending like you&#8217;re making 120,000 a year is a great way to save money for lean times and grow your business.  Competition, however, will typically drive those numbers down.</p>
<p>The rate card, does not cover all instances, however.  Sometimes you need to charge for a piece of work, the installation of servers, migration to the  cloud, a redundant MySQL cluster, Data architecture modifications to prepare for a migration to or from PostGres to Oracle.  These are troubling bits based upon what the market will bear.  I like hourly rates, but if I&#8217;m leaving my programming comfort zone, and providing a framework of Java or PHP for someone to start their new company with, I like to shape the work and the money around what&#8217;s going on.  This part of bidding is more art than science, sometimes coming in at a little less or a little more than what the hourly costs would be.  A typical <a href="http://www.springsource.org/">Spring framework</a>, with spring security, a few portals and an adaptation for <a href="http://jackrabbit.apache.org/">Jackrabbit</a>, can run several thousand dollars, plus modification costs.  I might sell only one of these between Java Versions, so the work moving through and making the product both useful, feature rich and profitable depends on whether or not I had a specific customer paying for the initial development, or if I did the whole thing to keep my skills sharp.  In contrast, I&#8217;ve played with <a href="http://www.grails.org/">Grails</a> several times now, but never managed to sell it even once.  I can&#8217;t go and charge the first guy on the block for 2 years playing with Grails, now can I?  I might make a bargain rate, hoping for more work and better days.</p>
<p>Well, I&#8217;ll probably add a few installments to this particular post.  Contracting is a rough, but rewarding business that has good times and rough times in it.  I know folks who will never settle down and those who have left the field in such disgust that they&#8217;ll never work for themselves again.  The back end is rife with accounting, bookkeeping, estimations and overall a drive to do good work and make it all fit together.</p>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=85</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dev Helper 2:  The Windows XP box</title>
		<link>http://jasonstarin.com/wp/?p=76</link>
		<comments>http://jasonstarin.com/wp/?p=76#comments</comments>
		<pubDate>Mon, 09 Aug 2010 11:27:14 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Lessons]]></category>
		<category><![CDATA[DevHelper]]></category>
		<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=76</guid>
		<description><![CDATA[There are at least two main reasons I need a Windows XP guest to run in VirtualBox on my Desktop. If I&#8217;m running Linux, sometimes I need to run Windows software, like a MS-SQL server or Visual Studio to complete my work on a specific target that only works on Windows As Web development is [...]]]></description>
			<content:encoded><![CDATA[<p>There are at least two main reasons I need a Windows XP guest to run in VirtualBox on my Desktop.</p>
<ol>
<li>If I&#8217;m running Linux, sometimes I need to run Windows software, like a MS-SQL server or Visual Studio to complete my work on a specific target that only works on Windows</li>
<li>As Web development is one of my primary jobs, many times I need to test older versions of Internet Explorer, or even combinations of older versions of FireFox to insure cross-browser support.</li>
</ol>
<p>Both of these can be handled in one easy Windows XP install.   Some might ask me, where do I get a Windows XP install, my install disks are old and worn out, or I&#8217;ve run out of licenses at home.  The answer here is actually that there&#8217;s rarely an easy fix, unless your workplace or you&#8217;ve kept a Windows XP license aside just for this occasion.  I purchased a license for XP nearly a decade ago, at retail prices when it came out.  This license still works, and I&#8217;m able to find install media for it through my MSDN license.  My MSDN also comes with licenses for installing test and/or development machines.  I use these sparingly as the licensing for these seems to be anathema to VirtualBox and virtual computing.</p>
<p>I create a new VirtualBox instance, install XP with my install media, license the machine, and then decide if I&#8217;m going to accept the windows updates based upon the testing I intend to do.  I sometimes take a snapshot of this install for a backup.  Be careful here to make certain you run only one valid license of Windows XP at a time.  There&#8217;s no reason to run afoul of your license agreement over this one, and as long as you load only one instance of your saved session at a time, you should be in good shape.  Once upon a time I&#8217;d keep saved instances at service pack 1, 2, and 3, but I urge you to stick to just 1 and 3.  It will save vital storage space and speed load times when you do need to test.  I do however, load a SQL Server 2000 and a SQL Server 2005 image and save them aside for work, moving forward.</p>
<p>Because I&#8217;m a strict conservationist on hard drive space, all of my Windows XP licenses use 4 GB hard drives and I vary RAM between 512 and 1024 MB.  While a GB of RAM can be helpful, and more can be better, XP was optimized in these ranges, starting out needing only 128 in the early days and then ballooning in size as things moved along.  Because I&#8217;m prone to have both a Linux guest and an XP guest running at the same time, along side other work, I prefer to keep this as small as possible.</p>
<p>There are a few programs I prefer to have on all of my WindowsXP machines.</p>
<ul>
<li><a href="http://www.7-zip.org/">7-Zip</a>: A universal and open source file compression utility, with both a command line and GUI client</li>
<li><a href="http://filezilla-project.org/">FileZilla</a>: A fairly robust GUI FTP manager.  Very nice, especially when I need to pass large files to the outside world.</li>
<li><a href="http://notepad-plus-plus.org/">Notepad++</a>: A Gui text editor for when VIM just isn&#8217;t going to serve your purposes.</li>
<li><a href="http://www.vim.org/download.php">VIM</a>:  A text editor recognizable to anyone whose been in Computer Science for the last two decades.  VIM works because Typing and the Keyboard are the most effective means short of plugging your brain into your computer, to get data in and/or out.  The Mouse is a wasteful, nearly brainless device that has enslaved you.  Repent your evil ways and embrace VIM.</li>
<li>SQL Server Management Studio:  This comes with a few strings attached with the developer documentation at MSDN.  There are a variety of ways to access this on the cheap or even free legally, but the best is if you have a legal SQL server, you have licenses to this development studio.  Use them wisely.</li>
<li><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">putty</a> and the other putty tools(especially pscp):  Putty is a terminal access program for ssh, telnet and rsh.  The other tools assist in generating RSA keys, in moving files securely to servers via command line and a host of other little tools and tricks you just need to get through the day.</li>
<li><a href="http://www.cygwin.com/">Cygwin</a>:   I personally have a variety of tools I&#8217;ve helped compiled or have been compiled for me that make Cygwin a bit on the bulky and unwieldy side, but that package and the nonsense I have to go through to make it work are too troublesome for your average worker, and too long for this current article.  Cygwin helps the linux user bring to bear the many commands he/she already uses on a regular basis.  Cygwin works by giving you a Cygwin enabled terminal that you can run your commands within.</li>
</ul>
<p>Now that I have my tools, I add my shared folders.  <a href="http://jasonstarin.com/wp/?p=69">Exactly like my linux setup</a>, I use the Work, Deploy, Longterm folders, mounted for share to my Windows Box.</p>
<p>An example work flow might be, I start a SQL server on my Windows Box, load a test DB, and then start my Jetty server on my linux shell that uses a JDBC connection pointed at my Windows Guest.  I do my primary development, testing with Chrome and Firefox(latest) on my main machine, and then test against IE 6 and an older Firefox on my WindowsXP slice.</p>
<p>Another example, I need to work on a Visual Studio C++ project on my Windows slice.  I check the code out to a work sub-folder, that&#8217;s effectively hosted on my main machine.  I complete coding and testing, and transfer the app and installer to my Deploy folder as part of my install.   I open a command prompt and pscp the finished file up to the QA server for testing, and then alt-tab over to Visual Source Safe or a simialr product, and commit my code.</p>
<p>All simple processes aided by a secondary host living resident on my machine.</p>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=76</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Joys of Virtual Box hosted, Dev helpers</title>
		<link>http://jasonstarin.com/wp/?p=69</link>
		<comments>http://jasonstarin.com/wp/?p=69#comments</comments>
		<pubDate>Sun, 08 Aug 2010 21:12:36 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Lessons]]></category>
		<category><![CDATA[AWK]]></category>
		<category><![CDATA[FEDORA]]></category>
		<category><![CDATA[Helper]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[SED]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=69</guid>
		<description><![CDATA[Virtual Box is a flexible, currently free, Virtualization environment not unlike VMWare or  Hyper-V .  If you&#8217;re a user of Windows 2007 Ultimate, you may have used a virtual copy of Windows XP, hosted locally before, VirtualBox is a similar solution and a similar tool to work through and try out. Many others can give [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.virtualbox.org/">Virtual Box</a> is a flexible, currently free, Virtualization environment not unlike <a href="http://www.vmware.com/">VMWare</a> or  <a href="http://www.microsoft.com/hyper-v-server/en/us/default.aspx">Hyper-V </a>.  If you&#8217;re a user of Windows 2007 Ultimate, you may have used a virtual copy of Windows XP, hosted locally before, VirtualBox is a similar solution and a similar tool to work through and try out.</p>
<p>Many others can give you a short tutorial on <a href="http://www.psychocats.net/ubuntu/virtualbox">how to install VirtualBox </a>and then install linux on that small server, but my short blog is about the tools you can then install on your VirtualBox in order to make it into an effective developer helper environment.</p>
<p>To that end, the above link will get Ubuntu up and running, and Ubuntu has an excellent repo install utility in apt-get, but I prefer the simplicity of the Yellow Dog Updater Modified, or <a href="http://en.wikipedia.org/wiki/Yellowdog_Updater,_Modified">YUM</a> present on <a href="http://en.wikipedia.org/wiki/Yellowdog_Updater,_Modified">Red Hat Enterprise Linux</a>, <a href="http://www.centos.org/">CentOS</a>, and my favorite, <a href="http://fedoraproject.org/">Fedora</a>.</p>
<p>Installing Fedora on VirtualBox is as easy as using the above tutorial and replacing the install medium with the most recent version of Fedora.  I typically give my resident operating systems a limited amount of resources to work with, not because I&#8217;m stingy, but because I like to run multiple Helpers at a time, so I can use some for Developer Testing and others for actual development and deployment.  You can change the RAM settings later, and if you&#8217;re sharp with Linux, you don&#8217;t need the GUI interfaces of Gnome to be able to use it, instead you use command line.</p>
<p>We live in a Windowsy world; in plain speak, Windows operating systems tend to be where we find our major IDE&#8217;s, our more widely popular Office suite and more software than you can typically shake a stick at.  I like to get as much RAM as I can on my Windows machine and then see what I can get away with in 1/2 a GB of RAM on my small Linux slice.  To that end, once I&#8217;ve got a terminal up for my small Linux host, I add in everything I&#8217;d need for normal web developer work.</p>
<blockquote><p>yum install tomcat5 httpd mysql-server php java</p></blockquote>
<p>Say yes to the installs, and you&#8217;ll get default locations and setup for Tomcat, Apache Web server, MySQL, php and Open Java.</p>
<p>I&#8217;m an old perl, awk and SED guy though too, and I want to get the best text parsing I can get.  I add in a compiler here as well.</p>
<blockquote><p>yum install awk perl sed gcc</p></blockquote>
<p>Now, I want to mount shared folders for doing my work.  I typically make three folders in my Documents directory on my windows machine, and then mount them as specific directories on my Linux guest.</p>
<ol>
<li>Work -  The Work folder is for text files I need to parse, including csv&#8217;s and other work that would be best handled by the superior command line tools of Linux.  I can&#8217;t tell you how many different times I&#8217;ve needed to edit up several lists of thousands of lines of text that I then wanted to break up into pieces, turn into excel spread sheets, and load into a database.  I mount a Work drive and make a soft link to it in my home directory for safe keeping.</li>
<li>Deploy- My deploy directory has an apache and a tomcat or jetty folder within it, so I can not only drop deploy my work for quick test on my webserver, when I use the faster Java build times on my linux system, I can simply pull the wars, jars, ears, etc out of that folder for use in windows development, sending along through our Windowsy mail system or dropping onto Windows secured file shares that require a bit more than Samba can pull off to connect.</li>
<li>Longterm- Is my last shared folder, mounted drive.  It&#8217;s a location where I put and file away my daily work that should be able to migrate between the two instances.  When work is finished it goes into a Longterm sub-folder that is named for the day I finished the work.  Folders are often named with Two letters for the name of the company I&#8217;m doing the work for (AC for ACME) followed by the full date format as YYYYMMDD (ex. AC20100807).  This gives me a simple sorting system in both Linux and Windows that lets me rapidly find my files.</li>
</ol>
<p>An example work flow might be, I&#8217;m working on Flex in IdeaJ, my current working directory is called Project1 under the work folder.  Inside is my Subversion handled repo of code.  When I execute a build command from within IDeaJ, I have it use my build server on the small linux shell I&#8217;ve set up as my remote server.  The final process of my maven build script, dumps the war file in the deploy directory, and Tomcat or Jetty&#8217;s hot deploy solution is serving up my webapp to my local webserver.</p>
<p>Another work flow might be an excel spread sheet comes in with 10 tabs worth of massive data for me to crunch up and get to the DB ASAP.  Only problem is the file needs some massaging.  I save the file as pipe delimited from Excel, and massage the file with AWK and SED until I have a series of load files split into 10,000 line inserts into the DB.  I load them into my MySQL database from command line, then use the MySQL connector I downloaded from the website, to link the data elements of my excel spread sheet to my locally hosted MySQL database.</p>
<p>These are all specifics, but the key to this whole system is using the VirtualBox appliance and the installed Linux guest, as a way to get every advantage from working with linux and Windows simultaneously.</p>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=69</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simple tips in running Jetty on Linux</title>
		<link>http://jasonstarin.com/wp/?p=55</link>
		<comments>http://jasonstarin.com/wp/?p=55#comments</comments>
		<pubDate>Sat, 31 Jul 2010 19:10:31 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Lessons]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=55</guid>
		<description><![CDATA[This is mainly just a short article to get me back in the habit of posting regularly. Recently, I&#8217;ve been working a bit with fine tuning Jetty, a light weight and configurable AppServer from Codehaus sponsored by Eclipse. Jetty gets production support from MortBay Consulting, who handle the heavy lifting for Codehaus. MortBay is also [...]]]></description>
			<content:encoded><![CDATA[<p>This is mainly just a short article to get me back in the habit of posting regularly.  Recently, I&#8217;ve been working a bit with fine tuning <a href="http://jetty.codehaus.org/jetty/">Jetty</a>, a light weight and configurable <a href="http://en.wikipedia.org/wiki/Application_server">AppServer </a>from <a href="http://codehaus.org/">Codehaus</a> sponsored by <a href="http://www.eclipse.org/">Eclipse</a>.  Jetty gets production support from <a href="http://mortbay.com//">MortBay Consulting</a>, who handle the heavy lifting for Codehaus.  MortBay is also the developer of Jetty that was merged first with <a href="http://www.webtide.com/">Webtide</a> and finally with <a href="http://www.intalio.com/">Intalio</a>.  Webtide, provides the training programs Mortbay founded with Jetty, and Intalio offers complete open source Cloud computing systems for businesses employing these tools.  That&#8217;s about the end of my nod section.</p>
<p>Basic setup of Jetty is fairly simple.  You unzip it into a folder, and then modify the JettyRoot/etc/jetty.xml file.  You don&#8217;t need much here, and in fact jetty has a bunch of maven plugins and other companion tools from along the way, including integration with <a href="http://cargo.codehaus.org/Jetty+7.x">Cargo</a> that let you deploy on the fly, but for my first tests, figuring out what the Jetty.xml file would do was kind of the first step.</p>
<p>David Yu was kind enough to give a full sample config file and then a walk through of it <a href="http://docs.codehaus.org/display/JETTY/Walkthrough+jetty.xml">here.</a><br />
My only issue with it, was that this was stand alone, self-documented configuration, and I rarely have something that works straight out of the box.  To that end, I&#8217;m going to cite David&#8217;s file here and show my modifications.</p>
<p>I was dealing with a local server to start but planned on putting some beefy, database intensive apps, employing hibernate on here.  To that end, I wanted to up the thread count.  David&#8217;s first section lists them.  Thread count pooling is one of those things I did primarily on the Java machine setup.  Here, you just edit these lines here.</p>
<div id="_mcePaste">&lt;Set name=&#8221;minThreads&#8221;&gt;50&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;maxThreads&#8221;&gt;500&lt;/Set&gt;</div>
<div>Next you add the connector</div>
<div>
<blockquote><p><span style="font-family: Helvetica, Arial, sans-serif; line-height: 17px;"> </span><br />
&lt;Call name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;addConnector&#8221;</span>&gt;<br />
&lt;Arg&gt;<br />
&lt;New class=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;org.mortbay.jetty.nio.SelectChannelConnector&#8221;</span>&gt;<br />
&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;host&#8221;</span>&gt;&lt;SystemProperty name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;jetty.host&#8221;</span> /&gt;&lt;/Set&gt;<br />
&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;port&#8221;</span>&gt;&lt;SystemProperty name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;jetty.port&#8221;</span> <span class="code-keyword" style="color: #000091; background-color: inherit;">default</span>=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;8080&#8243;</span>/&gt;&lt;/Set&gt;<br />
&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;maxIdleTime&#8221;</span>&gt;300000&lt;/Set&gt;<br />
&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;Acceptors&#8221;</span>&gt;2&lt;/Set&gt;<br />
&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;statsOn&#8221;</span>&gt;<span class="code-keyword" style="color: #000091; background-color: inherit;">false</span>&lt;/Set&gt;<br />
&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;confidentialPort&#8221;</span>&gt;8443&lt;/Set&gt;<br />
&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;lowResourcesConnections&#8221;</span>&gt;20000&lt;/Set&gt;<br />
&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;lowResourcesMaxIdleTime&#8221;</span>&gt;5000&lt;/Set&gt;<br />
&lt;/New&gt;<br />
&lt;/Arg&gt;<br />
&lt;/Call&gt;</p></blockquote>
<p>As you can see, Wu has setup the typical Developer machine running on port 8080.  Tomcat defaults to the same port on initial setup, in part to avoid conflict with the web server like Apache that usually defaults to port 80.    But for this app, we&#8217;re going to let Jetty serve as the web server and the app server.</p>
<p>&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;port&#8221;</span>&gt;80&lt;/Set&gt;</p>
<p>Let&#8217;s remove the System call to the application command line that would have checked for a variable at runtime to change our jetty port, and just explicitly call the port we want as 80.</p>
<p>I&#8217;m also going to give this machine several IP addresses and later use the web app itself to determine some work, so I&#8217;m going to set the IP address to 0.0.0.0 so it will accept traffic from all IP&#8217;s on the box.</p>
<p>Change the host to this</p>
<p>&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;host&#8221;</span>&gt;0.0.0.0&lt;/Set&gt;</p>
<p>I plan on having a real SSL certificate on this machine, and want to use the default SSL port of 443 for my confidential port. There are two changes I need to make here.</p>
<p>First, I change this line to set my default port,</p>
<p>&lt;Set name=<span class="code-quote" style="color: #009100; background-color: inherit;">&#8220;confidentialPort&#8221;</span>&gt;443&lt;/Set&gt;</p>
<p>and then beneath the block I spelled out above, I need to add another listener.  So after &#8220;&lt;/Call&gt;&#8221;</p>
<p>I add</p>
<blockquote><p><span style="font-family: arial, helvetica, sans-serif; line-height: normal; font-size: 12px; color: #333333;">&lt;Call name=&#8221;addConnector&#8221;&gt;<br style="padding: 0px; margin: 0px;" /> &lt;Arg&gt;<br style="padding: 0px; margin: 0px;" /> &lt;New class=&#8221;org.mortbay.jetty.security.SslSocketConnector&#8221;&gt;<br style="padding: 0px; margin: 0px;" /> &lt;Set name=&#8221;Port&#8221;&gt;443&lt;/Set&gt;<br style="padding: 0px; margin: 0px;" /> &lt;Set name=&#8221;maxIdleTime&#8221;&gt;30000&lt;/Set&gt;<br style="padding: 0px; margin: 0px;" /> &lt;Set name=&#8221;keystore&#8221;&gt;&lt;SystemProperty name=&#8221;jetty.home&#8221; default=&#8221;.&#8221; /&gt;/etc/keystore&lt;/Set&gt;<br style="padding: 0px; margin: 0px;" /> &lt;Set name=&#8221;password&#8221;&gt;OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4&lt;/Set&gt;<br style="padding: 0px; margin: 0px;" /> &lt;Set name=&#8221;keyPassword&#8221;&gt;OBF:1u2u1wml1z7s1z7a1wnl1u2g&lt;/Set&gt;<br style="padding: 0px; margin: 0px;" /> &lt;Set name=&#8221;truststore&#8221;&gt;&lt;SystemProperty name=&#8221;jetty.home&#8221; default=&#8221;.&#8221; /&gt;/etc/keystore&lt;/Set&gt;<br style="padding: 0px; margin: 0px;" /> &lt;Set name=&#8221;trustPassword&#8221;&gt;OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4&lt;/Set&gt;<br style="padding: 0px; margin: 0px;" /> &lt;/New&gt;<br style="padding: 0px; margin: 0px;" /> &lt;/Arg&gt;<br style="padding: 0px; margin: 0px;" /> &lt;/Call&gt;</span></p></blockquote>
<p><span style="font-family: arial, helvetica, sans-serif; line-height: normal; font-size: 12px; color: #333333;">I could set this up now and show you my passwords for my Secure cert, but let&#8217;s discuss what the next steps are instead so I can explain myself a little better.</span></p>
<p><span style="font-family: arial, helvetica, sans-serif; line-height: normal; font-size: 12px; color: #333333;">That first section I did added an adapter that listens on port 80 of all IP&#8217;s the machine listens to.  The second section I added adds a listener that listens to port 443 and uses a keystore that actually comes standard with the mortbay version of Jetty.  If you have any problems on startup, with this mortbay connector, all you need to do is replace it with the Eclipse based jetty connector of the same name.  That was an interesting step in the documentation.  Many of the older versions of Jetty actually have two different major builds.  One that has eclipse objects and one with mortbay objects.  Check which one you&#8217;re using and configure accordingly.</span></p>
<p><span style="font-family: arial, helvetica, sans-serif; line-height: normal; font-size: 12px; color: #333333;">Anyway, what the first Adapter did also was to declare that confidential communication received on port 80 should be redirected to port 443.  This ties into the Java web.xml page.</span></p>
<p><span style="font-family: arial, helvetica, sans-serif; line-height: normal; font-size: 12px; color: #333333;">A good example of the security constraint configuration for web.xml can be found at IBM&#8217;s docs <a href="http://publib.boulder.ibm.com/infocenter/wseic/v2r6/index.jsp?topic=/com.ibm.wse.doc/infocenter/i_sec_t_editwebxmlfiles.html">here</a>.  Basically, you can add string matching constraints to services, types of requests or any other major communication flow of your application and direct them to either the CONFIDENTIAL port, or to the default port (port 80 for us) with the directive NONE.  You can litterally have dozens of these for your app, but for me, I just wanted to make certain that people coming to my loginServlet hit port 443 every time and on all requests.</span></p>
<p><span style="font-family: arial, helvetica, sans-serif; line-height: normal; font-size: 12px; color: #333333;">Snippet for Web.xml</span></p>
<blockquote><p>&lt;security-constraint id=&#8221;basicloginauth&#8221;&gt;<br />
&lt;url-pattern&gt;/loginServlet*&lt;/url-pattern&gt;<br />
&lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;<br />
&lt;/security-constraint&gt;</p></blockquote>
<p>I&#8217;ll go ahead and tell you, the rest of Wu&#8217;s file, while filled with useful stuff about contexts, can now be left alone.<br />
Next step, we need to change the context file.<br />
goto your JettyRoot/contexts folder and delete everything in it.</p>
<p>Really, rm -f *.xml at the very least.  This stuff contains links to a bunch of test stuff, you&#8217;ll throw away later anyway, and only mucks things up for how simple we&#8217;re going to make it.</p>
<p>Now I want to make a simple context file that unwraps my superapp.war file from the webapps directory and serves it up after the root of my web address.</p>
<p>Make a file in the contexts folder called superapp.xml</p>
<p>and paste this into it</p>
<blockquote><p>&lt;?xml version=&#8221;1.0&#8243;  encoding=&#8221;ISO-8859-1&#8243;?&gt;<br />
&lt;!DOCTYPE Configure PUBLIC &#8220;-//Mort Bay Consulting//DTD Configure//EN&#8221; &#8220;http://jetty.mortbay.org/configure.dtd&#8221;&gt;<br />
&lt;Configure class=&#8221;org.mortbay.jetty.webapp.WebAppContext&#8221;&gt;<br />
&lt;Set name=&#8221;contextPath&#8221;&gt;/&lt;/Set&gt;<br />
&lt;Set name=&#8221;war&#8221;&gt;&lt;SystemProperty name=&#8221;jetty.home&#8221; default=&#8221;.&#8221;/&gt;/webapps/superapp.war&lt;/Set&gt;<br />
&lt;/Configure&gt;</p></blockquote>
<p>Now, rename any old webapp you have lying around superapp.war, drop it into the folder and let&#8217;s see if we can&#8217;t get it running.</p>
<p>I already had Java running on my linux server, so my real concern here is getting this start.jar jetty gave me to load up the web server.</p>
<p>Here&#8217;s the command to run</p>
<blockquote><p>java -jar start.jar etc/jetty.xml</p></blockquote>
<p>and voila, point your web browser to localhost and look at your deployed webapp served there.  If you have a loginServlet like I do in my app, point the host at localhost/loginServlet<br />
Hey, looky there, we&#8217;re redirected to port 443 and we get a request to accept an unsigned cert.  Well.  That was a fairly short update, if any interest is shown, I&#8217;ll show you how to add a signed cert to the store and get Java to use the store.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=55</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Basic Security, Where are you going, where have you been?</title>
		<link>http://jasonstarin.com/wp/?p=49</link>
		<comments>http://jasonstarin.com/wp/?p=49#comments</comments>
		<pubDate>Fri, 26 Mar 2010 10:57:19 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Lessons]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=49</guid>
		<description><![CDATA[&#8220;Where Are You Going, Where Have You Been?&#8221; is a fairly famous story by Joyce Carol Oates. In it, Oates&#8217; character Connie ends up being convinced to walk outside and go off with Arnold Friend and his companion. The story was inspired by the three murders committed by Charles Schmid, Schmid&#8217;s inspiration for the murder [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://books.google.com/books?id=G9aGq5COs1IC&#038;dq=%22Where+Are+You+Going,+Where+Have+You+Been%3F%22+Joyce+Carol+Oates&#038;printsec=frontcover&#038;source=bn&#038;hl=en&#038;ei=ToOsS77mH8qXtgfqveXgDw&#038;sa=X&#038;oi=book_result&#038;ct=result&#038;resnum=5&#038;ved=0CBsQ6AEwBA#v=onepage&#038;q=&#038;f=false">&#8220;Where Are You Going, Where Have You Been?&#8221;</a> is a fairly famous story by Joyce Carol Oates.  In it, Oates&#8217; character Connie ends up being convinced to walk outside and go off with Arnold Friend and his companion.  The story was inspired by the three murders committed by <a href="http://en.wikipedia.org/wiki/Charles_Schmid">Charles Schmid</a>, Schmid&#8217;s inspiration for the murder was supposedly he simply wanted to murder someone.  Why am I spoiling your day with a tale of murder from the 1960&#8242;s and mentioning its literary connection to Joyce Carol Oates in a short blog about Password security?  Because the struggle that character has with Arthur Friend, reminds me of all too many disasters with passwords.<br />
<span id="more-49"></span></p>
<p>The Keys to the kingdom are the core passwords and administrator passwords of any environment.  I&#8217;ve seen password security schemes as simple as everyone used root, to as complex as each person has their own password into a password wallet that allows the user to login to specific systems.  Since password security is such a large concept, I&#8217;m going to start with three concepts and maybe add a few volumes to this topic later on.</p>
<p>1.  Administrator and root are not for daily tasks.  These users are the Windows default and Linux default administrators respectively.  Half or more of all abuses I&#8217;ve ever encountered from either employees or malicious attacks have come from people having and using these logins to do all of their work.  I&#8217;ve seen Microsoft Report Servers running under the Administrator credentials, the SA password and account of a massive MS-SQL database cluster running as Administrator, I&#8217;ve seen Tomcat and Apache on the same web servers running as root.  This is wrong.  This is more wrong that young Connie picking up boys and men at the truck stop, but far worse than this, is giving these keys to everyone in your IT department.<br />
Linux has a solution they prefer for this problem, called the Sudo command.  Sudo is an implementation of Simon says for the root user.  You can execute commands as root with the sudo command, but a strict stratification of who can use it can be established in the /etc/sudoers file of most distributions.  It&#8217;s not a fool proof plan, but it means giving out root access willy nilly isn&#8217;t necessary.  It allows the actions of the SUDO user to be tracked in a reasonable manner and if editing of the sudoers file is limited to a smaller subset of admin, and other permissions are further limited from the sudo users, then sudo becomes a good starting point for the most basic of server security.</p>
<p>Microsoft has group security, and specifically has a group for Admins by default.  While the default group may in fact have too much access, I have to give it to the folks at Microsoft, the system is fairly reliable.  By default, you can&#8217;t change the Administrator password without installing a root-kit,  direct physical access to the machine(traditional methods include the Knoppix boot to reset the machine administrator and or password crackers from boot) or the login for Administrator.  The individual admins under that group can do a significant amount of damage to the system, but there&#8217;s logging and there&#8217;s reliable control, should the user need to be disabled.</p>
<p>Did I forget to mention that along the way?  That&#8217;s the core reason you don&#8217;t give everyone the Administrator password.  Eventually, everybody leaves and unfortunately, they don&#8217;t always leave on the best terms.  The end comes eventually to all employment opportunities.  One of the chief challenges of any IT team lead, CTO or Systems Administrator is making sure that people who are being laid off or fired are locked out of the system.  Imagine for a moment though, that the person in the Boss&#8217;s office with the HR rep inside, is a System Admin him or herself?  Imagine they were the system architect for your entire system!  Think of all of the passwords they use on a daily basis!  Now imagine that they&#8217;re a disgruntled employee and they want to lash out at your company and delete everything important and infect everything else with viral malware!<br />
Now graciously realize that most won&#8217;t do it, you now have to treat them like they would.  Too many horror stories in IT start with the words, &#8220;I didn&#8217;t think they&#8217;d do it&#8230;&#8221;</p>
<p>2.  Have a plan to replace, remove and seal every and any system within your enterprise.  Most security experts will discuss this as being several levels of security. </p>
<ul>
<li>1. Password is the first and weakest.</li>
<li>2. Physical access is the possession of any company property, physical keys to servers and rooms and accepted credentials at server farms and co-location terminals</li>
<li>3. IP security is the integrity of your code, hardware designs and the legal contracts, trademarks, copyrights and patents you have protecting them</li>
<li>4. Network security includes your VPN, your edge to the Internet, Intranet and your publicly facing applications as protected by your Firewall, WAF, Routers, and Modems</li>
<li>5. Personal Security is related to physical security, but includes the basic security for each and every employee who is part of your organization.  The classic example of the postman going in with a shotgun and shooting up his co-workers is a mean, unfair, but reasonably scary and in this case useful example of Personal security and the physical aspect of physical security.</li>
</ul>
<p>I could write an article about each of these, and may come back and link to them, but there&#8217;s a basic strategy for each.  The first is dealt with through a system that is planned from the beginning and mentioned above.  The second is principally handled by a set of secure keys established for the on site assets, preferably an electronic key and a physical key that must be used in tandem or sequence.  Often companies use biometric keys based upon the physiology of the user, but these are a bit pricier than a couple of secure keys or locks.  When the employee goes into the office for their termination, have the boss collect their keys immediately.  Give the termination officer a list of everything they need to pick up.  Meanwhile, at their desk, have a sysadmin or support agent collect the laptop or desktop they&#8217;ve left behind.  Don&#8217;t leave it in the cubicle or office when they return.  Wheel up with a cart and a box, pick everything up, and take it out of the office for re-purposing.  The last will help you to have the time to secure the equipment properly, will remove all access when the terminated employee returns to the office to gather their personal effects, and finally satisfies a complete disconnect from physical security.  As a final note, many workplaces assign cell phones to their employees that support email and a host of other functions&#8211;make sure you pick that up immediately.</p>
<p>3.  May require an attorney for most, but a lot of planning beforehand.  Make sure you have a patent assignment agreement in force, a non-disclosure that can be enforced in your locale, and a separation agreement that covers all contingencies.  These are the basics, more would require that attorney I mentioned.</p>
<p>4.  I have read at least twelve books on Network Security, and while at least thirty pages were cribbed off each other or the industry standards, the simple fact is that Network security is a moving target that requires skilled employees willing to dedicate time and learning to this task.  There&#8217;s very little basic support save, have a firewall, limit external access and limit internal abuse of equipment to prevent tangents through your security.</p>
<p>5.  Is something I understand very little of.  You might need a body guard armed with an assault rifle if your office is in downtown Baghdad or a similar war zone, but you might only need a receptionist watching the door or a key card entry system if you&#8217;re dealing with employees who aren&#8217;t going to go nuts.  My concern is that they say &#8220;it&#8217;s always the quiet ones,&#8221; but I don&#8217;t want to be the exception should my limited judgment of a person&#8217;s character fail me.  I like to think that since many terminations are a termination of the person after you misjudged their capabilities and attitude towards work.  Do not allow that original mistake in judgment disarm you from a reasonable dose of caution.</p>
<p>Back to my top level of basic security, my third suggestion is simple.  Change your system from time to time.  Make incremental upgrades, someone with senior level security who left 8 years ago should not be able to approach and recognize all aspects of your security as being identical to what you had then.  Make changes, you can read all of the advanced articles to find those.  </p>
<p>I started this whole story with a ramble about Joyce Carol Oates and the probable murder of poor Connie.  In the story, Connie is convinced to walk outside and accept her fate by the cajoling of her would be murderers.  My metaphor may have been short in the center of my assessment for the most basic security, but I urge you to realize that it is not vigilance and defense that cost us, but our acceptance of our fates.  A blind walk into the murderer&#8217;s embrace.  Open your eyes, change the way you do things, and give the bad guys nothing.  You may be a veritable babe in the woods of the IT security world, but with the basics you can at least avoid the most basic of weaknesses. </p>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=49</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t work yourself Sick</title>
		<link>http://jasonstarin.com/wp/?p=42</link>
		<comments>http://jasonstarin.com/wp/?p=42#comments</comments>
		<pubDate>Thu, 18 Mar 2010 17:22:52 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Lessons]]></category>
		<category><![CDATA[illness]]></category>
		<category><![CDATA[lesson learned]]></category>
		<category><![CDATA[Sick]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=42</guid>
		<description><![CDATA[Software development has for some time been a personal, introverted and lonely profession. Teamwork is essential to the modern development environment on large projects, but there are still lone wolves out there hacking out 10,000 lines of code an evening. If you&#8217;re a developer, and if you aren&#8217;t this is still good advice, just not [...]]]></description>
			<content:encoded><![CDATA[<p>Software development has for some time been a personal, introverted and lonely profession.  Teamwork is essential to the modern development environment on large projects, but there are still lone wolves out there hacking out 10,000 lines of code an evening.  </p>
<p>If you&#8217;re a developer, and if you aren&#8217;t this is still good advice, just not your metaphor, how many times, have you suddenly straightened your back and realized you&#8217;ve been starring and or typing for more than two hours straight?  You&#8217;ve been largely motionless, extremely focused and blissfully unaware of the limitations of your body and spirit.  You have been fixing things, making things and now you are suddenly aware of your bladder, colon, stomach, spine and eyes.  It&#8217;s time to move and bend and be a human being again.</p>
<p><span id="more-42"></span></p>
<p>It&#8217;s taken me a long time to learn this lesson, but don&#8217;t work yourself sick.  This is an interesting sentence with two meanings.<br />
1.  Do not, by the action of working, decrease your immune system, damage your joints or organs or tax your caloric reserves so greatly that a chronic or temporary illness is your reward.<br />
2.  When sick, you make more mistakes, are less focused less aware of your mistakes and thus unable to fix, respond to and solve the problems you have as readily.  You can go the extra mile and check your efforts, and while this rule is like the saving your mule on Sunday proscription in the Bible, ie sometimes you need to work sick, the advice in this lesson is to save yourself the trouble it will take once healthy, to fix the problems you caused when sick.</p>
<p>Let&#8217;s discuss the items in Item One that need to be addressed.</p>
<p>A.  Eyes:  I like to keep a colorful picture, toy or other item to the right of my two monitors.  About every fifteen to thirty minutes or so, I turn, face the object and go through a process that takes less than thirty seconds to complete.</p>
<ul>
<li>I try to smile at the object.  My preferred item is a picture of my wife or a small list of Arthur C. Clarke&#8217;s Rules of Science Fiction my Grandfather gave me.  I also have a USB rocket launcher I&#8217;ve used in the past, but that&#8217;s also a comedic release.  I also like to keep house plants around, they make a huge difference on eye strain, especially if the plant is healthy.	</li>
<li>Blur and un-blur your focus 4-7 times.  Your eyes need the exercise, you need the break and the consequences of your brief interruption are nothing short of miraculous.  Eye strain is real people, and it hurts like a mother when your eye starts twitching uncontrollably.</li>
<li>Count something about the picture, and I mean something greater than 3.  I try to pick something different each time.  This makes sure you&#8217;re recognizing the item in question and making a conscious effort to focus on it.  For example, I count the number of r&#8217;s in the three laws.</li>
</ul>
<p>B. Hands and Wrists:  I don&#8217;t have to swing the dead cat in a room to find people who know about or have Tunnel Carpal.  It&#8217;s the &#8220;And the Band Played On&#8221; of the IT world.  The keyboard is the best input tool known to man.  The Mouse is a crappy pointing device that&#8217;s a series of compromises.  Using either or both will wear out your hands and your wrists if you don&#8217;t:</p>
<ul>
<li>Stretch your wrists and fingers.  Cramps will happen, but there are better ways to handle this.</li>
<li>Proper posture is proper hand position.  If you&#8217;re perfectly comfortable, you&#8217;re probably not in the best position.  It&#8217;s going to take some effort to get into the best position, but not too much.  </li>
<li>Take breaks.</li>
<li>Play with <a href="http://www.hasbro.com/playdoh/en_US/">Play Doh</a>.  Hear me out.  oily, soupy starch will help you grind out the kinks in your hands.  I put mine in a pair of sandwich bags, and knead it cleanly.  I keep it in the side pocket of my laptop back pack if you need to borrow mine.</li>
</ul>
<p>C: Spine:  Odds are high that you didn&#8217;t get to buy your own chair at your workplace.  I&#8217;ve been able to buy two of mine, and both were mistakes.  My home chair right now is a good compromise, but it&#8217;s no <a href="http://www.hermanmiller.com/Products/Aeron-Chairs">Aeron</a> chair.  If you can&#8217;t get the chair you want, follow these steps.</p>
<ul>
<li>Stand up and pace when you don&#8217;t need to type or read to figure out a problem.</li>
<li>proper posture, proper posture, proper posture.  Imagine that there&#8217;s a <a href="http://www.ehow.com/video_4953240_water-jug-exercises-overhead-triceps.html">jug of water </a>on your head.</li>
<li>Set a reminder of some kind, and ever hour on the hour, do some simple neck exercises to loosen tension in that melon supporting structure.  Your <a href="http://en.wikipedia.org/wiki/Axis_%28anatomy%29">Axis</a> and your <a href="http://en.wikipedia.org/wiki/Atlas_%28anatomy%29">Atlas</a> will thank you for it.</li>
</ul>
<p>D: Get some sleep.  I suffer from insomnia when a big project is due or when something is on my mind.  Lack of sleep leads to a depressed immune system, poor regeneration and eventually to mistakes&#8230;.  Oh the mistakes I could have prevented had I slept more, gotten sick less and healed faster.  I&#8217;m still learning on this one, so no more tips.  </p>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=42</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lessons Learned About Velocity Templates</title>
		<link>http://jasonstarin.com/wp/?p=39</link>
		<comments>http://jasonstarin.com/wp/?p=39#comments</comments>
		<pubDate>Thu, 18 Mar 2010 13:01:34 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Lessons]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Templates]]></category>
		<category><![CDATA[Velocity]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=39</guid>
		<description><![CDATA[Four different companies I&#8217;ve worked for used Velocity Templates. The technology isn&#8217;t a corporate secret, it&#8217;s a popular way to get that JSP/PHP style of template based development back into your Java. There are a few lessons I&#8217;ve learned from developing in Velocity that I&#8217;d like to share. 1. Don&#8217;t compile it into your code. [...]]]></description>
			<content:encoded><![CDATA[<p>Four different companies I&#8217;ve worked for used Velocity Templates.  The technology isn&#8217;t a corporate secret, it&#8217;s a popular way to get that JSP/PHP style of template based development back into your Java.  There are a few lessons I&#8217;ve learned from developing in Velocity that I&#8217;d like to share.<br />
<span id="more-39"></span><br />
1.  Don&#8217;t compile it into your code.  To people using Velocity correctly, this may rattle your brain a little.  Why would anyone compile Velocity into their code?  Why, because it&#8217;s the way we used to handle JSP.  Some people still put the image folders and style sheets in folders pushed out in their War files.  How many headaches has that cause you?  I personally like putting Velocity in the database, but it would be my preference that all style sheets for individual pages would be served by database, image addresses, links, and anchors would follow.  Some of you may be sitting there asking, why shouldn&#8217;t I put my Velocity in my war file?  Isn&#8217;t it safe there?<br />
The Answer to both questions is actually, because some day you are going to have to compile and deploy a war file so you can make a single spelling correction on a Velocity template.  Ever put inline Javascript in a Velocity page?  Now imagine maintaining that javascript by building the war every time you want to make a change.  Imagine for a moment you have a javascript, dynamic image, dynamic data and a bunch of legacy code wound up together and the only way you can debug the problem is to build the war and put in about 1000 alert tags, one at a time, one build at a time.<br />
Hurts doesn&#8217;t it?  It may only take a second to start the build file, it may only take a second for the build to finish.  The War may end up in the deploy directory a second later, and a fraction of a second later you alt-tab to your browser and hit f5, and wait the tenth of a second your page loads, but this is going to take awhile.  &#8220;But Jason,&#8221; you cry out, &#8220;this is the essence of programming.&#8221;<br />
No, the essence of programming is in the ease, security and reliability of the process, the elegance of the product, and the product&#8217;s speed to production and profit.  Now imagine an included directory, outside of the war containing all of your Velocity templates.  Imagine a tool like Notepad++ or even Excel used to rapidly edit and merge out the Velocity, CSS and html of each iterative change.  Change, save, Alt-Tab to the browser, refresh, test.</p>
<p>2.  Always, always, always assign variables with the nullable exclamation mark.<br />
$some_variable versus $!some_variable</p>
<p>Why?  Imagine for a moment that you realize that no matter how good you are, how long lived and how perfect your product, that someone else will work with it.  They will change the code and someday, $some_variable may accidentally be deleted.  If you check the logs for why your pretty page isn&#8217;t loading or why something is choking or see in glaring font on your production environment the variable $some_variable staring back at you from the page, you&#8217;ll know that by not adding a single exclamation mark (bang) you messed up the whole page from whenever and wherever in antiquity you wrote it.</p>
<p>3. Extend the Velocity Template, do not mess with the base source.  This wasn&#8217;t my mistake, but my lesson.  Do not meddle with the base code unless you plan on submitting it to the Velocity source project and are fairly certain they&#8217;ll adopt your solution.  Velocity is going to change.  It&#8217;s going to grow and adapt.  Keep your code out of the base and don&#8217;t force others to carve through your hack.</p>
<p>4.  Try not to build a Constants file out of Velocity.  If something needs to be constant, set it in a flat text file.  If something needs to be dynamic, don&#8217;t name it or add Constant to its name.  This is a paradigm shift.</p>
<p>5.  Keep your style out of Velocity, unless Velocity is being used to make your style sheets.  Treat Velocity like it&#8217;s a sub-textual language to CSS and HTML.  If you&#8217;re going to use Velocity to write both, keep them separate.  Let Velocity write out your CSS and then let Velocity write out your html, but for the same reasons squared, don&#8217;t mix style in with your Velocity driven html.  Keep them separate.  Why?  Because you&#8217;re going to some day want to skin this.  The average corporate website gets a makeover every 18-26 months.  If you work for a start-up, that change may occur every 6 months.  Your masterpiece will find it hard to keep up with the styling of the next great Graphic artist unless style and function are kept in as separate a pen as possible.</p>
<p>6.  Build it once, build it small, and then make it a self-sufficient include.  Velocity is about templating, so if you&#8217;re going to build a table and use that table and its attached styles a billion times, make the table a function that incorporates a sub-template, do it once the right time, and dear God try to avoid cutting and pasting the same logic elventy billion times in your Velocity.  Small, efficient, elegant and easy to debug!</p>
<p>7.  Based off of number 5 and number 1, as much as possible, keep your Velocity driven Javascripts outside of your Html driven velocity.  Javascript can be one of the biggest bears of any interface to debug.  Thanks to firebug and other tools you can step through it all and find problems, but if a Javascript problem is caused by your velocity, find that out directly, not indirectly in a 40,000 line Velocity that includes html, javascript and about 5000 includes.</p>
<p>8.  Start simple, keep it simple and as it grows, realize that it was always supposed to be this way.  In other words, each time you do something where you follow the rules, remind yourself of why you obey them.  If you&#8217;re up at 4:00 AM in the morning, and haven&#8217;t slept in 72 hours, and are about to break a rule, stop for a moment and appreciate all of the times you didn&#8217;t break the rules and choose not to.  The developer who follows you will thank you for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=39</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bonsai Scarification, Stratification, and Germination: Planting Bonsai from seed</title>
		<link>http://jasonstarin.com/wp/?p=17</link>
		<comments>http://jasonstarin.com/wp/?p=17#comments</comments>
		<pubDate>Fri, 26 Feb 2010 13:14:13 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Bonsai]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=17</guid>
		<description><![CDATA[It&#8217;s been well over a decade since I worked for a small  nursery and helped grow and care for plants.  The care for trees, and specifically Bonsai is an ancient Chinese tradition, mastered by the Japanese, and extremely popular the world over.  One process that may need a bit of covering is one called the [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been well over a decade since I worked for a small  nursery and helped grow and care for plants.  The care for trees, and specifically Bonsai is an ancient Chinese tradition, mastered by the Japanese, and extremely popular the world over.  One process that may need a bit of covering is one called the Scarification and Stratification of Bonsai Seeds, or growing Bonsai tree from seeds.</p>
<p><span id="more-17"></span></p>
<p>The process is fairly straight forward.  You start by buying seeds.  A few months ago, I bought seeds from two vendors, the first of which is Dallas Bonsai.</p>
<p><a href="http://www.dallasbonsai.com/store/bonsai_seeds.html" target="_blank">Dallas Bonsai</a> sells Japanese Bonsai tree seeds in Japanese packages with English translations of the directions attached.  I&#8217;m raising <a href="http://en.wikipedia.org/wiki/Acer_palmatum">Acer Palmatum</a>, both Red and Green.  I started by soaking the seeds in the packages in a small cup of warm (exactly 120 degree Farenheit) water, for 48 hours, to remove the seed coating used by most seed packagers to help delay the germination of seeds in transport.  This process is called <a href="http://en.wikipedia.org/wiki/Scarification_%28botany%29">Scarification</a> and has absolutely nothing to do with <a href="http://en.wikipedia.org/wiki/Scarification">Scarification</a>.   The temperature also activates the fungi attached to the seed, awakens the chemicals within the nascent seed, and prepares for the successful Stratification of the plant.</p>
<p>There are two major types of <a href="http://en.wikipedia.org/wiki/Stratification_%28botany%29">Stratification</a>:</p>
<p>Warm Stratification</p>
<div id="attachment_21" class="wp-caption alignnone" style="width: 230px"><a href="http://jasonstarin.com/wp/wp-content/uploads/2010/02/warmstratification1.jpg"><img class="size-full wp-image-21" title="Warm Stratifcation of Japanese Red Maple" src="http://jasonstarin.com/wp/wp-content/uploads/2010/02/warmstratification1.jpg" alt="76 Japanese Maple Tree Seeds in Ziplock Sandwich bags, with a tablespoon of moist Peat Moss" width="220" height="165" /></a><p class="wp-caption-text">Here are 76 individually bagged Japanese Red Maple Seeds, in the warm Strat phase</p></div>
<p>Warm stratification is where you provide the seed the impression that it is awaiting a warm season.  This precedes a Cold stratification, which simulates a short winter, and convinces the seed that it is time to start growing.</p>
<div id="attachment_18" class="wp-caption alignnone" style="width: 230px"><a href="http://jasonstarin.com/wp/wp-content/uploads/2010/02/ColdStratification.jpg"><img class="size-full wp-image-18" title="Cold Stratification in the Refrigerator" src="http://jasonstarin.com/wp/wp-content/uploads/2010/02/ColdStratification.jpg" alt="" width="220" height="165" /></a><p class="wp-caption-text">Cedrus Brevfolia completes Cold Stratification in the Refrigerator.</p></div>
<p>When Cold Stratification ends, I&#8217;ll plant these seeds in their desired growing medium, probably a soft clay mixture, and I&#8217;ll try to germinate the seeds.  <a href="http://en.wikipedia.org/wiki/Germination">Germination</a> is the process where the plant will emerge from its seed and grow to a seedling.  As the seedling grows, a character will be observed.  With these batches, I intend on choosing those that seem to have the best chances of becoming good Bonsai trees and modifying them to the Bonsai lifestyle, of just enough, and cultured growing. In a few years, with care and attention,  the Maples will be a small forest.  The remaining trees, rather than merely discarded, will be grown into healthy young trees, and given as gifts to friends and family.  With any luck some of the Bonsai tree seedling too will be given to others.</p>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=17</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Counter-Stalking</title>
		<link>http://jasonstarin.com/wp/?p=13</link>
		<comments>http://jasonstarin.com/wp/?p=13#comments</comments>
		<pubDate>Fri, 26 Feb 2010 02:07:46 +0000</pubDate>
		<dc:creator>Jason Wills-Starin</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Lessons]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://jasonstarin.com/wp/?p=13</guid>
		<description><![CDATA[Cyberstalking is illegal, well, it&#8217;s illegal on paper, but the laws on the books are too vague and the concepts too limited for most judges to understand.  Lori Drew is actually an example of a related concept or rather a subset of cyberstalking called cyber-bullying.  You see Lori Drew convinced a suicidal, former friend and [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Cyberstaliking" href="http://en.wikipedia.org/wiki/Cyberstalking" target="_blank">Cyberstalking</a> is illegal, well, it&#8217;s illegal on paper, but the laws on the books are too vague and the concepts too limited for most judges to understand.  <a title="Lori Drew - Cyber Bully" href="http://pysih.com/2007/11/19/lori-drew/" target="_blank">Lori Drew</a> is actually an example of a related concept or rather a subset of cyberstalking called cyber-bullying.  You see Lori Drew convinced a suicidal, former friend and playmate of her daughter, an underage girl by the name of <a href="http://en.wikipedia.org/wiki/Suicide_of_Megan_Meier">Megan Meier</a>, to kill herself after impersonating a young boy a little older than Megan.  The case was fairly cruel, the legal nebula around the actions were fairly vague, and only the related financial fall-out and public outrage really served to punish Lori for her crimes.</p>
<p><span id="more-13"></span></p>
<p>Cyberstalking is old though.  I remember early days in the Internet, when chat rooms and bulletin boards would use personal information about another person to count coup or settle flame wars.  The solution I set on was to have a mostly public persona.  If nothing they could know about me could threaten me, then I was fine, right?</p>
<p>Oh the lessons I had to learn.  those lessons form the core to a concept term I&#8217;d like to coin called &#8220;Counter-Stalking.&#8221;</p>
<p>1.  You are never anonymous on the Internet, so don&#8217;t bother saying anything you wouldn&#8217;t want known by your worst enemy or your most prudish of relatives.  Figure out who you are, figure out why you believe and would say what you say, and be prepared to defend it and modify it graciously.  It&#8217;s a big world out there, and the Internet is a great place to discuss some of it, but certain taboo, sensitive items or even guilty pleasures or fantasies, should remain in the dark if you want to avoid them being used against you.</p>
<p>2.  There are no <a href="http://en.wikipedia.org/wiki/Miranda_rights">Miranda rights</a> on the Internet.  You have the right to remain silent, but everything you say, do or take a picture of is out there to be digested, criticized and manipulated in <a href="http://www.gimp.org/">GIMP</a>, <a href="https://www.photoshop.com/">Photoshop</a> or even <a href="http://www.adobe.com/products/premiere/">Premiere</a>.  I have friends who have lost jobs for blogging about their employers, parents who have grounded their children after finding sexually suggestive pictures of their children on Myspace and Facebook and even had an employer who made me take my personal website down to the bare bones, to prevent me from casting a &#8220;bad&#8221; image on the firm.  preparing to go out there in the open, requires an understanding of who and what you&#8217;ll share.  Anything you share should be almost if not completely harmless, and the consequences of that information, like I said in number one above, can be used against you.</p>
<p>3.  Your life and/or the lives of your loved ones are the most precious possession(s) you have.  There are nutbars out there who use the internet like a take out menu, and their goal is to take you out.  Your goal moving forward, out in the open, should be to take the necessary steps to defend yourself, prepare for the worst, and have a game plan should the nutbars come looking.  People who are prepared, can often be confident, and preparation can actually lead to enough caution to stay away from the bad people and the bad places they go, or once you identify a bad person can lead you to who to notify in the event of a disaster.</p>
<p>4.  I am not above the law, but the laws are written for my safety.  Staying inside of the law, avoiding things like piracy, hacking, the trade of viruses, the distribution of illegal content and the investigation of illegal substances is a good way to stay out of harm&#8217;s way and to practice safe internet tracking.  You can research the effects of Marijuana on Wikipedia, but joining a site and requesting info about where you can score some weed, makes it that much harder to put the insane drug dealer who likes your picture on Facebook in jail, and you outside and not joining him.  Follow the law, abide by the law, and then the law will protect you, will serve you in those sticky situations when someone steals your identity and builds a house from your credit card debt.</p>
<p>5.  Nothing financial is irreparable, but identity theft is one of the hardest monsters to recover from.  Protecting your financial identity is usually the number one reason you don&#8217;t give any personal information out.  Early on in your internet career, establish financial habits that are positive, gain a habitual need to check your credit scores, and keep your credit spotless and you can dodge the worst fall out.  The more vigilant you are, the safer you are.</p>
<p>6.  Invest in <a href="http://www.avg.com/us-en/homepage">virus scanners</a>, install <a href="http://www.safer-networking.org/index2.html">Spybot Search and Destroy</a> (turn on the tea timer), keep your machine up to date, and avoid seedy sites if at all possible.  Keeping your machine clean of malware will make it relatively easy to control the flow, in and out of your personal information.</p>
<p>7.  Be a responsible, reasonable person, who argues eloquently and effectively.  Knowing the basics of the English language or your Internet navigation language of choice is critical in presenting a good face to the world, but there are other elements key in becoming a safe and effective player.  Concede points that deserve conceding.  Shy away from flame wars that have no reasonable point or ending.  Change your language, even if terse to be effective and respectful.  Use your brain, not your caps lock key to add emphasis.</p>
<p>8.  When things get bad, the smart document everything.  It&#8217;s going to come up.  Some nutbar will threaten to kill you, and you&#8217;ll laugh it off, but do me and the rest of the Internet world a favor and treat threats like that like they&#8217;re real.  Document it locally, try to get the police to document it, and follow through with the site admins.  If on a social networking site like Facebook, report the comment, the poster and get him deleted.  Ban him/her from your personal networks, and encourage your friends to do the same.  Do not respond contact.  Don&#8217;t give them the satisfaction of knowing they&#8217;ve reached you.</p>
<p>9.  Use a strong, non-predictable password system.  I used to use <a href="http://en.wikipedia.org/wiki/Leet">1337 </a>passwords or <a href="http://en.wikipedia.org/wiki/ROT13">ROT13</a> my conversations, but nothing was as effective as choosing a password system that was hard to break, and security questions that do not follow the norm.  I never put my real High School in security questions that ask for them.  I&#8217;ve put the building I was currently working in before.  I don&#8217;t put my mother&#8217;s maiden name down for my bank info.  My passwords are sometimes in different languages, requiring<a href="http://tlt.its.psu.edu/suggestions/international/bylanguage/french.html#winalt"> special keyboard combinations</a> to input the characters.  Your accounts should be safe.  A friend of mine lost his wife in a horrible car accident, and his wife&#8217;s estranged sister stole his wife&#8217;s accounts, including their shared Verizon account.  The nutjob even had a conversation with the widower, using his dead wife&#8217;s Instant messaging client, for the first half, claiming to be her dead ghost!!!  People are messed up, and estranged relatives are going to know the correct answers to the normal questions.  You may think your family would never do this, but imagine you have a life insurance policy as I and many other men do, and then imagine that some relative wants a piece of it, and wants to take advantage of my widow.  Makes you angry doesn&#8217;t it?</p>
<p>10.  Learn the basics of the internet.  All current communication travels over TCP/IP.  The simple concept you all need to know is that means everyone connecting to the internet has an IP address provided by either a proxy or their Internet Service provider (also a proxy actually).  These addresses can resolve to specific transactional data between a machine and a host.  When possible, when dealing with nutjobs, gather as much info, including the IP, as possible and add it to your documentation.  When it&#8217;s time to report these nuts to their ISP&#8217;s and the authorities, this info will be invaluable.</p>
<p>11.  If you don&#8217;t feel safe, talk to someone and get some help.</p>
<p>These are my short lessons so far.  I may update this one fairly soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://jasonstarin.com/wp/?feed=rss2&#038;p=13</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

