<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

 <channel>

   <title>Firteen Design</title>
   <link>http://firteendesign.com/</link>
   <language>en-us</language>
   <lastBuildDate>Mon, 20 May 2013 06:19:23 -0700</lastBuildDate>
   <docs>http://firteendesign.com/blog/RSS/</docs>
   <atom:link href="http://firteendesign.com/blog/RSS/" rel="self" type="application/rss+xml" />
   <managingEditor>knoxburry@gmail.com (Langel)</managingEditor>
   <webMaster>knoxburry@gmail.com (Langel)</webMaster>

   <description>Creative and practical solutions.</description>

<item>
 <title>Learning Vim because it's 20 Years Old</title>
 <description><![CDATA[<p>I was perusing my RSS aggregator and stumbled across <a href="http://www.vectorstorm.org/2011/11/03/happy-birthday-vim/">Vector Storm's birthday wish</a> to <a href="http://vim.org">vim</a>, a grandfather of text editors.  I can't think of another piece of software that has changed so little over 20 years and is still so commonplace.  Kind of neat.</p><p>I just started learning how to use vim a couple months ago.  I'm a windows guy, but, at the office I've been working in, I am surrounded by terminal nerds.  Not the command window that's a crude doppelganger of DOS, but a proper bash terminal.  I didn't even know such a thing was an intrinsic element to the OSX series.  So I'm not running terminal vim; I'm running gvim for windows because I am a g.  </p><p>I imagine everything is pretty much the same between OSes.  Of course, except for the lack of simple terminal commands.  Windows doesn't <a href="http://en.wikipedia.org/wiki/Grep">grep</a>.  gVim comes with it's own version of it, but it's remarkably slow, and (perhaps I'm an idiot) the search has to be ran again every time you open a file in the found list.  So, if I'm going to search through a ton of files for a string of text, I regress to my trusty, rusty old friend <a href="http://www.textpad.com/">TextPad</a> to do the job.</p><p>For the most part, I really like it.  There is a learning curve.  I've got the basics, but I really should start spending a minute or two perusing the shortcut list before I start a work day.  I'm definitely far from reaching true potential with vim.</p>]]></description>
 <pubDate>Mon, 21 Nov 2011 14:26:15 -0700</pubDate>
 <guid>http://firteendesign.com/blog/View/37/Learning%2BVim%2Bbecause%2Bit%2527s%2B20%2BYears%2BOld/</guid>
</item>
<item>
 <title>I Have a New Job</title>
 <description><![CDATA[<p>For the past two years, I have been mainly surviving off a bouncer position at a <a href="http://blindpigmusic.com">local club and bar</a>.  I've slowly moved up.  Tonight will be the first time I bar tend an actual show!  But this is not what I mean by 'new job'.</p><p>I have been doing web work here and there, mostly for friends.  I did have a couple contacts for a while that outsourced work to me.  Somewhen, I realized that these 'over-the-net' work relationships were not only frustrating, but unsatisfying as well.  I botched one up because the designer had weeks in between each update, and I started (re)working from an older, incorrect iteration of the project resulting in a lot of confusion and lost hours.  The other, I simply lost interest: Each project was something different, often times a different developer platform and/or language.  </p><p>And, so, I pretty much decided I wasn't going to seek out web work any longer;  That I had my hobbies, and tinkering on web sites was one of them.  If a friend needs help, I'll help for dirt cheap, but only so much.  </p><p>Working at the bar you meet a lot of interesting characters.  There are very few code monkeys.  One of them has a startup on his hands, venture capital and all that.  They're a little behind schedule and need someone to handle the cosmetics of the project, the user interface.  After several months of hearing he might have a need for me, I was called in for an interview.  They have a really nice office in downtown Ann Arbor.  We talked about the project for 30 minutes, one of them drinking a beer, and then they made an offer I couldn't refuse.</p><p>They didn't make me sign a nondisclosure agreement, but they won't let me keep any code on my laptop in case it gets stolen.  So, it is a hush-hush *don't blab about our plans* sort of operation.  I run a local server off a flash drive that stays there.  They've got me adjusting php kohana template files, CSS and jQuery javascript.  A perfect fit for my skill set.  </p><p>I've had to learn some new stuff too:  Commit, push, and pull with a <a href="http://en.wikipedia.org/wiki/Git_(software)">Git</a> repository (and the whole mess of setting that up in Windows).  <a href="http://en.wikipedia.org/wiki/Vim_(text_editor)">Vim</a> because suddenly my favorite text editor of the past 8 years wasn't cool anymore.  The OSX terminal looks pretty snazzy!  Who knew?!?!  Oh, and the insanity that is kohana's directory tree.  :P</p><p>I'm gonna keep both jobs.  It all feels really good, like going down the correct path.  Funny how what you want is out of reach until you give up on it.  xD</p>]]></description>
 <pubDate>Sat, 15 Oct 2011 11:52:26 -0700</pubDate>
 <guid>http://firteendesign.com/blog/View/36/I%2BHave%2Ba%2BNew%2BJob/</guid>
</item>
<item>
 <title>Making BotB's entry Table Better for Sorting</title>
 <description><![CDATA[<p>For the zillionth time I've decided it would be cool if BotB's radio included the One Hour Battle entries.  It would really spice it up.  Right now the radio only plays back tracks from the major battles which are guaranteed to have .mp3 files ready.  </p><p>Sometimes, during chip battles, a track can wind up in the radio playlist that doesn't have it's .mp3 render yet.  I could probably go on and on about the duct tape that holds BotB together... Basically, the entry table is not properly setup to generate dynamic playlists.  </p><p>So, my bitwise brain decided I would store a single byte header field in the table.  I was thinking I could do bitwise searches on this byte.  I mapped out the bits to represent future search criteria like so :</p><p><code>ABBCDEFF</p><p>A - 0 = entry / 1 = bit<br/>BB - (two bit number) - 0 = audio / 1 = visual / 2 = audio+visual / 3 = meta|code<br/>C - 0 = no stream / 1 = stream available<br/>D - 0 = loFi / 1 = hiQ<br/>E - 0 = stream is source / 1 = stream is render<br/>FF - unassigned for future use?</code></p><p>These bit flags would make for some real sorting power.  Bits 'BB' will make for future slide shows.  Bit 'D' states if the entry is 8bit/chip or not making it easy to disable playback of either of the BotB 'subcultures'. lol</p><p>To initiate this scheme into the database, I thought I should create default values attached to the battle formats.  BotB currently has 36 battle formats, there would be a lot of redundancy.  I quickly realized that the BotBr point types assigned to each format have a better correlation to these default headers.  </p><p>Funny thing, though, PHP has no bitwise notation (besides number_format() conversions); MySQL uses the b'0000000' style.  I created an array of byte values relative to the point types and ideal header values to test my concept.  </p><p>My concept was hogwash.  Too much assembly language too long ago.  This is not a very feasible model.  For some reason I thought making checks on a single bit, whether it's on or off, was a simple thing.  I quickly found myself nesting logical statements in a mountain of parenthesis and none of it was working the way I wanted.</p><p>Let's remap them bits to table fields, I guess . . .</p><p><code>A - `bit` boolean, default false<br/>B - `medium` tinyInt values 0..3 (or more!) audio/video/etc....<br/>C - `render` varChar holds the stream filename or 'same' if same as entry file<br/>D - `q` boolean, default true<br/>E - refer to C; if C is empty there is no stream</code></p><p>For a random audio playlist I'd -<br/><code> .. WHERE `medium` = 0 && `render` != '' ORDER BY RAND() LIMIT 50;</code> - or something like that.  MySQL doesn't actually have boolean field types, so I'm using 1 byte tinyInts.  I already have a `render` field, but it looks like it was something I had started earlier and never finished.  And I found out why.  If an entry has an MP3 then it's filename is saved in the `info` array, and, through a few evolutions of BotB, the values have a different schema over time.  Rather amazing that it works at all!  :D</p><p>So, let's tidy up.  Big moves!  I already moved (or copied) all the entry files to their battle directories.  All render files from BotB 1.0 were clumped together in the same folder.  Write a little code, copy/rename them suckers, move them to their respective battle folders.</p><p>I took a two day break here.  I had to work at the bar and focused on starting the first Summer Chip battle.  I also added a Battle Artwork format; the entries are chosen at random to be displayed as the Battle Artwork until one is decided in the resluts.  This, of course, created it's own batch of little bugs I had to stomp.</p><p>But back to the project at hand!  I was on the fence about how to store how the point_types affect these entry flags.  When in doubt, draw a map!  I realized that `bit` and `render` have nothing to do with the point types.  `bit` is set to true if the battle is currently in a Bit Phase.  `render` depends on the entry's actual filetype.</p><p>That leaves `medium` and `q` so I made two arrays instead of creating a database table.  I wrote a little script to update the entry table and then moved elements of that script into the entry submission handling code.  Everything seemed to update fine and the new Summer Chip submissions are behaving as they should.</p><p>I tend to work on BotB in spurts, mainly when their is a big battle which spurs website activity.  This project had me writing a lot of little scripts to view, manipulate, and move database entries and server files.  This marks some kind of comfort zone in these kind of activities.  Normally, I worry very much about loosing important data very accidently.</p>]]></description>
 <pubDate>Sun, 14 Aug 2011 16:04:40 -0700</pubDate>
 <guid>http://firteendesign.com/blog/View/35/Making%2BBotB%2527s%2Bentry%2BTable%2BBetter%2Bfor%2BSorting/</guid>
</item>
<item>
 <title>Shopify blog to Feedburner to Yahoo Pipes</title>
 <description><![CDATA[<p>A long time ago I had the idea to amalgamate all the different blog feeds that fall under the Firteen banner.  A couple weeks back, I slapped together <a href="firteenmedia.com">firteenMedia</a>, a website that will slowly morph into the main hub for all Firteen activity.  Without much effort using yahoo Pipes, I created an amalgamation of RSS feeds, sorted them by date, and then dynamically loaded them into the new website using jQuery like so &mdash;</p><p><code>var output;<br/>$.getJSON("http://pipes.yahoo.com/pipes/pipe.run?_id=20dda4d7cfb4a692ad14f41c89b45f8c&_render=json", function(data) {<br/>  var feedBox = $('#feedBox');<br/>  $.each(data.value.items, function( i, item) {<br/>    output = '&lt;a href="'+item.link+'">'+item.title+'&lt/a>&ltbr>';<br/>    output += '&ltp>'+item.description+'&lt/p>';<br/>    feedBox.append('&ltdiv>'+output+'&lt/div>');<br/>  });<br/>});</code></p><p>Today, I opted to add the <a href="http://firteen.myshopify.com/">Firteen Distro</a> blog feed.  Firteen Distro is an online store hosted by <a href="http://shopify.com">Shopify</a>.  I've had it running for a year, it's a pretty nice setup with a monthly cost and I haven't done too many sales, but without a certain level of focus things don't fruit, right?  Anyways, they give you a blog for your store and it has a feed, but it only comes in the <a href="http://en.wikipedia.org/wiki/Atom_(standard)">Atom</a> variety and all my other feeds are <a href="http://en.wikipedia.org/wiki/Rss">RSS</a>.  Both of these two feed standards contain the same basic information in an XML style document, but they also give important data different labels which makes sorting in Yahoo Pipes a big pain in the arse.  </p><p>At first I 'Renamed' the field 'item.summary.content' to 'description' which gets the blog post's text properly converted.  Unfortunately, getting 'published' (Atom's publish date) converted to 'pubDate' is not as easy; they are formatted completely different.  I looked all over Pipes for an Atom-to-RSS converter.  Didn't find one.  So, next, I added another webservice . . .</p><p><img src="http://firteendesign.com/data/blog_attach/33/firteen-feedburner.jpg"></p><p>Once you have <a href="http://feedburner.google.com">feedburner</a> handling your feed, you can convert it to any feed protocol you want.  Hit the 'Optimize' tab and towards the bottom of the side menu is 'Convert Format Burner'.  On the page it also says something about SmartFeed, just know that SmartFeed by itself will not get an RSS conversion into Pipes.</p><p><img src="http://firteendesign.com/data/blog_attach/33/firteen-pipes.jpg"></p><p>Above is an image of my current Pipes configuration.  I have to admit, I love playing with tentacles.  =D  But now I have a new set of problems.  Pipes might not be designed to do exactly what I want, it feels like it's meant to do a lot more in a different direction than my pet project.  Right now, I'm scratching my head, trying to figure out how I attach a blog's title and URL to each post for use on the firteenMedia hub.  I might need to scrap the Pipes altogether and use php's built-in XML class instead.  </p>]]></description>
 <pubDate>Sat, 12 Mar 2011 15:07:22 -0700</pubDate>
 <guid>http://firteendesign.com/blog/View/33/Shopify%2Bblog%2Bto%2BFeedburner%2Bto%2BYahoo%2BPipes/</guid>
</item>
<item>
 <title>The WordPress Ping List</title>
 <description><![CDATA[<p>Today, I was looking for a wordpress plugin that used shopify's api to list products in a sidebar.  I didn't find that exactly.  And because it was such a foreign concept to google, I saw some weird suggestions.  What is all this pinging again?</p><p>Well, in WordPress terms, it's a bit more complicated than a simple <a href="http://en.wikipedia.org/wiki/Ping">network ping</a>.  When you publish an article, WordPress sends out a message to ping service websites.  These sights are then supposed to post a link back to your blog for SEO popularity and shear fun's sake.  </p><p>There are a handful of long ping lists that popup when you search for them.  I randomly picked 6 sites from this list, and they were all down having an empty root showing or their domain for sale.  Google is in the list in many variations, but a little investigation shows google would rather you <a href="http://blogsearch.google.com/ping">add your blog</a> to their <a href="http://blogsearch.google.com/">blogsearch</a>.  Yahoo might be a similar story.  Pinging to dead sites will slow your site down; your blog has to wait until the timeout.  I wonder how many of these services are actually experiments with <a href="http://en.wikipedia.org/wiki/Spamdexing">spamdexing</a>?  Regardless, the <a href="http://en.wikipedia.org/wiki/PageRank">pagerank</a> for a fledgling cloud experiment is probably close to none. </p><p>I'm not directly experienced on this matter.  But it all seems a little shady.  Search '<a href="http://www.google.com/search?rlz=1C1_____enUS391US392&sourceid=chrome&ie=UTF-8&q=ping+index+blog">ping index blog</a>' and you've got all sorts of multi-ping submitting services.  How many of these ping services result in more spam attempts in your blog's comments?  I have no idea!</p><p>So, for now, I will stick to the <a href="http://codex.wordpress.org/Update_Services#XML-RPC_Ping_Services">suggested ping sites</a> in the WordPress codex.</p>]]></description>
 <pubDate>Sat, 12 Feb 2011 15:14:59 -0700</pubDate>
 <guid>http://firteendesign.com/blog/View/32/The%2BWordPress%2BPing%2BList/</guid>
</item>

 </channel>

</rss>
