diff --git a/examples/Basics.ipynb b/examples/Basics.ipynb
new file mode 100644
index 0000000..ff5b4b3
--- /dev/null
+++ b/examples/Basics.ipynb
@@ -0,0 +1,886 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/javascript": [
+ "if(window['d3'] === undefined ||\n",
+ " window['Nyaplot'] === undefined){\n",
+ " var path = {\"d3\":\"https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min\",\"downloadable\":\"http://cdn.rawgit.com/domitry/d3-downloadable/master/d3-downloadable\"};\n",
+ "\n",
+ "\n",
+ "\n",
+ " var shim = {\"d3\":{\"exports\":\"d3\"},\"downloadable\":{\"exports\":\"downloadable\"}};\n",
+ "\n",
+ " require.config({paths: path, shim:shim});\n",
+ "\n",
+ "\n",
+ "require(['d3'], function(d3){window['d3']=d3;console.log('finished loading d3');require(['downloadable'], function(downloadable){window['downloadable']=downloadable;console.log('finished loading downloadable');\n",
+ "\n",
+ "\tvar script = d3.select(\"head\")\n",
+ "\t .append(\"script\")\n",
+ "\t .attr(\"src\", \"http://cdn.rawgit.com/domitry/Nyaplotjs/master/release/nyaplot.js\")\n",
+ "\t .attr(\"async\", true);\n",
+ "\n",
+ "\tscript[0][0].onload = script[0][0].onreadystatechange = function(){\n",
+ "\n",
+ "\n",
+ "\t var event = document.createEvent(\"HTMLEvents\");\n",
+ "\t event.initEvent(\"load_nyaplot\",false,false);\n",
+ "\t window.dispatchEvent(event);\n",
+ "\t console.log('Finished loading Nyaplotjs');\n",
+ "\n",
+ "\t};\n",
+ "\n",
+ "\n",
+ "});});\n",
+ "}\n"
+ ],
+ "text/plain": [
+ "\"if(window['d3'] === undefined ||\\n window['Nyaplot'] === undefined){\\n var path = {\\\"d3\\\":\\\"https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min\\\",\\\"downloadable\\\":\\\"http://cdn.rawgit.com/domitry/d3-downloadable/master/d3-downloadable\\\"};\\n\\n\\n\\n var shim = {\\\"d3\\\":{\\\"exports\\\":\\\"d3\\\"},\\\"downloadable\\\":{\\\"exports\\\":\\\"downloadable\\\"}};\\n\\n require.config({paths: path, shim:shim});\\n\\n\\nrequire(['d3'], function(d3){window['d3']=d3;console.log('finished loading d3');require(['downloadable'], function(downloadable){window['downloadable']=downloadable;console.log('finished loading downloadable');\\n\\n\\tvar script = d3.select(\\\"head\\\")\\n\\t .append(\\\"script\\\")\\n\\t .attr(\\\"src\\\", \\\"http://cdn.rawgit.com/domitry/Nyaplotjs/master/release/nyaplot.js\\\")\\n\\t .attr(\\\"async\\\", true);\\n\\n\\tscript[0][0].onload = script[0][0].onreadystatechange = function(){\\n\\n\\n\\t var event = document.createEvent(\\\"HTMLEvents\\\");\\n\\t event.initEvent(\\\"load_nyaplot\\\",false,false);\\n\\t window.dispatchEvent(event);\\n\\t console.log('Finished loading Nyaplotjs');\\n\\n\\t};\\n\\n\\n});});\\n}\\n\""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " Trajectory following with ARIEL (2a59a184332bc184c7e78f96545bb70a5d45ec46d5963e79355a7ba8dd2c3f1c) \n",
+ "
\n",
+ "\n",
+ " \n",
+ " Name | \n",
+ " Model | \n",
+ " Ports | \n",
+ "
\n",
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ "\n",
+ " aceinna_imu_task | \n",
+ " imu_aceinna_openimu::Task | \n",
+ " io_status_port , imu_sensors_samples_port , state_port , pose_samples_port , status_samples_port , io_read_listener_port , io_raw_out_port , magnetic_info_port , timestamp_estimator_status_port , acceleration_samples_port , io_write_listener_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " aft_camera_task | \n",
+ " camera_rtsp_gstreamer::ReceiverTask | \n",
+ " state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " ais_0183_task | \n",
+ " nmea0183::AISTask | \n",
+ " io_raw_out_port , state_port , voyages_information_port , io_status_port , ais_stats_port , positions_port , io_write_listener_port , io_read_listener_port , vessels_information_port , nmea_stats_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " body_pose_transformation_task | \n",
+ " wetpaint_common::BodyPoseTransformationTask | \n",
+ " state_port , transformer_stream_aligner_status_port , transformer_status_port , body_pose_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " camera_compositor_task | \n",
+ " wetpaint_camera_compositor::Task | \n",
+ " state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " camera_streaming_task | \n",
+ " video_streamer_webrtc::StreamerTask | \n",
+ " state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " can_boat_task | \n",
+ " canbus::Task | \n",
+ " power_cube_starboard_port , state_port , stats_port , rudder_motor_port , smart_shunt_port , power_cube_port_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " can_n2k_task | \n",
+ " canbus::Task | \n",
+ " state_port , nmea2000_port , stats_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " clutch_control_task | \n",
+ " wetpaint_live::RudderClutchControl | \n",
+ " state_port , actual_cmd_port , steering_enable_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " cmd_force_to_speed_task | \n",
+ " usv_control::ForceToSpeedTask | \n",
+ " state_port , forward_input_port , rotation_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " cmd_speed_to_force_task | \n",
+ " usv_control::SpeedToForceTask | \n",
+ " state_port , thrust_port , forward_input_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " controldev_websocket_task | \n",
+ " controldev_websocket::Task | \n",
+ " statistics_port , raw_command_port , state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " depth_sounder_task | \n",
+ " nmea2000::AirmarDST800Task | \n",
+ " state_port , depth_samples_port , speed_samples_port , temperature_samples_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " forward_camera_task | \n",
+ " camera_rtsp_gstreamer::ReceiverTask | \n",
+ " state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " forwarder_task | \n",
+ " usv_control::ForwarderTask | \n",
+ " state_port , out_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " gpio_depth_sensor_enable_task | \n",
+ " linux_gpios::Task | \n",
+ " | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " gpio_propulsion_enable_task | \n",
+ " linux_gpios::Task | \n",
+ " | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " gpio_steering_enable_task | \n",
+ " linux_gpios::Task | \n",
+ " | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " heading_control_task | \n",
+ " usv_control::PIDHeadingTask | \n",
+ " cmd_out_port , controller_state_port , state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " nmea2000_task | \n",
+ " nmea2000::CANTask | \n",
+ " ais_port , tank_level_starboard_port , depth_sounder_port , can_out_port , state_port , device_information_port , resolved_devices_port , messages_port , tank_level_port_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " port_camera_task | \n",
+ " camera_rtsp_gstreamer::ReceiverTask | \n",
+ " state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " power_cube_port_task | \n",
+ " power_whisperpower::DCPowerCubeTask | \n",
+ " full_status_port , ac_generator_status_port , dc_output_status_port , ac_grid_status_port , state_port , can_out_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " power_cube_starboard_task | \n",
+ " power_whisperpower::DCPowerCubeTask | \n",
+ " full_status_port , dc_output_status_port , ac_generator_status_port , can_out_port , ac_grid_status_port , state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " propulsion_demultiplexer_task | \n",
+ " wetpaint_live::PropulsionMultiplexer | \n",
+ " state_port , multiplexed_out_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " propulsion_modbus_multiplexer_task | \n",
+ " wetpaint_live::MotorsMultiplexer | \n",
+ " io_raw_out_port , state_port , starboard_raw_out_port , port_raw_out_port , io_status_port , io_write_listener_port , io_read_listener_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " propulsion_multiplexer_task | \n",
+ " wetpaint_live::PropulsionDemultiplexer | \n",
+ " port_out_port , state_port , starboard_out_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " propulsion_port_controller_task | \n",
+ " motors_weg_cvw300::Task | \n",
+ " fault_state_port , io_write_listener_port , temperatures_port , io_status_port , joint_samples_port , state_port , io_read_listener_port , io_raw_out_port , inverter_state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " propulsion_safety_gpio_task | \n",
+ " wetpaint_live::SafetyStatusGPIOHandlerTask | \n",
+ " state_port , gpio_out_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " propulsion_scheduler_task | \n",
+ " slave_scheduler::OrderedSchedulingTask | \n",
+ " state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " propulsion_starboard_controller_task | \n",
+ " motors_weg_cvw300::Task | \n",
+ " temperatures_port , io_write_listener_port , io_status_port , io_raw_out_port , io_read_listener_port , joint_samples_port , inverter_state_port , state_port , fault_state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " raw_to_actuator_commands_task | \n",
+ " usv_control::RawToActuatorCommandsTask | \n",
+ " controller_state_port , state_port , rotation_cmd_port , rudder_angle_cmd_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " rudder_actuator_to_angle_task | \n",
+ " usv_control::RudderActuatorToAngleTask | \n",
+ " state_port , rudder_position_samples_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " rudder_analog_to_position_task | \n",
+ " wetpaint_live::RudderLinearActuatorPositionTask | \n",
+ " position_samples_port , state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " rudder_angle_to_actuator_task | \n",
+ " usv_control::RudderAngleToActuatorTask | \n",
+ " state_port , actuator_cmd_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " rudder_control_task | \n",
+ " motors_roboteq_canopen::Task | \n",
+ " state_port , joint_samples_port , controller_status_port , can_out_port , analog_inputs_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " rudder_pid_task | \n",
+ " motor_controller::PIDTask | \n",
+ " state_port , pid_states_port , out_command_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " rudder_pid_course_change_control_task | \n",
+ " usv_control::RudderPIDCourseChangeControlTask | \n",
+ " state_port , controller_state_port , cmd_out_port , corrected_course_change_cmd_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " smart_shunt_task | \n",
+ " power_whisperpower::SmartShuntTask | \n",
+ " can_out_port , state_port , full_status_port , battery_status_port , battery_dc_output_status_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " starboard_camera_task | \n",
+ " camera_rtsp_gstreamer::ReceiverTask | \n",
+ " state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " status_speed_to_force_task | \n",
+ " usv_control::SpeedToForceTask | \n",
+ " thrust_port , forward_input_port , state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " tank_level_port_task | \n",
+ " nmea2000::FluidLevelTask | \n",
+ " state_port , level_out_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " tank_level_starboard_task | \n",
+ " nmea2000::FluidLevelTask | \n",
+ " state_port , level_out_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " telemetry_usv_task | \n",
+ " comms_wetpaint::USVTask | \n",
+ " desired_safety_status_port , stream_stats_port , control_station_common_status_port , io_read_listener_port , io_raw_out_port , state_port , io_status_port , io_write_listener_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " thruster_mapping_task | \n",
+ " usv_control::DifferentialThrusterMappingTask | \n",
+ " cmd_out_port , controller_state_port , state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " trajectory_follower_task | \n",
+ " usv_control::XYYawTrajectoryFollowerTask | \n",
+ " state_port , controller_state_port , cmd_out_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " transformer_broadcaster_task | \n",
+ " transformer::Task | \n",
+ " state_port , configuration_state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " ublox_gps_task | \n",
+ " gps_ublox::Task | \n",
+ " gps_solution_port , io_read_listener_port , pose_samples_port , rf_info_port , io_write_listener_port , state_port , signal_info_port , io_raw_out_port , satellite_info_port , io_status_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " velocity_control_task | \n",
+ " usv_control::PIDVelocityTask | \n",
+ " controller_state_port , state_port , cmd_out_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " wave_filter_task | \n",
+ " usv_control::WaveFilterTask | \n",
+ " out_port , state_port | \n",
+ "
\n",
+ "\n",
+ " \n",
+ "\n",
+ " wind_sensor_task | \n",
+ " wind_lcj_cv7::Task | \n",
+ " | \n",
+ "
\n",
+ "\n",
+ "
\n"
+ ],
+ "text/plain": [
+ "#