<?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-3763352298685217503</id><updated>2012-02-16T23:42:19.185-05:00</updated><category term='linux'/><category term='apache'/><category term='math'/><category term='tools'/><category term='javascript'/><category term='shell'/><category term='web'/><category term='unix'/><category term='httpd'/><category term='security'/><category term='loco'/><category term='ninja'/><category term='acl'/><category term='programming'/><category term='scenario'/><category term='email'/><category term='how to'/><category term='ssh'/><category term='ubuntu'/><category term='website'/><category term='sniffing'/><category term='password'/><category term='rant'/><title type='text'>Ask Cold Drink</title><subtitle type='html'>Q&amp;A with the (Hardly) Infamous Cold Drink</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-9145420812714302349</id><published>2007-10-15T17:00:00.000-05:00</published><updated>2007-10-15T17:08:55.451-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='website'/><title type='text'>ACD Go Down the Hole</title><content type='html'>As you probably have not noticed but will now recognize since I'm pointing it out, I haven't really posted here since June or so. Why? I have been far to preoccupied with other things to post anything, and far too bitter to be bothered when I'm not. Considering that, as well as the fact that people don't ask me things I'd share for free anymore, and &lt;a href="http://gnuisance.net/blog/t/2007/gnujersey-gone.html"&gt;GnuJersey.org's imminent shutdown&lt;/a&gt;, I see no reason to pretend like I'm ever going to post again.&lt;br /&gt;&lt;br /&gt;I have other interesting things in mind for the future, but we'll see what happens.&lt;br /&gt;&lt;br /&gt;*Poof*, suckas!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-9145420812714302349?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/9145420812714302349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=9145420812714302349' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/9145420812714302349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/9145420812714302349'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/10/acd-go-down-hole.html' title='ACD Go Down the Hole'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-7912557430967343362</id><published>2007-08-12T14:56:00.000-05:00</published><updated>2007-08-12T14:57:37.469-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><title type='text'>I Realy Don't Care</title><content type='html'>&lt;em&gt;Rant&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I really don’t care.&lt;br /&gt;&lt;br /&gt;I don’t care that your computer is infested with spyware, causing pictures to open up by themselves. I don’t care how much money you spent just to have a giant, 2.8GHz paperweight. I don’t care that your network is home to names, home addresses, and social security numbers of 10,000 individuals, and protected by security which my cat could break through. One more time: I don’t care.&lt;br /&gt;&lt;br /&gt;At the end of the day, there is one thing I do care about. You annoying wanna-be power users. I hate you. I despise you. I hope you get crippling arthritis in your fingers and can never type again.&lt;br /&gt;&lt;br /&gt;Why on earth do you think that being able to change passwords and set a few profile restrictions on your domain controller makes you qualified to be your company’s domain administrator? Half the professional techs I know aren’t qualified to be administrators for a Windows domain, and you think a few help documents you found on the Internet are better than their years of experience and training?&lt;br /&gt;&lt;br /&gt;“No, I didn’t graduate from medical school, but I found some tutorials on the web that will get me through your appendectomy.”&lt;br /&gt;&lt;br /&gt;Sure, you go ahead and believe that, but when you make the 11 o’clock news because the 10,000 records of names, addresses, and social security numbers you maintain wound up on the Internet, don’t call me. I’m not going to touch it. I warned you about passwords that can be cracked faster than you can enter them.&lt;br /&gt;&lt;br /&gt;As you are not qualified to do the job, you certainly aren’t qualified to dish out advice about it. Thanks you you, I have to waste my time telling others like you and novice users alike how they aren’t as impenetrable as they think just because they installed a desktop firewall or are behind a NAT router. Since you are the long-time trusted source for information (that guy in accounting who is really good with computers, or your  nephew who plays computer games a lot) there is no way I convince victims of your ignorance to trust my advice.&lt;br /&gt;&lt;br /&gt;False authority syndrome sucks. Look it up.&lt;br /&gt;&lt;br /&gt;On the rare occasion I do feel sorry enough for you to get involved if your tragic technical situations, shut the hell up and let me do my job. I don’t need you second guessing my every decision, and demanding I explain everything I do. When the bill gets run up because you won’t leave me alone, or because your network looks like it was designed by retarded lemming, just shut up and pay the bill.&lt;br /&gt;&lt;br /&gt;I could have redeployed all of your repaired workstations in a fraction of the time, but considering that I had to manually set up every printer on your network by hand instead of pointing to a share on the server, well, your lucky it didn’t take even longer. Sure, I’ll recover old, tainted profiles off of your dying machines and manually move them to a new workstation, but its going to cost you. Your employees were too dumb and hardheaded to save documents to the server share? Sorry, they are gone. I told you about folder redirection, and the ability to, for the most part, keep users from saving documents to their local machines, but you didn’t listen.&lt;br /&gt;&lt;br /&gt;But, in the end, I don’t care. You’ve dug your own grave, and its yours to lie in. If you pay me enough, I’ll pretend to care, at least for a little while. If you’ve got the money, I’ll be over here playing with my Mac and Linux boxes. No, don’t ask me to explain those to you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-7912557430967343362?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/7912557430967343362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=7912557430967343362' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7912557430967343362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7912557430967343362'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/08/i-realy-dont-care.html' title='I Realy Don&apos;t Care'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-7371881716855321007</id><published>2007-06-11T20:17:00.000-05:00</published><updated>2007-06-11T20:21:05.638-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='scenario'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><title type='text'>Managing E-mail Lists</title><content type='html'>&lt;strong&gt;[I need to set up an e-mail distribution list that doesn't reveal list members.] Now I'm having a problem with my list being too large. When I send out a message most of the recipients don't get it. I get a system administrator message saying my e mail was "truncated" or didn't even go through...&lt;/strong&gt; - &lt;em&gt;Virginia&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;There are four common ways mass e-mails are distributed.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Mailing list managers&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Group E-mail Alias&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Unassisted in a regular e-mail client&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Desktop mass-mailing software&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Mailing List Managers&lt;/h3&gt;&lt;br /&gt;Mailing list managers are the best choice for fluid memberships, or member lists over two dozen or so people. Mailing list managers typically reside on or near an e-mail server, taking incoming messages and redistributing them to everyone on the mailing list. Other features available in more popular packages are automatic bounce detection (to remove invalid e-mail addresses from the list automatically), subscription management, and moderation.&lt;br /&gt;&lt;br /&gt;Mailing list managers allow you to take a hand-off approach to mass e-mail distribution. All you have to do is send a single e-mail to the manager, and it will figure out the rest. Users who want to be removed from the list can often do so without any interaction from another human. Better still, many mailing list managers will maintain an archive of list activity. Past newsletters and announcements can be preserved with no additional effort on the part of the sender.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gnu.org/software/mailman/"&gt;GNU Mailman&lt;/a&gt; is a very popular choice in mailing list managers. It provides all of the features one typically needs and more. The biggest drawback of Mailman is the invasiveness of its install. It is not practical or even possible to install Mailman on most low-end web hosting accounts. If this isn't a problem, Mailman is an easy choice.&lt;br /&gt;&lt;br /&gt;Another option is &lt;a href="http://www.phplist.com/"&gt;phplist&lt;/a&gt;. phplist requires no more than your average PHP-based web application to run. Most web hosting accounts, even cheap ones, have what is required to support phplist. Unlike Mailman, phplist is not a group mailing list manager. Its intended for one way communication only. For people only interested in sending newsletters and announcements, phplist can get the job done without the complication of Mailman.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Group E-mail Aliases&lt;/h3&gt;&lt;br /&gt;Group e-mail aliases allow a single e-mail to a single address to be sent to multiple recipients. This is where the similarity with mailing list managers ends. Group aliases must be managed manually by an e-mail server administrator or user-accessible control panel. Aliases don't work well for large numbers of users, and typically have no access control available. Anyone can send any e-mail to an alias group, and each member e-mail address will receive a copy.&lt;br /&gt;&lt;br /&gt;As far as user-generated e-mails are concerned, there is really no need to use a group alias. An unassisted desktop e-mail client can get the job done just as well.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Desktop E-mail Clients&lt;/h3&gt;&lt;br /&gt;Doing things the hard (easy?) way by dumping large numbers of e-mail addresses into a standard desktop e-mail client is likely the most popular way of dealing with mass mailing list. This solution is cheap, easy, and effective... until you break a few dozen recipients, that is. Large amounts of e-mail being forced through your mail server without the intelligent batching and throttling of a good list manager can be a disaster. If SMTP server recipient limits don't trip things up, an angry mail administrator with a choking server or spam detection and prevention mechanisms might.&lt;br /&gt;&lt;br /&gt;If a desktop e-mail client is to be used unassisted for mass mailings, be sure to respect recipients privacy. Listing several recipients in the To or CC fields is only acceptable in small group settings, when each recipient is already aware of the e-mail addresses and participation of the others. The easiest way around this is to address mass mails to yourself, and BCC all other recipients.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Desktop Mass Mailing Software&lt;/h3&gt;&lt;br /&gt;Desktop mass mailing software is often the tool of choice for spammers. This shouldn't deter you should you have legitimate needs. That said, if you are running a legitimate e-mail list, you'll probably be better off with one of the two previous solutions. Mass mailing software will yield better results than an e-mail client alone, but is still a stop-gap measure with most of the disadvantages that come with using anything but a server-based mailing list manager.&lt;br /&gt;&lt;br /&gt;All things considered, just get a decent mailing list manager. Everyone stands a very good chance of getting either Mailman or phplist up and running. There is little excuse for not using a decent mailing list manager. If you have to run with something else until you've got a real mailing list manager set up, so be it. But make sure your temporary solution doesn't become a permanent one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-7371881716855321007?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/7371881716855321007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=7371881716855321007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7371881716855321007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7371881716855321007'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/06/managing-e-mail-lists.html' title='Managing E-mail Lists'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-4491822990923908226</id><published>2007-06-01T13:17:00.000-05:00</published><updated>2007-06-01T13:19:34.179-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='loco'/><category scheme='http://www.blogger.com/atom/ns#' term='scenario'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Open Source Public Relations</title><content type='html'>&lt;em&gt;Marketing says &amp;ldquo;Buy me.&amp;rdquo; PR says, &amp;ldquo;Its OK, go ahead.&amp;rdquo;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;To be blunt, open source public relations sucks. Linux public relations sucks. (While the open source and Linux communities are very close, there are members of one who are not members of the other. Despite this, I will henceforth refer to both groups simply as the open source community.) If the open source community expects any significant adoption of their ideals and products, decent public relations is a necessity. This is due to the nature of the community and the market.&lt;br /&gt;&lt;br /&gt;With the exception of Apache, user bases of various open source software products are far below that of commercial rivals. The results are a smaller talent pool, fewer businesses or business-like points of contact for help, and most importantly, greater effect of a single individual on the image of the user and support community as a whole. As members of the community, we must recognize this and attempt to keep our perception positive, and remain active in public relations to that end.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Would you send your child into someone's household storm?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;We tend to be a very passionate bunch. While people rage on and fight wars over issues of religion and politics, we do the same over software licenses and patents, feature sets, and implementation details. Its human nature to get defensive, and often offensive, when it comes to beliefs. Being passionate about something is a good thing, but perhaps we need to keep our passions behind closed doors. When outsiders look in, without context and understanding, how are they likely to perceive conflict? Will they see colleagues battling things out for the greater good of the product and community? Will they see unprofessional people who are still emotionally children crying over bruised egos? Regardless of what the truth is, its the perception that matters&lt;br /&gt;&lt;br /&gt;Consider for a moment a household in turmoil. Most of us know at least one. It could be parents who are constantly fighting, or perhaps its a single parent with questionable friends or a poor choice for a love interest. Maybe its just the family that is falling apart because nothing seems to be going right. Regardless, would you send your child into such a household to stay even a night? Nobody is perfect, but when you see significant, obvious problems which could affect your child, could you really send them into the fire? The situation may not seem relevant, but the reality is its more significant than most would believe.&lt;br /&gt;&lt;br /&gt;Technology is becoming a greater and more significant part of our lives every day. It could be your business and the hopes, dreams, and mortgage it carries that is effected by your technology choices. Maybe its the memories of a lost loved one immortalized in digital photos and video clips. It could also be your finances, your recreation time, your educational tool, or your connections to distant friends. Software, operating systems, media formats – they can all be key parts of our lives. Who are you going to trust that to?&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Who's legs to stand on?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Most people don't have the passion about technology that we do, so choices are made in a much more practical way. Would you trust your digital life to a successful business with strong leaders, excellent market position, and the ability to command and define the landscape? Would you trust it to a bunch of people in the game as a hobby who's allegiance is fleeting, and needs defined by ideals instead of practicality? To us, the decision is clear. The problem is, its also clear to the people we seek to bring on board.&lt;br /&gt;&lt;br /&gt;We have to understand the needs of others, and what is important to them. We can't even begin to speak to them on the right level until we know where they are coming from. We can't possibly devalue the importance of going with the crowed when we don't even know why other's have made that choice in the first place.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Do you care?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;You can't help someone who doesn't want to be helped, but there is more to the situation than saving users from themselves. Today, the open source community doesn't have the power it needs to drive the world in the direction it wants. We dig and we claw, we make some headway, but in the end we are still being kept down. If we are to reform or eliminate software patents, promote and standardize open formats, eliminate DRM, or accomplish any of our other far-reaching goals, we need all of the help we can get. Let's present the best of ourselves to others, and seek to understand their wants and needs. Maybe if we work on our PR, we can rally more troops to the cause.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-4491822990923908226?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/4491822990923908226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=4491822990923908226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/4491822990923908226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/4491822990923908226'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/06/open-source-public-relations.html' title='Open Source Public Relations'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-3647152188688324002</id><published>2007-05-31T12:43:00.000-05:00</published><updated>2007-05-31T13:00:31.316-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='scenario'/><title type='text'>Why Use RCS for Backups?</title><content type='html'>&lt;em&gt;Indrect response to Subversion for backup critics&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;A little while ago I wrote a series on using Subversion along with some shell scripts and other fun things to provide versioned backups of  files. Subversion and other Revision Control Systems have some key features that make it very well suited for this task. After all, that's at the core of what RCS do.&lt;br /&gt;&lt;br /&gt;RCS aren't always the best choice for this type of thing. Dedicated, versioned backup systems are much better at this core task. They are more specialized, have less cruft, and less chance of breaking. All that said, sometimes doing things the unnecessarily hard way has huge benefits. What are they?&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Tagging&lt;/h3&gt;&lt;br /&gt;A common feature RCS offers that one wont find in backup offerings is tagging. Tagging allows you to mark a copy of your data, or subset there-of, in some meaningful way. This is a bit different than just marking a copy of your backup from some specific point in time. Tagging allows you to be selective about what gets marked, and marked items can span different time periods.&lt;br /&gt;&lt;br /&gt;As an example, you can mark a selection of family photos in your backups as “Pictures for Grandma”. Exporting images with that tag will allow you to quickly put together a set, and store that set with very little overhead. When your aunt sees grandma's new photo-filled DVD and requests a copy, its a simple matter to re-export that set and send it off. Photo album software can do this, but what if you want to include video clips as well? How about the poetry your kid wrote in school? Tagging the files lets you mix and match data of any type.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Branching&lt;/h3&gt;&lt;br /&gt;Branching allows you to maintain multiple, parallel data sets. This feature will let you back up originals of files and work on them separately from your originals while maintaining backups of both. This is less useful in a backup scenario than tagging because you can always roll back files to specific versions with a regular backup setup. The real advantage comes into play when you want to have easy access to both the original and modified data sets at the same time.&lt;br /&gt;&lt;br /&gt;One of the more obvious applications is photo editing. Photo sets may be thumbed through, with a limited number of shots making it through to the next stage, be it another elimination, basic manipulation, cataloging, or other actions. Utilizing branching, backups can be made of both the raw, original set as well as intermediate steps without wasting storage space on-disk and in backups. If you have 5 rounds of eliminations or selections, and want to preserve each round, you don't have to store your final selections 5 times.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Multiple Working Copies&lt;/h3&gt;&lt;br /&gt;One of the biggest benefits of using a RCS for backups is the ability to have multiple working copies. You can mirror your data on multiple systems, editing what you want, where you want. Changes at all locations are merged back into your backup data, and can be propagated back out to all working copies. Simply, you can have the same data anywhere, with changes at all locations backed up an an efficient manner.&lt;br /&gt;&lt;br /&gt;In the very common case of having a work and a home computer, or having one desktop machine and one laptop, the convenience of multiple working copies becomes apparent immediately. So long as you keep up with minor housekeeping, the work you do on one computer is available on another. Should one machine be unavailable for any reason, you can pick up where you left off elsewhere.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Portable Backup Data&lt;/h3&gt;&lt;br /&gt;Many snapshot-preserving backup methods use file system-specific tricks or features, making it difficult if not impossible to move backup data to a new system or volume without loosing key information. RCS like Subversion can be quite happily picked up and moved to different locations, regardless of disk format or operating system. The ability to store this data easily on portable, rewrite able media like a USB drive is a very convenient feature as well, since you can have all of your versions readily accessible wherever you go.&lt;br /&gt;&lt;br /&gt;Hopefully I have shed some light on the craze regarding using revision control systems for backing up data. In most situations, its more trouble than its worth. But for those of us with special needs, nothing else will do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-3647152188688324002?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/3647152188688324002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=3647152188688324002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/3647152188688324002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/3647152188688324002'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/05/why-use-rcs-for-backups.html' title='Why Use RCS for Backups?'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-6645789941907061765</id><published>2007-05-18T14:57:00.000-05:00</published><updated>2007-05-19T13:07:17.271-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Semi-Reliable Periodic Commands</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cron&lt;/code&gt; is great. Using &lt;code&gt;cron&lt;/code&gt;, you can schedule commands to be run at regular intervals or at specific times. One of the major drawbacks of &lt;code&gt;cron&lt;/code&gt; is that it doesn't generally keep state regarding job's status. If a job is scheduled to run at midnight, but the system is powered down at midnight, the command will never be run.&lt;br /&gt;&lt;br /&gt;There are a few solutions out there to take care of this shortcomings, but many are designed for system-wide use only. What if you don't want to intermingle your personal jobs with the system-wide ones? Here is a fairly simple script that works as a wrapper, providing a little insurance to help make sure jobs get run.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;export P_ENV=~/.profile&lt;br /&gt;export P_TRACK=~/.p_track&lt;br /&gt;&lt;br /&gt;if [ -e "$P_ENV" ]; then&lt;br /&gt; . $P_ENV&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;case "$1" in&lt;br /&gt; h) &lt;br /&gt;  export P_NOW=$(date +%Y-%m-%d-%H)&lt;br /&gt;  ;;&lt;br /&gt; d)&lt;br /&gt;  export P_NOW=$(date +%Y-%m-%d)&lt;br /&gt;  ;;&lt;br /&gt; w)&lt;br /&gt;  export P_NOW=$(date +%Y-%U)&lt;br /&gt;  ;;&lt;br /&gt; m)&lt;br /&gt;  export P_NOW=$(date +%Y-%m)&lt;br /&gt;  ;;&lt;br /&gt; *)&lt;br /&gt;  echo ERROR: Term not specified. Must be one of h, d, w, m .&lt;br /&gt;  exit 1&lt;br /&gt;esac&lt;br /&gt;&lt;br /&gt;if [ -z "$2" ]; then&lt;br /&gt; echo ERROR: Command to run not specified.&lt;br /&gt; exit 2&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;export P_TAG=$(echo $2 | sed -e 's/[^A-Za-z0-9]/-/g')&lt;br /&gt;export P_FILE=$P_TRACK/$P_TAG-$P_NOW&lt;br /&gt;&lt;br /&gt;if [ -e "$P_FILE" ]; then&lt;br /&gt; exit 0&lt;br /&gt;else&lt;br /&gt; rm -f $P_TRACK/$P_TAG*&lt;br /&gt; echo Executing $2 at $(date)&lt;br /&gt; $2 $3 $4 $5 $6 $7 $8 $9&lt;br /&gt; echo Done&lt;br /&gt; &lt;br /&gt; if [ "$?" -eq "0" ]; then&lt;br /&gt;  touch $P_FILE&lt;br /&gt; fi&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The script has 4 operating modes. It can help ensure command are run hourly, daily, weekly, or monthly. It uses empty files in a configurable directory (&lt;code&gt;~/.p_track&lt;/code&gt; by default) to keep tabs on the last time the command was run. Entries in the tracking directory are only created if the command run returns exit status 0 (no error.)&lt;br /&gt;&lt;br /&gt;To use this wrapper, place it and a period (&lt;code&gt;h&lt;/code&gt; for hourly, &lt;code&gt;d&lt;/code&gt; for daily, and so on) in front of commands in your crontab like so:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;*/20 * * * * ~/bin/periodic h ~/bin/command param1 param2&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The above will check to see if the command needs to be run every 20 minutes, but will only execute it every hour. The advantage of wrapping individual commands instead using periodic command directories (check out the &lt;a href="http://www.wlug.org.nz/run-parts(8)"&gt;&lt;code&gt;run-parts&lt;/code&gt;&lt;/a&gt; command) is less administrative overhead.&lt;br /&gt;&lt;br /&gt;Note: The "real" &lt;code&gt;periodic&lt;/code&gt; command is generally used to run system-wide periodic commands, often stored in &lt;code&gt;/etc/periodic&lt;/code&gt;. UNIX-y systems tend to use other mechanisms and directories to do something similar.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Update 1:&lt;/em&gt; Changed the script from a group of &lt;code&gt;if/elif&lt;/code&gt; to &lt;code&gt;case&lt;/code&gt; (thanks for pointing that out Dave) and added a quick import of &lt;code&gt;.profile&lt;/code&gt; or another file to set up environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-6645789941907061765?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/6645789941907061765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=6645789941907061765' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/6645789941907061765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/6645789941907061765'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/05/semi-reliable-periodic-commands.html' title='Semi-Reliable Periodic Commands'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-3460761758629875547</id><published>2007-05-16T12:53:00.000-05:00</published><updated>2007-05-20T16:55:22.036-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Flash Objects and the Z-Index</title><content type='html'>&lt;strong&gt;... On my Mac using Safari the drop down menus appear. When I move my cursor down on the drop down the rest of that drop down disappears In IE the drop down menus go only as far as the the top of the Flash file. I am not sure if it does the same in Mozilla. Anyway to circument this? Perhaps I could just do a pop-up page?&lt;/strong&gt; - &lt;em&gt;Michael&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Yes! This is easy. First, you'll need to add a &lt;code&gt;param&lt;/code&gt; tag to your &lt;code&gt;object&lt;/code&gt; tag. Set the name to &lt;code&gt;wmode&lt;/code&gt; and the value to &lt;code&gt;transparent&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;param name="wmode" value="transparent" /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then, force your Flash object to be below everything else by changing its &lt;code&gt;z-index&lt;/code&gt; to 0. For the unfamiliar, think back to Geometry class in high school. You had X, Y, and Z axis. In the user interface world, the Z axis values specify how objects are stacked, and typically don't deal with perspective as you would see in a 3D game.&lt;br /&gt;&lt;br /&gt;For some reason, applying &lt;code&gt;z-index&lt;/code&gt; directly to a Flash object doesn't work properly. Wrap your Flash object in a &lt;code&gt;div&lt;/code&gt;, and apply the &lt;code&gt;z-index&lt;/code&gt; to it.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;div style="z-index: 0"&amp;gt;...&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That's all there is too it!&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Update 1:&lt;/em&gt; Unfortunately, the above code only works for Internet Explorer! The object tag is for IE only. Most embeded Flash content is wrapped with two tags in order to support both IE and other browsers. These tags are the &lt;code&gt;object&lt;/code&gt; and &lt;code&gt;embed&lt;/code&gt; tags. In order for this fix to apply to all browsers, modify the &lt;code&gt;embed&lt;/code&gt; tag as well, adding the &lt;code&gt;wmode&lt;/code&gt; property with a value of &lt;code&gt;transparent&lt;/code&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-3460761758629875547?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/3460761758629875547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=3460761758629875547' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/3460761758629875547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/3460761758629875547'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/05/flash-objects-and-z-index.html' title='Flash Objects and the Z-Index'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-4991332750046619033</id><published>2007-05-13T15:20:00.000-05:00</published><updated>2007-05-13T15:30:53.895-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Bad Programming</title><content type='html'>&lt;em&gt;Rant&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The self-checkout kiosk at the local supermarket blocked, waiting for employee input instead of giving me errors. Why? Bad programming.&lt;br /&gt;&lt;br /&gt;Planet keeps brining up my old posts if I modify them (typically to correct errors). Why?  Yup. Bad programming.&lt;br /&gt;&lt;br /&gt;Bad programming doesn't necessarily mean bugs and buffer overflows. It also means bad predictions about program flow. If a narrow sequence of events is all code can accommodate without some easy and automatic method to attempt recovery and/or to bring things back on track, its badly programmed.&lt;br /&gt;&lt;br /&gt;Programmers aren't mind readers, but they need to consider the "what ifs". When a program behaves in a manner that is just plain stupid, its probably badly designed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-4991332750046619033?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/4991332750046619033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=4991332750046619033' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/4991332750046619033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/4991332750046619033'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/05/bad-programming.html' title='Bad Programming'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-8649167000267001181</id><published>2007-05-08T17:27:00.000-05:00</published><updated>2007-05-13T14:52:40.876-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='httpd'/><title type='text'>Silhouette Clone: Part 3</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="/2007/05/silhouette-clone-part-1.html"&gt;Previously&lt;/a&gt;, we created a Subversion repository and automatically populated it with data from a directory which was shared over the network. This allowed users to work on the share while automated processes on the server stored versioned copies of the directory for later access. Now we will provide point-in-time recovery options for files in our repository without making users install and use a Subversion client.&lt;br /&gt;&lt;br /&gt;Subversion repositories can be accessed over the network via WebDAV by means of special Apache HTTPD modules. The problem with this approach is that old versions aren't accessible using this method. Even after employing simple workarounds to present users with a prior versions, users would still have two places to look for data: the actual network share and a the URL of the WebDAV interface to the repository.&lt;br /&gt;&lt;br /&gt;We can get around this by using WebDAV to serve up the Subversion repository and then re-sharing the WebDAV resource using the same protocols we shared the original network share with. Confused? Follow along.&lt;br /&gt;&lt;br /&gt;The first thing we need to do is implement point-in-time tags in our Subversion repository. Subversion can copy files from one location in the repository to another without duplicating the file data. This means we can implement tags by simply copying files! For minimal impact, we will perform this copy entirely within the repository.&lt;br /&gt;&lt;br /&gt;Commonly, Subversion repositories have a &lt;code&gt;trunk/&lt;/code&gt; or &lt;code&gt;head/&lt;/code&gt; directory where most of the work happens. We will also add a &lt;code&gt;point-in-time/&lt;/code&gt; directory to store our point-in-time copies. An easy way to create these directories is to use the svn mkdir command on our repository.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ svn mkdir /path/to/repository/head -m "Created head/"&lt;br /&gt;$ svn mkdir /path/to/repository/point-in-time -m "Created /point-in-time/"&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Note the use of the &lt;code&gt;-m&lt;/code&gt; option to specify a commit message. We are performing operations directly on the repository and are therefore creating new revisions of it. Subversion demands you leave a message (even an empty one) when creating a new revision.&lt;br /&gt;&lt;br /&gt;Now that we are using a &lt;code&gt;head/&lt;/code&gt; directory, all of our day-to-day work should be performed there. Users do not need to be aware of the &lt;code&gt;head/&lt;/code&gt; directory at this point so we will simply pretend that &lt;code&gt;head/&lt;/code&gt; is the root of our repository.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ svn checkout /path/to/repository/head /path/to/working/copy&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Any changes to the working copy will be committed to the &lt;code&gt;head/&lt;/code&gt; directory in our repository transparently.&lt;br /&gt;&lt;br /&gt;Now that we have a repository and working copy set up to utilize a &lt;code&gt;head/&lt;/code&gt; directory, we can continue as we did in parts 1 and 2 to enable automatic commits. From this point, implementing point-in-time copies is quick and easy. A simple shell script to copy &lt;code&gt;head/&lt;/code&gt; to a subdirectory of &lt;code&gt;point-in-time/&lt;/code&gt; at regular intervals will get the job done.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt;svn copy file:///path/to/repository/head "file:///path/to/repository/snapshots/`date +%F\ %T`" -m "Point-in-time marker added"&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Note that while we can put the above command in the same file as our previous commands to commit changes to the Subversion repository, we don't have to. Separate scripts will let us use separate schedules for our actual backups and point-in-time tags. This allows us to back up data frequently without presenting a user attempting to recover a file him or herself with an overwhelming number of  file iterations to wade through.&lt;br /&gt;&lt;br /&gt;Once our backup commands and point-in-time tags commands are running at regular intervals, we will have a repository layout that is fairly self explanatory.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ svn list /path/to/repository&lt;br /&gt;head/&lt;br /&gt;point-in-time/&lt;br /&gt;&lt;br /&gt;$svn list path/to/repository/point-in-time&lt;br /&gt;2007-05-08 17:00:00/&lt;br /&gt;2007-05-08 17:15:00/&lt;br /&gt;2007-05-08 17:30:00/&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Note that by modifying the date format string in our point-in-time tag command we can change how subdirectories of our &lt;code&gt;point-in-time/&lt;/code&gt; directory are named. 24-hour time is used instead of 12-hour time to make sure directories are always sorted in chronological order.&lt;br /&gt;&lt;br /&gt;Now that we have our data efficiently stored and laid out, we have to provide access to it. Most file sharing packages do not understand Subversion repositories, so we will have to build a bridge. We can start by using Apache HTTPD to provide WebDAV access to the repository. After installing and enabling the &lt;code&gt;mod_dav_svn&lt;/code&gt; module, a few lines in an Apache configuration file will do.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&amp;lt;Location /repository&amp;gt;&lt;br /&gt;    DAV svn&lt;br /&gt;    SVNPath /path/to/repository&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ideally, you will want to lock-down this location using a combination of users, passwords, and IP addresses. See the &lt;a href="http://httpd.apache.org/docs/2.2/"&gt;Apache documentation&lt;/a&gt; for more information.&lt;br /&gt;&lt;br /&gt;Once Apache is reloaded and serving the repository, install &lt;a href="http://dav.sourceforge.net/"&gt;davfs2&lt;/a&gt;. When installed properly, you can mount the Subversion repository via WebDAV as you would any other file system. A simple setup is to create a directory for the network share, and place your data in a subdirectory. This will let you mount the Subversion repository along side your data.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ mkdir /path/to/network/share&lt;br /&gt;$ mkdir /path/to/network/share/data&lt;br /&gt;$ mkdir /path/to/network/share/backups&lt;br /&gt;&lt;br /&gt;$ mount -t davfs -o ro,noaskauth http://localhost/repository/point-in-time/ /path/to/network/share/backups&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Note that you do not want to allow the mounted backup directory to be modified.&lt;br /&gt;&lt;br /&gt;Mirroring our Subversion repository layout in our local file sytem seems silly, but we used this setup for a reason. Providing users direct access to the live Subversion repository for use as the live network share would generate up to 3 new revisions in our repository each time a file is saved! This is due to the rename-write-delete method commonly used to avoid data loss when saving files. Multiple revisions aren't too bad, but the way in which these revisions come about prevents Subversion from storing data efficiently.&lt;br /&gt;&lt;br /&gt;Using Subversion as a (mostly) transparent replacement for Microsoft Window Server's Shadow Copy for Shared Folders can be quite cumbersome, but its a viable alternative. Current developments in Linux file systems will likely render the need for this workaround obsolete in the near future. Until then, take it one step at a time and enjoy automatic, versioned backups of your network shares.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-8649167000267001181?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/8649167000267001181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=8649167000267001181' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/8649167000267001181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/8649167000267001181'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/05/silhouette-clone-part-3.html' title='Silhouette Clone: Part 3'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-2239659820151899113</id><published>2007-05-07T14:38:00.000-05:00</published><updated>2007-05-07T15:21:56.394-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Silhouette Clone: Part 2</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="/2007/05/silhouette-clone-part-1.html"&gt;Read Part 1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now that we have already set up a Subversion repository as well as automatic file additions and commits, we need to account for deletions and provide access to versioned data.&lt;br /&gt;&lt;br /&gt;When a file is deleted from a Subversion working copy without the proper procedures (which is pretty much what we are going to do) Subversion is shocked not to find the file when checking repository status.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ svn status /path/to/working/copy&lt;br /&gt;!      deleted-file&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;All we need to do is let Subversion know we want to delete the file using the &lt;code&gt;svn delete&lt;/code&gt; command. As in the previous installment, a little finagling from a shell script gets the job done.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt;svn status /path/to/working/copy | grep ^\? | cut -c 8- | xargs svn add&lt;br /&gt;svn status /path/to/working/copy | grep ^\! | cut -c 8- | xargs svn delete&lt;br /&gt;svn commit -m "Automatic snapshot" /path/to/working/copy&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You may note that now we have two calls to the svn status command. Below the above is rewritten to cache the output of this command in order to improve performance, but I wanted to show this format just once to compare to the previous version of the script.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt;svn status /path/to/working/copy &gt; /tmp/svn-status.txt&lt;br /&gt;grep ^\? &lt; /tmp/svn-status.txt | cut -c 8- | xargs svn add&lt;br /&gt;grep ^\! &lt; /tmp/svn-status.txt | cut -c 8- | xargs svn delete&lt;br /&gt;svn commit -m "Automatic snapshot" /path/to/working/copy&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, without handling file moves and renames through Subversion, they cannot efficiently. A moved or renamed file looks like a missing and new file pair to Subversion.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ svn status /path/to/working/copy&lt;br /&gt;!     old-file-path&lt;br /&gt;?     new-file-path&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Even though we can't handle this as efficiently as Subversion can, we can still handle it. No additional work is required to handle file renames or moves.&lt;br /&gt;&lt;br /&gt;Next time, we will provide access to the versioned file system over the network without the need for clients to use the &lt;code&gt;svn&lt;/code&gt; command line tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-2239659820151899113?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/2239659820151899113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=2239659820151899113' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/2239659820151899113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/2239659820151899113'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/05/silhouette-clone-part-2.html' title='Silhouette Clone: Part 2'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-6302314105007393970</id><published>2007-05-05T18:28:00.000-05:00</published><updated>2007-05-05T18:32:07.972-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='httpd'/><title type='text'>Silhouette Clone: Part 1</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;A feature of a server operating system I will not name enables administrators to create snapshots of network shares automagically. This is above and beyond storing data on a server to facilitate regular backups. Users who clobber each other's work can view the share as it was previously and recover missing or modified documents themselves. If this sounds familiar, it should. Its simply automated version control.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; is a great tool for storing versioned copies of filesystems. Combined with &lt;a href="http://httpd.apache.org/"&gt;Apache HTTPD&lt;/a&gt; and a few modules, access to versioned, writable Subversion repositories over the network is possible, but not ideal for many situations. In order to prevent data loss, many applications do a 3-step shuffle when saving files. Even this would be fine, except for the fact that this doesn't always happen efficiently over WebDAV, the protocol used to share Subversion repositories in this manner.&lt;br /&gt;&lt;br /&gt;A decent compromise is to share data over the network as one normally would, and automatically commit changes to a Subversion repository at regular intervals.&lt;br /&gt;&lt;br /&gt;Setting up a Subversion repository is quite simple.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;svnadmin create /path/to/repository&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;After that, simply check out your (empty) repository.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;svn checkout /path/to/repository /path/to/working/copy&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Then, simply share the working copy via the method of your choice. You may want to restrict access to the &lt;code&gt;.svn&lt;/code&gt; directory to prevent accidental destruction.&lt;br /&gt;&lt;br /&gt;A simple shell script can be run from &lt;code&gt;cron&lt;/code&gt; at regular intervals to add new documents to the repository. Modified documents will be committed automatically during the commit command.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt;svn status /path/to/working/copy | grep \? | cut -c 8- | xargs svn add&lt;br /&gt;svn commit -m "Automatic snapshot" /path/to/working/copy&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Once your cron job starts firing, you will have point-in-time snapshots of your share. In future posts, we'll deal with deletes and simple remote access to the versioned data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-6302314105007393970?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/6302314105007393970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=6302314105007393970' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/6302314105007393970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/6302314105007393970'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/05/silhouette-clone-part-1.html' title='Silhouette Clone: Part 1'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-7895769973325924696</id><published>2007-04-21T15:03:00.000-05:00</published><updated>2007-04-21T15:16:58.356-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Simple Command Line Text Processing</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I almost didn't write this, because I decided to check the latest goings on at &lt;a href="http://gnujersey.org/"&gt;GnuJersey.org&lt;/a&gt;, and happened to see &lt;a href="http://gnuisance.net/blog/fs/ideas/sed-include1.html"&gt;Dave posted something about sed&lt;/a&gt;. I didn't want to be a copy cat. Then I remembered that nothing is original anymore. Plus, you will find no mention of sed (other than this and the previous one) or anything else in Dave's post here. so here we go.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The other day I needed to sort a few dozen lines of text. For some reason, the behemoth text editor I was using didn't have a sort function. (What gives?) A commercial competitor I recently switch from had this functionality, but I didn't want to reinstall it just for one quick sort. Instead, I turn to the old standby of the UNIX user: piping for text processing!&lt;br /&gt;&lt;br /&gt;In order to demonstrate some key functionality, I am going to operate on the contents of a simple text file. The file contains the top 10 most common passwords and respective frequencies, according to &lt;a href="http://www.modernlifeisrubbish.co.uk/article/top-10-most-common-passwords"&gt;this article&lt;/a&gt;. For reference, here are the contents of the file:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;letmein 1.76%&lt;br /&gt;thomas 0.99%&lt;br /&gt;arsenal 1.11%&lt;br /&gt;monkey 1.33%&lt;br /&gt;charlie 1.39%&lt;br /&gt;qwerty 1.41%&lt;br /&gt;qwerty 1.41%&lt;br /&gt;123456 1.63%&lt;br /&gt;letmein 1.76%&lt;br /&gt;liverpool 1.82%&lt;br /&gt;password 3.780%&lt;br /&gt;arsenal 1.11%&lt;br /&gt;123 3.784%&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In order to understand what is going on, you need to be familiar with 3 input redirectors used in the UNIX world. They are as follows.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;&amp;lt;&lt;/code&gt; reads data from a file into the command on the left&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;&amp;gt;&lt;/code&gt; writes data from a command into a file on the right&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;|&lt;/code&gt; forwards data from one command to the next&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Input redirection is actually far more complicated and capable than that, but that is another post.&lt;br /&gt;&lt;br /&gt;The first key command is &lt;code&gt;sort&lt;/code&gt;. &lt;code&gt;sort&lt;/code&gt; does what you may expert, it sorts lines in a text file.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;strong&gt;$ sort &lt; demo.txt&lt;/strong&gt;&lt;br /&gt;123 3.784%&lt;br /&gt;123456 1.63%&lt;br /&gt;arsenal 1.11%&lt;br /&gt;arsenal 1.11%&lt;br /&gt;charlie 1.39%&lt;br /&gt;letmein 1.76%&lt;br /&gt;letmein 1.76%&lt;br /&gt;liverpool 1.82%&lt;br /&gt;monkey 1.33%&lt;br /&gt;password 3.780%&lt;br /&gt;qwerty 1.41%&lt;br /&gt;qwerty 1.41%&lt;br /&gt;thomas 0.99%&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In order to clean things up, &lt;code&gt;sort&lt;/code&gt; is often combined with &lt;code&gt;uniq&lt;/code&gt;. &lt;code&gt;uniq&lt;/code&gt; preserves unique lines in a text file, but it has a serious limitation: it only works when duplicate lines are adjacent. Therefore, if you want to use &lt;code&gt;uniq&lt;/code&gt;, use &lt;code&gt;sort&lt;/code&gt; first.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;strong&gt;$ sort &lt; demo.txt | uniq&lt;/strong&gt;&lt;br /&gt;123 3.784%&lt;br /&gt;123456 1.63%&lt;br /&gt;arsenal 1.11%&lt;br /&gt;charlie 1.39%&lt;br /&gt;letmein 1.76%&lt;br /&gt;liverpool 1.82%&lt;br /&gt;monkey 1.33%&lt;br /&gt;password 3.780%&lt;br /&gt;qwerty 1.41%&lt;br /&gt;thomas 0.99%&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Another handy one is &lt;code&gt;cut&lt;/code&gt;. &lt;code&gt;cut&lt;/code&gt; splits lines into fields (think spreadsheet) and allows you to cut out the fields you want to keep. &lt;code&gt;cut&lt;/code&gt; can work with any simple field delimiter given by the &lt;code&gt;-d&lt;/code&gt; option. A comma separated list of fields to display is given by the &lt;code&gt;-f&lt;/code&gt; option.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;strong&gt;$ sort &lt; demo.txt | uniq | cut -d ' ' -f 1&lt;/strong&gt;&lt;br /&gt;123&lt;br /&gt;123456&lt;br /&gt;arsenal&lt;br /&gt;charlie&lt;br /&gt;letmein&lt;br /&gt;liverpool&lt;br /&gt;monkey&lt;br /&gt;password&lt;br /&gt;qwerty&lt;br /&gt;thomas&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;If you want to get back to your command line roots, or just like the speed and simplicity of throwing a few small, highly specialized commands at a your problems, keep exploring. There are several more fun text processing commands available on most UNIX-like operating systems. More complicated solutions like &lt;code&gt;awk&lt;/code&gt; and &lt;code&gt;sed&lt;/code&gt; open up even more quick solutions to common text processing problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-7895769973325924696?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/7895769973325924696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=7895769973325924696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7895769973325924696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7895769973325924696'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/04/simple-command-line-text-processing.html' title='Simple Command Line Text Processing'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-7800296596605247591</id><published>2007-04-20T19:18:00.000-05:00</published><updated>2007-04-20T19:19:53.063-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='scenario'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Wireless Stupidity</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_-kq1UoBpAUg/RilYlIW8qRI/AAAAAAAAAA8/UTVmUD1_2VU/s1600-h/DSYW.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_-kq1UoBpAUg/RilYlIW8qRI/AAAAAAAAAA8/UTVmUD1_2VU/s320/DSYW.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5055669451622230290" /&gt;&lt;/a&gt;People still just don't get it. Most of the wireless networks pictured are protected by WPA Pre-Shared Key authentication, and the rest WEP. (WEP sucks, but its better than nothing. Or is it...) Obviously, one wasn't protected at all.&lt;br /&gt;&lt;br /&gt;(Possibly) worse, a wireless network I am in no way responsible for, but am closely tied to, was serving up tasty, free Internet access to patrons. When asked if the network was encrypted, I said no, and briefly mentioned that we want it to be quick and easy for patrons to hop on. No fuss, no muss.&lt;br /&gt;&lt;br /&gt;The response was an awkward, almost accusatory look. Apparently there is some problem with unencrypted networks. They are unsafe and give you STDs like the crazy, promiscuous girl even the desperate guys won't go near. The reality is, even an encrypted network isn't necessarily “safe”. If you want safe and private computerized communication, you want VPNs and SSL/TLS. After all, that's what they were invented for. The right tool for the right job makes all the difference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-7800296596605247591?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/7800296596605247591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=7800296596605247591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7800296596605247591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7800296596605247591'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/04/wireless-stupidity.html' title='Wireless Stupidity'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-kq1UoBpAUg/RilYlIW8qRI/AAAAAAAAAA8/UTVmUD1_2VU/s72-c/DSYW.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-6300569499580624488</id><published>2007-04-20T01:39:00.000-05:00</published><updated>2007-04-20T01:40:24.147-05:00</updated><title type='text'>Ugh</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Every human life is different. From the moment consciousness sparks while we are in the womb, every thing we see and experience shapes our perception of the world. We reflect as we grow and the sum of our experiences shape our perception and personal philosophy.&lt;br /&gt;&lt;br /&gt;The problem is that this divides us. We segregate sometimes because we want to. Other times, its because we are forced to. Worst of all, those who should be friends push each other away by making others feel unwanted, unappreciated, or alienated.&lt;br /&gt;&lt;br /&gt;Intelligent people can disagree and even argue while maintaining allegiance, but third parties only see the battle. When outsiders see this in a community already known to be fragmented and filled with infighting, the perception is several times worse.&lt;br /&gt;&lt;br /&gt;Who would want to invest in such a community?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-6300569499580624488?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/6300569499580624488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=6300569499580624488' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/6300569499580624488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/6300569499580624488'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/04/ugh.html' title='Ugh'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-5277468584578175685</id><published>2007-04-15T15:29:00.000-05:00</published><updated>2007-04-15T15:35:16.137-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='website'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><title type='text'>Background Bookmarklets</title><content type='html'>To summarize for the sake of brevity: &lt;strong&gt;[How can I load a page with a browser bookmarklet without actually viewing the page?]&lt;/strong&gt; – &lt;em&gt;Dave&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;First, to provide a little background, Dave wanted to save bookmarks to a server on the Internet (like del.icio.us) but at a location under his control. More importantly, leaving the current page to do so (like del.icio.us) was unnecessary and unwanted.&lt;br /&gt;&lt;br /&gt;So, how do we do that? If you said AJAX like I did at first, your wrong! The &lt;code&gt;XMLHTTPRequest&lt;/code&gt; object Ajax uses won't operate across domains for security reasons. So, what is the solution then? We need to use JavaScript to ensure a one-click affair, but the champion of JavaScript and Web 2.0 has left us out in the cold. We must use the old stand by of JavaScript and DHTML, the Image object.&lt;br /&gt;&lt;br /&gt;The &lt;code&gt;Image&lt;/code&gt; object provides some very useful behavior for us.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Unless you are crossing the HTTPS boundary, there aren't really any security mechanisms around by default to get in our way.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;We can create an manipulate Image objects without every displaying them, or anything else, to the user.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Image objects are fairly cheap to create an use, unlike trying to fire up ActiveX, Java, or Flash.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Image objects will load any arbitrary URL we give them immediately and in the background, providing us with flexible, asynchronous behavior.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;So, here is the code.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;var img = new Image();&lt;br /&gt;img.src = "http://localhost/bookmark/";&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;But wait! Where is the URL we want to bookmark? Easy, its in the referrer header sent to the target web server. If you don't want to trust referrers, all you need to do is escape and use the &lt;code&gt;location.href&lt;/code&gt; property.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;var img = new Image();&lt;br /&gt;img.src = "http://localhost/bookmark/" + escape(location.href);&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now, there are a few things you can do with this. Start the entire thing off with &lt;code&gt;javascript:&lt;/code&gt; and you've got a suitable bookmarklet. Wrap that in &lt;code&gt;a&lt;/code&gt; tags and you have a click-able link you can embed in pages.&lt;br /&gt;&lt;br /&gt;If you are interested, here is the &lt;a href="http://www.jesran.net/pipermail/chlug/2007-April/000292.html"&gt;mailing list thread&lt;/a&gt; this was discussed in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-5277468584578175685?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/5277468584578175685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=5277468584578175685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/5277468584578175685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/5277468584578175685'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/04/background-bookmarklets.html' title='Background Bookmarklets'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-7647034927419536174</id><published>2007-04-10T14:38:00.000-05:00</published><updated>2007-04-10T14:43:42.455-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='website'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><title type='text'>6 Steps for Moving Websites</title><content type='html'>&lt;strong&gt;How do I move my web site to another host?&lt;/strong&gt; - &lt;em&gt;DFRI, and others&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;If you have a 100% static web site, moving from one host to another is fairly easy. Of course, how often do we get to do things the easy way? Assuming a dynamic web site with some database-housed content (say, a content management system or forum software) there is very particular sequence of events that needs to happen to minimize pain. Some of the steps below only apply to web sites with database-backed content, and can be skipped for sites without it.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 1: Set up the new hosting account.&lt;/h3&gt;&lt;br /&gt;This step is obvious to anyone in the web hosting universe, but is not apartment to others. Moving a web site takes time. If you try and shut down your old service without having a new spot ready, you can wind up in web server limbo. Give your new host 24 hours to get your account set up, and DNS records propagated to their outward-facing DNS servers. Some hosts only update their DNS records once every 12 to 24 hours!&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 2: Lock your existing web site.&lt;/h3&gt;&lt;br /&gt;If you aren't the only person updating your web site data, you'll need to lock it temporarily. If something changes after you have copied your data, but before you have finished, you'll have two separate versions of your data! If you don't want to get a stack of e-mails that say “Where did my post go?”, don't skip this step.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 3: Copy your data.&lt;/h3&gt;&lt;br /&gt;All of your files and database data will need to copied to your new web host. This should be fairly easy, so long as you don't forget the incidentals. Be mindful of file permissions, as some files may be created by the web server, and a loss of proper permissions could break your web site. The biggest culprits here are upload directories, uploaded files, and cache files. Consult your original deployment instructions or setup manuals if you are unsure about file permissions. Also, keep a close eye on database host names, database names, user names, and passwords. If any can't be copied exactly, you'll need to note the changes for later.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 4: Connect your old web site to your new database.&lt;/h3&gt;&lt;br /&gt;If you have any dynamic content, you will need to point the code on your old host to the database on your new host. Keep in mind that this is against the terms of service for many web hosts, and not even possible with many. If your new web host won't let you do this, find another one and go back to step 1. If your old web host won't let you do this, well, its a good thing you are moving. A few quick edits to configuration files should be all that is necessary. When you are done, unlock your existing web site, but leave any file uploads disabled. It's OK, all of those edits to the database are happening on your new web host.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 5: Connect your new web site to... your new web site.&lt;/h3&gt;&lt;br /&gt;You've already copied files, now you need to reconfigure your code. Make the same edits to files you did in step 4. Some options may be a little different (&lt;code&gt;localhost&lt;/code&gt; vs &lt;code&gt;sql.hostdomain.tld&lt;/code&gt;, for example.) Wow, this step was short.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 6: Updating DNS information.&lt;/h3&gt;&lt;br /&gt;The final step is to update your DNS information to point to your new web host. In most cases, this means changing your domain's name servers to the values provided by your new web host. Those with third party DNS hosting (or DNS hosting from the domain registrar) can update the DNS records for the domain. Your new host can provide you with all of the necessary information.&lt;br /&gt;&lt;br /&gt;That's it! Your done! It make take up to 72 hours for the switch to be complete, but since you carefully followed the above instructions, it doesn't matter! It will all come together. After you are satisfied that no one is being pointed to the old web host, cancel your old account.&lt;br /&gt;&lt;br /&gt;What? You want to move e-mail accounts too... Well, that is a different story...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-7647034927419536174?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/7647034927419536174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=7647034927419536174' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7647034927419536174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7647034927419536174'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/04/6-steps-for-moving-websites.html' title='6 Steps for Moving Websites'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-5742808189167271897</id><published>2007-04-05T15:28:00.000-05:00</published><updated>2007-04-05T15:30:05.856-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='scenario'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Firewalls Suck</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Firewalls suck. I hate them. Sure, a firewall can do you a lot of good in the hands of someone who knows what they are doing, but commonly, firewalls are the &lt;a href="http://www.pantheon.org/articles/l/little_dutch_boy.html"&gt;little Dutch boy's&lt;/a&gt; finger of the network security world. The problem is, no one else comes by to help.&lt;br /&gt;&lt;br /&gt;Security charlatans sell firewalls like snake oil. They claim firewalls are mythical pieces of equipment or software that can protect the user from every computer security issue out there. So what happens? Your novice or otherwise uneducated user (or even worse, users who think they are well versed, but really aren't) runs a firewall and thinks they are safe. They don't patch their systems promptly because they believe the firewall will protect them. They don't password protect sensitive services, or encrypt sensitive information because they think the firewall will protect them. They generally do stupid things because there is no need to be concerned; the firewall will protect them.&lt;br /&gt;&lt;br /&gt;Just think about immortality for a moment. If you could never be hurt or killed, would you wear your seatbelt?&lt;br /&gt;&lt;br /&gt;All that said, firewalls are actually quite useful as temporary solutions to problems, or insurance against possible issues that may come up in the future. If a vulnerability is discovered in a service your computer runs, you can quickly disable access to this service at the network level if, for some reason, you cannot disable the service outright.&lt;br /&gt;&lt;br /&gt;In the end, a properly configured, patched system does not need a firewall. If a firewall is your main defense, you've got other problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-5742808189167271897?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/5742808189167271897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=5742808189167271897' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/5742808189167271897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/5742808189167271897'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/04/firewalls-suck.html' title='Firewalls Suck'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-4235243220185027916</id><published>2007-03-30T13:35:00.000-05:00</published><updated>2007-03-30T14:10:29.385-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scenario'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Perils of Rootkit Detection</title><content type='html'>&lt;strong&gt;i admit i haven't followed security as closely as i did when i just ran windows, but are there now rootkits that can hide themselves from computer b when it's on computer a?&lt;/strong&gt; - &lt;em&gt;ice60&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Yes, but they do not explicitly. In fact, any rootkit hiding itself from other processes is also hiding itself from other systems on the network as a free side-effect.&lt;br /&gt;&lt;br /&gt;If computer b is looking for a rootkit on computer a, it will ask for information about the system. Details about running processes, files, logs, and so forth may be queried. The problem is all of these requests must pass though the infected system, and therefor cannot be trusted. Involving a daemon in your quest to sniff out a rootkit only provides an additional opportunity for the rootkit to hide itself. &lt;br /&gt;&lt;br /&gt;Let's look at one of my infamous metaphors as an example. We can equate a rootkit-infected system with a brainwashed individual.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;If you were brainwashed, you wouldn't necessarily know you were brainwashed. Any decent brainwasher would hide the brainwashing from you, perhaps with false memories.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If I asked you if you were brainwashed, you wouldn't be able to tell me you are brainwashed. Quite simply, you wouldn't know.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If I asked you indirect questions relating to your brainwashing, I *might* be able to infer you were brainwashed. There are certain inconsistencies that may come up in your responses. Perhaps you claim you were eating an anchovy pizza, but I know you hate anchovies.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Since any response you give could be effected by the brainwashing, I &lt;em&gt;still&lt;/em&gt; wouldn't be able to tell with any certainty that you had been brainwashed.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The only 100% reliable way to detect a rootkit, assuming you have a signature for it, is to bring the infected system off line, and look for it without relying on any part of the infected system. This could mean running the system from a separate, bootable disk, or transplanting the infected systems hard drive into another clean system.&lt;br /&gt;&lt;br /&gt;For further reading, please see &lt;a href="http://www.computerworld.com.au/index.php/id;765646122;fp;16;fpid;1"&gt;this article in Computerworld&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-4235243220185027916?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/4235243220185027916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=4235243220185027916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/4235243220185027916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/4235243220185027916'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/03/perils-of-rootkit-detection.html' title='Perils of Rootkit Detection'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-9138634607069631246</id><published>2007-03-27T10:17:00.000-05:00</published><updated>2007-03-27T10:25:21.141-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='httpd'/><title type='text'>Apache HTTPD Virtual Hosts and SSL</title><content type='html'>&lt;strong&gt;how do i do configure Apache2 to answer for all subdomains requested. as i want to be ble to create sub domains on my server using my main domain name.&lt;/strong&gt; - &lt;em&gt;patty552 @ UbuntuForums&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Various statements of misconception in &lt;a href="http://ubuntuforums.org/showthread.php?t=388883"&gt;this thread at UbuntuForums&lt;/a&gt;.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Apache HTTPD Virtual Hosts make the web go round. They allow a single server to host many web sites with different addresses. In the web hosting world, this allows for efficient, cheap web hosting. For your average person running Apache HTTPD, it means efficient, cheap home networking and web development testing environments.&lt;br /&gt;&lt;br /&gt;Virtual hosts are easy to set up, just check the documentation at &lt;a href="http://httpd.apache.org/docs/"&gt;http://httpd.apache.org/docs/&lt;/a&gt; . That said, there are two main ways to configure virtual hosting, which you have to keep in mind when starting out. One method involves matching the request host name, IP address, port, or any combination of them to a separate block of HTTPD configuration statements. The other method specifies a directory pattern to use for the document root and cgi-bin based on parts of the host name.&lt;br /&gt;&lt;br /&gt;For the former method of configuring virtual hosts, all one needs to do is add a wildcard &lt;code&gt;ServerAlias&lt;/code&gt; directive to the &lt;code&gt;VirtualHost&lt;/code&gt; block for your domain name.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;VirtualHost 1.2.3.4&amp;gt;&lt;br /&gt; ServerName domain.tld&lt;br /&gt; ServerAlias *.domain.tld&lt;br /&gt; DocumentRoot /var/www/&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;For the latter, all one needs to do is match against only the domain name, or include subdomains in the pattern, making sure to create the appropriate directory structure.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;VirtualDocumentRoot /var/www/%-2/&lt;br /&gt;VirtualDocumentRoot /var/www/%-2/%-3/&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Web hosts tend to use the larger VirtualHost method. Smaller shops, or generic mass hosts (departmental or employee hosting within an organization,for example) will find the latter very helpful, particularly when serving out of user's home directories.&lt;br /&gt;&lt;br /&gt;All this is great, but what about SSL? You could start up a separate instance of Apache HTTPD to serve over an SSL connection, but you probably don't want to do that. There are some advantages, which but that is beyond the scope of this piece. The easiest way is to use a VirtualHost block to match against connections on port 443, the default HTTPS port. Contrary to popular belief, you do not need a separate IP address to do this.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt; SSLEngine On&lt;br /&gt; SSLCertificateFile /etc/httpd/ssl.pem&lt;br /&gt; DocumentRoot /var/www/&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This works just fine if you are only serving one site over HTTPS. The problem comes in when you have multiple domain names being served from the same server which need SSL. Since the SSL certificate needs to be used before the web browser sends a request to the server, the server has no way of picking a domain-specific SSL certificate to use. Name-based matching just won't work for SSL. This is why proprietors of shared web hosting services demand that you purchase a dedicated IP address if you want to use SSL. IP addresses are known before SSL certificates are used, so by matching based on IP address, we can use domain-specific SSL certificates.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;VirtualHost 1.2.3.4:443&amp;gt;&lt;br /&gt; SSLEngine On&lt;br /&gt; SSLCertificateFile /etc/httpd/dom1-ssl.pem&lt;br /&gt; DocumentRoot /var/www/dom1/&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;VirtualHost 1.2.3.5:443&amp;gt;&lt;br /&gt; SSLEngine On&lt;br /&gt; SSLCertificateFile /etc/httpd/dom2-ssl.pem&lt;br /&gt; DocumentRoot /var/www/dom2/&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So, to recap, you do not need a separate IP address to use HTTPS. You do need separate IP addresses to use HTTPS on servers with multiple domains using SSL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-9138634607069631246?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/9138634607069631246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=9138634607069631246' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/9138634607069631246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/9138634607069631246'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/03/apache-httpd-virtual-hosts-and-ssl.html' title='Apache HTTPD Virtual Hosts and SSL'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-7246878234826350104</id><published>2007-03-25T13:39:00.000-05:00</published><updated>2007-03-25T13:47:28.266-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='loco'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>New Jersey Ubuntu LoCo Team</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_-kq1UoBpAUg/RgbClFaksKI/AAAAAAAAAA0/2-lLCi4qxVU/s1600-h/nj_loco.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_-kq1UoBpAUg/RgbClFaksKI/AAAAAAAAAA0/2-lLCi4qxVU/s400/nj_loco.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5045934374879801506" /&gt;&lt;/a&gt;&lt;br /&gt;The New Jersey Ubuntu LoCo team's first South Jersey meeting is pictured above. Even though New Jersey is the 4th smallest state in the United States of America, for some reason we need to have to seperate meeting locations. Sad, no? The group is headed by &lt;a href="http://www.joeterranova.net/"&gt;Joe Terranova&lt;/a&gt;, so you can bitch at him for the sillyness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-7246878234826350104?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://wiki.ubuntu.com/NewJerseyTeam' title='New Jersey Ubuntu LoCo Team'/><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/7246878234826350104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=7246878234826350104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7246878234826350104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7246878234826350104'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/03/new-jersey-ubuntu-loco-team.html' title='New Jersey Ubuntu LoCo Team'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-kq1UoBpAUg/RgbClFaksKI/AAAAAAAAAA0/2-lLCi4qxVU/s72-c/nj_loco.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-7740693420696047539</id><published>2007-03-17T16:15:00.000-05:00</published><updated>2007-03-24T17:37:12.903-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scenario'/><category scheme='http://www.blogger.com/atom/ns#' term='password'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Password Strength</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I came across a &lt;a href="http://ubuntuforums.org/showthread.php?t=385540"&gt;thread at UbuntuForums&lt;/a&gt; where someone asked how safe the password “s8fd7fg67fdg6” is. All these years, and we &lt;em&gt;still&lt;/em&gt; have password education issues.&lt;br /&gt;&lt;br /&gt;Excusing the fact that the guy just mashed on the keyboard producing something unlike what he would actually use when password-picking time came, this is a horrible password. It would take a while to crack, but its hard to remember and could easily be a lot stronger. &lt;em&gt;600+ times stronger&lt;/em&gt;, actually.&lt;br /&gt;&lt;br /&gt;So, putting easy to remember aside, I will make a few assertions. If you want proof, do the math.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The strength of a password is determined by the maximum number of attempts a brute force attack would require to find the password under ideal conditions. Ideal conditions in this case are knowing the maximum length of the password and the character set it was derived from. There is more to intelligent brute forcing (no, not a misnomer) than that, but that is beyond the scope of this piece.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The maximum number of attempts required, as described above, can be calculated by adding one size of the character set &lt;em&gt;s&lt;/em&gt;, and raising the result to the length of the password &lt;em&gt;l&lt;/em&gt;.  That would be &lt;code&gt;(s+1)&lt;sup&gt;l&lt;/sup&gt;&lt;/code&gt;, of course. The &lt;code&gt;+1&lt;/code&gt; is in there because I said “maximum” above. We have to account for the possibility that a password is shorter than the maximum by including an empty character in the character set.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Working under the assumption that we know the maximum length of the password as well as its character set is quite reasonable, considering that the average password is 8 characters long*, the vast majority of passwords do not contain non-alphanumeric characters*, and minimum and maximum password lengths are very often imposed on users.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;*These numbers came from a group of passwords acquired from MySpace users that fell for a phishing attack. You'd think that this represents the bottom rung of users, and you'd be right, but previous password auditing results have given similar numbers. Your average computer and Internet user isn't really that savvy. Juicy details at &lt;a href="http://www.schneier.com/blog/archives/2006/12/realworld_passw.html"&gt;http://www.schneier.com/blog/archives/2006/12/realworld_passw.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you start with a password up to 6 characters long, composed of numbers and lowercase letters, there are 2,565,726,409 possible combinations. Increasing the length by just one character yields 94,931,877,133 possible combinations. If you include capital letters in the character set instead of increasing the password length, you get 62,523,502,209 possibilities. Obviously, its better to increase your password length. But wait!&lt;br /&gt;&lt;br /&gt;If you start with a 7 character password made up of lower case letters and numbers, and increase the length to 8 characters, you have 3,512,479,453,921 possibilities. If you change the character set instead, there are 3,938,980,639,167 possibilities. Woah!&lt;br /&gt;&lt;br /&gt;So, what does this tell us? To over-simplify, if your password is going to be more than 7 characters long, character set matters more than password length.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-7740693420696047539?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/7740693420696047539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=7740693420696047539' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7740693420696047539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/7740693420696047539'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/03/password-strength.html' title='Password Strength'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-6604279687021871173</id><published>2007-03-15T15:40:00.000-05:00</published><updated>2007-03-24T17:36:34.550-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='acl'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Restricting Interactive Access</title><content type='html'>&lt;strong&gt;How can I give someone one SSH access to my server without compromising security?&lt;/strong&gt; - &lt;em&gt;Plenty of People&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[How can I] allow shell access but NOT allow [arbitrary] remote commands to be run?&lt;/strong&gt; - &lt;em&gt;TyphoonJoe @ Ubuntu Forums (Impromptu)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;First, every point of access to your system is a potential weak spot. Learn to accept it.&lt;br /&gt;&lt;br /&gt;The long and short of this is if you want to allow someone interactive access to a machine, but want to control what programs they can run, you need to do one of two things. Either force a customized shell upon the user that will implement some sort of access control, or use regular, old-fashioned file system permissions to lock out certain programs.&lt;br /&gt;&lt;br /&gt;Wrapping a shell is best left to experts. There are some interrupt issues to handle as well as some special case scenarios to worry about. Plus, its usually overkill!&lt;br /&gt;&lt;br /&gt;File system permissions are quick, easy, and effective. There are just six simple steps to take:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Identify a restricted program or group of programs (such as &lt;code&gt;ifconfig&lt;/code&gt; or &lt;code&gt;gcc&lt;/code&gt; and &lt;code&gt;ld&lt;/code&gt;.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create a group for the program or program group.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add users permitted to use the restricted programs to the corresponding group.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Change the group owner on the program(s) to the specially create group.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Change file system permissions on the program so that only the owner or group can read or execute the program.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pray you didn't botch steps 1 through 5.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Keep in mind that man other programs, scripts, and services may need to use what you have restricted. When locking out commands with file system permissions make sure you are as thorough as possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-6604279687021871173?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/6604279687021871173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=6604279687021871173' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/6604279687021871173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/6604279687021871173'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/03/how-can-i-give-someone-one-ssh-access.html' title='Restricting Interactive Access'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-9098729029335555078</id><published>2007-03-11T21:44:00.000-05:00</published><updated>2007-03-24T17:36:13.389-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><title type='text'>Mirroring Web Sites</title><content type='html'>&lt;em&gt;Impromptu&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Mirroring a web site, or subset thereof, is actually very quick and easy. All you need is the handy utility &lt;code&gt;wget&lt;/code&gt;. There are actually several good reasons for wanting to do this.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Snap-shotting a compromised web site for off-line analysis&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Snap-shotting a healthy web site for off-line analysis&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Setting up a decoy or dummy website&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Legitimate mirroring to help someone else out with bandwidth&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;wget&lt;/code&gt; has quite a few options. Read the man page if you care. If not, here is a sample command to snatch a web site &lt;code&gt;domain.tld&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;wget --mirror --wait=2 --random-wait --force-directories --recursive --convert-links --page-requisites –domains=domain.tld http://domain.tld/&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Most of the options above are the long form so that you can understand what they do without me having to explain each one. One pair worth noting is &lt;code&gt;-wait=2 -random-wait&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Plenty of web hosts and administrators run statistical analysis on their logs. You don't want to set off any alarms, even if your intentions are pure. If some overzealous administrator sees some idiot beating the hell out of their website, they may decided to teach the wannabe DoSing bastard a lesson and phone the feds. The two above options are an attempt at keeping your full footprint in the logs from being noticed.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;--wait=2&lt;/code&gt; sets a pause between page fetches of 2 seconds, and &lt;code&gt;-random-wait&lt;/code&gt; skews this by 0 to 200% per request. Logs will still show a lot of hits within a short time frame, but hopefully you will avoid some flagging thresholds. These two options will also help you dodge DoS filters as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-9098729029335555078?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/9098729029335555078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=9098729029335555078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/9098729029335555078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/9098729029335555078'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/03/mirroring-web-sites.html' title='Mirroring Web Sites'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-3675066597932100938</id><published>2007-03-09T14:44:00.000-05:00</published><updated>2007-03-14T11:53:22.098-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ninja'/><category scheme='http://www.blogger.com/atom/ns#' term='sniffing'/><category scheme='http://www.blogger.com/atom/ns#' term='scenario'/><title type='text'>Stealthy Sniffing</title><content type='html'>&lt;strong&gt;Will get caught if I try and sniff packets at my local coffee shop/library/school/office?&lt;/strong&gt; - &lt;em&gt;About 50 people&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;YES! At least, if you ask that question I'm sure you will. If you are sniffing packets, probing ports, or just plain doing something nefarious, no amount of black clothing will help you when someone sees “Johnnie Smith's Library” show up in their iTunes Window. This is probably the least of your worries if you are conspicuously huddled in the back corner pointing a cantenna at everyone with a laptop.&lt;br /&gt;&lt;br /&gt;Before we get into this, its important to note why you should care. The legality of packet sniffing is arguable. That said, its fairly easy to bring someone down for sniffing. People having been charged with computer trespass for simply browsing the web over someone else's wireless connection. Even if you don't get convicted, do you have the money to fight a legal battle, especially after the FBI confiscates your laptop as evidence? I didn't think so. If you are doing anything even remotely shady, keep your footprint in the logs as small as possible. Yes, many low-end consumer routers do keep logs too!&lt;br /&gt;&lt;br /&gt;From the network's point of view, its the little things that give you away. You will hardly ever see promiscuous mode detection deployed, but when some administrator sees someone that shouldn't be there screaming packets over the wire, its a pretty big hint. Most operating systems will periodically poll servers for updates. Since these are typically long transactions, you are going to be fairly easy to spot on the wire if this happens. You may think to reconfigure or not use programs like iTunes (but all 1337 hackers listen to techno MP3s while sniffing!) but you would be quite surprised at the amount of software that phones home for updates when you aren't looking.&lt;br /&gt;&lt;br /&gt;Worse still are noisy operating environment components. Some common culprits include DHCP clients, various zero configuration protocols, network browsers, and ARP requests triggered by the above. Turn off or reconfigure as many of these services as possible if you are going sniffing. Depending on what operating system you are running, you can set things up so that you can switch to a now “location”, and have many of these services turned off at once.&lt;br /&gt;&lt;br /&gt;When you think you have configured everything correctly, flip on your packet sniffer and watch your own traffic. See what is leaking. No packet should be beyond scrutiny. At least one popular file sharing client uses DNS requests to check for version updates. Its efficient use of the architecture of the Internet, but it makes leak checking just a little bit more difficult.&lt;br /&gt;&lt;br /&gt;When are are set to go out in the world and do your deeds, remember the ninja. While ninja did wear all black when jumping from rooftop to rooftop at night, somehow I doubt that is what you will be doing. Good ninja hid in plain sight, indistinguishable from everyone else. If you are near a university, ratty jeans and t-shirts are acceptable. If you are in a ritzy neighborhood, where your khakis and a sweater. If you look like a computer geek and there is no LUG meeting in sight, you will be suspect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-3675066597932100938?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/3675066597932100938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=3675066597932100938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/3675066597932100938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/3675066597932100938'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/03/stealthy-sniffing.html' title='Stealthy Sniffing'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3763352298685217503.post-8289795072054395763</id><published>2007-03-05T14:29:00.000-05:00</published><updated>2007-05-09T14:44:30.484-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scenario'/><category scheme='http://www.blogger.com/atom/ns#' term='how to'/><title type='text'>The Skinny</title><content type='html'>I am very frequently asked questions about computers, electronics, information security, and other fun topics. I'm tired of answering the same questions over and over again. This archive of questions and answers will handle the repeats for me. Update: There are plenty questions I have anwsered and long since forgotten why. There will be no shortge of impromptu posts as a result.&lt;br /&gt;&lt;br /&gt;If you have a question you would like to ask, e-mail me at frostycolddrink@gmail.com&lt;br /&gt;&lt;br /&gt;As a side note, posts taged with &lt;code&gt;scenario&lt;/code&gt; are discussions of scenarios and techniques from a high-level perspective. Posts taged with &lt;code&gt;how to&lt;/code&gt; are more technical and include practical instruction you can use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3763352298685217503-8289795072054395763?l=askcolddrink.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://askcolddrink.blogspot.com/feeds/8289795072054395763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3763352298685217503&amp;postID=8289795072054395763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/8289795072054395763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3763352298685217503/posts/default/8289795072054395763'/><link rel='alternate' type='text/html' href='http://askcolddrink.blogspot.com/2007/03/skinny.html' title='The Skinny'/><author><name>Christopher Ingram</name><uri>http://www.blogger.com/profile/12152548995744903949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://lh4.google.com/image/frostycolddrink/Rfm7MXpBQJI/AAAAAAAAAAs/koppY_qAXkc/athf-mastershake-wired.jpg'/></author><thr:total>0</thr:total></entry></feed>
