SlideShare ist ein Scribd-Unternehmen logo
1 von 25
CODE PAD: INTERACTIVE SPACES FOR
MAINTAINING CONCENTRATION IN
PROGRAMMING ENVIRONMENTS
Chris Parnin Georgia Institute of Technology
Carsten Görg, UC Denver
Spencer Rugaber, Georgia Institute of Technology
Visualization: Introducing a new species into an environment.
ECOSYSTEMS
SUCCESSFUL INTRODUCTIONS…
RICH INTERACTION IN
ENVIRONMENT
How do I survive in the wild?
SOFTWARE
DEVELOPMENT
ECOSYSTEM?
Resource-starved and isolated
Programming
Team/SocialCognitive
Planning/Task
Engineering
ISLANDS OF
ACTIVITY
Scribble on code.
Keep its items in a mental workspace.
Share and interact with others.
WHY CAN’T WE….
INTRODUCING
CODE PAD
A platform first,
a device second.
Outline
• Design
• Examples
• Implementation
• Future
DESIGN
Content
Actions
Programming activities Secondary activities
Automatic
or
Manual
WHY NOT ANOTHER DISPLAY?
• Social Mobility and Sharing
(collaboration, meetings, hand-off)
• Alternate Modality (pen, multi-touch)
• Spatial Affordances
(push aside, stacking)
TWO COMPETING DESIGNS
Chomp
Pellets.cs
using System;
using System.Collections;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace Chomp
{
public enum PelletType
{
RegularPellet = 0,
PowerPellet = 1
}
public class Pellets
{
private ArrayList _pellets;
private ArrayList _powerPellets;
private PelletType _pelletType;
private SolidBrush _brushPowerPellet;
public const int POWER_PELLET_POINTS = 50;
public const int REGULAR_PELLET_POINTS = 10;
public delegate void
onPowerPelletEatenEventHandler (object Source,
PelletEventArgs e);
public event onPowerPelletEatenEventHandler
OnPelletEaten;
public Pellets()
{
_brushPowerPellet = new SolidBrush
(Color.FromArgb(255,194,159));
}
public int RegularPelletCount
{
get {return _pellets.Count;}
}
public int PowerPelletCount
{
get {return _powerPellets.Count;}
}
public void BlinkPowerPellet()
{
if (_brushPowerPellet.Color == Color.Black)
{
_brushPowerPellet.Color = Color.FromArgb
(255,194,159);
}
else
{
_brushPowerPellet.Color = Color.Black;
}
}
Chomp
Pacman.cs
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace Chomp
{
public class PacmanCharacter : GameCharacter
{
Bitmap _bmpCharClosed;
Bitmap _bmpCharOpenMidLeft;
Bitmap _bmpCharOpenMidRight;
Bitmap _bmpCharOpenMidUp;
Bitmap _bmpCharOpenMidDown;
Bitmap _bmpCharOpenAllLeft;
Bitmap _bmpCharOpenAllRight;
Bitmap _bmpCharOpenAllUp;
Bitmap _bmpCharOpenAllDown;
public enum CharacterPosition
{
Closed = 0,
OpenMidLow = 1,
OpenMidHigh = 3,
OpenAll = 4,
}
private CharacterPosition
_currentCharacterPosition;
public PacmanCharacter(GameBoard Board, Point
CurrentLocation, int Width, int Height): base (Board,
CurrentLocation, Width, Height)
{
_currentCharacterPosition =
CharacterPosition.Closed;
}
public CharacterPosition Position
{
get {return _currentCharacterPosition;}
set {_currentCharacterPosition = value;}
}
public override sealed void Initialize()
{
GenerateCharacters();
}
public void AnimateDeath()
{
}
public override sealed void Move()
{
base.Move();
if (_currentCharacterState ==
CharacterState.Moving) _currentCharacterPosition =
GetNextCharacterPosition();
}
Organize content by task Organize content by activity
CONTENT TYPE
Chomp
Pellets.cs
using System;
using System.Collections;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace Chomp
{
public enum PelletType
{
RegularPellet = 0,
PowerPellet = 1
}
public class Pellets
{
private ArrayList _pellets;
private ArrayList _powerPellets;
private PelletType _pelletType;
private SolidBrush _brushPowerPellet;
public const int POWER_PELLET_POINTS = 50;
public const int REGULAR_PELLET_POINTS = 10;
public delegate void
onPowerPelletEatenEventHandler (object Source,
PelletEventArgs e);
public event onPowerPelletEatenEventHandler
OnPelletEaten;
public Pellets()
{
_brushPowerPellet = new SolidBrush
(Color.FromArgb(255,194,159));
}
public int RegularPelletCount
{
get {return _pellets.Count;}
}
public int PowerPelletCount
{
get {return _powerPellets.Count;}
}
public void BlinkPowerPellet()
{
if (_brushPowerPellet.Color == Color.Black)
{
_brushPowerPellet.Color = Color.FromArgb
(255,194,159);
}
else
{
_brushPowerPellet.Color = Color.Black;
}
}
File Overview
2
Name Value
address
City
State
Postcode 30332
null
{Name=”Atlanta”}
IDE WireframesSnippets
EXAMPLE: REFACTORING
Scenario:
Developer wants to extract
a set of methods scattered
throughout code to form
new classes…
Developer sees candidate, send!
Main development task…
Now, enough snippets to get started!
REFACTORING WORKBENCH
Create new class!
public Point CenterPoint(Polyline line)
{
var first = line.Points.First();
var last = line.Points.Last();
return new Point((first.X + last.X) / 2,
(first.Y + last.Y) / 2);
}
public Point CenterPoint(Polyline line)
{
var first = line.Points.First();
var last = line.Points.Last();
return new Point((first.X + last.X) / 2,
(first.Y + last.Y) / 2);
}
public Point CenterPoint(Polyline line)
{
var first = line.Points.First();
var last = line.Points.Last();
return new Point((first.X + last.X) / 2,
(first.Y + last.Y) / 2);
}
Organize Generate!
Pellets.cs
13: public class Pellets
42: public void BlinkPowerPellet()
54: public void RemovePellet(Point Location)
108: _powerPellets
114: public void GeneratePellets()
GameBoard.cs
22: public class GameBoard
54: public event PowerModeEventHandler
62: public GameBoard(int Width, int Height,
System.Windows.Forms.PictureBox PictureGameBoard)
wen=+netaEtellePnO.stellep_:66
Pellets.onPowerPelletEatenEventHandler(PelletEaten);
877:
//:388
889: _powerMode
(fi:098
(this, new EventArgs());
891:
892:
GameCharacter.cs
5:namespace Chomp
13: public class Pellets
19: _soundDevice = new Device();
27: public abstract class GameCharacter
35: protected int _moveInterval;
215:
CurrentCoordinate)
;++y:922
;kaerb:032
256: {
261:
266:
esac:072
.stelleP.draob_:172 GeneratePellets
274:
;kaerb:772
282:
Pellets.cs
13: public class Pellets
42: public void BlinkPowerPellet()
54: public void RemovePellet(Point Location)
108: _powerPellets
114: public void GeneratePellets()
GameBoard.cs
22: public class GameBoard
54: public event PowerModeEventHandler
62: public GameBoard(int Width, int Height,
System.Windows.Forms.PictureBox PictureGameBoard)
wen=+netaEtellePnO.stellep_:66
Pellets.onPowerPelletEatenEventHandler(PelletEaten);
877:
//:388
889: _powerMode
(fi:098
(this, new EventArgs());
891:
892:
GameCharacter.cs
5:namespace Chomp
13: public class Pellets
19: _soundDevice = new Device();
27: public abstract class GameCharacter
35: protected int _moveInterval;
215:
CurrentCoordinate)
;++y:922
;kaerb:032
256: {
261:
266:
esac:072
.stelleP.draob_:172 GeneratePellets
274:
;kaerb:772
282:
Pellets.cs
13: public class Pellets
42: public void BlinkPowerPellet()
54: public void RemovePellet(Point Location)
108: _powerPellets
114: public void GeneratePellets()
GameBoard.cs
22: public class GameBoard
54: public event PowerModeEventHandler
62: public GameBoard(int Width, int Height,
System.Windows.Forms.PictureBox PictureGameBoard)
wen=+netaEtellePnO.stellep_:66
Pellets.onPowerPelletEatenEventHandler(PelletEaten);
877:
//:388
889: _powerMode
(fi:098
(this, new EventArgs());
891:
892:
GameCharacter.cs
5:namespace Chomp
13: public class Pellets
19: _soundDevice = new Device();
27: public abstract class GameCharacter
35: protected int _moveInterval;
215:
CurrentCoordinate)
;++y:922
;kaerb:032
256: {
261:
266:
esac:072
.stelleP.draob_:172 GeneratePellets
274:
;kaerb:772
282:
GameBoard.cs
22: public class GameBoard
54: public event PowerModeEventHandler
62: public GameBoard(int Width, int Height,
System.Windows.Forms.PictureBox PictureGameBoard)
wen=+netaEtellePnO.stellep_:66
Pellets.onPowerPelletEatenEventHandler(PelletEaten);
877:
//:388
889: _powerMode
(fi:098
(this, new EventArgs());
891:
892:
1
2
GameBoard.cs
22: public class GameBoard
54: public event PowerModeEventHandler
62: public GameBoard(int Width, int Height,
System.Windows.Forms.PictureBox PictureGameBoard)
wen=+netaEtellePnO.stellep_:66
Pellets.onPowerPelletEatenEventHandler(PelletEaten);
877:
//:388
889: _powerMode
(fi:098
(this, new EventArgs());
891:
892:
OTHER EXAMPLES
• Handing off a task to another
developer.
• Navigation support.
See paper!.
IMPLEMENTATION
From vision to platform.
Lessons learned.
Activity
App
Code Pad
Events
IDE
Notification
Service
Code Pad
Actions
IDE
Command
Service
IDE
Code Pad
Services
(Gestures, History)
Code Pad
View Manager
PLATFORM DESIGN
TOUCH
Manipulation
TouchDown
TouchMove
TouchUp
id 1
id 2
Touch Actions
Chomp
Pacman.cs
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace Chomp
{
public class PacmanCharacter : GameCharacter
{
Bitmap _bmpCharClosed;
Bitmap _bmpCharOpenMidLeft;
Bitmap _bmpCharOpenMidRight;
Bitmap _bmpCharOpenMidUp;
Bitmap _bmpCharOpenMidDown;
Bitmap _bmpCharOpenAllLeft;
Bitmap _bmpCharOpenAllRight;
Bitmap _bmpCharOpenAllUp;
Bitmap _bmpCharOpenAllDown;
public enum CharacterPosition
{
Closed = 0,
OpenMidLow = 1,
OpenMidHigh = 3,
OpenAll = 4,
}
private CharacterPosition
_currentCharacterPosition;
public PacmanCharacter(GameBoard Board, Point
CurrentLocation, int Width, int Height): base (Board,
CurrentLocation, Width, Height)
{
_currentCharacterPosition =
CharacterPosition.Closed;
}
public CharacterPosition Position
{
get {return _currentCharacterPosition;}
set {_currentCharacterPosition = value;}
}
public override sealed void Initialize()
{
GenerateCharacters();
}
public void AnimateDeath()
{
}
public override sealed void Move()
{
base.Move();
if (_currentCharacterState ==
CharacterState.Moving) _currentCharacterPosition =
GetNextCharacterPosition();
}
Raw input Resample Templates
GESTURES (SHAPED)
Match?
.59
.30
.90
OTHER FORM FACTORS…
TOMORROW'S INTERACTIONS
Code Canvas, DeLine, ICSE 2010
Code Bubbles, Bragdon ICSE/CHI 2010
CONCLUSION
QUESTIONS?
Task vs. ActivityOther Devices
Missing
Affordances
Multiple Pads Divided Attention
Platform Design

Weitere ähnliche Inhalte

Was ist angesagt?

HoloLens Programming Tutorial: AirTap & Spatial Mapping
HoloLens Programming Tutorial: AirTap & Spatial MappingHoloLens Programming Tutorial: AirTap & Spatial Mapping
HoloLens Programming Tutorial: AirTap & Spatial MappingTakashi Yoshinaga
 
Data structures lab
Data structures labData structures lab
Data structures labRagu Ram
 
libGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame AnimationlibGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame AnimationJussi Pohjolainen
 
Stop Guessing and Start Measuring - Benchmarking Practice (Poly Version)
 Stop Guessing and Start Measuring - Benchmarking Practice (Poly Version) Stop Guessing and Start Measuring - Benchmarking Practice (Poly Version)
Stop Guessing and Start Measuring - Benchmarking Practice (Poly Version)Tobias Pfeiffer
 
Super heroes training_simulator
Super heroes training_simulatorSuper heroes training_simulator
Super heroes training_simulatorjoustin12
 
How I hacked the Google Daydream controller
How I hacked the Google Daydream controllerHow I hacked the Google Daydream controller
How I hacked the Google Daydream controllerMatteo Pisani
 
How fast is it really? Benchmarking in Practice (Ruby Version)
How fast is it really? Benchmarking in Practice (Ruby Version)How fast is it really? Benchmarking in Practice (Ruby Version)
How fast is it really? Benchmarking in Practice (Ruby Version)Tobias Pfeiffer
 
Código fuente del software educativo
Código fuente del software educativoCódigo fuente del software educativo
Código fuente del software educativoLeo Chavez Martinez
 
An introduction to Deep Learning with Apache MXNet (November 2017)
An introduction to Deep Learning with Apache MXNet (November 2017)An introduction to Deep Learning with Apache MXNet (November 2017)
An introduction to Deep Learning with Apache MXNet (November 2017)Julien SIMON
 
Código fuente del software educativo
Código fuente del software educativoCódigo fuente del software educativo
Código fuente del software educativoLeo Chavez Martinez
 
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 AutumnGoptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 AutumnMasashi Shibata
 

Was ist angesagt? (16)

HoloLens Programming Tutorial: AirTap & Spatial Mapping
HoloLens Programming Tutorial: AirTap & Spatial MappingHoloLens Programming Tutorial: AirTap & Spatial Mapping
HoloLens Programming Tutorial: AirTap & Spatial Mapping
 
Box2D and libGDX
Box2D and libGDXBox2D and libGDX
Box2D and libGDX
 
J2 me 07_5
J2 me 07_5J2 me 07_5
J2 me 07_5
 
libGDX: User Input
libGDX: User InputlibGDX: User Input
libGDX: User Input
 
Data structures lab
Data structures labData structures lab
Data structures lab
 
libGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame AnimationlibGDX: User Input and Frame by Frame Animation
libGDX: User Input and Frame by Frame Animation
 
Stop Guessing and Start Measuring - Benchmarking Practice (Poly Version)
 Stop Guessing and Start Measuring - Benchmarking Practice (Poly Version) Stop Guessing and Start Measuring - Benchmarking Practice (Poly Version)
Stop Guessing and Start Measuring - Benchmarking Practice (Poly Version)
 
Super heroes training_simulator
Super heroes training_simulatorSuper heroes training_simulator
Super heroes training_simulator
 
How I hacked the Google Daydream controller
How I hacked the Google Daydream controllerHow I hacked the Google Daydream controller
How I hacked the Google Daydream controller
 
libGDX: Tiled Maps
libGDX: Tiled MapslibGDX: Tiled Maps
libGDX: Tiled Maps
 
Graphical User Components Part 2
Graphical User Components Part 2Graphical User Components Part 2
Graphical User Components Part 2
 
How fast is it really? Benchmarking in Practice (Ruby Version)
How fast is it really? Benchmarking in Practice (Ruby Version)How fast is it really? Benchmarking in Practice (Ruby Version)
How fast is it really? Benchmarking in Practice (Ruby Version)
 
Código fuente del software educativo
Código fuente del software educativoCódigo fuente del software educativo
Código fuente del software educativo
 
An introduction to Deep Learning with Apache MXNet (November 2017)
An introduction to Deep Learning with Apache MXNet (November 2017)An introduction to Deep Learning with Apache MXNet (November 2017)
An introduction to Deep Learning with Apache MXNet (November 2017)
 
Código fuente del software educativo
Código fuente del software educativoCódigo fuente del software educativo
Código fuente del software educativo
 
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 AutumnGoptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
 

Andere mochten auch

Coleccionable 1. la procuraduría y la participación ciudadana (mayo de 2015)
Coleccionable 1. la procuraduría y la participación ciudadana (mayo de 2015)Coleccionable 1. la procuraduría y la participación ciudadana (mayo de 2015)
Coleccionable 1. la procuraduría y la participación ciudadana (mayo de 2015)j g
 
Magazine Inspiration PPT
Magazine Inspiration PPTMagazine Inspiration PPT
Magazine Inspiration PPTJohn Prescott
 
Virtual Worlds: Social Networking, Social Learning and Pedagogy
Virtual Worlds: Social Networking, Social Learning and PedagogyVirtual Worlds: Social Networking, Social Learning and Pedagogy
Virtual Worlds: Social Networking, Social Learning and PedagogyRamesh C. Sharma
 
Francisco escobar redes sociales
Francisco escobar redes socialesFrancisco escobar redes sociales
Francisco escobar redes socialesFranko Escobar
 
ReviewAnalyst presentation
ReviewAnalyst presentationReviewAnalyst presentation
ReviewAnalyst presentationDean Schmit
 
Niche Presentation
Niche PresentationNiche Presentation
Niche PresentationIrinaRybak
 
Referencias cuarto semestre mas derecho
Referencias cuarto semestre mas derechoReferencias cuarto semestre mas derecho
Referencias cuarto semestre mas derechoFacultad Derecho Unam
 
PDF de la Enciclopedia de la Discriminación
PDF de la Enciclopedia de la DiscriminaciónPDF de la Enciclopedia de la Discriminación
PDF de la Enciclopedia de la DiscriminaciónGenera Acciones
 
SANTO CRISTO DE URDA (TOLEDO) SPAIN
SANTO CRISTO DE URDA (TOLEDO)  SPAINSANTO CRISTO DE URDA (TOLEDO)  SPAIN
SANTO CRISTO DE URDA (TOLEDO) SPAINCARLOS UBEDA
 
Google Maps API - DevFest Karlsruhe
Google Maps API - DevFest Karlsruhe Google Maps API - DevFest Karlsruhe
Google Maps API - DevFest Karlsruhe Martin Kleppe
 
Musée volkswagen
Musée volkswagen Musée volkswagen
Musée volkswagen meg
 
Hadoop Summit Europe 2014: Apache Storm Architecture
Hadoop Summit Europe 2014: Apache Storm ArchitectureHadoop Summit Europe 2014: Apache Storm Architecture
Hadoop Summit Europe 2014: Apache Storm ArchitectureP. Taylor Goetz
 

Andere mochten auch (14)

Coleccionable 1. la procuraduría y la participación ciudadana (mayo de 2015)
Coleccionable 1. la procuraduría y la participación ciudadana (mayo de 2015)Coleccionable 1. la procuraduría y la participación ciudadana (mayo de 2015)
Coleccionable 1. la procuraduría y la participación ciudadana (mayo de 2015)
 
Magazine Inspiration PPT
Magazine Inspiration PPTMagazine Inspiration PPT
Magazine Inspiration PPT
 
Virtual Worlds: Social Networking, Social Learning and Pedagogy
Virtual Worlds: Social Networking, Social Learning and PedagogyVirtual Worlds: Social Networking, Social Learning and Pedagogy
Virtual Worlds: Social Networking, Social Learning and Pedagogy
 
Francisco escobar redes sociales
Francisco escobar redes socialesFrancisco escobar redes sociales
Francisco escobar redes sociales
 
ReviewAnalyst presentation
ReviewAnalyst presentationReviewAnalyst presentation
ReviewAnalyst presentation
 
Niche Presentation
Niche PresentationNiche Presentation
Niche Presentation
 
Referencias cuarto semestre mas derecho
Referencias cuarto semestre mas derechoReferencias cuarto semestre mas derecho
Referencias cuarto semestre mas derecho
 
PDF de la Enciclopedia de la Discriminación
PDF de la Enciclopedia de la DiscriminaciónPDF de la Enciclopedia de la Discriminación
PDF de la Enciclopedia de la Discriminación
 
SANTO CRISTO DE URDA (TOLEDO) SPAIN
SANTO CRISTO DE URDA (TOLEDO)  SPAINSANTO CRISTO DE URDA (TOLEDO)  SPAIN
SANTO CRISTO DE URDA (TOLEDO) SPAIN
 
La casa vanna
La casa vannaLa casa vanna
La casa vanna
 
Google Maps API - DevFest Karlsruhe
Google Maps API - DevFest Karlsruhe Google Maps API - DevFest Karlsruhe
Google Maps API - DevFest Karlsruhe
 
Musée volkswagen
Musée volkswagen Musée volkswagen
Musée volkswagen
 
Hadoop Summit Europe 2014: Apache Storm Architecture
Hadoop Summit Europe 2014: Apache Storm ArchitectureHadoop Summit Europe 2014: Apache Storm Architecture
Hadoop Summit Europe 2014: Apache Storm Architecture
 
PES
PESPES
PES
 

Ähnlich wie Code Pad

Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...DroidConTLV
 
Infinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be Lazy
Infinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be LazyInfinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be Lazy
Infinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be LazyInfinum
 
clWrap: Nonsense free control of your GPU
clWrap: Nonsense free control of your GPUclWrap: Nonsense free control of your GPU
clWrap: Nonsense free control of your GPUJohn Colvin
 
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguajeKotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguajeVíctor Leonel Orozco López
 
Lies Told By The Kotlin Compiler
Lies Told By The Kotlin CompilerLies Told By The Kotlin Compiler
Lies Told By The Kotlin CompilerGarth Gilmour
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconftutorialsruby
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconftutorialsruby
 
Lies Told By The Kotlin Compiler
Lies Told By The Kotlin CompilerLies Told By The Kotlin Compiler
Lies Told By The Kotlin CompilerGarth Gilmour
 
Java Programpublic class Fraction {   instance variablesin.pdf
Java Programpublic class Fraction {   instance variablesin.pdfJava Programpublic class Fraction {   instance variablesin.pdf
Java Programpublic class Fraction {   instance variablesin.pdfaroramobiles1
 
How to Program SmartThings
How to Program SmartThingsHow to Program SmartThings
How to Program SmartThingsJanet Huang
 
Facebook Glow Compiler のソースコードをグダグダ語る会
Facebook Glow Compiler のソースコードをグダグダ語る会Facebook Glow Compiler のソースコードをグダグダ語る会
Facebook Glow Compiler のソースコードをグダグダ語る会Mr. Vengineer
 
What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?Christophe Porteneuve
 
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)PROIDEA
 
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...David Walker
 
Java programming lab manual
Java programming lab manualJava programming lab manual
Java programming lab manualsameer farooq
 

Ähnlich wie Code Pad (20)

Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...
 
Modern c++
Modern c++Modern c++
Modern c++
 
Infinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be Lazy
Infinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be LazyInfinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be Lazy
Infinum Android Talks #15 - Garfield Android Studio Plugin - Be Smart, Be Lazy
 
clWrap: Nonsense free control of your GPU
clWrap: Nonsense free control of your GPUclWrap: Nonsense free control of your GPU
clWrap: Nonsense free control of your GPU
 
SDAccel Design Contest: Xilinx SDAccel
SDAccel Design Contest: Xilinx SDAccel SDAccel Design Contest: Xilinx SDAccel
SDAccel Design Contest: Xilinx SDAccel
 
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguajeKotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
Kotlin+MicroProfile: Enseñando trucos de 20 años a un nuevo lenguaje
 
Lies Told By The Kotlin Compiler
Lies Told By The Kotlin CompilerLies Told By The Kotlin Compiler
Lies Told By The Kotlin Compiler
 
Process management
Process managementProcess management
Process management
 
Slide tesi
Slide tesiSlide tesi
Slide tesi
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconf
 
building_games_with_ruby_rubyconf
building_games_with_ruby_rubyconfbuilding_games_with_ruby_rubyconf
building_games_with_ruby_rubyconf
 
Lies Told By The Kotlin Compiler
Lies Told By The Kotlin CompilerLies Told By The Kotlin Compiler
Lies Told By The Kotlin Compiler
 
Java Programpublic class Fraction {   instance variablesin.pdf
Java Programpublic class Fraction {   instance variablesin.pdfJava Programpublic class Fraction {   instance variablesin.pdf
Java Programpublic class Fraction {   instance variablesin.pdf
 
How to Program SmartThings
How to Program SmartThingsHow to Program SmartThings
How to Program SmartThings
 
Facebook Glow Compiler のソースコードをグダグダ語る会
Facebook Glow Compiler のソースコードをグダグダ語る会Facebook Glow Compiler のソースコードをグダグダ語る会
Facebook Glow Compiler のソースコードをグダグダ語る会
 
What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?
 
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
 
L04 Software Design 2
L04 Software Design 2L04 Software Design 2
L04 Software Design 2
 
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
 
Java programming lab manual
Java programming lab manualJava programming lab manual
Java programming lab manual
 

Mehr von Chris Parnin

Crowd Documentation - How Programmer Social Communities are Flipping Software...
Crowd Documentation - How Programmer Social Communities are Flipping Software...Crowd Documentation - How Programmer Social Communities are Flipping Software...
Crowd Documentation - How Programmer Social Communities are Flipping Software...Chris Parnin
 
DESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESSDESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESSChris Parnin
 
Programmer Information Needs After Memory Failure
Programmer Information Needs After Memory FailureProgrammer Information Needs After Memory Failure
Programmer Information Needs After Memory FailureChris Parnin
 
Building usage contexts from interaction history
Building usage contexts from interaction historyBuilding usage contexts from interaction history
Building usage contexts from interaction historyChris Parnin
 
A Catalogue of Code Smell Visualizations
A Catalogue of Code Smell VisualizationsA Catalogue of Code Smell Visualizations
A Catalogue of Code Smell VisualizationsChris Parnin
 
Resumption strategies
Resumption strategiesResumption strategies
Resumption strategiesChris Parnin
 
Are Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping ProgrammersAre Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping ProgrammersChris Parnin
 
Subvocalization -- Towards Hearing the Inner Thoughts of Developers
Subvocalization -- Towards Hearing the Inner Thoughts of DevelopersSubvocalization -- Towards Hearing the Inner Thoughts of Developers
Subvocalization -- Towards Hearing the Inner Thoughts of DevelopersChris Parnin
 
Java Generics Adoption: How New Features are Introduced Championed or Ignored
Java Generics Adoption: How New Features are Introduced Championed or IgnoredJava Generics Adoption: How New Features are Introduced Championed or Ignored
Java Generics Adoption: How New Features are Introduced Championed or IgnoredChris Parnin
 
Evaluating Cues for Resuming Interrupted Programming TAsks
Evaluating Cues for Resuming Interrupted Programming TAsksEvaluating Cues for Resuming Interrupted Programming TAsks
Evaluating Cues for Resuming Interrupted Programming TAsksChris Parnin
 
Cognitive Neuroscience of Memory for Software Engineers
Cognitive Neuroscience of Memory for Software EngineersCognitive Neuroscience of Memory for Software Engineers
Cognitive Neuroscience of Memory for Software EngineersChris Parnin
 

Mehr von Chris Parnin (11)

Crowd Documentation - How Programmer Social Communities are Flipping Software...
Crowd Documentation - How Programmer Social Communities are Flipping Software...Crowd Documentation - How Programmer Social Communities are Flipping Software...
Crowd Documentation - How Programmer Social Communities are Flipping Software...
 
DESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESSDESIGNING FOR INTERRUPTION AND LIVENESS
DESIGNING FOR INTERRUPTION AND LIVENESS
 
Programmer Information Needs After Memory Failure
Programmer Information Needs After Memory FailureProgrammer Information Needs After Memory Failure
Programmer Information Needs After Memory Failure
 
Building usage contexts from interaction history
Building usage contexts from interaction historyBuilding usage contexts from interaction history
Building usage contexts from interaction history
 
A Catalogue of Code Smell Visualizations
A Catalogue of Code Smell VisualizationsA Catalogue of Code Smell Visualizations
A Catalogue of Code Smell Visualizations
 
Resumption strategies
Resumption strategiesResumption strategies
Resumption strategies
 
Are Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping ProgrammersAre Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping Programmers
 
Subvocalization -- Towards Hearing the Inner Thoughts of Developers
Subvocalization -- Towards Hearing the Inner Thoughts of DevelopersSubvocalization -- Towards Hearing the Inner Thoughts of Developers
Subvocalization -- Towards Hearing the Inner Thoughts of Developers
 
Java Generics Adoption: How New Features are Introduced Championed or Ignored
Java Generics Adoption: How New Features are Introduced Championed or IgnoredJava Generics Adoption: How New Features are Introduced Championed or Ignored
Java Generics Adoption: How New Features are Introduced Championed or Ignored
 
Evaluating Cues for Resuming Interrupted Programming TAsks
Evaluating Cues for Resuming Interrupted Programming TAsksEvaluating Cues for Resuming Interrupted Programming TAsks
Evaluating Cues for Resuming Interrupted Programming TAsks
 
Cognitive Neuroscience of Memory for Software Engineers
Cognitive Neuroscience of Memory for Software EngineersCognitive Neuroscience of Memory for Software Engineers
Cognitive Neuroscience of Memory for Software Engineers
 

Kürzlich hochgeladen

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Kürzlich hochgeladen (20)

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

Code Pad

  • 1. CODE PAD: INTERACTIVE SPACES FOR MAINTAINING CONCENTRATION IN PROGRAMMING ENVIRONMENTS Chris Parnin Georgia Institute of Technology Carsten Görg, UC Denver Spencer Rugaber, Georgia Institute of Technology
  • 2. Visualization: Introducing a new species into an environment. ECOSYSTEMS
  • 3. SUCCESSFUL INTRODUCTIONS… RICH INTERACTION IN ENVIRONMENT How do I survive in the wild?
  • 6. Scribble on code. Keep its items in a mental workspace. Share and interact with others. WHY CAN’T WE….
  • 7. INTRODUCING CODE PAD A platform first, a device second. Outline • Design • Examples • Implementation • Future
  • 9. WHY NOT ANOTHER DISPLAY? • Social Mobility and Sharing (collaboration, meetings, hand-off) • Alternate Modality (pen, multi-touch) • Spatial Affordances (push aside, stacking)
  • 10. TWO COMPETING DESIGNS Chomp Pellets.cs using System; using System.Collections; using System.Drawing; using System.Drawing.Drawing2D; namespace Chomp { public enum PelletType { RegularPellet = 0, PowerPellet = 1 } public class Pellets { private ArrayList _pellets; private ArrayList _powerPellets; private PelletType _pelletType; private SolidBrush _brushPowerPellet; public const int POWER_PELLET_POINTS = 50; public const int REGULAR_PELLET_POINTS = 10; public delegate void onPowerPelletEatenEventHandler (object Source, PelletEventArgs e); public event onPowerPelletEatenEventHandler OnPelletEaten; public Pellets() { _brushPowerPellet = new SolidBrush (Color.FromArgb(255,194,159)); } public int RegularPelletCount { get {return _pellets.Count;} } public int PowerPelletCount { get {return _powerPellets.Count;} } public void BlinkPowerPellet() { if (_brushPowerPellet.Color == Color.Black) { _brushPowerPellet.Color = Color.FromArgb (255,194,159); } else { _brushPowerPellet.Color = Color.Black; } } Chomp Pacman.cs using System; using System.Drawing; using System.Drawing.Drawing2D; namespace Chomp { public class PacmanCharacter : GameCharacter { Bitmap _bmpCharClosed; Bitmap _bmpCharOpenMidLeft; Bitmap _bmpCharOpenMidRight; Bitmap _bmpCharOpenMidUp; Bitmap _bmpCharOpenMidDown; Bitmap _bmpCharOpenAllLeft; Bitmap _bmpCharOpenAllRight; Bitmap _bmpCharOpenAllUp; Bitmap _bmpCharOpenAllDown; public enum CharacterPosition { Closed = 0, OpenMidLow = 1, OpenMidHigh = 3, OpenAll = 4, } private CharacterPosition _currentCharacterPosition; public PacmanCharacter(GameBoard Board, Point CurrentLocation, int Width, int Height): base (Board, CurrentLocation, Width, Height) { _currentCharacterPosition = CharacterPosition.Closed; } public CharacterPosition Position { get {return _currentCharacterPosition;} set {_currentCharacterPosition = value;} } public override sealed void Initialize() { GenerateCharacters(); } public void AnimateDeath() { } public override sealed void Move() { base.Move(); if (_currentCharacterState == CharacterState.Moving) _currentCharacterPosition = GetNextCharacterPosition(); } Organize content by task Organize content by activity
  • 11. CONTENT TYPE Chomp Pellets.cs using System; using System.Collections; using System.Drawing; using System.Drawing.Drawing2D; namespace Chomp { public enum PelletType { RegularPellet = 0, PowerPellet = 1 } public class Pellets { private ArrayList _pellets; private ArrayList _powerPellets; private PelletType _pelletType; private SolidBrush _brushPowerPellet; public const int POWER_PELLET_POINTS = 50; public const int REGULAR_PELLET_POINTS = 10; public delegate void onPowerPelletEatenEventHandler (object Source, PelletEventArgs e); public event onPowerPelletEatenEventHandler OnPelletEaten; public Pellets() { _brushPowerPellet = new SolidBrush (Color.FromArgb(255,194,159)); } public int RegularPelletCount { get {return _pellets.Count;} } public int PowerPelletCount { get {return _powerPellets.Count;} } public void BlinkPowerPellet() { if (_brushPowerPellet.Color == Color.Black) { _brushPowerPellet.Color = Color.FromArgb (255,194,159); } else { _brushPowerPellet.Color = Color.Black; } } File Overview 2 Name Value address City State Postcode 30332 null {Name=”Atlanta”} IDE WireframesSnippets
  • 12. EXAMPLE: REFACTORING Scenario: Developer wants to extract a set of methods scattered throughout code to form new classes…
  • 14. Main development task… Now, enough snippets to get started!
  • 15. REFACTORING WORKBENCH Create new class! public Point CenterPoint(Polyline line) { var first = line.Points.First(); var last = line.Points.Last(); return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); } public Point CenterPoint(Polyline line) { var first = line.Points.First(); var last = line.Points.Last(); return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); } public Point CenterPoint(Polyline line) { var first = line.Points.First(); var last = line.Points.Last(); return new Point((first.X + last.X) / 2, (first.Y + last.Y) / 2); } Organize Generate!
  • 16. Pellets.cs 13: public class Pellets 42: public void BlinkPowerPellet() 54: public void RemovePellet(Point Location) 108: _powerPellets 114: public void GeneratePellets() GameBoard.cs 22: public class GameBoard 54: public event PowerModeEventHandler 62: public GameBoard(int Width, int Height, System.Windows.Forms.PictureBox PictureGameBoard) wen=+netaEtellePnO.stellep_:66 Pellets.onPowerPelletEatenEventHandler(PelletEaten); 877: //:388 889: _powerMode (fi:098 (this, new EventArgs()); 891: 892: GameCharacter.cs 5:namespace Chomp 13: public class Pellets 19: _soundDevice = new Device(); 27: public abstract class GameCharacter 35: protected int _moveInterval; 215: CurrentCoordinate) ;++y:922 ;kaerb:032 256: { 261: 266: esac:072 .stelleP.draob_:172 GeneratePellets 274: ;kaerb:772 282: Pellets.cs 13: public class Pellets 42: public void BlinkPowerPellet() 54: public void RemovePellet(Point Location) 108: _powerPellets 114: public void GeneratePellets() GameBoard.cs 22: public class GameBoard 54: public event PowerModeEventHandler 62: public GameBoard(int Width, int Height, System.Windows.Forms.PictureBox PictureGameBoard) wen=+netaEtellePnO.stellep_:66 Pellets.onPowerPelletEatenEventHandler(PelletEaten); 877: //:388 889: _powerMode (fi:098 (this, new EventArgs()); 891: 892: GameCharacter.cs 5:namespace Chomp 13: public class Pellets 19: _soundDevice = new Device(); 27: public abstract class GameCharacter 35: protected int _moveInterval; 215: CurrentCoordinate) ;++y:922 ;kaerb:032 256: { 261: 266: esac:072 .stelleP.draob_:172 GeneratePellets 274: ;kaerb:772 282: Pellets.cs 13: public class Pellets 42: public void BlinkPowerPellet() 54: public void RemovePellet(Point Location) 108: _powerPellets 114: public void GeneratePellets() GameBoard.cs 22: public class GameBoard 54: public event PowerModeEventHandler 62: public GameBoard(int Width, int Height, System.Windows.Forms.PictureBox PictureGameBoard) wen=+netaEtellePnO.stellep_:66 Pellets.onPowerPelletEatenEventHandler(PelletEaten); 877: //:388 889: _powerMode (fi:098 (this, new EventArgs()); 891: 892: GameCharacter.cs 5:namespace Chomp 13: public class Pellets 19: _soundDevice = new Device(); 27: public abstract class GameCharacter 35: protected int _moveInterval; 215: CurrentCoordinate) ;++y:922 ;kaerb:032 256: { 261: 266: esac:072 .stelleP.draob_:172 GeneratePellets 274: ;kaerb:772 282: GameBoard.cs 22: public class GameBoard 54: public event PowerModeEventHandler 62: public GameBoard(int Width, int Height, System.Windows.Forms.PictureBox PictureGameBoard) wen=+netaEtellePnO.stellep_:66 Pellets.onPowerPelletEatenEventHandler(PelletEaten); 877: //:388 889: _powerMode (fi:098 (this, new EventArgs()); 891: 892: 1 2 GameBoard.cs 22: public class GameBoard 54: public event PowerModeEventHandler 62: public GameBoard(int Width, int Height, System.Windows.Forms.PictureBox PictureGameBoard) wen=+netaEtellePnO.stellep_:66 Pellets.onPowerPelletEatenEventHandler(PelletEaten); 877: //:388 889: _powerMode (fi:098 (this, new EventArgs()); 891: 892: OTHER EXAMPLES • Handing off a task to another developer. • Navigation support. See paper!.
  • 17. IMPLEMENTATION From vision to platform. Lessons learned.
  • 18. Activity App Code Pad Events IDE Notification Service Code Pad Actions IDE Command Service IDE Code Pad Services (Gestures, History) Code Pad View Manager PLATFORM DESIGN
  • 19. TOUCH Manipulation TouchDown TouchMove TouchUp id 1 id 2 Touch Actions Chomp Pacman.cs using System; using System.Drawing; using System.Drawing.Drawing2D; namespace Chomp { public class PacmanCharacter : GameCharacter { Bitmap _bmpCharClosed; Bitmap _bmpCharOpenMidLeft; Bitmap _bmpCharOpenMidRight; Bitmap _bmpCharOpenMidUp; Bitmap _bmpCharOpenMidDown; Bitmap _bmpCharOpenAllLeft; Bitmap _bmpCharOpenAllRight; Bitmap _bmpCharOpenAllUp; Bitmap _bmpCharOpenAllDown; public enum CharacterPosition { Closed = 0, OpenMidLow = 1, OpenMidHigh = 3, OpenAll = 4, } private CharacterPosition _currentCharacterPosition; public PacmanCharacter(GameBoard Board, Point CurrentLocation, int Width, int Height): base (Board, CurrentLocation, Width, Height) { _currentCharacterPosition = CharacterPosition.Closed; } public CharacterPosition Position { get {return _currentCharacterPosition;} set {_currentCharacterPosition = value;} } public override sealed void Initialize() { GenerateCharacters(); } public void AnimateDeath() { } public override sealed void Move() { base.Move(); if (_currentCharacterState == CharacterState.Moving) _currentCharacterPosition = GetNextCharacterPosition(); }
  • 20. Raw input Resample Templates GESTURES (SHAPED) Match? .59 .30 .90
  • 23. Code Canvas, DeLine, ICSE 2010 Code Bubbles, Bragdon ICSE/CHI 2010
  • 25. QUESTIONS? Task vs. ActivityOther Devices Missing Affordances Multiple Pads Divided Attention Platform Design

Hinweis der Redaktion

  1. The power of visualization is that data can speak to us. But when do we need this data? What can it support?
  2. In other words, what is soft devs ecosystem. How does soft vis fit in with software development?
  3. Started paper, with a vision. Now have a platform, with some first applications emerging.