GrADS supports two types of data grids:
lon/lat
grids (and not necessarily regular,
e.g., gaussian);
When preprojected grids are opened in GrADS, bilinear
interpolation constants are calculated and all date are displayed
on an internal GrADS lat/lon grid defined by the
xdef
and ydef
card in the data description or .ctl
file (that's
why it takes
longer to "open" a preprojected grid data set).
It is very important to point out that the internal GrADS grid
can be any grid as it is completely independent of the
preprojected data grid. Thus, there is nothing
stopping you
displaying preprojected data on a very high res
lon/lat grid
(again, defined in the .ctl
by xdef
and ydef
). In fact, you
could create and open multiple .ctl files with different
resolutions and/or regions which pointed to the same
preprojected
data file.
When you do a display
(i.e., get a grid of data), the
preprojected data are bilinearly interpolated to
the GrADS
internal lat/lon grid. For
preprojected
scalar fields (e.g., 500
mb heights), the display is adequate and the precision of the
interpolation can be controlled by xdef
and
ydef
to define a
higher spatial resolution grid.
The big virtue of this approach is that all built in GrADS
analytic functions (e.g., aave
,
hcurl
...)
continue to work even
though the data were not originally on a lon/lat grid. The
downside is that you are not looking directly at your data on a
geographic map. However, one could always define a .ctl file
which simply opened the data file as i,j data and displayed
without the map (set
mpdraw
off). So, in my opinion, this
compromise is not that limiting even if as a modeller you wanted
to look at the grid--you just don't get the map background.
Preprojected vector fields
are a little trickier,
depending on
whether the vector is defined relative to the data grid or
relative to the Earth. For example, NMC polar stereo grids use
winds relative to the data grid and thus must be rotated to the
internal GrADS lat/lon grid (again defined in the
.ctl
file by
the xdef
and ydef
cards).
The only potential problem with working with preprojected data
(e.g., Lambert Conformal model data) is defining the projection
for GrADS. This is accomplished using a pdef
card
in the data
descriptor .ctl
file.
pdef
card
is:
pdef isize jsize projtype ipole jpole lonref gridinc
pdef 53 45 nps 27 49 -105 190.5
where,
ipole
and jpole
are the (i,j) of
the pole referenced from the lower left corner at (1,1) and gridinc
is the dx
in km.The relevant GrADS source is:
float re,xlat,wlong,r;
} else {
void w3fb04 (float alat, float along, float xmeshl, float
orient,
float *xi, float *xj) {
/*
C
C SUBPROGRAM: W3FB04 LATITUDE, LONGITUDE TO GRID
COORDINATES
C AUTHOR: MCDONELL,J.
ORG: W345 DATE: 90-06-04
C
C ABSTRACT: CONVERTS THE
COORDINATES OF A LOCATION ON EARTH FROM THE
C NATURAL
COORDINATE SYSTEM OF LATITUDE/LONGITUDE TO THE GRID (I,J)
C
COORDINATE SYSTEM OVERLAID ON A POLAR STEREOGRAPHIC MAP PRO
C
JECTION TRUE AT 60 DEGREES N OR S LATITUDE. W3FB04 IS THE
REVERSE
C OF W3FB05.
C
C PROGRAM HISTORY LOG:
C 77-05-01 J.
MCDONELL
C 89-01-10 R.E.JONES CONVERT TO MICROSOFT FORTRAN 4.1
C
90-06-04 R.E.JONES CONVERT TO SUN FORTRAN 1.3
C
93-01-26 B.
Doty converted to
C
C
C USAGE: CALL W3FB04 (ALAT,
ALONG,
XMESHL, ORIENT, XI, XJ)
C
C INPUT VARIABLES:
C
NAMES
INTERFACE DESCRIPTION OF VARIABLES AND TYPES
C ------
--------- -----------------------------------------------
C
ALAT ARG LIST LATITUDE IN DEGREES (<0 IF SH)
C ALONG
ARG
LIST WEST LONGITUDE IN DEGREES
C XMESHL ARG LIST MESH
LENGTH OF GRID IN KM AT 60 DEG LAT(<0 IF SH)
C
(190.5 LFM GRID, 381.0 NH PE GRID,-381.0 SH PE GRID)
C
ORIENT
ARG LIST ORIENTATION WEST LONGITUDE OF THE GRID
C
(105.0 LFM GRID, 80.0 NH PE GRID, 260.0 SH PE GRID)
C
C
OUTPUT VARIABLES:
C NAMES INTERFACE DESCRIPTION OF
VARIABLES
AND TYPES
C ------ ---------
-----------------------------------------------
C XI
ARG
LIST I OF THE POINT RELATIVE TO NORTH OR SOUTH POLE
C
XJ
ARG LIST J OF THE POINT RELATIVE TO NORTH OR SOUTH POLE
C
C
SUBPROGRAMS CALLED:
C NAMES
LIBRARY
C
------------------------------------------------------- --------
C COS SIN
SYSLIB
C
C REMARKS: ALL PARAMETERS IN THE CALLING
STATEMENT
MUST BE
C REAL. THE RANGE OF ALLOWABLE LATITUDES IS
FROM A
POLE TO
C 30 DEGREES INTO THE OPPOSITE HEMISPHERE.
C THE
GRID USED IN THIS SUBROUTINE HAS ITS ORIGIN (I=0,J=0)
C
AT
THE POLE IN EITHER HEMISPHERE, SO IF THE USER'S GRID HAS ITS
C
ORIGIN AT A POINT OTHER THAN THE POLE, A TRANSLATION IS NEEDED
C
TO GET I AND J. THE GRIDLINES OF I=CONSTANT ARE PARALLEL TO A
C
LONGITUDE DESIGNATED BY THE USER. THE EARTH'S RADIUS IS TAKEN
C TO BE 6371.2 KM.
C
C ATTRIBUTES:
C
LANGUAGE: SUN FORTRAN
1.4 C MACHINE: SUN SPARCSTATION 1+
C*/
static float
radpd =
0.01745329;
static float earthr = 6371.2;
re = (earthr * 1.86603) / xmeshl;
xlat
= alat * radpd;
if (xmeshl>0.0) {
wlong =
(along + 180.0 -
orient) * radpd;
r =
(re * cos(xlat)) / (1.0 +
sin(xlat));
*xi =
r * sin(wlong);
*xj = r *
cos(wlong);
re = -re;
xlat =
-xlat;
wlong = (along - orient) *
radpd;
r =
(re * cos(xlat)) / (1.0+ sin(xlat));
*xi =
r *
sin(wlong);
*xj =
-r * cos(wlong);
}
}
A typical NORAPS Lambert-Conformal grid is described below, including the C code which sets up the internal interpolation.
The .ctl
file is:
dset ^temp.grd
title NORAPS DATA TEST
undef 1e20
pdef 103 69 lcc 30 -88 51.5 34.5 20 40 -88 90000 90000
xdef 180 linear -180 1.0
ydef 100 linear -10 1.0
zdef 16 levels 1000 925 850 700 500 400 300 250 200 150 100 70
50 30 20 10
tdef 1 linear 00z1jan94 12hr
vars 1
t 16 0 temp
endvars
where,
103
= #pts in x 69
= #pts in y lcc
= Lambert-Conformal 30
= lat of ref point 88
= lon of ref point (E is positive, W is negative) 51.5
= i of ref point 34.5
= j of ref point 20
= S true lat 40
= N true lat 88
= standard lon 90000
= dx in M 90000
= dy in M
Otherwise, it is the same as other GrADS files.
Note - the xdef/ydef
apply to the
lon/lat
grid GrADS internally interpolates to and
can be anything...
The GrADS source which maps lon/lat
of the GrADS
internal lon/lat
grid to i,j
of the preprojected grid is:
/* Lambert Conformal conversion */
void ll2lc (float *vals, float grdlat, float grdlon,
float *grdi, float *grdj) {
/* Subroutine to convert from lat-lon to Lambert Conformal i,j.
Provided by NRL Monterey; converted to C 6/15/94.
c SUBROUTINE: ll2lc
c
c PURPOSE: To compute i- and j-coordinates of a specified
c grid given the latitude and longitude points.
c All latitudes in this routine start
c with -90.0 at the south pole and increase
c northward to +90.0 at the north pole. The
c longitudes start with 0.0 at the Greenwich
c meridian and increase to the east, so that
c 90.0 refers to 90.0E, 180.0 is the inter-
c national dateline and 270.0 is 90.0W.
c
c INPUT VARIABLES:
c
c vals+0 reflat: latitude at reference point (iref,jref)
c
c vals+1 reflon: longitude at reference point (iref,jref)
c
c vals+2 iref: i-coordinate value of reference point
c
c vals+3 jref: j-coordinate value of reference point
c
c vals+4 stdlt1: standard latitude of grid
c
c vals+5 stdlt2: second standard latitude of grid (only required
c if igrid = 2, lambert conformal)
c
c vals+6 stdlon: standard longitude of grid (longitude that
c points to the north)
c
c vals+7 delx: grid spacing of grid in x-direction
c for igrid = 1,2,3 or 4, delx must be in meters
c for igrid = 5, delx must be in degrees
c
c vals+8 dely: grid spacing (in meters) of grid in y-direction
c for igrid = 1,2,3 or 4, delx must be in meters
c for igrid = 5, dely must be in degrees
c
c grdlat: latitude of point (grdi,grdj)
c
c grdlon: longitude of point (grdi,grdj)
c
c grdi: i-co ordinate(s) that this routine will generate
c information for
c
c grdj: j-coordinate(s) that this routine will generate
c information for
c
*/
float pi, pi2, pi4, d2r, r2d, radius, omega4;
float gcon,ogcon,ahem,deg,cn1,cn2,cn3,cn4,rih,xih,yih,rrih,check;
float alnfix,alon,x,y;
pi = 4.0*atan(1.0);
pi2 = pi/2.0;
pi4 = pi/4.0;
d2r = pi/180.0;
r2d = 180.0/pi;
radius = 6371229.0;
omega4 = 4.0*pi/86400.0;
/*mf -------------- mf*/
/*case where standard lats are the same */
if(*(vals+4) == *(vals+5)) {
gcon = sin(*(vals+4)*d2r);
} else {
gcon = (log(sin((90.0-*(vals+4))*d2r))
log(sin((90.0-*(vals+5))*d2r)))
/(log(tan((90.0-*(vals+4))*0.5*d2r))
log(tan((90.0-*(vals+5))*0.5*d2r)));
}
/*mf -------------- mf*/
ogcon = 1.0/gcon;
ahem = fabs(*(vals+4))/(*(vals+4));
deg = (90.0-fabs(*(vals+4)))*d2r;
cn1 = sin(deg);
cn2 = radius*cn1*ogcon;
deg = deg*0.5;
cn3 = tan(deg);
deg = (90.0-fabs(*vals))*0.5*d2r;
cn4 = tan(deg);
rih = cn2*pow((cn4/cn3),gcon);
deg = (*(vals+1)-*(vals+6))*d2r*gcon;
xih = rih*sin(deg);
yih = -rih*cos(deg)*ahem;
deg = (90.0-grdlat*ahem)*0.5*d2r;
cn4 = tan(deg);
rrih = cn2*pow((cn4/cn3),gcon);
check = 180.0-*(vals+6);
alnfix = *(vals+6)+check;
alon = grdlon+check;
while (alon<0.0) alon = alon+360.0;
while (alon>360.0) alon = alon-360.0;
deg = (alon-alnfix)*gcon*d2r;
x = rrih*sin(deg);
y = -rrih*cos(deg)*ahem;
*grdi = *(vals+2)+(x-xih)/(*(vals+7));
*grdj = *(vals+3)+(y-yih)/(*(vals+8));
}
Wind rotation has also been added so that vector data will be properly displayed.
The pdef card for a typical eta model grid is:
pdef 181 136 eta.u -97.0 41.0 0.38888888 0.37037037
181
= #pts in x
136
= #pts in y
eta.u
= eta grid, unstaggered
-97.0
= lon of ref point (E is positive in GrADS, W
is negative)
[deg]
41.0
= lat of ref point [deg]
0.3888
= dlon [deg]
0.37037
= dlat [deg]
The source code in GrADS for the lon,lat -> i,j mapping is:
void ll2eg (int im, int jm, float *vals, float grdlon, float grdlat, float *grdi, float *grdj, float *alpha) { /* Subroutine to convert from lat-lon to NMC eta i,j. Provided by Eric Rogers NMC; converted to C 3/29/95 by Mike Fiorino. c SUBROUTINE: ll2eg c c PURPOSE: To compute i- and j-coordinates of a specified c grid given the latitude and longitude points. c All latitudes in this routine start c with -90.0 at the south pole and increase c northward to +90.0 at the north pole. The c longitudes start with 0.0 at the Greenwich c meridian and increase to the east, so that c 90.0 refers to 90.0E, 180.0 is the inter- c national dateline and 270.0 is 90.0W. c c INPUT VARIABLES: c c vals+0 tlm0d: longitude of the reference center point c c vals+1 tph0d: latitude of the reference center point c c vals+2 dlam: dlon grid increment in deg c c vals+3 dphi: dlat grid increment in deg c c c grdlat: latitude of point (grdi,grdj) c c grdlon: longitude of point (grdi,grdj) c c grdi: i-coordinate(s) that this routine will generate c information for c c grdj: j-coordinate(s) that this routine will generate c information for c */ float pi,d2r,r2d, earthr; float tlm0d,tph0d,dlam,dphi; float phi,lam,lame,lam0,phi0,lam0e,cosphi,sinphi,sinphi0,cosphi0,sinlam r,cos lamr; float x1,x,y,z,bigphi,biglam,cc,num,den,tlm,tph; int idim,jdim; pi=3.141592654; d2r=pi/180.0; r2d=1.0/d2r; earthr=6371.2; tlm0d=-*(vals+0); /* convert + W to + E, the grads standard for longitude */ tph0d=*(vals+1); dlam=(*(vals+2))*0.5; dphi=(*(vals+3))*0.5; /* grid point and center of eta grid trig */ /* convert to radians */ phi = grdlat*d2r; lam = -grdlon*d2r; /* convert + W to + E, the grads standard for longitude */ lame = (grdlon)*d2r; phi0 = tph0d*d2r; lam0 = tlm0d*d2r; lam0e = ( 360.0 + *(vals+0) )*d2r; /* cos and sin */ cosphi = cos(phi); sinphi = sin(phi); sinphi0 = sin(phi0); cosphi0 = cos(phi0); sinlamr=sin(lame-lam0e); coslamr=cos(lame-lam0e); x1 = cosphi*cos(lam-lam0); x = cosphi0*x1+sinphi0*sinphi; y = -cosphi*sin(lam-lam0); z = -sinphi0*x1+cosphi0*sinphi; /* params for wind rotation alpha */ cc=cosphi*coslamr; num=cosphi*sinlamr; den=cosphi0*cc+sinphi0*sinphi; tlm=atan2(num,den); /* parms for lat/lon -> i,j */ bigphi = atan(z/(sqrt(x*x+y*y)))*r2d; biglam = atan(y/x)*r2d; idim = im*2-1; jdim = jm*2-1 ; *grdi = (biglam/dlam)+(idim+1)*0.5; *grdj = (bigphi/dphi)+(jdim+1)*0.5; *grdi = (*grdi+1)*0.5-1; *grdj = (*grdj+1)*0.5-1; *alpha = asin( ( sinphi0*sin(tlm)) / cosphi ) ; /* printf("qqq %6.2f %6.2f %6.2f %6.2f %g %g %g %g\n", grdlon,grdlat,*grdi,*grdj,*alpha,tlm*r2d,cosphi,sinphi0); */ }
Wind rotation has not been implemented!!! Use only for scalar fields.
pdef ni nj pse slat slon polei polej dx dy sgn
ni
= # points in x
nj
= # points in y
slat
= absolute value of the standard latitude
slon
= absolute value of the standard longitude
pse
= polar stereo,
"eccentric"
polei
= x index position of the pole (where (0,0) is the
index of the first point vice the more typical (1,1) )
polej
= y index position of the pole (where (0,0) is the
index of the first point vice the more typical (1,1) )
dx
= delta x in km
dy
= delta y in km
sgn
= 1 for N polar stereo and -1
for S polar
stereo
Source code in GrADS for the lon,lat -> i,j mapping:
void ll2pse (int im, int jm, float *vals, float lon, float lat, float *grdi, float *grdj) { /* Convert from geodetic latitude and longitude to polar stereographic grid coordinates. Follows mapll by V. J. Troisi. */ /* Conventions include that slat and lat must be absolute values */ /* The hemispheres are controlled by the sgn parameter */ /* Bob Grumbine 15 April 1994. */ const rearth = 6738.273e3; const eccen2 = 0.006693883; const float pi = 3.141592654; float cdr, alat, along, e, e2; float t, x, y, rho, sl, tc, mc; float slat,slon,xorig,yorig,sgn,polei,polej,dx,dy; slat=*(vals+0); slon=*(vals+1); polei=*(vals+2); polej=*(vals+3); dx=*(vals+4)*1000; dy=*(vals+5)*1000; sgn=*(vals+6); xorig = -polei*dx; yorig = -polej*dy; /*printf("ppp %g %g %g %g %g %g %g\n",slat,slon,polei,polej,dx,dy,sgn);*/ cdr = 180./pi; alat = lat/cdr; along = lon/cdr; e2 = eccen2; e = sqrt(eccen2); if ( fabs(lat) > 90.) { *grdi = -1; *grdj = -1; return; } else { t = tan(pi/4. - alat/2.) / pow( (1.-e*sin(alat))/(1.+e*sin(alat)) , e/2.); if ( fabs(90. - slat) < 1.E-3) { rho = 2.*rearth*t/ pow( pow(1.+e,1.+e) * pow(1.-e,1.-e) , e/2.); } else { sl = slat/cdr; tc = tan(pi/4.-sl/2.) / pow( (1.-e*sin(sl))/(1.+e*sin(sl)), (e/2.) ); mc = cos(sl)/ sqrt(1.-e2*sin(sl)*sin(sl) ); rho = rearth * mc*t/tc; } x = rho*sgn*cos(sgn*(along+slon/cdr)); y = rho*sgn*sin(sgn*(along+slon/cdr)); *grdi = (x - xorig)/dx+1; *grdj = (y - yorig)/dy+1; /*printf("ppp (%g %g) (%g %g %g) %g %g\n",lat,lon,x,y,rho,*grdi,*grdj);*/ return; } }
pdef 26 16 ops 40.0 -100.0 90000.0 90000.0 14.0 9.0 180000.0
180000.0
26
= #pts in x
16
= #pts in y
ops
=
oblique polar
stereo
40.0
= lat of ref
point (14.0, 9.0)
-100.0
= lon of ref point (14.0, 9.0 (E is
positive in
GrADS, W is negative)
90000.0
= xref offset [m]
90000.0
= yref offset [m]
14.0
= i of ref point
9.0
= j of
ref
point
180000.0
= dx [m]
180000.0
= dy [m]
Wind rotation has not been implemented!!! Use only for scalar fields.
Source code in GrADS for the lon,lat -> i,j mapping:
void ll2ops(float *vals, float lni, float lti, float *grdi, float *grdj)
{
const float radius = 6371229.0 ;
const float pi = 3.141592654;
float stdlat, stdlon, xref, yref, xiref, yjref, delx , dely;
float plt,pln;
double pi180,c1,c2,c3,c4,c5,c6,arg2a,bb,plt1,alpha,
pln1,plt90,argu1,argu2;
double hsign,glor,rstdlon,glolim,facpla,x,y;
stdlat = *(vals+0);
stdlon = *(vals+1);
xref = *(vals+2);
yref = *(vals+3);
xiref = *(vals+4);
yjref = *(vals+5);
delx = *(vals+6);
dely = *(vals+7);
c1=1.0 ;
pi180 = asin(c1)/90.0;
/*
c
c set flag for n/s hemisphere and convert longitude to <0 ; 360>
interval
c
*/
if(stdlat >= 0.0) {
hsign= 1.0 ;
} else {
hsign=-1.0 ;
}
/*
c
c set flag for n/s hemisphere and convert longitude to <0 ; 360>
interval
c
*/
glor=lni ;
if(glor <= 0.0) glor=360.0+glor ;
rstdlon=stdlon;
if(rstdlon < 0.0) rstdlon=360.0+stdlon;
/*
c
c test for a n/s pole case
c
*/
if(stdlat == 90.0) {
plt=lti ;
pln=fmod(glor+270.0,360.0) ;
goto l2000;
}
if(stdlat == -90.0) {
plt=-lti ;
pln=fmod(glor+270.0,360.0) ;
goto l2000;
}
/*
c
c test for longitude on 'greenwich or date line'
c
*/
if(glor == rstdlon) {
if(lti > stdlat) {
plt=90.0-lti+stdlat;
pln=90.0;
} else {
plt=90.0-stdlat+lti;
pln=270.0;;
}
goto l2000;
}
if(fmod(glor+180.0,360.0) == rstdlon) {
plt=stdlat-90.0+lti;
if(plt < -90.0) {
plt=-180.0-plt;
pln=270.0;
} else {
pln= 90.0;
}
goto l2000;
}
/*
c
c determine longitude distance relative to rstdlon so it belongs to
c the absolute interval 0 - 180
c
*/
argu1 = glor-rstdlon;
if(argu1 > 180.0) argu1 = argu1-360.0;
if(argu1 < -180.0) argu1 = argu1+360.0;
/*
c
c 1. get the help circle bb and angle alpha (legalize arguments)
c
*/
c2=lti*pi180 ;
c3=argu1*pi180 ;
arg2a = cos(c2)*cos(c3) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = max1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* min1(arg2a, c1) */
bb = acos(arg2a) ;
c4=hsign*lti*pi180 ;
arg2a = sin(c4)/sin(bb) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
alpha = asin(arg2a) ;
/*
c
c 2. get plt and pln (still legalizing arguments)
c
*/
c5=stdlat*pi180 ;
c6=hsign*stdlat*pi180 ;
arg2a = cos(c5)*cos(bb) + sin(c6)*sin(c4) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
plt1 = asin(arg2a) ;
arg2a = sin(bb)*cos(alpha)/cos(plt1) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
pln1 = asin(arg2a) ;
/*
c
c test for passage of the 90 degree longitude (duallity in pln)
c get plt for which pln=90 when lti is the latitude
c
*/
arg2a = sin(c4)/sin(c6);
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
plt90 = asin(arg2a) ;
/*
c
c get help arc bb and angle alpha
c
*/
arg2a = cos(c5)*sin(plt90) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
bb = acos(arg2a) ;
arg2a = sin(c4)/sin(bb) ;
if( -c1 > arg2a ) arg2a = -c1 ; /* arg2a = dmax1(arg2a,-c1) */
if( c1 < arg2a ) arg2a = c1 ; /* arg2a = dmin1(arg2a, c1) */
alpha = asin(arg2a) ;
/*
c
c get glolim - it is nesc. to test for the existence of solution
c
*/
argu2 = cos(c2)*cos(bb) / (1.-sin(c4)*sin(bb)*sin(alpha)) ;
if( fabs(argu2) > c1 ) {
glolim = 999.0;
} else {
glolim = acos(argu2)/pi180;
}
/*
c
c
modify (if nesc.) the pln solution
c
*/
if( ( fabs(argu1) > glolim && lti <= stdlat ) || ( lti > stdlat ) ) {
pln1 = pi180*180.0 - pln1;
}
/*
c
c the solution is symmetric so the direction must be if'ed
c
*/
if(argu1 < 0.0) {
pln1 = -pln1;
}
/*
c
c convert the radians to degrees
c
*/
plt = plt1/pi180 ;
pln = pln1/pi180 ;
/*
c
c to obtain a rotated value (ie so x-axis in pol.ste. points east)
c add 270 to longitude
c
*/
pln=fmod(pln+270.0,360.0) ;
l2000:
/*
c
c this program convert polar stereographic coordinates to x,y ditto
c longitude: 0 - 360 ; positive to the east
c latitude : -90 - 90 ; positive for northern hemisphere
c it is assumed that the x-axis point towards the east and
c corresponds to longitude = 0
c
c tsp 20/06-89
c
c constants and functions
c
*/
facpla = radius*2.0/(1.0+sin(plt*pi180))*cos(plt*pi180);
x = facpla*cos(pln*pi180) ;
y = facpla*sin(pln*pi180) ;
*grdi=(x-xref)/delx + xiref;
*grdj=(y-yref)/dely + yjref;
return;
}
u
and v
components must be 33
and 34K
(the GRIB standard)
respectively, e.g.,
u 15 33
u component of the wind at 15 pressure levels
v 15 34
v component of the wind at 15 pressure
levels
eta.u
and ops
projection are still
experimental...i,j
space, transformed
to the display device coordinates (e.g., the screen) and then
displayed. That is, the i,j of the graphic element is converted
to lat/lon
and then to x,y
on the screen via a map
projection.
GrADS currently supports four display projections
:
set mproj
nps);
set mproj
sps);
As you can probably appreciate, the i,j-to-lon/lat-to-screen x,y
for lon/lat
displays is very simple and is considerably more
complicated for N and S polar stereo
projections.
In principle, a Lambert Conformal display projection could be implemented. It just takes work and a simple user interface for setting up that display projection. Actually, the user interface (i.e., "set" calls) is the most difficult problem...


Hi {!Lead.FirstName},
Thank you for reaching out to us. Someone from AIG will be in contact with you within the next 24 hours to help you.
Thank you for choosing AIG


{% extends 'base.html' %} {% block content %}
This is a demonstration of django-fm app. Django-fm allows to create AJAX forms for creating, editing, deleting objects in Django. This is a very personalized approach to quickly build admin-like interfaces.


Yesterday night = best sleep in ages. Last night = worst night EVER. I thought Cora was supposed to be more consistent about these things!
10/19/2008, 12:34:57 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
Yesterday night = best sleep in ages. Last night = worst night EVER. I thought Cora was supposed to be more consistent about these things!
10/19/2008, 12:34:57 PM
Favs: 0
Retweets: 0
link


{% include meta.html %}
{{ site.name }}
{{ site.description }}
About
Notes
Blog
Projects
Love
{{ content }}
{% include dialog/search.html %} {% include analytics.html %}


Haley's Story
In my life, I’ve known a handful of people who truly embody a specific character trait. These people may reflect what it means to be joyful, optimistic, a people person, or humble, to name just a few. These traits have become a core part of who they are and how the world sees them. I believe that Haley is one of these people. Haley embodies what it means to be steadfast. To be steadfast means to be firmly fixed or established and unwavering. In a biblical sense, to hold tight to the Lord.
Haley’s life has been anything but smooth sailing in the last few years. She’s experienced physical injury, the loss of a friend, and the loss of her hero, her dad. Haley has experienced enough hurt since entering college to make up for a lifetime. Amid hardship, there are a lot of options people take. They can pull away, be angry, turn from the Lord, and, potentially, the most difficult, hold firm to the Lord. Out of all the options Haley could have taken, she chose to double down and seek the Lord.
Haley began growing in her relationship with the Lord. She started meeting with one of our mentors, Paula Andrews and began to develop a stronger foundation in God’s word. Haley developed a stronger prayer life, gained a deeper understanding of the scripture, wrestled with tough questions, and learned what it means to seek the Lord. Haley, who self admittedly did not know a lot about scripture coming into college, developed a deeper appreciation and knowledge of God’s word. Haley’s personal development in her relationship with God gave her the confidence she needed to start mentoring a few women around her.
Haley remained steadfast in the Lord by seeking opportunities to use her gifts. Cultivate helped Haley get connected to Younglife. Her bubbly personality, heart for others, personability, and desire to help others know Jesus drew others toward her, and she was asked to join the leadership team soon after. As a leader, Haley was asked to lead a small group and teach for Younglife’s large group. Haley and I (Kyle) met frequently to help her learn the fundamentals of creating and giving a message. With practice, Haley gained competency and has become a talented speaker. Now Haley is using her knowledge to teach new leaders how to speak!
In addition to leading and growing in her faith, Haley has developed deep relationships with others and experienced the true joy of fellowship. Haley quickly became best friends with Kayla, Younglife’s president. They became inseparable and are a testament to the beauty and importance of true friends. Kayla and Haley push each other to seek Jesus, take risks, and go all in for the kingdom.
Even outside of Oakland, Haley’s sought opportunities to use her giftings and take risks for the kingdom of God. Recently, Haley went on a mission trip to Costa Rica with Collective, Woodside’s young adult ministry. Haley and a group of women cared for and shared the gospel with women who are sexually exploited. This trip cemented in Haley’s heart her desire to seek the Lord and demonstrate the redemptive power of the Son.
As Haley looks towards her senior year, she knows she will have new responsibilities. As Younglife leaders graduate, she will take a larger role in Younglife, and her impact on the students at Oakland will only increase! She is excited, and a little nervous about the new role but is confident that the Lord will equip her. One day Haley hopes to be a medical missionary and share the gospel with those in need.
Haley is a testament to the importance of being steadfast. She has learned that she can represent and glorify Christ in all situations. Haley truly has become an effective kingdom worker.
Written by Kyle Vens, Director of Cultivate


Graded Homework #1 file for Matthew Springer (mspringer)
<+100>
;;; Author - Matthew Springer
;;; Date - 1/16/17
;;; Academic integrity binding
(define I-will-behave #t)
;;; This function determines if three integers are "near" each other, meaning
;;; that the difference between the largest integer and the smallest integer
;;; is no larger than 2.
;;;
;;; Near?: Integer Integer Integer -> Boolean
(define (near? a b c)
(if (< (- (max a (max b c)) (min a (min b c))) 3) #t #f))
<-1>
<-5>
;;; Test functions for near?
(equal? (near? -7 -8 -6) #t)
(equal? (near? -7 -9 -6) #f)
(equal? (near? 0 -1 1) #t)
(equal? (near? -2 1 0) #f)
(equal? (near? 7 8 6) #t)
(equal? (near? 7 5 8) #f)
;;; This function consumes a list of symbols and returns how many of those
;;; symbols are 'x'
;;;
;;; Count-xs: ListOfSymbol -> Integer
(define (count-xs l)
(cond [(list? l)
(cond [(empty? l) 0]
[(equal? (first l) 'x) (+ 1 (count-xs (rest l)))]
[else (+ 0 (count-xs (rest l)))])]
[else 0]))
<-3>
<-5>
;;; Test functions for count-xs
(define list1 (list 'x 'y 's 'x 'h 'j 'x))
(define list2 (list 'x 'y 'a 'b 'x 'w 'k))
(define list3 (list 'r 'q 'v 'b 'e 'j 'b))
(equal? (count-xs list1) 3)
(equal? (count-xs list2) 2)
(equal? (count-xs list3) 0)
(equal? (count-xs null) 0)
(equal? (count-xs 6) 0)
;;; This function consumes a list of numbers and returns true if the list
;;; is sorted in ascending order (lowest -> highest), and false otherwise
;;;
;;; Ascending?: ListOfNumber -> Boolean
(define (ascending? l)
(cond [(list? l)
(cond [(empty? l) #t]
[(empty? (rest l)) #t]
[(<= (first l) (first (rest l))) (and #t (ascending? (rest l)))]
[else #f])]
[else #f]))
<-5>
<-3>
;;; Test functions for ascending?
(define list4 (list 1 2 3 4 5 6 7))
(define list5 (list -2 -1 0 1 2 3 4))
(define list6 (list 4 7 2 6 3 9 6))
(equal? (ascending? list4) #t)
(equal? (ascending? list5) #t)
(equal? (ascending? list6) #f)
(equal? (ascending? null) #t)
(equal? (ascending? 6) #f)
<-2>
;;; This function consumes two lists (x and y) of equal length (n) and returns
;;; a list of tuples in the form (x1 y1), (x2 y2), ... , (xn yn)
;;; Zip2: ListOfX ListofY -> ListOf(ListOfTuple-XY)
(define (zip2 list1 list2)
(cond [(empty? list1) null]
[else (cons (list (first list1) (first list2))
(zip2 (rest list1) (rest list2)))]))
<-5>
<-5>
;;; Test functions for zip2
(define list7 (list (list 'x 1)
(list 'y 2)
(list 's 3)
(list 'x 4)
(list 'h 5)
(list 'j 6)
(list 'x 7)))
(define list8 (list (list 'x -2)
(list 'y -1)
(list 's 0)
(list 'x 1)
(list 'h 2)
(list 'j 3)
(list 'x 4)))
(define list9 (list (list 'x 4)
(list 'y 7)
(list 's 2)
(list 'x 6)
(list 'h 3)
(list 'j 9)
(list 'x 6)))
(equal? (zip2 list1 list4) list7)
(equal? (zip2 list1 list5) list8)
(equal? (zip2 list1 list6) list9)
(equal? (zip2 null null) null)
;;; Binds to the photo number with my picture in it.
(define my-picture 46)
;;; Binds to a list of other photo numbers with my picture in it (none)
(define my-other-pictures null)
;;; Binds to the numbers of minutes I spent on this assignment
(define minutes-spent 120)


(Some) Surprising Benefits of Virtual Training
Virtual Training, also known as VILT (Virtual Instructor-Led Training) is on the increase with over 86% of organisations either already using VILT or planning to do so soon.
VILT replicates a face-to-face (F2F) learning workshop in an online environment; with learning designed and delivered by skilled virtual trainers that are as interactive and effective as a well-run F2F workshop.
If you are looking to zap any misconceptions and/or convince others of the merits of virtual training, then the following is worth considering:
- Improving learning transfer
- Increasing time efficiency
- Making cost savings
- Matching a flexible workforce
- Enhancing wellbeing
- Encouraging digital
- Facilitating collaboration
- Enabling global reach & inclusivity
- Reducing Risk
- Limiting carbon usage
- Being recordable and reusable
Let’s have a look at each of them.
1) Improving Learning Transfer
We believe that well run VILT workshops can rival F2F training in terms of learning transfer. Research in this area over the last few years has demonstrated that VILT can produce a learning transfer that is as good as, if not better than that of F2F.
By its nature, VILT is bite-sized and normally runs for around 1-3 hours. This approach allows participants to process focused sections of learning and then apply specific actions and behaviour changes both during and after a workshop.
This then gets layered up with VILT programmes as participants alternate between learning and application.
Due to travel and related costs, most F2F training is delivered in day long workshops (or even more sometimes). This can encourage some trainers to ‘cram’ the event with multiple key points, models, processes etc. As a result of this, too much content can be offered, which may not be fully absorbed and subsequently used by the participants. Using VILT avoids this and helps to provide quality results in creating lasting learning transfer.
2) Increasing Time Efficiency
As VILT workshop participants join via their computer, either at home or in the office, time efficiency is instantly improved from traditional F2F learning. There is zero travel time required of learners and trainers alike, as well as zero need for travel time outside of working hours. On top of this, there is less time needed away from their desk or ‘day job’, allowing participants to get straight back on with work immediately after the workshop ends and able to apply their learning.
Similarly, the flexibility of the location allows home workers and office workers to log on with ease, no matter where they are located, and completely removes early morning departures or late-night returns, thus increasing participants’ health and wellbeing.
3) Making Cost Savings
For many organisations, budgetary control has become a priority in this recent period of austerity. ATD's ‘Virtual Classrooms Now’ whitepaper reported that 81% of organisations have confirmed saving on travel costs as a reason to use VILT.
From our own research on a typical 1-day F2F workshop in the UK, Europe and USA, we found that surprisingly high costs were incurred through travel alone. We recently released an infographic, (see below) that for a single day workshop in the UK, for 14 people, the company incurred travel costs of more than £2300 ($3013/€2576)!
In addition to savings on travel, VILT delivery removes the additional costs of training rooms, meals, refreshments, printed materials and so on. Using VILT as part of your training delivery approach can return a great deal more for your investment, or simply save you a large amount of your training budget.
4) Matching a Flexible Workforce
A 2-year Stamford Study showed the massive productivity boost gained from working from home recently, so it comes as no surprise that the number of people looking to do so is on the rise.
Organisations are now rapidly moving to enable and encourage more colleagues to work remotely. This is in part due to the quality and reliability of the tech now available in this digital age. VILT fits perfectly with the more flexible workforce, as learners can still participate in training from anywhere, using the technology that they already have.
VILT encourages colleagues to learn ‘on the go’, at pace and allows training to fit in with modern working practices and daily pressures. Having to stop work in order to travel a great distance for training events just don’t match up with today’s digital world.
5) Increase in Wellbeing
Both wellbeing and work-life balance are moving up the agenda for most organisations, with a general agreement that looking after employees improves happiness, engagement and productivity.
As VILT can be joined from either an office or at home, as mentioned above, travel time becomes minimised, overnight stays eradicated and travel hours avoided. Colleagues can simply schedule bite-sized VILT workshops conveniently into their diaries.
6) Encouraging Digital
We should recognise the fact that much in our world can be accessed online. An Ofcom study done in 2015 found that people in the UK claim to spend an average of 24 hours a week online, outside of work- this is double the amount of time that was report in 2007! That’s a massive leap in 8 years, and we can forecast that in the four years since the study, it has only become higher.
Organisations are driving strategies which aim to embrace being digital but the traditional F2F training days in a hotel or conference centre just don’t align to this.
Sound familiar? Maybe swapping to VILT workshops could help you to align with your organisation’s strategic intent better?
The platform technology required to run VILT is most likely already in place and used by your organisation; platforms such as Skype for Business, WebEx, Zoom and Microsoft Teams. The digital world is here and those in L&D who wish to stay apace, or develop the future in learning, need to adapt, adopt and develop the ways forward.
7) Facilitating Collaboration
We still hear to this day, from some within L&D, that training is best delivered “in a room – F2F.” In a world where we are all so well connected online, why wouldn’t we embrace the same for training?
Today many people work in teams that are based disparately and yet, still manage to work collaboratively and use technology for their projects and communication. If a team can work together virtually, then they can also learn together virtually, and more regularly too.
VILT workshops can include all members of a team from those contributing part-time, to those sited remotely. When all of the team can learn together in a collaborative environment, the outcomes improve and diversity is gained.
8) Enabling Global Reach & Inclusivity
ATD’s “Virtual Classrooms Now” whitepaper reported that the no.1 reason why organisations are using VILT is to reach a geographically dispersed workforce. By using VILT, employees from different offices, cities, countries and even continents can now learn together, in a virtual space. Consistency and scalability can be achieved, reaching an entire workforce and ensuring L&D is equally available to all, regardless of location.
In 2013, when Microsoft wanted to globally refocus managers on how to have more effective performance conversations, the choice was to use VILT. Therefore, wherever located, managers received consistent training with the opportunities to practice in real time, gaining insight from their colleagues around the world. The outcomes were positive and as a bonus, travel cost free, with the training delivered at pace and globally.
For a bit of fun: Click here to view our 1-minute video of Jules, the Studio Cat at the Virtual Training Team, explaining how she likes to learn with her remote colleagues!
9) Reducing Risk
In recent years, many countries have experienced extreme weather events, such as flooding, forest fires and ash cloud. Sadly, the last decade has also seen terrorist events on the rise across the globe.
When these events occur, travel becomes much more challenging and heightens the risk to employees. In such conditions, many colleagues simply don’t want to travel, especially for work!
By using VILT, you can remove your employees need for travel to attend training, which in turn reduces the risk for them. After all, VILT workshops are immune to traffic jams, airport delays, broken down cars and railway strikes!
10) Limiting Carbon Usage
We are all aware of the impact of global warming, more so now than ever thanks to the combined efforts of Extinction Rebellion and Greta Thurnberg. Increasingly, there are shocking warning signs that we need to be acting much more and much sooner.
In the near future, organisations will be challenged to reduce the carbon they use and report on how much carbon they use. Many have stated that strategically, they are looking to decrease their usage of carbon, or indeed become carbon neutral, which will inevitably offsetting and also involve limiting areas such as business travel. In relation to this, more L&D events will need to be achieved online and swiftly.
L&D professionals should also be taking into account the idea that many of us are making personal commitments to reduce our own use of carbon, through the way we travel, shop or dispose of waste.
With zero travel being the main spearhead for VILT workshops, it is easy to see how reducing your organisations carbon footprint could be an easy win.
11) Being Recordable and Reusable
VILT workshops are run as live training events, with the emphasis on participant engagement marking it apart from standard webinars or e-learning yet they can be recorded so the content can be used in additional ways.
Recordings can allow those unable to join the live session to still experience what they missed. The content can be edited into easily accessible short ‘nudges’ too – these are super useful in preparation for real events post the VILT workshop.
There you have it! 11 sure fire benefits you could be experiencing with Virtual Training. Considering all this, how could you possibly find a reason not to give it a go?
If you want to access more resources on how to get started with Virtual Training, then you can either click here for virtual training resources or download our free eBook below!


DataSet
The DataSet<T> object is a memory-resident representation of data. You can use it independently as your local data store, or you can use it seamlessly with DbSet<T> and JSON.
Create DataSet
DataSet can be created in a couple of ways:
| API | Description |
|---|---|
| DataSet<T>.Create | Create an empty DataSet. |
| DataSet<T>.ParseJson | Create DataSet from JSON. |
| DbSet<T>.ToDataSetAsync | Create DataSet from DbTable<T> or DbQuery<T>. |
Serialize/Deserialize DataSet
DataSet can be serialized/deserialzed to/from JSON:
| API | Description |
|---|---|
| DataSet.ToJsonString | Serialize DataSet into JSON. |
| DataSet<T>.ParseJson | Deserialize JSON into DataSet. |
You can provide your own IJsonCustomizer to customize JSON serialization/deserialization.
Access Data Values
You can think of DataSet<T> as two-dimensional array for simplicity: it consists of a collection of DataRow objects horizontally, and collection of Column objects via Model.Columns vertically. Data values are stored in strongly typed Column<T> objects to avoid boxing and un-boxing.
You can access data values via indexer of Column<T> class:
DataSet<ProductCategory> result = DataSet<ProductCategory>.Create().AddRows(13);
ProductCategory _ = result._;
_.SuspendIdentity();
_.ProductCategoryID[0] = 1;
_.ProductCategoryID[1] = 2;
_.ProductCategoryID[2] = 3;
_.ProductCategoryID[3] = 4;
_.ProductCategoryID[4] = 5;
_.ProductCategoryID[5] = 6;
_.ProductCategoryID[6] = 7;
_.ProductCategoryID[7] = 8;
_.ProductCategoryID[8] = 9;
_.ProductCategoryID[9] = 10;
_.ProductCategoryID[10] = 11;
_.ProductCategoryID[11] = 12;
_.ProductCategoryID[12] = 13;
_.ParentProductCategoryID[0] = null;
_.ParentProductCategoryID[1] = null;
_.ParentProductCategoryID[2] = 1;
_.ParentProductCategoryID[3] = 1;
_.ParentProductCategoryID[4] = 1;
_.ParentProductCategoryID[5] = 1;
_.ParentProductCategoryID[6] = 2;
_.ParentProductCategoryID[7] = 6;
_.ParentProductCategoryID[8] = 6;
_.ParentProductCategoryID[9] = 6;
_.ParentProductCategoryID[10] = 7;
_.ParentProductCategoryID[11] = 7;
_.ParentProductCategoryID[12] = 7;
_.Name[0] = "Bikes";
_.Name[1] = "Other";
_.Name[2] = "Mountain Bikes";
_.Name[3] = "Road Bikes";
_.Name[4] = "Touring Bikes";
_.Name[5] = "Components";
_.Name[6] = "Clothing";
_.Name[7] = "Handlebars";
_.Name[8] = "Bottom Brackets";
_.Name[9] = "Brakes";
_.Name[10] = "Bib-Shorts";
_.Name[11] = "Caps";
_.Name[12] = "Gloves";
_.RowGuid[0] = new Guid("cfbda25c-df71-47a7-b81b-64ee161aa37c");
_.RowGuid[1] = new Guid("09e91437-ba4f-4b1a-8215-74184fd95db8");
_.RowGuid[2] = new Guid("2d364ade-264a-433c-b092-4fcbf3804e01");
_.RowGuid[3] = new Guid("000310c0-bcc8-42c4-b0c3-45ae611af06b");
_.RowGuid[4] = new Guid("02c5061d-ecdc-4274-b5f1-e91d76bc3f37");
_.RowGuid[5] = new Guid("c657828d-d808-4aba-91a3-af2ce02300e9");
_.RowGuid[6] = new Guid("10a7c342-ca82-48d4-8a38-46a2eb089b74");
_.RowGuid[7] = new Guid("3ef2c725-7135-4c85-9ae6-ae9a3bdd9283");
_.RowGuid[8] = new Guid("a9e54089-8a1e-4cf5-8646-e3801f685934");
_.RowGuid[9] = new Guid("d43ba4a3-ef0d-426b-90eb-4be4547dd30c");
_.RowGuid[10] = new Guid("67b58d2b-5798-4a90-8c6c-5ddacf057171");
_.RowGuid[11] = new Guid("430dd6a8-a755-4b23-bb05-52520107da5f");
_.RowGuid[12] = new Guid("92d5657b-0032-4e49-bad5-41a441a70942");
_.ModifiedDate[0] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[1] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[2] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[3] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[4] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[5] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[6] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[7] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[8] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[9] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[10] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[11] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ModifiedDate[12] = Convert.ToDateTime("2002-06-01T00:00:00.000");
_.ResumeIdentity();
You can also use DataRow object as indexer parameter.
Identity Column
An identity column is a column decorated with IdentityAttribute. Only one identity column allowed for each model. An identity column differs from a primary key in that its values are managed by the server and usually cannot be modified. In many cases an identity column is used as a primary key; however, this is not always the case.
DataSet handles identity column specially:
- If DataRow is filled from DbSet, identity values will be filled like other values.
- When adding new DataRow into DataSet locally, a default value will be generated automatically. For example, assume identity column is defined with seed 1 and increment 1, the first default value will be 0, the next will be -1, -2, and so on.
- Deleting DataRow will leave identity column values in gap.
- Once new DataRow added, either from DbSet or local, identity column becomes readonly. You can temporarily suspend identity by calling SuspendIdentity and ResumeIdentity in tandem.
- When inserting DataSet into DbTable, you can choose to update identity column with values newly generated in the database. This is implemented by database session provider.


I am a software developer from Gig Harbor, Washington. I have a 5 year old daughter and a 3 year old yellow lab. I served 4 years in the U.S. Army and I have a bachelor's in business management. I attended Code Fellows where I focused on JavaScript/NodeJS. I am currently a Software Development Engineer Apprentice with Amazon.


Growing a business does not just imply selling more products and getting more customers; one of the biggest challenges is supporting that growing customer-base in handling their acquired products. With growth comes an increase in potential errors, bugs, and struggles. So how does a growing tech company scale support?
At WooThemes we get about 10,000 ticket submissions per month, which stands in big contrast with the almost 500,000 visitors of our public support resources. This talk will focus on finding a good balance between providing a stable public resource and answering urgent ticket requests, and the mistakes and wins we've encountered along the way.


The below div is clickable, with the use of some jQuery. The script picks the first link of the block, and goes to that location. Other links in the same block are still clickable.
Read the article
May people right now think that today is lovely, and have decided to hold a vote on the lovelyness of today and it's lovelyness. Lovely.
See today's weather (first link)
Some other link here


📕 About Me
I am a software engineering student from McMaster. I love coding, snowboarding and playing soccer.
💼 Experience
Teaching Assistant
Dec. 2019 - Mar. 2020
McMaster University
Soccer Instructor
Dec. 2019 - Mar. 2020
Westdale High
🛠 Projects
Algorithms Visualizer
JavaScript
Built Sorting algorithm Visualizer.
AlgoViz
Algorithms Visualizer
JavaScript
Built Sorting algorithm Visualizer.
AlgoViz
👨💻 Skills
- Languages: Java, JavaScript, Python, MatLab, HTML, CSS
- Tools: GitHub, Git, Bash


/threading/resources/statistics
/threading/resources/messages/light
/threading/resources/messages/heavy


This Week in Rust
Hello and welcome to the ninth issue of This Week in Rust. This week brings
the new for
loop, which is very exciting, as well as a bunch of runtime
changes and cleanup.
What’s cooking on master
?
Issue churn was +4 this week. A total of 63 PRs were merged (again).
Breaking Changes
- The
for
loop now uses external iterators. This means any code written to use the old internal iterator protocol will no longer work. See the iterator tutorial for more information on how to use it. Related pull requests: #8141, #8184, #8190, #8244. A few uses now requiredo
rather thanfor
because they cannot/have not been implemented in terms of external iterators. unsafe
is no longer allowed for functions inextern
blocks: they are all unsafe.- The
extra::dbg
module has been removed. uint::range
and all its friends have been replaced with an external iterator, that is in the prelude. Code like the following now works:for x in range(0, 10) { println(x.to_str()); }
- The pipes compiler (the thing driving
proto!
) has been removed, as it saw limited use, was very old, and was a significant maintenance burden. PortSet
has been removed from std, as the new scheduler does not support it.- A bunch of old task APIs have been removed, aslo in preparation for the new schduler.
is_utf8
now rejects overlong encodings.- The iterator adaptors no longer have the Iterator suffix, same with str and vec iterators as well.
newrt changes
A bunch of newrt things landed this week, so it gets its own section.
- Some bugs preventing the arc and sync tests from passing have been fixed.
- The new scheduler now supports the
SingleThreaded
spawn mode.
- Some major TLS changes also landed.
- Tasks can now be named.
select
on newrt pipes has been implemented.
Notable library additions, bugfixes, and cleanup
Map::contains_key
is now a default method implemented in terms ofMap::find
- A
dynamic_lib
segfault has been fixed. - A keyed
HashMap
constructor is now exposed for runtimeless programs that want to use it. - The
Str
trait now has aninto_owned
method to avoid copies when you already have a~str
.  I hear that the speed is almost optimal, only a few cycles/byte short of Intel’s optimized implementation.
- Errno coverage has been significantly expanded for Linux. I added all of the ones that were missing, at least the ones that were present on my system.
assert!()
without a message now does less allocation.- ‘\’ is no longer treated as a path separater on POSIX system.
getopt
’sopts_str
has been corrected to use more than just the first element of the vector.- Some more methods were added in
std::num
. - An iterator over the offsets of each character in a string was added.
 Clone
andDeepClone
are now implemented forextern "Rust" fn
.
Notable compiler additions, bugfixes, and cleanup
- A
cfg!
syntax extension has been added for conditionally running code based on crate configuration, similar to what#[cfg]
does for conditional compilation. It expands into a true/false constant, so LLVM should optimize out the dead branches. - Some more codegen tests have been added.
copy
has been removed as a keyword.- Static struct initializers can now contain
..base
for functional update. - Take glue has been unified for unique pointer type.
- Pointer arithmetic is now implemented with GEP rather than casting to int and back to the pointer.
- Some more AST types were renamed.
- Cross-crate conditions now work.
Documentation, tools, and other stuff
- LLVM assertions can now be disabled with a configure option.
- Benchmarking can now be
disabled by passing
NO_BENCH=1
to make. NO_REBUILD
no longer requires a re-boostrap, which should make debug cycles on libstd much shorter.vec
now has module documentation.- rustpkg now handles tags, and not just version numbers, in the package ID.
Meetings
The Tuesday meeting this week was quite meaty. I’m not going to try to summarize it, as it seems no real decisions were made.
Discussion + Blog posts
- Visibility scopes in Rust Debug Info.
- Architecting Servo: Pipelines and Parallelism, a talk by Tim Kuehn.
- Runtimeless sprocketnes.
- Porting machine learning algorithms to Rust.
- RFC: Overloadable dereference operator.
External projects
- RustGnuplot was updated to latest Rust.
- A protobuf implementation has been started.
- rustsqlite has been updated to latest Rust.
- A library for HTML escaping has been created.
- A library for procedurally generating noise has been created.
- A pure-Rust implementation of Keccak has been created.
- rust-zmq has been updated to latest Rust, as well as cleaner error/constant interface.
- q3 now does multithreaded rendering.


Next Elixir Web Template
Elm
The Elm Language template uses Elm and WebSockets.
React JavaScript
The React JavaScript template uses React, JavaScript and WebSockets.
Vanilla JavaScript
The Vanilla JavaScript template uses only JavaScript and HTML DOM API and WebSockets.


March 11th, 2016
By Eric Gumerlock
What is Rails?Rails is a software library that extends the Ruby programming language created by David Heinemeier Hansson. He was first programming on PHP, but was quickly frustrated by a lack of abstraction and repetitive code. He tried Ruby, and enjoyed its ease of use. Ruby is one of the most streamlined languages, with less code required to create basic data structures, and it is a modern language that allows high-levels of abstractions. One of the key advantages of Ruby is RubyGems, a package manager that easily can great and share software libraries or gems, that extend Ruby. RubyGems provides a simple system to install gems on, making open-source software extremely easy to implement within your own Ruby framework.
Some of the disadvantages of Ruby include a slow processing time relative to C++ or Java, although it is usually sufficient for the level of performance required for most websites. However, for websites with lots of simultaneous activity, it is not the ideal language. Because Ruby lacks “parallelism” or ability to do many things at once, it is best served for simpler software, such as websites.
Rails is both popular and widely used, partially because its conventions are easy to pick up. Any web-application that requires basic functions like generating HTML, form submissions, or accessing a database, and all done very easily with Rails. It gives the developer a framework on which to build, instead of requiring the gigantic task of creating an infrastructure. When Heinemeier Hansson and his team created the Rails framework, they were autocratic in their approach, and decided that there is one best way to implement much of the infrastructure required by a web application. In this respect, it is much easier for a Rails developer to unravel another developer’s work, because they were all built in a similar fashion. This means collaboration is easier, development is quicker, and theres a large amount of open source code to incorporate.
When Rails was released in 2004, PHP was a dominant language used by webmasters. However, the design decisions that went into the first version of Rails garnered a close circle of developers that led to fast growth of Rails use. It stresses “convention over configuration.” Because it is adopted by software engineers who were considered influencers and trend setters, often people say that Rails is for the “cool kids.”
Rails Guiding Principles
Rails is Opinionated
While many other languages are famous for having more than one way to do it, and having no right way, rails is the opposite. Rails has a best way to solve problems, and in these fewer decisions, you will be able to implement faster development and collaborate easier.
“Convention over Configuration”
This is a principle that focuses on productivity over being able to configure the inner workings of your site. You will spend less time thinking about where things go and what names to assign them.
Don’t Repeat Yourself
DRY is a principle of software development formulated by Andy Hunt and Dave Thomas. Code reuse is at the core of this principle, and again it allows you to eliminate unnecessary code, and get to the actual creation.
Rails is Omakase
Omakase is a phrase in Japanese that means “I’ll leave it to you.” At a Japanese restaurant, you can order omakase, entrusting the chef to make a pleasing selection. Hanson was famous for saying Rails is Omakase, the idea being that his team of “chefs” picked out the best ingredients, designed APIs, according to their ideas of the best full-stack framework. While they may not match your tastes exactly, they have been thoroughly thought through and are well-formed.


Through the good workmanship, teamwork, high dedication and through the valued trust and confidence of our customers.
SBC has a team of experienced individuals who provide innovative solutions to commercial construction projects.
The Fitout teams of specialists have extensive experience in first class designing and fitting out within a wide range of industry sectors
We have been providing exemplary heating and air-conditioning services and installation to the people in our area.
As a specialized MEP contractor we cater all your electrical, water supply, drainage and air-conditioning needs professionally and reliably.
SBC offers the full range of FM services including Hard and Soft Services, Risk Management and Administrative services.
G+M Warehouse and offices at international city Plot No. WRH -008.
Addition of compound wall to the exisiting facility for M/s Zodiac Aerospace Middle at Dubai south.
Children's accomodation facility for Dubai foundation for women and children at plot No 8140182
G+M Warehouse and offices at Jebel Ali industrial area 1 Plot No-5991255
Warehouse for M/s Rosen Middle east FZE
Pressure testing bay for oil feild supply center at JAFZA
External painting works for Proctor & Gamble at JAFZA
G+1 Villa for Mr. Aref Ustadi on Plot No 3541536
G+1 Villa project at Al Warqa for Mr. Majid al Mjidi
Fitout works for M/s Evershine laundry at JLT cluster R.
Al Wasl Trellis mock-up at Expo 2020.
Addition of external staircase for IFA hotels at JLT Cluster A.
Fitout works for M/s Evershine laundry at JLT cluster R.
Solar panel installation and associated civil works for Hitachi plant and technologies at Ruwais.
Extension and rennovation of G+1 Villa for Mr. Majeed Al Maheri on plot number 2510398.
Fitout works for Hotel projects at JBR Rotana hotels
Building maintenance and fitout works in Silicon Oasis
Facility management & MEP maintenance services at International city buildings.
Building maintenance services at Sadaf & Marjan buildings
Facility management and maintenance service at Disovery gardens, Dubai.


Small Datepicker example
Europe GMT+1 with picker mode DATE_TIME
Asia/Tokyo
America/Los Angeles Picker Mode DATE_TIME with boundaries on GMT+1
Picker Only
DateTime Picker-Only - Double buffered
Range Selection
Additional content


₹6999
ONLY
Goa is definitely the best tourist place for India. "The pearl of the east," Goa is known for its Gothic churches, crumbling forts, palm-fringed beaches, coconut groves, ferry rides, bubbly folk music… the list is endless! With its 131-km-long coastline, Goa is an important locale in every tourist's itinerary.
Trip to Goa, driving through beaches, forests to explore exotic locations by our SUV for 7 days , yes its backpacking road trip. Sounds like your Cup of Tea? We are foodies and yes we are adventure freaks. We are not gonna book a lodge or star hotels but yes we carry our tents and sleeping bags and yes we gonna roll in our SUV.
Bucket list : boating, paragliding, scuba-diving, cruise, camping everywhere are in our list too.


The Nike LeBron 17 "Win-Win" Nods to Basketball's Next Generation (UPDATE)
Celebrating LeBron’s ongoing support of three high schools
by Jeff YeungUPDATE(November 22, 2019):
Thought to be the latest collaboration between LeBron James, Nike and Harlem, NY-based Harlem Fashion Row, this LeBron 17 is in fact an in-line makeup dubbed “Win-Win.” Designed with assistance from the women’s basketball teams at Christ the King High School, Fairfax High School and LeBron’s alma mater St. Vincent-St. Mary — three schools that the King has consistently supported — the shoe interpolates each team’s signature colors in a unique fashion, a nod to how the next generation of hoopers inspires LeBron’s game. The gold and red upper draws from CTK and Fairfax’s uniforms, while SVSM’s recognizable green and gold hues are somewhat surprisingly relegated to accents on the upper’s small tags and the insole.
The Nike LeBron 17 “Win-Win” will release in an extended size run on December 7 via Nike SNKRS. The MSRP is set at $225 USD.
ORIGINAL STORY (November 17, 2019):
Following a zesty yellow collaborative LeBron 16 earlier this year, esteemed Harlem’s Fashion Row has once again linked up with Nike for yet another silhouette from the basketball player’s line, this time opting for the LeBron 17.
Giving the iconic model a premium makeover, HFR’s take dresses the upper with a beige Knitposite material, with a matching-colored tongue and laces. Gradually moving down the lateral and onto the rear of the sneaker are gold and red accents, providing a welcome contrast with colors worthy of King James himself. Further down, a light beige midsole is complemented with a gold Swoosh logo alongside a Max Air unit, wrapped up by a translucent outsole. Tying the entire royal look together, however, is the 3D lion head on the tongue, replacing the usual embroidered version of the icon.
For those interested, the latest Harlem’s Fashion Row x Nike LeBron 17 will be available over at Nike’s online store and select retailers on December 7.
Elsewhere in footwear, Jordan Brand has dropped an Air Jordan 4 in a “What The” colorway.


Robodiction
Design a wireless or wired bot which can reach its destination by tackling all the obstacles coming in its way.
Meet The TeamLFR & DLFR
Design a mobile bot that follows the given black line and finishes the track.
Meet The TeamRobo Rumble
Design a wireless robot which can confront the opponents' bots and eliminate them by pushing them outside the arena.
Meet The TeamRoboBridge
Design a bot to carry particular objects using arm mechanism to the given destination.
Meet The Team


MKDIR
Section: Linux Programmer's Manual (2)
Updated: 2014-08-19
Index
Return to Main Contents
NAME
mkdir, mkdirat - create a directory
SYNOPSIS
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
#include <fcntl.h> /* Definition of AT_* constants */
#include <sys/stat.h>
int mkdirat(int dirfd, const char *pathname, mode_t mode);
Feature Test Macro Requirements for glibc (see
feature_test_macros(7)):
mkdirat():
-
- Since glibc 2.10:
-
_XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
-
_ATFILE_SOURCE
DESCRIPTION
mkdir()
attempts to create a directory named
pathname.
The argument
mode
specifies the permissions to use.
It is modified by the process's
umask
in the usual way: the permissions of the created directory are
(mode & ~umask & 0777).
Other mode bits of the created directory depend on the operating system.
For Linux, see below.
The newly created directory will be owned by the effective user ID of the
process.
If the directory containing the file has the set-group-ID
bit set, or if the filesystem is mounted with BSD group semantics
(mount -o bsdgroups
or, synonymously
mount -o grpid),
the new directory will inherit the group ownership from its parent;
otherwise it will be owned by the effective group ID of the process.
If the parent directory has the set-group-ID bit set, then so will the
newly created directory.
mkdirat()
The
mkdirat()
system call operates in exactly the same way as
mkdir(),
except for the differences described here.
If the pathname given in
pathname
is relative, then it is interpreted relative to the directory
referred to by the file descriptor
dirfd
(rather than relative to the current working directory of
the calling process, as is done by
mkdir()
for a relative pathname).
If
pathname
is relative and
dirfd
is the special value
AT_FDCWD,
then
pathname
is interpreted relative to the current working
directory of the calling process (like
mkdir()).
If
pathname
is absolute, then
dirfd
is ignored.
See
openat(2)
for an explanation of the need for
mkdirat().
RETURN VALUE
mkdir()
and
mkdirat()
return zero on success, or -1 if an error occurred (in which case,
errno
is set appropriately).
ERRORS
- EACCES
-
The parent directory does not allow write permission to the process,
or one of the directories in
pathname
did not allow search permission.
(See also
path_resolution(7).)
- EDQUOT
-
The user's quota of disk blocks or inodes on the filesystem has been
exhausted.
- EEXIST
-
pathname
already exists (not necessarily as a directory).
This includes the case where
pathname
is a symbolic link, dangling or not.
- EFAULT
-
pathname points outside your accessible address space.
- ELOOP
-
Too many symbolic links were encountered in resolving
pathname.
- EMLINK
-
The number of links to the parent directory would exceed
LINK_MAX.
- ENAMETOOLONG
-
pathname was too long.
- ENOENT
-
A directory component in
pathname
does not exist or is a dangling symbolic link.
- ENOMEM
-
Insufficient kernel memory was available.
- ENOSPC
-
The device containing
pathname
has no room for the new directory.
- ENOSPC
-
The new directory cannot be created because the user's disk quota is
exhausted.
- ENOTDIR
-
A component used as a directory in
pathname
is not, in fact, a directory.
- EPERM
-
The filesystem containing
pathname
does not support the creation of directories.
- EROFS
-
pathname
refers to a file on a read-only filesystem.
The following additional errors can occur for
mkdirat():
- EBADF
-
dirfd
is not a valid file descriptor.
- ENOTDIR
-
pathname
is relative and
dirfd
is a file descriptor referring to a file other than a directory.
VERSIONS
mkdirat()
was added to Linux in kernel 2.6.16;
library support was added to glibc in version 2.4.
CONFORMING TO
mkdir():
SVr4, BSD, POSIX.1-2001, POSIX.1-2008.
mkdirat():
POSIX.1-2008.
NOTES
Under Linux, apart from the permission bits, only the
S_ISVTX
mode bit is honored.
That is, under Linux the created directory actually gets mode
(mode & ~umask & 01777).
See also
stat(2).
There are many infelicities in the protocol underlying NFS.
Some of these affect
mkdir().
Glibc notes
On older kernels where
mkdirat()
is unavailable, the glibc wrapper function falls back to the use of
mkdir().
When
pathname
is a relative pathname,
glibc constructs a pathname based on the symbolic link in
/proc/self/fd
that corresponds to the
dirfd
argument.
SEE ALSO
mkdir(1),
chmod(2),
chown(2),
mknod(2),
mount(2),
rmdir(2),
stat(2),
umask(2),
unlink(2),
path_resolution(7)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- mkdirat()
-
- RETURN VALUE
-
- ERRORS
-
- VERSIONS
-
- CONFORMING TO
-
- NOTES
-
- Glibc notes
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 02:54:49 GMT, September 18, 2014


 Indeed, I am often mistaken for Santa Claus, or at least a rakishly thin version of him dressed in drab rather than red, without a bulging sack of gift-wrapped treats for well-behaved tinies, and unaccompanied by reindeer. But those caveats aside, it can be hard to tell the difference, so lavishly do I spread joy and hysteria where'er I trudge.
So it should come as no surprise that already, in mid-February, I have solved all your Christmas present purchasing worries for 2014. For on 6 November this year, the splendid publishing house of Constable will unleash upon a panting world Mr Key's Shorter Potted Brief, Brief Lives. You can already go and pre-order your copy.
Now I had better finish writing the damned thing.


White to play 31
pips White=117 Black=147
(CorrectAnswer= 0/0, ErrorScore= 0)
1. 8/5 6/5 eq: +1.216 83.94% (G:61.00% B:0.88%) 16.06% (G: 2.39% B:0.10%) 2. 14/11 8/7* eq: +1.206 (-0.010) 83.05% (G:62.85% B:0.74%) 16.95% (G: 3.02% B:0.13%) 3. 21/18 8/7* eq: +1.120 (-0.096) 81.55% (G:58.55% B:0.70%) 18.45% (G: 3.61% B:0.24%) 4. 8/7* 7/4 eq: +0.987 (-0.229) 78.51% (G:52.12% B:0.84%) 21.49% (G: 3.61% B:0.11%) 5. 8/7* 6/3 eq: +0.872 (-0.344) 75.40% (G:48.94% B:0.64%) 24.60% (G: 4.44% B:0.12%)


Gateway
BOT
09-Mar-19 04:14 PM
[dscrdvrsc] <SmeLLyArMpiTs> @Ginasis Mining Pools how about Immature ? whats that.. thanks!
[dscrdvrsc] <0x03> blocks that are freshly mined or staked will have to mature for 100 blocks before you can do anything with them
[dscrdvrsc] <SmeLLyArMpiTs> so if i am Immature: 0.03872614 . it means i need to wait till it is 100 before i can use my coin?
[dscrdvrsc] <0x03> not necessarily
[dscrdvrsc] <0x03> we don't know of how many blocks this immature balance is
[dscrdvrsc] <0x03> but i think it's probably from one block
[dscrdvrsc] <Oink> It means you have 0,038bla VRSC in immature stakes.
[dscrdvrsc] <Oink> As soon as those stakes are mature, they’ll show up as balance
[dscrdvrsc] <Oink> Once the balance >= 1, it’ll be paid to your R-address
[dscrdvrsc] <0x03> thats a pool specific detail ^
[dscrdvrsc] <0x03> for ginasis it's 1 indeed
[dscrdvrsc] <SmeLLyArMpiTs> Block: 408160 Sun Mar 10 2019 02:31:15 GMT+1030 (ACDT) 11 of 100
Mined By: RSP2BMFTVFVzJwUph6T2fVMK7xvCb4sCKo.m13cn2levcpu . so this means this block is 89 short!
[dscrdvrsc] <0x03> yes, but thats also only half of the answer
[dscrdvrsc] <0x03> as there is dpow happening, and the pool can make it look like the block isn't mature
[dscrdvrsc] <0x03> when it actually is
[dscrdvrsc] <0x03> so... the short answer: just assume 130, especially when waiting for the red numbers on any pool
[dscrdvrsc] <SmeLLyArMpiTs> can i understand why is there a need to wait? as in isnt mined coins already real coins?
[dscrdvrsc] <SmeLLyArMpiTs> @Godballz thanks
[dscrdvrsc] <SmeLLyArMpiTs> there is so much to learn for crypto ! makes me feel like a caveman haha
[dscrdvrsc] <0x03> i never asked myself why blocks need maturation time, i just realized.
[dscrdvrsc] <0x03> but it's very probably security/safety related
[dscrdvrsc] <Oink> In case of forking, it needs to mature for 100 blocks, to make sure you’re still on the proper chain
[dscrdvrsc] <0x03> anything after the first notarization after whatever event is very safe.
[dscrdvrsc] <0x03> somebody will surely correct me on this
[dscrdvrsc] <SmeLLyArMpiTs> i am literally goggling the terms u all use.. forks ... etc . haha
[dscrdvrsc] <SmeLLyArMpiTs> so other coins like vertcoin has maturing time too right
[dscrdvrsc] <0x03> probably every coin
[dscrdvrsc] <Oink> @SmeLLyArMpiTs I would strongly advise you to read the Verus vision and white paper on the veruscoin.io website. Google the unknown terms in there and in a day you’re up to speed.
[dscrdvrsc] <SmeLLyArMpiTs> to check my understanding .. if i attempt to solo mine by using the wallet.. and i quit 1 hour into it .. whatever progress i have is lost right>
[dscrdvrsc] <SmeLLyArMpiTs> @Oink ok..
[dscrdvrsc] <SmeLLyArMpiTs> i tried reading earlier .. was confused
[dscrdvrsc] <SmeLLyArMpiTs> hahah
[dscrdvrsc] <SmeLLyArMpiTs> will continue
[dscrdvrsc] <SmeLLyArMpiTs> thanks so much to all here for the kind answers
[dscrdvrsc] <Oink> Solo min8ng is like: you stake a block or you don’t. There’s no buildup in funds. All or nothing
[dscrdvrsc] <SmeLLyArMpiTs> i think i am starting to understand .. based on my understanding.. my Immature: 0.05107928 . will only go up when the next block is found and my shares counted .. right?
[dscrdvrsc] <SmeLLyArMpiTs> and once the 100 block passes for the respective blocks, it will go into balance!
[dscrdvrsc] <0x03> In solo mining, theres no share crediting. you only earn when you find a block.
[dscrdvrsc] <0x03> the 'wasted' shares aren't credited.
[dscrdvrsc] <0x03> when you (hypothetically) quit mining 1sec before you hit a block, that would be very unlucky, but ...thats how it works.
[dscrdvrsc] <SmeLLyArMpiTs> OUCH hahaha
[dscrdvrsc] <SmeLLyArMpiTs> @0x03 >> i think i am starting to understand .. based on my understanding.. my Immature: 0.05107928 . will only go up when the next block is found and my shares counted .. right?
and once the 100 block passes for the respective blocks, it will go into balance!
[dscrdvrsc] <SmeLLyArMpiTs> am i right?
[dscrdvrsc] <0x03> it's not any different for pools tho, they just assume they'll find blocks regularily so they can pay you out
[dscrdvrsc] <0x03> but they're depending on finding blocks as well, they just do the maths ahead and tell you how big the fraction of work of that block you committed was, in terms of balance
[dscrdvrsc] <0x03> it's not like a pool has a magic 1000 verus balance it can pay out from
[dscrdvrsc] <SmeLLyArMpiTs> i read about it ... so call the risk of the pool operator right
[dscrdvrsc] <0x03> well, it's not "risk" less operating a pool
[dscrdvrsc] <0x03> way before something like that comes into account
[dscrdvrsc] <0x03> first of all you're providing some http service (pool frontend) to the internet.
[dscrdvrsc] <0x03> in cryptospace.
[dscrdvrsc] <0x03> that WILL attract fuckwads
[dscrdvrsc] <0x03> and they will try and do all sorts of funny stuff to your pool
[dscrdvrsc] <0x03> not even to the website part only, but who guarantees you the users of a pool all use 'legit' miners?
[dscrdvrsc] <0x03> i mean, don't get me wrong, you cant just change 2 lines of code in the miner and be better than anybody else
[dscrdvrsc] <0x03> but... theres a lot of different ways to piss you off
[dscrdvrsc] <SmeLLyArMpiTs> interesting.. thats the world we live in ..
[dscrdvrsc] <SmeLLyArMpiTs> btw mate.. is my understanding . correct for the immature theory
[dscrdvrsc] <SmeLLyArMpiTs> >> i think i am starting to understand .. based on my understanding.. my Immature: 0.05107928 . will only go up when the next block is found and my shares counted .. right?
and once the 100 block passes for the respective blocks, it will go into balance!
[dscrdvrsc] <0x03> any block after the block you're talking about is taking one off the 100
[dscrdvrsc] <SmeLLyArMpiTs> i mean for my immature to go up
[dscrdvrsc] <SmeLLyArMpiTs> now its 0.05107928
[dscrdvrsc] <Godballz> Yes and most pools have a minimum balance before they release funds. Usually it will say on one of the setup pages on the pool
[dscrdvrsc] <SmeLLyArMpiTs> so my immature balance will go up once the next block is found and i am credited right
[dscrdvrsc] <0x03> any found block you mined along on will give you more credit, yes
[dscrdvrsc] <SmeLLyArMpiTs> cool


{% extends "base.html" %} {% load static %} {% block sidebar %} {% include 'components/global-sidebar.html' %} {% if signup_success %}
Thank you for your interest! We will be in touch as soon as we are ready.
{% else %}Our goal is to create lasting, tangible solutions for our beneficiary organizations.
The Marine Hacker Sandbox is launching soon. Enter your email below to be notified when you can start building real solutions for our oceans.
{% endif %} {% endblock %} {% block content %}$25/mo gives your project several times that in cloud credits, SaaS subscriptions, and more...
Our “Hacker” Membership Tier, gives your team access to the technology it needs to succeed, for a fraction of the cost. Here’s a taste of what’s inside:
...plus access to our online communities, meetups, webinars, trainings, and more.
{% endblock %} {% block extrascripts %} {% endblock %}


CON AIR
Review by Simon Calloway
Recently, I saw Nicolas Cage in City of Angels and Snake Eyes. Now, neither were great films, but Cage supplied two excellent performances in them. So, I went back and took a look at Cage's other films, most notably I saw The Rock (again; I forget he is in that), and Con Air, both produced by Jerry Bruckheimer.
The Rock wasn't good. I didn't like the mindless action scenes and incoherency of the screenplay. Now, Con Air is even worse. A plethora of over the top action sequences and ugly acting by Cage and such other wonderful actors as Ving Rhames and John Malkovitch.
Cage plays military man Cameron Poe. When he accidentally kills a thug who harrasses his wife, he is sent to prison for seven years. His sentence is up, so he, along with many other convicts, ride home in Con Air, a plane made especially for rapists, killers, kidnappers, etc. All these grease balls make for some predictable mayham.
A prisoner escapes him clutches, kills the pilots, and fly the plane to Arizona. All this makes for a mindnumbing blurr or a film.
Case No. 1: How did the con escape? The film never fully explains.
Case No. 2: There just happens to be a con on board who knows how to fly.
Case No. 3: There happens to be a female security guard on the plane.
Con Air pretty much destroys all expectations of action films. It is the anti-Spielberg.
* ~TeenViews (c) 1999~
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Additions and corrections are welcome. Use showkey -s to get the scancodes. Mention keyboard manufacturer and type, and the keycaps.
showkey -s
Andries Brouwer -<EMAIL_ADDRESS>aeb@cwi.nl


Questions
- The difference between string types CHAR and VARCHAR is a matter of efficiency: the CHAR variable type takes its input-
ex. CHAR(3) and stores exactly that many characters, and is best used in databases for static items such as state abbreviations
in postal codes, as they are only two characters. VARCHAR accepts a variable amount of characters but requires one extra step
of calculation any time it is referenced.
- The limit of CHAR is it works only on rigidly consistent item groups.
\
- The Beginning of Time was JAN 1 1970 00:00 UTC
- ~1524000000 seconds since the Beginning of Time
- O(log (n)) is ~775000 times faster than O(n) for n = 18721693