QuesaCamera.h
Discussion
Declares the Quesa camera objects.
Functions
( TQ3CameraObject _Nonnull ) Q3AllSeeingCamera_New (
const TQ3CameraData * _Nonnull cameraData
);
Discussion
Create a new all-seeing camera object.
This kind of camera sees in all directions, using equirectangular coordinates.
Rendering with this camera will experience some inaccuracy, due to the fact that
OpenGL works by linearly interpolating across triangles, while the equirectangular
projection is very much nonlinear. Naturally, the greater the angular diameter of a
triangle as seen from the camera, the greater the inaccuracy. Subdividing a
triangulation can reduce the nonlinearity artifacts.
There will also be more artifacts around the "poles" of the map (much as one sees
in cartography), which correspond to the up and down directions of the camera.
Parameter Descriptions
- cameraData
- The data for the camera object.
- function result
- The new camera object.
( TQ3Status ) Q3Camera_GetData (
TQ3CameraObject _Nonnull camera,
TQ3CameraData * _Nonnull cameraData
);
Discussion
Get the common state of a camera.
Parameter Descriptions
- camera
- The camera to query.
- cameraData
- Receives the common state of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3Camera_GetPlacement (
TQ3CameraObject _Nonnull camera,
TQ3CameraPlacement * _Nonnull placement
);
Discussion
Get the placement of a camera.
Parameter Descriptions
- camera
- The camera to query.
- placement
- Receives the placement of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3Camera_GetRange (
TQ3CameraObject _Nonnull camera,
TQ3CameraRange * _Nonnull range
);
Discussion
Get the range of a camera.
Parameter Descriptions
- camera
- The camera to query.
- range
- Receives the range of the camera.
- function result
- Success or failure of the operation.
( TQ3ObjectType ) Q3Camera_GetType (
TQ3CameraObject _Nonnull camera
);
Discussion
Get the type of a camera.
Returns kQ3CameraTypeOrthographic, kQ3CameraTypeViewAngleAspect, or
kQ3CameraTypeViewPlane. Returns kQ3ObjectTypeInvalid if the camera type
is unknown.
Parameter Descriptions
- camera
- The camera to query.
- function result
- The type of the camera object.
( TQ3Status ) Q3Camera_GetViewPort (
TQ3CameraObject _Nonnull camera,
TQ3CameraViewPort * _Nonnull viewPort
);
Discussion
Get the view port of a camera.
Parameter Descriptions
- camera
- The camera to query.
- viewPort
- Receives the view port of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3Camera_GetViewToFrustum (
TQ3CameraObject _Nonnull camera,
TQ3Matrix4x4 * _Nonnull viewToFrustum
);
Discussion
Get the view-to-frustum matrix of a camera.
The view-to-frustum matrix transforms the camera coordinate system
(as returned by Q3Camera_GetWorldToView) to the viewing frustum
coordinate system.
The frustum coordinate system ranges from 0.0 (near) to -1.0 (far) in z, and from
-1.0 to +1.0 in both x and y.
If the camera uses a nonlinear projection (fisheye or all-seeing cameras) then
the view to frustum transformation cannot be expressed by a matrix, and this
function returns kQ3Failure.
Parameter Descriptions
- camera
- The camera to query.
- viewToFrustum
- Receives the view-to-frustum matrix of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3Camera_GetWorldToFrustum (
TQ3CameraObject _Nonnull camera,
TQ3Matrix4x4 * _Nonnull worldToFrustum
);
Discussion
Get the world-to-frustum matrix of a camera.
The world-to-frustum matrix transforms world coordinates to the viewing
frustum coordinate system. It is equivalent to multiplying the matrices
returned by Q3Camera_GetWorldToView and Q3Camera_GetViewToFrustum.
See the documentation of Q3View_GetWorldToFrustumMatrixState for more
information.
If the camera uses a nonlinear projection (fisheye or all-seeing cameras) then
the view to frustum transformation cannot be expressed by a matrix, and this
function returns kQ3Failure.
Parameter Descriptions
- camera
- The camera to query.
- worldToFrustum
- Receives the world-to-frustum matrix of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3Camera_GetWorldToView (
TQ3CameraObject _Nonnull camera,
TQ3Matrix4x4 * _Nonnull worldToView
);
Discussion
Get the world-to-view matrix of a camera.
The world-to-view matrix transforms world coordinates to a coordinate
system relative to the camera. The origin of this coordinate system is
the camera location, with the camera view pointing down the -z axis
and the camera up vector placed along the +y axis.
Parameter Descriptions
- camera
- The camera to query.
- worldToView
- Receives the world-to-view matrix of the camera.
- function result
- Success or failure of the operation.
Test a bounding box for visibility.
( TQ3Boolean ) Q3Camera_IsBoundingBoxVisible (
TQ3CameraObject _Nonnull camera,
const TQ3BoundingBox * _Nonnull bbox
);
Discussion
The bounding box (assumed to be in world coordinates) is tested for
intersection with the view frustum of the camera.
This function is similar to Q3View_IsBoundingBoxVisible, but since it
does not use local coordinates, it does not need to be used within a
submitting loop.
Parameter Descriptions
- camera
- The view to check the bounding box against.
- bbox
- The world bounding box to test.
- function result
- True or false as the bounding box is visible.
( TQ3Status ) Q3Camera_SetData (
TQ3CameraObject _Nonnull camera,
const TQ3CameraData * _Nonnull cameraData
);
Discussion
Set the common state for a camera.
Parameter Descriptions
- camera
- The camera to update.
- cameraData
- The new common state for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3Camera_SetPlacement (
TQ3CameraObject _Nonnull camera,
const TQ3CameraPlacement * _Nonnull placement
);
Discussion
Set the placement for a camera.
Parameter Descriptions
- camera
- The camera to update.
- placement
- The new placement for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3Camera_SetRange (
TQ3CameraObject _Nonnull camera,
const TQ3CameraRange * _Nonnull range
);
Discussion
Set the range for a camera.
Parameter Descriptions
- camera
- The camera to update.
- range
- The new range for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3Camera_SetViewPort (
TQ3CameraObject _Nonnull camera,
const TQ3CameraViewPort * _Nonnull viewPort
);
Discussion
Set the view port for a camera.
Parameter Descriptions
- camera
- The camera to update.
- viewPort
- The new view port for the camera.
- function result
- Success or failure of the operation.
Transform a point from frustum coordinates to view coordinates.
( void ) Q3Camera_TransformFrustumToView (
TQ3CameraObject _Nonnull camera,
const TQ3Point3D* _Nonnull frustumPt,
TQ3Point3D* _Nonnull viewPt
);
Discussion
Whereas Q3Camera_GetViewToFrustum does not work for certain kinds
of cameras, this function should work for all cameras.
Parameter Descriptions
- camera
- The camera.
- frustumPt
- A point in frustum coordinates.
- viewPt
- Receives a point in view coordinates.
Transform a point from view coordinates to frustum coordinates.
( void ) Q3Camera_TransformViewToFrustum (
TQ3CameraObject _Nonnull camera,
const TQ3Point3D* _Nonnull viewPt,
TQ3Point3D* _Nonnull frustumPt
);
Discussion
Whereas Q3Camera_GetViewToFrustum does not work for certain kinds
of cameras, this function should work for all cameras.
Parameter Descriptions
- camera
- The camera.
- viewPt
- A point in view coordinates.
- frustumPt
- Receives a point in frustum coordinates.
Compute the angle of view of a fisheye camera from other parameters.
( float ) Q3FisheyeCamera_CalcAngleOfView (
const TQ3Vector2D* _Nonnull inSensorSize,
TQ3FisheyeMappingFunction inMappingFunc,
TQ3FisheyeCroppingFormat inCropping,
float inFocalLength
);
Discussion
In the full frame cropping format, the maximum angle of view is achieved only
on the diagonals, whereas in the cropped circle format the maximum angle of view
is achieved horizontally.
Parameter Descriptions
- inSensorSize
- The dimensions of the sensor or film in mm.
- inMappingFunc
- The mapping function.
- inCropping
- The cropping format.
- inFocalLength
- The focal length in mm.
- function result
- The maximum angle of view in radians.
Compute the focal length of a fisheye camera from other parameters.
( float ) Q3FisheyeCamera_CalcFocalLength (
const TQ3Vector2D* _Nonnull inSensorSize,
TQ3FisheyeMappingFunction inMappingFunc,
TQ3FisheyeCroppingFormat inCropping,
float inAngleOfView
);
Parameter Descriptions
- inSensorSize
- The dimensions of the sensor or film in mm.
- inMappingFunc
- The mapping function.
- inCropping
- The cropping format.
- inAngleOfView
- The maximum angle of view in radians.
- function result
- The focal length in mm.
Get the data for a fisheye camera.
( TQ3Status ) Q3FisheyeCamera_GetData (
TQ3CameraObject _Nonnull camera,
TQ3FisheyeCameraData* _Nonnull data
);
Parameter Descriptions
- camera
- The camera.
- data
- Receives the camera data.
- function result
- Success or failure of the operation.
Create a fisheye camera.
( TQ3CameraObject _Nonnull ) Q3FisheyeCamera_New (
const TQ3FisheyeCameraData * _Nonnull cameraData
);
Discussion
Rendering with this camera will experience some inaccuracy, due to the fact that
OpenGL works by linearly interpolating across triangles, while the fisheye
projection is very much nonlinear. Naturally, the greater the angular diameter of a
triangle as seen from the camera, the greater the inaccuracy. Subdividing a
triangulation can reduce the nonlinearity artifacts.
Parameter Descriptions
- cameraData
- The data for the camera object.
- function result
- The new camera object.
Set the data for a fisheye camera.
( TQ3Status ) Q3FisheyeCamera_SetData (
TQ3CameraObject _Nonnull camera,
const TQ3FisheyeCameraData * _Nonnull cameraData
);
Parameter Descriptions
- camera
- The camera.
- cameraData
- The new data.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3OrthographicCamera_GetBottom (
TQ3CameraObject _Nonnull camera,
float * _Nonnull bottom
);
Discussion
Get the bottom side of the viewing frustum of an orthographic camera.
Parameter Descriptions
- camera
- The camera to query.
- bottom
- Receives the bottom side of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3OrthographicCamera_GetData (
TQ3CameraObject _Nonnull camera,
TQ3OrthographicCameraData * _Nonnull cameraData
);
Discussion
Get the data for an orthographic camera.
Parameter Descriptions
- camera
- The camera to query.
- cameraData
- Receives the data of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3OrthographicCamera_GetLeft (
TQ3CameraObject _Nonnull camera,
float * _Nonnull left
);
Discussion
Get the left side of the viewing frustum of an orthographic camera.
Parameter Descriptions
- camera
- The camera to query.
- left
- Receives the left side of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3OrthographicCamera_GetRight (
TQ3CameraObject _Nonnull camera,
float * _Nonnull right
);
Discussion
Get the right side of the viewing frustum of an orthographic camera.
Parameter Descriptions
- camera
- The camera to query.
- right
- Receives the right side of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3OrthographicCamera_GetTop (
TQ3CameraObject _Nonnull camera,
float * _Nonnull top
);
Discussion
Get the top side of the viewing frustum of an orthographic camera.
Parameter Descriptions
- camera
- The camera to query.
- top
- Receives the top side of the camera.
- function result
- Success or failure of the operation.
( TQ3CameraObject _Nonnull ) Q3OrthographicCamera_New (
const TQ3OrthographicCameraData * _Nonnull orthographicData
);
Discussion
Create a new orthographic camera object.
Parameter Descriptions
- orthographicData
- The data for the camera object.
- function result
- The new camera object.
( TQ3Status ) Q3OrthographicCamera_SetBottom (
TQ3CameraObject _Nonnull camera,
float bottom
);
Discussion
Set the bottom side of the viewing frustum of an orthographic camera.
Parameter Descriptions
- camera
- The camera to update.
- bottom
- The new bottom side for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3OrthographicCamera_SetData (
TQ3CameraObject _Nonnull camera,
const TQ3OrthographicCameraData * _Nonnull cameraData
);
Discussion
Set the data for an orthographic camera.
Parameter Descriptions
- camera
- The camera to update.
- cameraData
- The new data for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3OrthographicCamera_SetLeft (
TQ3CameraObject _Nonnull camera,
float left
);
Discussion
Set the left side of the viewing frustum of an orthographic camera.
Parameter Descriptions
- camera
- The camera to update.
- left
- The new left side for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3OrthographicCamera_SetRight (
TQ3CameraObject _Nonnull camera,
float right
);
Discussion
Set the right side of the viewing frustum of an orthographic camera.
Parameter Descriptions
- camera
- The camera to update.
- right
- The new right side for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3OrthographicCamera_SetTop (
TQ3CameraObject _Nonnull camera,
float top
);
Discussion
Set the top side of the viewing frustum of an orthographic camera.
Parameter Descriptions
- camera
- The camera to update.
- top
- The new top side for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewAngleAspectCamera_GetAspectRatio (
TQ3CameraObject _Nonnull camera,
float * _Nonnull aspectRatioXToY
);
Discussion
Get the aspect ratio of a view angle aspect camera.
If the aspect ratio is greater than 1.0, the field of view of the
camera is vertical. If it is less than 1.0, the field of view is
horizontal.
Parameter Descriptions
- camera
- The camera to query.
- aspectRatioXToY
- Receives the horizontal-to-vertical aspect ratio of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewAngleAspectCamera_GetData (
TQ3CameraObject _Nonnull camera,
TQ3ViewAngleAspectCameraData * _Nonnull cameraData
);
Discussion
Get the data for a view angle aspect camera.
Parameter Descriptions
- camera
- The camera to query.
- cameraData
- Receives the data of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewAngleAspectCamera_GetFOV (
TQ3CameraObject _Nonnull camera,
float * _Nonnull fov
);
Discussion
Get the field of view of a view angle aspect camera.
The field of view is specified in radians.
Parameter Descriptions
- camera
- The camera to query.
- fov
- Receives the field of view of the camera.
- function result
- Success or failure of the operation.
( TQ3CameraObject _Nonnull ) Q3ViewAngleAspectCamera_New (
const TQ3ViewAngleAspectCameraData * _Nonnull cameraData
);
Discussion
Create a new view angle aspect camera object.
Parameter Descriptions
- cameraData
- The data for the camera object.
- function result
- The new camera object.
( TQ3Status ) Q3ViewAngleAspectCamera_SetAspectRatio (
TQ3CameraObject _Nonnull camera,
float aspectRatioXToY
);
Discussion
Set the aspect ratio for a view angle aspect camera.
If the aspect ratio is greater than 1.0, the field of view of the
camera is vertical. If it is less than 1.0, the field of view is
horizontal.
Parameter Descriptions
- camera
- The camera to update.
- aspectRatioXToY
- The new horizontal-to-vertical aspect ratio of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewAngleAspectCamera_SetData (
TQ3CameraObject _Nonnull camera,
const TQ3ViewAngleAspectCameraData * _Nonnull cameraData
);
Discussion
Set the data for a view angle aspect camera.
Parameter Descriptions
- camera
- The camera to update.
- cameraData
- The new data for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewAngleAspectCamera_SetFOV (
TQ3CameraObject _Nonnull camera,
float fov
);
Discussion
Set the field of view for a view angle aspect camera.
The field of view is specified in radians.
Parameter Descriptions
- camera
- The camera to update.
- fov
- The new field of view for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_GetCenterX (
TQ3CameraObject _Nonnull camera,
float * _Nonnull centerXOnViewPlane
);
Discussion
Get the x coordinate of the view rectangle center of a view plane camera.
The area of the view plane which will be rendered is a rectangle, whose
origin in x is at the returned coordinate.
Parameter Descriptions
- camera
- The camera to query.
- centerXOnViewPlane
- Receives the x coordinate of the center of the view rectangle.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_GetCenterY (
TQ3CameraObject _Nonnull camera,
float * _Nonnull centerYOnViewPlane
);
Discussion
Get the y coordinate of the view rectangle center of a view plane camera.
The area of the view plane which will be rendered is a rectangle, whose
origin in y is at the returned coordinate.
Parameter Descriptions
- camera
- The camera to query.
- centerYOnViewPlane
- Receives the y coordinate of the center of the view rectangle.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_GetData (
TQ3CameraObject _Nonnull camera,
TQ3ViewPlaneCameraData * _Nonnull cameraData
);
Discussion
Get the data for a view plane camera.
Parameter Descriptions
- camera
- The camera to query.
- cameraData
- Receives the data of the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_GetHalfHeight (
TQ3CameraObject _Nonnull camera,
float * _Nonnull halfHeightAtViewPlane
);
Discussion
Get the half-height of the view rectangle of a view plane camera.
The area of the view plane which will be rendered is a rectangle,
whose height is twice the returned half-height.
Parameter Descriptions
- camera
- The camera to query.
- halfHeightAtViewPlane
- Receives the half-height of the view rectangle.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_GetHalfWidth (
TQ3CameraObject _Nonnull camera,
float * _Nonnull halfWidthAtViewPlane
);
Discussion
Get the half-width of the view rectangle of a view plane camera.
The area of the view plane which will be rendered is a rectangle,
whose width is twice the returned half-width.
Parameter Descriptions
- camera
- The camera to query.
- halfWidthAtViewPlane
- Receives the half-width of the view rectangle.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_GetViewPlane (
TQ3CameraObject _Nonnull camera,
float * _Nonnull viewPlane
);
Discussion
Get the view plane distance of a view plane camera.
The view plane distance is the distance along the camera view vector
from the camera location.
Parameter Descriptions
- camera
- The camera to query.
- viewPlane
- Receives the view plane distance of the camera.
- function result
- Success or failure of the operation.
( TQ3CameraObject _Nonnull ) Q3ViewPlaneCamera_New (
const TQ3ViewPlaneCameraData * _Nonnull cameraData
);
Discussion
Create a new view plane camera object.
Parameter Descriptions
- cameraData
- The data for the camera object.
- function result
- The new camera object.
( TQ3Status ) Q3ViewPlaneCamera_SetCenterX (
TQ3CameraObject _Nonnull camera,
float centerXOnViewPlane
);
Discussion
Set the x coordinate of the view rectangle center of a view plane camera.
The area of the view plane which will be rendered is a rectangle, whose
origin in x is at the specified coordinate.
Parameter Descriptions
- camera
- The camera to update.
- centerXOnViewPlane
- The new x coordinate for the center of the view rectangle.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_SetCenterY (
TQ3CameraObject _Nonnull camera,
float centerYOnViewPlane
);
Discussion
Set the y coordinate of the view rectangle center of a view plane camera.
The area of the view plane which will be rendered is a rectangle, whose
origin in y is at the specified coordinate.
Parameter Descriptions
- camera
- The camera to update.
- centerYOnViewPlane
- The new y coordinate for the center of the view rectangle.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_SetData (
TQ3CameraObject _Nonnull camera,
const TQ3ViewPlaneCameraData * _Nonnull cameraData
);
Discussion
Set the data for a view plane camera.
Parameter Descriptions
- camera
- The camera to update.
- cameraData
- The new data for the camera.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_SetHalfHeight (
TQ3CameraObject _Nonnull camera,
float halfHeightAtViewPlane
);
Discussion
Set the half-height of the view rectangle of a view plane camera.
The area of the view plane which will be rendered is a rectangle,
whose height is twice the specified half-height.
Parameter Descriptions
- camera
- The camera to update.
- halfHeightAtViewPlane
- The new half-height of the view rectangle.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_SetHalfWidth (
TQ3CameraObject _Nonnull camera,
float halfWidthAtViewPlane
);
Discussion
Set the half-width of the view rectangle of a view plane camera.
The area of the view plane which will be rendered is a rectangle,
whose width is twice the specified half-width.
Parameter Descriptions
- camera
- The camera to update.
- halfWidthAtViewPlane
- The new half-width of the view rectangle.
- function result
- Success or failure of the operation.
( TQ3Status ) Q3ViewPlaneCamera_SetViewPlane (
TQ3CameraObject _Nonnull camera,
float viewPlane
);
Discussion
Set the view plane distance for a view plane camera.
The view plane distance is the distance along the camera view vector
from the camera location.
Parameter Descriptions
- camera
- The camera to update.
- viewPlane
- The new view plane distance for the camera.
- function result
- Success or failure of the operation.
Structs
typedef struct TQ3CameraData {
TQ3CameraPlacement placement;
TQ3CameraRange range;
TQ3CameraViewPort viewPort;
} TQ3CameraData;
Discussion
Describes the common state for a camera.
The common camera state includes its position and orientation within
the world (placement), the near and far clipping planes (range), and
the current viewport.
The placement fully determines the world to view transformation, while the
range and viewport affect the view to frustum transformation.
Field Descriptions
- placement
- The position and orientation of the camera.
- range
- The near and far clipping planes of the camera.
- viewPort
- The viewport for the camera.
typedef struct TQ3CameraPlacement {
TQ3Point3D cameraLocation;
TQ3Point3D pointOfInterest;
TQ3Vector3D upVector;
} TQ3CameraPlacement;
Discussion
Describes the location and orientation of a camera. All points are
in world-space coordinates.
Field Descriptions
- cameraLocation
- The location of the camera.
- pointOfInterest
- The point at which the camera is aimed.
- upVector
- The up vector for the camera. This vector must be
normalised and perpendicular to the viewing direction
of the camera. This vector is transformed to the y
axis of the viewing plane.
Describes the hither and yon clipping planes of a camera.
typedef struct TQ3CameraRange {
float hither;
float yon;
} TQ3CameraRange;
Discussion
Objects closer than the hither distance or farther than the yon distance
will be clipped, i.e., invisible, so you usually want hither to be closer
than any object and yon to be farther than any object.
The hither and yon values, together with the bit depth of your depth buffer,
determine how small a difference in depths can be resolved. It is more
important to make hither as large as possible than to make yon as small
as possible.
Field Descriptions
- hither
- The distance from the camera to the near clipping plane.
This value must always be greater than 0.
- yon
- The distance from the camera to the far clipping plane.
This value must always be greater than the hither field,
and is allowed to be INFINITY.
typedef struct TQ3CameraViewPort {
TQ3Point2D origin;
float width;
float height;
} TQ3CameraViewPort;
Discussion
Describes the viewport for a camera.
The camera viewport is the rectangular area of the view plane which is
mapped to the rendered area of the current draw context. The default
mapping is a square of size 2.0x2.0, with the top left corner anchored
at {-1.0, 1.0}.
By adjusting the viewport, it is possible to control which area of the
camera's view is rendered (e.g., to divide an image into a series of
horizontal strips for printing).
Field Descriptions
- origin
- The origin for the viewport.
- width
- The width of the viewport.
- height
- The width of the viewport.
State for a fisheye camera.
typedef struct TQ3FisheyeCameraData {
TQ3CameraData cameraData;
TQ3Vector2D sensorSize;
float focalLength;
TQ3FisheyeMappingFunction mappingFunction;
TQ3FisheyeCroppingFormat croppingFormat;
} TQ3FisheyeCameraData;
Field Descriptions
- cameraData
- The common state for the camera.
- sensorSize
- The dimensions of the sensor or film in mm.
The aspect ratio should be the same as the
view.
- focalLength
- The focal length of the lens in mm.
- mappingFunction
- The mapping function.
- croppingFormat
- The cropping format.
typedef struct TQ3OrthographicCameraData {
TQ3CameraData cameraData;
float left;
float top;
float right;
float bottom;
} TQ3OrthographicCameraData;
Discussion
Describes the state for an orthographic camera.
An orthographic camera is defined by four view planes, which form a
box aligned with the camera view direction. These planes are defined
by distances relative to the coordinate system formed by the camera
location and its view direction.
Field Descriptions
- cameraData
- The common state for the camera.
- left
- The left side of the view volume.
- top
- The top side of the view volume.
- right
- The right side of the view volume.
- bottom
- The bottom side of the view volume.
typedef struct TQ3ViewAngleAspectCameraData {
TQ3CameraData cameraData;
float fov;
float aspectRatioXToY;
} TQ3ViewAngleAspectCameraData;
Discussion
Describes the state for a traditional perspective camera.
A view angle aspect camera is a perspective camera defined by a field of
view angle and an aspect ratio.
The field of view angle must be a positive angle in radians. If the
aspect ratio is greater than 1.0, the field of view represents the
vertical range of visibility, and if the aspect ratio is less than 1.0,
the field of view is horizontal. In other words, the field of view is
the smaller of the two angles.
Field Descriptions
- cameraData
- The common state for the camera.
- fov
- The field of view of the camera, in radians.
- aspectRatioXToY
- The horizontal-to-vertical aspect ratio of the camera.
typedef struct TQ3ViewPlaneCameraData {
TQ3CameraData cameraData;
float viewPlane;
float halfWidthAtViewPlane;
float halfHeightAtViewPlane;
float centerXOnViewPlane;
float centerYOnViewPlane;
} TQ3ViewPlaneCameraData;
Discussion
Describes the state for a view plane camera.
A view plane camera is a perspective camera which allows the specification
of an off-center viewing frustum.
The frustum is formed by following the camera view direction for a given
distance, then taking the specified rectangle on that plane. The frustum
extends from the camera position through the four edges of this rectangle.
Field Descriptions
- cameraData
- The common state for the camera.
- viewPlane
- The distance from the camera to the view plane.
- halfWidthAtViewPlane
- The half-width of the rectangle on the view plane.
- halfHeightAtViewPlane
- The half-height of the rectangle on the view plane.
- centerXOnViewPlane
- The x-center of the rectangle on the view plane.
- centerYOnViewPlane
- The y-center of the rectangle on the view plane.
Enumerations
Type of cropping for a fisheye camera
typedef enum TQ3FisheyeCroppingFormat QUESA_ENUM_BASE(TQ3Uns32)
{
kQ3FisheyeCroppingFormatCircular = 0,
kQ3FisheyeCroppingFormatCroppedCircle,
kQ3FisheyeCroppingFormatFullFrame,
kQ3FisheyeCroppingFormatSize32 = 0x7FFFFFFF
} TQ3FisheyeCroppingFormat;
Constants
- kQ3FisheyeCroppingFormatCircular
- The fisheye rendering fills a circular area that fits tightly
in the smaller view dimension and is centered in the larger
view dimension.
- kQ3FisheyeCroppingFormatCroppedCircle
- The circular area of fisheye rendering is tight against the
left and right edges of the view, and is cropped on the top
and bottom.
- kQ3FisheyeCroppingFormatFullFrame
- The fisheye rendering is cropped so that the view rectangle
is totally filled.
Type of fisheye mapping function. See
Wikipedia on Fisheye Lenses.
typedef enum TQ3FisheyeMappingFunction QUESA_ENUM_BASE(TQ3Uns32)
{
kQ3FisheyeMappingFunctionOrthographic = 0,
kQ3FisheyeMappingFunctionStereographic,
kQ3FisheyeMappingFunctionEquidistant,
kQ3FisheyeMappingFunctionEquisolidAngle,
kQ3FisheyeMappingFunctionSize32 = 0x7FFFFFFF
} TQ3FisheyeMappingFunction;
Discussion
The mapping function relates the angle of an incoming light ray to the distance r
from the center of the sensor to the image of the ray, taking into account the
focal length f.
Constants
- kQ3FisheyeMappingFunctionOrthographic
- r = f sin( angle )
Since this function is increasing only up to an angle of pi/2, this kind of fisheye lens
cannot have an angle of view greater than pi (180 degrees).
- kQ3FisheyeMappingFunctionStereographic
- r = 2 * f * tan( angle/2 )
- kQ3FisheyeMappingFunctionEquidistant
- r = f * angle
- kQ3FisheyeMappingFunctionEquisolidAngle
- r = 2 * f * sin( angle/2 )
© 1999-2023 Quesa Developers (Last Updated 1/27/2023)


Below are some of the rights of voters as granted and safeguarded by the Indian Constitution.
Right to Know:
voters have the right to know about the candidates who are contesting for the elections. This right has been granted to voters under Section 19 of the Indian Constitution. This Section empowers voters to seek information pertaining to the election manifesto of the candidates, their total financial worth as also their criminal record, if any.
Right Not to Vote (NOTA):
Voters have been granted the right not to vote, which is recorded in the system. Also known as a NOTA (None of the above) vote, the voter participates in the election but chooses not to vote for any of the candidates contesting the elections.
NRI and Prisoner Voting Rights:
An NRI (Non Resident Indian) was not permitted to vote until recently. Prisoners are not permitted to exercise their franchise as per the current law.


Instructions
- After you have logged in using Google, the first step is to edit your account information to be accurate
- To post a ride:
- Either click "Use GPS" to get your current location or enter desired starting location address in the text box
- Enter an end location address in the appropriate text box
- Click "Get Route" to display the desired route on the map, directions will appear to the right of the map
- Select a date and time for the ride
- Select a price per seat and payment method for the ride
- Click "Post Ride" to finalize ride data
-
To join a ride, simply click the join ride button for the desired listing below! Your joined rides should appear under the "My Current Rides Section"
-
Rides you are driving should appear under the "Rides I'm Driving Section"
-
To rate a driver, simply click the rate driver button for the desired driver listing below! You can also leave a review if you would like.
- Note: You can only rate a driver once


POWERSURGE
Branch Coordinator's
Aditya Pandey
Aditya Pandey
8887870759
<EMAIL_ADDRESS>PowersurgePredefined Hardware
First learn the rules of the game and then try to hit the bull's eye.
About
Merge the concept of microcontrollers, power electronics , software and hardware designing .
Perform simulations, implement it in real time and upgrade yourself to higher levels of day to day
technical solutions.
Innovation is limitless......so be ready to feel the enthusiasm and expand yourself beyond the
boundaries....
Participation Criteria
Years participating :
- B.Tech. II year(ECE && EE )
- B.Tech. III year(ECE && EE )
Contact Info
- Ayush Srivastava
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Anchal Sengar
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Aditya Pandey
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
Rules
Round 1:
Powerpoint Presentation of Solution to Problem Statements
Round 2:
Hardware Presentation of Solution to Problem Statements
PowersurgePentathlon
To know what you know and to probe what you don’t know
About
Pentathlon is here with several comprehensive and rugged rounds probing all the attributes of an individual evoking realization of quirks and combat. It is a contest featuring five events which will give you an experience of a pseudo placement session.
Participation Criteria
Years participating :
- B.Tech. I year(ECE && EE )
- B.Tech. II year(EE )
- B.Tech. III year(EE )
Contact Info
- Sachin Kumar
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Gaurav Kumar Upadhyay
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Rahul Kesaravanee
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
Rules
Round 1:
- Aptitude and Electrical Core Technical for students interested in Electrical Core
- MCQ based on C/C++/OOPS and Coding Round for students interested in
Software
Round 2:
Group Discussion
Round 3:
Just a Minute Round (Impromptu speaking on provided topic)
Round 4:
Technical Interview - Separate for students interested in Core and Software
Round 5:
HR Interview
PowersurgeCircuit Bizz
Where circuits need sharpness and process meets fun
About
Welcome to one of the most innovative events of power surge where you will be tested for your wits. The learning curve is too exciting to miss where you are exposed to one of the most fun rounds. The rounds provide you with the opportunity to be involved in the diverse kind of activities which a few companies take during their placement drive. This is one event where you will have the most exciting activities.
Participation Criteria
Years participating :
- B.Tech. 2nd year(EE )
- B.Tech. 3rd year(EE )
Contact Info
- Bicky Kumar
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Kalpana
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Ajeet Kumar Bhardwaj
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
Rules
Round 1:
Quizzing Round
Round 2:
Bidding Round
Round 3:
Simulation and Viva
PowersurgeWar of Currents
Puzzles and Riddles to charge your mind
About
Do u remember the good old days during our childhood where we used to wait for our favourite cartoon shows to start on tv. Be it Dexter with his sister De De in his laboratory to epic chase battles between Tom and Jerry. The times have changed and now the mighty Rick and Morty have taken the charge. So here is a chance to cherish those moments with a slight twist from Power Surge 2019. All you have to do is watch videos and solve puzzles to win exciting prizes and goodies. So grab ur popcorn, brush ur facts, collect your grey matter and brace yourself because War Of Currents is here.
Participation Criteria
Years participating :
- B.Tech. II year(EE )
- B.Tech. III year(EE )
Contact Info
- Atul Rai
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Ayush Sharma
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Ashish Kumar
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
Rules
Round 1:
Aptitude Round
Round 2:
Audio and Visual Round
Separate qualfication scores will be there for 2nd and 3rd year students.
PowersurgeCodeSparks
Let the sparks ignite the programmer in you.
About
Software placement oriented event designed exclusively to enhance your coding skills. With the changing era and Electrical engineers getting more and more recognition in Software field, this event gives you the perfect exposure needed for the real placement drive and Recognise your Software skills.
Participation Criteria
Years participating :
- B.Tech. 2nd & 3rd Year(EE,ECE,ME,PIE,CE,CHE,BT)
Team size : Individual Event
Contact Info
- Ayush Soni
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Jyotirmay Mishra
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Saurabh Mishra
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
Rules
Round 1:
Online programming contest of two hours consisting of 5 coding tasks
Round 2:
Interview (Technical + Stress Interview)
PowersurgeCodotron
Think twice, code once
About
Codotron is the only coding event of Powersurge to test software and programming skills. It is a team event of maximum 3 members. It includes 2 rounds.
Participation Criteria
Team size : 3 (Same year)
Years participating :
- I year (ECE students only)
- II year (ECE students only)
- III year (ECE students only)
Contact Info
- Sandeep Singh
-<PHONE_NUMBER>
- Shashank Singh
-<PHONE_NUMBER>
- Ragini Kumari
-<EMAIL_ADDRESS>- Tushar Singhal
-<PHONE_NUMBER>
Rules
Written test:
There will be mcq questions and subjective questions. This round is
basically to know the software knowledge of participants. Top scorers will be forwarded to
the next round and else will be eliminated.
Online round:
It is 5 hours online coding round. It will test your problem modelling and
coding skills.


| textStyle |
2 |
Sally Reserved Words and Symbols
Sally Symbols
-
;
end of statement token.
-
:
start of label token.
-
,
second and third list item separator.
-
{
start of list
-
}
end of list
-
=
associates the right hand value with the left hand variable.
If any of these characters appears on a line by itself, that is it is the sole character in a
javaScript
command, the parser will throw an exception.
A work around is to place a whitespace character either before or after the symbol.
Sally Key Words
Below is a list of 'labels' and label modifiers.
-
files
list of files (not directories, see '-f' in setup for more information).
See example.
-
fontMap
list of mapped fonts and scaling requirements.
See example.
-
animation
list of key value pairs that represent an animation object.
See example
-
layerOrder
controls layer ordering.
See example
-
setup
sets switches that control the conversion process.
-
tail
(modifier) controls the draw order of the following layers (these
layers are drawn last).
-
head
(modifier) similar function to tail, but these layers are drawn first.
-
penTable
list of pens, their colour and line weight.
See example
-
layerStyle
list of layer names, the pens they use and the colour of any fill.
See example. Note: the default fill for object that takes a fill
(solids, some hatches) is a light grey for objects controlled by TableLayer
and a light pink colour for objects controlled by TableLayer
that have been modified by a CustomLayerStyle
.
-
textStyle
Allows the user to identify absolute values and text sizes for
specific styles that could be encountered in a DXF. textStyle is a two item list where
the first value is the case insensitive name of the style; the second is the description of
the style in CSS format (see here for more information). Please note
that you should specify the style like so:
- font-size:3.77; -- or --
- font-size:3.77px;
If you don't, default sizes will be used for all text that matches that style's defined size, however scaled text will appear normally. See example.These styles over ride fontMap settings.
-
javaScript
List of strings of JavaScript to be included in the <script> tags.
See example. javaScript
assumes that the associated
string is a line of a function to be included
into the SVG file inside <SCRIPT> tags.
The functions required to switch from English
to French are automatically included if FRENCH and ENGLISH layers exist. They
do not need to be included using this keyword. If HTML wrappers are required (which is the
default; see '-xh
' switch for more details) a french and English HTML wrapper
page is generated for all graphics. This also includes bilingual pages. The reason for this
is a historical limitation of IETM generating scripts supplied from XIA. This behaviour can
be changed with a small change to line 416 and 421 of SvgBuilder.writeSvgObjectsToFile() source code.
-
gang
searches for polyline objects on a specific layer and assumes that
any element that matches that SVG class <path> or <polyline> are wire gangs.
This functionality is related to collaborate
but their behaviour is subtly
different. If you use collaborate
on a layer with discreet elements, those that share the same
start and end point are grouped together and animation is applied to the group. When you use
gang
the conversion looks for polyline objects and assumes that they are ganged wires
even if they share the same start and end point.
What happens if you use both keywords for the same layer?
The conversion first looks for the ganged polylines and applies the animation to each polyline
individually then it looks for descrete elements that share the start and end point and groups
them together and applies animaition to that group. The polylines from the first pass are removed
from the potential matches for start and end searches in the second pass.
See example
Note: individual wires on layer 'wire' or layer 'gang' will automatically be given an id of
'wire_run'. Wire runs are found and grouped individually into a <g> element that doesn't exist until the file is converted. This means that the group could not possibly have an id from the DXF so one is automatically provided.
Special Key Words For Modifying Attributes.
-
add
adds an attribute to an element (like <text>) with optional
localization to a specific class of element (or layer or ID) (see onlayer).
See example
-
change
(not implemented yet) changes an attribute of a class of element with optional
localization to a specific class of element (or layer or ID), however you can't yet change inate
attributes like 'stroke'. Not yet implemented.
See example
-
delete
(not implemented yet) deletes an attribute from a class of element with optional
localization to a specific class of element (or layer or ID) You can only delete attributes
that were added with the add keyword to date. This may change in the future. Not yet implemented.
See example
-
onlayer
Restricts searches to specific layers or
element classes. These two terms are used interchangeably here.
-
withid
Restricts searches to objects with specific IDs. The ID of typical
SvgElements is its AutoCAD 'handle' (group code 5 in DXF). For special cases like ENTITIES
which are blocks from the DXF file, the ID is the name of the block. Layers will have IDs
that are the name of the layer they came from in the DXF with the characters 'st' as a
prefix. So if something comes from layer 'layer1' in the SVG the ID of that layer will be
'stlayer1'.
-
implied
If, and only if the value of an attribute is a javascript function
call, and if any of the arguments is 'implied
', the word implied shall be replaced
with the content of the enclosed element which is usually the SvgText element. This content
can be optionally formatted as well (See EventAttributeModifier Object documentation).
Animation Key Words
-
set
(modifier) type of animation (set attribute).
-
animate
(modifier) animate an attribute.
-
animateColour
(modifier) animate an object's colour.
-
animateMotion
(modifier) make an object move.
-
animateTransform
(modifier) transform an object.
-
collaborate
(switch) interpret discrete objects as continuous lines.
See also command line switch -collaborate. They do the same thing. If you add collaborate
the contents of the layers are connected together to form a single polyline for animation
or what-have-you and each resulting element has this animation applied. With out it the
animation is just applied to the layer as a whole.
Sally is a case sensitive language. That means that '-z' is different from '-Z'. All key words are
case sensitive. The case
sensitivity has no effect on file names 'file.txt' is the same as 'FiLe.Txt' on Windows, however
the two would be considered different if you running conversions on a Un*x system.
If you are using TextPad with syntax highlighting, the keywords will appear in colour to
let you know that they are spelled correctly. If you do not have such luxuries, remember the
following rule about naming conventions:
- All key words resemble Java (SVG, EMCA, JavaScript, etc.) naming conventions. So
use lower case except for the first letter of the second word. Do not use spaces to
separate key words. Here is an example: the key word for setting conversion switches is
setup
. A compound keyword would look like this 'animateTransform
'.
- If in doubt, use the British spelling of words 'animateColour' not 'animateColor'.
- Sally uses C++ comment styles that means
'/* comment */' for multi line comments or
// comment
for single line comments.
Basically you create a list of expressions you would like executed. The list is enclosed
in a set of curly braces ('{' and '}') and, is in turn, preceded by a keyword or words and a colon.
All entries on a list must end
with a semi-colon ';'. There may or need not be space between the keywords and punctuation
depending on you coding style. I prefer the 'C' style myself.
Example: To create a list of files to process use -
:files {
"c:/tmp/file1.dxf"; // This one runs the conversion in the c:\tmp directory; note the slash direction.
"file2.dxf"; // This file is converted in the current directory.
}
Note:The files section is for files only. If you require a directory
to be converted consider using the '-f' and a quoted directory name in the setup section
instead.
Here is another example of a fontmap list:
:fontMap {
uvb.shx = cour.ttf, 0.8; // uvb maps to courier at 80% size.
simplex.shx = switzn.ttf; // replace simplex with Switzerland no scaling.
}
Example: Create a list or preferred layer ordering. In this sample, if such layers
exist in the dxf file, they will be placed in this order with the french layer
appearing last of all. This is critical if you want halos to be placed below arlines
or text and other objects.
:layerOrder tail{
"halo";
"arline";
"english";
"french";
}
Example: How to add an attribute or content to an element.
Here we add a JavaScript event function to a mouseover attribute text objects on layer 'french'.
:add "text" onlayer "french" {
"onmouseover" = "someFunc(arg)";
}
Example: Here we add a JavaScript event function to a mouseover attribute text objects on layer 'french'.
with an ID of '1F' case sensitive.
:add "text" onlayer "french" withid "1F" {
"onmouseover" = "someFunc(arg1, arg2)";
}
Example: Here we add an attribute to the object with an ID of 'BAB' case sensitive. Note: It
is not necessary for the ID attribute to be included on the element for this to work.
:add withid "BAB" {
"onclick" = "alert('This elements handle is BAB')";
}
Example: Again add a JavaScript event function to a mouseover attribute but this time
we add it to all text elements.
:add "text" {
"onmouseover" = "someFunc(9, true)";
}
Example: This adds a JavaScript event function to a mouseover attribute but this time
to a specific element with the id of '7E' case sensitive.
:add withid "7E" {
"onmouseover" = "someFunc(arg1, arg2)";
}
Example: This adds a JavaScript event function to a mouseover attribute but this time
to the <g> that represents the layer 't' case insensitive.
:add onlayer "t" {
"onmouseover" = "someFunc(arg1, arg2, arg3)";
}
Example: This adds the attribute and value to EVERY ELEMENT.
:add "null" {
"xml:ns" = "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd";
}
or...
:add "*" {
"onclick" = "alert('you clicked an element!')";
}
Example: This adds the attribute and value to EVERY LAYER.
:add onlayer "*" {
"onclick" = "alert('you clicked a layer!')";
}
Example: This adds the attribute and value to the root or <SVG> element. Any additional attribute target definitions (like withid
or onlayer
) will be ignored.
:add svg {
"xmlns" = "http://www.w3.org/2000/svg";
}
or ...
:add root {
"xmlns:xlink" = "http://www.w3.org/1999/xlink";
}
Note: in the context of converting Spar illustrations, wire runs are given ids of 'wire_run'. If you wish to apply some JavaScript
via the config.d2s
they can be identified by this id or as a path element on the layer from which they originate (usually 'wire', but you milage may vary).
Example: Create a set of animation objects. In this case anything drawn on layer1 will,
be invisible when the drawing is loaded and gradually fade-in over the course of 3 seconds.
The effect will be frozen until the image is reloaded.
:animation set "layer1" {
attributeName = "opacity";
from = 0;
to = 1;
dur = "3s";
fill = freeze;
}
/* This animation will, when the mouse rolls over an object on the layer 'wires',
* turn their stroke to red for the duration of 3 seconds. The collaborate switch
* says that the AnimationEngine should make intelligent decisions about whether
* objects are related to one-another.
*/
:animation animateColour "wires"{
collaborate = "true"; // Searches for all line segments that are part of the same wire run.
attributeName = "stroke";
begin = "mouseOver";
to = red;
dur = "3s";
}
More On the Key Word 'collaborate'
The 'collaborate' key word instructs Dxf2Svg to look for patterns and make intelligent decisions
about what makes up a compound object and then apply animation to that object. In this way
things like wire runs can be detected and animated as required.
Example: How to identify a layer as having ganged wires.
/* This animation will, when the mouse rolls over an object on the layer 'wires',
* turn their stroke to red for the duration of 3 seconds. The gang switch
* says that the AnimationEngine should make intelligent decisions about the
* polylines on this layer as they are assumed to be ganged wires.
*/
:animation animateColour "wire_gangs"{
gang = "true"; // Searches for all polyline segments and apply animation to each.
attributeName = "stroke";
begin = "mouseOver";
to = red;
dur = "3s";
}
Table of Animation Attributes
Here is a complete list of animation attributes.
| Attribute |
Set |
Animate |
Animate Motion |
Animate Colour |
Animate Transform |
| attributeName |
R |
R |
|
R |
|
| attributeType |
* |
* |
|
* |
|
| to |
* |
* |
* |
* |
|
| begin |
* |
* |
* |
* |
* |
| dur |
* |
* |
* |
* |
* |
| end |
* |
* |
* |
* |
* |
| restart |
* |
* |
* |
* |
* |
| repeatCount |
* |
* |
* |
* |
* |
| repeatDur |
* |
* |
* |
* |
* |
| fill |
* |
* |
* |
* |
* |
| additive |
|
* |
* |
* |
* |
| accumulate |
|
* |
* |
* |
* |
| from |
|
* |
* |
* |
|
| by |
|
* |
* |
* |
|
| calcMode |
|
* |
* |
* |
|
| values |
|
* |
* |
* |
|
| keyTimes |
|
* |
* |
* |
|
| keySplines |
|
* |
* |
* |
|
| path |
|
|
* |
|
|
| origin |
|
|
* |
|
|
| Empty Element |
* |
* |
|
* |
|
where 'R' stands for Required.
No star means that the attribute should not be applied to that type of animation. Unsupported
attribute animation requests are ignored and a warning is issued.
Here are some sample penTable and layerStyle scripts:
// Standard pen weights for Spar CC-130
:penTable{
//Pen# = Colour, LineWeight
1 = 7, 0.015;
2 = 7, 0.013;
3 = 7, 0.007;
4 = 7, 0.020;
5 = 7, 0.008;
6 = 7, 0.003;
7 = 7, 0.007;
8 = 255, 0.003;
9 = 7, 0.008;
10 = 7, 0.007;
11 = 7, 0.015;
12 = 7, 0.007;
13 = 7, 0.013;
14 = 7, 0.027;
}
Layer styling example:
/* This script will make layer "halo" take pen 8 and a fill of 255 (white).
* arline will take pen 3 etc.
*/
:layerStyle {
//Layer = Pen, Fill
"halo" = 8, 255;
"arline" = 3;
"3" = 1;
"1" = 2;
"t" = 3, 7;
}
Text styling example:
/* This code block will force text with these predefined styles to render at exactly the
* same size as listed.
*/
:textStyle {
//Style name = Style description
"6pte" = "font-family:'Switzerland';stroke:none;font-size:3.77;";
"6ptbold" = "font-family:'Switzerland Bold';stroke:none;font-size:3.77;";
"8pte" = "font-family:'Switzerland';stroke:none;font-size:5.15;";
"8ptbold" = "font-family:'Switzerland Bold';stroke:none;font-size:5.15;";
"10pte" = "font-family:'Switzerland';stroke:none;font-size:6.59;";
"10ptbold"= "font-family:'Switzerland Bold';stroke:none;font-size:6.59;";
"12pte" = "font-family:'Switzerland';stroke:none;font-size:7.83;";
"12ptbold"= "font-family:'Switzerland Bold';stroke:none;font-size:7.83;";
"standard"= "font-family:'Switzerland';stroke:none;font-size:3.55;";
}
Example of JavaScript list:
/* All the lines in this list are treated like lines in a javaScript function.
* You must be careful to use single quotes to quote values in your functions
* as double quotes will be interpreted by the config.d2s parser.
*/
:javaScript {
"// Here is a JavaScript comment that has to go into the file. ";
"/* This is another. Incidentally, the '\t' chars make things easier to read. */";
"var isEnglish = true;";
"function init() {";
"\tparent.changeLanguage = svgChangeLanguage;";
"\tenglishLayer.setAttribute('visibility', "visible');";
"\tfrenchLayer.setAttribute('visibility', 'hidden');";
"\tisEnglish = true;";
"}";
}
Note the use of quotes
The configuration file parser recognizes double quotes ( " )
as string delimiters. To avoid the inevitable problem of quoting values within your JavaScript,
use single quotes ( ' ) to quote values. This will be parsed correctly as part of a script
and will work in the final JavaScript output and will not cause the config parser to misinterpret
the double quote as the end of one string or the start of the next.


What is this?
This is an implementation of
Adam "Atomic" Saltsman's game,
Terratri.
implemented by Michal Wallace.
Rules
(Copied from Adam's original post.)
- Players start in the middle cell of opposite sides of the board.
- Players get 2 actions per turn. Viable actions are: Move one space (up, down, left or right), or Fortify.
- When a player moves to an unoccupied territory they automatically claim it, placing or flipping a territory marker to show their claim.
- Unoccupied territory is any grid cell, claimed or not, that has neither a player pawn nor a fort.
- Players cannot move onto any tile that is occupied by the enemy pawn or an enemy fort.
- Players must end their turn on a different tile than where they started if the territories or forts did not change during that turn.*
- Players may Fortify the territory they currently occupy if they have claim over at least 5 unoccupied territories.
- Players do not need to use all their actions so long as they do not break any other rules by doing so.
- First player to 5 forts wins.
- If multiple games are played back to back, players should take turns going first.
About this Implementation
This program was developed in python with Google App Engine.
How to use the interface:
- First player will always play as red.
- Send a link to your friend to challenge them.
- Game proceeds in real time when both players are connected.
- On your turn, click the arrow icons to move.
- The square icon builds a fort. (Requires 5 colored squares)
- When the game is over, the red player can refresh the page to play again.
Source code is available on github.


Mixing volume with varying size. The size of the volume is given by:
Losses are neglected. The shaft power is completely converted into mechanical work on the fluid.
The flange position has to be equal or greater than zero. Otherwise the simulation stops. The force of the flange results from the pressure difference between medium and ambient pressure and the cross sectional piston area. For using the component, a top level instance of the ambient model with the inner attribute is needed.
The pressure at both fluid ports equals the medium pressure in the volume. No suction nor discharge valve is included in the model.
The thermal port is directly connected to the medium. The temperature of the thermal port equals the medium temperature. The heat capacity of the cylinder and the piston are not includes in the model.


[dscrdeql] <Jellysmash> it'll burn if I'm not there constantly turning
[dscrdeql] <edsky> And beets
[dscrdeql] <Jellysmash> wow a whole day
[dscrdeql] <edsky> Beers
[dscrdeql] <Jellysmash> that's good though if you get friends around drinking and party
[dscrdeql] <Jellysmash> and then have the BBQ
[dscrdeql] <Jellysmash> perfect
[dscrdeql] <Jellysmash> for a wekeend when you have the time
[dscrdeql] <Jellysmash> BEERS
[dscrdeql] <Jellysmash> yes , that's a must
[dscrdeql] <edsky> Yeah for sure
[dscrdeql] <Jellysmash> I like red wine as well
[dscrdeql] <Jellysmash> if it's very hot I like white wine
[dscrdeql] <Jellysmash> quite chilled
[dscrdeql] <edsky> Yes later in the night for me though
[dscrdeql] <Jellysmash> but beer is always great for a BBQ
[dscrdeql] <edsky> I want to do a brisket next
[dscrdeql] <edsky> Can’t beat it when done right
[dscrdeql] <micaine10> Good day
[dscrdeql] <edsky> Hello
[dscrdeql] <Jellysmash> Hi there @micaine10
[dscrdeql] <Jellysmash> how's your day/night going?
[dscrdeql] <Jellysmash> it's about 10pm here now
[dscrdeql] <Jellysmash> dark and cold
[dscrdeql] <Jellysmash> but good to be home from work
[dscrdeql] <Jellysmash> and ready for the weekend
[dscrdeql] <Jellysmash> it's finally rained a little today
[dscrdeql] <Jellysmash> I was seriously worried about all the garden
[dscrdeql] <Jellysmash> it was going terrible
[dscrdeql] <Jellysmash> hadn't rained in so long
[dscrdeql] <Jellysmash> whenever that may be
[dscrdeql] <Jellysmash> at least it might survive for a while now until the next decent rain
[dscrdeql] <Jellysmash> hopefully might be some ove rthe weekend
GatewayBOT24-Aug-18 12:34 PM
[dscrdeql] <Jellysmash> Need to get some tweet action going
GatewayBOT24-Aug-18 01:15 PM
[dscrdeql] <ghøst> Are there new official tweets?
[dscrdeql] <adriana> GUYS
[dscrdeql] <adriana>
[dscrdeql] <adriana> i got my test results
[dscrdeql] <adriana> 2 years i was resitting english where i tried so hard to learn and stuff. this year i gave up and didnt go to any lessons. and i pass..
"I've missed more than 9000 shots in my career. I've lost almost 300 games. 26 times, I've been trusted to take the game winning shot and missed. I've failed...
[dscrdeql] <ghøst> "I've missed more than 9000 shots in my career. I've lost almost 300 games. 26 times, I've been trusted to take the game winning shot and missed. I've failed over and over and over again in my life. And that is why I succeed."
[dscrdeql] <ghøst> Jordan
GatewayBOT24-Aug-18 01:58 PM
[dscrdeql] <KQweci-Mod> Morning guys, Fall alseep again
[dscrdeql] <KQweci-Mod> I can't see my order on exrates and eql not in wallet too
[dscrdeql] <KQweci-Mod> Any had such issues? It's not even showing in order
[dscrdeql] <! ariewayq ! The Real Human> coffe time dear
[dscrdeql] <Combat Wom-mod> @KQweci-Mod no never had that issue.. sell order?
[dscrdeql] <! ariewayq ! The Real Human> morning for you all
[dscrdeql] <KQweci-Mod> Nope buy order
[dscrdeql] <Combat Wom-mod> did it get filled?
[dscrdeql] <KQweci-Mod> Not yet
[dscrdeql] <Combat Wom-mod> but its not showing up on your orders?
[dscrdeql] <KQweci-Mod> Yeah
[dscrdeql] <Combat Wom-mod> hmm not sure never had that happen
[dscrdeql] <Combat Wom-mod> might have to contact support
[dscrdeql] <KQweci-Mod> brb I want to look around if I can find some solution
[dscrdeql] <KQweci-Mod> Sure
[dscrdeql] <Combat Wom-mod> just double check its not hiding some where
[dscrdeql] <Combat Wom-mod> because they did do updates to the site
[dscrdeql] <KQweci-Mod> Alright
GatewayBOT24-Aug-18 02:53 PM
[dscrdeql] <Jonathan-Mod> Morning folks
[dscrdeql] <x2maano> good eveing
[dscrdeql] <! ariewayq ! The Real Human> morning too friends
[dscrdeql] <ghøst> Morning - Evening
[dscrdeql] <! ariewayq ! The Real Human> great day for u all
[dscrdeql] <Jonathan-Mod> Hey @! ariewayq ! The Real Human @ghøst @x2maano
[dscrdeql] <! ariewayq ! The Real Human> hellow too
[dscrdeql] <! ariewayq ! The Real Human> did you breakfast
[dscrdeql] <Jonathan-Mod> Did you create a buy order or "accept" one?  The Real Human
[dscrdeql] <! ariewayq ! The Real Human> lol whats that ghose
GatewayBOT24-Aug-18 03:19 PM
[dscrdeql] <ECA Gorillaz> Morning every1
[dscrdeql] <ECA Gorillaz> @Jonathan just coffee for me
[dscrdeql] <Jonathan-Mod> Nice
[dscrdeql] <Jellysmash> morning @ECA Gorillaz
[dscrdeql] <Jellysmash>
GatewayBOT24-Aug-18 03:52 PM
[dscrdeql] <NWhiskeyTango> Awesome quote Jordan
[dscrdeql] <NWhiskeyTango> Awesome quote @KQweci!
[dscrdeql] <NWhiskeyTango> I say something similar to my guys at work. Im a mechanic. I tell them not to worry about breaking things it happens. The only guys that don't break things are the ones that don't work.
[dscrdeql] <NWhiskeyTango> BOOM
[dscrdeql] <NWhiskeyTango> Inspirational lol
[dscrdeql] <MassimoStyle> Congrats on reaching level 5 @NWhiskeyTango
GatewayBOT24-Aug-18 04:18 PM
[dscrdeql] <SwimedDragon> Good evening
[dscrdeql] <SwimedDragon> How is everybody doing?
GatewayBOT24-Aug-18 04:39 PM
[dscrdeql] <akomismo> good nyt guys :tipsy:
[dscrdeql] <akomismo> seeya
[dscrdeql] <SwimedDragon> Sleep well akomismo
GatewayBOT24-Aug-18 05:12 PM
[dscrdeql] <x2maano> good evening @SwimedDragon
[dscrdeql] <x2maano> good
GatewayBOT24-Aug-18 05:21 PM
[dscrdeql] <Smedley> Are you founders planning on allocating the funds to the wallets as outlined in the whitepaper soon?
GatewayBOT24-Aug-18 05:56 PM
[dscrdeql] <CowboyCrypto- Founder> it's in the works, we have a lot going on right now behind the scenes.
GatewayBOT24-Aug-18 06:43 PM
[dscrdeql] <micaine10> Good day
GatewayBOT24-Aug-18 06:59 PM
[dscrdeql] <Jonathan-Mod> Hi @micaine10
GatewayBOT24-Aug-18 07:11 PM
[dscrdeql] <ghøst> good evening!
GatewayBOT24-Aug-18 07:48 PM
[dscrdeql] <Podmaster> good evenin to you!
GatewayBOT24-Aug-18 08:07 PM
[dscrdeql] <Jellysmash> morning all
[dscrdeql] <Jellysmash>
[dscrdeql] <Jellysmash> time to wake up and smell the coffee
[dscrdeql] <Jellysmash> gonna be another great day today


The goal is to allow browser flow (aka: ftdoi.org/doi
) like one often does with https://doi.org
and https://oadoi.org
, AND for programmatic flow in any programming language of choice (aka: ftdoi.org/api/...
). Right now, only the programmatic flow is supported, but you can of course use the api in browser if you like.
Figuring out URLs for full text version of articles is a huge PITA.
There's https://doi.org for resolving DOIs to their full URLs on the web, and
there's https://oadoi.org/ for the same but to OA versions.
However, there's no good tool for figuring out links to versions for text mining:
typically either pdf or xml.
There is Crossref's TDM (text and data mining) bit, where publishers voluntarily
deposit full text links into Crossref's metadata. However, very few publishers
do this; some that do don't deposit correct metadata; some deposit but don't update
when they change their URL structure (and publishers change URL stucture A LOT).
Checkout my brief analysis.
This API builds on work at https://github.com/sckott/pubpatterns - which is simply rules for building URLs. The idea here is that we can crowd source the best knowledgee on correct URL patterns to full text versions of articles on a per publisher basis, either by crossref member number, or by DOI prefix. If there's publishers that aren't included, send a PR.
source code for the API is at https://github.com/sckott/pubpatternsapi


US Government Greenhouse Gas Emissions
Emission Decisions
Department of Army
Broadcasting Board of Governors
Consumer Product Safety Commission
Court Services and Offender Supervision Agency
Defense Agencies
Department of Air Force
Department of Homeland Security
Department of Agriculture
Department of Commerce
Department of Energy
Department of Education
Department of the Interior
Department of Justice
Department of Labor
Equal Employment Opportunity Commission
Environmental Protection Agency
Federal Communications Commission
Federal Housing Finance Agency
Federal Maritime Commission
Government Printing Office
General Services Administration
Department of Health and Human Services
Department of Housing and Urban Development
US International Trade Commission
Library of Congress
National Archives & Records Administration
National Aeronautics and Space Administration
GALLERY National Gallery of Art
Department of Navy
National Labor Relations Board
Nuclear Regulatory Commission
National Science Foundation
National Transportation Safety Board
Office of Personnel Management
Peace Corps
Pretrial Services Agency for the Dist of Columbia
Small Business Administration
Smithsonian Institution
Social Security Administration
Department of State
Department of Transportation
Department of the Treasury
Tennessee Valley Authority
Corps of Engineers, Civil Works
United States Marine Corps
U.S. Postal Service
Department of Veterans Affairs
Refresh Chart


This is a very narrowly focused tutorial about web development aimed at novices who have absolutely no web dev experience, nor have used Github or Git, or even the command line.
The end product is a web portfolio, built (mostly) from scratch, that is easy to edit and easy to publish anywhere – Github merely provides an easy starting point.
(This tutorial is in progress. Feel free to fork it on Github)
Because it’s easy and free. And if you don’t like Github, you can take the exact code you’ve produced and put it anywhere else that acts as a web server. The important thing is: if you do want to learn web development, how to use Git, how to use Github, how to program, and so forth, this lesson provides a stepping-stone to those concepts as well as a canvas to practice on. And even if you don’t want to learn anything, you can come away with something useful: a customized web homepage that you can maintain yourself.
Tweet this lesson if you like it: Tweet
Fork it and copy/improve it on Github.
To be added: more text, explanation
Getting Started With a GitHub Repository - the first of a seven-article series on Github for non-coders, by Konrad M. Lawson, for The Chronicle of Higher Education
GitHub For Beginners: Don’t Get Scared, Get Started - by Lauren Orsini, for ReadWrite
Github Cheat Sheet - inspired by Github’s Zac Holman, a reference that assumes you have some Git/Github experience.


administrative assistant to neha narula, director the digital currency initiative at the mit media lab. interested in sociology, human-computer interaction, and the future of money.


아름다운 IT_Portfilio By Eun ho
Chania
The atmosphere in Chania has a touch of Florence and Venice.
Chania
The atmosphere in Chania has a touch of Florence and Venice.
Flowers
Beatiful flowers in Kolymbari, Crete.
Flowers
Beatiful flowers in Kolymbari, Crete.
Previous
Next


About Sleepy D
As a child, Sleepy D never really had any goals aside from wanting a vast span of land alongside a few pets, because that sounds like a good time. As he grew older, he soon realized that a profession was needed in order to make something like this happen, and he turned to his main activity as his inspiration: the production and engineering of music and sound.
After playing guitar in rock, metal and jazz bands for seven years, Sleepy D made the decision to attend Berklee College of Music in Boston, Massachusetts.
While attending Berklee, Sleepy D learned the necessary skills to produce and engineer musicians to their fullest potential, designing soundscapes that fit the artist's needs in the process. He also aquired the skill of mixing and mastering every artist, ranging from pop, to djent, to funk,to orchestral, with his expertise highest in R&B and Hip-hop.
Sleepy D currently produces, mixes, and masters in Boston, MA, with a focus on quality, not quantity, when it comes to the artist.


Iodine
If so happens that you got root access on the server you can try iodine (https://github.com/yarrick/iodine). It works almost like hans icmp tunneling tool - it creates a pair of tun adapters and tunnels data between them as DNS queries. Server side:
iodined -f -c -P P@ssw0rd <IP_ADDRESS> tunneldomain.com
Client side:
iodine -f -P P@ssw0rd tunneldomain.com -r
Successful connection will yield direct client visibility at address <IP_ADDRESS>. Note, that this tunneling technique is quite slow. Your best bet is to use a compressed ssh connection over the resulting connection:
ssh<EMAIL_ADDRESS>-C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080


This document gives an overview of the PyObjC for developers (of the package).
One of the sections describes how all of it works, and some of the limitations.
This document is a incomplete, it should be updated.
Classes are scanned for methods when the Python wrapper for a class is created. We then create Python wrappers for those methods. This way users can use the normal Python introspection methods to check which methods are available.
There are several occasions when these method tables are rescanned, because classes can grow new methods when categories are loaded into the runtime. Additionally, it is known that some Cocoa frameworks in Mac OS X change their method tables when the first instance is created.
It is possible to subclass Objective-C classes from Python. These classes end up in a structure containing both a Python type object and an Objective-C class. Instances of these classes also contain both a Python instance and an Objective-C object.
The first Python subclass of an Objective-C class introduces a new instance
variable in the Objective-C object to store the pointer to the Python half of
the cluster. This variable is always referenced by name. The Python half is
a subclass of objc_object
that already contains a pointer to an Objective-C
object. This first subclass also introduces a number of class and instance
methods that the PyObjC bridge uses to maintain the illusion of a single
object on both sides. Check class-builder.m for details.
Documentation
Example scripts and applets.
The pure Python parts of the packages that comprise PyObjC. Currently contains the packages 'objc', 'PyObjCScripts', 'PyObjCTools' and the semi-automatically generated wrappers for the 'AddressBook', 'AppKit', 'ExceptionHandling', 'Foundation', 'InterfaceBuilder', 'Message', 'PreferencePanes', 'ScreenSaver', 'SecurityInterface' and 'WebKit' frameworks.
Extension modules related to the packages in 'Lib'.
Scripts used during building and/or development of PyObjC.
Resources used for building the Apple Installer packages.
Xcode templates for PyObjC development.
A local copy of libffi, the Foreign Function Interface library used by PyObjC.
Modules used by setup.py for building and distributing PyObjC.
Local copies of Python packages and modules used by PyObjC that are not expected to be found in the minimum supported version of Python. These are not automatically installed by setup.py, but some may be included in a bdist_mpkg installer (currently, just py2app).
The Objective-C rules for reference counts are pretty easy: A small number
of class methods (alloc
, allocWithZone:
, copy
, ...) transfer
object ownership to the caller. For all other objects you have to call
retain
if you want to keep a reference. This includes all factory
methods, such as [NSString stringWithCString:"bla"]
!
When programming Cocoa in Python, you rarely need to worry about
reference counts: the objc
module makes this completely transparent to
user. This is mostly implemented in [de]pythonify_c_value
. Additonal
code is needed when calling methods that transfer ownership of their return
value (as described above) and when updating a instance variable in an
Objective-C object (retain new and release old, in that order). Both are
implemented.
Python unicode
instances are proxied by the OC_PythonUnicode
subclass
of NSString
. This is a proxy, and will maintain the identity of the
original unicode
instance.
NSString
instances are represented in Python as a subtype of unicode
:
objc.pyobjc_unicode
. This performs a conversion, because Python's
unicode
type is immutable, but it also maintains a reference to the
original NSString
. NSString
and NSMutableString
methods are
available from the objc.pyobjc_unicode
object, though they do not show up
via Python's introspection mechanisms. In order to get the latest Python
representation of a NSMutableString
, use the return value of its self()
method.
Python str
instances are proxied by the OC_PythonString
subclass of
NSString
. This is a proxy, and will maintain the identity of the
original str
instance. OC_PythonString
will use the default encoding
of NSString
, so its results might be surprising if you are using non-ASCII
text. It is recommended that you use unicode
whenever possible. In order
to help you determine where you are not using unicode
, it is possible
to trigger an objc.PyObjCStrBridgeWarning
warning whenever a str
instance crosses the bridge:
import objc objc.setStrBridgeEnabled(False)
To promote these to an exception, do the following:
import objc import warnings warnings.filterwarnings('error', objc.PyObjCStrBridgeWarning)


{% load i18n %}
{% blocktrans trimmed %} A duplicate header column, {{ name }}, was found. Please rename the column in your source spreadsheet and continue again (below). {% endblocktrans %}
{{ name }}


Jamie Chadwick knows she isn't ready for F1 step yet
by Tom MasonW Series champion Jamie Chadwick has admitted that she isn't ready to make the step up to F1 just yet. The 21-year-old is currently Williams development driver and won the inaugural all-female W Series earlier this year.
The Brit won the W Series by ten points, finishing ahead of Beitske Visser after winning two of the first three races of the season.
"I now know what I need to learn in the next few years," Chadwick told the Guardian.
"I get comments on social media asking if I will be replacing Robert Kubica. That is not even a realistic option. I need the time to develop.
"If I get to F1, I want to be the best possible driver to make the mark I need to make and do the best possible job rather than being there a year or two early for no reason.”
In order to be able to race in F1, Chadwick would need to earn 40 Super License points which come into the W Series from the 2020 season.


A Scheme expression is a construct that returns a value, such as a variable reference, literal, procedure call, or conditional.
Expression types are categorized as primitive or derived. Primitive expression types include variables and procedure calls. Derived expression types are not semantically primitive, but can instead be explained in terms of the primitive constructs as in section 7.3 Derived expression types. They are redundant in the strict sense of the word, but they capture common patterns of usage, and are therefore provided as convenient abbreviations.
An expression consisting of a variable (section see section 3.1 Variables and regions) is a variable reference. The value of the variable reference is the value stored in the location to which the variable is bound. It is an error to reference an unbound variable.
(define x 28) x ==> 28
`(quote <datum>)' evaluates to <datum>. <Datum> may be any external representation of a Scheme object (see section see section 3.3 External representations). This notation is used to include literal constants in Scheme code.
(quote a) ==> a (quote #(a b c)) ==> #(a b c) (quote (+ 1 2)) ==> (+ 1 2)
`(quote <datum>)' may be abbreviated as '<datum>. The two notations are equivalent in all respects.
'a ==> a '#(a b c) ==> #(a b c) '() ==> () '(+ 1 2) ==> (+ 1 2) '(quote a) ==> (quote a) ''a ==> (quote a)
Numerical constants, string constants, character constants, and boolean constants evaluate "to themselves"; they need not be quoted.
'"abc" ==> "abc" "abc" ==> "abc" '145932 ==><PHONE_NUMBER>32 ==> 145932 '#t ==> #t #t ==> #t
As noted in section 3.5 Storage model, it is an error to alter a constant
(i.e. the value of a literal expression) using a mutation procedure like
set-car!
or string-set!
.
A procedure call is written by simply enclosing in parentheses expressions for the procedure to be called and the arguments to be passed to it. The operator and operand expressions are evaluated (in an unspecified order) and the resulting procedure is passed the resulting arguments.
(+ 3 4) ==> 7 ((if #f + *) 3 4) ==> 12
A number of procedures are available as the values of variables in the
initial environment; for example, the addition and multiplication
procedures in the above examples are the values of the variables +
and *
. New procedures are created by evaluating lambda expressions
(see section see section 4.1.4 lambda expressions).
Procedure calls are also called combinations.
Note: In contrast to other dialects of Lisp, the order of evaluation is unspecified, and the operator expression and the operand expressions are always evaluated with the same evaluation rules.
Note: Although the order of evaluation is otherwise unspecified, the effect of any concurrent evaluation of the operator and operand expressions is constrained to be consistent with some sequential order of evaluation. The order of evaluation may be chosen differently for each procedure call.
Note: In many dialects of Lisp, the empty combination, (), is a legitimate expression. In Scheme, combinations must have at least one subexpression, so () is not a syntactically valid expression.
Syntax: <Formals> should be a formal arguments list as described below, and <body> should be a sequence of one or more expressions.
Semantics: A lambda expression evaluates to a procedure. The environment in effect when the lambda expression was evaluated is remembered as part of the procedure. When the procedure is later called with some actual arguments, the environment in which the lambda expression was evaluated will be extended by binding the variables in the formal argument list to fresh locations, the corresponding actual argument values will be stored in those locations, and the expressions in the body of the lambda expression will be evaluated sequentially in the extended environment. The result of the last expression in the body will be returned as the result of the procedure call.
(lambda (x) (+ x x)) ==> a procedure ((lambda (x) (+ x x)) 4) ==> 8 (define reverse-subtract (lambda (x y) (- y x))) (reverse-subtract 7 10) ==> 3 (define add4 (let ((x 4)) (lambda (y) (+ x y)))) (add4 6) ==> 10
<Formals> should have one of the following forms:
It is an error for a <variable> to appear more than once in <formals>.
((lambda x x) 3 4 5 6) ==> (3 4 5 6) ((lambda (x y . z) z) 3 4 5 6) ==> (5 6)
Each procedure created as the result of evaluating a lambda expression is tagged
with a storage location, in order to make eqv?
and
eq?
work on procedures (see section see section 6.2 Equivalence predicates).
Syntax: <Test>, <consequent>, and <alternate> may be arbitrary expressions.
Semantics:
An if
expression is evaluated as follows: first,
<test> is evaluated. If it yields a true value (see
section see section 6.1 Booleans), then <consequent> is evaluated and
its value is returned. Otherwise <alternate> is evaluated and its
value is returned. If <test> yields a false value and no
<alternate> is specified, then the result of the expression is
unspecified.
(if (> 3 2) 'yes 'no) ==> yes (if (> 2 3) 'yes 'no) ==> no (if (> 3 2) (- 3 2) (+ 3 2)) ==> 1
<Expression> is evaluated, and the resulting value is stored in
the location to which <variable> is bound. <Variable> must
be bound either in some region enclosing the set!
expression
or at top level. The result of the set!
expression is
unspecified.
(define x 2) (+ x 1) ==> 3 (set! x 4) ==> unspecified (+ x 1) ==> 5
For reference purposes, section 7.3 Derived expression types gives rewrite rules that will convert constructs described in this section into the primitive constructs described in the previous section.
Syntax: Each <clause> should be of the form
(<test> <expression> ...)
where <test> is any expression. The last <clause> may be an "else clause," which has the form
(else <expression1> <expression2> ...).
Semantics:
A cond
expression is evaluated by evaluating the <test>
expressions of successive <clause>s in order until one of them
evaluates to a true value (see
section see section 6.1 Booleans). When a <test> evaluates to a true
value, then the remaining <expression>s in its <clause> are
evaluated in order, and the result of the last <expression> in the
<clause> is returned as the result of the entire cond
expression. If the selected <clause> contains only the
<test> and no <expression>s, then the value of the
<test> is returned as the result. If all <test>s evaluate
to false values, and there is no else clause, then the result of
the conditional expression is unspecified; if there is an else
clause, then its <expression>s are evaluated, and the value of
the last one is returned.
(cond ((> 3 2) 'greater) ((< 3 2) 'less)) ==> greater (cond ((> 3 3) 'greater) ((< 3 3) 'less) (else 'equal)) ==> equal
Some implementations support an alternative <clause> syntax, (<test> => <recipient>), where <recipient> is an expression. If <test> evaluates to a true value, then <recipient> is evaluated. Its value must be a procedure of one argument; this procedure is then invoked on the value of the <test>.
(cond ((assv 'b '((a 1) (b 2))) => cadr) (else #f)) ==> 2
Syntax: <Key> may be any expression. Each <clause> should have the form
((<datum1> ...) <expression1> <expression2> ...),
where each <datum> is an external representation of some object. All the <datum>s must be distinct. The last <clause> may be an "else clause," which has the form
(else <expression1> <expression2> ...).
Semantics:
A case
expression is evaluated as follows. <Key> is
evaluated and its result is compared against each <datum>. If the
result of evaluating <key> is equivalent (in the sense of
eqv?
; see section see section 6.2 Equivalence predicates) to a <datum>, then the
expressions in the corresponding <clause> are evaluated from left
to right and the result of the last expression in the <clause> is
returned as the result of the case
expression. If the result of
evaluating <key> is different from every <datum>, then if
there is an else clause its expressions are evaluated and the
result of the last is the result of the case
expression; otherwise
the result of the case
expression is unspecified.
(case (* 2 3) ((2 3 5 7) 'prime) ((1 4 6 8 9) 'composite)) ==> composite (case (car '(c d)) ((a) 'a) ((b) 'b)) ==> unspecified (case (car '(c d)) ((a e i o u) 'vowel) ((w y) 'semivowel) (else 'consonant)) ==> consonant
The <test> expressions are evaluated from left to right, and the value of the first expression that evaluates to a false value (see section see section 6.1 Booleans) is returned. Any remaining expressions are not evaluated. If all the expressions evaluate to true values, the value of the last expression is returned. If there are no expressions then #t is returned.
(and (= 2 2) (> 2 1)) ==> #t (and (= 2 2) (< 2 1)) ==> #f (and 1 2 'c '(f g)) ==> (f g) (and) ==> #t
The <test> expressions are evaluated from left to right, and the value of the first expression that evaluates to a true value (see section see section 6.1 Booleans) is returned. Any remaining expressions are not evaluated. If all expressions evaluate to false values, the value of the last expression is returned. If there are no expressions then #f is returned.
(or (= 2 2) (> 2 1)) ==> #t (or (= 2 2) (< 2 1)) ==> #t (or #f #f #f) ==> #f (or (memq 'b '(a b c)) (/ 3 0)) ==> (b c)
The three binding constructs let
, let*
, and letrec
give Scheme a block structure, like Algol 60. The syntax of the three
constructs is identical, but they differ in the regions they establish
for their variable bindings. In a let
expression, the initial
values are computed before any of the variables become bound; in a
let*
expression, the bindings and evaluations are performed
sequentially; while in a letrec
expression, all the bindings are in
effect while their initial values are being computed, thus allowing
mutually recursive definitions.
Syntax: <Bindings> should have the form
((<variable1> <init1>) ...),
where each <init> is an expression, and <body> should be a sequence of one or more expressions. It is an error for a <variable> to appear more than once in the list of variables being bound.
Semantics: The <init>s are evaluated in the current environment (in some unspecified order), the <variable>s are bound to fresh locations holding the results, the <body> is evaluated in the extended environment, and the value of the last expression of <body> is returned. Each binding of a <variable> has <body> as its region.
(let ((x 2) (y 3)) (* x y)) ==> 6 (let ((x 2) (y 3)) (let ((x 7) (z (+ x y))) (* z x))) ==> 35
See also named let
, section 4.2.4 Iteration.
Syntax: <Bindings> should have the form
((<variable1> <init1>) ...),
and <body> should be a sequence of one or more expressions.
Semantics:
Let*
is similar to let
, but the bindings are performed
sequentially from left to right, and the region of a binding indicated
by `(<variable> <init>)' is that part of the let*
expression to the right of the binding. Thus the second binding is done
in an environment in which the first binding is visible, and so on.
(let ((x 2) (y 3)) (let* ((x 7) (z (+ x y))) (* z x))) ==> 70
Syntax: <Bindings> should have the form
((<variable1> <init1>) ...),
and <body> should be a sequence of one or more expressions. It is an error for a <variable> to appear more than once in the list of variables being bound.
Semantics:
The <variable>s are bound to fresh locations holding undefined
values, the <init>s are evaluated in the resulting environment (in
some unspecified order), each <variable> is assigned to the result
of the corresponding <init>, the <body> is evaluated in the
resulting environment, and the value of the last expression in
<body> is returned. Each binding of a <variable> has the
entire letrec
expression as its region, making it possible to
define mutually recursive procedures.
(letrec ((even? (lambda (n) (if (zero? n) #t (odd? (- n 1))))) (odd? (lambda (n) (if (zero? n) #f (even? (- n 1)))))) (even? 88)) ==> #t
One restriction on letrec
is very important: it must be possible
to evaluate each <init> without assigning or referring to the value of any
<variable>. If this restriction is violated, then it is an error. The
restriction is necessary because Scheme passes arguments by value rather than by
name. In the most common uses of letrec
, all the <init>s are
lambda expressions and the restriction is satisfied automatically.
The <expression>s are evaluated sequentially from left to right, and the value of the last <expression> is returned. This expression type is used to sequence side effects such as input and output.
(define x 0) (begin (set! x 5) (+ x 1)) ==> 6 (begin (display "4 plus 1 equals ") (display (+ 4 1))) ==> unspecified and prints 4 plus 1 equals 5
Note: [SICP] uses the keyword
sequence
instead ofbegin
.
...) (<test> <expression> ...) <command> ...)
Do
is an iteration construct. It specifies a set of variables to
be bound, how they are to be initialized at the start, and how they are
to be updated on each iteration. When a termination condition is met,
the loop exits with a specified result value.
Do
expressions are evaluated as follows:
The <init> expressions are evaluated (in some unspecified order),
the <variable>s are bound to fresh locations, the results of the
<init> expressions are stored in the bindings of the
<variable>s, and then the iteration phase begins.
Each iteration begins by evaluating <test>; if the result is false (see section see section 6.1 Booleans), then the <command> expressions are evaluated in order for effect, the <step> expressions are evaluated in some unspecified order, the <variable>s are bound to fresh locations, the results of the <step>s are stored in the bindings of the <variable>s, and the next iteration begins.
If <test> evaluates to a true value, then the
<expression>s are evaluated from left to right and the value of
the last <expression> is returned as the value of the do
expression. If no <expression>s are present, then the value of
the do
expression is unspecified.
The region of the binding of a <variable>
consists of the entire do
expression except for the <init>s.
It is an error for a <variable> to appear more than once in the
list of do
variables.
A <step> may be omitted, in which case the effect is the same as if `(<variable> <init> <variable>)' had been written instead of `(<variable> <init>)'.
(do ((vec (make-vector 5)) (i 0 (+ i 1))) ((= i 5) vec) (vector-set! vec i i)) ==> #(0 1 2 3 4) (let ((x '(1 3 5 7 9))) (do ((x x (cdr x)) (sum 0 (+ sum (car x)))) ((null? x) sum))) ==> 25
Some implementations of Scheme permit a variant on the syntax of
let
called "named let
" which provides a more general
looping construct than do
, and may also be used to express
recursions.
Named let
has the same syntax and semantics as ordinary let
except that <variable> is bound within <body> to a procedure
whose formal arguments are the bound variables and whose body is
<body>. Thus the execution of <body> may be repeated by
invoking the procedure named by <variable>.
(let loop ((numbers '(3 -2 1 6 -5)) (nonneg '()) (neg '())) (cond ((null? numbers) (list nonneg neg)) ((>= (car numbers) 0) (loop (cdr numbers) (cons (car numbers) nonneg) neg)) ((< (car numbers) 0) (loop (cdr numbers) nonneg (cons (car numbers) neg))))) ==> ((6 1 3) (-5 -2))
The delay
construct is used together with the procedure force
to
implement lazy evaluation or call by need.
(delay <expression>) returns an object called a
promise which at some point in the future may be asked (by
the force
procedure)
to evaluate
<expression> and deliver the resulting value.
See the description of force
(section see section 6.9 Control features) for a
more complete description of delay
.
"Backquote" or "quasiquote" expressions are useful for constructing a list or vector structure when most but not all of the desired structure is known in advance. If no commas appear within the <template>, the result of evaluating `<template> is equivalent to the result of evaluating '<template>. If a comma appears within the <template>, however, the expression following the comma is evaluated ("unquoted") and its result is inserted into the structure instead of the comma and the expression. If a comma appears followed immediately by an at-sign (@), then the following expression must evaluate to a list; the opening and closing parentheses of the list are then "stripped away" and the elements of the list are inserted in place of the comma at-sign expression sequence.
`(list ,(+ 1 2) 4) ==> (list 3 4) (let ((name 'a)) `(list ,name ',name)) ==> (list a (quote a)) `(a ,(+ 1 2) ,@(map abs '(4 -5 6)) b) ==> (a 3 4 5 6 b) `((foo ,(- 10 3)) ,@(cdr '(c)) . ,(car '(cons))) ==> ((foo 7) . cons) `#(10 5 ,(sqrt 4) ,@(map sqrt '(16 9)) 8) ==> #(10 5 2 4 3 8)
Quasiquote forms may be nested. Substitutions are made only for unquoted components appearing at the same nesting level as the outermost backquote. The nesting level increases by one inside each successive quasiquotation, and decreases by one inside each unquotation.
`(a `(b ,(+ 1 2) ,(foo ,(+ 1 3) d) e) f) ==> (a `(b ,(+ 1 2) ,(foo 4 d) e) f) (let ((name1 'x) (name2 'y)) `(a `(b ,,name1 ,',name2 d) e)) ==> (a `(b ,x ,'y d) e)
The notations
`<template> and (quasiquote <template>)
are identical in all respects.
`,<expression>' is identical to `(unquote <expression>)',
and
`,@<expression>' is identical to `(unquote-splicing <expression>)'.
The external syntax generated by write
for two-element lists whose
car is one of these symbols may vary between implementations.
(quasiquote (list (unquote (+ 1 2)) 4)) ==> (list 3 4) '(quasiquote (list (unquote (+ 1 2)) 4)) ==> `(list ,(+ 1 2) 4) i.e., (quasiquote (list (unquote (+ 1 2)) 4))
Unpredictable behavior can result if any of the symbols
quasiquote
, unquote
, or unquote-splicing
appear in
positions within a <template> otherwise than as described above.


{% extends "accounts/base.html" %} {% block localheader_title %}{% if disabled_registration %}{% trans %}Registration disabled{% endtrans %}{% else %}{% trans %}Authentication disabled{% endtrans %}{% endif %}{% endblock %} {% block content %}
{% trans %}User registration has been currently disabled on this site.{% endtrans %}
{% else %}{% trans %}User login and registration has been currently disabled on this site.{% endtrans %}
{% endif %}{% trans %}If you think it is a mistake, please contact an administrator.{% endtrans %}
{% trans %}Thank you.{% endtrans %}


Try Saying:
Hack Poly
President Trump
Etc
Wolfram Speech
Press for Fun
Press for fun
menu
Top
Speak to Wolfram
Press the mic and speak
mic
error
Wolfram|Alpha did not understand your input


Introduction to Computational Biology
This project is maintained by EDS@UGA
Assignments are posted and submitted through JupyterHub. Please note that this site is only accessible either on the UGA campus, or through the VPN.
Assignments are two weeks long, and will be posted here as they are released.


FCC Wikipedia Viewer
Search
Random
Special title treatment
With supporting text below as a natural lead-in to additional content.
Full article
Special title treatment
With supporting text below as a natural lead-in to additional content.
Full article
Special title treatment
With supporting text below as a natural lead-in to additional content.
Full article
Special title treatment
With supporting text below as a natural lead-in to additional content.
Full article
Special title treatment
With supporting text below as a natural lead-in to additional content.
Full article
Special title treatment
With supporting text below as a natural lead-in to additional content.
Full article
Special title treatment
With supporting text below as a natural lead-in to additional content.
Full article
Special title treatment
With supporting text below as a natural lead-in to additional content.
Full article


This year's US conference is a wrap! Thanks for another amazing year!
DjangoCon US 2021 was held virtually and hosted hundreds of attendees from all over the world!
{% comment %}Supportive copy speaking to the line up or topics discussed, generally setting the mood for a successful event. Basically the primary takeaway.
{% endcomment %}Fond memory from 2021? Share it with us:
From tutorials on building mobile applications and rapid prototyping to talks about data visualization and accessibility, 2021 was DjangoCon US's best year ever!
{% comment %}This was an innovative year for DjangoCon US! Every year, DjangoCon US works hard to make our program better and more accessible, and this year we're super proud of the features we were able to add:
- Deep Dive Day, a single-track conference day dedicated to talks that go into more detail on Django topics
- Accessibility wins: In addition to subsidized child care and captioned conference videos, this year we had a dedicated lactation room and live captioning for all talks
- Travel stipends for all speakers
Thanks to our generous sponsors, who helped make these conference dreams a reality.
Awesome Talks
We featured over {{ total_presentations.size }} talks this year. Here are some crowd favorites!
See the full schedule{{ "Our Presenters are :sparkles: Amazing :sparkles:" | markdownify | remove: '
' | remove: '
' }}{{ ":chart_with_upwards_trend: 2021 By the Numbers" | markdownify | remove: '
' | remove: '
' }}2021 was an amazing year for attendance, sponsorship, talks, really everything that goes into making a conference great.
{% comment %}The buzz we heard on Twitter was that it was a lot of people's favorite DjangoCon US ever!
{% endcomment %}And remember...
Under the hood it's all just a grid system. So you can just add a new row if you want to associate more text with this block. Easy peasy, lemon squeezy.
Picture Perfect
We captured so many Kodak moments over the week! Thanks to Bartek Pawlik for being our official conference photographer and saving these memories for us.
View all photos{{ "DjangoCon 2021 was possible through lots of :heart:" | markdownify | remove: '
' | remove: '
' }}Our organizers put hundreds of hours of heart and soul into this conference. We couldn't do it without each and every one of you!


--- title: Apple in Talks to Acquire ARM layout: post ---
Apple is ARM's biggest customer and speculation is that the iPad maker wants to take chip design in house.
“A deal would make a lot of sense for Apple,” said one trader. “That way, they could stop ARM's technology from ending up in everyone else's computers and gadgets.” Traders reckon a bid would come in at around 400p a share, valuing ARM at more than £5.2 billion.
This would be really, really bad for competition in the mobile market. I really hope this doesn't happen.


My favorite things
Things that interest me include
- playing computer games
- Riding Bicycle
- Hanging out with friends
- Playing soccer
my favorite friends include:
- Tamminga Givondo
- Clare Wahome
- Mabel Karani
My favorite food include:
- Fries
- Chicken
- Homemade ugali
- Chapati


| name | age | qualification | nationality | date of birth | state | university | percentage | year of passing | district |
|---|---|---|---|---|---|---|---|---|---|
| {{student.name}} | {{student.age}} | {{student.qualification}} | {{student.nationality}} | {{student.dateofbirth}} | {{student.state}} | {{student.university}} | {{student.percentage}} | {{student.yearofpassing}} | {{student.district}} |


--- layout: post date: 2012-08-21 time: "09:00:00" authors: ["Greg Wilson"] title: An Updated List of Upcoming Workshops tags: ["Bootcamps"] ---
Here's an update to our upcoming workshop list:
| Venue | Start Date | Instructor(s) |
| DAFX Conference (York, UK) | 2012-09-13 | Greg Wilson |
| University of Oslo | 2012-09-17 | Hans Petter Langtangen, Greg Wilson |
| Purdue University | 2012-10-08 | Michael Hansen, Anthony Scopatz, Jeff Shelton |
| Lawrence Berkeley National Laboratory | 2012-10-17 | Matt Davis, Katy Huff |
| University of British Columbia | 2012-10-18 | Laura Trembley-Boyer, Ian Mitchell, Peter Rawsthorne, Greg Wilson |
| University of California Berkeley | 2012-10-20 | Matt Davis, Katy Huff |
| Caltech | 2012-10-23 | Matt Davis |
| Oxford | 2012-10-30 | Stephen Crouch, Mike Jackson |
| Scripps Institute | 2012-11-15 | Titus Brown, Tracy Teal |
| University of North Carolina | 2012-11-28 | Jason Pell, Ethan White, Greg Wilson |
| University of Edinburgh | 2012-12-04 | TBD |
| University of Texas (Austin) | 2012-12-10 | Rosangela Canino-Koning, Katy Huff, Anthony Scopatz |
| University of Chicago | 2013-01-12 | Katy Huff, Anthony Scopatz |
| Technical University Munich | 2013-01-22 | TBD |
| Macquarie University | 2013-01-31 | Greg Wilson |
| Virginia Tech | 2013-01-31 | Tommy Guy |
| AMOS Conference (Melbourne) | 2013-02-14 | Greg Wilson |
We're currently trying to settle on dates (and instructors) for:
If you're interested in helping us teach, and in taking part in an online study group this fall on how to teach this stuff, please get in touch.


Iterable<E> Interface
The Iterable interface allows to get an Iterator out of an Iterable object.
This interface is used by the for-in construct to iterate over an Iterable object. The for-in construct takes an Iterable object at the right-hand side, and calls its iterator method to get an Iterator on it.
A user-defined class that implements the Iterable interface can be used as the right-hand side of a for-in construct.