I recently added an albums I've been enjoying this week section to my homepage. It's still a major work in progress. For some reason, tons of people have commented about it on Twitter asking how I made it, so I thought I'd write a quick post about the tech behind it.
The first thing your probably noticed is the sexy vinyl look. I got this from Komodo Media (all of their stuff is awesome, you should check it out). Some simple CSS plus their images and it looks dang sexy.
I'm using the Last.fm API to get my listening history. The call to get your top albums for the week doesn't return the album art for that album, so I have to get all of the albums and then get the art for each one. This whole process is pretty slow (source here) so I shove it in memcached on Heroku using the memcached gem so rendering is fast on my homepage.
I setup a cron to nightly rerun the lastfm:update rake task from above and update the cache with the new data. Pretty simple.
Anyway, I was proud. Nothing complex, just cool. Feel free to rip off anything I wrote. It's all on GitHub.
Many of the apps I work on are usually 100% custom. There is rarely any system UI components visible to the user. Styling the crap out of apps like this makes for tons of images in my iOS projects to get everything the way the designer wants. I'm starting to drawRect: stuff more these days because it makes it easier to reuse, but anyway.
There are literally hundreds of images in the Scribd app I've been working on. Designers changing their mind plus everything custom leaves a lot of images behind that are no longer used. Our application was starting to be several megs and a lot of it was unused images. So... being the programmer I am, I wrote a script.
desc 'Remove unused images'
task :clean_assets do
require 'set'
all = Set.new
used = Set.new
unused = Set.new
# White list
used.merge %w{Icon Icon-29 Icon-50 Icon-58 Icon-72 Icon-114}
regex = /\[UIImage imageNamed:@"([a-zA-Z0-9\-_]+).png"\]/
Dir.glob('Classes/*.m').each do |path|
used.merge File.open(path).read.scan(regex).flatten
end
Dir.glob('Resources/Images/*.png').each do |path|
next if path.include? '@2x.png'
all << path.gsub(/Resources\/Images\/([a-zA-Z0-9\-_]+).png/, "\\1")
end
unused = all - used
unused.each do |key|
`rm -f Resources/Images/#{key}.png Resources/Images/#{key}@2x.png`
end
puts "#{all.length} total found"
puts "#{used.length} used found"
puts "#{unused.length} deleted"
end
It basically searches all of your source files for references for [UIImage imageWithName:@"image_name_here"]. Then it looks at all of the images on disk and removes any you didn't reference. I setup a whitelist for icons and other images I don't reference directly. You might need to tweak the paths a bit to work for your setup.
Hopefully this little rake task helps someone clean up their project too.