rsyncrosim
: introduction to
ST-Sim
vignettes/a05_rsyncrosim_stsim_vignette.Rmd
a05_rsyncrosim_stsim_vignette.Rmd
This vignette will cover how to develop and run spatially-explicit,
stochastic state-and-transition simulation models of landscape change
using the rsyncrosim
package within the
SyncroSim software
framework. For an overview of
SyncroSim and
rsyncrosim
, as well as a basic usage tutorial for
rsyncrosim
, see the
Introduction
to rsyncrosim
vignette.
stsim
To demonstrate how to create and run spatially-explicit, stochastic
state-and-transition simulation models (STSMs) of landscape change, we
will be using the
stsim
SyncroSim package. STSMs are well-suited for integrating uncertainty
into model projections, and have been applied to a variety of landscapes
and management questions. In this stsim
example below, we
will model changes in forest cover types under two scenarios: no harvest
within a landscape, and harvest of 20 acres per year. To do this, we
will set a number of model parameters describing how many timesteps and
iterations the model will run for, transition types and their
probabilities, transition targets (particularly, for the harvest
transition type), etc. Next, we will provide stsim
with a
set of initial conditions that describe the starting landscape at time
0, and specify parameters for the model’s output. After running both
scenarios, we will view the output data in tabular form and as a raster
layer. Spatial and non-spatial examples of this exercise are
provided.
For more details on stsim
, consult the
ST-Sim online
documentation.
Before using rsyncrosim
you will first need to
download and
install the SyncroSim software. Versions of SyncroSim exist for both
Windows and Linux.
You will need to install the rsyncrosim
R package,
either using
CRAN or from
the rsyncrosim
GitHub
repository. Versions of rsyncrosim
are available for
both Windows and Linux. You may need to install the raster
and rgdal
packages from CRAN as well.
In a new R script, load the necessary packages. This includes the
rsyncrosim
and raster
R packages.
session()
Finish setting up the R environment for the rsyncrosim
workflow by creating a SyncroSim Session object. Use the
session()
function to connect R to your installed copy of
the SyncroSim software.
mySession <- session("path/to/install_folder") # Create a Session based SyncroSim install folder
mySession <- session() # Using default install folder (Windows only)
mySession # Displays the Session object
## class : Session
## filepath [character]: C:/Program Files/SyncroSim
## silent [logical] : TRUE
## printCmd [logical] : FALSE
## condaFilepath [NULL]:
Use the version()
function to ensure you are using the
latest version of SyncroSim.
version(mySession)
## [1] "2.4.27"
addPackage()
Install stsim
using the rsyncrosim
function
addPackage()
. This function takes a package name as input
and then queries the SyncroSim package server for the specified
package.
# Install stsim
addPackage("stsim")
## Package <stsim> installed
stsim
should now be included in the package list
returned by the package()
function in
rsyncrosim
:
# Get list of installed packages
package()
## name description version
## 1 stsim The ST-Sim state-and-transition simulation model 3.3.13
## NA NA
## 1 C:\\Users\\birch\\SyncroSim\\Packages\\stsim OK
When creating a new modeling workflow from scratch, we need to create objects of the following scopes:
For more information on these scopes, see the
Introduction
to rsyncrosim
vignette.
# Create a new Library
myLibrary <- ssimLibrary(name = "stsimLibrary.ssim",
session = mySession,
package = "stsim",
overwrite = TRUE)
# Open the default Project
myProject <- project(ssimObject = myLibrary, project = "Definitions")
# Create a new Scenario (associated with the default Project)
myScenario <- scenario(ssimObject = myProject, scenario = "My spatial scenario")
datasheet()
View the Datasheets associated with your new Project and Scenario
using the datasheet()
function from
rsyncrosim
.
# View all Datasheets associated with a Library, Project, or Scenario
datasheet_list <- datasheet(myScenario)
head(datasheet_list)
## scope name displayName
## 1 library core_Backup Backup
## 2 library core_CondaConfig Conda Configuration
## 3 library core_JlConfig Julia Configuration
## 4 library core_LNGPackage Last Known Good Packages
## 5 library core_Multiprocessing Multiprocessing
## 6 library core_Options Options
tail(datasheet_list)
## scope name
## 107 scenario stsim_TransitionSlopeMultiplier
## 108 scenario stsim_TransitionSpatialInitiationMultiplier
## 109 scenario stsim_TransitionSpatialMultiplier
## 110 scenario stsim_TransitionSpreadDistribution
## 111 scenario stsim_TransitionTarget
## 112 scenario stsim_TransitionTargetPrioritization
## displayName
## 107 Transition Slope Multipliers
## 108 Transition Spatial Initiation Multipliers
## 109 Transition Spatial Multipliers
## 110 Transition Spread Distribution
## 111 Transition Targets
## 112 Transition Target Prioritization
From this list of Datasheets, we can check which Datasheets specific
to the stsim
package we would like to modify. This will
include a number of Initial Conditions Datasheets, Output Datasheets,
and a Run Control Datasheet. For more information about all
stsim
Datasheets, see
the
online documentation.
datasheet()
and
addRow()
Now, we will add some values to these Datasheets so we can run our models.
Inputs for stsim
come in two forms: Scenario inputs
(which can vary by Scenario) and Project inputs (which
must be fixed across all Scenarios). In general most inputs are
Scenario inputs; Project inputs are typically reserved for values that
must be shared by all Scenarios (e.g. constants, shared lookup values).
We refer to Project input Datasheets as Project-scoped
Datasheets and Scenario input Datasheets as Scenario-scoped
Datasheets. We will start by retrieving some Project-scoped input
Datasheets to add and edit their values.
Terminology: The Project-scoped Datasheet called
Terminology
specifies terms used across all Scenarios in
the same Project.
# Load the Terminology Datasheet to a new R data frame
terminology <- datasheet(myProject, name = "stsim_Terminology")
# Check the columns of the Terminology data frame
str(terminology)
## 'data.frame': 1 obs. of 8 variables:
## $ AmountLabel : chr "Area"
## $ AmountUnits : Factor w/ 4 levels "Acres","Hectares",..: 1
## $ StateLabelX : chr "Class"
## $ StateLabelY : chr "Subclass"
## $ PrimaryStratumLabel : chr "Primary Stratum"
## $ SecondaryStratumLabel: chr "Secondary Stratum"
## $ TertiaryStratumLabel : chr "Tertiary Stratum"
## $ TimestepUnits : chr "Timestep"
We can change the terminology of the StateLabelX
and
AmountUnits
columns in this Datasheet, and then save those
changes back to the SyncroSim Library file.
# Edit the values of the StateLabelX and AmountUnits columns
terminology$AmountUnits <- "Hectares"
terminology$StateLabelX <- "Forest Type"
# Saves edits as a SyncroSim Datasheet
saveDatasheet(myProject, terminology, "stsim_Terminology")
## Datasheet <stsim_Terminology> saved
Similarly, we can edit other Project-scoped Datasheets for ‘stsim’.
Stratum: Primary Strata in the model
# Load a copy of the Stratum Datasheet.
# To load an empty copy of this Datasheet, specify the argument empty = TRUE in the datasheet() function.
stratum <- datasheet(myProject, "stsim_Stratum", empty = TRUE)
# Use the addRow() to add a value to the stratum data frame
stratum <- addRow(stratum, "Entire Forest")
# Save edits as a SyncroSim Datasheet
saveDatasheet(myProject, stratum, "stsim_Stratum", force = TRUE)
## Datasheet <stsim_Stratum> saved
StateLabelX: First dimension of labels for State Classes
It is also possible to add values to a Datasheet without loading it
into R. Below we create a vector of forestTypes
and add
this to the stsim_StateLabelX
Datasheet as a data frame
using saveDatasheet()
.
# Create a vector containing the State Class labels
forestTypes <- c("Coniferous", "Deciduous", "Mixed")
# Add values as a data frame to a SyncroSim Datasheet
saveDatasheet(myProject,
data.frame(Name = forestTypes),
"stsim_StateLabelX",
force = TRUE)
## Datasheet <stsim_StateLabelX> saved
StateLabelY: Second dimension of labels for State Classes
# Add values as a data frame directly to an stsim Datasheet
saveDatasheet(myProject,
data.frame(Name = c("All")),
"stsim_StateLabelY",
force = TRUE)
## Datasheet <stsim_StateLabelY> saved
State Classes: Combine StateLabelX
and
StateLabelY
, and assign each class a unique name and ID
# Create a new R data frame containing the names of the State Classes and their corresponding data
stateClasses <- data.frame(Name = forestTypes)
stateClasses$StateLabelXID <- stateClasses$Name
stateClasses$StateLabelYID <- "All"
stateClasses$ID <- c(1, 2, 3)
# Save stateClasses R data frame to a SyncroSim Datasheet
saveDatasheet(myProject, stateClasses, "stsim_StateClass", force = TRUE)
## Datasheet <stsim_StateClass> saved
Transition Types: Assign a unique name and ID to each type of transition in our model.
# Create an R data frame containing transition type data
transitionTypes <- data.frame(Name = c("Fire", "Harvest", "Succession"),
ID = c(1, 2, 3))
# Save transitionTypes R data frame to a SyncroSim Datasheet
saveDatasheet(myProject, transitionTypes, "stsim_TransitionType", force = TRUE)
## Datasheet <stsim_TransitionType> saved
Transition Groups: Create Transition Groups identical to the Types
# Create an R data frame containing a column of transition type names
transitionGroups <- data.frame(Name = c("Fire", "Harvest", "Succession"))
# Save transitionGroups R data frame to a SyncroSim Datasheet
saveDatasheet(myProject, transitionGroups, "TransitionGroup", force = T)
## Datasheet <stsim_TransitionGroup> saved
Transition Types by Groups: Assign each Type to its Group
# Create an R data frame that contains Transition Type Group names
transitionTypesGroups <- data.frame(TransitionTypeID = transitionTypes$Name,
TransitionGroupID = transitionGroups$Name)
# Save transitionTypesGroups R data frame to a SyncroSim Datasheet
saveDatasheet(myProject,
transitionTypesGroups,
"TransitionTypeGroup",
force = T)
## Datasheet <stsim_TransitionTypeGroup> saved
Ages: Define the basic parameters to control the age reporting in the model
# Define values for age reporting
ageFrequency <- 1
ageMax <- 101
ageGroups <- c(20, 40, 60, 80, 100)
# Add values as R data frames to the appropriate SyncroSim Datasheet
saveDatasheet(myProject,
data.frame(Frequency = ageFrequency, MaximumAge = ageMax),
"AgeType",
force = TRUE)
## Datasheet <stsim_AgeType> saved
saveDatasheet(myProject,
data.frame(MaximumAge = ageGroups),
"stsim_AgeGroup",
force = TRUE)
## Datasheet <stsim_AgeGroup> saved
Now that we have defined all our Project-scoped input Datasheets, we
can move on to specifying Scenario-specific model inputs. We begin by
using the scenario
function to create a new Scenario in our
Project.
# Create a new SyncroSim Scenario
myScenario <- scenario(myProject, "No Harvest")
Once again we can use the datasheet()
function (with
summary=TRUE
) to display all the Scenario-scoped
Datasheets.
# Subset the full Datasheet list to show only Scenario-scoped Datasheets
scenario_datasheet_list <- subset(datasheet(myScenario, summary = TRUE),
scope == "scenario")
head(scenario_datasheet_list)
## scope name displayName
## 46 scenario core_AutoGenTagValue Auto Generation Tag Values
## 47 scenario core_Pipeline Pipeline
## 48 scenario corestime_DistributionValue Distributions
## 49 scenario corestime_External External
## 50 scenario corestime_ExternalVariableValue External Variables
## 51 scenario corestime_Multiprocessing Spatial Multiprocessing
tail(scenario_datasheet_list)
## scope name
## 107 scenario stsim_TransitionSlopeMultiplier
## 108 scenario stsim_TransitionSpatialInitiationMultiplier
## 109 scenario stsim_TransitionSpatialMultiplier
## 110 scenario stsim_TransitionSpreadDistribution
## 111 scenario stsim_TransitionTarget
## 112 scenario stsim_TransitionTargetPrioritization
## displayName
## 107 Transition Slope Multipliers
## 108 Transition Spatial Initiation Multipliers
## 109 Transition Spatial Multipliers
## 110 Transition Spread Distribution
## 111 Transition Targets
## 112 Transition Target Prioritization
We can now use the datasheet()
function to retrieve, one
at a time, each of our Scenario-scoped Datasheets from our Library.
Run Control: Define the length of the run and whether or not it is a spatial run (requires spatial inputs to be set, see below). Here we make the run spatial.
# Create an R data frame specifying to run the simulation for 7 realizations and 10 timesteps
runControl <- data.frame(MaximumIteration = 7,
MinimumTimestep = 0,
MaximumTimestep = 10,
isSpatial = TRUE)
# Save transitionTypesGroups R data frame to a SyncroSim Datasheet
saveDatasheet(myScenario, runControl, "stsim_RunControl")
## Datasheet <stsim_RunControl> saved
Deterministic Transitions: Define transitions that take place in the absence of probabilistic transitions. Here we also set the age boundaries for each State Class.
# Load an empty Deterministic Transitions Datasheet to a new R data frame
dTransitions <- datasheet(myScenario,
"stsim_DeterministicTransition",
optional = T,
empty = T)
# Add all Deterministic Transitions to the R data frame
dTransitions <- addRow(dTransitions, data.frame(
StateClassIDSource = "Coniferous",
StateClassIDDest = "Coniferous",
AgeMin = 21,
Location = "C1"))
dTransitions <- addRow(dTransitions, data.frame(
StateClassIDSource = "Deciduous",
StateClassIDDest = "Deciduous",
Location = "A1"))
dTransitions <- addRow(dTransitions, data.frame(
StateClassIDSource = "Mixed",
StateClassIDDest = "Mixed",
AgeMin = 11,
Location = "B1"))
# Save dTransitions R data frame to a SyncroSim Datasheet
saveDatasheet(myScenario, dTransitions, "stsim_DeterministicTransition")
## Datasheet <stsim_DeterministicTransition> saved
Probabilistic Transitions: Define transitions between State Classes and assigns a probability to each.
# Load an empty Probabilistic Transitions Datasheet to a new R data frame
pTransitions <- datasheet(myScenario, "stsim_Transition", optional = T,
empty = T)
# Add all Probabilistic Transitions to the R data frame
pTransitions <- addRow(pTransitions, data.frame(
StateClassIDSource = "Coniferous",
StateClassIDDest = "Deciduous",
TransitionTypeID = "Fire",
Probability = 0.01))
pTransitions <- addRow(pTransitions, data.frame(
StateClassIDSource = "Coniferous",
StateClassIDDest = "Deciduous",
TransitionTypeID = "Harvest",
Probability = 1,
AgeMin = 40))
pTransitions <- addRow(pTransitions, data.frame(
StateClassIDSource = "Deciduous",
StateClassIDDest = "Deciduous",
TransitionTypeID = "Fire",
Probability = 0.002))
pTransitions <- addRow(pTransitions, data.frame(
StateClassIDSource = "Deciduous",
StateClassIDDest = "Mixed",
TransitionTypeID = "Succession",
Probability = 0.1,
AgeMin = 10))
pTransitions <- addRow(pTransitions, data.frame(
StateClassIDSource = "Mixed",
StateClassIDDest = "Deciduous",
TransitionTypeID = "Fire",
Probability = 0.005))
pTransitions <- addRow(pTransitions, data.frame(
StateClassIDSource = "Mixed",
StateClassIDDest = "Coniferous",
TransitionTypeID = "Succession",
Probability = 0.1,
AgeMin = 20))
# Save pTransitions R data frame to a SyncroSim Datasheet
saveDatasheet(myScenario, pTransitions, "stsim_Transition")
## Datasheet <stsim_Transition> saved
Initial Conditions: Set the starting conditions of the model at time 0. There are two options for setting initial conditions: either spatial or non-spatial. In this example we will use spatial initial conditions; however, we also demonstrate how to set initial conditions non-spatially below.
rsyncrosim
package.
# Load sample .tif files
stratumTif <- "initial-stratum.tif"
sclassTif <- "initial-sclass.tif"
ageTif <- "initial-age.tif"
# Create raster layers from the .tif files
rStratum <- raster(stratumTif)
rSclass <- raster(sclassTif)
rAge <- raster(ageTif)
# Plot raster layers
plot(rStratum)
plot(rSclass)
plot(rAge)
We can add these rasters as model inputs using the
stsim_InitialConditionsSpatial
Datasheet.
# Create an R list of the input raster layers
ICSpatial <- list(StratumFileName = stratumTif,
StateClassFileName = sclassTif,
AgeFileName = ageTif)
# Save initialConditionsSpatial R list to a SyncroSim Datasheet
saveDatasheet(myScenario, ICSpatial, "stsim_InitialConditionsSpatial")
## Datasheet <stsim_InitialConditionsSpatial> saved
stsim_InitialConditionsNonSpatial
and
stsim_InitialConditionsNonSpatialDistribution
datasheets:
# Create non-spatial initial conditions data and add it to an R data frame
ICNonSpatial <- data.frame(TotalAmount = 100,
NumCells = 100,
CalcFromDist = F)
# Save the ICNonSpatial R data frame to a SyncroSim Datasheet
saveDatasheet(myScenario, ICNonSpatial, "stsim_InitialConditionsNonSpatial")
## Datasheet <stsim_InitialConditionsNonSpatial> saved
# Create non-spatial initial conditions distribution data and add it to an R data frame
ICNonSpatialDistribution <- data.frame(StratumID = "Entire Forest",
StateClassID = "Coniferous",
RelativeAmount = 1)
# Save the ICNonSpatial R data frame to a SyncroSim Datasheet
saveDatasheet(myScenario, ICNonSpatialDistribution,
"stsim_InitialConditionsNonSpatialDistribution")
## Datasheet <stsim_InitialConditionsNonSpatialDistribution> saved
Transition Targets: Define targets, in units of area, to be reached by the allocation procedure within SyncroSim.
# Set the transition target for harvest to 0
saveDatasheet(myScenario,
data.frame(TransitionGroupID = "Harvest",
Amount = 0),
"stsim_TransitionTarget")
## Datasheet <stsim_TransitionTarget> saved
Output Options: Regulate the model outputs and determine the frequency at which syncrosim saves the model outputs.
# Create output options for spatial model and add it to an R data frame
outputOptionsSpatial <- data.frame(
RasterOutputSC = T, RasterOutputSCTimesteps = 1,
RasterOutputTR = T, RasterOutputTRTimesteps = 1,
RasterOutputAge = T, RasterOutputAgeTimesteps = 1
)
# Save the outputOptionsSpatial R data frame to a SyncroSim Datasheet
saveDatasheet(myScenario, outputOptionsSpatial, "stsim_OutputOptionsSpatial")
## Datasheet <stsim_OutputOptionsSpatial> saved
# Create output options for non-spatial model and add it to an R data frame
outputOptionsNonSpatial <- data.frame(
SummaryOutputSC = T, SummaryOutputSCTimesteps = 1,
SummaryOutputTR = T, SummaryOutputTRTimesteps = 1
)
# Save the outputOptionsNonSpatial R data frame to a SyncroSim Datasheet
saveDatasheet(myScenario, outputOptionsNonSpatial, "stsim_OutputOptions")
## Datasheet <stsim_OutputOptions> saved
We are done parameterizing our simple “No Harvest” Scenario. Let’s now define a new Scenario that implements forest harvesting. Below, we create a second “Harvest” Scenario that is a copy of the first Scenario, but with a harvest level of 20 acres/year.
# Create a copy of the no harvest scenario (i.e myScenario) and name it myScenarioHarvest
myScenarioHarvest <- scenario(myProject,
scenario = "Harvest",
sourceScenario = myScenario)
# Set the transition target for harvest to 20 acres/year
saveDatasheet(myScenarioHarvest, data.frame(TransitionGroupID = "Harvest",
Amount = 20),
"stsim_TransitionTarget")
## Datasheet <stsim_TransitionTarget> saved
We can display the harvest levels for both scenarios.
# View the transition targets for the Harvest and No Harvest scenarios
datasheet(myProject, scenario = c("Harvest", "No Harvest"),
name = "stsim_TransitionTarget")
## ScenarioID ProjectID ScenarioName ParentID ParentName TransitionGroupID
## 1 2 1 No Harvest NA <NA> Harvest
## 2 3 1 Harvest NA <NA> Harvest
## Amount
## 1 0
## 2 20
run()
We will now run both Scenarios using the run()
function
in rsyncrosim
. Running a Scenario generates a corresponding
new child Scenario, called a Results Scenario, which contains
the results of the run along with a snapshot of all the model inputs. If
we have a large modeling workflow and we want to parallelize the run
using multiprocessing, we can set the jobs
argument to be a
value greater than one.
# Run both Scenarios
myResultScenario <- run(myProject, scenario = c("Harvest", "No Harvest"),
jobs = 7, summary = TRUE)
## [1] "Running scenario [3] Harvest"
## [1] "Running scenario [2] No Harvest"
The next step is to view the output Datasheets added to the Result
Scenario when it was run. To look at the results we first need to
retrieve the unique scenarioId
for each child Result
Scenario.
# Retrieve Scenario IDs
resultIDNoHarvest <- subset(myResultScenario,
ParentID == scenarioId(myScenario))$ScenarioID
resultIDHarvest <- subset(myResultScenario,
ParentID == scenarioId(myScenarioHarvest))$ScenarioID
We can now retrieve tabular output regarding the projected State
Class over time (for both scenarios combined) from the
stsim_OutputStratumState
Datasheet.
# Retrieve output projected State Class for both Scenarios in tabular form
outputStratumState <- datasheet(
myProject,
scenario = c(resultIDNoHarvest, resultIDHarvest),
name = "stsim_OutputStratumState")
Finally, we can get the State Class raster output using the
datasheetRaster()
function (here for the Harvest scenario
only).
# Retrieve the output State Class raster for the Harvest scenario at timestep 5
myRastersTimestep5 <- datasheetRaster(myProject,
scenario = resultIDHarvest,
"stsim_OutputSpatialState",
timestep = 5)
myRastersTimestep5
## class : RasterStack
## dimensions : 10, 10, 100, 7 (nrow, ncol, ncell, nlayers)
## resolution : 1, 1 (x, y)
## extent : 0, 10, 0, 10 (xmin, xmax, ymin, ymax)
## crs : +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs
## names : sc.it1.ts5, sc.it2.ts5, sc.it3.ts5, sc.it4.ts5, sc.it5.ts5, sc.it6.ts5, sc.it7.ts5
# Plot raster for the first realization of timestep 5
plot(myRastersTimestep5[[1]])


The Adidas dame iv (4) was made by
bape_japan x damianlillard
and its a big part of
the "Adidas originals" collection
COURT
KITS
our court ready kits celebrates the glory days of the 70s and 80s. Available from july 3rd
at PALACESKATEBOARDS
Shop the collection in store at hunbury st, champs-elysees
5th avenue and at PALACE NYC and LONDON
PARLEY
FOR THE
OCEANS
What is Parley?
Parley is the space and network where creators,
Thinkers and leaders come together to raise awareness
For the beauty and fragility of the oceans and collaborate on
projects that can end their destruction. as a founding member,
adidas supports parley in their mission
parley is the space and network where creators,
thinkers and leaders come together to raise awareness
for the beauty
ADIDAS ORIGINALS
COLLECTIONS


Trevor Bedford (@trvrb)
{{ page.date | date: "%-d %b %Y" }}
{{ page.event }}
Project to provide a real-time view of the evolving influenza population
Clade frequencies $X$ derive from the fitnesses $f$ and frequencies $x$ of constituent viruses, such that
$$\hat{X}_v(t+\Delta t) = \sum_{i:v} x_i(t) \, \mathrm{exp}(f_i \, \Delta t)$$
This captures clonal interference between competing lineages
Bedford Lab:
Alli Black,
Sidney Bell,
Gytis Dudas,
John Huddleston,
Barney Potter,
James Hadfield,
Louise Moncla
Influenza: WHO Global Influenza Surveillance Network, GISAID, Richard Neher, Colin Russell, Andrew Rambaut, Gytis Dudas, Dave Wentworth, Becky Garten, Marta Łuksza, Michael Lässig
Nextflu/Nextstrain: Richard Neher, James Hadfield, Colin Megill, Sidney Bell, Barney Potter, John Huddleston, Charlton Callender, Emma Hodcroft


--- title: Academic theme layout & functionality author: Alex.Hildebrandt date: '2020-05-14' slug: academic-layout-functionality categories: - Hugo Theme tags: - layout subtitle: '' summary: '' authors: [] lastmod: '2020-05-14T22:02:56+02:00' featured: no image: caption: '' focal_point: '' preview_only: no projects: [] ---
Getting started: Docs of Academic Theme
Alert Box
{{% alert note %}} some important content {{% /alert %}}


This is a fairly odd example, where a single genome view is composed of chromosomes
from two different organisms. An example where this may be useful is if a student
is defining th genotype of an organism one chromosome at a time, by dragging in
chromosomes from parents.
In this demo, the left chromosomes all belong to the female drake on the left,
and vice-versa. The right sex chromosome is left empty here.


">
Home
Home Page
About us
Workouts
Plans
Fat loss
Mass gain
Lean & Fit
Nutrition
Caloric surplus
Caloric deficit
Caloric Balanced
Challanges
Beginners mode
Intermediate mode
Advanced mode
SuperSane mode
Login
I'm back
Forgot my password
Signin
I'm new here
Terms and Conditions
Help/Contact
Gym Workout
Home Workout
GYM WORKOUTS
HOME WORKOUTS


@include 'layouts/admin/inc/head.html'
@block header @endblock
@block content @endblock
@block before_scripts @endblock @include 'layouts/admin/inc/scripts.html' @block after_scripts @endblock


What is Learning Simulator?¶
Below follows a non-technical introduction to Learning Simulator. For a more technical description, see Background.
The system being simulated consists of a subject (or organism, individual, or agent) interacting with a world (or environment). In reality, this could be for example a rat (the subject) in a maze (the world) choosing which way to go in each intersection. The world can present different stimuli (from a pre-defined set of stimulus elements which we call the world’s stimulus repertoire) to the subject. The simulation starts with the world producing the first stimulus. The subject then responds to this stimulus with one of the behaviors in the subject’s behavior repertoire. As a result, the world produces a new stimulus that the subject responds to, and so on.
The subject associates each stimulus-response pair with a value, that we call the associative strength between the stimulus and the response, and denote by \(v\). It measures how “good” it is to respond with a certain behavior to a certain stimulus. The subject also associate each stimulus in itself with a value which may or may not change. Based on earlier interactions, these values are updated after each stimulus exposure. These values in turn affect the next response decision.
For example, if a dove is rewarded (with food, for example) after picking on a lever when a blue light comes on, but is not rewarded when picking when the light is red, the next time the light comes on, the dove is more likely to pick on the lever if the light is blue than if it is red. In this case, the value of the stimulus-response pair (blue light, pick) increases over time.
In the above example, the animal has learned to pick when a blue light is on. It is this kind of learning processes that can be simulated in Learning Simulator. The user of the simulator specifies in a text-based scripting language how the world produces stimuli, as well as a number of other parameters to the simulation. After a completed simulation, the user can visualize how the value of certain stimuli or certain stimulus-response pairs change over time. This script file is the only input to Learning Simulator. The output is typically one or several plots of these values as a function of simulation steps (learning curves). These values can also be exported in csv-format to an external file.


--- title: Objects exported from other packages type: docs repo: https://github.com/rstudio/tfdatasets menu: main: name: Objects exported from other packages - tfdatasets parent: tfdatasets-reference aliases: - /reference/tfdatasets/reexports.html - /tfdatasets/reference/reexports.html - /guide/tfdatasets/reference/reexports.html - /tools/tools/tfdatasets/reference/reexports.html - /installation/tfdatasets/reference/reexports.html - /tutorials/tfdatasets/reference/reexports.html - /guide/tools/tfdatasets/reference/reexports.html - /deploy/tfdatasets/reference/reexports.html - /tools/tfdatasets/reference/reexports.html - /tutorials/tools/tfdatasets/reference/reexports.html ---
These objects are imported from other packages. Follow the links below to see their documentation.
contains
, ends_with
, everything
, matches
, num_range
, one_of
, starts_with


| Opcode | Instruction | 64-Bit Mode | Compat/Leg Mode | Description |
| D8 /5 | FSUBR m32fp | Valid | Valid | Subtract ST(0) from m32fp and store result in ST(0). |
| DC /5 | FSUBR m64fp | Valid | Valid | Subtract ST(0) from m64fp and store result in ST(0). |
| D8 E8+i | FSUBR ST(0), ST(i) | Valid | Valid | Subtract ST(0) from ST(i) and store result in ST(0). |
| DC E0+i | FSUBR ST(i), ST(0) | Valid | Valid | Subtract ST(i) from ST(0) and store result in ST(i). |
| DE E0+i | FSUBRP ST(i), ST(0) | Valid | Valid | Subtract ST(i) from ST(0), store result in ST(i), and pop register stack. |
| DE E1 | FSUBRP | Valid | Valid | Subtract ST(1) from ST(0), store result in ST(1), and pop register stack. |
| DA /5 | FISUBR m32int | Valid | Valid | Subtract ST(0) from m32int and store result in ST(0). |
| DE /5 | FISUBR m16int | Valid | Valid | Subtract ST(0) from m16int and store result in ST(0). |
Subtracts the destination operand from the source operand and stores the difference in the destination location. The destination operand is always an FPU register; the source operand can be a register or a memory location. Source operands in memory can be in single-precision or double-precision floating-point format or in word or doubleword integer format.
These instructions perform the reverse operations of the FSUB, FSUBP, and FISUB instructions. They are provided to support more efficient coding.
The no-operand version of the instruction subtracts the contents of the ST(1) register from the ST(0) register and stores the result in ST(1). The one-operand version subtracts the contents of the ST(0) register from the contents of a memory location (either a floating-point or an integer value) and stores the result in ST(0). The two-operand version, subtracts the contents of the ST(i) register from the ST(0) register or vice versa.
The FSUBRP instructions perform the additional operation of popping the FPU register stack following the subtraction. To pop the register stack, the processor marks the ST(0) register as empty and increments the stack pointer (TOP) by 1. The no-operand version of the floating-point reverse subtract instructions always results in the register stack being popped. In some assemblers, the mnemonic for this instruction is FSUBR rather than FSUBRP.
The FISUBR instructions convert an integer source operand to double extended-precision floating-point format before performing the subtraction.
The following table shows the results obtained when subtracting various classes of numbers from one another, assuming that neither overflow nor underflow occurs. Here, the DEST value is subtracted from the SRC value (SRC − DEST = result).
When the difference between two operands of like sign is 0, the result is +0, except for the round toward −∞ mode, in which case the result is −0. This instruction also guarantees that +0 − (−0) = +0, and that −0 − (+0) = −0. When the source operand is an integer 0, it is treated as a +0.
When one operand is ∞, the result is ∞ of the expected sign. If both operands are ∞ of the same sign, an invalidoperation exception is generated.
SRC
| − ∞ | −F or −I + ∞ | −0 + ∞ | +0 + ∞ | +F or +I + ∞ | + ∞+ ∞ | NaN NaN |
| −∞ | ±F or ±0 | −DEST | −DEST | + F | + ∞ | NaN |
| −∞ | SRC | ±0 | + 0 | SRC | + ∞ | NaN |
| −∞ | SRC | − 0 | ±0 | SRC | + ∞ | NaN |
| −∞−∞ | − F − ∞ | −DEST − ∞ | −DEST − ∞ | ±F or ±0 − ∞ | + ∞ | NaN NaN |
| NaN | NaN | NaN | NaN | NaN | NaN | NaN |
Notes: F Means finite floating-point value.
| I * Indicates floating-point invalid-arithmetic-operand (#IA) exception. | Means integer. |
This instruction’s operation is the same in non-64-bit modes and 64-bit mode.
IF Instruction = FISUBR THEN DEST ← ConvertToDoubleExtendedPrecisionFP(SRC) − DEST; ELSE (* Source operand is floating-point value *) DEST ← SRC − DEST; FI; IF Instruction = FSUBRP THEN PopRegisterStack; FI;
| C1 | Set to 0 if stack underflow occurred. Set if result was rounded up; cleared otherwise. |
| C0, C2, C3 | Undefined. |
| #IS | Stack underflow occurred. |
| #IA | Operand is an SNaN value or unsupported format. Operands are infinities of like sign. |
| #D | Source operand is a denormal value. |
| #U | Result is too small for destination format. |
| #O | Result is too large for destination format. |
| #P | Value cannot be represented exactly in destination format. |
| #GP(0) | If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit. If the DS, ES, FS, or GS register is used to access memory and it contains a NULL segment selector. |
| #SS(0) | If a memory operand effective address is outside the SS segment limit. |
| #NM | CR0.EM[bit 2] or CR0.TS[bit 3] = 1. |
| #PF(fault-code) | If a page fault occurs. |
| #AC(0) | If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3. |
| #UD | If the LOCK prefix is used. |
| #GP | If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit. |
| #SS | If a memory operand effective address is outside the SS segment limit. |
| #NM | CR0.EM[bit 2] or CR0.TS[bit 3] = 1. |
| #UD | If the LOCK prefix is used. |
| #GP(0) | If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit. |
| #SS(0) | If a memory operand effective address is outside the SS segment limit. |
| #NM | CR0.EM[bit 2] or CR0.TS[bit 3] = 1. |
| #PF(fault-code) | If a page fault occurs. |
| #AC(0) | If alignment checking is enabled and an unaligned memory reference is made. |
| #UD | If the LOCK prefix is used. |
Same exceptions as in protected mode.
| #SS(0) | If a memory address referencing the SS segment is in a non-canonical form. |
| #GP(0) | If the memory address is in a non-canonical form. |
| #NM | CR0.EM[bit 2] or CR0.TS[bit 3] = 1. |
| #MF | If there is a pending x87 FPU exception. |
| #PF(fault-code) | If a page fault occurs. |
| #AC(0) | If alignment checking is enabled and an unaligned memory reference is made while the current privilege level is 3. |
| #UD | If the LOCK prefix is used. |


Start Time
End Time
Appointment Type
Doctor
Home work
Meeting
Save
Update
Delete
<
Change week
>
View Type
Week
Day


Sight but not much insight
At First Sight A Film Review By Michael Redman Copyright 1999 By Michael Redman
**1/2 (Out of ****)
It must be an overwhelming shock to suddenly awaken one day with an entirely new view of life. Previously comfortable in our old perceptions and way of being, the new vision shatters our old world and the new one is an surrealistic landscape.
Metaphors aside, massage therapist Virgil Adamson (Val Kilmer) experiences this - literally. Once blind, now he sees and he's not sure he likes it much.
Virgil, blind since childhood, works in a spa in a small New York town and his life isn't too bad. He takes a bus to work. His sister fixes his dinner. He has memorized his home so he gets around easily. Then his life is turned upside down when he meets Amy Benic (Mira Sorvino).
Overworked NYC architect Amy takes a break at the spa and meets Virgil's tender touch. After a couple sensual encounters, they fall in love. Back in the city, Amy researches the web and discovers a possible cure for his condition.
Kilmer is credible as a blind man and again demonstrates his increasing acting skills. Although she has turned in commendable performances in the past, Sorvino is less successful. Nathan Lane's small role as a sight therapist is the most human one in the move. Unfortunately we only see a few minutes of him.
When Virgil regains his sight, he can't deal with the new sensations bombarding his life. Infants learn to visually relate to their surroundings gradually. Virgil gets it all at once. He doesn't understand perspective and depth perception. When he sees himself in a mirror, he starts a conversation. He thinks a picture of an apple _is_ an apple. City streets are perplexing.
If the film had concentrated on Virgil's struggle with his new vision, it would be more absorbing. Instead it's a love story. Admittedly Virgil and Amy's early scenes seem like they could lead to something, but when they become a couple they turn into aliens. The massage between strangers is more erotic than their love-making. After Virgil can see, their relationship painfully lacks chemistry. The ending is easily foreseen.
Although the movie is based on a true story, director Irwin Winkler has concentrated on the least interesting aspects. Creating a movie about sight, he shows little insight.
(Michael Redman has written this column for over 23 years and thinks he's going to go out and look at some stuff. Email your visions to<EMAIL_ADDRESS>[This appeared in the Jan. 28, 1999 "Bloomington Indpependent", Bloomington, Indiana. Michael Redman can be contacted at<EMAIL_ADDRESS>--<EMAIL_ADDRESS>This week's film review: http://www.indepen.com/ Film reviews archive: http://us.imdb.com/M/reviews_by?Michael%20Redman Y2K articles: http://www.indepen.com/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Produced by NUS Buffet Response Team
Powered by Hostgagements
Supported by Amazon Rekognition Services
48 Buffet Events |
118 Trays of food saved |
2,288 Telegram members |
N Telegram bot users |
Founded in October 2015, the NUS Buffet Response Team (BRT) is an informal group with a mission to reduce food wastage during catered events. In light of the abundance of catered events in NUS, there is usually an oversupply by catering companies and under-consumption by event attendees. We believe that the unintended wastage can be avoided by directing people to the unconsumed food.
Our objective is to:
★ Provide a channel for events host to link our fellow (hungry) students and staff with unfinished buffets after events
★ Reduce food wastage during catered events
Since NUS BRT Facebook group's launch until January 2017, 11 buffet events were crowd-sourced and linked with the NUS BRT community and at least 30 trays of food were saved and diverted from our landfill. We were also featured as one of the Student Life-Hacks on Campus for NUS Student Life Fair 2016 and NUS Goes Lite 2017.
1. /start NUSBRTBOT
2. See leftover catering food? SNAP a photo, add CAPTION and POST on the bot!
Photos are validated with the support of Amazon Rekognition Services.
Founded in October 2015, the NUS Buffet Response Team (BRT) is an informal group with a mission to reduce food wastage during catered events.
There is usually an oversupply by catering companies and under-consumption by event attendees. We believe that unintended wastage can be reduced by directing people to the unconsumed food.
We are students from NUS. Started as a two-ladies team, the idea grew and team expanded to what is now - a combination of coding experts and ideators.
We strive to make NUS BRT a platform to link unfinished food to those who need them more.
Elaine Sam
Founder
She is always on the lookout for (food) opportunities that could help save her lunch/dinner money. The name Buffet Response Team is inspired from the group she calls a bunch of friends and herself who used to ‘respond’ to clearing food waste during her Polytechnic days. She envisions NUS BRT to be an effective mobilization
group to combat buffet waste and help hungry/needy NUS students to fill their stomach.
Gracie Low
Founder
Known by her friends as Gra, she is an active volunteer in civil society groups and is a firm believer of finishing every GRAin of rice on the plate. She is widely known as a food waste campaigner and advocates for a lifestyle without disposables.
Sparked by the the high frequency of unfinished buffets, she hopes NUS BRT can help link food to more people and together we can save more food from going to waste.
Angus Ng
Developer
Angus has varied interests. After founding Hostgagements, Angus is using it as a platform to advocate his equally diverse beliefs.
With hosting and events management at the core, the wide-ranging experiences including the development of this product enables him to undertake other engagements in future.
Follow his updates on Instagram!
Bernard Yip
Programmer
Bernard provides the main technological expertise. Being at the forefront of technology, he also relishes in making more applications, as documented in his elaborate Github profile. He also delves into creating more solutions for real-world issues with Hostgagements. When not programming, Bernard's impeccable taste for food and enjoyment for the simple things in life culminates in his fulfilling life.
Read some of the comments from the NUS Community
As most of us organised events, this may be a channel to divert unfinished food at catered events.
It is really good to hear of such initiative, helping to save the environment by reducing food wastage.
We can definitely support your team and we have always been conscious of buffet wastage.
Science Club would be happy to play our part in contributing to the efforts in reducing food wastage on campus.
Thanks for reaching out to us with regard to this pertinent issue! We will be happy to be a part of this and help in reducing food wastage in NUS Medicine!
ESESC will definitely support your cause and I reckon we can save a couple more buffets in the days to come.


Monero Warns Users of Malware Ahead of Hard Fork
by Anatol AntonoviciXMR users who downloaded binary files in the past 24 hours or so might have installed malware, Monero said via its official site getmonero.org.
Users Notice Weird Binary Files
Some of the CLI binary files that users downloaded from getmonero have been compromised, according to Monero developers. Users spotted the issue when they saw that the hash of the downloaded binary files looked unusual.
The Monero core team said via its Reddit profile:
It appears the box has been indeed compromised and different CLI binaries served for 35 minutes. Downloads are now served from a safe fallback source.
Monero called users to check the integrity of binary files they got recently:
If the hashes do not match, do NOT run what you downloaded. If you have already run them, transfer the funds out of all wallets that you opened with the (probably malicious) executables immediately, using a safe version of the Monero wallet (the one online as we speak is safe — but check the hashes).
At the moment, all downloads are carried out from a safe backup source.
The Monero team is now investigating what caused the problem and is about to offer relevant details soon.
Monero Plans Hard Fork on November 30
The problem with compromised binaries comes about two weeks ahead of the Monero hard fork scheduled for November 30. The upgrade will introduce a new Proof of Work (PoW) algorithm referred to as RandomX. It has been optimized for typical CPUs by implementing random code execution and multiple memory-hard techniques to stay ASIC-resistant.
Monero executes hard forks on a six-month basis to customize the mining process in order to keep ASIC miners away. The goal of Monero is to provide miners with equal opportunities. Thus, developers are upgrading the network from time to time to make ASICs and FPGAs useless for XMR mining.
Interestingly, Coinbase said in a recent blog post that Monero’s tweaks were still inefficient:
This strategy underestimated the ability of talented hardware designers to quickly incorporate functionality into a chip design. It is almost certainly possible for a highly skilled chip designer to master a development process that can incorporate whatever pattern would inevitably develop for these proof of work changes.
Do you think Monero’s approach to make mining affordable for everyone is really working? Share your thoughts in the comments section!
Image via Shutterstock
The Rundown


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.apache.xml.resolver.CatalogManager
CatalogManager provides an interface to the catalog properties.
Properties can come from two places: from system properties or from a CatalogManager.properties file. This class provides a transparent interface to both, with system properties preferred over property file values.
The following table summarizes the properties:
| System Property | CatalogManager.properties Property |
Description |
| xml.catalog.ignoreMissing | If true, a missing CatalogManager.properties file or missing properties within that file will not generate warning messages. See also the ignoreMissingProperties method. | |
| xml.catalog.files | catalogs | The |
| relative-catalogs | If false, relative catalog URIs are made absolute with respect to the base URI of
the CatalogManager.properties file. This setting only applies to catalog
URIs obtained from the catalogs property |
|
| xml.catalog.verbosity | verbosity | If non-zero, the Catalog classes will print informative and debugging messages. The higher the number, the more messages. |
| xml.catalog.prefer | prefer | Which identifier is preferred, "public" or "system"? |
| xml.catalog.staticCatalog | static-catalog | Should a single catalog be constructed for all parsing, or should a different catalog be created for each parser? |
| xml.catalog.allowPI | allow-oasis-xml-catalog-pi | If the source document contains "oasis-xml-catalog" processing instructions, should they be used? |
| xml.catalog.className | catalog-class-name | If you're using the convenience classes org.apache.xml.resolver.tools.*), this setting allows you to specify an alternate class name to use for the underlying catalog. |
Catalog
| Constructor Summary | |
CatalogManager()
|
| Method Summary | |
static boolean |
allowOasisXMLCatalogPI()
Obtain the oasisXMLCatalogPI setting from the properties. |
static java.lang.String |
catalogClassName()
Obtain the Catalog class name setting from the properties. |
static java.util.Vector |
catalogFiles()
Obtain the list of catalog files from the properties. |
static void |
ignoreMissingProperties(boolean ignore)
Tell the CatalogManager how to handle missing properties |
static boolean |
preferPublic()
Obtain the preferPublic setting from the properties. |
static boolean |
relativeCatalogs()
Obtain the relativeCatalogs setting from the properties. |
static boolean |
staticCatalog()
Obtain the static-catalog setting from the properties. |
static int |
verbosity()
Obtain the verbosity setting from the properties. |
| Methods inherited from class java.lang.Object |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait |
| Constructor Detail |
public CatalogManager()
| Method Detail |
public static void ignoreMissingProperties(boolean ignore)
Tell the CatalogManager how to handle missing properties
If ignore is true, missing or unreadable property files will not be reported. Otherwise, a message will be sent to System.err.
public static int verbosity()
Obtain the verbosity setting from the properties.
public static boolean relativeCatalogs()
Obtain the relativeCatalogs setting from the properties.
This property is used when the catalogFiles property is interrogated. If true, then relative catalog entry file names are returned. If false, relative catalog entry file names are made absolute with respect to the properties file before returning them.
This property
In the properties, a value of 'yes', 'true', or '1' is considered true, anything else is false.
public static java.util.Vector catalogFiles()
Obtain the list of catalog files from the properties.
Note that the list of catalog files is always a semicolon delimited list, even on Unix systems where a colon delimited list might be considered more natural.
public static boolean preferPublic()
Obtain the preferPublic setting from the properties.
In the properties, a value of 'public' is true, anything else is false.
public static boolean staticCatalog()
Obtain the static-catalog setting from the properties.
In the properties, a value of 'yes', 'true', or '1' is considered true, anything else is false.
public static boolean allowOasisXMLCatalogPI()
Obtain the oasisXMLCatalogPI setting from the properties.
In the properties, a value of 'yes', 'true', or '1' is considered true, anything else is false.
public static java.lang.String catalogClassName()
Obtain the Catalog class name setting from the properties.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


UPDATE - Read all about the updated methodology in Mapping the Electric Grid.
Summary
Mapping power infrastructure - power lines and substations - is a problem that poses a unique set of challenges. Machine learning on satellite imagery is an approach that has the potential to facilitate this effort at scale, especially to map higher voltage infrastructure. This research effort assesses the feasibility of deep learning for grid detection in Non-Western areas like Sub Saharan Africa.
The main take-aways at this stage are:
- SkyNet is able to detect metal pylons and high voltage lines at very low resolutions using SAR data
- with SAR, the accuracy of the current model is about 75%, which we believe can be tuned to upward of 85%
- a methodology relying solely on SAR does not work in mountainous areas
- using optical imagery sources, SkyNet is currently not able to detect power lines, even at high resolution. We have identified new approaches that could make optical imagery work
Background
SAR-C Images
SAR-C images are captured in the same band of radio waves that wifi uses. In many respects, they are simpler to deal with than optical images - they don’t have clouds or shadows. They are also readily available under a public license. The ESA provides global SAR coverage with its Sentinel-1 constellation of satellites.
Usually, SAR images measure “surface roughness” (though they can also be used to measure a variety of other things, like terrain altitude). Very smooth surfaces, like desert, appear black, and rough surfaces like trees appear lighter. Somewhat rough surfaces like grass are grey.
SAR reflects off of artificial surfaces like concrete and metal, making it useful for estimating population density. This property is also uniquely useful for detecting the power grid.
Since many high voltage power pylons are made of steel, their glare is visible even at very low resolutions. The power grid shows clearly as rows of dots even when it is invisible in optical images.
Machine Learning Using Satellite Images and Map Features
To detect whether a tiles has a power line in it, the computer uses a labeled dataset (tiles where it’s known for sure whether or not there’s a power line) to make a guess about whether there’s a power line in an unlabeled tile. We label the dataset using features from maps like OpenStreetMap or the Africa Grid Explorer.
To make valid predictions, the computer must have a lot (thousands) of accurate labeled tiles. This approach works really well for finding streets and buildings because there are typically lots of accurate OSM features to use. It’s more challenging to use for power grid detection because power lines are a lot less common.
Results
Optical Images
We quickly determined that we could not use one meter resolution images to identify power lines because they usually were not visible at that resolution. Due to the availability of imagery, this eliminated training in areas besides South Africa.
There, even with the best training data, power lines in low resolution optical images could not be detected. However, it is possible that this is not a fundamental limitation, but caused by our data processing. Our current data processing setup imposes several limitations which, if resolved, could make optical imagery effective at this task.
Currently, we use an approach called semantic segmentation, where we ask the computer to “draw” the lines on the image. However, zoomed this far in, the difference between the physical location of the power line and the location reported in Africa Grid Explorer is significant. The location of the line on the image therefore uncorrelated with the “correct” answer provided by the label. The program has no information it can use to make guesses.
We are working on switching to a different method, image classification, where the computer merely guesses whether or not the image container a power line. This has some disadvantages - it requires more labeled data and more data preprocessing. However, it should make it possible to use less accurate maps as labels.
Another contributing factor to the lack of success in using optical images is the image file format we use. Currently, all of the satellite images we use are downloaded as JPEGs, a format reduces file size by distorting sharp edges in images. Because we are trying to detect tiny objects with sharp edges (power lines and pylons), JPEG makes them less visible.
SAR Images
With SAR images, we were again limited to training in South Africa. The western African countries we investigated didn't have enough label data for power lines with metal pylons. It is possible that this is because there aren't many metal pylons in these countries, or it could simply be that they haven't been recorded as throughly as in South Africa.
There, about half of power lines could be accurately detected using SAR images. The success of the model was highly terrain dependent. Lines could not be detected in mountains, for example. Given that, in these situations, the lines aren’t visible to humans either, this seems to be a fundamental technical limitation of the imagery.
Other times, mountainous terrain gives false positives - the program guesses the existence of a power line where there isn’t one. This problem could be solved by preprocessing the data to remove tiles with mountains in them or by adding Landsat images as an additional input which would allow the program detect what sorts of terrain it is seeing and avoid false positives accordingly.
Currently, our program is about 75% accurate (for a given image, there is a 75% chance that the program correctly decided whether or not it has a power line in it). This can be tuned to favor completeness of up to 85% (i.e. 85% of images with power lines are identified as having power lines) or precision of up to 80% (i.e. 80% of images identified as having power lines actually have power lines in them).
Conclusions
Role of Machine Learning in Satellite Image Analysis
Currently, our model is not able to satisfactorily identify power lines from satellite images on its own. However, models like ours serve as a perfect compliment to current mapping techniques. Models like ours could be used to direct mappers on platforms like Mapswipe to areas that are most likely to have objects of interest, significantly increasing the amount of objects found with a given amount of work. OSM mappers could edit the guesses that these models make instead of tracing from scratch. To map Africa's high voltage power lines, we recommend using our model to prioritize images are tasked to human reviewers who look at each image and decide whether or not it actually contains power lines. If more detail is needed, the reviewers could trace the power lines. With more work, we hope our model will need less human input - it would trace the lines itself, the reviewer just makes small changes and approves the results.
Further Steps
Though the current solution to detecting high voltage power lines is workable, it could be significantly improved. Additionally, much of the research needed to needed to improve quality on high voltage lines could also be applied to low voltage lines.
The step that will most directly improve the current model would be adding more bands of imagery to the data. If we combined SAR data with optical or near-infrared images, the model could learn which areas are mountains, forests, and cities and avoid false positives. We could also implement a image classification model, which would give less granular but potentially more accurate information about where power lines are.
There are also a variety of smaller changes we could make that could significantly improve preformance. By varying things like how many images the machine learning algorithm views at once, how much weight it puts on individual wrong answers, and a host of other parameters, we could optimize our model. Given that our current parameters were already carefully tuned for optical images, there probably isn't a lot of work to be done here - but it could yield a few percentage points of improvement.
We could also do more work to make optical images a viable option, like switching to from JPEG to PNG images and creating a dataset with more accurate line locations, perhaps by by manually tracing over imagery. We could also create a dataset of pylon locations. These would probably necessary steps for detecting low voltage lines.
UPDATE - Read all about the updated methodology in Mapping the Electric Grid.


--- layout: default single: true # page.sidebar is not necessarily set for pages - assume true if not set ---


PlaceSearchSuggestionModel QML Type
Provides access to search term suggestions. More...
| Import Statement: | import QtLocation 5.3 |
| Since: | Qt Location 5.5 |
Properties
- limit : int
- offset : int
- plugin : Plugin
- searchArea : geoshape
- searchTerm : string
- status : enum
- suggestions : stringlist
Methods
- void cancel()
- string errorString()
- void reset()
- void update()
Detailed Description
The PlaceSearchSuggestionModel can be used to provide search term suggestions as the user enters their search term. The properties of this model should match that of the PlaceSearchModel, which will be used to perform the actual search query, to ensure that the search suggestion results are relevant.
There are two ways of accessing the data provided by this model, either through the suggestions property or through views and delegates. The latter is the preferred method.
The offset and limit properties can be used to access paged suggestions. When the offset and limit properties are set the suggestions between offset and (offset + limit - 1) will be returned. Support for paging may vary from plugin to plugin.
The model returns data for the following roles:
| Role | Type | Description |
|---|---|---|
| suggestion | string | Suggested search term. |
The following example shows how to use the PlaceSearchSuggestionModel to get suggested search terms from a partial search term. The searchArea is set to match what would be used to perform the actual place search with PlaceSearchModel.
import QtQuick 2.0 import QtPositioning 5.5 import QtLocation 5.6 PlaceSearchSuggestionModel { id: suggestionModel plugin: myPlugin // Brisbane searchArea: QtPositioning.circle(QtPositioning.coordinate(-27.46778, 153.02778)) onSearchTermChanged: update() } ListView { model: suggestionModel delegate: Text { text: suggestion } }
See also PlaceSearchModel and QPlaceManager.
Property Documentation
This property holds the limit of the number of items that will be returned.
See also offset.
This property holds the index of the first item in the model.
See also limit.
searchArea : geoshape |
This property holds the status of the model. It can be one of:
| PlaceSearchSuggestionModel.Null | No search query has been executed. The model is empty. |
| PlaceSearchSuggestionModel.Ready | The search query has completed, and the results are available. |
| PlaceSearchSuggestionModel.Loading | A search query is currently being executed. |
| PlaceSearchSuggestionModel.Error | An error occurred when executing the previous search query. |
This property holds the list of predicted search terms that the model currently has.
Method Documentation
Cancels an ongoing search suggestion operation immediately and sets the model status to PlaceSearchSuggestionModel.Ready. The model retains any search suggestions it had before the operation was started.
If an operation is not ongoing, invoking cancel() has no effect.
This read-only property holds the textual presentation of the latest search suggestion model error. If no error has occurred, or if the model was cleared, an empty string is returned.
An empty string may also be returned if an error occurred which has no associated textual representation.
Resets the model. All search suggestions are cleared, any outstanding requests are aborted and possible errors are cleared. Model status will be set to PlaceSearchSuggestionModel.Null.
Updates the model based on the provided query parameters. The model will be populated with a list of search suggestions for the partial searchTerm and searchArea. If the plugin supports it, other parameters such as limit and offset may be specified. update()
submits the set of parameters to the plugin to process.
While the model is updating the status of the model is set to PlaceSearchSuggestionModel.Loading
. If the model is successfully updated, the status is set to PlaceSearchSuggestionModel.Ready
, while if it unsuccessfully completes, the status is set to PlaceSearchSuggestionModel.Error
and the model cleared.
This example shows use of the model
PlaceSeachSuggestionModel { id: model plugin: backendPlugin searchArea: QtPositioning.circle(QtPositioning.coordinate(10, 10)) ... } MouseArea { ... onClicked: { model.searchTerm = "piz" model.searchArea.center.latitude = -27.5; model.searchArea.cetner.longitude = 153; model.update(); } }
A more detailed example can be found in the in Places (QML) example.


Develop Apache Annotator
Install from source
This project’s source code is available directly from the ASF or via GitHub.
Requirements
If you’d like to code on the project, you will need the following:
Install
To retrieve the code using git:
$ git clone https://gitbox.apache.org/repos/asf/incubator-annotator.git apache-annotator
Then install dependencies using yarn:
$ cd apache-annotator
$ yarn install
Build
To compile (‘transpile’) the code:
$ yarn build
For each module, the TypeScript source code is in packages/…/src
and the Javascript is output in packages/…/lib
.
To use your local build of the code in an application that depends on annotator, have a look at the yarn link
or npm link
command.
Play
To run a webserver running the demo:
$ yarn start
Now open http://localhost:8080/
(or whichever address the command prints) in your web browser to play with the demo. The server continuously rebuilds and hot-reloads to the source code after any edits, so you can directly try out any changes you make to the features it demonstrates.
Run tests
This runs the tests for all packages and reports their code coverage:
$ yarn test


BERKSHIRE-HATHAWAY INC. 3555 Farnam Street Omaha NE 68131 Official Home Page
A Message from Warren E. Buffett
News Releases
Updated August 10th, 2015
Annual & Interim Reports
Updated August 7th 2015
Warren Buffett's Message to Berkshire Shareholders
Updated February 28th 2015
Special Letters from Warren and Charlie RE:Past, Present and Future
Charlie Munger's to Wesco Shareholders
Link to SEC Filings
Annual Meeting Information
Links to Subsidiary Companies
Celebrating 50 Years of a Profitable Partnership
(A Commemorative book first sold at the 2015 Annual Meeting and now for sale on eBay.)
Corporate Governance
Comparative Rights and Relative Prices of Class A and B Stock
Owner's Manual
Berkshire Activewear
Letters from Warren E. Buffett Regarding Pledges to Make Gifts of Berkshire Stock


---
layout: post
title: Some New Sample Papers Available
tags:
- agfa
- Black and White
- film
- Foma
- paper
- print
- Site News
status: publish
type: post
published: true
meta:
_edit_last: "2"
_edit_lock: "1270314358"
tt_auto_tweet: "false"
aktt_notify_twitter: "yes"
tt_auto_tweet_text: "New blog post: [TITLE] [URL] "
aktt_tweeted: "1"
dsq_thread_id: "371374820"
---
You probably know this but in case you didn't I used to love some of the old Agfa black and white papers. Really love them. They were unique and some images just lent themselves to these unique papers. I recently tried the new Adox MCC and it is dead on Agfa MCC with one exception - the base is bayarta - bright white vs natural. The emulsion color seems identical so does the surface of the glossy. I even like it better for some prints. That is why I started selling the sample prints in the first place.
By popular demand - actually just a few people I have decided to expand the number of papers I am offering as sample prints. I am adding a couple today and will add a couple over the next few weeks.
The first is a really really nice paper that is so much like Agfa 118 it is not funny. In every way - emulsion - base color -surface color - every way. It is Foma FB Variant IV 123 Velvet Semi-Matte - that is a mouthful - neutral base - not bright bright white with an emulsion tone similar to the MCC Adox. The surface combined with the subtle colors is what makes this paper very special. Great stuff.
The second paper is a super warmtone - very very very different. Foma FB Cream Base Warmtone Matte - really cool.
They are available now with the same image selection as before. Over the next few days I will be adding some additional images of subject matter that has been requested - still life - landscape - architecture that I think will print well on the papers that I am offering as samples - when they are available I will be introducing another two papers as well, I am just fine tuning the image selection to fit across all three.
Hope you enjoy them.
RB


A critical Git security vulnerability has been announced today, affecting all versions of the official Git client and all related software that interacts with Git repositories, including GitHub for Windows and GitHub for Mac. Because this is a client-side only vulnerability, github.com
and GitHub Enterprise are not directly affected.
The vulnerability concerns Git and Git-compatible clients that access Git repositories in a case-insensitive or case-normalizing filesystem. An attacker can craft a malicious Git tree that will cause Git to overwrite its own .git/config
file when cloning or checking out a repository, leading to arbitrary command execution in the client machine. Git clients running on OS X (HFS+) or any version of Microsoft Windows (NTFS, FAT) are exploitable through this vulnerability. Linux clients are not affected if they run in a case-sensitive filesystem.
We strongly encourage all users of GitHub and GitHub Enterprise to update their Git clients as soon as possible, and to be particularly careful when cloning or accessing Git repositories hosted on unsafe or untrusted hosts.
Repositories hosted on github.com
cannot contain any of the malicious trees that trigger the vulnerability because we now verify and block these trees on push. We have also completed an automated scan of all existing content on github.com
to look for malicious content that might have been pushed to our site before this vulnerability was discovered. This work is an extension of the data-quality checks we have always performed on repositories pushed to our servers to protect our users against malformed or malicious Git data.
Updated versions of GitHub for Windows and GitHub for Mac are available for immediate download, and both contain the security fix on the Desktop application itself and on the bundled version of the Git command-line client.
In addition, the following updated versions of Git address this vulnerability:
The Git core team has announced maintenance releases for all current versions of Git (v<IP_ADDRESS>, v1.9.5, v2.0.5, v2.1.4, and v2.2.1).
Git for Windows (also known as MSysGit) has released maintenance version 1.9.5.
The two major Git libraries, libgit2 and JGit, have released maintenance versions with the fix. Third party software using these libraries is strongly encouraged to update.
More details on the vulnerability can be found in the official Git mailing list announcement and on the git-blame
blog.


| Home | Malls | Cinemas | Gaming |
Bangalore-An Epicure's Paradise. Take a walk during the night through the streets of Bangalore and the pleasant aroma of the gourmet food that is prepared here every moment, is sure to leave you in awe. The lovely food prepared in the streets of Bangalore is no less tasty than the local and international cuisines at five-star restaurants. The shops here do not have good seating arrangements-agreed, but eating here in the crescent moonlight with a cool breeze for company is an experience like no other
Have you ever noticed how street food is never something that people outgrow? We even hear about humans outgrowing chocolate (which is rather unthinkable!) but never street food. And as an ode to the food that has everyone by the roots of their taste buds, here are 14 excellent places for street food in Bangalore.
|
Even though they serve sandwiches in different varieties, it's the chocolate sandwich that has put Hari Super Sandwich on the map for food lovers. Aside from the taste element,the reasonable pricing also adds to the endearment factor. Talking about food lovers, I wonder if there are actually people who don't love food. I shudder to think about it! The Chocolate Sandwich!! Yes you read it right, that's what it is famous for. This place at Jayanagar is one of the finest street food joints in Bangalore for having sandwiches and tasty chats. They serve a variety of sandwiches and chats which are as economical as they are healthy. Located nearby is a Lassi Corner which serves you sweet Lassi to drink after you're done having your food at the Sandwich Zone. Price for two: Rs. 200 (approx) Location: 177/A-44, 22nd Cross, 3rd Block, Jayanagar, Bangalore |
|
Another place that you can depend on for South Indian fare-whether it be the crispy vadas or the rice idlis or kesaribath, never fear the word 'disappointment' while you are here. The best in its class of traditional south Indian food can be found in the Brahmin's Coffee Bar at Basavanagudi in Bangalore. It offers steamingly hot rice idlies which are quite soft and the crispy vadas that you just can't stop at one plate. They also serve a variety of dishes here but nothing beats the Idly-Vada combo. Coffee,tea and kesaribath are some of the other popular foods that are served here. Price for two: Rs. 100(approx) Location: Ranga Rao Road, Near Shankar Math, Shankarpuram, Basavanagudi Area, Bangalore |
|
Different varieties of vada pav. Does that excite you? How about different varieties of some of the best vada pav in Bangalore. Yeah, thought so! The spectrum of the snack on offer includes schezwan, paneer, aloo and more. Even though the name gives you the idea of vada pav alone, the burgers and french fries they serve are pretty good as well. The name itself clearly indicates that this stall at Indiranagar serves one of the best vada pavs in Bangalore. There are a number of flavors for the vada pav including paneer, schezwan, aloo and many more. They also serve yummy burgers and french fries too. The prices are quite low and I personally recommend the Veg Tikki Vada Pav which is one of the best street food in Bangalore. Price for two: Rs. 150(approx) Location: 3037, 8th Main, HAL 2nd Stage, Off 80 Feet Road, Indiranagar, Bangalore |
|
This small shop serves some of the best pani puris in Bangalore. And in a city where there are more than enough options for the famous street food, that's no simple feat to pull off. The other snacks you can enjoy here include aloo chat, dahi puri and paapdi chat. Puri-Gol Gappa-Puchka or whatever you call it, this joint gives you every reason to love every name and the essence in its taste. And street food in Bangalore is incomplete without it. Rakesh Kumar Pani Puri is a small stall located at Jayanagar 3rd block in Bangalore exclusively for Chats and Pani Puri. Taste the delicious Pani Puri here and I'm sure you will become a regular here. Apart from pani puri, they also serve other snacks like dahi puri, aloo chat and paapdi chat. Location: 8th F Main Road, 3rd Block, Jayanagar, Bangalore |
|
Dosa lovers swear by the name of Central Tiffin Room. With varieties of mouth-watering dosas and also idly, vada and poori sagu that make South India endearing to many, this is one place where your sense of taste has nowhere to go but north. Serving utterly delicious Butter Masala Dosa continuously to a huge number of customers is no child's play. But CTR at Margosa Road, Malleshwaram has done this effortlessly and brilliantly for over six decades and is thus, a delight for Dosa lovers. Even to this day, this Tiffin Room is one of the best places to have South Indian Street Food in Bangalore. Apart from variety of dosas they also serve idly-vada, kesribath and the poori sagu. There are also other shops which serve ice creams, chats and other stuff around the place.  Whether it be a hot and sumptuous masala dosa or the Dal Holige rich in ghee, you can have your stomach's fill and heart's content here. A number of stalls offering some fantastic street food from the entire Indian varieties-you got to say that Bangalore does rock. From the hot and spicy Masala Dosa to the sweet and sublime Dal Holige drenched in pure ghee, there is everything on this Food Street in Bangalore that you may want to eat. The rose gulkand enriched with the goodness of pure Honey and white Butter is one thing you should not miss at the Shivanna Gulkand Center. The food here is also quite economical and one of the best in Bengaluru. There are a number of stalls here including the Pav Bajji stall, the Sweet Corn stall, Manchurian stall to name a few. |
|
For a whole lot of chat varieties to take your food-savouring experience to a whole new level, try this place. Aside from the oh-so-popular Sai Ram's Special you have the option to give yourself a snacky treat with wafer chats, disco chat, crazy masala and more. To sweeten things more, they also sell home-made chocolates made in Ooty. Be it the famous Sai Ram's Special or the mouth watering dahi puri, this chat stall at Margosa Road, Malleshwaram has everything more to offer than you can ever expect. The person serving here always has a warm and heartily smile to add a bit of extra flavor to your already delicious food. They serve a numerous variety of chats which includes wafers chat, chips masala, disco chat, crazy masala and a lot more. It now also sells specially prepared home-made chocolates from Ooty. Ans yes, you miss the extra whole bunch of fun if you forget to ask for a plain puri soaked in pani and the sweet mixture at the end. Price for two: Rs. 100(approx) Location: 83, 2nd Temple Street, 15th Cross, Near Kadu Malleshwaram Temple, Malleshwaram, Bangalore |
|
Rolls are quaint objects. They come rolled up and make your taste buds feel stretched out in a mat that is laden with all the taste it can take. The pricing is quite reasonable here and the best rolls to have are double paneer roll and the double chicken roll. Located very next to the M S Rammiah ground in Mattikere-Yeshawanthpur, this chat stall offers yummy and extra delicious rolls which are quite low priced and absolutely delightful. This street food place is often crowded by students for its mouthwatering food served and the quality maintained here. Some of the best rolls are double paneer roll, double egg chicken roll and the simplest veg roll. Price for two: Rs. 150(approx) Location: Pipeline Road, Adjacent to MS Ramaiah Ground, Mathikere, New BEL Road, Bangalore |
|
You know where you go for some super-awesome rolls in Bangalore? It's to the ground floor of the Sri Siva Sai complex in Indiranagar, for that's where Kahn Saheb is situated. Serving both veg and non-veg, their 'Best of' list features mixed vegetable tikka roll, mutton buna, babycom tikka roll and many more. Located at the ground floor of the Sri Shiva Sai Complex in Indiranagar, this is one of the best street food places in Bangalore to have delicious and crunchy rolls and grills. Both vegetarian and non-vegetarian street foods are served here and the prices are extremely reasonable. Some of the famous items served are Mixed Vegetable tikka Roll, paneer mushroom, babycorn tikka roll, mutton buna and many others with exclusive add ons like kathi wrap, single egg roll, etc. Price for two: Rs. 300(approx) Location: Ground Floor, Sri Shiva Sai Complex, 13th Cross, 7th Main, 2nd Stage, HAL, Off Double Road, Indiranagar, Bangalore |
|
This place is quite popular due to the fact that they serve fantastic chats which you can enjoy in the outdoor seating area in the evenings. You can count on this pure veg outlet for hearing your lips smack on great sev puri, masala puri, aloo dahi puri and more. Hop in to this purely vegetarian and outdoor seating famous chat stall located at Uma Theatre Road, Chamarajapet in Basavanagudi during the evening to enjoy the warm sunset with some utterly delicious street food in Bangalore. The pricing here is economical and pocket friendly. Some of the best dishes served here are the aloo dahi puri, sev puri, masala puri and a few more. Price for two: Rs. 100(approx) Location: 29, 3rd Main Road, 3rd Cross, Bazaar Street, Uma Theatre Road, Chamarajpet, Basavanagudi, Bangalore |
|
The name is inspired by the tikki poori they serve, which is something of a masterpiece. Aside from that you can also try mudpie tikki, chocolate tikki or the paneer tikki, all of them especially fine. The puzzling name itself indicates that this chat stall situated in Koramangala is a unique one serving lovely chats and other food. The name comes from the delicious and special food tikki poori served here which is one of the best street food in Bangalore. Stop here for a quick bite and I am sure this taste is going to make you addicted to the yummy food served here. Some of the best ones to eat are the chocolate tikki, mudpie tikki, masala tikki and paneer tikki. Price for two: Rs. 250(approx) Location: 404, Ground Floor, 1st C Cross, 7th Block, Koramangala, Bangalore |
|
I'll tell you one thing-they didn't put that name just for the sake of having a name. The food is indeed spicy but not any less tasty for that. Some of the dishes that you can go "oof-off! it's so spicy my tongue's on fire!" over are sav dahi puri, tava paratha and ghobi chilli. Bring me some Coke, man! Last but not the least, this food stall at Jeevanabheema nagar serves one of the best spicy street food in Bangalore. From the spicy hot tava paratha to the delicious dahi puri, this stall serves a number of lovely dishes which are reasonably priced and equally yummy. Some of the best food served are paneer fried rice, sav dahi puri, szechwan noodles, baby corn manchurian, aaloo paratha and gobhi chilli. Price for two: Rs. 250(approx) Location:1650, 10th Main Road, Jeevanbheema Nagar, Bangalore |
| Wow! That's a name worth visiting once. The variety of food served here is so huge that you will be puzzled to choose the right one to eat. From the bhel puri to the black current gapagap, every single dish served here is something unique and extra delicious. This stall is in the 3rd Block of Jayanagar and serves dishes that are mostly of North Indian taste. Some of the rare and lovely dishes served here are litchi pani puri, tasty twister chat, khatta meetha ghapagap, chowpathi pav bhaji and the best of all being the Ahmedabad dabeli. |
|
Situated in the Silver Spring Layout, this place offers some Indori food par excellence. Do try their hot dogs for it's some kind of magic. The price is relatively high but the super-hygiene and the wonderful taste more than justify it. After some desi South Indian dishes and some delicious chats, its time to head to taste some lovely Indori food. This stall is located near the Purva Rivera Apartments at Silver Spring Layout in Marathahalli, Bangalore. The price here are relatively high compared to the ones told before but, it is in no match to the wonderful taste of the food served and the hygiene maintained here. Some of the famous dishes served here are the hot dogs, puchkas and many more. Price for two: Rs.200(approx) Location: Silver Springs Layout, Near Spice Garden Restaurant, Marathahalli, Bangalore |
Street food is definitely THE democratic food of India. Take any state and the majority loves it. And with these amazing places for street food in Bangalore, you have more reasons to love it.
Overall, these are some of the best and handpicked Street Food in Bangalore. Wherever you go, whenever you go and with whoever you go, one thing is for sure-the experience of a walk in the cool breeze and having some lovely food in the famous 'Food Streets of Bangalore' is something that will give you overwhelming joy and extreme happiness. So head into the food streets of Bangalore and enjoy the tasty and yummy food served and have a nice time there.


{include file="common/css_js" /} action()=="add" || request()->action()=="edit"){ ?> {include file="common/fileupload" /}


A new user {{username}} has been registered as Beneficiary
A new user {{username}} has been registered as Donor
You can view his details at http://localhost:8000/admin/auth/user/


| Previous Lecture | lect08 Before Slides | lect08 Annotated Slides | Next Lecture |
Code from lecture
https://github.com/ucsb-cs24-s18/cs24-s18-lectures/tree/master/lec-08
Topics
- Recursion revisited
- Recursive deconstructors
| Previous Lecture | lect08 Before Slides | lect08 Annotated Slides | Next Lecture |
https://github.com/ucsb-cs24-s18/cs24-s18-lectures/tree/master/lec-08


I have been anxious to experience a Morning Glory Trip since I have learned about the significance of the LSA on the web, which has been for about three months now.
After ordering two ounces of seeds from an online store, I anxiously grinded up the complete volume with a pepper grinder and into a rubber container. Afterwards, being too eager to wait to try the ether method of extraction and being minus a car to get to the store for lighter fluid, I poured the crushed seed-powder into a jar and then added 22 ounces of 101 Proof Whiskey.
I let the mixture sit, shaking it briefly, for 24 hours. Then I got a coffee filter that I poured the mixture through into another jar. Once I was left with all of the crushed seeds on the coffee filter, I placed it back into the original jar to save for another attempt of extraction.
Now, the preperation was ready for consumption. I got a funnel and poured the ready jar into a suitable drinking bottle and mixed half of the preperation with coffee.
I approached the experience with the humbled respect of an intrigued learner that is greatly fascinated with the enhancement of awareness. It was four o'clock in the afternoon when I began to drink this magic elixer.
After walking through trails and through fieds while listening to my Walkman for about an hour, I managed to finish 1/8 of the elixer. Unfortunatly, I threw up.
But, without being discouraged that easily, that made it easy to quickly consume the rest of the whole thing.
 This was a result of the quick consumption of whiskey. Then, I walked down a short trail overlooking a factory and a great portion of the city nearbye. By this time I definatly knew that just on this short walk down the trail, My entire process of thought and vision have completly been altered. I sat on a couple of concrete blocks on the side of this hill and I felt like I was a bird, my vision able to see into everything I looked at with great clarity. My senses were all enhanced. I could feel my surroundings like an animal, noticing things in the world that they must notice and am completely unaware of normally.
Colors were brighter, pupils in the eyes much larger. Perception of time was much different probably because everything was so much more interesting. My body felt gummy like a stretched rubber band-the same bodily sensation experienced on LSD. I was involved with the world in such a way that my advanced animal perceptions made me feel godlike and perfect. Lines patterned my visual field.
My journey began at four o'clock and it began to get dark outside. I made my way back towards home and lied down on my back in a field. Suddenly I heard a deer in the bushes next to me, grunting and breathing. I was amazed at how close to this animal I was and I reasoned that my bodily movements must have been naturally undisturbing to the deer, giving me a feeling of oneness with Nature.
Not wanting to yet return home, yet feeling exhausted from both physical and mental excercise, I looked at the time on my watch which was ten o'clock. I had my headphones off for a while and thought that I would look at the sky and listen to a C.D..
I put in a favorite C.D. and lied on my back looking at the moon. The
clouds made beautiful designs moving across the sky. Initially intending to only listen to a couple of songs, the C.D. was so interesting and sounded so unusually wonderful that I ended up listening to the entire album.
It was about twelve o'clock and I felt like it would be a proper time to return home because I thought there might be a good movie on television. I was hungry too.
I enjoyed the journey until three o'clock in the morning, wanting to get everything out of the experience I could before falling asleep. The entire trip lasted about eleven hours, until I slept.
In conclusion, the trip was identical to LSD. The only difference was that it was more gentle. No doubt that if more Morning Glory would be consumed that this could be an understatement. My senses woken up and I explored all of their features. It was a travel into enhancement of human potential. Completly rewarding. Altogether a wonderful experience. I plan to explore this fascinating discovery further.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


- Full Stack Developer at Castle Learning
- Freelance Web Developer
- Semi-Pro Trumpet player
What this talk could have been...
- A bulleted list of NPM packages
- Demos of those packages
This would have only provided a WHAT and HOW
Instead...
I'll try to give you some context for these tools...
- Who uses these tools?
- Why do they use them?
Intended audience:
"I do front-end things, but the command line is intimidating"
"I don't do front-end things... and why the hell would they need anything other than git and a text editor?"
I already know things
Please do the following:
Problem:
"Front-end" is a really broad and vague term.
Defining boundries:
What does front-end mean?
On the web, it's the things you see and interact with in a browser window.
Components of the front-end
Back in the olden days...
- "Hey, I need a web page!"
- Handed an Indesign or Photoshop comp
- Open up DreamWeaver or FrontPage and recreate the comp...
- ...with some sweet table-based layouts and inline styles
A likely modern scenario:
"Hey, I need a web platform!"
that is fast
looks great on all devices
has integrated analytics
and can be maintained by the marketing team
Content Management System
Grab a theme and insert your content.
Where does a front-end developer fit into this scenario?
Creating and/or Customizing the CMS theme
Creating CMS themes
Need to know:
- html, js, and css
- back-end language of the CMS (usually Php)
Working on a web-app?
Each back-end language deals with views differently
| Language |
Framework |
Views/Templates |
| Ruby |
Rails |
Embeded Ruby (html.erb) |
| Python |
Django |
Jinja2 |
| Php |
Laravel |
Blade |
| Node |
Express |
HandleBars |
| C# |
MVC |
.cshtml |
The burden of an additional language has been recognized...
Drupal and WordPress now offer api's that offer the possibility of having a front-end that is decoupled from the back-end.
The landscape is vast...
Let's narrow the scope of front-end for this talk:
- Only html, css, and js
- producing the assets that go in the
<head>
and the <body>
- tasks that make the web experience faster (ex: minification, concatatenation)
- ...and the dev environment needed to produce all this stuff
How its going to happen...
This talk is actually React JS app...
that contains presentations about different front-end command line considerations...
that will also serve as the demos refered to in the presentations.
If the demo gods smile upon this talk...
If the demo gods smile upon this talk...
- pull this app down from github
- bring up the dev environment
- install the dependencies
- and demo from inside that environment