| Contents | Previous | Next |
Graphics2D
extends
java.awt.Graphics
to provide more
sophisticated control over the presentation of shapes, text, and
images. The Java 2D rendering process is controlled through
the Graphics2D
object and its state
attributes.
The Graphics2D
state
attributes, such as line styles and transformations, are applied to
graphic objects when they are rendered. The collection of state
attributes associated with a Graphics2D
is referred to as the Graphics2D
context. To render text, shapes, or images, you
set up the Graphics2D
context and then
call one of the Graphics2D
rendering
methods, such as draw
or fill
.
The following tables list the interfaces and
classes used in conjunction with the Graphics2D
context, including the classes that
represent state attributes. Most of these classes are part of the
java.awt
package.
| Interface | Description |
|---|---|
Composite |
Defines methods to compose a draw primitive with the underlying
graphics area. Implemented by AlphaComposite . |
CompositeContext |
Defines the encapsulated and optimized environment for a composite operation. Used by programmers implementing custom compositing rules. |
Paint |
Extends: Transparency Defines colors for a
draw or fill operation. Implemented by
Color , GradientPaint and
TexturePaint . |
PaintContext |
Defines the encapsulated and optimized environment for a paint operation. Used by programmers implementing custom paint operations. |
Stroke |
Generates a Shape that encloses the outline of the
Shape to be rendered. Implemented by
BasicStroke . |
| Class | Description |
|---|---|
AffineTransform (java.awt.geom) |
Represents a 2D affine transform, which performs a linear mapping from 2D coordinates to other 2D coordinates. |
AlphaComposite |
Implements: Composite Implements basic alpha
composite rules for shapes, text, and images. |
BasicStroke |
Implements: Stroke Defines the “pen
style” to be applied to the outline of a Shape . |
| Color | Implements: Paint Defines a solid color fill for a
Shape . |
GradientPaint |
Implements: Paint Defines a linear color gradient
fill pattern for a Shape . This fill pattern changes
from color C1 at point P1 to color C2 at point P2. |
Graphics2D |
Extends: Graphics Fundamental class for 2D
rendering. Extends the original java.awt.Graphics
class. |
TexturePaint |
Implements: Paint Defines a texture or pattern
fill for a Shape . The texture or pattern is generated
from a BufferedImage . |
To render a graphic object using the Java
2D API, you set up the Graphics2D
context and pass the graphic object to one of the Graphics2D
rendering methods.
You can modify the state attributes that form the
Graphics2D
context to:
Graphics2D
defines
several methods for adding and changing attributes in the graphics
context. Most of these methods take an object that represents a
particular attribute, such as a Paint
or
Stroke
object.
The Graphics2D
context
holds references to these attribute
objects: they are not cloned. If you alter an attribute object that
is part of the Graphics2D
context, you
need to call the appropriate set
method
to notify the context. Modifying an attribute object during a
rendering operation will cause unpredictable and possibly unstable
behavior.
When a graphic object is rendered, the geometry, image, and attribute information are combined to calculate which pixel values must be changed on the display.
The rendering process for a Shape
can be broken down into four steps:
Shape
is to be stroked, the
Stroke
attribute in the Graphics2D
context is used to generate a new Shape
that
encompasses the stroked path.Shape
’s
path are transformed from user space into device space according to
the transform attribute in the Graphics2D
context.Shape
’s path is clipped
using the clip attribute in the Graphics2D
context.Shape
, if any, is
filled using the Paint
and Composite
attributes in the Graphics2D
context.Rendering text is similar to rendering a
Shape
, since the text is rendered as
individual glyphs and each glyph is a Shape
. The only difference is that the Java 2D API
must determine what Font
to apply to the
text and get the appropriate glyphs from the Font
before rendering.
Images are handled differently, transformations
and clipping operations are performed on the image’s bounding
box. The color information is taken from the image itself and its
alpha channel is used in conjunction with the current Composite
attribute when the image pixels are
composited onto the rendering surface.
The Java 2D API lets you indicate whether you want
objects to be rendered as quickly as possible, or whether you
prefer that the rendering quality be as high as possible. Your
preferences are specified as hints through the RenderingHints
attribute in the Graphics2D
context. Not all platforms support
modification of the rendering mode so specifying rendering hints
does not guarantee that they will be used.
The RenderingHints
class supports the following types of hints:
To set or change the RenderingHints
attribute in the Graphics2D
context, you call setRenderingHints
. When a hint is set to default,
the platform rendering default is used is used.
Antialiasing
When graphics primitives are rendered on raster-graphics display devices, their edges can appear jagged because of aliasing. Arcs and diagonal lines take on a jagged appearance because they are approximated by turning on the pixels that are closest to the path of the line or curve. This is particularly noticeable on low-resolution devices, where the jagged edges appear in stark contrast to the smooth edges of horizontal or vertical lines.
Antialiasing is a technique used to render objects with smoother-appearing edges. Instead of simply turning on the pixel that is closest to the line or curve, the intensity of surrounding pixels is set in proportion to the amount of area covered by the geometry being rendered. This softens the edges and spreads the on-off transition over multiple pixels. However, antialiasing requires additional computing resources and can reduce rendering speed
.
Stroking a Shape
such
as a GeneralPath
object is equivalent to
running a logical pen along the segments of the GeneralPath
. The Graphics2D
Stroke
attribute defines the characteristics of the mark drawn by the
pen.
A BasicStroke
object is
used to define the stroke attributes for a Graphics2D
context. BasicStroke
defines characteristics such as the line
width, endcap style, segment join-style, and the dashing pattern.
To set or change the Stroke
attribute in
the Graphics2D
context, you call
setStroke
.
For example, the first image in Figure 2-3 uses the miter join-style; the second image uses a round join-style, a round endcap style, and a dashing pattern.
The Graphics2D
rendering methods that use the Stroke
attribute are draw
, drawArc
, drawLine
,
drawOval
, drawPolygon
, drawPolyline
, drawRect
,
and drawRoundRect
.When one of these
methods is called, the outline of the specified Shape
is rendered. The Stroke
attribute defines the line characteristics
and the Paint
attribute defines the
color or pattern of the mark drawn by the pen.
For example, when draw(myRectangle)
is called:
Stroke
is applied to the
rectangle’s outline.Shape
object.Paint
is applied to the pixels that lie within
the contour of the outline Shape
.This process is illustrated in Figure 2-4:
The fill attribute in the Graphics2D
context is represented by a Paint
object. You add a Paint
to the Graphics2D
context by calling setPaint
.
When a Shape
or glyph
is drawn (Graphics2D.draw
, Graphics2D.drawString
), the Paint
is applied to all of the pixels that lie
inside of the Shape
that represents the
object’s stroked outline. When a Shape
is filled (Graphics2D.fill
), the Paint
is applied to all of the pixels that lie
within the Shape
’s
contour.
Simple solid color fills can be set with the
setColor
method. Color
is the simplest implementation of the
Paint
interface.
To fill Shapes
with
more complex paint styles such as gradients and textures, you use
the Java 2D Paint
classes GradientPaint
and TexturePaint
. These classes eliminate the
time-consuming task of creating complex fills using simple
solid-color paints. Figure 2-5 illustrates two fills
that could easily be defined by GradientPaint
and TexturePaint
.
When fill
is called to
render a Shape
, the system:
Shape
.Paint
object.Batch Processing
To streamline the processing of pixels, the Java 2D API processes them in batches. A batch can be either a contiguous set of pixels on a given scanline or a block of pixels. This batch processing is done in two steps:
Paint
object’s
createContext
method is called to create
a PaintContext
. The PaintContext
stores the contextual information about
the current rendering operation and the information necessary to
generate the colors. The createContext
method is passed the bounding boxes of the graphics object being
filled in user space and in device space, the ColorModel
in which the colors should be generated,
and the transform used to map user space into device space. The
ColorModel
is treated as a hint because
not all Paint
objects can support an
arbitrary ColorModel
. (For more
information about ColorModels
, see
“Color”.”)getColorModel
method is called to get the
ColorModel
of the generated paint color from the
PaintContext
.The getRaster
method is then called repeatedly to
get the Raster
that contains the actual color data for
each batch. This information is passed to the next stage in the
rendering pipeline, which draws the generated color using the
current Composite
object.
A clipping path
identifies the portion of a Shape
or
Image
that needs to be rendered. When a clipping path
is part of the Graphics2D
context, only those parts of
a Shape
or Image
that lie within the path
are rendered.
To add a clipping path to the Graphics2D
context,
you call setClip
. Any Shape
can be used
to define the clipping path.
To change the clipping path, you can either use
setClip
to specify a new path or call
clip
to change the clipping path to the intersection
of the old clipping path and a new Shape
.
The Graphics2D
context contains a transform that is
used to transform objects from user space to device space during
rendering. To perform additional transformations, such as rotation
or scaling, you can add other transforms to the
Graphics2D
context. These additional transforms become
part of the pipeline of transformations applied during
rendering.
Graphics2D
provides several different ways to
modify the transform in the Graphics2D
context. The
simplest is to call one of the Graphics2D
transformation methods: rotate
, scale
,
shear
, or translate
. You specify the
characteristics of the transform that you want to be applied during
rendering, and Graphics2D
automatically makes the
appropriate changes.
You can also explicitly concatenate an
AffineTransform
with the current
Graphics2D
transform. An AffineTransform
performs a linear transformation such as translation, scaling,
rotation, or shearing on a set of graphics primitives. When a
transform is concatenated with an existing transform, the last
transform specified is the first to be applied. To
concatenate a transform with the current transform, you pass an
AffineTransform
to
Graphics2D.transform
.
The Graphics2D
class also contains a
setTransform
method, but this method should never be
used to concatenate another coordinate transform onto of an
existing transform. The setTransform
method overwrites
the Graphics2D
object’s current transform, which
is needed for other purposes, such as:
JComponent
at non-zero translation from
its parent’s originGraphics2D
object might want to transform the
rendering for effect .The setTransform
method is intended for setting the
Graphics2D
object back to the original transform after
rendering the transformed graphics, text or images:
Graphics2D
also provides a version of
drawImage
that takes an AffineTransform
as a parameter. This enables you to apply a transformation to an
image object when it is drawn without permanently modifying the
transformation pipeline. The image is drawn as if you had
concatenated the transform with the current transform in the
Graphics2D
context.
Affine Transforms
The Java 2D API provides one transform class,
AffineTransform
. AffineTransforms
are
used to transform text, shapes, and images when they are rendered.
You can also apply transforms to Font
objects to
create new font derivations, as discussed in “Creating Font Derivations”.
An affine transformation performs a linear transformation on a set of graphics primitives. It always transforms straight lines into straight lines and parallel lines into parallel lines; however, the distance between points and the angles between nonparallel lines might be altered.
Affine transformations are based on two-dimensional matrices of the following form:
where and
Transforms can be combined, effectively creating a
series or pipeline of transformations
that can be applied to an object. This combination is referred to
as concatenation. When a transform is
concatenated with an existing transform, such as with AffineTransform.concatenate
, the last transform
specified is the first to be applied. A
transform can also be pre-concatenated
with an existing transform. In this case, the last transform
specified is the last to be applied.
Pre-concatenation is used to perform
transformations relative to device space instead of user space. For
example, you could use AffineTransform.preConcatenate
to perform a
translation relative to absolute pixel space.
AffineTransform
provides a set of convenience methods for constructing AffineTransform
objects:
getTranslateInstance
getRotateInstance
getScaleInstance
getShearInstance
To use these methods, you specify the
characteristics of the transform you want to create and
AffineTransform
generates the
appropriate transform matrix. You can also construct an
AffineTransform
by directly specifying
the elements of the transformation matrix.
When two graphic objects overlap, it is necessary to determine what colors to render the overlapping pixels. For example, if a red rectangle and a blue rectangle overlap, the pixels that they share could be rendered red, blue, or some combination of the two. The color of the pixels in the overlapping area will determine which rectangle appears to be on top and how transparent it looks. The process of determining what color to render pixels shared by overlapping objects is called compositing.
Two interfaces form the basis of the Java 2D
compositing model: Composite
and
CompositeContext
.
To specify the compositing style that should be
used, you add an AlphaComposite
object
to the Graphics2D
context by calling
setComposite
. AlphaComposite
, an implementation of the
Composite
interface, supports a number
of different compositing styles. Instances of this class embody a
compositing rule that describes how to blend a new color with an
existing one.
One of the most commonly used compositing rules in
the AlphaComposite
class is SRC_OVER,
which indicates that the new color (the source color) should be
blended over the existing color (the destination color).
| AlphaComposite Composition Rule | Description |
|---|---|
| CLEAR | Clear |
| DEST_IN | Destination In |
| DEST_OUT | Destination Out |
| DEST_OVER | Destination Over |
| SRC | Source |
| SRC_IN | Source In |
| SRC_OUT | Source Out |
| SRC_OVER | Source Over |
A color’s alpha
value is a measure of its transparency: it indicates, as a
percentage, how much of a previously rendered color should show
through when colors overlap. Opaque colors (alpha=1.0
) don’t allow any of the underlying
color to show through, while transparent colors (alpha=0.0
) let all of it show through.
When text and Shapes
are rendered, the alpha value is derived from the Paint
attribute in the Graphics2D
context. When Shapes
and text are antialiased, the alpha value
from the Paint
in the Graphics2D
context is combined with pixel coverage
information from the rasterized path. Images maintain their own
alpha information—see “Transparency and Images” for more information.
When you construct an AlphaComposite
object, you can specify an additional
alpha value. When you add this AlphaComposite
object to the Graphics2D
context, this extra alpha value increases
the transparency of any graphic objects that are rendered—the
alpha value of each graphic object is multiplied by the
AlphaComposite
’s alpha value.
Images can carry transparency information for each
pixel in the image. This information, called an alpha channel, is used in conjunction with the
Composite
object in the Graphics2D
context to blend the image with existing
drawings.
For example, Figure 2-6 contains three images
with different transparency information. In each case, the image is
displayed over a blue rectangle. This example assumes that the
Graphics2D
context contains an
AlphaComposite
object that uses SRC_OVER
as the compositing operation.
In the first image, all of the pixels are either fully opaque (the dog’s body) or fully transparent (the background). This effect is often used on Web pages. In the second image, all of the pixels in the dog’s body are rendered using a uniform, non-opaque alpha value, allowing the blue background to show through. In the third image, the pixels around the dogs face are fully opaque (alpha=1.0), but as the distance from its face increases, the alpha values for the pixels decrease.
To configure the Graphics2D
context for rendering, you use the
Graphics2D
set methods to specify
attributes such as the RenderingHints
,
Stroke
, Paint
, clipping path, Composite
, and Transform
.
A RenderingHints
object
encapsulates all of your preferences concerning how an object is
rendered. To set the rendering hints in the Graphics2D
context, you create a RenderingHints
object and pass it into Graphics2D.setRenderingHints
.
Setting a rendering hint does not guarantee that a particular rendering algorithm will be used: not all platforms support modification of the rendering mode.
In the following example, antialiasing is enabled and the rendering preference is set to quality:
qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHints(qualityHints);
A BasicStroke
defines
the characteristics applied to a Shape
’s outline, including its width and
dashing pattern, how line segments are joined together, and the
decoration (if any) applied to the end of a line. To set the stroke
attributes in the Graphics2D
context,
you create a BasicStroke
object and pass
it into setStroke
.
To set the stroke width, you create a BasicStroke
object with the desired width and call
setStroke
.
In the following example, the stroke width is set to twelve points and the defaults are used for the join and endcap decorations:
To set the join and endcap styles, you create a
BasicStroke
object with the desired
attributes.
In the following example, the stroke width is set to twelve points and the round join and endcap styles are used instead of the defaults:
roundStroke = new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); g2.setStroke(roundStroke);
Complex dashing patterns can easily be defined
with a BasicStroke
object. When you
create a BasicStroke
object, you can
specify two parameters that control the dashing pattern:
dash
—an array that represents the dashing
pattern. Alternating elements in the array represent the dash size
and the size of the space between dashes. Element 0 represents the
first dash, element 1 represents the first space.dash_phase
—an offset that defines where the
dashing pattern starts.In the following example, two different dashing patterns are applied to a line. In the first, the size of the dashes and the space between them is constant. The second dashing pattern is more complex, using a six-element array to define the dashing pattern.
float dash1[] = {10.0f}; BasicStroke bs = new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash1, 0.0f); g2.setStroke(bs); Line2D line = new Line2D.Float(20.0f, 10.0f, 100.0f, 10.0f); g2.draw(line); float[] dash2 = {6.0f, 4.0f, 2.0f, 4.0f, 2.0f, 4.0f}; bs = new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash2, 0.0f); g2.setStroke(bs); g2.draw(line);
Both dashing patterns use a dash phase of zero, causing the dashes to be drawn starting at the beginning of the dashing pattern. The two dashing patterns are shown in Figure Figure 2-7
.
The Paint
attribute in
the Graphics2D
context determines the
fill color or pattern that is used when text and Shapes
are rendered.
The GradientPaint
class
provides an easy way to fill a shape with a gradient of one color
to another. When you create a GradientPaint
, you specify a beginning position and
color, and an ending position and color. The fill color changes
proportionally from one color to the other along the line
connecting the two positions, as shown in Figure 2-8.
In the third star in Figure 2-8, both points lie within the shape. All of the points along the gradient line extending beyond P1 take the beginning color, and the points along the gradient line extending beyond P2 take the ending color.
To fill a shape with a gradient of one color to another:
GradientPaint
object.Graphics2D.setPaint.
Shape
.Graphics2D.fill(shape)
.In the following example, a rectangle is filled with a blue-green gradient.
GradientPaint gp = new GradientPaint(50.0f, 50.0f, Color.blue 50.0f, 250.0f, Color.green); g2.setPaint(gp); g2.fillRect(50, 50, 200, 200);
The TexturePaint
class
provides an easy way to fill a shape with a repeating pattern. When
you create a TexturePaint
, you specify a
BufferedImage
to use as the pattern. You
also pass the constructor a rectangle to define the repetition
frequency of the pattern, as shown in Figure 2-9.
To fill a shape with a texture:
TexturePaint
object.Graphics2D.setPaint.
Shape
.Graphics2D.fill(shape)
.In the following example, a rectangle is filled with a simple texture created from a buffered image.
// Create a buffered image texture patch of size 5x5 BufferedImage bi = new BufferedImage(5, 5, BufferedImage.TYPE_INT_RGB); Graphics2D big = bi.createGraphics(); // Render into the BufferedImage graphics to create the texture big.setColor(Color.green); big.fillRect(0,0,5,5); big.setColor(Color.lightGray); big.fillOval(0,0,5,5); // Create a texture paint from the buffered image Rectangle r = new Rectangle(0,0,5,5); TexturePaint tp = new TexturePaint(bi,r,TexturePaint.NEAREST_NEIGHBOR); // Add the texture paint to the graphics context. g2.setPaint(tp); // Create and render a rectangle filled with the texture. g2.fillRect(0,0,200,200); }
To define a clipping path:
Shape
that represents the area you want
to render.Graphics2D.setClip
to use the shape as the
clipping path for the Graphics2D
context.To shrink the clipping path:
Shape
that intersects the current
clipping path.clip
to change the clipping path to the
intersection of the current clipping path and the new
Shape
.In the following example, a clipping path is
created from an ellipse and then modified by calling clip
.
public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; // The width and height of the canvas int w = getSize().width; int h = getSize().height; // Create an ellipse and use it as the clipping path Ellipse2D e = new Ellipse2D.Float(w/4.0f,h/4.0f, w/2.0f,h/2.0f); g2.setClip(e); // Fill the canvas. Only the area within the clip is rendered g2.setColor(Color.cyan); g2.fillRect(0,0,w,h); // Change the clipping path, setting it to the intersection of // the current clip and a new rectangle. Rectangle r = new Rectangle(w/4+10,h/4+10,w/2-20,h/2-20); g2.clip(r); // Fill the canvas. Only the area within the new clip // is rendered g2.setColor(Color.magenta); g2.fillRect(0,0,w,h); }
To transform a Shape,
text string, or Image
you add a new
AffineTransform
to the transformation
pipeline in the Graphics2D
context
before rendering. The transformation is applied when the graphic
object is rendered.
For example, to draw a rectangle that is rotated 45 degrees:
Graphics2D
transform before
performing any transformations. Always call
getTransform
on the Graphics2D
before
adding a transform to the graphics context because the graphics
context might already have a transform that is needed for other
reasons, such as positioning Swing and lightweight components
within a window.AffineTransform.
getRotateInstance
.Graphics2D.transform
to add the new transform
to the transformation pipeline. Never use the
setTransform
method to add a new coordinate transform
because setTransform
will overwrite the current
transform in the graphics context.Rectangle2D.Float
object.Graphics2D.draw
to render the rectangle.Graphics2D
back to the original
transform that you saved in Step 1 by calling
setTransform
with the original transform.In the following example, an instance of
AffineTransform
is used to rotate a
rectangle 45 degrees when it is rendered.
AffineTransform aT = g2.getTransform();Rectangle2D rect = new Rectangle2D.Float(1.0,1.0,2.0,3.0); AffineTransform rotate45 = AffineTransform.getRotateInstance(Math.PI/4.0,0.0,0.0) g2.transform(rotate45); g2.draw(rect);g2.setTransform(aT);
In this example, an AffineTransform
is used to rotate a text string
around a center point:
// Define the rendering transform AffineTransform at = new AffineTransform(); // Apply a translation transform to make room for the // rotated text. at.setToTranslation(400.0, 400.0); g2.transform(at); // Create a rotation transform to rotate the text at.setToRotation(Math.PI / 2.0); // Render four copies of the string “Java” at 90 degree angles for (int i = 0; i < 4; i++) { g2.drawString(“Java”, 0.0f, 0.0f); g2.transform(at); }
You can transform an image in the same
way—the transform in the Graphics2D
context is applied during rendering
regardless of the type of graphic object being rendered.
To apply a transform to an image without changing the transform in the Graphics2D
context, you can pass an AffineTransform
to drawImage
:
AffineTransform rotate45 = AffineTransform.getRotateInstance(Math.PI/4.0,0.0,0.0) g2.drawImage(myImage, rotate45);
Transforms can also be applied to a Font
to create a modified version of the
Font
, for more information see “Creating Font Derivations”.
An AlphaComposite
encapsulates composition rules that determine how colors should be
rendered when one object overlaps another. To specify the
composition style for the Graphics2D
context, you create an AlphaComposite
and pass it into setComposite
. The most
commonly used is composition style is SRC_OVER
.
The SRC_OVER
compositing rule composites the source pixel over the destination
pixel such that the shared pixel takes the color of the source
pixel. For example, if you render a blue rectangle and then render
a red rectangle that partially overlaps it, the overlapping area
will be red. In other words, the object that is rendered last will
appear to be on top.
To use the SRC_OVER
composition rule:
AlphaComposite
object by calling
getInstance
and specifying the SRC_OVER
rule.AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER);
setComposite
to add the
AlphaComposite
object to the Graphics2D
context.Once the composite object is set, overlapping objects will be rendered using the specified composition rule.
AlphaComposite
allows
you to specify an additional constant alpha value that is
multiplied with the alpha of the source pixels to increase
transparency.
For example, to create an AlphaComposite
object that renders the source object
50% transparent, specify an alpha of .5:
In the following example, a source over alpha composite object is created with an alpha of .5 and added to the graphics context, causing subsequent shapes to be rendered 50% transparent.
public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setColor(Color.red); g2.translate(100,50); // radians=degree * pie / 180 g2.rotate((45*java.lang.Math.PI)/180); g2.fillRect(0,0,100,100); g2.setTransform(new AffineTransform()); // set to identity // Create a new alpha composite AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f); g2.setComposite(ac); g2.setColor(Color.green); g2.fillRect(50,0,100,100); g2.setColor(Color.blue); g2.fillRect(125,75,100,100); g2.setColor(Color.yellow); g2.fillRect(50,125,100,100); g2.setColor(Color.pink); g2.fillRect(-25,75,100,100); }
Graphics2D
provides rendering methods
for Shapes
, Text
, and
Images
:
draw
—strokes a Shape
’s
path using the Stroke
and Paint
objects
in the Graphics2D
context.fill
—fills a Shape
using the
Paint
in the Graphics2D
context.drawString
—renders the specified text string
using the Paint
in the Graphics2D
context.drawImage
—renders the specified image.To stroke and fill a shape, you must call both the
draw
and fill
methods.
Graphics2D
also
supports the draw and fill methods from previous versions of the
JDK software, such as drawOval
and
fillRect
.
The outline of any Shape
can be rendered with the Graphics2D.draw
method. The draw methods from
previous versions of the JDK software are also supported:
drawLine
, drawRect
, drawRoundRect
,
drawOval
, drawArc
, drawPolyline
,
drawPolygon
, draw3DRect
.
When a Shape
is drawn,
its path is stroked with the Stroke
object in the Graphics2D
context. (See
“Stroke Attributes” for more information). By setting an appropriate
BasicStroke
object in the Graphics2D
context, you can draw lines of any width
or pattern. The BasicStroke
object also
defines the line’s endcap and join attributes.
To render shape’s outline:
BasicStroke
objectGraphics2D.setStroke
Shape
.Graphics2D.draw(shape)
.In the following example, a GeneralPath
object is used to define a star and a
BasicStroke
object is added to the
Graphics2D
context to define the
star’s line with and join attributes.
public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; // create and set the stroke g2.setStroke(new BasicStroke(4.0f)); // Create a star using a general path object GeneralPath p = new GeneralPath(GeneralPath.NON_ZERO); p.moveTo(- 100.0f, - 25.0f); p.lineTo(+ 100.0f, - 25.0f); p.lineTo(- 50.0f, + 100.0f); p.lineTo(+ 0.0f, - 100.0f); p.lineTo(+ 50.0f, + 100.0f); p.closePath(); // translate origin towards center of canvas g2.translate(100.0f, 100.0f); // render the star's path g2.draw(p); }
The Graphics2D.fill
method can be used to fill any
Shape
. When a Shape
is filled, the area within its path is
rendered with the Graphics2D
context’s current Paint
attribute—a Color
, TexturePaint
, or GradientPaint
.
The fill methods from previous versions of the JDK
software are also supported: fillRect
,
fill3DRect
, fillRoundRect
, fillOval
,
fillArc
, fillPolygon
, clearRect
.
To fill a Shape
:
Graphics2D.setColor
or
Graphics2D.setPaint.
Shape
.Graphics2D.fill
to render the
Shape
.In the following example, setColor
is called to define a green fill for a
Rectangle2D
.
public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setPaint(Color.green); Rectangle2D r2 = new Rectangle2D.Float(25,25,150,150); g2.fill(r2); }
To render a text string, you call Graphics2D.drawString
, passing in the string that
you want to render. For more information about rendering text and
selecting fonts, see “Fonts
and Text Layout”.
To render an Image
, you
create the Image
and call Graphics2D.drawImage
. For more information about
processing and rendering images, see “Imaging”.
You can create an entirely new type of compositing
operation by implementing the Composite
and CompositeContext
interfaces. A
Composite
object provides a CompositeContext
object that actually holds the
state and performs the compositing work. Multiple CompositeContext
objects can be created from one
Composite
object to maintain the
separate states in a multithreaded environment.
The Java 2D API supports three different multi-screen configurations that can possibly be configured by a native platform:
The Java 2D API enables you to create Frame
, JFrame
,
Window
, or JWindow
objects with a GraphicsConfiguration
to target a screen device for
rendering.
In all three configurations, each screen device is
represented by a GraphicsDevice.
A
GraphicsDevice
can have multiple
GraphicsConfiguration
objects associated
with it.
When two or more screens are used to form a
virtual device, a virtual coordinate system that exists outside of
the physical screens is used to represent the virtual device. The
bounds of each GraphicsConfiguration
in
this multi-screen configuration are relative to the virtual
coordinate system. One screen in this environment is identified as
the primary screen, which is located at (0, 0) in the virtual
coordinate system. Depending on the location of the primary screen,
the virtual device might have negative coordinates, as shown in
Figure 2-10:
To determine if your environment is a virtual
device environment in which a Window
or
a Frame
can span two or more physical
screens, call getBounds
on each
GraphicsConfiguration
in your system and
check to see if the origin is something other than (0, 0). The
getBounds
method of a GraphicsConfiguration
returns a Rectangle
in the virtual coordinate system. So, if
any of the origins are not (0, 0), your environment is a virtual
device environment.
In a virtual device environment, the coordinates
of the GraphicsConfiguration
objects are
relative to the virtual coordinate system. So, you must use virtual
coordinates when calling the setLocation
method of a Frame
or Window
. For example, this code sample gets the
bounds of a GraphicsConfiguration
and
uses the bounds to set the location of a Frame
at (10, 10) relative to the origin of the
physical screen of the corresponding GraphicsConfiguration
.
Frame f = new Frame(GraphicsConfiguration gc); Rectangle bounds = gc.getBounds(); f.setLocation(10 + bounds.x, 10 + bounds.y);
If the bounds of the GraphicsConfiguration
are not taken into account,
the Frame
is displayed at (10, 10) on
the primary physical screen, which might be different from the
physical screen of the specified GraphicsConfiguration
.
The getBounds
method
can also be used to determine the bounds of the virtual device.
Call getBounds
on each GraphicsConfiguration
in your system. To determine
the bounds of the virtual device, calculate the union of all the
bounds. This technique is used in the following sample.
Rectangle virtualBounds = new Rectangle(); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for (int j = 0; j < gs.length; j++) { GraphicsDevice gd = gs[j]; GraphicsConfiguration[] gc = gd.getConfigurations(); for (int i = 0; i < gc.length; i++) { virtualBounds = virtualBounds.union(gc[i].getBounds()); } }
The following applet creates a JFrame
with every GraphicsConfiguration
of every GraphicsDevice
in the GraphicsEnvironment
. Each JFrame
displays a set of red, green and blue
stripes, the screen number, the GraphicsConfiguration
number and the bounds of the
GraphicsConfiguration.
import java.applet.Applet; import java.awt.*; import javax.swing.*; public class MultiFrameApplet extends Applet { public MultiFrameApplet() { main(null); } public static void main(String[] argv) { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for (int j = 0; j < gs.length; j++) { GraphicsDevice gd = gs[j]; GraphicsConfiguration[] gc = gd.getConfigurations(); for (int i=0; i < gc.length; i++) { JFrame f = new JFrame(gs[j].getDefaultConfiguration()); GCCanvas c = new GCCanvas(gc[i]); Rectangle gcBounds = gc[i].getBounds(); int xoffs = gcBounds.x; int yoffs = gcBounds.y; f.getContentPane().add(c); f.setTitle("Screen# "+Integer.toString(j)+", GC# "+Integer.toString(i)); f.setSize(300, 150); f.setLocation((i*50)+xoffs, (i*60)+yoffs); f.show(); } } } } class GCCanvas extends Canvas { GraphicsConfiguration gc; Rectangle bounds; public GCCanvas(GraphicsConfiguration gc) { super(gc); this.gc = gc; bounds = gc.getBounds(); } public Dimension getPreferredSize() { return new Dimension(300, 150); } public void paint(Graphics g) { g.setColor(Color.red); g.fillRect(0, 0, 100, 150); g.setColor(Color.green); g.fillRect(100, 0, 100, 150); g.setColor(Color.blue); g.fillRect(200, 0, 100, 150); g.setColor(Color.black); g.drawString("ScreenSize="+ Integer.toString(bounds.width)+ "X"+ Integer.toString(bounds.height), 10, 15); g.drawString(gc.toString(), 10, 30); } }
| Contents | Previous | Next |


In the Semantic Web, every object of interest has a URI, a unique identifier. These URIs can be resolved in order to look up more data about the object, for example its label in different languages.
This is exactly what qLabel does. These labels are then used to replace the text content of the annotated element, when so requested by the user.
One frequent issue with the approach sketched above is that resolving every single URI one after the other simply takes a lot of time and resources. qLabel provides a mechanism to register different loaders, and even three example loaders (for Wikidata, Freebase, and the fallback Semantic Web loader). These loaders can be implemented much more efficiently (e.g. the Wikidata and Freebase loaders cut down the number of web requests by an order of magnitude and more). They also don't require the rdfquery library, so that you don't have to parse RDF/XML in the browser, which could further reduce your footprint.
The qLabel library adds the $.qlabel
object that has the
following public interface.
Sets the language to lang
(which is a ISO 639 language code)
and changes the displayed text on the Website.
It will first gather all annotating URIs from all elements that have class
qlabel
, check if these URIs are already known,
load the unknown ones, and once they are all loaded, the text content of the
elements changes if a label in the requested language exists.
The function returns a promise
that will resolve once the
language has switched.
Returns the ISO 639 language code that was set last.
Sets the class name used to find the elements that should be translated.
The default class name is qlabel
Returns the class name used to find the elements that should be translated
which was set last or qlabel
if nothing was set.
Returns a label for the requested URI and language. If the URI is unknown,
or if there is no label for the specified language for the requested URI,
undefined
is returned.
Returns an object where the keys are the language codes and the values
are the labels, for the requested URI. If the URI is unknown,
undefined
will be returned.
Provide qLabel with a Label for the given URI and language. Now, the URI
is known (and will not be loaded when calling switchLanguage
).
setLabel
can be used to set the labels manually and not load
the labels for every user, and can thus safe resources.
The parameter is optional. URIs is a list of URIs for which labels
will be loaded. If they are already known, they will not be loaded.
If URIs is empty, all annotating URIs on elements with the class
qlabel
will be loaded.
The function returns a promise
that will be resolved
once the labels are loaded.
Returns an array with all URIs that are known.
Sets a loader. A loader consists of two functions, a tester
and a loader
.
The tester takes a single string and
returns a (possibly normalized) string if the loader is able to load the
given URI (and returns undefined
else).
The loader takes an array of strings that the loader will load.
The loader should use the setLabel
function to set all loaded
labels, and return a promise which will be resolved once the loader is finished.
There are three loaders already available: a Freebase loader, a Wikidata loader, and a generic Semantic Web loader using Linked Data principles.
Sets the Google Freebase API key to be used when calling Freebase.
Returns the previously set Google Freebase API key, or an empty string if none is set.
I am not particularly keen on maintaining qLabel. The library is Open Source and I am happy if someone wants to take over maintenance and further development.
A few open issues:


Measure height of the object
Mapillary 360 URL:
Open
(1) Measure Angle
(2) Measure Distance
(3) Get Height
Distance:
m
Angle:
deg
Height[m] = Distance * tan(Angle*π/180)
=
m


| Primordial germ cells |
Base excision repair and single-strand break repair. Thymine DNA deglycosylase (TDG) generates abasic sites for BER, after TET-dependent oxidation of 5mC to 5hmC and 5fC and 5caC during genome-wide demethylation
[40],
[41],
[42].
|
PARP2 SNP implicated in ANM
[58]
|
| ICL repair. Fanconi Anemia (
Fanca) together with Xpf-Ercc1 and Slx4 may remove interstrand crosslinks generated by reactive aldehydes
[48] and/or lipid peroxidation
[176].
|
FA is associated with hypogonadism and POI
[54],
[53]
|
|
XPF with POI
[177]
|
|
Atm-p21-p53 dependent checkpoint during compromised replication in
Fancm
[46].
|
ATM is associated with POI
[178]
|
|
Mcm9 mutants show primordial germ cell loss due to reduced proliferation, independently of Atm-Chek2-p21-p53
[179].
|
MCM9 variants associated with POI
[180],
[181]
|
| Extra spindle pole bodies 1 (separase) plays a critical role in maintenance of sister chromatid cohesion and genome stability in PGCs
[182].
|
|
|
Mad2l2 is required for PGCs development during epigentic reprogramming
[183].
|
|
|
Atrx/Rad54 knockout mice lead to loss of premeiotic germ cells
[184]
|
Atrx variant associated with ANM
[58]
|
| Nucleotide excision repair (
Csb and
Xpa) and
Fan1 are dispensible in mouse PGCs
[48].
|
CSB associated with POI
[177]
|
| Fetal oocytes |
Primary (fetal) oocytes deficient in synaptonemal complex and meiotic recombination genes have chromosomal defects leading to infertility. Reviewed in
[81].
|
Refer to
Table 3
|
|
Line-1 activity triggers fetal/postnatal oocyte attrition through DNA damage-driven apoptosis
[185].
|
|
Primordial follicles express
p53 and
p63 and respond to DNA damage by apoptosis via
Atm-
Chek2-
p53/p63 pathway
[186],
[187],
[188]
|
|
| Adult oocytes |
GV oocytes have a G2/M checkpoint regulated by PKA-WEE1/Cdc25B-Cdk1, which facilitates GV arrest upon DNA damage
[189]
|
|
| GV oocytes use the Spindle Assembly Checkpoint in response to DNA damage
[190],
[191].
|
| Gonocytes |
Gonocytes express
Bcl-x,
TP63 and respond to DNA damage by apoptosis
[192].
|
Refer to
Table 3
|
| Adult spermatocytes |
Spermatocytes deficient in Fanconi anemia, HR, MMR and synaptonemal complex genes show synaptic defects, pachytene arrest and DNA fragmentation leading to infertility. Reviewed in
[81],
[193].
|
Also see
Table 5
|
| Post-pachytene spermatocytes used the NHEJ pathway (Ku70/80) and
Ku70 mutation reduces testis size and affects spermatogenesis
[194]
|
| Rounds spermatids use Parp1-XRCC1 pathway to repair DNA damage
[195].
|
| Preimplantation-embryo |
Chek1 mediated zygotic checkpoint to monitor DNA lesions on paternal genome before entering mitosis
[196]
|
|
|
MMEJ and
NHEJ used predominantly to repair Cas9-mediated DSB
[24],
[25],
[26]
|
|
|
The Spindle Assembly Checkpoint is active in murine preimplantation embryos
[197].
|
|


A DB admin walks into a bar, and sees his friends split across two tables.
So he walks up to the tables, and asks, "May I join you?"


| AllMaximalCliquesBronKerbosch |
In computer science, the Bron–Kerbosch algorithm is an enumeration algorithm
for finding all maximal cliques in an undirected graph.
|
| ApproxGraphSearchZeng |
implementing subgraph and full-graph query methods following the
algorithms presented as pseudocode in
|
| ApproxGraphSearchZeng.Graph |
an undirected attributed graph
|
| ApproxGraphSearchZeng.Norm |
|
| ApproxGraphSearchZeng.Result |
|
| Betweenness |
"Betweenness" is an algorithm to find non-overlapping communities
within an unweighted, undirected network, and it does so by
finding the edges that are least likely to be inside a community.
|
| Betweenness.Results |
|
| Complement |
|
| CuthillMcKee |
The Reverse Cuthill-McKee (RCM) is an algorithm to reduce the bandwidth of a
symmetric matrix (remember that an adjacency matrix for an undirected graph
is symmetric).
|
| DegeneracyOrderingMatulaBeck |
In graph theory, a k-degenerate graph is an undirected graph in which every
subgraph has a vertex of degree at most k: that is, some vertex in the
subgraph touches k or fewer of the subgraph's edges.
|
| DegeneracyOrderingMatulaBeck.SBucketQueue |
|
| DegeneracyOrderingMatulaBeck.TBucketQueue |
|
| Dendogram |
encapsulates dendogram layers for each number of communities as
the graph is increasingly partitioned into larger numbers of
communities.
|
| Dendogram.DendogramLayer |
|
| DFS |
DFS
searches the full depth of a graph or subgraph when possible first then
backtracks to the unexplored edges and unexplored nodes repeating until
all nodes are visited.
|
| DFSNonRecursive |
DFS
searches the full depth of a graph or subgraph when possible first then
backtracks to the unexplored edges and unexplored nodes repeating until
all nodes are visited.
|
| FindAllBridgesDFS |
Find all bridges using DFS.
|
| GraphUtil |
miscellaneous graph methods.
|
| HierholzersEulerCircuit |
Hierholzer’s Algorithm to create a euler circuit from a directed graph.
|
| Laplacian |
|
| LongestPath |
In graph theory and theoretical computer science, the longest path problem
is the problem of finding a simple path of maximum length in a given graph.
|
| MaximalIndependentSets |
|
| Modularity |
Newman 2006, "Modularity and community structure in networks"
https://arxiv.org/pdf/physics/0602124.pdf
modularity is a graph quality function over possible divisions of a network.
|
| NewmanGMLParser |
rough reduced function parser built to read a few of the GML files
from http://www-personal.umich.edu/~mejn/netdata/
into a graph.
|
| NewmanGMLParser.GMLGraph |
|
| SetCover |
Given a set of elements {1,2,...,n} (called the universe)
and a collection S of m sets whose union equals the universe,
the set cover problem is to identify the smallest sub-collection of
S whose union equals the universe.
|
| StarStructure |
implementing a star structure and related methods following the
algorithms presented as pseudocode in
|
| StronglyConnectedComponents |
A strongly connected (a.k.a.
|
| StronglyConnectedComponents2 |
From pseudocode in "Introduction to Algorithms" by Cormen, Leiserson, Rivest, and Stein
(impl is Tarjan's algorithm).
|
| TopologicalSort |
From Cormen, Leiserson, Rivest, and Stein "Introduction to Algorithms",
Topological sort sorts a DAG (directed acyclic graph) by vertices such that
a directed edge uv to vertices u and v results in u before v in a linear
ordering.
|
| TransitiveClosure |
from Cormen, Leiserson, Rivest, and Stein "Intro to Algorithms"
The transitive closure of a graph is the set of pairs of nodes (u, v) such that
there is a path from u to v of length one or more.
|
| UnweightedGraphCommunityFinder |
|
| UnweightedGraphCommunityFinder.BestDivision |
|
| VertexCover |
A vertex cover is a subset of a graph's vertices which represents at
least one vertex from every edge in the full graph.
|


Introduction
Cloud Optimized GeoTIFF (COG) is a new way to produce data, enabling less duplication and innovative cloud-based workflows. If you are a provider of imagery and like what you see from Cloud Optimized GeoTIFF this guide can help you with how to provide your data as COG. For additional background see the Why COG? page.
COG Advantages for Imagery Providers
The main advantage to providing your data as Cloud Optimized GeoTIFF’s is to enable more cloud-centric workflows. Data on the cloud should not be copied many times, it should sit in one location and let everyone access from there. With COG this is much more likely, because a number of common geospatial workflows on the cloud can make use of it.
Using COG should actually save money. Download of data is one of the larger distribution costs for geospatial data, as cloud-hosting providers charge egress fees for any data leaving their network. COG-aware clients can download just the portion of the data they need, instead of larger files, so less bandwidth will often be consumed. Furthermore many users will be inclined to run their processing in the same cloud location as your data, as that allows the fastest access to the data. Most cloud providers don’t actually charge for bandwidth when the data is moving in the same zone, so you can save additional money due to that, especially if you encourage your users to run their processes and services in the same zone.
Enabling Cloud Optimized GeoTiff’s
In all likelihood GeoTIFF is already a data format that you make available to your users. Thankfully you don't need to make a fully new format - you just need to start formatting your existing GeoTIFF data in a COG compliant manner.
There are two main things to do to take advantage of Cloud Optimized GeoTIFF:- Format your data according to the COG best practices. GDAL is how the vast majority of data is created, and so likely you just have to tweak the parameters of your file creation. There are full details on the GDAL wiki, but the quick version of how to format your data is:
This will set the data structure properly to be able to be read by any COG-aware software.gdal_translate in.tif out.tif -co TILED=YES -co COPY_SRC_OVERVIEWS=YES -co COMPRESS=DEFLATE
- The other thing to do is to make your data available on a web server that supports HTTP range queries. By far the easiest way to do this is just by distributing the data on Amazon S3, Google Cloud Storage, or Azure. And most modern web servers will also work out of the box, so chances are this part will 'just work'. If you have trouble with it then get in touch. You can put most any authorization protocol you want on top of it, see the GDAL VSI docs for lots of details, and we hope to get a nicer guide to the options.


LONE STAR A film review by Steve Rhodes Copyright 1996 Steve Rhodes
I highly recommend this wonderful film that I saw recently at the press screening. The film starts locally this coming Friday (June 21) at the Camera One Cinema in San Jose.
RATING (0 TO ****): *** 1/2
LONE STAR is the latest film from the great writer and director John Sayles (THE BROTHER FROM ANOTHER PLANET, MATEWAN, EIGHT MEN OUT, CITY OF HOPE, PASSION FISH and THE SECRET OF ROAN INISH among others). Sayles's pictures are always bursting with humanity. The scripts are intelligent and his films are rich with talented actors. He manages to find excellent although usually lessor known actors to play even the most minor roles. LONE STAR is one of the high points of his body of work. Every member of the cast delivers a heartfelt performance.
LONE STAR has at its core a 40 year old murder mystery that rears its ugly head to confront and trouble the multiracial town of Eagle Pass in Rio County on the Texas and Mexican border. Although the solving of the mystery provides an effect glue to keep the story together, the movie is actually three parallel stories about the local history of people of Anglo, African and Mexican ancestry. These groups are even more fragmented into some that are soldiers and others that are illegal aliens.
As the story opens, two soldiers, Cliff (Stephen Mendillo) and Mikey (Stephen Lang), find a skull. When new Sheriff Sam Deeds (Chris Cooper) arrives, he is not sure what it means, reflecting, "No telling yet if there's been a crime, but this country's seen a fair amount of disagreements over the years."
The locals are not impressed with their sheriff. They say "he is all hat and no cattle." They still remember his father Buddy Deeds (Matthew McConaughey) who was beloved by all racial groups and believed to be the best sheriff there ever was. Sam has a limited view of his role in life declaring, "I'm just a jailer. I run a 60 room hotel with bars on the windows." As John Sayles says in the press kit, "Just as the legend of the Alamo has helped to define Texas, so has the legend of Buddy Deeds defined his son Sam."
The best thing Buddy did was run the racist, evil, and corrupt previous sheriff Charley Wadd (Kris Kristofferson) out of town and then get his position as sheriff of Rio County. Since Charley has never been heard of in 40 years and since the skull is about that old, the narrative drive in the movie surrounds whether there could have been foul play back then. This mystery works really well, but it is not the best part of the picture nor the centerpiece. All of the acting by all of the wonderful characters we get to meet is the reason to see the film.
The best performance is the reserved and lonely one by Chris Cooper as Sam. One bartender tells him, "I'm clever as the next guy." Sam looks at him real serious and says, "If the next guy is a redneck." Sam's ex-girlfriend from high school, Pilar Cruz, is played simply but effectively by Elizabeth Pena.  She detests illegal aliens and generally treats poor Mexican-Americans like dirt. As a one-dimensional bad guy, Kris Kristofferson is perfect.
The blacks in the story have two role models. One is Otis Payne (Ron Canada) who runs the local bar where the blacks have hung out for years. Canada is great as an old sage who is somehow connected to the mysteries from the past. His philosophy is "It's not like there's a line between the good people and the bad people. It is not like you're one or the other." One of my favorite philosophers from the show is an Indian who runs an obscure little shop on a dusty road. He tells Sam, "This stretch of road runs between nowhere and not much else."
Otis's grown up son Delmore is played by Joe Morton (THE BROTHER FROM ANOTHER PLANET, TERMINATOR 2: JUDGMENT DAY, OF MICE AND MEN, and SPEED among others). Delmore has just arrived as the leader of the military base near the town. Otis and he are estranged, and when they meet, Otis says of him contemptuously that he had heard that "Colonel Payne is a real hard case. A spit and polish man."
Sayles's script is naturally funny in a low key fashion. It is also full of poignancy. So many scenes are special, but two of my favorites are a slow dancing scene that is lovingly photographed by Stuart Dryburgh, and the other is of the abandoned drive-in theater where Sam and Pilar used to make out.
The wonderful music (Mason Daring) runs from twangy mysterious melodies to nostalgic Mexican songs. As a native Texan, I liked the way the accents were realistic. Too often filmmakers overdo Southern accents. Certainly some locals have thick accents, but not all. The sets (Dan Bishop) are typical Texas hokey right down to the gun stocks that are used as draft beer handles at the bar.
Perhaps my favorite technical aspect of the film is the editing, also by Sayles. Many scenes would move 40 years with just a pan and without any cuts. This was a perfect way to show how the present is just an extension of the past; they are one.
Finally, look for Frances McDormand, the star of FARGO, who plays Sam's ex-wife Bunny. She again demonstrates her wide range of acting talent. Here she is a hyperactive sports junkie of all things. What a change from her role in FARGO as a laid back pregnant detective.
LONE STAR runs a full 2:15, but given the time it spends delving into the lives of so many people and many racial communities, this feels short if anything. The film is rated R.  I thought it should have been PG-13. Perhaps they used the F word a few times, and I missed it. At any rate, I think it would be fine for kids 10 and up. I strongly recommend this wonderful, insightful, and heartwarming film to you and award it *** 1/2.
**** = One of the top few films of this or any year. A must see film. *** = Excellent show. Look for it. ** = Average movie. Kind of enjoyable. * = Poor show.  Totally unbearable.
REVIEW WRITTEN ON: June 7, 1996
Opinions expressed are mine and not meant to reflect my employer's.
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


The JSON below represents the stage configuration in its persisted state.
Note: Clicking "Update Stage" below will not save your changes to the server - it only updates the configuration within the browser, so you'll want to verify your changes and click "Save Changes" when you're ready.


//////////////////////////////////////////// // Bond Bridge RF/IR scanner and CQ Encoder. // // Copyright 2021 Amit Srivastava // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. ////////////////////////////////////////////
Bond IP Address:
Bond Token:
Request Url:
Hex Response:
CQ Response:


'He won every aerial duel' - the key battle from Notts County's defeat to Barrow
Magpies were beaten 3-0 by promotion-chasing Bluebirds
by Pareem Vara, Leigh CurtisNotts County were beaten 3-0 by Barrow this afternoon as the Magpies suffered defeat at Meadow Lane for the first time since August.
Here Pareem Vara looked at the duel between Dior Angus and Ben Turner and how it impacted a disappointing result.
There was an interesting battle throughout the game between former Premier League centre-half, Ben Turner and summer signing Dior Angus. Barrow started with a clear tactic, to use the pace of Angus to get in behind the County defender, which worked perfectly for Barrow’s second goal.
The game was swung just 13 minutes into the match after Barrow doubled their, thanks to an assist from Dior Angus. He ran in behind Turner and just beat the on-rushing Sam Slocombe to the ball before squaring it to John Rooney for a tap in.
Following the two quick Barrow goals, Turner used his experience and allowed the centre forward little space to manoeuvre and work in behind, winning every aerial battle as Barrow defender Connor Brown continued to look for Angus with the ball in-behind.
During a somewhat bleak and boring second half, it was more of the same from both players, both putting their very different set of skills against each other.
Angus did one have one last chance in the second just before he was substituted.
He found himself one-on-one with Slocombe after a superb pass from Rooney.
Slocombe made a great save to stop the initial shot but the ball seemed to be trickling into the net, before Turner got there to clear the ball off the line and prevent Angus scoring.
Barrow scored their third to round off a miserable performance at Meadow Lane from the Magpies who need to bounce back against Aldershot Town next week.


Daily Sales Projections
Add New Stand
Stand Name
Minimum Hourly Customers
Maximum Hourly Customers
Average Cookies Per Customer


Mail::Toaster::Ezmlm - a batch processing tool for ezmlm mailing lists
ezmlm.cgi -a [ add | remove | list ]
-a action - add, remove, list -d dir - ezmlm list directory -f file - file containing list of email addresses -v verbose - print verbose options
Ezmlm.cgi is a command line and CGI application that allows a domain administrator (ie<EMAIL_ADDRESS>to add, remove, and list batches of email addresses. You can use this utility to subscribe lists of email addresses, delete a list of addresses, or simply retrieve a list of subscribers.
some functions depend on Mail::Ezmlm; authentication depends on "vpopmail" (a perl extension)
If you need to run ezmlm.cgi suid, which is likely the case, then hacks to Mail::Ezmlm are required for the "list" function to work in taint mode. Also, for a perl script to run suid, you must have suidperl installed. Another (better) approach is to use Apache suexec instead of suidperl.
Creates a new Mail::Toaster::Ezmlm object.
use Mail::Toaster::Ezmlm; my $ez = Mail::Toaster::Ezmlm;
Authenticates a HTTP user against vpopmail to verify the user has permission to do what they're asking.
Check a directory and see if it's a directory and readable.
$ezmlm->dir_check(dir=>$dir);
return 0 if not, return 1 if OK.
Get a list of Ezmlm lists for a given mail directory. This is designed to work with vpopmail where all the list for example.com are in ~vpopmail/domains.
$ezmlm->lists_get("example.com");
Put the logo on the HTML page. Sets the URL from $conf.
$ezmlm->logo(conf=>$conf);
$conf is values from toaster.conf.
Example: $ezmlm->logo( web_logo_url => 'http://www.tnpi.net/images/head.jpg', web_log_alt => 'tnpi.net logo', );
Accepts input from HTTP requests, presents a HTML request form, and triggers actions based on input.
$ez->process_cgi();
Get input from the command line options and proceed accordingly.
Subcribe a user (or list of users) to a mailing list.
$ezmlm->subs_add( list => $list_name, list_dir => $list_dir, requested => $address_list );
Print out a list of subscribers to an Ezmlm mailing list.
$ezmlm->subs_list(list=>$list, dir=>$list_dir);
Matt Simerson<EMAIL_ADDRESS>None known. Report any to author.
The following are all man/perldoc pages:
Mail::Toaster Mail::Toaster::Conf toaster.conf toaster-watcher.conf
http://mail-toaster.org/
Copyright (c) 2005-2012, The Network People, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the The Network People, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.


Certificate Generator UI
Yayy 🎉Congratulations!!
Claim Certificate
Verify Certificate
Claim Certificate
Email address
WhatsApp last 10 digits
Certificate type
Select a type...
Participant
Organizer
Verify Certificate
Certificate ID
Certificate type
Select a type...
Participant
Organizer


Design for a cathering Kitchen In Lefke Cyprus.
Design for a Tech Start Up Which I happen to be a part of.
Flyer design for an African Food Restaurant in Cyprus.
Flyer Design for the All Christians Fellowship Lefke Cyprus
Photoshop Sketch made by me.
Design for a catering firm in lagos Nigeria.


We extend systems!
- repurpose strategic vortals
- reinvent dot-com communities
- evolve one-to-one e-business
- expedite strategic web services
- exploit sticky web-readiness
- generate extensible e-commerce
- recontextualize sticky interfaces
- e-enable robust partnerships
- disintermediate dynamic convergence


Test of sliders and meters (gauges)
Sliders
Sliders can be horizontal (first 3 rows) or vertical (fourth row).
The value is given above (or for vertical sliders, at left). It is formatted with C-like format, and the format string can include any unit. For each slider, the minimum (min) and maximum (max) values and the number of positions (n) can be specified. The initial value, if not equal to min, can be configured (row 2, and 4). A logarithmic variation can be configured (blue slider at row 3).
Callback functions can be configured to be called on slider change. There are two possible callbacks:
- fast_callback: the function is called as soon as the slider is moved (row 1: value with yellow background)
- slow_callback: the function is called only when the slider is released (row 1: value with blue background)
Meters
Several kinds of meters exist :
- Analog meters: round shape with a red needle. (row 1, 2 and 4 right).
- Digital meters: display only the value (row 1 and 3).
- Low Meter: the direction of the flow is given by moving triangles. The speed and shape of these triangles depend on the value (row 2)
Back to project page


this a pre formated text
this a new line
i'm text in a new line
i'm a horizontal line , im not used as i was before today the people uses borders


Walk in the footsteps of Neolithic ancestors at Stonehenge, a British icon with a history spanning 4,500 years. Decipher the mystery of the unique rock formation as you learn about the many theories surrounding it. Whether it was a religious site or a burial ground, it is definitely a masterpiece in engineering. The Simply Stonehenge tour offers plenty of time to explore The Stone Circle and exhibition about it, before returning to London mid-afternoon. Alternatively, choose one the tours below that visit several of England’s historic sites including Windsor Castle and Bath, with experienced tour guides and convenient coach travel to all destinations.
Combine your trip to Stonehenge with an excursion to Windsor Castle, which is said to be the Queen’s favourite residence. Explore the many reasons why from its rich royal history that reaches back to 1070 when William the Conqueror first built a castle on the site, to the lavishly decorated state apartments that feature paintings by Rubens, Van Dyck and Holbein. In addition to visiting Stonehenge and Windsor, some tour packages include trips to other iconic sites: trace the footsteps of famous students that have graced Oxford University, admire one of England’s finest Gothic cathedrals at Salisbury, or take a stroll around the picture-perfect village of Lacock.
London Zoo is the world's oldest scientific zoo.[6] It was opened in London on 27 April 1828,[7] and was originally intended to be used as a collection for scientific study. In 1831 or 1832 the animals of the Tower of London menagerie were transferred to the zoo's collection. It was eventually opened to the public in 1847.[6] Today it houses a collection of 698 species of animals, with 20,166 individuals, making it one of the largest collections in the United Kingdom.[8] The zoo is sometimes called Regent's Zoo.


Serialization
FakeQuipo is a global track-and-trace, product authentication and consumer engagement company that will protect over number of packages through its technology-enabled solutions. Our proven serialization capabilities have enabled large pharmaceutical companies
to meet different traceability requirements. We ensures the least amount of disruption to your production lines and provides end to end hardware solutions for packaging automation.
Track & Trace
FakeQuipo Track and Trace System ensures the visibility of drugs along the supply chain right from the time drug is manufactured till the drug is in the hands of a patient. This system helps in restricting counterfeited drugs from entering the supply
chain thus, preventing expired products sales. It creates a chronological chain of events using the standards mentioned above to enable complete supply chain visibility and historical reporting.
Product Authentication
FakeQuipo’s Product Authentication solution tackles the problem, coupled with incentives for verifying codes and access to health information for patients. The system helps in identifying the locations of possible counterfeit sellers, by providing geo-coordinates
as well as consumer phone number. The brand owners can use this data to raid the premises of these sellers, confiscate counterfeited products and initiate legal action against such sellers.
Patient Service Support
FakeQuipo solution is a scalable and flexible patient support services platform that has been proven to be effective in increasing adherence and patient compliance on long term chronic regimens while generating insights into patient behavior. We can help
you gain competitive insights and help you understand why and when your patients are dropping your product and which competitor they are switching to.
Databases
FakeQuipo uses blockchain mechanism. A blockchain is a digital ledger that stores information in data structures called blocks. FakeQuipo is decentralized that allow different parties to share information with each other without requiring a central administrator
and maintains confidentiality. They not only keep information that is relevant in real-time but also can trace back information of transactions that have come before.
Other Features
FakeQuipo is also aided with "Crypto " - An integrated AI chatbot which makes navigation works in our website easier. FakeQuipo is provided with informative blogs to keep yourself updated about medical scams and counterfeit medicines. For further informations
or queries contact us through noreply-fakequipo@gmail.com


I took salvia on the same night I was introduced to its existence, so I virtually no planning for it nor preconceptions about it. This was, in hindsight, both blessing and curse. After reading many of the reports here and elsewhere, I somewhat doubt now that I would have taken it had I first read those reports. However, I am still glad for the experience, just an interesting note.
I had been prepared to journey that evening (albeit with mushrooms), and had two friends coming over -- one a very experienced mentor/shaman figure who has a great deal of experience with sitting, as well as with salvia and many other what I will call 'shaman medicines' (he himself is of true and impressive shaman pedigree), and the other a longtime friend of mine with whom I have done a fair amount of psychonautic adventuring over the years.
We started by making some mushroom tea but before we began my shaman friend mentioned that he wanted to offer us the opportunity to try either DMT or Salvia, the former of which we had previously discussed, but the latter of which was new to myself and my other friend. We made some mild shroom tea which didn't really do much, and I think that subconsciously we had intended that to happen as the allure of trying something new was very strong.
It was thus that we went into my home studio, set some candles up, turned the lights down low, and setup a pipe with the salvia. I went first, taking a number of hits off of the pipe, but feeling nothing -- even after waiting several minutes. My friend went next, and he seemed to get more effect than me, but didn't 'cross over' as has been described here and elsewhere. I decided that I must continue exploring its depths, so began to take several more hits. It was only after about 7 hits or so that I began to feel different, and then suddenly it was upon me.
I laid back, and at that point I was enveloped -- or swallowed -- or shot -- into a completely different reality. At the same time, my being split apart (as if a samaurai sword had cut me in two diagonally from my right shoulder down through my torso at an angle), my normal vision disappeared, and time was completely gone. As I lay back, my being split open, peeled back like paper pulled from a sheet of papers, on a diagonal, with the hinge of the 'flap' being centered on my heart.
I cannot give a linear time perspective of events, but here are all of the bits and pieces that I recall:
I was in communication with an entity, or a stream of thought information, although I could not 'see' the entity. It was communicating with me, providing information. The voice (more like a high-speed thought stream) was transmitting information at a very fast pace, at 'thought speed' rather than 'voice speed'.
Reality was streaming out of me. I was like a fountain of reality creation, and could feel and see my projection of energy into tangible objects.. like a movie projector (where I was the projector).
I was very frightened at the feeling of the situation, and most of all because it felt very familiar..and with dark and foreboding overtones. It was like I was reminding myself of something that happened long ago, or that I once knew but had forgotten. It was scary deja vu. The fabric of reality had, quite literally, been torn away, and the sensation that I had had was that of falling down (as I lay back), and to the left.
Perhaps most frightening about this experience was the total reality and clarity of everything that was happening.. it did not seem 'trippy' or 'hazy' or dreamlike in anyway.. it was as real as what I'm looking at right now as I write this. This is very different than any of the experiences I have had with other substances such as psylocibin mushrooms, mescaline, marijuana (pot actually tends to provide me with horrible negative psychoactive experiences, believe it or not).
This made it very difficult to accept anything that happened during the experience as being anything less than true, equal to what my rational mind has until now accepted as true. Very unsettling, but very powerful!
The strongest rememberance that I have of this stage of the experience, and I do not know when exactly, was a full knowing as I sat back up and looked at my seated friends that they were part of me, that we were all part of a single unified existence. I was told, and was convinced, that they were each part of my existence, my being -- each represented certain traits within me, and essentially I was externalizing these traits via their presence in my 'dream' of reality. This created intense feelings of fear and loneliness, as I suddenly was convinced that I was simply dreaming, and that the real 'reality' was that I was a singular entity (or part of that entity) that was simply dreaming to entertain and comfort itself. 'Self' and 'other', 'subject' and 'object' suddenly ceased to exist on a dime, and I could not deny its truth.
I was saying things to my friends, but really it was to the 'voice' providing me with these insights, such as: You're kidding me, right? THIS is what it's really all about. Are you me? Am I you? And I'm just supposed to wake up, and then go back to sleep and pretend all of this wasn't real? I remember every bit of how this felt. I remember being convinced that my friends didn't exist, but were my own projections of reality. I could actually, physically see at this point the emanation of light coming from my navel area, into them, and the entire scene.
Further convincing me of the reality of this non-reality was the fact that I was, in my mind, controlling the words of my friends as they spoke to me, or rather, I thought their thoughts at the same moment they thought and said them.. It was a feeling of being totally 'fused' to everything, including them (as it turns out, they were interacting with me at the later stages of my peak experience, although some of what I thought had been said actually was, and some of it, they tell me, they did not say.
At some point, I was heading towards full dissolution of my being, and I began to fear total destruction. I'm not sure, but this may have happened when I apparently rolled over onto my face, which I have no consensual reality memory of, but was later informed about by one of my friends. At this point, and after things were feeling particularly bleak, that I asserted that I still had free will and 'zipped' back up reality into a normal coherent picture by focusing my intention on doing so. At that point, my torso and head had the sensation of zipping back up from a hanging position at the bottom left to normal sitting position, straight up and down.
I then gained normal visual perspective and merged back into a mostly normal frame of mind. The next problem was integrating what I had just seen into my normal reality, which is something I'm still trying to do even now. The summary is that I felt that I was shown that I am dreaming in my normal reality, and that my dream is merged with the dreams of others. The 'reality' behind this dream, the place where I went during this experience, didn't feel very warm or friendly, and offered little comfort. It felt very lonely, like a purgatory or limbo state. I always imagined the dissolution of ego and self as being pleasant -- 'enlightenment' -- but this didn't feel like what I had imagined.
However, all of that said, I'm glad for my experience, and after further meditation and storage of personal strength, I may very well go back and visit this place with Salvia again someday. There are lessons to be learned there, although the journey is most definitely not for the faint of heart.
Let me say that if you mistreat this substance, or the experience, you are asking for trouble. Have a sitter (or two), be in a comfortable space with no music and low lighting, and make sure that your sitters only approach you or touch you if absolutely necessary, as this can be taken as a threat in the altered state salvia creates, and integrated in a negative fashion into the experience.
 My friend and I compared notes with his 3 hits of DMT experience (which he did 5 mins after my salvia experience), and we concluded that DMT, though powerful, is Disneyland compared to Diviner's Sage.
I highly recommend it to any true seekers who want to peel back reality and take a peek. I hope my words don't frighten anyone away from trying it, I am merely providing as accurate an account as possible of my experience and intepretations, which is of course in the end a futile endeavor. Who knows, my next experience, being better prepared and experienced, may be much different.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


General Election 2019 LIVE: Boris Johnson has launched ANOTHER bus
by https://www.facebook.com/SunPolitics/BORIS Johnson has launched ANOTHER bus – but this time it's the Tory party election campaign coach.
The PM addressed supporters as he stood in front of the coach emblazoned with 'Get Brexit Done' in big letters.
He said that most Brits can see that it's now time to deliver "will of the people" and sort out Brexit.
- Guy Birchall35 minutes agoNovember 15, 2019FRIDAY FEELING Bo Jo shared a tweet showing a round up of his day on the campaign trail. The PM had posed for pictures on his travels which included a candy shop and an old railway station.
- Guy Birchall2 hours agoNovember 15, 2019TOP MARX FOR THIS PUN FROM GOVE
- Guy Birchall3 hours agoNovember 15, 2019HARDLY KOALA-FIED The Brexit Party candidate for Tynemouth has been revealed as a film-maker – who lives in Australia. Ed Punchard currently lives in Fremantle, near Perth (Western Australia, not Scotland) but still claims he is right for the job because he used to work in the North Sea on an oil rig. The candidate, originally from Devon,said: “My current address is Australia but my wife and I are in Tynemouth and looking to buy a house here.”
- Guy Birchall4 hours agoNovember 15, 2019AUSSIE, AUSSIE, AUSSIE, OI, OI, OI Boris Johnson has promised an Australian style, points based immigration system post Brexit. The PM described the new system as allowing us to “control who was coming in”. Here's a video of him saying that.
- Alex Matthews7 hours agoNovember 15, 2019ROCK ON So far this week we've had Boris Johnson making a cup of tea, popping by a bakers and now he tried his hand and making some Blackpool rock. The PM even took out some time to sample the fruits of his labour.
Load more entries…


Add to list all the components that characterize your system.
NOTE: If you can not delete a component you must first remove the association with the threats (and controls) in the following pages!
Insert a picture that represents the entire system.
{{user_name}} {{user_surname}} {{user_id}}
To better characterize your component, please answer the questionnaire below.
| {{threat.question}} |
|
To better characterize your component, please answer the questionnaire below.
| {{threat.question}} |
|


Rick and Morty have picked a side in the Intel vs AMD war
by Adam SpeightThe popular TV show Rick and Morty has picked its side in the ongoing Intel vs AMD CPU race, and it seems our favourite fictional scientist is all about Threadripper.
In the show, titular character Rick Sanchez has been spotted using an AMD QX3700+. The CPU doesn’t actually exist in the real world (as far as we know) and fans have speculated the “Q” could indicate it’s a quantum computing chip.
Related: Best gaming CPU
We learned of Rick’s preference for AMD in the new episode called The Outdated Gentleman and the Seat. Rick uses the computer to carry out “reverse digestion extrapolation” – clearly highly important work.
As Rick is casting an eye over the computer screens, we get a glimpse of the specs of the AMD QX3700+ (You can take a look yourself here):
- 128-bit
- Around 400TB of SSD storage
- Around 3.5 billion GB of RAM
- Linux distribution created by Debian
Users over on Reddit have been keen to point out that the specs of Rick’s computer are a bit awry.
Redditor Cakiery said: “Specifically he using Debian with a very old Linux kernel. 3.2.0 is from 2012. Which would mean he is probably using Debian 7 which went end of life in 2016. My point is, Rick reallly needs to install some updates … Also his partitions are real weird.”
Fellow user Anticept followed up with: “I mean, these are pretty minor issues compared to the rest. Like running on a processor that is 7.9hz. Or using old style phosphor screens. There’s such a mix of old and new age stuff, it’s hilarious.”
Related: Best laptop
While we don’t give as a definitive answer as Rick, you can check out our thoughts on the Intel vs AMD issue in our comparison of the two models of Surface Laptop 3 15.
Our full Surface Laptop 3 15 review said: “The Surface Laptop 3 15 is a 15-inch premium laptop you can’t ignore; it’s remarkably built and an attractive bit of kit.
The AMD Ryzen processor options tackle everyday tasks with ease, but this isn’t a device for high-end design work or gaming, while the battery performance is a major let down.”
Unlike other sites, we thoroughly review everything we recommend, using industry standard tests to evaluate products. We’ll always tell you what we find. We may get a commission if you buy via our price links. Tell us what you think – email the Editor


Supplementary Marathon List for 1985
Scheduled but not verified AUS 14 Apr Red Cliffe Moreton Bay AUS 27 Oct Toowoomba Toowoomba RR BRN 22 Feb Awali Bahrain International (7th) CAN 09 Jun Chandler PQ Gaspesien Participation (9th) (pt/pt) CAN 30 Jun Nanisivik NT Nanisivik Midnight Sun (7th) (pt/pt) CAN 04 Aug Stephenville NF Stephenville (4th) CAN 11 Aug Toronto ON Masters Games (1st) CAN 25 Aug Rouyn PQ Villes-Soeurs (4th) CAN 01 Sep Edmonton AB Chasquis CAN 01 Sep Grand Prairie AB Beaverlodge to Grand Prairie (3rd) (pt/pt) CAN 14 Sep Lethbridge AB Lethbridge CAN 15 Sep Oromocto NB Labatt's Lite Atlantic Autumn (9th) CAN 29 Sep Edmonton AB Edmonton Roadrunners Crosscountry CAN 06 Oct Kamloops BC Kamloops (6th) CAN 06 Oct Halifax NS Halifax Carlsberg (3rd) DEN 30 Jun Viborg Haervejs DEN 13 Oct Aarhus Aarhus FRA 24 Mar Toulouse Toulouse (1st) FRA 05 Oct Argentan FRA 20 Oct Cabries Cabro d'Or (6th) FRA 27 Oct Cholet ITA 19 May Terni Acque (8th) NED 23 Feb Saint Jacobi Bildtse NED 18 May Wageningen Berg tot Berg (2nd) NED 19 May Beek Beek NED 09 Jun Almere Almere PUR 22 Sep San Juan Sri Chinmoy (tentative) USA 19 Jan Pine Mountain GA Calloway Gardens (8th) USA 26 Jan Fort Benning GA Infantry (2nd) USA 26 Jan Saint Paul MN Saint Paul Winter Carnival Tortuous (4th) USA 03 Feb Tucson AZ Tucson Fitness (3rd) USA 03 Feb Hampton NH Sri Chinmoy (6th) USA 10 Feb Phoenix AZ Phoenix (5th) USA 10 Feb Davis CA Davis (1st) USA 16 Feb Fort Walton Beach FL Valentine (14th) USA 16 Feb McAllen TX Springfest (7th) (date tentative) USA 17 Feb Wellesley MA Silver Lake Dodge (19th) USA 23 Feb Athens GA Athens (5th) USA 24 Feb Sioux City IA Sioux City (5th) USA Feb East Meadow NY Runner's USA 02 Mar El Paso TX Desert (5th) USA 02 Mar Wawawai WA Snake River Canyon (6th) USA 03 Mar Lexington Park MD Saint Mary's (7th) USA 03 Mar Wilmington NC Wilmington Pepsi (1st) USA 05 Mar Moscow ID Snake River Canyon USA 23 Mar Chesterton IN No Frills (6th) USA 24 Mar Carlisle PA Jim Thorpe (4th) (date tentative) USA Mar Yuma AZ Roadrunner (6th) (spring date) USA 07 Apr Modesto CA Modesto (2nd) USA 14 Apr Chula Vista CA Spring Festival (5th) pt/pt (date tentative) USA 14 Apr Loma Linda CA Pigeon Pass (7th) USA 14 Apr Washington DC District of Columbia (5th) USA 14 Apr Fayetteville NC Dogwood Festival (2nd) (date could be 05 May) USA 14 Apr Salem OR Phidippides (5th) USA 21 Apr Wayne NJ Mad Anthony Wayne (4th) USA 21 Apr Toledo OH Sy Mah (13th) (was Heartwatchers) USA 04 May Mount Clemens MI Right Stuff (1st) USA 04 May Saginaw MI Saginaw Bay (8th) USA 05 May Troy NY Heritage Trail (8th) (race/date tentative) USA 05 May Raleigh NC Southeastern Masters (15th) USA 11 May Brigham City UT Golden Spike (11th) USA 19 May Aptos CA Aptos Creek (5th) USA 25 May Weston OR Blue Mountain (4th) USA 25 May Bluefield WV Bluefield Mountain Festival (2nd) USA 26 May Pewaukee WI Waukesha Tech (2nd) USA May Hillsdale MI NAIA (5th) (Saturday) USA 01 Jun Fort Carson CO Ironhorse (4th) USA 02 Jun Foster City CA Sri Chinmoy (7th) USA 08 Jun Rock Valley IA Freedom Festival (7th) USA 16 Jun Leadville CO Leadville (2nd) (pt/pt) USA 22 Jun Grand Forks ND North Dakota (14th) (may change to late May) USA 29 Jun Salt Lake City UT Wasatch Steeplechase (6th) (xc) USA 06 Jul Burney CA Basin Days (4th) USA 07 Jul Yorba Linda CA Duane Shaffer Birthday (10th) USA 07 Jul Colorado Springs CO Independence Day Running Spectacular (1st) (pt/pt) USA 07 Jul Hilo HI Big Island (11th) USA 27 Jul Anchorage AK Run for Health/ Run for Life (7th) USA 10 Aug Hell MI Run Thru Hell (7th) USA 24 Aug Dillon CO Run the Rockies Summit County (9th) (pt/pt) USA 25 Aug Fort Davis TX Fort Davis Prude Ranch (7th) USA 01 Sep Crested Butte CO Crested Butte (5th) USA 07 Sep Vail CO Vail Valley (2nd) USA 07 Sep Saint Charles MN Whitewater Valley (2nd) (pt/pt) USA 07 Sep Lake Placid NY Lake Placid (15th) (pt/pt) USA 08 Sep Chelan WA Appleknockers Trots USA 14 Sep Clovis NM Allsup's (11th) USA 14 Sep Athens WI Channel 7 American Odyssey (7th) (pt/pt) USA 15 Sep Mohawk NY Adam Helmer (8th) USA 21 Sep Marquette MI Northern Shuffler (2nd) (pt/pt) USA 21 Sep Jonesville NC Union Grove (7th) (pt/pt) USA 22 Sep Port Clinton OH Port Clinton (7th) USA 28 Sep Grand Junction CO Colorado (8th) USA 28 Sep Pocatello ID Apple (3rd) USA 28 Sep Springfield MO Great Southern (5th) USA 28 Sep Margretville NY Pepacton Paleface (5th) USA 05 Oct Enid OK Chisholm Trail (7th) USA 06 Oct Rockford IL Rock River (3rd) USA 06 Oct Easthampton MA M&M Trail Mountain (5th) USA 06 Oct Sheffield MA Berkshire County Autumn (6th) USA 06 Oct Worcester MA Norton Centennial (1st) USA 13 Oct Fort Collins CO Rawhide (4th) (pt/pt) USA 13 Oct Boise ID Les Bois (8th) USA 27 Oct North Adams MA Change of Seasons (5th) (pt/pt) USA 27 Oct Conway NH Mount Washington Valley (5th) USA 03 Nov Loma Linda CA Orange Grove (9th) USA 09 Nov Fresno CA Fresno (2nd) USA 10 Nov Middletown NY Veteran's (2nd) USA 16 Nov Midland TX Midland-0dessa (1st) USA 17 Nov Sherman Oaks CA San Fernando Valley Classic (1st) USA 24 Nov Boston MA Boston Peace (1st) (pt/pt) USA 08 Dec Roanoke VA Star City (3rd) USA 14 Dec Livermore CA Livermore Probably not held
Scheduled but cancelled
Marathons that are not races (fun runs or non-competitive walks) "Marathons" that are not marathons
Last Updated on 09 Jun 2010
Contributors: Paul Michiels, Franco Civai


You are given this set of growth functions:
n!, 2^n, 2n^2, 5 n \log n, 20n, 10n
For the growth function 10n
, type a value
(a positive integer) for which this function is the most efficient of the
six. If there is no integer value for which it is most
efficent, type "none".
Since 10n
grows slower than the other
functions, it is going to be relatively faster for bigger
input sizes.


dFlow demonstrates how to simplify bureaucracy by using blockchain to streamline the process of acquiring and using credentials.
This new service uses cutting-edge blockchain-based technology to issue credentials, while ensuring all pre-requisites are met.


Login with Mock Shibboleth Security
Username
Password
Site
Login
›
Forgotten your password?
›
Register


Leigh Griffiths makes Celtic fan's day as he gifts jersey to delighted youngster
The striker made his return to first team football and left one supporter thrilled.
by Mark McDougall, https://www.dailyrecord.co.uk/authors/mark-mcdougall/You might think Leigh Griffiths would have been the happiest man inside Celtic Park after returning to the first team.
He hasn't played since August but made a second half appearance in the 4-0 thumping of Livingston.
The smile could be seen on his face as he entered the field but he made one young fan's day at the end of the game.
Griffiths made his way over to the stand and took his shirt off to hand it to the shellshocked youngster.
The brilliant pictures from the scene show the young supporter alongside his dad John with a huge smile on his face as he posed with the Celtic shirt.
Griffiths came off the bench to a rapturous reception and Neil Lennon was full of praise for him.
He said: "That'll do him (Griffiths) the world of good. He almost scored and he's sniffing out chances, he's looking more and more like himself.
The 29-year-old played for an hour against Stenhousemuir for the reserves in midweek.
He grabbed a double and will now look to get back on the goal trail for the first team.


For MHS Byte Club
Mr. Farmer is the teacher who watches over the club to get everyone together to plan projects and activities.
Raphael is the founder of this Awesome programming club. He helps with activities and projects we do.
Chris C. Helped Raphael in the beginning of the club and helps, also, with projects and activities we do as a club.
Chris P. also helped Chris C. and Raphael start up this club from the beginning. He also helps with projects and activities.
Daniel B. is always here and we don't know how he learned but he is decent works only on projects others give him.
Kyle Koeller edits the website which includes the main website and contacts page.


Usage
For gcanvas is designed to follow WebGL API, find details of each API in
https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API
Support
Legend
- Implemented: API is implemented .
- Undefined: API is not defined.
- Empty: API is defined but not implemented.
| API Name | API Type | Status |
|---|---|---|
| viewport() | Method | Implemented |
| vertexAttribPointer() | Method | Implemented |
| vertexAttrib2fv() | Method | Implemented |
| useProgram() | Method | Implemented |
| uniformMatrix4fv() | Method | Implemented |
| uniformMatrix3fv() | Method | Implemented |
| uniformMatrix2fv() | Method | Implemented |
| uniform4iv() | Method | Implemented |
| uniform4i() | Method | Implemented |
| uniform4fv() | Method | Implemented |
| uniform4f() | Method | Implemented |
| uniform3iv() | Method | Implemented |
| uniform3i() | Method | Implemented |
| uniform3fv() | Method | Implemented |
| uniform3f() | Method | Implemented |
| uniform2iv() | Method | Implemented |
| uniform2i() | Method | Implemented |
| uniform2fv() | Method | Implemented |
| uniform2f() | Method | Implemented |
| uniform1iv() | Method | Implemented |
| uniform1i() | Method | Implemented |
| uniform1fv() | Method | Implemented |
| uniform1f() | Method | Implemented |
| texParameteri() | Method | Implemented |
| texImage2D() | Method | Implemented |
| shaderSource() | Method | Implemented |
| scissor() | Method | Implemented |
| renderbufferStorage() | Method | Implemented |
| pixelStorei() | Method | Implemented |
| linkProgram() | Method | Implemented |
| lineWidth() | Method | Implemented |
| getUniformLocation() | Method | Implemented |
| getShaderParameter() | Method | Implemented |
| getAttribLocation() | Method | Implemented |
| generateMipmap() | Method | Implemented |
| frontFace() | Method | Implemented |
| framebufferTexture2D() | Method | Implemented |
| flush() | Method | Implemented |
| enableVertexAttribArray() | Method | Implemented |
| enable() | Method | Implemented |
| drawElements() | Method | Implemented |
| disableVertexAttribArray() | Method | Implemented |
| disable() | Method | Implemented |
| depthMask() | Method | Implemented |
| depthFunc() | Method | Implemented |
| deleteTexture() | Method | Implemented |
| deleteShader() | Method | Implemented |
| deleteRenderbuffer() | Method | Implemented |
| deleteProgram() | Method | Implemented |
| deleteFramebuffer() | Method | Implemented |
| deleteBuffer() | Method | Implemented |
| cullFace() | Method | Implemented |
| createTexture() | Method | Implemented |
| createShader() | Method | Implemented |
| createRenderbuffer() | Method | Implemented |
| createProgram() | Method | Implemented |
| createFramebuffer() | Method | Implemented |
| createBuffer() | Method | Implemented |
| compileShader() | Method | Implemented |
| colorMask() | Method | Implemented |
| clearStencil() | Method | Implemented |
| clearDepth() | Method | Implemented |
| clearColor() | Method | Implemented |
| clear() | Method | Implemented |
| bufferData() | Method | Implemented |
| blendFuncSeparate() | Method | Implemented |
| blendFunc() | Method | Implemented |
| blendEquationSeparate() | Method | Implemented |
| blendEquation() | Method | Implemented |
| bindRenderbuffer() | Method | Implemented |
| bindFramebuffer() | Method | Implemented |
| bindBuffer() | Method | Implemented |
| bindAttribLocation() | Method | Implemented |
| attachShader() | Method | Implemented |
| activeTexture() | Method | Implemented |
| validateProgram() | Method | Implemented |
| texSubImage2D() | Method | Implemented |
| texParameterf() | Method | Implemented |
| stencilOpSeparate() | Method | Implemented |
| stencilOp() | Method | Implemented |
| stencilMaskSeparate() | Method | Implemented |
| stencilMask() | Method | Implemented |
| stencilFuncSeparate() | Method | Implemented |
| stencilFunc() | Method | Implemented |
| sampleCoverage() | Method | Implemented |
| readPixels() | Method | Implemented |
| polygonOffset() | Method | Implemented |
| isTexture() | Method | Implemented |
| isShader() | Method | Implemented |
| isRenderbuffer() | Method | Implemented |
| isProgram() | Method | Implemented |
| isFramebuffer() | Method | Implemented |
| isEnabled() | Method | Implemented |
| isContextLost() | Method | Empty |
| isBuffer() | Method | Implemented |
| getVertexAttribOffset() | Method | Implemented |
| getVertexAttrib() | Method | Implemented |
| getUniform() | Method | Implemented |
| getTexParameter() | Method | Implemented |
| getSupportedExtensions() | Method | Implemented |
| getShaderSource() | Method | Implemented |
| getShaderPrecisionFormat() | Method | Implemented |
| getShaderInfoLog() | Method | Implemented |
| getRenderbufferParameter() | Method | Implemented |
| getProgramParameter() | Method | Implemented |
| getProgramInfoLog() | Method | Implemented |
| getParameter() | Method | Implemented |
| getFramebufferAttachmentParameter() | Method | Implemented |
| getExtension() | Method | Implemented |
| getError() | Method | Implemented |
| getContextAttributes() | Method | Empty |
| getBufferParameter() | Method | Implemented |
| getAttachedShaders() | Method | Implemented |
| getActiveUniform() | Method | Implemented |
| getActiveAttrib() | Method | Implemented |
| drawArrays / drawArraysInstancedANGLE() | Method | Implemented |
| detachShader() | Method | Implemented |
| depthRange() | Method | Implemented |
| copyTexSubImage2D() | Method | Implemented |
| copyTexImage2D() | Method | Implemented |
| compressedTexSubImage2D() | Method | Implemented |
| compressedTexImage2D() | Method | Implemented |
| checkFramebufferStatus() | Method | Implemented |
| bufferSubData() | Method | Implemented |
| blendColor() | Method | Implemented |
| bindTexture() | Method | Implemented |
| commit() | Method | Undefined |
| finish() | Method | Undefined |
| framebufferRenderbuffer() | Method | Implemented |
| hint() | Method | Undefined |


GROUP SERVICES COMPANY is the Millennium Generation Company in the field of surface preparation and finishing industry catering to the growing needs of blast cleaning abrasives and equipment.
A team of dedicated professionals having over twenty years of outstanding experience with the industry has used their knowledge and expertise in selecting quality products for the blasting and painting industry world-wide.
The products are sourced from accredited manufacturers having ISO certification from Europe, America, Far East and Indian subcontinent. with a team of dedicated design office and research and development centre.
Our Abrasive blasting machines Ideal for blast cleaning mill scale, pitting and corrosion on steel surfaces
Pipecoaters are designed to coat, at uniform thickness, the internals of pipes, tubes and vessels at a faster rate.
Purification of potable water and industrial waste water, water sewage and water well drilling. Suitable for Aquarium applications.
A mineral, that is used to shape or finish a workpiece through rubbing which leads to part of the workpiece being worn away.
PROJECTS
FINISHED
HAPPY
CLIENTS
OUR
TEAM
Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum is simply Lorem.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum is simply Lorem.