The kids did programming camp at Microsoft for the last couple weeks. They learned programming with a new web-based visual programming language called TouchDevelop.
https://www.touchdevelop.com
Author: tim
Graph Visualizer in Unity
The Playable Graph Visualizer has just released, a companion to the Playable Graph API, as an open source project (as usual, under the MIT/X11 license). It serves both as a debugging tool for your graphs, and a good example of how to use the Graph API.
https://bitbucket.org/Unity-Technologies/playablegraphvisualizer/

Blender: Make Simplified Chinese 3D Text in Blender
The `FZLanTingHei-B-GBK.TTF` font can be found [here].
Python Multipart Posts
To use a camera with the Raspberry PI, first [configure the Raspberry PI] to enable the camera.
In order to send large images from the Raspberry PI camera to a web server, the image has to be sent in parts. This requires the Python `poster` module. https://pypi.python.org/pypi/poster/
To be able to install a python module, `pip` has to be installed.
sudo pip install poster
This is the server PHP page that saves the image.
save_image.php
<?php
$image = $_FILES["image"];
if ($image == null) {
echo "Missing image to save!";
} else {
echo "Saved image!";
$tmp_name = $_FILES["image"]["tmp_name"];
move_uploaded_file($tmp_name, "image.jpg");
}
?>
This Python script sends the image to the server.
save_image.py
#!/usr/bin/env python
import urllib, urllib2
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
register_openers()
url = "http://domain.com/path/save_image.php"
print "url="+url
filename = 'image.jpg';
if (os.path.isfile(filename)) :
values = {'image':open(filename)}
data, headers = multipart_encode(values)
headers['User-Agent'] = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
req = urllib2.Request(url, data, headers)
req.unverifiable = True
content = urllib2.urlopen(req).read()
print (content)
else:
print 'No image file found to upload';
print '\r\nProgam complete.'
This script will capture from the camera and then call the above script to upload the image.
capture_image.py
#get access to the camera
from picamera import PiCamera
#import so we can invoke another script
import subprocess
#sleep so we can wait on the camera
from time import sleep
# create a camera object
camera = PiCamera()
#set the image resolution
camera.resolution = (320, 240)
#rotate the camera if upside-down
camera.rotation = 180
#show preview with some transparency
camera.start_preview(alpha=225)
#wait two seconds for camera lighting
sleep(2)
#save image locally
camera.capture('image.jpg')
#stop the preview
camera.stop_preview()
#invoke the script to upload the image
subprocess.call('python save_image.py', shell=True)
UV Layout
Apparently, UBISoft is big into this tool for UV Layout editing called UVLayout!!!
http://www.uvlayout.com/
Visual Studio on Mac
Finally there’s a decent code editor when you find yourself on Mac.
https://code.visualstudio.com/
Windows 10 – Raspberry PI 2
Windows 10 can be installed on the Raspberry PI 2 from a free download.
http://ms-iot.github.io/content/Downloads.htm
Backyard Brains
The future is here if you can hack the nervous system cheaply.
http://www.ted.com/talks/greg_gage_how_to_control_someone_else_s_arm_with_your_brain
https://www.backyardbrains.com/
BackyardBrains also has this awesome HackerHand.
https://backyardbrains.com/products/HackerHand
Servo Rotation
The servo can be turned clockwise, counter clockwise, and to the 90 degree position, but it lacks a way to query the current rotation. The rotation needs to be calculated manually and this script is a first attempt.
#!/usr/bin/env python
import RPi.GPIO as GPIO
import datetime
import time
servo_pin = 22
servo_pin2 = 18
# 60 degrees / 0.1seconds
servo_speed = 0.1
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(servo_pin, GPIO.OUT)
GPIO.setup(servo_pin2, GPIO.OUT)
last_time = datetime.datetime.now()
current_time = datetime.datetime.now()
sumTime = datetime.timedelta(0, 0)
accuracy = 0.01
targetRotation = 0
currentRotation = 90
pulse1 = GPIO.PWM(servo_pin, 50)
pulse2 = GPIO.PWM(servo_pin2, 50)
logTime = datetime.datetime.now()
def log(msg):
global deltaTime
global logTime
if (logTime < datetime.datetime.now()):
logTime = datetime.datetime.now() + datetime.timedelta(0, 0.5)
print msg
return
def reset(pulse):
pulse.start(7.5);
pulse.ChangeDutyCycle(7.5)
return
def update(pulse, targetRotation):
global deltaTime
global sumTime
global servo_speed
global accuracy
global currentRotation
log ("TargetRotation: " + str(targetRotation) + " CurrentRotation: "+str(currentRotation))
if (targetRotation == 90):
pulse.ChangeDutyCycle(7.5)
if ((currentRotation - targetRotation) < -accuracy):
currentRotation += servo_speed
elif ((currentRotation - targetRotation) > accuracy):
currentRotation -= servo_speed
else:
pulse.ChangeDutyCycle(0)
elif ((currentRotation - targetRotation) < -accuracy):
pulse.ChangeDutyCycle(12.5)
currentRotation += servo_speed
elif ((currentRotation - targetRotation) > accuracy):
pulse.ChangeDutyCycle(2.5)
currentRotation -= servo_speed
else:
pulse.ChangeDutyCycle(0)
return
try:
reset(pulse1)
reset(pulse2)
time.sleep(1)
print "setup complete"
while True:
last_time = current_time
current_time = datetime.datetime.now()
deltaTime = current_time - last_time;
sumTime += deltaTime;
if (sumTime.total_seconds() > 3.0):
#print (sumTime)
sumTime -= datetime.timedelta(0, 3)
targetRotation = (targetRotation + 45) % 180
update(pulse1, targetRotation);
update(pulse2, targetRotation);
time.sleep(0);
except KeyboardInterrupt:
print '\r\nProgam complete.'
GPIO.cleanup();
Python Time Handling
Time and logic is needed to do anything fancy in Python.
#!/usr/bin/env python
import datetime
import time
# global time of last frame
last_time = datetime.datetime.now()
# global time of current frame
current_time = datetime.datetime.now()
# a running some of the delta time of each frame
sumTime = datetime.timedelta(0, 0)
# define an update function
def update():
# make global accessibles from function
global deltaTime;
global sumTime;
#prints the current time hours, minutes, seconds, and milliseconds
#print (datetime.datetime.now().strftime("%H:%M:%S.%f"))
# if condition checks for 1 second to pass
if (sumTime.total_seconds() > 1.0):
# print the elapsed time over the last second
print (sumTime)
# reset the elapsed time
sumTime -= datetime.timedelta(0, 1)
return
try:
while True:
# record the time in the last frame
last_time = current_time
# get the current time hours, minutes, seconds, milliseconds
current_time = datetime.datetime.now()
# calculate the time difference between frames
deltaTime = current_time - last_time;
# keep track of the elapsed time
sumTime += deltaTime;
# invoke the update function
update();
# yield for the next frame
time.sleep(0);
# wait for a key to exit
except KeyboardInterrupt:
print '\r\nProgam complete.'
Raspberry PI 2 – Servo Control
Using pulse modulation, the Raspberry PI can adjust a servo.
https://www.youtube.com/watch?v=ddlDgUymbxc
Here I combined the LED blinking example with the servo example.
#!/usr/bin/env python import RPi.GPIO as GPIO import time led_pin = 15 led_pin2 = 16 led_pin3 = 36 led_pin4 = 37 GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(led_pin, GPIO.OUT) GPIO.setup(led_pin2, GPIO.OUT) GPIO.setup(led_pin3, GPIO.OUT) GPIO.setup(led_pin4, GPIO.OUT) GPIO.setup(22, GPIO.OUT) p = GPIO.PWM(22, 50) p.start(7.5); try: while True: GPIO.output(led_pin, GPIO.HIGH) GPIO.output(led_pin2, GPIO.HIGH) GPIO.output(led_pin3, GPIO.HIGH) GPIO.output(led_pin4, GPIO.HIGH) p.ChangeDutyCycle(7.5) time.sleep(1) GPIO.output(led_pin, GPIO.LOW) GPIO.output(led_pin2, GPIO.LOW) GPIO.output(led_pin3, GPIO.HIGH) GPIO.output(led_pin4, GPIO.HIGH) p.ChangeDutyCycle(12.5) time.sleep(1) GPIO.output(led_pin, GPIO.HIGH) GPIO.output(led_pin2, GPIO.HIGH) GPIO.output(led_pin3, GPIO.HIGH) GPIO.output(led_pin4, GPIO.HIGH) p.ChangeDutyCycle(7.5) time.sleep(1) GPIO.output(led_pin, GPIO.HIGH) GPIO.output(led_pin2, GPIO.HIGH) GPIO.output(led_pin3, GPIO.LOW) GPIO.output(led_pin4, GPIO.LOW) p.ChangeDutyCycle(2.5) time.sleep(1) except KeyboardInterrupt: print '\r\nBack to neutral...' p.ChangeDutyCycle(7.5) time.sleep(1) print '\r\nProgam complete.' GPIO.cleanup();
100 Robotics Projects
100 Robotics Projects
https://www.youtube.com/watch?v=V32AhUZCrAQ
Raspberry PI 2 – Alternating LEDs
The following Python alternates between two LEDs and then goes dark before repeating.
#!/usr/bin/env python import RPi.GPIO as GPIO import time led_pin = 15 led_pin2 = 37 blinkSpeed = 5/2.0 #blink x times per second GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(led_pin, GPIO.OUT) GPIO.setup(led_pin2, GPIO.OUT) try: while True: GPIO.output(led_pin, GPIO.HIGH) GPIO.output(led_pin2, GPIO.LOW) time.sleep(blinkSpeed / 3.0) GPIO.output(led_pin, GPIO.LOW) GPIO.output(led_pin2, GPIO.HIGH) time.sleep(blinkSpeed / 3.0) GPIO.output(led_pin, GPIO.LOW) GPIO.output(led_pin2, GPIO.LOW) time.sleep(blinkSpeed / 3.0) finally: print 'finally'
Raspberry PI 2 – Blinking LED
Here’s a short Python script to toggle an LED using GPIO.
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
pin = 15
blinkSpeed = 1/5.0 #blink x times per second
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.OUT)
try:
while True:
print('PIN {} is going HIGH'.format(pin))
GPIO.output(pin, GPIO.HIGH)
time.sleep(blinkSpeed / 2.0)
print('PIN {} is going LOW'.format(pin))
GPIO.output(pin, GPIO.LOW)
time.sleep(blinkSpeed / 2.0)
finally:
print 'finally'
Sails.js Local Development Environment
Some Node.js modules use Python for compiling packages.
* https://www.python.org
Node.js is a scalable networking platform.
https://nodejs.org/
System.Threading.Tasks on .Net 3.5
This NuGet library provides async task functionality in .Net 3.5.
https://www.nuget.org/packages/System.Threading.Tasks.Unofficial/
Raspberry PI 2 – Laptop
To make a Raspberry PI 2 Laptop, all you need is a mouse, keyboard, and TFT display. The battery is optional.
http://techcrunch.com/2015/04/17/this-diy-raspberry-pi-laptop-is-perfect-for-your-weekend-machinations/?ncid=rss
Beehives and Technology
IndieGogo raised $10M for bee hives.
https://www.indiegogo.com/projects/flow-hive-honey-on-tap-directly-from-your-beehive
Bees can be individually tracked with a tiny antennae.
http://warrenfyfenews.org/how-do-you-track-a-honey-bee/
Now you just need a tiny microphone and speaker so you can talk to your bees.
Raspberry PI 2 – Rocksmith Tone Cable
I’ve wanted to play my Cello with RockSmith but the octave needs to be adjusted. This DIY project shows how to make your own tone cable and I could use the Raspberry PI to adjust the pitch.
http://makezine.com/2015/01/30/for-those-about-to-rocksmith-hack-a-custom-cable/
Raspberry PI 2 – Cannibalize Load Sensor
Maybe I can sacrifice one of my old scales to repeat this detailed project and connect to the Raspberry PI 2.
https://www.youtube.com/watch?v=fPzUtzFJFus
I’ll graph the results using ChartsJS.
http://www.chartjs.org/
Raspberry PI 2 – Sails.js
Installing Sails.js required building and installing Node.js from source.
I let the source build overnight and then moments later ‘sails lift’ was functional.
https://github.com/tgraupmann/TAGENIGMA-Docs/blob/master/Sails.md
Also the reference guide is super helpful.
http://sailsjs.org/#!/documentation/reference/
Here is also a useful C# client:
https://github.com/Quobject/SocketIoClientDotNet
Raspberry PI 2 – VNC
I picked up a Raspberry PI 2 and it’s working super speedy. Quad-core 900 MHz, ARM, 4-usb, HDMI/audio out.
http://www.amazon.com/CanaKit-Raspberry-Ultimate-Starter-Components/dp/B00G1PNG54/
After settting up WIFI, installing VNC made connecting the display, mouse, and keyboard no longer necessary. The boot process can be altered to start VNC server automatically.
https://www.raspberrypi.org/documentation/remote-access/vnc/
Logan: Authoring a level in Duck Game
IBUYPOWER Six Core
I ordered a second desktop from IBUYPOWER. A bunch of components were defective and replaced under warranty. (HD, Case Fan, Memory Sticks, Graphics Card)
Still running well after (5 years running 24/7).
1 x Case Thermaltake Armor Revo Full Tower Gaming Case – Snow Edition
1 x iBUYPOWER Labs – Noise Reduction Advanced – iBUYPOWER Harmony SRS Sound Reduction System
1 x iBUYPOWER Labs – Internal Expansion [6-Port] NZXT Internal USB Expansion System + Bluetooth & Wireless N Modules
1 x Processor Intel® Coreâ„¢ i7 3930K Processor (6x 3.20GHz/12MB L3 Cache) – Intel Core i7 3930K
1 x iBUYPOWER PowerDrive PowerDrive Level 2 – Up to 20% Overclocking
1 x Processor Cooling Asetek 550LC Liquid CPU Cooling System (Intel) – ARC Dual Silent High Perfornamce Fan Upgrade (Push-Pull Airflow)
1 x Memory 64 GB [8 GB x8] DDR3-1600 Memory Module – Corsair or Major Brand
1 x Video Card NVIDIA GeForce GTX 680 – 2GB – SLI Mode (Dual Cards)
1 x Video Card Brand Major Brand Powered by AMD or NVIDIA
1 x Motherboard [3-Way SLI] ASUS Rampage IV Extreme
1 x Power Supply 1050 Watt – Thermaltake Toughpower Grand-1050M – Free Upgrade to 1200 Watt Toughpower Grand-1200M ($40 Savings)
1 x Primary Hard Drive 2 TB HARD DRIVE — 64M Cache, 7200rpm, 6.0Gb/s – Single Drive
1 x Optical Drive 24X Dual Format/Double Layer DVD±R/±RW + CD-R/RW Drive – Black
1 x Flash Media Reader / Writer 12-In-1 External USB Flash Media Card Reader/Writer
1 x Meter Display NZXT Sentry 2 Touch Screen Fan Controller & Temperature Display
1 x Sound Card 3D Premium Surround Sound Onboard
1 x Network Card Onboard LAN Network (Gb or 10/100)
1 x Operating System None- Pre-formatted Hard Drive Only
1 x Advanced Build Options Professional wiring for all cables inside the system tower – Achieve exceptional airflow in your chassis
1 x Advanced Build Options Professional wiring for all cables inside the system tower – Basic Pro Wiring
![2015-04-22+12.06.15[1]](https://tagenigma.com/blog/wp-content/uploads/2015/04/2015-04-22-12.06.151-276x300.jpg)
![20150418_211943[1]](https://tagenigma.com/blog/wp-content/uploads/2015/04/20150418_2119431-169x300.jpg)
![20150418_173116[1]](https://tagenigma.com/blog/wp-content/uploads/2015/04/20150418_1731161-169x300.jpg)


