Playing around with Cinder multi-backend
With Grizzly release, Cinder got equipped with another major feature – multi-backends with filter scheduler. So now you can have more than one storage boxes for block storage and manage them with one Cinder deployment. Here, I'm going to test it out using our favourite method – trying it out on DevStack!
DevStack can provide you with two LVM backends to play around with them. But you'll need to restack it.
Go to the devstack directory and pull the latest code. Destroy previous DevStack deployment if it exists.
rushi@jio:~/devstack$ git pull origin master
rushi@jio:~/devstack$ ./unstack.sh
Add the config option to localrc
which give you pre-cooked multi-backend setup with two LVM backends, both of 10G. Stack
rushi@jio:~$ echo "CINDER_MULTI_LVM_BACKEND=True" >> localrc
rushi@jio:~$ ./devstack/stack.sh
You can see that the cinder.conf file now has two values for enabled backends:
rushi@jio:~$ less /etc/cinder/cinder.conf | grep enabled_backends
enabled_backends = lvmdriver-1,lvmdriver-2
#enabled_backends=<None>
Also, you can see that there are two configuration groups created at the end of that config file, one each for configurations corresponding to that particular backend
rushi@jio:~$ tail /etc/cinder/cinder.conf
[lvmdriver-1]
volume_backend_name = LVM_iSCSI
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
volume_group = stack-volumes
[lvmdriver-2]
volume_backend_name = LVM_iSCSI_2
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
volume_group = stack-volumes2
So you have two volume groups created for respective backends. Lets check it directly without using Cinder.
rushi@jio:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
stack-volumes 1 0 0 wz--n- 10.01g 10.01g
stack-volumes2 1 0 0 wz--n- 10.01g 10.01g
ubuntu-vg 1 2 0 wz--n- 931.27g 44.00m
Hmmm. Two volume groups, each of size 10G.
Case 1: Spreading volumes across backends
Now, lets create a volume and see where it ends up.
rushi@jio:~$ cinder create 1
ERROR: You must provide a username via either --os-username or env[OS_USERNAME]
Oops! Let me try again..
rushi@jio:~$ . devstack/openrc
rushi@jio:~$ cinder create 1
+-------------------+--------------------------------------+
| Property | Value |
+-------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2014-01-16T17:29:49.241493 |
| description | None |
| id | ecfbfebb-73d5-4faf-b625-e69f18020378 |
| metadata | {} |
| name | None |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| user_id | e441f49105f343da87316ab7157e2ab7 |
| volume_type | None |
+-------------------+--------------------------------------+
rushi@jio:~$ cinder list
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
| ecfbfebb-73d5-4faf-b625-e69f18020378 | available | None | 1 | None | false | |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
rushi@jio:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
stack-volumes 1 0 0 wz--n- 10.01g 10.01g
stack-volumes2 1 2 0 wz--n- 10.01g 9.01g
ubuntu-vg 1 2 0 wz--n- 931.27g 44.00m
So it went to backend number 2. If you are admin (source devstack/openrc admin admin
), you can do a cinder show
too, to get information
as to which host did this volume go to. Only the admin is allowed to view the host information.
The scheduler now gets reported of the capabilities which the backends have (check out the c-shr
screen to see it). The scheduler then weighs the backend based on these capabilities and decides which of them has higher ‘weight’ to serve the next ‘create’ request. By default, the ‘weigher’ for scheduler is CapacityWeigher
. That is, whichever backend has higher capacity, that backend will be chosen for the next ‘create’ request.
So in our case, when we'll do another ‘create volume’ it will now land on to the first backend.
rushi@jio:~$ cinder create 1
+-------------------+--------------------------------------+
| Property | Value |
+-------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2014-01-16T17:39:23.958468 |
| description | None |
| id | aa79c608-47cc-44e3-a614-f4bddaab68e5 |
| metadata | {} |
| name | None |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| user_id | e441f49105f343da87316ab7157e2ab7 |
| volume_type | None |
+-------------------+--------------------------------------+
rushi@jio:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
stack-volumes 1 0 0 wz--n- 10.01g 9.01g
stack-volumes2 1 2 0 wz--n- 10.01g 9.01g
ubuntu-vg 1 2 0 wz--n- 931.27g 44.00m
Neat!
Case 2 : Stacking all volumes at one backend
What if we want to keep all the volumes at only one backend? Cinder allows you to do that too!
There is a configuration option in cinder.conf, capacity_weight_multiplier
, which allows you to multiply the ‘capacity weight’ by a number.
So if the multiplier is 1, a backend with higher capacity will have higher weight, and will be the choice for the next volume creation request.
This is the default case. BUT what if we set it to -1? The backend with higher available capacity will have more negative weight, which will make that backend less preferable for next ‘create’ request, and hence the request will go to the backend which has lesser capacity!
Let us see this too in action.
Check out the config option from cinder.conf file.
rushi@jio:~$ cat /etc/cinder/cinder.conf | grep -B 3 ^capacity_weight_multiplier
# Multiplier used for weighing volume capacity. Negative
# numbers mean to stack vs spread. (floating point value)
# capacity_weight_multiplier=1.0
The config option is commented out and is there just so that you can easily change it. Now uncomment it and change it's value to -1.
Delete previously created volumes. Kill all the three Cinder screen processes (c-api
, c-sch
and c-vol
), and restart them.
Lets create two volumes and see where they end up..
rushi@jio:~$ cinder list
+----+--------+------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+----+--------+------+------+-------------+----------+-------------+
+----+--------+------+------+-------------+----------+-------------+
rushi@jio:~$ cinder create 1
+-------------------+--------------------------------------+
| Property | Value |
+-------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2014-01-16T17:56:59.845733 |
| description | None |
| id | b927b328-5ae0-411a-9de2-22ed732b4946 |
| metadata | {} |
| name | None |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| user_id | e441f49105f343da87316ab7157e2ab7 |
| volume_type | None |
+-------------------+--------------------------------------+
rushi@jio:~$ cinder create 1
+-------------------+--------------------------------------+
| Property | Value |
+-------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2014-01-16T17:57:01.132756 |
| description | None |
| id | 9f643f2d-7221-4a5c-bf48-1977c9b89fd3 |
| metadata | {} |
| name | None |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| user_id | e441f49105f343da87316ab7157e2ab7 |
| volume_type | None |
+-------------------+--------------------------------------+
rushi@jio:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
stack-volumes 1 0 0 wz--n- 10.01g 10.01g
stack-volumes2 1 2 0 wz--n- 10.01g 8.01g
ubuntu-vg 1 2 0 wz--n- 931.27g 44.00m
:)
Case 3 : Custom choice
What if I have two different backends (maybe one is slower, or costlier, than the other), and my users want to exactly specify how many volumes they want of each ‘type’ of backends? Here, Cinder's ‘volume types’ have us covered.
We can associate a volume type with a backend, and then the users can create a volume of whatever ‘type’ they want. Let's throw some discrimination at these backends. I'll create two volume types: ‘gold’ and ‘bronze’, and associate ‘stack-volumes’ with ‘gold’ and similarly for ‘stack-volumes2’. Note that this job can only be done by the administrator.
Let us be admins
rushi@jio:~$ . devstack/openrc admin admin
Create both the volume types and list them.
rushi@jio:~$ cinder type-create gold
+--------------------------------------+------+
| ID | Name |
+--------------------------------------+------+
| dd883ee0-24be-42e1-ab2e-b9a01454f2f9 | gold |
+--------------------------------------+------+
rushi@jio:~$ cinder type-create bronze
+--------------------------------------+--------+
| ID | Name |
+--------------------------------------+--------+
| f63dd2cb-f4e7-4d6d-a84f-5bf2cc6c5671 | bronze |
+--------------------------------------+--------+
rushi@jio:~$ cinder type-list
+--------------------------------------+--------+
| ID | Name |
+--------------------------------------+--------+
| dd883ee0-24be-42e1-ab2e-b9a01454f2f9 | gold |
| f63dd2cb-f4e7-4d6d-a84f-5bf2cc6c5671 | bronze |
+--------------------------------------+--------+
Get the backend names (volume_backend_name
config option) from cinder.conf file.
rushi@jio:~$ tail /etc/cinder/cinder.conf
[lvmdriver-1]
volume_backend_name = LVM_iSCSI
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
volume_group = stack-volumes
[lvmdriver-2]
volume_backend_name = LVM_iSCSI_2
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
volume_group = stack-volumes2
Now let's associate backend LVM_iSCSI
with volume type ‘gold’, and similarly for the other one.
rushi@jio:~$ cinder type-key gold set volume_backend_name=LVM_iSCSI
rushi@jio:~$ cinder type-key bronze set volume_backend_name=LVM_iSCSI_2
These association are stored as key-value pairs in the volume type's ‘extra specs’. Let's see them
rushi@jio:~$ cinder extra-specs-list
+--------------------------------------+--------+------------------------------------------+
| ID | Name | extra_specs |
+--------------------------------------+--------+------------------------------------------+
| dd883ee0-24be-42e1-ab2e-b9a01454f2f9 | gold | {u'volume_backend_name': u'LVM_iSCSI'} |
| f63dd2cb-f4e7-4d6d-a84f-5bf2cc6c5671 | bronze | {u'volume_backend_name': u'LVM_iSCSI_2'} |
+--------------------------------------+--------+------------------------------------------+
You can add more key-value pairs for these volume types with different key names. volume_backend_name
is a reserved key name, though.
Let's create two volumes of type ‘gold’ and see where they end up being created:
rushi@jio:~$ cinder create --volume-type gold --name costly_vol_1 1
+-------------------+--------------------------------------+
| Property | Value |
+-------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2014-01-16T18:24:07.670635 |
| description | None |
| id | 767d4c56-6d3d-46f7-b0a3-4a00f696bcad |
| metadata | {} |
| name | costly_vol_1 |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| user_id | c271eb32e71b411bb98ad7b93792d6d5 |
| volume_type | gold |
+-------------------+--------------------------------------+
rushi@jio:~$ cinder create --volume-type gold --name costly_vol_2 1
+-------------------+--------------------------------------+
| Property | Value |
+-------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2014-01-16T18:24:58.382180 |
| description | None |
| id | a938e556-65cf-4547-87ff-513d60f626d3 |
| metadata | {} |
| name | costly_vol_2 |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| user_id | c271eb32e71b411bb98ad7b93792d6d5 |
| volume_type | gold |
+-------------------+--------------------------------------+
rushi@jio:~$ cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| 767d4c56-6d3d-46f7-b0a3-4a00f696bcad | available | costly_vol_1 | 1 | gold | false | |
| a938e556-65cf-4547-87ff-513d60f626d3 | available | costly_vol_2 | 1 | gold | false | |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
rushi@jio:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
stack-volumes 1 2 0 wz--n- 10.01g 8.01g
stack-volumes2 1 0 0 wz--n- 10.01g 10.01g
ubuntu-vg 1 2 0 wz--n- 931.27g 44.00m
Now create another one, but with type ‘bronze’ and ensure it is created on the other backend.
rushi@jio:~$ cinder create --volume-type bronze --name cheap_vol_1 1
+-------------------+--------------------------------------+
| Property | Value |
+-------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2014-01-16T18:27:05.852092 |
| description | None |
| id | 97f62c7a-b974-41e8-a659-1e6d3eb876d5 |
| metadata | {} |
| name | cheap_vol_1 |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| user_id | c271eb32e71b411bb98ad7b93792d6d5 |
| volume_type | bronze |
+-------------------+--------------------------------------+
rushi@jio:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/loop0 stack-volumes lvm2 a-- 10.01g 8.01g
/dev/loop1 stack-volumes2 lvm2 a-- 10.01g 9.01g
/dev/sda5 ubuntu-vg lvm2 a-- 931.27g 44.00m
Done :)
Cheers!


SUBROUTINE SSPGVD( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, $ LWORK, IWORK, LIWORK, INFO ) * * -- LAPACK driver routine (version 3.1) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOBZ, UPLO INTEGER INFO, ITYPE, LDZ, LIWORK, LWORK, N * .. * .. Array Arguments .. INTEGER IWORK( * ) REAL AP( * ), BP( * ), W( * ), WORK( * ), $ Z( LDZ, * ) * .. * * Purpose * ======= * * SSPGVD computes all the eigenvalues, and optionally, the eigenvectors * of a real generalized symmetric-definite eigenproblem, of the form * A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x. Here A and * B are assumed to be symmetric, stored in packed format, and B is also * positive definite. * If eigenvectors are desired, it uses a divide and conquer algorithm. * * The divide and conquer algorithm makes very mild assumptions about * floating point arithmetic. It will work on machines with a guard * digit in add/subtract, or on those binary machines without guard * digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or * Cray-2. It could conceivably fail on hexadecimal or decimal machines * without guard digits, but we know of none. * * Arguments * ========= * * ITYPE (input) INTEGER * Specifies the problem type to be solved: * = 1: A*x = (lambda)*B*x * = 2: A*B*x = (lambda)*x * = 3: B*A*x = (lambda)*x * * JOBZ (input) CHARACTER*1 * = 'N': Compute eigenvalues only; * = 'V': Compute eigenvalues and eigenvectors. * * UPLO (input) CHARACTER*1 * = 'U': Upper triangles of A and B are stored; * = 'L': Lower triangles of A and B are stored. * * N (input) INTEGER * The order of the matrices A and B. N >= 0. * * AP (input/output) REAL array, dimension (N*(N+1)/2) * On entry, the upper or lower triangle of the symmetric matrix * A, packed columnwise in a linear array. The j-th column of A * is stored in the array AP as follows: * if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j; * if UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n. * * On exit, the contents of AP are destroyed. * * BP (input/output) REAL array, dimension (N*(N+1)/2) * On entry, the upper or lower triangle of the symmetric matrix * B, packed columnwise in a linear array. The j-th column of B * is stored in the array BP as follows: * if UPLO = 'U', BP(i + (j-1)*j/2) = B(i,j) for 1<=i<=j; * if UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n. * * On exit, the triangular factor U or L from the Cholesky * factorization B = U**T*U or B = L*L**T, in the same storage * format as B. * * W (output) REAL array, dimension (N) * If INFO = 0, the eigenvalues in ascending order. * * Z (output) REAL array, dimension (LDZ, N) * If JOBZ = 'V', then if INFO = 0, Z contains the matrix Z of * eigenvectors. The eigenvectors are normalized as follows: * if ITYPE = 1 or 2, Z**T*B*Z = I; * if ITYPE = 3, Z**T*inv(B)*Z = I. * If JOBZ = 'N', then Z is not referenced. * * LDZ (input) INTEGER * The leading dimension of the array Z. LDZ >= 1, and if * JOBZ = 'V', LDZ >= max(1,N). * * WORK (workspace/output) REAL array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the required LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. * If N <= 1, LWORK >= 1. * If JOBZ = 'N' and N > 1, LWORK >= 2*N. * If JOBZ = 'V' and N > 1, LWORK >= 1 + 6*N + 2*N**2. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the required sizes of the WORK and IWORK * arrays, 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. * * IWORK (workspace/output) INTEGER array, dimension (MAX(1,LIWORK)) * On exit, if INFO = 0, IWORK(1) returns the required LIWORK. * * LIWORK (input) INTEGER * The dimension of the array IWORK. * If JOBZ = 'N' or N <= 1, LIWORK >= 1. * If JOBZ = 'V' and N > 1, LIWORK >= 3 + 5*N. * * If LIWORK = -1, then a workspace query is assumed; the * routine only calculates the required sizes of the WORK and * IWORK arrays, 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. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * > 0: SPPTRF or SSPEVD returned an error code: * <= N: if INFO = i, SSPEVD failed to converge; * i off-diagonal elements of an intermediate * tridiagonal form did not converge to zero; * > N: if INFO = N + i, for 1 <= i <= N, then the leading * minor of order i of B is not positive definite. * The factorization of B could not be completed and * no eigenvalues or eigenvectors were computed. * * Further Details * =============== * * Based on contributions by * Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA * * ===================================================================== * * .. Parameters .. REAL TWO PARAMETER ( TWO = 2.0E+0 ) * .. * .. Local Scalars .. LOGICAL LQUERY, UPPER, WANTZ CHARACTER TRANS INTEGER J, LIWMIN, LWMIN, NEIG * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL SPPTRF, SSPEVD, SSPGST, STPMV, STPSV, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, REAL * .. * .. Executable Statements .. * * Test the input parameters. * WANTZ = LSAME( JOBZ, 'V' ) UPPER = LSAME( UPLO, 'U' ) LQUERY = ( LWORK.EQ.-1 .OR. LIWORK.EQ.-1 ) * INFO = 0 IF( ITYPE.LT.1 .OR. ITYPE.GT.3 ) THEN INFO = -1 ELSE IF( .NOT.( WANTZ .OR. LSAME( JOBZ, 'N' ) ) ) THEN INFO = -2 ELSE IF( .NOT.( UPPER .OR. LSAME( UPLO, 'L' ) ) ) THEN INFO = -3 ELSE IF( N.LT.0 ) THEN INFO = -4 ELSE IF( LDZ.LT.1 .OR. ( WANTZ .AND. LDZ.LT.N ) ) THEN INFO = -9 END IF * IF( INFO.EQ.0 ) THEN IF( N.LE.1 ) THEN LIWMIN = 1 LWMIN = 1 ELSE IF( WANTZ ) THEN LIWMIN = 3 + 5*N LWMIN = 1 + 6*N + 2*N**2 ELSE LIWMIN = 1 LWMIN = 2*N END IF END IF WORK( 1 ) = LWMIN IWORK( 1 ) = LIWMIN * IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN INFO = -11 ELSE IF( LIWORK.LT.LIWMIN .AND. .NOT.LQUERY ) THEN INFO = -13 END IF END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'SSPGVD', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) $ RETURN * * Form a Cholesky factorization of BP. * CALL SPPTRF( UPLO, N, BP, INFO ) IF( INFO.NE.0 ) THEN INFO = N + INFO RETURN END IF * * Transform problem to standard eigenvalue problem and solve. * CALL SSPGST( ITYPE, UPLO, N, AP, BP, INFO ) CALL SSPEVD( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, IWORK, $ LIWORK, INFO ) LWMIN = MAX( REAL( LWMIN ), REAL( WORK( 1 ) ) ) LIWMIN = MAX( REAL( LIWMIN ), REAL( IWORK( 1 ) ) ) * IF( WANTZ ) THEN * * Backtransform eigenvectors to the original problem. * NEIG = N IF( INFO.GT.0 ) $ NEIG = INFO - 1 IF( ITYPE.EQ.1 .OR. ITYPE.EQ.2 ) THEN * * For A*x=(lambda)*B*x and A*B*x=(lambda)*x; * backtransform eigenvectors: x = inv(L)'*y or inv(U)*y * IF( UPPER ) THEN TRANS = 'N' ELSE TRANS = 'T' END IF * DO 10 J = 1, NEIG CALL STPSV( UPLO, TRANS, 'Non-unit', N, BP, Z( 1, J ), $ 1 ) 10 CONTINUE * ELSE IF( ITYPE.EQ.3 ) THEN * * For B*A*x=(lambda)*x; * backtransform eigenvectors: x = L*y or U'*y * IF( UPPER ) THEN TRANS = 'T' ELSE TRANS = 'N' END IF * DO 20 J = 1, NEIG CALL STPMV( UPLO, TRANS, 'Non-unit', N, BP, Z( 1, J ), $ 1 ) 20 CONTINUE END IF END IF * WORK( 1 ) = LWMIN IWORK( 1 ) = LIWMIN * RETURN * * End of SSPGVD * END


Depei Zhang
P1: LC155. Min Stack
Time complexity: O(1)
Leetcode runtime & memory (cpp): 20 ms (99.66%) & 17.1 MB
Solution:
Time complexity: O(n)
Leetcode runtime & memory (cpp): 0 ms (100.00%) & 9.5 MB
Solution:
P3: LC173. Binary Search Tree Iterator
Time complexity: O(n) (BSTIterator()), O(1) (next() & hasNext())
Leetcode runtime & memory (cpp): 32 ms (99.97%) & 24.2 MB
Solution:
Time complexity: O(k * n)
Leetcode runtime & memory (cpp): 0 ms (100.00%) & 8.8 MB
Solution:
P5: LC301. Remove Invalid Parentheses
Time complexity: O(2 ^ n)
Leetcode runtime & memory (cpp): 0 ms (100.00%) & 11.1 MB
Solution:
Time complexity: O(n * m)
Leetcode runtime & memory (cpp): 8 ms (99.78%) & 11.5 MB
Solution:


A representation of a value that may not be yet available but will in the future.
aka Promise
A promise that there will be a value, even if there is none yet.
😢
suspended on await
Ways this could be implemented
(and is, roughly, in many languages).
without error handling for simplicity
Actual implementation would be a bit tricky in rust.
Futures are spawned on executors to become tasks.
std::future::Future
std::task::Poll
Polling is like opening the door to check if the parcel has arrived.
std::task::Context
std::task::Waker
wake
is called once a task can make progress
Example:
⚠ pending futures must call the waker again ⚠
Context
passed around as single pointer
handwavy translation
Borrow across await point. Generator is borrowing from itself.
Usually impossible in rust, because move would invalidate pointers.
std::future::Future
std::pin::Pin
prevents move!Pin
of self-referential type:
unsafe
&mut
only via unsafe
Unpin
marker auto-trait
Pin<&mut>
constructible in safe rust&mut
in safe rustFuture
traitStream
and Sink
traitsUseful for Pin
without unsafe
when manually implementing the Future
trait.
Downloading and converting images.
Still starting all at once though
Asynchronous iterator
std::future::Future
futures::stream::Stream
Poll::Pending
Future
Poll::Ready(Some(…))
Iterator
)Poll::Ready(None)
Stream
finished (like Iterator
)
std::pin::Pin
for self referencesStream
as asynchronous


JavaScript File Creator
File name and type:
Binary (octet/stream)
Text (text/plain;charset=utf-8)
File content


val ideal: Ideal?
If this is an ideal PaymentMethod, this hash contains details about the iDEAL payment method.
ideal


Where does the data come from?
IRS Form 990-PF published in machine-readable format. The raw data files are released by the IRS on a rolling basis and hosted by Amazon Web Services.
Do you make any changes to the data?
All data found on Grantmakers.io is presented exactly as found in the tax filings, with the following exceptions: 1) City Names are converted from UPPERCASE to Titlecase as needed; 2) An 'N/A' label is added to missing or omitted fields in foreign address listings (e.g. if the state field is omitted, Grantmakers.io shows the 'N/A' label).
Can profiles be edited or removed?
We have no control over the information provided in the public dataset by the IRS. Any inquiries as to removing information should be made directly with the IRS.
Does open source mean I can copy this site?
Yes, and we hope you do! All source code and content is published on Github and liberally licensed for open use with the following exceptions: 1) commercial projects will require a license from the author of certain design elements, and 2) we reserve all rights to the Grantmakers.io brand and logo.
Why is Grantmakers.io free?
The better question is why should it cost anything? The source data is published for free by the IRS. The site is hosted for free by Github Pages. The search is provided for free by Algolia. There is zero cost in hosting and maintaining this site.
Who are the people behind this?
Hi, I'm Chad Kruse, the primary author behind Grantmakers.io. While most of the public code commits have my name on them, I couldn't have built this site without the counsel of good friend Joseph Lepis and all of the amazing developers behind the open source projects leveraged to make this site.
How do I get involved?
Fork the code and tell the world what you made and why you made it. We built this site and open sourced all the code to inspire others to explore new ways to disseminate and share philanthropic data.


These are some resources that can help you if you are experiencing Domestic Violence.
 You can't control your partner. But you can take steps to be safer.
These Services can save your life:
Please use this information. To be free of abuse.
Relationship abuse is ugly, even (and especially) when it comes from the people we love.


Notebooks
Story: Tto, 'rooi klip' (how tto is obtained)
Tto, 'rooi klip' (how tto is obtained)
Title
Tto, 'rooi klip' (how tto is obtained)
Collection
Summary
The Bushmen anoint their heads with //hára. (which is black and sparkling), mixed with fat, and rub their bodies with ttò. (L VIII.-14. 7272 rev.,-7276 rev., note). Ttò or 'Roode Klip' is dug out from the mountain side. Precautions to be taken against sorcerers upon these occasions. (L VIII.-14. 7275 and 7276, 7279 and 7380). An account of how tto (rooi klip) is obtained. When the people collect tto, they pound it and then anoint themselves with the mixture as protection against the sorcerers at the tto mine.
Comments
1) pp.7274v-7275v: see ||hara and tto, 2) p.7279v: the people would become ill if the sorcerers at the tto mine were to see them, 3) This story is found in Book VIII-14
Contributors
|han≠kass'o (Klein Jantje) (VIII)
Date
11 August 1878 (started)
Categories
Keywords
tto (`rooi klip') , tto (how it is obtained) , tto (and sorcerers) , tto (the 'mining' of) , tto ('anointing' with) , tto (precautions to be taken against sorcerers when collecting) , tto (is collected along with ||hara) , tto (the preparation of) , tto (found in a mine in the side of the mountain) , tto (obtaining and illness) , mine (tto or 'rooi klip' mine) , mine (what the |xam call it) , mine (people fear it) , mine (sorcerers live there) , mine (throwing stones at) , mine (protection against the sorcerers at) , ||hara (and how Tto or 'rooi klip' is obtained) , ||hara (collected along with tto) , sorcerers (that live in the tto or 'rooi klip' mine) , sorcerers (looking at them makes people ill) , sorcerers (cause illness) , sorcerers (hide when people throw stones at the tto mine) , sorcerers (their actions and doings) , sorcerers (live in holes) , sorcerers (anointing with tto as protection from) , sorcerers (and obtaining tto) , sorcerers (frightening them away) , sorcerers (making them hide) , sorcerers (precautions to be taken against when collecting tto) , name (what the |xam call the tto or 'rooi klip' mine) , illness (caused by sorcerers at the tto or 'rooi klip' mine) , illness (and how tto is obtained) , illness (and looking at sorcerers) , stones (throwing at a tto or 'rooi klip' mine) , stones (and sorcerers)
Story Pages
7275-7276, 7279-7280


Extends PDOStatement
for fluency and logging.
Protected Properties | |
| DB | $db |
Public Methods | |
| $this | __invoke (array $args=null) |
| Fluent execution. More... | |
| string | __toString () |
| The query string. More... | |
| bool | execute ($args=null) |
| Logs. More... | |
| int | getId () |
lastInsertId() More... | |
Protected Methods | |
| __construct (DB $db) | |
| PDO requires this to be protected. More... | |
| $this __invoke | ( | array | $args = null | ) |
| string __toString | ( | ) |
The query string.
| bool execute | ( | $args = null | ) |
Logs.
PHP returns false
instead of throwing if too many arguments were given. This checks for that and throws.
| array | $args |
| ArgumentCountError |
| int getId | ( | ) |
lastInsertId()


Don't Know
Zen Master Seung Sahn. Art from the website prajna-galleries
As many of you know we have been searching for a space to hold our meditation sessions and other events. We sent out a number of emails to area churches and looked at commercial office space to rent. A few times it looked like we found what we were looking for, only to discover some wrinkle that made the space either far less than ideal or unavailable. Last night I heard of the possibility of a fantastic space–better than any we have looked at so far. So the possibility of having a great meditation space may be on the horizon–or maybe not. This morning, while walking my dogs, I realized that this process of looking for a space is similar to the famous Chinese farmer story. For those unfamiliar with it it goes something like this.
Once upon a time there was a Chinese farmer who lost a horse–it ran away. And his neighbors came around that evening and said “That’s too bad! That is most unfortunate!” And he said “maybe.” The next day the horse came back and brought seven wild horses with him. And his neighbors came around that evening and said “Why that is fantastic, isn’t it?” And he said “maybe.” The next day his son was trying to train the wild horses and broke his leg while attempted to ride one. And, of course, the neighbors came around and said “That is awful! That’s too bad!” And the farmer said “maybe.” The following day army officers came around the village conscripting all young men into the military. They rejected the son because of this broken leg. Yet again, the neighbors came around and this time they said “Fantastic news, you must be very happy.” And the farmer said “maybe.”
So is it good news that we found a potentially wonderful meditation space? Maybe
Alan Watts said of the Chinese farmer story:
The This is from his book Eastern Wisdom, Modern Life: Collected Talks 1960-1969 (public library)whole process of nature is an integrated process of immense complexity, and it’s really impossible to tell whether anything that happens in it is good or bad—because you never know what will be the consequence of the misfortune; or, you never know what will be the consequences of good fortune.
I am at a truck stop in west Texas. Someone approaches me as I pump gas, tells me he has no money but he needs to get to Arkansas to stay with his brother. I give him $10. Will the consequences of that act be good or bad? I simply don’t know. Maybe good; maybe bad. We can extend this don’t know mind to everything.
Stephen Batchelor writes Confession of a Buddhist Atheist (public library)of his time in a Zen Monastery in South Korea:
All I do, hour after hour, is ask myself the question What is this? … All I did for ten hours a day for the next three months was ask myself this question. The first two weeks, when my back hurt and my mind swung between febrile daydreamsfebrile daydreams = fever-like daydreams and lethargy, and the last few days, when I strove unsuccessfully not to look forward to the retreat ending, were the hardest. Throughout the long middle period, I experienced an unprecedented contentment.
The point of this exercise, common in Zen, is to
short-circuit the brain’s answer-giving habit and leave you in a state of serene puzzlement. This doubt, or “perplexity” as I preferred to call it, then slowly starts to infuse one’s consciousness as a whole. Rather than struggling with the words of the question, one settles into a mood of quiet focused astonishment, in which one one simply waits and listens in the pregnant silence that follows the fading of words
Zen Master Seung Sahn wrote in a letterThis is from his wonderful book Dropping Ashes on the Buddha: The Teachings of Zen Master Seung Sahn (public library):
You must keep don’t know mind always and everywhere. This is the true practice of Zen.
The Great Way is not difficult
if you don’t make distinctions.
Only throw away likes and dislikes
and everything will be perfectly clear.
So throw away all opinions, all likes and dislikes, and only keep the mind that doesn’t know. This is very important. Don’t know mind is the mind that cuts off all thinking. When all thinking has been cut off, you become empty mind. This is before thinking. Your before thinking mind, my before thinking mind, all people’s before thinking minds are the same. This is your substance. Your substance, my substance, and the substance of the whole universe become one. So the tree, the mountain, the cloud and you become one. Then I ask you: Are the mountain and you the same or different?
The mind that becomes one with the universe is before thinking.


Precise, Secure, Free!
Free microtransactions, buyer/seller shared risk
WiFiota managed and modified fast node with functionality to generate test funds
Ability to find buyers and sellers, without reliance on the Internet
Measured usage per minute (per MB to be implemented in the future)
Securely generated, encrypted seed storage. Send and receive funds directly in-app. No transaction fees.
Configurable time usage limits and buy/sell rates
An IOTA Flash Channel is established between two WiFiota users, after the WiFi connection between the devices has been established. Every minute of client data usage is associated with a token transfer in the channel.
Signing a transfer signifies agreement to pay the billed amount. Limits are enforced via specified buy/sell min/max values set by each user. The equal funding of the channel ensures shared risk between both parties, insuring against a user leaving the channel early.
Checks are implemented to monitor if time sensitive constraints were not fulfilled, such as the channel not being funded, no peers, etc.


Class: SpatialStats::Global::Stat
- Inherits:
-
Object
- Object
- SpatialStats::Global::Stat
- Defined in:
- lib/spatial_stats/global/stat.rb
Overview
Stat is the abstract base class for global stats. It defines the methods that are common between all classes and will raise a NotImplementedError on those that are specific for each type of statistic.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#field ⇒ Object
Returns the value of attribute field.
-
#scope ⇒ Object
Returns the value of attribute scope.
-
#weights ⇒ Object
Returns the value of attribute weights.
Instance Method Summary collapse
-
#expectation ⇒ Float
The expected value of
#stat
. -
#initialize(scope, field, weights) ⇒ Stat
constructor
A new instance of Stat.
- #mc(permutations, seed) ⇒ Object
- #mc_bv(permutations, seed) ⇒ Object
- #stat ⇒ Object
- #variance ⇒ Object
- #x=(values) ⇒ Object (also: #z=)
- #y=(values) ⇒ Object
-
#z_score ⇒ Float
Z-score of the statistic.
Constructor Details
#initialize(scope, field, weights) ⇒ Stat
Returns a new instance of Stat.
11 12 13 14 15 |
# File 'lib/spatial_stats/global/stat.rb', line 11 def initialize(scope, field, weights) @scope = scope @field = field @weights = weights.standardize end |
Instance Attribute Details
#field ⇒ Object
Returns the value of attribute field.
16 17 18 |
# File 'lib/spatial_stats/global/stat.rb', line 16 def field @field end |
#scope ⇒ Object
Returns the value of attribute scope.
16 17 18 |
# File 'lib/spatial_stats/global/stat.rb', line 16 def scope @scope end |
#weights ⇒ Object
Returns the value of attribute weights.
16 17 18 |
# File 'lib/spatial_stats/global/stat.rb', line 16 def weights @weights end |
Instance Method Details
#expectation ⇒ Float
The expected value of #stat
26 27 28 |
# File 'lib/spatial_stats/global/stat.rb', line 26 def expectation raise NotImplementedError, 'method expectation not implemented' end |
#mc(permutations, seed) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/spatial_stats/global/stat.rb', line 51 def mc(permutations, seed) rng = gen_rng(seed) shuffles = [] permutations.times do shuffles << x.shuffle(random: rng) end shuffles = Numo::DFloat.cast(shuffles) # r is the number of equal to or more extreme samples # one sided stat_orig = stat.round(5) # r = 0 # compute new stat values stat_new = stat_mc(shuffles) r = if stat_orig.positive? (stat_new >= stat_orig).count else (stat_new <= stat_orig).count end (r + 1.0) / (permutations + 1.0) end |
#mc_bv(permutations, seed) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/spatial_stats/global/stat.rb', line 76 def mc_bv(permutations, seed) # in multivariate, hold x and shuffle y rng = gen_rng(seed) shuffles = [] permutations.times do shuffles << y.shuffle(random: rng) end shuffles = Numo::DFloat.cast(shuffles) # r is the number of equal to or more extreme samples stat_orig = stat.round(5) stat_new = stat_mc(shuffles) r = if stat_orig.positive? (stat_new >= stat_orig).count else (stat_new <= stat_orig).count end (r + 1.0) / (permutations + 1.0) end |
#stat ⇒ Object
18 19 20 |
# File 'lib/spatial_stats/global/stat.rb', line 18 def stat raise NotImplementedError, 'method stat not defined' end |
#variance ⇒ Object
30 31 32 |
# File 'lib/spatial_stats/global/stat.rb', line 30 def variance raise NotImplementedError, 'method variance not implemented' end |
#x=(values) ⇒ Object Also known as: z=
42 43 44 |
# File 'lib/spatial_stats/global/stat.rb', line 42 def x=(values) @x = values.standardize end |
#y=(values) ⇒ Object
47 48 49 |
# File 'lib/spatial_stats/global/stat.rb', line 47 def y=(values) @y = values.standardize end |
#z_score ⇒ Float
Z-score of the statistic.
38 39 40 |
# File 'lib/spatial_stats/global/stat.rb', line 38 def z_score (stat - expectation) / Math.sqrt(variance) end |


Classes summary
| Address |
This is an Address class to handle addressees from shop. |
| ContactInformation |
This is the Contact Information object of the shop. |
| Currencies |
This is the static class for the currencies in the shop. |
| Date |
This is a Date class to handle date formats. |
| Filter |
This is a filter class to filter several shop objects. |
| FilterOperation |
The Filter Operation 'enum'. |
| HTTPRequestMethod |
The HTTP Request 'enum'. |
| Image |
This is the image class which is used for images. |
| InputValidator |
This class, used by a static way, checks whether a value is valid. |
| JSONHandler |
This is a small simple handler to convert JSON into an array and otherwise. |
| Locales |
This is the static class for the localization. |
| Logger |
This is a static object to log messages while executing. |
| LogLevel |
The Log Level 'enum'. |
| LogOutput |
The Log Output 'enum'. |
| Order |
This is the Order object for an Order in the shop. |
| OrderFilter |
This is a Order Filter class to search orders via the REST call "orders". |
| PaymentMethod |
This is a Payment Method class to handle possible payment methods. |
| Price |
This is the class for Price objects. |
| PriceTaxModel |
The Price Tax Model 'enum'. |
| PriceWithQuantity |
This is the class for Prices which has a Quantity. |
| PrivacyPolicyInformation |
The Privacy Policy Information. |
| Product |
This is the product class for a Product in the shop. |
| ProductAttribute |
This is the Product Attribute class which saves all attributes of a product. |
| ProductFilter |
This is a product filter class to search products via the REST call "product". |
| ProductPrice |
This is the class for prices which belongs to a product. |
| ProductPriceType |
The Product Price Types 'enum'. |
| ProductPriceWithQuantity |
This is the class for prices with quantity which belongs to a product. |
| ProductSlideshow |
This is the product slideshow class which saves all images of the slideshow. |
| RESTClient |
This is the pure REST client. It is used in a static way. |
| RightsOfWithdrawalInformation |
This class is needed for use the information coming from Rights Of Withdrawal. |
| ShippingInformation |
This class is needed for the Shipping Information in the shop. |
| ShippingMethod |
This is a Shipping Method class to handle possible shipping methods. |
| Shop |
This is the epages 6 shop object. |
| TermsAndConditionInformation |
This class is required for showing the information of Terms And Condition. |
| URL |
This is the URL class which is used for URLs. |


nsp -nCoV shown domain Fig. OpenUrl polymerase complex structure RNA motif cryo-EM new nsp-nsp-nsp residues CrossRef SARS-CoV HCV NiRAN map Download N-terminal Open data-hide-link-title=""> data-icon-position="" figure nsp-nsp nsp. particles tab viral β-hairpin (residues coronavirus motifs nsb used (PDB ID: RdRp Structure catalytic conserved corresponding reconstruction remdesivir (A) Science bound data fig. key pp-sofosbuvir processing ;<;div Data Motif [[#xB]]-hairpin image nucleotide observed subdomain template using xmlns=";http://www.w.org//xhtml";>;<;span (B) Cryo-EM Dataset- Figs. incoming pair purification refinement refinement. structures <;strong>;(A)<;/strong>; <;strong>;(B)<;/strong>; Dataset-, Web buffer color colored column contacts form individual palm protein region resolution resolution. scheme set shows similar site target -nCoV, Crystallogr National Raw S). USA) active associated complex. coronaviral defocus disulfide domains. final ions light manganese molecular molecule novel nsp, nsp- panel proteins purified recorded reducing replication research residue sofosbuvir virus (A), (GE (in (nsp-) (orange) ;<;span Abstract Biol DTT Domain Healthcare, Key Materials NTP Protein RNA-dependent Structural Superdex University [[#x]]. analyzed antiviral architecture bonds collected comparison cyan development different domain, entry, exit following images indicate labeled like model molecules polymerase. prodrug refers residues, spheres), stabilize stick structural support synthesis total xmlns=";http://www.w.org//xhtml";


About
Me
Staying on top of your game in a fast moving industry of web development means
you never stop learning and you are constantly improving and learning from others.
Being able to work both in collaborating groups and independantly is very important
in any field, but even more when working with other developers.
I seek a career in which I can apply the skills I've learned in my study of
full-stack web development, and to become an asset to the company in which
I will collaborate with and continue to grow.


Original image URL: {{ url }}
Thumbnail size: {{ thumbnail_size }}
Processing time: {{ duration }} ms
Server hostname: {{ server_name }}
Let's do another one!


Gateway
BOT
27-Aug-18 12:01 PM
[dscrdeql] <Jellysmash> just helps to keep finger on the pulse
[dscrdeql] <SwimedDragon> Yeah, I keep the Equaliser discord on, but it can be confusing at times when there's a soak party
[dscrdeql] <SwimedDragon> Sometimes a couple dozen notes, sometimes a couple hundred haha
[dscrdeql] <SwimedDragon> But since it's in off-topic I think I can be sure to not check all of them
[dscrdeql] <AndronicusBass-Founder> I'm rarely in off-topic I mute it
[dscrdeql] <SwimedDragon> I try to switch there for off-topic talk at times but sometimes the chatter just goes lost between rains and thanks messages, and I end up here
[tlgrm] <AndronicusBass> Thats why I like most conversation in general as it is sent to telegram group and our channel in Komodo discord
[dscrdeql] <AndronicusBass-Founder> So more people can be involved if they want


Node.js Integration
The following information is detected by a Node.js module:
Your operating system is: "
".


WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
Registering, but not testifying:
FOR:
Banks, Yannis (Texas NAACP), Austin, TX
Carpenter, Clint Superintendent (Windham School District), Huntsville, TX
Cohen, Derek Deputy Director (Texas Public Policy Foundation), Austin, TX
Owens, Trey Policy Analyst (Texas Criminal Justice Coalition), Austin, TX
Smith, Douglas Policy Analyst (Texas Criminal Justice Coalition), Austin, TX
ON:
Arbour, Courtney Director Of Workforce (Texas Workforce Commission), Austin, TX
FOR:
Green, Christina Director of Public Affairs (Children's Advocacy Centers of Texas Inc),
Austin, TX
Place, Allen Attorney (Texas Criminal Defense Lawyers Association), Austin, TX
Wilson, Patrick County District Attorney (Ellis County District Attorney's Office),
Waxahachie, TX
Registering, but not testifying:
FOR:
Anderson, Jessica Lieutenant (Houston Police Department), Houston, TX
Giardino, Vincent Assistant Criminal District Attorney (Tarrant County District Attorney's
Office), Fort Worth, TX
Harmon, Micah C. Lavaca County Sheriff (Sheriffs' Association of TX), Hallettsville, TX
Johnson, Noel Government Affairs (Texas Municipal Police Association), Austin, TX
Jones, James Sergeant (San Antonio Police Department), San Antonio, TX
Mills, William Sheriff (Sheriff's Association of Texas), Rockport, TX
Sanford, Tiana Jean Assistant District Attorney (Montgomery County District Attorney),
Conroe, TX
Trochesset, Henry Sheriff Galveston County (Sheriff's Association of Texas), Galveston,
TX
Wilson, Dennis D Limestone Co. Sheriff (Sheriffs Association of Texas), Groesbeck, TX
Wood, Justin Assistant District Attorney (Harris County District Attorney), Houston, TX
FOR:
Clark, John (Self), Richmond, TX
Hohman, Jennifer Community activist (Self), Houston, TX
Madrigal, Allison Founder and President (Rescue Houston), Houston, TX
Sabo, Jason (Children at Risk), Austin, TX
Registering, but not testifying:
FOR:
Joiner, Caroline Executive Director (TechNet), Austin, TX
Sanford, Tiana Jean Assistant District Attorney (Montgomery County District Attorney),
Conroe, TX
WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
ON:
Melton, Kirsta Assistant Attorney General (Office of the Attorney General), Austin, TX
Registering, but not testifying:
FOR:
Anderson, Jessica Lieutenant (Houston Police Department), Houston, TX
Jones, James Sergeant (San Antonio Police Department), San Antonio, TX
Sanford, Tiana Jean Assistant District Attorney (Montgomery County District Attorney),
Conroe, TX
Sinclair, David Legislative Consultant (Game Warden Peace Officer Association),
Pflugerville, TX
AGAINST:
Weiseman, Ryan Legislative Director (Texas Cable Association), Austin, TX
ON:
Melton, Kirsta Deputy Criminal Chief Human Trafficking (Office of the Attorney
General), Austin, TX
Providing written testimony:
ON:
Joiner, Caroline Executive Director (TechNet/ State Privacy and Security Coalition),
Austin, TX
ON:
Creig, Andrea Police Officer (Self), Austin, TX
Edwards, Jenny Criminologist, Author (Self), Snohomish, WA
Jarl, Katie Texas State Director (The Humane Society Of Texas), Austin, TX
Milligan, Jessica Assistant District Attorney (Harris County District Attorneys Office),
Houston, TX
Registering, but not testifying:
ON:
Bokros, Kathleen (Self), Georgetown, TX
Castillon, Oscar (Self), Round Rock, TX
Clark, Erick (Self), Austin, TX
Davis, Bill (Self), Austin, TX
Donahue, Laura Executive Director (Texas Humane Legislation Network), Austin, TX
Ellison, Shana (Self), Austin, TX
Fette, Bernie (Self), Austin, TX
Harmon, Micah C. Lavaca County Sheriff (Sheriffs' Association of TX), Hallettsville, TX
Hensley, Michelle (Self), Round Rock, TX
Holt, Kelly (Self), Austin, TX
Lee, Ranoy (Self), Austin, TX
Look-Jameson, Marion (Self), Austin, TX
Lynch, Natalie Attorney (Self), Austin, TX
McLennan, Daniel (Self), Austin, TX
WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
Mills, William Sheriff (Sheriff's Association of Texas), Rockport, TX
Ozuwa, Jesse Assistant Director, Government Relations (Mayor's Office, City of Houston),
Houston, TX
Padilla, Leslie (Self), Austin, TX
Sanford, Tiana Jean Assistant District Attorney (Montgomery County District Attorney),
Conroe, TX
Sheppard, John (Texas Foundation of Conservation), Austin, TX
Trochesset, Henry Sheriff Galveston County (Sheriff's Association of Texas), Galveston,
TX
Valdez, Gabriel (Self), San Antonio, TX
Wilson, Dennis D. Limestone County Sheriff (Sheriff's Association of texas), Gresback,
TX
FOR:
Cummings, Patricia Director of Litigation and Policy (Self; Innocence Project of New
York and Texas), Austin, TX
Ochoa, Christopher Exoneree (Self; New York Innocent Project/ Exonerees), El Paso, TX
Registering, but not testifying:
FOR:
Banks, Yannis (Texas NAACP), Austin, TX
Bedecarre, Kathryn (Austin Justice Coalition), Austin, TX
Bernhardt, Rebecca Executive Director (Texas Fair Defense Project), Austin, TX
Bokros, Kathleen (Self), Georgetown, TX
Marzullo, Amanda Executive Director (Texas Defender Service), Austin, TX
Moore, Chas President (Austin Justice Coalition), Austin, TX
Place, Shea Attorney (Texas Criminal Defense Lawyers Association), Austin, TX
Simpson, Matt (ACLU of Texas), Austin, TX
Registering, but not testifying:
ON:
Lesko, Mike Assistant Director (Department of Public Safety), Austin, TX
Registering, but not testifying:
FOR:
Allen, Ray Government Affairs (Texas Probation Association), Marble Falls, TX
Brooke, Linda Assistant Director (Tarrant County Juvenile Services), Fort Worth, TX
Brooks, Tom Chief JPO (Harris County Juvenile Probation Department), Houston, TX
Carter, William Chief (Lubbock County Juvenile Justice Association of Officers),
Lubbock, TX
Craven, Morgan (Texas Appleseed), Austin, TX
Cummings, Patricia General Counsel (Self), Austin, TX
Giardino, Vincent Assistant Criminal District Attorney (Tarrant County District Attorney's
Office), Fort Worth, TX
WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
Humphrey, Susan Chief JPO (Bell County Juvenile Services), Killeen, TX
Medina, Estela P. (Juvenile probation department/ juvenile justice association of Texas),
Austin, TX
Quiros, Ronald J. Chief Juvenile Probation Officer (Guadalupe County Juvenile Services),
Seguin, TX
Rose, Lauren Director of Youth Justice Policy (Texans Care for Children), Austin, TX
Sears, Bryant Chief Juvenile Probation (Self), Morton, TX
Shaw, Riley Chair (Juvenile Records Advisory Committee), Fort Worth, TX
Simpson, Matt (ACLU of Texas), Austin, TX
Turner, Stephen Randy Officer-retired (Self; Chief Juvenile Probation Officer), Fort
Worth, TX
Wilkerson, Lynne Chief Juvenile Probation Officer (Bexar County Juvenile Probation), San
Antonio, TX
Williams, Mark Chief Juvenile Probation Officer (Tom Green County and Texas Probation
and Texas Probation Association), San Angelo, TX
ON:
Kanne, Lisa Deputy Associate Commissioner Program Operations (Department of Family
and Protection Services), Austin, TX
Kromrei, Liz CPS Director of Special Projects (Department of Family and Protective
Services), Austin, TX
Singer, Kaci Attorney (Texas Juvenile Justice Department), Austin, TX
Usko, Mike Assistant Director (Department of Public Safety), Austin, TX
FOR:
Cohen, Derek Deputy Director (Texas Public Policy Foundation), Austin, TX
Moore, Brandon State Republican Executive Committee Liaison (Texas Young Republican
Federation), Bedford, TX
AGAINST:
Adler, Randy Attorney (Professional Bondsmen of Texas), Dallas, TX
Burns, John (Self), Houston, TX
Good, Ken W. Attorney (Self), Tyler, TX
Rumenap, Stacie President (Stop Child Predators), Washington, DC
Schatelowitz, Eve Attorney (Criminal defendants and criminal defense bar), Round Rock,
TX
Sims, Randall District Attorney (47th District Attorneys Office), Amarillo, TX
Vannenson, Rodney (Self), Houston, TX
Whitlock, Michael Member (American Bail Coalition), Indianapolis, IN
Woods, Kathleen Owner (Brazoria County Bail Bonds), Angleton, TX
Yenne, Jori District Attorney (Brazoria County District Attorney), Angleton, TX
ON:
Hecht, Nathan Chair (Texas Judicial Council), Austin, TX
Keller, Sharon Presiding Judge (Texas Court of Criminal Appeals), Austin, TX
Mills, William Sheriff (Sheriff Association of Texas), Rockport, TX
Slayton, Dand Executive Director (Texas Judicial Council), Austin, TX
WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
Registering, but not testifying:
FOR:
Bedecarre, Kathryn (Austin Justice Coallition), Austin, TX
Bernhardt, Rebecca Executive Director (Texas Fair Defense Project), Austin, TX
Bokros, Kathleen (Self), Georgetown, TX
Dahill, John B General Counsel (Texas Conference of Urban Counties), Austin, TX
Deitch, Michele (Self), Austin, TX
Gibson-Smith, Stephanie (The Geo Group Inc), Austin, TX
Gonzales, Armando Mr. G. Bail Bonds (Self), Sequin, TX
Hale, Jennifer Just Liberty (Liaison), Fort Worth, TX
Mergler, Mary Director, Criminal Justice project (Texas Appleseed), Austin, TX
Moore, Chas President (Austin Justice Coalition), Austin, TX
Ochoa, Christopher Exoneree (Self), El Paso, TX
Owens, Trey Policy Analyst (Texas Criminal Justice Coalition), Austin, TX
Reagan, Katy Government Relations (Alliance for Safety and justice), Austin, TX
Renaud, Antonio Organizer (Grassroots Leadership), Austin, TX
Simpson, Matt (ACLU of Texas), Austin, TX
AGAINST:
Alexander, David (Self), Conroe, TX
Alexander, Jim (Self), Boyd, TX
Alexander, Joyce (Self), Boyd, TX
Alfaro, Jonathon (Self), Houston, TX
Bailey, Deante Employer (Midtown Bail Bonds), Katy, TX
Ballard, Johnny Owner (Outlaw Bail Bonds), Houston, TX
Banning, Mark (Self), Dilley, TX
Beam, Deanna Owner (Tyler County bail bonds), Hillister, TX
Bucker, Alfred Owner (Mid town Bail Bonds), Houston, TX
Burgher, Angela Owner (Central Bail Bonds 2), Wichita Falls, TX
Burgher, Chase (Self), Iowa Park, TX
Byrd, Michael L. Owner (Self), Brenham, TX
Canales, Ricardo Owner (Bail Bondsman), McAllen, TX
Cantu, Alma Nelly Owner (Bail Bondsman), McAllen, TX
Cantu, Noe Owner (Bail Bondsman), McAllen, TX
Capo, Julliette Proprietor (Hardin county bail bond), Silsbee, TX
Carbajal, Michelle Owner (Bail Bonds), San Marcos, TX
Cary, Mandi General Counsel (Financial Casualty and Surety Inc), Austin, TX
Castaneda, Octavio Owner (Bail Bondsman), McAllen, TX
Claibrone, Cedric Owner (Greerspoint Bail Bond), Houston, TX
Clark, Matt Owner (Freedom Bail Bonds), Georgetown, TX
Cogway, Derell Owner (Cogway's Bail Bonds by Derek), Willis, TX
Cogway, John A. Owner (Cogway's Bail Bonds), Willis, TX
Cook, Cyntheal Bondsman (Set 'Em Free Bail Bonds), Houston, TX
WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
Cox, Patricia C. Owner (Copa Bail Bonds), San Antonio, TX
Cruz, Steve Owner (Lone Star Bonding Company), Houston, TX
Dent, Kim Owner (Self), Harker Height, TX
Dixor, Joshua Bail Agent (Self), Amarillo, TX
Dominguez, Rosemary US Citizen (Self), Houston, TX
Embrey, Clay Owner (River City Bail Bonds), San Antonio, TX
Engle, Billy (Self), Austin, TX
Farias, Kimberly K. (Self), Mission, TX
Farias, Norma Linda (Self), Mission, TX
Farias, Riene (Self), Mission, TX
Franklin, Joel (Self), Georgetown, TX
Freeman, Erindira Owner Bail Bond (Self), Temple, TX
Fregia, David Owner (Bail America), Orange, TX
Gandy, Bianca (Self), Bryan, TX
Gandy, Gage (Self), Bryan, TX
Ganos, Latesia Owner (A1 Bail Bond and Discount Bail Bond), Round Rock, TX
Garcia, Bryan Manager (Self), San Marcos, TX
Garza, Elida Owner (Reyes Bail Bond), McAllen, TX
Giardino, Vincent Assistant Criminal District Attorney (Tarrant County District Attorney's
Office), Fort Worth, TX
Gill, Donia Owner (Johnson County Bail Bonds), Cleburne, TX
Gonzalez, Juan U. Manager (Self), Edinburg, TX
Grandmaison-Warren, Judy Owner (Access Bail Bonds), Houston, TX
Guerra, Randy Aaron Manager (Free Me Bail Bonds), Newbraunfels, TX
Hammons, Cindy Owner (Cindy's Bail Bonds), Angleton, TX
Hampton, Kelvin Sr. Owner (A-Better Bail Bond), Houston, TX
Handy, Catherine Owner (Mission Bail Bonds), Fort Worth, TX
Harper, Chuquilla Bonding Agent (Set 'Em Free Bail Bonds), Houston, TX
Herrerq, Robert (Self), Jourdanton, TX
Hodnett, Camille Owner/Licensed Bail Bonds Person (Bail Bonds by Camille), Fort Worth,
TX
Holcomb, Darlene Agent (Access Bail Bonds), Houston, TX
Howl, Anthony (Self), Arlington, TX
Joelson, Ashley (Self), Newbraunfels, TX
Jones, Dave Owner (Chachi's Bail Bonds), Rio Grande City, TX
Jones, James A. Owner (Professional Bondsmen of Texas), Weatherford, TX
Kennecke, Chris Bail Agent (Self), Amarillo, TX
King, Leisha (Self), Austin, TX
Kowalski, Jorge (Self), Brownsville, TX
Lane, James (Self), Weatherford, TX
Lee, Cory (Self), Abilene, TX
Lilliman, Gale (Self), Galveston, TX
Long, Ronnie Board of trustees (Professional bondsman of Texas), Fort Worth, TX
WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
Martinez, Juan Manuel (Pronto Bail Bonds), Brownsville, TX
Mata, Ruben Bond Agent (Ranger Bail Bonds), Cockrell Hill, TX
McClevelano, Sharon Owner (Sellem Free Bail Bond), Houston, TX
McCluskey, John Owner (Professional Bondsmen of Texas), Houston, TX
McEachern, Nicole D (Self), Houston, TX
McElhany, Troy Citizen (Self), Houston, TX
Meeker, Glenn President (Professional Bondsmen of Texas), Sequin, TX
Montemayor, Irma (Self), Edinburg, TX
Nicklas, Clay Owner (Self; Family Owned Bail Bond Business), Canton, TX
OConnor, Michael (Self), Weatherford, TX
Ortega, Monica Bond Agent (Self), Temple, TX
Ortega, Rease Owner (Self), McAllen, TX
Panoneks, Keith Owner (Ranger Bail Bonds), Dallas, TX
Pastor, Virginia (Professional Bondsman of Texas), Houston, TX
Pastor, William Board of Director (Professional Bondsman of Texas), Houston, TX
Patrick, Richard (Self), Varrel, TX
Peal, Scott R. County Attorney (Chambers County Attorney's Office), Anahuac, TX
Pedigo, Renell Owner (Professional Bondsmen of Texas), Conroe, TX
Perez, Alfonso Owner (Copa Bail Bonds), San Antonio, TX
Peters, Joseph (Green Point Bail Bond), Houston, TX
Pierce, Freddy Manager (Self), Georgetown, TX
Rios, Sylvia A. (Ranger Bail Bonds), Dallas, TX
Rodriguez, Domingo Owner (Self), Edinburg, TX
Rogers, Cary (Self), Dallas, TX
Salinas, Romona (Self), Edinburg, TX
Sanchez, Nicole Owner (Free Me Bail Bonds), Newbraunfels, TX
Sanchez, Sylvia Owner (Texas Bail Bonds), Newbraunfels, TX
Schuder, Eddy Owner (Custom Bail Bonds), Fort Worth, TX
Schuder, Paul Bondsman (PCS Bail Bonds), Fort Worth, TX
Simonesut, David Wayne (Self), Conroe, TX
Sondag, Elliot Owner (AAAA Bail Bonds), Conroe, TX
Sonday, Jerry N/A (Self), Conroe, TX
Stanley, Stan (Self), Austin, TX
Stehr, Audrey Agent (Mission Bail Bonds), Fort Worth, TX
Steirman, Patrick Citizen (Self), Willis, TX
Stephens, Tammy Owner (Self), Galveston, TX
Suarez, Mary Ann Office Manager (Set 'Em Free Bail Bonds), Houston, TX
Taylor, Eric Manager (Central Bail Bonds 2- Lubbock), Lubbock, TX
Templeton, Cherry (Self), Newbraunfels, TX
Templeton, Dennis (Self), Newbraunfels, TX
Trejo-Adair, Denise Office Manager (Self), Houston, TX
Villarell, Joseph (PBHC Professional Bondsmen Harris County), Houston, TX
Villarreal, Irene M. Owner (3-Amigo's Bonding), Houston, TX
WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
Walker, Beverley Bondsman- Bail Agent (Self), Houston, TX
Webb, Melinda Treasurer (Professional Bondsmen of Texas), Denton, TX
Webb, Randy Member (Professional Bondsmen of Texas), Denton, TX
Westmoreland, Davie Owner (Big Tex Bail Bonds), Bryan, TX
Whittield, Mattiz (Mid town Bail Bonds), Cypress, TX
Williams, Daniel (Self), Austin, TX
Williams, Greg (Self), Lubbock, TX
Williams, Joseph S Vice President (Lexington National Insurance Corporation),
Lutherville, MD
Williams, Justin (Self), Lubbock, TX
Wilson, Lee Owner (Self; Ace Bail Bonds), Lumberton, TX
Zak, Jessica Owner-Bondsman (Bail Bonding Industry- Austin Bail Bonds), Austin, TX
Zamora, Jimmy Manager (Self), Newbraunfels, TX
Zavala, John A. Owner (Around the Clock Bail Bonds), Austin, TX
Providing written testimony:
FOR:
Thompson, Sandra Professor (Greater Houston Coalition for Justice), Houston, TX
FOR:
Shaw, Riley Deputy Chief- Criminal Division (Tarrant County Criminal District Attorneys
Office), Fort Worth, TX
Williams, Thomas (Self), Fort Worth, TX
ON:
Deitch, Michele Senior Lecturer (Self), Austin, TX
Registering, but not testifying:
FOR:
Baggett, Donnis Executive Vice President (Texas Press Association), Austin, TX
Giardino, Vincent Assistant Criminal District Attorney (Tarrant County District Attorney's
Office), Fort Worth, TX
Hall, Jennifer (Self), Fort Worth, TX
Moore, Brandon State Republican Executive Committee Liaison (Texas Young Republican
Federation), Bedford, TX
Schneider, Michael Vice President of Legislative & Regulatory Affairs (Texas Association
of Broadcasters), Austin, TX
Shannon, Kelley Executive Director (Freedom of Information Foundation of Texas),
Austin, TX
AGAINST:
Cummings, Patricia General Counsel (Self), Austin, TX
Williams, Mark Chief Juvenile Probation Officer (Tom Green County and Texas Probation
and Texas Probation Association), San Angelo, TX
ON:
Carter, William Chief (Lubbock County Juvenile Justice Association of Officers),
Lubbock, TX
WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
Singer, Kaci Attorney (Texas Juvenile Justice Department), Austin, TX
Slayton, David Administrative Director (Office of Court Administration), Austin, TX
FOR:
Baggett, Donnis Executive Vice President (Texas Press Association), Austin, TX
England, Brian Deputy City Attorney (City of Garland), Garland, TX
Registering, but not testifying:
FOR:
Bedecarre, Kathryn (Austin Justice Coalition), Austin, TX
Jones, James Sgt. (San Antonio Police Department), San Antonio, TX
Moore, Chas President (Austin Justice Coalition), Austin, TX
Schneider, Michael Vice President of Legislative & Regulatory Affairs (Texas Association
of Broadcasters), Austin, TX
Selbrede, Kathleen (Self), Georgetown, TX
Shannon, Kelley Executive Director (Freedom of Information Foundation of Texas),
Austin, TX
Registering, but not testifying:
FOR:
Allen, Ray Government Affairs Representative (Texas Probation Association), Austin, TX
Brooke, Linda Assistant Director (Tarrant County Juvenile Services), Fort Worth, TX
Brooks, Tom Chief JPO (Harris County Juvenile Probation Department), Houston, TX
Carter, William Chief (Lubbock County Juvenile Justice Association of Officers),
Lubbock, TX
Craven, Morgan (Texas Appleseed), Austin, TX
Hubner, Chris General Counsel (Travis Co. Juvenile Probation Department), Austin, TX
Humphrey, Susan Chief JPO (Bell County Juvenile Services), Killeen, TX
Medina, Estela P. Chief Juvenile Probation Officer (Juvenile probation department/
juvenile justice association of Texas), Austin, TX
Mendez, Mark Assistant County Administrator (Tarrant County Commissioners Court),
Fort Worth, TX
Quiros, Ronald J. Chief Juvenile Probation Officer (Guadalupe County Juvenile Services),
Seguin, TX
Rose, Lauren Director of Youth Justice Policy (Texans Care for Children), Austin, TX
Sears, Bryant Chief Juvenile Probation (Self), Morton, TX
Turner, Stephen Randy Officer-retired (Self; Chief Juvenile Probation Officer), Fort
Worth, TX
Wilkerson, Lynne Chief Juvenile Probation Officer (Bexar County Juvenile Probation), San
Antonio, TX
Williams, Mark Chief Juvenile Probation Officer (Tom Green County and Texas Probation
and Texas Probation Association), San Angelo, TX
ON:
Kanne, Lisa Deputy Associate Commissioner Program Operations (Department of Family
and Protection Services), Austin, TX
WITNESS LIST
Criminal Justice
April 4, 2017 1:30 PM - or upon adjournment
Kromrei, Liz CPS Director of Special Projects (Department of Family and Protective
Services), Austin, TX
Singer, Kaci Attorney (Texas Juvenile Justice Department), Austin, TX


Kappa Alpha Psi was founded on the campus of Indiana University on January 5th, 1911. The Fraternity's fundamental purpose is achievement.
Early in the last century, African-American students were actively dissuaded from attending college. Formidable barriers were put up to prevent the few who were enrolled from assimilating into co-curricular campus life. This ostracism characterized Indiana University in 1911, thus triggering Elder W. Diggs, Byron K. Armstrong, and eight other Black students to form Kappa Alpha Psi Fraternity, which remains the only Greek letter organization with its 1st Chapter on the University's campus.
The founders wanted a formula that would immediately raise the sights of Black collegians and stimulate them to accomplishments higher than they might have imagined. Fashioning achievement as its purpose, Kappa Alpha Psi set in motion uniting college men of culture, patriotism and honor in a bond of fraternity.
Elder Watson Diggs "The Dreamer"
Dr. Ezra Dee Alexander
Dr. Byron Kenneth Armstrong
Attorney Henry Tourner Asher
Dr. Marcus Peter Blakemore
Paul Waymond Caine
George Wesley Edmonds
Dr. Guy Levis Grant
Edward Giles Irvin
Sergeant John Milton Lee