Tag-Archive for "script"

So it seems that I’ve had a similar experience to a lot of people changing their wallpapers in ubuntu.  You’re scrolling through a bunch and in the list you notice this one called cosmos that doesn’t quite looks like the rest.  “Hmmm, what’s this?’ you think.  This looks like a bunch of images stacked on top of each other.  Could it be?  And yes, it is, it’s a multi-image slideshow that can have as your background that rotates on a schedule that you choose.  I immediately sat down and started figuring out how this thing works and in the end it was pretty simple, time consuming to setup as you have to input a ton of values into an xml file but simple.  I’m not going to go into huge detail about how it works if you want to read more head over to http://www.linuxjournal.com/content/create-custom-transitioning-background-your-gnome-228-desktop

So today I stumbled upon a motherload of amazing 3D space art at http://joejesus.deviantart.com and I go completely gaga over space art.. My wallpapers are all sci-fi scenes, I just can’t get over how breath taking some of these are.  So I raided the guys stash and ended up with around 30-40 new pieces for my wallpaper slideshow and like hell was I going to enter all of these in by hand so off I went searching for a nice little script that would do it for me.  I mean come on, one of the reasons I’m a linux user because I gave up the notion that time consuming repetitive tasks were something that you had to do by hand and sure enough I found a wonderful gentlemen over at the ubuntu forums who coded up a beauty of a script that worked like a charm.  So make sure to head over to : http://ubuntuforums.org/showthread.php?p=9578962 and give the guy a big thank you hug for saving you hours of work, and read the instructions on how to use it.

Here’s the script, just copy and paste this into a file, chmod it to 755 and you’re off to the races:

#!/bin/bash
echo “<background>”
echo “  <starttime>”
echo “    <year>2009</year>”
echo “    <month>08</month>”
echo “    <day>04</day>”
echo “    <hour>00</hour>”
echo “    <minute>00</minute>”
echo “    <second>00</second>”
echo “  </starttime>”
echo “  <!– This animation will start at midnight. –>”

if [ $# -lt 4 ]
then
echo “usage: $0 <hold duration> <fade duration> file1 file2 …”
echo “example: $0 60 5 /path/to/dir/*.jpg /path/to/dir/*.png”
exit 1
fi

hold=$1
fade=$2
first=$3

#remove hold parameter
shift
#remove fade parameter
shift

while [ $# -gt 0 ]
do
echo “  <static>”
echo “    <duration>$hold</duration>”
echo “    <file>$1</file>”
echo “  </static>”
echo “  <transition>”
echo “    <duration>$fade</duration>”
echo “    <from>$1</from>”
if [ $# -gt 1 ]
then
echo “    <to>$2</to>”
else
echo “    <to>$first</to>”
fi
echo “  </transition>”
shift
done
echo “</background>”

So today I set out to modify my massive unique tweet and content generator for my Netsyphon network(ie: hotel-kelowna, innkelowna.com, kelownasrestaurants.com, etc etc) and add an inline content spinner to it.  To date there are a lot of search/replaces happening but they are all one time replaces and reference external files for the replace values..  Usually there were only one or two possible s/r results per line so I could handle it easily with gsub.

But now I wanted to be able to take a single article with a ton of spinnable content and have a script generate 10-20-100 different versions of this article.  I would have a sentence where 80% of the content was spinnable with infinite amount of results.  I could handle this with the old method but it would require creating a ton of external files for each search/replace possibility which would get insane.  Instead I knew that there had to be a relatively simple method with bash to make this happen, and much to my delight the boys over at #bash on irc.freenode came to the rescue

Big props out to \amethyst and geirha, my two heroes for the day.  Some useful info from #bash as well:

FAQ: http://mywiki.wooledge.org/BashFAQ | Guide: http://mywiki.wooledge.org/BashGuide | ref: http://tinyurl.com/txlv | http://bash-hackers.org/wiki/ | USE MORE QUOTES!: http://www.grymoire.com/Unix/Quote.html | Scripts and more: http://www.shelldorado.com/

And without further ado here are the scripts that were created by these two gents.

http://pastebin.com/xNgKaR2c:

FAQ: http://mywiki.wooledge.org/BashFAQ | Guide: http://mywiki.wooledge.org/BashGuide | ref: http://tinyurl.com/txlv | http://bash-hackers.org/wiki/ | USE MORE QUOTES!: http://www.grymoire.com/Unix/Quote.html | Scripts and more: http://www.shelldorado.com/

And without further ado here are the scripts that were created by these two gents.

The first by Geirha, is setup to read from an external file , and if not will take the input from stdin

http://pastebin.com/xNgKaR2c:

spinner_thingy ()
{
while read -r -d ‘{‘; do
printf “%s” “$REPLY”;
IFS=’|’ read -r -d ‘}’ -a words;
n=${#words[@]};
((n)) && printf “%s” “${words[RANDOM%n]}”;
done < “${1:-/dev/stdin}”;
printf “%s” “$REPLY”
}

The second by\amethyst can be found here: http://pastebin.com/tAXJ04L6

I went ahead and replaced the example line at the top with a reference to a filename

line=”$(<test.txt)”
makesentence ()
{
local line=”$1″
while [[ $line = *{*}* ]]; do
local -a choices
local prefix=${line%%{*} rest=${line#*{}
local choice=${rest%%\}*}
line=${rest#*\}}
IFS=’|’ read -a choices <<< “$choice”
[[ $choice = *"|" ]] && choices+=( “” )
printf “%s” “$prefix”
if (( ${#choices[@]} )); then
printf “%s” “${choices[RANDOM % ${#choices[@]}]}”
fi
done
printf “%s\n” “$line”
}
makesentence “$line”

So there you have it.. 30 minutes in IRC and the helpful boys over at #bash have me right as rain.. Again a big shout out, these guys have been integral in helping me with all of my scripting in this project.. I would have jack if it wasn’t for them.

As a parting gift I also found a way to do this with php, but alas I wanted a shell script that I could easily integrate into the mothership so it was all one nice neat package.. But for those php guys here it is:

<?php
$text = "The {quick|slow|reasonably paced} {brown|green|blue|pink} {fox|goat|rat|camel}
{jumped|walked|hopped} {over|past|under} the {lazy|tired|boring} {dog|cat|stoat}";
$count = 0;
while ($count++ < 100){
echo Spin($text);
echo "<br />";
}
?>

Now go generate some content!