About Us
ebook-shala : All your course books under one roof.
ebook-shala is an online domain that provides a large number of Reference Books at absolutely no cost. An online library that has books on various subjects in pdf format for you, ready to be downloaded - No Registration , No Account Creation.
We cover subjects at college level and have a variety of popular reference books in each topic. Choose the books that suits you the most from our ever-expanding database.
Currently our library has collection of approximately 100 books that cover topics in two most persuaded fields- Engineering & Medical and we are working hard to expand our database to cover more fields as well.
Meet The Developers Divij Bhatia Web Developer Pranav Sharma App Developer Aditya Jain App Developer


Animate the properties of elements between colors.
jQuery UI bundles the jQuery Color plugins which provides color animations as well as many utility functions for working with colors.
Want to learn more about color animations? Check out the jQuery Color documentation.


--- layout: default ---
BostonHacks hosts on campus workshops throughout the year. Come hang out, have fun, and learn, even when it's not the hackathon season. You can follow us on Facebook or Twitter for updates!
{{ pw.date }}
{{ pw.description }}
Facebook Event


#include <GrPolygon.h>
Classes | |
| struct | SRayIntersectInfo |
Public Types | |
| enum | EFLAGVALUE { EFV_EDGEPOLY = 1 } |
| enum | EPLANERELATION { EPR_BACK, EPR_FRONT, EPR_SPLIT, EPR_COPLANAR } |
Public Member Functions | |
| GrPolygon () | |
| class GrPolygon | |
| GrPolygon (unsigned int flags, const SPolygonVertex *verts, unsigned int vertexCount, GrMaterial *material) | |
| initializes as degenerate ( no verts ). | |
| GrPolygon (unsigned int flags, const SPolygonVertex *verts, unsigned int vertexCount, GrMaterial *material, const MPlane &plane) | |
| GrPolygon (const GrPolygon &polygon) | |
| GrPolygon (UReader &polygon) | |
| GrPolygon (unsigned int flags, const SPolygonVertex &v0, const SPolygonVertex &v1, const SPolygonVertex &v2, GrMaterial *material) | |
| ~GrPolygon () | |
| dtor. | |
| unsigned int | GetVertexFlags () const |
| void | SetVertexFlags (unsigned int flags) |
| void | SetVertices (unsigned int flags, const SPolygonVertex *verts, unsigned int vertexCount, GrMaterial *material) |
| sets vertices for the polygon. | |
| void | SetVertices (unsigned int flags, const SPolygonVertex *verts, unsigned int vertexCount, GrMaterial *material, const MPlane &plane) |
| void | SetSkinningInfo (SPolygonSkinVertex *skinVertArray) |
| void | RemapBoneIndices (unsigned int *indices) |
| bool | IsSkinned () const |
| void | SetUserFlag (EFLAGVALUE flagValue) |
| user flag management... can assign flags to various polygons. | |
| void | ClearUserFlag (EFLAGVALUE flagValue) |
| unsigned int | GetUserFlags () const |
| void | SetUserData (unsigned int data) |
| user data get/set. | |
| unsigned int | GetUserData () const |
| unsigned int | GetVertexCount () const |
| vertex information. | |
| const SPolygonVertex & | GetVertex (unsigned int i) const |
| SPolygonVertex & | GetVertex (unsigned int i) |
| URef< GrMaterial > | GetMaterial () const |
| material information. | |
| void | SetMaterial (URef< GrMaterial > material) |
| URef< GrUberTexture > | GetUberTexture () const |
| ubertexture information. | |
| void | SetUberTexture (URef< GrUberTexture > texture) |
| unsigned int | GetTriangleCount () const |
| void | Triangulate (SPolygonTriangle *triangles, SPolygonTriangleSkin *triangleSkinArray=0) const |
| void | Triangulate (SPolygonVertex *triangleList) const |
| const MPlane & | GetPlane () const |
| returns the plane the verts lie on. | |
| const MVec3 & | GetNormal () const |
| bool | Intersect (SRayIntersectInfo &info, const SVec3 &rayStart, const SVec3 &rayDir, float maxDist) const |
| float | IntersectFast (const SVec3 &rayStart, const SVec3 &rayDir, float maxDist) const |
| int | Split (GrPolygon &front, GrPolygon &back, const MPlane &plane, float planeDistEpsilon) const |
| EPLANERELATION | CalcPlaneRelation (const MPlane &plane, float planeDistEpsilon) const |
| bool | CheckTJunc (const GrPolygon &polygon, float epsilon) |
| bool | IsDegenerate (float epsilon) const |
| checks to see if it is degenerate. | |
| bool | RemoveDuplicateVerts (float distEpsilonSqr) |
| void | WeldVertices (const GrPolygon &polygon, float distEpsilonSqr) |
| void | ReverseWinding () |
| reverses the winding order of the polygon. | |
| bool | IsEdgePolygon (const MPlane &plane, float planeDistEpsilon) const |
| checks to see if the polygon has an edge on the plane passed in. | |
| bool | IsCoplanar (const MPlane &plane, float epsilon) const |
| checks to see if the polygon is coplanar to the plane passed in. | |
| bool | IsNeighbor (const GrPolygon &polygon, float epsilon=0.001f) const |
| returns line segments that lie on the plane passed in. | |
| GrPolygon | Transform (const MMat4x4 &transform, const MMat3x3 &normalRot) const |
| void | TransformFast (const MMat4x4 &transform, const MMat3x3 &normalRot) |
| float | GetArea () const |
| returns the area of the triangle. | |
| GrPolygon & | operator= (const GrPolygon &polygon) |
| assignment operator. | |
| void | Save (UWriter &writer) const |
| save/load | |
| void | Load (UReader &reader) |
Static Public Attributes | |
| static const unsigned int | kNormal = 0x01 |
| valid flags. | |
| static const unsigned int | kTangent = 0x02 |
| static const unsigned int | kBiNormal = 0x04 |
| static const unsigned int | kColor = 0x08 |
| static const unsigned int | kUV = 0x10 |
| static const unsigned int | kUniqueUV = 0x20 |
Definition at line 70 of file GrPolygon.h.
| GrPolygon::GrPolygon | ( | ) |
class GrPolygon
initializes completely. Assumes ownership of pointers if arraySize is not 0.
ctor & dtor
Definition at line 90 of file GrPolygon.cpp.
| GrPolygon::GrPolygon | ( | unsigned int | flags, | |
| const SPolygonVertex * | verts, | |||
| unsigned int | vertexCount, | |||
| GrMaterial * | material | |||
| ) |
| GrPolygon::GrPolygon | ( | unsigned int | flags, | |
| const SPolygonVertex * | verts, | |||
| unsigned int | vertexCount, | |||
| GrMaterial * | material, | |||
| const MPlane & | plane | |||
| ) |
Definition at line 113 of file GrPolygon.cpp.
| GrPolygon::GrPolygon | ( | const GrPolygon & | polygon | ) |
Definition at line 126 of file GrPolygon.cpp.
| GrPolygon::GrPolygon | ( | UReader & | polygon | ) |
Definition at line 140 of file GrPolygon.cpp.
| GrPolygon::GrPolygon | ( | unsigned int | flags, | |
| const SPolygonVertex & | v0, | |||
| const SPolygonVertex & | v1, | |||
| const SPolygonVertex & | v2, | |||
| GrMaterial * | material | |||
| ) |
Definition at line 151 of file GrPolygon.cpp.
| GrPolygon::~GrPolygon | ( | ) |
| GrPolygon::EPLANERELATION GrPolygon::CalcPlaneRelation | ( | const MPlane & | plane, | |
| float | planeDistEpsilon | |||
| ) | const |
go through all vertices and determine the side.
initialize the relation.
both sides.
return the relation we've determined.
Definition at line 470 of file GrPolygon.cpp.
| bool GrPolygon::CheckTJunc | ( | const GrPolygon & | polygon, | |
| float | epsilon | |||
| ) |
we can't perform this on skinned vertices! How would we determine what bone(s) the any new verts are influenced by?
if both polygons aren't edge polygons, then there is no possibility of a t-junction.
determine the squared epsilon.
check for a t-junction.
get the current current vertex in the other polygon.
if the current point on the other polygon resides on one of our vertices, ignore it.
check for a point residing on the current edge.
allocate and generate a new vertex. Weld it's position to the other polygon's position.
add new vertices. all done.
make sure it's clear on exit since this variable is static.
return true if we've added vertices to fix t-junctions.
Definition at line 604 of file GrPolygon.cpp.
| void GrPolygon::ClearUserFlag | ( | EFLAGVALUE | flagValue | ) | [inline] |
Definition at line 134 of file GrPolygon.h.
| float GrPolygon::GetArea | ( | ) | const |
returns the area of the triangle.
fan the polygon and calculate area for each triangle.
get edge vectors of the current triangle.
skip this triangle if one of the edges is 0 length as it obviously has no area.
calculate the area of the current triangle.
return the total area.
Definition at line 857 of file GrPolygon.cpp.
| URef< GrMaterial > GrPolygon::GetMaterial | ( | ) | const |
| const MVec3& GrPolygon::GetNormal | ( | ) | const [inline] |
Definition at line 162 of file GrPolygon.h.
| const MPlane& GrPolygon::GetPlane | ( | ) | const [inline] |
| unsigned int GrPolygon::GetTriangleCount | ( | ) | const [inline] |
triangulates the polygon. triangles must be large enough to hold all of the triangles. Queried the needed size by using GetTriangleCount().
Definition at line 156 of file GrPolygon.h.
| URef< GrUberTexture > GrPolygon::GetUberTexture | ( | ) | const |
| unsigned int GrPolygon::GetUserData | ( | ) | const [inline] |
Definition at line 139 of file GrPolygon.h.
| unsigned int GrPolygon::GetUserFlags | ( | ) | const [inline] |
Definition at line 135 of file GrPolygon.h.
| SPolygonVertex& GrPolygon::GetVertex | ( | unsigned int | i | ) | [inline] |
Definition at line 144 of file GrPolygon.h.
| const SPolygonVertex& GrPolygon::GetVertex | ( | unsigned int | i | ) | const [inline] |
Definition at line 143 of file GrPolygon.h.
| unsigned int GrPolygon::GetVertexCount | ( | ) | const [inline] |
| unsigned int GrPolygon::GetVertexFlags | ( | ) | const [inline] |
indicates what components of the vertices are being used ( kNormal, kTangent, etc ). Note that position is implied.
Definition at line 117 of file GrPolygon.h.
| bool GrPolygon::Intersect | ( | SRayIntersectInfo & | info, | |
| const SVec3 & | rayStart, | |||
| const SVec3 & | rayDir, | |||
| float | maxDist | |||
| ) | const |
performs a fast intersection test on the polygon using the ray passed in. This is faster than iterating through triangles and using the ray's test routine because it avoids a lot of SVec3->MVec3 implicit conversions.
calculate the point on the triangle's plane along the ray.
skip test if we're facing the direction of the ray (backfacing to the ray).
get the first position in the polygon.
calculate the distance along the ray to the plane.
calculate where we intersect the plane the triangle lies on.
using the face normal, find the dominant axis so we can perform our triangle-ray tests in 2D.
we only need to go through this loop twice... if we fail the first two times, then we know the third axis is the dominant one.
choose an axis to throw away and solve in 2D.
now fan the polygon and perform ray tests with each triangle.
get the other points on the current triangle.
calculate the barycentric coordinates.
return true if we're inside the triangle.
if we got here, then we don't intersect with any triangles in the polygon.
Definition at line 307 of file GrPolygon.cpp.
| float GrPolygon::IntersectFast | ( | const SVec3 & | rayStart, | |
| const SVec3 & | rayDir, | |||
| float | maxDist | |||
| ) | const |
calculate the point on the triangle's plane along the ray.
skip test if we're facing the direction of the ray (backfacing to the ray).
get the first position in the polygon.
calculate the distance along the ray to the plane.
divide distance by cos theta.
calculate where we intersect the plane the triangle lies on. note that this becomes rayStart + distance * rayDir - pt0, which is the same as vec + distance * rayDir where vec = rayStart - pt0.
choose an axis to throw away and solve in 2D.
now fan the polygon and perform ray tests with each triangle.
get the other points on the current triangle.
calculate the barycentric coordinates.
return true if we're inside the triangle.
if we got here, then we don't intersect with any triangles in the polygon.
Definition at line 399 of file GrPolygon.cpp.
| bool GrPolygon::IsCoplanar | ( | const MPlane & | plane, | |
| float | epsilon | |||
| ) | const |
checks to see if the polygon is coplanar to the plane passed in.
if we're facing wildly different directions, return false.
go through all vertices checking to see if we're coplanar.
if we made it through all vertices, then we're coplanar.
Definition at line 756 of file GrPolygon.cpp.
| bool GrPolygon::IsDegenerate | ( | float | epsilon | ) | const |
checks to see if it is degenerate.
less then 3 verts, then its definately degenerate.
Definition at line 672 of file GrPolygon.cpp.
| bool GrPolygon::IsEdgePolygon | ( | const MPlane & | plane, | |
| float | planeDistEpsilon | |||
| ) | const |
checks to see if the polygon has an edge on the plane passed in.
this function returns true if an edge lies on the plane passed in. Since we know the polygon will be convex, if two or more vertices lie on the plane in question, then we are an edge polygon.
if we on the plane and there are two vertices on the plane so far, then we know we have an edge polygon.
Definition at line 736 of file GrPolygon.cpp.
| bool GrPolygon::IsNeighbor | ( | const GrPolygon & | polygon, | |
| float | epsilon = 0.001f | |||
| ) | const |
returns line segments that lie on the plane passed in.
returns true if the polygon passed in is a neighbor of this polygon.
This function checks edges to see if they match up. The edges must be going opposite direction or else they are not considered neighbors.
go through each edge in this polygon.
go through each edge in the polygon passed in.
check to see if our vertices match up and the edge direction is opposing.
if we get here then the polygon is not a neighbor.
Definition at line 776 of file GrPolygon.cpp.
| bool GrPolygon::IsSkinned | ( | ) | const [inline] |
Definition at line 130 of file GrPolygon.h.
| void GrPolygon::Load | ( | UReader & | reader | ) |
write the polygon flags.
write the polygon vertices.
save the skin vertices.
save the material name.
save the plane.
save user flags.
save the skinned flag.
Definition at line 948 of file GrPolygon.cpp.
| void GrPolygon::RemapBoneIndices | ( | unsigned int * | indices | ) |
| bool GrPolygon::RemoveDuplicateVerts | ( | float | distEpsilonSqr | ) |
remove any duplicate verts.
remove the current vertex and process the next one.
return false if the polygon is now degenerate.
Definition at line 680 of file GrPolygon.cpp.
| void GrPolygon::ReverseWinding | ( | ) |
reverses the winding order of the polygon.
create an array with vertices reversed in order.
set the vertices.
Definition at line 722 of file GrPolygon.cpp.
| void GrPolygon::Save | ( | UWriter & | writer | ) | const |
save/load
write the polygon flags.
write the polygon vertices.
save the skin vertices.
save the material name.
save the plane.
save user flags.
save the skinned flag.
Definition at line 899 of file GrPolygon.cpp.
| void GrPolygon::SetMaterial | ( | URef< GrMaterial > | material | ) |
Definition at line 243 of file GrPolygon.cpp.
| void GrPolygon::SetSkinningInfo | ( | SPolygonSkinVertex * | skinVertArray | ) |
sets skinning info for the polygon. There should be one entry for every vertex in the polygon.
Definition at line 206 of file GrPolygon.cpp.
| void GrPolygon::SetUberTexture | ( | URef< GrUberTexture > | texture | ) |
Definition at line 257 of file GrPolygon.cpp.
| void GrPolygon::SetUserData | ( | unsigned int | data | ) | [inline] |
| void GrPolygon::SetUserFlag | ( | EFLAGVALUE | flagValue | ) | [inline] |
user flag management... can assign flags to various polygons.
Definition at line 133 of file GrPolygon.h.
| void GrPolygon::SetVertexFlags | ( | unsigned int | flags | ) | [inline] |
Definition at line 118 of file GrPolygon.h.
| void GrPolygon::SetVertices | ( | unsigned int | flags, | |
| const SPolygonVertex * | verts, | |||
| unsigned int | vertexCount, | |||
| GrMaterial * | material, | |||
| const MPlane & | plane | |||
| ) |
Definition at line 193 of file GrPolygon.cpp.
| void GrPolygon::SetVertices | ( | unsigned int | flags, | |
| const SPolygonVertex * | verts, | |||
| unsigned int | vertexCount, | |||
| GrMaterial * | material | |||
| ) |
| int GrPolygon::Split | ( | GrPolygon & | front, | |
| GrPolygon & | back, | |||
| const MPlane & | plane, | |||
| float | planeDistEpsilon | |||
| ) | const |
splits the polygon by a plane. The return value is 1 if there is only a front polygon, -1 if there is only a back polygon, and 0 if there is both a front and back polygon.
get the number of vertices.
place to store vertices in front and in back.
get the starting vertex.
get the starting side.
are we entirely coplanar?
choose the side the polygon is facing.
simply go through the vertices and classify.
update previous vertex info.
if we're not coplanar, we need to create the polygon.
Definition at line 494 of file GrPolygon.cpp.
transforms the polygon by the matrix specified and returns a new polygon.
Definition at line 809 of file GrPolygon.cpp.
transform all of the points by the matrix passed in.
transform the plane the points lie in.
Definition at line 818 of file GrPolygon.cpp.
| void GrPolygon::Triangulate | ( | SPolygonVertex * | triangleList | ) | const |
| void GrPolygon::Triangulate | ( | SPolygonTriangle * | triangles, | |
| SPolygonTriangleSkin * | triangleSkinArray = 0 | |||
| ) | const |
fan the polygon.
there should be one skin vertex for every vertex.
Definition at line 264 of file GrPolygon.cpp.
| void GrPolygon::WeldVertices | ( | const GrPolygon & | polygon, | |
| float | distEpsilonSqr | |||
| ) |
check to see if any polygon verts need to be welded together.
lets weld.
Definition at line 704 of file GrPolygon.cpp.
const unsigned int GrPolygon::kBiNormal = 0x04 [static] |
Definition at line 76 of file GrPolygon.h.
const unsigned int GrPolygon::kColor = 0x08 [static] |
Definition at line 77 of file GrPolygon.h.
const unsigned int GrPolygon::kNormal = 0x01 [static] |
const unsigned int GrPolygon::kTangent = 0x02 [static] |
Definition at line 75 of file GrPolygon.h.
const unsigned int GrPolygon::kUniqueUV = 0x20 [static] |
Definition at line 79 of file GrPolygon.h.
const unsigned int GrPolygon::kUV = 0x10 [static] |
Definition at line 78 of file GrPolygon.h.


Puppet Class: r_profile::linux::sysctl
- Defined in:
- manifests/linux/sysctl.pp
Overview
R_profile::Linux::Sysctl
Control sysctl values (kernel tuning) on Linux. Not to be confused with systemctl (services).
Settings will take place immediately when puppet is run and will also be persisted /etc/sysctl.d to survive across reboots. There is no support in this class for removing entries that have previously been set since the previous setting is unknowable. If restoring a previously tuned parameter to its default is required, the manual restoration steps on each agent are: 1. Remove the setting from the passed in $settings list (hiera data) 2. Remove the corresponding file under /etc/sysctl.d on the agent node 3. Reboot…
Alternatively, set the $purge option to true and now puppet will remove unmanaged files under /etc/sysctl.d for us. The process now looks like this: 1. Remove the setting from the passed in $settings list (hiera data) 2. Reboot…
Settings to enforce should be passed as a hash via the settings parameter, eg
Hiera: r_profile::linux::sysctl::settings: net.ipv4.conf.all.accept_redirects: 0 net.ipv4.tcp_syncookies: 1
Puppet code: { 'net.ipv4.conf.all.accept_redirects' => 0, 'net.ipv4.tcp_syncookies' => 1 }
Requires: thias/puppet-sysctl
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'manifests/linux/sysctl.pp', line 37
class r_profile::linux::sysctl(
Boolean $purge = hiera('r_profile::linux::sysctl::purge', false),
Hash[String, Any] $settings = hiera('r_profile::linux::sysctl::settings', {})
){
# enable purging to work, if selected
class { "sysctl::base":
purge => $purge,
}
$settings.each |$key, $value| {
sysctl { $key:
value => $value,
notify => Exec["flush_routing_tables"],
}
}
exec { "flush_routing_tables":
command => "/sbin/sysctl -w net.ipv4.route.flush=1",
refreshonly => true,
}
}
|


UserManager
class UserManager
Class UserManager manages the creating of new users, updating existing users and removing users.
Properties
| array | $errors | Errors are kept in an array and can be used later if validation fails and we want to know why | |
| string | $messages | Messages which we can store why validation failed |
Methods
Construct a new user manager
Create rules for a new user
Create a new user
These are update rules for a user
Update a new user
Delete a user
Register new user
Activate instance of DvsUser
Generate a random "activate_code" string
Removes users which have been awaiting activation (after registering). Currently, default is 30 days outstanding
Details
at line 64
__construct(DvsUser $DvsUser, Framework $Framework)
Construct a new user manager
at line 76
array
createRules()
Create rules for a new user
at line 93
DvsUser
createUser(array $input)
Create a new user
at line 124
array
updateRules(integer $id, array $input)
These are update rules for a user
at line 150
DvsUser
updateUser(integer $id, array $input)
Update a new user
at line 184
boolean
destroyUser(integer $id)
Delete a user
at line 197
Boolean
registerUser(array $input, integer $groupId = 3)
Register new user
at line 219
boolean
activate(DvsUser $user)
Activate instance of DvsUser
at line 233
void
generateActivateCode(DvsUser $user, integer $length = 42)
Generate a random "activate_code" string
at line 245
Boolean
removeUnactivatedUsers($daysOutstanding = 30)
Removes users which have been awaiting activation (after registering). Currently, default is 30 days outstanding


| |
| |
|
MESSAGE FROM THE CHAIR
|
| |
| |
Dear Alumni and Friends,
I write this as I listen to the virtual presentations at the Matrix of Mobility conference organized by our fabulous Graduate Union of Students of Art (or GUStA). In the face of massively limited mobility, the connectivity offered by our online platforms provides invaluable respite and allows our academic mission to continue.
I cannot help but think of the area I study, the ancient Mediterranean, where around 4,000 years ago the sail was an innovation that significantly extended the potential for connectivity. Surely not everyone would have had access to this technology, though. Technologies may enable connectivity but do not always result in mobility.
With the pandemic, we are all made quite aware of the disconnect between connectivity and mobility—between the potential and the actual. We can go on for a while with one and not the other. At some point soon, the need for mobility will again become pressing. For those of us with archaeological fieldwork projects, it already has. Such projects provide a key part of academic training that cannot be attained online. The process of discovery, of producing knowledge through hands-on engagement with the materials as they come to light, is irreplaceable. Such materials are resolutely unavailable online. I and other colleagues with such projects cannot wait to introduce our students to this invaluable dimension of their education. We wait to hear when this may again become possible.
One very successful aspect of our online departmental life seems to be the research talk. For our recent Peter H. Brieger Memorial Lecture, given by Dr. Stephen Campbell, more than 200 people registered, many of whom were alumni. We have another exciting talk coming up on March 26, when we will hear from Dr. Hannah Baader about her latest research. Such online accessibility has real positives, even when we can once again host our talks in person. Things are looking up for the fall with the university recently announcing it is aiming for in-person teaching.
Best wishes, as ever,
|
|
|
|
— Carl Knappett
Professor & Chair
|
|
| |
|
NEWS AND EVENTS
|
| |
| |
|
|
2021 Peter H. Brieger Memorial Lecture
On February 25, Professor Stephen J. Campbell (Johns Hopkins University) gave the 29th lecture in this series, named in honour of Professor Peter H. Brieger (1898–1983). The lecture was a great success with many guests, students and faculty in attendance to learn about “The Shape of Pre-Modern Lives: Toward an anti-biography of Leonardo da Vinci.” We would like to express our utmost appreciation to all those who attended and hope to see you all at future events!
|
|
|
|
|
|
|
Art History Speaker Series
The January 22 online session of the Art History Speaker Series featuring Dr. Charmaine Nelson (NSCAD University) had a fantastic turnout, followed by an engaging Q&A session. A great big thanks to Dr. Nelson for helping us start 2021 on such a high note, and thank you to all those who attended and participated. You can view the talk on the department’s YouTube page. A reminder that the Speaker Series continues with Hannah Baader (Kunsthistorisches Institut in Florenz, Max-Planck-Institute) on March 26. Visit the Department of Art History website for details.
|
|
|
|
|
A different type of experiential learning experience
In January, students in FAH273 Canada Buildings and Landscapes were featured in A&S News. Students created video presentations featuring historical buildings or structures they believe worthy of preserving. We hope these videos can help play a role in the buildings’ future preservation. Read about their achievements via A&S News or on the Department of Art History website.
|
|
|
|
|
Keep Up With Us
Find information on our programs, event listings, photos, videos and much more! Follow us on:
Have a story or event that may be of interest to our community? We would love to hear from you and share it across our social media channels. Please reach out to us via email.
|
|
|
|
|
New art history course examining art-music relationship hits high note
In February, Samantha Chang, an art history PhD candidate, was featured in A&S News. Samantha discusses her new fourth-year seminar, Music and Art in Early Modern Europe. The course examines how music, architecture, sculpture and painting were intertwined across early modern Europe and how the music-art relationship developed from that period to today. Read all about Samantha’s innovative course via A&S News or on the Department of Art History website.
|
|
|
|
|
Welcome to new affiliate faculty
We are pleased to announce the following faculty appointment to the department:
- Pia Brancaccio, professor, status only. Pia is a professor in the Department of Art and Art History, Drexel University.
|
|
|
|
|
8th Annual Wollesen Memorial Symposium
On March 4 and 5, the Graduate Union of Students of Art held the 8th annual Wollesen Memorial Symposium online. The symposium, Matrix of Mobility, focused on networks and mobility in art history and visual culture and featured keynote addresses by Ngarino Ellis (University of Auckland) and Mohammad Gharipour (Morgan State University). Please join us in congratulating our graduate students on another successful symposium.
|
|
|
The University of Toronto respects your privacy.
We do not rent, trade or sell our mailing lists.
Copyright © 2020 University of Toronto. All rights reserved. This e-mail was sent to ##SubscriberEmail##.
##OptionalParameter3##
##TrackImpression##
|
|


Apple Accepts $467Mln Fine for Buying Software From Slovenian Drug Trafficker - Treasury
WASHINGTON (Sputnik) - The US computer giant Apple agreed to a nearly half-billion-dollar penalty to settle charges that it contracted with a Slovenian software company ATR.SIS d.o.o. that had been sanctioned for drug trafficking, the Treasury Department said in a press release on Monday.
"On July 18, 2008, Apple entered into an app development agreement with SIS, a software company located at 19 Spruha, Trzin 1236, Slovenia", the release said.
On 24 February 2015, Treasury's Office of Foreign Assets Control (OFAC) designated SIS and Savo Stjepanovic ("Stjepanovic"), a director and majority owner of SIS, pursuant to the Foreign Narcotics Kingpin Designation Act... and added them to the SDN [Specially Designated Nationals] list", the release said.
Apple said it failed to identify SIS as a sanctioned company, claiming the oversight resulted from a failure by Apple's in-house sanctions screening tool, the release said.
The $466,912 settlement with Apple settles the company's potential civil liability for violating the Foreign Narcotics Kingpin Sanctions Regulations, the release added.
SIS was sanctioned for trafficking in steroids, according to the release.


Extract a key
You can find a key by typing in some words that appear in the userid (name, email, etc.) of the key you're looking for, or by typing in the keyid in hex format ("0x…")
Submit a key
You can submit a key by simply pasting in the ASCII-armored version of your key and clicking on submit.


Balthazar:
Sir Athebaldt has told me that your clan would be helpful in my research. I don't have the time to repeat myself, where is the leader of your fine clan?


#include <TranslationSearchBehavior.h>
Public Member Functions | |
| CorrectResultsAreReturned () | |
| CorrectResultsAreReturned (std::vector< int > expected_results) | |
| void | ensure_that (const World &world) |
Definition at line 43 of file TranslationSearchBehavior.h.
| BibleDatabaseBehaviors::CorrectResultsAreReturned::CorrectResultsAreReturned | ( | ) | [inline] |
Definition at line 46 of file TranslationSearchBehavior.h.
| BibleDatabaseBehaviors::CorrectResultsAreReturned::CorrectResultsAreReturned | ( | std::vector< int > | expected_results | ) | [inline] |
Definition at line 48 of file TranslationSearchBehavior.h.
| void BibleDatabaseBehaviors::CorrectResultsAreReturned::ensure_that | ( | const World & | world | ) | [inline, virtual] |
Implements BehaviorDrivenDesign::IThen.
Definition at line 50 of file TranslationSearchBehavior.h.
00051 { 00052 boost::shared_ptr<ISearchResults> actual_results = world.GetWhen<SearchIs>()->get_search_results(); 00053 00054 int number_of_expected_results = static_cast<int>(m_expected_results.size()); 00055 00056 CPPUNIT_ASSERT_EQUAL(number_of_expected_results, actual_results->num_results()); 00057 00058 for (int idx = 0; idx < number_of_expected_results; ++idx) 00059 { 00060 CPPUNIT_ASSERT_EQUAL(m_expected_results[idx], actual_results->at(idx)); 00061 } 00062 }


|
OpenM++ runtime library (libopenm)
|
OpenM++ common file utilities. More...
Go to the source code of this file.
Namespaces | |
| openm | |
| openM++ namespace | |
Functions | |
| bool | openm::isFileExists (const char *i_filePath) |
| return true if file or directory exists More... | |
| const std::string | openm::baseDirOf (const std::string &i_path) |
| return base directory of the path or empty string if path is "." or ".." | |
| const std::string | openm::baseDirOf (const char *i_path) |
| return base directory of the path or empty string if path is "." or ".." | |
| const std::string | openm::makeDefaultPath (const char *i_exePath, const char *i_extension) |
| make path from current working directory, executable name and specified extension. More... | |
| std::string const | openm::makeFilePath (const char *i_dirPath, const char *i_name, const char *i_extension=nullptr) |
| make path by join directory, file name and specified extension. More... | |
| const std::string | openm::toUtf8 (const char *i_byteArr, const char *i_codePageName=nullptr) |
| convert null-terminated bytes from current user (or specified) code page to UTF-8 string. More... | |
| const std::string | openm::toUtf8 (size_t i_size, const char *i_byteArr, const char *i_codePageName=nullptr) |
| convert bytes from current user (or specified) code page to UTF-8 string. More... | |
| bool | openm::isUtf8 (size_t i_size, const char *i_byteArr) |
| return true if bytes are valid UTF-8 More... | |
| const std::string | openm::fileToUtf8 (const char *i_filePath, const char *i_codePageName=nullptr) |
| read file and return content as UTF-8 as string More... | |
| const std::list< std::string > | openm::fileToUtf8Lines (const char *i_filePath, const char *i_codePageName=nullptr) |
| read file, split by linefeed and return content as list of UTF-8 as strings More... | |
OpenM++ common file utilities.


Credit to Jamarius Taylor for thinking up this one. The idea is that visitors that are new have the opportunity to return to the site (just like customers who buy once have an opportunity to buy more). Obviously, not every site can reasonably expect all visitors to return, and, even those that do will have differing timeframes within which they would expect visitors to return.
Nonetheless, this seems to be an illustrative example. We’re going to use a waterfall chart for the visualization. The waterfalls package offers one option for doing this, but that doesn’t exactly seem to be a mainstream package, so this example simply relies on plain ol’ ggplot2
and the various machinations required therein.
If a website has zero churn, then we would expect each week’s users to be the number of users from the _previous week plus the number of new users from the current week. This assumes that active users return at least once per week (which is fair, if, clearly, an ideal that is unachievable):
\[[\#\ of\ Users\ Current\ Week] = [\#\ of\ Users\ Previous\ Week] + [\#\ of\ New\ Users\ Current\ Week]\]
Therefore, one way to calculate the churn is to take that theoretical ideal and subtract the actual number of users from it. That would be the number of non-returning users:
\[[Churned\ Visitors] = [\#\ of\ Users\ Previous\ Week] + [\#\ of\ New\ Users\ Current\ Week] - [\#\ of\ Users\ Current\ Week]\]
The churn rate would then be:
\[[Churn\ Rate] = \frac{[Churned\ Visitors]}{[\#\ of\ Users\ Previous\ Week]}\]
We’re not actually going to calculate Churn Rate in this example…but we could.
Be sure you’ve completed the steps on the Initial Setup page before running this code.
For the setup, we’re going to load a few libraries, load our specific Google Analytics credentials, and then authorize with Google.
# Load the necessary libraries. These libraries aren't all necessarily required for every
# example, but, for simplicity's sake, we're going ahead and including them in every example.
# The "typical" way to load these is simply with "library([package name])." But, the handy
# thing about using the approach below -- which uses the pacman package -- is that it will
# check that each package exists and actually install any that are missing before loading
# the package.
if (!require("pacman")) install.packages("pacman")
pacman::p_load(googleAnalyticsR, # How we actually get the Google Analytics data
tidyverse, # Includes dplyr, ggplot2, and others; very key!
devtools, # Generally handy
googleVis, # Useful for some of the visualizations
scales) # Useful for some number formatting in the visualizations
# Authorize GA. Depending on if you've done this already and a .ga-httr-oauth file has
# been saved or not, this may pop you over to a browser to authenticate.
ga_auth(token = ".ga-httr-oauth")
# Set the view ID and the date range. If you want to, you can swap out the Sys.getenv()
# call and just replace that with a hardcoded value for the view ID. And, the start
# and end date are currently set to choose the last 30 days, but those can be
# hardcoded as well.
view_id <- Sys.getenv("GA_VIEW_ID")
end_date <- Sys.Date() - as.POSIXlt(Sys.Date())$wday - 1 # The most recent Saturday
start_date <- end_date - 55 # 8 weeks earlier
If that all runs with just some messages but no errors, then you’re set for the next chunk of code: pulling the data.
This is pretty straightforward. We just need to pull users and new users by week (this could also be done by week):
# Pull the data. See ?google_analytics_4() for additional parameters.
ga_data <- google_analytics(viewId = view_id,
date_range = c(start_date, end_date),
metrics = c("users", "newUsers"),
dimensions = c("week","year"))
# Go ahead and do a quick inspection of the data that was returned. This isn't required,
# but it's a good check along the way.
head(ga_data)
| week | year | users | newUsers |
|---|---|---|---|
| 33 | 2018 | 1063 | 874 |
| 34 | 2018 | 1121 | 934 |
| 35 | 2018 | 1049 | 866 |
| 36 | 2018 | 992 | 825 |
| 37 | 2018 | 966 | 807 |
| 38 | 2018 | 1034 | 864 |
This just ensures the data is easy enough to look at and interpret.
# Using dplyr, sort by year and week.
ga_data <- ga_data %>%
arrange(year, week)
# Take a quick look at the result.
head(ga_data)
| week | year | users | newUsers |
|---|---|---|---|
| 33 | 2018 | 1063 | 874 |
| 34 | 2018 | 1121 | 934 |
| 35 | 2018 | 1049 | 866 |
| 36 | 2018 | 992 | 825 |
| 37 | 2018 | 966 | 807 |
| 38 | 2018 | 1034 | 864 |
# Calculate the churn and add some date levels
totals_and_churn_df <- ga_data %>%
mutate(previous_week_users = lag(users, 1, default = 0)) %>% # Get previous week users
mutate(churned_users = previous_week_users + newUsers - users) %>% # Calculate churned users
mutate(date = paste(year,week, sep="-")) %>% # Calculate a "week" as YYYY-WW
mutate(date = factor(date, levels = date)) %>% # Make date a factor
select(date, users, newUsers, previous_week_users, churned_users)
# NA the churned users and new users for the first row
totals_and_churn_df$churned_users[1] <- NA
totals_and_churn_df$newUsers[1] <- NA
# Display the results
head(totals_and_churn_df)
| date | users | newUsers | previous_week_users | churned_users |
|---|---|---|---|---|
| 2018-33 | 1063 | NA | 0 | NA |
| 2018-34 | 1121 | 934 | 1063 | 876 |
| 2018-35 | 1049 | 866 | 1121 | 938 |
| 2018-36 | 992 | 825 | 1049 | 882 |
| 2018-37 | 966 | 807 | 992 | 833 |
| 2018-38 | 1034 | 864 | 966 | 796 |
Unfortunately, waterfall charts are kind of tricky to do in ggplot2
. But, we can use geom_rect()
to draw this, which means we need to define the min
and max
for x
and y
for each box on the chart. We’ll go ahead and introduce some redundancy in the plotting for the sake of clarity by defining three types of bars that, for each week, will appear in this order:
The xmin
and xmax
for each of these will differ: newUsers will be offset to the left of the week, and users will be offset to the right. Yeesh. This is confusing. And it takes a bit of code to get that all worked out:
# Add a few intermediate values that we'll use after we convert to a long forma
waterfall_df <- totals_and_churn_df %>%
mutate(week_max = users + churned_users,
week_current_users = users)
# Convert to long format
waterfall_df <- waterfall_df %>%
gather(key = "user_type", value = "number_of_users",
-date, -previous_week_users, -week_max, -week_current_users,
na.rm = TRUE)
# Function to calculate xmin, xmax, ymin, and ymax when passed a row from the
# data set.
calc_rect_coords <- function(date, previous_week_users, week_max,
week_current_users, user_type, number_of_users){
x_offset <- 0.25 # Base offset for x for rects
bar_half_width <- 0.1 # Define the bar width
if(user_type == "users"){
xmin <- as.numeric(date) + x_offset - bar_half_width - 0.02 # Make it a little wider
xmax <- as.numeric(date) + x_offset + bar_half_width + 0.02
ymin <- 0
ymax <- number_of_users
user_type = "Users"
} else if(user_type == "churned_users"){
xmin <- as.numeric(date) - bar_half_width
xmax <- as.numeric(date) + bar_half_width
ymin <- week_current_users
ymax <- week_current_users + number_of_users
user_type = "Churned Users"
} else
# New Users
{
xmin <- as.numeric(date) - x_offset - bar_half_width
xmax <- as.numeric(date) - x_offset + bar_half_width
ymin <- previous_week_users
ymax <- previous_week_users + number_of_users
user_type = "New Users"
}
result = data.frame(date = date,
user_type = user_type,
xmin = xmin,
xmax = xmax,
ymin = ymin,
ymax = ymax)
}
# Build out all of our rectangles.
plot_data <- pmap_dfr(waterfall_df, calc_rect_coords)
# This trashes our nice date factor, so drop the one that came back
# and add on our original
plot_data <- select(plot_data, -date)
plot_data <- cbind(plot_data, waterfall_df$date)
plot_data <- plot_data %>%
select(date = `waterfall_df$date`,
user_type,
xmin, xmax, ymin, ymax)
# Display the head
head(plot_data, 20)
| date | user_type | xmin | xmax | ymin | ymax |
|---|---|---|---|---|---|
| 2018-33 | Users | 1.13 | 1.37 | 0 | 1063 |
| 2018-34 | Users | 2.13 | 2.37 | 0 | 1121 |
| 2018-35 | Users | 3.13 | 3.37 | 0 | 1049 |
| 2018-36 | Users | 4.13 | 4.37 | 0 | 992 |
| 2018-37 | Users | 5.13 | 5.37 | 0 | 966 |
| 2018-38 | Users | 6.13 | 6.37 | 0 | 1034 |
| 2018-39 | Users | 7.13 | 7.37 | 0 | 1098 |
| 2018-40 | Users | 8.13 | 8.37 | 0 | 1059 |
| 2018-34 | New Users | 1.65 | 1.85 | 1063 | 1997 |
| 2018-35 | New Users | 2.65 | 2.85 | 1121 | 1987 |
| 2018-36 | New Users | 3.65 | 3.85 | 1049 | 1874 |
| 2018-37 | New Users | 4.65 | 4.85 | 992 | 1799 |
| 2018-38 | New Users | 5.65 | 5.85 | 966 | 1830 |
| 2018-39 | New Users | 6.65 | 6.85 | 1034 | 1975 |
| 2018-40 | New Users | 7.65 | 7.85 | 1098 | 2007 |
| 2018-34 | Churned Users | 1.90 | 2.10 | 1121 | 1997 |
| 2018-35 | Churned Users | 2.90 | 3.10 | 1049 | 1987 |
| 2018-36 | Churned Users | 3.90 | 4.10 | 992 | 1874 |
| 2018-37 | Churned Users | 4.90 | 5.10 | 966 | 1799 |
| 2018-38 | Churned Users | 5.90 | 6.10 | 1034 | 1830 |
With all that data prep, we can now plot the results. The way to read this is that, each week, there is a number of users. Then, for the next week, in order, we:
The thing that may be a little misleading here is that we’re making an assumption that “non-churned users” actually return to the site each subsequent week. But, that may not be too bad, especially if we’re looking to illustrate that it’s a constant battle to get new traffic to the site!
As one note, ideally, this chart would also include horizontal lines connecting the top of each Users bar to the bottom of each New Users bar, from the top of each New Users bar to the top of each Churned Users bar, and from the bottom of each Churned Users bar to the top of each Users bar. But, that’s an even bigger hassle, so it’s not included here.
# Define the theme
theme_waterfall <- theme_light() +
theme(legend.position = "top",
legend.title = element_blank(),
plot.title = element_text(hjust=0.5),
panel.grid.major.x = element_blank(),
panel.border = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank())
# Build the actual plot. What we're actually doing here is drawing each bar as a
# separate rectangle.
gg_results <- ggplot(plot_data, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
fill = user_type, x=date)) +
geom_rect() +
scale_fill_manual(values = c("#f98e8e","#8ee26a","gray60")) +
scale_y_continuous(label = comma, expand = c(0,0)) +
labs(title = "Waterfall of Users Over Time", y="Users") +
theme_waterfall
# Output the plot
gg_results
This site is a sub-site to dartistics.com


Namespace NHystrix
Classes
CircuitBreakerOptions
Configuration options for a HystrixCircuitBreaker.
HealthCounts
Encapsulates health related statistics sent to the HealthStream of a HystrixCommandMetric.
HystrixBulkhead
Encapsulates the bulkhead semaphore for a HystrixCommand with the given HystrixCommandKey.
HystrixCircuitBreaker
The default production implementation of IHystrixCircuitBreaker.
HystrixCommand<TRequest, TResult>
Base class for all HystrixCommands. Providing functionality for:
- Bulkhead Pattern
- Timeout
- Circuit Breaker Pattern
- Fallback responses
HystrixCommandMetrics
Tracks metrics for a HystrixCommand<TRequest, TResult> for a HystrixCommandKey.
HystrixCommandProperties
Configuration properties for HystrixCommand<TRequest, TResult> and related components.
HystrixDelegatingHandler
A System.Net.Http.DelegatingHandler that wraps the request in the Circuit Breaker Pattern and Bulkhead Pattern. Similar functionality to the HystrixCommand<TRequest, TResult>, but timeouts are handled by System.Net.Http.HttpClient directly.
HystrixEventType
The type of an event emitted by a HystrixCommand<TRequest, TResult> to HystrixMetrics. This class cannot be inherited.
HystrixMetrics
Base class for implementing a metric within NHystrix.
TaskExtensions
Extension methods for System.Threading.Tasks.Task
Structs
HystrixCommandGroup
A HystrixCommandGroup is used to group commands together. For example, by service or resource.
HystrixCommandKey
A HystrixCommandKey is used to identify a specific command within a group. This key is used as the caching key for metrics, etc.
Interfaces
IHystrixCircuitBreaker
Circuit breaker logic that is hooked into HystrixCommand<TRequest, TResult> execution and will stop allowing executions if failures have gone past the defined threshold.
The default (and only) implementation will then allow a single retry after a defined sleepWindow until the execution succeeds at which point it will again close the circuit and allow executions again.
IHystrixCommand<TRequest, TResult>
Interface implemented by HystrixCommand<TRequest, TResult>s.


Big Sur
Big Sur, California—
I drove to Julia Pfeiffer Burns State Park. Here are the pictures along the California Highway 1.
I drove to Julia Pfeiffer Burns State Park. Here are the pictures along the California Highway 1.


FILL IN THE PROTEIN FORM
Fill in the form with the relevant data concerning the receptor and other proteins involved in the simulation.
Protein information is linked to a canonical sequence obtained from UniProtKB/Swiss-Prot and identified by a UniProtKB accession number (AC).
Mutated proteins must be specified by providing wild type UniProtKB AC and mutated sequence. Gaps created by insertions and deletions have to be specified by a hyphen character (‘-’).
Several proteins can be added in a single submission but at least one must be a G protein-coupled receptor (GPCR) whose sequence must have been deposited on GPCRdb.


Chart showing data loaded dynamically. The individual data points can be clicked to display more information.


This is Alambic v3 an upgrade of Alambic v2 by Vincent Jaquet using
Angular,
Twitter Bootstrap
&
d3
frameworks. Monitored by Mr. Frédéric Bapst.
The previous version, Alambic v2, was created by Mouad El Merchichi using
AngularJS,
Twitter Bootstrap
&
d3
frameworks. And was monitored by Mr. Frédéric Bapst & Mr.
François Kilchoer.


Emergency services called to fire in south Bristol restaurant
The fire broke out at North Street Standard
by Geoffrey BennettFirefighters were called to a south Bristol restaurant after a fire broke out.
Crews from Bedminster and Temple Back attended the North Street Standard in Bedminster at 6.38am today (November 17).
They said the involved rags which were left unattended on a hot plate.
Two firefighters wearing breathing apparatus used a high pressure hose in the incident.
A ventilation fan was used to clear smoke.
There was no report of anybody evacuated or hurt -the cause is thought to be accidental.
Restaurant employee Max Blunos told Bristol Live: "Everything is fine.
"A chef left something in a cupboard which just smoked out the whole building.
"We are back up and running and would like to say thanks very much to the fire service."
For the latest news in and around Bristol, check back on Bristol Live's homepage.


Bursa Malaysia starts November easier
KUALA LUMPUR, Nov 1 — Bursa Malaysia opened November in a weak note as market sentiment turned bearish following a renewed US-China trade jitters that curbed investors’ risk appetite for equities.
At 9.05am, the benchmark FTSE Bursa Malaysia KLCI (FBM KLCI) slipped 1.99 points to 1,595.99 from yesterday’s close of 1,597.98.
The key index opened 2.25 points lower at 1,595.73.
On the broader market, there were 127 losers and 111 gainers, while 196 counters were unchanged, 1,527 untraded and 27 others suspended.
Turnover amounted to 204.18 million shares worth RM45.76 million.
Malacca Securities Sdn Bhd said quick profit-taking activities might be on the cards today.
After racking some three per cent gains over the past couple of weeks, with the key index already at the overbought zone, a retreat is in store, it said.
“The fresh uncertainties over the Sino-US trade deal may also serve as an excuse for the profit-taking activities to take precedence.
“Nevertheless, we think that pullback will be mild with key support located towards the 1,680 and 1,572 levels respectively,” the brokerage firm said in a note.
On the upside, Malacca Securities said gains are likely to be capped towards 1,615 level, followed by the 1,623 level, should the 1,600 psychological level breached.
The lower liners might see a continuous rotational play on the back of the improved market undertone.
However, the market condition might turn cautious as it enters into the quarterly financial reporting month with corporate earnings, in general, might remain unexciting, it said.
Among heavyweights, Maybank added one sen to RM8.61, while Petronas Chemicals and CIMB bagged two sen each to RM7.49 and RM5.27 respectively, while Tenaga and IHH were flat at RM13.86 and RM5.70 respectively.
However, Public Bank retreated from strong gains yesterday to declined 18 sen at RM20.12 after 25,700 shares transacted.
Of the actives, Sumatec, Multi Sports and Priceworth were all flat at half-a-sen, 1.5 sen and five sen respectively, APFT shed half-a-sen to one sen while Bumi Armada inched up half-a-sen to 45.5 sen.
The FBM Emas Index was 13.18 points easier at 11,292.55, the FBMT 100 Index trimmed 12.52 points to 11,103.56, the FBM 70 down 10.02 points to 13,940.23 and the FBM Emas Shariah Index declined 2.86 points to 11,826.92.
However, the FBM Ace bagged 14.26 points to 4,987.37.
Sector-wise, the Financial Services Index pulled back 39.84 points for 15,617.11, but the Plantation Index gained 0.79 points to 6,736.88, while the Industrial Products & Services Index added 0.08 point to 153.59. — Bernama


Hi! My Name Is... Rocko Hi! My Name Is...Slim Shady
Bradon Fact: He works in the music industry
I beat all of the sharks underwater with no oxygen tank


-
Top 10 Emerging Technologies 2014
medium.com
From the World Economic Forum’s Global Agenda Council on Emerging Technologies
-
Scenes from the New American Dustbowl
medium.com
Political conspiracies, water witches, Exodus-quoting priests, and angry, defeated farmers in California’s dying, drough…
-
The Deep, Dark, Emotional Challenges of Being a Leader - Feld Thoughts
www.feld.com
I got to spend a lot of time with my close friend Rand Fishkin the past few days. The first was at Denver Startup Week, where we did a panel ...
-
Congratulating Apcera
www.trueventures.com
This morning, Ericsson announced that is has acquired a majority stake in True portfolio company Apcera. This is an incredible partnership for both ...
-
Why We’re Excited About iOS 8 and How to Get the Most Out of It
www.trueventures.com
iOS 8 will have a major impact on mobile engagement, and no one knows this better than the Founders and product engineers working at mobile ...
-
Storehouse for iPhone
www.storehouse.co
Creating stories with photos and videos has never been easier or more fun.
-
40 Kilometers
om.co
I am known to go to great lengths and even greater distances to meet great bootmakers and shoe stores of some repute. Most people make vacation ...
-
Why We Invested in Renovo Motors
www.trueventures.com
Who is crazy enough to take on the car industry? This was the question of the day as numerous spectators, car enthusiasts and automotive reporters ...

-
Why Amazon Has No Profits (And Why It Works)
ben-evans.com
(I also did a podcast with Ben Horowitz discussing these themes: see here) Amazon has a tendency to polarize people. On one hand, there is the ...
-
Bitcoin Wallet And Platform Coinbase Opens To Europe | TechCrunch
techcrunch.com
In a really big deal for San Francisco-based Coinbase, one of the world's leading Bitcoin wallets and merchant processing platforms, the startup is ...
-
Techstars Equity Back Guarantee - Feld Thoughts
www.feld.com
Today Techstars announced an “equity back guarantee” for any company that goes through the Techstars program starting in 2015. We’ve been talking ...
-
Stitch Labs Secures $3.5M to Accelerate Business Growth
www.marketwired.com
SAN FRANCISCO, CA--(Marketwired - August 20, 2014) - Stitch Labs, the leading inventory and multichannel selling platform for retailers and ...
-
Renovo Motors Introduces the Groundbreaking Renovo Coupe - EMN
europeanmotornews.com
Renovo Motors, Inc. introduced the world to the groundbreaking Renovo Coupe
-
Welcoming Health Gorilla
www.trueventures.com
One of the most exciting aspects of being an investor today is witnessing firsthand the power and swiftness of a computing platform shift. Every day, ...
-
FinSMEs | B-Stock Solutions Closes $7M Series B Funding
www.finsmes.com
FinSMEs is the Flash NewsBlog about Startup and SME financing. It covers seed/angel funding, venture capital and private equity rounds.
-
Welcoming ATHOS
www.trueventures.com
One of the newest companies in the True portfolio—ATHOS—announced their Series B funding this morning, and we are thrilled to welcome the company and ...
-
Stone Soup and Senior Hires
www.trueventures.com
Stone Soup is a common folk story that has been told throughout history in many different languages. The picture book version by Marcia Brown was ...
-
Congratulating Sifteo and 3DR!
www.trueventures.com
We are thrilled to announce that True portfolio company Sifteo has been acquired by another True portfolio company, 3D Robotics. Sifteo is a ...
-
Neon Labs Gains Funds for Its Images Business
online.wsj.com
VC Dispatch: Neon Labs Inc. has raised new venture capital to continue building a business that evaluates images to see which ones are best at ...
-
The Road
pando.com
Editor’s note: This is a guest post by Marc Ruxin, Founder/CEO of TastemakerX, which was recently acquired by Rdio where he has become the COO. The ...
-
Remembering Priya
www.trueventures.com
Last Monday, we at True experienced the type of unimaginable loss it is impossible to prepare for as Priya Haji, Co-Founder and CEO of our portfolio ...
-
Congratulating TechCrunch’s “40 Over 40”
www.trueventures.com
Much has been made of the youth culture in Silicon Valley and the new breed of ageism that comes with it. As TechCrunch pointed out yesterday, if you ...


We're not your
typical courier service
With our flexible delivery options,
real-time tracking,
confirmations and
professional service,
SendIT guarantees
hassle free experience


We collaborate with nonprofits and other socially responsible organizations to develop software that meets important social and humanitarian needs.
Last semester, we worked with two nonprofits: Life of Freedom Center and HAART Kenya. We have developed data visuals to help the nonprofits find trends in victim data and fight human trafficking. This semester, we have more exciting opportunities to learn web design and mobile app development!


{{testAttendee.firstName}} {{testAttendee.lastName}}
Attendee Name
{{codeResponse.message}}
{{codeResponse.output}}
{{codeResponse.error}}
Note: This question can have more than one answer.


| Circle | Address | Contact Number |
|---|---|---|
| BANGALORE | SBI HOLIDAY HOME BINNYSTON GARDENS NEAR BINNY MILLS BEHIND CITY RAILWAY STATION MAGADI ROAD BANGALORE BANGALORE - 560023 |
PH :<PHONE_NUMBER>8 |
| MYSORE | STATE BANK OF INDIA HOLIDAY HOME 16/1 & 16/2, SHIVANNA COMPLEX KALIDASAROAD VV MOHALLA MYSORE MYSORE 570002 |
PH : 0821-2212533 |
| HUBLI | STATE BANK OF INDIA HOLIDAY HOME SHANTI NAGAR BUSSTOP Ist FLOOR, SBI MADHURA COLONY BUILDING BRANCH KESHAWAPUR, HUBLI-580023 |
PH : 0836-2213533 |


ZooKeeper Recipes and Solutions
A Guide to Creating Higher-level Constructs with ZooKeeper
In this article, you'll find guidelines for using ZooKeeper to implement higher order functions. All of them are conventions implemented at the client and do not require special support from ZooKeeper. Hopfully the community will capture these conventions in client-side libraries to ease their use and to encourage standardization.
One of the most interesting things about ZooKeeper is that even though ZooKeeper uses asynchronous notifications, you can use it to build synchronous consistency primitives, such as queues and locks. As you will see, this is possible because ZooKeeper imposes an overall order on updates, and has mechanisms to expose this ordering.
Note that the recipes below attempt to employ best practices. In particular, they avoid polling, timers or anything else that would result in a "herd effect", causing bursts of traffic and limiting scalability.
There are many useful functions that can be imagined that aren't included here - revocable read-write priority locks, as just one example. And some of the constructs mentioned here - locks, in particular - illustrate certain points, even though you may find other constructs, such as event handles or queues, a more practical means of performing the same function. In general, the examples in this section are designed to stimulate thought.
Out of the Box Applications: Name Service, Configuration, Group Membership
Name service and configuration are two of the primary applications of ZooKeeper. These two functions are provided directly by the ZooKeeper API.
Another function directly provided by ZooKeeper is group membership. The group is represented by a node. Members of the group create ephemeral nodes under the group node. Nodes of the members that fail abnormally will be removed automatically when ZooKeeper detects the failure.
Barriers
Distributed systems use barriers to block processing of a set of nodes until a condition is met at which time all the nodes are allowed to proceed. Barriers are implemented in ZooKeeper by designating a barrier node. The barrier is in place if the barrier node exists. Here's the pseudo code:
-
Client calls the ZooKeeper API's exists() function on the barrier node, with watch set to true.
-
If exists() returns false, the barrier is gone and the client proceeds
-
Else, if exists() returns true, the clients wait for a watch event from ZooKeeper for the barrier node.
-
When the watch event is triggered, the client reissues the exists( ) call, again waiting until the barrier node is removed.
Double Barriers
Double barriers enable clients to synchronize the beginning and the end of a computation. When enough processes have joined the barrier, processes start their computation and leave the barrier once they have finished. This recipe shows how to use a ZooKeeper node as a barrier.
The pseudo code in this recipe represents the barrier node as b. Every client process p registers with the barrier node on entry and unregisters when it is ready to leave. A node registers with the barrier node via the Enter procedure below, it waits until x client process register before proceeding with the computation. (The x here is up to you to determine for your system.)
| Enter | Leave |
|
|
On entering, all processes watch on a ready node and create an ephemeral node as a child of the barrier node. Each process but the last enters the barrier and waits for the ready node to appear at line 5. The process that creates the xth node, the last process, will see x nodes in the list of children and create the ready node, waking up the other processes. Note that waiting processes wake up only when it is time to exit, so waiting is efficient.
On exit, you can't use a flag such as ready because you are watching for process nodes to go away. By using ephemeral nodes, processes that fail after the barrier has been entered do not prevent correct processes from finishing. When processes are ready to leave, they need to delete their process nodes and wait for all other processes to do the same.
Processes exit when there are no process nodes left as children of b. However, as an efficiency, you can use the lowest process node as the ready flag. All other processes that are ready to exit watch for the lowest existing process node to go away, and the owner of the lowest process watches for any other process node (picking the highest for simplicity) to go away. This means that only a single process wakes up on each node deletion except for the last node, which wakes up everyone when it is removed.
Queues
Distributed queues are a common data structure. To implement a distributed queue in ZooKeeper, first designate a znode to hold the queue, the queue node. The distributed clients put something into the queue by calling create() with a pathname ending in "queue-", with the sequence and ephemeral flags in the create() call set to true. Because the sequence flag is set, the new pathnames will have the form _path-to-queue-node_/queue-X, where X is a monotonic increasing number. A client that wants to be removed from the queue calls ZooKeeper's getChildren( ) function, with watch set to true on the queue node, and begins processing nodes with the lowest number. The client does not need to issue another getChildren( ) until it exhausts the list obtained from the first getChildren( ) call. If there are are no children in the queue node, the reader waits for a watch notification to check the queue again.
There now exists a Queue implementation in ZooKeeper recipes directory. This is distributed with the release -- src/recipes/queue directory of the release artifact.
Priority Queues
To implement a priority queue, you need only make two simple changes to the generic queue recipe . First, to add to a queue, the pathname ends with "queue-YY" where YY is the priority of the element with lower numbers representing higher priority (just like UNIX). Second, when removing from the queue, a client uses an up-to-date children list meaning that the client will invalidate previously obtained children lists if a watch notification triggers for the queue node.
Locks
Fully distributed locks that are globally synchronous, meaning at any snapshot in time no two clients think they hold the same lock. These can be implemented using ZooKeeeper. As with priority queues, first define a lock node.
There now exists a Lock implementation in ZooKeeper recipes directory. This is distributed with the release -- src/recipes/lock directory of the release artifact.
Clients wishing to obtain a lock do the following:
-
Call create( ) with a pathname of "_locknode_/lock-" and the sequence and ephemeral flags set.
-
Call getChildren( ) on the lock node without setting the watch flag (this is important to avoid the herd effect).
-
If the pathname created in step 1 has the lowest sequence number suffix, the client has the lock and the client exits the protocol.
-
The client calls exists( ) with the watch flag set on the path in the lock directory with the next lowest sequence number.
-
if exists( ) returns false, go to step 2. Otherwise, wait for a notification for the pathname from the previous step before going to step 2.
The unlock protocol is very simple: clients wishing to release a lock simply delete the node they created in step 1.
Here are a few things to notice:
-
The removal of a node will only cause one client to wake up since each node is watched by exactly one client. In this way, you avoid the herd effect.
-
There is no polling or timeouts.
-
Because of the way you implement locking, it is easy to see the amount of lock contention, break locks, debug locking problems, etc.
Shared Locks
You can implement shared locks by with a few changes to the lock protocol:
| Obtaining a read lock: | Obtaining a write lock: |
|
|
It might appear that this recipe creates a herd effect: when there is a large group of clients waiting for a read lock, and all getting notified more or less simultaneously when the "write-" node with the lowest sequence number is deleted. In fact. that's valid behavior: as all those waiting reader clients should be released since they have the lock. The herd effect refers to releasing a "herd" when in fact only a single or a small number of machines can proceed.
Recoverable Shared Locks
With minor modifications to the Shared Lock protocol, you make shared locks revocable by modifying the shared lock protocol:
In step 1, of both obtain reader and writer lock protocols, call getData( ) with watch set, immediately after the call to create( ). If the client subsequently receives notification for the node it created in step 1, it does another getData( ) on that node, with watch set and looks for the string "unlock", which signals to the client that it must release the lock. This is because, according to this shared lock protocol, you can request the client with the lock give up the lock by calling setData() on the lock node, writing "unlock" to that node.
Note that this protocol requires the lock holder to consent to releasing the lock. Such consent is important, especially if the lock holder needs to do some processing before releasing the lock. Of course you can always implement Revocable Shared Locks with Freaking Laser Beams by stipulating in your protocol that the revoker is allowed to delete the lock node if after some length of time the lock isn't deleted by the lock holder.

In ZooKeeper, you can implement a two-phased commit by having a coordinator create a transaction node, say "/app/Tx", and one child node per participating site, say "/app/Tx/s_i". When coordinator creates the child node, it leaves the content undefined. Once each site involved in the transaction receives the transaction from the coordinator, the site reads each child node and sets a watch. Each site then processes the query and votes "commit" or "abort" by writing to its respective node. Once the write completes, the other sites are notified, and as soon as all sites have all votes, they can decide either "abort" or "commit". Note that a node can decide "abort" earlier if some site votes for "abort".
An interesting aspect of this implementation is that the only role of the coordinator is to decide upon the group of sites, to create the ZooKeeper nodes, and to propagate the transaction to the corresponding sites. In fact, even propagating the transaction can be done through ZooKeeper by writing it in the transaction node.
There are two important drawbacks of the approach described above. One is the message complexity, which is O(n²). The second is the impossibility of detecting failures of sites through ephemeral nodes. To detect the failure of a site using ephemeral nodes, it is necessary that the site create the node.
To solve the first problem, you can have only the coordinator notified of changes to the transaction nodes, and then notify the sites once coordinator reaches a decision. Note that this approach is scalable, but it's is slower too, as it requires all communication to go through the coordinator.
To address the second problem, you can have the coordinator propagate the transaction to the sites, and have each site creating its own ephemeral node.
Leader Election
A simple way of doing leader election with ZooKeeper is to use the SEQUENCE|EPHEMERAL flags when creating znodes that represent "proposals" of clients. The idea is to have a znode, say "/election", such that each znode creates a child znode "/election/n_" with both flags SEQUENCE|EPHEMERAL. With the sequence flag, ZooKeeper automatically appends a sequence number that is greater that any one previously appended to a child of "/election". The process that created the znode with the smallest appended sequence number is the leader.
That's not all, though. It is important to watch for failures of the leader, so that a new client arises as the new leader in the case the current leader fails. A trivial solution is to have all application processes watching upon the current smallest znode, and checking if they are the new leader when the smallest znode goes away (note that the smallest znode will go away if the leader fails because the node is ephemeral). But this causes a herd effect: upon of failure of the current leader, all other processes receive a notification, and execute getChildren on "/election" to obtain the current list of children of "/election". If the number of clients is large, it causes a spike on the number of operations that ZooKeeper servers have to process. To avoid the herd effect, it is sufficient to watch for the next znode down on the sequence of znodes. If a client receives a notification that the znode it is watching is gone, then it becomes the new leader in the case that there is no smaller znode. Note that this avoids the herd effect by not having all clients watching the same znode.
Here's the pseudo code:
Let ELECTION be a path of choice of the application. To volunteer to be a leader:
-
Create znode z with path "ELECTION/n_" with both SEQUENCE and EPHEMERAL flags;
-
Let C be the children of "ELECTION", and i be the sequence number of z;
-
Watch for changes on "ELECTION/n_j", where j is the largest sequence number such that j < i and n_j is a znode in C;
Upon receiving a notification of znode deletion:
-
Let C be the new set of children of ELECTION;
-
If z is the smallest node in C, then execute leader procedure;
-
Otherwise, watch for changes on "ELECTION/n_j", where j is the largest sequence number such that j < i and n_j is a znode in C;
Note that the znode having no preceding znode on the list of children does not imply that the creator of this znode is aware that it is the current leader. Applications may consider creating a separate znode to acknowledge that the leader has executed the leader procedure.


{% if user.is_authenticated %}
{% include "account/snippets/already_logged_in.html" %}
{% endif %}
{% trans "Thank You" %}
We appreciate your feedback Someone from the team will be in touch with you shortly.


Constructs symbolic derivatives of sum of ys
w.r.t. x in xs
.
tf.compat.v2.gradients
tf.gradients( ys, xs, grad_ys=None, name='gradients', gate_gradients=False, aggregation_method=None, stop_gradients=None, unconnected_gradients=tf.UnconnectedGradients.NONE )
ys
and xs
are each a Tensor
or a list of tensors. grad_ys
is a list of Tensor
, holding the gradients received by the
ys
. The list must be the same length as ys
.
gradients()
adds ops to the graph to output the derivatives of ys
with
respect to xs
. It returns a list of Tensor
of length len(xs)
where
each tensor is the sum(dy/dx)
for y in ys
.
grad_ys
is a list of tensors of the same length as ys
that holds
the initial gradients for each y in ys
. When grad_ys
is None,
we fill in a tensor of '1's of the shape of y for each y in ys
. A
user can provide their own initial grad_ys
to compute the
derivatives using a different initial gradient for each y (e.g., if
one wanted to weight the gradient differently for each value in
each y).
stop_gradients
is a Tensor
or a list of tensors to be considered constant
with respect to all xs
. These tensors will not be backpropagated through,
as though they had been explicitly disconnected using stop_gradient
. Among
other things, this allows computation of partial derivatives as opposed to
total derivatives. For example:
a = tf.constant(0.) b = 2 * a g = tf.gradients(a + b, [a, b], stop_gradients=[a, b])
Here the partial derivatives g
evaluate to [1.0, 1.0]
, compared to the
total derivatives tf.gradients(a + b, [a, b])
, which take into account the
influence of a
on b
and evaluate to [3.0, 1.0]
. Note that the above is
equivalent to:
a = tf.stop_gradient(tf.constant(0.)) b = tf.stop_gradient(2 * a) g = tf.gradients(a + b, [a, b])
stop_gradients
provides a way of stopping gradient after the graph has
already been constructed, as compared to tf.stop_gradient
which is used
during graph construction. When the two approaches are combined,
backpropagation stops at both tf.stop_gradient
nodes and nodes in
stop_gradients
, whichever is encountered first.
All integer tensors are considered constant with respect to all xs
, as if
they were included in stop_gradients
.
unconnected_gradients
determines the value returned for each x in xs if it
is unconnected in the graph to ys. By default this is None to safeguard
against errors. Mathematically these gradients are zero which can be requested
using the 'zero'
option. tf.UnconnectedGradients
provides the
following options and behaviors:
a = tf.ones([1, 2]) b = tf.ones([3, 1]) g1 = tf.gradients([b], [a], unnconnected_gradients='none') sess.run(g1) # [None] g2 = tf.gradients([b], [a], unconnected_gradients='zero') sess.run(g2) # [array([[0., 0.]], dtype=float32)]
ys
: A Tensor
or list of tensors to be differentiated.xs
: A Tensor
or list of tensors to be used for differentiation.grad_ys
: Optional. A Tensor
or list of tensors the same size as
ys
and holding the gradients computed for each y in ys
.name
: Optional name to use for grouping all the gradient ops together.
defaults to 'gradients'.gate_gradients
: If True, add a tuple around the gradients returned
for an operations. This avoids some race conditions.aggregation_method
: Specifies the method used to combine gradient terms.
Accepted values are constants defined in the class AggregationMethod
.stop_gradients
: Optional. A Tensor
or list of tensors not to differentiate
through.unconnected_gradients
: Optional. Specifies the gradient value returned when
the given input tensors are unconnected. Accepted values are constants
defined in the class tf.UnconnectedGradients
and the default value is
none
.A list of sum(dy/dx)
for each x in xs
.
LookupError
: if one of the operations between x
and y
does not
have a registered gradient function.ValueError
: if the arguments are invalid.RuntimeError
: if called in Eager mode.


{% load i18n %} {% block subject %} {% blocktrans %}Bullet Train Account Activation{% endblocktrans %} {% endblock subject %} {% block text_body %} {% blocktrans %}Hi, You're receiving this email because you need to confirm your email address with Bullet Train.{% endblocktrans %} {% trans "Please click on the link below to activate your account:" %} {{ protocol }}://{{ domain }}/{{ url|safe }} {% trans "Thanks for using Bullet Train!" %} {% blocktrans %}The Bullet Train Team{% endblocktrans %} {% endblock text_body %} {% block html_body %}
{% blocktrans %}Hi
You're receiving this email because you need to confirm your email address with Bullet Train.{% endblocktrans %}
{% trans "Please click on the link below to activate your account:" %}
{% trans "Thanks for using Bullet Train!" %}
{% blocktrans %}The Bullet Train Team{% endblocktrans %}
{% endblock html_body %}


---
layout: default
title: Home
player: true
carousel: true
bodyid: works
---
Recordings
Small Talk
written / performed by Brandon Chaney
recorded / mixed by Edon Valdman
Mario Sound Art Project
written by Koji Kondo
arranged / constructed by Edon Valdman
After Summer
written / performed by Off the Top
recorded / mixed by Edon Valdman
Development


The average person to default on their student loans owes less than \(\$10,000\text{,}\) suggesting that defaulters are make significantly lower incomes than the average student loan borrower. Those borrowers who did not complete a college degree are three times as likely to default as those who completed [9.11.164]. Moreover, half of Black borrowers who took out loans in \(2003\)-\(2004\) had defaulted after \(12\) years.
in-context


cruisecontrol and windows (redux)
Finally - there were two main problems.
The NTServiceWrapper was running cruisecontrol in a Java 5 VM, but the build was being done in a 1.4.2 VM. I had placed the liberries, the properties file and the comm.jar all in the 1.4.2 VM. Since the Java installation hijacks the java.exe in C:\Windows\Systemblahblah, it was running with the last installed VM, Java 5. The symptom for this is that it says it can't find the COM port, especially unhelpful since the problem is really fundamental.
Also, even with the cruisecontrol x10publisher plugin, no worky. It still kept complaining it couldn't find the COM port. But using another x10 library, it did work. So I switched back to the Pragmatic publisher, and BAM! worked. Do I know what the difference was? No, and if you look at the code, it seems identical. Do I care? Yes, but only because I want my life back.
I found it especially helpful to build an X10-test config. It's after the jump...
<cruisecontrol>
<!-- Load environment variables -->
<property environment="env" toupper="true"/>
<property name="cc.working" value="C:cruise-working"/>
<property name="cruisehost" value="devsrv"/>
<!-- Commonly used directories -->
<property name="reportdir" value="c:cruisecontrol-2.3.1reportingjspwebcontent"/>
<property name="projectdir" value="${cc.working}/checkout/${project.name}"/>
<property name="testdir" value="${projectdir}/project/setup/build/junitresults"/>
<property name="logdir" value="${cc.working}/logs/${project.name}"/>
<!-- defaults for email -->
<property name="developers.email"<EMAIL_ADDRESS><property name="buildmaster.email"<EMAIL_ADDRESS><property name="buildmaster.name" value="buildmaster"/>
<plugin name="log" dir="${logdir}" />
<plugin name="currentbuildstatuslistener"
file="${logdir}/buildstatus.html"
/>
<plugin name="cvs"
localworkingcopy="${projectdir}/project"
/>
<plugin name="ant"
antscript=""
antworkingdir="${projectdir}"
target="ccrebuild"
uselogger="true"
usequiet="true"
/>
<plugin name="currentbuildstatuslistener"
file="${logdir}/buildstatus.html"
/>
<plugin name="htmlemail"
buildresultsurl="http://${cruisehost}:8080/cruisecontrol/buildresults/${project.name}"
mailhost="mail.bar.com"
returnaddress="${buildmaster.email}"
returnname="${buildmaster.name}"
subjectprefix="[build ${project.name}]"
xsldir="${reportdir}/xsl"
css="${reportdir}/css/cruisecontrol.css">
<always address="${buildmaster.email}" />
</plugin>
<!-- continuous build -->
<!--
<project name="x10-test">
<bootstrappers>
</bootstrappers>
<listeners>
<currentbuildstatuslistener/>
</listeners>
<log>
</log>
<modificationset>
<alwaysbuild/>
</modificationset>
<schedule interval="360">
<ant antscript="" buildfile="${projectdir}/build.xml" target="pass" multiple="1"/>
</schedule>
<publishers>
<!-- CruiseControl's included
<x10 housecode="b" devicecode="1" port="com1" onwhenbroken="false" interfacemodel="cm17a" />
<x10 housecode="b" devicecode="2" port="com1" onwhenbroken="true" interfacemodel="cm17a" />
<onfailure>
<x10 housecode="b" devicecode="1" interfacemodel="cm17a" />
</onfailure>
<x10 housecode="b" devicecode="2" onwhenbroken="false" interfacemodel="cm17a" />
-->
<!-- Pragmatic's -->
<x10publisher port="com2" passdevicecode="b1" faildevicecode="b2" />
</publishers>
<dateformat format="yyyy-mmm-dd hh:mm:ss"/>
<plugin name="x10publisher" classname="com.pragauto.x10publisher"/>
</project>
</cruisecontrol>
About this entry
You"re currently reading "cruisecontrol and windows (redux)," an entry on a crick in the net
- Published:
- 12.21.05 / 9am
- Category:
- Code Geekery, Gadget-o-rama


FACTEST
FA
st
C
on
T
roll
E
r
S
yn
T
hesis
home
GitHub
VM Instructions
About
Papers
People
Vehicle Models
People that have worked on FACTEST:
Kristina Miller
Chuchu Fan
Sayan Mitra


|
BitShares-Core
6.1.0
BitShares blockchain implementation and command-line interface software
|
Directories | |
| directory | compress |
| directory | crypto |
| directory | interprocess |
| directory | io |
| directory | log |
| directory | network |
| directory | rpc |
| directory | thread |
Files | |
| file | asio.cpp [code] |
| file | exception.cpp [code] |
| file | filesystem.cpp [code] |
| file | popcount.cpp [code] |
| file | stacktrace.cpp [code] |
| file | static_variant.cpp [code] |
| file | string.cpp [code] |
| file | time.cpp [code] |
| file | utf8.cpp [code] |
| file | variant.cpp [code] |
| file | variant_object.cpp [code] |


{{.location}} Controls
Currently playing:
{{if .playlist.Current}}{{.playlist.Current.Name}}{{else}}Nothing{{end}}
Settings
Log out
Playlist
{{- range $i, $e := .playlist.Items}}
{{- if .Audio}}
{{- end}} {{- if eq (index .Cues "clear") "audio"}}
{{- end}}
{{.Name}}
{{- end}}
Connection Lost
Reconnecting...
You've been disconnected by another user.
Login again here to take back control.


BMW Z8
stops from 60mph to 0 in only 2.5sec!
Specs
Price |
$125,000(est.) |
Top Speed |
N/A |
Acceleration |
|
Engine |
|
0-30mph |
N/A |
Type |
V8 w/double-VANOS, 32valve DOHC |
0-60mph |
4.7sec(est.) |
Displacement |
5.0L(4941cc) |
0-100 |
N/A |
Power |
400hp@6600rpm |
1/4 mile |
N/A |
Torque |
369 lbs-ft@3800rpm |
Weight |
3000 lbs |
Handling |
|
Gas mileage |
|
Skidpad |
N/A |
City |
N/A |
600ft slalom |
N/A |
Highway |
N/A |
Powertrain |
Front engined, rear wheel drive, 6 speed manual |
(? = incomplete data or unverified info, N/A = info Not Available)
Note: Its true acceleration is probably faster
Beyond the specs:
Imagine what you would get if you took the BMW M5's awesome 5Liter V8 and put it in a two door convertible. The world has yet to see the end result this act however if that engine can launch the hefty M5 sedan to 60 in 4.7 seconds then this little car is bound to be considerably quick. It should have little problem getting to 60 in 4.5 seconds despite BMW's modest estimate of a full 4.7 seconds. No more info is available about this car at the time so updates on this report will come later. On thing is for sure however, this car will no doubt be a very enjoyable addition to the BMW lineup.
~Oracle


You don't have JavaScript enabled! You need to enable it to get some conversation starters, otherwise you'll be stuck talking about JavaScript!


Hey Welcome to my Website! :)
I am Ketaki Mulye, currently working at Wells Fargo as a Software Engineer. I pursued my B.Tech. Degree in Electronics Engineering from Veermata Technological Institute, Matunga (V.J.T.I).
I love to design and create optimum and appealing websites to improve user experience. I also enjoy Python Programming, Mathematics, Public Speaking and Content Creation. Daily Fitness and Systematic organisation of work are essentials for me!


MongoKitten
Native MongoDB driver for Swift, written in Swift. This library does not wrap around the mongoc driver. It uses:
- Our own BSON library, which is also 100% native Swift
- Our own MD5, SHA1, SCRAM and PBKDF2 libraries in 100% Swift (currently included in the package)
- Optional support for SSL/TLS using LibreSSL
Documentation
This can be found here or you could use our wiki.
We have our own Dash documentation for MongoKitten which can be found in the top-right corner of the Documentation.
Project Status
Our project is in need of help.
Enabling SSL
When compiling using SSL you’ll need to add another library to your Package.swift
.
.Package(url: "https://github.com/vapor/tls.git", majorVersion: 1)
Then you’ll need to add the compiler flag MongoTLS
to your compiler conditions.
Either add MongoTLS
to your .xcodeproj
under Active Compilation Conditions
.
Or by running swift build -Xswiftc -DMongoTLS
on the commandline.
For release this would be swift build -c release -Xswiftc -DMongoTLS
If you don’t prefer this SSL implementation for any reason
Requirements
- A MongoDB server
- Some basic knowledge of MongoDB or time to research about MongoDB
- Swift 3.0
Running Unit Tests
The unit tests expect a test database. Run the Tools/testprep.sh script to import it.
We don’t have complete unit test coverage however MongoKitten has been thoroughly tested in test and production environments.
Tutorial
Setup
Add MongoKitten
to your Package.swift:
import PackageDescription
let package = Package(
name: "MyApp",
dependencies: [
.Package(url: "https://github.com/OpenKitten/MongoKitten.git", majorVersion: 2, minor: 0)
]
)
Basic usage
Import the MongoKitten library:
import MongoKitten
Connect to your local MongoDB server using an URI:
let server: Server
do {
server = try Server(mongoURL: "mongodb://<username>:<password>@localhost:27017", automatically: true)
} catch {
// Unable to connect
fatalError("MongoDB is not available on the given host and port")
}
Select a database to use for your application:
let database = server["mydatabase"]
And select your collections to use from the database:
let userCollection = database["users"]
let otherCollection = database["otherdata"]
Creating Documents
In MongoKitten
we use our own BSON
library for working with MongoDB Documents.
You can create a simple user document like this:
var userDocument: Document = [
"username": "Joannis",
"password": "myPassword",
"age": 19,
"male": true
]
If you want to embed a variable you’ll need to use the ~
prefix operator.
let niceBoolean = true
let testDocument: Document = [
"example": "data",
"userDocument": ~userDocument,
"niceBoolean": ~niceBoolean,
"embeddedDocument": [
"name": "Henk",
"male": false,
"age": 12,
"pets": ["dog", "dog", "cat", "cat"]
]
]
Using Documents
A Document is similar to a Dictionary. A document however has order and thus the position of elements doesn’t change unless you tell it to.
A Document is therefore an array and a dictionary at the same time. With the minor difference that a Document can only hold BSON’s Value
. The problem that arises it when you want to use native types from Swift like a String, Int or another Document (sub-document) and elements in there.
We fixed this with the use of subscripts and getters.
To get a value from the Document you can subscript it like this:
let username: Value = userDocument["username"]
Documents always return a value. When the value doesn’t exist we’ll return Value.nothing
.
If you want to get a specific value from the Document like a String we can return an optional String like this:
let username: String? = userDocument["username"].stringValue
However.. for an age you might want a String without receiving nil
in a case like this:
let age: String? = userDocument["age"].stringValue
We made this easier by converting it for you:
let age: String = userDocument["age"].string
However.. if the age would normally be .nothing
we’ll now return an empty string ""
instead. So check for that!
Last but not least we’ll also want to assign data using a subscript. Because subscript are prone to being ambiguous we had to use enums for assignment.
This would result in this:
userDocument["bool"] = .boolean(true)
userDocument["int32"] = .int32(10)
userDocument["int64"] = .int64(200)
userDocument["array"] = .array(["one", 2, "three"])
userDocument["binary"] = .binary(subtype: .generic, data: [0x00, 0x01, 0x02, 0x03, 0x04])
userDocument["date"] = .dateTime(NSDate())
userDocument["null"] = .null
userDocument["string"] = .string("hello")
userDocument["objectID"] = .objectId(try ObjectId("507f1f77bcf86cd799439011"))
Of course variables can still use the ~
operator:
let trueBool = true
userDocument["newBool"] = ~trueBool
Inserting Documents
Using the above document you can insert the data in the collection.
try userCollection.insert(userDocument)
In the collection’s insert method you can also insert a group of Documents: [Document]
try otherCollection.insert([testDocument, testDocument, testDocument])
Finding data
To find the Documents in the collection we’ll want to use find
or findOne
on the collection. This returns a cursor
.
The find
and findOne
functions are used on a collection and don’t require any parameters.
Adding parameters, however, helps finding the data you need. By providing no arguments we’re selecting all data in the collection.
let resultUsers = try userCollection.find()
This returns a cursor that you can use to loop over users. MongoKitten
’s Cursor
by default loads 10 Documents at a time from MongoDB
which is customizable to a bigger or smaller amount of Documents.
This allows us to provide a smaller delay when looping over data. This also allows the application to remove the cursor halfway through the Documents without downloading Documents that aren’t being used.
Looping over the above results is easy:
for userDocument in resultUsers {
print(userDocument)
if userDocument["username"].stringValue == "harriebob" {
print(userDocument)
}
}
If you do want all Documents in one array you can use Array()
.
let otherResultUsers = try userCollection.find()
let allUserDocuments = Array(otherResultUsers)
But be careful.. a cursor contains the data only once.
let depletedExample = try userCollection.find()
// Contains data
let allUserDocuments = Array(depletedExample)
// Doesn't contain data
let noUserDocuments = Array(depletedExample)
QueryBuilder
We also have a query builder which can be easily used to create filters when searching for Documents.
let q: Query = "username" == "Joannis" && "age" > 18
let result = try userCollection.findOne(matching: q)
Or simpler:
let newResult = try userCollection.findOne(matching: "username" == "Joannis" && "age" > 18)
This comes in handy when looping over data:
for user in try userCollection.find(matching: "male" == true) {
print(user["username"].string)
}
Updating data
Updating data is simple too. There is a multiple
argument for people who update more than one document at a time. This example only updates the first match:
try userCollection.update(matching: ["username": "Joannis"], to: ["username": "Robbert"])
Deleting data
Deleting is possible using a document and a query
// Delete using a document
try userCollection.remove(matching: ["username": "Robbert"])
GridFS
// Make a GridFS Collection within the database 'mydatabase'
let gridFS = GridFS(in: server["mydatabase"])
// Find all bytes corresponding to this image
let data = NSData(contentsOfFile: "./myimage.jpg")!
// Store the file in GridFS with maximum 10000 bytes per chunk (255000 is the recommended default) and doesn't need to be set
// Store the ObjectID corresponding to the file in a constant variable
let objectID = try gridFS.store(data: data, named "myimage.jpg", withType: "image/jpeg", inChunksOf: 10000)
// Retrieve the file from GridFS
let file = try gridFS.findOne(byID: objectID)
// Get the bytes we need
let myImageData: [Byte] = file!.read(from: 1024, to: 1234)
GridFS example scenario
Imagine running a video streaming site. One of your users uploads a video. This will be stored in GridFS within 255000-byte chunks.
Now one user starts watching the video. You’ll load the video chunk-by-chunk without keeping all of the video’s buffer in memory.
The user quits the video about 40% through the video. Let’s say chunk 58 of 144 of your video. Now you’ll want to start continuing the video where it left off without receving all the unnecessary chunks.
License
MongoKitten is licensed under the MIT license.


Here in L&A, we want to make the computers faster, storage device is just the beginning of our mission.
| "We didn't create this company to just earn money, it's our passion in technology that drove us into this industry. We strongly believe that computer will be something even more important in the future, and we want to be part of the something. " Lewis |
"Creating something big isn't easy. It requires passion, hard work, and do not forget good partners. Here in L&A, we believe we have just enough to make a great company. Together we are going to create something new and amazing. " Alex |
| L&A facts |
Founded 2010 |
Founders Lewis Chan and Alex Phang |
Headquater L&A, Inc., Jalan Andrew, North Quay, 45000 Bandar Sunway, Selangor |
|
|
Copyright © 2014 L&A, Inc. All rights reserved.


This feature allows you to integrate users from your own website that uses WoWonder.
To get started please follow those steps:
- Go to http://yoursite.com/developers, you'll get the following Page
- Click on "Create an app", and fill the required information.
- On the form, make sure the info are similar as shown Here.
- Save the form, get the Keys, and use them Here.


Please enable JavaScript
×
Particles
Trails
Strands
n-line
Polygon
Time button
Color button
0
fps
Reset Particles
Reset canvas
Download canvas


Setting Location for "
location
". Place the pin where you would like the "
location
" to be positioned. Close this tab when done. (Location auto-saves)


Here are all the tools currently using PubRunner, their code and data locations and their current status.


When you need to focus on priorities
When you need to measure productivity
When you need to be very organized


To setup this extension, we'll need a couple of peices of information 👇🏽.
This is your personal access token for accessing GitHub using this API. It's stored in your browser and is sent on requests to GitHub.
Which repo do we save the issue too?
Source is on GitHub.


A Warlock is an expert in the summoning arts. He hunts alone with the creature he has summoned. They may attack simultaneously or act as support for one another. Warlocks may summon as many different creatures as are needed for a party's situation.
To become a Warlock your level must be over 40 and you must collect the Mark of the Scholar, the Mark of Trust, and the Mark of the Summoner.
Ask about marks
Return


Design, manufacture, and analysis of tar based
sensors and other electronic devices.
Manufacture of tar based laser induced graphene (LIG) strain sensor, EMG, and heater.
Mechanical and electrical analysis of resulting devices.
MIT Grossman Group
S


This analysis is a placeholder with a sample set. If you want to contribute new analyses for the site, contact Disaster Area on Discord.
- Conversion
- Thunder Wave / Toxic
- Ice Beam
- Thunderbolt / Double Edge
This analysis is a placeholder with a sample set. If you want to contribute new analyses for the site, contact Disaster Area on Discord.
- Rest
- Thunder Wave / Toxic
- Double Edge
- Tri Attack / Ice Beam
This analysis is a placeholder with a sample set. If you want to contribute new analyses for the site, contact Disaster Area on Discord.
Mirror Move, Sharpen, Agility, Blizzard, Flash, Psychic
This analysis is a placeholder with a sample set. If you want to contribute new analyses for the site, contact Disaster Area on Discord.
Author: Disaster Area
Publish Date: 7th July 2020


{% extends 'base.html' %} {% block head %}
is a small and easy-to-use messenger to to discuss topics,
with a nice and minimalistic client part.
This web app is designed to help you
communicate with your friends, this is
possible due to an understandable and comfortable to
use website and a well-written server part.


If you are looking at blank cassettes on the web, you may be very confused at the difference
in price.
Rodney Cooper
Sr. Faculty Data Science
If you are looking at blank cassettes on the web, you may be very confused at the difference
in price.
Dora Walker
Sr. Faculty Data Science
If you are looking at blank cassettes on the web, you may be very confused at the difference
in price.
Lena Keller
Sr. Faculty Data Science
If you are looking at blank cassettes on the web, you may be very confused at the difference
in price.
Fanny Spencer
As conscious traveling Paup ers we must always be oncerned about our dear Mother Earth.
Fanny Spencer
As conscious traveling Paup ers we must always be oncerned about our dear Mother Earth.
Fanny Spencer
As conscious traveling Paup ers we must always be oncerned about our dear Mother Earth.
Fanny Spencer
As conscious traveling Paup ers we must always be oncerned about our dear Mother Earth.


I'm testing new waters. I'm attempting to use this as my personal journal. If I can manage, I hope to have updates bi-weekly or monthly with notes on topics that have inspired or challenged me. This may take the form of a quote, a news article, a brief summary of conversations, or a few ideas that have been on my mind.
At this instant, I am considering what this website is for. There exist plenty of platforms that I could jot out ideas that could have all of the same content and be shared across social media for more people to read. My first justification for doing it on my own is branding and the learning opportunity. I'm constantly inspired by new things and I hope that this site will serve my ability to share and document those ideas.
Someone has surely been through all of this before, what works well and what doesn't? Shoot me an email below if you have some thoughts. For now, thanks for listening and feel free to sign up for updates in the future!
Find me on other platforms and feel free to get in touch with me over email for additional questions and conversation.
You can grab my CV if you care to check out more of my background, but understand that it is not up to date due to NDA and confidentiality.


--- layout: archive title: Zulip Chat Archive permalink: /stream/144837-PR-reviews/topic/topic.20names.html ---
Can we have slightly more descriptive topic names please? Currently they are just hash-number, and they actually link to issues of the lean
repo instead of mathlib
...
An organization admin could modify the linkification filter for topic names to point those to mathlib, or make lean#123
and mathlib#123
work as topic names with auto-linking
Docs are at https://zulipchat.com/help/add-a-custom-linkification-filter
Nice!
Is there an easy way to link to PRs, since we use them more than issues anyway?
PRs and issues are in the same namespace (numberspace)
you will notice that issue #123 I linked to is actually a PR
Great.
The topic named #397
still has the wrong link but I suspect it would update if renamed and then renamed back
Last updated: Apr 24 2020 at 19:02 UTC


There was a rat who heard of a magical object that would lead them to their purpose in life. It was called the Kumquat of Truth.
No one knew where to find the Kumquat of Truth but the rat was determined to find it. The rat felt that once it was found it would answer cure all of their uncertainty.
The rat had never left their forest home and didn't know what other worlds awaited them, but that didn't stop the rat. They were determined to find the elusive kumquat, no matter what waited outside.
Hence begins a Rat's Journey.


{% extends "_base.html" %} {% block content %}
The following instruction videos are available related to the {{ layer.get_name_after_colon }} layer. Through these videos you can learn more about how to collect and manage relevant data. We also have free, online courses available to learn more about the entire data collection process. You can find them in the Education Hub.


Website Maintainance ($10)
Prior Website Maintainance ($6)
Advance Website Maintainance ($18)
Website Design ($20)
My name is Abdul Rashid and I am a full-stack Web Application Developer and Software Developer and my primary focus and inspiration for my studies is Web Development. In my free time, I study human computer interface and the psychology of human computer interaction.
I am both driven and self-motivated, and I am constantly experimenting with new technologies and techniques. I am very passionate about Web Development, and strive to better myself as a developer, and the development community as a whole.


About
PRONOM signature development utility 2.0. replaces
1.0.
Please keep track of the
issues log
for ideas on how to contribute and to see the potential roadmap for this
tool.
Syntax
The utility adopts DROID/PRONOM's reduced signature file syntax in the
generation of these signatures.
More information on the reduced signature syntax can be found on my
blog
.
Other resources
Thank you
Please keep contributing to the signature development conversation
and happy hacking!
By Ross Spencer.
Also on Github.