insecure cameras by Sebastian Morales

Last summer I happened attend a coding meetup, there I actually met Leon Eckert who turns out to also be an ITP student (2nd year)! One of the presenters during the meetup was showing a project he did with insecure cameras pulled from insecam.org. At this point I became really intrigued by the concept and once in NYC, I started looking for cameras in the city. 

Most of the cameras happen to be inside buildings. Aside of being a little creepy they are not very interesting to me, this lead me to focus in just a couple of cameras which pointed to the outdoors. 

After going through the 100 or so cameras in nyc, I came across two that looked promising, the problem then was that not a lot of information is given about the location of the cameras, except for... well, the camera feed itself. 

Tracking the locations

The first camera I found was actually the one with the cobblestone ground, this actually narrowed down the search significantly since only a couple of streets in ny have this type of pavement. 

Looking through the internet, I came across this NYC Bike Maps website that lists all the streets in the city with cobblestone pavements. 

http://www.nycbikemaps.com/maps/cobblestones/

After a long virtual walk I finally found that distinctive red building!

Time to go pay a personal visit!

The second camera was a little harder to find but eventually I did.

Also, thanks to Tiri for joining my last minute adventures! and thanks to Jenny for capturing some of the images. 

Thinking forward, I am not exactly sure what do I want to do with this knowledge, the first thing that comes to mind is a video but there could be other things to explore. Perhaps distance the project from questions of privacy and surveillance and use the cameras a medium to explore something completely different. 

In the mean time, here a quick video a couple of friends and I did:

New tab window to the sky by Sebastian Morales

This idea was inspired by spending too much time in front of the computer and not enough time looking at the moon. 

I first started by looking at the Astronomical Applications Department website (aa.usno.navy.mill), in particular at their moon phase api. 

Here I learned that the most basic api call I could make was something like this:

"http://api.usno.navy.mil/moon/phase?date=today&nump=1"

Which in tern returned a JSON string with well... todays moon. 

{
  "error": false,
  "apiversion": "1.3.0",
  "year": 2016,
  "month": 10,
  "day": 27,
  "numphases": 1,
  "datechanged": false,
  "phasedata": [
   {
      "phase": "New Moon",
      "date": "2016 Oct 30",
      "time": "17:38"
    }
  ]
}

See how the date I entere (Oct, 27) doesn't match the date returned for the phase (Oct 30)? Thats because Oct 27 did not have a full phase and the next actual phase was Oct 30. 

 

This was my first swing at using APIs but I realized that I could go much deeper still exploring this same API.

The sun

Using a couple of extra parameters, I could get not only the phase of the moon but also the time it would set and rise for a given location. The same was true for the sun which made me excited about doing a day animation.

{
"error":false,
"apiversion":"1.3.0",
"year":2016,
"month":10,
"day":26,
"dayofweek":"Wednesday",
"datechanged":false,
"state":"NY",
"city":"New York",
"lon":-73.92,
"lat":40.73,
"county":"",
"tz":-5,
"isdst":"yes",

"sundata":[
            {"phen":"BC", "time":"6:52 a.m. DT"},
            {"phen":"R", "time":"7:20 a.m. DT"},
            {"phen":"U", "time":"12:40 p.m. DT"},
            {"phen":"S", "time":"5:59 p.m. DT"},
            {"phen":"EC", "time":"6:27 p.m. DT"}],

"moondata":[
            {"phen":"R", "time":"3:17 a.m. DT"},
            {"phen":"U", "time":"9:50 a.m. DT"},
            {"phen":"S", "time":"4:16 p.m. DT"}],

"closestphase":{"phase":"Last Quarter","date":"October 22, 2016","time":"3:14 p.m. DT"},
"fracillum":"15%",
"curphase":"Waning Crescent"
}

The structure is slightly different so it required a little tweaking but nothing crazy. What took a while to figure out is that for some days, the moon will set before it rises... WHAT??? This happens when the moon rises duing the evening and sets in the morning, as you would usually expect, the problem is that the moon is setting on the next different day. Which means that if you only look at one day, the moon will set before it rises. This kept causing all this problems in my animation where you would see the moon come out from the wrong side and set on the opposite time at the wrong time. 

At the end I decided to include this little program as my default new tab in chrome, meaning that every time I open a new tab I see a subtle reminder that there is more than pixels in this world, and that perhaps it is worth going outside to explore it.

Joystick Mouse by Sebastian Morales

If you are reading this post it is likely that you spend more than 4 hours a day in front of a computer. Depending on what you are doing this can create a lot of strain on your wrists, arms and shoulders. 

I remember a friend of mine would have a collection of mice on her desk, every couple of hours she would grab a different one, no matter how ergonomic the mice was she would eventually get tired of the position.  

I think this is because all of these mice are meant to be used in only one configuration, and no matter how ergonomic it is, the human body is meant to move. 

Inspired by this challenge, I wanted to create a mouse that didn't locked the user into a single position, one that could be used upside down, laying down or standing up far away form the computer.  

Welcome the Arduino Joystick Mouse!

Turns out that the Arduino Leonardo is perfect for this since it can out of the box access your mouse controls through USB. 

The prototype is quite simple, it has a 2DOF joystick plus a push button. I also added two more buttons as a regular mouse would. An additional idea was to include a 9DOF sensor to detect complex movements. 

This could transform the mouse into a 3D mouse, ideal for creating complex CAD models where you can easily move around your models with elegant precision. This however, requires additional programming that I didn't prioritize in these short weeks. 

An additional advantage of using such 9DOF sensor would be programming movement patterns, perhaps you could copy and paste by simulating the motion of spooning and pouring for example. 

A lot more complex behaviors could be programmed as desired, this means that the firmware inside the mouse should be able to update easily, this means that the brains inside of the mouse should be able to update simply thought the same cable. This made the ATMEGA32U4 the ideal candidate.

After simplifying my MVP for my first prototype I settled on having a simple mouse that could click (right and left), scroll  and move the cursor. Pretty basic but simple to modify if I ever decided to add the 9DOF sensor. 

Eagle 

Ripup, route, ratsnest... your 3 favorite commands while laying out the circuit 

Once I finally simplified my traces and thought it could work it was actually time to make it. 

I skipped a couple of pictures here but it involved printing on vinyl and transferring the ink by pressing it and heating it inside a hair iron. 

Then dropping it on acid.

The process didn't came out without its own problems. 

...like all my pads touching or even completely connected.

The solder is the right place but it looks lime the solder is a little too liquid.

Time to do a continuity check!

MUSIC EVERYTHING BEEPS!!!

So back to the microscope and try to make  things stop touching. Hard to see it but there is a knife trying to separate two paths that looks like might be touching. 

...test again... beeps again... f this...

Final thoughts

My final (not working) prototype is about (pretty much exactly) the same size as my original one. Making me reconsider if this was the right project to try this on. 

Gradients!!! by Sebastian Morales

For this weeks assignment I wanted to explore making gradients and smooth transitions without using the lerpColor() function. This to have total control on the gradient and shape. 

This prove difficult to achieve on the online editor due to a bug that will think I was running infinite loops. I filed the bug but in the mean time hosted my sketch on amazon s3.