Step 1 Planning
Every application must have its beginning. Whether big or small the idea must first start as a vulnerable idea. In my case I see a gap in the desktop wallpaper space. Born out of frustration and laziness I decided to build an application that fixes a problem I have.
The problem: There is not enough time in the day to spend searching for downloading, arranging and sorting good quality images for an inspiring desktop background. Compiling inspiring detailed well designed images for your desktop background can be grueling and most importantly time consuming.
So how do I fix this you might ask? Well… I’m asking the same exact question and at the same time coding.
Enter code name Curated Wall Paper or CWP for short. Where my solution to this problem is to have someone else handle it for me. That’s right my goal is to build an application that will help me leverage people who are much better at wallpaper curation that I am.
Step 2 Design
The solution to my problem is to give the problem to someone more qualified than me. And by that I mean enable those who have a talent for curating a beautiful album of images that inspire to share them easily with the rest of us.
I went with a distributed model sourcing images from their own unique location on the internet. by doing this I don’t have to worry about building a web server to support mass amounts of images. This keeps my application light weight as it just calls reference to images already hosted. Mind you this does come with its draw backs. The first being performance. Using others web servers gives me no control over the speed at which the application can retrieve said image. Although this is large trade off it seemed to be the right one as it would not take much effort to begin hosting images for the application down the road.
Now that we tackled that problem we need fix the second biggest problem, speed. Although I am by no means attempting to build an application that is optimized to the N’th degree it would be egregious of me to not eliminate the redundancy of downloaded the same images over and over again.
In the hopes of keeping the application simplistic to operate and to debug I decided to write all previously downloaded image urls to a file that could be referenced before the next album was downloaded. As it stands if an image had already been downloaded it would be saved to this .txt file and subsequent calls to that image would be thrown out. Knowing that simply moving a local file out of the original CWP directory would break this logic I thought it would be within reason to have the user delete the file used to save already downloaded images if an error like this occurred. Essentially clearing ones album cache and effectively forcing all subsequent images to be re-downloaded.
By this time the large portions of the application have been defined and we can move on to implementation.
Step 3 Implementation
The great Allen Emrich once taught me simplicity is king. And that is the basis for my application design for this project. Keep it simple.
We can break this application down into a few simple objectives.
- Input – in the form of a URL using a text file
- Verify input integrity
- Check input against previously downloaded images
- Coalesce previous data into a photo album
- Iterate through photo album data based on user defined wait period
- Allow user to repeat process with new input
Additional optional stretch goal features:
- Choose between different transitions such as Fade in/out, Morph, Slide left/right
- Create GUI – Download progress bar – Input file open – choose transition – transition time
- Build sharing platform online to allow users to easy create and share albums
- Build in support for Mac OS and Linux
you can find my project on github here.
you can find more from the great Allen Emrich here.