FLORIDA LAWSUIT CELEBREX florida lawsuit celebrex

FREE LG GSM CELLULAR PHONES

free lg gsm cellular phonesHUMAN GROWTH HORMONE LEE human growth hormone leeMICHIGAN STATE DAILY LOTTERY DRAWING RESULTS 3 michigan state daily lottery drawing results 3

GOING OFF OF PAMELOR

going off of pamelor

PHARMACY SCHOOL REQUIREMENTS

pharmacy school requirements
REVIEWS ROGAINE FOR WOMEN
reviews rogaine for womenMYTHS AND LEGENDS myths and legends

X BRITE

x brite
FLOMAX DOSAGE DOSE TAMSULOSIN
flomax dosage dose tamsulosin
WITHDRAW CELEXA SIDE AFFECTS
withdraw celexa side affects

COZAAR EFFECTS INTERACTION

cozaar effects interaction

ORTHO TRI CYCLE LO

ortho tri cycle lo

ULTRAM REVIEW

ultram review
RISHI TRAVELS SOUTHALL UK
rishi travels southall ukLAMICTAL AND DIARREHEA lamictal and diarrehea

ERECTILE DYSFUNCTION LIPITOR

erectile dysfunction lipitor

GLIPIZIDE DOSAGE FOR CATS

glipizide dosage for cats
LAST MINUTE FLIGHTS TRAVELOCITY
last minute flights travelocity

DOSAGE FOR TRAMADOL 377

dosage for tramadol 377

CAUSES OF CHRONIC NASAL CONGESTION IN INFANTS

causes of chronic nasal congestion in infantsPEDIATRIC DOSAGE BENADRYL pediatric dosage benadryl

CHINA ECONOMY 2006 ECONOMIST

china economy 2006 economist
GNC LIQUID MELATONIN
gnc liquid melatonin

MOOD NEURONTIN STABILIZER

mood neurontin stabilizer

WALGREENS PHARMACY LOCATION

walgreens pharmacy location

BREAST SIZE AUGMENTATION

breast size augmentation

WHAT IS PLAVIX DOCTOR

what is plavix doctor

WALGREEN DIOVAN PRICES

walgreen diovan prices

GLAXOSMITHKLINE CME BIPOLAR LAMICTAL

glaxosmithkline cme bipolar lamictalDEPO PROVERA PREGNANCY TEST RESULTS depo provera pregnancy test results
FOOTBALL BETTING SYSTEMS UK
football betting systems uk
WHAT IS PLAN B BIRTH CONTROL
what is plan b birth control
NIFEDIPINE XL DOSE
nifedipine xl dose

HOLIDAY TRAVEL AAA

holiday travel aaa
LIST OF STATIN DRUGS LIPITOR
list of statin drugs lipitor
PAXIL GENERIC DRUGS
paxil generic drugs

YELLOW XANAX BARS MG

yellow xanax bars mg

TRAMADOL DRUG TESTING FACTS

tramadol drug testing facts

CARING FOR CALANDIVA PLANTS

caring for calandiva plantsIMITREX FREE imitrex free
ARABIC RINGTONE NOKIA FREE
arabic ringtone nokia free
DOSAGE CEPHALEXIN FOR GONORRHEA
dosage cephalexin for gonorrhea
CREAM BETAMETHASONE DIPROPIONATE
cream betamethasone dipropionate
COUMADIN AND CRANBERRIES
coumadin and cranberries
CHEAP AIRFARE EUROPE TO US
cheap airfare europe to us

CAN LASIX HARM MY UNBORN BABY

can lasix harm my unborn baby

VIOXX SIDE EFFECTS FADJUST SMS 1 DUPLICATE 11.9

vioxx side effects fadjust sms 1 duplicate 11.9

BUY VIAGRA ONLINE WITHOUT PRESCRIPTIONS

buy viagra online without prescriptions

ZETIA AND BREAST PAIN

zetia and breast pain

HILTON HOTELS CAREERS HOUSTON

hilton hotels careers houston

RENAISSANCE HOTELS CHICAGO

renaissance hotels chicago

MOTEUR SP CIALIS CUISINE

moteur sp cialis cuisine

DIFLUCAN FLUCONAZOLE DOSAGE

diflucan fluconazole dosage
BOUTIQUE HOTELS LONDON SOHO
boutique hotels london soho

SUN BRITE SUPPLY

sun brite supply

HONG KONG TRAVEL AGENCY REGISTRAR

hong kong travel agency registrar

BABY SURI CRUISE PHOTOS

baby suri cruise photos
BUY GENERIC TENORMIN ONLINE
buy generic tenormin online
CLA 1 SITE
cla 1 site
CRUISE DISNEY VACATIONS
cruise disney vacations

SAVE24100 40MG PROTONIX UNDER

save24100 40mg protonix under

AVIS RENT CAR UNITED STATES

avis rent car united states
HERBAL ACNE CREAM
herbal acne cream

NEXIUM EC

nexium ec
NORWEGIAN CRUISE LINE AMERICA PRIDE OF
norwegian cruise line america pride of

COZAAR DOSAGE MAXIMUM

cozaar dosage maximum

THE WALT DISNEY WORLD RESORT MAP

the walt disney world resort map

ALEVE SIDEAFFECTS

aleve sideaffectsCAN LASIX BE DONE FOR READING can lasix be done for readingSNUS MOTRIN snus motrin

Is my bookshelf a brothel?

June 15th, 2008  |  Published in Life

The beginning of a new book is like the beginning of a relationship; you don’t quite know what to expect. Hopefully not too much time passes before you become acquainted, and then it’s not very long until you are intimately familiar with each other. The good ones don’t get old, because, while perhaps each page turn/day passing doesn’t reveal something exciting, you can’t put it down. There’s something special there.

GSoC Report Week 2: libmp3tunes goodness

June 10th, 2008  |  Published in Code  |  1 Comment

Project: MP3tunes + Amarok Integration

Total Commits: 35 Weekly Commits: 15

Past 7 Days

This was a busy week. I migrated the existing MP3tunes service in Amarok 2 from making REST calls and parsing XML manually to use libmp3tunes. I created an object oriented encapsulation framework in C++ for libmp3tunes, which is written entirely in c. This means instead of mucking about crafting http queries and worrying about parsing data from XML one can manipulate the Locker in an OO fasion. Here’s a little snippet of how libmp3tunes saves work.

Without libmp3tunes if you wanted to fetch a list of artists this is what it would look like:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    QString urlString = "http://ws.mp3tunes.com/api/v1/lockerData?sid=<SESSION_ID>&partner_token=<PARTNER_TOKEN>&output=xml&type=artist";
 
    urlString = "http://ws.mp3tunes.com/api/v1/lockerSearch?output=xml&sid=<SESSION_ID>&partner_token=<PARTNER_TOKEN>&type=artist&s=" + m_artistFilter;
 
    urlString.replace( "<SESSION_ID>", m_sessionId);
    urlString.replace( "<PARTNER_TOKEN>", CENSORED);
 
    debug() << "url: " << urlString;
 
    m_storedTransferJob =  KIO::storedGet(  KUrl( urlString ), KIO::NoReload, KIO::HideProgressInfo );
        connect( m_storedTransferJob, SIGNAL( result( KJob * ) )
            , this, SLOT( artistDownloadComplete( KJob *) ) );
 
    ArtistList artists;
 
     //so lets figure out what we got here:
    QDomDocument doc( "reply" );
    doc.setContent( m_storedTransferJob->data() );
    QDomElement root = doc.firstChildElement( "mp3tunes" );
    root = root.firstChildElement( "artistList" );
 
    QDomNode n = root.firstChild();
    while( !n.isNull() )
    {
        QDomElement e = n.toElement(); // try to convert the node to an element.
 
        QDomElement element = n.firstChildElement("artistName");
        ServiceArtist * artist = new ServiceArtist( element.text() );
 
        element = n.firstChildElement("artistId");
        artist->setId( element.text().toInt() );
 
        ArtistPtr artistPtr( artist );
 
        artists.push_back( artistPtr );
 
        m_collection->acquireWriteLock();
        m_collection->addArtist( artistPtr );
        m_collection->releaseLock();
 
        n = n.nextSibling();
    }

With libmp3tunes it looks like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    Mp3tunesArtistFetcher * artistFetcher = new Mp3tunesArtistFetcher( m_locker );
    connect( artistFetcher, SIGNAL( artistsFetched( QList<Mp3tunesLockerArtist> ) ), this, SLOT( artistDownloadComplete( QList<Mp3tunesLockerArtist> ) ) );
 
    ThreadWeaver::Weaver::instance()->enqueue( artistFetcher );
 
    ArtistList artists;
 
    foreach(Mp3tunesLockerArtist artist, artistList) {
        ServiceArtist * serviceArtist = new ServiceArtist( artist.artistName() );
 
        serviceArtist->setId( artist.artistId() );
 
        ArtistPtr artistPtr( serviceArtist );
 
        artists.push_back( artistPtr );
 
        m_collection->acquireWriteLock();
        m_collection->addArtist( artistPtr );
        m_collection->releaseLock();
 
    }

Both of those code samples produce this:

MP3tunes Collection Browser

Notice that instead of looping through XML and ripping out data, I was able to call getter methods to retrieve the same data. Of course the XML parsing has only been moved to libmp3tunes, but by hiding the MP3tunes API implementation from Amarok it creates more maintainable code.

If none of that made much sense, no worries, the important bit to grasp is that libmp3tunes does these important things:

  • Encapsulates the MP3tunes API so it is separate from the rest of Amarok.
  • Provides an Object Oriented interface to the mp3tunes API. Creating a new session is as easy as Mp3TunesLocker locker = new Mp3tunesLocker();
  • Ensures Amarok is officially supported by mp3tunes as long as they support libmp3tunes.

Upcoming 7 Days:

There are a few libmp3tunes shortcomings. One is the lack of a means to detect when a session has expired. Each MP3tunes API request requires a valid session (except of course the initial session-establishing request), and each session times out eventually. When using MP3tunes in Amarok it will be important to elegantly handle session timeouts, for the user does not care about sessions or timeouts. When the user clicks play on an artist they expect it to play, while currently, if the session has timed out Amarok doesn’t do anything. This week I will patch libmp3tunes to support detection of timed out sessions.

Another goal for this week is to fix the search box, so it actually searches.

MP3tunes Collection Search

Also, if you right click on an artist in the MP3tunes collection browser you get a “Copy to Collection” option. At the moment it doesn’t do anything. After this week is over, hopefully, selecting the “Copy to Collection” option will let you do just that.

Copy to Collection

Foreseeable Roadblocks:

Last week’s roadblock still stands. In the next few weeks I’ll be getting closer to the time when I will need to implement that syncing part of libmp3tunes into Amarok. The licensing issue won’t stop me from developing it on my own workstation of course, but it will have to be resolved before I can commit that part of library or code that implements it.

GSoC Report - Week 1

June 2nd, 2008  |  Published in Code  |  2 Comments

Project: MP3tunes + Amarok Integration

Prescriptum: These weekly reports will likely contain a bit of technical information that only other Amarok developers will understand. I do not like that idea, as I want these reports to be grokable by all, but since I haven’t yet decided on a format to present the info in a manner I like this will have to do for this first week.

Past 7 Days:

I started coding for GSoC last Tuesday (May 27th) beginning with a simplification of the ServiceCollection hierarchy by combining ServiceDynamicCollection and ServiceCollection into one class. I also started creating the ServiceCollectionLocation’s. It is not implemented anywhere yet, and won’t need to be for awhile, but I started it as at the time I was waiting on mp3tunes to deliver their c sdk.

Leeo kindly created mp3tunes icons, which I committed on Saturday.
mp3tunes icon and Mp3tune icon

During the week I kept nudging the mp3tunes developers to send me the c sdk, and Saturday the nudging paid off as I received a pre-release version of libmp3tunes. Even though it is a pre-release it is complete enough to match the current mp3tunes feature set in Amarok2. On Sunday I added libmp3tunes to the src tree, including the dependency detection. libmp3tunes is dependent on curl and libxml2, and if someone does not have them mp3tunes will be excluded from the build thanks to cmake.

Finally, today, I committed a ~750 line c++ wrapper for libmp3tunes to compartmentalize the unsightly c code.

You can see all my commits here:
http://kollide.net:8060/changelog/~author=link/Amarok

Upcoming 7 Days:

There are still a few functions left TODO in the c++ wrapper for libmp3tunes, so I’ll complete those this week. Then I plan to start migrating the existing service to use the library functions. I expect this will take all week, so my goal for the next report is to have the migration complete and a working Mp3tunes service utilizing the library. If my time estimation ends up being too long, and I finish the migration early, I’ll work on the Mp3tunesCollectionLocation functionality so you can copy tracks from Mp3tunes to the local collection in a manner similar to the Magantune service.


Forseeable Roadblocks:


The syncing part of libmp3tunes is not licensed and not complete. However, the MP3tunes developers have been particularly responsive the past several weeks, so I am optimistic they will pull through.

Reflections:

I am amazed at how much I learned this week. To keep this brief here is a list of some things I’ve learned:

  • How to do basic cmake things like define optional deps and exclude portions of an app if they aren’t met.
  • Before this week I had never even seen object oriented c before.
  • Also I learned how to combine c and c++ code in the same program (extern!).
  • KDE4 is a beast and breaking it is bad news.

Google Summer of Code: One Intro With a Side Order of Awesome

April 5th, 2008  |  Published in Code  |  1 Comment

Huzzah! Google announced the list of 1125 fortunate students that will be developing for Google’s Summer of Code program. I’m a member of this group, which means I will be writing code for an open source project and getting paid for it!

I was asked by my community mentor to write an introduction that was posted at various places, and I will re post it below.

Hey everyone! My name is Casey Link and I am an undergraduate Computer Science and Philosophy major at Virginia Tech in Blacksburg, VA. As a part of Google Summer of Code I will be tightly integrating the MP3Tunes service with Amarok 2 as well as implementing a generic synchronization framework between Collections. In Amarok 2, collections have been abstracted, allowing Amarok to treat a local SQL collection the same as an online Web Service based collection. Why is this awesome? With the addition of the service architecture (thanks to Nikolaj) it is now
possible to plug in remote, local, and soon portable collections without
having to differentiate between their interfaces.

Not convinced yet? Here is a real example of just how cool this is.

Enter MP3Tunes. MP3Tunes provides an “online music space” for its users to store their entire music collection so they can listen to their music anywhere. Using their API and client libraries, applications can be developed for just about any device, so you can literally listen to your music anywhere! This summer I will implement full MP3Tunes functionality into Amarok so you can seamlessly synchronize your local music collection with your MP3Tunes Locker. Not only will you be able to upload your local music collection, but if you add music to your MP3Tunes Locker via other methods - such as buying music from an online store - the new tracks will be added to your collection. This is just the beginning. Technology is seeing a trend towards ubiquitous connectivity and information storage in ‘the Cloud’. It won’t be long before “local” and “remote” are terms of the past as you are able to seamlessly access your information everywhere.

Amarok and MP3Tunes will be on the forefront of this technological shift. I hope you’ll be there with us.

In case anyone is interested I’ve posted my original project proposal that was a part of my GSoC application.

Life in the Cloud

March 23rd, 2008  |  Published in Technology

Internet technology is seeing an overall trend towards increased connectivity (always on), information sharing (openness), and most importantly, data existing in “the Cloud” (anywhere access). This is a fascinating prospect, because no one can tell what the results will be.

Exempli Gratia: The Amazon Kindle. At the core this device does something that many devices have done before, that is, it offers always on transparent connectivity, but it took this commonplace technology and applied it to an entirely different market.

Wait just a second — taking a technology to another market happens all the time, so why is this case special? Because the Kindle did not just take an existing technology. It took a technology and gave users access to the Cloud.

With the Kindle you have access to books, newspapers, blogs, Wikipedia, and the internet in general, all without connecting to a computer. You can buy books through the Kindle store and while they are sent to your device Amazon keeps a copy of everything you purchase (subscriptions, books, magazines) in the Cloud. Not only that but the Kindle automatically sends your notes, annotations, clippings, and bookmarks in the Cloud.

But this post isn’t supposed to be Kindle advertisement.

What the Kindle lacks is openness. Being wrapped in layers of DRM forces the Kindle into not sharing nicely with others. Openness will be crucial to life in the Cloud.

What is this Cloud thing anyway?

Many people are already accustomed to the idea of a global village facilitated through the internet. In fact, Herbert Marshall McLuhan used the term “global village” way back in his 1962 book The Gutenberg Galaxy: The Making of Typographic Man1. He discusses how the traditional space-time communication barriers between humans topple with the invention of an electronic mass media. This creates a world where there are virtually no limits, and people can exchange ideas, share knowledge, and provide services on an global scale. Sound familiar? The internet has enabled all of these feats, however so far there is a very physical limit to our interactions within this global village.

Playing off the village metaphor, this physical limit could be analogized as personal houses in the cyber-village. At your metaphorical house is everything important to you. You have

  • a closet full of email
  • stacks of MP3s and movies
  • filing cabinets full of documents from your first 9th grade paper
  • your finances
  • your latest business model

Not to mention the room dedicated to your photo albums and the basement/workshop with toolboxes containing:

  • word processors
  • media players
  • text editors
  • photo editing tools

In real life, of course, this house is your computer.
Rather, it is probably a couple of computers: at work, home, or in your pocket. The thought of losing your virtual house to any number of possible disasters (e.g., theft, crackers, disk corruption) is devastating. The dread is a consequence of the technology shift. An information technology shift from the analog to the digital, from physical to abstract. Technology is making another shift towards an age of truly ubiquitous information storage and retrieval.

  1. Courtesy of wikipedia The Gutenberg Galaxy []