As you may or may not know, I have what some would call an obsession. Making bots on Twitter. I like to think that I created one of the first retweet bots (@ShutupMeg in Sept 2008) and made a few dozen more over the years. Then there was @CapsCop, @Fandumb, plus a few experiments. Retweet bots have been done to death. Before Twitter deprecated version 1 of their API you could make what I call a “dumb” retweet bot using Yahoo pipes or any RSS to tweet service. A few people have tried to imitate @CapsCop. Either by correcting grammar, manually complaining about capslock tweets, or going so far as to copy the CapsCop timeline to “catch” people right after I have.
Today, I would like to introduce you to a new type of bot. One that will be difficult for some people to copy and, to me at least, is a breakthrough in Twitter bots: @AllCatsBro
@AllCatsBro takes tweets from @AllCapsBro and makes a meme image from random cat pictures off of Flickr. @AllCapsBro is a regular guy that tweets all day in hopes that his follower count will dwindle down to nothing. Usually I would say that taking someone else’s content and tweeting it as my own is wrong. Lucky for me, @AllCapsBro finds this as hilarious as I do.
Here are a few sample images:
Making this all work was easier than you would think. I recently completed an overhaul of the code that runs CapsCop and most of my other bots. This framework allows me to make almost any new style of bot that I can think of using a simple plug-in architecture. I had to merge in a fork to abraham/twitteroauth that allowed image uploading. Then there was a bug with piotrbelina/memegenerator. The bottom text was placed too low on an image causing text to be cut off. Once those issues were resolved, the rest was a piece of cake.
Now that the hard work of creating and posting images is done, I am free to come up with new bots that fall in to the “instant meme” class. This is going to get interesting.
It really bothers me when I see news outlets post crap about Apple without even thinking. Bloomberg, telegraph, zdnet, businessinsider, engadget, and venturebeat are all claiming that using Siri on your iPhone 4s can double your data usage.
They’re all basing this off of this report from Arieso that claims
iPhone 4S users are the “hungriest” data consumers, demanding twice as much data as iPhone 4 users and three times as much as iPhone 3G users
Now, I don’t doubt they’re right. But the report does not say anything about Siri or even indicate that they know what kind of data is being transmitted. They’re just assuming that Siri is the cause of this because it’s a feature not offered on any other iOS device.
Personally I blame the data usage on iCloud and iTunes Match. Siri transmits small bits of data for each request. According to Ars Technica, Siri isn’t really that bad with data.
If you use Siri 2-3 times per day at an average of 63KB per instance, you might expect to use 126KB to 189KB per day, or 3.7 to 5.5MB per month. For 4-6 times a day, that might come out to 252KB to 378KB per day, or 7.4 to 11MB per month. If you use it 10-15 times per day, you might end up using 630KB to 945KB per day, or 18.5 to 27.7MB per month.
The above stats don’t t even factor in if you use Siri while on a WiFi network. 27.7MB a month on an iPhone isn’t that much data at all. I can’t speak for other iPhone users but my monthly usage is anywhere between 1-2GB a month.
Compare this to the 2-5MB that you can transfer every three minutes when using iTunes Match. And don’t forget about the battery life issue most 4S devices had when they were first released. That problem was mainly due to iCloud trying to sync all the time. Who knows how many versions of iOS 5 haven’t been upgraded.
This kind of reporting is what really bothers me, especially with all of this TV set crap flying around. Editors will post anything that mentions a new product or potential issue from Apple. Don’t be lead on by these news outlets doing whatever they can to gain more eyeballs.
For most people that have used Dropbox it’s been a great time saver. Personally when going from machine to machine nothing is easier and “just works” like Dropbox. I want to share a few ways that I use Dropbox to help me out
1. Symlink Folders
The title may put you off but I’ll explain what this does and how this works. I have a folder on my work machine called ‘Projects.’ Now sometimes I remember to move some files that I really need to work on later at home in my Dropbox, edit them, then move them back in to place the next day. If I forget I’m out of luck and I don’t want to move that folder just in to Dropbox because I’ll end up always looking for it in the old place.
There’s an easy fix for this when you’re on a Mac or Linux box: Symlinks. A symlink is like an alias that points to a file or folder that’s in another location. Open a Terminal on your machine and do this *
It’s that simple! Now that Projects folder will always sync with your Dropbox account and it will stay in it’s original location. (* Make a backup of that folder first just in case)
2. Shared Folders
I like to keep my work and personal work as separate as I can. While adding your own Dropbox account to your work machine seems like a good idea I just wasn’t thrilled with it. If I end up unemployed all of my personal files will be on my work machine with no way to remove them. My solution to this is to have two Dropbox accounts. One is my personal account and the second is only for work. Now on my work account I have a shared folder called Work. I invited my personal account to use it and now what’s personal stays personal and what’s work can be accessed anywhere. This is great for when I take my personal laptop to work and need to share files between the two machines without switching accounts.
3. The same wallpaper everywhere
For a while now I’ve had random wallpaper setup on my macs. It’s simple, go to System Preferences, Desktop & Screensaver, select a folder with a bunch of images inside, and set it to change the picture every few minutes. This way when I come across an image I like I can just add it to the folder. You get the added bonus of not looking at the same boring image you once liked six months ago. With Dropbox you can keep the same wallpaper rotating on any machine that you own. Just make a Wallpaper folder inside of Dropbox and point your mac to it.
And that’s it. If you’re not using Dropbox already just use this link http://db.tt/Rvk9DQK and we’ll both get some extra storage space.
It’s almost irritating how many news outlets have this dreamed up image of a Apple making an HDTV. Yes, Steve Jobs did say “I Finally Cracked It” when it comes to television but there’s nothing to “crack” when it comes to getting someone to buy a TV. Most of us have an HDTV and the market is saturated enough to not want to be a newcomer. One thing is for sure with an Apple branded TV set, it’s going to be expensive. I bought a 42 inch tv for $900 years ago and plan on owning it until it dies. After that I want to get a 3d tv. It’s going to be hard to convince people to throw out their HDTV. Especially when someone has invested so much in one already. It’s also not really “green” of Apple. What’s going to happen to all of these now outdated TV sets that people are replacing? Sure, you could recycle them but you’re still causing more harm than good here.
This is what I think so far
If you really want to get a jump on what Apple is going for I really recommend you check out patentlyapple.com. They have a whole section on Apple’s TV patents here: http://www.patentlyapple.com/patently-apple/tech-tv/
The app looks better but keeps crashing. Everything that made the site great as a blogging platform has been rearranged and is hard to get to. Good thing I can post via email and avoid that mess.
This should explain some of the commands that you can use with CapsCop. I really feel that this bot is unique that it lets anyone interact and play with the system at any time.#snitch or #narc
I’ve been using Spotify for around 6-8 hours a day while I’m at work. Some things are great. Some are not. Keep reading:
That’s all I have time for at the moment. I think I’ll be switching back to Google Music
Just outlining some of my thoughts about Lion so far:
There are many small improvements but the real game changers are the App Store upgrade, Mission Control and Gestures. This release is a prime example of how Apple pushes boundaries and is generally ahead of it’s time. This time Apple has the pull to show us what the future is and make it stick. The iPad offered a sneak peak of what would be coming in to OSX. Like it or not this gesture filled multi screen way of computing is the future. Give it time and be willing to retrain yourself on scrolling and gestures. I’m sure we will all love it a few months from now.
It’s been 4 months since @twitter told devs to stop making clients so they can provide “A Consistent User Experience” (seen here http://groups.google.com/group/twitter-development-talk/browse_thread/thread/…
While the main reason for this policy change and warning was because of apps violating user’s privacy, it set a bar and goal for Twitter to reach. Mainly to provide a consistent user experience across all of their apps. So far, they’ve failed that mission.
I use a few Twitter apps. The iPhone, Mac, and iPad versions. The iPhone and Mac Twitter clients were purchased from atebits and as far as I know their iPad version was developed in house. The Mac version of the client was updated to version 2.0 after the purchase and included a range of new features and upgrades to it’s inner-workins and display.
Alright, enough history, on with the issue at hand. Feature fragmentation. It’s fairly rampant between these three versions.
Adding/Removing users from lists - Only supported on iPhone
Viewing lists on followers/following - Not available on the Mac
Removing a DM - Not available on the iPad
I may be missing a feature or two but these are the ones I’ve noticed so far. It’s frustrating for users of their apps to have to go, “oh, I need to manage a list, better break out my phone and stop using my iPad” But this is a chance for developers to shine as usual. I wouldn’t care what Twitter says about making clients for their service. If there’s a problem with the current software available that’s always a chance for another developer to enter the competition.
After reading a post on Cult of Mac about the “9 Things Apple Needs to Fix in iOS 5 Before Launch” I got a little peeved as a developer.
Here are my “3 reasons why I hate hearing about non-developers installing iOS 5”
1. It’s not done yet
There are going to be rough edges, bugs, sluggishness and I would expect that from any iOS beta that comes from Apple. They leave a lot of extra logging in and a lot of optimizations out. Stop complaining that some things do not work. It’s called a beta for a reason.
2. You’re advised AGAINST installing this on your main device
… and I bet every single one of you followed that recommendation too. (e_e) Take it from someone that didn’t follow this advice before: This is great advice. Apple knows the beta isn’t perfect. Other apps you have installed may not work, your battery life will suffer, strange shit can happen. They want everyone to experience their products at their best. Not at their worst just to access a new feature before their friends.
3. You’re going to be screwed once beta 1 expires
You can’t keep beta 1 on your device forever. At some unknown date your phone is going to be a brick that can only place emergency calls. I have some bad news for you. Apple is going to fix the beta for everyone workaround and the only option will be to restore back to 4.3. Once iTunes asks if you want to restore a backup of your phone it’s going to complain. Backups can never be restored on to an older version of iOS. Any messages, application data, whatever that you collected over that time frame are gone. If you don’t have a backup from before the beta you will have to start from scratch.
There is only one reason I like seeing people do this. The Windows users in Apple’s developer forums complaining that they can’t get shit working. They paid the $99 fee to get in to the dev program, own 0 Macs, and once they start running in to problems it’s obvious what happened. Those posts make me laugh and laugh and laugh!
The short version: Let developers play with iOS 5 and deal with buggy betas. They are under an NDA and will gripe about it in the dev forums and bug reports as they should. If anyone asks if any beta of iOS is ready to be installed on their device… they obviously are not ready.
PS: This is coming from a person who signed up as a dev to get copy/paste in iOS 3… but I’m making apps now so it’s cool ;)
Wanted to outline how I backup my VPS with Linode. Backups are very important. You want to create a plan that’s redundant, tested, and foolproof.
First you want to figure out what to back up. For me it’s my MySQL data, web, and configuration files to make a rebuild a little easier. For my server this means two directories: /home/user and /etc. To backup MySQL I’ll run mysqldump and that file will be saved in my homedir for easy access later.
Now to figure out where you want these files backed up. I really recommend that you back up your files to two locations. There may be times when one isn’t accessable and you want to be sure your files are safe. Personally I backup everything on a linux machine that I have at home and on space that I have with http://rsync.net. I highly recommend using rsync.net. For less than $5 they offer a great service with almost no downtime. Check their site for details. Either way, for the purposes of this script we’re backing up to another ssh enabled server using rsync (talking about the program, not the service here.)
You can also use Amazon’s Simple Storage Service (S3) but inital setup can be a pain for people new to the service and rsync.net won’t charge you for data transfer.
Since you will (hopefully) running this script automatically through you will not be there every time to enter your password for your remote machines when you start to copy files over. This is taken care of with SSH keys. Once you create your account on rsync.net you can follow these instructions to create the correct keys http://www.rsync.net/resources/howto/ssh_keys.html The process is close to creating keys to connect back to your home (or other) server http://www.ece.uci.edu/~chou/ssh-key.html
So now you should have almost everything needed. A what you want to back up, a remote location to back up to, and a way to ssh in to that location with no password. Next up, creating your rsync command. (If I mean rsync the command I will just say rsync, the service is rsync.net) First, you want to be VERY careful of what paths you use with rsync. It is not uncommon for noobs to try to backup their storage location on to the location they are trying to back up. This will generally destroy all of your data. Be careful and for now use the —dry-run flag until you are ready to perform your first backup.
This is the command that I use:
rsync -vrtz —del —delete-excluded —exclude-from=”/home/user/.rsync/exclude” “/home/user” accountID@server.rsync.net:myvps/home
If you’re unfamiliar with rsync I’ll give a quick rundown. rsync is a utility for copying files from one location to another. It’s biggest strength is syncronyzing those locations where only files that have been changed will be copied. What we’re creating here is an copy of a directory on your server to another location.
Now, for the flags I’m using in order:
Again, TEST THE COMMAND ABOVE WITH —dry-run and tweak it until you have all of the files backing up with no issues and errors. Watch your output for files that you may need to exclude from backing up and add them to your exclude list.
Once that’s all set you’re ready to create a script. Save the below gist as backup.sh on your server. Make sure you change all of the paths and server information to your own. run `chmod 755 backup.sh` Run the script as root to test it out then add the script to root’s cron.
This script assumes that you’re backing up everything in your homedir. (This is where I keep my sites) Your MySQL and /etc data will reside here, be copied to your remote backup, then your /etc backup will be removed. Mine was a bit large so I wanted to save the space.
Now to add another location to your script just duplicate the rsync line and change your server information where appropriate. I have a machine running Ubuntu at home with a drive dedicated to backups. This drive uses ‘Back in time’ to create daily snapshots. This is great for when you remove a file and don’t notice until days later. Since this script runs daily the —del flag will remove any files you trashed even if it was an accident. Trust me, I’ve had it happen a few times :)
I finally got around to setting up Stashboard for myself and I have to say I’m impressed. There were a few hurdles with the installation but that was related to Google App Engine. I’ll explain a bit about the app and process.
Stashboard allows you to create a publically availible “Status board” of your services. These services can really be anything as at first glance Stashboard just allows you to edit the site manually and set if a service is up or down along with a description of what’s going on. This is usefull for services that rhyme with “bitter” that go down quite often, heh.
There is also a simple to use REST interface that handles statuses so if you’re an API junkie like me this will be a lot of fun to integrate in to your own applications. This is something I’m looking forward to playing with at a later date. For now I just want to see if the services I have set up are connectable or not and have the added bonus of this being done automatically. I’m the main consumer of this site so it’s pointless to just update it for me.
Here’s what it looks like for my sites at the moment
If I’ve enticed you enough to give Stashboard a try keep going. This is a general overview of what I did to get started. If you need handholding read the docs or search Google.
To start, create your free account with Google App Engine.
Create an application in App Engine for this installation. stashboard is taken so I went with nf-stashboard. You can name this anything and for the “neat url” folks like myself it can be redirected to your own domain.
For those new to Google App Engine you will need to download the Google App Engine SDK. This installs all of the files needed as well as includes the App Engine Launcher. This application is what you will use to deploy stashboard in to your app. Once it’s installed, open the App Engine Launcher and add your new app. You want to use the name that was picked above as well as make a new directory for your stashboard install locally.
Now, (finally) download stashboard from http://www.stashboard.org/#download It’s towards the bottom of the page. Extract it in to the folder that you specified above. This next step is very important: Open app.yaml and change the line “application: stashboard” Replace stashboard with the name of your app. Save everything, go back to the Google App Engine Launcher, hit deploy and wait a bit. Your files will be uploaded and activated in App Engine.
What you should have now is a fully functional version of Stashboard running on your App Engine account. It’s located at http://<stashboardname>.appspot.com Click on Login at the bottom and start adding services that you want to watch.
Now this is where I experienced an issue. Services that I was adding wouldn’t show up. I kept getting an error that it was an invalid service. When I checked the ‘Datastore Indexes’ section in Google’s account manager section for my app I saw that all of the indexes said ‘error’ next to them. I won’t go over this much but the documentation for App engine says to do this:
Making Stashboard more awesome
This is the part that will take the manual labor out of this whole stashboard thing. Up until now if something goes down you have to log in and mark that down. For me that’s not cool. I want Stashboard to check my services and mark when something goes down for me. I ended up following the instructions on this site http://www.shockoe.com/blog/using-stashboard-for-server-monitoring/
Just be sure to find the correct slug to add to that script. This screenshot should help you find it. Make sure when you’re in the Datastore Viewer that you select service as the kind of entries you want to view.
I’ll be tweaking that check script later plus looking in to how to use Stashboard’s REST API to keep track of services that aren’t checkable through an http request.
(the custom domain isn’t resolving for me in some places. going to have to check that out)