<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Aptiva's Code Snippets</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 17 May 2008 05:18:44 GMT</pubDate>
    <description>DZone Snippets: Aptiva's Code Snippets</description>
    <item>
      <title>How to draw your own table header... (with borders)</title>
      <link>http://snippets.dzone.com/posts/show/3931</link>
      <description>// It's a bit  hacky at the beginning, but nstableheadercell wasn't exactly making things easy for me&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;- (void)_drawThemeContents:(NSRect)cellFrame highlighted:(BOOL)highlighted inView:(NSTableHeaderView *)view;&lt;br /&gt;{&lt;br /&gt;	int index = [view columnAtPoint:NSMakePoint(cellFrame.origin.x + 1,cellFrame.origin.y + 1)];&lt;br /&gt;	NSRect headerRect;&lt;br /&gt;	if(index != -1)&lt;br /&gt;		headerRect = [view headerRectOfColumn:index];&lt;br /&gt;	else&lt;br /&gt;		headerRect = NSZeroRect;&lt;br /&gt;	&lt;br /&gt;	[headerImage drawInRect:cellFrame&lt;br /&gt;				   fromRect:NSZeroRect&lt;br /&gt;				  operation:NSCompositeSourceOver&lt;br /&gt;				   fraction:1.0];&lt;br /&gt;	&lt;br /&gt;	[[NSColor colorWithCalibratedRed:207.0/255.0&lt;br /&gt;							   green:207.0/255.0&lt;br /&gt;								blue:207.0/255.0&lt;br /&gt;							   alpha:1.0] set];&lt;br /&gt;	NSRectFill(NSMakeRect(headerRect.origin.x, headerRect.origin.y + 1, headerRect.size.width, headerRect.size.height - 2));&lt;br /&gt;	[headerImage drawInRect:NSMakeRect(headerRect.origin.x, headerRect.origin.y, headerRect.size.width - 1, headerRect.size.height)&lt;br /&gt;				   fromRect:NSZeroRect&lt;br /&gt;				  operation:NSCompositeSourceOver&lt;br /&gt;				   fraction:1.0];&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 28 Apr 2007 19:48:47 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3931</guid>
      <author>aptiva (Fj&#195;&#182;lnir &#195;?sgeirsson)</author>
    </item>
    <item>
      <title>How to make the system notify you of audio cd insertion</title>
      <link>http://snippets.dzone.com/posts/show/3856</link>
      <description>// Uses the DiskArbitration framework to notify ya of when new audio cds are inserted&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;NSDictionary *match = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"IOCDMedia", [NSNumber numberWithBool:YES], nil] forKeys:[NSArray arrayWithObjects:(NSString *)kDADiskDescriptionMediaKindKey, kDADiskDescriptionMediaWholeKey, nil]];&lt;br /&gt;		&lt;br /&gt;_session = DASessionCreate(kCFAllocatorDefault);&lt;br /&gt;DASessionScheduleWithRunLoop(_session, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);&lt;br /&gt;DARegisterDiskAppearedCallback(_session, (CFDictionaryRef)match, diskAppearedCallback, NULL);&lt;br /&gt;DARegisterDiskDisappearedCallback(_session, (CFDictionaryRef)match, diskDisappearedCallback, NULL);&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 23 Apr 2007 12:05:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3856</guid>
      <author>aptiva (Fj&#195;&#182;lnir &#195;?sgeirsson)</author>
    </item>
    <item>
      <title>Genres defined in ID3v2 and Winamp extensions</title>
      <link>http://snippets.dzone.com/posts/show/3756</link>
      <description>Why oh why not just store strings?&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;NSMutableArray *genres = [NSMutableArray array];&lt;br /&gt;[genres addObject:@"Blues"];&lt;br /&gt;[genres addObject:@"Classic Rock"];&lt;br /&gt;[genres addObject:@"Country"];&lt;br /&gt;[genres addObject:@"Dance"];&lt;br /&gt;[genres addObject:@"Disco"];&lt;br /&gt;[genres addObject:@"Funk"];&lt;br /&gt;[genres addObject:@"Grunge"];&lt;br /&gt;[genres addObject:@"Hip-Hop"];&lt;br /&gt;[genres addObject:@"Jazz"];&lt;br /&gt;[genres addObject:@"Metal"];&lt;br /&gt;[genres addObject:@"New Age"];&lt;br /&gt;[genres addObject:@"Oldies"];&lt;br /&gt;[genres addObject:@"Other"];&lt;br /&gt;[genres addObject:@"Pop"];&lt;br /&gt;[genres addObject:@"R&amp;B"];&lt;br /&gt;[genres addObject:@"Rap"];&lt;br /&gt;[genres addObject:@"Reggae"];&lt;br /&gt;[genres addObject:@"Rock"];&lt;br /&gt;[genres addObject:@"Techno"];&lt;br /&gt;[genres addObject:@"Industrial"];&lt;br /&gt;[genres addObject:@"Alternative"];&lt;br /&gt;[genres addObject:@"Ska"];&lt;br /&gt;[genres addObject:@"Death Metal"];&lt;br /&gt;[genres addObject:@"Pranks"];&lt;br /&gt;[genres addObject:@"Soundtrack"];&lt;br /&gt;[genres addObject:@"Euro-Techno"];&lt;br /&gt;[genres addObject:@"Ambient"];&lt;br /&gt;[genres addObject:@"Trip-Hop"];&lt;br /&gt;[genres addObject:@"Vocal"];&lt;br /&gt;[genres addObject:@"Jazz+Funk"];&lt;br /&gt;[genres addObject:@"Fusion"];&lt;br /&gt;[genres addObject:@"Trance"];&lt;br /&gt;[genres addObject:@"Classical"];&lt;br /&gt;[genres addObject:@"Instrumental"];&lt;br /&gt;[genres addObject:@"Acid"];&lt;br /&gt;[genres addObject:@"House"];&lt;br /&gt;[genres addObject:@"Game"];&lt;br /&gt;[genres addObject:@"Sound Clip"];&lt;br /&gt;[genres addObject:@"Gospel"];&lt;br /&gt;[genres addObject:@"Noise"];&lt;br /&gt;[genres addObject:@"AlternRock"];&lt;br /&gt;[genres addObject:@"Bass"];&lt;br /&gt;[genres addObject:@"Soul"];&lt;br /&gt;[genres addObject:@"Punk"];&lt;br /&gt;[genres addObject:@"Space"];&lt;br /&gt;[genres addObject:@"Meditative"];&lt;br /&gt;[genres addObject:@"Instrumental Pop"];&lt;br /&gt;[genres addObject:@"Instrumental Rock"];&lt;br /&gt;[genres addObject:@"Ethnic"];&lt;br /&gt;[genres addObject:@"Gothic"];&lt;br /&gt;[genres addObject:@"Darkwave"];&lt;br /&gt;[genres addObject:@"Techno-Industrial"];&lt;br /&gt;[genres addObject:@"Electronic"];&lt;br /&gt;[genres addObject:@"Pop-Folk"];&lt;br /&gt;[genres addObject:@"Eurodance"];&lt;br /&gt;[genres addObject:@"Dream"];&lt;br /&gt;[genres addObject:@"Southern Rock"];&lt;br /&gt;[genres addObject:@"Comedy"];&lt;br /&gt;[genres addObject:@"Cult"];&lt;br /&gt;[genres addObject:@"Gangsta"];&lt;br /&gt;[genres addObject:@"Top 40"];&lt;br /&gt;[genres addObject:@"Christian Rap"];&lt;br /&gt;[genres addObject:@"Pop/Funk"];&lt;br /&gt;[genres addObject:@"Jungle"];&lt;br /&gt;[genres addObject:@"Native American"];&lt;br /&gt;[genres addObject:@"Cabaret"];&lt;br /&gt;[genres addObject:@"New Wave"];&lt;br /&gt;[genres addObject:@"Psychadelic"];&lt;br /&gt;[genres addObject:@"Rave"];&lt;br /&gt;[genres addObject:@"Showtunes"];&lt;br /&gt;[genres addObject:@"Trailer"];&lt;br /&gt;[genres addObject:@"Lo-Fi"];&lt;br /&gt;[genres addObject:@"Tribal"];&lt;br /&gt;[genres addObject:@"Acid Punk"];&lt;br /&gt;[genres addObject:@"Acid Jazz"];&lt;br /&gt;[genres addObject:@"Polka"];&lt;br /&gt;[genres addObject:@"Retro"];&lt;br /&gt;[genres addObject:@"Musical"];&lt;br /&gt;[genres addObject:@"Rock &amp; Roll"];&lt;br /&gt;[genres addObject:@"Hard Rock"];&lt;br /&gt;[genres addObject:@"Folk"];&lt;br /&gt;[genres addObject:@"Folk-Rock"];&lt;br /&gt;[genres addObject:@"National Folk"];&lt;br /&gt;[genres addObject:@"Swing"];&lt;br /&gt;[genres addObject:@"Fast Fusion"];&lt;br /&gt;[genres addObject:@"Bebob"];&lt;br /&gt;[genres addObject:@"Latin"];&lt;br /&gt;[genres addObject:@"Revival"];&lt;br /&gt;[genres addObject:@"Celtic"];&lt;br /&gt;[genres addObject:@"Bluegrass"];&lt;br /&gt;[genres addObject:@"Avantgarde"];&lt;br /&gt;[genres addObject:@"Gothic Rock"];&lt;br /&gt;[genres addObject:@"Progressive Rock"];&lt;br /&gt;[genres addObject:@"Psychedelic Rock"];&lt;br /&gt;[genres addObject:@"Symphonic Rock"];&lt;br /&gt;[genres addObject:@"Slow Rock"];&lt;br /&gt;[genres addObject:@"Big Band"];&lt;br /&gt;[genres addObject:@"Chorus"];&lt;br /&gt;[genres addObject:@"Easy Listening"];&lt;br /&gt;[genres addObject:@"Acoustic"];&lt;br /&gt;[genres addObject:@"Humour"];&lt;br /&gt;[genres addObject:@"Speech"];&lt;br /&gt;[genres addObject:@"Chanson"];&lt;br /&gt;[genres addObject:@"Opera"];&lt;br /&gt;[genres addObject:@"Chamber Music"];&lt;br /&gt;[genres addObject:@"Sonata"];&lt;br /&gt;[genres addObject:@"Symphony"];&lt;br /&gt;[genres addObject:@"Booty Bass"];&lt;br /&gt;[genres addObject:@"Primus"];&lt;br /&gt;[genres addObject:@"Porn Groove"];&lt;br /&gt;[genres addObject:@"Satire"];&lt;br /&gt;[genres addObject:@"Slow Jam"];&lt;br /&gt;[genres addObject:@"Club"];&lt;br /&gt;[genres addObject:@"Tango"];&lt;br /&gt;[genres addObject:@"Samba"];&lt;br /&gt;[genres addObject:@"Folklore"];&lt;br /&gt;[genres addObject:@"Ballad"];&lt;br /&gt;[genres addObject:@"Power Ballad"];&lt;br /&gt;[genres addObject:@"Rhythmic Soul"];&lt;br /&gt;[genres addObject:@"Freestyle"];&lt;br /&gt;[genres addObject:@"Duet"];&lt;br /&gt;[genres addObject:@"Punk Rock"];&lt;br /&gt;[genres addObject:@"Drum Solo"];&lt;br /&gt;[genres addObject:@"A capella"];&lt;br /&gt;[genres addObject:@"Euro-House"];&lt;br /&gt;[genres addObject:@"Dance Hall"];&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 02 Apr 2007 22:25:42 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3756</guid>
      <author>aptiva (Fj&#195;&#182;lnir &#195;?sgeirsson)</author>
    </item>
    <item>
      <title>Matrix rotator</title>
      <link>http://snippets.dzone.com/posts/show/3404</link>
      <description>This method rotates a matrix&lt;br /&gt;Example output:&lt;br /&gt;~/Desktop% ruby rotate.rb&lt;br /&gt;normal&lt;br /&gt;12345&lt;br /&gt;00000&lt;br /&gt;fooba&lt;br /&gt;rotated left&lt;br /&gt;50a&lt;br /&gt;40b&lt;br /&gt;30o&lt;br /&gt;20o&lt;br /&gt;10f&lt;br /&gt;rotated right&lt;br /&gt;f01&lt;br /&gt;o02&lt;br /&gt;o03&lt;br /&gt;b04&lt;br /&gt;a05&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def rotateMatrix(matrix, direction)&lt;br /&gt;  # - You must Rotate the matrix neo!&lt;br /&gt;  oldMap = matrix&lt;br /&gt;&lt;br /&gt;  # Get the number of lines in the old map (they're the new columns)&lt;br /&gt;  lineCount = oldMap.size&lt;br /&gt;  # Get the number of columns in the old map (We have that many rows now)&lt;br /&gt;  columnCount = oldMap[0].size&lt;br /&gt;  @map = []&lt;br /&gt;  columnCount.times { @map.push [] }&lt;br /&gt;&lt;br /&gt;  # Loop through every line in the old map, retrieve the appropriate column&lt;br /&gt;  # and make a horizontal column with it's contents&lt;br /&gt;  # we'll take one (old)line at a time and rotate it.&lt;br /&gt;  onLine = 0&lt;br /&gt;  oldMap.each do |oldLine|&lt;br /&gt;    onColumn = 0&lt;br /&gt;    oldLine.each do&lt;br /&gt;      case direction&lt;br /&gt;      when :right&lt;br /&gt;        @map[(columnCount - 1) - onColumn][(lineCount - 1) - onLine] = oldLine[(columnCount - 1) - onColumn]&lt;br /&gt;      when :left&lt;br /&gt;        @map[onColumn][onLine] = oldLine[(columnCount - 1) - onColumn]&lt;br /&gt;      end&lt;br /&gt;      onColumn += 1&lt;br /&gt;    end&lt;br /&gt;    onLine += 1&lt;br /&gt;  end&lt;br /&gt;  @map&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def rotateRight(matrix)&lt;br /&gt;  rotateMatrix(matrix, :right)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def rotateLeft(matrix)&lt;br /&gt;  rotateMatrix(matrix, :left)&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 02 Feb 2007 01:07:05 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3404</guid>
      <author>aptiva (Fj&#195;&#182;lnir &#195;?sgeirsson)</author>
    </item>
    <item>
      <title>Alphabetical sorter</title>
      <link>http://snippets.dzone.com/posts/show/2705</link>
      <description>// This function sorts an array of objects that include this code, alphabetically&lt;br /&gt;// That's nothing new, except this sorts strings starting with a number correctly!&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  # ---&lt;br /&gt;  # Sorting&lt;br /&gt;  # ---&lt;br /&gt;def &lt;=&gt;(other)&lt;br /&gt;    regex = /^[\d]+/&lt;br /&gt;    if self.title =~ regex&lt;br /&gt;      our_num = Regexp.last_match[0].to_i&lt;br /&gt;      if other.title =~ regex&lt;br /&gt;        other_num = Regexp.last_match[0].to_i&lt;br /&gt;        return our_num &lt;=&gt; other_num&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;    self.title &lt;=&gt; other.title&lt;br /&gt;  end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 23 Sep 2006 19:15:44 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2705</guid>
      <author>aptiva (Fj&#195;&#182;lnir &#195;?sgeirsson)</author>
    </item>
    <item>
      <title>File icon giver/getter/whatever</title>
      <link>http://snippets.dzone.com/posts/show/2560</link>
      <description>This code uses acts_as_attachment (that's the attachment.filename) but you can of course replace it with anything.&lt;br /&gt;It gets the file extension then looks up that extension in a dir full of files named extension.png&lt;br /&gt;if none is found, unknown.png is used&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;%&lt;br /&gt;extension = File.extname(attachment.filename).gsub(/\./, "")&lt;br /&gt;# get a file icon&lt;br /&gt;icon_path = nil&lt;br /&gt;Dir.entries("#{RAILS_ROOT}/public/images/filetypes").each do |entry|&lt;br /&gt;	entry_extension = File.extname(entry)&lt;br /&gt;	if entry.gsub(entry_extension, "") === extension&lt;br /&gt;		icon_path = "/images/filetypes/" + entry&lt;br /&gt;		break&lt;br /&gt;	end&lt;br /&gt;end&lt;br /&gt;icon_path = "/images/filetypes/unknown.png" if icon_path.nil?&lt;br /&gt; %&gt;&lt;br /&gt;&lt;%= image_tag icon_path %&gt;&lt;br /&gt;&lt;span class="attachment_name"&gt;&lt;%= attachment.filename %&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 07 Sep 2006 19:32:28 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2560</guid>
      <author>aptiva (Fj&#195;&#182;lnir &#195;?sgeirsson)</author>
    </item>
    <item>
      <title>all_children!</title>
      <link>http://snippets.dzone.com/posts/show/2523</link>
      <description>This snippet just gives you all the children of a model that acts_as_tree&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  def all_children&lt;br /&gt;    Page.all_children_for self&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def self.all_children_for(parent, arr = [])&lt;br /&gt;    parent.children.each { |child| arr.push child }&lt;br /&gt;    parent.children.each { |child| all_children_for child, arr }&lt;br /&gt;    arr&lt;br /&gt;  end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 03 Sep 2006 16:11:27 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2523</guid>
      <author>aptiva (Fj&#195;&#182;lnir &#195;?sgeirsson)</author>
    </item>
    <item>
      <title>Youtube url code</title>
      <link>http://snippets.dzone.com/posts/show/2522</link>
      <description>This is a part of a ruby-cocoa app I'm writing.&lt;br /&gt;(TubeSock is just terrible)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'net/http'&lt;br /&gt;require 'uri'&lt;br /&gt;&lt;br /&gt;class YouTubeMovie&lt;br /&gt;  attr_accessor :viewer_url, :movie_url, :get_params&lt;br /&gt;  def initialize(url)&lt;br /&gt;    @viewer_url = url&lt;br /&gt;    setMovieURL&lt;br /&gt;  end&lt;br /&gt;  def setMovieURL&lt;br /&gt;    # Get the viewer page html&lt;br /&gt;    req = Net::HTTP::Get.new @viewer_url&lt;br /&gt;    viewer_page = nil&lt;br /&gt;    res = Net::HTTP.start(@viewer_url.host, @viewer_url.port) do |request|&lt;br /&gt;      viewer_page = request.request(req)&lt;br /&gt;    end&lt;br /&gt;    # Extract the required info.&lt;br /&gt;    # in the html there's a line like so:&lt;br /&gt;    # var fo = new SWFObject("/player2.swf?video_id=AUnPDmmnF0U&amp;l=1363&amp;t=OEgsToPDskJUmKC_b_nXO_yUrNLKSY18&amp;nc=13369344", "movie_player", "450", "370", 7, "#FFFFFF");&lt;br /&gt;    # we want to extract the ?video_id=AUnPDmmnF0U&amp;l=1363&amp;t=OEgsToPDskJUmKC_b_nXO_yUrNLKSY18&amp;nc=13369344&lt;br /&gt;    # this regex does that...&lt;br /&gt;    regex = Regexp.new(/\?video_id=[\w]+&amp;l=[\w]+&amp;t=[\w]+&amp;nc=[\d]+/)&lt;br /&gt;    @get_params = regex.match(viewer_page.body).to_s&lt;br /&gt;    @movie_url = URI.parse('http://www.youtube.com/get_video' + @get_params)&lt;br /&gt;    p 'movie url: ' + @movie_url.to_s&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 03 Sep 2006 16:05:34 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2522</guid>
      <author>aptiva (Fj&#195;&#182;lnir &#195;?sgeirsson)</author>
    </item>
  </channel>
</rss>
