--- layout: post esbma_id: 1204 title: Law #22: The Law of Resources date: 2004-06-30 14:53:19 keywords: law ---
(This entry is part of a series I am writing on The 22 Immutable Laws of Marketing.)
The Law of Resources says that "without adequate funding, an idea won't get off the ground". The gist of the chapter is that marketing is very expensive and you have to be prepared to spend big bucks on advertising if you want to be successful, so you're going to need a lot of funding from your VC.
Preaching these ideas to small ISVs is like showing up at your local Alcoholics Anonymous meeting and telling everyone that a little red wine every day helps the heart.
Like most of my marketing articles, this series has been about taking the best stuff from the world of marketing and applying it in a small ISV. Some stuff works well in our context, and some stuff does not. My goal is to help make a clearer distinction between these two categories. Sometimes I shine a bright light on something which simply isn't going to be a good fit for most small ISVs.
Chapter 22 is one such example. Strictly speaking, the advice in this chapter is all true. Marcomm is expensive. Grabbing mindshare costs a heckuva lot of money.
But that that doesn't mean everybody should go get funding and start running ads.  I met Greg Reinacker a couple of trade shows ago. He seems like a good guy. I use his product every day. I admire what he has accomplished with NewsGator.
On the one hand, I am excited for Greg and the opportunities he can now explore with deeper pockets. I also see this funding announcement as a very nice sign of momentum for blogging and RSS.
However, I am concerned. I worry that Greg has taken the first step of converting his excellent small company into a lousy big one. I'm not saying that VC money is always a bad decision. But just because a company is a wonderful success at one level does not mean it can be a success at a larger scale. Once you take the VC money, you can never go back. Some companies lose their stride as they try to force themselves through the transition from small to big.
If this happens, I'll be okay, since I can easily find another RSS reader. But Greg will have lost something precious.
#endif
Even in companies with huge resources, chapter 22 is likely to serve as ammunition for the marcomm guy who is always trying to convince you to spend more money. He will quote chapter 22 as if it were scripture, trying to make you feel guilty for underfunding your marcomm efforts.
But the real problem is in taking chapter 22 out of the context of the rest of the book. This chapter is the last one in the book, and for a good reason -- it depends on the other 21. Marketing has two phases, strategy and communications. No matter how much money you have, don't spend money in the communications phase until your strategy stuff is done and solid.


(Defined in: jpgraph.php : 491)
Class usage and Overview
The Graph class is the main container class for all x,y-axis based plots which controls the creation of the entire graph. You must always instantiate one instance to create a graph. Through this class one controls many overall settings of the image displayed.
Please note that to create Pie, Gantt, Canvas and Spider charts you have to use their respective creation classes.
Public properties:
| Name | Type | Description |
| xaxis |
Axis |
X-axis |
| yaxis |
Axis |
Y-axis |
| xgrid |
Grid |
Grid lines for X-axis |
| ygrid |
Grid |
Grid lines for Y-axis |
| legend |
Legend |
Properties for legend box |
| title |
Text |
Graph main title |
| subtitle |
Text |
Sub title |
| subsubtitle |
Text |
Sub title |
| tabtitle |
GraphTabTitle |
Option Tab title for graph |
| img |
RotImage |
The image canvas |
See also related classes:
Axis, Grid, Text and Image
Class Methods
Add any plot object to the graph
| Argument | Default | Description |
|
$aPlot
| | No description available |
Description:
Each plot that should be displayed within the graph has to be added to the graph. This is the main method to add object. You can use this method to add
- Plots
- Texts
- Plot lines
- Plot bands
This method will add a plopt for use with the ?Left? Y-scale, (the normal Y scale). To add a plot to the second Y scale you should use AddY2().
Note that since the plot is added as a reference any changes you make to the original plot will also happen to the plot you have added to the graph.
Add() will always add plots to the first Y-scale. If you are using two Y-axis then you must use AddY2() to add plots to the second Y-scale.
See also:
$graph = new Graph(300,200,"auto");
$graph->img->SetMargin(40,30,20,40);
$graph->SetScale("textlin");
$graph->SetShadow();
// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("orange");
$graph->Add($bplot);
// Display the graph
$graph->Stroke();
Add vertical or horizontal band
| Argument | Default | Description |
|
$aBand
| | No description available |
|
$aToY2
|
false
| Add object to Y2 axis |
Description:
A plot may have one or several filled horizontal or vertical "bands" to emphasise certain scale areas.
Each band is an instance of the PlotBand class. For types of plot band see the documentation of class PlotBand
Note: You can alos use the standard method Add() to add bands.
See also:
$graph->AddBand(new PlotBand(HORIZONTAL,BAND_RDIAG,0, "max", "red", 2));
Add a line object (class PlotLine) to the graph
| Argument | Default | Description |
|
$aLine
| | No description available |
|
$aToY2
|
false
| Add line to Y2 axis |
Description:
Add a vertical or horizontal line to the graph. The line will extend over the entire length of the plot. The plot object is an instance of the PlotLine class
Note: You can alos use the standard method Add() to add lines.
See also:
// Add mark graph with static lines
$graph->AddLine(new PlotLine(HORIZONTAL,0,"black",2));
$graph->AddLine(new PlotLine(VERTICAL,3,"black",2));
Add text object to the graph
| Argument | Default | Description |
|
$aTxt
| | No description available |
|
$aToY2
|
false
| Add text to Y2 axis |
Description:
Adds an instance of the Text class to the graph, allowing arbitrary text to be placed anywhere in the graph.
Note: You can alos use the standard method Add() to add bands.
See also:
// You can specify the position as fraction of the
// image width and height
$caption=new Text(?Figure 1. Temperature over time?,0.1,0.8);
$caption->SetFont(FONT1_BOLD);
$graph->AddText($caption);
Add plot to second Y-axis n
| Argument | Default | Description |
|
$aN
| | Number of axis to add data to |
|
$aPlot
| | No description available |
Description:
This method is used to add a plot in the case the graph has multiple Y-axis. The first argument should be the index of the Y-axis.
<?php
include ("../jpgraph.php");
include ("../jpgraph_line.php");
$datay = array(5,3,7,2);
$datay2 = array(88,10,55,42);
$datay3 = array(255,35,745,244);
$datay4 = array(130,97,68,119);
// Setup the graph
$graph = new Graph(600,250);
$graph->SetMargin(30,200,20,20);
$graph->SetMarginColor('white');
$graph->SetColor('lightgray');
$graph->SetScale("intlin");
$graph->SetYScale(0,"lin");
$graph->SetYScale(1,"lin");
$graph->SetYScale(2,"lin");
$p1 = new LinePlot($datay);
$p1->SetColor('blue');
$graph->Add($p1);
$p2 = new LinePlot($datay2);
$p2->SetColor('darkred');
$graph->AddY(0,$p2);
$graph->ynaxis[0]->SetColor('darkred');
$p3 = new LinePlot($datay3);
$p3->SetColor('red');
$graph->AddY(1,$p3);
$graph->ynaxis[1]->SetColor('red');
$p4 = new LinePlot($datay4);
$p4->SetColor('blue');
$graph->AddY(2,$p4);
$graph->ynaxis[2]->SetColor('blue');
// Output line
$graph->Stroke();
Add plot to second Y-axis
| Argument | Default | Description |
|
$aPlot
| | No description available |
Description:
Works the same way as Add() but the plot is added for use with the Y2 scale (the right Y scale) instead.
See also:
$graph = new Graph(300,200);
$graph->SetScale('linlin');
$graph->SetY2Scale('linlog');
$lineplot = new LinePlot($datay);
$graph->AddY2($lineplot);
Check if cached CSIM graph exists
| Argument | Default | Description |
|
$aCacheName
| | Cache file name |
|
$aTimeOut
|
60
| Timeout (in minutes) |
Description:
This method is used to enable caching for graphs that use image maps (CSIM). It should be called as the first method after the creation of the Graph(). If the cached image and image map exists this will be directly sent back to the browser and script execution will stop.
This specifically means that no lines of code after this method will be executed in case the image/map is found in the cache.
See also:
$graph = Graph(300,200);
$graph->CheckCSIMCache('myimage01',10);
// .. Lopt of code to create the image
$graph->StrokeCSIM();
| Argument | Default | Description |
|
$aCSIMName
| | No description available |
|
$aScriptName
|
'auto'
| No description available |
|
$aBorder
|
0
| No description available |
Description:
No description available.
Get a complete tag for the final image map
| Argument | Default | Description |
|
$aMapName
| | Image map name |
Description:
When you are using image maps for a plot then this routine is called in your script to get the resulting image map as a string for the graph. The image map is given the name specified as the first argument to the method.
Please note that due to the way client side image maps work you need to have both the image map and the image available in the script that is sent back to the browser. Since you can't do this at the same time you will have to create an image to disk and read the image map. The you have to stream the HTML page with an tag to load the previously generated image as well as the image map.
// The image must be stroked to find out the image maps
$graph->Stroke($myfile);
// Then read the image map
$imagemap = $graph->GetHTMLImageMap('MainMap');
echo $imagemap;
echo "<img src=$myfile>";
Enable image perspective transformation
| Argument | Default | Description |
|
$aDir
|
1
| Direction for 3D perspective |
|
$aHorizon
|
100
| Distance (in pixels) from the bottom of the image to the horizon |
|
$aSkewDist
|
120
| Skew distance (in pixels) on the horizon |
|
$aQuality
|
false
| Boolean. High quality = |
|
$aFillColor
|
'#FFFFFF'
| What fill color to use |
|
$aBorder
|
false
| Boolean. Border around? |
|
$aMinSize
|
true
| Boolean. Make the transformed image canvas as small as possible |
|
$aHorizonPos
|
0.5
| Distance from left on the horizon for the point of focus |
Description:
Enable final image perspective transformation before sending the image back to the browser. This makes a "skewing" tansformation of the image to emulate a 3D depth.
Allowed argument for $aDir are
- 'SKEW3D_UP'
- 'SKEW3D_DOWN'
- 'SKEW3D_LEFT'
- 'SKEW3D_RIGHT'
$aHorizon Determines how far away the horizon are from the bottom of the picture (in pixels)
aSkewDist How far to the right on the horizon is the
"skewing point", a large value gives a very strong for-shortening.
aQuality Use high quality (takes longer time) TRUE or FALSE
aFIllColor Fill background color in the image on places where the original image no longer cover the entire canvas.
aBorder Border around or not
aMinSize Just make the image as large as it has to be. TRUE or FALSE. If this argument is set to false then the original image size will be preserved.
aHorizonPosHow far, in fraction, should the point of focus be from the left edge of the image.
$graph->Set3DPerspective(SKEW3D_UP,100,120,true);
Rotate the graph 90 degrees and set the margins
| Argument | Default | Description |
|
$lm
|
0
| Left margin |
|
$rm
|
0
| Right Margin |
|
$tm
|
0
| Top margin |
|
$bm
|
0
| Bottom margin |
Description:
Rotates the graph 90 degrees and sets the margin as specified.
Remember that when rotating the graph it might be a good idea to adjust the axis so that the alignment of the labels for x and Y axis. For example by setting them as:
$graph->xaxis->SetLabelAlign('right','center','right');
$graph->yaxis->SetLabelAlign('center','bottom');
Note: This is slightly different from using SetAngle() and SetMargin() in that this method automatically adjusts the margin so that width becomes height and vice versa due to the rotation.
See also:
$graph = new Graph(300,200,"auto");
$graph->SetScale('linlin');
$graph->Set90AndMargin(40,40,40,40);
$graph->SetShadow();
$graph->title->Set("A 90 degrees rotated scatter plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
// Adjust the label align for X-axis so they look good rotated
$graph->xaxis->SetLabelAlign('right','center','right');
// Adjust the label align for Y-axis so they look good rotated
$graph->yaxis->SetLabelAlign('center','bottom');
$sp1 = new ScatterPlot($datay,$datax);
$sp1->mark->SetType(MARK_FILLEDCIRCLE);
$sp1->mark->SetFillColor("red");
$sp1->mark->SetWidth(5);
$graph->Add($sp1);
$graph->Stroke();
Eanble/disable alpha blending
| Argument | Default | Description |
|
$aFlg
|
true
| TRUE=Enable alpha blending |
Description:
Enable disable alpha blending. The transparency factor is specified in the color as transparency fraction. For example, to specify a red color which is 50% transparent you specify this as:
<EMAIL_ADDRESS>(or<EMAIL_ADDRESS>can then use this color specification in all places where the color may be specified. If the alpha blending is not active then the alpha parameter will have no effect.
Note that the use of alpha blending requires GD 2.01 or higher. By default alpha blending is enabled.
$graph->SetAlphaBlending();
Specify graph angle 0-360 degrees.
| Argument | Default | Description |
|
$aAngle
| | Rotation angle for graph |
Description:
The graph can be rotated an arbitrary number of degrees. This will allow you to easily create, for example, horizontal bar graphs by rotating a normal bar graph 90 degrees.
See horizbarex1.php for a real life example.
Note: If you want a 90 degrees rotated graph consider using Graph::Set90AndMargin() which greatly simplifies this with just one call
See also:
$graph = new Graph(300,200);
$graph->SetScale('textlin');
$graph->SetAngle(90);
// Finally stream the generated picture
| Argument | Default | Description |
|
$aType
| | No description available |
|
$aXFColor
|
'lightgray'
| No description available |
|
$aXColor
|
'black'
| No description available |
|
$aYFColor
|
'lightgray'
| No description available |
|
$aYColor
|
'black'
| No description available |
Description:
No description available.
Specify axis style (boxed or single)
| Argument | Default | Description |
|
$aStyle
| | Style of axis |
Description:
The most common type of axis is two axis which crosses at a specified point. However for scientific plot it is often common to want to mirror the axis (and the scale) around the plot area.
This method controls which type to use
- AXSTYLE_SIMPLE, a simple two axis plots (default)
- AXSTYLE_BOXIN, axis around the plot area with the tick marks directed inside the plot area.
- AXSTYLE_BOXOUT, axis around the plot area with the tick marks directed outside of the plot area
See funcex1.php, funcex2.php and funcex3.php for real life examples.
$graph->SetAxisStyle(AXSTYLE_BOXIN);
Set a country flag in the background
| Argument | Default | Description |
|
$aName
| | Index or (partial) name of Country |
|
$aBgType
|
BGIMG_FILLPLOT
| Background fill type |
|
$aMix
|
100
| Mix percentage |
Description:
[Synonym for SetBackgroundCountryFlag() )
Set a country flag in the background. All supported countries can be specified by either
- Numeric index, (0-238)
- Full or partial name, e.g. "norway"
- The unique string index for the country
For a list of all available flags please run the file "listallflags.php" in the Example directory.
The final arcgument "aMix" is a value between 0-100 and specifies the blend factor for the flag.
Set a country flag in the graph background
| Argument | Default | Description |
|
$aName
| | Full or partial country name |
|
$aBgType
|
BGIMG_FILLPLOT
| Normal background fill type |
|
$aMix
|
100
| Mix fraction |
Description:
Set a country flag in the background. All supported countries can be specified by either
- Numeric index, (0-238)
- Full or partial name, e.g. "norway"
- The unique string index for the country
For a list of all available flags please run the file "listallflags.php" in the Example directory.
The final arcgument "aMix" is a value between 0-100 and specifies the blend factor for the flag.
Set a color gradient as the background
| Argument | Default | Description |
|
$aFrom
|
'navy'
| Color 1 |
|
$aTo
|
'silver'
| Color 2 |
|
$aGradType
|
2
| Gradient type |
|
$aStyle
|
BGRAD_FRAME
| Gardient layout style |
Description:
This method allows you to specify a color gradient as the background of the graph. The color gradient can either fill the entire graph, just the plopt area or just the margin. This is specified by the $aStyle argument by specifyin one of the following values:
- BGRAD_FRAME, Fill the entire graph with the gradient
- BGRAD_PLOT, Just fill the plot area
- BGRAD_MARGIN, Just the margin
The gradient type can be one of
- GRAD_VER, Vertical gradient
- GRAD_HOR, Horizontal gradient
- GRAD_MIDHOR, From the center and out, horizontal
- GRAD_MIDVER, From the center and out, vertical
- GRAD_WIDE_MIDVER, From the center and out, vertical. Wide mid section.
- GRAD_WIDE_MIDHOR, From the center and out, horizontal. Wide mid section.
- GRAD_CENTER, From the center and beaming out
- GRAD_LEFT_REFLECTION, Simulates a reflection on the left side
- GRAD_RIGHT_REFLECTION, Simulates a reflection on the right side
Note: In order for the gradient to be visible the Frame must be enabled, i.e. graph->ShowFrame(false) will hide the gradient. If you like to hide the frame around the entire graph set the color to the margin color or set the weight of the frame line to 0.
See also:
$graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_MARGIN);
Specify a background image fro the plot
| Argument | Default | Description |
|
$aFileName
| | Filename for background image |
|
$aBgType
|
BGIMG_FILLPLOT
| Style of background image |
|
$aImgFormat
|
'auto'
| Image format ("jpeg", "gif", "png") |
Description:
A graph may have a background image. The image is loaded from a specified file and may be of type GIF, JPG or PNG. The image type may also be specified as "auto", in this case the image format is determined by the file ending.
The positioning and sizing of the background image can be controlled by the $aBgType parameter. Possible values are
- BGIMG_FILLPLOT, Adjust the size of the image to just fit the plotarea
- BGIMG_FILLFRAME, ADjust the size of the image to just fit the entire graph area
- BGIMG_COPY, Just copy the image as is to upper left corner
- BGIMG_CENTER, Just copy the image but center it.
If you want ot use a background image on a canvas graph you must be carefull. Since canvas graph use no buffering, i.e everythng is written directly in the order you specify the commands. For canvas graph the background image get's stroked when you call the Initframe() method.
SO, this call should eb among the very first. Every graph object after that will be stroked on top of the specified background image.
See also:
//
$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME);
// If you use a canvas graph, and only canvas graphs,
// you must manually call the InitFrame() method.
$graph->InitFrame();
Specifes what how much the background image should be blendid in with the background
| Argument | Default | Description |
|
$aMix
| | Mix value (0-100) |
Description:
Specifes what how much the background image should be blendid in with the background.
// Adjust background image position
| Argument | Default | Description |
|
$aXpos
| | No description available |
|
$aYpos
| | No description available |
Description:
No description available.
Set a frame around the plot area
| Argument | Default | Description |
|
$aDrawPlotFrame
|
true
| True=Draw the frame |
|
$aPlotFrameColor
|
array(0,0,0)
| Frame color |
|
$aPlotFrameWeight
|
1
| Width fo frame line |
Description:
This is used to specify whether the plot-area should have a rectangle around it and the specifics of that rectangle.
See also:
$graph = new Graph(300,200);
$graph->SetScale('linlin');
$graph->Box();
Enable clipping of graph outside the plotarea
| Argument | Default | Description |
|
$aFlg
|
true
| Enable/disbale clipping |
Description:
Enable or disable clipping outside the plot area. If clipping is enabled then only the part of the graph exactly inside the plot area will be visible.
Clipping may come in handy when you for example set a manual scale and have data points outside the specified range.
By default clipping is disabled.
Note 1: Clipping is only supported for graphs at 0 or 90 degrees rotation and will generate an error message if enabled together with any other angle.
Note 2: The clipping is implemented with a O(1) algorithm in terns of data size.
$graph->SetClipping();
Specify color for the plotarea (not the margins)
| Argument | Default | Description |
|
$aColor
| | Color |
Description:
Specify color for the plotarea (not the margins)
See also:
$graph->SetColor(?wheat?);
Set the Alt text used for the IMG tag generated for CSIM
| Argument | Default | Description |
|
$aAlt
| | Alt text |
Description:
Set the ALt text used for the IMG tag generated for CSIM. Whne calling StrokeCSIM() a HTML page will be returned witha recusrive call to teh same script in an IMG tag. This method allows you to specify the Alt text to be used in the returned HTML page.
See also:
$graph->SetCSIMImgAlt('Yearly values');
$graph->StrokeCSIM();
Set a frame around the entire image
| Argument | Default | Description |
|
$aDrawImgFrame
|
true
| True=Draw a frame around the entire image |
|
$aImgFrameColor
|
array(0,0,0)
| Frame color |
|
$aImgFrameWeight
|
1
| Width of frame |
Description:
Sets a frame (rectangle) of the chosen color around the edges of the image.
Note: For implementation reasons the frame must be enabled in order to for a specified gradient background to show up.
See also:
$graph->SetFrame(true,'darkblue',2);
Specify a abevel frame around the entire graph
| Argument | Default | Description |
|
$aDepth
|
3
| Depth (Height) in pixels for bevel |
|
$aBorder
|
false
| True=Add 1 pixel border around |
|
$aBorderColor
|
'black'
| Border color |
|
$aColor1
|
<EMAIL_ADDRESS>| Right and bottom shadow |
|
$aColor2
|
<EMAIL_ADDRESS>| Left and top shadow |
|
$aFlg
|
true
| True=Show bevel frame |
Description:
Specify a a bevel frame around the entire graph. A Bevel frame will give the entire graph a "3D" uprised feel.
$graph->SetFrameBevel(2,true,'black');
Should the grid be in front or back of the plot?
| Argument | Default | Description |
|
$aDepth
| | Grid depth |
Description:
Specify if the grid in the plot should be drawn under or on top of the actual plots.
Valid values for grid depth are
- DEPTH_BACK, Under plots
- DEPTH_FRONT, On top of plots
The default is to draw the grid lines under the plots.
$graph->SetGridDepth(DEPTH_FRONT);
Determine if Icons should be under or over the plot
| Argument | Default | Description |
|
$aDepth
| | Depth of icons (see description) |
Description:
Determine if Icons should be under or over the plot. The argument is one of
By default the icons are drawn under the plots
// Put the icons in front of the plot
$graph->SetIconDepth(DEPTH_FRONT);
Set Image format and optional quality
| Argument | Default | Description |
|
$aFormat
| | Format (see description) |
|
$aQuality
|
75
| Quality parameter for JPEG |
Description:
Specify what image format the generated image should use. By default the library will try to create PNG images and if the PNG libraries are not available then it will try to use foirst JPEG and finally GIF encoding.
The image format is specified as a string that can be one of
- "PNG", Looseless format with good quality/compression ratio for line graphs
- "JPEG", JPEG format
- "GIF", GIF Format
The PNG format gives in general best compression for ordinary data plots and is also a looseless format.
If the graph has complicated background images or 100s of colors then there is a good chance that JPEG will give better compression on the expense of image quality.
The quality parameter is a value between (0,100) inclusively. = gives best compression but worst quality and 100 give the best quality. Suitable ranges is 60-90.
// Set JPEG format with 60% quality
$graph->SetImgFormat('jpeg',60);
Specify side margins for graph
| Argument | Default | Description |
|
$lm
| | Left margin (in pixels) |
|
$rm
| | Right margin (in pixels) |
|
$tm
| | Top margin (in pixels) |
|
$bm
| | Bottom margin (in pixels) |
Description:
Specify the margin around the actual plot area. This is actually just a shortcut for the Image::SetMargin()
Note: If you want to set the margin for a 90 degrees rotated graph please consider using Graph::Set90AndMargin() instead since this will automatically adjust for the rotated image and the swapped meaning of width and height.
See also:
$graph->SetMargin(40,20,60,20);
Specify color for the margins (all areas outside the plotarea)
| Argument | Default | Description |
|
$aColor
| | Color |
Description:
Specifies the color of the area between the plot area and the edge of the image.
See also:
$graph->SetMarginColor('silver');
Specify scale to use for X and Y axis
| Argument | Default | Description |
|
$aAxisType
| | Type of axis |
|
$aYMin
|
1
| Y-min |
|
$aYMax
|
1
| Y-max |
|
$aXMin
|
1
| X-min |
|
$aXMax
|
1
| X-max |
Description:
Specifies what kind of scales should be used in the graph. The following combinations are allowed
- Linear scale. Both X and Y axis
- Logarithmic scale. Both X and Y axis
- Text scale. Only on X axis
- Integer scale. X and Y axis
Any combination of these may be used. Linear and logarithmic scales are pretty straightforward. The text scale might deserve some explanation. The easiest way to think of the text scale is as a linear scale consisting of only natural numbers, i.e. 0,1,2,3,4,? . This scale is used when you just have a number of Y-values you want to plot in a consecutive order and don?t care about the X-values. It is also used when you need to have text labesl you specify (via $graph->xaxis->SetTickLabels($labels) ).
To specify which combination of X and Y scales you want to use the $axtype parameter is specified. In this parameter you specify, by a text string, the type of scale you want to use for both X and Y scale.
Possible values for each axis are:
X: 'lin', 'text', 'log', 'int'
Y: 'lin', 'log', 'int'
Example of possible combination:
- SetScale('textint');
- SetScale('loglog');
- SetScale('linlog');
It is normally recommended to use the auto-scaling feature since for most practical purposes it is good enough. However on rare occasions you might want to specify the limits yourself. This is then done by the rest of the parameters to the method.
Note: If you want to use a logarithmic scale you must make sure that the ?jpgraph_log.php? is included.
Note1:
Note that if you manually specify the scale you can also specify the tick distance with a call to Ticks::Set(). For example $graph->yaxis->scale->ticks->Set(10,5) If yiou don't ste it manually a suitable tick distance will be automatically choosen.
Note2:
If you want to keep the autoscaling for Y-axis but specify the X-axis then just call the method with both min and max set to 0 (e.g. SetScale('linlin',0,0,0,50); )
//----------------------
// EXAMPLE1: Using autoscaling
$graph->SetScale('textlin');
//----------------------
// EXAMPLE2: Using manual scale for Y-scale and only major ticks
$graph->SetScale('linlin',5,75);
$graph->yaxis->scale->ticks->Set(10); // Set major and minor tick to 10
//----------------------
// EXAMPLE3: Using manual scale for Y-scale
$graph->SetScale('linlin',5,200);
// Set major tick dist to 40 and minor to 20
$graph->yaxis->scale->ticks->Set(40,20);
//----------------------
// EXAMPLE4: Using manual scale for both X and Y-scale
$graph->SetScale('linlin',5,200,0,100);
// Set major tick dist to 40 and minor to 20
$graph->yaxis->scale->ticks->Set(40,20);
// Set major and minor tick dist to 20
$graph->xaxis->scale->ticks->Set(20);
// Keeping the Autoscaling for Y-axis but fixing the X
// scale to an integer scale between [0,50]
$graph->SetScale('intlin',0,0,0,50);
Add a drop shadow to the image
| Argument | Default | Description |
|
$aShowShadow
|
true
| True=add a drop shadow |
|
$aShadowWidth
|
5
| Width (in pixels of shadow) |
|
$aShadowColor
|
array(102,102,102)
| Shadow color |
Description:
Sets a frame with a drop down shadow around the entire image
See also:
$graph->SetShadow();
// Text width of bar to be centered in absolute pixels
| Argument | Default | Description |
|
$aOff
| | No description available |
Description:
No description available.
Specify how dense the ticks should be drawn
| Argument | Default | Description |
|
$aYDensity
|
TICKD_NORMAL
| Y-density |
|
$aXDensity
|
TICKD_NORMAL
| X-density |
Description:
This method is used to hint how many ticks the auto-scaling should try to fit on each of the axis.
The following DEFINES may be used to hint to the auto-scaling how many ticks should be allocated
- TICKD_DENSE, Small distance between ticks
- TICKD_NORMAL, Default value
- TICKD_SPARSE, Longer distance between ticks
- TICKD_VERYSPARSE, Very few ticks
$graph->SetTickDensity(TICKD_DENSE); // Many Y-ticks
Specify background style for graph titles
| Argument | Default | Description |
|
$aBackColor
|
'gray'
| Background color |
|
$aStyle
|
TITLEBKG_STYLE1
| Background size style, see description |
|
$aFrameStyle
|
TITLEBKG_FRAME_NONE
| Frame style, see description |
|
$aFrameColor
|
'black'
| Frame color |
|
$aFrameWeight
|
1
| Frame thickness (weight) |
|
$aBevelHeight
|
3
| Bevel height used for frame style bevel |
|
$aEnable
|
true
| Enable/disable background |
Description:
Specify background style for graph titles, i.e. the background style for Graph::title, Graph::subtitle, Graph::subsubtitle. The actual background style is specified with the two arguments $aStyle and $aFrameStyle.
The first argument $aStyle determines the size the background should cover. The two possibilities are
- TITLEBKG_STYLE1, FIll the background inside the graph frame
- TITLEBKG_STYLE2, Also covers the graph frame
- TITLEBKG_STYLE3, Used together with the Bevel frame. WIll put the title beackground under the graph bevel.
The second style parameter specifies what type of frame should be drawn. The weight of the frame is adjustable by specifying the $aFrameweight argument. The possible options for frame styles are:
- TITLEBKG_FRAME_NONE, No frame
- TITLEBKG_FRAME_FULL, Full frame around the background
- TITLEBKG_FRAME_BOTTOM, Just a line at the bottom
- TITLEBKG_FRAME_BEVEL, Draw a Bevel 3D effect (looks like a raised square button). The height of the bevel can be adjusted with the $aBevelHeight argument.
You can further adjust the style of the background fill by the SetTitleBackgroundFillStyle() method.
See also:
$graph->SetTitleBackground('wheat2',TITLEBKG_STYLE1,TITLEBKG_FRAME_BOTTOM);
Adjust the title background fill style
| Argument | Default | Description |
|
$aStyle
| | Fill style (see description) |
|
$aColor1
|
'black'
| Color 1 |
|
$aColor2
|
'white'
| Color 2 |
Description:
The background for the graph titles as set by SetTitleBackground() can be further adjusted with this method. The style can be sepcified as one of
- TITLEBKG_FILLSTYLE_HSTRIPED, Alternating horizontal lines of color 1 and color 2
- TITLEBKG_FILLSTYLE_VSTRIPED, Alternating vertical lines of color 1 and color 2
- TITLEBKG_FILLSTYLE_SOLID, A solid fill color (default)
$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'darkgreen','black');
| Argument | Default | Description |
|
$aNormal
| | No description available |
|
$aBold
|
''
| No description available |
|
$aItalic
|
''
| No description available |
|
$aBoldIt
|
''
| No description available |
Description:
No description available.
| Argument | Default | Description |
|
$aNormal
| | No description available |
|
$aBold
|
''
| No description available |
|
$aItalic
|
''
| No description available |
|
$aBoldIt
|
''
| No description available |
Description:
No description available.
| Argument | Default | Description |
|
$aNormal
| | No description available |
|
$aBold
|
''
| No description available |
|
$aItalic
|
''
| No description available |
|
$aBoldIt
|
''
| No description available |
Description:
No description available.
| Argument | Default | Description |
|
$aNormal
| | No description available |
|
$aBold
|
''
| No description available |
|
$aItalic
|
''
| No description available |
|
$aBoldIt
|
''
| No description available |
Description:
No description available.
Specify that plots on the Y2 axis should be under Y axis plots
| Argument | Default | Description |
|
$aBack
|
true
| TRUE=under Y axis, FALSE=above |
Description:
Set the depth for Y2 plots as compare to plots added to the Y axis
$graph->SetY2OrderBack();
Specify secondary Y scale
| Argument | Default | Description |
|
$aAxisType
|
'lin'
| Type of scale |
|
$aY2Min
|
1
| Y2Min value |
|
$aY2Max
|
1
| Y2Max value |
Description:
The graph allows two different Y-scales to be used and you can choose which one you want to use for a specific plot by the way you are adding the plot to the graph, either by Add() or by AddY2() method.
This method works in the exact same way for the Y2 axis as the SetScale() method previously described.
Allowed values for the $axtype are
- ?lin?, Linear scale
- ?log?, Logarithmic scale
- ?int?, Integer scale
Note: If you want to use a logarithmic scale you must make sure that the ?jpgraph_log.php? is included.
See also:
// Left Y scale linear and right Y-scale logarithmic
$graph = new Graph(300,200);
$graph->SetScale(?textlin?);
$graph->SetY2Scale(?log?);
Set the delta position (in pixels) between the multiple Y-axis
| Argument | Default | Description |
|
$aDist
| | Distance in pixels |
Description:
Set the delta position (in pixels) between the multiple Y-axis
Specify scale for additional Y-axis
| Argument | Default | Description |
|
$aN
| | Index of axis |
|
$aAxisType
|
"lin"
| Scale type of axis |
|
$aYMin
|
1
| Optional min scale value |
|
$aYMax
|
1
| Optional max scale value |
Description:
Specify scale for additional Y-axis
<?php
include ("../jpgraph.php");
include ("../jpgraph_line.php");
$datay = array(5,3,7,2);
$datay2 = array(88,10,55,42);
$datay3 = array(255,35,745,244);
$datay4 = array(130,97,68,119);
// Setup the graph
$graph = new Graph(600,250);
$graph->SetMargin(30,200,20,20);
$graph->SetMarginColor('white');
$graph->SetColor('lightgray');
$graph->SetScale("intlin");
$graph->SetYScale(0,"lin");
$graph->SetYScale(1,"lin");
$graph->SetYScale(2,"lin");
$p1 = new LinePlot($datay);
$p1->SetColor('blue');
$graph->Add($p1);
$p2 = new LinePlot($datay2);
$p2->SetColor('darkred');
$graph->AddY(0,$p2);
$graph->ynaxis[0]->SetColor('darkred');
$p3 = new LinePlot($datay3);
$p3->SetColor('red');
$graph->AddY(1,$p3);
$graph->ynaxis[1]->SetColor('red');
$p4 = new LinePlot($datay4);
$p4->SetColor('blue');
$graph->AddY(2,$p4);
$graph->ynaxis[2]->SetColor('blue');
// Output line
$graph->Stroke();
Stroke graph to browser or file
| Argument | Default | Description |
|
$aStrokeFileName
|
''
| File name* (or special handle, see below) |
Description:
Should be the final method called in the script that generates a graph. This will generate the image and send it back to the browser.
If $aStrokeFileName != "" the image will be written to this file and NOT streamed back to the browser
If the file name is specified with the define __IMG_HANDLER (Note: Thre are 2 '_' in the beginning) then no image will be streamed to file or browser. Instead the Stroke() method will simply return the image handle used by the GD library. This can come in handy of you like to post manipulate the image or use the raw GD image in other context. Such as in creating dynamic PDF documents.
Note: If you want to use the image in a PDF file you can't take the handle directly since this is a GD handle. To use it in PDF you must first create an PDF image by calling pdf_open_memory_image() to get a proper PDF image handle. See example below.
You may also specify the file name as "auto" in which case the filename will be created from the script name but with the extension changed to reflect the choosen image format.
// Example 1 : (Normal case) Stream back to browser
$graph->Stroke();
// Example 2 : Stream to the file with absolute file path
$graph->Stroke($fileName);
// Example 3
// Get the image handle. NOTE: No image will be
// streamed to the browser in this case.
$ih = $graph->Stroke(__IMG_HANDLER);
// PDF example
//....
$im = $graph->Stroke(_IMG_HANDLER);
$pdf = pdf_new();
pdf_open_file($pdf, "");
$pimg = pdf_open_memory_image($pdf, $im);
pdf_begin_page($pdf, 595, 842);
pdf_add_outline($pdf, "Page 1");
pdf_place_image($pdf, $pimg, 0, 500, 1);
pdf_close_image($pdf, $pimg);
pdf_end_page($pdf);
pdf_close($pdf);
$buf = pdf_get_buffer($pdf);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=jpimage.pdf");
echo $buf;
pdf_delete($pdf);
Stroke an image with a CSIM
| Argument | Default | Description |
|
$aScriptName
|
'auto'
| Name of the image generating script |
|
$aCSIMName
|
''
| Image map name |
|
$aBorder
|
0
| Should the image be bordered? |
Description:
To generate an CSIM you must use this method at the end of your script instead of the normal Graph::Stroke() method. This method does not send back an image to the browser but rather a HTML page which contains an image map and a "recursive call" back to the image script. See the full JpGraph manual for a detailed explanation on how this works.
Please note that it is abolutely imperative that you specify the image generating scripts name as the first argument.
Why that? Because it is impossible for JpGraph to find out the name of the script it is executed from in the case where it is included as oart of a "standard" HTML/PHP page. Using the PHP_SELF will only return the master document and not the actual script name.
If you use several image map images on the same HTML page you must also specify unique names of each of the image maps as the second argument for this function.
To specify targets for the image maps you must call the individual plots Pot::SetCSIMTargets()
Tip: You can easily specify the script name by using the construction
basename(__FILE__) as the first argument
See also:
...
$graph->StrokeCSIM(basename(__FILE__));
// Construct wrapper HTML and write to file and send it back to browser// In the src URL we must replace the '?' with its encoding to prevent the arguments// to be converted to real arguments.
Description:
No description available.
Stroke the frames background and border
Description:
Semi Internal routine. Exclusively used together with canvas graphs where object are added directly to the canvas and we therefore must make sure that the background is stroked first.
e
// DO Nothing. It gets too messy to do this properly for 90 deg...
| Argument | Default | Description |
|
$aStrokeFileName
| | No description available |
Description:
No description available.
Creates a new graph.
| Argument | Default | Description |
|
$aWidth
|
300
| Width |
|
$aHeight
|
200
| Height |
|
$aCachedName
|
''
| Cache file name |
|
$aTimeOut
|
0
| Timeout value for cache |
|
$aInline
|
true
| True=Stream the image back to the browser |
Description:
Creates a new graph. This is often the first call made to set-up a new graph.
If the cache name is specified (via the $aCachedname) argument then this method will first try to locate the named file in the cache directory (as specified by the DEFINE in jpgraph.php) rather then generating the graph on the fly. If the file is not there or if it is older then the specified timeout value ($aTimeOut) the graph will be generated and saved as the specified file.
If the cache name is specifed as 'auto' then the cache name will be based on the basename of the script with an extension indicating the image format used, i.e. JPG, GIF or PNG.
If the specified file is found in the cache directory then it will be streamed back to the browser directly.
If no cache name is specified then the graph will always be generated and the cache bypassed. The same is true if the DEFINE 'USE_CACHE' or 'READ_CACHE' is set to false.
Before any other operation is performed on the graph a call to SetScale() should be made to finish the initialisation of the graph.
See also:
// Example 1. use cache and automtic create the cache name
$graph = new Graph(400,200,"auto");
$graph->img->SetMargin(60,20,30,50);
$graph->SetScale("textlin");
$graph->SetMarginColor("silver");
$graph->SetShadow();
// Example 2 . Don't use the cache
$graph = new Graph(400,200);
$graph->SetScale("textint");


TDRP history
1993
John Yunker created the RTP (Run-Time Parameters) system, consisting
of the rtp library and a program for generating code. rtp was based
on lex and yacc and created a number of table files which were
needed by the running executable.
1994
John Caron reworked RTP into TDRP (Table-Driven Runtime Parameters).
TDRP was still based on lex and yacc. tdrp_gen generated 3 header files
and 1 C-code file. The run-time tables were no longer required.
1995 - 1997
Mike Dixon ported TDRP to Dec Alpha and Linux, fixing some memory bugs
along the way. The number of generated files was reduced from 4 to 2,
one header and one C code. The Slackware Linux port was
straightfoward. However, later Linux versions used bison for yacc, and
tdrp_gen exhibited a bug which we have never been able to solve.
Therefore the Slackware yacc and lex programs had to be installed
for TDRP to work.
1998
Mike Dixon rewrote TDRP in vanilla C to remove the dependency on
yacc and lex which was causing problems on Linux. The system was
enhanced in a number of ways, and C++ class code generation was
added.


Adec
Provides a simple interface to AUDDEC (XDM 0.9) based algorithms. Typical usage (AAC, no error checking):
More...
Detailed Description
Provides a simple interface to AUDDEC (XDM 0.9) based algorithms. Typical usage (AAC, no error checking):
#include <xdc/std.h>
#include <ti/sdo/ce/Engine.h>
#include <ti/sdo/ce/CERuntime.h>
#include <ti/sdo/dmai/Dmai.h>
#include <ti/sdo/dmai/Buffer.h>
#include <ti/sdo/dmai/Loader.h>
#include <ti/sdo/dmai/ce/Adec.h>
Adec_Handle hAd;
Loader_Handle hLoader;
Buffer_Handle hOutBuf;
Engine_Handle hEngine;
AUDDEC_Params params = Adec_Params_DEFAULT;
AUDDEC_DynamicParams dynParams = Adec_DynamicParams_DEFAULT;
Loader_Attrs lAttrs = Loader_Attrs_DEFAULT;
Buffer_Attrs bAttrs = Buffer_Attrs_DEFAULT;
CERuntime_init();
Dmai_init();
hEngine = Engine_open("myengine", NULL, NULL);
hAd = Adec_create(hEngine, "aacdec", ¶ms, &dynParams);
hOutBuf = Buffer_create(Adec_getOutBufSize(hAd), &bAttrs);
lAttrs.readSize = Adec_getInBufSize(hAd);
lAttrs.readBufSize = lAttrs.readSize * 2;
hLoader = Loader_create("myfile.aac", &lAttrs);
Loader_prime(hLoader, &hInBuf);
while (1) {
Adec_process(hAd, hInBuf, hOutBuf);
Loader_getFrame(hLoader, hInBuf);
if (Buffer_getUserPtr(hInBuf) == NULL) break;
}
Loader_delete(hLoader);
Buffer_delete(hOutBuf);
Adec_delete(hAd);
Engine_close(hEngine);
Typedef Documentation
Handle through which to reference an Audio Decode algorithm.
Function Documentation
| Adec_Handle Adec_create |
( |
Engine_Handle |
hEngine, |
|
|
Char * |
codecName, |
|
|
AUDDEC_Params * |
params, |
|
|
AUDDEC_DynamicParams * |
dynParams | |
|
) |
| | |
Creates an Audio Decode (XDM 0.9) algorithm instance.
- Parameters:
-
| [in] | hEngine | An opened engine containing the algorithm to create. |
| [in] | codecName | The name of the algorithm to open. Corresponds to the string name given in the .cfg file. |
| [in] | params | XDM parameters to use while creating the codec. |
| [in] | dynParams | XDM dynamic parameters to use while creating the codec. |
- Return values:
-
| Handle | for use in subsequent operations (see Adec_Handle). |
| NULL | for failure. |
Decodes an audio buffer.
- Parameters:
-
| [in] | hAd | The Adec_Handle to use for decoding. |
| [in] | hInBuf | The Buffer_Handle for the buffer containing the encoded data. |
| [in] | hOutBuf | The Buffer_Handle for the buffer to fill with decoded data. |
- Return values:
-
| Dmai_EOK | for success. |
| Negative value | for failure, see Dmai.h. |
Deletes an Audio Decode algorithm instance.
- Parameters:
-
- Return values:
-
| Dmai_EOK | for success. |
| Negative value | for failure, see Dmai.h. |
Get the AUDDEC handle from the Adec module instance.
- Parameters:
-
| [in] | hAd | The Adec_Handle for which to get the AUDDEC handle. |
- Return values:
-
| Handle | to the audio decode algorithm, see the XDM documentation for AUDDEC. |
Get the sample rate detected by the algorithm.
- Parameters:
-
| [in] | hAd | The Adec_Handle for which to get the sample rate. |
- Return values:
-
| Sample rate | detected in encoded stream. |
Get the input buffer size required by the codec.
- Parameters:
-
| [in] | hAd | The Adec_Handle for which to get the buffer size. |
- Return values:
-
| Size | in bytes of the input buffer required. |
Get the output buffer size required by the codec.
- Parameters:
-
| [in] | hAd | The Adec_Handle for which to get the buffer size. |
- Return values:
-
| Size | in bytes of the output buffer required. |
Variable Documentation
Default XDM parameters for an Audio Decode algorithm.
size = sizeof(AUDDEC_Params),
maxSampleRate = 48000,
maxBitrate = 448000,
maxNoOfCh = IAUDIO_STEREO,
dataEndianness = XDM_BYTE,
Default XDM dynamic parameters for an Audio Decode algorithm.
size = sizeof(AUDDEC_DynamicParams),
outputFormat = IAUDIO_INTERLEAVED,


There is a problem
You cannot allocate applications to an assessor if their status is 'Unavailable' or 'Disabled'.
Available
Unavailable
Reason for changing status
Your comments can be seen in Freedom of Information requests.
Disabled
Reason for changing status
Your comments can be seen in Freedom of Information requests.
Update status


Wow, good thing you did that! turns out being created in a lab specifically to fight in a war can to a lot of mental and emotional damage! especially to the equivalent of a giant muscular newborn! after a few short decades of therapy, your new citizens are able to fully integrate into society. Hooray!


Index
A B C D E F G L M N O P R S T U V Z
All Classes All Packages
All Classes All Packages
All Classes All Packages
G
- getAndIncrementCounter() - Method in class OneNightCar.ParkingArea.ParkingAreaManager
-
returns the current counter an increments 1 for next ID
- getAndIncrementCounter() - Method in class OneNightCar.Rental.RentalManager
-
Gets the current counter of Rentals and increments it after returning the value
- getAndIncrementCustomerCounter() - Method in class OneNightCar.Person.PersonManager
-
returns the current counter an increments 1 for next ID
- getAndIncrementEmployeeCounter() - Method in class OneNightCar.Person.PersonManager
-
returns the current counter an increments 1 for next ID
- getArrivalTime() - Method in class OneNightCar.Rental.OneNightCar.Rental
- getCardNumber() - Method in class OneNightCar.Person.PaymentMethod
-
Gets the PaymentMethod Card Number.
- getCardType() - Method in class OneNightCar.Person.PaymentMethod
-
Gets the PaymentMethod Card Type.
- getCarID() - Method in class OneNightCar.Rental.OneNightCar.Rental
-
Gets the carID
- getCarIDFromCombustion(CombustionCar) - Method in class OneNightCar.Car.CarManagementSystem
-
gets the Index(id) of the combustionCar list
- getCarIDFromElectric(ElectricCar) - Method in class OneNightCar.Car.CarManagementSystem
-
gets the Index(id) of the electricCar list
- getCarsInStation() - Method in class OneNightCar.ParkingArea.OneNightCar.ParkingArea
-
Shows all Cars in the Station
- getCarState() - Method in class OneNightCar.Car.OneNightCar.Car
-
Gets the OneNightCar.Car State.
- getCCV() - Method in class OneNightCar.Person.PaymentMethod
-
Gets the PaymentMethod CCV.
- getChargedUp() - Method in class OneNightCar.Car.ElectricCar
-
set the Charge on 100 %
- getChargePercent() - Method in class OneNightCar.Car.ElectricCar
-
Gets the Charge Percent
- getChargePercentAfter() - Method in class OneNightCar.Rental.ElectricRental
- getCity() - Method in class OneNightCar.ParkingArea.ParkingAreaAddress
-
gets the City
- getCity() - Method in class OneNightCar.Person.PersonAddress
-
Gets the Address city.
- getCombustionCar() - Method in class OneNightCar.Rental.FuelRental
- getCombustionCarID(CombustionCar) - Method in class OneNightCar.ParkingArea.OneNightCar.ParkingArea
-
gets the Index(id) of the combustionCar list
- getCombustionCarIndexInFuelRentalList(CombustionCar) - Method in class OneNightCar.Person.Customer
-
Function: retrieve the current index from a combustion car in the Fuel OneNightCar.Rental list (Needed to Delete or Modify Rentals)
- getConsumption() - Method in class OneNightCar.Car.CombustionCar
-
Gets the Average of Consumption
- getCustomerID() - Method in class OneNightCar.Person.Customer
-
Gets the Customers ID.
- getCustomerID() - Method in class OneNightCar.Rental.OneNightCar.Rental
- getCustomerIndexInCustomerList(Customer) - Method in class OneNightCar.Person.PersonManager
-
Get the current Index of a Customer in the customer List
- getCustomerLevel() - Method in class OneNightCar.Person.Customer
-
Gets the Customer Level.
- getDate() - Method in class OneNightCar.Rental.OneNightCar.Rental
- getDateOfBirth() - Method in class OneNightCar.Person.OneNightCar.Person
-
Gets the Persons DOB.
- getDepartureTime() - Method in class OneNightCar.Rental.OneNightCar.Rental
- getElectricCar() - Method in class OneNightCar.Rental.ElectricRental
- getElectricCarID(ElectricCar) - Method in class OneNightCar.ParkingArea.ElectricParkingArea
-
gets the Index(id) of an electric car in the station
- getElectricCarIndexInElectricRentalList(ElectricCar) - Method in class OneNightCar.Person.Customer
-
Function: retrieve the current index from an electric car in the Electric OneNightCar.Rental list (Needed to Delete or Modify Rentals)
- getElectricRentals() - Method in class OneNightCar.Person.Customer
-
Gets the Electric Rentals.
- getElectricRentalWithIndex(int) - Method in class OneNightCar.Person.Customer
-
Gets the Electric OneNightCar.Rental with index.
- getEmployeeID() - Method in class OneNightCar.Person.Employee
-
Gets the Employee ID.
- getEmployeeIndexInEmployeeList(Employee) - Method in class OneNightCar.Person.PersonManager
-
Get the current Index of a Employee in the employees List
- getFuelLevel() - Method in class OneNightCar.Car.CombustionCar
-
Gets the Fuel Level
- getFuelLevelAfter() - Method in class OneNightCar.Rental.FuelRental
- getFuelRentals() - Method in class OneNightCar.Person.Customer
-
Gets the Fuel Rentals.
- getFuelRentalWithIndex(int) - Method in class OneNightCar.Person.Customer
-
Gets the Fuel OneNightCar.Rental with index.
- getGPSLatitude() - Method in class OneNightCar.Car.OneNightCar.Car
- getGPSLatitude() - Method in class OneNightCar.Car.Location
- getGPSLongitude() - Method in class OneNightCar.Car.OneNightCar.Car
- getGPSLongitude() - Method in class OneNightCar.Car.Location
- getIndexInStationCarIDList(CombustionCar) - Method in class OneNightCar.ParkingArea.OneNightCar.ParkingArea
-
gets the Index from a Combustion OneNightCar.Car from the carsInStation list
- getLocation() - Method in class OneNightCar.Car.OneNightCar.Car
-
Gets the OneNightCar.Car Location
- getMaxCapacity() - Method in class OneNightCar.ParkingArea.OneNightCar.ParkingArea
-
gets the max.
- getMaxElectricCarCapacity() - Method in class OneNightCar.ParkingArea.ElectricParkingArea
-
gets the max.
- getName() - Method in class OneNightCar.Person.OneNightCar.Person
-
Gets the Persons name.
- getOdometer() - Method in class OneNightCar.Car.OneNightCar.Car
-
Gets the OneNightCar.Car odometer
- getOdometerAfter() - Method in class OneNightCar.Rental.OneNightCar.Rental
-
Gets the odometer after the rental
- getParkIDFromElectricParkingAreas(ElectricParkingArea) - Method in class OneNightCar.ParkingArea.ParkingAreaManager
-
gets the Index(id) of the ElectricParkingAreas list
- getParkIDFromParkingAreas(OneNightCar.ParkingArea) - Method in class OneNightCar.ParkingArea.ParkingAreaManager
-
gets the Index(id) of the ParkingAreas list
- getParkingAreaAddress() - Method in class OneNightCar.ParkingArea.OneNightCar.ParkingArea
-
gets the address of the Parking Area
- getPaymentMethod() - Method in class OneNightCar.Person.Customer
-
Gets the Customer Payment Method.
- getPersonAddress() - Method in class OneNightCar.Person.OneNightCar.Person
-
Gets the Persons Address.
- getPrice() - Method in class OneNightCar.Car.OneNightCar.Car
-
Gets the OneNightCar.Car Price
- getRandomBoolean() - Static method in class OneNightCar.Person.Admin
-
Random boolean generator.
- getRandomBoolean() - Static method in class OneNightCar.Person.Employee
-
Random boolean generator.
- getRange() - Method in class OneNightCar.Car.ElectricCar
-
Gets the range of an ElectricCar
- getRentalID() - Method in class OneNightCar.Rental.OneNightCar.Rental
- getRentalIDFromElectricRentals(ElectricRental) - Method in class OneNightCar.Rental.RentalManager
-
Returns the RentalID of the Electric OneNightCar.Rental
- getRentalIDFromFuelRentals(FuelRental) - Method in class OneNightCar.Rental.RentalManager
-
Returns the RentalID of the Fuel OneNightCar.Rental
- getSalary() - Method in class OneNightCar.Person.Employee
-
Gets the Employee salary.
- getSizeOfCombustionCarsList() - Method in class OneNightCar.Car.CarManagementSystem
-
gets the size of the combustionCar list
- getSizeOfElectricCarsList() - Method in class OneNightCar.Car.CarManagementSystem
-
gets the size of the electricCar list
- getSizeOfElectricParkingAreas() - Method in class OneNightCar.ParkingArea.ParkingAreaManager
-
gets the size of the ElectricParkingAreas list
- getSizeOfElectricRentals() - Method in class OneNightCar.Rental.RentalManager
-
Returns the current amount of Rentals in the global list of Electric Rentals
- getSizeOfFuelRentals() - Method in class OneNightCar.Rental.RentalManager
-
Returns the current amount of Rentals in the global List of Fuel Rentals
- getSizeOfParkingAreas() - Method in class OneNightCar.ParkingArea.ParkingAreaManager
-
gets the size of the ParkingAreas list
- getStreet() - Method in class OneNightCar.ParkingArea.ParkingAreaAddress
-
gets the Street
- getStreet() - Method in class OneNightCar.Person.PersonAddress
-
Gets the Address Street.
- getStreetNumber() - Method in class OneNightCar.ParkingArea.ParkingAreaAddress
-
gets the street number
- getStreetNumber() - Method in class OneNightCar.Person.PersonAddress
-
Gets the Address Street.
- getTanked() - Method in class OneNightCar.Car.CombustionCar
-
set the fuel level on 100 %
- getTankSize() - Method in class OneNightCar.Car.CombustionCar
-
Gets the max.
- getTypeOfActivity() - Method in class OneNightCar.Person.Employee
-
Gets the Employee TypeOfActivity.
- getValidThrough() - Method in class OneNightCar.Person.PaymentMethod
-
Gets the PaymentMethod Valid Through.
- getZIP() - Method in class OneNightCar.ParkingArea.ParkingAreaAddress
-
gets the ZIP
- getZIP() - Method in class OneNightCar.Person.PersonAddress
-
Gets the Address ZIP.
- GPSLatitude - Variable in class OneNightCar.Car.Location
- GPSLongitude - Variable in class OneNightCar.Car.Location
All Classes All Packages


Let us change our traditional attitude to the construction of programs. Instead
of imagining that our main task is to instruct a computer what to to, let us
concentrate rather on explaining to human beings what we want a computer to
do.
--Donald Knuth
[
source]


Chiefs Medical Team’s Warning About Billiat & Co.
by Soccer LadumaFour key Kaizer Chiefs players were rested as precaution from the medical team, coach Ernst Middendorp has revealed.
Khama Billiat, Lebogang Manyama, Eric Mathoho and Yagan Sasman were left out of the club’s 2-0 Absa Premiership victory over Chippa United on Wednesday night as Middendorp rang the changes with eight players making rare starts.
Read: 'That Was Enough To Make Him A Bad Goalkeeper'
It was the Glamour Boys second game in four days after their win, on penalties, against rivals Orlando Pirates in the quarter-finals of the Telkom Knockout.
The two Soweto giants face off again on Saturday in a league derby at FNB Stadium.
“I was in PE already on Sunday after taking an early flight from Durban (where the Soweto Derby was played) and the technical and medical team made the decision on Monday morning. We had to make sure which players would travel,” Middendorp told reporters.
“The medical department had a clear say and said definitely not Khama, definitely not Lebogang and definitely not Eric and please be careful with Yagan Sasman. So these instructions came and we made a list on Monday morning and there was no ambition with Reeve Frosler and Kearyn Baccus either. It was very clear that I must listen to the medical department and the sports science on what we can do and which players should be used.”
With those words, Middendorp explained the reasons behind not only making eight changes, but leaving out his key players for the trip to Port Elizabeth.
Read: Rulani: If You Look At The Numbers
Post Selfie’s On Soccer Laduma’s Social Media App & Earn Airtime and more! Download Now


Now, this is weird.
I am playing with a nanodetx, and I can't initialize a String instance.
Code extract:
Serial.println("loop start");
String stringOne = "Hello String";
Serial.println(stringOne.length());
stringOne= "Hello";
Serial.println(stringOne.length());
Result on the serial monitor:
loop start
0
0
So for some reason, my String is not created.
Serial.println(stringOne); also just prints a blank line. I am using Arduino IDE 1.04.
Any idea what is happening here?
Re: Strange error creating a String
Strange indeed. It looks OK to me, and to my NanodeRF and my Arduino 1.0.4. I get (both with the statements in loop( ) and in setup( ) ) exactly what you expect:
So it has to be something else. What else do you have in your sketch? Has it run out of memory, for example?
Write a sketch with just those lines (preceded by the necessary Serial.begin() of course) in setup( ). If it works then, it's definitely something else causing the problem. You'll need an empty loop( ) to keep the compiler happy!
Re: Strange error creating a String
I had it temporarily working by putting the instance definition outside the method, making it global. But it broke again.
My compiled sketch is 12-14 kB, so plenty of memory left.
Good idea - start with a basic sketch and see how it goes.The other code I have running "should not" interfere, but you never know...
Re: Strange error creating a String
Ah, but remember there's a very limited amount of RAM for variables and the stack, etc. See MemoryFree.
Re: Strange error creating a String
I ran out of memory with my early Mk2i PV Router builds. The problem was that I had far too many strings. Having removed many of them, the later versions are fine.
In my later builds, from Rev4 onwards, I've included a little routine that shows how much RAM remains unused. This might be worth adding into your sketch, and calling just before your "Hello" string appears to misbehave:
(Sorry, before posting this, I'd not checked the link which Robert provided)


header 1
Header 2
Header 3
hello
do something
echo "hello everyone"; ?>
what is this
Smile
Frown
Cry
Check Answer


Back in the Day: Norman Asao maintains Bakery Kapiolani pumpkin tradition | Honolulu Star-Advertiser
Norman Asao was born into the food world. His mom ran La Ronde, the rotating restaurant above Ala Moana. His father, Norman Hideo Asao, invented the Lemon Crunch Chiffon Cake at Alexander Young Bakery. He also owned Swan Bakery in Kalihi and the original Bakery Kapiolani. Read more
Mahalo for reading the Honolulu Star-Advertiser!
You're reading a premium story. Read the full story with our Print & Digital Subscription.
Already a subscriber? Log in now to continue reading this story.
Print subscriber but without online access? Activate your Digital Account now.


What was it like to pair with others to solve challenges?
For the most part I really enjoy pairing. The exchanging of ideas and trying things out in the irb is really helpful to me. It's a great way to learn new methods and see how someone else approaches a problem. I find it is especially helpful when both partners are around the same level. I really enjoy be able share some knowledge that I have and it forces me to solidify it into something I can explain to someone else rather than just operate on a fuzzy understanding of the concept.
Was something particularly fun or rewarding?
I have been very fortunate that most of my pairing sessions have been with people who have a sense of humor and a willingness to try new things. Right now I literally type in a line of code and then run it in irb or a driver test. So when it works there is joyous celebration.
Was something frustrating and difficult for you?
Sometimes pairing can be frustrating when the other person's skill set is beyond mine. Something that appears to them as a straight and logically procession looks to me like they skipped six or seven steps. I understand the basic concepts of what needs to be but I still struggle with how to communicate that to the computer. Most people have been very generous with their time and their knowledge but they write code that doesn't really need refactoring and I need to have every step coded out. It is also very frustrating and rude when people do not respond to an email request for a pair session. I understand how time consuming this can be on top of outside obligations scheduling a session can be difficult but to just ignore someone..really? This has happened at least once with both of my accountability groups.
How did you feel when you read your feedback?
I was nervous at first to read my feedback but it has been pretty positive. It's good to hear that the other person had a similar experience to mine.
Was the feedback you received helpful to your learning?
Not really - the sessions themselves have been helpful but only one person actually offered some helpful advice.
Based on the feedback you've received, what are you going to do to improve next time you pair?
Two of the issues that have appeared in my feedback have been – that I am more comfortable driving (which is true) and that I don't express myself clearly and concisely. This is also true since I don't have a solid grasp on what I am learning. I have consciously tried to navigate more and take more time thinking about what I am trying to say.
How was it to write feedback?
Very difficult. As I have previously stated most of my experiences have been positive so I don't really have anything to add other than great job or it was fun; can't wait to pair again.
What was most difficult for you when writing feedback for your pair?
Trying to find something helpful to say or offer advice on improving an aspect of the session.
Overall, what do you think of using pairing and feedback to guide your learning?
Overall, I enjoy pairing but as we move forward into Ruby I feel like I am falling behind and am more afraid to pair up.


PowerSploit
The process of DLL hijacking can be done also through PowerSploit since it contains three modules that can assist in the identification of services that are missing DLL’s, discovery of folders that users have modification permissions and generation of DLL’s.
The module Find-ProcessDLLHijack will identify all the processes on the system that are trying to load DLL’s which are missing.
The next step is the identification of paths that the user can modify the content. The folders identified will be the ones that the malicious .DLL needs to be planted.
The last step is to generate the hijackable DLL into one of the folders that have been identified above with Modify (M) permissions.


RequestError
public struct RequestError : RawRepresentable, Equatable, Hashable, Comparable, Error, CustomStringConvertible
An error representing a failed request. This definition is intended to be used by both the client side (e.g. KituraKit) and server side (e.g. Kitura) of the request (typically a HTTP REST request).
Usage Example:
In this example, the RequestError
is used in a Kitura server Codable route handler to
indicate the request has failed because the requested record was not found.
router.get("/users") { (id: Int, respondWith: (User?, RequestError?) -> Void) in
...
respondWith(nil, RequestError.notFound)
...
}
-
A typealias representing the type of error that has occurred. The range of error codes from 100 up to 599 are reserved for HTTP status codes. Custom error codes may be used and must not conflict with this range.
Declaration
Swift
public typealias RawValue = Int
-
Representation of the error body. May be a type-erased Codable object or a Data (in a particular format).
See moreDeclaration
Swift
public enum ErrorBody
-
Creates an error representing the given error code.
Declaration
Swift
public init(rawValue: Int)
Parameters
rawValue
An Int indicating an error code representing the type of error that has occurred.
-
Creates an error representing the given error code and reason string.
Declaration
Swift
public init(rawValue: Int, reason: String)
Parameters
rawValue
An Int indicating an error code representing the type of error that has occurred.
reason
A human-readable description of the error code.
-
Creates an error representing the given base error, with a custom response body given as a Codable.
Declaration
Swift
public init<Body>(_ base: RequestError, body: Body) where Body : Decodable, Body : Encodable
Parameters
base
A
RequestError
object.body
A representation of the error body - an object representing further details of the failure.
-
Creates an error respresenting the given base error, with a custom response body given as Data and a BodyFormat.
Declaration
Swift
public init(_ base: RequestError, bodyData: Data, format: BodyFormat) throws
Parameters
base
A
RequestError
object.bodyData
A
Data
object.format
A
BodyFormat
object used to check whether it is legal JSON.
-
An error code representing the type of error that has occurred. The range of error codes from 100 up to 599 are reserved for HTTP status codes. Custom error codes may be used and must not conflict with this range.
Declaration
Swift
public let rawValue: Int
-
A human-readable description of the error code.
Declaration
Swift
public let reason: String
-
Representation of the error body - an object representing further details of the failure.
The value may be:
nil
if there is no body- a (type-erased) Codable object if the error was initialized with
init(_:body:)
- bytes of data and a signifier of the format in which they are stored (eg: JSON)
if the error was initialized with
init(_:bodyData:format:)
Usage example:
if let errorBody = error.body { switch error.body { case let .codable(body): ... // body is Codable case let .data(bytes, format): ... // bytes is Data, format is BodyFormat } }
Note
If you need a Codable representation and the body is data, you can call thebodyAs(_:)
function to get the converted value.Declaration
Swift
public private(set) var body: ErrorBody? { get }
-
Returns the Codable error body encoded into bytes in a given format (eg: JSON).
This function should be used if the RequestError was created using
init(_:body:)
, otherwise it will returnnil
.Note
This function is primarily intended for use by the Kitura Router so that it can encode and send a custom error body returned from a codable route.Usage Example:
do { if let errorBodyData = try error.encodeBody(.json) { ... } } catch { // Handle the failure to encode }
Throws
AnEncodingError
if the encoding fails.Declaration
Swift
public func encodeBody(_ format: BodyFormat) throws -> Data?
Parameters
format
Describes the format that should be used (for example:
BodyFormat.json
).Return Value
The
Data
object ornil
if there is no body, or if the error was not initialized withinit(_:body:)
. -
Returns the Data error body as the requested
Codable
type.This function should be used if the RequestError was created using
init(_:bodyData:format:)
, otherwise it will returnnil
.This function throws; you can use
bodyAs(_:)
instead if you want to ignore DecodingErrors.Note
This function is primarily intended for use by users of KituraKit or similar client-side code that needs to convert a custom error response fromData
to aCodable
type.Usage Example:
do { if let errorBody = try error.decodeBody(MyCodableType.self) { ... } } catch { // Handle failure to decode }
Throws
ADecodingError
if decoding fails.Declaration
Swift
public func decodeBody<Body>(_ type: Body.Type) throws -> Body? where Body : Decodable, Body : Encodable
Parameters
type
The type of the value to decode from the body data (for example:
MyCodableType.self
).Return Value
The
Codable
object ornil
if there is no body or if the error was not initialized withinit(_:bodyData:format:)
. -
Returns the Data error body as the requested
Codable
type.This function should be used if the RequestError was created using
init(_:bodyData:format:)
, otherwise it will returnnil
.This function ignores DecodingErrors, and returns
nil
if decoding fails. If you want DecodingErrors to be thrown, usedecodeBody(_:)
instead.Note
This function is primarily intended for use by users of KituraKit or similar client-side code that needs to convert a custom error response fromData
to aCodable
type.Usage Example:
if let errorBody = error.bodyAs(MyCodableType.self) { ... }
Declaration
Swift
public func bodyAs<Body>(_ type: Body.Type) -> Body? where Body : Decodable, Body : Encodable
Parameters
type
The type of the value to decode from the body data (for example:
MyCodableType.self
).Return Value
The
Codable
object ornil
if there is no body, or if the error was not initialized withinit(_:bodyData:format:)
, or if decoding fails.
-
Returns a Boolean value indicating whether the value of the first argument is less than that of the second argument.
Declaration
Swift
public static func < (lhs: RequestError, rhs: RequestError) -> Bool
-
Indicates whether two URLs are the same.
Declaration
Swift
public static func == (lhs: RequestError, rhs: RequestError) -> Bool
-
A textual description of the RequestError instance containing the error code and reason.
Declaration
Swift
public var description: String { get }
-
The computed hash value for the RequestError instance.
Declaration
Swift
public var hashValue: Int { get }
-
The HTTP status code for the error. This value should be a valid HTTP status code if inside the range 100 to 599, however, it may take a value outside that range when representing other types of error.
Declaration
Swift
public var httpCode: Int { get }
-
Creates an error representing a HTTP status code.
Declaration
Swift
public init(httpCode: Int)
Parameters
httpCode
A standard HTTP status code.
-
HTTP code 100 - Continue
Declaration
Swift
public static let `continue`: RequestError
-
HTTP code 101 - Switching Protocols
Declaration
Swift
public static let switchingProtocols: RequestError
-
HTTP code 200 - OK
Declaration
Swift
public static let ok: RequestError
-
HTTP code 201 - Created
Declaration
Swift
public static let created: RequestError
-
HTTP code 202 - Accepted
Declaration
Swift
public static let accepted: RequestError
-
HTTP code 203 - Non Authoritative Information
Declaration
Swift
public static let nonAuthoritativeInformation: RequestError
-
HTTP code 204 - No Content
Declaration
Swift
public static let noContent: RequestError
-
HTTP code 205 - Reset Content
Declaration
Swift
public static let resetContent: RequestError
-
HTTP code 206 - Partial Content
Declaration
Swift
public static let partialContent: RequestError
-
HTTP code 207 - Multi Status
Declaration
Swift
public static let multiStatus: RequestError
-
HTTP code 208 - Already Reported
Declaration
Swift
public static let alreadyReported: RequestError
-
HTTP code 226 - IM Used
Declaration
Swift
public static let imUsed: RequestError
-
HTTP code 300 - Multiple Choices
Declaration
Swift
public static let multipleChoices: RequestError
-
HTTP code 301 - Moved Permanently
Declaration
Swift
public static let movedPermanently: RequestError
-
HTTP code 302 - Found
Declaration
Swift
public static let found: RequestError
-
HTTP code 303 - See Other
Declaration
Swift
public static let seeOther: RequestError
-
HTTP code 304 - Not Modified
Declaration
Swift
public static let notModified: RequestError
-
HTTP code 305 - Use Proxy
Declaration
Swift
public static let useProxy: RequestError
-
HTTP code 307 - Temporary Redirect
Declaration
Swift
public static let temporaryRedirect: RequestError
-
HTTP code 308 - Permanent Redirect
Declaration
Swift
public static let permanentRedirect: RequestError
-
HTTP code 400 - Bad Request
Declaration
Swift
public static let badRequest: RequestError
-
HTTP code 401 - Unauthorized
Declaration
Swift
public static let unauthorized: RequestError
-
HTTP code 402 - Payment Required
Declaration
Swift
public static let paymentRequired: RequestError
-
HTTP code 403 - Forbidden
Declaration
Swift
public static let forbidden: RequestError
-
HTTP code 404 - Not Found
Declaration
Swift
public static let notFound: RequestError
-
HTTP code 405 - Method Not Allowed
Declaration
Swift
public static let methodNotAllowed: RequestError
-
HTTP code 406 - Not Acceptable
Declaration
Swift
public static let notAcceptable: RequestError
-
HTTP code 407 - Proxy Authentication Required
Declaration
Swift
public static let proxyAuthenticationRequired: RequestError
-
HTTP code 408 - Request Timeout
Declaration
Swift
public static let requestTimeout: RequestError
-
HTTP code 409 - Conflict
Declaration
Swift
public static let conflict: RequestError
-
HTTP code 410 - Gone
Declaration
Swift
public static let gone: RequestError
-
HTTP code 411 - Length Required
Declaration
Swift
public static let lengthRequired: RequestError
-
HTTP code 412 - Precondition Failed
Declaration
Swift
public static let preconditionFailed: RequestError
-
HTTP code 413 - Payload Too Large
Declaration
Swift
public static let payloadTooLarge: RequestError
-
HTTP code 414 - URI Too Long
Declaration
Swift
public static let uriTooLong: RequestError
-
HTTP code 415 - Unsupported Media Type
Declaration
Swift
public static let unsupportedMediaType: RequestError
-
HTTP code 416 - Range Not Satisfiable
Declaration
Swift
public static let rangeNotSatisfiable: RequestError
-
HTTP code 417 - Expectation Failed
Declaration
Swift
public static let expectationFailed: RequestError
-
HTTP code 421 - Misdirected Request
Declaration
Swift
public static let misdirectedRequest: RequestError
-
HTTP code 422 - Unprocessable Entity
Declaration
Swift
public static let unprocessableEntity: RequestError
-
HTTP code 423 - Locked
Declaration
Swift
public static let locked: RequestError
-
HTTP code 424 - Failed Dependency
Declaration
Swift
public static let failedDependency: RequestError
-
HTTP code 426 - Upgrade Required
Declaration
Swift
public static let upgradeRequired: RequestError
-
HTTP code 428 - Precondition Required
Declaration
Swift
public static let preconditionRequired: RequestError
-
HTTP code 429 - Too Many Requests
Declaration
Swift
public static let tooManyRequests: RequestError
-
HTTP code 431 - Request Header Fields Too Large
Declaration
Swift
public static let requestHeaderFieldsTooLarge: RequestError
-
HTTP code 451 - Unavailable For Legal Reasons
Declaration
Swift
public static let unavailableForLegalReasons: RequestError
-
HTTP code 500 - Internal Server Error
Declaration
Swift
public static let internalServerError: RequestError
-
HTTP code 501 - Not Implemented
Declaration
Swift
public static let notImplemented: RequestError
-
HTTP code 502 - Bad Gateway
Declaration
Swift
public static let badGateway: RequestError
-
HTTP code 503 - Service Unavailable
Declaration
Swift
public static let serviceUnavailable: RequestError
-
HTTP code 504 - Gateway Timeout
Declaration
Swift
public static let gatewayTimeout: RequestError
-
HTTP code 505 - HTTP Version Not Supported
Declaration
Swift
public static let httpVersionNotSupported: RequestError
-
HTTP code 506 - Variant Also Negotiates
Declaration
Swift
public static let variantAlsoNegotiates: RequestError
-
HTTP code 507 - Insufficient Storage
Declaration
Swift
public static let insufficientStorage: RequestError
-
HTTP code 508 - Loop Detected
Declaration
Swift
public static let loopDetected: RequestError
-
HTTP code 510 - Not Extended
Declaration
Swift
public static let notExtended: RequestError
-
HTTP code 511 - Network Authentication Required
Declaration
Swift
public static let networkAuthenticationRequired: RequestError


Property Listings
Property Name
Description of the property
Type of Property
Single Room
Double Seater Room
Do Working Space
Shop
ATM
Address
City/District
State
Pincode
Amenities
Mess
Air Conditioner
Wifi
Upload Images
Upload ID proof
Upload Ownership proof


System Sequence Diagrams Assignment
Table of Contents
1 About This Sprint
This sprint introduces a system analysis view of the real world, and describes how to use the UML use cases as a means for finding out what is relevant to model from the real world for the system you are designing.
This sprint focuses in particular on extracting top-level system events from UNML use cases.
2 User Stories covered in this Sprint
- As a software designer I want to document my understanding of the problem domain so that I can easily transform this into an object oriented software system.
- As a software designer I want to understand how users plan on interacting with the system so that I can design the right API endpoints.
- As a product manager I want to make sure that fixed bugs do not re-appear so that I can build the product incrementally.
3 Learning Material
Please review the sprints on:
4 Experiential Learning
4.1 Sprint Test Plan
Go through the user stories for this sprint and make sure you have a clear understanding of how to solve each of them.
Revisit and update your risks and contingencies section.
Add and/or revise the following items to your glossary:
- Concept
- Class
- Instance
- Object
- Object state
- Class Diagram
- Domain Model (Also: Conceptual Model)
- System Sequence Diagram
- System Event
- Black Box
- Software Architecture
- Layered Software Architecture
- Model-View-Controller Software Architecture
- Pipes-and-Filters Software Architecture
- Unit Testing
- Regression Testing
- Integration Testing
Make sure you understand what each item is, the notation for them, and how to use them either in isolation or together with the other concepts.
4.2 Assignment: System Sequence Diagrams
Create UML System Sequence Diagrams from your UML Use Cases in your first iteration. Create one System Sequence Diagram for each Use Case.
Tasks:
- For each Use Case, create one System Sequence Diagram.
- Add the
:System
, and all involved Actors. - Identify the system events from the use case, name the corresponding method call, and add it to your system sequence diagram from the right actor to the
:System
- Add return messages from the
:System
to the actors. - Add loops if applicable.
Document Structure:
The title for this Assignment Document is: System Sequence Diagrams for System <system name>
.
The assignment document shall contain the following items:
- Title Page, according to the Title Page Instructions (Link)
System Description
A brief description (2-3 paragraphs) of your interpretation of what the goal of the system is.
- System Sequence Diagrams
- System Sequence Diagram for Use Case <name 1>
- System Sequence Diagram for Use Case <name 2>
- System Sequence Diagram for Use Case <name … >
- System Sequence Diagram for Use Case <name n>
Commit and push this document to your project repository.
Conditions of Satisfaction:
When marking this part of the assignment we are looking for the following:
- Does the title page contain a table with authors and author contribution
- size of assignment: Do all Use Cases in Iteration 1 have a corresponding System Sequence Diagram
- Are all actors in each use case represented in the system sequece diagrams
- Is the system treated as a black box
- Do all system events in each use case have a corresponding system event in the same order as in the use case
- Are the system events aptly named
- Are the return messages from the system sufficiently descriptive
- Is the loop construct used correctly
4.3 Update Course Backlog
What’s the next step? What do you need to do in order to understand how to implement the system based on your system sequence diagrams?
Are there any other questions that you want answered? Add them, along with a brief strategy for how to find an answer.
5 Sprint Acceptance Tests
You are done with this sprint when:
- You have created the System Sequence Diagram document
- You have committed/pushed these documents to your project repository
You may also have
- Updated your Sprint Test Plan
- Updated your Course Backlog


Will
Will is an Amherst College History Major with a past in Business Systems Analysis. Will is an avid skier and hiker and is known for going particularly hard in the paint. Will is the young, precocious leader of the OriginalPranksters. Under his guidance the team is surely destined for greatness.
Anson
While not coding and going out to eat, Anson is a proud father of four kids (3 girls, 1 boy). He enjoys going on day hikes with the family and checking out live music. He used to be a saxophone player in a jazz band and is a leap year baby to prove it. Anson is a classic man.
David
David is an LSU grad and former member of a rap band. He has worked in commercial banking covering commercial real estate and oil & gas industries before transitioning into digital marketing and analytics. Currently a Code Fellows student looking to go deeper in learning JavaScript.
Steven
Steven is a former sales operations and web analyst with a passion for sports analysis and sabermetrics. He also enjoys hanging with his 4 year old Goldendoodle. While not studying JavaScript, Steven enjoys cycling, eating carne asada burritos, traveling and learning Native American history. Steven was in a MTV music video and also featured on Nickelodean's Double Dare.


Kevin's Recipe Book
Garlic Cheese Grits
- 6 cups cold water
- 1 teaspoon garlic, minced
- 1 1 / 2 cups hominy grits
- 1 tablespoon yellow onion, minced
- 1 / 4 cup milk
- 2 eggs, beaten
- 8 ounces Velveeta, cubed
- 1 / 2 teaspoon salt
Preheat oven to 350°. Bring water to a boil. Add grits and return to a boil.
Reduce heat and simmer about 5 minutes. Remove from heat, add all other
ingredients, and put into oiled casserole pan. Bake covered for about 45
minutes, stirring midway. Makes 10 big servings.
-----------------------------------------------------------------
Texas Caviar
2 quarts canned black-eyed peas, drained
1 cup yellow onion, diced
1 cup red onion, diced
1/2 cup green bell pepper,
1 cup Vinegar and Oil diced Dressing (see Cookbook page 44)
2 teaspoons garlic, minced (1 teaspoon is enough for some folks)
1 tablespoon Vegetable Seasoning (see Cookbook page 39)
Mix all ingredients well and marinate 8 to 12 hours, stirring a few times
to coat all ingredients well. Makes 2 1/2 quarts.
Cowpeas into caviar. Anything is possible in Texas. This simple dish proves
the perfection of canned black-eyed peas. The onion and bell pepper provide
a delicate crunch,the vinegar a slight tang. For picnics, diets, our Three
Salad Lunch Special or good luck on New Year’s Day, you really ought to get
enough practice on this one to make it easy and frequent.
-----------------------------------------------------------------
BABINKA'S POTATO SALAD
4 Large potatoes (to be diced after boiling)
4 hard-boiled eggs, diced
3 heaping Tablespoons mayonnaise
1 heaping Tablespoon mustard
About 1/2 or more of a large pickle, diced
About 1/2 cup or more, cooked peas
Lawrey's (or other) Season Salt, to taste
Peel the potatoes, boil them for forty minutes or slightly more. They
should be barely firm enough to dice them (without mashing them). Allow
the potatoes to cool before trying to dice them. When dicing, the chunks
can be fairly coarse.
Dice the eggs and pickles. These chunks should be smaller than the potato
chunks, perhaps the size of large peas.
Mix all ingredients in a large bowl. Adjust the mayo, mustard, and salt,
to taste.


For Love of the Game A film review by Marty Mapes Copyright 1999 Marty Mapes
**1/2 (out of 4) Sam Raimi made his name in over-the-top horror films. He broke into the mainstream with movies like DARKMAN and THE QUICK AND THE DEAD, but they still had a hint of the macabre. Even A SIMPLE PLAN had the trademark Raimi quirky darkness. But now that Raimi's directed Kevin Costner in a sentimental baseball movie, what's next? A G-rated David Lynch movie? Wes Craven directing a touching drama?
Well, it's all true.
Costner plays Billy Chapel, a pitcher who's been with the Tigers his entire, 19-year career. The owner, Roy Wheeler (Brian Cox) confides to Billy that he's had to sell the team and that the new owners will trade him away next season. If Billy would quit, it would sweeten the unsatisfying business of selling the team.
Billy's pitching arm is in constant pain and he's not getting any younger.  His team stinks this year and today's game means nothing to the Tigers. Billy realizes that after today, his life as he knows it will fade quickly and unglamorously away.
He resolves not to give in. He resolves to fight the only way he can, by playing ball.
For seven innings, the film shows his life in flashback as he broods on the owner's request, his brilliant career, his relationship, and his love of the game.
Come the eighth inning, Billy realizes he's in the midst of a perfect game. If he can get past six more batters, he will have the perfect reason to retire, and maybe follow his girlfriend to England.
For a large part of the movie, the emotion works. (FOR LOVE OF THE GAME has been called a tearjerker, and not unfairly.) Costner's not the most aggressive of actors, but the low-key brooding was well within his grasp. His relationship with Jane seemed genuine and caring. His relationship with baseball was particularly convincing.
However the character of Jane was not given a life of her own. She was more a plot device than a person. She's a single mother who lives in New York as a freelance writer for beauty magazines. I know single mothers and I know freelance writers.
Her career aside, there are other places where her fights with Billy are clearly written for the plot, rather than arising from the characters. Billy says to her face that his personal trainer is more important to him than she is, something even the crudest of males would know not to say. Later, Jane, in return, snaps at him and angrily dumps him. It's clear that they fight, but it's not clear why either one of them, individually, would. The only explanation is that the plot needed more conflict.
The supporting characters were pretty good, considering how small a role each one played. Jena Malone (from Contact) played Jane's daughter Heather, both as a 13-year old and a college freshman. ** played Birch, Billy's former teammate and current opponent, with just enough exaggeration to make him stand out. And John C. Reilly (BOOGIE NIGHTS, WHAT'S EATING GILBERT GRAPE?) gives another very good performance as a strong supporting player.
FOR LOVE OF THE GAME was well directed by Raimi (who managed to sneak in a little blood and some talk of disfigurement). Small details give away some of the thought that went into each scene, like the jeers of the crowd while Billy pitches, or the constant presence of autograph seekers in New York City.
In spite of some obvious flaws in a very important area, namely character development, the emotion of the story plays pretty well. The sentimentality isn't for everybody, but if you're interested in seeing it, go for it.
Check out more current movie reviews at http://www.moviehabit.com
-- Marty Mapes<EMAIL_ADDRESS>Movie Habit http://www.moviehabit.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Pundit tells Chelsea FC to forget about title challenge
Liverpool FC legend Jason McAteer doesn't believe Chelsea FC will challenge for the Premier League title this season
by The Sport Review staffJason McAteer says Chelsea FC aren’t Premier League title contenders this season.
Chelsea FC have earned plenty of plaudits so far this term for their entertaining football under club legend Frank Lampard.
The retired England midfielder took over the reins of the west London side from Maurizio Sarri in the summer.
The 41-year-old has placed his faith in youth at Chelsea FC, giving the likes of Tammy Abraham, Mason Mount and Fikayo Tomori the chance to shine.
Chelsea FC are on a six-game winning run in the Premier League and have hoisted themselves about Manchester City into third position.
Lampard’s men are level on points with second-placed Leicester City but the chasing pack find themselves eight points adrift of leaders Liverpool FC.
Former Liverpool FC midfielder McAteer doesn’t envisage Chelsea FC or Leicester mounting a sustained title challenge this season.
“I still think there will be a title race and it will be between Liverpool and Man City,” McAteer told the Racing Post, as quoted by the Daily Express.
“What Brendan Rodgers is doing at Leicester is outstanding and the job Frank Lampard is doing at Chelsea is probably even more impressive.
“I remember speaking to Frank when Chelsea and Liverpool played the Super Cup in Istanbul and you could hear his concerns.
“Where were the goals going to come from? Could Mason Mount do for Chelsea what he had done for Derby? Would he miss Antonio Rudiger? But he and his players have answered all those questions and more.
“I’m a big fan of Frank and think Chelsea can continue to improve but they aren’t title contenders this season.
“Teams such as Chelsea and Leicester could easily go on a run of back-to-back losses, or picking up just a couple of draws in three matches, and that can lose you serious ground given the high standard set by Liverpool and City.”
Chelsea FC were 2-0 winners against Crystal Palace last time out to extend their winning run to six games.
The Blues have beaten Brighton, Southampton, Newcastle United, Burnley, Watford and Palace during their run.
However, Lampard’s side will take on defending Premier League champions Manchester City at The Etihad on Saturday.
The Blues lost 2-1 to Liverpool FC at Stamford Bridge back in September despite a valiant performance.


This sample shows how to copy the worksheets from an existing workbook into the current workbook.
Select an Excel workbook to copy its worksheets into the current workbook.


{: .-two-column}
| Restaurant | Online order | Phone |
|---|---|---|
| Army Navy | armynavy.com.ph | 331-3131 |
| Burger King | burgerkingdelivery.com.ph | #2-22-22 |
| KFC | kfc.com.ph | 887-8888 |
| Kenny Rogers | kennys.com.ph | 555-9000 |
| McDonald's | mcdonalds.com.ph | 8-6236 |
| Pancake House | pancakehouse.com.ph | 7-9000 |
| Wendy's | wendys.com.ph | 533-3333 |
{: .-bold-first.-headers.-no-wrap}
| Restaurant | Online order | Phone |
|---|---|---|
| Angel's Pizza | angelspizza.com.ph | 922-2222 |
| Domino's | dominospizza.ph | 997-3030 |
| Greenwich | greenwichdelivery.com | 5-5555 |
| Papa John's | papajohns.com.ph | 887-7272 |
| Pizza Hut | pizzahut.com.ph | 911-1111 |
| Shakey's | shakeyspizza.ph | 77-7777 |
| Yellow Cab | yellowcabpizza.com | 789-9999 |
{: .-bold-first.-headers.-no-wrap}
| Restaurant | Online order | Phone |
|---|---|---|
| Bonchon | bonchon.com.ph (menu) | 633-1818 |
| Chowking | chowkingdelivery.com | 9-8888 |
| North Park | northparkdelivery.com | 7-3737 |
| Yoshinoya | yoshinoya.ph | 288-2888 |
{: .-bold-first.-headers.-no-wrap}
| Restaurant | Online order | Phone |
|---|---|---|
| Amber's | amber.com.ph | 884-8888 |
| Goldilock's | goldilocksdelivery.com.ph | 888-1-999 |
| Jollibee | jollibeedelivery.com | #8-7000 |
| Mang Inasal | manginasal.com (menu) | 733-1111 |
| Max's | maxschicken.com | 7-9000 |
{: .-bold-first.-headers.-no-wrap}
| Restaurant | Online order | Phone |
|---|---|---|
| Krispy Kreme | now.krispykreme.com.ph | 7-9000 |
| Red Ribbon | redribbononlinestore.com | 8-7777 |
{: .-bold-first.-headers.-no-wrap}
Hint: you can get to this page via devhints.io/gutom 🍅🍟


[§302A-1120] Public library system; board control. The board, through the state librarian, shall have direct control of the public library system, but not including school libraries. The board may adopt rules under chapter 91 for the purpose of this section. [L 1996, c 89, pt of §2]