Sharing is who I am, and teaching is where I am at my best, because I've been on both sides of that equation, and getting to deliver useful training is my meaningful way to be a part of the creative community. I've spent a long time watching others learn, and teach, to refine how I work with you to be efficient, useful and, most importantly, memorable. I want you to carry what I've shown you into a bright future. I have a wife (a lovely Irish girl) and kids. I have lived and worked in many places (as Kiwis tend to do) – but most of my 14+ years of creating and teaching has had one overriding theme: bringing others along for the ride as we all try to change the world with our stories, our labours of love and our art. ... I'm a certified Adobe instructor (ACI) in Ireland. I'm also an Adobe Certified Expert (ACE) and have completed the Adobe Certified Associate training (ACA). And I don't just do Adobe. Remember, media is a very broad term – digital blew out the borders, so we are all constantly learning. I've been teaching for 14+ years. I come from being a media designer and content creator – so I understand exactly where you're at now. I've been there. I love this stuff. Print, digital publishing, web and video. I can see how it all connects. And I can see how we can share those connections. I built Bring Your Own Laptop in Ireland, New Zealand, Australia & online. I have a great team working with me to keep BYOL at the top of Adobe and digital media training. I understand business, I have one – so I know how important it is to get it right and make it work for you. Now my focus is on Udemy. It's my mission to bring you the best training for digital media on Udemy.


SUBROUTINE CGGESX( JOBVSL, JOBVSR, SORT, SELCTG, SENSE, N, A, LDA, $ B, LDB, SDIM, ALPHA, BETA, VSL, LDVSL, VSR, $ LDVSR, RCONDE, RCONDV, WORK, LWORK, RWORK, $ IWORK, LIWORK, BWORK, INFO ) * * -- LAPACK driver routine (version 3.1) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOBVSL, JOBVSR, SENSE, SORT INTEGER INFO, LDA, LDB, LDVSL, LDVSR, LIWORK, LWORK, N, $ SDIM * .. * .. Array Arguments .. LOGICAL BWORK( * ) INTEGER IWORK( * ) REAL RCONDE( 2 ), RCONDV( 2 ), RWORK( * ) COMPLEX A( LDA, * ), ALPHA( * ), B( LDB, * ), $ BETA( * ), VSL( LDVSL, * ), VSR( LDVSR, * ), $ WORK( * ) * .. * .. Function Arguments .. LOGICAL SELCTG EXTERNAL SELCTG * .. * * Purpose * ======= * * CGGESX computes for a pair of N-by-N complex nonsymmetric matrices * (A,B), the generalized eigenvalues, the complex Schur form (S,T), * and, optionally, the left and/or right matrices of Schur vectors (VSL * and VSR). This gives the generalized Schur factorization * * (A,B) = ( (VSL) S (VSR)**H, (VSL) T (VSR)**H ) * * where (VSR)**H is the conjugate-transpose of VSR. * * Optionally, it also orders the eigenvalues so that a selected cluster * of eigenvalues appears in the leading diagonal blocks of the upper * triangular matrix S and the upper triangular matrix T; computes * a reciprocal condition number for the average of the selected * eigenvalues (RCONDE); and computes a reciprocal condition number for * the right and left deflating subspaces corresponding to the selected * eigenvalues (RCONDV). The leading columns of VSL and VSR then form * an orthonormal basis for the corresponding left and right eigenspaces * (deflating subspaces). * * A generalized eigenvalue for a pair of matrices (A,B) is a scalar w * or a ratio alpha/beta = w, such that A - w*B is singular. It is * usually represented as the pair (alpha,beta), as there is a * reasonable interpretation for beta=0 or for both being zero. * * A pair of matrices (S,T) is in generalized complex Schur form if T is * upper triangular with non-negative diagonal and S is upper * triangular. * * Arguments * ========= * * JOBVSL (input) CHARACTER*1 * = 'N': do not compute the left Schur vectors; * = 'V': compute the left Schur vectors. * * JOBVSR (input) CHARACTER*1 * = 'N': do not compute the right Schur vectors; * = 'V': compute the right Schur vectors. * * SORT (input) CHARACTER*1 * Specifies whether or not to order the eigenvalues on the * diagonal of the generalized Schur form. * = 'N': Eigenvalues are not ordered; * = 'S': Eigenvalues are ordered (see SELCTG). * * SELCTG (external procedure) LOGICAL FUNCTION of two COMPLEX arguments * SELCTG must be declared EXTERNAL in the calling subroutine. * If SORT = 'N', SELCTG is not referenced. * If SORT = 'S', SELCTG is used to select eigenvalues to sort * to the top left of the Schur form. * Note that a selected complex eigenvalue may no longer satisfy * SELCTG(ALPHA(j),BETA(j)) = .TRUE. after ordering, since * ordering may change the value of complex eigenvalues * (especially if the eigenvalue is ill-conditioned), in this * case INFO is set to N+3 see INFO below). * * SENSE (input) CHARACTER*1 * Determines which reciprocal condition numbers are computed. * = 'N' : None are computed; * = 'E' : Computed for average of selected eigenvalues only; * = 'V' : Computed for selected deflating subspaces only; * = 'B' : Computed for both. * If SENSE = 'E', 'V', or 'B', SORT must equal 'S'. * * N (input) INTEGER * The order of the matrices A, B, VSL, and VSR. N >= 0. * * A (input/output) COMPLEX array, dimension (LDA, N) * On entry, the first of the pair of matrices. * On exit, A has been overwritten by its generalized Schur * form S. * * LDA (input) INTEGER * The leading dimension of A. LDA >= max(1,N). * * B (input/output) COMPLEX array, dimension (LDB, N) * On entry, the second of the pair of matrices. * On exit, B has been overwritten by its generalized Schur * form T. * * LDB (input) INTEGER * The leading dimension of B. LDB >= max(1,N). * * SDIM (output) INTEGER * If SORT = 'N', SDIM = 0. * If SORT = 'S', SDIM = number of eigenvalues (after sorting) * for which SELCTG is true. * * ALPHA (output) COMPLEX array, dimension (N) * BETA (output) COMPLEX array, dimension (N) * On exit, ALPHA(j)/BETA(j), j=1,...,N, will be the * generalized eigenvalues. ALPHA(j) and BETA(j),j=1,...,N are * the diagonals of the complex Schur form (S,T). BETA(j) will * be non-negative real. * * Note: the quotients ALPHA(j)/BETA(j) may easily over- or * underflow, and BETA(j) may even be zero. Thus, the user * should avoid naively computing the ratio alpha/beta. * However, ALPHA will be always less than and usually * comparable with norm(A) in magnitude, and BETA always less * than and usually comparable with norm(B). * * VSL (output) COMPLEX array, dimension (LDVSL,N) * If JOBVSL = 'V', VSL will contain the left Schur vectors. * Not referenced if JOBVSL = 'N'. * * LDVSL (input) INTEGER * The leading dimension of the matrix VSL. LDVSL >=1, and * if JOBVSL = 'V', LDVSL >= N. * * VSR (output) COMPLEX array, dimension (LDVSR,N) * If JOBVSR = 'V', VSR will contain the right Schur vectors. * Not referenced if JOBVSR = 'N'. * * LDVSR (input) INTEGER * The leading dimension of the matrix VSR. LDVSR >= 1, and * if JOBVSR = 'V', LDVSR >= N. * * RCONDE (output) REAL array, dimension ( 2 ) * If SENSE = 'E' or 'B', RCONDE(1) and RCONDE(2) contain the * reciprocal condition numbers for the average of the selected * eigenvalues. * Not referenced if SENSE = 'N' or 'V'. * * RCONDV (output) REAL array, dimension ( 2 ) * If SENSE = 'V' or 'B', RCONDV(1) and RCONDV(2) contain the * reciprocal condition number for the selected deflating * subspaces. * Not referenced if SENSE = 'N' or 'E'. * * WORK (workspace/output) COMPLEX array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. * If N = 0, LWORK >= 1, else if SENSE = 'E', 'V', or 'B', * LWORK >= MAX(1,2*N,2*SDIM*(N-SDIM)), else * LWORK >= MAX(1,2*N). Note that 2*SDIM*(N-SDIM) <= N*N/2. * Note also that an error is only returned if * LWORK < MAX(1,2*N), but if SENSE = 'E' or 'V' or 'B' this may * not be large enough. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the bound on the optimal size of the WORK * array and the minimum size of the IWORK array, returns these * values as the first entries of the WORK and IWORK arrays, and * no error message related to LWORK or LIWORK is issued by * XERBLA. * * RWORK (workspace) REAL array, dimension ( 8*N ) * Real workspace. * * IWORK (workspace/output) INTEGER array, dimension (MAX(1,LIWORK)) * On exit, if INFO = 0, IWORK(1) returns the minimum LIWORK. * * LIWORK (input) INTEGER * The dimension of the array WORK. * If SENSE = 'N' or N = 0, LIWORK >= 1, otherwise * LIWORK >= N+2. * * If LIWORK = -1, then a workspace query is assumed; the * routine only calculates the bound on the optimal size of the * WORK array and the minimum size of the IWORK array, returns * these values as the first entries of the WORK and IWORK * arrays, and no error message related to LWORK or LIWORK is * issued by XERBLA. * * BWORK (workspace) LOGICAL array, dimension (N) * Not referenced if SORT = 'N'. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value. * = 1,...,N: * The QZ iteration failed. (A,B) are not in Schur * form, but ALPHA(j) and BETA(j) should be correct for * j=INFO+1,...,N. * > N: =N+1: other than QZ iteration failed in CHGEQZ * =N+2: after reordering, roundoff changed values of * some complex eigenvalues so that leading * eigenvalues in the Generalized Schur form no * longer satisfy SELCTG=.TRUE. This could also * be caused due to scaling. * =N+3: reordering failed in CTGSEN. * * ===================================================================== * * .. Parameters .. REAL ZERO, ONE PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 ) COMPLEX CZERO, CONE PARAMETER ( CZERO = ( 0.0E+0, 0.0E+0 ), $ CONE = ( 1.0E+0, 0.0E+0 ) ) * .. * .. Local Scalars .. LOGICAL CURSL, ILASCL, ILBSCL, ILVSL, ILVSR, LASTSL, $ LQUERY, WANTSB, WANTSE, WANTSN, WANTST, WANTSV INTEGER I, ICOLS, IERR, IHI, IJOB, IJOBVL, IJOBVR, $ ILEFT, ILO, IRIGHT, IROWS, IRWRK, ITAU, IWRK, $ LIWMIN, LWRK, MAXWRK, MINWRK REAL ANRM, ANRMTO, BIGNUM, BNRM, BNRMTO, EPS, PL, $ PR, SMLNUM * .. * .. Local Arrays .. REAL DIF( 2 ) * .. * .. External Subroutines .. EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHRD, CHGEQZ, CLACPY, $ CLASCL, CLASET, CTGSEN, CUNGQR, CUNMQR, SLABAD, $ XERBLA * .. * .. External Functions .. LOGICAL LSAME INTEGER ILAENV REAL CLANGE, SLAMCH EXTERNAL LSAME, ILAENV, CLANGE, SLAMCH * .. * .. Intrinsic Functions .. INTRINSIC MAX, SQRT * .. * .. Executable Statements .. * * Decode the input arguments * IF( LSAME( JOBVSL, 'N' ) ) THEN IJOBVL = 1 ILVSL = .FALSE. ELSE IF( LSAME( JOBVSL, 'V' ) ) THEN IJOBVL = 2 ILVSL = .TRUE. ELSE IJOBVL = -1 ILVSL = .FALSE. END IF * IF( LSAME( JOBVSR, 'N' ) ) THEN IJOBVR = 1 ILVSR = .FALSE. ELSE IF( LSAME( JOBVSR, 'V' ) ) THEN IJOBVR = 2 ILVSR = .TRUE. ELSE IJOBVR = -1 ILVSR = .FALSE. END IF * WANTST = LSAME( SORT, 'S' ) WANTSN = LSAME( SENSE, 'N' ) WANTSE = LSAME( SENSE, 'E' ) WANTSV = LSAME( SENSE, 'V' ) WANTSB = LSAME( SENSE, 'B' ) LQUERY = ( LWORK.EQ.-1 .OR. LIWORK.EQ.-1 ) IF( WANTSN ) THEN IJOB = 0 ELSE IF( WANTSE ) THEN IJOB = 1 ELSE IF( WANTSV ) THEN IJOB = 2 ELSE IF( WANTSB ) THEN IJOB = 4 END IF * * Test the input arguments * INFO = 0 IF( IJOBVL.LE.0 ) THEN INFO = -1 ELSE IF( IJOBVR.LE.0 ) THEN INFO = -2 ELSE IF( ( .NOT.WANTST ) .AND. ( .NOT.LSAME( SORT, 'N' ) ) ) THEN INFO = -3 ELSE IF( .NOT.( WANTSN .OR. WANTSE .OR. WANTSV .OR. WANTSB ) .OR. $ ( .NOT.WANTST .AND. .NOT.WANTSN ) ) THEN INFO = -5 ELSE IF( N.LT.0 ) THEN INFO = -6 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -8 ELSE IF( LDB.LT.MAX( 1, N ) ) THEN INFO = -10 ELSE IF( LDVSL.LT.1 .OR. ( ILVSL .AND. LDVSL.LT.N ) ) THEN INFO = -15 ELSE IF( LDVSR.LT.1 .OR. ( ILVSR .AND. LDVSR.LT.N ) ) THEN INFO = -17 END IF * * Compute workspace * (Note: Comments in the code beginning "Workspace:" describe the * minimal amount of workspace needed at that point in the code, * as well as the preferred amount for good performance. * NB refers to the optimal block size for the immediately * following subroutine, as returned by ILAENV.) * IF( INFO.EQ.0 ) THEN IF( N.GT.0) THEN MINWRK = 2*N MAXWRK = N*(1 + ILAENV( 1, 'CGEQRF', ' ', N, 1, N, 0 ) ) MAXWRK = MAX( MAXWRK, N*( 1 + $ ILAENV( 1, 'CUNMQR', ' ', N, 1, N, -1 ) ) ) IF( ILVSL ) THEN MAXWRK = MAX( MAXWRK, N*( 1 + $ ILAENV( 1, 'CUNGQR', ' ', N, 1, N, -1 ) ) ) END IF LWRK = MAXWRK IF( IJOB.GE.1 ) $ LWRK = MAX( LWRK, N*N/2 ) ELSE MINWRK = 1 MAXWRK = 1 LWRK = 1 END IF WORK( 1 ) = LWRK IF( WANTSN .OR. N.EQ.0 ) THEN LIWMIN = 1 ELSE LIWMIN = N + 2 END IF IWORK( 1 ) = LIWMIN * IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN INFO = -21 ELSE IF( LIWORK.LT.LIWMIN .AND. .NOT.LQUERY) THEN INFO = -24 END IF END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'CGGESX', -INFO ) RETURN ELSE IF (LQUERY) THEN RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) THEN SDIM = 0 RETURN END IF * * Get machine constants * EPS = SLAMCH( 'P' ) SMLNUM = SLAMCH( 'S' ) BIGNUM = ONE / SMLNUM CALL SLABAD( SMLNUM, BIGNUM ) SMLNUM = SQRT( SMLNUM ) / EPS BIGNUM = ONE / SMLNUM * * Scale A if max element outside range [SMLNUM,BIGNUM] * ANRM = CLANGE( 'M', N, N, A, LDA, RWORK ) ILASCL = .FALSE. IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN ANRMTO = SMLNUM ILASCL = .TRUE. ELSE IF( ANRM.GT.BIGNUM ) THEN ANRMTO = BIGNUM ILASCL = .TRUE. END IF IF( ILASCL ) $ CALL CLASCL( 'G', 0, 0, ANRM, ANRMTO, N, N, A, LDA, IERR ) * * Scale B if max element outside range [SMLNUM,BIGNUM] * BNRM = CLANGE( 'M', N, N, B, LDB, RWORK ) ILBSCL = .FALSE. IF( BNRM.GT.ZERO .AND. BNRM.LT.SMLNUM ) THEN BNRMTO = SMLNUM ILBSCL = .TRUE. ELSE IF( BNRM.GT.BIGNUM ) THEN BNRMTO = BIGNUM ILBSCL = .TRUE. END IF IF( ILBSCL ) $ CALL CLASCL( 'G', 0, 0, BNRM, BNRMTO, N, N, B, LDB, IERR ) * * Permute the matrix to make it more nearly triangular * (Real Workspace: need 6*N) * ILEFT = 1 IRIGHT = N + 1 IRWRK = IRIGHT + N CALL CGGBAL( 'P', N, A, LDA, B, LDB, ILO, IHI, RWORK( ILEFT ), $ RWORK( IRIGHT ), RWORK( IRWRK ), IERR ) * * Reduce B to triangular form (QR decomposition of B) * (Complex Workspace: need N, prefer N*NB) * IROWS = IHI + 1 - ILO ICOLS = N + 1 - ILO ITAU = 1 IWRK = ITAU + IROWS CALL CGEQRF( IROWS, ICOLS, B( ILO, ILO ), LDB, WORK( ITAU ), $ WORK( IWRK ), LWORK+1-IWRK, IERR ) * * Apply the unitary transformation to matrix A * (Complex Workspace: need N, prefer N*NB) * CALL CUNMQR( 'L', 'C', IROWS, ICOLS, IROWS, B( ILO, ILO ), LDB, $ WORK( ITAU ), A( ILO, ILO ), LDA, WORK( IWRK ), $ LWORK+1-IWRK, IERR ) * * Initialize VSL * (Complex Workspace: need N, prefer N*NB) * IF( ILVSL ) THEN CALL CLASET( 'Full', N, N, CZERO, CONE, VSL, LDVSL ) IF( IROWS.GT.1 ) THEN CALL CLACPY( 'L', IROWS-1, IROWS-1, B( ILO+1, ILO ), LDB, $ VSL( ILO+1, ILO ), LDVSL ) END IF CALL CUNGQR( IROWS, IROWS, IROWS, VSL( ILO, ILO ), LDVSL, $ WORK( ITAU ), WORK( IWRK ), LWORK+1-IWRK, IERR ) END IF * * Initialize VSR * IF( ILVSR ) $ CALL CLASET( 'Full', N, N, CZERO, CONE, VSR, LDVSR ) * * Reduce to generalized Hessenberg form * (Workspace: none needed) * CALL CGGHRD( JOBVSL, JOBVSR, N, ILO, IHI, A, LDA, B, LDB, VSL, $ LDVSL, VSR, LDVSR, IERR ) * SDIM = 0 * * Perform QZ algorithm, computing Schur vectors if desired * (Complex Workspace: need N) * (Real Workspace: need N) * IWRK = ITAU CALL CHGEQZ( 'S', JOBVSL, JOBVSR, N, ILO, IHI, A, LDA, B, LDB, $ ALPHA, BETA, VSL, LDVSL, VSR, LDVSR, WORK( IWRK ), $ LWORK+1-IWRK, RWORK( IRWRK ), IERR ) IF( IERR.NE.0 ) THEN IF( IERR.GT.0 .AND. IERR.LE.N ) THEN INFO = IERR ELSE IF( IERR.GT.N .AND. IERR.LE.2*N ) THEN INFO = IERR - N ELSE INFO = N + 1 END IF GO TO 40 END IF * * Sort eigenvalues ALPHA/BETA and compute the reciprocal of * condition number(s) * IF( WANTST ) THEN * * Undo scaling on eigenvalues before SELCTGing * IF( ILASCL ) $ CALL CLASCL( 'G', 0, 0, ANRMTO, ANRM, N, 1, ALPHA, N, IERR ) IF( ILBSCL ) $ CALL CLASCL( 'G', 0, 0, BNRMTO, BNRM, N, 1, BETA, N, IERR ) * * Select eigenvalues * DO 10 I = 1, N BWORK( I ) = SELCTG( ALPHA( I ), BETA( I ) ) 10 CONTINUE * * Reorder eigenvalues, transform Generalized Schur vectors, and * compute reciprocal condition numbers * (Complex Workspace: If IJOB >= 1, need MAX(1, 2*SDIM*(N-SDIM)) * otherwise, need 1 ) * CALL CTGSEN( IJOB, ILVSL, ILVSR, BWORK, N, A, LDA, B, LDB, $ ALPHA, BETA, VSL, LDVSL, VSR, LDVSR, SDIM, PL, PR, $ DIF, WORK( IWRK ), LWORK-IWRK+1, IWORK, LIWORK, $ IERR ) * IF( IJOB.GE.1 ) $ MAXWRK = MAX( MAXWRK, 2*SDIM*( N-SDIM ) ) IF( IERR.EQ.-21 ) THEN * * not enough complex workspace * INFO = -21 ELSE IF( IJOB.EQ.1 .OR. IJOB.EQ.4 ) THEN RCONDE( 1 ) = PL RCONDE( 2 ) = PR END IF IF( IJOB.EQ.2 .OR. IJOB.EQ.4 ) THEN RCONDV( 1 ) = DIF( 1 ) RCONDV( 2 ) = DIF( 2 ) END IF IF( IERR.EQ.1 ) $ INFO = N + 3 END IF * END IF * * Apply permutation to VSL and VSR * (Workspace: none needed) * IF( ILVSL ) $ CALL CGGBAK( 'P', 'L', N, ILO, IHI, RWORK( ILEFT ), $ RWORK( IRIGHT ), N, VSL, LDVSL, IERR ) * IF( ILVSR ) $ CALL CGGBAK( 'P', 'R', N, ILO, IHI, RWORK( ILEFT ), $ RWORK( IRIGHT ), N, VSR, LDVSR, IERR ) * * Undo scaling * IF( ILASCL ) THEN CALL CLASCL( 'U', 0, 0, ANRMTO, ANRM, N, N, A, LDA, IERR ) CALL CLASCL( 'G', 0, 0, ANRMTO, ANRM, N, 1, ALPHA, N, IERR ) END IF * IF( ILBSCL ) THEN CALL CLASCL( 'U', 0, 0, BNRMTO, BNRM, N, N, B, LDB, IERR ) CALL CLASCL( 'G', 0, 0, BNRMTO, BNRM, N, 1, BETA, N, IERR ) END IF * IF( WANTST ) THEN * * Check if reordering is correct * LASTSL = .TRUE. SDIM = 0 DO 30 I = 1, N CURSL = SELCTG( ALPHA( I ), BETA( I ) ) IF( CURSL ) $ SDIM = SDIM + 1 IF( CURSL .AND. .NOT.LASTSL ) $ INFO = N + 2 LASTSL = CURSL 30 CONTINUE * END IF * 40 CONTINUE * WORK( 1 ) = MAXWRK IWORK( 1 ) = LIWMIN * RETURN * * End of CGGESX * END


Error Occurred.
[Success] Diary Entries have been refreshed...
Successfully created. Diary Entries have been refreshed...


Going for a hike? Coming to see the amazing views? Enjoying the North Kaibab National Forest? Stop by and see us first! We're a one of a kind country store!
Our website is currently under maintenance, please reach out if you have any questions!


Hopes and dreams for the future is that I develop proficiency in a wide range of programming languages, which would unlock a new sense freedom and possibilities in my art practice. It's also dreamy to have a marketable skill, perhaps a more viable pathway to fund my art practice than hospo jobs or CNZ funding schemes. I wanna be my own sugar daddy :P
I have so far relied on lightning strikes and lightbulb moments as intense short periods of motivation, and often fail in the face of the daily grind. This ends up as many unrealised ideas and unfinished projects. One thing I would like to get better at is the ability to go through with the daily grind, things like coding for an hour or two everyday before starting my day has been a helpful habit.
I am finishing up a year-long research project at Elam while doing this part-time foundation course, meaning I do have a lot on my plate. But the idea is to have these two big commitments feed into each other and informing each other, as virtual medium is a big part of my art practice.


Here's what's new in Release 1.0.10 (23 August 2017):
Bug fixes
Using the
sampleData
API with a Spark 2.0 kernel previously threw a runtime exception. Now, calls to the API will run successfully with Spark 2.0 (
#434
).
Enhancements
PixieDust contains a
sampleData
API for loading CSV data from a URL. In the 1.0.10 update, the API now supports loading of JSON data via URL, making it easier to load test data sets from various web APIs (
#408
).


| Home | Trees | Indices | Help |
|
|---|
|
|
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
Inherited from |
|
|||
|
Inherited from |
|
|
|
|
|
|
|
|
|
|
|
|
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Tue Apr 21 17:56:24 2009 | http://epydoc.sourceforge.net |


Search Ws
Add Ws
History Ws
List Cs
Add Cs
Search Qs
Add Qs
History Qs
Statistic
Info
Input a new word or phrase
Word or Phrase
Category
Use existed category?
Vietnamese:
English:
Code
Search word or phrase
Filter your search
All
Phrase
Category
English
Vietnamese
History of words or phrases by date
Start date:
End date:
Input a new question
Question content:
Answer content (Optional):
Code
History of questions by date
Start date:
End date:
All
Answered
Not answered yet
Search questions
Filter your search
All
Question
Answer
Categories list
Input a new category
Category name:
Response(don't input):
Code
Statistic of phrases by date
Start date(0):
End date(1):
Author : PhanNguyen
Project : This is a personal project which is used for storing personal data over the internet
Contact<EMAIL_ADDRESS>Copyright 2011 by PhanNguyen


Wikipedia, the free encyclopedia
Merlo John Pusey(February 3, 1902, in Woodruff, Utah â€“ November 22, 1985, in Washington,
D.C.)[1][2] was an American biographer and editorial writer. He won the 1952 Pulitzer Prize for
Biography or Autobiography and the 1952 Bancroft Prize for his 1951 biography of U.S. Chief Justice Charles Evans Hughes.
Born and raised on a farm near Woodruff, Utah, Pusey was a Latter-day Saint. He attended the Latter-day Saints
University and graduated as a member of Phi Beta Kappa from the University of Utah after working on the
college newspaper. He later became
a reporter and assistant city editor at The Deseret News in Salt Lake City.[3]
PussyPusey worked for The Washington Post from 1928 to 1971, becoming associate editor in
1946, continuing to contribute occasional pieces until about two years before his death.
Contents


UK announces up to €22 million in support of Lebanon's army
by Cristina Abellan MatamorosThe UK has announced up to $25 million (€22 million) in aid to the Lebanese Armed Forces for the 2019-2022 period as part of their "ongoing support to the sole legitimate defender of Lebanon," the British embassy in Lebanon tweeted on Friday.
Officials told Reuters on Thursday that Donald Trump's administration was withholding $105 million (€94 million) in security aid for Lebanon — two days after the resignation of Lebanese Prime Minister Saad al-Hariri.
The officials did not tell Reuters why the aid was being blocked. The State Department did not provide a comment to Reuters either.
Washington has repeatedly expressed concern over the growing role of Hezbollah in the Lebanese government. The Shia group backed by Iran and listed as a terrorist organisation by the US.
A US official told Reuters that it was important to maintain security assistance in Lebanon as the continent is located in a turbulent region and houses thousands of Syrian refugees.
The official highlighted it was important to strengthen Lebanon's military.
"The security forces are entrusted with keeping Lebanon safe - including securing the borders, stopping terrorism and protecting peaceful protests," said the British embassy tweet.
After Hariri's resignation, which was propelled by nationwide anti-government protest, Lebanese President Michel Aoun called for the formation of a new government of technocrats.
"Ministers should be chosen according to their competencies and expertise, not political loyalties," Aoun said in a televised address to mark the completion of three years in office.
"Lebanon is at a critical juncture, especially in terms of its economy," he said.


#include <Channel.h>
|
| json | api_call (const std::string &url, const std::string &method="GET", const json &data=json(), const std::string &content_type="", const bool cache=true) |
| | helper function to communicate with the http api More...
|
| |
| std::string | _token |
| | token to authentificate with the discord api More...
|
| |
◆ Channel() [1/4]
| DiscordCPP::Channel::Channel |
( |
const json & |
data, |
|
|
const std::string & |
token |
|
) |
| |
- Parameters
-
| [in] | data | JSON data |
| [in] | token | discord token |
◆ Channel() [2/4]
| DiscordCPP::Channel::Channel |
( |
const std::string & |
id, |
|
|
const std::string & |
token |
|
) |
| |
- Parameters
-
| [in] | id | the channel's id |
| [in] | token | discord token |
◆ Channel() [3/4]
| DiscordCPP::Channel::Channel |
( |
const Channel & |
old | ) |
|
◆ Channel() [4/4]
| DiscordCPP::Channel::Channel |
( |
| ) |
|
|
inline |
◆ copy()
- Returns
- a copy of this channel object
◆ delete_channel()
| void DiscordCPP::Channel::delete_channel |
( |
| ) |
|
◆ from_json()
◆ operator std::string()
| DiscordCPP::Channel::operator std::string |
( |
| ) |
|
|
inline |
- Returns
- Channelname as std::string
◆ icon
| std::string DiscordCPP::Channel::icon |
◆ name
| std::string DiscordCPP::Channel::name |
◆ position
| int32_t DiscordCPP::Channel::position |
◆ type
| int DiscordCPP::Channel::type |
The documentation for this class was generated from the following files:


#include <types.h>
checksum
Definition at line 111 of file types.h.
destination address
Definition at line 113 of file types.h.
identification
Definition at line 107 of file types.h.
total length
Definition at line 106 of file types.h.
fragment offset field / flags
Definition at line 108 of file types.h.
protocol
Definition at line 110 of file types.h.
source address
Definition at line 112 of file types.h.
type of service
Definition at line 105 of file types.h.
time to live
Definition at line 109 of file types.h.
version / header length
Definition at line 104 of file types.h.


Welcome to the VegGuide REST API explorer. This tool should help you get a sense of the data available from the VegGuide REST API and how you can use that API to build great applications.


Dashboard
- Summary
Dashboard
Welcome [[${user.username}]]
This is the main dashboard page... quick summary will be added here later.


{% extends "research/base.html" %} {% load static %} {% block page_title %}Our Impact{% endblock page_title %} {% block main_content %}
Democracy Club is a not-for-profit Community Interest Company, powered by an incredible community of volunteers. Our first priority will always be opening up the vital data that powers our democracy for the benefit of all voters.
Read the overview of our 2023 election services
Read the overview of our 2022 election services
Read the overview of our 2021 election services
Read the overview of our 2019 general election services
See all our reports and research
Our polling station and candidate databases have handled over ten million postcode searches since 2015. Our own research suggests that our tools are effective at reaching less engaged groups, particularly younger voters.
In the 2022 local elections we asked users of our polling station finder whether the service made them more likely to vote. 83% told us that it did.
“Its super helpful! We couldn't find our polling station and went to 2 stations! Apparently there was a new one made in our area and we only found out from this website!!! And WE VOTED! Thnksss soo much!!"
After entering a postcode and receiving a result, users of our two websites WhereDoIVote.co.uk and WhoCanIVoteFor.co.uk are prompted to answer the question, ‘did you find what you were looking for?’
We also recieve thousands of pieces of written feedback from voters each year. Here are some examples:
I find politics a difficult topic to understand, and not only is this website a simple layout and design, you also outline what each of the elected people’s roles will entail.
Couldn’t be clearer! Very helpful for a first-time voter in this constituency (have just moved here).
I am disabled and registered visually impaired. This site was so so easy to use. All the information I need is right there.
Having walked to the place where I have previously voted - only to find it shut - I felt somewhat at a loss as to where to go. Until I accessed this site.
We have developed an excellent working relationship with English, Scottish and Welsh local government, from whom we source the data to power our polling station finder. Over 90% of GB councils now provide polling station data to us, and more than half use our tools in their election communication campaigns. Since 2018, our polling station and candidate data has been used by the Electoral Commission to power the look-up tool on its own website.
In 2019 we sent 218m notifications in partnership with Facebook, Instagram, Twitter and SnapChat to remind people to vote with personalised directions to their polling stations. Working in partnership is key to the success of our services. In and outside of elections we have provided democratic data and services to partners such as the Electoral Commission, Welsh Government, Gov.UK, Facebook, Twitter, SnapChat, Google, Fawcett Society, The Times, Reach, Sky News and many others. We believe that democratic data should be as frictionless as possible to access and good digital infrastructure, paired with bold partnerships, are the best way of making that possible.
{% load post_tags %} {% posts_for_tag "research" %}


Story has a lot of features, but most are optional and have smart defaults! This page is an introduction to Story, with links to further pages that go into more details. There’s also a listing of features that either don’t need a separate documentation page, or just don’t have full documentation yet.
- Gorgeous, responsive typography on all devices and in print
- Beautiful featured images and thumbnails (optional)
- Multiple layouts
- Flexibility via feature toggles
- Author profile pages
- Remark browser-based presentation support, including CSS themes and multiple aspect ratios
- Automatic table and image enhancements
- Advanced image styling features
- Mathematical equation typesetting
- Formatting ABC music notation as sheet music
- Built-in search
- MailChimp subscribe forms and RSS feeds
Story also has support for the following, which aren’t extensively documented:
- Code syntax highlighting
- Google Analytics
- Categories
- All types of blogs; Story isn’t opinionated about what you call them (you
can put your content under
/posts/
,/blog/
,/articles/
, or whatever) - A section for “talks,” which is different from slideshows; a talks page is a
place to put information about your presentations, including links to videos,
the location, slides, and so on.
/talks/
and/slides/
are the only two content types for which Story has special formatting and archetypes. - An archive listing page, which uses the
archives
layout analogously to the search feature - 404 error page
- Social-media meta tags to make your content look great when shared on social media sites
- Using
skip
to hide content from default lists, but generating HTML pages for it - Meta keywords
- Font Awesome icon fonts
- Custom header meta tags with any content you want
- Custom footer content with any HTML, JS, or CSS you want; useful for adding custom features from third-parties that provide script blocks to paste into your site
- Custom CSS classes in the
<body>
tag - Custom content and social link menus with any content you want (not limited to predefined)
Read next: Story’s feature flags.


Requires an interpreter with 8 Bit cells (most common). Original Java program not from me.
Generating table ... done (2.01 seconds).
text length = 20 bytes code length = 207 bytes ratio = 10.35


{% extends "goals/base.html" %} {% load goal_filters %} {% block title %}Organizations{% endblock %} {% block breadcrumbs %}


| Constants' Details |
VALID
const long VALID = 0x00000000;
|
|
INVALID
const long INVALID = 0x00000001 ;
- Description
- * The certificate is invalid.
|
|
UNTRUSTED
const long UNTRUSTED = 0x00000002 ;
- Description
- * The certificate itself is untrusted.
|
|
TIME_INVALID
const long TIME_INVALID = 0x00000004 ;
- Description
- * The current time is not in the range of time for
* which the certificate is valid.
|
|
NOT_TIME_NESTED
const long NOT_TIME_NESTED = 0x00000008;
- Description
- The time range of a certificate does not fall within
the time range of the issuing certificate.
|
|
REVOKED
const long REVOKED = 0x00000010 ;
- Description
- * It is a revoked certificate.
|
|
UNKNOWN_REVOKATION
const long UNKNOWN_REVOKATION = 0x00000020 ;
- Description
- * The certificate revocation status is unknown.
|
|
SIGNATURE_INVALID
const long SIGNATURE_INVALID = 0x00000040 ;
- Description
- * The certificate signature is invalid.
|
|
EXTENSION_INVALID
const long EXTENSION_INVALID = 0x00000080 ;
- Description
- * The certificate has invalid extensions.
|
|
EXTENSION_UNKNOWN
const long EXTENSION_UNKNOWN = 0x00000100 ;
- Description
- * The certificate has critical unknown extensions.
|
|
ISSUER_UNKNOWN
const long ISSUER_UNKNOWN = 0x00000200;
- Description
- * The certificate issuer is unknown.
|
|
ISSUER_UNTRUSTED
const long ISSUER_UNTRUSTED = 0x00000400 ;
- Description
- * The certificate issuer is untrusted.
|
|
ISSUER_INVALID
const long ISSUER_INVALID = 0x00001000 ;
- Description
- * The certificate issuer is invalid.
|
|
ROOT_UNKNOWN
const long ROOT_UNKNOWN = 0x00002000 ;
- Description
- * The root certificate is unknown.
|
|
ROOT_UNTRUSTED
const long ROOT_UNTRUSTED = 0x00004000 ;
- Description
- * The root certificate is untrusted.
|
|
ROOT_INVALID
const long ROOT_INVALID = 0x00010000 ;
- Description
- * The root certificate is invalid.
|
|
CHAIN_INCOMPLETE
const long CHAIN_INCOMPLETE = 0x00020000 ;
- Description
- * The certificate chain is incomplete.
|
|
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


WITNESS LIST Windham School District, Select Committee February 29, 2000-9:00A Windham School District On: Ellison, Burt (Texas Workforce Commission) Fabelo, Tony (Texas Criminal Justice Policy Council) Morrow, Mike (Windham School District) Scott, Wayne (Texas Department of Criminal Justice) Wisnoski, Joe (Texas Education Agency)


{{- template "layouts/sequences.tmpl.html" . -}} {{- define "sequences_content" -}}
{{.Entry.Slug}}
View all sequences ⭢


This file mostly contains typical markdown, but does use a doc
directive to set the web page title, icon, and add a

to the
beginning of the document, with the specified title.
The doc
directive is show below:
# @doc * title nenb example - using the doc directive * icon ../images/nenb-icon.png * bodyTitle true * show true
Directives are markdown headers - one #
character at the start of the line
followed by a whitespace character.
The next token on the line starts with @
which indicates this is a directive
and not a typical markdown header. The name of this directive is
doc
.
The doc
directive supports a number of attributes, show above as list items
beneath the directive line. Attributes used here:
title
This attribute sets the title for the document, in the
of the
document. The default value of the title is the base name of the file name,
without the extension.
icon
This attribute sets the icon for the document, in the
of the
document.
bodyTitle
This attribute adds a

to the beginning of the document, with the title
specified in the title
attribute.
show
This attribute will display the source for the directive in the document, which is only really useful for nenb documents describing the structure of nenb documents, like this one.


Login
products
news
articles
about us
contact
Login
×
Username
Password
Login
Remember me
Cancel
Forgot
password?
Online Shop
art one
art two
art 3
art 4
art5
Best Sellers


Tea time with: Rapid Object Detection using a Boosted Cascade of Simple Features
Available here. The Cascade Classifier is one of the most popular face detection algorithms and the default choice in OpenCV libraries as well. Some notes after reading:
- One of the most influential papers in computer vision research.
- Introduced an approach of face detection that is highly accurate and very fast at that time.
- Fast enough for face detection in real time video feeds.
- 15 times faster than any of the previous work at the time.
- Intuition: Accurate and complex models are computational expensive. The input are subjected to a series of increasing accurate and expensive models, and the most expensive model will be used on only the most promising input. So it asks a series of questions like: 1) Does model one thinks it is a face? If no, stop. If Yes, ask model two. 2) Does model two thinks it is a face? If no, stop. If yes, ask model three. And so on, until the last model also say yes.
- Feature-based than pixel-based. Haar-like features were created for the images using a fast algorithm enabled by the use of Integral Images. Note that working with pixels are generally very computational expensive.
- Haar-like features are basically high-level features over pixels. For example, the feature observation that the region of the eyes is darker than the region of the cheeks. This can be used as a feature input to the model.
Similar ideas can definitely be applied to areas even outside of machine learning, where you want to use the simple approaches first before going deep into the big guns (more complex model). Only use it on areas where the returns are promising. In reality, you will want to do the same occasionally too: Only apply the more expensive solutions if the simpler ones do not work.


Andy Ruiz Jr almost KOs trainer as he prepares for Anthony Joshua rematch
Ruiz Jr showed off his power during trainer as his coach staggered after the heavyweight thumped the pad
by Martin Domin, https://www.facebook.com/mirrorfightingAndy Ruiz Jr showed off his power as he almost knocked out his coach in training.
The heavyweight world champion is preparing for his rematch with Anthony Joshua as the Brit bids to win back his belts.
Ruiz shocked the world in June when he dropped Joshua four times before stopping him in the seventh round.
The rivals will clash in Saudi Arabia on December 7 in one of the most eagerly-awaited fights of the year.
And the Mexican-American posted a video of himself hitting pads with the caption, "I barely touched him."
In the footage, Ruiz throws a left hook which catches his trainer and sends him staggering backwards before the coach signals he is OK and is hugged by the champion.
Ruiz Jr fought Joshua in June at just six weeks' notice and was mocked for being chubby.
But having shocked the world, he has had three months to prepare for his sequel with Joshua.
And the champion plans to slim down to make best use of his speed in Saudi Arabia.
"Right now, I'm only three pounds less than when I fought Anthony Joshua," Ruiz Jr told iFLTV.
"A lot of people are saying 'he looks too skinny, he won't be strong enough for the fight', but those are people who don't really know about boxing.
"We've been looking really good inside the ring.
"I just want to be 6lbs, 8lbs lighter than I was on June 1.
"That's the goal, to be 8lbs lighter, and that's going to make me feel a lot better.
"It's going to make me a lot slicker, a lot faster, and that's going to tell on December 7.
"I weighed in at 268 for the first Anthony Joshua fight, and I'm planning to weigh in at 260 for the next fight.
"I don't want to lose too much weight because I want to be strong for December 7. We know what we're doing and what we're doing it for."


Plain of Tears [ap32], plain, in Mandoria, peasants: 147
Last updated Turn #128
Plain of Tears [ap32], plain, in Mandoria, peasants: 147
------------------------------------------------------------------------
0: Garrison [ag6b], garrison, uncontrolled, with four peasants guards
0: Plain of Tears [ap32].
30: The population grows by one peasant.
Routes leaving Plain of Tears:
North, plain, to Plain of Tears [ao32], 7 days
Garrison [gy7c], garrison, uncontrolled, with ten peasants
East, plain, to Plain of Tears [ap33], 7 days
Garrison [ag2g], garrison, uncontrolled, with four peasants
South, plain, to Plain of Tears [aq32], 7 days
Garrison [in9h], garrison, uncontrolled, with four peasants
West, plain, to Plain of Tears [ap31], 7 days
Seen here:
Garrison [ag6b], garrison, uncontrolled, with four peasants
Pack of wolves [hh1g], wolves, number: 4


{{dish.description}}
{{comments.rating}} Stars {{comments.comment}}
{{newComment.rating.value}} Stars {{newComment.comment}}
Task 1: Design the form to submit the comments
Task 2: You need to validate that the user name and comments are entered


Realtime, feature-rich apps are here
Building those apps is hard
A powerful platform for
building extraordinary apps
Firebase Is Your Backend
NoSQL JSON data store
Offline out-of-the-box
Auto-scaling
RESTful API
Realtime
Whenever data is updated in Firebase,
it sends the update down to every
listening client
Cross-platform
React is your V(iew)
Firebase is your M(odel) and C(ontroller)
A match made in code heaven
Typical coding pattern
class TodoApp extends React.Component {
componentWillMount: () => {
this.firebaseRef = new Firebase("https://app-a-month.firebaseio.com");
this.firebaseRef.on("child_added", (dataSnapshot) => {
this.items.push(dataSnapshot.val());
this.setState({ items: this.items });
}
},
componentWillUnmount: () => {
this.firebaseRef.off();
}
// ...
}
Simplified with ReactFire
class TodoApp extends React.Component {
mixins: [ReactFireMixin],
componentWillMount: function() {
var ref = new Firebase("https://app-a-month.firebaseio.com");
this.bindAsArray(ref, "items");
}
// ...
}
Firebase Is Your Backend
Focus On Your App
Join the 193,000+ other registered devs
who are building extraordinary apps
Stop messing with servers
Leave the hard stuff to us
Get Started Now!


What are long and wide (tidy vs. messy) forms and how to join different datasets.
Get source code for this RMarkdown script here.
Donate and become a patron: If you find value in what I do and have learned something from my site, please consider becoming a patron. It takes me many hours to research, learn, and put together tutorials. Your support really matters.
Use library()
to load packages at the top of each R script.
library(tidyverse); library(data.table)
Manually create wide data
wide <- tibble(student = c("Andy", "Mary"),
englishGrades = c(1, -2),
mathGrades = englishGrades * 10,
physicsGrades = mathGrades * 100)
wide
# A tibble: 2 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
Manually create equivalent long data
long <- tibble(student = rep(c("Andy", "Mary"), each = 3),
class = rep(c("englishGrades", "mathGrades", "physicsGrades"), times = 2),
grades = c(1, 10, 1000, -2, -20, -2000))
long
# A tibble: 6 x 3
student class grades
<chr> <chr> <dbl>
1 Andy englishGrades 1
2 Andy mathGrades 10
3 Andy physicsGrades 1000
4 Mary englishGrades -2
5 Mary mathGrades -20
6 Mary physicsGrades -2000
Compare wide vs long data (“messy” vs. “tidy” data)
wide # wide/messy
# A tibble: 2 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
long # long/tidy
# A tibble: 6 x 3
student class grades
<chr> <chr> <dbl>
1 Andy englishGrades 1
2 Andy mathGrades 10
3 Andy physicsGrades 1000
4 Mary englishGrades -2
5 Mary mathGrades -20
6 Mary physicsGrades -2000
melt()
(from data.table
)There is a base R melt()
function that is less powerful and slower than the melt()
that comes with data.table
. As long as you’ve loaded data.table
with library(data.table)
, you’ll be using the more powerful version of melt()
.
melt(wide, id.vars = c("student"))
student variable value
1 Andy englishGrades 1
2 Mary englishGrades -2
3 Andy mathGrades 10
4 Mary mathGrades -20
5 Andy physicsGrades 1000
6 Mary physicsGrades -2000
Rename variables
melt(wide, id.vars = c("student"), variable.name = "cLaSs", value.name = "gRaDeS")
student cLaSs gRaDeS
1 Andy englishGrades 1
2 Mary englishGrades -2
3 Andy mathGrades 10
4 Mary mathGrades -20
5 Andy physicsGrades 1000
6 Mary physicsGrades -2000
Compare with the long form we created
melt(wide, id.vars = c("student"), variable.name = "cLaSs", value.name = "gRaDeS") %>%
arrange(student, cLaSs) # sort by student then cLaSs (sort for easy visual comparison)
student cLaSs gRaDeS
1 Andy englishGrades 1
2 Andy mathGrades 10
3 Andy physicsGrades 1000
4 Mary englishGrades -2
5 Mary mathGrades -20
6 Mary physicsGrades -2000
long
# A tibble: 6 x 3
student class grades
<chr> <chr> <dbl>
1 Andy englishGrades 1
2 Andy mathGrades 10
3 Andy physicsGrades 1000
4 Mary englishGrades -2
5 Mary mathGrades -20
6 Mary physicsGrades -2000
gather()
(from tidyverse
and tidyr
)gather()
is less flexible than melt()
gather(wide, key = cLaSs, value = gRaDeS, -student) # remove the id column
# A tibble: 6 x 3
student cLaSs gRaDeS
<chr> <chr> <dbl>
1 Andy englishGrades 1
2 Mary englishGrades -2
3 Andy mathGrades 10
4 Mary mathGrades -20
5 Andy physicsGrades 1000
6 Mary physicsGrades -2000
dcast()
(from data.table
)There is a base R dcast()
function that is less powerful and slower than the dcast()
that comes with data.table
. As long as you’ve loaded data.table
with library(data.table)
, you’ll be using the more powerful version of dcast()
.
dcast(long, student ~ class, value.var = "grades")
student englishGrades mathGrades physicsGrades
1 Andy 1 10 1000
2 Mary -2 -20 -2000
wide # compare with dcast() output
# A tibble: 2 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
spread()
(from tidyverse
and tidyr
)spread()
is less flexible than dcast()
spread(long, key = class, value = grades)
# A tibble: 2 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
wide # compare with spread() output
# A tibble: 2 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
Another example
wide # original data
# A tibble: 2 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
moreRows <- tibble(student = c("John", "Jane"),
englishGrades = c(5, -5),
mathGrades = englishGrades * 10,
physicsGrades = mathGrades * NA)
moreRows
# A tibble: 2 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 John 5 50 NA
2 Jane -5 -50 NA
rbind(wide, moreRows)
# A tibble: 4 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
3 John 5 50 NA
4 Jane -5 -50 NA
bind_rows(wide, moreRows)
# A tibble: 4 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
3 John 5 50 NA
4 Jane -5 -50 NA
bind_rows
has same effect as rbind() above, but much more efficient/flexible and binds even if column numbers don’t match (see below).
moreRows2 <- tibble(student = c("John", "Jane"),
englishGrades = c(5, -5),
mathGrades = englishGrades * 10)
moreRows2
# A tibble: 2 x 3
student englishGrades mathGrades
<chr> <dbl> <dbl>
1 John 5 50
2 Jane -5 -50
wide
# A tibble: 2 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
moreRows2 # one less column
# A tibble: 2 x 3
student englishGrades mathGrades
<chr> <dbl> <dbl>
1 John 5 50
2 Jane -5 -50
rbind(wide, moreRows2) # error
Error in rbind(deparse.level, ...): numbers of columns of arguments do not match
bind_rows(wide, moreRows2) # no error but fills with NA
# A tibble: 4 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
3 John 5 50 NA
4 Jane -5 -50 NA
Same with rbind()
, you can use cbind()
to join data by columns. And bind_cols()
is much more efficient and flexible.
wide2 <- bind_rows(wide, moreRows2)
wide2
# A tibble: 4 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
3 John 5 50 NA
4 Jane -5 -50 NA
columnsToBind <- tibble(extraCol = c(999, NA, 999, NA))
columnsToBind
# A tibble: 4 x 1
extraCol
<dbl>
1 999
2 NA
3 999
4 NA
bind_cols(wide2, columnsToBind)
# A tibble: 4 x 5
student englishGrades mathGrades physicsGrades extraCol
<chr> <dbl> <dbl> <dbl> <dbl>
1 Andy 1 10 1000 999
2 Mary -2 -20 -2000 NA
3 John 5 50 NA 999
4 Jane -5 -50 NA NA
left_join()
(from tidyverse
)Type ?left_join()
in your console to see all other types of joins. I use left_join()
most frequently.
Look at the data below. What if we have some information about each student in a separate dataframe and we want to merge the datasets?
wide2
# A tibble: 4 x 4
student englishGrades mathGrades physicsGrades
<chr> <dbl> <dbl> <dbl>
1 Andy 1 10 1000
2 Mary -2 -20 -2000
3 John 5 50 NA
4 Jane -5 -50 NA
Let’s say we know the gender and chemistry grades of each student…
extraInfo <- tibble(student = c("Jane", "John", "Mary", "Andy"),
chemistryGrades = c(900, 901, 902, 903))
extraInfo
# A tibble: 4 x 2
student chemistryGrades
<chr> <dbl>
1 Jane 900
2 John 901
3 Mary 902
4 Andy 903
Can we merge the data wide2
and extraInfo
with bind_cols()
?
bind_cols(wide2, extraInfo)
# A tibble: 4 x 6
student...1 englishGrades mathGrades physicsGrades student...5 chemistryGrades
<chr> <dbl> <dbl> <dbl> <chr> <dbl>
1 Andy 1 10 1000 Jane 900
2 Mary -2 -20 -2000 John 901
3 John 5 50 NA Mary 902
4 Jane -5 -50 NA Andy 903
What’s wrong? How to fix it?
left_join(wide2, extraInfo)
# A tibble: 4 x 5
student englishGrades mathGrades physicsGrades chemistryGrades
<chr> <dbl> <dbl> <dbl> <dbl>
1 Andy 1 10 1000 903
2 Mary -2 -20 -2000 902
3 John 5 50 NA 901
4 Jane -5 -50 NA 900
Is the output what you expect? Is it correct? What does the ‘Joining, by = “student”’ mean?
What if we have missing/incomplete extra information?
extraInfo2 <- tibble(student = c("Jane", "John"), chemistryGrades = c(900, 901))
extraInfo2
# A tibble: 2 x 2
student chemistryGrades
<chr> <dbl>
1 Jane 900
2 John 901
left_join(wide2, extraInfo2)
# A tibble: 4 x 5
student englishGrades mathGrades physicsGrades chemistryGrades
<chr> <dbl> <dbl> <dbl> <dbl>
1 Andy 1 10 1000 NA
2 Mary -2 -20 -2000 NA
3 John 5 50 NA 901
4 Jane -5 -50 NA 900
Works! Rows with missing information have NA
.
Note that you can specify which columns/variables to join by via the by
parameter in all join functions. By default, R automatically finds matching column/variable names between both data objects and joins by ALL matching columns/variables.
Also, the output class of join functions are not data.table
! To convert class, use pipes!
class(left_join(wide2, extraInfo2)) # not data.table (no...)
[1] "tbl_df" "tbl" "data.frame"
left_join(wide2, extraInfo2) %>% as.data.table() # convert to data.table
student englishGrades mathGrades physicsGrades chemistryGrades
1: Andy 1 10 1000 NA
2: Mary -2 -20 -2000 NA
3: John 5 50 NA 901
4: Jane -5 -50 NA 900
left_join(wide2, extraInfo2) %>% as.data.table() %>% class() # check class (data.table! yea!)
[1] "data.table" "data.frame"
Create some data
gradesWide <- left_join(wide2, extraInfo2)
gradesWide
# A tibble: 4 x 5
student englishGrades mathGrades physicsGrades chemistryGrades
<chr> <dbl> <dbl> <dbl> <dbl>
1 Andy 1 10 1000 NA
2 Mary -2 -20 -2000 NA
3 John 5 50 NA 901
4 Jane -5 -50 NA 900
Wide form data is good for dependent/paired t.tests in R (within-subjects)
t.test(gradesWide$englishGrades, gradesWide$mathGrades, paired = T)
Paired t-test
data: gradesWide$englishGrades and gradesWide$mathGrades
t = 0.11704, df = 3, p-value = 0.9142
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-58.92937 63.42937
sample estimates:
mean of the differences
2.25
t.test(gradesWide$englishGrades, gradesWide$chemistryGrades, paired = T)
Paired t-test
data: gradesWide$englishGrades and gradesWide$chemistryGrades
t = -200.11, df = 1, p-value = 0.003181
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-957.6779 -843.3221
sample estimates:
mean of the differences
-900.5
But long-form data is generally preferred
gradesLong <- melt(gradesWide, id.vars = "student", variable.name = "class", value.name = "grade") %>%
arrange(student) %>% # sort by student
as.data.table() # convert to data.table and tibble
gradesLong
student class grade
1: Andy englishGrades 1
2: Andy mathGrades 10
3: Andy physicsGrades 1000
4: Andy chemistryGrades NA
5: Jane englishGrades -5
6: Jane mathGrades -50
7: Jane physicsGrades NA
8: Jane chemistryGrades 900
9: John englishGrades 5
10: John mathGrades 50
11: John physicsGrades NA
12: John chemistryGrades 901
13: Mary englishGrades -2
14: Mary mathGrades -20
15: Mary physicsGrades -2000
16: Mary chemistryGrades NA
What if we want to use englishGrades
as a covariate? Then the covariate has to be in a separate column/variable.
Subset data with just covariate and id variable
covariate_englishGrades <- gradesLong[class == "englishGrades", .(student, grade)]
covariate_englishGrades
student grade
1: Andy 1
2: Jane -5
3: John 5
4: Mary -2
Rename covariate
setnames(covariate_englishGrades, "grade", "englishGrades")
covariate_englishGrades
student englishGrades
1: Andy 1
2: Jane -5
3: John 5
4: Mary -2
Use left_join()
to add covariate to data
gradesLong_covariate <- left_join(gradesLong, covariate_englishGrades) %>% as.data.table()
gradesLong_covariate
student class grade englishGrades
1: Andy englishGrades 1 1
2: Andy mathGrades 10 1
3: Andy physicsGrades 1000 1
4: Andy chemistryGrades NA 1
5: Jane englishGrades -5 -5
6: Jane mathGrades -50 -5
7: Jane physicsGrades NA -5
8: Jane chemistryGrades 900 -5
9: John englishGrades 5 5
10: John mathGrades 50 5
11: John physicsGrades NA 5
12: John chemistryGrades 901 5
13: Mary englishGrades -2 -2
14: Mary mathGrades -20 -2
15: Mary physicsGrades -2000 -2
16: Mary chemistryGrades NA -2
# remove englishGrades from long form data if necessary
gradesLong_covariate2 <- gradesLong_covariate[class != "englishGrades"]
gradesLong_covariate2
student class grade englishGrades
1: Andy mathGrades 10 1
2: Andy physicsGrades 1000 1
3: Andy chemistryGrades NA 1
4: Jane mathGrades -50 -5
5: Jane physicsGrades NA -5
6: Jane chemistryGrades 900 -5
7: John mathGrades 50 5
8: John physicsGrades NA 5
9: John chemistryGrades 901 5
10: Mary mathGrades -20 -2
11: Mary physicsGrades -2000 -2
12: Mary chemistryGrades NA -2
Fit model with covariate using lm()
(linear model)
summary(lm(grade ~ class + englishGrades, data = gradesLong_covariate2))
Call:
lm(formula = grade ~ class + englishGrades, data = gradesLong_covariate2)
Residuals:
1 2 4 6 7 9 10 11
-45.31 1430.63 172.17 230.74 -190.30 -230.74 63.43 -1430.63
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.062 517.300 0.018 0.987
classphysicsGrades -485.938 895.308 -0.543 0.616
classchemistryGrades 891.438 895.308 0.996 0.376
englishGrades 46.247 98.870 0.468 0.664
Residual standard error: 1033 on 4 degrees of freedom
(4 observations deleted due to missingness)
Multiple R-squared: 0.3477, Adjusted R-squared: -0.1415
F-statistic: 0.7108 on 3 and 4 DF, p-value: 0.5943
Get ANOVA output from lm()
output
summary.aov(lm(grade ~ class + englishGrades, data = gradesLong_covariate2))
Df Sum Sq Mean Sq F value Pr(>F)
class 2 2043615 1021808 0.957 0.458
englishGrades 1<PHONE_NUMBER>64 0.219 0.664
Residuals 4 4271812 1067953
4 observations deleted due to missingness
anova(lm(grade ~ class + englishGrades, data = gradesLong_covariate2))
Analysis of Variance Table
Response: grade
Df Sum Sq Mean Sq F value Pr(>F)
class 2 2043615 1021808 0.9568 0.4575
englishGrades 1<PHONE_NUMBER>64 0.2188 0.6643
Residuals 4 4271812 1067953
Fit model with covariate using aov()
(ANOVA)
summary(aov(grade ~ class + englishGrades, data = gradesLong_covariate2))
Df Sum Sq Mean Sq F value Pr(>F)
class 2 2043615 1021808 0.957 0.458
englishGrades 1<PHONE_NUMBER>64 0.219 0.664
Residuals 4 4271812 1067953
4 observations deleted due to missingness
If you see mistakes or want to suggest changes, please create an issue on the source repository.
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. Source code is available at https://github.com/hauselin/rtutorialsite, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".


{{name}}: ${{price}}
{{#values}}
{{/values}}
Please select a product
Your personal offer: ${{price}}


| Class and Description |
|---|
| AggregateBinaryOperator |
| AggregateOperator |
| AggregateTernaryOperator |
| AggregateUnaryOperator |
| BinaryOperator |
| CMOperator |
| COVOperator |
| Operator |
| QuaternaryOperator |
| ReorgOperator |
| ScalarOperator
Base class for all scalar operators.
|
| TernaryOperator |
| UnaryOperator |
| Class and Description |
|---|
| AggregateUnaryOperator |
| BinaryOperator |
| ScalarOperator
Base class for all scalar operators.
|
| Class and Description |
|---|
| AggregateUnaryOperator |
| BinaryOperator |
| ScalarOperator
Base class for all scalar operators.
|
| Class and Description |
|---|
| AggregateUnaryOperator |
| Class and Description |
|---|
| AggregateOperator |
| AggregateUnaryOperator |
| BinaryOperator |
| Class and Description |
|---|
| BinaryOperator |
| CMOperator.AggregateOperationTypes |
| Class and Description |
|---|
| AggregateBinaryOperator |
| AggregateOperator |
| AggregateTernaryOperator |
| AggregateUnaryOperator |
| BinaryOperator |
| Operator |
| ScalarOperator
Base class for all scalar operators.
|
| TernaryOperator |
| UnaryOperator |
| Class and Description |
|---|
| CMOperator.AggregateOperationTypes |
| Operator |
| Class and Description |
|---|
| Operator |
| Class and Description |
|---|
| AggregateOperator |
| AggregateUnaryOperator |
| BinaryOperator |
| Operator |
| Class and Description |
|---|
| AggregateOperator |
| BinaryOperator |
| Operator |
| ScalarOperator
Base class for all scalar operators.
|
| Class and Description |
|---|
| AggregateOperator |
| ReorgOperator |
| Class and Description |
|---|
| AggregateBinaryOperator |
| AggregateOperator |
| AggregateTernaryOperator |
| AggregateUnaryOperator |
| BinaryOperator |
| CMOperator |
| CountDistinctOperator |
| COVOperator |
| Operator |
| QuaternaryOperator |
| ReorgOperator |
| ScalarOperator
Base class for all scalar operators.
|
| TernaryOperator |
| UnaryOperator |
| Class and Description |
|---|
| AggregateOperator |
| BinaryOperator |
| CMOperator |
| CMOperator.AggregateOperationTypes |
| CountDistinctOperator.CountDistinctTypes |
| Operator |
| ReorgOperator |
| ScalarOperator
Base class for all scalar operators.
|
| Class and Description |
|---|
| AggregateBinaryOperator |
| AggregateUnaryOperator |
| ReorgOperator |
Copyright © 2021 The Apache Software Foundation. All rights reserved.


Template
Home
Tours
Gallery
Animation
About
FAQ
Credits
Source Code
Your browser does not support the video tag.


Data scientists have one goal: to generate business value. They do this by developing products that influence decisions.
The data science workflow is how data scientists generate business value. It ends with deploying distributed web applications.
The data science toolchain is what a data scientist must learn to be effective in all phases of the data science workflow and ultimately generate value by taking models to production.
The goal is simple. You need to implement distributed web applications that solve business problems and generate ROI for your organization.
To accomplish this, you need to climb the hill, learning: Data Manipulation, Visualization, Advanced Machine Learning, and Distributed Web Applications. This is going to take years, right?
With our integrated 3-course system, you will climb to the top in weeks!
In the process, you will learn the most in-demand tools while completing real-world projects.
3-Course R-Track (shown): tidyverse
, H2O
, Shiny
, and more.
Expert Shiny Apps (Comming Soon): Advanced Shiny
Apps
This is how we accelerate your learning.
In 23 weeks or less you learn critical foundations tidyverse
, advanced machine learning with H2O
, and ML-powered web apps with Shiny
.
With a traditional university this would take 4-years.
With Business Science University it takes 5-months of about 5-10 hours per week of coursework.


|
|
|
Why Bother?Why do you need to learn the command line anyway? Well, let me tell you a story. A few years ago we had a problem where I used to work. There was a shared drive on one of our file servers that kept getting full. I won't mention that this legacy operating system did not support user quotas; that's another story. But the server kept getting full and it stopped people from working. One of our software engineers spent the better part of a day writing a C++ program that would look through all the user's directories and add up the space they were using and make a listing of the results. Since I was forced to use the legacy OS while I was on the job, I installed a Linux-like command line environment for it. When I heard about the problem, I realized I could do all the work this engineer had done with this single line: du -s * | sort -nr > $HOME/user_space_report.txt Graphical user interfaces (GUIs) are helpful for many tasks, but they are not good for all tasks. I have long felt that most computers today are not powered by electricity. They instead seem to be powered by the "pumping" motion of the mouse! Computers were supposed to free us from manual labor, but how many times have you performed some task you felt sure the computer should be able to do but you ended up doing the work yourself by tediously working the mouse? Pointing and clicking, pointing and clicking. I once heard an author say that when you are a child you use a computer by looking at the pictures. When you grow up, you learn to read and write. Welcome to Computer Literacy 101. Now let's get to work. Contents |
|
|
© 2000-2016, William E. Shotts, Jr. Verbatim copying and distribution of this entire article is permitted in any medium, provided this copyright notice is preserved. Linux® is a registered trademark of Linus Torvalds. |


SOFTWARE
Installed Versions
APK
Update APK
Update Firmware
ROBOT INFO
Currently Connected To
Wifi network name
Password


WELCOME TO COMPUTER CENTRE
The Computer Centre of the Faculty of Medicine offers Information Technology courses for undergraduate degree programs, external degree programs, and post graduate degree programs. Moreover it conducts workshops and continuous professional development programs for Academic and Non-academic staff of the Faculty of Medicine and the staff of extended faculties. Computer Centre also provides Information Communication Technology services for students and staff of the Faculty of Medicine.


Some caveats:
See the ISO-4 for general rules, e.g.:
Based on the 2017-09-14 version of the LTWA.
Report issues at GitHub


43 PWMOutput(
int pin = -1,
int pwm_channel = -1);
50 virtual void set_input(
float new_value, uint8_t pwm_channel = 0)
override;
69 static void set_pwm(
int pwm_channel,
float value);
Provides a cross platform mechanism for generating Pulse Width Modulation signals over one or more GP...
static int assign_channel(int pin, int pwm_channel=-1)
virtual void set_input(float new_value, uint8_t pwm_channel=0) override
static void set_pwm(int pwm_channel, float value)
static std::map< uint8_t, int8_t > channel_to_pin_
PWMOutput(int pin=-1, int pwm_channel=-1)
A base class for piece of code (like a transform) that accepts data for input. ValueConsumers can acc...


{% extends "header.html" %} {% block body %}
In this Pandas with Python tutorial video with sample code, we cover some of the quick and basic operations that we can perform on our data. Say you have a data set that you want to add a moving average to, or maybe you want to do some mathematics calculations based on a few bits of data in other columns, adding the result to a new column. Let's see how we can do that:
import pandas as pd from pandas import DataFrame df = pd.read_csv('sp500_ohlc.csv', index_col = 'Date', parse_dates=True)
All of the above should be understood, since it's been covered already up to this point.
Now, let's make a new column, calling it "H-L," where the data in the column is the result of the High price minus the Low price.
df['H-L'] = df.High - df.Low print(df.head())
Here, much like you would do with a dictionary, we define a new object in our Pandas data, naming it "H-L." From there, we say the value of this "H-L" object is (df.High - df.Low). It has not yet been brought up, but this is actually quite interesting that we are able to do this, but it also might be confusing.
We could also say df['H-L'] = df['High'] - df['Low'], but, since Pandas is so heavily object-based, we're able to also reference it purely like an object! It's up to you how you want to do it. I prefer to treat it like an object, since that's what it is.
After we've run this, we can see by printing out head(), that we've got a nice new column containing our new data!
That's neat, but what about referencing prior data in other columns? Can we do it? I want to do a moving average! Sure we can. Moving averages are actually built into Pandas, called rolling_mean.
df['100MA'] = pd.rolling_mean(df['Close'], 100) print(df[200:210])
Above, we've defined yet another column, much like we can a dictionary, and said that the column is equal to df.rolling_mean() of the close price. Our second parameter here is the time frame for this moving average. Then, we just print a slice of the data, from the 200th element to the 210th. We cannot really do df.head() here. We could, but the data for the 100MA wouldn't be calculated until we had 100 pieces of data to calculate.
Another interesting built-in function with Pandas is diff():
df['Difference'] = df['Close'].diff() print(df.head())
With the diff() function, we're able to calculate the difference, or change from the previous value, for a column.
So, there are some basic operations and a starting introduction to some data manipulation and analysis with Pandas. I think you're probably seeing by now how impressive this module is.


Beats By Hen
Menu
Beats
Pricing
Contact
Go to Beat Store
Production Catalog
-- none --
Pricing
Standard Lease
$30
Untagged MP3
Profitable up to 5,000 unit sales
Commercial mixtape, album, music video, performances video and radio use
50K montization streaming
Instant Delivery
No ownership lease
Button
Premium Lease
$50
Untagged MP3 and Wav
Profitable up to 10,000 unit sales
Commercial mixtapes, albums, performances, videos and radio use
100K montization streaming
Instant Delivery
No ownership lease
Button
Exclusive
$200
Untagged Trackout
Profitable up to unlimited unit sales
Unlimited montetization streams
Commercial mixtapes, albums, performances, videos and radio use
Full ownership
Button
Contact Us
If you have any questions feel free to complete the form below and send a message.
Send Message


Important: This documentation applies to the SVN trunk of YASnippet, which you get here. Documentation for other versions can be found here.
You can use YASnippet to expand snippets in different ways:
When yas/minor-mode is enabled, the keybinding taken from yas/trigger-key will take effect.
yas/trigger-key invokes yas/expand, which tries to expand a snippet abbrev (also known as snippet key) before point.
The default key is "TAB", however, you can freely set it to some other key.
To enable the YASnippet minor mode in all buffers globally use the command yas/global-mode.
When you use yas/global-mode you can also selectively disable YASnippet in some buffers by setting the buffer-local variable yas/dont-active in the buffer's mode hook.
Trouble when using or understanding the yas/trigger-key is easily the most controversial issue in YASsnippet. See the FAQ.
yas/fallback-behaviour is a customization variable bound to 'call-other-command by default. If yas/expand failed to find any suitable snippet to expand, it will disable the minor mode temporarily and find if there's any other command bound the yas/trigger-key.
If found, the command will be called. Usually this works very well -- when there's a snippet, expand it, otherwise, call whatever command originally bind to the trigger key.
However, you can change this behavior by customizing the yas/fallback-behavior variable. If you set this variable to 'return-nil, it will return nil instead of trying to call the original command when no snippet is found.
The command M-x yas/insert-snippet lets you insert snippets at point for you current major mode. It prompts you for the snippet key first, and then for a snippet template if more than one template exists for the same key.
The list presented contains the snippets that can be inserted at point, according to the condition system. If you want to see all applicable snippets for the major mode, prefix this command with C-u.
The prompting methods used are again controlled by yas/prompt-functions.
See the section of the # binding: directive in Writing Snippets.
To integrate with hippie-expand, just put yas/hippie-try-expand in hippie-expand-try-functions-list. This probably makes more sense when placed at the top of the list, but it can be put anywhere you prefer.
Sometimes you might want to expand a snippet directly from you own elisp code. You should call yas/expand-snippet instead of yas/expand in this case.
As with expanding from the menubar, the condition system and multiple candidates doesn't affect expansion. In fact, expanding from the YASnippet menu has the same effect of evaluating the follow code:
(yas/expand-snippet template)
See the internal documentation on yas/expand-snippet for more information.
YASnippet does quite a bit of filtering to find out which snippets are eligible for expanding at the current cursor position.
In particular, the following things matter:
Currently loaded snippets tables
These are loaded from a directory hierarchy in your file system. See Organizing Snippets. They are named after major modes like html-mode, ruby-mode, etc...
Major mode of the current buffer
If the currrent major mode matches one of the loaded snippet tables, then all that table's snippets are considered for expansion. Use M-x describe-variable RET major-mode RET to find out which major mode you are in currently.
Parent tables
Snippet tables defined as the parent of some other eligible table are also considered. This works recursively, i.e. parents of parents of eligible tables are also considered.
Buffer-local yas/mode-symbol variable
This can be used to consider snippet tables whose name does not correspond to a major mode. If you set this variable to a name , like rinari-minor-mode, you can have some snippets expand only in that minor mode. Naturally, you want to set this conditionally, i.e. only when entering that minor mode, so using a hook is a good idea.
;; When entering rinari-minor-mode, consider also the snippets in the
;; snippet table "rails-mode"
(add-hook 'rinari-minor-mode-hook
#'(lambda ()
(setq yas/mode-symbol 'rails-mode)))
Buffer-local yas/buffer-local-condition variable
This variable provides finer grained control over what snippets can be expanded in the current buffer. The default value won't let you expand snippets inside comments or string literals for example. See The condition system for more info.
 You like the abbrev-way and set yas/trigger-key to "SPC". However, you don't want if to be expanded as a snippet when you are typing in a comment block or a string (e.g. in python-mode).
If you use the # condition : directive (see Writing Snippets) you could just specify the condition for if to be (not (python-in-string/comment)). But how about while, for, etc. ? Writing the same condition for all the snippets is just boring. So has a buffer local variable yas/buffer-local-condition. You can set this variable to (not (python-in-string/comment)) in python-mode-hook.
 This is also possible! But let's stop telling the story and look at the rules:
In the mentioned scenario, set yas/buffer-local-condition like this
(add-hook 'python-mode-hook
'(lambda ()
(setq yas/buffer-local-condition
'(if (python-in-string/comment)
'(require-snippet-condition . force-in-comment)
t))))
... and specify the condition for a snippet that you're going to expand in comment to be evaluated to the symbol force-in-comment. Then it can be expanded as you expected, while other snippets like if still can't expanded in comment.
The rules outlined above can return more than one snippet to be expanded at point.
When there are multiple candidates, YASnippet will let you select one. The UI for selecting multiple candidate can be customized through yas/prompt-functions , which defines your preferred methods of being prompted for snippets.
You can customize it with M-x customize-variable RET yas/prompt-functions RET. Alternatively you can put in your emacs-file:
(setq yas/prompt-functions '(yas/x-prompt yas/dropdown-prompt))
Currently there are some alternatives solution with YASnippet.
The function yas/x-prompt can be used to show a popup menu for you to select. This menu will be part of you native window system widget, which means:
You can use functions yas/completing-prompt for the classic emacs completion method or yas/ido-prompt for a much nicer looking method. The best way is to try it. This works in a terminal.
See below for the documentation on variable yas/prompt-functions
You can write a function and add it to the yas/prompt-functions list. These functions are called with the following arguments:
The return value of any function you put here should be one of the objects in CHOICES, properly formatted with DISPLAY-FN (if that is passed).
How to act when yas/expand does not expand a snippet.
return-nil means return nil. (i.e. do nothing)
An entry (apply COMMAND . ARGS) means interactively call COMMAND, if ARGS is non-nil, call COMMAND non-interactively with ARGS as arguments.
If non-nil, prompt for snippet key first, then for template.
Otherwise prompts for all possible snippet names.
This affects yas/insert-snippet and yas/visit-snippet-file.
If non-nil, and multiple eligible snippet tables, prompts user for tables first.
Otherwise, user chooses between the merging together of all eligible tables.
This affects yas/insert-snippet, yas/visit-snippet-file
The default searching strategy is quite powerful. For example, in c-mode, bar, foo_bar, "#foo_bar" can all be recognized as a snippet key. Furthermore, the searching is in that order. In other words, if bar is found to be a key to some valid snippet, then that snippet is expanded and replaces the bar. Snippets pointed to by foo_bar and "#foobar won't be considered.
However, this strategy can also be customized easily from the yas/key-syntaxes variable. It is a list of syntax rules, the default value is ("w" "w_" "w_." "^ "). Which means search the following thing until found one:
But you'd better keep the default value unless you want to understand how Emacs's syntax rules work...


SimulationCraft has not been built with PTR data. The 'ptr=' option is ignored. SimulationCraft has not been built with PTR data. The 'ptr=' option is ignored.
| DPS | Error | Range | DPR | RPS Out | RPS In | Resource | Waiting | APM |
|---|---|---|---|---|---|---|---|---|
| 26631.9 | 68.1 / 0.3% | 3930.4 / 14.8% | 2113.0 | 12.6 | 12.8 | rage | 12.74% | 46.9 |
| Origin | http://chardev.org/?profile=27448 |
|---|---|
| Talents | http://www.wowhead.com/talent#warrior-3200030000000000000003222203130111022321020000000000000000000 |
| Glyphs |
|
| ? | Str | Agi | AP | Exp | Hit | Crit | Haste | Mastery | Wdps | WOHdps | WOHspeed |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Scale Factors | 2.6137 | 1.2682 | 1.1938 | 0.0000 | 1.5693 | 1.7510 | 1.1792 | 1.5840 | 0.0000 | 0.0000 | 0.0000 |
| Normalized | 1.0000 | 0.4852 | 0.4568 | 0.0000 | 0.6004 | 0.6699 | 0.4512 | 0.6060 | 0.0000 | 0.0000 | 0.0000 |
| Scale Deltas | 300 | 300 | 300 | 200 | 300 | 300 | 300 | 300 | 100 | 100 | 0 |
| Gear Ranking |
| DPS | DPS% | Res% | Count | Interval | DPE | DPET | DPR | RPE | Hit | Crit | Max | Crit% | M% | D% | P% | G% | B% | Ticks | T-Hit | T-Crit | T-Crit% | T-M% | Up% | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| tgbis | 26632 | |||||||||||||||||||||||
| battle_shout | 0 | 0.0% | 0.0% | 12.7/12.7 | 35.33sec | 0 | 0 | 0.0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| berserker_rage | 0 | 0.0% | 0.0% | 9.3/9.3 | 43.81sec | 0 | 0 | 0.0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| bloodthirst | 6421 | 24.1% | 37.9% | 105.0/105.0 | 4.07sec | 26590 | 17494 | 1345.5 | 20 | 19327 | 40804 | 98523 | 33.8% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| colossus_smash | 704 | 2.6% | 7.5% | 21.2/21.2 | 21.03sec | 14466 | 9545 | 745.3 | 19 | 11459 | 23893 | 35858 | 24.2% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| death_wish | 0 | 0.0% | 0.5% | 3.5/3.5 | 144.69sec | 0 | 0 | 0.0 | 7 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| deep_wounds | 2005 | 7.5% | 0.0% | 403.5/404.7 | 1.07sec | 2161 | 2161 | 0.0 | 0 | 2161 | 0 | 10025 | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| execute | 2622 | 9.8% | 17.4% | 34.0/34.0 | 2.73sec | 33533 | 22134 | 1196.3 | 28 | 27135 | 55622 | 125302 | 22.5% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| heroic_strike | 2080 | 7.8% | 19.2% | 48.6/48.6 | 6.86sec | 18594 | 1 | 860.2 | 22 | 12394 | 26177 | 66728 | 45.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| melee_main_hand | 3493 | 13.1% | 0.0% | 167.4/167.4 | 2.61sec | 9071 | 3501 | 0.0 | 0 | 9149 | 18882 | 38955 | 20.6% | 16.8% | 0.0% | 0.0% | 24.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| melee_off_hand | 2187 | 8.2% | 0.0% | 166.9/166.9 | 2.60sec | 5698 | 2193 | 0.0 | 0 | 5731 | 11826 | 25045 | 20.7% | 16.6% | 0.0% | 0.0% | 24.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| raging_blow | 5671 | 21.3% | 17.6% | 49.9/149.8 | 6.82sec | 49377 | 32517 | 2556.0 | 19 | 10862 | 39134 | 90755 | 19.8% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| recklessness | 0 | 0.0% | 0.0% | 2.3/2.3 | 240.63sec | 0 | 0 | 0.0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| slam | 1447 | 5.4% | 0.0% | 28.0/56.0 | 14.66sec | 22486 | 14862 | 0.0 | 0 | 7196 | 35681 | 75433 | 14.2% | 0.0% | 0.0% | 0.0% | 0.0% | 0.0% | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| Dynamic Buffs | Start | Refresh | Interval | Trigger | Up-Time | Benefit |
|---|---|---|---|---|---|---|
| battle_stance | 1.0 | 0.0 | 0.0sec | 0.0sec | 0% | 0% |
| battle_trance | 15.9 | 0.0 | 24.7sec | 24.7sec | 7% | 8% |
| berserker_rage | 9.3 | 0.0 | 43.8sec | 43.8sec | 21% | 21% |
| blackwing_dragonkin | 3.9 | 0.0 | 126.5sec | 126.5sec | 17% | 17% |
| bloodlust | 1.0 | 0.0 | 0.0sec | 0.0sec | 9% | 10% |
| bloodsurge | 28.5 | 2.9 | 14.6sec | 13.2sec | 19% | 100% |
| colossus_smash | 21.2 | 0.0 | 21.0sec | 21.0sec | 29% | 41% |
| death_wish | 3.5 | 0.0 | 144.7sec | 144.7sec | 24% | 24% |
| enrage | 14.5 | 27.8 | 27.9sec | 9.3sec | 51% | 50% |
| executioner_talent | 3.4 | 30.6 | 32.0sec | 2.7sec | 19% | 35% |
| flurry | 46.4 | 120.3 | 9.3sec | 2.6sec | 73% | 72% |
| golemblood_potion | 2.0 | 0.0 | 323.3sec | 323.3sec | 10% | 10% |
| heart_of_rage | 4.6 | 0.0 | 106.1sec | 106.1sec | 20% | 20% |
| incite | 8.8 | 0.0 | 36.5sec | 36.5sec | 7% | 18% |
| inner_rage | 3.3 | 0.0 | 32.2sec | 32.2sec | 10% | 10% |
| landslide_mh | 13.5 | 15.5 | 31.9sec | 14.4sec | 55% | 57% |
| landslide_oh | 8.8 | 3.2 | 45.5sec | 32.5sec | 28% | 31% |
| recklessness | 2.3 | 0.0 | 240.6sec | 240.6sec | 6% | 8% |
| tier11_4pc_melee | 1.0 | 48.9 | 0.0sec | 6.8sec | 84% | 93% |
| Constant Buffs |
|---|
| arcane_brilliance |
| berserker_stance |
| blessing_of_kings |
| blessing_of_might |
| blessing_of_might_regen |
| fortitude |
| replenishment |
| % | |
|---|---|
| rage_cap | 1.8% |
| Count | Interval | |
|---|---|---|
| munched_deep_wounds | 27.6 | 15.4sec |
| rolled_deep_wounds | 26.6 | 16.1sec |
| Count | rage | Average | Overflow | |
|---|---|---|---|---|
| battle_shout | 12.7 | 381.9 | 30.0 | 0.0% |
| berserker_rage | 9.3 | 87.1 | 9.4 | 3.1% |
| incoming_damage | 1.0 | 38.5 | 38.5 | 14.6% |
| melee_main_hand | 139.3 | 3366.1 | 24.2 | 2.2% |
| melee_off_hand | 139.3 | 1685.9 | 12.1 | 2.0% |
| # | action,conditions |
|---|---|
| 0 | flask,type=titanic_strength |
| 1 | food,type=beer_basted_crocolisk |
| 2 | stance,choose=berserker,if=!in_combat |
| 3 | snapshot_stats |
| 4 | golemblood_potion,if=!in_combat|buff.bloodlust.react |
| 5 | auto_attack |
| 6 | recklessness |
| 7 | death_wish |
| 8 | heroic_strike,if=target.adds=0&(rage>60|buff.battle_trance.up|buff.incite.up)&target.health_pct>=20 |
| 9 | cleave,if=target.adds>0 |
| A | whirlwind,if=target.adds>0 |
| B | colossus_smash |
| C | inner_rage,if=target.health_pct<20 |
| D | execute,if=buff.colossus_smash.up|buff.inner_rage.up |
| E | berserker_rage,if=!(buff.death_wish.up|buff.enrage.up|buff.unholy_frenzy.up)&rage>15&cooldown.raging_blow.remains<1 |
| F | raging_blow,if=target.health_pct>=20 |
| G | bloodthirst |
| H | slam,if=buff.bloodsurge.react |
| I | battle_shout,if=rage<70 |
| Raid-Buffed | Unbuffed | Gear Amount | |
|---|---|---|---|
| Strength | 6464 | 5170 | 4732 |
| Agility | 729 | 145 | 20 |
| Stamina | 7651 | 6613 | 6440 |
| Intellect | 55 | 53 | 20 |
| Spirit | 82 | 82 | 20 |
| Health | 150069 | 135607 | 0 |
| Mana | 120 | 120 | 0 |
| Spell Power | 0 | 0 | 0 |
| Spell Hit | 8.53% | 8.53% | 874 |
| Spell Crit | 20.47% | 15.47% | 2595 |
| Spell Haste | 10.39% | 5.13% | 657 |
| Spell Penetration | 0 | 0 | 0 |
| Mana Per 5 | 0 | 0 | 0 |
| Attack Power | 14661 | 10740 | 190 |
| Melee Hit | 10.28% | 10.28% | 874 |
| Melee Crit | 23.47% | 16.07% | 2595 |
| Melee Haste | 5.13% | 5.13% | 657 |
| Expertise | 26.01 | 26.01 | 781 |
| Armor | 21168 | 21168 | 21168 |
| Tank-Miss | 4.70% | 4.70% | 0 |
| Tank-Dodge | 5.15% | 3.79% | 0 |
| Tank-Parry | 4.70% | 4.70% | 0 |
| Tank-Block | 5.00% | 5.00% | 0 |
| Tank-Crit | 0.00% | 0.00% | 0 |
| Mastery | 16.67 | 16.67 | 1554 |
| Encoded | |
|---|---|
| head | earthen_helmet,heroic=1,type=plate,ilevel=372,quality=epic,stats=2891armor_197exp_257haste_578sta_325str,reforge=exp_crit,gems=reverberating_shadowspirit_20mastery_20str_30str,enchant=60str_35mastery |
| neck | rage_of_ages,heroic=1,ilevel=372,quality=epic,stats=143hit_143mastery_322sta_215str,reforge=hit_crit |
| shoulders | pauldrons_of_the_great_ettin,heroic=1,type=plate,ilevel=372,quality=epic,stats=2669armor_191crit_171mastery_429sta_266str,gems=20hit_20str_10str,enchant=50str_25crit |
| shirt | empty |
| chest | earthen_battleplate,heroic=1,type=plate,ilevel=372,quality=epic,stats=3559armor_257crit_217haste_578sta_345str,reforge=haste_exp,gems=40str_20hit_20str_20str,enchant=20all |
| waist | belt_of_absolute_zero,heroic=1,type=plate,ilevel=372,quality=epic,stats=2002armor_191crit_171hit_429sta_266str,gems=40str_40str_10hit |
| legs | earthen_legplates,heroic=1,type=plate,ilevel=372,quality=epic,stats=3114armor_217hit_257mastery_578sta_345str,reforge=hit_exp,gems=40str_40str,enchant=190ap_55crit |
| feet | massacre_treads,heroic=1,type=plate,ilevel=372,quality=epic,stats=2447armor_171exp_191mastery_429sta_266str,gems=20hit_20str_10str,enchant=35mastery |
| wrists | bracers_of_the_matredor,heroic=1,type=plate,ilevel=379,quality=epic,stats=1589armor_153crit_113haste_344sta_229str,reforge=haste_mastery,gems=20crit_20str_10str |
| hands | earthen_gauntlets,heroic=1,type=plate,ilevel=372,quality=epic,stats=2224armor_191haste_171mastery_429sta_266str,reforge=haste_crit,gems=20hit_20str_10str,enchant=50str |
| finger1 | cloudburst_ring_of_the_earthshaker,heroic=1,ilevel=372,quality=epic,stats=321sta_214str_143hit_143crit,reforge=hit_exp,suffix=120 |
| finger2 | dargonaxs_signet,heroic=1,ilevel=379,quality=epic,stats=113crit_153mastery_344sta_229str,gems=20crit_20str_10str |
| trinket1 | fury_of_angerforge,ilevel=359,quality=epic,stats=321crit |
| trinket2 | heart_of_rage,heroic=1,ilevel=372,quality=epic,stats=363exp,reforge=exp_crit,equip=onattackhit_2178str_10%_20dur_100cd |
| back | glittering_epidermis,heroic=1,ilevel=372,quality=epic,stats=673armor_143crit_143haste_322sta_215str,reforge=haste_mastery,enchant=65crit |
| main_hand | reclaimed_ashkandi_greatsword_of_the_brotherhood,heroic=1,ilevel=372,quality=epic,stats=257crit_257hit_578sta_385str,reforge=hit_mastery,enchant=landslide,weapon=sword2h_3.80speed_2138min_3209max |
| off_hand | reclaimed_ashkandi_greatsword_of_the_brotherhood,heroic=1,ilevel=372,quality=epic,stats=257crit_257hit_578sta_385str,reforge=hit_mastery,enchant=landslide,weapon=sword2h_3.80speed_2138min_3209max |
| ranged | crossfire_carbine,ilevel=359,quality=epic,stats=72exp_72mastery_161sta_107str,reforge=exp_crit,weapon=gun_3.00speed_1309min_2432max |
| tabard | empty |
| Arms | Rank |
|---|---|
| War Academy | 3 |
| Field Dressing | 2 |
| Blitz | 0 |
| Tactical Mastery | 0 |
| Second Wind | 0 |
| Deep Wounds | 3 |
| Drums of War | 0 |
| Taste for Blood | 0 |
| Sweeping Strikes | 0 |
| Impale | 0 |
| Improved Hamstring | 0 |
| Improved Slam | 0 |
| Deadly Calm | 0 |
| Blood Frenzy | 0 |
| Lambs to the Slaughter | 0 |
| Juggernaut | 0 |
| Sudden Death | 0 |
| Wrecking Crew | 0 |
| Throwdown | 0 |
| Bladestorm | 0 |
| Fury | Rank |
|---|---|
| Blood Craze | 0 |
| Battle Trance | 3 |
| Cruelty | 2 |
| Executioner | 2 |
| Booming Voice | 2 |
| Rude Interruption | 2 |
| Piercing Howl | 0 |
| Flurry | 3 |
| Death Wish | 1 |
| Enrage | 3 |
| Die by the Sword | 0 |
| Raging Blow | 1 |
| Rampage | 1 |
| Heroic Fury | 1 |
| Furious Attacks | 0 |
| Meat Cleaver | 2 |
| Intensify Rage | 2 |
| Bloodsurge | 3 |
| Skirmisher | 2 |
| Titan's Grip | 1 |
| Single-Minded Fury | 0 |
| Protection | Rank |
|---|---|
| Incite | 2 |
| Toughness | 0 |
| Blood and Thunder | 0 |
| Shield Specialization | 0 |
| Shield Mastery | 0 |
| Hold the Line | 0 |
| Gag Order | 0 |
| Last Stand | 0 |
| Concussion Blow | 0 |
| Bastion of Defense | 0 |
| Warbringer | 0 |
| Improved Revenge | 0 |
| Devastate | 0 |
| Impending Victory | 0 |
| Thunderstruck | 0 |
| Vigilance | 0 |
| Heavy Repercussions | 0 |
| Safeguard | 0 |
| Sword and Board | 0 |
| Shockwave | 0 |
| #!./simc warrior=tgbis origin="http://chardev.org/?profile=27448" level=85 race=worgen use_pre_potion=1 talents=http://www.wowhead.com/talent#warrior-3200030000000000000003222203130111022321020000000000000000000 glyphs=death_wish/cleaving/heroic_throw/bloody_healing/battle/berserker_rage/bloodthirst/raging_blow/slam actions=flask,type=titanic_strength actions+=/food,type=beer_basted_crocolisk actions+=/stance,choose=berserker,if=!in_combat actions+=/snapshot_stats actions+=/golemblood_potion,if=!in_combat|buff.bloodlust.react actions+=/auto_attack actions+=/recklessness actions+=/death_wish actions+=/heroic_strike,if=target.adds=0&(rage>60|buff.battle_trance.up|buff.incite.up)&target.health_pct>=20 actions+=/cleave,if=target.adds>0 actions+=/whirlwind,if=target.adds>0 actions+=/colossus_smash actions+=/inner_rage,if=target.health_pct<20 actions+=/execute,if=buff.colossus_smash.up|buff.inner_rage.up actions+=/berserker_rage,if=!(buff.death_wish.up|buff.enrage.up|buff.unholy_frenzy.up)&rage>15&cooldown.raging_blow.remains<1 actions+=/raging_blow,if=target.health_pct>=20 actions+=/bloodthirst actions+=/slam,if=buff.bloodsurge.react actions+=/battle_shout,if=rage<70 head=earthen_helmet,heroic=1,type=plate,ilevel=372,quality=epic,stats=2891armor_197exp_257haste_578sta_325str,reforge=exp_crit,gems=reverberating_shadowspirit_20mastery_20str_30str,enchant=60str_35mastery neck=rage_of_ages,heroic=1,ilevel=372,quality=epic,stats=143hit_143mastery_322sta_215str,reforge=hit_crit shoulders=pauldrons_of_the_great_ettin,heroic=1,type=plate,ilevel=372,quality=epic,stats=2669armor_191crit_171mastery_429sta_266str,gems=20hit_20str_10str,enchant=50str_25crit chest=earthen_battleplate,heroic=1,type=plate,ilevel=372,quality=epic,stats=3559armor_257crit_217haste_578sta_345str,reforge=haste_exp,gems=40str_20hit_20str_20str,enchant=20all waist=belt_of_absolute_zero,heroic=1,type=plate,ilevel=372,quality=epic,stats=2002armor_191crit_171hit_429sta_266str,gems=40str_40str_10hit legs=earthen_legplates,heroic=1,type=plate,ilevel=372,quality=epic,stats=3114armor_217hit_257mastery_578sta_345str,reforge=hit_exp,gems=40str_40str,enchant=190ap_55crit feet=massacre_treads,heroic=1,type=plate,ilevel=372,quality=epic,stats=2447armor_171exp_191mastery_429sta_266str,gems=20hit_20str_10str,enchant=35mastery wrists=bracers_of_the_matredor,heroic=1,type=plate,ilevel=379,quality=epic,stats=1589armor_153crit_113haste_344sta_229str,reforge=haste_mastery,gems=20crit_20str_10str hands=earthen_gauntlets,heroic=1,type=plate,ilevel=372,quality=epic,stats=2224armor_191haste_171mastery_429sta_266str,reforge=haste_crit,gems=20hit_20str_10str,enchant=50str finger1=cloudburst_ring_of_the_earthshaker,heroic=1,ilevel=372,quality=epic,stats=321sta_214str_143hit_143crit,reforge=hit_exp,suffix=120 finger2=dargonaxs_signet,heroic=1,ilevel=379,quality=epic,stats=113crit_153mastery_344sta_229str,gems=20crit_20str_10str trinket1=fury_of_angerforge,ilevel=359,quality=epic,stats=321crit trinket2=heart_of_rage,heroic=1,ilevel=372,quality=epic,stats=363exp,reforge=exp_crit,equip=onattackhit_2178str_10%_20dur_100cd back=glittering_epidermis,heroic=1,ilevel=372,quality=epic,stats=673armor_143crit_143haste_322sta_215str,reforge=haste_mastery,enchant=65crit main_hand=reclaimed_ashkandi_greatsword_of_the_brotherhood,heroic=1,ilevel=372,quality=epic,stats=257crit_257hit_578sta_385str,reforge=hit_mastery,enchant=landslide,weapon=sword2h_3.80speed_2138min_3209max off_hand=reclaimed_ashkandi_greatsword_of_the_brotherhood,heroic=1,ilevel=372,quality=epic,stats=257crit_257hit_578sta_385str,reforge=hit_mastery,enchant=landslide,weapon=sword2h_3.80speed_2138min_3209max ranged=crossfire_carbine,ilevel=359,quality=epic,stats=72exp_72mastery_161sta_107str,reforge=exp_crit,weapon=gun_3.00speed_1309min_2432max # Gear Summary # gear_strength=4732 # gear_agility=20 # gear_stamina=6440 # gear_intellect=20 # gear_spirit=20 # gear_attack_power=190 # gear_expertise_rating=781 # gear_hit_rating=874 # gear_crit_rating=2595 # gear_haste_rating=657 # gear_mastery_rating=1554 # gear_armor=21168 # meta_gem=reverberating_shadowspirit # tier11_2pc_melee=1 # tier11_4pc_melee=1 # trinket1=fury_of_angerforge # main_hand=reclaimed_ashkandi_greatsword_of_the_brotherhood,heroic=1,weapon=sword2h_3.80speed_2138min_3209max,enchant=landslide # off_hand=reclaimed_ashkandi_greatsword_of_the_brotherhood,heroic=1,weapon=sword2h_3.80speed_2138min_3209max,enchant=landslide # ranged=crossfire_carbine,weapon=gun_3.00speed_1309min_2432max |
| Pawn Standard | ( Pawn: v1: "tgbis": Strength=2.6137, CritRating=1.7510, MasteryRating=1.5840, HitRating=1.5693, Agility=1.2682, Ap=1.1938, HasteRating=1.1792 ) |
|---|---|
| Zero Hit/Expertise | ( Pawn: v1: "tgbis": Strength=2.6137, CritRating=1.7510, MasteryRating=1.5840, HitRating=0.0000, Agility=1.2682, Ap=1.1938, HasteRating=1.1792 ) |
| RhadaTip Standard | ( RhadaTip: "tgbis": Strength=2.6137, CritRating=1.7510, MasteryRating=1.5840, HitRating=1.5693, Agility=1.2682, Ap=1.1938, HasteRating=1.1792 ) |
|---|---|
| Zero Hit/Expertise | ( RhadaTip: "tgbis": Strength=2.6137, CritRating=1.7510, MasteryRating=1.5840, HitRating=0.0000, Agility=1.2682, Ap=1.1938, HasteRating=1.1792 ) |
| Dynamic Buff | Start | Refresh | Interval | Trigger | Up-Time | Benefit |
|---|
| Constant Buff |
|---|
| Demonic Pact |
| battle_shout |
| communion |
| leader_of_the_pack |
| mana_spring_totem |
| rampage |
| strength_of_earth |
| windfury_totem |
| wrath_of_air |
| DPS | Error | Range | DPR | RPS Out | RPS In | Resource | Waiting | APM |
|---|---|---|---|---|---|---|---|---|
| 0.2 | 0.0 / 0.3% | 0.0 / 18.1% | 0.0 | 25228.4 | 0.0 | health | 100.02% | 20.1 |
| ? | Hit | Crit | Haste | Mastery |
|---|---|---|---|---|
| Scale Factors | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
| Normalized | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
| Scale Deltas | 300 | 300 | 300 | 300 |
| Gear Ranking |
| Dynamic Buffs | Start | Refresh | Interval | Trigger | Up-Time | Benefit |
|---|
| Constant Buffs |
|---|
| bleeding |
| blood_frenzy_physical |
| critical_mass |
| earth_and_moon |
| hunters_mark |
| mangle |
| poisoned |
| replenishment |
| sunder_armor |
| thunder_clap |
| % |
|---|
| Count | Interval |
|---|
| Count | health | Average | Overflow |
|---|
| # | action,conditions |
|---|---|
| 0 | snapshot_stats |
| 1 | auto_attack |
| Raid-Buffed | Unbuffed | Gear Amount | |
|---|---|---|---|
| Strength | 0 | 0 | 0 |
| Agility | 0 | 0 | 0 |
| Stamina | 0 | 0 | 0 |
| Intellect | 0 | 0 | 0 |
| Spirit | 0 | 0 | 0 |
| Health | 0 | 12208568 | 0 |
| Mana | 0 | 0 | 0 |
| Spell Power | 0 | 0 | 0 |
| Spell Hit | 0.00% | 0.00% | 0 |
| Spell Crit | 0.00% | 0.00% | 0 |
| Spell Haste | 0.00% | 0.00% | 0 |
| Spell Penetration | 0 | 0 | 0 |
| Mana Per 5 | 0 | 0 | 0 |
| Attack Power | 0 | 0 | 0 |
| Melee Hit | 0.00% | 0.00% | 0 |
| Melee Crit | 5.00% | 5.00% | 0 |
| Melee Haste | 0.00% | 0.00% | 0 |
| Expertise | 0.00 | 0.00 | 0 |
| Armor | 11977 | 11977 | 0 |
| Tank-Miss | 0.00% | 0.00% | 0 |
| Tank-Dodge | 0.00% | 0.00% | 0 |
| Tank-Parry | 0.00% | 0.00% | 0 |
| Tank-Block | 5.00% | 5.00% | 0 |
| Tank-Crit | 0.00% | 0.00% | 0 |
| Mastery | 0.00 | 0.00 | 0 |
| Encoded | |
|---|---|
| head | empty |
| neck | empty |
| shoulders | empty |
| shirt | empty |
| chest | empty |
| waist | empty |
| legs | empty |
| feet | empty |
| wrists | empty |
| hands | empty |
| finger1 | empty |
| finger2 | empty |
| trinket1 | empty |
| trinket2 | empty |
| back | empty |
| main_hand | skullcrusher,weapon=axe2h_3.00speed_100000min_120000max |
| off_hand | empty |
| ranged | empty |
| tabard | empty |
| #!./simc enemy=Fluffy_Pillow origin="unknown" level=88 race=humanoid use_pre_potion=1 actions=snapshot_stats actions+=/auto_attack main_hand=skullcrusher,weapon=axe2h_3.00speed_100000min_120000max # Gear Summary # main_hand=skullcrusher,weapon=axe2h_3.00speed_100000min_120000max |
| Pawn Standard | |
|---|---|
| Zero Hit/Expertise |
| RhadaTip Standard | |
|---|---|
| Zero Hit/Expertise |
Average number of actions executed per minute.
Buffs received prior to combat and present the entire fight.
Average number of times an action is executed per iteration.
Average crit damage.
Percentage of executes that resulted in critical strikes.
Percentage of executes that resulted in dodges.
Average damage per execution of an individual action.
Average damage per execute time of an individual action; the amount of damage generated, divided by the time taken to execute the action, including time spent in the GCD.
Average damage per resource point spent.
Average damage per second.
Percentage of total DPS contributed by a particular action.
Temporary buffs received during combat, perhaps multiple times.
( 2 * dps_stddev / sqrt( iterations ) ) / dps_avg
Percentage of executes that resulted in glancing blows.
Percentage of executes that resulted in blocking blows.
Average non-crit damage.
Average time between executions of a particular action.
Maximum crit damage over all iterations.
Percentage of executes that resulted in misses.
The player profile from which the simulation script was generated. The profile must be copied into the same directory as this HTML file in order for the link to work.
Percentage of executes that resulted in parries.
( dps_max - dps_min ) / ( 2 * dps_avg )
Average resource points generated per second.
Average resource points consumed per second.
DPS gain per unit stat increase except for Hit/Expertise which represent DPS loss per unit stat decrease.
Average number of periodic ticks per iteration. Spells that do not have a damage-over-time component will have zero ticks.
Average crit tick damage.
Percentage of ticks that resulted in critical strikes.
Average non-crit tick damage.
Percentage of ticks that resulted in misses.
Percentage of total time that DoT is ticking on target.
The simulated encounter's duration can vary based on the health of the target and variation in the raid DPS. This chart shows how often the duration of the encounter varied by how much time.
This is the percentage of time in which no action can be taken other than autoattacks. This can be caused by resource starvation, lockouts, and timers.