The Color System is an organized structure for defining a set of colors to use throughout the UI.
The Color System is designed to accommodate the unique requirements and characteristics of individual brands while still remaining constrained by an organized system.
In order to provide the necessary structure, the complete color system, and the colors within it, will be identified by a semantic naming convention based on usage, context, and state and not their values. When these colors are applied in the application code, it is important that the semantic naming system be used when referencing the color system and in lieu of the individual colors or color values that ultimately appear in the UI.
Every color in the color palette has a corresponding CSS custom property name for use in the code. Each CSS custom property name is namespaced with the prefix "--wuf-" to help avoid name collisions with third party CSS custom property names (like those from Material Design itself). The color swatches for each color shown below all include their corresponding CSS custom property names.
In the Color System, a primary, secondary, and accent color (note the use of the semantic naming convention) are chosen to represent a brand. Lighter and darker variants of the three based colors can then be applied to the UI in different ways (see "Color Variations" below).
The primary color is typically the brightest and most easily identifiable color within a brand's identity. If only one color must be selected to represent a brand's entire identity, it is the primary color.
The secondary color plays a support role and is typically the more subdued color of a brand's identity. While it may be more subdued, it is often/usually the color that constitutes the greatest area of a UI in terms of pixel count. Application framing and background colors often use the secondary color.
The accent color is used for floating action buttons and other interactive elements, serving as visual contrast to the primary. UI elements that must present a selected state, active items, and enabled states use the accent color for this purpose.
In addition to the three base colors, four additional colors are used to represent state. State colors are comprised of success, info, warning, and danger.
State colors can and should remain within the same color family as the three base colors and/or be complimentary to those colors. State colors are also allowed to reuse the three base colors. However, it is important that state color choices should allow those colors to be easily differentiable from the three base colors within the UI based on context and usage. If it is not possible to easily and consistently present a state color as apart from the surrounding brand colors, it is recommended to select state colors that avoid ambiguity altogether. For example, the Linde primary color is a rich red. If a rich red is the dominant color within the UI for branding purposes, the same red cannot also be used to denote an error state (i.e., the "danger" color). This is because re-purposing a red for both branding and error states would not allow the error state color to call sufficient attention to itself. When choosing colors for the Color System, therefore, either the primary or the error color can use red, but not both.
NOTE: Material Design includes several additional state colors including disabled
and hover
, most of which indicate state based on user interaction. Since most of these additional
colors are included for us algorithmically, there's no need to explicitly call them out in this guide. For more
information on state visit https://material.io/design/interaction/states.html.
The success color is used to convey successful completion of an user activity to call attention to a positive metric or condition. Given that positive metrics or conditions (hopefully the default state), it's generally not necessary to call attention to UI elements using success coloring so this color is generally reserved for success messaging following user activity.
The info color is used to convey information of an informative, non-urgent nature. Users are not required to take action when informational data is displayed.
The warning color is used to convey information of a potentially serious nature that the user may need to act on. The state is not yet non-blocking but may become so unless the user acts.
The danger color is used to indicate a blocking or error condition that the user must act on before they can proceed. A system in this state is blocking in nature and requires immediate attention and action.
For more information on state usage with Material Design, visit https://material.io/design/interaction/states.html
Collectively, the colors that constitute the Color System are, for the purposes of this documentation, referred to as a "color palette." Here is the complete palette in the Color System with their corresponding CSS custom property names:
The Theme System not only provides every color in the color palette for a given theme, but a variety of darker and lighter variations of those colors as well. The following tables show the darker/lighter variations of each color in the color palette along with their corresponding CSS custom property names for use within the application. The code will rarely reference the individual color variations and it is recommended that developers stick to the base or state colors identified above.
You can use the following brand selection list to switch between example brand identities and view the resulting color value updates as they are applied to each of the semantic color names.
Primary
--wuf-color-primary
|
|
|
--wuf-color-primary-darker-5
--wuf-color-primary-darker-10
--wuf-color-primary-darker-15
--wuf-color-primary-darker-20
--wuf-color-primary-darker-25
--wuf-color-primary-darker-30
--wuf-color-primary-darker-35
--wuf-color-primary-darker-40
--wuf-color-primary-darker-45
--wuf-color-primary-darker-50
|
--wuf-color-primary-lighter-10
--wuf-color-primary-lighter-20
--wuf-color-primary-lighter-30
--wuf-color-primary-lighter-40
--wuf-color-primary-lighter-50
--wuf-color-primary-lighter-60
--wuf-color-primary-lighter-70
|
Secondary
--wuf-color-secondary
|
|
|
--wuf-color-secondary-darker-5
--wuf-color-secondary-darker-10
--wuf-color-secondary-darker-15
--wuf-color-secondary-darker-20
--wuf-color-secondary-darker-25
--wuf-color-secondary-darker-30
--wuf-color-secondary-darker-35
--wuf-color-secondary-darker-40
--wuf-color-secondary-darker-45
--wuf-color-secondary-darker-50
|
--wuf-color-secondary-lighter-10
--wuf-color-secondary-lighter-20
--wuf-color-secondary-lighter-30
--wuf-color-secondary-lighter-40
--wuf-color-secondary-lighter-50
--wuf-color-secondary-lighter-60
--wuf-color-secondary-lighter-70
|
Accent
--wuf-color-accent
|
|
|
--wuf-color-accent-darker-5
--wuf-color-accent-darker-10
--wuf-color-accent-darker-15
--wuf-color-accent-darker-20
--wuf-color-accent-darker-25
--wuf-color-accent-darker-30
--wuf-color-accent-darker-35
--wuf-color-accent-darker-40
--wuf-color-accent-darker-45
--wuf-color-accent-darker-50
|
--wuf-color-accent-lighter-10
--wuf-color-accent-lighter-20
--wuf-color-accent-lighter-30
--wuf-color-accent-lighter-40
--wuf-color-accent-lighter-50
--wuf-color-accent-lighter-60
--wuf-color-accent-lighter-70
|
Success
--wuf-color-success
|
|
|
--wuf-color-success-darker-5
--wuf-color-success-darker-10
--wuf-color-success-darker-15
--wuf-color-success-darker-20
--wuf-color-success-darker-25
--wuf-color-success-darker-30
--wuf-color-success-darker-35
--wuf-color-success-darker-40
--wuf-color-success-darker-45
--wuf-color-success-darker-50
|
--wuf-color-success-lighter-10
--wuf-color-success-lighter-20
--wuf-color-success-lighter-30
--wuf-color-success-lighter-40
--wuf-color-success-lighter-50
--wuf-color-success-lighter-60
--wuf-color-success-lighter-70
|
Info
--wuf-color-info
|
|
|
--wuf-color-info-darker-5
--wuf-color-info-darker-10
--wuf-color-info-darker-15
--wuf-color-info-darker-20
--wuf-color-info-darker-25
--wuf-color-info-darker-30
--wuf-color-info-darker-35
--wuf-color-info-darker-40
--wuf-color-info-darker-45
--wuf-color-info-darker-50
|
--wuf-color-info-lighter-10
--wuf-color-info-lighter-20
--wuf-color-info-lighter-30
--wuf-color-info-lighter-40
--wuf-color-info-lighter-50
--wuf-color-info-lighter-60
--wuf-color-info-lighter-70
|
Warning
--wuf-color-warning
|
|
|
--wuf-color-warning-darker-5
--wuf-color-warning-darker-10
--wuf-color-warning-darker-15
--wuf-color-warning-darker-20
--wuf-color-warning-darker-25
--wuf-color-warning-darker-30
--wuf-color-warning-darker-35
--wuf-color-warning-darker-40
--wuf-color-warning-darker-45
--wuf-color-warning-darker-50
|
--wuf-color-warning-lighter-10
--wuf-color-warning-lighter-20
--wuf-color-warning-lighter-30
--wuf-color-warning-lighter-40
--wuf-color-warning-lighter-50
--wuf-color-warning-lighter-60
--wuf-color-warning-lighter-70
|
Danger
--wuf-color-danger
|
|
|
--wuf-color-danger-darker-5
--wuf-color-danger-darker-10
--wuf-color-danger-darker-15
--wuf-color-danger-darker-20
--wuf-color-danger-darker-25
--wuf-color-danger-darker-30
--wuf-color-danger-darker-35
--wuf-color-danger-darker-40
--wuf-color-danger-darker-45
--wuf-color-danger-darker-50
|
--wuf-color-danger-lighter-10
--wuf-color-danger-lighter-20
--wuf-color-danger-lighter-30
--wuf-color-danger-lighter-40
--wuf-color-danger-lighter-50
--wuf-color-danger-lighter-60
--wuf-color-danger-lighter-70
|


Notifications
Partner comes equipped with advanced page notifications that allow you to show content to users without disrupting their view of the entire page.
Similar to modals, these notifications can be either shown automatically after a certain time or they can be triggered by a button that has the a [data-notification-link] attribute.
Example uses:
- Cookies policy notifications (essential for EU-based websites)
- Triggering newsletter signups
- Alerting users to a promotion or special offer
We're running business growth workshops in September
Register your attendance now — workshops are run by Partner experts, free of charge.
Tell Me More No ThanksHey there, this is a cookies enabled notification. Close it once and it's closed forever.
Read About Cookies Dismiss


Follow these steps to add custom libraries to your Python project:
lean library add "<projectName>" <packageName>
to add the <packageName>
PyPI package to the project in . / <projectName>.$ lean library add "My Project" altair Retrieving latest compatible version from PyPI Adding altair 4.1.0 to 'My Project/requirements.txt' Installing altair 4.1.0 in local Python environment to provide local autocomplete
altair
package that is compatible with Python 3.8 (which is what the official LEAN Docker images use).
If you want to use a different version you can use the --version <value>
option.
Additionally, you can pass the --no-local
flag to skip installing the package in your local Python environment.
Follow these steps to remove custom libraries from your Python project:
lean library remove "
<projectName>
"
<packageName>
to remove the <packageName>
PyPI package from the project in . / <projectName>.$ lean library remove "My Project" altair Removing altair from 'My Project/requirements.txt'
Additionally, you can also add or remove custom Python libraries by modifying the project's requirements.txt file. If you choose to do this, make sure that the library versions that you add to this file are compatible with Python 3.6, because that's what the official LEAN Docker images use.


Program view
You can check Program information here. Select different attribute to find what you want!
Categories
Due Days
Tuition
Due Days+Tuition


Toggle navigation
ŷ
hat
Rodeo
Rodeo {{ version }}
Rodeo from
ŷ
hat
Rodeo is an IDE for Python that's built for doing data analysis.
Edit Files
Use scripts or the IPython shell
Plot and Visualize
View Your Data
Autocomplete
Help and Documentation


Jennifer A. Stark Ph.D.
Data Engineer & Analyst, SpareRoom
PyDataMCR Co-organiser
As a Neuroscience Post Doc
As a Research Assistant
As a Computational Journalism Post Doc
- "Algorithmic Accountability"
Can we design or simulate a complex system with these attributes??
Yes! (move your mouse)
Simpy
Mesa (GitHub: /projectmesa/mesa)
The Mesa Project - Jackie Kazil PyDataDC 2016
Forecasting Social Inequality - James Allen PyData London 2017
p5.js - JavaScript library based on Processing to make coding fun and accessible
p5 agents - from Nature of Code book: p5 examples
Simpy - Discrete event simulation for Python
Explorable Explanations - Hub for learning through play
LOOPY - a tool for thinking in systems
Reveal.js - used for this presentation


Application Domain
The AppDomain
class lets you load assemblies from any file stream at runtime. This feature can be used to reduce the need for program flash memory by loading code only as needed from a USB flash drive or SD card, or when you won't know until runtime which assemblies will be used.
The sample code below loads and executes a small assembly from a USB flash drive. To run this sample, start a new project in Visual Studio and copy the first code sample into the Program.cs
window. Then add a new TinyCLR class named TestAppDomainAssembly.cs
, and copy the second code sample into this window.
Tip
Needed NuGets: GHIElectronics.TinyCLR.Core, GHIElectronics.TinyCLR.Devices.Storage, GHIElectronics.TinyCLR.IO, GHIElectronics.TinyCLR.Native, and GHIElectronics.TinyCLR.Pins.
var storageController = StorageController.
FromName(SC20260.StorageController.
UsbHostMassStorage);
var drive = FileSystem.Mount(storageController.Hdc);
var filename = drive.Name + "\\TestAppDomain.pe";
FileStream fsRead = new FileStream(filename,
System.IO.FileMode.Open);
var assemblyInBytes = new byte[fsRead.Length];
fsRead.Read(assemblyInBytes, 0, assemblyInBytes.Length);
var assembly = Assembly.Load(assemblyInBytes);
var obj = AppDomain.CurrentDomain.CreateInstanceAndUnwrap("TestAppDomain",
"TestAppDomain.TestAssembly");
var type = assembly.GetType("TestAppDomain.TestAssembly");
MethodInfo mi = type.GetMethod("PrintMessage");
mi.Invoke(obj, null);
TestAppDomainAssembly.cs
class:
namespace TestAppDomain {
public class TestAssembly
{
public void PrintMessage()
{
System.Diagnostics.Debug.WriteLine("Hello from TestAssembly");
}
}
}
In the TestAppDomain
properties window (right click on TestAppDomain
in Solution Explorer and select Properties
), click on TinyCLR OS
in the left panel and check the Generate native stubs for internal methods
and Generate bare native stubs
boxes. This tells Visual Studio to create the Portable Executable (PE) file that will be copied to the USB flash drive and then executed by the main program.
Now build the project. Inside of the project's directory navigate to the TestAppDomain/bin/Debug/pe
directory and copy the file TestAppDomain.pe
to a USB flash drive. Now insert the flash drive into your SITCore board and deploy the program. The main program will load and run TestAppDomain.pe
from the USB flash drive. If everything worked, you should see the following in your output window:
'GHIElectronics.TinyCLR.VisualStudio.ProjectSystem.dll' (Managed): Loaded 'TestAppDomain'
Assembly: TestAppDomain (<IP_ADDRESS>) Hello from TestAssembly


Creative Commons 3.0 Attribution : you are free to copy, adapt, distribute and transmit this document and associated schemas. The required attribution is a link back to this document (or the schema), ideally following linked data principles.
This document provides a vocabulary specification for the purpose of creating sharable reviews and ratings of blogs, CDs, books, software, anything identifiable. It includes the definition of an RDF vocabulary as well as a GRDDL-enabled HTML meta data profile for the hReview microformat.
This document is liable to editorial changes although the RDF Schema is now stable.
This specification aims to define the minimum terms needed to provide a review/rating capability, generally leaving the rest of the resource description to existing, more domain-appropriate vocabularies. The core terms are stable with several deployments (e.g. see Revyu), certain new terms are provisionally included while testing in deployment (see ITerating).
The vocabulary is suitable for use in any RDF-compatible language : FOAF, DOAP, RSS etc. It is also compatible with the hReview microformat and OWL Lite.
To use with microformats, see hReview Profile
The XML namespace for this vocabulary is
http://www.purl.org/stuff/rev#
i.e. in RDF/XML documents the following attribute should be included in the rdf:RDF element :
xmlns:rev="http://www.purl.org/stuff/rev#"
Reviews written using the RDF Review Vocabulary will typically also use terms from the Dublin Core and FOAF namespaces :
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
An alphabetical index of RDF Review Vocabulary terms, by class (concepts) and by property (relationships, attributes), are given below. All the terms are hyperlinked to their detailed description for quick reference.
Classes: Comment, Feedback, Review,
Properties: commenter, hasComment, hasFeedback, hasReview, maxRating, minRating, positiveVotes, rating, reviewer, text, title, totalVotes, type,
...
The RDF Review Vocabulary definitions presented here are ...
Here is an RDF/XML document describing a review:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rev="http://purl.org/stuff/rev#" xmlns:s="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <rdf:Description rdf:about="http://revyu.com/things/rome-city-italy-history-art-1235403088"> <rev:hasReview rdf:resource="http://revyu.com/reviews/bdd81f728376b16b1c10294470713b7ddeb12f5c"/> <s:label>Rome</s:label> <s:seeAlso rdf:resource="http://revyu.com/things/rome-city-italy-history-art-1235403088"/> </rdf:Description> <rdf:Description rdf:about="http://revyu.com/reviews/bdd81f728376b16b1c10294470713b7ddeb12f5c"> <rev:createdOn>2009-02-23T07:31:28-08:00</rev:createdOn> <rev:maxRating>5</rev:maxRating> <rev:minRating>1</rev:minRating> <rev:rating>5</rev:rating> <rev:reviewer rdf:resource="http://revyu.com/people/gianlucaangelic"/> <rev:text>Rome is an historical and fantastic city, full of monuments, churches and streets. Anybody is able to mention, maybe with a slight effort, its most famous monuments and the protagonists of its history. This is perhaps the key to the charm of a city that seems to invite every visitor to feel part of its complex reality and its millennial history.</rev:text> <s:label>Review of Rome, by gianlucaangelic</s:label> <foaf:primaryTopic rdf:resource="http://revyu.com/things/rome-city-italy-history-art-1235403088"/> </rdf:Description> <rdf:Description rdf:about="http://revyu.com/people/gianlucaangelic"> <s:seeAlso rdf:resource="http://revyu.com/people/gianlucaangelic"/> </rdf:Description> </rdf:RDF>
...
URI: http://purl.org/stuff/rev#Comment
Comment - A comment on a review
URI: http://purl.org/stuff/rev#Feedback
Feedback - Feedback on the review. Expresses whether the review was useful or not
URI: http://purl.org/stuff/rev#Review
Review - A review of an work
URI: http://purl.org/stuff/rev#commenter
commenter - The commenter on the review
URI: http://purl.org/stuff/rev#hasComment
hasComment - Used to associate a review with a comment on the review
URI: http://purl.org/stuff/rev#hasFeedback
hasFeedback - Associates a review with a feedback on the review
URI: http://purl.org/stuff/rev#hasReview
has Review - Associates a work with a a review
URI: http://purl.org/stuff/rev#positiveVotes
positiveVotes - Number of positive usefulness votes (integer)
URI: http://purl.org/stuff/rev#rating
rating - A numeric value
URI: http://purl.org/stuff/rev#reviewer
reviewer - The person that has written the review
URI: http://purl.org/stuff/rev#text
text - The text of the review
URI: http://purl.org/stuff/rev#title
title - The title of the review
URI: http://purl.org/stuff/rev#totalVotes
totalVotes - Number of usefulness votes (integer)
URI: http://purl.org/stuff/rev#type
type - The type of media of a work under review
...
This is a provisional XMDP profile for the hReview specification.
Use of this profile licenses RDF data extracted using hreview2rdfxml.xsl.
To apply this profile to a document (and GRDDL-enable them), add the following profile attribute to its head element:
<head
profile="http://www.purl.org/stuff/rev#"
>
Note multiple profiles can be used, space-separated, e.g.
<head profile="http://www.purl.org/stuff/rev#
http://www.w3.org/2006/03/hcard http://purl.org/stuff/glink/">
Sample hReview, GRDDL output (Turtle view)
2009-02-23 : This doc updated using SpecGen
2008-12 : RDF Schema cleaned up, hosting moved
2007-10/2007-11 :
2006 :
2005-05-10 :
First Draft 26th September 2003
Contributions to, and feedback on these documents have been provided by: Leigh Dodds, Victor Lindsay, Alf Eaton, Benjamin Nowack, Morten Frederikson, Nicolas Vandenberghe. Tools used in the creation of these documents include: Amaya, schemadoc.py, nxml-mode, Pellet


| Actions | Name | Phone number | |
|---|---|---|---|
| Details | {{lead.LeadName}} | {{lead.PhoneNumber}} | {{lead.Email}} |
| Actions | Name | Phone number | |
|---|---|---|---|
| Details | {{lead.LeadName}} | {{lead.PhoneNumber}} | {{lead.Email}} |
| Actions | Name | Phone number | |
|---|---|---|---|
| Details | {{lead.LeadName}} | {{lead.PhoneNumber}} | {{lead.Email}} |


Russolo compares the evolution of music to the multiplication of machinery, pointing out that our once desolate sound environment has become increasingly filled with the noise of machines, encouraging musicians to create a more "complicated polyphony"[3] in order to provoke emotion and stir our sensibilities. He notes that music has been developing towards a more complicated polyphony by seeking greater variety in timbres and tone colors.


 That is not our problem! The recipe for
Stardust
is our only secret and you expect me to teach it to you without any payment...?

Say you will pay the price.


{% include "partials/meta.html" %} {% include "partials/toplinks.html" %}
Effect accomplished using JQuery
Effect accomplished using only HTML5 and CSS3
Feel free to download my resume and contact info for your reference. I'm looking forward to hearing from you soon!


This site can’t be reached
http://spike.yeet/
’s server IP address could not be found.
ERR_NAME_NOT_RESOLVED


Board Settings
ESP32 on-board LED
(blue)
System Heartbeat
LED Bar Indicator
(green/yellow/red)
DHT22 - Temperature
DHT22 - Humidity
MH-Z19 - CO2 Level
Serial Console
(Serial Monitor)
Print Sensor Values
Back to Main Page


--- layout: post title: The Svalbard Global Seed Vault date: '2008-06-08T16:21:14+01:00' tags: [] tumblr_url: http://backlog.robbevan.com/post/37621585/the-svalbard-global-seed-vault --- The Svalbard Global Seed Vault


For detailed example and screenshots see Reconciling countries against DBpedia
Reconciliation can be based on standard SPARQL using regular expression comparison. This method is generally limited and shows poor performance on large datasets as current SPARQL implementations are slow when it comes to evaluating regular expression queries on large datasets.
As SPARQL results are not ranked, even exact matches are not guaranteed to be included in the result when using regular expression comparison and limiting the number of returned results. Hence, SPARQL-based reconciliation service starts with a string comparison of label (i.e. exact match) and only if no result is found tries regular expression comparison.
Type and property autocompletion are also supported using regular expression comparison with types and properties labels (represented using rdfs:label
or skos:prefLabel
)
SELECT ?entity
WHERE{
?entity <http://www.w3.org/2000/01/rdf-schema#label> ?label.
FILTER (str(?label) = 'Galway').
FILTER isIRI(?entity).
} LIMIT 3;
SELECT ?entity ?label1
WHERE{
?entity <http://www.w3.org/2000/01/rdf-schema#label> ?label1.
FILTER regex(str(?label1),'Galway','i').
FILTER isIRI(?entity).
} LIMIT 3
SELECT ?entity ?label1 ?label2
WHERE{
{
OPTIONAL{
?entity <http://www.w3.org/2000/01/rdf-schema#label> ?label1.
FILTER regex(str(?label1),'Galway','i')
}
OPTIONAL{
?entity <http://purl.org/dc/terms/title> ?label2.
FILTER regex(str(?label2),'Galway','i')
}
FILTER ( bound(?label1) || bound(?label2))
}
FILTER isIRI(?entity).
} LIMIT 3
SELECT ?entity ?label1
WHERE{
{
OPTIONAL{
?entity <http://www.w3.org/2000/01/rdf-schema#label> ?label1.
FILTER regex(str(?label1),'Galway','i')
}
OPTIONAL{
?entity <http://purl.org/dc/terms/title> ?label2.
FILTER regex(str(?label2),'Galway','i')
}
FILTER ( bound(?label1) || bound(?label2))
}
{
{?entity rdf:type <http://dbpedia.org/ontology/PopulatedPlace>. }
UNION
{?entity rdf:type <http://dbpedia.org/class/yago/Locations>. }
}
?entity <http://dbpedia.org/property/subdivisionName> 'Ireland'.
FILTER isIRI(?entity).
} LIMIT 3
SELECT DISTINCT ?type ?label
WHERE{
[] a ?type.
?type ?p ?label.
FILTER (?p= || ?p=).
FILTER regex(str(?label),'^perso','i')
} LIMIT 10


Slaughter Day: Part 1, Slaughtering and Scalding Pigs
by Matt
A month ago, Tasha and I and several friends spent a long weekend immersed in what has come to be for us an annual event - slaughering our pigs. It’s never a day we look forward to especially, but when the days grow short and the overnight temperatures dip into the 30s, our thoughts turn to planning the pig slaughter.
This year as in past years, our main concern has been to dispatch each pig as painlessly and humanely as possible. The Wendell Berry poem, “For the Hog Killing,” has become for us a sort of invocation at slaughter time, as well as a standard to uphold: “let them die while the sound of the shot is in the air, let them die as they fall.” In other words, as one commentator on the poem has put it, let the slaughter take place “with a minimum of violence.”
Tasha and I respect the lives of all the animals we care for, maybe even more so the ones we know we will eventually have to slaughter. LIke all the pigs we’ve raised, we cared for these from the time we brought them onto our farm as piglets until, over the course of the better part of a year, they’d grown to almost 400 pounds. Unlike past years, these piglets were obtained from our friends and neighbors Donnie and Anita Collins, whose breeding pair of Berkshires had produced these three males.
From the time we moved them onto our farm in early spring, the pigs had as carefree a life as we were able to manage for them, never wanting for food, water or shelter, and having almost an acre of paddock to root and forage on. When the heat set in over the summer, we provided them with a wallow, watching them roll happily in the mud or doze in the shade of a thicket of bushes and trees. They had a good life here indeed.
As Joel Salatin has famously said, “So what if the pig has one bad day?” But we have endeavored to eliminate even that one bad day, slaughtering here on our farm instead of having it done at a commercial abbatoir. Ideally, the pig is shot in the forehead with a .22 rifle while feeding and then loses consciousness from the shot. While unconcious, his jugular vein or carotid artery is immediately severed with a stroke of the knife, and within seconds or a minute or two at most, succumbs from loss of blood.
 With this in mind, it is also crucial to the process on practical as well as ethical grounds that the pig not be stressed or frightened before the slaughter, as the stress hormones that are rapidly dispersed into the pig’s bloodstream can sour the meat. This is just one more reason to carry out the slaughter with the utmost care.
This year our friend Tom, an avid hunter, offered to be our shooter. He expertly took down each pig with a carefully placed shot to the forehead, straight between the eyes and about an inch or so up. For full effect, the shot must be placed perpendicular to the pig’s skull. This is trickier than it would seem, even at point-blank range, because the pigs are constantly moving around and jockeying for position to get closest to the food.
As the first pig–our largest–went over at the shot, I hopped the wires of the electric fence and stuck it in the neck with a very sharp boning knife. I swept the knife blade up and back until blood gushed forth in a thick stream, alerting me that I’d cut the right the vein. This pig was so large that I had some difficulty getting my arm around its neck to the spot where i needed to plant the knife, though I did quickly find it and make the cut.
With the next two pigs, I opted to make the stick almost at the breast and closer to the heart, a technique I’d seen done before, but one with which I had less practice. The cut involves sticking the knife in just above the pig’s breastplate and sweeping the knifeblade under to sever the carotid artery just above the heart.
Tools of the Trade: Butcher Knife, Boning Knife and Straight Razor
With either of the two techniques, whether severing the jugular vein or carotid artery at the neck, or the carotid artery closer to the heart, a quick and humane death and a good bleed are ensured, if done properly. Having now gained more experience with the second technique, I feel it is the better way to go, especially with larger animals with a lot of fat around the jowl and neck, which makes locating the right spot in the neck a little more difficult.
In order to avoid the repetitious description of the identical process involved in scalding and butchering each slaughtered pig, I’ll try rather to encapsulate and summarize the salient details and describe the process more abstractly from here on. I will also note that from shooting and sticking to splitting the carcass takes us on average about two hours for each pig.
When each pig had finished bleeding out and we were certain that it was no longer alive, we attached ropes to its feet and dragged it the twenty-odd feet to our 4” x 6” crossbeam where we had hung a couple of engine hoists suspended over a scalding vat a little more than half full of 150-degree water. It’s important to leave room in the tank for the water the carcass will displace. No one likes to be burned by overflowing water as the pig is lowered into the tank.
This tank, incidentally, started life as a heating oil tank before it was used as a stock tank on a local farm. It was brought to us by our friend Ted the first year we slaughtered pigs because we had trouble finding a large enough tank we could safely heat. With a few welded modifications and a spigot to easily drain water from the bottom, we had a custom-built tank that would be big enough for our pigs.
Scalding Station with Engine Hoists
Bringing the 60 gallons of water necessary to scald a pig up to 150 degrees and holding it there for the duration of the slaughter can be a challenge; it is sometimes the most time consuming part of preparing for a slaughter. Anticipating this, I now start the two propane burners that heat our scalding tank first thing in the morning–that is, around 5:00 AM if we are planning to start slaughtering at 9:00 AM. If the previous night’s lows dip into the 20s, there is frequently a layer of ice on the surface of the tank and the water will take several hours to reach temperature. One way we conserve heat is by covering the top of the tank with foam insulation board. If it is very windy we also try to enclose the underside of the tank where the burners are situated with cinder block, foam board or other insulative materials.
Scalding and scraping is not a strictly necessary part of the process of butchering a pig. Like most other large animals, pigs can be skinned, and depending on your meat preferences and situation, this may be a better option for some. Since we prize our bacon cuts and hams above all else–the latter of which we turn into prosciutto or aged country ham–the skin is an important and necessary part for us.
With the pig carcass transported as close to the scalding tank as possible, I use a very sharp boning knife to make cuts in each of the front and rear legs, between the bone and the strong, tight tendons just below the knee joints. This can be tricky work with a sharp knife, so slowly and carefully is the way to go here. When each set of cuts has been made, I insert a steel gambrel through both the front and the back legs. A gambrel (or singletree) is a sturdy hanger with curved, pointed tines on each end that fit through the slits in the legs. In the center of the gambrel is an eye for attaching a hook or connector at the end of a rope or chain with which to raise the carcass and lower it into the scalding tank.
Tools of the Trade: Spring Scale, Gambrel, Boning Hook, Bell Scraper, Bone Saw
In the months before we first slaughtered pigs in 2015, I built a crossbeam from several lengths of pressure-treated 4” x 6” beams (see first photo). Two uprights set in concrete and braced diagonally at the base where they contact the ground suspend a horizontal beam about 10 feet in the air. The height is necessary to clear the top of the tank with the length of the vertically suspended pig. With the hope of scalding two pigs at a time (impractical as I now know), I drilled through the top of the crossbeam in two places and attached a heavy-duty eyebolt through each hole. From each eyebolt, we hang an engine hoist, which is simply a racheting, locking, geared pulley that provides a significant mechanical advantage for lifting a heavy object overhead. Pulling a chain loop attached to the gears either raises or lowers the attached object… very slowly.
With the front gambrel hooked to a chain attached to the engine hoist, one person pulls on the chain loop and begins ratcheting the carcass up and forward into the scalding tank, while at least two others hold onto the rear gambrel running through the back legs and steer the back half of the carcass up and over the rim of the scalding tank, carefully placing it into the hot water. Since the mass of the pig carcass will quickly absorb heat and lower the water temperature, it’s not a bad idea to heat the water hotter (155 or even 160 degrees) than the target temperature of 150 degrees, keeping in mind that contacting the flesh of the pig with the possibly overheated metal of the scalding tank may set the hair follicle, making it impossible to remove with a scraper.
With this in mind, we typically run at least three lengths of chain across the width of the scalding tank. With these in place, between the bottom of the tank and the mass of the carcass, people on either side can pull the chains, thus rotating the carcass and keeping it from settling on the bottom of the tank. While several volunteers are employed agitating these chains, another dumps buckets of hot water across the exposed parts of the carcass such as the legs, which never fully submerge in the tank. Every minute or so, it’s a good idea to check the status of the hair by yanking on a tuft of it. When hair pulls easily from several places, usually after about five minutes of submersion in hot water, the carcass should be raised as quickly as possible from the water.
At this point, the pig carcass is now hanging vertically over the tank and completely out of the water. Working as quickly as possible, four people, each one armed with a bell scraper (basically a bell-shaped hemisphere of metal attached to a handle), begin working the flesh. Ideally, the movement of the rough edge of the scraper over the hair follicle removes the heat-loosened hairs relatively easily. In practice, there are usually some parts that require the hair be shaved off with a knife blade or straight razor. If there are large areas of the pig where the hair doesn’t scrape off easily, then it’s usually necessary to return the carcass for another dip in the scalding vat, again making sure not to set the hair follicles by overheating the tank.
When each pig has been satisfactorily scalded and scraped, the second hoist comes into play as a means of lowering out, or transferring in tandem with the first hoist, the pig carcass onto a hanging spring scale attached to the second hoist, where it is weighed and processed further. Weighing is not strictly necessary either, but we like to collect as much data as possible to assess our feed-to-meat ratio, figure out our cost per pound, and so forth, and hanging weight is a key metric in this regard.
With the pig now hanging on the second engine hoist and safely away from the scalding vat, we note the weight and lower it to a comforatble working height and begin the process of evisceration, which I will describe in detail in the second part of this series of posts.
Subscribe via RSS


simple_rl.experiments package¶
Submodules¶
simple_rl.experiments.ExperimentClass module¶
ExperimentClass.py: Contains the Experiment Class for reproducing RL Experiments.
- Purpose:
- Stores all relevant parameters in experiment directory for easy reproducibility.
- Auto generates plot using chart_utils.
- Can document learning activity.
-
class
simple_rl.experiments.ExperimentClass.
Experiment
(agents, mdp, agent_colors=[], params=None, is_episodic=False, is_markov_game=False, is_lifelong=False, track_disc_reward=False, clear_old_results=True, count_r_per_n_timestep=1, cumulative_plot=True, exp_function='run_agents_on_mdp', dir_for_plot='', experiment_name_prefix='')[source]¶ Bases:
object
-
EXP_PARAM_FILE_NAME
= 'exp_info.txt'¶ Experiment Class for RL Experiments
-
FULL_EXP_FILE_NAME
= 'full_experiment.txt'¶
-
RESULTS_DIR
= '/Users/dabel/Research/simple_rl/docs/sphinx/results/'¶
-
add_experience
(agent, state, action, reward, next_state, time_taken=0)[source]¶ - Args:
- agent (agent OR dict): if self.is_markov_game, contains a dict of agents
- Summary:
- Record any relevant information about this experience.
-
simple_rl.experiments.ExperimentParametersClass module¶
ExperimentParametersClass.py: Contains the ExperimentParameters Class.
Purpose: Bundles all relevant parameters into an object that can be written to a file.


Testing is about gaining confidence that your code does what you think it should do
Protractor is built on top of WebDriverJS, which is an API, written as extensions, for controlling browsers.
Use npm to install Protractor globally with
sudo npm install protractor -g
Use webdriver-manager to download the necessary binaries with
sudo webdriver-manager update
Now start up a server with
sudo webdriver-manager start
// conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['spec.js'],
capabilities: {
browserName: 'firefox'
}
}
// conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['spec.js'],
multiCapabilities: [{
browserName: 'firefox'
}, {
browserName: 'chrome'
}]
}
// spec.js
describe('Protractor Demo App', function() {
it('should have a title', function() {
browser.get('http://juliemr.github.io/protractor-demo/');
expect(browser.getTitle()).toEqual('Super Calculator');
});
});
The describe and it syntax is from the Jasmine framework. browser is a global created by Protractor, which is used for browser-level commands such as navigation with browser.get.
// spec.js
describe('by model', function() {
it('should find an element by text input model', function() {
var username = element(by.model('username'));
var name = element(by.binding('username'));
username.clear();
expect(name.getText()).toEqual('');
username.sendKeys('Jane Doe');
expect(name.getText()).toEqual('Jane Doe');
});
});
by.model(modelName):Find an element by ng-model expression.
by.binding:Find an element by binding.
// spec.js
describe('Protractor Demo App', function() {
it('should add one and two', function() {
browser.get('http://juliemr.github.io/protractor-demo/');
element(by.model('first')).sendKeys(1);
element(by.model('second')).sendKeys(2);
element(by.id('gobutton')).click();
expect(element(by.binding('latest')).getText()).
toEqual('5'); // This is wrong!
});
});
element takes one parameter, a Locator, which describes how to find the element. The by object creates Locators.
start the webdriver server
webdriver-manager start
run Protractor in another terminal
protractor test/e2e/config.js //this is the relative path to your config.js file


--- layout: default title: Welcome image: "http://assets.eliduke.com/web-design/poopypants.png" ---
First things first! If you just arrived here from Instagram, will you be a doll and tap those 3 little dots in the corner, and then "Open in Browser." It's better that way. Thanks!
If this is your first time here and you're curious about my time in Antarctica, the best intro to the what and the where and the why and the how is to read the first blog post here:
After that, you can click Home to see the newest posts. I will try to post about once a week, but we shall see how that goes. If you wanna get real old school, you should subscribe to my RSS feed. 🤓
I will be a Carpenter Apprentice at McMurdo Station, Antarctica, for the (big) austral summer research season from October to February. I will be supporting science through the United States Antarctic Program and the National Science Foundation. I've done five of these stints in the past, and my last season was 10 years ago!
If you want a postcard from McMurdo Station, send me an email with your full name and mailing address!
I will have some ability for communication, but the internet is slow and there's no wifi. Everything happens at a computer in a kiosk. I can receive voicemails. I can send and receive basic sms messages.
Email<EMAIL_ADDRESS>Phone: 424-ELI-DUKE (voicemail & sms)
Mailing Address:
Eli Duke
McMurdo Station - ASC
PSC 769 Box 700
APO AP 96599-1035
Mail is very slow at McMurdo, but it still does find its way eventually. The best bet is to send things via "flat mail," which actually means NO BOXES. You can even send large padded envelopes and those usually get through ok. It is always better to send multiple smaller things than one BIG BOY, and everything needs a customs form so make sure you check with the USPS staff to get the correct form. Also, there is usually a mail slump in the middle of the season (Dec/Jan), get on it if you're gonna do it!


Cash Levels as of {{ begin_date.date }} w/ balance {{ begin_level }}
Date
Min level
Cash level
{% for ind, row in cash_df.iterrows %}
{{ row.date.date }}
{{ row.min_level }}
{{ row.final_level }}
{% endfor %}


Before Change
// run command but does not wait for result.
if realtime:
import pexpect
try:
if isinstance(cmd, str):
child = pexpect.spawn(cmd, timeout=None)
else:
child = pexpect.spawn(subprocess.list2cmdline(cmd), timeout=None)
while True:
try:
child.expect("\n")
if env.verbosity > 0:
sys.stdout.write(child.before.decode() + "\n")
except pexpect.EOF:
break
child.wait()
child.close()
return child.exitstatus
except Exception as e:
sys.stderr.write(str(e))
return 1
elif wait_for_task or sys.platform == "win32":
return subprocess.Popen(cmd, shell=True, **kwargs)
else:
p = DaemonizedProcess(cmd, **kwargs)
After Change
// run command but does not wait for result.
if realtime:
from .utils import pexpect_run
return pexpect_run(cmd)
elif wait_for_task or sys.platform == "win32":
return subprocess.Popen(cmd, shell=True, **kwargs)
else:
p = DaemonizedProcess(cmd, **kwargs)


Next: Type Specifiers, Previous: Data Type Definition, Up: Types
The types cons, symbol, array, number, character, hash-table,
function,
readtable, package, pathname, stream, random-state, condition, restart, and any single other type created by defstruct,
or defclass are pairwise disjoint, except for type relations explicitly established by specifying superclasses in defclass
or the :include option of destruct.
Any two types created by defstruct are disjoint unless one is a supertype of the other by virtue of the defstruct :include option.
[Editorial Note by KMP: The comments in the source say gray suggested some change from "common superclass" to "common subclass" in the following, but the result looks suspicious to me.]
Any two distinct classes created by defclass or define-condition are disjoint unless they have a common subclass or one class is a subclass of the other.
An implementation may be extended to add other subtype relationships between the specified types, as long as they do not violate the type relationships and disjointness requirements specified here. An implementation may define additional types that are subtypes or supertypes of any specified types, as long as each additional type is a subtype of type t and a supertype of type nil and the disjointness requirements are not violated.
At the discretion of the implementation, either standard-object or structure-object might appear in any class precedence list for a system class that does not already specify either standard-object or structure-object. If it does, it must precede the class t and follow all other standardized classes.


Small List
A list that contains 2 icons, and a text. ideal for a small patch of text and icons. These support background colors, classic simple lists styles, or can support badges and even switches!
Large List
A list that contains 2 icons, and a text. ideal for a small patch of text and icons. These support background colors, classic simple lists styles, or can support badges and even switches!
User Groups
You can also create user groups, which can be linked to the user list above. It's simple and very intuitive.
Swipe & Tap Lists
To get more contact information simply tap the "Tap For More" text, or better yet, swipe the card to the left.


@remarks The absolute path includes all information required to locate a file or directory on a system.
The file or directory specified by Path is not required to exist. For example, if c:\temp\newdir is the current directory, calling GetFullPath on a file name such as test.txt returns c:\temp\newdir\test.txt. The file need not exist.
However, if Path does exist, the caller must have permission to obtain path information for path. Note that unlike most members of the Path class, this method accesses the file system.
This method uses current directory and current volume information to fully qualify Path. If you specify a file name only in Path, GetFullPath returns the fully qualified path of the current directory.
If you pass in a short file name, it is expanded to a long file name.
If a path contains no significant characters it is invalid unless it contains one or more "." characters followed by any number of spaces, then it will be parsed as either "." or "..".
@exceptions| Exception | Condition |
|---|---|
| ArgumentException |
Path is a zero-length string, contains only white space, or contains one or more of the invalid characters defined in GetInvalidPathChars. -or- The system could not retrieve the absolute path. |
| NotSupportedException | Path contains a colon (":") that is not part of a volume identifier (for example, "c:\"). |
Public Sub Main() Const FileName As String = "MyFile.Ext" Const Path1 As String = "MyDir" Const Path2 As String = "\MyDir" Dim FullPath As String FullPath = Path.GetFullPath(Path1) Debug.Print CorString.Format("GetFullPath('{0}') returns '{1}'", Path1, FullPath) FullPath = Path.GetFullPath(FileName) Debug.Print CorString.Format("GetFullPath('{0}') returns '{1}'", FileName, FullPath) FullPath = Path.GetFullPath(Path2) Debug.Print CorString.Format("GetFullPath('{0}') returns '{1}'", Path2, FullPath) End Sub ' Output is based on your current directory, except ' in the last case, where it is based on the root drive. ' ' GetFullPath('MyDir') returns 'C:\Program Files (x86)\Microsoft Visual Studio\VB98\MyDir' ' GetFullPath('MyFile.Ext') returns 'C:\Program Files (x86)\Microsoft Visual Studio\VB98\MyFile.Ext' ' GetFullPath('\MyDir') returns 'C:\MyDir'


Jordan B Peterson
Community Site
Peterson's Resources
Maps of Meaning Book
Maps of Meaning Website
The Psychological Significance of the Biblical Stories
2017 Maps of Meaning: The Architecture of Belief (University of Toronto)
2017 Personality and Its Transformations (University of Toronto)
Community Resources
Newsletter
Calendar
Study Group
Lecture Notes
Reading Group
Discussion Forum
YouTube
Twitter
Reddit
Meetups
Discord
Facebook Group: Liberal Discussion Group
Facebook Group: Study Group
Source Code for this Website
Website Discussion


Enter your username to manage your message board
(Enter "egolub", "mhicks" or "femad" for username)
UserName:
Password:
Log in to web portal


| Queen City Q |
Barbeque, Southern |
|
| Solstice Tavern |
Nightlife, Bars, Sports Bars, Burgers, Fast Food |
|
| Kid Cashew |
Tapas/Small Plates, Barbeque, Mediterranean, American (New) |
|
| Hooters |
Sports Bars, American (Traditional), Chicken Wings, Nightlife, Bars |
|
| Aix en Provence |
Mediterranean, Spanish, Italian, French |
|
| China Cafe |
Chinese |
|
| Dolce Ristorante |
Italian, Desserts, Bars, Nightlife, Wine Bars, American (New) |
|
| Bread and Kabob |
Falafel, Bakeries, Greek, Arabian, Grocery, Delis, Halal, Middle Eastern, Mediterranean |
|
| Wild Wing Cafe |
Burgers, Sports Bars, Sandwiches, Bars, Nightlife, Chicken Wings, American (Traditional) |
|
| The Wok |
Chinese |
|
| Dilworth Neighborhood Grille |
Sandwiches, Bars, Sports Bars, Nightlife, American (Traditional) |
|
| Charlotte Cafe |
Southern, Sandwiches, American (Traditional), Breakfast & Brunch |
|
| The Southern Gourmet |
Caterers, Specialty Food, Southern, Event Planning & Services |
|
| US Fried Chicken |
Burgers, American (Traditional), Chicken Wings |
|


Another celebre phrase by Winnie the Pooh...As A.A. Milne said.
Some people talk to animals. Not many listen though. That's the problem.
Did you ever stop to think, and forget to start again?
Molly had been starting out of her window for about and hour now. On her desk, lying between the copies of Nature, New Scientist, and all the other scientific journals her work had appered in, was a well thumbled copy of On The Road. It had been longer she spent in these four walls the more she felt she needed to be free.


EducationForIndia
Map View
Table View
About
Dashboard - Table View
State ▲
Internet Subscriptions(millions) ▲
Literacy Rate(Percentage) ▲
Population(millions) ▲
No. of Government Schools ▲


 The computer is your ready for commands and can't wait to execute your input. The computer will faithfully carry out the command if it is one it understands or provide and error message if it one it can not. The computer does not speak English, in order to give it commands, we must first start learning the language of the computer. If you run a Linux distribution, and you are only using the GUI, you are missing out. The Linux terminal is an extremely powerful tool that goes well beyond the GUI. Writing commands might seem scary for a beginner, but you will soon get the hang of it. In this guide, you will find an introduction to Linux commands, and additonal resources to encourages user's to use the terminal like a pro.
Let's break down a few commands to get you started:
There are a ton of commands - simple and sophisticated commands - which you will one day learn. But for now, like learning to add before you learn to multiply, this list will provide you with your Linux CLI command foundation. At the end of the list, some vital information you need to use the Linux CLI.
1. ls --
The ls command - the list command - functions in the Linux terminal to show all of the major directories filed under a given file system. For example, the command:
ls /applications
...will show the user all of the folders stored in the overall applications folder.The ls command is used for viewing files, folders and directories.
2. cd -- The cd command - change directory - will allow the user to change between file directories. As the name command name suggest, you would use the cd command to circulate between two different directories. For example, if you wanted to change from the home directory to the Cultivating Coders directory, you would input the following command: cd ~/CultivatingCoders
3. mv --
The mv command - move - allows a user to move a file to another folder or directory. Just like dragging a file located on a PC desktop to a folder stored within the "Documents" folder, the mv command functions in the same manner. An example of the mv command is:
mv/cultivatingcoders/applications/majorapps /cultivatingcoders/applications/minorappsbad
The first part of the command mv/cultivatingcoders/applications/majorapps lists the application to be moved. In this case, cultivatingcoders. The second part of the command /cultivatingcoders/applications/minorapps lists where arora will be moved to - from majorapps to minorapps.
4. mkdir -- The mkdir - make directory - command allows the user to make a new directory. Just like making a new directory within a PC or Mac desktop environment, the mkdir command makes new directories in a Linux environment. An example of the mkdir command mkdir testdirectory
5. pwd -- The pwd - print working directory - command allows the user to make a see what directory that are currently woring in. Just like the right click properties option in a PC or Mac operating system that shows the files entire location, the pwd command shows the user the entire tree structure for the current file directory the user has navigated to using the cd command in a Linux environment. An example of the pwd is /home/cultivatingcoders/applications/minorappsbad
In all cases, to submit a command to the computer, press enter.
Where Do You Go From Here?
There are a plethora of resources online on how to go from Commmand Line novice to black belt in no time
Let's start with man, help and cat commands
What did the foiled user say to the terminal?
Man I could really use some Help
The man and help commands are your guides to all possible uses of a specific flag. The aprapro command can also guide users to additonal information about a specific flag
man is the system's manual viewer; it can be used to display manual pages, scroll up and down, search for occurrences of specific text, and other useful functions. Each argument given to man is normally the name of a program, utility or function. The manual page associated with each of these arguments is then found and displayed. A section number, if provided, will direct man to look only in that section of the manual. The default action is to search in all of the available sections, following a pre-defined order and to show only the first page found, even if page exists in several sections.
The help command is very similar to the man command it will display informatioin about all built in commands
cat stands for "catenate." It reads data from files, and outputs their contents. It is the simplest way to display the contents of a file at the command line.
cat is one of the most commonly-used commands in Linux. It can be used to:
Display text files
Copy text files into a new document
Append the contents of a text file to the end of another text file, combining them
Additional Resources and Operating Systems
Below we list some of our favorite resources with command line guides, tips and tricks and how to use this powerful tool in Linux, Mac OS, and Windows
Linux and Mac OS
Using Apropos to Search Manual pages
Each manual page has a short description included with it. apropos searches these descriptions for instances of keyword.
keyword can be a regular expression (by default; also see the -r option), or may contain wildcards (-w), or be instructed to match the only exact keyword (-e). Using these options, it may be necessary to quote the keyword, or escape ("\") the special characters to stop the shell from interpreting them.
The standard matching rules allow matches to be made against the page name and word boundaries in the description.
Using Tab to Autocomplete commands
The Tab button on the keyboard is a huge time saver on Linux commands, as it will automatically fill in the names of files and directories.
If we want to delete a file named "whydidIgivethisfilesuchalongname", we just need to type "rm w" and pressing Tab will automatically complete the rest of the filename.
If there are more than files that begin with the same letters, e.g. "whydidIgivethisfilesuchalongname" and "whydidIeatsomuch", pressing Tab on "rm w" will autocomplete the common "whydidI".
Bash for Windows Whaaaaaaaaah?!?
In conslusion Windows 10 does have a option in system settings called developer mode. Once enabled you can begin to turn on or off intergrated functions such as BASH for the Windows environment.
Just because it is a viable option deos not mean you should do it. Often the challenge of learning a new tool can have users gravitate towards platforms they are comfortable using.
Want to take Command of the Command Line?
Mint User Tutorials
.
What's this BASH for Windows 10 about?!
BASH Win 10 Instructions.


jsPlumbToolkitInstance Class
An instance of the jsPlumb Toolkit. Each instance is backed by a Graph
, and has zero or more Renderer
s attached.
Creating an instance
You create an instance of the jsPlumb Toolkit via the static method jsPlumbToolkit.newInstance(params)
. The contents of params
are
any valid constructor parameters as detailed here.
Rendering data
An instance of the jsPlumb Toolkit does not itself handle rendering the data to your UI; to do that, you must call the render
method of your Toolkit instance:
var myToolkit = jsPlumbToolkit.newInstance();
var aRenderer = myToolkit.render({
container:"someElementId",
...other params, possibly..
});
Operating on the dataset
In general, you will operate on the dataset via the jsPlumbToolkitInstance
object, because any attached Renderers
will
for the most part sort themselves out based on the data model. Occasionally you will want to perform some view-specific
operation such as highlighting a Path, or hiding some Nodes, etc. These sorts of operations are executed on the
Renderer
and not on the Toolkit object.
Constructor
jsPlumbToolkitInstance
-
params
Parameters:
-
params
ObjectConstructor parameters
-
[idFunction]
Function optionalOptional function to use to extract an id from a Node's data. The default is to retrieve the
id
property. -
[typeFunction]
Function optionalOptional function to use to extract a type identifier from a Node's data. The default is to retrieve the property defined by
typeProperty
. -
[typeProperty="type"]
Function optionalOptional name of the property that identifies a Node's type from its data. The default is
type
. -
[edgeIdFunction]
Function optionalOptional function to use to extract an id from an Edge's data. The default is to retrieve the
id
property. -
[edgeTypeFunction]
Function optionalOptional function to use to extract a type identifier from an Edge's data. The default is to retrieve the property defined by
edgeTypeProperty
. -
[edgeTypeProperty="type"]
Function optionalOptional name of the property that identifies an Edge's type from its data. The default is
type
. -
[portIdFunction]
Function optionalOptional function to use to extract an id from a Port's data. The default is to retrieve the
id
property. -
[portTypeFunction]
Function optionalOptional function to use to extract a type identifier from a Port's data. The default is to retrieve the
type
property. -
[model]
Object optionalModel of Node, Edge and Port definitions. See documentation.
-
[beforeConnect]
Function optionalOptional function that will be called prior to any edge being established (either programmatically or via the mouse). It is passed the (source, target) of the proposed edge and if it returns anything other than boolean true, the edge is aborted. If not supplied, the default behaviour of this function is to honor the
allowLoopback
,allowNodeLoopback
andmaxConnections
parameters on any Node or Port definitions you supplied to this Toolkit via themodel
. -
[beforeMoveConnection]
Function optionalOptional function that will be called prior to any existing edge being moved (either programmatically or via the mouse). It is passed the source and target of the existing edge, as well as the edge itself, and if it returns anything other than boolean true, the edge move is aborted. If not supplied, the default behaviour of this function is to honor the
allowLoopback
,allowNodeLoopback
andmaxConnections
parameters on any Node or Port definitions you supplied to this Toolkit via themodel
. -
[beforeStartConnect]
Function optionalOptional function that will be called prior to an edge being established. This is different from
beforeConnect
in that this function is called right at the beginning of a connection drag by attached renderers, and the function is given the node/port that is the source, plus the edge type. If you return false the Edge is aborted. Otherwise your return value is used as the Edge data. -
[beforeDetach]
Function optionalOptional function that can be used to override connection detachment from the mouse. The function is given (source, target, edge) and is expected to return true to confirm the detach should occur. Any other return value will abort the detach.
-
[beforeStartDetach]
Function optionalOptional function that can be used to override connection detachment from the mouse. Distinct from
beforeDetach
in that this function is called as soon as the user begins to drag. The function is given (source, target, edge) and is expected to return true to confirm the detach should occur. Any other return value will abort the detach. -
[nodeFactory]
Function optionalFunction to use to generate data for a new Node. Default is to create an object with an
id
property. -
[edgeFactory]
Function optionalFunction to use to generate data for a new Edge. Default is to create an object with an
id
property. -
[portFactory]
Function optionalFunction to use to generate data for a new Port. Default is to create an object with an
id
property. -
[groupFactory]
Function optionalFunction to use to generate data for a new Group. Default is to create an object with an
id
property. -
[portExtractor]
Function optionalOptional function to call whenever a Node is added; it extracts, from the Node's data, any Ports that are associated with the Node.
-
[autoSave=false]
Boolean optionalWhether or not to automatically save the dataset when changes occur. You must supply the
saveUrl
property if you set this to true. -
[saveUrl]
String optionalUrl to use when saving automatically.
-
[saveHeaders]
Object optionalOptional HTTP headers to pass when auto saving. If not provided the Toolkit will use its default of
Content-Type:"application/json"
. -
[onAutoSaveSuccess]
Function optionalOptional function to call on autoSave success.
-
[onAutoSaveError]
Function optionalOptional function to call on autoSave error.
-
[doNotUpdateOriginalData=false]
Boolean optionalIf true, won't try to update the original data when a Node/Edge is removed.
-
[maxSelectedEdges]
Integer optionalOptional limit for the number of edges allowed to be selected at any one time.
-
[maxSelectedNodes]
Integer optionalOptional limit for the number of nodes allowed to be selected at any one time.
-
[selectionCapacityPolicy]
Integer optionalOptional selection capacity policy. See
setSelectionCapacityPolicy
docs. -
[createMissingGroups=false]
Boolean optionalIf true, when a Node is added that has a
group
data member that identifies a Group not known by the Toolkit, a Group with that ID is created.
-
Item Index
Methods
- addAllEdgesToSelection
- addEdge
- addFactoryNode
- addGroup
- addNewPort
- addNode
- addNodes
- addPathToSelection
- addPort
- addToGroup
- addToSelection
- append
- clear
- clearSelection
- connect
- deselect
- eachEdge
- eachGroup
- eachNode
- exists
- exportData
- filter
- findGraphObject
- getAllEdges
- getAllEdgesFor
- getEdge
- getEdgeCount
- getEdgeId
- getEdges
- getEdgeType
- getGraph
- getGroupAt
- getGroupCount
- getModel
- getNode
- getNodeAt
- getNodeCount
- getNodeId
- getNodes
- getNodeType
- getObjectInfo
- getPortFactory
- getPortId
- getPortType
- getRenderer
- getRenderers
- getSelection
- load
- load
- remove
- removeEdge
- removeFromGroup
- removeNode
- removePort
- render
- select
- selectAll
- selectAllEdges
- selectDescendants
- setGroupFactory
- setMaxSelectedEdges
- setMaxSelectedNodes
- setNodeFactory
- setSelection
- setSelectionCapacityPolicy
- setSource
- setSuspendRendering
- setTarget
- updateEdge
- updateNode
- updatePort
Methods
addAllEdgesToSelection
()
Adds all the Edges in the Toolkit instance to the Toolkit's current selection.
addEdge
-
params
Adds an Edge to the Graph.
Parameters:
-
params
ObjectMethod params.
-
source
Node | StringSource Node, or id of the source Node. If given as a string, this may be in "dotted" format, eg. nodeId.portId, to identify a particular port on the source Node.
-
target
Node | StringTarget Node, or id of the target Node. If given as a string, this may be in "dotted" format, eg. nodeId.portId, to identify a particular port on the target Node.
-
[cost=1]
Integer optionalEdge cost. This is used when computing shortest paths through the graph. If an Edge is not
directed
, then the same cost is applied regardless of the direction of traversal. -
[directed=true]
Boolean optionalWhether or not the Edge is directed.
-
Returns:
The Edge that was added.
addFactoryNode
-
type
-
data
-
callback
Adds a Node by type, running the data generation for the node through the current NodeFactory. This is
different from addNode
in that with addNode
you are supplying the final data and your NodeFactory is
not called. This method can be called with one, two or three arguments. A single argument is considered to be
the new Node's type
, and a backing data object will be created with this set, and no callback will occur.
If you provide two arguments the second argument may be either the new Node's backing data OR a callback to
hit with the newly created Node. With three arguments the second argument is the Node's backing data and the
third is a callback to hit with the newly created Node.
Parameters:
-
type
StringRequired. Type of the object to create.
type
will be passed as the first argument to your node factory. -
data
ObjectOptional backing data for the Node.
-
callback
FunctionOptional function to call with the newly created Node.
addGroup
-
data
-
[eventInfo]
-
[doNotFireEvent=false]
Adds a new Group.
Parameters:
-
data
ObjectBacking data for the Group.
-
[eventInfo]
Object optionalUsed internally, sometimes, by the Toolkit.
-
[doNotFireEvent=false]
Boolean optionalIf true, a
groupAdded
event will not be fired by this method. Otherwise agroupAdded
event will be fired.
addNewPort
-
node
-
type
-
[portData]
Adds a new Port to some Node. This will call the current PortFactory
to get the data for a new Port.
Parameters:
-
node
Node | StringNode or id of the Node to add a new Port to.
-
type
StringType of Port to add.
-
[portData]
Object optionalOptional data to pass to the PortFactory.
addNode
-
data
-
[eventInfo]
Adds a Node with the given data. If the data is null, the Toolkit creates an empty object and assigns
a uuid as the Node's id. If no id can be derived for the given data, the Toolkit creates a uuid and
sets it as the data object's 'id' member. This method also calls the current portExtractor
function, if
one was supplied. Its purpose is to extract any Ports from the data for some given Node.
Parameters:
-
data
ObjectThe Node's backing data - from your data model.
-
[eventInfo]
Object optionalOptional data member that the Toolkit will pass into any registered event listeners. This can be used by the UI layer, for instance, to track the position on screen of any newly added elements.
Returns:
A Node object. Your original data is available via the data
member. The Node's id is available via the id
member.
addNodes
-
nodeList
Adds a list of Nodes.
Parameters:
-
nodeList
ArrayAn array of objects, one for each Node to be added.
Returns:
The current Toolkit instance.
addPathToSelection
-
params
Appends the Path from source
to target
to the current selection. If there is no current selection, obj
becomes it.
If the Path does not exist, there is no selection.
addPort
-
node
-
data
Adds a Port from existing data to some Node. This is distinct from addNewPort
, because in this
case the data for the Port already exists.
Parameters:
-
node
Node | StringNode or id of the Node to add the Port to.
-
data
ObjectData for the Port.
Returns:
The port that was added.
addToGroup
-
node
-
group
Adds a Node to a Group.
addToSelection
-
obj
Appends obj
to the current selection. If there is no current selection, obj
becomes it.
append
-
params
Appends some data to the dataset, either via ajax, or directly from a JS object. The only difference
between this and load
is the events that are fired during the loading process.
Parameters:
-
params
ObjectAppend parameters.
-
[type="json"]
String optionalSpecifies the data type of the data to load. This must match the name of a loader registered with the given instance of the Toolkit.
-
[data]
Object optionalOptional. JSON data to load directly.
-
[url]
String optionalURL to retrieve data from. Optional, but you need to supply either this or
data
. -
[jsonp=false]
Boolean optionalOptional, defaults to false. Tells the Toolkit that the data is coming via JSON-P.
-
[onload]
Function optionalOptional callback to execute once the data has loaded. Most often used when you are retrieving remote data (using
url
and possiblyjsonp
) -
[parameters]
Object optionalOptional parameters to pass to the loader.
-
[error]
Function optionalOptional function to call on load error.
-
Returns:
The current instance of the Toolkit. If you provide data directly to this method you can then chain a load call with a subsequent render
.
clear
()
JsPlumbToolkitInstance
Clears the graph, then fires a graphCleared
event.
Returns:
The current Toolkit instance.
clearSelection
()
Clears the current selection and fires a selectionCleared
event.
connect
-
params
Connects two nodes/ports (or a combination of the two), by ID. This function does not know about the DOM: tou cannot pass it DOM elements
or selectors. By default, this method will create nodes that are missing. Port ids are specified with a dotted syntax, eg foo.bar
refers
to the port "bar" on the node "foo".
Parameters:
-
params
ObjectConnect parameters.
-
source
Object | StringEither the data for a node, or a node id as a string, representing the source node in the connection.
-
target
Object | StringEither the data for a node, or a node id as a string, representing the target node in the connection
-
[cost=1]
Number optionalOptional; the cost of the connection.
-
[directed=false]
Boolean optionalOptional, defaults to false. Whether the edge is directed.
-
[doNotCreateMissingNodes=false]
Boolean optionalOptional, defaults to false. Whether to NOT create nodes that do not exist yet. Sorry about the double negative.
-
[data]
Object optionalOptional backing data for the Edge. Here you might like to set id:'some value' if you need o retrieve the Edge by id later on.
-
Returns:
The new Edge.
deselect
-
obj
Removes obj from the current selection
eachEdge
-
fn
Iterates through all Edges in the Toolkit one at a time. You should not perform destructive editing of the dataset inside one of these loops.
Parameters:
-
fn
FunctionA function that takes (index, edge) as arguments and is applied for every Node in the Toolkit instance.
eachGroup
-
fn
Iterates through all Groups in the Toolkit one at a time. You should not perform destructive editing of the dataset inside one of these loops.
Parameters:
-
fn
FunctionA function that takes (index, node) as arguments and is applied for every Node in the Toolkit instance.
eachNode
-
fn
Iterates through all Nodes in the Toolkit one at a time. You should not perform destructive editing of the dataset inside one of these loops.
Parameters:
-
fn
FunctionA function that takes (index, node) as arguments and is applied for every Node in the Toolkit instance.
exists
-
objects
Returns whether or not object(s) exist for the given id(s).
Parameters:
-
objects
Object...List of ids to check existence for. This method takes an arbitrary number of arguments.
Returns:
True if objects exist for all given ids, false otherwise.
exportData
-
params
Exports the current data to JSON.
Parameters:
-
params
ObjectExport parameters
-
[type="json"]
String optionalSpecifies the data type in which to format the data. This must match the name of an exporter registered with the given instance of the Toolkit.
-
[parameters]
Object optionalOptional parameters to pass to the exporter. If you write a custom exporter you may wish to use this.
-
Returns:
JSON payload.
filter
-
spec
-
[includePartials=false]
Gets a Selection that is a filtered set of Nodes and Edges.
Parameters:
-
spec
Object | FunctionEither a function, which will be passed each Edge and Node and is expected to return true to indicate inclusion, or an object consisting of key/value pairs, all of which are expected to match the
data
for any Edge or Node that should be included in the output. -
[includePartials=false]
Boolean optionalIf true, and you're using a match object, the results will include any objects that match at least one key in the match object.
Returns:
A Selection.
findGraphObject
-
spec
Finds the Graph object that matches the given spec.
Parameters:
getAllEdgesFor
-
obj
-
[filter]
Gets all edges for the given Node or Port.
Parameters:
Returns:
a list of Edges.
getEdge
-
edgeId
Gets an Edge by id, or if the given object is already an Edge, hands that back.
Parameters:
-
edgeId
StringID of the Edge to retrieve.
Returns:
The requested Edge, if found, otherwise null.
getEdgeCount
()
Number
Returns the total number of Edges.
Returns:
The total number of Edges in the Graph.
getEdgeId
-
edge
Gets the id of the Edge represented by the given arguments. If this is a JS object, we extract the id using the current edgeIdFunction. Otherwise we just pass it back as-is.
Parameters:
-
edge
ObjectEdge from which to retrieve id.
Returns:
Edge's id, if we could resolve it, otherwise the object we were given.
getEdges
-
params
Gets a set of edges.
Parameters:
Returns:
a list of edges corresponding to the given params.
getEdgeType
-
edgeData
Gets the type of the Edge represented by the given JS object.
Parameters:
-
edgeData
ObjectEdge's data. Note: this is NOT an Edge object, it is the backing data. You can use
getType
to get the type for some Toolkit object.
Returns:
Either the Edge's type, if set, or "default".
getGroupAt
-
idx
Returns the Group at the given index.
Parameters:
-
idx
NumberIndex into group list
Returns:
a Group, or null if not found.
getGroupCount
()
Number
Returns the total number of Groups
Returns:
The total number of Groups in the Graph.
getModel
()
Object
Gets the model registered with this Toolkit instance, if any. Models may be registered on the Toolkit or on each individual Surface. In general it is a good idea to use the Toolkit's model to map data model event handlers and other data model considerations such as the maximum number of connections a Port allows, and each Surface's model definition to configure view concerns.
Returns:
Current model. May be null.
getNode
-
nodeId
Gets a Node by id, or if the given object is already a Node, hands that back.
Parameters:
-
nodeId
StringID of the Node to retrieve.
Returns:
The requested Node, if found, otherwise null.
getNodeAt
()
Object
Returns the Node at the given index.
Returns:
The Node at the given index, null if not found.
getNodeCount
()
Number
Returns the count of nodes in the Graph.
Returns:
The count of Nodes in the Graph.
getNodeId
-
node
Gets the id of the Node represented by the given arguments. If this is a JS object, we extract the id using the current idFunction. Otherwise we just pass it back as-is.
Parameters:
-
node
ObjectObject from which to retrieve id.
Returns:
The Node's id, if the current idFunction was able to resolve it, or the given object.
getNodeType
-
nodeData
Gets the type of the Node represented by the given JS object. We first try for a return value from the current typeFunction, but if that returns nothing we just return 'default'.
Parameters:
-
nodeData
ObjectNode's data. Note: this is NOT a Node object, it is the backing data. You can use
getType
to get the type for some Toolkit object.
Returns:
Either the object's type, or default
.
getObjectInfo
-
obj
-
[elementResolver]
Finds information related to the given object, which may be a DOM node or an existing Toolkit object. This function is useful for mapping some UI element to its underlying data.
Parameters:
Returns:
A JS object containing obj
(the Toolkit object), id
(the Node/Port ID), type
("port" or "node"), els
- a map of Surface ids
to [ Surface, Element ] pairs, one for each Surface that has rendered the given Node/Port.
getPortFactory
()
Function
Gets the current PortFactory.
Returns:
Current Port Factory; see documentation for a discussion.
getPortId
()
String
Gets the id of the Port represented by the given arguments. If this is a JS object, we extract the id using the current portIdFunction. Otherwise we just pass it back as-is.
Returns:
Port's id, if we could resolve it, otherwise the object we were given.
getPortType
()
String
Gets the type of the Port represented by the given JS object
Returns:
Either the port's type, if set, or "default".
getRenderer
-
id
Gets a renderer by the id
parameter supplied to the render
call (which is by default null, and only renderers for which an id
was supplied are retrievable via this method)
Parameters:
-
id
StringID of the renderer to retrieve.
Returns:
Either a Renderer that was registered against the given id, or null if none found.
getRenderers
()
Object
Gets all renderers registered on this instance of the jsPlumb Toolkit.
Returns:
A map of id-> Renderer
pairs.
getSelection
()
Selection
Gets the current Selection for this Toolkit instance.
Returns:
Current Selection.
load
-
params
Saves the current data via ajax POST to a given URL.
Parameters:
-
params
ObjectLoad parameters
-
[type="json"]
String optionalSpecifies the data type in which to format the data. This must match the name of an exporter registered with the given instance of the Toolkit.
-
url
StringURL to POST data to.
-
[parameters]
Object optionalOptional parameters to pass to the exporter. If you write a custom exporter you may wish to use this.
-
[success]
Function optionalCallback to execute once the data has saved successfully.
-
[error]
Function optionalCallback to execute if there was an error saving the data.
-
[headers]
Object optionalOptional headers to set on the ajax request. By default, the Toolkit will send a
Content-Type:"application/json"
header. If you provide your own headers this header will continue to be sent, unless of course you override it.
-
Returns:
The current instance of the Toolkit. If you provide data directly to this
method you can then chain a load call with a subsequent render
.
load
-
params
Loads some data, either via ajax, or directly from a JS object.
Parameters:
-
params
ObjectLoad parameters.
-
[type="json"]
String optionalSpecifies the data type of the data to load. This must match the name of a loader registered with the given instance of the Toolkit.
-
[data]
Object optionalOptional. JSON data to load directly.
-
[url]
String optionalURL to retrieve data from. Optional, but you need to supply either this or
data
. -
[jsonp=false]
Boolean optionalOptional, defaults to false. Tells the Toolkit that the data is coming via JSON-P.
-
[onload]
Function optionalOptional callback to execute once the data has loaded. Most often used when you are retrieving remote data (using
url
and possiblyjsonp
) -
[parameters]
Object optionalOptional parameters to pass to the loader.
-
[error]
Function optionalOptional function to call on load error.
-
[headers]
Object optionalOptional map of HTTP header values, if loading via URL.
-
Returns:
The current instance of the Toolkit. If you provide data directly to this method you can then chain a load call with a subsequent render
.
remove
-
obj
Removes whatever is identified by obj
, which may be one of a number of things.
removeEdge
-
edge
-
[source]
Removes an Edge from the Graph.
Parameters:
-
edge
Edge | StringThe Edge to remove, as either an Edge object or its id.
-
[source]
Object optionalThe source for the removeEdge operation. For internal use.
Returns:
The current Toolkit instance.
removeFromGroup
-
node
-
[doNotFireEvent=false]
Removes a Node from a Group.
Parameters:
-
node
NodeNode to remove
-
[doNotFireEvent=false]
Boolean optionalIf true, a
group:removeMember
event will not be fired as a result of this operation. Otherwise it will.
removeNode
-
node
Removes the given Node, which may be passed in as the actual Node object, or its id.
Parameters:
-
node
Node | StringEither a Node, or its ID.
Returns:
The current Toolkit instance.
removePort
-
node
-
portId
Removes the Port with the given id from the given Node.
Parameters:
-
node
Node | StringEither a node id, or a Node, from which the Port should be removed.
-
portId
StringId of the port to remove from the given node.
Returns:
True if the port existed and was removed, false otherwise.
render
-
params
Configures the given element as a renderer, registering it so that it reflects any changes to the underlying data. This method turns the given element into a Surface if it is not already one. If there is any data in the Toolkit at the time of this call it is rendered; any data subsequently loaded is automatically rendered. You can supply layout arguments to this method (layout type + layout specific parameters), as well as jsPlumb rules for endpoints, paint styles etc.
Parameters:
-
params
ObjectMethod parameters
-
container
Element | SelectorElement to convert into a Surface.
-
[id]
String optionalOptional id to register the created Surface against. You can then retrieve the Surface via
toolkit.getRenderer(id)
. If you do not provide this, one will be assigned. The ID is written as the renderer'sid
property. -
[elementsDraggable=true]
Boolean optionalWhether or not elements in the Surface should be draggable.
-
[dragOptions]
Object optionalOptions for draggable elements.
-
[events]
Object optionalOptional event bindings. See documentation.
-
[miniview]
Object optionalOptional miniview configuration. See documentation.
-
[mode="Pan"]
String optionalMode to initialize the Surface in.
-
[panDistance=50]
Number optionalHow far a pan nudge should move the UI (in pixels).
-
[enablePan=true]
Boolean optionalWhether or not panning (via mouse drag) is enabled.
-
[enableWheelZoom=true]
Boolean optionalWhether or not zooming with the mouse wheel is enabled.
-
[wheelFilter]
String optionalOptional CSS selector representing elements that should not respond to wheel zoom.
-
[wheelSensitivity=10]
Number optionalHow many pixels each click of the mouse wheel represents when zooming. Note that this value, while expressed in pixels, is mapped in a variety of ways depending on the browser.
-
[enablePanButtons=true]
Boolean optionalWhether or not to show the pan nudge buttons on the borders of the widgets.
-
[padding]
Number optionalOptional values for padding in the x/y axes to leave around the content. This is only of any use if you have disabled panning via mouse drag, since in that case the user sees only scroll bars and has no way of navigating beyond the content. Some padding makes the UI nicer to use. Default is [0,0].
-
[lassoFilter]
String optionalOptional selector for elements on which a mousedown should not cause the lasso to activate.
-
[consumeRightClick=true]
Boolean optionalUseful for development: set this to false if you don't want the widget to consume context menu clicks.
-
[jsPlumb]
Object optionalOptional set of jsPlumb Defaults to use for this renderer. The format and allowed properties is that of the Defaults object in jsPlumb. You can also set display properties in the model.
-
[enhancedModel=true]
Boolean optionalIf false, there will be no support for preconfigured parameters or functions in the definitions inside a Model. You will want to set this for Angular if you use the 2-way data binding.
-
select
-
obj
Gets an ad-hoc selection
selectAll
()
Sets the current selection to be every node in the toolkit instance.
selectDescendants
-
obj
-
[includeRoot=false]
-
[includeEdges=false]
Selects all descendants of some Node, and, optionally, the Node itself.
Parameters:
-
obj
Node | Port | Edge | Node[] | Port[] | Edge[] | Path | StringObject to select. May be a Node/Port/Edge or an array of either of these, or a Node id, a Selection, or a Path.
-
[includeRoot=false]
Boolean optionalWhether or not to include the root node in the returned dataset.
-
[includeEdges=false]
Boolean optionalWhether or not to include edges in the returned dataset.
setGroupFactory
-
f
Sets the current GroupFactory.
Parameters:
-
f
FunctionGroup factory to set as current.
Returns:
Group Factory to use; see documentation for a discussion.
setMaxSelectedEdges
-
maxEdges
Sets the maximum number of edges that may be selected at any one time. Default is Infinity.
Parameters:
-
maxEdges
IntegerMax number of edges allowed to be selected at once.
setMaxSelectedNodes
-
maxNodes
Sets the maximum number of nodes that may be selected at any one time. Default is Infinity.
Parameters:
-
maxNodes
IntegerMax number of nodes allowed to be selected at once.
setNodeFactory
-
f
Sets the current NodeFactory.
Parameters:
-
f
FunctionNode factory to set as current.
Returns:
Node Factory to use; see documentation for a discussion.
setSelection
-
obj
Sets obj as the current selection for this instance of the jsPlumb Toolkit.
setSelectionCapacityPolicy
-
policy
Sets The action taken when appending an edge or node that would
take the selection above its limit for that given type. Depends on the current capacityPolicy
, which can be either
Selection.DISCARD_EXISTING (the default) or Selection.DISCARD_NEW.
Parameters:
-
policy
StringOne of
Selection.DISCARD_EXISTING
(which removes the 0th entry from the list before insertion of the new value) orSelection.DISCARD_NEW
.
setSource
-
edge
-
o
Sets the source Node/Port for some Edge.
setSuspendRendering
-
v
-
[thenRefresh=false]
Suspends or re-enables rendering. This method simply round-robins all the registered renderers
and calls setSuspendRendering
on each of them.
Parameters:
-
v
BooleanTrue to suspend rendering, false to enable it.
-
[thenRefresh=false]
Boolean optionalIf true, a refresh will be called on all renderers after rendering is unsuspended.
setTarget
-
edge
-
o
Sets the target Node/Port for some Edge.
updateEdge
-
edge
-
[updates]
Updates the given Edge, notifying any Renderers to do a redraw. If autoSave is set, this method will cause the dataset to be saved.
Parameters:
-
edge
Edge | String | ObjectEither an Edge, an Edge id, or the backing data for an Edge.
-
[updates]
Object optionalAn object with path->value pairs. Path can be in dotted notation. You do not actually have to supply this, although in most cases you will want to. But there are edge cases in which you might simply wish to kick off a repaint.
updateNode
-
node
-
[updates]
Updates the given Node, notifying any Renderers to do a redraw. If autoSave is set, this method will cause the dataset to be saved.
Parameters:
-
node
Node | String | ObjectEither a Node, a Node id, or the backing data for a Node.
-
[updates]
Object optionalAn object with path->value pairs. Path can be in dotted notation. You do not actually have to supply this, although in most cases you will want to. But there are edge cases in which you might simply wish to kick off a repaint.
updatePort
-
port
-
[updates]
Updates the given Port, notifying any Renderers to do a redraw. If autoSave is set, this method will cause the dataset to be saved.
Parameters:
-
port
Port | String | ObjectEither a Port, a Port id, or the backing data for a Port.
-
[updates]
Object optionalAn object with path->value pairs. Path can be in dotted notation. You do not actually have to supply this, although in most cases you will want to. But there are edge cases in which you might simply wish to kick off a repaint.


Home
Login
About Us
Key Result Area Monitaring
Water Resource Department
GMIDC- Aurangabad
MKVDC-Pune
KIDC- Thane
TIDC- Jalgaon
VIDC- Nagpur
MERI- Nashik
Total ( WRD )
×
Download Report


Welcome to Aztec Marathon 2016
May the course be with you!!!
Sign Up Here
Registration Information
First Name:
Middle Name:
Last Name:
Address (line 1):
Address (line 2):
City
State
Zip
Primary Phone:
(
) -
-
Home Phone:
(
) -
-
.
E-Mail:
Gender:
Male
Female
Other
Date of Birth
/
/
Medical Condition:
Experience Level:
Expert
Experienced
Novice
Category:
Teen
Adult
Senior
Runner's Image:
Go Back Home
This is part of course curriculum for CS-545 at San Diego State University
© Venkateshprasad Ashwathnarayana


"PALO ALTO, Calif.—Intel says its Pentium Pro and new Pentium II chips have a flaw that can cause computers to sometimes make mistakes but said the problems could be fixed easily with rewritten software."—Reuters telegram
"PALO ALTO, Calif.—Intel says its Pentium Pro and new Pentium II chips have a flaw that can cause computers to sometimes make mistakes but said the problems could be fixed easily with rewritten software."
—Reuters telegram


'Love that!' - Chelsea fans are delighted by Frank Lampard's one selection at Man City
The Blues are at the Etihad Stadium this evening
by Oliver HarbordChelsea have their biggest test in recent weeks when they take on Manchester City this evening, and Blues fans are delighted with one thing that Frank Lampard has done.
It is only the third time that Lampard has gone for Mateo Kovacic, N'Golo Kante and Jorginho in a midfield three this season.
The other two times came against Liverpool in the Super Cup and the Premier League, both games ended up in defeat.
However, it is a midfield that Blues supporters have been wanting to see more of this season and they will get the chance this evening against Pep Guardiola's team.
What that has meant, though, is that Mason Mount has dropped out of the side, with Christian Pulisic keeping his place in the starting XI on the left wing.
Reece James is also back on the bench with Cesar Azpilicueta moving into the right-back role.
However, it is the decision to play Kovacic, Kante and Jorginho together that has gone down very well with the Blues supporters.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/autogenerating.20.60*_hom.60.20and.20.60sub*.60.html ---
I think it would be nice to have some basic theory about *_hom
(id
, comp
, comp_id
, id_comp
, comp_assoc
, cancellation properties, maybe prod
and/or pi
) and substructures (complete_lattice
, sub*.val
, subtype_mk
or cod_restrict
, of_le
, restrict
) autogenerated, because this way we can guarantee that we use same API. Unfortunately, we can't use category_theory
for *_hom
lemmas because we want comp
to be defined for Type
s in different universes. In a one-universe world, I'd say "define a concrete category ASAP, then use category theory notation and theorems".
I see three main options:
python
+jinja2
).Pros and cons as I see them:
Last time I asked @Mario Carneiro explained that in some cases he really wants to have universe polymorphism.
But category theory doesn't give us automation for prod
/pi
/sub*
anyway.
So without some kind of code generation we'll have to deal with the fact that, e.g., submodule
s use different names than subgroup
s, some facts are here for subalgebra
s but not for submonoid
s, and adding subsemiring
s is a lot of work.
This has something to do with varieties. https://en.m.wikipedia.org/wiki/Variety_(universal_algebra) I think this stuff can probably be pushed a long way, to give colimits and limits and adjoints of the canonical functors between these categories. I'd love to see how far this could be pushed. That's quite a big project though.
I'm not sure that we can use varieties to actually generate definitions and lemmas.
I mean, if we want to have nice structure
s, then we'll need some tactic to transfer statements anyway.
Yes. You might be able to prove things in a great generality, and write automation to generate the special cases. Not sure if that's a good way of doing it, particularly if you're just going for homs and subobjects.
I'd go with "generate using Python" because it gives readable definitions and proofs but this adds an extra dependency.
Wouldn't the generated stuff be autonomous after generation?
It would, so we can git add
it.
And CI can easily check that generated code agrees with the actual lean
file.
I don't understand why you need to CI anything here.
Isn't the goal to write Lean file, and then be happy with them?
I want to have synced theories for different algebraic structures. If someone wants to modify it, the proper way is to adjust the template, then regenerate. Or add a lemma/def outside of the "generated" section/file.
I see.
But it still wouldn't make it harder to use mathlib without a sane python installation.
If we git add
generated files, then using mathlib and contributing to any other file will not be harder.
I'm pretty wary about templating Lean files using python. My experience of previous projects that generated source code from a program written in another language was that the generated files quickly degenerated into non-human-usable disasters.
I'd prefer to explore using Lean meta-programming more.
Then we'll have a hard to read file right away.
I can't be sure about others but for me it's hard to read Lean meta-programs.
@Scott Morrison What do you think about the following? I'll try to write some jinja
template. If it will lead to an unreadable file, we trash it.
Obviously I can't say no to trying. :-) But I just feel we should eat our own dog food here!
If the meta programming is too hard / too unreadable, we should do a better job.
This question right here is meant to be _what Lean is for_.
A theorem prover with usable metaprogramming.
It feels like once we add outside templating we've admitted defeat. :-)
Admittedly, I am very sympathetic to the problem at hand.
I have been meaning to automate the construction of colimits / free objects for a long time, but the metaprogramming intimidates me!
We are hitting a bottleneck here.
Availability of metaprogramming resources has been outstripped by availability of mathematical resources...
(I can see Leo is on zulip right now, I feel embarrassed saying "what Lean is for", even if I know he doesn't read the main channels. :-)
You've convinced me to try lean metaprogramming.

With jinja templates the template will be slightly less readable but it'll generate exactly the same code as the one we have in algebra/group/hom.lean
.
Last updated: Apr 24 2020 at 19:02 UTC


{% extends "base.html" %} {% block title %}Link your Twitter Account{% endblock %} {% block containercontent %}
Thank you, {{ form.spotify_email.data }}, for authorizing Attention Feed DJ an access token. We've successfully recieved it. All we need now is your Twitter handle to associate it with your Spotify credentials so that we can make a playlist when you ask us to on Twitter. Please fill that in below (without the @)
{% endblock %}


Dear Friend. Greetings, With warm heart I offer my friendship and I hope this mail meets you in good time, however strange or surprising this contact might seem to you as we have not met personally or had any dealings in the past, I humbly ask that you take due consideration of its importance and immense benefit. I duly apologize for infringing on your privacy, if this contact is not acceptable to you, for I make this proposal to you as a person of integrity. First and foremost I wish to introduce myself properly to you. I am Mr Patrick F.Massaquoi the son of late formal Liberia sport minister Mr Francois Massaquoi, who was killed while in office in 2001. After the death of my father, the Charles Taylor control government have been providing my family with security, but resently the united nations and the united state government asked the liberia head of state (Charles Taylor) and members of his cabinet to go on exile. During the tenure of Late Francois Massaquoi,(my father) he enriched and accumulated a lot of money while in office but unfortunately for him he did not leave long to enjoy these wealth. These funds that were lodged in banks accounts in our country has been frozen. However, my family is not too comfortable with our present government as my late father was a very close aide of Charles Taylor, and on this backdrop the new government might decided to recall the frozen money back to the government purse, with exception of the US$8.5M(Eight million, five hundred United State Dollars)that was deposited in a Finance/security firm undiscovered uptil date. But due to the sanction place on my family by the International community i cannot reach this money myself or withdraw it back to Liberia for use. We have jointly decided within the family to relocate this funds outside Liberia for investment purpose. This is the only way and means we can utilize this money, consequently, we beg for your assistance in investing this money on real-estate and any other viable venture you might suggest. I got your contact through the internet during my search for a partner and i hope you will not disappoint us in this our time of need. We have also agreed to reward you with 25% of the total amount as your share in this transaction after you might have claim this funds from the security firm. Finally, i require the following informations to facilitate the documentation that will effect the change of ownership with the Finance firm. (a) Your complete names. (b) Your mailing address and nationality, (c) Your Telephone/Fax numbers. Again, all arrangement and logistics of this transaction are in place and we shall remain greatful if you can assist us in this our time of need. Please contact me whether or not you are interested in assisting us. This will enable me scout for another partner in the event of non-interest on your part. Thanking you in anticipations of your kindness while looking forward to hear from you soon. Best regards, MR.PATRICK MASSAQUOI. Confidential e-mail: pm1234@katamail.com


Babatunde Adedolapo
I'm a 300 level Computer Science Student of the Federal University of Agriculture, Abeokuta. I'm a Front-End Developer.
I'm a lover of anything "techy". I like to try out new things.
I believe in Hardwork and consistency..
@dolapobabs
Want to check my Completed Stage 1 Task? Here!