Tecate and Artichoke Haiku
- Posted: 5 days ago
- Tags:artichoke, haiku, tecate
- 0 comments
Summer is now here.
Desert rapidly blooming.
Tecate Sunset.
Summer is now here.
Desert rapidly blooming.
Tecate Sunset.
There is a lack of decent open source FLV manipulation software out there. There is Yamdi which is a seriously awesome metadata injector, written in C, and then there is FLVTool2, which is a ruby based injector tool. FLVTool2 is really awesome, but it is a serious memory hog and 90% of the files I work with are >1gb size.
I am doing some house cleaning on one project and I have a need to quickly get the duration of an flv video file, but without loading the whole thing into memory, or even reading in the whole file. As an advantage to me, all the files in question have already been injected by yamdi, so the duration is already calculated and inserted into the files. I just need to read it, and be on my merry way.
Here it is:
def duration(filename)
f = File.open(filename, 'r')
raise "Could not open File!" unless f
#check for flv text
unless f.read(3) === 'FLV'
raise "This does not seem to be an FLV file."
end
#check to make sure we are a video
f.seek(3)
is_video = f.read(1).unpack("H*").first.hex
unless is_video == 1
raise "This FLV file does not contain video."
end
#seek to end, get size
f.seek(0, IO::SEEK_END)
length = f.tell
#calculate tag length
f.seek(-4, IO::SEEK_END)
taglen = f.read(4).unpack("H*").first.hex
#finally get duration
f.seek(length - taglen, IO::SEEK_SET)
duration = f.read(3).unpack("H*").first.hex.to_f/1000
f.close()
#duration returns in seconds
duration
end
Chevy's makes some mean chipotle salsa. It is so good I have tried to replicate it many times. Tons of other people have too. I think I have finally landed on what I think is the recipe:
Ingredients:
Lastly, put all the ingredients into the food processor, and puree for only 5 seconds. It should be medium-chunky at this point, you can keep puree'ing if you need it less chunky. You may or may not need to add a dash of salt.So as it goes, there were a couple bugs, so I took the opportunity to fix them, and also add some additional features. In this revision we include more of the redmine message that goes along with the activity update as permitted, and then we run the direct link to the redmine page through is.gd for each issue and attach this to the tweet.
Additionally I quickly optimized things and made it send is.gd https urls to redmine for my convenience. You can check it out on the second page.
Continue Reading -->
What do you do when you have mail, instant messages, rss feeds, web pages, text messages and revision control to all keep up with? Myneid came up with an idea of getting redmine updates from within twitter, so I took a crack at it:
#!/usr/bin/env ruby
require 'rubygems'
gem 'feedtools'
gem 'htmltokenizer'
require 'feed_tools'
require 'html/htmltokenizer'
require 'twitter'
#your redmine url
feed_url = "http://redmine.yourcompany.net/projects/activity?format=atom&key=YOURRSSKEY"
#grab redmine data
feed = FeedTools::Feed.open(feed_url)
post_these = Array.new
#fetch salient pieces from this stream
feed.items.each do |act|
tweet = "#{act.title}"
t = HTMLTokenizer.new(act.description)
desc = String.new
unless ARGV[0].nil? or ARGV[0] != 'full'
while token = t.getTag('p')
desc << t.getTrimmedText('p').gsub(/\n/, ' ')
end
tweet << "\t#{desc[0..137]}..."
end
if act.time >= 5.minutes.ago
post_these << tweet
end
end
#connect to twitter if we need to
if post_these.size > 0
twitter = Twitter::Base.new('YOURTWITTERUSERNAME', 'YOURTWITTERPASSWORD')
end
#post the oldest first
for tweet in post_these.reverse
status = twitter.post(tweet)
end