I keep forgetting how to do this, so I thought that I would just write it down somewhere. First, you'll need the classdump-dyld
tweak package, which you can get from Cydia on the BigBoss repo (it's by Elias Limneos, who hosts the only reason I do tweak dev), and you'll also need cycript
. Then, you'll need the application you want to dump running. In this case, I'm going to be doing it for Spotify.
Read More
I got it into my head that I wanted to be able to programmatically make my phone speak whatever I wanted it to. Effectively Siri, but unprompted, and without care for silent, or low volume. On a normal phone, this would be impossible. But on a jailbroken phone, there was probably a way to do it. I first started up by making an Activator event that could be passed a string, and would say it. It did this using the AVSpeechSynthesizer
class, and using the com.apple.ttsbundle.Samantha-premium
voice (which is Siri's default voice). I wanted to be able to use the voice that I normally use for Siri/Victor, which is a British man, but while it seemed to be in the system, and it was clearly being used for actual Siri, I couldn't figure out a way to trigger it through AVSpeechSynthesizer (the voice's name is Arthur).
Read More
For Christmas, in addition to the WeMo switch I also got the Amazon Echo Dot. It's a great device, but it was a little bit complicated to work into my AI setup. Ideally, I would change it's wake word to 'Victor', and be able to add in custom actions, like 'Victor, play [movie] on Netflix'. I quickly learned, however, that this is impossible. So it was time to hack together a solution. I changed the wake word to 'Echo' to avoid having another AI name (Alexa) introduced into the house. Then, I set up a custom skill through Amazon who was triggered by 'Victor'. Commands through Echo to Victor would be handled by a custom Lambda function through AWS, and then pushed into the same 'tasks' pipeline as command sent through Siri from my phone. Instead, it would be triggered like 'Echo, tell Victor to play [movie] on Netflix'.
Read More
For Christmas, one of the gifts that I got was a Belkin WeMo Switch. It was only $30 on sale, and while it had middling reviews (like many of the WiFi-switches), it could be controlled through cURL commands, which made it very easy to hook into Victor. So I set it up, plugged in my light, and spent like 20 minutes trying to set it up with the app, which kept losing the connection. I can't really say it was easy to setup, but it's worked since fine, and it is indeed very easy to programmatically control.
Read More
But of course, that isn't the end. Not even close. In the beginning of fall term of junior year, my computer was once again right next to the TV, and my levels of laziness had reached an all time high. I once again started to think of ways that I could control Spotify, Netflix, and my movies from the comfort of the futon (note: it was approximately three feet away from the computer). I pulled out the Kinect again, but remembered the problems that it had last time. I couldn't talk to it if I wasn't there, the speech recognition API didn't allow for a lot of commands, and it relied on something that was frankly, poorly supported and had next to no online documentation. So it was time for a change.
Read More
I started this blog when I first got to Dartmouth. I'm now over a term into my junior year, and I still haven't mentioned one of my largest ongoing projects, and by far the one that I get the most enjoyment out of: Victor. It was around the summer of my freshman year when I first started messing around with the Kinect v2 SDK, and had the idea to build out an AI that could see the room, hear commands, and serve as a sort of custom built Siri. This idea for an AI would (eventually) be fleshed out into Victor.
Read More
When you're requesting pages (such as transcripts, DASH, etc.) through Dartmouth Banner, you slowly accumulate cookies. But only one of them is actually used to verify who you are: the SESSID one. It's a base64 encoding of what appears to be 6 random alphanumerics, followed by your PIDM, the Banner specific code that was the root of the previous exploit. It locks you out if you try and use an old SESSID, and forces you to log in again.
Read More
It's been a while since I've played with the Dartmouth ID's, but my brother got me a Magnetic Reader-Writer for Christmas, so I've been having a blast messing around with it. I wrote a bit about the magnetic stripe over 2 years ago, but most of that was conjecture from one VERY out of date article I found online. So, let's take a look at what's on it now!
Read More
When I first created Dog-a-Day, it ran off of a PHP script that had the images for the days in an array. I then decided to move it into a MySQL database, where I would insert URLs and dates. That quickly became too much of a hassle, and I created a simple form that would take in a URL, and automatically calculate the next date, and insert it into the database. I realized that duplicates might be an issue if I wasn't paying close enough attention, so I implemented perceptual hashing, to try and find similar images. But this was all built on top of previous functionality, and was bad enough to consistently make it harder and harder to add images. So I decided it was time to rebuild it.
Read More
I posted about ShiftCycle before, so read quickly about it if you missed that blog post. One of the ShiftCycle users messaged me a while ago asking to be able to reorganize the order of changes, which required a rewrite of how the tweak stored permissions.
Read More