<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3248031238685375620</id><updated>2024-10-24T06:22:07.631-04:00</updated><category term="python"/><category term="Visual Basic .NET"/><category term="security"/><category term="8tracks"/><category term="HackTX"/><category term="VPN"/><category term="facebook"/><category term="gaming"/><category term="hack"/><category term="hackathon"/><category term="hello world"/><category term="javascript"/><category term="js"/><category term="node-webkit"/><category term="nw.js"/><category term="os x"/><category term="pywin32"/><category term="spotflux"/><category term="tunnelblick"/><category term="win32api"/><category term="worldwinner"/><title type='text'>capablemonkey</title><subtitle type='html'>another monkey capable of using a computer</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-3404105780324235474</id><published>2017-11-05T17:39:00.001-05:00</published><updated>2017-11-05T17:56:21.780-05:00</updated><title type='text'>Simulating Fetch Robotics Freight with Steam Controller Teleop</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://robohub.org/wp-content/uploads/2015/04/a1df0b82-7d3e-4bc2-af82-c7d179297b06.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://robohub.org/wp-content/uploads/2015/04/a1df0b82-7d3e-4bc2-af82-c7d179297b06.jpg&quot; data-original-height=&quot;455&quot; data-original-width=&quot;527&quot; height=&quot;276&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Hunter College owns Freight and Fetch robots.&amp;nbsp; I was asked to help figure out how to reduce the speed of the joystick teleop input for the Freight robot.&amp;nbsp; The catch is, I don&#39;t have physical access to either the robot or the joystick it ships with.&amp;nbsp; Instead, I had to simulate the robot and attempt to control it using the only joystick I have on hand: a Steam controller.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Having never dealt with ROS or robots in general, this was the start of a journey. The documentation for fetch_teleop is pretty non-existent, so this article documents what I did and will hopefully serve as a reference for someone else who wants to do something similar.&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Installing ROS&lt;/h3&gt;
&lt;div&gt;
I used a Macbook Pro on OS X El Capitan.&amp;nbsp; ROS doesn&#39;t officially support OS X, though there are guides for compiling ROS for OS X.&amp;nbsp; That process seems pretty hairy, so I decided instead to use an Ubuntu VM on VirtualBox.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The Fetch manual is a great resource and I followed the &lt;a href=&quot;http://docs.fetchrobotics.com/gazebo.html&quot; target=&quot;_blank&quot;&gt;tutorial&lt;/a&gt; on Gazebo simulation.&amp;nbsp; It calls for an older version of ROS, ROS Indigo running on Ubuntu 14.04.&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Follow this &lt;a href=&quot;http://wiki.ros.org/indigo/Installation/Ubuntu&quot; target=&quot;_blank&quot;&gt;guide&lt;/a&gt; to install ROS indigo.&lt;/div&gt;
&lt;h3&gt;
Install Gazebo and Fetch Robotics simulation&lt;/h3&gt;
Install gazebo (per &lt;a href=&quot;http://gazebosim.org/tutorials?tut=install_ubuntu&quot; style=&quot;background-color: white; font-family: inherit;&quot; target=&quot;_blank&quot;&gt;guide&lt;/a&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: inherit;&quot;&gt;):&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;pre style=&quot;background-color: white; box-sizing: border-box; line-height: 1.5; overflow: auto; padding: 12px;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 12px;&quot;&gt;&lt;span style=&quot;color: #404040; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;andale mono wt&amp;quot; , &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;lucida sans typewriter&amp;quot; , &amp;quot;dejavu sans mono&amp;quot; , &amp;quot;bitstream vera sans mono&amp;quot; , &amp;quot;liberation mono&amp;quot; , &amp;quot;nimbus mono l&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;curl -ssL http://get.gazebosim.org | sh&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
Then, install the fetch gazebo simulation:&lt;br /&gt;
&lt;pre style=&quot;background-color: white; box-sizing: border-box; line-height: 1.5; overflow: auto; padding: 12px;&quot;&gt;&lt;span style=&quot;color: #404040; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;andale mono wt&amp;quot; , &amp;quot;andale mono&amp;quot; , &amp;quot;lucida console&amp;quot; , &amp;quot;lucida sans typewriter&amp;quot; , &amp;quot;dejavu sans mono&amp;quot; , &amp;quot;bitstream vera sans mono&amp;quot; , &amp;quot;liberation mono&amp;quot; , &amp;quot;nimbus mono l&amp;quot; , &amp;quot;monaco&amp;quot; , &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;sudo apt-get update&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style=&quot;background-color: white; box-sizing: border-box; color: #404040; font-family: Consolas, &amp;quot;Andale Mono WT&amp;quot;, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Lucida Sans Typewriter&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Nimbus Mono L&amp;quot;, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 12px; line-height: 1.5; overflow: auto; padding: 12px;&quot;&gt;sudo apt-get install ros-indigo-fetch-gazebo-demo&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;
Install Steam Controller drivers for Ubuntu&lt;/h3&gt;
&lt;div&gt;
&lt;a href=&quot;https://github.com/kozec/sc-controller&quot; target=&quot;_blank&quot;&gt;SC Controller&lt;/a&gt; is a great project which provides a driver for and allows you to use your Steam Controller outside of Steam.&amp;nbsp; To install:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;wget -nv https://download.opensuse.org/repositories/home:kozec/xUbuntu_14.04/Release.key -O Release.key sudo apt-key add - &amp;lt; Release.key&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;sh -c &quot;echo &#39;deb http://download.opensuse.org/repositories/home:/kozec/xUbuntu_14.04/ /&#39; &amp;gt; /etc/apt/sources.list.d/sc-controller.list&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;sudo apt-get update&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;sudo apt-get install sc-controller&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
After installing, restart your VM.&amp;nbsp; Your Steam controller should show up as jsX, where X is the index number of the joystick under /dev/input.&amp;nbsp; That means /dev/input/js0 if you have no existing joysticks, and js2 for me since I have virtualbox guest additions as /dev/input/js0 and /dev/input/js1.&amp;nbsp; You can test that the joystick is working using joytest:&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;sudo jstest /dev/input/jsX&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
Install Joy and fetch_teleop&lt;/h3&gt;
&lt;div&gt;
Next, we need to install the joy and fetch_teleop packages.&amp;nbsp; fetch_teleop maps joystick input to control signals for the robot.&amp;nbsp; fetch_teleop subscribes to the /joy topic, which is published by joy.&amp;nbsp; joy publishes the state of a Linux joystick.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;sudo apt-get install ros-indigo-joy ros-indigo-fetch-teleop&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;h3&gt;
Run Simulation&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWTb2zZsueENPVrE5qbrD_9Vdz-uc0DAXHnlZp5evoehnR9Q9QC5Vmt2tYTcpS7nbHPgf0nTRjHv1jWAwrvPI0MCgoB_YWWP8wPhJCv7vCE1KtlXQIhQmqiQOOb3httRNQlbvJNKRViMe/s1600/Screenshot+2017-11-05+15.44.16.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;911&quot; data-original-width=&quot;1600&quot; height=&quot;363&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWTb2zZsueENPVrE5qbrD_9Vdz-uc0DAXHnlZp5evoehnR9Q9QC5Vmt2tYTcpS7nbHPgf0nTRjHv1jWAwrvPI0MCgoB_YWWP8wPhJCv7vCE1KtlXQIhQmqiQOOb3httRNQlbvJNKRViMe/s640/Screenshot+2017-11-05+15.44.16.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Now we&#39;re ready to start the simulation!&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Launch the master node and playground:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;roslaunch fetch_gazebo playground.launch robot:=freight&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If you&#39;d like, to play around, you can use your keyboard to control the robot.&amp;nbsp; In a new terminal, run:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosrun teleop_twist_keyboard teleop_twist_keyboard.py&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Next, we need to start the Joy node and tell it which controller to use.&amp;nbsp; Remember jsX from earlier.&amp;nbsp; &amp;nbsp;In a new terminal:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosparam set joy_node/dev &quot;/dev/input/js2&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosrun joy joy_node&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To test that joy is publishing messages, we can echo the /joy topic in a new terminal:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rostopic echo joy&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You should see output like this when you move the joystick:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;header:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; seq: 9847&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; stamp:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; secs: 312&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; nsecs: 756000000&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; frame_id: &#39;&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;axes: [-0.0, -0.0, 1.0, -0.0, -0.0, 1.0, -0.0, -0.0]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;---&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;h3&gt;
Configure and launch fetch_teleop&lt;/h3&gt;
The Fetch &amp;amp; Freight manual doesn&#39;t mention how to configure the speed/acceleration when using Fetch Robotics&#39; bundled joystick. This is mostly what I discovered from reading the source of fetch_teleop.&lt;br /&gt;
&lt;br /&gt;
fetch_teleop gets parameters from the parameter server under the following namespace:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;/teleop/{component}/{parameter}&lt;component&gt;&lt;component&gt;&lt;parameter&gt;&lt;parameter&gt;&lt;component&gt;&lt;param /&gt;&lt;/component&gt;&lt;/parameter&gt;&lt;/parameter&gt;&lt;/component&gt;&lt;/component&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
There are 5 components, each of which have their own params:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;torso&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;gripper&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;arm&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;head&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;base&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Since I&#39;m simulating the Freight robot, which doesn&#39;t have an arm, head, or torso, we only care about moving the base.&amp;nbsp; For my Steam Controller I had to remap the inputs for deadman from the default of button 3 to button 0 (the A button) and axes from w=3 and x=0 to w=1 and x=0 (the left joystick) like so:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosparam set teleop/base/button_deadman 0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosparam set teleop/base/axis_x 0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosparam set teleop/base/axis_w 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Then, we can change the maximum velocity and acceleration along the w and x axes:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosparam set teleop/base/max_windup_time 0.25&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosparam set teleop/base/max_acc_x 0.5&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosparam set teleop/base/max_acc_w 1.5&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosparam set teleop/base/max_vel_x 1.0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosparam set teleop/base/max_vel_w 1.5&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
And finally, run fetch_teleop in a new terminal:&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;rosrun fetch_teleop joystick_teleop&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
You should now be able to steer the robot.&amp;nbsp; Be sure to hold down the deadman, or else your input will be ignored!&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/3404105780324235474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2017/11/simulating-fetch-robotics-freight-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/3404105780324235474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/3404105780324235474'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2017/11/simulating-fetch-robotics-freight-with.html' title='Simulating Fetch Robotics Freight with Steam Controller Teleop'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWTb2zZsueENPVrE5qbrD_9Vdz-uc0DAXHnlZp5evoehnR9Q9QC5Vmt2tYTcpS7nbHPgf0nTRjHv1jWAwrvPI0MCgoB_YWWP8wPhJCv7vCE1KtlXQIhQmqiQOOb3httRNQlbvJNKRViMe/s72-c/Screenshot+2017-11-05+15.44.16.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-4590539943290464522</id><published>2015-03-22T01:17:00.001-04:00</published><updated>2015-03-22T01:18:00.054-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="js"/><category scheme="http://www.blogger.com/atom/ns#" term="node-webkit"/><category scheme="http://www.blogger.com/atom/ns#" term="nw.js"/><category scheme="http://www.blogger.com/atom/ns#" term="os x"/><title type='text'>Implementing &quot;run on login&quot; for your (node-webkit) app in OS X</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQY8ibs05tKrBnKYdiIdGeroQ__nM7I222na1LnTTHH4VXaU-WSxk_qa77bHH8CjyleX8qvlaDOXj1m6euO5uEzPK1eU-plltS0dhwl3tY0RdfV2n-l2oSWoyBo3qEZtYYRGC1fPrimIu1/s1600/Screenshot+2015-03-22+00.47.04.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQY8ibs05tKrBnKYdiIdGeroQ__nM7I222na1LnTTHH4VXaU-WSxk_qa77bHH8CjyleX8qvlaDOXj1m6euO5uEzPK1eU-plltS0dhwl3tY0RdfV2n-l2oSWoyBo3qEZtYYRGC1fPrimIu1/s1600/Screenshot+2015-03-22+00.47.04.png&quot; height=&quot;303&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
I spent a good chunk of today trying to figure out how to implement a &quot;run on login&quot; option for my pet project, &lt;a href=&quot;https://github.com/capablemonkey/sleep&quot;&gt;sleep&lt;/a&gt;. &amp;nbsp;It&#39;s a little node-webkit application with a toolbar/statusbar tray icon UI which attempts to answer the age-old question of &quot;ugh, when did I fall asleep last night?&quot; by telling you when your MacBook went to sleep, presumably because you closed the lid, or because it was idle for a while. &amp;nbsp;As a person who often finds myself waking up with my face planted in my laptop or with my laptop on my chest, lid closed, this is handy for determining whether or not I got enough sleep the night before.&lt;br /&gt;
&lt;br /&gt;
A quick Google search reveals some ways to achieve this with the Cocoa framework. &amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/a/609025/1108866&quot;&gt;One of the answers&lt;/a&gt; to a &lt;a href=&quot;http://stackoverflow.com/questions/608963/register-as-login-item-with-cocoa/&quot;&gt;StackOverflow thread&lt;/a&gt; (incidentally authored by the then-lead-developer of Growl) talks about using the LSSharedFileList API. &lt;br /&gt;
&lt;br /&gt;
Not wishing to wrap a Cocoa API, I found an easier solution: using launchd / launchctl. &amp;nbsp;It turns out, you can easily create a launchd LaunchAgent which will run your app when the user logs in. &amp;nbsp;I was pleasantly surprised that launch jobs can be created by a user, rather than requiring root. &amp;nbsp;I haven&#39;t run into any permissions issues yet. &lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
our gameplan&lt;/h2&gt;
On a high level, here&#39;s our approach:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Write a simple launchd job, which comes in the form of a .plist (XML) file.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Then, run some command line arguments to move it to ~/Library/LaunchAgents/, and use launchctl to &quot;load&quot; the job. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;(optionally)&lt;/i&gt; We can easily disable the job by running `launchctl unload` at a later point. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;(optionally) &lt;/i&gt;We can also check to see if our job is currently active by doing `launchctl list` and grep-ing our job name (technically, we see if it&#39;s &quot;loaded&quot;, which doesn&#39;t necessarily mean it&#39;s not disabled, but for our purposes).&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
let&#39;s write some XML (it won&#39;t hurt, I promise)&lt;/h2&gt;
It&#39;s always lovely to find a website dedicated to explaining and documenting things for developers like &lt;a href=&quot;http://strftime.org/&quot;&gt;strftime.org&lt;/a&gt;, a site dedicated simply to presenting a table of Python&#39;s strftime placeholders. I was thrilled to come across this super helpful&amp;nbsp;&lt;a href=&quot;http://launchd.info/&quot;&gt;guide to launchd&lt;/a&gt;. &amp;nbsp;Skimming through quickly, we learn what launchd is, what a daemon and agent are, and that all we need is a file as simple as this:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/capablemonkey/1a24190cc182bf794065.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;
&lt;h3&gt;
defining a launchd job&lt;/h3&gt;
First, we need to give our job a label. &amp;nbsp;According to the guide, the convention is to use &lt;a href=&quot;http://en.wikipedia.org/wiki/Reverse_domain_name_notation&quot;&gt;reverse domain notation&lt;/a&gt;, so I&#39;m using &quot;com.capablemonkey.sleepApp&quot;. &amp;nbsp; I&#39;ve chosen my handle as the &#39;vendor&#39; name which typically follows the domain (&#39;com&#39; in this case). &amp;nbsp;sleepApp is the name of my application.&lt;br /&gt;
&lt;br /&gt;
Next, we&#39;ll describe the program to be run. &amp;nbsp;In my case, I want to run a .app package, so I&#39;ll be using the nifty `open` OS X command which knows how to execute .app packages. &amp;nbsp;To set this in our config file, we&#39;ll specify a new field called ProgramArguments which is an array of strings: the command/program, followed by any arguments. &amp;nbsp;The last argument is the location of the .app package: /Applications/sleep.app.&lt;br /&gt;
&lt;br /&gt;
Lastly, we&#39;ll include the&amp;nbsp;RunAtLoad flag which will cause the job to be &quot;run&quot; when it&#39;s &quot;loaded&quot; (a job can be loaded, but not run immediately).&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
putting things in motion&lt;/h2&gt;
&lt;h3&gt;
&#39;enabling&#39; the job&lt;/h3&gt;
Now that we&#39;ve described the job, we need to place the file in ~/Library/LaunchAgents in order for the job to be run when the user logs in:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;cp com.capablemonkey.sleepApp.plist ~/Library/LaunchAgents/&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Then, we&#39;ll ask launchctl to load the job:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;launchctl load ~/Library/LaunchAgents/com.capablemonkey.sleepApp.plist&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
In my node-webkit app, I can accomplish this by running those commands with `child_process.exec`:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/capablemonkey/caf9703e5c90b5b9bcfb.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
disabling the job&lt;/h3&gt;
Should the user decide to disable running on login, our application can do:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;launchctl unload ~/Library/LaunchAgents/com.capablemonkey.sleepApp.plist&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/capablemonkey/6c309eb8c79ebcf08110.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
checking to see if job is enabled&lt;/h3&gt;
Our application can check to see if running on login is enabled:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;launchctl list | grep com.capablemonkey.sleepApp&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/capablemonkey/031baacfa96365bdf884.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
grep will return an error code of 1 and stdout will be empty if the job is not loaded. &amp;nbsp;Otherwise, we&#39;ll see our job and some information in stdout.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
that&#39;s all, folks!&lt;/h2&gt;
Pretty straightforward stuff. &amp;nbsp;Not sure if this is the best way to accomplish this, but it works well. &amp;nbsp;I didn&#39;t find any good resources on programmatically implementing &quot;run on login&quot;, short of asking the user to add the app to their Login Items list or writing an AppleScript that does that. &amp;nbsp;Hope this comes in handy for someone!</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/4590539943290464522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2015/03/implementing-run-on-login-for-your-node.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/4590539943290464522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/4590539943290464522'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2015/03/implementing-run-on-login-for-your-node.html' title='Implementing &quot;run on login&quot; for your (node-webkit) app in OS X'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQY8ibs05tKrBnKYdiIdGeroQ__nM7I222na1LnTTHH4VXaU-WSxk_qa77bHH8CjyleX8qvlaDOXj1m6euO5uEzPK1eU-plltS0dhwl3tY0RdfV2n-l2oSWoyBo3qEZtYYRGC1fPrimIu1/s72-c/Screenshot+2015-03-22+00.47.04.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-1587859996654699616</id><published>2014-03-29T17:16:00.000-04:00</published><updated>2014-03-29T17:16:07.214-04:00</updated><title type='text'>Leveraging Dwolla OAuth for User Authentication</title><content type='html'>&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;a href=&quot;http://forms.dwollalabs.com/&quot; style=&quot;background-color: white; color: #009dd1; cursor: pointer; font-size: 14px; line-height: 21px; text-decoration: none; word-wrap: break-word;&quot;&gt;Dwolla Forms&lt;/a&gt;, a Dwolla Labs project, uses &lt;a href=&quot;https://developers.dwolla.com/dev/pages/auth&quot; style=&quot;background-color: white; color: #009dd1; cursor: pointer; font-size: 14px; line-height: 21px; text-decoration: none; word-wrap: break-word;&quot;&gt;Dwolla’s OAuth API&lt;/a&gt; to authenticate users rather than the standard email / password login scheme most web applications use today. Your app can too!&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;br /&gt;
By relying on a third party like Dwolla to authenticate your users, you outsource the responsibility of username and password storage, retrieval, and verification. This lets you leverage all the hard work we’ve put into building a secure login system, for free! Of course, relying on a third party requires trust and faith in the accuracy and security of this third party authority. Rest assured, we’ve got our data locked down. (read more about&amp;nbsp;&lt;a href=&quot;https://www.dwolla.com/security&quot; style=&quot;color: #009dd1; cursor: pointer; text-decoration: none; word-wrap: break-word;&quot;&gt;security at Dwolla&lt;/a&gt;)&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
By lowering the amount of sensitive information you hold, you become a less tasty target for attackers. As another consequence, you’ll save your users from having to remember yet another username and password combination.&lt;/div&gt;
&lt;h1 style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; line-height: 21px; margin: 30px 0px 10px; text-rendering: optimizelegibility;&quot;&gt;
Overview&lt;/h1&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
We can implement authentication via Dwolla OAuth in three easy steps:&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ol style=&quot;background-color: white; clear: both; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin: 0px 0px 9px 25px; padding: 0px;&quot;&gt;
&lt;li&gt;Obtain authorization to access a Dwolla user’s account information via OAuth&lt;/li&gt;
&lt;li&gt;Retrieve the user’s unique Dwolla ID using the Dwolla REST API’s Account Information endpoint&lt;/li&gt;
&lt;li&gt;Authenticate the user based on their Dwolla ID.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
When a user signs up via OAuth for the first time, we retrieve and store their Dwolla ID with their user data. In the future, when that user attempts to sign in again, we point them to OAuth with Dwolla, and then we ask, in effect, “Hey Dwolla, what’s the Dwolla ID of the user I just redirected to you?” From there, we look up the corresponding user by their Dwolla ID and generate a login session for them.&lt;/div&gt;
&lt;h1 style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; line-height: 21px; margin: 30px 0px 10px; text-rendering: optimizelegibility;&quot;&gt;
Sample code!&lt;/h1&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
Let’s look at how that works with some sample Node.js code. We’re using the&amp;nbsp;&lt;code style=&quot;font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 1em;&quot;&gt;express.js&lt;/code&gt;&amp;nbsp;web application framework and nanek&#39;s &lt;a href=&quot;https://github.com/nanek/node-dwolla&quot;&gt;node-dwolla&lt;/a&gt; package.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
First, we’ll start off by creating a route which initiating OAuth:&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;/div&gt;
&lt;pre style=&quot;background-color: white; color: #333333; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 14px; line-height: 21px; white-space: pre-wrap;&quot;&gt;&lt;code class=&quot;lang-auto hljs javascript&quot; style=&quot;background-color: #f8f8f8; display: block; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 1em; overflow: auto; padding: 0.5em;&quot;&gt;    app.get(&lt;span class=&quot;hljs-string&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;/auth/dwolla&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(req, res)&lt;/span&gt; {&lt;/span&gt;
      &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;var&lt;/span&gt; authUrl = Dwolla.authUrl(redirectUri, &lt;span class=&quot;hljs-string&quot; style=&quot;color: #dd1144;&quot;&gt;&quot;AccountInfoFull&quot;&lt;/span&gt;);
      &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;return&lt;/span&gt; res.redirect(authUrl);
    })&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
After the user logs in and authorizes our Application, they’ll be returned to&amp;nbsp;&lt;code style=&quot;font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 1em;&quot;&gt;/auth/return&lt;/code&gt;, which is handled here:&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;/div&gt;
&lt;pre style=&quot;background-color: white; color: #333333; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 14px; line-height: 21px; white-space: pre-wrap;&quot;&gt;&lt;code class=&quot;lang-auto hljs javascript&quot; style=&quot;background-color: #f8f8f8; display: block; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 1em; overflow: auto; padding: 0.5em;&quot;&gt;    app.get(&lt;span class=&quot;hljs-string&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;/auth/return&#39;&lt;/span&gt;, &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(req, res)&lt;/span&gt; {&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;var&lt;/span&gt; code = req.query[&lt;span class=&quot;hljs-string&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;code&#39;&lt;/span&gt;];
    $.waterfall(
      [
        &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #999988; font-style: italic;&quot;&gt;// Exchange code for token&lt;/span&gt;
        &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(callback)&lt;/span&gt; {&lt;/span&gt;
          Dwolla.requestToken(code, redirectUri, callback);
        }
        &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #999988; font-style: italic;&quot;&gt;// Get user info&lt;/span&gt;
        , &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(token, callback)&lt;/span&gt; {&lt;/span&gt;
          Dwolla.setToken(token);
          Dwolla.fullAccountInfo(&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err, user)&lt;/span&gt; {&lt;/span&gt;
            &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;if&lt;/span&gt;(err) { &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;return&lt;/span&gt; callback(err); }
            &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;return&lt;/span&gt; callback(&lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;, user);
          });
        }
        &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #999988; font-style: italic;&quot;&gt;// If user is new, create a new user with Name and Dwolla ID returned by fullAccountInfo&lt;/span&gt;
        &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #999988; font-style: italic;&quot;&gt;// otherwise, if they already exist, return the existing user object.&lt;/span&gt;
        , &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(user, callback)&lt;/span&gt; {&lt;/span&gt;
          db.User
            .findOrCreate(
              {
                dwolla_id: user[&lt;span class=&quot;hljs-string&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;Id&#39;&lt;/span&gt;]
              }
              , {
                name: user[&lt;span class=&quot;hljs-string&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;Name&#39;&lt;/span&gt;]
                , dwolla_id: user[&lt;span class=&quot;hljs-string&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;Id&#39;&lt;/span&gt;]
              }
            )
            .complete(&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err, user)&lt;/span&gt; {&lt;/span&gt;
              &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;if&lt;/span&gt;(err) { &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;return&lt;/span&gt; callback(err); }

              &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #999988; font-style: italic;&quot;&gt;// log user in:&lt;/span&gt;
              req.session._user = user;
              &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;return&lt;/span&gt; callback(&lt;span class=&quot;hljs-literal&quot;&gt;null&lt;/span&gt;, user);
              }
            })
        }
      ]
      , &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(err, results)&lt;/span&gt; {&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;if&lt;/span&gt;(err) {
          &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;return&lt;/span&gt; res.send(&lt;span class=&quot;hljs-string&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;oh no!&#39;&lt;/span&gt;);
        }
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;font-weight: bold;&quot;&gt;return&lt;/span&gt; res.render(&lt;span class=&quot;hljs-string&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;nextpage&#39;&lt;/span&gt;);
      }
    )
  })&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
In this route, we first extract the verification code we get upon user redirect and exchange it for an&amp;nbsp;&lt;code style=&quot;font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 1em;&quot;&gt;OAuth token&lt;/code&gt;, thus completing the OAuth process. Then, we retrieve the user’s Dwolla account information with&amp;nbsp;&lt;code style=&quot;font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 1em;&quot;&gt;Dwolla.fullAccountInfo()&lt;/code&gt;.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
From the user object we get back, we’ll find an existing user account based on the user’s Dwolla ID, or create a new one, with the given user’s name and Dwolla ID. Finally, we’ll log the user in by attaching their user object to the current session and send them off to the next page.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/1587859996654699616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2014/03/leveraging-dwolla-oauth-for-user.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/1587859996654699616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/1587859996654699616'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2014/03/leveraging-dwolla-oauth-for-user.html' title='Leveraging Dwolla OAuth for User Authentication'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-2183042731197179965</id><published>2014-03-25T19:42:00.000-04:00</published><updated>2014-03-25T19:42:18.963-04:00</updated><title type='text'>Do the weaknesses of SHA-1 weaken the security of Dwolla’s API?</title><content type='html'>&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
I&#39;d like to share our answer to an interesting question regarding SHA-1 and the authentication scheme implemented by Dwolla&#39;s Off-Site Gateway&amp;nbsp;&lt;a href=&quot;https://developers.dwolla.com/dev/pages/gateway#submit-directly&quot; style=&quot;color: #009dd1; cursor: pointer; text-decoration: none; word-wrap: break-word;&quot;&gt;Submit Directly flow&lt;/a&gt;:&lt;/div&gt;
&lt;blockquote style=&quot;background-color: whitesmoke; border-left-color: rgb(230, 230, 230); border-left-style: solid; border-left-width: 5px; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px; margin: 14px 0px; padding: 12px;&quot;&gt;
&quot;I&#39;m looking at the developer stuff on checkout workflow, and see that the &quot;signature&quot; being transmitted between Dwolla and a business website is specified to use the SHA1 hash system. It is my understanding that that method is becoming vulnerable to an attack that has adequate computing power behind it. So, what other hash methods are allowable, for a business interacting with Dwolla? Thanks in advance!&quot;&lt;/blockquote&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
Though there are some weaknesses with SHA-1, they relate only to&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/questions/2772014/is-sha-1-secure-for-password-storage/2774744#2774744&quot; style=&quot;color: #009dd1; cursor: pointer; text-decoration: none; word-wrap: break-word;&quot;&gt;hash collisions&lt;/a&gt;. This means the weaknesses aren&#39;t helpful to attackers who are trying to determine the underlying input(s) of the hash. The only way to obtain the input(s) is by brute force.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
In our case, the input of the signature hash is a concatenation of the Application Key, timestamp, and OrderID. These are all provided in the checkout form, so the attacker knows what the input is. What the attacker doesn&#39;t have is the Application Secret, which is a 50 character string used as the key in this key-based hash.&lt;/div&gt;
&lt;pre style=&quot;background-color: white; color: #333333; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; font-size: 14px; line-height: 21px; white-space: pre-wrap;&quot;&gt;&lt;code style=&quot;background-color: #f1f1ff; display: block; font-family: Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif; max-height: 500px; overflow: auto; padding: 5px 10px;&quot;&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
In order to forge a signature, the attacker would need to obtain the App Secret by way of brute force. If we assume the search space per character is all alphanumeric characters and 3 symbols (&quot;+&quot;, &quot;/&quot;, and &quot;=&quot;), that leaves us with 65 possible characters. Since the secret is 50 characters long, we can say that an attacker would need to make&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;a href=&quot;http://www.wolframalpha.com/share/img?i=d41d8cd98f00b204e9800998ecf8427enqnpvs0p2e&amp;amp;f=HBQTQYZYGY4TOM3EMI3WENDEGMYDCNBUMZRDSNRSGMYDEMJVMU2Qaaaa.png&quot; style=&quot;color: #009dd1; cursor: pointer; text-decoration: none; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://www.wolframalpha.com/share/img?i=d41d8cd98f00b204e9800998ecf8427enqnpvs0p2e&amp;amp;f=HBQTQYZYGY4TOM3EMI3WENDEGMYDCNBUMZRDSNRSGMYDEMJVMU2Qaaaa.png&quot; style=&quot;border: 0px; max-height: 500px; max-width: 690px; vertical-align: middle;&quot; width=&quot;29&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
or&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;a href=&quot;http://www.wolframalpha.com/share/img?i=d41d8cd98f00b204e9800998ecf8427e1f340jlah4&amp;amp;f=HBQTQYZYGY4TMM3EMI3WENJVGQYDCNBUMZRDSNJVMIZDEMJVGQYAaaaa.png&quot; style=&quot;color: #009dd1; cursor: pointer; text-decoration: none; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;21&quot; src=&quot;http://www.wolframalpha.com/share/img?i=d41d8cd98f00b204e9800998ecf8427e1f340jlah4&amp;amp;f=HBQTQYZYGY4TMM3EMI3WENJVGQYDCNBUMZRDSNJVMIZDEMJVGQYAaaaa.png&quot; style=&quot;border: 0px; max-height: 500px; max-width: 690px; vertical-align: middle;&quot; width=&quot;514&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
attempts to exhaust all possibilities.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
Let&#39;s say an attacker can hash 10 million candidates per second on a single CPU. To exhaust all possibilities, it would take roughly:&lt;br /&gt;&lt;a href=&quot;http://www.wolframalpha.com/share/img?i=d41d8cd98f00b204e9800998ecf8427e8k1kgpfh2v&amp;amp;f=HBQTQYZYGY4TOM3EMI3WENDEGMYDCNBUMZRDSMRSMQ3GIMJVMRSQaaaa.png&quot; style=&quot;color: #009dd1; cursor: pointer; text-decoration: none; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://www.wolframalpha.com/share/img?i=d41d8cd98f00b204e9800998ecf8427e8k1kgpfh2v&amp;amp;f=HBQTQYZYGY4TOM3EMI3WENDEGMYDCNBUMZRDSMRSMQ3GIMJVMRSQaaaa.png&quot; style=&quot;border: 0px; max-height: 500px; max-width: 690px; vertical-align: middle;&quot; width=&quot;118&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
Even if he has a large farm of machines running, say 1000 machines, with a collective power of 10 billion hashes/sec, it&#39;d still take roughly:&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;a href=&quot;http://www.wolframalpha.com/share/img?i=d41d8cd98f00b204e9800998ecf8427epgcb5lg0cn&amp;amp;f=HBQTQYZYGY4TOM3EMI3WENDEGMYDCNBUMZRDSNZZME4DMMJVMU3Aaaaa.png&quot; style=&quot;color: #009dd1; cursor: pointer; text-decoration: none; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://www.wolframalpha.com/share/img?i=d41d8cd98f00b204e9800998ecf8427epgcb5lg0cn&amp;amp;f=HBQTQYZYGY4TOM3EMI3WENDEGMYDCNBUMZRDSNZZME4DMMJVMU3Aaaaa.png&quot; style=&quot;border: 0px; max-height: 500px; max-width: 690px; vertical-align: middle;&quot; width=&quot;118&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;&quot;&gt;
The sheer size of the Secret string renders brute force an infeasible way to obtain it. &amp;nbsp;I would recommend reading Jeff Atwood&#39;s&amp;nbsp;&lt;a href=&quot;http://blog.codinghorror.com/speed-hashing/&quot; style=&quot;color: #009dd1; cursor: pointer; text-decoration: none; word-wrap: break-word;&quot;&gt;write up about hashes&lt;/a&gt;.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/2183042731197179965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2014/03/do-weaknesses-of-sha-1-weaken-security.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/2183042731197179965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/2183042731197179965'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2014/03/do-weaknesses-of-sha-1-weaken-security.html' title='Do the weaknesses of SHA-1 weaken the security of Dwolla’s API?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-6988405325674721641</id><published>2014-03-16T22:34:00.000-04:00</published><updated>2014-03-16T22:38:37.049-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="spotflux"/><category scheme="http://www.blogger.com/atom/ns#" term="tunnelblick"/><category scheme="http://www.blogger.com/atom/ns#" term="VPN"/><title type='text'>Spotflux doesn&#39;t play nice with Tunnelblick</title><content type='html'>&lt;div&gt;
I recently gave &lt;a href=&quot;http://www.spotflux.com/&quot;&gt;Spotflux&lt;/a&gt;, a free VPN tunneling service, a try on my Mac. &amp;nbsp;I loved the experience -- extremely high speed and unlimited bandwidth, but I noticed that I could no longer use my beloved Tunnelblick VPN client. &amp;nbsp;When attempting to connect to a network with Tunnelblick, it errored out:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;  &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;openvpnstart returned with status #226&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
and left this in the log:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;*Tunnelblick: openvpnstart log:
 Loading tun-signed.kext
 stderr from kextload: /Applications/Tunnelblick.app/Contents/Resources/tun-signed.kext failed to load - (libkern/kext) kext (kmod) start/stop routine failed; check the system/kernel logs for errors or try kextutil(8).
 stderr from kextload: /Applications/Tunnelblick.app/Contents/Resources/tun-signed.kext failed to load - (libkern/kext) kext (kmod) start/stop routine failed; check the system/kernel logs for errors or try kextutil(8).
 stderr from kextload: /Applications/Tunnelblick.app/Contents/Resources/tun-signed.kext failed to load - (libkern/kext) kext (kmod) start/stop routine failed; check the system/kernel logs for errors or try kextutil(8).
 stderr from kextload: /Applications/Tunnelblick.app/Contents/Resources/tun-signed.kext failed to load - (libkern/kext) kext (kmod) start/stop routine failed; check the system/kernel logs for errors or try kextutil(8).
 stderr from kextload: /Applications/Tunnelblick.app/Contents/Resources/tun-signed.kext failed to load - (libkern/kext) kext (kmod) start/stop routine failed; check the system/kernel logs for errors or try kextutil(8).
 Error: Unable to load net.tunnelblick.tun and/or net.tunnelblick.tap kexts in 5 tries. Status = 71&lt;/span&gt;
&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
Apparently, the kext (driver) that Spotflux loads is incompatible with Tunnelblick and &lt;a href=&quot;https://code.google.com/p/tunnelblick/wiki/cCommonProblems#An_OpenVPN_log_entry_says_&amp;quot;Tunnelblick:_openvpnstart_status&quot;&gt;prevents Tunnelblick from loading its own kext&lt;/a&gt;. The solution is to unload Spotflux&#39;s kext and try connecting via Tunnelblick again.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Let&#39;s first run kextstat in Terminal to ensure we&#39;ve got the offending kext loaded:&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt; 
&lt;span style=&quot;background-color: black; color: white; font-family: Courier New, Courier, monospace;&quot;&gt;kextstat | grep spotflux
  121    0 0xffffff7f82231000 0x6000     0x6000     com.spotflux.Spotflux.tun&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Then, let&#39;s unload it via kextunload. &amp;nbsp;This requires sudo.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;span style=&quot;background-color: black; color: white; font-family: Courier New, Courier, monospace;&quot;&gt;sudo kextunload -b com.spotflux.Spotflux.tun&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Once unloaded, Tunnelblick will be able to load its kext and connect as usual! &amp;nbsp;This will need to be done every time Spotflux is launched and you wish to use Tunnelblick afterwards, unfortunately.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/6988405325674721641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2014/03/spotflux-doesnt-play-nice-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/6988405325674721641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/6988405325674721641'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2014/03/spotflux-doesnt-play-nice-with.html' title='Spotflux doesn&#39;t play nice with Tunnelblick'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-1949249527309801240</id><published>2014-01-25T13:18:00.000-05:00</published><updated>2014-01-25T13:18:21.531-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><title type='text'>Graph Search: Facebook is Finally Useful</title><content type='html'>&lt;span style=&quot;background-color: white; color: #37404e; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;Facebook&#39;s&amp;nbsp;&lt;a href=&quot;https://www.facebook.com/about/graphsearch&quot;&gt;Graph Search&lt;/a&gt;&amp;nbsp;feature is amazing. I wanted to know which of my new acquaintances and friends from high school go to the university I&#39;ll be visiting for a hackathon next week. So, I just started typing my query in a natural way, &quot;my friends who go to Carnegie Melon University&quot;, and bam -- I got exactly what&lt;/span&gt;&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&amp;nbsp;I was looking for. No fumbling with drop down menu filters or long advanced search forms. It&#39;s like Wolfram Alpha for your intricate network of friends, family and acquaintances.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGsbJfuhkVBD_PJBTdbhU_MWbUdUQCsSwRQYjjOKPe71ehgf15OOD3wxMCXXSS62WmrvVO4qvN0rOp6mVEa-weW80o9MECZxSHegZbM2YiX74xR9w89ANkHrF_d9PVyuzoiEoDqOCvHkbN/s1600/Screenshot+2014-01-24+10.29.21.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGsbJfuhkVBD_PJBTdbhU_MWbUdUQCsSwRQYjjOKPe71ehgf15OOD3wxMCXXSS62WmrvVO4qvN0rOp6mVEa-weW80o9MECZxSHegZbM2YiX74xR9w89ANkHrF_d9PVyuzoiEoDqOCvHkbN/s1600/Screenshot+2014-01-24+10.29.21.png&quot; height=&quot;250&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;Of course, not everyone feels the same way about this feature. &amp;nbsp;Moreover, not everyone feels the same way about Facebook itself. &amp;nbsp;There&#39;s the highly debated issue of users being overly reliant on the online platform, to the point where it&#39;s unhealthy. &amp;nbsp;Critics of Facebook mock it as a tool for narcissists who couldn&#39;t care to remember who their friends are.&lt;br /&gt;&lt;br /&gt;While I&#39;m cautious of Facebook&#39;s potential to be used in a socially unhealthy way, I&#39;m a firm believer that the data amassed by the network can be used to improve social life off the web. &amp;nbsp;I&#39;ve made many acquaintances who I haven&#39;t yet had the luxury of learning everything about them. &amp;nbsp;I will probably remember them and the moments we shared together, but easily forget their name and the school they go to or their hometown. Facebook solves this problem.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;However, the fact that Facebook wields so much power, that it single-handedly controls personal, and sometimes private information about nearly everyone, coupled with the perceived lack of transparency about what Facebook does with that data gives rise to the suspicion that they may have a nefarious agenda -- &amp;nbsp;they may be exploiting this data by selling it to nosy corporations or giving direct access to snooping intelligence agencies like the NSA. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;By building Graph Search, Facebook has given me a reason to believe that the data it amassed doesn&#39;t have to be used for &quot;evil&quot; -- it can be used for good. Its collection, aggregation, and analysis of social data undoubtedly comes at the cost of privacy, but the insights gained are powerful and beneficial.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;text_exposed_show&quot; style=&quot;background-color: white; color: #37404e; display: inline; font-family: &#39;lucida grande&#39;, tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;At the end of the day, Facebook is solving a complex problem: digesting the massive amount of data submitted voluntarily by hundreds of millions of people around the world, and making it useful. &amp;nbsp;They&#39;ve done just that with Graph Search.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/1949249527309801240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2014/01/graph-search-facebook-is-finally-useful.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/1949249527309801240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/1949249527309801240'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2014/01/graph-search-facebook-is-finally-useful.html' title='Graph Search: Facebook is Finally Useful'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGsbJfuhkVBD_PJBTdbhU_MWbUdUQCsSwRQYjjOKPe71ehgf15OOD3wxMCXXSS62WmrvVO4qvN0rOp6mVEa-weW80o9MECZxSHegZbM2YiX74xR9w89ANkHrF_d9PVyuzoiEoDqOCvHkbN/s72-c/Screenshot+2014-01-24+10.29.21.png" height="72" width="72"/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-4889337965583270406</id><published>2013-11-21T00:55:00.002-05:00</published><updated>2013-11-21T00:59:34.573-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hack"/><category scheme="http://www.blogger.com/atom/ns#" term="hackathon"/><category scheme="http://www.blogger.com/atom/ns#" term="HackTX"/><title type='text'>Morpheus</title><content type='html'>&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The following is an excerpt from my blog post in the &lt;a href=&quot;http://blog.dwolla.com/&quot;&gt;Dwolla Blog&lt;/a&gt;&amp;nbsp;where I recounted my experience at the largest hackathon in Texas, &lt;a href=&quot;http://hacktx.com/&quot;&gt;HackTX&lt;/a&gt;.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div class=&quot;mceTemp mceIEcenter&quot; style=&quot;color: #333333; font-size: 13px; line-height: 19px; text-align: center;&quot;&gt;

&lt;dl class=&quot;wp-caption aligncenter&quot; data-mce-style=&quot;width: 277px;&quot; id=&quot;attachment_15253&quot; style=&quot;background-color: #f3f3f3; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); margin: 10px auto; padding-top: 4px; width: 277px;&quot;&gt;
&lt;dt class=&quot;wp-caption-dt&quot;&gt;&lt;a data-mce-href=&quot;http://blog.dwolla.com/wp-content/uploads/2013/11/morpheus_ios.png&quot; href=&quot;http://blog.dwolla.com/wp-content/uploads/2013/11/morpheus_ios.png&quot;&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;img alt=&quot;A screenshot from Morpheus.&quot; class=&quot;wp-image-15253 &quot; data-mce-src=&quot;http://blog.dwolla.com/wp-content/uploads/2013/11/morpheus_ios.png&quot; height=&quot;421&quot; src=&quot;http://blog.dwolla.com/wp-content/uploads/2013/11/morpheus_ios.png&quot; style=&quot;-webkit-user-drag: none; border: 0px none; margin: 0px; padding: 0px;&quot; width=&quot;267&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dd class=&quot;wp-caption-dd&quot; style=&quot;font-size: 11px; line-height: 17px; margin: 0px; padding: 0px 4px 5px;&quot;&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;A screenshot from Morpheus.&lt;/span&gt;&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #333333; line-height: 19px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a data-mce-href=&quot;https://www.hackerleague.org/hackathons/hacktx/hacks/morpheus-hacktx&quot; href=&quot;https://www.hackerleague.org/hackathons/hacktx/hacks/morpheus-hacktx&quot;&gt;Morpheus&lt;/a&gt;, whose name bears no relation to the well known leader in the human fight against dystopian robot overlords from The Matrix, but instead is named after the Greek god of dreams and sleep, is a platform that brings distributed computing to mobile devices. &amp;nbsp;Mobile devices, such as Apple and Android smartphones and tablets, are exponentially increasing in processing power. &amp;nbsp;If we consider the fact that in my pocket lies an HTC One which contains a 1.7 GHz&amp;nbsp;quad-core&amp;nbsp;Snapdragon processor, (which truly is mind-blowing, because the last time I shopped for computer components, a few years ago, Intel was just rolling out their first Quad Core processors and the world was going nuts over it) and we also consider that 80% of the time, my phone is resting idly in my pocket or missing underneath my bed, we realize that the true potential of its is being wasted 90% of the time. &amp;nbsp;The other 10% is wasted because I use my phone to check my Facebook news feed and text my buddies. &amp;nbsp;Now, imagine if your phone could instead be used to work in a cluster of other computing devices to tackle large computational problems, like those being solved by&amp;nbsp;&lt;a data-mce-href=&quot;http://folding.stanford.edu/&quot; href=&quot;http://folding.stanford.edu/&quot;&gt;Folding@Home&lt;/a&gt;, a project that takes advantage of the powerful Playstation 3&#39;s gamers have sitting in their homes to simulate protein folding, design medical drugs, and understand molecular dynamics to save human lives. &amp;nbsp;The true power of Morpheus is realized when you consider that smartphones and tablets are growing in their ubiquity. &amp;nbsp;Think about the impact that billions of super-quick devices could have if they were used for a purpose greater than taking selfies and tweeting about what you&#39;re about to buy from the supermarket.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; line-height: 19px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #333333; line-height: 19px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&quot;But do you really think people will drain their battery just because of the philanthropic goodness of their hearts?&quot; &amp;nbsp;you may be inclined to ask. &amp;nbsp;Morpheus answers this in two ways: a) participants only leave their phone to compute when charging at night, and b) researchers will pay participants, using Dwolla, for the work their phone does. &amp;nbsp;This brings an interesting twist to the Folding @ Home model, which relies on gamers to rack up their energy bill and subject their PS3 to computational slavery for nothing except the knowledge that they&#39;re doing good in this world. &amp;nbsp;With Morpheus, researchers and even commercial enterprises can leverage the immense power hidden away in everyone&#39;s pockets to solve their problems. &amp;nbsp;Imagine IBM renting your phone for the night so it can compute the Answer to Life, The Universe, and Everything in just a fraction of the 7.5 million years it took Deep Thought to do so.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;mceTemp mceIEcenter&quot;&gt;

&lt;dl class=&quot;wp-caption aligncenter&quot; data-mce-style=&quot;width: 563px;&quot; id=&quot;attachment_15255&quot; style=&quot;border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(221, 221, 221); margin: 10px auto; padding-top: 4px; width: 563px;&quot;&gt;
&lt;dt class=&quot;wp-caption-dt&quot; style=&quot;background-color: #f3f3f3; color: #333333; font-size: 13px; line-height: 19px;&quot;&gt;&lt;a data-mce-href=&quot;http://blog.dwolla.com/wp-content/uploads/2013/11/2013-11-16-18.12.18.jpg&quot; href=&quot;http://blog.dwolla.com/wp-content/uploads/2013/11/2013-11-16-18.12.18.jpg&quot;&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;img alt=&quot;The Morpheus team!&quot; class=&quot;wp-image-15255 &quot; data-mce-src=&quot;http://blog.dwolla.com/wp-content/uploads/2013/11/2013-11-16-18.12.18-1024x579.jpg&quot; height=&quot;312&quot; src=&quot;http://blog.dwolla.com/wp-content/uploads/2013/11/2013-11-16-18.12.18-1024x579.jpg&quot; style=&quot;-webkit-user-drag: none; border: 0px none; margin: 0px; padding: 0px;&quot; width=&quot;553&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dd class=&quot;wp-caption-dd&quot; style=&quot;background-color: #f3f3f3; color: #333333; font-size: 11px; line-height: 17px; margin: 0px; padding: 0px 4px 5px;&quot;&gt;&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;The Morpheus team!&amp;nbsp;&lt;/span&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;So, in essence, you get paid while you sleep just for running a simple app on your phone during the night. This simple idea is mind-bogglingly cool and has a ton of potential to do good for the world. I&#39;m hopeful that the Morpheus team, uTexas students Eduardo Saenz, Bulat Bazarbayev, Comyar Zaheri Brandon Lee, and Sudheesh Katkam, will take this beyond HackTX and launch this in the wild, real world.  Very well done, gentlemen.&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/4889337965583270406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2013/11/morpheus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/4889337965583270406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/4889337965583270406'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2013/11/morpheus.html' title='Morpheus'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-5846018463118903230</id><published>2012-06-25T19:28:00.000-04:00</published><updated>2012-12-01T23:12:30.284-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="pywin32"/><category scheme="http://www.blogger.com/atom/ns#" term="win32api"/><title type='text'>Python: Glide, instead of move, mouse cursor from one point to another</title><content type='html'>I couldn&#39;t find a function in pywin32 to smoothly glide a pointer from one point to another, instead of simply &quot;moving&quot; the cursor by making it jump from its current position to a given position. &amp;nbsp;I needed a way to make the mouse sort of &quot;glide&quot; from point A to point B at a seemingly natural pace, so here&#39;s my solution:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;import time
import win32api

MOUSE_SPEED = .4 #seconds

def mouse_glide_to(x,y):
    &quot;&quot;&quot;Smooth glides mouse from current position to point x,y with default timing and speed&quot;&quot;&quot;
    x1,y1 = win32api.GetCursorPos()
    smooth_glide_mouse(x1,y1, x, y, MOUSE_SPEED)

def smooth_glide_mouse(x1,y1,x2,y2, t, intervals):
    &quot;&quot;&quot;Smoothly glides mouse from x1,y1, to x2,y2 in time t using intervals amount of intervals&quot;&quot;&quot;
    distance_x = x2-x1
    distance_y = y2-y1
    for n in range(0, intervals+1):
        move_mouse(x1 + n * (distance_x/intervals), y1 + n * (distance_y/intervals))
        time.sleep(t*1.0/intervals)

def move_mouse(x, y):
    win32api.SetCursorPos((x,y))
&lt;/pre&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;

mouse_glide_to(x,y) will move the cursor from its current position to point (x,y) in MOUSE_SPEED seconds.  It works perfectly!</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/5846018463118903230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2012/06/python-glide-instead-of-move-mouse.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/5846018463118903230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/5846018463118903230'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2012/06/python-glide-instead-of-move-mouse.html' title='Python: Glide, instead of move, mouse cursor from one point to another'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-933944868379826373</id><published>2012-06-23T23:53:00.003-04:00</published><updated>2012-06-29T22:17:05.017-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>Road Runner (SMC Networks) routers - practically NO security</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNoEIwj4odIbI1mBnPHD8XdEqZn1LtwherG9GqCmWDUpKWVez26mxGQYi_0-_AWNRtYuasxy0dA42v6CUhyphenhyphenrEJnVPGiKYJeVzfHxV8NfmWhBDDNiz6aViZX5oUpG97ak9TJpfjpm-K7mSz/s1600/TWC.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;148&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNoEIwj4odIbI1mBnPHD8XdEqZn1LtwherG9GqCmWDUpKWVez26mxGQYi_0-_AWNRtYuasxy0dA42v6CUhyphenhyphenrEJnVPGiKYJeVzfHxV8NfmWhBDDNiz6aViZX5oUpG97ak9TJpfjpm-K7mSz/s320/TWC.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF9PWdUxMZDBheTsIrvv6qTQG7N9lMfy4jOfrHvIu97OF16TEO7AixNuRFosm2ABb2ZWFkMu9Y3x-42mliO9_zTSvXVANK7lNlnlIVuzqgc4fC2o6PoaGIx_sH7HQuYE02Fg4vhVqmUqtq/s1600/logo_home.gif&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;92&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF9PWdUxMZDBheTsIrvv6qTQG7N9lMfy4jOfrHvIu97OF16TEO7AixNuRFosm2ABb2ZWFkMu9Y3x-42mliO9_zTSvXVANK7lNlnlIVuzqgc4fC2o6PoaGIx_sH7HQuYE02Fg4vhVqmUqtq/s200/logo_home.gif&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upon registering for Time Warner&#39;s&amp;nbsp;&lt;b&gt;Road Runner&lt;/b&gt; internet service, customers are offered a router manufactured by &lt;b&gt;SMC Networks&lt;/b&gt;. &amp;nbsp;The router ships with WEP encryption enabled by default, using a 128-bit key based on its MAC address. &amp;nbsp; While WEP encryption is already the most insecure form of wireless encryption out there, &amp;nbsp;SMC Networks amplifies this weakness further by not generating a random WEP key; something which a home user almost&lt;i&gt; never&lt;/i&gt; changes unless forced to do so during first time installation, whether it is because he or she is ignorant about the risks of a vulnerable network, or because he or she simply doesn&#39;t know how to or care enough to change it. &amp;nbsp;While a randomly generated WEP key can be defeated just as easily as any other, the default encryption key for these routers is trivial and can be determined just by spotting it in a regular AP (Access Point) scan of the area. &lt;br /&gt;
&lt;br /&gt;
The encryption key can be discovered in seconds, &lt;b&gt;without&lt;/b&gt; the need for conventional wireless cracking tools such as the aircrack-ng suite. These routers effectively have no security whatsoever, as even the most tech-challenged of computer users can break into them. &amp;nbsp;From there, the users of the network are vulnerable to all kinds of harm, ranging from innocent piggy-backing to malware and identity theft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ2DMHM5KrmKMuOgAeR7oVRd_e6gb9UGh8CMKP1iEUriae-4UnfZIwP1Tz5B9DZpLK9n0RgeRjspw78e-5EmBI3M8we1Mrj-2SPOj0Uas1s8itBATvO0cWwGX-3Weaxz-X2g0wL9YKPCPq/s1600/rr.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ2DMHM5KrmKMuOgAeR7oVRd_e6gb9UGh8CMKP1iEUriae-4UnfZIwP1Tz5B9DZpLK9n0RgeRjspw78e-5EmBI3M8we1Mrj-2SPOj0Uas1s8itBATvO0cWwGX-3Weaxz-X2g0wL9YKPCPq/s1600/rr.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;In under a minute, one can find the key using only the router&#39;s wireless network name (SSID) and its wireless MAC address (BSSID). &amp;nbsp;These routers stick out like a sore thumb because their SSIDs are simply 4 hex characters (e.g. &#39;D78A&#39;) and their MAC addresses typically begin with&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 12px;&quot;&gt;00:26:F3,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 12px;&quot;&gt;00:22:2D, or&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 12px;&quot;&gt;78:CD:8E (OUI).&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;






&lt;span style=&quot;font-family: &#39;Helvetica Neue&#39;, Arial, Helvetica, sans-serif;&quot;&gt;Here&#39;s how:&lt;/span&gt;&lt;/h2&gt;
In this example, let&#39;s assume we see a router whose SSID is &lt;span style=&quot;font-family: Verdana, sans-serif; font-size: large;&quot;&gt;&#39;&lt;b&gt;4B5F&lt;/b&gt;&#39;&lt;/span&gt; and whose wireless MAC address is &lt;span style=&quot;font-family: Verdana, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;00:26:F3:73:4B:52&lt;/b&gt;&lt;/span&gt;.  The WEP key is generated in this format:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;b&gt;[first 10 characters of MAC] + [last two characters of SSID] + 14 0&#39;s&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Following this format, we take the first 10 hex digits (or first 5 octets) of the MAC address, which we can easily find when performing a normal everyday wireless scan in Windows or OS X: &quot;&lt;span style=&quot;background-color: white;&quot;&gt;00:26:F3:73:4B&quot;,&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;append the last two digits of the SSID: &quot;5F&quot;, and tack on 14 0&#39;s to form the router&#39;s 128-bit encryption key:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background-color: #ffd966; font-family: Verdana, sans-serif;&quot;&gt;00:26:F3:73:4B:5F:00:00:00:00:00:00:00&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Knowing this, any joe-shmo can &quot;hack&quot; into an Road Runner SMC-Networks router with just a smartphone and optionally a pen and paper. &amp;nbsp;I would highly recommend that either SMC Networks or Road Runner move on to WPA2 encryption in their new routers and attempt to update these routers to use WPA2. &amp;nbsp;New Verizon FiOS Actiontec routers come factory default with WPA2 enabled with a&amp;nbsp;&lt;span style=&quot;background-color: white;&quot;&gt;randomly generated&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;32 character string and &lt;a href=&quot;http://code.google.com/p/reaver-wps/&quot;&gt;WPS&lt;/a&gt; disabled; they could learn something from Verizon!&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;b&gt;&lt;u&gt;EDIT&lt;/u&gt;&lt;/b&gt;: Apparently, the insecurity of these routers was already covered in an &lt;a href=&quot;http://news.softpedia.com/news/Lack-of-Security-in-Routers-Distributed-by-Time-Warner-124861.shtml&quot;&gt;article&lt;/a&gt; from 2009; it&#39;s sad to see nothing has been done about it since then! &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 14px; text-align: justify;&quot;&gt;&quot;However, the Time Warner devices come pre-configured and locked, with URL blocking being the only feature available to the customer through the web administration interface.&quot;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;According to the article, the router&#39;s web administration is locked and the home user &lt;b&gt;cannot&lt;/b&gt; change the encryption scheme nor the encryption key, even if he or she wanted to. &amp;nbsp;This is &lt;i&gt;definitely&lt;/i&gt; a huge issue. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;br /&gt;&lt;/blockquote&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/933944868379826373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2012/06/road-runner-smc-networks-routers.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/933944868379826373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/933944868379826373'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2012/06/road-runner-smc-networks-routers.html' title='Road Runner (SMC Networks) routers - practically NO security'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNoEIwj4odIbI1mBnPHD8XdEqZn1LtwherG9GqCmWDUpKWVez26mxGQYi_0-_AWNRtYuasxy0dA42v6CUhyphenhyphenrEJnVPGiKYJeVzfHxV8NfmWhBDDNiz6aViZX5oUpG97ak9TJpfjpm-K7mSz/s72-c/TWC.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-1693897401415212336</id><published>2012-06-23T22:08:00.000-04:00</published><updated>2013-10-20T18:09:26.871-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Python: Calculating the average color of an area of an image (PIL)</title><content type='html'>Here&#39;s a snippet of code I whipped up in Python to calculate the the average color of a square shaped area of an image. &amp;nbsp;I used the Python Imaging Library (PIL) to load the image, so be sure to have it available if you&#39;re using this.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: python&quot;&gt;
import Image

def get_average_color((x,y), n, image):
    &quot;&quot;&quot; Returns a 3-tuple containing the RGB value of the average color of the
    given square bounded area of length = n whose origin (top left corner) 
    is (x, y) in the given image&quot;&quot;&quot;

    r, g, b = 0, 0, 0
    count = 0
    for s in range(x, x+n+1):
        for t in range(y, y+n+1):
            pixlr, pixlg, pixlb = image[s, t]
            r += pixlr
            g += pixlg
            b += pixlb
            count += 1
    return ((r/count), (g/count), (b/count))

image = Image.open(&#39;test.png&#39;).load()
r, g, b = get_average_color((24,290), 50, image)
print r,g,b

&lt;/pre&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;

This is great for detecting the color of an area of an animated and constantly changing game screen, where finding the color of a single pixel may not be accurate enough for your needs.</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/1693897401415212336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2012/06/python-calculating-average-color-of.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/1693897401415212336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/1693897401415212336'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2012/06/python-calculating-average-color-of.html' title='Python: Calculating the average color of an area of an image (PIL)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-8987246114345740819</id><published>2012-03-31T23:51:00.000-04:00</published><updated>2013-02-22T22:50:14.174-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Visual Basic .NET"/><title type='text'>Simple Keylogger in VB .NET</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZdFqE5E7Rw_Y5-aNu5myGm-U7MC4USaDOrAbgiZJrDF_7oY71E1UlS9ULXS-jhT_mYLu8luU1lHtHaNAXbBwRMN6Z5apacurTEVVLvQZ0j6tvKia4DRGzN5Xt-2OwsPjZS39P0lw2OuYI/s1600/keylog.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZdFqE5E7Rw_Y5-aNu5myGm-U7MC4USaDOrAbgiZJrDF_7oY71E1UlS9ULXS-jhT_mYLu8luU1lHtHaNAXbBwRMN6Z5apacurTEVVLvQZ0j6tvKia4DRGzN5Xt-2OwsPjZS39P0lw2OuYI/s1600/keylog.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
This is a basic keylogger I wrote in VB.NET a few months ago. &amp;nbsp;It can be hidden by pressing the key combination CTRL+SHIFT+S (pressing it will toggle the display of the keylogger control panel), and has an inconspicuous process name &quot;svchost.exe&quot; &amp;nbsp;Upon exit, it will dump its keystroke log to C:\ntklr.sys and make the file hidden. &amp;nbsp;If you do not have permission to write to that directory, or would like to save the log using a different file name, you can select a different directory and path after checking the &quot;Write to file?&quot; checkbox. &lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This free, easy to use, and open source application does not raise any flags with popular anti-viruses as of right now, according to &lt;a href=&quot;https://www.virustotal.com/file/140f6931863df4cc6eefded4b99f234d71447aba972ff77ca1d258c23dd4fae4/analysis/1333247934/&quot;&gt;this&lt;/a&gt; report from VirusTotal, a service that scans a file through 40+ popular anti-virus products. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To use, simply:&lt;br /&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Check the &quot;Write to file?&quot; checkbox and select a path (or use the default path), then click Open.&lt;/li&gt;
&lt;li&gt;Click the Start button to start keylogging.&lt;/li&gt;
&lt;li&gt;Press the key combination CTRL+SHIFT+S (all at once) to conceal the window. &amp;nbsp;(&quot;stealth&quot; mode)&lt;/li&gt;
&lt;li&gt;Press some keys, or wait for the victim to type something.&lt;/li&gt;
&lt;li&gt;Whenever you want, hit CTRL+SHIFT+S again to bring the window back and view the log. &amp;nbsp;Exit the application or hit End to make it write the log to the log file you specified. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Open the logfile to view keystrokes. &amp;nbsp;This file is hidden, so make sure you have Show hidden files enabled in Windows Explorer to find it.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihw2ehzGaNkk27lZSsnk50FchrHs_nffrlghrEdliKP4wbh2Ob1rkuB4YLn0vk_MtSlXysK7PcIylHG5qmjRgk1oH6EkdP06hz7-0ZGKrafTVmcAVbvWCJEMrzGTQ7Mfx_NkAFOVz3W6c8/s1600/fb.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;129&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihw2ehzGaNkk27lZSsnk50FchrHs_nffrlghrEdliKP4wbh2Ob1rkuB4YLn0vk_MtSlXysK7PcIylHG5qmjRgk1oH6EkdP06hz7-0ZGKrafTVmcAVbvWCJEMrzGTQ7Mfx_NkAFOVz3W6c8/s320/fb.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Victim logs in&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicQl1IPiWazE_wLv54P0Un7xNB1npc6ddhikYVYmyabCUy3CV5KI5g_HdNM8UXXaIFJGj_OwNvYzp6bxZntuqpNIUXc4C30pzXLoCKjSE4hHkB4cATRV85ltSji74g4WtjcS_s8g51R9hX/s1600/textview.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;233&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicQl1IPiWazE_wLv54P0Un7xNB1npc6ddhikYVYmyabCUy3CV5KI5g_HdNM8UXXaIFJGj_OwNvYzp6bxZntuqpNIUXc4C30pzXLoCKjSE4hHkB4cATRV85ltSji74g4WtjcS_s8g51R9hX/s400/textview.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;credentials captured ;)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
If you would like to improve or modify this application, feel free to use the provided source code! &amp;nbsp;It requires the .NET Framework 4.0 redistributable package to be installed in order to run.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Binary (.exe): &lt;a href=&quot;http://www.box.com/s/e20cf0691b6ee29a4778&quot;&gt;Download&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
.NET 4.0 redistributable package: &lt;a href=&quot;http://www.microsoft.com/download/en/details.aspx?id=17851&quot;&gt;Download&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Source: &lt;a href=&quot;https://github.com/capablemonkey/vb-keylogger&quot;&gt;GitHub repo&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/8987246114345740819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2012/03/simple-keylogger-in-vb-net.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/8987246114345740819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/8987246114345740819'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2012/03/simple-keylogger-in-vb-net.html' title='Simple Keylogger in VB .NET'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZdFqE5E7Rw_Y5-aNu5myGm-U7MC4USaDOrAbgiZJrDF_7oY71E1UlS9ULXS-jhT_mYLu8luU1lHtHaNAXbBwRMN6Z5apacurTEVVLvQZ0j6tvKia4DRGzN5Xt-2OwsPjZS39P0lw2OuYI/s72-c/keylog.png" height="72" width="72"/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-4540403961328161193</id><published>2012-03-31T21:37:00.000-04:00</published><updated>2013-02-22T22:42:59.698-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Visual Basic .NET"/><title type='text'>SomewhatSecureChat - Chat with another computer on your network!</title><content type='html'>This free, simple chat application that will allow you to securely chat with another computer on your LAN (on your local network, though it &lt;i&gt;could&lt;/i&gt; work over the internet but not without some changes to account for NAT - like port fowarding). &amp;nbsp;It was written in VB .NET, so you&#39;ll need the .NET framework installed in order to use it. &amp;nbsp;Click &lt;a href=&quot;http://www.microsoft.com/download/en/details.aspx?id=17851&quot;&gt;here&lt;/a&gt; to download it.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIKml2mWOIiNMpcMqSdywjiabsfP8lKEuESnm0qbVOklsEJ6mha1gNhGC-1qyA0GjZQ8ZRuwOn_LVg1mZH0lT9_C9KI8idE0simZ4Txo-t9p8U3RNvjTnAH3Ypi9D7SsdlcrUXLvkLNR2/s1600/chat.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;322&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIKml2mWOIiNMpcMqSdywjiabsfP8lKEuESnm0qbVOklsEJ6mha1gNhGC-1qyA0GjZQ8ZRuwOn_LVg1mZH0lT9_C9KI8idE0simZ4Txo-t9p8U3RNvjTnAH3Ypi9D7SsdlcrUXLvkLNR2/s400/chat.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Both parties will need to have this application running (and listening) in order to chat. &amp;nbsp; Simply agree on a mutual password and record your friend&#39;s listening port number and IP address, and you&#39;ll be chatting in no time! &amp;nbsp;Somewhat Secure Chat is only for Windows. &amp;nbsp;This easy to use application is free and open-source; feel free to improve and distribute this program!&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Binary (.exe): &lt;a href=&quot;http://www.box.com/s/22840c4a70e0946c1f1e&quot;&gt;Download&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Required .NET framework 4.0 installer: &lt;a href=&quot;http://www.microsoft.com/download/en/details.aspx?id=17851&quot;&gt;Download&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Source: &lt;a href=&quot;https://github.com/capablemonkey/vb-somewhatsecurechat&quot;&gt;GitHub Repo&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/4540403961328161193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2012/03/somewhatsecurechat-chat-with-another.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/4540403961328161193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/4540403961328161193'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2012/03/somewhatsecurechat-chat-with-another.html' title='SomewhatSecureChat - Chat with another computer on your network!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIKml2mWOIiNMpcMqSdywjiabsfP8lKEuESnm0qbVOklsEJ6mha1gNhGC-1qyA0GjZQ8ZRuwOn_LVg1mZH0lT9_C9KI8idE0simZ4Txo-t9p8U3RNvjTnAH3Ypi9D7SsdlcrUXLvkLNR2/s72-c/chat.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-7807584454643902535</id><published>2011-10-19T06:31:00.000-04:00</published><updated>2012-06-29T22:17:24.699-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>Badass OUIs to use when spoofing your MAC address</title><content type='html'>When spoofing MAC addresses,&amp;nbsp;I like to use OUIs from major defense companies to troll anyone that snoops around (and bothers to look it up). &amp;nbsp;Here&#39;s my list of awesome OUIs:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-1A-11 &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Google Inc.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;001A11 &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Google Inc.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;1600 Amphitheater Parkway&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Mountain View CA 94043&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-00-8F &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Raytheon&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00008F &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Raytheon&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;M/S 1-1-1119&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;1001 Boston Post Rd&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Marlboro MA 01752&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-0B-F3 &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;BAE SYSTEMS&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;000BF3 &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;BAE SYSTEMS&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;6500 Tracor Lane&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Austin Texas 78725&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-E0-AF &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;GENERAL DYNAMICS INFORMATION SYSTEMS&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00E0AF &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;GENERAL DYNAMICS INFORMATION SYSTEMS&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;COMPUTING DEVICES, LTD.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;3190 FAIRVIEW PA&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;FALLS CHURCH VA 22042-4523&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-A0-21 &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;General Dynamics&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00A021 &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;General Dynamics&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Communication Systems&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;77A Street&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Needham Heights MA 02494-2892&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-26-89 &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;General Dynamics Robotic Systems&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;002689 &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;General Dynamics Robotic Systems&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;1231 Tech Court&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Westminster MD 21157&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-19-8A &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Northrop Grumman Systems Corp.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00198A &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Northrop Grumman Systems Corp.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;7055 Troy Hill Drive&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Elkridge Maryland 21075&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-40-BE &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;BOEING DEFENSE &amp;amp; SPACE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;0040BE &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;BOEING DEFENSE &amp;amp; SPACE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;P.O. BOX 3999&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;MAIL STOP 88-12&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;SEATTLE WA 98124-2499&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;60-8D-17 &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Sentrus Government Systems Division, Inc&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;608D17 &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Sentrus Government Systems Division, Inc&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;141 Chesterfield Industrial Blvd&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Chesterfield MO 63005-1219&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-07-EF &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Lockheed Martin Tactical Systems&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;0007EF &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Lockheed Martin Tactical Systems&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;3333 Pilot Knob Road&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Eagan MN 55121&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-08-55 &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;NASA-Goddard Space Flight Center&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;000855 &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;NASA-Goddard Space Flight Center&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Code 561&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Greenbelt MD 20771&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-0E-96 &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Cubic Defense Applications, Inc.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;000E96 &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Cubic Defense Applications, Inc.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;P.O. Box 85587&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;9333 Balboa Avenue&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;San Diego CA 92186-5587&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-14-8D &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Cubic Defense Simulation Systems&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00148D &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;Cubic Defense Simulation Systems&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;2001 W. Oakridge Road&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;Orlando FL 32809&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-1F-0D &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;L3 Communications - Telemetry West&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;001F0D &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;L3 Communications - Telemetry West&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;9020 Balboa Ave&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;San Diego CA 92123&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;EC-5C-69 &amp;nbsp; (hex) &amp;nbsp;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;MITSUBISHI HEAVY INDUSTRIES MECHATRONICS &lt;br /&gt; &amp;#09&amp;#09&amp;#09&amp;#09 SYSTEMS,LTD.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;EC5C69 &amp;nbsp; &amp;nbsp; (base 16) &amp;nbsp;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;MITSUBISHI HEAVY INDUSTRIES MECHATRONICS &lt;br /&gt; &amp;#09&amp;#09&amp;#09&amp;#09 SYSTEMS,LTD.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;1-16,5-CHOME,KOMATSU-DORI,&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;KOBE HYOGO 652-0865&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;JAPAN&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-00-AE &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;DASSAULT ELECTRONIQUE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;0000AE &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;DASSAULT ELECTRONIQUE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;55, QUAI MARCEL DASSAULT&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;92214 ST CLOUD&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;FRANCE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;FRANCE&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;00-00-AF &amp;nbsp; (hex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;NUCLEAR DATA INSTRUMENTATION&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;0000AF &amp;nbsp; &amp;nbsp; (base 16)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&lt;/span&gt;NUCLEAR DATA INSTRUMENTATION&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;GOLF &amp;amp; MEACHAM ROADS&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;SCHAUMBERG IL 60196&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&amp;#09&amp;#09&amp;#09&amp;#09&lt;/span&gt;UNITED STATES&lt;/span&gt;&lt;/code&gt;</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/7807584454643902535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2011/10/badass-ouis-to-use-when-spoofing-your.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/7807584454643902535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/7807584454643902535'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2011/10/badass-ouis-to-use-when-spoofing-your.html' title='Badass OUIs to use when spoofing your MAC address'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-7091671672825398301</id><published>2011-10-10T20:33:00.000-04:00</published><updated>2012-06-23T22:39:03.252-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="worldwinner"/><title type='text'>WorldWinner Big Money Bot written in Python</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.cashgamecentral.com/img/featured/WorldWinner.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;197&quot; src=&quot;http://www.cashgamecentral.com/img/featured/WorldWinner.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;What WW used to look like before GSN bought them.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
I generally scored between 60,000-120,000 points on WorldWinner&#39;s Big Money compete-for-cash game, which, to me, was pretty good. &amp;nbsp;That was until I decided to looked up some strategies for improving my skill in BM and instead stumbled upon some YouTube videos of players scoring upwards of 350,000 points. My highest score was 137,582, and the highest I&#39;ve ever seen in my experience was around 180k. You can imagine I was pretty shocked that a score higher than 200,000 was even possible, let alone achievable without cheating. &lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;I then realized how much I suck at this game. &amp;nbsp;Well, what do you do when you can&#39;t beat a game? &amp;nbsp;Try, try again? &amp;nbsp;Practice? &amp;nbsp;Nope. &amp;nbsp;You cheat.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
A simple Google search for &quot;worldwinner big money bot&quot; led me to one of those shady infomercial style sites with obviously fake and cheesy testimonials. &amp;nbsp;The product&#39;s slogan ended with &quot;MAKE MORE MONEY THAN YOU COULD EVER IMAGINE!!!&quot; &amp;nbsp;&lt;i&gt;Riiiiiight&lt;/i&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Other than that shady site, I couldn&#39;t find any mention elsewhere of a bot for Big Money. &amp;nbsp;I decided to make my own.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It works, but it doesn&#39;t strategize, ponder, or think ahead yet; so it will usually end the game with a score between 60k - 120k. &amp;nbsp;I wrote this a while ago and I&#39;m too busy at the moment to implement this feature. &amp;nbsp;If anybody would like to improve upon this, feel free. &amp;nbsp;Be warned, however: I didn&#39;t think I&#39;d be sharing this so it&#39;s poorly commented.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To start, simply download the script &lt;a href=&quot;https://docs.google.com/open?id=0B82THdBOESPxMzZmOWJhOTEtYmU0Yi00YTdjLWFmZjktOTE5YWRhMDNkYTg2&quot;&gt;here&lt;/a&gt;. &amp;nbsp;It was written for the latest version of Python 2, but any version &amp;gt; 2.5 should work fine IIRC. &amp;nbsp;It requires the &lt;a href=&quot;http://www.pythonware.com/products/pil/&quot;&gt;Python Imaging Library&lt;/a&gt; (PIL) and &lt;a href=&quot;http://sourceforge.net/projects/pywin32/files/pywin32/Build216/&quot;&gt;Python for Windows Extensions&lt;/a&gt; (pywin32).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Before you can run it, you&#39;ll need to modify the script to set some variables. &amp;nbsp;You&#39;ll need to change variables &#39;xbeg&#39; and &#39;ybeg&#39; to fit your resolution and browser. &amp;nbsp;You can take a screenshot and measure the distance in MS Paint. &amp;nbsp;Use the picture below as a guide.&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/GWE3R.jpg&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; src=&quot;http://i.imgur.com/GWE3R.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Here&#39;s a video of the bot in action:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/g1zZDNoeURc?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/7091671672825398301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2011/10/worldwinner-big-money-bot-written-in.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/7091671672825398301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/7091671672825398301'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2011/10/worldwinner-big-money-bot-written-in.html' title='WorldWinner Big Money Bot written in Python'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-3095540266494299432</id><published>2011-08-28T21:30:00.000-04:00</published><updated>2012-03-24T20:53:30.357-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="8tracks"/><title type='text'>How to batch download all of your favorited tracks/music on 8tracks</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSyxZ0L9nLsLa-6y1EN8WVVKsmJKR1L6hSwuFw8NkY2hLw2KiNSRUH6h3vS952dyiDq1kB_ieDfjJaps5ZklKS4gM3XYylpGK1fJj_7kXGZi_tDAfSnVYVOMN9J8ItvFfiEt0meeYVkL1C/s1600/logo.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;135&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSyxZ0L9nLsLa-6y1EN8WVVKsmJKR1L6hSwuFw8NkY2hLw2KiNSRUH6h3vS952dyiDq1kB_ieDfjJaps5ZklKS4gM3XYylpGK1fJj_7kXGZi_tDAfSnVYVOMN9J8ItvFfiEt0meeYVkL1C/s400/logo.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Update: the script and method used in this post no longer works. &amp;nbsp;I made a GAE-hosted app version of this script instead; go to: &amp;nbsp;&lt;a href=&quot;http://8trackshelper.appspot.com/&quot;&gt;http://8trackshelper.appspot.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I love &lt;a href=&quot;http://8tracks.com/&quot;&gt;8tracks&lt;/a&gt;. &amp;nbsp;It lets me discover new music from a specific genre. &amp;nbsp;User generated playlists (mixes) are awesome because some people have great taste in music. &amp;nbsp;On that note, let me point out that the majority of these playlists aren&#39;t filled with that &lt;b&gt;garbage&lt;/b&gt; mainstream hiphop they make these days (I know, right, what a relief). &lt;br /&gt;
&lt;br /&gt;
Anyway, if you&#39;ve used the site, you&#39;ve probably &lt;i&gt;favorited&lt;/i&gt; a couple of tracks that you liked and now have a long list of tracks on your profile. &amp;nbsp;Over a few months of listening to 8tracks, my favorite tracks list has accumulated about 200 tracks. &amp;nbsp;I&#39;ve always wanted to download all of the songs on that list... but downloading them one by one would seriously be a pain, as you&#39;d have to &amp;nbsp;find a reliable source, copy/paste, search, download, and rinse and repeat for each of those 200 songs. &lt;br /&gt;
&lt;br /&gt;
Instead, I wanted to automate the process. &amp;nbsp;You can download music directly from 8tracks using a &lt;a href=&quot;http://userscripts.org/scripts/show/83206&quot;&gt;JS script&lt;/a&gt; written by &lt;i&gt;Yamamaya&lt;/i&gt;, but only when you&#39;re playing a them from a mix. &amp;nbsp;That&#39;s a problem because there&#39;s no way to go from a favorited track on your list directly to the mix where it originates from in order to download it. &amp;nbsp;This means that you can&#39;t download the songs directly from 8tracks&#39; servers, and you&#39;ll have to download them from somewhere else. &lt;br /&gt;
&lt;br /&gt;
Problem is, there aren&#39;t many reliable sites or services to go to download MP3s quick and easy enough to automate the process. &amp;nbsp;Then, I discovered Grooveshark. &amp;nbsp;Grooveshark is a popular music streaming services that lets its users stream &quot;any song in the world for free.&quot; &amp;nbsp;Pretty neat, eh? &amp;nbsp;Most of its content is user-uploaded, so song quality may vary (though, from what I&#39;ve seen, they&#39;ve always been &amp;gt; 128 kbps).&lt;br /&gt;
&lt;br /&gt;
Grooveshark itself wasn&#39;t exactly the answer to my problem, it was a program called&amp;nbsp;&lt;a href=&quot;http://www.scilor.com/grooveshark-downloader.html&quot;&gt;SciLor&#39;s grooveshark™.com Downloader&lt;/a&gt;, which was written by, you guessed it, a developer named SciLor. &amp;nbsp;It allows you to, among other things, batch search and then download songs from Grooveshark. &amp;nbsp;His program pretty much solves everything. &amp;nbsp;From here, all I needed to do was get my list of songs from 8tracks into plaintext with the artist name, and &lt;i&gt;bam&lt;/i&gt;, and if everything runs smoothly I should have 200 MP3s without much effort.&lt;br /&gt;
&lt;br /&gt;
To get my list of songs and respective artists in a list in plaintext, &amp;nbsp;I wrote a quick Python script to extract a user&#39;s favorited tracks when given their username. &amp;nbsp;It generates a list in the following format: &amp;lt;song title&amp;gt; - &amp;lt;artist&amp;gt;, and saves it to a text file. &amp;nbsp;All you need to do from here is copy the list into&amp;nbsp;SciLor&#39;s grooveshark™.com Downloader and let it rip. &amp;nbsp;So let&#39;s go over this really quick:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Step 1&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Make sure you have Python 2.7X (if not, download it &lt;a href=&quot;http://www.python.org/download/&quot;&gt;here&lt;/a&gt;&amp;nbsp;if you&#39;re using Windows). &amp;nbsp;Then, download the Python script &lt;a href=&quot;https://docs.google.com/leaf?id=0B82THdBOESPxYWM5MWIzYmUtNDVlMi00ZDRmLTg4YzYtMGU0NzUxZTA3MjA2&amp;amp;hl=en_US&quot;&gt;here&lt;/a&gt;. &amp;nbsp;And finally, get the downloader &lt;a href=&quot;http://web246.ac-host.net/simpleUpload/download.php?user=scilor&amp;amp;file=SciLorsGrooveshark.comDownloaderV0.4.9l.zip&quot;&gt;here&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Run 8tracks.py by either double clicking or running it from the command line (python 8tracks.py), input your username and in a few seconds, you should have your list of favorited tracks in a text file. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/zwgdd.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;263&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibdcy4kq75kD2IzJ9GX-NSDZ38CauTXJ4Y6zhH_p2WHcXe_La_N2N_w2dhJO23T3uuRQs5Ej1t-ssv0NyHhnE9LczHwiqUHJtibfx8OddwZYdI64tKhu7BRcmuHEb7aYke0VT5mJJHk0AK/s400/shark2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Step 3&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
If you haven&#39;t already, unzip SciLor&#39;s downloader and run it. &amp;nbsp;Go to the &lt;i&gt;Extended Functions&lt;/i&gt; tab, and select &lt;i&gt;Import from file. &amp;nbsp;&lt;/i&gt;Browse and select the text file that was previously generated and click &lt;i&gt;Search &amp;amp; Add&lt;/i&gt;. &amp;nbsp;You should&#39;ve now been sent to the main tab with all of the tracks now neatly packed into your download queue. &amp;nbsp;Click download and wait for your songs to finish. &amp;nbsp;You&#39;ll be able to find them in the Downloads folder in the program&#39;s directory.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.imgur.com/fmNgg.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;227&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrQc2MjTHM569ceX3fTPvg4SseKbtMnPAbu6vaMpFQ7x-FVOmh9475Eg-0sngbQZ_VpY6PaRHdi88q3XgsugyYJY_AmN0Dh_FmNpgegGEIGP7co5kXqPWXO_6MTxTe9_g1z4SNuF0C4WGC/s400/groove.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Note:&lt;/b&gt;&lt;/span&gt; if this program batch searches too many titles in short amount of time ( &amp;gt; 200), I&#39;ve had GrooveShark temporarily IP &quot;ban&quot; me for about six hours. &amp;nbsp;That means you&#39;ll be unable to use this downloader and you won&#39;t be able to search or play songs on their site for the duration of the block. &amp;nbsp;200 search queries in under a minute is not only suspicious, but it&#39;s not nice to their servers. &amp;nbsp; I recommend batch searching half, waiting a few minutes, and then doing the next half. &amp;nbsp;To do this, copy half of the list from the text file and paste it into the batch download field rather than importing it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#39;s all. &amp;nbsp;Overwhelmingly simple, isn&#39;t it?&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;b&gt;EDIT:&lt;/b&gt; Due to the new revamped 8tracks site, the script used in this post will no longer work. &amp;nbsp;Instead, try using this: &lt;a href=&quot;http://8trackshelper.appspot.com/&quot;&gt;http://8trackshelper.appspot.com&lt;/a&gt;. &amp;nbsp;(try my username: technix1). &lt;/h3&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/3095540266494299432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2011/08/how-to-batch-download-all-of-your.html#comment-form' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/3095540266494299432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/3095540266494299432'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2011/08/how-to-batch-download-all-of-your.html' title='How to batch download all of your favorited tracks/music on 8tracks'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSyxZ0L9nLsLa-6y1EN8WVVKsmJKR1L6hSwuFw8NkY2hLw2KiNSRUH6h3vS952dyiDq1kB_ieDfjJaps5ZklKS4gM3XYylpGK1fJj_7kXGZi_tDAfSnVYVOMN9J8ItvFfiEt0meeYVkL1C/s72-c/logo.jpg" height="72" width="72"/><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-7636008685305304618</id><published>2011-08-28T02:37:00.000-04:00</published><updated>2011-08-28T02:42:59.719-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gaming"/><title type='text'>Deus Ex Human Revolution: Kevin Mitnick Easter Egg</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://i.imgur.com/t88RS.jpg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg1ctArz_l6T7Pp9zE6zym5YkJZ7c5Nd5nrmmiKssbqmgWHn7rJxgHwOtI5R0xSV-_T1gTAqxksJk4-jCM3I5IPpcJg2LRLVuGcOXciU9eCOHq8U3eJcqB5Xy-1u05_lCJd5-_2gZQQzUJ/s400/dxhr+2011-08-28+02-28-52-29.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;click for enlarged picture&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Heh, despite the massive failure with the &quot;hacking&quot; aspect of this game, the developers did one thing right. &amp;nbsp;Kudos for the Kevin Mitnick reference.</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/7636008685305304618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2011/08/deus-ex-human-revolution-kevin-mitnick.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/7636008685305304618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/7636008685305304618'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2011/08/deus-ex-human-revolution-kevin-mitnick.html' title='Deus Ex Human Revolution: Kevin Mitnick Easter Egg'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg1ctArz_l6T7Pp9zE6zym5YkJZ7c5Nd5nrmmiKssbqmgWHn7rJxgHwOtI5R0xSV-_T1gTAqxksJk4-jCM3I5IPpcJg2LRLVuGcOXciU9eCOHq8U3eJcqB5Xy-1u05_lCJd5-_2gZQQzUJ/s72-c/dxhr+2011-08-28+02-28-52-29.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3248031238685375620.post-6075891432057767826</id><published>2011-08-28T00:24:00.000-04:00</published><updated>2011-08-28T00:24:51.285-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hello world"/><title type='text'>Well, here we go.</title><content type='html'>My first attempt at blogging begins today. &amp;nbsp;Consider this filler text until I can think of some content to push onto you.</content><link rel='replies' type='application/atom+xml' href='http://capablemonkey.blogspot.com/feeds/6075891432057767826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://capablemonkey.blogspot.com/2011/08/well-here-we-go.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/6075891432057767826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3248031238685375620/posts/default/6075891432057767826'/><link rel='alternate' type='text/html' href='http://capablemonkey.blogspot.com/2011/08/well-here-we-go.html' title='Well, here we go.'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>