KesieV Chiefs
What can I do with 300 lines of Ruby?
Get the latest version!
This page is about an older version of
Kesiev Chiefs. Get the latest version
here!
Welcome!
KesieV Chiefs is a small media player based on GTK2 and the famous
Mplayer.
It features a lot of things that you can find in a lot of other full-featured music players
that populate the internet. The only difference is that is brewed with only
300 lines of Ruby
code, using just the standard libs, except for the GUI.
KesieV Chiefs is just a proof-of-concept and is not
meant to be your default desktop player but, if you find it usable enough, can be your new best companion.
Features
KesieV Chiefs is less than 30k big, but has a lot of things inside.
GTK2 Interface
Audio/Video playback, using Mplayer as backend
Simple music database, with Artist/Album/Song panels
User created playlists
LastFM stations and scrobbling
Shoutcast and TV streams
Basic music sharing, using HTTP
Basic podcast client features
Searches on Wikipedia, Google, Youtube...
Playlist shuffling and sorting
Cover art parsing from Amazon or LastFM
Tray icon and window hiding
LibNotify notifications
libpurple compatible messenger status (i.e. Pidgin)
Optional cover browser
Easy plugin system
Some of these features needs some kind of configfile handling... No worry :)
Screenshot
Everybody loves screenshots. Mee too.
Install & Configuration
Since it is just an all-in-one Ruby script, you probably need just your installation of Ruby and the the
Ruby-GTK package (GTK2 only - the full GNOME packages aren't required). Desktop notifies requires the
Ruby-libnotify package - but, if you can't find it
anywhere, you can use a plugin for calling the
notify-send command line tool for having your
notifies.
You can configure a lot of things writing stuff in your
~/.kesievchiefs/settings file, adding one or more of these lines.
If a key is not specified into your config file, the default value is used (described for each key).
Remember to make
KesieV Chiefs executable with the classic
chmod +x kesievchiefs-0.1.rb.
opt.musicroot=~/Music/
Your music library root: MP3s are indexed starting from this directory.
opt.covers=/home/kes/.kesievcheif/cover/
opt.plugins=/home/kes/.kesievcheif/plugins
Default folders for covers and plugins. Installing a plugin is quite easy: copy the
plugin files into the plugin folder and restart
KesieV Chiefs.
opt.defaultentries=true
Adds three example custom playlists: a sample podcast, a Favourites playlist and a localhost shared music
playlist.
opt.height=600
opt.width=600
The default player's window size.
opt.iconsize=15
The size of the icons beside each item into the playlist box.
opt.filterheight=100
The default height of the Artist/Album filter box. You can hide the box, putting
a 0 into this configuration key and use the cover box as filter.
opt.showcover=true
Enable or disable the automatic cover downloader.
opt.coverh=105
opt.coverw=105
The size of the cover shown into the playlist box into the
main window.
opt.coverbox=true
opt.coverboxheight=150
opt.coverboxh=105
opt.coverboxw=105
Enable and disable the big cover box under the toolbar and change
the default height of the box. It is possible to set the size of each
item into the cover box.
opt.purple=true
Enable and disable your Pidgin's status message while listening to the music.
opt.lastfmpass=
opt.lastfmuser=
Your LastFM account details, for scrobbling your music. Sorry, your PW is in clear.
opt.all=(All)
opt.unknown=Unknown
These are the strings used for
unknown values of tags (unknown artist or unknown album) while
indexing and for searching
all artists or albums while filtering your library.
You can leave these to their default value.
opt.separator=#!#
The sequence of chars that is used as field separator. Leave it to his default value and change it
only if your music library contains the "#!#" somewhere.
opt.serverport=12345
The default port used for music sharing.
Custom playlists
KesieV Chiefs supports a number of different kinds of custom playlists: podcasts, shared folders,
editable playlists etc.
We will explain how to create some common items but keep in mind that different combination of attributes
creates more kinds of playlists (and adding plugins you can create even more playlists).
These lines are added into your config file too.
User playlist
You can make a selection of your music, streaming stations and more creating a custom editable playlist.
Add this block to your configuration file for a sample user playlist.
# A sample user playlist
lists.label=Rock music
lists.icon=apple-green
lists.file=<your kesievchiefs root>/rockmusic
A Rock Music playlist with a green apple as icon. Add as many of these you like!
Shared music
Hitting the
File menu and then the
Share/Unshare my music you can share your music database to
other
KesieV Cheif users... and to anyone, since is shared turning on a simple webserver :).
Add these lines to the client's config file to see the server's shared music:
# A sample shared source
lists.label=Foobar's Music
lists.icon=connect_established
lists.root=http://<ip of remote server>:12345/
lists.file=http://<ip of remote server>:12345/songs
Quite simple, isn't it?
Podcasts
We can manage podcasts too, in a quick and dirty way ;)
Let's add a custom playlist like this:
# A sample podcast
lists.label=Amplified podcast
lists.xml=http://feeds.feedburner.com/amplified
Not every podcast item has an enclosure, so, if only an URL is available, it
is opened into your Firefox browser. And, for it, you can obviously put any RSS source ;)
Plugins
If you don't find
KesieV Chiefs complete as you like, you can write your own
plugin, implementing your favourite feature.
You can have a look (and install) the funny
Foobar plugin, which
explains some of the capabilities of the plugin system. Since are written in Ruby too and are based on
substituting some subs, you can virtually do anything you want. On the right side of this site there
is a number of different plugins (one of these - the only really useful since now - adds Audio CD support
to
KesieV Chiefs). Download these into your ~/.kesievchiefs/plugins folder and restart your
player. Some of these adds more kinds of user playlists: usually the instructions are into the comments on the
top of the plugin sources.
Did you wrote a funky plugin? Submit it
here! (obviously de-garbage the mail address ;) )
The 300 lines
Clicking the
About option into the
Help menu, this box appears
Since the scripts counts his lines by himself, you can say
Yes, there are 300 lines of real code into KesieV Chiefs.
This player was born just for learning the
Ruby programming language, which is a really
powerful language born and built using the objects paradigm.
I've started
KesieV Chiefs as a game: let's take some kind of software that can virtually grow forever and let's see how many
features I can fit into keeping the sources 300 lines long.
Playing this game (which I've already played with PHP - that time was a messenger) I think that you
must learn something on
the language you're studying, since, for example, learning that you can assign multiple variables in one line instead using multiple lines,
you can reduce the code for many lines that can be used for implementing more features. And this "wave" effect continue until the
remaining lines don't allow you to add features.
Probably the resulting code will be a bunch of unreadable oneliners (that is terribly
wrong in the Ruby philosophy) but since now,
you know more about
what you can do with Ruby. And this make you a better programmer.
So, I've chosen to make a media player based on the really powerful Mplayer: nowdays a player can be a box with play/pause or a
shopping cart with filters and tons of buttons.
You can understand that this will not be probably the
ultimate media player for Linux but... who knows? It does what is
written on the label and does this enough good for the small database into my EEEPc... Let's the plugin dance begin :)
Closing time
You're probably trying to guess how this piece of software has such a weird name. That's because you don't know the
Kaiser Chiefs
group and their
Ruby song, which is really nice and is featured in a lot of videogames (and I'm a f*cked gamer!).
The last lines of this page are for Bianca (my GF) and Ulrick (a gr8 friend) which listened me evangelizing 24/7 Ruby and listened to my "feature of the day" gibberish.