<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://craveytrain.com/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    
    <title>Craveytrain</title>
    <link>https://craveytrain.com/</link>
    <atom:link href="https://craveytrain.com/feed.xml" rel="self" type="application/rss+xml" />
    <description>The personal site of Mike Cravey (@craveytrain).</description>
    <language>en</language>
    <item>
      <title>Generating a job match</title>
      <link>https://craveytrain.com/posts/generating-a-job-match/</link><description>&lt;p&gt;They say that necessity is the mother of invention and that has never rung more true to me than recently. I was laid off earlier this year and that has forced me to do things like update my CV (resume). When faced with this task, that I was &lt;em&gt;not&lt;/em&gt; looking forward to, I thought this would be a good time to really dig into agentic tools to see how they could help me. While it was useful, it did not manifest the way I initially expected.&lt;/p&gt;
&lt;p&gt;My first instinct was to go whole hog (so to speak). So, I had an agent look at my resume (that hadn’t been updated in 9 years), all of my self-evaluations from my most recent employment to discern some highlights and achievements. This generated a laundry list of content for the CV. Great, achievement unlocked. I then used the AI to categorize the achievements by some basic disciplines: design, engineering, and management. Now I had metadata-rich content to assemble my CV with.&lt;/p&gt;
&lt;p&gt;I assumed, perhaps naively, that companies would be looking for a CV that closely matched the job description. Similar language, keywords, responsibilities. So I did what any reasonable engineer would do, I constructed an overly complicated Rube Goldberg machine to achieve that goal.&lt;/p&gt;
&lt;h2&gt;The machine&lt;/h2&gt;
&lt;p&gt;First, I created an agent skill to analyze the job description, extract keywords, and weight matches to the disciplines categories I had created. So, a role may be weighted .4 design and .8 engineering. From there, the agent could assemble a CV from my available achievements, preferring ones that matched the higher weighted disciplines. Then, the agent would take a pass on the language of the CV, adjusting terms to better match the job description (e.g., swap UX Engineer with Frontend Engineer), in hopes of hitting some threshold of keyword matching. This resulted in an, often, lengthy CV, full of terminology that very closely matched the job description.&lt;/p&gt;
&lt;p&gt;Now, I’m an old, and some things have stuck with me. One of those is that a CV should be succinct and scannable. Ideally, a single page. In practice, this felt a bit too constraining, but I did want to apply some amount of curation to the content so that it could at least fit nicely on 2 pages. So I created another skill that an agent would use to trim content. Through several iterations, I tried numerous approaches, giving direction on how to present older roles where the achievements were not as relevant or timely. I also tried to give it ratios of how many achievements per experience entry relative to how recent the experience was, so it created an effective inverted triangle: the more recent experiences had more achievements, the older experiences had fewer. I also gave it rules around pagination and what could be broken up, ideally, do not span an experience across a page break, preferring to keep it consolidated on a single page. Sometimes it would leave too much space at the end of a page, effectively cutting content unnecessarily. At the end of the day, I still had to hand trim the content. This was my first smell, and I missed it.&lt;/p&gt;
&lt;h2&gt;🤦&lt;/h2&gt;
&lt;p&gt;I ran this tool against every job description I could find that was vaguely related to my experience. I applied for hundreds of jobs. And, for a long time I got no responses. I mean nothing. No takers, no interest, no rejections, not even phishing attempts. And I knew I was a good match for many of these roles. I had been doing this a long time. This caused me to do a deeper dive on the content that was being submitted, rather than the cursory look I was giving it thus far. Suffice to say, I was appalled and embarrassed. The content I was submitting was devoid of personality. It read like what it was: AI slop. All the catchphrases, all the em-dashes, all signals that it was machine generated. I had trusted the system too much and given it too much leeway. Worst of all, it didn’t sound like me.&lt;/p&gt;
&lt;p&gt;I like to think of myself as an effective communicator, with a distinct personality, and a good sense of humor. None of that was coming through. I had to change my approach because the content was bad and the results (or lack thereof) spoke for themselves.&lt;/p&gt;
&lt;h2&gt;Finding my voice&lt;/h2&gt;
&lt;p&gt;When I sat down and looked at what was being produced, I realized, I had effectively 3 types of roles I was applying for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;frontend engineer&lt;/li&gt;
&lt;li&gt;engineering manager&lt;/li&gt;
&lt;li&gt;technical product manager&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And each of these roles had a different lens through which the CV needed to be viewed. A given highlight could be worded to accentuate a relevant aspect towards the target role. I decided I needed to take back the voice of my CV and spent an evening rewriting it into 3 variants. I based them on what had been generated by AI to match those archetypes, but the descriptions, the highlights, everything was rewritten in my voice, following a few guidelines on structure and content:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why was this important and relevant to the reader?&lt;/li&gt;
&lt;li&gt;Why was this notable?&lt;/li&gt;
&lt;li&gt;What impact did this have to the team/project/business?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And where was the humor? People who know me know I can’t be serious for 5 minutes straight. Why isn’t that reflected in my CV? I added some highlights that are more my style:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Survived 20x traffic growth by rearchitecting the frontend. The frontend survived too.&lt;/li&gt;
&lt;li&gt;Coaches basketball, which is basically stakeholder management with more fast breaks&lt;/li&gt;
&lt;li&gt;25+ years building for the web, since tables were for layout&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After writing the 3 archetypal variants, I attempted to use the page trimming agent skill to make sure it stayed to 2 pages, but continually struggled with formatting. Finally, I realized, the answer was to curate the whole CV. I would custom build the content to fit perfectly in the space. The task of the agent was then to research the role and determine which of my 3 CVs would be the best fit. This was a task it was much better suited to.&lt;/p&gt;
&lt;h2&gt;Proof is in the pudding&lt;/h2&gt;
&lt;p&gt;After adjusting my CVs and submitting them, the results were immediately apparent. I started getting a lot more responses back. A lot more “hey, we’d like to talk to you about this opportunity”. My system was significantly scaled down from its initial build out, but was dramatically more effective.&lt;/p&gt;
&lt;p&gt;Was all that time, effort, and tokens wasted? No, as it turns out, I had other uses for the machinery around applying for jobs that would parlay into something more interesting.&lt;/p&gt;
</description><pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/generating-a-job-match/</guid>
    </item>
    <item>
      <title>Now, Apr 23, 2026</title>
      <link>https://craveytrain.com/now/2026-04-23/</link><description>&lt;h2&gt;Building&lt;/h2&gt;
&lt;p&gt;I go back and forth between working with a SDLC framework like &lt;a href=&quot;https://github.com/gsd-build/get-shit-done/&quot;&gt;GSD&lt;/a&gt; and using something lighter weight like the &lt;a href=&quot;https://github.com/addyosmani/agent-skills&quot;&gt;Agent Skills&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Learning&lt;/h2&gt;
&lt;p&gt;I&#39;m currently taking a Udemy course on product management, &lt;a href=&quot;https://www.udemy.com/course/become-a-product-manager-learn-the-skills-get-a-job/&quot;&gt;Become a Product Manager | Learn the Skills &amp;amp; Get the Job&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Reading&lt;/h2&gt;
&lt;p&gt;I&#39;m currently reading &lt;a href=&quot;https://bookshop.org/p/books/record-of-a-spaceborn-few-becky-chambers/4e12b306393db901?ean=9780062699237&amp;amp;digital=t&quot;&gt;Record of a Spaceborn Few&lt;/a&gt;. I&#39;m a sucker for a sci-fi and this is the 3rd in the Wayfarers series by Becky Chambers.&lt;/p&gt;
&lt;p&gt;On another note, my Kobo Libra 2 died, so I&#39;m back to a Kindle Paperwhite v1 I have root-kitted and put koreader on so I can read my own Epubs on it. Yep, I&#39;m cool.&lt;/p&gt;
&lt;h2&gt;Watching&lt;/h2&gt;
&lt;h3&gt;Wrapped up&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.themoviedb.org/tv/97546-ted-lasso&quot;&gt;Ted Lasso&lt;/a&gt; - has really emerged as one of my all time favorite shows.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.themoviedb.org/tv/129552-the-night-agent&quot;&gt;The Night Agent&lt;/a&gt; (Season 3) - well done show if you enjoy action and drama in the setting of a cloak and dagger government agency&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.themoviedb.org/tv/136311-shrinking&quot;&gt;Shrinking&lt;/a&gt; (Season 3) - an emotional show for me, but man, it hits so good&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Currently&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.themoviedb.org/tv/241609-your-friends-and-neighbors&quot;&gt;Your Friends &amp;amp; Neighbors&lt;/a&gt; (Season 2) - I joke with my wife that this may have to be me in a few months. She does not find that near as funny as I do. Also, pretty sure I would end up throwing my back out in a caper, just like he does.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.themoviedb.org/tv/213306-cross&quot;&gt;Cross&lt;/a&gt; (Season 2) - I love Aldis Hodge in pretty much anything and this is a great crime mystery show.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.themoviedb.org/tv/244623-running-point&quot;&gt;Running Point&lt;/a&gt; (Season 2) - Another sports comedy (I may have a type) but one that takes on stereotypes in a funny manner.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Using&lt;/h2&gt;
&lt;p&gt;I&#39;m always tinkering with new apps. Some of the ones that have caught my attention this week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sofahq.com/&quot;&gt;Sofa&lt;/a&gt; - this is how I keep up with what shows, books, and apps I&#39;m currently partaking in.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/btucker/graftty&quot;&gt;Graftty&lt;/a&gt; - This is a brand new app that I just met the developer of and it&#39;s scratching an itch for me: persistent terminal sessions by git worktree with a nice, simple UI and better notification handling of tabs/sessions. Forgotten about AI session that I find hours later is the bane of my productivity these days. It&#39;s beta but it&#39;s pretty cool.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Playing&lt;/h2&gt;
&lt;p&gt;I don&#39;t play many games, I find myself reaching for &lt;a href=&quot;https://www.redgames.co/#solitairestories&quot;&gt;Solitaire Stories&lt;/a&gt; frequently to decompress a bit. The decks are beautiful, the storylines are often funny, if not cheesy, and it just an app that feels great to play.&lt;/p&gt;
&lt;h2&gt;Working&lt;/h2&gt;
&lt;p&gt;I&#39;ve been scouring the web, looking for that next opportunity and had some near hits, but haven&#39;t quite found it, yet. If you think you may want someone of my skill set, &lt;a href=&quot;http://www.linkedin.com/in/craveytrain&quot;&gt;let&#39;s talk&lt;/a&gt;.&lt;/p&gt;
</description><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/now/2026-04-23/</guid>
    </item>
    <item>
      <title>Now, Feb 9, 2026</title>
      <link>https://craveytrain.com/now/2026-02-09/</link><description>&lt;h2&gt;Work&lt;/h2&gt;
&lt;h3&gt;UX Engineering&lt;/h3&gt;
&lt;p&gt;I&#39;m looking for my next opportunity—something that bridges design and engineering, where I can contribute across the full spectrum of making things on the web.&lt;/p&gt;
&lt;p&gt;If you&#39;re building something thoughtful and need that perspective, &lt;a href=&quot;http://www.linkedin.com/in/craveytrain&quot;&gt;let&#39;s talk&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Building&lt;/h2&gt;
&lt;h3&gt;This Site, Always&lt;/h3&gt;
&lt;p&gt;Currently updating this site to have this brand-spanking new now page. Also shipping a new design here shortly.&lt;/p&gt;
&lt;h3&gt;Side project app&lt;/h3&gt;
&lt;p&gt;Aside from updating this website, I&#39;m finally taking the time to build an app I&#39;ve had on my mind for a long time. I&#39;m not quite ready to talk about it yet, but I will as soon as I get something shipped.&lt;/p&gt;
&lt;h2&gt;Learning&lt;/h2&gt;
&lt;p&gt;Continuing to drink from the fire hose that is AI. Sometimes I barely have time to try out a framework or tool before learning about a new one. It can cause a bit of whiplash.&lt;/p&gt;
&lt;h2&gt;Reading&lt;/h2&gt;
&lt;p&gt;While I&#39;m a little late to the party, I&#39;m currently reading &lt;em&gt;The Eye of the World&lt;/em&gt;, the first book in the Wheel of Time series. I&#39;ve already watched the show, but I&#39;m really enjoying the book.&lt;/p&gt;
&lt;h2&gt;Life&lt;/h2&gt;
&lt;p&gt;Coming off coaching JH basketball season, I&#39;ve been focusing on getting to the gym regularly and continuing my weight loss journey.&lt;/p&gt;
</description><pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/now/2026-02-09/</guid>
    </item>
    <item>
      <title>Webmentions Support</title>
      <link>https://craveytrain.com/posts/webmentions-support/</link><description>&lt;p&gt;All this talk about web standards and owning your own data inspired me to support webmentions on this blog. I&#39;m not treading any new ground here, so I won&#39;t bother you with another post describing the process. Instead, I&#39;d like to treat this more like a link farm, referencing those I learned from and where I chose to coincide with or deviate from. Maybe someone will find this useful when evaluating their own options.&lt;/p&gt;
&lt;p&gt;First off, I want to say, this would not have been even in my purview if not for the encouragement of &lt;a href=&quot;https://indieweb.org&quot;&gt;IndieWeb&lt;/a&gt; standard bearer &lt;a href=&quot;https://tantek.com&quot;&gt;Tantek Çelik&lt;/a&gt;. He originally put me on this idea of owning your own content years ago, when I would notice his Twitter posts had links back to his site, where a full copy of his message was stored. I was always impressed by this, even if I wasn&#39;t initially motivated by it. It wouldn&#39;t be until years later, spurred by the push of returning to web standards movement gaining so much momentum on Mastodon, that I decided to start making steps towards owning my own data.&lt;/p&gt;
&lt;p&gt;Recently I polished off the old blog (which hadn&#39;t seen a new post in years), and most recently have added support for &lt;a href=&quot;https://indieweb.org/Webmention&quot;&gt;webmentions&lt;/a&gt;. I was finally inspired into action by a &lt;a href=&quot;https://nicolas-hoizey.com/articles/2023/02/05/updating-webmentions-on-a-static-site/&quot;&gt;post&lt;/a&gt; by &lt;a href=&quot;https://nicolas-hoizey.com&quot;&gt;Nicolas Hoizey&lt;/a&gt;. And like any good web citizen, he cited his inspirations, a &lt;a href=&quot;https://mxb.dev/blog/using-webmentions-on-static-sites/&quot;&gt;primer on webmentions in Eleventy&lt;/a&gt; by &lt;a href=&quot;https://mxb.dev&quot;&gt;Max Böck&lt;/a&gt; and a &lt;a href=&quot;https://sia.codes/posts/webmentions-eleventy-in-depth/&quot;&gt;really thorough walk through of setting up webmentions in Eleventy&lt;/a&gt; by &lt;a href=&quot;https://sia.codes&quot;&gt;Sia Karamalegos&lt;/a&gt;. Also, none of this would be possible without the awesome services of &lt;a href=&quot;https://brid.gy&quot;&gt;Bridgy&lt;/a&gt; to crawl my accounts on other sites, looking for mentions and posting them to &lt;a href=&quot;https://webmention.io&quot;&gt;webmention.io&lt;/a&gt;, an endpoint to receive and return webmentions upon request.&lt;/p&gt;
&lt;p&gt;Generally, my setup lines up with Nicolas&#39; post. I like the idea of committing the webmentions as data in my repo, because it is content used to generate the site. If something were to happen to the source for those webmentions, I would not want to lose them, so I&#39;m keeping them. Here&#39;s the basic process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Github action cron job queries webmentions.io every 15 minutes or so.&lt;/li&gt;
&lt;li&gt;If webmentions are found, dedupe and write them to the &lt;a href=&quot;https://github.com/craveytrain/craveytrain.com/blob/main/data/webmentions.json&quot;&gt;webmentions.json&lt;/a&gt; file as a file-based document store.&lt;/li&gt;
&lt;li&gt;Create a PR with the data file changes with a handy label to let me know I can merge it in.&lt;/li&gt;
&lt;li&gt;I manually approve the PR, which merges in the webmentions, closes the branch, and deletes it. (I hope to look at ways to automate this)&lt;/li&gt;
&lt;li&gt;This triggers a hook on &lt;a href=&quot;https://www.netlify.com&quot;&gt;Netlify&lt;/a&gt; to rebuild and redeploy the site.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And while conceptually I made the same trade-offs as Nicolas, I followed all the code samples from Sia&#39;s post. She wrote the most thorough and understandable post on the subject I&#39;ve seen to date, replete with code samples in the article and sample code in gists. I really appreciated her approach and the way she explained things made it pretty straight forward to add them to my site.&lt;/p&gt;
&lt;p&gt;While I didn&#39;t use Max&#39;s post as reference as much as the other 2 on this subject, his additional &lt;a href=&quot;https://mxb.dev/blog/webmention-analytics/&quot;&gt;post on webmentions analytics&lt;/a&gt; is fascinating and inspiring work. I look forward to taking a swing at it myself in the future.&lt;/p&gt;
&lt;p&gt;Finally, for the style of likes and reposts, I was inspired by, tried to change, but ultimately took wholesale, &lt;a href=&quot;https://www.zachleat.com&quot;&gt;Zach Leatherman&lt;/a&gt;&#39;s implementation of a facepile. I really like the look of it and I tried to make it work with what I felt was more semantic markup of avatars in a list. However, I ended up using his code pretty liberally after I wasn&#39;t able to make my preferred syntax work. I don&#39;t have any replies, yet, so I&#39;m unsure of how that will look, but when I get some, I&#39;m sure I will be quickly adjusting the style of them.&lt;/p&gt;
&lt;p&gt;Hope you found this useful and I highly recommend all the links I shared in this post.&lt;/p&gt;
</description><pubDate>Thu, 16 Feb 2023 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/webmentions-support/</guid>
    </item>
    <item>
      <title>Verified Mastodon Link</title>
      <link>https://craveytrain.com/posts/verified-masto-link/</link><description>&lt;p&gt;Like many others, I&#39;ve been called by the siren song of &lt;a href=&quot;https://joinmastodon.org/&quot;&gt;Mastodon&lt;/a&gt; and have created an account (&lt;a href=&quot;https://hachyderm.io/@craveytrain&quot;&gt;@craveytrain@hachyderm.io&lt;/a&gt;) in the fediverse to check it out. One of the things that interests me is the ability to self-verify the links I reference, as a way to say I am who I say I am (as much as anyone can do on the internet).&lt;/p&gt;
&lt;p&gt;The recommended way to achieve that verification status on a link from Mastodon is to link back to your Mastodon account from the linked page. They even (helpfully) give an example on the link page:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;me&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://hachyderm.io/@craveytrain&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Mastodon&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The problem I have with this is I don&#39;t want a link to my Mastodon account on my home page. That&#39;s not my ideal IA (let&#39;s just assume I actually have an IA for now). A lot of people seem to solve this with adding a link on their home page but hiding it visually. I don&#39;t love this cause, it&#39;s hacky, and stinks of bot tricks, not to mention users who access your site with a device that would read that link aloud (think text only browsers or screen readers).&lt;/p&gt;
&lt;p&gt;So, I did a little digging on &lt;a href=&quot;https://docs.joinmastodon.org/user/profile/#verification&quot;&gt;Mastodon&#39;s Profile Link Verification&lt;/a&gt; page and discovered a little line:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;the resolved page contains at least one &lt;code&gt;a&lt;/code&gt; or &lt;code&gt;link&lt;/code&gt; tag with a &lt;code&gt;rel=&amp;quot;me&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Of course, a &lt;code&gt;link&lt;/code&gt; tag! So, instead of putting an &lt;code&gt;a href&lt;/code&gt; on my home page and hiding it, I can put a &lt;code&gt;link&lt;/code&gt; tag in my header and all is well. So, here is what I put in my header to get me the nice little green checkmark:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;me&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://hachyderm.io/@craveytrain&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Thu, 22 Dec 2022 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/verified-masto-link/</guid>
    </item>
    <item>
      <title>Version 8</title>
      <link>https://craveytrain.com/posts/version-8/</link><description>&lt;p&gt;After a long hiatus, I have finally gotten around to rebuilding on the site. The colophon has been updated but I figured I&#39;d spend a bit of time explaining the why.&lt;/p&gt;
&lt;h2&gt;Svelte&lt;/h2&gt;
&lt;p&gt;The biggest change is moving to &lt;a href=&quot;https://svelte.dev&quot;&gt;Svelte&lt;/a&gt;. I&#39;ve been hearing a lot about it and wanted to give it a shot. I&#39;ve been moving more and more towards CSS Modules (or Styled Components, depending on the stack) and Svelte is like an all in version of that. JS, CSS, and HTML are all packaged up in a single module.&lt;/p&gt;
&lt;h3&gt;Sapper&lt;/h3&gt;
&lt;p&gt;While I&#39;m branching out to a new stack, I am still a big fan of statically generated sites so I&#39;m using &lt;a href=&quot;https://sapper.svelte.dev&quot;&gt;Sapper&lt;/a&gt;, thanks to some tips from &lt;a href=&quot;https://www.leveluptutorials.com&quot;&gt;Level Up Tutorials&lt;/a&gt;, to generate the site.&lt;/p&gt;
&lt;h2&gt;Uses&lt;/h2&gt;
&lt;p&gt;As a big fan of &lt;a href=&quot;https://syntax.fm&quot;&gt;Syntax.fm&lt;/a&gt; I created a &lt;a href=&quot;https://craveytrain.com/uses&quot;&gt;Uses&lt;/a&gt; page for me to detail the tools I&#39;m currently using. Here&#39;s hoping I continue to refine it.&lt;/p&gt;
&lt;h2&gt;Design changes&lt;/h2&gt;
&lt;p&gt;I&#39;ve made some small design changes as, hopefully, a precursor to more updates. I&#39;m hoping to treat this site less a a blog and more as a personal space on the web that I tinker with more.&lt;/p&gt;
&lt;p&gt;Here&#39;s hoping...&lt;/p&gt;
</description><pubDate>Mon, 09 Sep 2019 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/version-8/</guid>
    </item>
    <item>
      <title>Going live with es2015</title>
      <link>https://craveytrain.com/posts/going-live-with-es2015/</link><description>&lt;p&gt;Last night, I gave a talk at &lt;a href=&quot;http://www.meetup.com/js-monthly-london/&quot;&gt;JS Monthly London&lt;/a&gt; on &lt;a href=&quot;http://craveytrain.com/slides/live_with_es2015/&quot;&gt;Going live with ES2015&lt;/a&gt;. It was my first talk since moving to London in August. It was nice to dust the cobwebs off my public speaking, but I&#39;m glad it wasn&#39;t recorded.&lt;/p&gt;
&lt;p&gt;While I covered a few of the parts of ES2015 we use, and how we setup the build process, the meat of the talk was about how we went about choosing the technologies and getting it into production. Given that my role these days is more about process and mentoring, I thought I would elaborate on that portion of my talk for whoever might find it helpful. This is from the perspective of a manager. I hope you find it useful in convincing yours.&lt;/p&gt;
&lt;h2&gt;Nearsightedness&lt;/h2&gt;
&lt;p&gt;When trying to introduce new technologies to your stack, resist the temptation to &amp;quot;solve all the problems&amp;quot;. It&#39;s easy to get bogged down in the details of how something will integrate into your system, how it will consume your data, etc. This is the path to the dark side. You can solve all those problems in due time, but first, make sure the idea holds water. You will learn things from solving each problem that you can apply to the next one.&lt;/p&gt;
&lt;p&gt;This also allows you to mitigate your risk of failure. Throwing away a few hours of work is, usually, much more palatable than a few days, or even weeks. Start small and build up, with checkpoints along the way. This is being responsible with your, and your company&#39;s time.&lt;/p&gt;
&lt;h2&gt;Problem&lt;/h2&gt;
&lt;p&gt;It starts with a problem. We had race conditions. We had regressions in what we thought were &amp;quot;untouched&amp;quot; code. We had code that was just concatted together, registering itself globally, in a random order and auto-invoking. This let to all sorts of unintended consequences. This was not a position we could maintain.&lt;/p&gt;
&lt;h2&gt;Solution&lt;/h2&gt;
&lt;p&gt;We stepped back from our problem and thought about what goals we would have for our code. In short order, we came up with a short list.&lt;/p&gt;
&lt;h3&gt;Modularized&lt;/h3&gt;
&lt;p&gt;We wanted code that was small, simple, and did a single purpose. We wanted a dependency graph so we could know what could be impacted by code changes.&lt;/p&gt;
&lt;h3&gt;Invokable&lt;/h3&gt;
&lt;p&gt;We wanted to be more intentional and explicit about our code. When more DOM gets loaded into the tree, we wanted to be able to run our code against that new DOM exclusively, not just &amp;quot;reload&amp;quot; the module.&lt;/p&gt;
&lt;h3&gt;Extensible&lt;/h3&gt;
&lt;p&gt;We also wanted to override our, hopefully, sensible defaults.&lt;/p&gt;
&lt;h3&gt;Testable&lt;/h3&gt;
&lt;p&gt;Possibly the most important one of the list, we wanted to have confidence that when we shipped our code, we knew what it was doing, and, more importantly, what it was not doing.&lt;/p&gt;
&lt;h3&gt;Loosely coupled&lt;/h3&gt;
&lt;p&gt;One thing that becomes a real pain in testing JavaScript is testing code that interacts with the DOM. To isolate it, we created a pub/sub interface that all modules use to talk to each other. That way DOM-sensitive code can attach to DOM fixtures, listen for events, mutate the DOM and have the other side of the module exposed to the pub/sub for testing. Likewise, code on the other side that did service level things, maybe talk to the server, maybe do model work, could also have a clear separation point to attach testing to.&lt;/p&gt;
&lt;h2&gt;Team buy-in&lt;/h2&gt;
&lt;p&gt;I feel very strongly that technology decisions should be made as a team, by the people who are going to use it every day. That doesn&#39;t mean I&#39;m a silent bystander (those that know me are well acquainted my utter lack of ability to be silent), but my voice, even as the manager, doesn&#39;t weigh more than anyone else&#39;s. In fact, in many ways, it weighs less.&lt;/p&gt;
&lt;p&gt;We talked about pros and cons of several ways to achieve our goals. We even added a couple on the spot:&lt;/p&gt;
&lt;h3&gt;Expected future-proofness&lt;/h3&gt;
&lt;p&gt;Wouldn&#39;t it be great if we didn&#39;t have to transpile into something else to make the code work in the browser? One can dream.&lt;/p&gt;
&lt;h3&gt;Intuitiveness&lt;/h3&gt;
&lt;p&gt;Code should strive towards obviousness, easy to grok. We want to include more developers, not create a walled garden.&lt;/p&gt;
&lt;h3&gt;Excitement&lt;/h3&gt;
&lt;p&gt;If we are going to use this code every day, it should be something that we are excited to use. If it&#39;s boring and no one finds it interesting, why the hell are we using it?&lt;/p&gt;
&lt;h2&gt;Proof of concept&lt;/h2&gt;
&lt;p&gt;So we made a decision, how do we know if it was a good one? We had to start putting it through it&#39;s paces. We created a POC that would prove if the idea could work. It had to solve those goals and nothing more. This is a hard thing to do. Again, resist the urge to figure out how it will work in your build system. Just focus on making the basic idea work first. Knowing how it will integrate in your system ultimately just isn&#39;t valuable at this juncture and what you learn in the process will help inform how to solve that problem later.&lt;/p&gt;
</description><pubDate>Wed, 27 Jan 2016 22:30:35 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/going-live-with-es2015/</guid>
    </item>
    <item>
      <title>How i interview</title>
      <link>https://craveytrain.com/posts/how-i-interview/</link><description>&lt;p&gt;As engineers, when we are asked to interview someone our primary directive is to assess someone&#39;s technical abilities. In fact, not just a passing assessment, but an assessment with a high degree of confidence. We need to know with as much certainty as possible this person is capable of doing the job. This is a team member, someone who will be relied upon and if they can&#39;t pull their own weight it will be felt by everyone else on the team.&lt;/p&gt;
&lt;p&gt;There are many different ways people can interview and I feel like I&#39;ve been through them all. I was once asked to write up a sample DNS record on a white board when interviewing for a design/front end position because I had server admin with dns and others listed as experience on my resume. Pro tip: cull your resume to be relevant to the position you are applying for. Showing breadth of experience is great but make sure it&#39;s focused to the gig.&lt;/p&gt;
&lt;p&gt;I have seen people do the white board thing, ask all sorts of academic questions, look at portfolios live in the interview, pair program and even give written tests. I think people sometimes get caught up in the position of power that comes with being an interviewer and use that to pass judgement on others. That&#39;s where I lose my patience with this whole thing. The goal here is to find someone you want to work with and wants to work with you. I submit to you there are at least a few better ways which I currently use.&lt;/p&gt;
&lt;h2&gt;The Conversation&lt;/h2&gt;
&lt;p&gt;I was inspired by the way &lt;a href=&quot;http://www.frogdesign.com/&quot;&gt;frog&lt;/a&gt; interviewed me (despite not offering me the job). It was conversational, comforting even. We talked about various things I had done, occassionally drilling down into details of why or how I did something. They got me talking about my experience and got a gauge of my technical acumen without ever grilling me. This has influenced my interview process heavily. My current personal technique is based heavily on that.&lt;/p&gt;
&lt;h2&gt;Pair Programming&lt;/h2&gt;
&lt;p&gt;The other interview that helped form my ideology was at &lt;a href=&quot;http://gersonlehrmangroup.com/&quot;&gt;GLG&lt;/a&gt;. One of the engineers came in with a laptop, sat it down and told me had setup an endpoint to POST a form to and mocked up a loose form. He wanted to sit with me while I coded up an XHR submit, take the response and show it on the page. He had a few text editors and an IDE. I asked a few questions about intents and constraints and then started. Right off the bat, I couldn&#39;t remember the XHR method signature. &amp;quot;That&#39;s ok, we have internet&amp;quot;, he said. I pulled up the reference and we&#39;re off. Along the way he asked me a few questions about my methodology and I explained at various places the shortcuts I was taking for the purposes of an interview that I wouldn&#39;t do in a production environment (and what I would do in said environment). We knocked it out in about 10 minutes and spent the rest of the time talking about the company, various challenges of the gig, etc.&lt;/p&gt;
&lt;h2&gt;Test Driven Interviewing&lt;/h2&gt;
&lt;p&gt;I&#39;m constantly working on my process and am really liking &lt;a href=&quot;https://github.com/rmurphey/js-assessment&quot;&gt;this new project&lt;/a&gt; from who else but &lt;a href=&quot;http://rmurphey.com&quot;&gt;Rebecca Murphey&lt;/a&gt;. I like it so much I&#39;m going through it myself and doing pull requests for things. It&#39;s a fantastic little project and I intend to start working it into my rotation.&lt;/p&gt;
&lt;p&gt;After all this prattling, my message is simple, you can gauge people&#39;s skill level without having to exert your power over someone or asking them to memorize inane details or pass some sort of academic exercise that just isn&#39;t relevant in the real world. Eyes on the prize, finding a new great team member.&lt;/p&gt;
</description><pubDate>Sun, 16 Dec 2012 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/how-i-interview/</guid>
    </item>
    <item>
      <title>Moving to octopress</title>
      <link>https://craveytrain.com/posts/moving-to-octopress/</link><description>&lt;p&gt;I&#39;m &lt;a href=&quot;http://alexsexton.com/&quot;&gt;following&lt;/a&gt; &lt;a href=&quot;http://rmurphey.com/&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;http://mattgemmell.com/&quot;&gt;trend&lt;/a&gt; and moving over to &lt;a href=&quot;http://octopress.org&quot;&gt;Octopress&lt;/a&gt;. While I do love my custom node blog, the amount of work it took to get a new post up and the stack it required for a simple blog was just overkill. It was a fun experiment and I will continue to play with node in all sorts of varieties, I just am not interested in rolling my own blog in it for now. Enter Octopress.&lt;/p&gt;
&lt;p&gt;Octopress is billed as a hacker&#39;s blog tool. It met my rather modest criteria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sensible, semantic urls (that could maintain my existing ones),&lt;/li&gt;
&lt;li&gt;completely customizable templates and&lt;/li&gt;
&lt;li&gt;fun to work in.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On top of that were some things I hadn&#39;t really given creedence to. Things such as prerendering the blog. When ya think about a blog in it&#39;s most basic form, it makes total sense. It just took me a while to get on board. It&#39;s got good syntax highlighting built in. It uses SASS (another thing I didn&#39;t know I wanted until I used it).&lt;/p&gt;
&lt;p&gt;The thing is, now I have extended/altered Octopress so much there is no easy merging back when they make more changes. I have my own theme, I have ripped out all of the asides, I have adjusted the Rakefile to add minification of scripts, hashing of static file names so I could have very long expires headers on them and thrown out the entire concept of custom includes and styles. The whole thing is custom at this point. I may have painted myself back into the same hole but even so, it has been fun getting here. I&#39;m looking forward to doing a few things with regards to search auto-suggest, better theming and maybe some social integration (activity on github repos comes to mind).&lt;/p&gt;
&lt;p&gt;If you are interested in seeing what I have done (and hopefully will be doing) to the codebase, please check out my &lt;a href=&quot;https://github.com/craveytrain/octopress&quot;&gt;octopress fork&lt;/a&gt; and my &lt;a href=&quot;https://github.com/craveytrain/octopress-theme&quot;&gt;octopress theme&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Oh, and I turned comments off. Still deciding if I want to turn them back on or use something with regards to twitter or github discussions on the markdown pages that generate the posts for that or just do away with them all together. We shall see.&lt;/p&gt;
</description><pubDate>Mon, 07 May 2012 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/moving-to-octopress/</guid>
    </item>
    <item>
      <title>JS is your friend</title>
      <link>https://craveytrain.com/posts/js-is-your-friend/</link><description>&lt;p&gt;A week ago (8-16-11) at &lt;a href=&quot;http://austinjavascript.com/&quot;&gt;Austin JavaScript&lt;/a&gt; I gave a presentation about the basics of JavaScript and jQuery. In case anyone is interested I have made &lt;a href=&quot;https://craveytrain.com/slides/js-basics/&quot;&gt;the slides&lt;/a&gt; available.&lt;/p&gt;
</description><pubDate>Tue, 23 Aug 2011 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/js-is-your-friend/</guid>
    </item>
    <item>
      <title>DB gone</title>
      <link>https://craveytrain.com/posts/db-gone/</link><description>&lt;p&gt;So, I upgraded the db version on this blog and in doing so, I forgot to backup the comments. I apologize to both of you that lost your comments. Lesson learned, back up the db before I upgrade it.&lt;/p&gt;
</description><pubDate>Fri, 17 Jun 2011 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/db-gone/</guid>
    </item>
    <item>
      <title>CORS</title>
      <link>https://craveytrain.com/posts/cors/</link><description>&lt;p&gt;Recently I had to learn a little bit about CORS (cross origin resource sharing). I had sites on different domains I had to get data in between. I like to try to be forward thinking, so when I learned about a better option than JSONP, I jumped all over it. Nicholas Zakas explains is very well on his &lt;a href=&quot;http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/&quot;&gt;article about CORS&lt;/a&gt;. Like all the other new, fun technologies, it&#39;s not supported by all older browsers. So I had to find a way to be forward thinking but have a fallback. What I ended up with is a CORS xhr that falls back to JSONP if CORS is not natively supported.&lt;/p&gt;
&lt;p&gt;We are using &lt;a href=&quot;http://jquery.com&quot;&gt;jQuery&lt;/a&gt; on this project so it made it even simpler to do. I used the new &lt;a href=&quot;http://api.jquery.com/jQuery.ajaxPrefilter/&quot;&gt;$.preFilter&lt;/a&gt; to make it even easier.&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;$&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ajaxPrefilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;json&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;options&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; orig&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; jqXHR&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;options&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;crossDomain &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;$&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;support&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;cors&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;jsonp&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

$&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ajax&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token literal-property property&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;http://nodeserver:3000&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token literal-property property&quot;&gt;dataType&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;json&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token literal-property property&quot;&gt;success&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; callback&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token literal-property property&quot;&gt;xhrFields&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;withCredentials&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;callback&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;d&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The prefilter is just taking the dataType attribute, doing a check to see if the request is crossDomain (an internal jQuery property) and if the browser support CORS. If it is cross domain but the browser does not support CORS, it changes the dataType to JSONP. It&#39;s really that simple. jQuery does everything else behind the scenes. It takes care of the request, and if XHR, calls the success callback with the response payload of the request. If it&#39;s JSONP request, it calls the success callback with the same data as the XHR response passed in as a parameter.&lt;/p&gt;
&lt;p&gt;I also threw together a sample server:&lt;/p&gt;
&lt;p&gt;The server just does a detection for the callback request param (the default request param name used if it&#39;s a JSONP request), and if so, it sends the response back as JSONP, using the value of the callback param as the function name and making sure to set the &lt;code&gt;Content-Type&lt;/code&gt; to &lt;code&gt;applicastion/javascript&lt;/code&gt;. If the request is XHR, it gives a &lt;code&gt;Content-Type&lt;/code&gt; of &lt;code&gt;application/json&lt;/code&gt; and sets a header of &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt; to (preferably) the host making the request. For this example I am using a wildcard. You may not want to do that in a production environment.&lt;/p&gt;
&lt;p&gt;If you read the explanation article above, you will notice it says that by default, auth items are not sent over on cross domain XHR requests. Missed that little note? Yeah, I did too the first time. That&#39;s why I&#39;m writing this, to help it sink in. So, in the event you need to send over cookies or something along those lines, you just need to add &lt;code&gt;withCredentials: true&lt;/code&gt; to the native XHR object. jqXHR makes that available via the &lt;code&gt;xhrFields&lt;/code&gt; object.&lt;/p&gt;
&lt;p&gt;The server just requires 1 more header in the response.&lt;/p&gt;
&lt;p&gt;Access-Control-Allow-Credentials: true&lt;/p&gt;
&lt;p&gt;And that&#39;s it. I hope this was beneficial to ya. If you have any questions, feel free to lemme know.&lt;/p&gt;
</description><pubDate>Fri, 17 Jun 2011 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/cors/</guid>
    </item>
    <item>
      <title>OAuth</title>
      <link>https://craveytrain.com/posts/oauth/</link><description>&lt;p&gt;I had been trying to decide what to do with comments. I like to give the ability to people to make comments but I just did not want to deal with keeping track of people&#39;s username, passwords, etc. Furthermore, I absolutely abhor CAPTCHA or anything of the sort. I got to thinking about using something like OpenID. The main problem I have with that is adoption. I don&#39;t want to make it hard for people to comment, but I don&#39;t want to deal with user info. Then I read &lt;a href=&quot;http://shiflett.org/blog/2011/mar/using-twitter-for-comments&quot;&gt;Chris Shiflett write about using Twitter for comments&lt;/a&gt; and I knew that was the key for me.&lt;/p&gt;
&lt;p&gt;There are several popular oauth networks out there but Twitter seems to make the most sense for my audience (both of you) and my subject matter (primarily technical blatherings). So, I set out to learn oauth and use Twitter. Had I known how long it would take me, I might have gone another route. But I&#39;m here with lots of lessons learned and a much stronger understanding of the oauth paradigm. And that is the real reason I rolled my own blog: to give myself the reason to go learn new things.&lt;/p&gt;
&lt;h2&gt;The Process&lt;/h2&gt;
&lt;p&gt;Basically, the oauth process breaks down into 3 major steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate a request token,&lt;/li&gt;
&lt;li&gt;Using said request token, ask the user to grant the requesting app permission to access the user&#39;s account and&lt;/li&gt;
&lt;li&gt;Once permission is given, exchange the request token with an access token.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Then it&#39;s just the matter of caching that access token (I chose a cookie which I bring into session on the first page load) and requesting the user&#39;s pertinent information. Currently, I am grabbing their Twitter screen name, id, url (which I piece together based on the standard twitter user page and their screen name) and their image. I use this information to attribute the comments on the blog.&lt;/p&gt;
&lt;p&gt;As for comment contents, I knew I didn&#39;t want to bother with whitelisting tags or anything like that, so I just did the simple thing and went with Markdown. I have really come to love Markdown as a simple tool for authoring content. That&#39;s what I write my blog posts in. To help the users write in markdown I linked up the syntax reference.&lt;/p&gt;
&lt;p&gt;What I&#39;m particularly proud of is the realtime comment previewer. It shows the author&#39;s comment, right in line with the other comments and I think does a good job showing them exactly how their comment will look. Right now this is written as a call back to the server because I haven&#39;t found a good client side lib to parse markdown on the fly. &lt;a href=&quot;https://github.com/coreyti/showdown&quot;&gt;Showdown&lt;/a&gt; seemed to crap out on &amp;lt; &amp;amp; &amp;gt;. I will look into it some more in the future. But let&#39;s be honest, it&#39;s not like I have enough commenters right now to really put a strain on my server. Famous last words? I can only hope.&lt;/p&gt;
&lt;p&gt;Obviously I didn&#39;t code everything from scratch, cause, that&#39;s just loco, ese. For the basic oauth work, I used the &lt;a href=&quot;https://github.com/ciaranj/node-oauth&quot;&gt;excellent oauth wrapper for node.js&lt;/a&gt;. I&#39;m still using &lt;a href=&quot;http://expressjs.com/&quot;&gt;express&lt;/a&gt; for my basic framework with &lt;a href=&quot;http://jade-lang.com/&quot;&gt;jade&lt;/a&gt; for templates.&lt;/p&gt;
&lt;p&gt;If you have any comments, questions or concerns, hey, you can voice them now, so feel free.&lt;/p&gt;
</description><pubDate>Tue, 24 May 2011 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/oauth/</guid>
    </item>
    <item>
      <title>Dotfiles</title>
      <link>https://craveytrain.com/posts/dotfiles/</link><description>&lt;p&gt;I&#39;ve been helping some of the guys at work get acclimated to macs and with that, helping them customize their bash prompt. With much thanks due to &lt;a href=&quot;https://github.com/mschout&quot;&gt;mschout&lt;/a&gt;, I have finally got mine setup more or less how I like it (until I change it again).&lt;/p&gt;
&lt;p&gt;I want to give a quick rundown of what I am using and why. The code is in my &lt;a href=&quot;https://github.com/craveytrain/local-config&quot;&gt;local-config&lt;/a&gt; repo on github (with basic install instructions), so I won&#39;t go line for line through the configs, just an overview of why I do the voodoo that I do.&lt;/p&gt;
&lt;h2&gt;bash_profile&lt;/h2&gt;
&lt;p&gt;No one wants to dupe their code, and your bash prompt is no different. I use &lt;a href=&quot;http://www.iterm2.com/&quot;&gt;iTerm2&lt;/a&gt; as my terminal which does some nifty things, not the least of which is give the ability to open up a new tab at the same path as the previous tab&#39;s path. However, when doing this, it will only run the .bashrc file, not the .bash_prompt. The reasons why are beyond the scope of this post but are at least highlighted at &lt;a href=&quot;http://serverfault.com/questions/8882/what-is-the-difference-between-a-login-and-an-interactive-bash-shell&quot;&gt;server fault&lt;/a&gt;. Point being: write your code once, and just call it up.&lt;/p&gt;
&lt;h2&gt;bash_completion&lt;/h2&gt;
&lt;p&gt;There are a couple files associated with this feature and a lot more scripts I am not using. This is a pretty sweet little script for allowing tab completion of git commands as well as branch information in your prompt (if you are in a git branch). I took the stock one and adjusted it to color the branch name based on whether it was clean or not. There are other bash_completion scripts, I just haven&#39;t gotten around to trying them out yet.&lt;/p&gt;
&lt;h2&gt;gitconfig&lt;/h2&gt;
&lt;p&gt;I didn&#39;t originally have this one in there, but a lot of people started asking me how I had my git setup. So, here&#39;s what I have and why:&lt;/p&gt;
&lt;h3&gt;color&lt;/h3&gt;
&lt;p&gt;Turn &#39;em on, all of &#39;em&lt;/p&gt;
&lt;h3&gt;aliases&lt;/h3&gt;
&lt;p&gt;I like co for checkout, br for branch, st for status and lg for this funky, pretty little log format I found on &lt;a href=&quot;http://stackoverflow.com/questions/267761/what-does-your-gitconfig-contain&quot;&gt;stack overflow&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;mergetool&lt;/h3&gt;
&lt;p&gt;Yeah, I&#39;m lazy, I am using opendiff (aka file merge)&lt;/p&gt;
&lt;h3&gt;editor&lt;/h3&gt;
&lt;p&gt;Textmate, though I am considering to going back to just using vim or whatever was default&lt;/p&gt;
&lt;h3&gt;autocrlf&lt;/h3&gt;
&lt;p&gt;input.&lt;/p&gt;
&lt;p&gt;This one sparks some conversation. It&#39;s my belief that we should be using lf in the repo, cause that&#39;s how Linus intended it. The real issue here is I work with windows developers and occasionally work in windows myself. This will change anything I commit into lf but won&#39;t mess with the checkout. So, in theory, I could cause myself a lot of hell on commits of files I changing but it has yet to bite me so far. I know it&#39;s just a waiting game.&lt;/p&gt;
&lt;h2&gt;bash_mac&lt;/h2&gt;
&lt;p&gt;Here is some stuff that only works if you are on a mac, which I am:&lt;/p&gt;
&lt;h3&gt;growl notification&lt;/h3&gt;
&lt;p&gt;Just run (or script) &lt;code&gt;growl text&lt;/code&gt; and you&#39;ll see a growl notification with text.&lt;/p&gt;
&lt;h3&gt;rm&lt;/h3&gt;
&lt;p&gt;Basically instead of delete it now moves to the trash. I&#39;m used to the trash and I want it available on the command line. There is plenty of hard drive space, if it gets full, I&#39;ll dump it, but I want the ability to have that buffer.&lt;/p&gt;
&lt;h3&gt;browser aliases&lt;/h3&gt;
&lt;p&gt;I just setup browser aliases so I could start the main browsers I use from the command line and give it a URL or the more likely scenario, a local file.&lt;/p&gt;
&lt;h2&gt;bashrc&lt;/h2&gt;
&lt;p&gt;Here&#39;s where the magic happens. All the other files we have been talking about culiminate in here. The top is some basic filler: source the skel bashrc (if it exists) &amp;amp; create some path adding and deleting functions.&lt;/p&gt;
&lt;h3&gt;Paths&lt;/h3&gt;
&lt;p&gt;We add in paths for the bin directory local to the user for things like the bash_completion scripts. In theory there will be more, but the idea is it&#39;s a local bin dir for the user. Also, we add in /usr/local/bin and sbin. I personally subscribe to a lot of the POSIX ideas about where to put things and I like the idea of putting local execution files installed by the user in those directories. I use &lt;a href=&quot;http://mxcl.github.com/homebrew/&quot;&gt;homebrew&lt;/a&gt; and they put their stuff there. I also roll my own &lt;a href=&quot;http://nodejs.org/&quot;&gt;nodejs&lt;/a&gt; and that goes there.&lt;/p&gt;
&lt;h3&gt;lang&lt;/h3&gt;
&lt;p&gt;I honestly don&#39;t know why this is there. I think it just sounded like something I might need.&lt;/p&gt;
&lt;h3&gt;VIM vs VI&lt;/h3&gt;
&lt;p&gt;VIM is better (hence the name).&lt;/p&gt;
&lt;h3&gt;Prompt&lt;/h3&gt;
&lt;p&gt;Some really interesting stuff goes on here, and frankly, some if it I&#39;m still just copying and pasting. Basically, I&#39;m telling it to show dirty state, show stashed files, show untracked files and then sending it some colors to shade the branch info from the bash_completion script. I&#39;m setting my basic prompt to:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;user@host:/full/path &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;git branch&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
$&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice the prompt wraps to the second line cause that path can get lengthy.&lt;/p&gt;
&lt;h3&gt;RVM&lt;/h3&gt;
&lt;p&gt;I love me some &lt;a href=&quot;https://rvm.beginrescueend.com/&quot;&gt;RVM&lt;/a&gt;. I really enjoy working in Ruby and RVM has saved me so much hassle while working on projects and not messing with the local installed ruby versions. Cannot recommend it enough.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;That&#39;s about it. If you have any questions or find any issues, please reach out to me at the &lt;a href=&quot;https://github.com/craveytrain/local-config/issues&quot;&gt;local-config issue tracker&lt;/a&gt;. Thanks and I hope y&#39;all enjoy it.&lt;/p&gt;
</description><pubDate>Wed, 27 Apr 2011 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/dotfiles/</guid>
    </item>
    <item>
      <title>Relaunching with nodejs</title>
      <link>https://craveytrain.com/posts/relaunching-with-node/</link><description>&lt;p&gt;So, over the weekend, I relaunched my blog on &lt;a href=&quot;http://nodejs.org/&quot;&gt;Node.js&lt;/a&gt;. I tried Tumblr, Blogger, Wordpress (hosted and self), Django, Rails and was just about to rebuild it in Sinatra when a &lt;a href=&quot;http://blog.rubikzube.com/&quot;&gt;friend&lt;/a&gt; suggested I just build it in Node. Of course! Why didn&#39;t I think of that?&lt;/p&gt;
&lt;p&gt;As for what drove me to roll my own blog when there are plenty of solutions that do it just fine, it was 1 part being anal about URLs (which Tumblr and Wordpress just wouldn&#39;t give me the level of control I wanted), 1 part wanting to serve up different types of content (ala Tumblr) and 1 part &amp;quot;why the hell not&amp;quot;?&lt;/p&gt;
&lt;p&gt;As for the stack, I&#39;m using &lt;a href=&quot;http://expressjs.com/&quot;&gt;Express&lt;/a&gt; for the framework, &lt;a href=&quot;http://jade-lang.com/&quot;&gt;Jade&lt;/a&gt; for the templating, &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt; for the content and &lt;a href=&quot;http://couchdb.apache.org/&quot;&gt;CouchDB&lt;/a&gt; for the document store. I&#39;m using git to deploy to prod with the help of a little post-receive hook. I&#39;m replicating my db locally to my prod box. This provides me with local copies of my site and my data.&lt;/p&gt;
&lt;p&gt;I have a lot of things I want to do. I have gists I want to find a way to proxy the content for, I want to allow comments and am thinking of using Twitter for my OAuth provider. I want to host links as well as posts, with a nod to &lt;a href=&quot;http://adactio.com/&quot;&gt;Jeremy Keith&lt;/a&gt;. Microformats. I love microformats and have none on the site. This will be remedied shortly.&lt;/p&gt;
&lt;p&gt;I have a lot of things I need to fix. My content propagation isn&#39;t as clean as I would like. My design, well, let&#39;s just say it needs some love. Unfortunately, I don&#39;t know if I am the person who can give it that love. I tried to spend a good amount of time focusing on the readability and the font stack.&lt;/p&gt;
&lt;p&gt;For anyone that happens to subscribe to my feed or link to my old posts, I apologize for the constant switching of URLs. One of the big reasons I went to this solution was to solidify my URL scheme. So I hope to be done with that. I will see about putting on some perm redirects for the old URLs.&lt;/p&gt;
&lt;p&gt;Love it, hate or mildly ambivalent towards it, here it is. I have put both my &lt;a href=&quot;https://github.com/craveytrain/Craveytrain-Content&quot;&gt;content&lt;/a&gt; and my &lt;a href=&quot;https://github.com/craveytrain/Craveytrain-App&quot;&gt;app&lt;/a&gt; on github for all to see. Check it out. I&#39;m interested in your feedback.&lt;/p&gt;
</description><pubDate>Tue, 19 Apr 2011 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/relaunching-with-node/</guid>
    </item>
    <item>
      <title>Learning rails</title>
      <link>https://craveytrain.com/posts/learning-rails/</link><description>&lt;p&gt;So, I&#39;ve been doing this Rails tutorial off and on for the last month or so, time permitting. People ask me &amp;quot;Why are you learning Rails?&amp;quot;. I tell them it&#39;s an easy way for me to get introduced to Ruby. I&#39;m not a proper developer by training. I don&#39;t think in the same terms most developers do. I can&#39;t just sit down, learn a new syntax and then wield the awesome powers of the new language. I have to relate it to something I know. I know web apps. So Rails teaches me some of the Ruby basics while letting me relate everything back to something I feel comfortable with. Yes, I know there are differing opinions on Rails and there is a bunch of stuff it adds to Ruby that isn&#39;t really Ruby itself, but that&#39;s ok. It&#39;s just a starting point.&lt;/p&gt;
&lt;p&gt;I usually then get asked &amp;quot;Why Ruby?&amp;quot;. Good question. Cause Java pisses me off, the community around C#/.Net is frustrating to me and Objective C is not widely used enough. Ignoring a lot of other cool technologies out there (such as Erlang) that I have on my list to learn as I get a good foundation, the big one people ask me about is Python. I have a love/hate relationship with Python. I won&#39;t get into the nitty gritty details, cause honestly, I don&#39;t have the chops. Let&#39;s just say there are many things about Python I really like and a few I don&#39;t. Ruby is intriguing to me. It&#39;s shiny and has huge community support.&lt;/p&gt;
&lt;p&gt;So, back to Rails. My end goal is to rewrite my blog in something like Rails (or Django if I end up going back to Python). Wordpress is great, and could be extended to do everything I need. However, there is a lot there. A lot I don&#39;t need. Plus, honestly, I am drawn to the MVC structure and while PHP can work that way, Wordpress does not, not without extensive hacking. I want little things like having infinite control over my URLs, being able to cache all sorts of data locally and expose out APIs for other services to consume (and consume their services). Basically, Wordpress is too canned and I want something to tinker with.&lt;/p&gt;
&lt;p&gt;So, my plan is to get a critical mass on building a blog in Rails and then go from there. I&#39;ll keep both of you posted.&lt;/p&gt;
</description><pubDate>Thu, 30 Dec 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/learning-rails/</guid>
    </item>
    <item>
      <title>New design</title>
      <link>https://craveytrain.com/posts/new-design/</link><description>&lt;p&gt;Yes, it&#39;s that time of the year. Time for me to do another half assed design. This one looks particularly half baked, I know. But this one has rhyme and reason where the others were just laziness. This is still a transitional design, but instead of going naked, I&#39;m going for a few simple design principles and then will fill in the rest as I go.&lt;/p&gt;
&lt;h2&gt;Legibility&lt;/h2&gt;
&lt;p&gt;The main goal of the new design is legibility. Large font sizes, large leading, serif fonts, liquid but liberal measure. Content first, right there on the left. Headline at the top. Content is given the primary position, with nav and branding (or the eventual spot where branding hopes to be) is secondary, out of the way. Granted, it&#39;s fixed, so it stays with the user but it&#39;s definitely secondary.&lt;/p&gt;
&lt;h2&gt;Font Stack&lt;/h2&gt;
&lt;p&gt;Serifs are back in. Headlines are in the beautiful slab serif Rockwell. Body text is in the venerable Georgia. Subheadlines and nav went old school with Berthold Akzidenz Grotesk for a little change of pace. This is probably the first font stack I&#39;ve ever put together I&#39;m truly proud of. I know, it needs a little work in the leading and some of the kerning is erratic depending on browser and OS, but I think in essence, it&#39;s solid.&lt;/p&gt;
&lt;h2&gt;Liquid Layout&lt;/h2&gt;
&lt;p&gt;I am trying out the golden ratio and a liquid layout. I&#39;m no designer but I like to think I understand the basics. There is something oddly pleasing about the proportions. It just feels right.&lt;/p&gt;
&lt;p&gt;I struggled with measure. Optimal legibility says it&#39;s something like 66 characters wide. I already stated I was going for optimal legibility. But something wasn&#39;t sitting well with me. If someone viewed the site in a wide screen monitor there is just so much wasted space. So, I decided to hell with measure. The width is just a raw percentage. If you want to look at this blog in a full width widescreen window, first off, thanks for reading, and secondly, you should have the right to take advantage of all that space. Maybe when I get some content I&#39;ll think about capping the measure and doing a more columned approach, but for now, power to the reader!&lt;/p&gt;
&lt;p&gt;I&#39;m also accounting for the minimum thresholds. I&#39;m using media queries to handle tablet and mobile device layouts. Eventually I&#39;ll get around to doing a proper mobile site, but until this media queries will have to work.&lt;/p&gt;
&lt;h2&gt;The site is missing …&lt;/h2&gt;
&lt;p&gt;And don&#39;t I know it. The site is missing a lot. I took it way, way down. It&#39;s more basic than the out of the box template. It doesn&#39;t have the archives, it doesn&#39;t have search, it doesn&#39;t have much of anything other than the blog post content. I&#39;m still playing with all those other things but I thought I would go ahead and launch the new template anyways.&lt;/p&gt;
&lt;p&gt;So, I hope you enjoy and I&#39;ll be posting updates as I update something worthy of a post (which is honestly a pretty low bar).&lt;/p&gt;
</description><pubDate>Mon, 13 Dec 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/new-design/</guid>
    </item>
    <item>
      <title>Getting the gist</title>
      <link>https://craveytrain.com/posts/getting-the-gist/</link><description>&lt;p&gt;I really like &lt;a href=&quot;https://gist.github.com/&quot;&gt;Gist&lt;/a&gt;, a lot. They are full on git repos and as such have version control, remote updating, all of the things you would expect out of a github repo including most of the social aspects. They also have the best syntax highlighting I have seen. Yes, there are other libs that do it in various languages, but I really like theirs and I like having my code in 1 place.&lt;/p&gt;
&lt;p&gt;I&#39;ve made several gists since I have become a member and expect that I will be making more now that I have gotten this down. The main complaint I have with gists is that to embed them in your blog you have to include a script tag that does a document.write. Aside from my misgivings about document.write, this poses a performance and user experience issue. Consider on a blog post with multiple snippets of code, the page stops loading until the scripts are downloaded and executed. Nevermind anything they may clobber during the process. And finally, I end up with a stylesheet in the DOM for each included gist that are all the exact same. So, I did:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;doctype&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;en&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;utf-8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Gist Fetch&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Separate Files&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Contact_form.html&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt;
			&lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gistPlaceholder&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://gist.github.com/476405#file_contact_form.html&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;contact_form.html&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;overlay.js&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt;
			&lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gistPlaceholder&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://gist.github.com/476405#file_overlay.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;overlay.js&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;style.css&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt;
			&lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gistPlaceholder&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://gist.github.com/476405#file_style.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;style.css&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Combo File&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;gistPlaceholder&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://gist.github.com/476405&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Accessible Inline Form Labels&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;jquery-gistFetch.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;span class=&quot;token language-javascript&quot;&gt;
			&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ready&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;.gistPlaceholder&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;gistFetch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;// Fetch Gist and drop it into page&lt;/span&gt;
	$&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;gistFetch&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; opts &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; $&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;extend&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; $&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;gistFetch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;defaults&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; options&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

		&lt;span class=&quot;token comment&quot;&gt;// Duck punch document.write&lt;/span&gt;
		document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;oldWrite &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;write
		document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;write &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; $&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;gistFetch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;docOverwrite

		&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; $&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

			&lt;span class=&quot;token comment&quot;&gt;// Support for the Metadata Plugin.&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; o &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; $&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;meta &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; $&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;extend&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; opts&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; $&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; opts&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				aURL &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;href&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;[&#92;/#]&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				gistId &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; aURL&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				fileName &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; aURL&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; aURL&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				gistURL &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;gistURL &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; gistId &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;.js&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				snipId &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; gistId &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; fileName

			gistURL &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; fileName &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;?file=&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; fileName &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;

			&lt;span class=&quot;token comment&quot;&gt;// Store a pointer to the gist place holder&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;snipId&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; $&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

			$&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getScript&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;gistURL&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	$&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;gistFetch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;docOverwrite&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token comment&quot;&gt;/* String */&lt;/span&gt; markup&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		$gist &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markup&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;// If the code in the document.write starts with a link and is from gist.github.com&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
			markup&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toLowerCase&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;link&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
			$gist&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;href&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;gist.github.com&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;gisted&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;head&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markup&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;gisted&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;// If the code in document.write has a class of &#39;gist&#39; assume it&#39;s a gist&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;$gist&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hasClass&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;gist&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; gistId &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; $gist&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;id&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;5&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				fileName &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; $gist&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;.gist-meta a:eq(1)&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				snipId &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; gistId &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; fileName&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
				$link &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;snipId&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

			&lt;span class=&quot;token comment&quot;&gt;// If the pointer for the gistId and fileName exists (meaning file specfic gist)&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; $link &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;undefined&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				$link&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replaceWith&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;$gist&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;removeData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;snipId&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token comment&quot;&gt;// Else assumes gist link of whole gist with no fileName specified&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;gistId&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;replaceWith&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;$gist&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;removeData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;gistId&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
			&lt;span class=&quot;token comment&quot;&gt;// Else just run plain old document.write&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;oldWrite&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;apply&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; arguments&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;token comment&quot;&gt;// default options&lt;/span&gt;
	$&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fn&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;gistFetch&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;defaults &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token literal-property property&quot;&gt;gistURL&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;https://gist.github.com/&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;jQuery&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ironically enough, I made a gist about it. As usual, it&#39;s using jQuery (cause that&#39;s my fav little DOM manip/XHR lib) and it&#39;s just a simple little plugin that looks for links to gists, parses out the gist id and file name (if provided), fetches the gist, and duck punches document.write to replace said link with the code and drop the css file into the head (only once). This is all after DOM ready, so the page will load up just fine, only applying these things after the fact.&lt;/p&gt;
&lt;p&gt;So, I know what you are thinking &amp;quot;Whoa, whoa, whoa! Duck punching document.write?!&amp;quot; Honestly, I wish I could have avoided it. I tried various techniques to leave document.write alone but I just couldn&#39;t find another way to make it work. Eventually I decided this was the easiest way to do it. I really despise document.write, so I only feel partially guilty about this. That and this plugin was developed for my site. If I don&#39;t want you using document.write on my website, well, that&#39;s my prerogative. If you use this plugin, know that.&lt;/p&gt;
&lt;p&gt;Feel free to update or give feedback.&lt;/p&gt;
</description><pubDate>Fri, 10 Dec 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/getting-the-gist/</guid>
    </item>
    <item>
      <title>Character countdown</title>
      <link>https://craveytrain.com/posts/character-countdown/</link><description>&lt;p&gt;I had some spare time today, a really nasty plugin I had written for jQuery a while back to do character count downs and a desire to play with the widget factory. Let&#39;s get it on!&lt;/p&gt;
&lt;p&gt;First things first, I have give thanks to &lt;a href=&quot;http://ajpiano.com/&quot;&gt;Adam J. Sontag&lt;/a&gt; for showing me the way with the widget factory. I had tried it before but was missing something (namely, the scope of this in event handlers was eluding me). Then I saw an example in &lt;a href=&quot;http://ajpiano.com/charlie/&quot;&gt;Adam&#39;s slides&lt;/a&gt;. &lt;code&gt;$.proxy!&lt;/code&gt; So that&#39;s what that does. He caused my eureka moment, and for that I am grateful (just missed Thanksgivings by a few days, sorry Adam).&lt;/p&gt;
&lt;p&gt;Basically on a litany of events it counts the characters in a form field and compares it to the specified max (either a config property or maxlength value). It can do the threshold coloring like twitter does. Actually, it was modeled a lot after twitter.&lt;/p&gt;
&lt;p&gt;You can check it out at the &lt;a href=&quot;http://github.com/glgui/toolbox&quot;&gt;GLGUI Toolbox&lt;/a&gt; and there is even an example page.&lt;/p&gt;
</description><pubDate>Mon, 06 Dec 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/character-countdown/</guid>
    </item>
    <item>
      <title>Prototype methods</title>
      <link>https://craveytrain.com/posts/prototype-methods/</link><description>&lt;p&gt;When I mentioned the &lt;a href=&quot;http://github.com/glgui/toolbox&quot;&gt;GLGUI Toolbox&lt;/a&gt; repo I failed to mention some of the content already in it. I&#39;m gonna give a quick rundown of the two prototype methods I contributed.&lt;/p&gt;
&lt;h2&gt;Date.toGenString&lt;/h2&gt;
&lt;p&gt;This is a prototype method from the Date object that just puts the Date out to a string formatted like &#39;10/10/2010 21:15:07&#39;. That&#39;s it, nothing special, just was a specific format I needed a lot on a project we are working on so I thought I would share.&lt;/p&gt;
&lt;h2&gt;String.pluralize&lt;/h2&gt;
&lt;p&gt;Ok, I&#39;m actually rather proud of this one, which is sad, because it&#39;s pretty trivial, but it just works and works well. That is not always the case with my code upon first release. Essentially you call it off a singular version of a string and pass it the integer you are referencing and it will perform some basic plural rules on it.&lt;/p&gt;
&lt;p&gt;However, coding the English language can be tricky, so in observation of that, you can optionally pass it the plural form of the word and that will override the rules in the method.&lt;/p&gt;
</description><pubDate>Fri, 03 Dec 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/prototype-methods/</guid>
    </item>
    <item>
      <title>Glgui toolbox</title>
      <link>https://craveytrain.com/posts/glgui-toolbox/</link><description>&lt;p&gt;As you may or may not know, I work for &lt;a href=&quot;http://www.glgroup.com/&quot;&gt;Gerson Lehrman Group&lt;/a&gt; as a UI Engineer. While this is more of my professional site, I don&#39;t talk a lot about my work. Truth is, I really dig it here. I work with some fantastic fellow UI Engineers: &lt;a href=&quot;http://www.garann.com/&quot;&gt;Garann Means&lt;/a&gt;, &lt;a href=&quot;http://blog.rubikzube.com/&quot;&gt;Zubin Tiku&lt;/a&gt; and &lt;a href=&quot;http://cbsides.com/blog&quot;&gt;Chris Bosco&lt;/a&gt; (and some others but I don&#39;t know their blog URLs, hint, hint).&lt;/p&gt;
&lt;p&gt;As you can imagine, we are all big advocates of open source and have been looking for a way to give back to the community at large. So, we started a &lt;a href=&quot;http://github.com/glgui/toolbox&quot;&gt;GLGUI Toolbox&lt;/a&gt; repo on Github. So far, it&#39;s pretty remedial stuff on it but we hope to start putting out some of our more interesting work in the near future.&lt;/p&gt;
&lt;p&gt;Check it out occasionally, &lt;a href=&quot;http://github.com/glgui/toolbox/toggle_watch&quot;&gt;watch it&lt;/a&gt;, let us know of any &lt;a href=&quot;http://github.com/glgui/toolbox/issues&quot;&gt;issues&lt;/a&gt; you find with it or just give us &lt;a href=&quot;http://github.com/inbox/new/glgui&quot;&gt;feedback&lt;/a&gt; if you think it&#39;s useful (or not).&lt;/p&gt;
</description><pubDate>Thu, 02 Dec 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/glgui-toolbox/</guid>
    </item>
    <item>
      <title>Back to wordpress</title>
      <link>https://craveytrain.com/posts/back-to-wordpress/</link><description>&lt;p&gt;So, a quick note letting you know (in case you couldn&#39;t tell) I moved the blog back to Wordpress. I tried out Tumblr because it is very convenient and simple. I wanted something with less upkeep. But the lack of flexibility really started to bother me. It&#39;s a great blogging system, but as it turns out, I wanted more features. So, I&#39;m back to WordPress. That is all.&lt;/p&gt;
</description><pubDate>Tue, 30 Nov 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/back-to-wordpress/</guid>
    </item>
    <item>
      <title>Austin metro init</title>
      <link>https://craveytrain.com/posts/austin-metro-init/</link><description>&lt;p&gt;Since Austin has opened up their rail &amp;quot;system&amp;quot; I have really embraced mass transit. I happen to be in the sweet spot of living 3 miles from the park and ride and working 3 blocks from the downtown station. However, I noticed that for Austin being such a tech savvy town, the mass transit mobile app situation is awful. Sure, Google Maps work great if you want to get from one place to another and don&#39;t know how to get there, but for people who know the routes and just want to see when the next train is running, you have to go to &lt;a href=&quot;http://capmetro.org/&quot;&gt;Cap Metro&#39;s site&lt;/a&gt;. Their site leaves a little to be desired, especially when viewed on a mobile device. So, I decided to do something about it.&lt;/p&gt;
&lt;p&gt;This is by no means a finished product but this gave me the opportunity to play with a few technologies and techniques I hadn&#39;t prior. Based on some of the features I am using I made some pretty advanced assumptions on clients. I may very well refactor this to generate more code server side to support more clients and be more accessible, but honestly, at this point, this was fun to do mostly client side.&lt;/p&gt;
&lt;h2&gt;Geo Location&lt;/h2&gt;
&lt;p&gt;Geolocation is something I have been wanting to play with as a native function of the browser, not relying on mobile device features. It was reasonable cut and dry but it&#39;s important to consider that due to being on a mobile device, you may have intermittent connectivity. So you have to feature detect and still do the actual getting of the location inside of a try/catch.&lt;/p&gt;
&lt;h2&gt;Pub/Sub&lt;/h2&gt;
&lt;p&gt;I&#39;ve been reading about pub/sub a lot and have been wanting to try it. I slightly refactored &lt;a href=&quot;http://github.com/phiggins42/bloody-jquery-plugins&quot;&gt;Pete Higgin&#39;s jQuery pub/sub&lt;/a&gt; to work without a library.&lt;/p&gt;
&lt;h2&gt;Library-less JavaScript&lt;/h2&gt;
&lt;p&gt;I am not currently using a library. Just basic DOM scripting. I&#39;m not handling the IE exceptions right now, and it&#39;s glorious. I may or may decide to support IE.&lt;/p&gt;
&lt;p&gt;I&#39;ve put it on &lt;a href=&quot;http://github.com/&quot;&gt;GitHub&lt;/a&gt; for anyone that wants to &lt;a href=&quot;http://github.com/craveytrain/AustinMetro&quot;&gt;check it out&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you want to &lt;a href=&quot;http://metro.craveytrain.com/&quot;&gt;use the site&lt;/a&gt;.&lt;/p&gt;
</description><pubDate>Mon, 22 Nov 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/austin-metro-init/</guid>
    </item>
    <item>
      <title>Resilient modals</title>
      <link>https://craveytrain.com/posts/resilient-modals/</link><description>&lt;p&gt;Modals: Love them, hate them they are a current fad (and have been for a while). Modals are usually implemented via javascript for older browser support (though there are some cool things being done with CSS3 on the matter). I&#39;ve seen it done lots of ways, but here&#39;s a simple way to make modals &amp;quot;work&amp;quot; on a browser without javascript.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Make the trigger link link to the hashtag of the id of the modal.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sounds too simple, I know. And in truth, that is slightly oversimplified, but given the assumption that the contents of the modal are not dynamic but are known at initial download of the page, this is the most resilient way to make a modal.&lt;/p&gt;
&lt;p&gt;Since I know that&#39;s a little light on the implementation details, lemme throw together a quick code example. For the purpose of this example, we are using jQuery, but apply what ever JS method makes you happy.&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token doctype&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;token doctype-tag&quot;&gt;doctype&lt;/span&gt; &lt;span class=&quot;token name&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;html&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;lang&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;en&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;meta&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;utf-8&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;modals&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;title&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;style.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;media&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;screen&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;modal.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;noscript&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token style&quot;&gt;&lt;span class=&quot;token language-css&quot;&gt;
				&lt;span class=&quot;token selector&quot;&gt;.modal&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; block&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; relative&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token property&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; auto&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token property&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; auto&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token property&quot;&gt;margin-left&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
					&lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; auto&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;noscript&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;head&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			This is text that &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#modal&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;trigger&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;will link&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; to the
			modal.
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;modal&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;modal&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;This is the modal, baby.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;close&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Back to top&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;body&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;html&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;.modal&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; none&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 50%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;margin-left&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; -100px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #fff&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;#backdrop&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; block&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 0.8&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ready&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;.trigger&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;click&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;preventDefault&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;href&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			$modal &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;#&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; id&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			$backdrop &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;#backdrop&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length
				&lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;#backdrop&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;&amp;lt;div&gt;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;backdrop&#39;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;prependTo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;body&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

		$modal
			&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;find&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;.close&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;close&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;click&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;preventDefault&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;#backdrop&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;closest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;.modal&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And before you rail on me, this is proof of concept code. This is in no way considered production ready.&lt;/p&gt;
</description><pubDate>Tue, 16 Nov 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/resilient-modals/</guid>
    </item>
    <item>
      <title>Git SVN setup</title>
      <link>https://craveytrain.com/posts/git-svn-setup/</link><description>&lt;p&gt;So I&#39;ve been using Git-SVN for about a month at work now thanks largely to a &lt;a href=&quot;https://gist.github.com/594472&quot;&gt;gist&lt;/a&gt; put together by the magnanimous &lt;a href=&quot;http://lachstock.com.au/&quot;&gt;Lachlan Hardy&lt;/a&gt;. Honestly, if you are getting started and have a standard SVN layout, that has all you are gonna need. Naturally, where I work doesn&#39;t exactly have a standard layout so I had to adjust the instructions a little bit. I wanted to help explain to others how to handle these other variants I have encountered.&lt;/p&gt;
&lt;h2&gt;Getting Git Going&lt;/h2&gt;
&lt;p&gt;Windows users, don&#39;t despair, there is hope. However, I encourage you to embrace the command line. TortoiseGit does many features but it leaves you working in a SVN mindset and you don&#39;t necessarily know all the functions that are running behind the scenes. Personally, I sometimes use TortoiseSVN for commits and diffs but that&#39;s about it.&lt;/p&gt;
&lt;p&gt;First things first, install &lt;a href=&quot;http://code.google.com/p/msysgit/&quot;&gt;msysgit&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Git Repo Setup&lt;/h2&gt;
&lt;p&gt;First off, let me explain, what you are doing here is creating a clone of the svn repo on your box, in Git. You will be completely autonomous from the SVN repo sending and getting data (or committing and updating using the SVN nomenclature) with a couple commands.&lt;/p&gt;
&lt;h3&gt;Init&lt;/h3&gt;
&lt;p&gt;First things first, create the directory you want your Git repo in and go into that directory. Now open up the the Git Bash in that directory (yes, you can use command prompt, but why on earth would you?) and let&#39;s evaluate this command:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; svn init http://svnserver.yourdomain.tld/path/to/specific/project &lt;span class=&quot;token parameter variable&quot;&gt;--prefix&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;appName/  &lt;span class=&quot;token parameter variable&quot;&gt;--trunk&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Trunk &lt;span class=&quot;token parameter variable&quot;&gt;--tags&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Tags &lt;span class=&quot;token parameter variable&quot;&gt;--branches&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;Branches&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can probably gather that we are telling Git where the specific SVN structured directories are. The keen among you may notice that --stdlayout or -s would do this for us. Honestly, I have found that flag to be flaky so I like to spell it out. YMMV. Also, others may mention we can run clone, I don&#39;t advise this for one major reason, clone does and init and the next command we are going to run (fetch) together. If you have a large repo (which we do) this will take ages. You want to make sure you have your configs setup right before you set that off.&lt;/p&gt;
&lt;h3&gt;Config Adjustment&lt;/h3&gt;
&lt;p&gt;Now, you will notice there is a .git folder in this location. Go into that folder and open the config file in the text editor of your choice. It may look something like this:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;git&quot;&gt;&lt;code class=&quot;language-git&quot;&gt;[svn-remote &lt;span class=&quot;token string&quot;&gt;&quot;svn&quot;&lt;/span&gt;]
	url = http://svnserver.yourdomain.tld
	fetch = path/to/specific/project/Trunk:refs/remotes/appName/trunk
	branches = path/to/specific/project/Branches/*:refs/remotes/appName/*
	tags = path/to/specific/project/Tags/*:refs/remotes/appName/tags/*&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, that&#39;s great if you use the standard layout. If you have some variables, you may have to adjust this. For example, we use a directories under Branches for types of branches (Hotfix, Feature, etc). Git won&#39;t recursively look for branches in that directory so we have to adjust the config. The line we are looking for is below:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;git&quot;&gt;&lt;code class=&quot;language-git&quot;&gt;branches = path/to/specific/project/Branches/*:refs/remotes/appName/*&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So, for our config, I made a slight adjustment:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;git&quot;&gt;&lt;code class=&quot;language-git&quot;&gt;branches = path/to/specific/project/Branches/*/*:refs/remotes/appName/*&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice the extra slash and asterisk before the colon. That is basically telling Git to check in all subdirectories of the Branch directory for branches for actual branches but go ahead and bubble them up to the namespace on the right. On to the pain.&lt;/p&gt;
&lt;h3&gt;Fetch&lt;/h3&gt;
&lt;p&gt;Now, fetches should be pretty simple. It grabs every checkin in your repo in the directory you specified earlier and commits them into your local Git repo. Now, these are local commits, so they are fast, but if you are like us and have over 140,000 versions in your SVN repo, well, it takes a bit. Takes at bit as in, set it to go for the afternoon or before you leave for the day. The command is simply:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; svn fetch&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can only fetch from a certain record and later if you like. This works great if you don&#39;t change the branch you are working out of. You just have to find a version number that has a file change in the directory you are grabbing. So, if you don&#39;t care about anything any earlier than version 120,000, you could go grab the most recent version that is commited to the folder you are getting after that and fetch from there. If the first commit to that directory after 120,000 is 120,653 your fetch command would look like this.&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; svn fetch &lt;span class=&quot;token parameter variable&quot;&gt;-r120653&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Alas, if you are like us and delete and recreate the branch you are looking for, this does not work very well. Also, the first time you forget to fetch based on that record number, it will go all the way back severely throwing off your workflow. I found it&#39;s just easier to get it out of the way to begin with. You have been warned.&lt;/p&gt;
&lt;p&gt;That gets you to a working Git repo cloned off your svn repo. That Gist linked up top has a great workflow that I more or less mimic to do my work. And that&#39;s basically how I do it.&lt;/p&gt;
</description><pubDate>Thu, 11 Nov 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/git-svn-setup/</guid>
    </item>
    <item>
      <title>Craveytrain progress content</title>
      <link>https://craveytrain.com/posts/craveytrain-progress-content/</link><description>&lt;p&gt;So, as it makes sense, I&#39;m gonna blog about the progression of my site. First things first, I am working on the content. First, I&#39;m trying to write it. Nothing groundbreaking, but worthwhile, hopefully. The content is structured in HTML5 (hopefully semantically). Basic navigational elements? Check. Pithy Bio? Check. My profiles on other sites? Check. So what&#39;s missing?&lt;/p&gt;
&lt;p&gt;Contact form for one. I got tired of fighting the spam battle, so now I just link to my profiles on other sites with social features. If you want to reach out to me and don&#39;t already have my contact info, hit me up on one of those networks. They do the hard work for me, so use them for what they are good for.&lt;/p&gt;
&lt;p&gt;Portfolio. I&#39;m not looking for work. There&#39;s not much to show in my portfolio that&#39;s particularly groundbreaking. So, it&#39;s gone, for now. Maybe it will be back when it&#39;s worth looking at. Until then, no need taking up space with it.&lt;/p&gt;
&lt;p&gt;Still considering adding my twitter feed. Not sure if that brings much value to this site though. Especially since I tweet some of my new blog posts. Just not convinced of the value add.&lt;/p&gt;
</description><pubDate>Tue, 27 Jul 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/craveytrain-progress-content/</guid>
    </item>
    <item>
      <title>Making inputs behave</title>
      <link>https://craveytrain.com/posts/making-inputs-behave/</link><description>&lt;p&gt;Anyone who has styled forms understands the frustration that is the input/textarea (or whatever your weapon of choice for masochism). They can be frustrating to make behave consistently. I found a technique I used today that I thought I would share. I seriously doubt I&#39;m the first to use it but none-the-less maybe someone hasn&#39;t seen this before.&lt;/p&gt;
&lt;p&gt;I had always assumed inputs (from here on out, when input is used, assume all inputable form elements) act weirdly. They aren&#39;t inline, they aren&#39;t block, they are just... weird. While most of us have become accustomed to dealing with this, this can be particularly troublesome making them do things like behave like a block level element but have padding.&lt;/p&gt;
&lt;p&gt;In a proper block level element, if you want it to take up the full available width and have padding, it does that by default. Maybe you have to set width: auto. But even when you set an input to block level element, it won&#39;t behave like one.&lt;/p&gt;
&lt;p&gt;CSS3 introduced a nice little property called &lt;a href=&quot;http://www.css3.info/preview/box-sizing/&quot;&gt;box-sizing&lt;/a&gt;. Essentially with a value of border-box this can make an element behave like Quirks mode in IE. Initially my response to this was &amp;quot;WTF?! Why?!&amp;quot;. But this allows you to turn it on for 1 element. 1 element that normally won&#39;t adhere to the box model for block level elements. So, without further ado, full width inputs with padding:&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;input&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;-webkit-box-sizing&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; border-box&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;-moz-box-sizing&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; border-box&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;box-sizing&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; border-box&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 100%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Mon, 26 Jul 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/making-inputs-behave/</guid>
    </item>
    <item>
      <title>July austin JS meetup</title>
      <link>https://craveytrain.com/posts/july-austin-js-meetup/</link><description>&lt;p&gt;Tonight I made it to my second &lt;a href=&quot;http://www.austinjavascript.com/&quot;&gt;Austin JavaScript Meetup&lt;/a&gt; and I left thinking &amp;quot;Dammit! Why have I been missing these?!&amp;quot; Well, I know why but the point is, I&#39;m there now and plan on making the rest of them.&lt;/p&gt;
&lt;p&gt;Tonight &lt;a href=&quot;http://subprint.com/&quot;&gt;Joe McCann&lt;/a&gt; gave a talk (with attempted demo) of node.js. Things went wrong as coding live is often prone to do and we were left with more of an explanation than a demo. Still, Joe&#39;s an excellent speaker, engages the audience well and does a good job of keeping the banter going while working through the issues. I&#39;ve learned the JS group has no lack of banter.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://andrewdupont.net/&quot;&gt;Andrew Dupont&lt;/a&gt; gave a detailed demo about &lt;a href=&quot;http://scripty2.com/&quot;&gt;scripty2&lt;/a&gt;, the successor to &lt;a href=&quot;http://script.aculo.us/&quot;&gt;script.aculo.us&lt;/a&gt; with specific highlighting of the trials and tribulations of CSS Transitions. The picture he painted was grim and discouraging for blazing out on your own and doing the CSS Animations yourself. Of course, that&#39;s where scripty2 comes to save the day. It normalizes the behavior across all reasonable browsers. It&#39;s still in alpha but has some promising merits. I&#39;ll be interested to see where this ends up going.&lt;/p&gt;
&lt;p&gt;All in all, this was a fruitful meeting and I may break down and present something next month. To be certain, I don&#39;t have the polish of these presenters so it&#39;s something I will have to give some thought to. We&#39;ll see...&lt;/p&gt;
</description><pubDate>Wed, 21 Jul 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/july-austin-js-meetup/</guid>
    </item>
    <item>
      <title>Naked</title>
      <link>https://craveytrain.com/posts/naked/</link><description>&lt;p&gt;You may have noticed the new digs. You may have noticed I actually posted something. You may have a noticed a terrible mental visual in your head. Yeah, sorry about that last one. I am starting my blog anew. I have ported over the last few posts that were worthwhile and am primed to get going. However, I made some changes I feel are worth sharing.&lt;/p&gt;
&lt;p&gt;I am not going to try to scope the content of this blog. That is a mistake I have made several times and it just never works out. This is going to be a blog about whatever I feel like posting about. Tech, personal, photos, videos, quotes, code, whatever. My only rule is the general rule I have about putting things in writing (only do it if you don&#39;t mind being quoted on it).&lt;/p&gt;
&lt;p&gt;I have finally moved off &lt;a href=&quot;http://wordpress.org/&quot;&gt;Wordpress&lt;/a&gt;. I have used Wordpress for many years and have loved it, but it&#39;s time for me to try something new. I like the idea of making my content easily accessible, easily postable and some incidental social aspects to it. So I moved my blog over to &lt;a href=&quot;http://www.tumblr.com/&quot;&gt;Tumblr&lt;/a&gt;. However, for blogs about code, code samples and whatnot, I have decided to use &lt;a href=&quot;http://github.com/&quot;&gt;GitHub&lt;/a&gt;. I like the idea of people looking at the code I have written, being able to download it succinctly, do whatever they want with it and even easily recontribute it to the world. GitHub does all these things very well. However, I want to show code examples in my posts. This is where &lt;a href=&quot;http://gist.github.com/&quot;&gt;Gist&lt;/a&gt; comes in. I can put files, snippets of files, whatever on their site and just embed them here. Yes, it&#39;s a script tag. I&#39;m hoping it won&#39;t be too big of an issue, because the convenience for me and I believe for anyone that wants to use the code should be worth whatever compromise I have had to make around progressive enhancement. Github even styles the code for me.&lt;/p&gt;
&lt;p&gt;Which brings me to my last point. Style, I have none. Well, more specifically, my blog has none but hey... if the shoe fits... I will eventually style this blog but I didn&#39;t want it to get in the way of my content or hold me up. So I have decided to launch the site naked. This will force me to concentrate on markup and content of the site, making sure I have things as appropriate as possible, then layering on the design.&lt;/p&gt;
&lt;p&gt;So, here&#39;s to hoping I actually stick with it this time. Oh, and stop picturing my site naked.&lt;/p&gt;
</description><pubDate>Thu, 15 Jul 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/naked/</guid>
    </item>
    <item>
      <title>Styling the stove</title>
      <link>https://craveytrain.com/posts/styling-the-stove/</link><description>&lt;p&gt;I would have never guessed I would be blow drying my range out this evening. The cleaning lady came today and while she does a fantastic job, apparently she got the cooktop too wet. When electronic ignitor switches get too wet, they just start igniting. No gas leak, nothing else wrong other than the ignitors were firing. Turns out a little blow dry session dries them all out and it&#39;s right as rain.&lt;/p&gt;
&lt;p&gt;The thing is, I found this out by Googling for it. I even talked to my dad who is my go to person when I need to know how to fix something and he had never heard of it. I just wonder what would have happened had I not had the internet to figure this out. I suppose I would have paid way too much for a technician to come out and be victim to his or her whim.&lt;/p&gt;
&lt;p&gt;Long live the internet!&lt;/p&gt;
</description><pubDate>Fri, 22 Jan 2010 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/styling-the-stove/</guid>
    </item>
    <item>
      <title>Accessible inline form labels</title>
      <link>https://craveytrain.com/posts/accessible-inline-form-labels/</link><description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Added the check to make sure the input is empty before showing the overlayed label the first time.&lt;/p&gt;
&lt;p&gt;I recently read &lt;a href=&quot;http://trevordavis.net/&quot;&gt;Trevor Davis&lt;/a&gt;‘ post on &lt;a href=&quot;http://trevordavis.net/blog/tutorial/jquery-inline-form-labels/&quot;&gt;inline form labels&lt;/a&gt;. First off, I have the utmost respect for TD. I read his blog regularly and have learned a lot from his posts. While I respect the work he has done for his plugin, I approach things differently. I am a UX Architect for a government site so I have significant concerns about accessibility, semantics and progressive enhancement.&lt;/p&gt;
&lt;p&gt;My approach differs from him in 2 main facets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;He is pulling his inline form label value from the title attribute. I am using the actual label. I feel this is more semantic.&lt;/li&gt;
&lt;li&gt;He is adding and removing a value to the form field. This can cause validation and styling issues. I am going to overlay the label on to the form field therefore not mucking with the value of the field.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not to say my technique is not without issue. It relies on good support of the CSS box model.&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;form&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;contact&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;label&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Name&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;name&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;label&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Email&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;label&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;verbiage&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Message…&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;textarea&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;verbiage&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;verbiage&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;rows&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;5&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;cols&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;25&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;textarea&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Simple markup, just your basic form. I’m an unordered list guy for forms, but certainly your favorite method of marking up forms should be fine. Except for tables, cause that’s just wrong.&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;css&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;form li&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;line-height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1.5&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;margin-bottom&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1.5em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; relative&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token selector&quot;&gt;form label.overlayed&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0.15em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0.5em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;white-space&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nowrap&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; #999&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Again, simple stuff, note the position: relative on the li. That’s sets a bounding box for everything inside of it. Then we are free to use position:absolute for the label (when overlayed). That effectively removes it from layout allowing the inputs to slide left (or up, depending on your form layout).&lt;/p&gt;
&lt;pre class=&quot;line-numbers&quot; data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; oTxtFields &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;input,textarea&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
$&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;oTxtFields&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt; label &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;label[for=&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;id&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;]&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	label&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addClass&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;overlayed&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;val&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		label&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;focus&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;label[for=&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;id&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;]&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;blur&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;val&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
				&lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;label[for=&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;attr&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;id&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;]&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice the use of the overlayed class. I could just style the labels this way by default, but the whole technique here needs javascript. As a general rule of thumb, I use the same technology to add something as I use to manipulate it. Since I will need JavaScript to manipulate the label visibility, I will use JavaScript to put it in position to begin with. I could have styled the label in a default manner (left of the input, above the input, etc) but chose not to for simplicity’s sake.&lt;/p&gt;
&lt;p&gt;This code is relatively simple as well but let me point out a few things. Obviously this is assuming jQuery is loaded. Setting a native object for the form elements saves a lot of processing time. Doing the jQuery lookup every time you reference the object is very expensive. Do it once and store it to an object.&lt;/p&gt;
&lt;p&gt;Moving on, for each form element set a label variable based on the associated label tag then add the class overlayed to the label. This will position the label inside the form field. Since JavaScript is needed for this technique, we want to initialize the whole thing with JavaScript. You don’t want to end up in a situation where the user has stylesheets capabilities but not Javascript leaving them with an overlayed label and no way to hide it.&lt;/p&gt;
&lt;p&gt;Finally we add some event listeners for each form field. The first is a focus which does a lookup on the label associated with the field that has focus and hides it using jQuery’s hide method.&lt;/p&gt;
&lt;p&gt;The second event listener added is for blur. If, on blur, the form field value attribute is empty we show the associated label using jQuery’s show method.&lt;/p&gt;
&lt;p&gt;That’s about it. I hope you found this technique useful. If nothing else, maybe you found this to be an alternative to Trevor’s inline form label technique. If I get enough interest I will look into creating a jQuery plugin for this. Feel free to wholesale reuse this technique. I hardly coined it, I just blogged it.&lt;/p&gt;
</description><pubDate>Wed, 17 Jun 2009 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/accessible-inline-form-labels/</guid>
    </item>
    <item>
      <title>Bidet</title>
      <link>https://craveytrain.com/posts/bidet/</link><description>&lt;p&gt;We are back and it was a great, albeit long, trip. It was a beautiful wedding and a blissful honeymoon. However, I have tales to tell. Really, just my perspective on things. Though these aren’t in chronological order, I thought I would start with the story that has been told a couple times already so it has some form.&lt;/p&gt;
&lt;p&gt;“And here is your &lt;a href=&quot;http://en.wikipedia.org/wiki/Bidet&quot;&gt;bidet&lt;/a&gt;” our butler told us as he gave us a tour of our villa. I had heard of a bidet, but I had never actually seen one. See, down in Texas, we uh… just use paper. And admittedly, even in my time traveling, I have never happened across one. I knew what it was for, and honestly, I was curious. I was determined to figure it out.&lt;/p&gt;
&lt;p&gt;I took a gander at it, it had a hot water knob on the left, a cold water knob on the right and a knob in the middle. Ok, not unlike a shower. There’s a bulbous looking water spout in the bottom of the bowl. It’s like an upside down shower head. Ok, I see where this is going. Or so I thought.&lt;/p&gt;
&lt;p&gt;After dancing around the idea of trying it out for a day or so, the humidity and just perpetual sweating got the best of me. I was gonna give it a shot (no pun intended). So, turn on the hot water, it starts filling up the bowl from the sides similar to how a toilet does when you flush it. Well, I do know what this device is for, and I’m not about to stick my hands down in that bowl. So I add a little cold to try to get a warm water. I turn the middle knob just a bit, to try to get a water fountain effect. Just high enough for me to feel the water without having to dunk my hand in the bowl. Seemed ok.&lt;/p&gt;
&lt;p&gt;Then I really started to consider how to use this apparatus. I mean, how do you mount this thing? I see the knobs are in the back, do you face the knobs so you have control? But it’s shaped like a toilet bowl, so I sit like I would on a toilet bowl? But that means I have to reach behind me to control the temperature and water pressure. That doesn’t seem natural. Then I really notice something that threw me off and ended up being my demise.&lt;/p&gt;
&lt;p&gt;There is no seat on this thing. It’s like a toilet without a seat. Just a porcelain bowl. I have visions of what the toilet bowl can look like in my house with the seat up and decide, there is no way I’m sitting directly on that. It looks clean enough, sure. But still, no way. Turns out, that was exactly what I should have done.&lt;/p&gt;
&lt;p&gt;So, I decide to do the chick thing and squat over it. Unfortunately, I forgot to take gravity into consideration in all this. I got into what I thought was position and turned up the water pressure. That’s where things got messy.&lt;/p&gt;
&lt;p&gt;First off, I initially missed. When I say I missed, I mean I was soaking my inner thigh. Just totally missed the important parts all together. Ok, adjust. But wait, why was my calf wet? Crap, I didn’t squat down far enough, the water is running down my leg. And into my shoes. Yes, at my ankles were my underwear, my pants, socks and shoes, now totally soaked. So now I’m reaching behind me, looking for the water pressure knob to turn it off and that is causing me to move and water is spraying everywhere. Both legs, up my shirt, up my nose, even in my hair (turns out I had the water pressure up way higher than it needed to be). By the time I get it turned off, I am completely soaked from head to toe and there is standing water in the toilet room. It’s leaking out under the door and my wife is asking what the hell I am doing in there. Thankfully I had the door locked so she couldn’t come in and see for herself. I went straight to the shower, did not pass go, did not collect $200.&lt;/p&gt;
&lt;p&gt;Since then I have looked up how to use it and if I encounter one again, I may actually try it again, maybe.&lt;/p&gt;
</description><pubDate>Wed, 06 Dec 2006 00:00:00 +0000</pubDate>
      <dc:creator>Mike Cravey</dc:creator>
      <guid>https://craveytrain.com/posts/bidet/</guid>
    </item>
  </channel>
</rss>