SUBROUTINE CSTEMR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, $ M, W, Z, LDZ, NZC, ISUPPZ, TRYRAC, WORK, LWORK, $ IWORK, LIWORK, INFO ) IMPLICIT NONE * * -- LAPACK computational routine (version 3.1) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOBZ, RANGE LOGICAL TRYRAC INTEGER IL, INFO, IU, LDZ, NZC, LIWORK, LWORK, M, N REAL VL, VU * .. * .. Array Arguments .. INTEGER ISUPPZ( * ), IWORK( * ) REAL D( * ), E( * ), W( * ), WORK( * ) COMPLEX Z( LDZ, * ) * .. * * Purpose * ======= * * CSTEMR computes selected eigenvalues and, optionally, eigenvectors * of a real symmetric tridiagonal matrix T. Any such unreduced matrix has * a well defined set of pairwise different real eigenvalues, the corresponding * real eigenvectors are pairwise orthogonal. * * The spectrum may be computed either completely or partially by specifying * either an interval (VL,VU] or a range of indices IL:IU for the desired * eigenvalues. * * Depending on the number of desired eigenvalues, these are computed either * by bisection or the dqds algorithm. Numerically orthogonal eigenvectors are * computed by the use of various suitable L D L^T factorizations near clusters * of close eigenvalues (referred to as RRRs, Relatively Robust * Representations). An informal sketch of the algorithm follows. * * For each unreduced block (submatrix) of T, * (a) Compute T - sigma I = L D L^T, so that L and D * define all the wanted eigenvalues to high relative accuracy. * This means that small relative changes in the entries of D and L * cause only small relative changes in the eigenvalues and * eigenvectors. The standard (unfactored) representation of the * tridiagonal matrix T does not have this property in general. * (b) Compute the eigenvalues to suitable accuracy. * If the eigenvectors are desired, the algorithm attains full * accuracy of the computed eigenvalues only right before * the corresponding vectors have to be computed, see steps c) and d). * (c) For each cluster of close eigenvalues, select a new * shift close to the cluster, find a new factorization, and refine * the shifted eigenvalues to suitable accuracy. * (d) For each eigenvalue with a large enough relative separation compute * the corresponding eigenvector by forming a rank revealing twisted * factorization. Go back to (c) for any clusters that remain. * * For more details, see: * - Inderjit S. Dhillon and Beresford N. Parlett: "Multiple representations * to compute orthogonal eigenvectors of symmetric tridiagonal matrices," * Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004. * - Inderjit Dhillon and Beresford Parlett: "Orthogonal Eigenvectors and * Relative Gaps," SIAM Journal on Matrix Analysis and Applications, Vol. 25, * 2004. Also LAPACK Working Note 154. * - Inderjit Dhillon: "A new O(n^2) algorithm for the symmetric * tridiagonal eigenvalue/eigenvector problem", * Computer Science Division Technical Report No. UCB/CSD-97-971, * UC Berkeley, May 1997. * * Notes: * 1.CSTEMR works only on machines which follow IEEE-754 * floating-point standard in their handling of infinities and NaNs. * This permits the use of efficient inner loops avoiding a check for * zero divisors. * * 2. LAPACK routines can be used to reduce a complex Hermitean matrix to * real symmetric tridiagonal form. * * (Any complex Hermitean tridiagonal matrix has real values on its diagonal * and potentially complex numbers on its off-diagonals. By applying a * similarity transform with an appropriate diagonal matrix * diag(1,e^{i \phy_1}, ... , e^{i \phy_{n-1}}), the complex Hermitean * matrix can be transformed into a real symmetric matrix and complex * arithmetic can be entirely avoided.) * * While the eigenvectors of the real symmetric tridiagonal matrix are real, * the eigenvectors of original complex Hermitean matrix have complex entries * in general. * Since LAPACK drivers overwrite the matrix data with the eigenvectors, * CSTEMR accepts complex workspace to facilitate interoperability * with CUNMTR or CUPMTR. * * Arguments * ========= * * JOBZ (input) CHARACTER*1 * = 'N': Compute eigenvalues only; * = 'V': Compute eigenvalues and eigenvectors. * * RANGE (input) CHARACTER*1 * = 'A': all eigenvalues will be found. * = 'V': all eigenvalues in the half-open interval (VL,VU] * will be found. * = 'I': the IL-th through IU-th eigenvalues will be found. * * N (input) INTEGER * The order of the matrix. N >= 0. * * D (input/output) REAL array, dimension (N) * On entry, the N diagonal elements of the tridiagonal matrix * T. On exit, D is overwritten. * * E (input/output) REAL array, dimension (N) * On entry, the (N-1) subdiagonal elements of the tridiagonal * matrix T in elements 1 to N-1 of E. E(N) need not be set on * input, but is used internally as workspace. * On exit, E is overwritten. * * VL (input) REAL * VU (input) REAL * If RANGE='V', the lower and upper bounds of the interval to * be searched for eigenvalues. VL < VU. * Not referenced if RANGE = 'A' or 'I'. * * IL (input) INTEGER * IU (input) INTEGER * If RANGE='I', the indices (in ascending order) of the * smallest and largest eigenvalues to be returned. * 1 <= IL <= IU <= N, if N > 0. * Not referenced if RANGE = 'A' or 'V'. * * M (output) INTEGER * The total number of eigenvalues found. 0 <= M <= N. * If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1. * * W (output) REAL array, dimension (N) * The first M elements contain the selected eigenvalues in * ascending order. * * Z (output) COMPLEX array, dimension (LDZ, max(1,M) ) * If JOBZ = 'V', and if INFO = 0, then the first M columns of Z * contain the orthonormal eigenvectors of the matrix T * corresponding to the selected eigenvalues, with the i-th * column of Z holding the eigenvector associated with W(i). * If JOBZ = 'N', then Z is not referenced. * Note: the user must ensure that at least max(1,M) columns are * supplied in the array Z; if RANGE = 'V', the exact value of M * is not known in advance and can be computed with a workspace * query by setting NZC = -1, see below. * * LDZ (input) INTEGER * The leading dimension of the array Z. LDZ >= 1, and if * JOBZ = 'V', then LDZ >= max(1,N). * * NZC (input) INTEGER * The number of eigenvectors to be held in the array Z. * If RANGE = 'A', then NZC >= max(1,N). * If RANGE = 'V', then NZC >= the number of eigenvalues in (VL,VU]. * If RANGE = 'I', then NZC >= IU-IL+1. * If NZC = -1, then a workspace query is assumed; the * routine calculates the number of columns of the array Z that * are needed to hold the eigenvectors. * This value is returned as the first entry of the Z array, and * no error message related to NZC is issued by XERBLA. * * ISUPPZ (output) INTEGER ARRAY, dimension ( 2*max(1,M) ) * The support of the eigenvectors in Z, i.e., the indices * indicating the nonzero elements in Z. The i-th computed eigenvector * is nonzero only in elements ISUPPZ( 2*i-1 ) through * ISUPPZ( 2*i ). This is relevant in the case when the matrix * is split. ISUPPZ is only accessed when JOBZ is 'V' and N > 0. * * TRYRAC (input/output) LOGICAL * If TRYRAC.EQ..TRUE., indicates that the code should check whether * the tridiagonal matrix defines its eigenvalues to high relative * accuracy. If so, the code uses relative-accuracy preserving * algorithms that might be (a bit) slower depending on the matrix. * If the matrix does not define its eigenvalues to high relative * accuracy, the code can uses possibly faster algorithms. * If TRYRAC.EQ..FALSE., the code is not required to guarantee * relatively accurate eigenvalues and can use the fastest possible * techniques. * On exit, a .TRUE. TRYRAC will be set to .FALSE. if the matrix * does not define its eigenvalues to high relative accuracy. * * WORK (workspace/output) REAL array, dimension (LWORK) * On exit, if INFO = 0, WORK(1) returns the optimal * (and minimal) LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK >= max(1,18*N) * if JOBZ = 'V', and LWORK >= max(1,12*N) if JOBZ = 'N'. * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * IWORK (workspace/output) INTEGER array, dimension (LIWORK) * On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK. * * LIWORK (input) INTEGER * The dimension of the array IWORK. LIWORK >= max(1,10*N) * if the eigenvectors are desired, and LIWORK >= max(1,8*N) * if only the eigenvalues are to be computed. * If LIWORK = -1, then a workspace query is assumed; the * routine only calculates the optimal size of the IWORK array, * returns this value as the first entry of the IWORK array, and * no error message related to LIWORK is issued by XERBLA. * * INFO (output) INTEGER * On exit, INFO * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * > 0: if INFO = 1X, internal error in SLARRE, * if INFO = 2X, internal error in CLARRV. * Here, the digit X = ABS( IINFO ) < 10, where IINFO is * the nonzero error code returned by SLARRE or * CLARRV, respectively. * * * Further Details * =============== * * Based on contributions by * Beresford Parlett, University of California, Berkeley, USA * Jim Demmel, University of California, Berkeley, USA * Inderjit Dhillon, University of Texas, Austin, USA * Osni Marques, LBNL/NERSC, USA * Christof Voemel, University of California, Berkeley, USA * * ===================================================================== * * .. Parameters .. REAL ZERO, ONE, FOUR, MINRGP PARAMETER ( ZERO = 0.0E0, ONE = 1.0E0, $ FOUR = 4.0E0, $ MINRGP = 3.0E-3 ) * .. * .. Local Scalars .. LOGICAL ALLEIG, INDEIG, LQUERY, VALEIG, WANTZ, ZQUERY INTEGER I, IBEGIN, IEND, IFIRST, IIL, IINDBL, IINDW, $ IINDWK, IINFO, IINSPL, IIU, ILAST, IN, INDD, $ INDE2, INDERR, INDGP, INDGRS, INDWRK, ITMP, $ ITMP2, J, JBLK, JJ, LIWMIN, LWMIN, NSPLIT, $ NZCMIN, OFFSET, WBEGIN, WEND REAL BIGNUM, CS, EPS, PIVMIN, R1, R2, RMAX, RMIN, $ RTOL1, RTOL2, SAFMIN, SCALE, SMLNUM, SN, $ THRESH, TMP, TNRM, WL, WU * .. * .. * .. External Functions .. LOGICAL LSAME REAL SLAMCH, SLANST EXTERNAL LSAME, SLAMCH, SLANST * .. * .. External Subroutines .. EXTERNAL CLARRV, CSWAP, SCOPY, SLAE2, SLAEV2, SLARRC, $ SLARRE, SLARRJ, SLARRR, SLASRT, SSCAL, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN, SQRT * .. * .. Executable Statements .. * * Test the input parameters. * WANTZ = LSAME( JOBZ, 'V' ) ALLEIG = LSAME( RANGE, 'A' ) VALEIG = LSAME( RANGE, 'V' ) INDEIG = LSAME( RANGE, 'I' ) * LQUERY = ( ( LWORK.EQ.-1 ).OR.( LIWORK.EQ.-1 ) ) ZQUERY = ( NZC.EQ.-1 ) TRYRAC = ( INFO.NE.0 ) * SSTEMR needs WORK of size 6*N, IWORK of size 3*N. * In addition, SLARRE needs WORK of size 6*N, IWORK of size 5*N. * Furthermore, CLARRV needs WORK of size 12*N, IWORK of size 7*N. IF( WANTZ ) THEN LWMIN = 18*N LIWMIN = 10*N ELSE * need less workspace if only the eigenvalues are wanted LWMIN = 12*N LIWMIN = 8*N ENDIF WL = ZERO WU = ZERO IIL = 0 IIU = 0 IF( VALEIG ) THEN * We do not reference VL, VU in the cases RANGE = 'I','A' * The interval (WL, WU] contains all the wanted eigenvalues. * It is either given by the user or computed in SLARRE. WL = VL WU = VU ELSEIF( INDEIG ) THEN * We do not reference IL, IU in the cases RANGE = 'V','A' IIL = IL IIU = IU ENDIF * INFO = 0 IF( .NOT.( WANTZ .OR. LSAME( JOBZ, 'N' ) ) ) THEN INFO = -1 ELSE IF( .NOT.( ALLEIG .OR. VALEIG .OR. INDEIG ) ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( VALEIG .AND. N.GT.0 .AND. WU.LE.WL ) THEN INFO = -7 ELSE IF( INDEIG .AND. ( IIL.LT.1 .OR. IIL.GT.N ) ) THEN INFO = -8 ELSE IF( INDEIG .AND. ( IIU.LT.IIL .OR. IIU.GT.N ) ) THEN INFO = -9 ELSE IF( LDZ.LT.1 .OR. ( WANTZ .AND. LDZ.LT.N ) ) THEN INFO = -13 ELSE IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN INFO = -17 ELSE IF( LIWORK.LT.LIWMIN .AND. .NOT.LQUERY ) THEN INFO = -19 END IF * * Get machine constants. * SAFMIN = SLAMCH( 'Safe minimum' ) EPS = SLAMCH( 'Precision' ) SMLNUM = SAFMIN / EPS BIGNUM = ONE / SMLNUM RMIN = SQRT( SMLNUM ) RMAX = MIN( SQRT( BIGNUM ), ONE / SQRT( SQRT( SAFMIN ) ) ) * IF( INFO.EQ.0 ) THEN WORK( 1 ) = LWMIN IWORK( 1 ) = LIWMIN * IF( WANTZ .AND. ALLEIG ) THEN NZCMIN = N ELSE IF( WANTZ .AND. VALEIG ) THEN CALL SLARRC( 'T', N, VL, VU, D, E, SAFMIN, $ NZCMIN, ITMP, ITMP2, INFO ) ELSE IF( WANTZ .AND. INDEIG ) THEN NZCMIN = IIU-IIL+1 ELSE * WANTZ .EQ. FALSE. NZCMIN = 0 ENDIF IF( ZQUERY .AND. INFO.EQ.0 ) THEN Z( 1,1 ) = NZCMIN ELSE IF( NZC.LT.NZCMIN .AND. .NOT.ZQUERY ) THEN INFO = -14 END IF END IF IF( INFO.NE.0 ) THEN * CALL XERBLA( 'CSTEMR', -INFO ) * RETURN ELSE IF( LQUERY .OR. ZQUERY ) THEN RETURN END IF * * Handle N = 0, 1, and 2 cases immediately * M = 0 IF( N.EQ.0 ) $ RETURN * IF( N.EQ.1 ) THEN IF( ALLEIG .OR. INDEIG ) THEN M = 1 W( 1 ) = D( 1 ) ELSE IF( WL.LT.D( 1 ) .AND. WU.GE.D( 1 ) ) THEN M = 1 W( 1 ) = D( 1 ) END IF END IF IF( WANTZ.AND.(.NOT.ZQUERY) ) THEN Z( 1, 1 ) = ONE ISUPPZ(1) = 1 ISUPPZ(2) = 1 END IF RETURN END IF * IF( N.EQ.2 ) THEN IF( .NOT.WANTZ ) THEN CALL SLAE2( D(1), E(1), D(2), R1, R2 ) ELSE IF( WANTZ.AND.(.NOT.ZQUERY) ) THEN CALL SLAEV2( D(1), E(1), D(2), R1, R2, CS, SN ) END IF IF( ALLEIG.OR. $ (VALEIG.AND.(R2.GT.WL).AND. $ (R2.LE.WU)).OR. $ (INDEIG.AND.(IIL.EQ.1)) ) THEN M = M+1 W( M ) = R2 IF( WANTZ.AND.(.NOT.ZQUERY) ) THEN Z( 1, M ) = -SN Z( 2, M ) = CS * Note: At most one of SN and CS can be zero. IF (SN.NE.ZERO) THEN IF (CS.NE.ZERO) THEN ISUPPZ(2*M-1) = 1 ISUPPZ(2*M-1) = 2 ELSE ISUPPZ(2*M-1) = 1 ISUPPZ(2*M-1) = 1 END IF ELSE ISUPPZ(2*M-1) = 2 ISUPPZ(2*M) = 2 END IF ENDIF ENDIF IF( ALLEIG.OR. $ (VALEIG.AND.(R1.GT.WL).AND. $ (R1.LE.WU)).OR. $ (INDEIG.AND.(IIU.EQ.2)) ) THEN M = M+1 W( M ) = R1 IF( WANTZ.AND.(.NOT.ZQUERY) ) THEN Z( 1, M ) = CS Z( 2, M ) = SN * Note: At most one of SN and CS can be zero. IF (SN.NE.ZERO) THEN IF (CS.NE.ZERO) THEN ISUPPZ(2*M-1) = 1 ISUPPZ(2*M-1) = 2 ELSE ISUPPZ(2*M-1) = 1 ISUPPZ(2*M-1) = 1 END IF ELSE ISUPPZ(2*M-1) = 2 ISUPPZ(2*M) = 2 END IF ENDIF ENDIF RETURN END IF * Continue with general N INDGRS = 1 INDERR = 2*N + 1 INDGP = 3*N + 1 INDD = 4*N + 1 INDE2 = 5*N + 1 INDWRK = 6*N + 1 * IINSPL = 1 IINDBL = N + 1 IINDW = 2*N + 1 IINDWK = 3*N + 1 * * Scale matrix to allowable range, if necessary. * The allowable range is related to the PIVMIN parameter; see the * comments in SLARRD. The preference for scaling small values * up is heuristic; we expect users' matrices not to be close to the * RMAX threshold. * SCALE = ONE TNRM = SLANST( 'M', N, D, E ) IF( TNRM.GT.ZERO .AND. TNRM.LT.RMIN ) THEN SCALE = RMIN / TNRM ELSE IF( TNRM.GT.RMAX ) THEN SCALE = RMAX / TNRM END IF IF( SCALE.NE.ONE ) THEN CALL SSCAL( N, SCALE, D, 1 ) CALL SSCAL( N-1, SCALE, E, 1 ) TNRM = TNRM*SCALE IF( VALEIG ) THEN * If eigenvalues in interval have to be found, * scale (WL, WU] accordingly WL = WL*SCALE WU = WU*SCALE ENDIF END IF * * Compute the desired eigenvalues of the tridiagonal after splitting * into smaller subblocks if the corresponding off-diagonal elements * are small * THRESH is the splitting parameter for SLARRE * A negative THRESH forces the old splitting criterion based on the * size of the off-diagonal. A positive THRESH switches to splitting * which preserves relative accuracy. * IF( TRYRAC ) THEN * Test whether the matrix warrants the more expensive relative approach. CALL SLARRR( N, D, E, IINFO ) ELSE * The user does not care about relative accurately eigenvalues IINFO = -1 ENDIF * Set the splitting criterion IF (IINFO.EQ.0) THEN THRESH = EPS ELSE THRESH = -EPS * relative accuracy is desired but T does not guarantee it TRYRAC = .FALSE. ENDIF * IF( TRYRAC ) THEN * Copy original diagonal, needed to guarantee relative accuracy CALL SCOPY(N,D,1,WORK(INDD),1) ENDIF * Store the squares of the offdiagonal values of T DO 5 J = 1, N-1 WORK( INDE2+J-1 ) = E(J)**2 5 CONTINUE * Set the tolerance parameters for bisection IF( .NOT.WANTZ ) THEN * SLARRE computes the eigenvalues to full precision. RTOL1 = FOUR * EPS RTOL2 = FOUR * EPS ELSE * SLARRE computes the eigenvalues to less than full precision. * CLARRV will refine the eigenvalue approximations, and we only * need less accurate initial bisection in SLARRE. * Note: these settings do only affect the subset case and SLARRE RTOL1 = MAX( SQRT(EPS)*5.0E-2, FOUR * EPS ) RTOL2 = MAX( SQRT(EPS)*5.0E-3, FOUR * EPS ) ENDIF CALL SLARRE( RANGE, N, WL, WU, IIL, IIU, D, E, $ WORK(INDE2), RTOL1, RTOL2, THRESH, NSPLIT, $ IWORK( IINSPL ), M, W, WORK( INDERR ), $ WORK( INDGP ), IWORK( IINDBL ), $ IWORK( IINDW ), WORK( INDGRS ), PIVMIN, $ WORK( INDWRK ), IWORK( IINDWK ), IINFO ) IF( IINFO.NE.0 ) THEN INFO = 10 + ABS( IINFO ) RETURN END IF * Note that if RANGE .NE. 'V', SLARRE computes bounds on the desired * part of the spectrum. All desired eigenvalues are contained in * (WL,WU] IF( WANTZ ) THEN * * Compute the desired eigenvectors corresponding to the computed * eigenvalues * CALL CLARRV( N, WL, WU, D, E, $ PIVMIN, IWORK( IINSPL ), M, $ 1, M, MINRGP, RTOL1, RTOL2, $ W, WORK( INDERR ), WORK( INDGP ), IWORK( IINDBL ), $ IWORK( IINDW ), WORK( INDGRS ), Z, LDZ, $ ISUPPZ, WORK( INDWRK ), IWORK( IINDWK ), IINFO ) IF( IINFO.NE.0 ) THEN INFO = 20 + ABS( IINFO ) RETURN END IF ELSE * SLARRE computes eigenvalues of the (shifted) root representation * CLARRV returns the eigenvalues of the unshifted matrix. * However, if the eigenvectors are not desired by the user, we need * to apply the corresponding shifts from SLARRE to obtain the * eigenvalues of the original matrix. DO 20 J = 1, M ITMP = IWORK( IINDBL+J-1 ) W( J ) = W( J ) + E( IWORK( IINSPL+ITMP-1 ) ) 20 CONTINUE END IF * IF ( TRYRAC ) THEN * Refine computed eigenvalues so that they are relatively accurate * with respect to the original matrix T. IBEGIN = 1 WBEGIN = 1 DO 39 JBLK = 1, IWORK( IINDBL+M-1 ) IEND = IWORK( IINSPL+JBLK-1 ) IN = IEND - IBEGIN + 1 WEND = WBEGIN - 1 * check if any eigenvalues have to be refined in this block 36 CONTINUE IF( WEND.LT.M ) THEN IF( IWORK( IINDBL+WEND ).EQ.JBLK ) THEN WEND = WEND + 1 GO TO 36 END IF END IF IF( WEND.LT.WBEGIN ) THEN IBEGIN = IEND + 1 GO TO 39 END IF OFFSET = IWORK(IINDW+WBEGIN-1)-1 IFIRST = IWORK(IINDW+WBEGIN-1) ILAST = IWORK(IINDW+WEND-1) RTOL2 = FOUR * EPS CALL SLARRJ( IN, $ WORK(INDD+IBEGIN-1), WORK(INDE2+IBEGIN-1), $ IFIRST, ILAST, RTOL2, OFFSET, W(WBEGIN), $ WORK( INDERR+WBEGIN-1 ), $ WORK( INDWRK ), IWORK( IINDWK ), PIVMIN, $ TNRM, IINFO ) IBEGIN = IEND + 1 WBEGIN = WEND + 1 39 CONTINUE ENDIF * * If matrix was scaled, then rescale eigenvalues appropriately. * IF( SCALE.NE.ONE ) THEN CALL SSCAL( M, ONE / SCALE, W, 1 ) END IF * * If eigenvalues are not in increasing order, then sort them, * possibly along with eigenvectors. * IF( NSPLIT.GT.1 ) THEN IF( .NOT. WANTZ ) THEN CALL SLASRT( 'I', M, W, IINFO ) IF( IINFO.NE.0 ) THEN INFO = 3 RETURN END IF ELSE DO 60 J = 1, M - 1 I = 0 TMP = W( J ) DO 50 JJ = J + 1, M IF( W( JJ ).LT.TMP ) THEN I = JJ TMP = W( JJ ) END IF 50 CONTINUE IF( I.NE.0 ) THEN W( I ) = W( J ) W( J ) = TMP IF( WANTZ ) THEN CALL CSWAP( N, Z( 1, I ), 1, Z( 1, J ), 1 ) ITMP = ISUPPZ( 2*I-1 ) ISUPPZ( 2*I-1 ) = ISUPPZ( 2*J-1 ) ISUPPZ( 2*J-1 ) = ITMP ITMP = ISUPPZ( 2*I ) ISUPPZ( 2*I ) = ISUPPZ( 2*J ) ISUPPZ( 2*J ) = ITMP END IF END IF 60 CONTINUE END IF ENDIF * * WORK( 1 ) = LWMIN IWORK( 1 ) = LIWMIN RETURN * * End of CSTEMR * END


≡ Metric Menu
📇 Destination Contact Info
⚙ Sustainability Management
😎 Tourism Satisfaction
🧲Tourism Promotion
💹 Socio Economic Sustainability
🏖 Tourism Seasonality
🍛 Cultural Sustainability
☀ Energy Management
💧 Water Management
♻ Waste Management
🌄 Land Use and Management
🏗 Building Design
🚇 Transportation
🍼 Plastic Reduction
🌿 Organic and Hydroponic Foods
🦐 Sustainable Seafood
🏞 Habitat Protections
⛵ Certified Clean Marinas
🏫 Education Programs
🌎 Planetary Boundaries & Policy
Blue Community
Add Destination
Assessment Questions
Blue Wiki
Blue OS
Blue Community App
Dashboards
Databoards
Collapse Navigation
📇
⚙
😎
🧲
💹
🏖
🍛
☀
💧
♻
🌄
🏗
🚇
🍼
🌿
🦐
🏞
⛵
🏫
🌎


Search
I have {{movies.length}} movies
Title : {{movie.Title}}
Year: {{movie.Year}}
Title : {{movie.Title}}


Wireshark-3.2.2
Introduction to Wireshark
The Wireshark package contains a
network protocol analyzer, also known as a “sniffer”.
This is useful for analyzing data captured “off the
wire” from a live network connection, or data
read from a capture file.
Wireshark provides both a
graphical and a TTY-mode front-end for examining captured network
packets from over 500 protocols, as well as the capability to read
capture files from many other popular network analyzers.
This package is known to build and work properly using an LFS-9.1
platform.
Package Information
Additional Downloads
Wireshark dependencies
Required
GLib-2.64.1, libgcrypt-1.8.5, and Qt-5.14.1
Recommended
libpcap-1.9.1 (required to capture data)
Optional
Brotli-1.0.7, c-ares-1.16.0, Doxygen-1.8.17, git-2.26.0, GnuTLS-3.6.13, libnl-3.5.0, libxslt-1.1.34, libxml2-2.9.10, Lua-5.2.4, MIT Kerberos V5-1.18, nghttp2-1.40.0,
SBC-1.4, Speex-1.2.0,
Asciidoctor,
BCG729,
libsmi, lz4, libssh, MaxMindDB, Minizip,
Snappy,
and Spandsp
User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/wireshark
Kernel
Configuration
The kernel must have the Packet protocol enabled for Wireshark to capture live packets from the
network:
[*] Networking support ---> [CONFIG_NET]
Networking options --->
<*/M> Packet socket [CONFIG_PACKET]
If built as a module, the name is af_packet.ko
.
Installation of Wireshark
Wireshark is a very large and
complex application. These instructions provide additional security
measures to ensure that only trusted users are allowed to view
network traffic. First, set up a system group for wireshark. As the
root
user:
groupadd -g 62 wireshark
Continue to install Wireshark by
running the following commands:
mkdir build &&
cd build &&
cmake -DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_DOCDIR=/usr/share/doc/wireshark-3.2.2 \
-G Ninja \
.. &&
ninja
This package does not come with a test suite.
Now, as the root
user:
ninja install &&
install -v -m755 -d /usr/share/doc/wireshark-3.2.2 &&
install -v -m644 ../README.linux ../doc/README.* ../doc/{*.pod,randpkt.txt} \
/usr/share/doc/wireshark-3.2.2 &&
pushd /usr/share/doc/wireshark-3.2.2 &&
for FILENAME in ../../wireshark/*.html; do
ln -s -v -f $FILENAME .
done &&
popd
unset FILENAME
If you downloaded any of the documentation files from the page
listed in the 'Additional Downloads', install them by issuing the
following commands as the root
user:
install -v -m644 <Downloaded_Files>
\
/usr/share/doc/wireshark-3.2.2
Now, set ownership and permissions of sensitive applications to
only allow authorized users. As the root
user:
chown -v root:wireshark /usr/bin/{tshark,dumpcap} &&
chmod -v 6550 /usr/bin/{tshark,dumpcap}
Finally, add any users to the wireshark group (as root
user):
usermod -a -G wireshark <username>
If you are installing wireshark for the first time, it will be
necessary to leave the session and login again, thus you will now
have wireshark between your groups, otherwise, it will not run
properly.
Configuring Wireshark
Config Files
/etc/wireshark.conf
and
~/.config/wireshark/*
(unless there
is already ~/.wireshark/*
in the
system)
Configuration Information
Though the default configuration parameters are very sane,
reference the configuration section of the Wireshark User's
Guide for configuration information. Most of Wireshark 's configuration can be
accomplished using the menu options of the wireshark graphical interfaces.
Note
If you want to look at packets, make sure you don't filter them
out with iptables-1.8.4. If you want to exclude
certain classes of packets, it is more efficient to do it with
iptables than it is with
Wireshark.
Contents
Installed Programs:
capinfos, captype, dumpcap, editcap,
idl2wrs, mergecap, randpkt, rawshark, reordercap, sharkd,
text2pcap, tshark, and wireshark
Installed Libraries:
libwireshark.so, libwiretap.so,
libwsutil.so, and numerous modules under
/usr/lib/wireshark/plugins
Installed Directories:
/usr/{include,lib,share}/wireshark and
/usr/share/doc/wireshark-3.2.2
Short Descriptions
|
capinfos
|
reads a saved capture file and returns any or all of
several statistics about that file. It is able to detect
and read any capture supported by the Wireshark package.
|
|
captype
|
prints the file types of capture files.
|
|
dumpcap
|
is a network traffic dump tool. It lets you capture
packet data from a live network and write the packets to
a file.
|
|
editcap
|
edits and/or translates the format of capture files. It
knows how to read libpcap capture files, including
those of tcpdump, Wireshark and other tools that write
captures in that format.
|
|
idl2wrs
|
is a program that takes a user specified CORBA IDL file
and generates “C” source code for a
Wireshark “plugin”. It relies on two
Python programs wireshark_be.py and
wireshark_gen.py, which
are not installed by default. They have to be copied
manually from the tools
directory to the $PYTHONPATH/site-packages/ directory.
|
|
mergecap
|
combines multiple saved capture files into a single
output file.
|
|
randpkt
|
creates random-packet capture files.
|
|
rawshark
|
dumps and analyzes raw libpcap data.
|
|
reordercap
|
reorders timestamps of input file frames into output
file.
|
|
sharkd
|
is a daemon that listens on UNIX sockets.
|
|
text2pcap
|
reads in an ASCII hex dump and writes the data described
into a libpcap-style
capture file.
|
|
tshark
|
is a TTY-mode network protocol analyzer. It lets you
capture packet data from a live network or read packets
from a previously saved capture file.
|
|
wireshark
|
is the Qt GUI network protocol analyzer. It lets you
interactively browse packet data from a live network or
from a previously saved capture file.
|
|
libwireshark.so
|
contains functions used by the Wireshark programs to perform
filtering and packet capturing.
|
|
libwiretap.so
|
is a library being developed as a future replacement for
libpcap , the current
standard Unix library for packet capturing. For more
information, see the README
file in the source wiretap
directory.
|
Last updated on 2020-03-23 16:46:15 -0500


stateSetup Class
DESC This class singleton handles the setup phase of the game. The user selectes the initial placement of the starting heroes. The user might enter through a door, or alternatively, pre-selected starting squares.
Starting squres: these are highlighted and the user may place a
hero by left clicking on them.
Starting door: this is more complicated as in reality the player
moves through it on the first turn. That is to say it doesn't fit
within the starting square paradigm and more appropriately belongs in
the gameState phase of the application. However, this would then
require a check to see if the player is on the board every level?
Maybe consider rebuilding. Each player has a starting action sequence
that should be completed before proceeding to a standard action phase?
Eg
if play.position !== onBoard
place at entry location
Item Index
Methods
Methods
addPlayer
-
args.y
Description
Parameters:
-
args.y
Integer
Returns:
initialize
()
Add message handlers Setup board visiblity
Returns:
render
()
Draw the visible map Draw the borders Draw objects Draw agents Draw the grid
Returns:
run
()
Description
Returns:
Literal
setMouseFocus
-
cellX
-
cellY
-
mouseX
-
mouseY
DESC This function is intended to set the focus of a given cell to the object which is beneith the mouse. NOTE This function may be redundant. To an extent couple with gh.display.
Parameters:
-
cellX
IntegerThe x coordinate of the cell which the mouse is over.
-
cellY
IntegerThe y coordinate of the cell which the mouse is over.
-
mouseX
IntegerThe x coordinate of the mouse cursor on the screen.
-
mouseY
IntegerThe y coordinate of the mouse cursor on the screen.
Returns:
update
()
Description
Returns:
Literal


In our opinion, to make a crucial point: the two mechanisms (access control, information flow control) are entirely unrelated, and should coexist without interacting. Indeed, access control involves principals, trust and authentication, while information flow control requires neither. Furthermore, describing access control usually involves introducing some form of security violation in the language's semantics, while information flow control does not. Why? Access control implements a fixed security policy, defined by (P,>>); it is meaningless in the absence of such a policy. Information flow control, on the other hand, does make sense even when (L,<<) is left unspecified, because it is only a dependency analysis. It does not, fundamentally, have anything to do with security, which explains why it can be formalized without a notion of security violation.
In these works, the alleged justification for requesting l << p is as follows. p tells who may use the value directly, while l tells who may use it indirectly, i.e have(possibly) partial access to the information contained in it. Because any principals who is granted direct access it thereby granted indirect access at the same time, requiring l<<p may seem natural. We deem it wrong, however, because these notions are really orthogonal: while p indeed tells who may use the value, l tells which information it contains. Mixing the two mechanisms yields a needlessly complex system. Seperating them makes the system more modular, conceptually simpler, and potentially more expressive, since P and L may be distinct.
Myers and Liskov propose a "decentralized" label model which is a subtle mixture of access control and information flow control. The model also rests on a set of principals (P,>>). A label is a set of tagged policies, where the tag carried by every policy is a principals, called readers. Labels form a pre-order, whose underlying order is a lattice; it is used, as in this paper, to perform information flow analysis. However, Myers and Liskov also allow a number of "safe" declassification operations: a principal p may choose to relax the label carried by a given value, by arbitrarily modifying any policy owned by a principals q which it acts for. Of course, p is not allowed to affect the policies owned by principals whose trust it has not received. So. labels do not only carry dependency information; then also contain access control information, since the use of declassification is restricted.
We think Myers and Liskov's model has significant practical interest. However, we believe that comparable expressive power can be achieved in a theoretically simpler systems. Indeed, imagine orthogonal access control and information control, as suggested above. Then one may selectively allow declassification by providing, in the initial typing environment, a number of declassification operations, locked at appropriate levels of authority. The sets of P and L may, in general, be chosen independently; only the types of declassification operations provide a connection between the two.


{% extends 'base.html' %} {% block content %}
{% block text %}{% endblock %}
{% block pixel_info %}Full dark pixel is 0 and full colored pixel is {{ range_max }} or more.{% endblock %}
Each row of the matrix has 504 pixels, which means a theoretical period of one week every two pixel rows.
{% block line_info %}Parameter ploted at each heigh in the blockchain. Each point value is a 1000 blocks average.{% endblock %}
Switch between pixel-block styled graph and classical line graph.
Loading...


Special tea Good Tea Together
★★★★☆ $30 per 500g
Thyme Sauerkraut Sauer Foods
★★★★☆ $14 per jar
Oregano Sauerkraut Sauer Foods
★★★★☆ $14 per jar
Original Organic Chutney Mad Tomatoes
★★★★☆ $8 per jar
Seasonal Honey Edens Nectar
★★★★★ $15 per jar
Cinnamon Honey Oak Creek Farms
★★★★★ $20 per jar
Cherry Jam The Dutch Kettle
★★★★★ $10 per jar
Russian Pickles Pickled Smiles
★★★★★ $10 per jar
Polish Pickles Pickled Smiles
★★★★★ $10 per jar
Argetinian Pickles Pickled Smiles
★★★★★ $10 per jar
Chilli Minced Garlic Dennis Farms
★★★★★ $7.50 per jar
Kimchi Sauer Foods
★★★★★ $15 per jar
White Chocolate Bites Choc Chefs
★★★★★ $20 per box
Chocolate Peanuts Choc Chefs
★★★★★ $8 per box
Bread & Butter Squash Squash Squad
★★★★★ $14 per jar
Salamender Blend Jefferies Roastery
★★★★★ $11 per 250g
Aged Blue Cheese General Dairy
★★★★★ $20 per 1kg block
Salamanca Blend Jefferies Roastery
★★★★★ $12 per 250g
Swiss Curd General Dairy
★★★★★ $15 per 500g block
Gouda General Dairy
★★★★★ $12 per 500g block
Ground Brazil Nuts Nutty Co
★★★★★ $10 per 200g
Chilli & Cayenne Blend Spice of Life
★★★★★ $5 per 100g
Goat Gouda General Dairy
★★★★★ $15 per 500g block
Buffalo Brie Cheese General Dairy
★★★★★ $25 per 500g
Tumeric Curry Blend Spice of Life
★★★★★ $8 per 100g
Sheep Milk Cheese General Dairy
★★★★★ $25/250g block
South American Blend Coffee Co
★★★★★ $12 per 250g


How the hurricane preliminary reports were scraped and parsed.
source(here::here("./R/functions.R"))
input <- knitr::current_input()
These text products are listed under the header ACUS74. They can be found on the National Weather Service FTP server.
The following reports were obtained:
The links above point to the latest ACUS74 product issued by the respective NWS office. Therefore, it is possible that by the time you have read this article, the content of the text product has changed. Because of this, the rds data files have been saved to this website’s GitHub repository.
All times reported are in UTC. Pressure observations are in millibars. Wind and Gust observations are in knots.
The following libraries were used in this article:
library(dplyr)
library(glue)
library(lubridate)
library(purrr)
library(stringr)
library(tibble)
To load the data, I just put the links into a named list. I originally had considered keeping the data separate by NWS office but determined this was not necessary.
The code below looks for the data file mentioned earlier and, if it exists, loads the txt
vector. Otherwise, each of the text products will be collected for parsing.
rpts <- c(
"bro" = "acus74.kbro.psh.bro.txt",
"crp" = "acus74.kcrp.psh.crp.txt",
"ewx" = "acus74.kewx.psh.ewx.txt",
"hgx" = "acus74.khgx.psh.hgx.txt",
"lch" = "acus74.klch.psh.lch.txt",
"lix" = "acus74.klix.psh.lix.txt"
)
# Read data
txt <- map(rpts, ~readLines(here::here(glue("./data/{.x}"))))
Each text product contains several sections:
Section A. Lowest Sea Level Pressure/Maximum Sustained Winds and Peak Gusts
Non-METAR Observations
Section B. Marine Observations
Section C. Storm Total Rainfall
Section D. Inland Flooding (not collected)
Section E. Maximum Storm Surge and Storm Tide (not collected)
Section F. Tornadoes
Section G. Storm Impacts by County (not collected)
Not all sections will contain data. For this article, all data collected was that which contained a latitude and longitude position.
Each section contains a data header:
A. LOWEST SEA LEVEL PRESSURE/MAXIMUM SUSTAINED WINDS AND PEAK GUSTS
---------------------------------------------------------------------
METAR OBSERVATIONS...
NOTE: ANEMOMETER HEIGHT IS 10 METERS AND WIND AVERAGING IS 2 MINUTES
---------------------------------------------------------------------
LOCATION ID MIN DATE/ MAX DATE/ PEAK DATE/
LAT LON PRES TIME SUST TIME GUST TIME
DEG DECIMAL (MB) (UTC) (KT) (UTC) (KT) (UTC)
---------------------------------------------------------------------
B. MARINE OBSERVATIONS...
NOTE: ANEMOMETER HEIGHT IN METERS AND WIND AVERAGING PERIOD IN
MINUTES INDICATED UNDER MAXIMUM SUSTAINED WIND IF KNOWN
---------------------------------------------------------------------
LOCATION ID MIN DATE/ MAX DATE/ PEAK DATE/
LAT LON PRES TIME SUST TIME GUST TIME
DEG DECIMAL (MB) (UTC) (KT) (UTC) (KT) (UTC)
---------------------------------------------------------------------
Additionally, a subsection of A exists:
NON-METAR OBSERVATIONS...
NOTE: ANEMOMETER HEIGHT IN METERS AND WIND AVERAGING PERIOD IN
MINUTES INDICATED UNDER MAXIMUM SUSTAINED WIND IF KNOWN
---------------------------------------------------------------------
LOCATION ID MIN DATE/ MAX DATE/ PEAK DATE/
LAT LON PRES TIME SUST TIME GUST TIME
DEG DECIMAL (MB) (UTC) (KT) (UTC) (KT) (UTC)
---------------------------------------------------------------------
This subsection was added in as part of Sectoin A but is indistinguishable in the parsed dataset.
Observation examples are inluded in the relevant section below.
Numerous observations contain remarks (identified in the dataset by ends_with("Rmks")
). Every section contains a Remarks footer; however, this may not be populated and, therefore, not every observation with a .Rmks
variable would have additional Remarks listed in the text product. The additional Remarks were not collected.
The .Rmks
legend is identified in the footer of each text product as:
“I” - Incomplete data
“E” - Estimated
All .Rmks
variables in the datasets are either NA or “I”.
Sections A and B may also contain additional anenometer height and wind-averaging period variables on a third line. This data was not collected but could easily have been; I did not feel it was relevant to this article.
A typical observation in Section A or B will look like the following:
RCPT2-ROCKPORT
28.02 -97.05 941.8 26/0336 I 017/059 26/0154 I 016/094 26/0148 I
There are 15 variables in the observation above (in order as they appear, with the example text):
ID
(RCPT2)
Station
(ROCKPORT)
Lat
(28.02)
Lon
(-97.05)
Pres
(941.8) [barometric pressure, mb]
PresDT
(26/0336) [date/time of Pres
observation, UTC]
PresRmks
(I) [incomplete pressure observation]
Wind
, WindDir
(017/059) [wind speed, kts, and wind direction]
WindDT
(26/0154) [date/time of preceeding wind observation, UTC]
WindRmks
(I) [incomplete wind observation]
Gust
, GustDir
(016/094) [maximum gust, kts, and direction]
GustDT
(26/0148) [date/time of preceeding gust observation, UTC]
GustRmks
(I) [incomplete gust observation]
Every observation has an empty line before and after which can be used as a delimiter to spilt observations.
To extract the relevant sections, I loop through the text products (txt
) and identify where Section A and Section C begins. With these numerical indices, I can extract both sections, assigning the subset to slp_raw
.
slp_raw <- c(map(txt, ~.[grep("^A\\.", .):grep("^C\\.", .)])) %>%
flatten_chr()
From there, I identify all vector elements that begin with a latitude and longitude field. I counted these values (slp_n
) so that I know exactly how long my final results will be (and to check progress as I move along, making sure I haven’t inadvertently removed anything).
Once I know where the observation indices are (slp_obs_n
) I can find the station identification by calculating slp_obs_n - 1
; this gives me slp_stations_n
.
slp_obs_ptn <- "^\\d\\d\\.\\d\\d\\s*-*\\d\\d\\d*\\.\\d\\d.+"
slp_n <- sum(str_count(slp_raw, slp_obs_ptn))
slp_obs_n <- str_which(slp_raw, slp_obs_ptn)
slp_stations_n <- slp_obs_n - 1
Before merging the two vectors, I found some station values were not all the same length; I felt this would be beneficial with the regex. I create slp_stations
, first trimming all values then finding the max length value. With the max length, I rounded up to the nearest ten and padded all all values to the right.
The last bit of manipulation involved replacing the first “-”, if available, with a “\t” character. This also helped me make it easier to split variables ID
and Station
since Station
would contain additional “-” characters.
slp_stations <-
slp_raw[slp_stations_n] %>%
str_trim() %>%
str_pad(width = round(max(nchar(.)), digits = -1), side = "right") %>%
# Replace first "-" with "\t" to help split ID and Station
str_replace("\\s*-\\s*", "\t")
Note that the code above split ID
“TXCV-4” which would later be corrected.
Finally, I subset slp_obs
and then with slp_stations
make vector slp
.
# Load observations and trim
slp_obs <- slp_raw[slp_obs_n]
# Combine stations and obs
slp <- str_c(slp_stations, slp_obs)
Following is a look at the head of slp
:
head(slp, n = 5L)
[1] "KBRO\tBROWNSVILLE INTL ARPT 25.91 -97.42 1002.9 25/1153 300/022 25/1853 290/032 25/1753 "
[2] "KHRL\tHARLINGEN VALLEY INTL ARPT 26.22 -97.66 1003.6 25/1252 310/023 25/1841 310/033 25/1852 "
[3] "KPIL\tPORT ISABEL ARPT 26.15 -97.23 1001.9 25/1253 300/024 25/1553 300/034 25/1453 "
[4] "KBKS\tBROOKS COUNTY ARPT 26.20 -98.12 1002.2 26/0215 290/019 26/0215 290/027 26/0215 "
[5] "KTXS33 26.13 -97.17 1003.0 25/2240 999/999 99/9999 999/999 99/9999 "
ID
], Station [Station
] (opt)Matching ID
and Station
is easier after switching the first “-” with a “\t”. Station
is optional. To find the end of the string I simply looked for the latitude pattern that would follow.
# ID-Station
"(\\w+)\t*(?<=\t{0,1})(.+)(?=\\s+\\d{2}\\.\\d{2})",
Lat
]Latitude was also very easy to extract. The pattern just looks for four digits with a decimal splitting in half.
# Lat
"\\s+(\\d{2}\\.\\d{2})",
Lon
]Extracting Longitude was a little bit more of a challenge. Most observations have a negative longitude value (since occurring in the northwestern hemisphere). This was accurately reflected in the text products; mostly. Some values did not contain the leading “-” such as Station
“KEFD”:
slp[grep("^KEFD", slp)][2]
[1] "KEFD 29.62 95.17 1003.4 29/1650 160/027 26/1750 360/036 29/2150 "
To accomodate the possibilities, I had to be loose with the number of digits expected in addition to making the negative sign optional.
# Lon
"\\s+-*(\\d{2,6}\\.\\d{2})",
Pres
] optExpected pressure values would have a format like \\d{3,4}\\.\\d{2}
. Some observations had values of “9999.0” which clearly were invalid (expected ranges were roughly between 940 and 1010). These would later be cleaned up.
# Pres
"\\s+(\\d{1,4}\\.\\d{1})*",
PresDT
] optPresDT
was initially split to extract the date value first (PresDTd
) followed by the “%h%m” value (PresDThm
). The general format, “\d{2}/\d{4}” would not work primarily because many observations contained the text “MM” or “N/A”.
Additionally, some observations also held the value “99/9999”. This would be accepted by the default format but would fail when converting the values to a valid date/time variable. These would later be cleaned.
With this, I ended up being very generous with the regex.
# PresDTd, PresDThm
"\\s+(\\w{1,3}|N)*/*(\\w{1,4})*",
PresRmks
] optAs noted previously, some Pres
variables may be incomplete for unknown reasons. These values would be indicated with the letter “I” as noted in the “RCPT2” example earlier.
# PresRmks
"\\s+(I)*",
WindDir
], Maximum sustained winds (opt) [Wind
]Variables WindDir
and Wind
were split with a “/” character. However, again, not all values were numeric as expected, such as “LOPL1”:
slp[grep("^LOPL1", slp)]
[1] "LOPL1\tLA OFFSHORE OIL PORT 28.88 -90.03 998.1 07/2216 080/029 07/2011 090/037 07/1811 "
Invalid values such as “999” would later be marked as NA
.
# WindDir, Wind
"\\s+(\\w{3})/(\\d{3})",
The remaining variables followed generally the same rules as similar variables above (i.e., GustDir
for WindDir
, GustDT
for WindDT
, etc.). The final str_match
call brought all expected observations in order.
# Begin extraction. Move to dataframe and rename variables.
slp_df <-
str_match(
slp,
sprintf("^%s%s%s%s%s%s%s%s%s%s%s%s$",
# ID-Station
"(\\w+)\t*(?<=\t{0,1})(.+)(?=\\s+\\d{2}\\.\\d{2})",
# Lat
"\\s+(\\d{2}\\.\\d{2})",
# Lon
"\\s+-*(\\d{2,6}\\.\\d{2})",
# Pres
"\\s+(\\d{1,4}\\.\\d{1})*",
# PresDTd, PresDThm
"\\s+(\\w{1,3}|N)*/*(\\w{1,4})*",
# PresRmks
"\\s+(I)*",
# WindDir, Wind
"\\s+(\\w{3})/(\\d{3})",
# Wind DTd, WindDThm
"\\s+(\\d{2,3})*/*(\\d{3,4})*",
# WindRmks
"\\s+(I)*",
# GustDir, Gust
"\\s+(\\w{3})*/*(\\d{3})*",
# GustDTd, GustDThm
"\\s+(\\d{2,3})*/*(\\d{3,4})*",
# GustRmks
"\\s+(I)*"
)
) %>%
as_tibble(.name_repair = "minimal") %>%
set_names(nm = slp_df_names) %>%
arrange(ID) %>%
select(-txt)
Section C of the text products listed recorded rainfall observations across the Texas and Louisiana area. These observations were similar in format to those of pressure:
COLETO CREEK GOLIAD CKDT2 9.42 I
28.73 -97.17
The following fields were extracted:
Location
(“COLETO CREEK”)
Count
(“GOLIAD”)
Station
(“CKDT2”) opt
Rain
(“9.42”)
RainRmks
(“I”)
Lat
(“28.73”)
Lon
(“-97.17”)
Extracting these observations followed the same premise for that of slp
; identifying the latitude lines then subsetting those indices and the previous indices and combining into a vector.
Unlike slp
, there were no surprises in cleaning this data. The regex used:
rain_df <- str_match(rain,
pattern = sprintf("^%s%s\\s+%s\\s+%s\\s*%s\\s+%s\\s+%s$",
"(.{29})",
"(.{19})",
"(.{0,12})",
"(\\d{1,2}\\.\\d{2})",
"(I)*",
"(\\d{1,2}\\.\\d{2})",
"-*(\\d{2,3}\\.\\d{2})")) %>%
as_tibble(.name_repair = "minimal") %>%
set_names(nm = rain_df_names) %>%
mutate_at(.vars = c("Rain", "Lat", "Lon"), .funs = as.numeric) %>%
mutate(Lon = if_else(Lon > 0, Lon * -1, Lon)) %>%
select(-txt)
Section F lists reported tornadoes for each region of responsibility. Some NWS offices reported no tornado observations. Others, such as Houston, reported at least a dozen.
An example observation is as follows:
4 NNE SEADRIFT CALHOUN 25/2114 EF0
28.43 -96.67
FACEBOOK PHOTOS AND VIDEO SHOWED A BRIEF TORNADO TOUCHED DOWN ON
GATES ROAD NEAR SEADRIFT. A SHED AND CARPORT WERE DESTROYED AND A
FEW TREES WERE BLOWN DOWN. RATED EF0.
Each observation, again, was preceeded and proceeded by an empty line.
Location
(“4 NNE SEADRIFT”)
County
(“CALHOUN”)
Date
(“25/2114”)
Scale
(“EFO”)
Lat
(“28.43”)
Lon
(“-96.67”)
Details
(“FACEBOOK PHOTOS…”)
Extracting the first two lines used the same technique as previous. However, extracting the Details
required a little creativity since many spread over several lines.
To do this, I took the values of tor_y_n
which marked the indices of the latitude/longitude positions. Then, I created vector tor_z_n
to identify all “^\s+” elements in the original vector, tor_raw
. With this, I was able to identify the first “^\s+” index following the latitude/longitude line, t_a
and then take the very next index, t_b
.
Apologies for the non-descriptive names; I was lacking ingenuity.
With t_a
and t_b
, I used map2
through tor_raw
to extract each subset. From that point there was some cleaning to bring the lines together as needed. If you have any better (even if slower, but more creative), I would love to hear them! I may have tried to get too creative with this task.
The regex was very similar to the rain
regex as most items were evenly delimited.
input %>%
self_get_versions() %>%
dplyr::mutate(
Version = kableExtra::text_spec(short_sha, link = url)
) %>%
dplyr::select(Version, Message, Date, Author) %>%
knitr::kable(
row.names = FALSE,
escape = FALSE
) %>%
kableExtra::kable_styling()
| Version | Message | Date | Author |
|---|---|---|---|
| 4d41af3 | Rebuild website, Sun Jun 30 18:16:38 UTC 2019 [skip ci] | 2019-06-30 | Travis CI |
| 38a6edc | Rebuild website, Sun Jun 30 17:36:16 UTC 2019 [skip ci] | 2019-06-30 | Travis CI |
| c2197ed | Correct path to script | 2019-06-30 | Tim Trice |
| 01fc4ae | Add children | 2019-06-30 | Tim Trice |
| 03a2e1e | Update Rmd yaml front matter | 2019-06-30 | Tim Trice |
| fbf3f49 | Correct chunk links | 2019-06-30 | Tim Trice |
| 0613f78 | Relocate analysis files | 2019-06-30 | Tim Trice |
| be170f1 | Add published docs | 2019-03-01 | Tim Trice |
si <- sessioninfo::session_info()
si$platform
setting value
version R version 3.6.0 (2017-01-27)
os Ubuntu 14.04.5 LTS
system x86_64, linux-gnu
ui X11
language (EN)
collate en_US.UTF-8
ctype en_US.UTF-8
tz UTC
date 2019-06-30
| Package | Version | Date | Source |
|---|---|---|---|
| dplyr | 0.8.2 | 2019-06-29 | CRAN (R 3.6.0) |
| glue | 1.3.1 | 2019-03-12 | CRAN (R 3.6.0) |
| lubridate | 1.7.4 | 2018-04-11 | CRAN (R 3.6.0) |
| purrr | 0.3.2 | 2019-03-15 | CRAN (R 3.6.0) |
| stringr | 1.4.0 | 2019-02-10 | CRAN (R 3.6.0) |
| tibble | 2.1.3 | 2019-06-06 | CRAN (R 3.6.0) |


Respecting your Data.
not this data
Why?
Know your data to know yourself
or be forever lost
Don't disturb the data
or it will betray you
Care and feeding
Happy data, happy people
How?
- Preparing your data for prime-time
- Being a data conservationist
- Making data connections
Go forth and be gentle.
Remember: Happy data, happy people


Your age in Earth years is .
Your age in Mercury years is .
Your age in Venus years is .
Your age in Mars years is .
Your age in Jupiter years is .
You have years left to live on Earth in Earth years.
You have years left to live on Mercury in Mercury years.
You have years left to live on Venus in Venus years.
You have years left to live on Mars in Mars years.
You have years left to live on Jupiter in Jupiter years.


Start your eco-friendly journey here!
Hover over the rooms beside to go to the relevant page, each giving you useful tips and tools in turning your future sustainable.
Get sustainable at home through small actions
Hover over the rooms beside to go to the relevant page, each giving you useful tips and tools in turning your future sustainable.


COPYCAT A film review by Michael John Legeros Copyright 1995 Michael John Legeros
(WB) Directed by Jon Amiel Written by Ann Biderman and David Madsen Cast Sigourney Weaver, Holly Hunter, Dermot Mulroney, William McNamara, Will Patton, Harry Connick Jr. MPAA Rating "R" (presumably for violence, language, and gore) Running Time 123 minutes Reviewed at General Cinemas at Pleasant Valley, Raleigh, (27OCT95)
==
In the new thriller COPYCAT, Sigourney Weaver plays Helen Hunter, a criminal psychologist whose specialty is serial killers. That is, whose specialty *was*. She's since retired, after an attack thirteen months ago left her an agoraphobic alcoholic. (She can't leave her heavily-reinforced home without a drink and a panic attack, and not necessarily in that order.) Into Helen's protected world steps a diminutive detective (*Holly* Hunter), who needs her help in solving a string of brutal murders. (Is there any other kind?) As it turns out, there's another demented, young white male on the loose. Except this one is imitating the most infamous killers in history.
Sitting-duck slasher pics don't come much more effective than this. Directory Jon Amiel (SOMMERSBY) keeps twisting the screws, combining a stalker's POV in almost every other shot, with plenty of throbbing music, and gratuitous scenes of the killer planning his crimes. (Ladies, please trim your fingernails before attending with your dates.) All very effective devices that are dressed-up considerably by screenwriters Ann Bidermand and David Madsen. Their story is intelligent, though way too overplotted to be logical.** The psychology adds up okay, even if this is really just a big boo-house at heart. Where SEVEN was stylish, COPYCAT is shameless. Where MANHUNTER was moody, COPYCAT is manipulative. And so on.
The casting is choice. After three ALIEN bug-hunts, Sigourney Weaver certainly can play peril. Her foil, Holly Hunter, is surprisingly effective, despite her small size and smaller voice. "Have the mice stopped screaming, Clarice?" The partner is played a solid Dermot Mulroney. (Together, they patrol the streets of San Francisco as "Monahan and Getz." Such great cop names!) In a substantially smaller role, Harry Connick Jr. is a hoot as a backwoods bad guy whose resemblance to Jim Varney suggests the title for the inevitable sequel: ERNEST GOES A-KILLIN'.
Grade: B+
**- The audience has too much time to wonder about such things as why Weaver's character doesn't own a gun. Or, where and on what planet did she find such a fast modem for her computer? Or, if anybody else thinks that Weaver could pass for Hugh Grant's older sister?
-- Michael J. Legeros - Raleigh, NC<EMAIL_ADDRESS>(h) -<EMAIL_ADDRESS>(w)
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


Sorry, the content you are looking for does not exist at this URL. Please try our home page or try one of the search options in the navigation menu. If you are interested in general information about the Royal Western Australian Historical Society, visit our website or check out our online shop.


The spiritual successor to Inbox, Spark, now has a dark mode on mobile
by Damien WildeDespite saying goodbye to Inbox earlier this year, we do have a spiritual successor in the form of Spark. The email client is by no means an outright replacement but the good news is that unlike Inbox, there is now a dedicated dark mode for Spark on Android and iOS.
When Inbox kicked the bucket earlier this year, we even went hands-on with Spark to give devotees a closer look at an alternative service — which is really nice by the way. Hardcore Inbox fans will likely still be frustrated as nothing quite ‘feels’ like the automated email client and there probably never will be. That said, Spark is a bit of halfway-house that retains some Inbox features and gives you an option when there are very few out there.
Of course, Spark didn’t officially launch with a dark mode. From today though, you can dip your display into a darker shade and Spark will now follow suit after being officially announced by developer Readdle.
It can either be turned on manually, while it also respects the system-wide dark mode settings on both Android 10 and iOS 13. This means that even if you’re waiting on the Android 10 update, you can still enjoy less eye-searingly bright menus, emails and have an overall more pleasing experience.
If you haven’t tried the email client already, when firing up Spark you notice that the interface doesn’t feel quite the same as every generic email client, but for Inbox users, it will feel eerily familiar. Your notifications are bundled much as they would be with Inbox. Everything feels very organized and well thought through.
You can download the latest version of Spark on Android and iOS right now to enjoy the brand new dark mode. Be sure to let us know what you think down in the comments section below.
More on Android:
- Spark Mail for Android review: Carrying the Inbox baton and really running with it [Video]
- Samsung Camera app prepares new modes including custom filters, ‘Director’s View’
- Android flaw allowed apps to take and upload pictures, some devices still vulnerable
FTC: We use income earning auto affiliate links. More.


Dev Docs: https://developers.komodoplatform.com | Test plan: https://docs.google.com/spreadsheets/d/1l0dWEPcrv9zE11_TD-XrX_HIYV0VLpadCJN6hvaZERc/edit#gid=211514340
https://medium.com/@jameslee777/how-to-implement-finite-state-machines-into-a-cc-8dfeadccbcad
https://github.com/dimxy/komodo/wiki/Designing-RPC-for-FSM-CC
100 messages
Before 05-Dec-19 12:00 AM
TonyL07-Nov-18 12:10 PM
Seems have to re-write tests for diceCC after latest updates
jl777c07-Nov-18 12:11 PM
i disabled old odds of 1
TonyL07-Nov-18 12:11 PM
So just 50/50 bets arent possible now?
Oh, oracles unit tests cover only creation process so far. Have to improve this white space
TonyL07-Nov-18 02:34 PM
@jl777c I'm receiving now blank JSON in case of dicebet to diceplan name not matching original one (noticed it in auto-tests):
./komodo-cli -ac_name=TONY0 dicebet test 0073aa8af8f07fc7770db37b5ebc0e36814699423ed0694b00fcdb1773eb805c 10 2
error decoding opret or sbits mismatch 594b43554c vs 74736574
Dice plan (test) exists.0 vs cmpflag.1
{
}
Komodo. Contribute to jl777/komodo development by creating an account on GitHub.
unless you always want to print out CCerror, probably want { } around line 1181 and 1182
@TonyL so what exactly is your "new/other way" to deal with CC errors? I am not quite understanding.
TonyL07-Nov-18 03:47 PM
It's not a new way - I just added error message to check
dukeleto07-Nov-18 03:47 PM
i am not understanding
TonyL07-Nov-18 03:48 PM
if ( (cp= Diceinit(fundingPubKey,fundingtxid,&C,planstr,txfee,mypk,dicepk,sbits,minbet,maxbet,maxodds,timeoutblocks)) == 0 )
error = "Diceinit error on Dicebet (probably plan not exists or plan name not match)";
return("");
dukeleto07-Nov-18 03:48 PM
why assign to error instead of CCerror ?
i don't understand this new error variable, why it was introduced or how it is tied to CCerror
but also, i am vastly out-of-date with CC stuff. I see Tony has been doing awesome stuff!
1
error = "Diceinit error in status";
return(0.);
from DiceStatus
that can't work correctly
CCerror must be assigned to
TonyL07-Nov-18 03:51 PM
It's James code not mine
I just saw this error= around, added for my case and it's seems working correct in RPC responses
dukeleto07-Nov-18 03:52 PM
don't throw the sage wizard under the bus . he must have left it there for us to find and learn
it seems many/all internals functions take a std::string error now, that is new
but not all
so the new ones that take that string, assign to it. older functions without that assign to CCerror, it seems
TonyL07-Nov-18 03:55 PM
James working actively on diceCC debugging these days so a lot of stuff probably might be changed
dukeleto07-Nov-18 03:55 PM
i thought error was a local variable, but it's passed by reference, so the function modifies the value, and then the caller probably does something special
my guess is James took my hacky CCerror solution and improved it
jl777c07-Nov-18 03:56 PM
i am waiting for someone to make a pull request to make the error handling sane
dukeleto07-Nov-18 03:56 PM
oh gosh
@jl777c is every internals function taking a std::string error the new way?
jl777c07-Nov-18 03:57 PM
maybe the entire std::string return value needs to be changed
i havent paid much attention to the error reporting
dukeleto07-Nov-18 03:57 PM
CCerror was introduced so that RPC json responses could be sane
TonyL07-Nov-18 03:57 PM
./komodo-cli -ac_name=TONY0 dicebet test 0073aa8af8f07fc7770db37b5ebc0e36814699423ed0694b00fcdb1773eb805c 10 2
error decoding opret or sbits mismatch 594b43554c vs 74736574
Dice plan (test) exists.0 vs cmpflag.1
{
"result": "error",
"error": "Diceinit error on Dicebet (probably plan not exists or plan name not match)"
}
dukeleto07-Nov-18 03:57 PM
instead of libraries trying to parse error strings as json
TonyL07-Nov-18 03:57 PM
This error = worked fine hmm
jl777c07-Nov-18 03:58 PM
i think it is a global
dukeleto07-Nov-18 03:58 PM
my guess is the calling code takes the error response and maybe puts that in CCerror
i haven't looked at the fsm branch CC code lately
i am looking at the code now
dicebet does not use CCerror
which then calls DiceInit
and other internals functions, which have no way to pass errors back up via CCerror
TonyL07-Nov-18 04:07 PM
Hmm, interesting so how RPC error printing this way
dukeleto07-Nov-18 04:08 PM
i am just saying that some error conditions are currently not covered, or not easy to report, because various levels of functions don't have error variables
making everything use CCerror and then doing a single check for CCerror when returning JSON response seems easiest/best to me
otherwise you need to pass various error variables to functions which call other functions, seems like a lot of work for not much gain. CCerror global is all we need, I think
dukeleto07-Nov-18 04:25 PM
@TonyL do you know of any cases where errors should be returned, but they are not?
TonyL07-Nov-18 04:43 PM
@dukeleto Hmm usually I add to RPC validations in such cases
Oh
At the moment you can put to oraclessubscribe almost everything you want
Posted behaviour of oraclesregister above in this channel
dukeleto07-Nov-18 04:45 PM
cool, i haven't touched oracle CC's at all yet
TonyL07-Nov-18 04:46 PM
I've started unit-tests for oraclesCC but covered only creation process - now I remember - this oraclesregister is why I've stopped
@dukeleto If you'll need to use auto-tests - it's failing now for diceCC because of last contract changes, I'll PR fix today-tomorrow so you may just comment it if needed
That's because I did only one diceaddfunds so expected(edited)
jl777c07-Nov-18 04:56 PM
make more
TonyL07-Nov-18 04:57 PM
Node with empty output is on:
commit<PHONE_NUMBER>daee9f0adf9d75ae8362e1785655f5 (HEAD -> FSM, upstream/FSM, origin/FSM)
Author: jl777<EMAIL_ADDRESS>Date: Wed Nov 7 01:33:44 2018 -1100
Test
Node which getting error print is on:
commit a6b21d0d44c3f9c4efb499050723618883d51534 (HEAD -> FSM, origin/FSM)
Author: jl777<EMAIL_ADDRESS>Date: Tue Nov 6 21:58:18 2018 -1100
Guard adding to entropyused list
jl777c07-Nov-18 04:59 PM
i made many dice changes, you should be on latest
TonyL07-Nov-18 05:01 PM
Oh, there were more changes while I dinner Will re-check with very latest
On very latest get this printout, sorry for false alarm
TonyL07-Nov-18 06:21 PM
Hmm I found the reason: If I'm adding error= printout here: https://github.com/jl777/komodo/blob/FSM/src/cc/dice.cpp#L1074
I'm receiving RPC error when plan name not match or exists but not receive error when bet or odds is more than maximum. Will try to do with CCerror as @dukeleto advised.
So problem was even not in JL code but in mine (edited)
New macro RETURN_IF_ERROR makes it very easy correctly handle CCerror from internals functions and return it in JSON. It doesn't seem worth it to convert lots of existing code to use it, but va...
pretty simple/trivial, but brings some sanity to CC error checking
jl777c07-Nov-18 09:42 PM
thanks!
1
dukeleto07-Nov-18 09:43 PM
i see many places to add error checking/reporting to oracle/gateway, RETURN_IF_ERROR makes it super easy
TonyL07-Nov-18 09:45 PM
Wow it's really cool @dukeleto !
dukeleto07-Nov-18 09:57 PM
just doing my part
Mihailo08-Nov-18 11:32 AM
Hey guys, I see you were talking about returning errors in RPC for CC. When I started with CC (my first CC was channels) I didn't know there was CCerror thing. Now I see it was used in rewards, prices, dice...
I gave some thought on returning errors from CC in RPC, but I went different way. If we would be ok to change that the CC functions instead of returning std::string with hex, to return JSON in which we can already format the JSON with result success and hex if it was ok, or result error with specific error if something went wrong.
If there is some big issue with this, than I think this CCerror could be used as it was intended to...
CrisF08-Nov-18 12:06 PM
Hi, Is migration not a single cc but a combination of contracts?


Michelle Wang
Collection: Game Library
Detroit: Become Human
2018
Phasmophobia
2020
Left 4 Dead 2
2009
The Long Dark
2014
Pokemon Sword and Shield
2019
Pokemon Mystery Dungeon: Red Rescue Team
2005
Fez
2012
Fire Emblem: Three Houses
2019
Alan Wake
2010
Layers of Fear
2016
Rise of the Tomb Raider
2015
Minecraft
2009


AppAuth Tester
Testing the App Auth JavaScript Library.
Fetch Configuration
Make Authorization Request
Make User Info Request
Logout Request


A cozy group of open-minded IT enthusiasts having fun together.
We achieve this with technical sessions, bootcamps & team events.
Only through self-criticism and iteration can we improve ourselves.
A profound professionalism and dedication towards our customers.


fmi v0.1.11
Finnish Meteorological Institute (FMI) open data API client for R
This R package (fmi) provides a client to access the Finnish Meteorological Institute (Ilmatieteenlaitos) open data. This R package is a part of the rOpenGov project.
Installation
Libraries
The fmi package depends on the GDAL library and its command line tools. Please, see the installation instructions in the gisfin package tutorial to install GDAL. If you have GDAL already installed, you might need to update it to newer version. Also, add the command line tools to the search path of your system as follows:
Linux
In Linux, the tools should be found from the path by default after installation.
If not, use the export
command from terminal, for example:
export PATH=$PATH:/usr/local/gdal/bin
OS X
From terminal, type:
export PATH=$PATH:/Library/Frameworks/GDAL.framework/Programs
Windows
Open System from Control Panel and select “Advanced System Settings”.
Click “Environment Variables” and select “Path” Variable from the list.
Append ;C:\Program Files (x86)\GDAL
to the value field (note the semicolon).
ogr2ogr
Note that the actual location of GDAL may vary depending on your system. To test that the tools are found from the path, type the command in terminal (Command Prompt in Windows):
ogr2ogr
To test that you also have a recent version of GDAL:
ogr2ogr --help
You should see the options -splitlistfields
and -explodecollections
in the printed help.
If not, you need to update GDAL.
Packages
Start R and follow these steps to install the required packages:
Note that rgdal version 0.9-1 or newer is needed. Then install the fmi package itself:
API key
In order to use the FMI API, you need to obtain a personal API key first. To get the key, follow the instructions at https://ilmatieteenlaitos.fi/rekisteroityminen-avoimen-datan-kayttajaksi (appears to be available only in Finnish). Enter the API key from command line:
Available data sets and filtering
FMI provides a brief introduction to the data sets at http://en.ilmatieteenlaitos.fi/open-data-sets-available.
A complete list of the available data sets and filtering parameters are described in
http://en.ilmatieteenlaitos.fi/open-data-manual-fmi-wfs-services.
Each data set is referenced with a stored query id, for example the id for the daily weather time series
is fmi::observations::weather::daily::timevaluepair
. This data set contains variables for
daily precipitation rate, mean temperature, snow depth, and minimum and maximum temperature,
see the description of fmi::observations::weather::daily::multipointcoverage
.
The data can be filtered with a number of parameters specific to each data set.
For example, the starting and the ending dates are provided by the starttime
and endtime
parameters for the weather observations.
Usage
Request object
Queries to the FMI API are specified using an object of the class FMIWFSRequest
. To initialize the object, type:
The fmi package provides two types of queries: a manual one for direct access to the FMI API and an automated one for a convenient access obtaining the data sets.
In the manual case, stored query id and filter parameters are given with the setParameters
method:
The parameter request="getFeature"
must be specified always.
For the automated case, see below.
Client object
Queries to the FMI API are made by using the FMIWFSClient
class object. For example, a manual request is dispatched with
(continued from the previous example):
This example retrieves a list of data layers and the first layer is used to obtain the actual data. In fact, there is only single layer.
For the same stored query, an automated request method, getDailyWeather
, exists as well, which is a more
convenient way to retrieve the data. For example, to get all weather observations for the 1st of January in 2014:
Here the function getFinlandBBox
returns the bounding box surrounding the whole Finland.
See the package documentation in R for all available automated queries. Currently, the package supports only
a few data sets, which can be obtained using an automated query method. The rest of the stored queries are
available with the generic method getLayer
.
As rgdal does not currently support direct queries to the FMI API, the client saves the response
to an intermedidate file first and then lets GDAL and rgdal to parse it. The FMIWFSClient
class provides
a caching mechanism, so that the response is needed to be downloaded only once for the same subsequent queries.
The response file can be saved to a permanent location with the method saveGMLFile
and loaded up into a
FMIWFSClient
object again by referencing the file via a GMLFile
object. GML files saved from the FMI API
directly can be loaded as well.
Supported data and metadata
The fmi package supports time-value-pair and GRIB data formats. Multipoint-coverage format is not currently supported. However, most of the multipoint-coverage data sets are availables in the time-value-pair format as well.
The automated queries attempt to associate appropriate metadata with the obtained data. The generic method getLayer
ignores the metadata and therefore it is left to the user to handle the metadata.
In case there is no documentation available, the metadata - or some of it - can be found from the actual XML
response retrieved from the FMI API. The XML response can be browsed by entering the query URL to a browser
or saving the response to a file first and then viewing it. A query URL can be printed from the request object
directly:
For manual requests, coordinate reference system (if needed) must be specified manually by providing the crs
argument
as a character string for the getLayer
method. The default CRS appears to be WGS84. Furthermore, longitude and latitude
coordinates may need to be swapped, which can be done with the argument swapAxisOrder=TRUE
. For example:
The last parameter splitListFields=TRUE
asks the ogr2ogr
tool bundled with the GDAL library
to convert the list fields to separate fields, so that rgdal can read the data properly.
Redundant features
Some of the responses contain a redundant multipoint feature, which rgdal does not handle.
A workaround is to remove the feature using ogr2ogr
.
In such case, explodeCollections=TRUE
needs to be specified for the getLayer
method, for example:
Saving data and reading from file
Unprocessed data can be saved to a file with the saveGMLFile
method and later processed by referencing
the file using a GMLFile
object:
Error handling
TODO
Examples
Manual request
Load the library:
Enter your API key for the examples:
Construct a request object for the manual query:
The time parameters can be provided as objects that can be converted to the POSIXlt
objects and
bbox as an extent
object from the raster
package as well.
Set up a client object and list the layers in the response:
Parse the data from the response, which has been cached:
The data is returned as a SpatialPointsDataFrame
object in “wide” format so that there is a row for each
variable and observation location, but for each day (two days here) there are columns for time and observation
indexed with a sequential number. The columns starting with time
contains the time and the columns
result_MeasurementTimeseries_point_MeasurementTVP_value
the measurements, which are organized so that
the variables rrday, snow, tday, tmin, tmax
are repeated in the same order as specified in the request.
Automated request
The method getDailyWeather
provides an automated query for the daily weather time series:
The automated method sets the known parameters automatically and returns cleaner result by combining the data with metadata data and converting the “wide” format to long format.
Raster
To request continuous space data manually, use the getRaster
method, for instance:
The response is returned as a RasterBrick
object of the raster
package:
Set the NA value and plot the interpolated monthly mean temperature in January 2012:
There is also the automated request method getMonthlyWeatherRaster
for obtaining monthly weather data:
The method sets the raster band names to match the variable name and the dates:
Licensing and further information
For the open data license, see http://en.ilmatieteenlaitos.fi/open-data-licence. Further information about the open data and the API is provided by the FMI at http://en.ilmatieteenlaitos.fi/open-data.
Citing the R package
This work can be freely used, modified and distributed under the Two-clause FreeBSD license. Kindly cite the R package as ‘Jussi Jousimo et al. (C) 2014. fmi R package. URL: http://www.github.com/rOpenGov/fmi’.
Session info
This tutorial was created with


{% extends "base.html" %} {% block page_title %} {{ page_title }} {% endblock %} {% block content %}
My name is Aldiyar and thank you for using this Website.
Each semester starts with the registration of subjects. It is a struggle to choose the right professor. Here we come :). On our website you can see others opinion on your potential professors.
In the end of each semester, students give feedback to the schools. However, they are not public and we do not have access to them. It is unclear what is done with our feedback. But here you can leave you honest opinion and may be it will make an effect.
If you find a bug/typo or you have an idea how to improve the Website just email us<EMAIL_ADDRESS>If you want to help us financially, since hosting costs some money, or you just want to buy me some coffee here is my card number: 4390 8722 2197 0223.
There are plenty of good developers among you and we need your help. Probably soon there will be a link to the repo with the source code so you can contribute to our service.
I want to thank ma people who helped and gave feedback during development: Manat Tugelbay, Bekarys Gabdrakhymov, Madiyar Sharipov, Olzhas Shaikenov.


Resume
A short summary of my profession and my expriences in different life endeavours
Sumary
Amohelang Thoabala
Innovative and deadline-driven self-assured individual offering more than 4 years of programming, highly trained in various technology environments, flexible and poised in promoting well developed skills in frontend and backend development.
- Alibijay Media
-<PHONE_NUMBER>
-<EMAIL_ADDRESS>Education
Bachelor of science in & Computer Science
2013 - 2020
National University of Lesotho
I love programming, I observed these when I was doing Programming fundamentals taught by one of my favourite lecturers Ntate Khobatha. I also enjoyed doing Finite state machines, and brute force and Exhaustive search.
Professional Experience
IT SUPPORT SPECIALIST
February 2019 – July 2019.
National University of Lesotho, Roma, Maseru
- Configured hardware, devices and software to set up work stations for employees
- Monitored systems in operation and input commands troubleshoot areas such as network and sharing and operating system.
- Determined hardware and network system issues using effective troubleshooting techniques.
- Activated accounts for clients interested in new services.
- Repaired access control, CCTV, electronic devices and elctromachanical devices to maintain electronic security system.
LAB INSTRUCTOR
August 2017- December 2017
National University of Lesotho, Roma, Maseru
- Spearheaded group tutoring sessions to help students struggling in similar areas
- Conducted tutorial services for students to provide academic support in computer programming
- Evaluated student progress in c++ fundamentals and complex coding methods and plan of achievement.
- Motivated students towards learning and studying to build self-confidence and reduce anxiety of failure in writing.
- Reviewed computer science class material with students to support discovery of correct answers to problems.


{% if product.book.published and product.published %}
{% get_review_by_user for product as review %}
{% with object=product %}
{% include "reviews/review_button_modal_quick.html" %}
{% endwith %}
{% trans "read online"|capfirst %}
{% else %}
{% trans "not available" as default_courtesy_short_message %}
{% if product.book.published and product.published %}
{% get_review_by_user for product as review %}
{% with object=product %}
{% include "reviews/review_button_modal_quick.html" %}
{% endwith %}
{% trans "read online"|capfirst %}
{% else %}
{% trans "not available" as default_courtesy_short_message %}


First let me start with describing the wormwood extract. I bought about 2 oz of fresh wormwood leaves from an online supplier. I dried all the leaves under shade and then ground them into powder or very small chunks. I then filled the jar about halfway with them and then filled the jar with acetone completely. With the cover on the jar, I shook the jar while watching TV for about half an hour. The acetone, a very murky green at this point, was then strained through a coffee filter and left to dry on top of a hot plate for about 12 hours until it left a hash-like substance on the bottom of the jar, like described in a report I'd read. It was a very thin layer, somewhat sticky, and I rolled it up into balls.
I then loaded up a very large glass-blown 'tobacco' pipe with weighed 0.75 of the wormwood extract and 0.2g of the salvia extract. I'm somewhat familiar with each substance so I knew how to recognize the effects of both.
I found that the wormwood extract made the salvia significantly easier to smoke, compared to the normally harsh hits I must take to trip off salvia. After holding about 3 hits in as long as I could, I put down the bowl and laid down with all the lights off and closed my eyes.
The salvia hit me very fast. I lost most of the perception of who I was and then experienced a whole new plain. I was walking through a forest of completely black and white, with deer ducking in and out of the trees. However, unlike other normal salvia trips, I was completely aware that this wasn't real. I also felt as if this new world was very clean, and the trees were almost texture-less, with brilliant, contrasted white and black outlines similar to birch trees. The deer frankly scared me, I was sprinting through the forest while feeling their prying eyes on me. I suddenly saw a vision of a friend of mine, he was telling me 'Wake up, wake up.'. The deer began to laugh and the sound surrounded me. I then felt this world sucking back and, although I had not initially realized that it was gone, the realization of the true world was quickly coming back to me. I opened my eyes and was laying in my bed.
At this point, I was feeling some of the aftermath of the salvia along with the odd effects of thujone. Many times after I use salvia, my scalp and my feet feel almost raw. My reality was shifting in and out of perspective like I was in an Escher-esque world, the dimensions of time and space felt almost meaningless. At this point, however, I could consciously attribute these happenings to the psychoactives. I sat down and watched a 'Recess' marathon for the next 2 hours or so, and the effects of thujone wore off. I was feeling very inspired, however, during the comedown, and I made two very interesting acrylic paintings.
These two psychoactives are quite fun seperately, but together, they slightly detract from each other. However, it is not enough to discredit the experience, as it is something I would definitely try again.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


UKCloud Limited (“UKC”) and Virtual Infrastructure Group Limited (“VIG”) (together “the Companies”) – in Compulsory Liquidation
On 25 October 2022, the Companies were placed into Liquidation with the Official Receiver appointed as Liquidator and J Robinson and A M Hudson simultaneously appointed as Special Managers to manage the liquidation process on behalf of the Official Receiver.
Further information regarding the Liquidations can be found here: https://www.gov.uk/government/news/virtual-infrastructure-group-limited-and-ukcloud-limited-information-for-creditors-and-interested-parties
Contact details:
For any general queries relating to the Liquidations please email<EMAIL_ADDRESS>For customer related queries please email<EMAIL_ADDRESS>For supplier related queries please email<EMAIL_ADDRESS>Services at a glance
This article is designed to provide you with a top level comparison for our main products. For further information, refer to the appropriate Service Definition as listed in UKCloud Service Definitions.
| Setup cost | Minimum commit | Onboarding time | Termination notice | |
|---|---|---|---|---|
| UKCloud for OpenStack | No | 1 hour | 4 hours | 30 days |
| UKCloud for Oracle Software | No | 1 hour (VM) | up to 10 days | 30 days |
| UKCloud for Red Hat OpenShift | No | 1 hour (for Application Nodes) | 5 days | 30 days |
| UKCloud for VMware | No | 1 hour | 4 hours | 30 days |
| Cloud Storage | No | 1 month | 1 day | 30 days |
| Cross Domain Security Zone | No | 1 month | 5 days (following validation of assurance documents) | 30 days |
| Dedicated Compute v2 | No | 30 days | As agreed with customer | 30 days |
| Disaster Recovery as a Service | No | 1 hour | 4 hours | 30 days |
| Email & Collaboration as a Service | No | 25 mailboxes | 5 days | 30 days |
| Managed Monitoring as a Service | No | 1 month | 5 days | 30 days |
| Migration to the Cloud | No | 1 hour | 4 hours | 30 days |
| Neustar DDoS Protection from UKCloud | £3,000 | 12 months | Determined by Neustar | 30 days and early termination fee |
| Neustar UltraDNS from UKCloud | No | 12 months | Determined by Neustar | 30 days and early termination fee |
| Private Cloud | From £10,000 or 10% of asset cost | 3-24 months | N/A | 30 days and early termination fee |
| Private Cloud for Oracle Software | From £10,000 | 24 months | N/A | 30 days and early termination fee |
| Private Cloud for Storage | From £10,000 or 10% of asset cost | 24 months | N/A | 30 days and early termination fee |
| Secure Remote Access | No | 1 month | 5 days (following validation of assurance documents) | 30 days |
| UKCloud Desktop as a Service | No | 1 month | N/A | 30 days |
| Cloud Enablement | £2,000 | 1 month | Depends on solution | 30 days |
| Big Cloud Enablement | 12 month: £5,000 per rack, 36 month: £0 per rack | 12 months | Depends on solution | 30 days (termination cost: Remainder of contract) |
Note
The following products are no longer available for sale. They are included in this article to support existing customers of the products only.
Email and Collaboration as a Service
UKCloud for Oracle Software
Feedback
If you find a problem with this article, click Improve this Doc to make the change yourself or raise an issue in GitHub. If you have an idea for how we could improve any of our services, send an email to feedback@ukcloud.com.


name: inverse layout: true class: center, middle, inverse --- # STAT 105: Lecture 4 ## Chapter 2: Data Collection ### and ## Chapter 3: Elementary Descriptive Statistics .footnote[Course page: [imouzon.github.io/stat105](https://imouzon.github.io/stat105)] --- # Recap ##Section 2.3: Principles of Effective Experimentation --- layout:false .left-column[ ## Recap ### Terms ] .right-column[ We described an ideal simple experiment and defined terms associated with one (2.3.1, 2.3.2) - response, managed variable, controlled variable, experimental variable, concomitant variable, extraneous variable, blocking variable, and randomization We discussed the importance of **Comparative studies** (2.3.3) - there are many things that we can not control when we make measurements and collect data - when we want to compare a new method to a previous method, we need to be aware that the uncontrolled circumstances that existed when we studied the previous method do not exist anymore - in order to *know* that differences in results are the result of the method used (and not the difference in the circumstances) we must collect new data on both methods ] --- layout:false .left-column[ ## Recap ### Terms ### Extraneous Variables ] .right-column[ ### Dealing With Extraneous Variables Some aspects of the environment can not be controlled, even though they may effect the results we see. We call those aspects **extraneous variables**. Though we can not *control* extraneous variables, we can plan our experiment to minimize their impact (2.3.2, 2.3.4) **Note**: These techniques are part of how the experiment is *designed* - we decide this before any data is collected. **blocking** - the process of arranging the experiment so that results from different methods are collected in similar environments - with blocking, we can compare methods in multiple environments ] --- layout:false .left-column[ ## Recap ### Terms ### Extraneous Variables ] .right-column[ ### Dealing With Extraneous Variables, cont. **randomization** - the process of randomly assigning experimental units to experimental conditions *not already controlled by the specification of the supervised variables* - we hope to remove any pattern that the extraneous variables may have - Weight lifting example: 50 pound, 40 pound, 30 pound dumb bell, 100 lifts each, determining which is harder to lift by how much you strain ] --- layout:false .left-column[ ## Recap ### Terms ### Extraneous Variables ] .right-column[ ### Dealing With Extraneous Variables, cont. **Replication** - the process of repeating a run of the experiment more than once - the results I get on the first run should be similar to the results I get on the second run - replication is strongly connected to the concept of reproducibility - the results I get should be similar to the results you get ### Summary The main point is this: an effective experiment is **designed** to account for the environmental conditions that could influence our response. Doing this takes a lot of planning. ] --- name: inverse layout: true class: center, middle, inverse --- # Section 2.4 ## Some Common Experimental Plans --- layout:false .left-column[ ## Recap ## Experimental Plans ### Completely Randomized ] .right-column[ With **replication**, **randomization**, **blocking** we have introduced some common elements used in planning an experiment. Common combinations of these elements make up "skeleton" experiments around which we can build our real-life experiments. **Completely Randomized Experiments** - All experimental variables are of primary interest (no controls, no blocking) - Randomization used at every possible point where we choose how to treat the experimental units **Examples** - Example 12 (page 51): Golf ball drive distances study by G.Gronberg - 10 balls each at 3 different compressions (80, 90, and 100) - How would you design an experiment to determine which type can be driven the furthest? - Example 13 (page 51-52): Pelletizing experiment ] --- layout:false .left-column[ ## Recap ## Experimental Plans ### Completely Randomized ### RCB ] .right-column[ **Randomized Complete Block Experiments** - At least on factor is a blocking variable - "Blocks" are created by combinations of the levels of the blocking variables - Within each block, every combination of the primary experimental variables are used at least once - Randomization is used where possible **Examples** - Example 12 (page 51): Golf ball drive distances study by G.Gronberg - Gronberg didn't drive the golf balls all at the same time - instead, he personally drove 10 golf balls from each compression each night, 6 nights a week, for 3 weeks. ] --- layout:false .left-column[ ## Recap ## Experimental Plans ### Completely Randomized ### RCB ### RIB ] .right-column[ **Randomized Incomplete Block Experiments** - At least on factor is a blocking variable - "Blocks" are created by combinations of the levels of the blocking variables - Within each block, some combinations (but not all) of the primary experimental variables are used at least once while others are not used at all - Randomization is used where possible **How does this work??** - There are some clever ways to assign the combinations of the primary experimental variable levels to the blocks that allow us to get "more" out of the data we collect. - How these block assignments come about gets explained in Chapter 8. ] --- name: inverse layout: true class: center, middle, inverse --- # Section 2.5 ## Preparing to Collect Engineering Data ### Read Independently --- name: inverse layout: true class: center, middle, inverse --- # Chapter 3 ## Elementary Descriptive Statistics --- # Section 3.1 ## Elementary Graphical and Tabular Treatment ## of ## Quantitative Data --- layout:false .left-column[ ## Univar. Summary ### Purpose ] .right-column[ ## Summarizing Univariate Data **Exam Scores for Two Groups of Students Following Different Courses** ``` Group 1 Group 2 74 79 77 81 65 77 78 74 68 79 81 76 76 73 71 71 81 80 80 78 86 81 76 89 88 83 79 91 79 78 77 76 79 75 74 73 72 76 75 79 ``` Consider the data above, taken from two groups of creative writing students who were randomly assigned to one of two different 3-hour courses. At the end of the courses, the students were given a standard creative writing test and their score on the test was recorded. ] --- layout:false .left-column[ ## Univar. Summary ### Purpose ] .right-column[ **Exam Scores for Two Groups of Students Following Different Courses** ``` Group 1 Group 2 74 79 77 81 65 77 78 74 68 79 81 76 76 73 71 71 81 80 80 78 86 81 76 89 88 83 79 91 79 78 77 76 79 75 74 73 72 76 75 79 ``` **The Use of Summaries** Some questions are almost universal in analyzing the results of an experiment. For instance, in this specific case, we may ask: - Which group did better on average? - Where there any unusually low or high scores in either group? - Which group had the most scores over 80? - Ignoring high performers and low performers, which group is better? - Which group has the most consistent scores? - ... ] --- layout:false .left-column[ ## Univar. Summary ### Purpose ] .right-column[ **Exam Scores for Two Groups of Students Following Different Courses** ``` Group 1 Group 2 74 79 77 81 65 77 78 74 68 79 81 76 76 73 71 71 81 80 80 78 86 81 76 89 88 83 79 91 79 78 77 76 79 75 74 73 72 76 75 79 ``` Certain questions can and should be asked across many types of experiments. But seeing data in this kind of *flat* format presents lots of problems for a person trying to understand the relationship between the two groups. A set of tools, mainly mathematical and graphical, help researchers answer these questions by summarizing the data in a way that makes the answers to these questions obvious. Good summaries should be quickly interpreted, provide clear insight into the data, and be widely applicable. ] --- layout:false .left-column[ ## Univar. Summary ### Purpose ### Simple Graphs ] .right-column[ **Exam Scores for Two Groups of Students Following Different Courses** ``` Group 1 Group 2 74 79 77 81 65 77 78 74 68 79 81 76 76 73 71 71 81 80 80 78 86 81 76 89 88 83 79 91 79 78 77 76 79 75 74 73 72 76 75 79 ``` ## Simple Graphical Summaries Simple graphical summaries aim to provide a better view of the entire set of data. The best graphs are able to make important points instantly and give valuable insights with closer study. Producing good graphs is an [art](http://www.edwardtufte.com/tufte/graphics/poster_OrigMinard.gif). **Two common graphical summaries** - Stem and Leaf Diagrams - Dot Diagrams ] --- layout:false .left-column[ ## Univar. Summary ### Purpose ### Simple Graphs ### Freq Tables ] .right-column[ ##Summarizing Univariate Date ``` Group 1 Group 2 74 79 77 81 65 77 78 74 68 79 81 76 76 73 71 71 81 80 80 78 86 81 76 89 88 83 79 91 79 78 77 76 79 75 74 73 72 76 75 79 ``` ## Frequency Tables - **Class**: A grouping of the observations - **Frequency**: The number of observations in a class - **Relative Frequency**: The proportion of the observations in the class - **Cumulative Relative Frequency**: The proportion of observations in the current class or a previous class. ] --- layout:false .left-column[ ## Univar. Summary ### Purpose ### Simple Graphs ### Freq Tables ### Histograms ] .right-column[ ## Summarizing Univariate Date ``` Group 1 Group 2 74 79 77 81 65 77 78 74 68 79 81 76 76 73 71 71 81 80 80 78 86 81 76 89 88 83 79 91 79 78 77 76 79 75 74 73 72 76 75 79 ``` ** Histograms ** A graphical representation of a frequency table. **Tips for useful frequency tables** 1. Use equal class intervals 2. Use uniform scales on both axes (i.e., keep lengths consistent) 3. Show the entire vertical axis (especially for relative frequency histograms) ] ---


IPMA of Caesalpinia sappan Linn. inhibiting PRRSV replication in MARC-145 cells at 24 ( A–D), 48 ( E and F), and 72 h post-infection (hpi) ( I–L). a, b, and c: P-value of < 0.05 compared with different concentrations of C. sappan. Scale bar in the figure: 200 μm


Captain Alex:
I appreciate the thought, but we've lost so many militiamen that it would take 500 monster sacrifices to put their souls to rest.


WITNESS LIST Business & Industry Committee May 20, 2003-2:00P SB 478 For: Korioth, Tony (TML Intergovernmental Risk Pool) SB 820 For: Levy, Rick (Tx AFL-CIO) Against: Howell, Kenneth W. (Self) On: Shipe, Robert (Texas Workers' Compensation Commission)


Search
Preparing search index...
The search index is not available
node-mediator
Options
All
Public
Public/Protected
All
Inherited
Externals
Only exported
Menu
Globals
"implementations/ConcreteMediator"
ConcreteMediator
Class ConcreteMediator
Hierarchy
ConcreteMediator
Implements
Mediator
Index
Constructors
constructor
Properties
colleagues
emitter
relations
Methods
check
Colleague
Exists
emit
emit
Async
emit
Event
Exists
event
Exists
on
on
Event
Exists
register
Constructors
constructor
new
Concrete
Mediator
(
relations
:
RelationsMap
, emitter
:
Emitter
)
:
ConcreteMediator
Parameters
relations:
RelationsMap
emitter:
Emitter
Returns
ConcreteMediator
Properties
Private
colleagues
colleagues
:
ColleagueMap
Private
emitter
emitter
:
Emitter
Private
relations
relations
:
RelationsMap
Methods
check
Colleague
Exists
check
Colleague
Exists
(
colleague
:
Colleague
)
:
boolean
Parameters
colleague:
Colleague
Returns
boolean
emit
emit
(
colleague
:
Colleague
, event
:
string
,
...
args
:
any
[]
)
:
boolean
Parameters
colleague:
Colleague
event:
string
Rest
...
args:
any
[]
Returns
boolean
emit
Async
emit
Async
(
colleague
:
Colleague
, event
:
string
,
...
args
:
any
[]
)
:
Promise
<
any
>
Parameters
colleague:
Colleague
event:
string
Rest
...
args:
any
[]
Returns
Promise
<
any
>
emit
Event
Exists
emit
Event
Exists
(
colleague
:
Colleague
, event
:
string
)
:
boolean
Parameters
colleague:
Colleague
event:
string
Returns
boolean
Private
event
Exists
event
Exists
(
colleague
:
Colleague
, event
:
string
, prop
:
string
)
:
boolean
Parameters
colleague:
Colleague
event:
string
prop:
string
Returns
boolean
on
on
(
colleague
:
Colleague
, event
:
string
, cb
:
Listener
)
:
void
Parameters
colleague:
Colleague
event:
string
cb:
Listener
Returns
void
on
Event
Exists
on
Event
Exists
(
colleague
:
Colleague
, event
:
string
)
:
boolean
Parameters
colleague:
Colleague
event:
string
Returns
boolean
register
register
(
colleague
:
Colleague
)
:
void
Parameters
colleague:
Colleague
Returns
void
Globals
"abstracts/
Colleague"
"defaults/
Relations"
"implementations/
Concrete
Emitter"
"implementations/
Concrete
Mediator"
"interfaces/
Emitter"
"interfaces/
Mediator"
"types/
Colleague"
"types/
Listener"
"types/
Relations"
"types/
Relations
Event
Map"
"utils/random
String"
Concrete
Mediator
constructor
colleagues
emitter
relations
check
Colleague
Exists
emit
emit
Async
emit
Event
Exists
event
Exists
on
on
Event
Exists
register
Generated using
TypeDoc


By CSS-Tricks
The following page will display as normal in any browser other than Internet Explorer 6. In IE 6 however, the screen gets a transparent black overlay and a popup explaining that this page doesn't support IE 6 and to please upgrade browser or subscribe via RSS.


using {{webViewEngine}}
interval duration for loading / unloading map is {{intervalTime}}ms
has received memory warning {{timesReceivedMemoryWarning}} times
map was loaded {{timesLoaded}} times


--- layout: post title: 'Coding for Domain-Driven Design: Tips for Data-Focused Devs' date: 2014-02-02 21:35:08.000000000 -07:00 type: post published: true status: publish categories: - ".NET" - Featured tags: [] meta: _edit_last: '3110' U_S_C_message: '' _dependencies: s:6:"a:0:{}"; _custom_background: a:5:{s:3:"url";s:0:"";s:16:"background-color";s:0:"";s:17:"background-repeat";s:6:"repeat";s:21:"background-attachment";s:6:"scroll";s:19:"background-position";s:8:"left top";} _intro_text: default _intro_custom_banner: a:1:{s:3:"url";s:0:"";} custom_permalink: lerman_2013 _post_restored_from: a:3:{s:20:"restored_revision_id";i:1321;s:16:"restored_by_user";i:3110;s:13:"restored_time";i:1391396165;} author: login: Vlad email<EMAIL_ADDRESS>display_name: Vlad first_name: Vladimir last_name: Gitlevich ---
Domain Driven Design can help handle complex behaviors when building software. But for data-driven devs, the change in perspective isn’t always easy. In this 3-part series published in MSDN Magazine, Julie Lerman shares some pointers that helped her get comfortable with DDD.


NewVectorPage()
Syntax
NewVectorPage()Description
Finishes the current page on the vector drawing output and starts a fresh page.
The following outputs support multiple pages:
PrinterVectorOutput()
PdfVectorOutput()
SvgVectorOutput()
Parameters
None.
Return value
None.
See Also
NewPrinterPage()
Supported OS
All


Nick Luther
- Name: Nick Luther
- Age: 28
- Gender: Male
- Status: Single
- Location: New York, New York
- Occupation: Fashion Designer
- Company: G-boy Style
- Technology: Phone;Note 8, Microsoft. Laptop Asus; intel core i5
- Attitude:Likes to read articles on the newest fashion trends, wants to
launch his own portfolio of his work online.
Ambitious and in touch with new technology/fashion trends.
Goals/Needs
- Wants to load photos on H&M website to get ideas for his fashion portfolio
- Wants to track visitor traffic on specific clothing items
- Wants to search for clothing and fashion trends without complication from website
Frustrations
- Files and photos take too long to upload
- Website freezes continually
- The search engine on H&M is too word sensitive
User Story
As a user, Nick is an up and coming fashion designer who's is contracted by a major clothing company.
He likes to visit other clothing lines' websites to keep current in the industry.
Use Case:
Title: Nick's user page on H&M website
Description: Nick wants to gain insight by viewing changing clothing trends via H&M
Name of user and their role: Nick; fashion guru who wants to showcase his designs on the internet
Interaction Flow:
- Nick goes to H&M.com landing page and logs into his H&M account
- Server recognizes his account and sends him to his homepage
- Nick clicks the Category button to search specific items
- The category button sends request to server
- Server searches for the data
- The data is sent to the user
- The user presses 'favorites' button. The button then stores the data in archive for the user
- The user clicks to view photos, the server then sizes and loads the photo to fit the screen
- The user presses the 'share' button
- The share button sends to server, the server then sends shared items to various social media sites.


{% if page.slug or blog_post %}
{% block #title %}
PyCon 2014 APAC
{% endif %} N
{% block main %}{% endblock %}
{% include "_sponsors.html" %}
{% blocktrans %}
Built with Django and Mezzanine by PyCon Taiwan
Hosting provided by StreetVoice.
Bugs or wheels? Feedback and support here.
More on contact<EMAIL_ADDRESS>{% endblocktrans %}