4.4. Resource Group Configuration
Note
Resource groups are currently experimental and must be enabled with the
experimental.resource-groups-enabled=true
config flag.
Resource groups place limits on resource usage, and can enforce queueing policies on queries that run within them or divide their resources among sub groups. A query belongs to a single resource group, and consumes resources from that group (and its ancestors). Except for the limit on queued queries, when a resource group runs out of a resource it does not cause running queries to fail; instead new queries become queued. A resource group may have sub groups or may accept queries, but may not do both.
The resource groups and associated selection rules are configured by a manager which is pluggable.
An implementation that uses a static file can be installed via the presto-resource-group-managers
plugin and enabled by adding resource-groups.configuration-manager=file
to
etc/resource-groups.properties
and setting resource-groups.config-file
to the
location of a JSON config file with the properties described below.
Resource Group Properties
name
(required): name of the group. May be a template (see below).maxQueued
(required): maximum number of queued queries. Once this limit is reached new queries will be rejected.maxRunning
(required): maximum number of running queries.softMemoryLimit
(required): maximum amount of distributed memory this group may use before new queries become queued. May be specified as an absolute value (i.e.1GB
) or as a percentage (i.e.10%
) of the cluster’s memory.softCpuLimit
(optional): maximum amount of CPU time this group may use in a period (seecpuQuotaPeriod
) before a penalty will be applied to the maximum number of running queries.hardCpuLimit
must also be specified.hardCpuLimit
(optional): maximum amount of CPU time this group may use in a period.schedulingPolicy
(optional): specifies how queued queries are selected to run, and how sub groups become eligible to start their queries. May be one of three values:fair
(default): queued queries are processed first-in-first-out, and sub groups must take turns starting new queries (if they have any queued).weighted
: queued queries are selected stochastically in proportion to their priority (specified via thequery_priority
session property). Sub groups are selected to start new queries in proportion to theirschedulingWeight
.query_priority
: all sub groups must also be configured withquery_priority
. Queued queries will be selected strictly according to their priority.
schedulingWeight
(optional): weight of this sub group. See above. Defaults to1
.jmxExport
(optional): If true, group statistics are exported to JMX for monitoring. Defaults tofalse
.subGroups
(optional): list of sub groups.
Selector Properties
user
(optional): regex to match against user name. Defaults to.*
source
(optional): regex to match against source string. Defaults to.*
group
(required): the group these queries will run in.
Global Properties
cpuQuotaPeriod
(optional): the period in which cpu quotas are enforced.
Selectors are processed sequentially and the first one that matches will be used.
In the example configuration below, there are five resource group templates.
In the adhoc_${USER}
group, ${USER}
will be expanded to the name of the
user that submitted the query. ${SOURCE}
is also supported, which expands
to the source submitting the query. The source name can be set as follows:
- CLI: use the
--source
option.- JDBC: set the
ApplicationName
client info property on theConnection
instance.
There are three selectors that define which queries run in which resource group:
- The first selector places queries from
bob
into the admin group.- The second selector states that all queries that come from a source that includes “pipeline” should run in the user’s personal pipeline group, which belongs to the
global.pipeline
parent group.- The last selector is a catch all, which puts all queries into the user’s adhoc group.
All together these selectors implement the policy that bob
is an admin and
all other users are subject to the follow limits:
- Users are allowed to have up to 2 adhoc queries running. Additionally, they may run one pipeline.
- No more than 5 “pipeline” queries may run at once.
- No more than 100 total queries may run at once, unless they’re from the admin.
{
"rootGroups": [
{
"name": "global",
"softMemoryLimit": "80%",
"maxRunning": 100,
"maxQueued": 1000,
"schedulingPolicy": "weighted",
"jmxExport": true,
"subGroups": [
{
"name": "adhoc_${USER}",
"softMemoryLimit": "10%",
"maxRunning": 2,
"maxQueued": 1,
"schedulingWeight": 9,
"schedulingPolicy": "query_priority"
},
{
"name": "pipeline",
"softMemoryLimit": "20%",
"maxRunning": 5,
"maxQueued": 100,
"schedulingWeight": 1,
"jmxExport": true,
"subGroups": [
{
"name": "pipeline_${USER}",
"softMemoryLimit": "10%",
"maxRunning": 1,
"maxQueued": 100,
"schedulingPolicy": "query_priority"
}
]
}
]
},
{
"name": "admin",
"softMemoryLimit": "100%",
"maxRunning": 100,
"maxQueued": 100,
"schedulingPolicy": "query_priority",
"jmxExport": true
}
],
"selectors": [
{
"user": "bob",
"group": "admin"
},
{
"source": ".*pipeline.*",
"group": "global.pipeline.pipeline_${USER}"
},
{
"group": "global.adhoc_${USER}"
}
],
"cpuQuotaPeriod": "1h"
}


About
This is a Pet register for a Veterinary Physician
Contact
Follow on Twitter
Like on Facebook
Email me
Pet Registration
Add
List


Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Check Them Out!Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Is simply dummy text of the printing and typesetting industry.Is simply dummy text of the printing and typesetting industry. Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry.Is simply dummy text of the printing and typesetting industry. Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry.Is simply dummy text of the printing and typesetting industry. Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry.Is simply dummy text of the printing and typesetting industry. Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry.Is simply dummy text of the printing and typesetting industry. Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Is simply dummy text of the printing and typesetting industry. Lorem Ipsum has Is simply dummy text of the
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
April 1st 2012
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
January 23rd 2012
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
December 25th 2011
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
December 15th 2010
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
December 1st 2011
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
November 13th 2010
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.


CrimPapers
Articles published on 28 July 2017
On 28 July 2017, 9 new articles were published in 8 journals.
Do Work-Family Conflict and Resiliency Mediate Police Stress and Burnout: A Study of State Police Officers
A Birth Cohort Study of Asian and Pacific Islander Children Reported For Abuse Or Neglect By Maternal Nativity and Ethnic Origin
Correlations Between Psychopathology and Self-Reported Quality of Life Among Adolescents in Youth Correctional Facilities in Lagos, Nigeria: A Short Report by Olayinka Atilola, Bolanle Ola, Gbonjubola Abiri, Abiodun O. Adewuya
Is It All About Race? Intergroup Threat and Perceptions of Racial Profiling by Shaun A. Thomas, Kyle A. Burgason, Timothy Brown, Emily Berthelot
Child Abuse—suicide Resilience Link in African American Women: Interpersonal Psychological Mediators by Lucy J Allbaugh, Ivonne Andrea Florez, Danielle Render Turmaud, Nadia Quyyum, Sarah E Dunn, Jungjin Kim, Nadine J Kaslow
Previous Judicial Detection and Paedophilic Sexual Interest Partially Predict Psychological Distress in A Non-Forensic Sample of Help-Seeking Men Feeling Inclined to Sexually Offend Against Children by Anna Konrad, Silvia Haag, Gerold Scherner, Till Amelung, Klaus M. Beier
Police Leadership in Times of Transition
Gender-Aware and Place-Based Transitional Justice in Guatemala
The Limits of Procedural Discretion


SweetFreeStuff.com
///////////////////////////////////////////
Free Buca di Beppo $15 Gift Certificate
Posted: 16 Jan 2015 11:29 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Buca di Beppo $15 Gift Certificate
The post Free Buca di Beppo $15 Gift Certificate appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
3 FREE BioRenew Skincare Product Samples
Posted: 16 Jan 2015 10:53 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Choose up to 3 samples and fill out the form. 3 FREE BioRenew Skincare
Product Samples
The post 3 FREE BioRenew Skincare Product Samples appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Fist Handwear Sticker
Posted: 16 Jan 2015 10:00 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Fist Handwear Sticker
The post Free Fist Handwear Sticker appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Luxley & Bernard Stickers
Posted: 16 Jan 2015 10:00 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Luxley Bernard Stickers
The post Free Luxley Bernard Stickers appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Wellesse Supplement Sample Pack
Posted: 16 Jan 2015 09:50 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Wellesse Supplement Sample Pack
The post Free Wellesse Supplement Sample Pack appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Nutella & GO!
Posted: 16 Jan 2015 08:58 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Save 100% when you buy any ONE (1) 1.8 oz. Nutella GO! Expires 1/18 Free
Nutella GO!
The post Free Nutella GO! appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Sample of Vive Shake
Posted: 16 Jan 2015 06:47 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Sample of Vive Shake
The post Free Sample of Vive Shake appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Winter Samples
Posted: 16 Jan 2015 05:08 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
FREE Winter Healthy Product Samples
The post Free Winter Samples appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
$10 off $10 or More at JCPenney
Posted: 16 Jan 2015 05:01 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Sign up for their text alerts to receive the coupon. You can stop them
anytime. $10 off $10 or More at JCPenney
The post $10 off $10 or More at JCPenney appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
FREE Helly Hansen Sticker Pack
Posted: 16 Jan 2015 04:59 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Like them on Facebook and fill out the form. FREE Helly Hansen Sticker Pack
The post FREE Helly Hansen Sticker Pack appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
15 FREE Pampers Gifts to Grow Points
Posted: 16 Jan 2015 02:00 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
To login please click here and enter the code: TWITSCLBBECMM14 for 15 more
points. (If you need to register, click here to sign up and receive 100
points!) The Pampers Gifts to Grow Rewards Program rewards you for choosing
Pampers diapers, training pants and wipes for your growing baby. To start,
simply collect the codes from all []
The post 15 FREE Pampers Gifts to Grow Points appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Mller Yogurt at Kroger at Kroger & Affiliate Stores
Posted: 16 Jan 2015 12:40 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Load the coupon to your shoppers card today only (1/16) and use by 2/1.
Free Müller Yogurt at Kroger at Kroger Affiliate Stores
The post Free Müller Yogurt at Kroger at Kroger Affiliate Stores appeared
first on SweetFreeStuff.com.
///////////////////////////////////////////
Free I Love Soil Sticker
Posted: 16 Jan 2015 12:30 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free I Love Soil Sticker
The post Free I Love Soil Sticker appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Diabetic Recipe Book
Posted: 16 Jan 2015 12:05 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Diabetic Recipe Book
The post Free Diabetic Recipe Book appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Box of French Toast Crunch (Expired)
Posted: 15 Jan 2015 11:49 PM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Connect with Twitter, Facebook or Instagram to get a free Box of French
Toast Crunch. Free Box of French Toast Crunch
The post Free Box of French Toast Crunch (Expired) appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Boating Magazine Subscription
Posted: 15 Jan 2015 10:11 PM PST
http://feedproxy.google.com/&edburner&utm_medium=email
The post Free Boating Magazine Subscription appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free “We Have Choices” DVD
Posted: 15 Jan 2015 10:06 PM PST
http://feedproxy.google.com/&edburner&utm_medium=email
This DVD is a documentary about people with developmental disabilities
living their lives in homes and apartments of their choosing. Free We Have
Choices DVD
The post Free We Have Choices DVD appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Subscription to Sailing World Magazine
Posted: 15 Jan 2015 09:02 PM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Subscription to Sailing World Magazine
The post Free Subscription to Sailing World Magazine appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Crestliner Trumped Fishing Ruler
Posted: 15 Jan 2015 03:07 PM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Crestliner Trumped Fishing Ruler - Sign up and then confirm by email.
The post Free Crestliner Trumped Fishing Ruler appeared first on
SweetFreeStuff.com.


{% extends "base.html" %} {% block title %} Delete Doctrine {% endblock %} {% block breadcrumbs %}
You are about to delete this doctrine, this cannot be undone.


Expression object for sparse matrix-dense vector multiplications.The SMatDVecMultExpr class represents the compile time expression for multiplications between row-major sparse matrices and dense vectors.
More...
#include <SMatDVecMultExpr.h>
Inherits blaze::DenseVector< SMatDVecMultExpr< MT, VT >, false >, blaze::MatVecMultExpr, and blaze::Computation.
|
| enum | : bool { simdEnabled = false
} |
| | Compilation switch for the expression template evaluation strategy.
|
| |
| enum | : bool { smpAssignable
} |
| | Compilation switch for the expression template assignment strategy.
|
| |
|
typedef SMatDVecMultExpr< MT, VT > | This |
| | Type of this SMatDVecMultExpr instance.
|
| |
|
typedef MultTrait_< MRT, VRT > | ResultType |
| | Result type for expression template evaluations.
|
| |
|
typedef TransposeType_< ResultType > | TransposeType |
| | Transpose type for expression template evaluations.
|
| |
|
typedef ElementType_< ResultType > | ElementType |
| | Resulting element type.
|
| |
|
typedef const ElementType | ReturnType |
| | Return type for expression template evaluations.
|
| |
|
typedef IfTrue_< useAssign, const ResultType, const SMatDVecMultExpr &> | CompositeType |
| | Data type for composite expression templates.
|
| |
|
typedef If_< IsExpression< MT >, const MT, const MT &> | LeftOperand |
| | Composite type of the left-hand side sparse matrix expression.
|
| |
|
typedef If_< IsExpression< VT >, const VT, const VT &> | RightOperand |
| | Composite type of the right-hand side dense vector expression.
|
| |
|
typedef IfTrue_< evaluateMatrix, const MRT, MCT > | LT |
| | Type for the assignment of the left-hand side sparse matrix operand.
|
| |
|
typedef IfTrue_< evaluateVector, const VRT, VCT > | RT |
| | Type for the assignment of the right-hand side dense matrix operand.
|
| |
|
typedef VT | VectorType |
| | Type of the vector.
|
| |
|
| enum | : bool { evaluateMatrix = RequiresEvaluation<MT>::value
} |
| | Compilation switch for the composite type of the left-hand side sparse matrix expression.
|
| |
| enum | : bool { evaluateVector = IsComputation<VT>::value || RequiresEvaluation<VT>::value
} |
| | Compilation switch for the composite type of the right-hand side dense vector expression.
|
| |
| enum | : bool { useAssign = evaluateMatrix || evaluateVector
} |
| | Compilation switch for the evaluation strategy of the multiplication expression. More...
|
| |
|
typedef ResultType_< MT > | MRT |
| | Result type of the left-hand side sparse matrix expression.
|
| |
|
typedef ResultType_< VT > | VRT |
| | Result type of the right-hand side dense vector expression.
|
| |
|
typedef CompositeType_< MT > | MCT |
| | Composite type of the left-hand side sparse matrix expression.
|
| |
|
typedef CompositeType_< VT > | VCT |
| | Composite type of the right-hand side dense vector expression.
|
| |
|
|
LeftOperand | mat_ |
| | Left-hand side sparse matrix of the multiplication expression.
|
| |
|
RightOperand | vec_ |
| | Right-hand side dense vector of the multiplication expression.
|
| |
template<typename MT, typename VT>
class blaze::SMatDVecMultExpr< MT, VT >
Expression object for sparse matrix-dense vector multiplications.
The SMatDVecMultExpr class represents the compile time expression for multiplications between row-major sparse matrices and dense vectors.
§ anonymous enum
template<typename MT , typename VT >
Compilation switch for the evaluation strategy of the multiplication expression.
The useAssign compile time constant expression represents a compilation switch for the evaluation strategy of the multiplication expression. In case either the matrix or the vector operand requires an intermediate evaluation or the dense vector expression is a compound expression, useAssign will be set to true and the multiplication expression will be evaluated via the assign function family. Otherwise useAssign will be set to false and the expression will be evaluated via the subscript operator.
§ SMatDVecMultExpr()
template<typename MT , typename VT >
Constructor for the SMatDVecMultExpr class.
- Parameters
-
| mat | The left-hand side sparse matrix operand of the multiplication expression. |
| vec | The right-hand side dense vector operand of the multiplication expression. |
§ at()
template<typename MT , typename VT >
Checked access to the vector elements.
- Parameters
-
| index | Access index. The index has to be in the range . |
- Returns
- The resulting value.
- Exceptions
-
| std::out_of_range | Invalid vector access index. |
§ canAlias()
template<typename MT , typename VT >
template<typename T >
Returns whether the expression can alias with the given address alias.
- Parameters
-
| alias | The alias to be checked. |
- Returns
- true in case the expression can alias, false otherwise.
§ canSMPAssign()
template<typename MT , typename VT >
Returns whether the expression can be used in SMP assignments.
- Returns
- true in case the expression can be used in SMP assignments, false if not.
§ isAliased()
template<typename MT , typename VT >
template<typename T >
Returns whether the expression is aliased with the given address alias.
- Parameters
-
| alias | The alias to be checked. |
- Returns
- true in case an alias effect is detected, false otherwise.
§ isAligned()
template<typename MT , typename VT >
Returns whether the operands of the expression are properly aligned in memory.
- Returns
- true in case the operands are aligned, false if not.
§ leftOperand()
template<typename MT , typename VT >
Returns the left-hand side sparse matrix operand.
- Returns
- The left-hand side sparse matrix operand.
§ operator[]()
template<typename MT , typename VT >
Subscript operator for the direct access to the vector elements.
- Parameters
-
| index | Access index. The index has to be in the range . |
- Returns
- The resulting value.
§ operator~() [1/2]
template<typename VT, bool TF>
Conversion operator for non-constant vectors.
- Returns
- Reference of the actual type of the vector.
§ operator~() [2/2]
template<typename VT, bool TF>
Conversion operator for constant vectors.
- Returns
- Const reference of the actual type of the vector.
§ rightOperand()
template<typename MT , typename VT >
Returns the right-hand side dense vector operand.
- Returns
- The right-hand side dense vector operand.
§ size()
template<typename MT , typename VT >
Returns the current size/dimension of the vector.
- Returns
- The size of the vector.
The documentation for this class was generated from the following files:


Android
Phones & Tablets
If you want it, Android powers it.
FEATURED
Google Pixel 3a
A fullscreen 5.6” or 6” display. Up to 30 hours of battery life1. And a camera that does the work for you — with Night Sight, Portrait Mode, and built-in Depth Editor.
LATEST AND GREATEST
The world’s first 5G phones.
Download a 4K movie in the blink of an eye. Jump on a group video call that never lags. Turn your living room into an AR zombie apocalypse. 5G is taking phones to the next level — and they’re only built on Android.
-
Samsung
Galaxy 10 5g
-
LG
V50 ThinQ 5G
-
Xiaomi
Mi Mix 3 5G
-
Oppo
Reno 5G
ANDROID ONE
Secure, up-to-date and easy to use.
Android One phones are certified to run the simplest, latest version of Android. Regular security updates every month. At least two years of OS upgrades.2 And only loaded with the most essential apps.
POPULAR PICKS
Cameras that catch any shot.
Android powers some of the world’s top cameras. So when the action speeds up or the lights go down low, you always get that perfect shot.
-
Google
Pixel 3a
-
Motorola
Moto G7
-
OnePlus
6T
-
Sony
Xperia 1


05/28/2013 17:11:00 ¶ ● Trying to pin down Isaac's coding style nodejsreactions: This is my new favorite tumblr.


Components demystified
Table of Contents
Foreword
These documents are the beginning of a book (or a collection of documents) that will explain SPA-principles in depth. SPA’s (single-page-apps) offer us the opportunity to create responsive userfriendly webapplications that have a native look-and-feel. However, with great power comes great responsability! It’s not always easy to manage those SPA’s when they tend to get big, and most of the time… they will! When applying the principles of ‘spa concepts demystified’ you should be able to create large-scale applications like it’s ‘a walk in the park’.
This module will demystify components and explain why certain choices were made.
Base concept
The concept ‘Components’ is one of the most commonly used concepts these days in SPA applications. The concept itself exists for a while now, but since React (SPA-framework from Facebook) became popular, most SPA-frameworks are based on this concept.
In essence, a component is a tiny part of a bigger picture, a part of an application for instance. The term ‘component’ is something that is used quite commonly, but when we talk about components in SPA technologies, a component is something very specific.
It’s the combination of a piece of HTML and a piece of logic, that serve a special purpose together.
A component has a goal, a responsability, and it’s very important to think about what kind of responsability that component has. The separation-of-concerns-principle is one of the main principles behind this. Components are tiny chunks of responsability that will define the presentational layer of our single-page-application.
On a more technical level: It’s a custom DOM tag. That custom DOM tag can have some kind of behavior/functionality and a certain look. Modern SPA-technologies provide us with a way to create our custom DOM tags. Just like other native DOM-tags, components can have custom attributes. Those attributes can be used to pass parameters.
Note: Additionaly components can contain custom stylesheets
Example: The native anchor-tag
Let’s take a look at the native anchor-tag for instance:
my link
- Functionality
- When we click on it, the browser will open the passed url.
- Presentation
- The content of the anchor tag is highlighted, and will implement native hover functionalities
Example: A custom rating-tag
<rating value="5"></rating>
- Functionality
- This component will generate 5 stars. Based on the value provided it will select a number of stars. When we click on a star, it will update the value of the passed in parameter
- Presentation
- When we hover a star it can highlight the star, so the user will know he can click it.
Single page applications will mostly render additional HTML for custom components. The component above might output something like this:
<rating>

</rating>
The hierarchical component-tree
Most of the modern frameworks these days recommend the use of component-trees. Basically, this means that your entire application is a hierarchical tree of components. This means that your pages will become seperate components. This even results in the fact that the application itself will become a component. Yes! Every presentational chunk of your application becomes a component. There are no standalone templates nor are there standalone controllers.
A single hierarchical component-tree will give you the following advantages:
- It's easy to visualise a component-tree
- Declarative syntax
- Easier debugging in browsers and in code-editors
- It's easier to reason about the application
- Reduces a lot of complexity (when used the right way)
- You don't have to keep track of which controller belongs to which view
- Optimized change detection becomes possible (more on that later)
- Shadow DOM becomes possible
- A strict language to talk about in your team, divide the work properly
Smart vs dumb components
When structuring components, it’s a good idea to separate dumb components from smart components.  Smart components (also called containers) typically have an interface to the rest of the application. When working with a unidirectional dataflow like React or Angular2 this principle can become quite handy to structure your code.
Let’s define a set of groundrules shall we?
Dumb components
- They don't know anything about the application
- They will not redirect to other parts of the application
- They will only communicate with their direct parent
- They typically don't have any dependencies injected, but they could
- They can contain other components
- They don't fetch data
- They can contain logic, but only related to the component itself
- They get their state and data passed through attributes
- They do not modify the passed in parameters directly
- They should be reusable
A dumb version of the rating component mensioned before would look like this:
<rating value="5" on-set-value="setRating(newRating)"></rating>
The angular2 code for that could then be:
<rating [value]="5" (setValue)="setRating($event)"></rating>
Dumb components are very easy to reason about and can mostly be ignored in the thinkproces of your application. Therefore, the main groundrule should be: Try to use dumb components as much as possible! They make your application less complex and easier to reason about
Smart components
- They know about the state and data of the application, but should not care how it's managed
- Typically they have an interface that communicates with the rest of the application
- They pass state and data to their child-components
- They also don't modify state theirselves directly
Best practices
Draw them first, think about the responsabilities first
Since components represent the complete presentationlayer of your application it’s important to think about the structure of these components.  For that reason I suggest you take a piece of paper or use a whiteboard and start drawing the componenttree for every page. This gives you the ability to start thinking about which state belongs to which component.
Keep them small
When you keep your components small, you get the following advantages:
- Small components are easier to work with. The smaller your code, the easier you get an overview of what the component does
- Easier to maintain
- It makes it easier to work with the "single-responsability-principle" (small components with small responsabilities).
- Because of the "single-responsability-principle" it becomes easier to test
- Easier to debug
- You have more control over the change detection in some frameworks (only rerender what needs to be rerendered)
- Split up into different developer tasks. (developers can work sandboxed on their own set of components)
- Component names in an application create somekind of developer jargon
Don’t let components talk directly with the rest of the application
If you have read the rest of this chapter, you should know that this section does not apply to dumb components, since they don’t interfere with the rest of the application. They only interfere with there direct parent’s and direct children. Containers (smart components) do know about the application, but that doesn’t mean they should have access to everything.
It’s a good idea to provide some kind of abstraction layer for your containers. That way the presentation-layer (component-tree) is loosely-coupled from the rest of the application. If you think about it, the containers should not know how statemanagement is handled, nor should they know how data is being fetched/handled. And in software, the less a component knows, the easier it gets to manage that component.
An option would be to provide some kind of sandbox that only contains the properties of the state that your container needs. The sandbox would also contain the functions your container needs to modify state and or communicate with the backend. You want to keep this abstraction thin, and keep the logic of your container in the container itself. After all, it is its responsability right?
 This rule also applies for smart components, however a smart component has somekind of api to communicate with the rest of the application. That’s what makes it smart.
The big advantage here is that you don’t have to keep track of who notifies who. There is a strict structure here.
 A majority of dumb components has the following advantages:
- Less smart components results in less application abstractions (every container needs its own api to the application
- Dumb components are much easier to reason about
- Dumb components makes the application less complex, since dumb components do not modify state/data
- It's easier to give dumb components a clear responsability
- Dumb components are easier to test (less dependencies)
keep your templates inline
Keep the html of the component in the same file of the javascript. Wait, what?! What about separation of concerns? Actually it is the concern of the component to fulfill its purpose. The component fulfills that purpose by the combination of his html and javascript. When you put them in the same file there are some advantages:
- Less context switching when developing the component (don't switch between files)
- No absolute paths to templates that are hard to maintain
- Less ajax calls to fetch templates, there already there when bootstrapping the application
Note: This only applies when the component isn’t to big, but than again… keep them small remember.


Pico de Gallo Fruit Salad
Attractively arrange the begetable and fruit slices on a serving platter. Sprinkle with salt and chile powder to taste. Serve with lime wedges to squeeze over all.
Attractively arrange the begetable and fruit slices on a serving platter. Sprinkle with salt and chile powder to taste. Serve with lime wedges to squeeze over all.


Version <IP_ADDRESS>
Document Revised 2015-07-03
This document describes the global script utility functions available for user-created Lua mission scripts. They offer the same functionality that the original designers used when creating the single-player campaign, along with new functionality back-ported from Battlezone II: Combat Commander or added to fill notable gaps.
Contains current build version (e.g. "<IP_ADDRESS>")
Contains the most recently pressed game key (e.g. "Ctrl+Z")
The Lua scripting system calls these script-defined functions when various script events occur. LuaMission looks up the functions by name so they can have different functions assigned to them at runtime.
Called when loading state from a save game file, allowing the script to restore its state.
Data values returned from Save will be passed as parameters to Load in the same order they were returned. Load supports nil, boolean, handle, integer, number, string, vector, and matrix data types. It does not support function, thread, or arbitrary userdata types.
The console window will print the loaded values in human-readable format.
Called when saving state to a save game file, allowing the script to preserve its state.
Any values returned by this function will be passed as parameters to Load when loading the save game file. Save supports nil, boolean, handle, integer, number, string, vector, and matrix data types. It does not support function, thread, or arbitrary userdata types.
The console window will print the saved values in human-readable format.
Called when the mission starts for the first time.
Use this function to perform any one-time script initialization.
Called any time a game key is pressed.
Key is a string that consisting of zero or more modifiers (Ctrl, Shift, Alt) and a base key.
The base key for keys corresponding to a printable ASCII character is the upper-case version of that character.
The base key for other keys is the label on the keycap (e.g. PageUp, PageDown, Home, End, Backspace, and so forth).
Called once per frame after updating the network system and before simulating game objects.
This function performs most of the mission script's game logic.
Called after any game object is created.
Handle is the game object that was created.
This function will get a lot of traffic so it should not do too much work.
Called when a game object gets added to the mission
Handle is the game object that was added
This function is normally called for "important" game objects, and excludes things like Scrap pieces.
Called before a game object is deleted.
Handle is the game object to be deleted.
This function will get a lot of traffic so it should not do too much work.
Called when a player joins the session.
Players that join before the host launches trigger CreatePlayer just before the first Update.
Players that join joining after the host launches trigger CreatePlayer on entering the pre-game lobby.
This function gets called for the local player.
Called when a player starts sending state updates.
This indicates that a player has finished loaded and started simulating.
This function is not called for the local player.
Called when a player leaves the session.
Called when a script-defined message arrives.
This function should return true if it handled the message and false, nil, or none if it did not.
From is the network player id of the sender.
Type is an arbitrary one-character string indicating the script-defined message type.
Data values passed as parameters to Send will arrive as parameters to Receive in the same order they were sent. Receive supports nil, boolean, handle, integer, number, string, vector, and matrix data types. It does not support function, thread, or arbitrary userdata types.
Called for any in-game chat command that was not handled by the system, allowing script-defined commands.
This function should return true if it handled the command and false, nil, or none if it did not.
LuaMission breaks the command into
Command is the string immediately following the '/'. For example, the command for "/foo" is "foo".
Arguments arrive as a string parameter to Command. For example "/foo 1 2 3" would receive "1 2 3".
The Lua string library provides several functions that can split the string into separate items.
You can use string.match with captures if you have a specific argument list:
local foo, bar, baz = string.match(arguments, "(%g+) (%g+) (%g+)")
You can use string.gmatch, which returns an iterator, if you want to loop through arguments:
for arg in string.gmatch(arguments, "%g+") do ... end
Check the Lua patterns tutorial and patterns manual for more details.
These functions control audio messages, 2D sounds typically used for radio messages, voiceovers, and narration.
Audio messages use the Voice Volume setting from the Audio Options menu.
Repeat the last audio message.
Plays the given audio file, which must be an uncompressed RIFF WAVE (.WAV) file.
Returns an audio message handle.
Returns true if the audio message has stopped. Returns false otherwise.
Stops the given audio message.
Returns true if any audio message is playing. Returns false otherwise.
These functions control sound effects, either positional 3D sounds attached to objects or global 2D sounds.
Sound effects use the Effects Volume setting from the Audio Options menu.
Plays the given audio file, which must be an uncompressed RIFF WAVE (.WAV) file.
Specifying an object handle creates a positional 3D sound that follows the object as it moves and stops automatically when the object goes away. Otherwise, the sound plays as a global 2D sound.
Priority ranges from 0 to 100, with higher priorities taking precedence over lower priorities when there are not enough channels. The default priority is 50 if not specified.
Looping sounds will play forever until explicitly stopped with StopSoundEffect or the object to which it is attached goes away. Non-looping sounds will play once and stop. The default is non-looping if not specified.
Volume ranges from 0 to 100, with 0 being silent and 100 being maximum volume. The default volume is 100 if not specified.
Rate overrides the playback rate of the sound file, so a value of 22050 would cause a sound file recorded at 11025 Hz to play back twice as fast. The rate defaults to the file's native rate if not specified.
Stops the sound using the given filename and associated with the given object. Use a handle of none or nil to stop a global 2D sound.
These functions create, manipulate, and query game objects (vehicles, buildings, people, powerups, and scrap) and return or take as a parameter a game object handle.
Object handles are always safe to use, even if the game object itself is missing or destroyed.
Returns the handle of the game object with the given label. Returns nil if none exists.
Creates a game object with the given odf name and team number at the location of a game object.
Returns the handle of the created object if it created one. Returns nil if it failed.
Creates a game object with the given odf name and team number at a point on the named path. It uses the start of the path if no point is given.
Returns the handle of the created object if it created one. Returns nil if it failed.
Creates a game object with the given odf name and team number at the given position vector.
Returns the handle of the created object if it created one. Returns nil if it failed.
Creates a game object with the given odf name and team number with the given transform matrix.
Returns the handle of the created object if it created one. Returns nil if it failed.
Removes the game object with the given handle.
Returns true if the game object's odf name matches the given odf name. Returns false otherwise.
Returns the odf name of the game object. Returns nil if none exists.
Note: currently returns a string of length 8, so that string will have garbage characters on the end.
Fix: string.sub(GetOdf(h), 1, 6)
Returns the base config of the game object which determines what VDF/SDF model it uses. Returns nil if none exists.
Returns the label of the game object (e.g. "avtank0_wingman"). Returns nil if none exists.
Returns the four-character class signature of the game object (e.g. "WING"). Returns nil if none exists.
Returns the class label of the game object (e.g. "wingman"). Returns nil if none exists.
Returns the numeric class identifier of the game object. Returns nil if none exists.
Looking up the class id number in the AiCommand table will convert it to a string. Looking up the class id string in the AiCommand table will convert it back to a number.
Returns the one-letter nation code of the game object (e.g. "a" for American, "b" for Black Dog, "c" for Chinese, and "s" for Soviet).
The nation code is usually but not always the same as the first letter of the odf name. The ODF file can override the nation in the [GameObjectClass] section, and player.odf is a hard-coded exception that uses "a" instead of "p".
Returns true if the game object exists. Returns false otherwise.
Returns true if the game object exists and (if the object is a vehicle) controlled. Returns false otherwise.
Returns true if the game object exists and (if the object is a vehicle) controlled and piloted. Returns false otherwise.
Returns true if the game object exists and is a vehicle. Returns false otherwise.
Returns true if the game object exists and is a building. Returns false otherwise.
Returns true if the game object exists and is a person. Returns false otherwise.
Returns true if the game object exists and has less health than the threshold. Returns false otherwise.
Returns the game object's team number.
Sets the game object's team number.
Returns the game object's perceived team number (as opposed to its real team).
The perceived team will differ from the real team when a player enters an empty enemy vehicle without being seen until they attack something.
Set the game object's perceived team (as opposed to its real team).
Units on the game object's perceived team will treat it as friendly until it "blows its cover" by attacking, at which point it will revert to its real team.
Units on the game object's real team will treat it as friendly regardless of its perceived team.
Sets the local player's target.
Returns the local player's target. Returns nil if it has none.
Sets the game object's target.
Returns the game object's target. Returns nil if it has none.
Sets the game object's owner.
Returns the game object's owner. Returns nil if it has none.
Sets the vehicle's pilot class to the given odf name. This does nothing useful for non-vehicle game objects. An odf name of nil resets the vehicle to the default assignment based on nation.
Returns the odf name of the vehicle's pilot class. Returns nil if none exists.
Teleports the game object to a point on the named path. It uses the start of the path if no point is given.
Teleports the game object to the position vector.
Teleports the game object to the position of the transform matrix.
Returns the game object's position vector. Returns nil if none exists.
Returns the path point's position vector. Returns nil if none exists.
Returns the game object's front vector. Returns nil if none exists.
Teleports the game object to the given transform matrix.
Returns the game object's transform matrix. Returns nil if none exists.
Returns the game object's linear velocity vector. Returns nil if none exists.
Sets the game object's linear velocity vector.
Returns the game object's angular velocity vector. Returns nil if none exists.
Sets the game object's angular velocity vector.
Returns a ground position offset from the center by the radius in a direction controlled by the angle.
If no radius is given, it uses a default radius of zero.
If no angle is given, it uses a default angle of zero.
An angle of zero is +X (due east), pi * 0.5 is +Z (due north), pi is -X (due west), and pi * 1.5 is -Z (due south).
Returns a ground position in a ring around the center between minradius and maxradius with roughly the same terrain height as the terrain height at the center.
This is good for scattering spawn positions around a point while excluding positions that are too high or too low.
If no radius is given, it uses the default radius of zero.
These functions query a game object for information about ordnance hits.
Returns who scored the most recent hit on the game object. Returns nil if none exists.
Returns the last time an enemy shot the game object.
Returns the last time a friend shot the game object.
These functions control and query alliances between teams.
The team manager assigns each player a separate team number, starting with 1 and going as high as 15. Team 0 is the neutral "environment" team.
Unless specifically overridden, every team is friendly with itself, neutral with team 0, and hostile to everyone else.
Sets team alliances back to default.
Sets whether team alliances are locked. Locking alliances prevents players from allying or un-allying, preserving alliances set up by the mission script.
Makes the two teams allies of each other.
This function affects both teams so Ally(1, 2) and Ally(2, 1) produces the identical results, unlike the "half-allied" state created by the "ally" game key.
Makes the two teams enemies of each other.
This function affects both teams so UnAlly(1, 2) and UnAlly(2, 1) produces the identical results, unlike the "half-enemy" state created by the "unally" game key.
Returns true if team1 considers team2 an ally. Returns false otherwise.
Due to the possibility of player-initiated "half-alliances", IsTeamAllied(team1, team2) might not return the same result as IsTeamAllied(team2, team1).
Returns true if game object "me" considers game object "him" an ally. Returns false otherwise.
Due to the possibility of player-initiated "half-alliances", IsAlly(me, him) might not return the same result as IsAlly(him, me).
These functions control objective markers.
Objectives are visible to all teams from any distance and from any direction, with an arrow pointing to off-screen objectives. There is currently no way to make team-specific objectives.
Sets the game object as an objective to all teams.
Sets the game object back to normal.
Gets the game object's visible name.
Sets the game object's visible name.
Returns the distance in meters between the two game objects.
Returns the distance in meters between the game object and a point on the path. It uses the start of the path if no point is given.
Returns the distance in meters between the game object and a position vector.
Returns the distance in meters between the game object and the position of a transform matrix.
Returns true if the units are closer than the given distance of each other. Returns false otherwise.
(This function is equivalent to GetDistance (h1, h2) < d)
Returns the game object closest to the given game object. Returns nil if none exists.
Returns the game object closest to a point on the path. It uses the start of the path if no point is given. Returns nil if none exists.
Returns the game object closest to the position vector. Returns nil if none exists.
Returns the game object closest to the position of the transform matrix. Returns nil if none exists.
Returns the craft closest to the given game object. Returns nil if none exists.
Returns the craft closest to a point on the path. It uses the start of the path if no point is given. Returns nil if none exists.
Returns the vehicle closest to the position vector. Returns nil if none exists.
Returns the vehicle closest to the position of the transform matrix. Returns nil if none exists.
Returns the building closest to the given game object. Returns nil if none exists.
Returns the building closest to a point on the path. It uses the start of the path if no point is given. Returns nil if none exists.
Returns the building closest to the position vector. Returns nil if none exists.
Returns the building closest to the position of the transform matrix. Returns nil if none exists.
Returns the enemy closest to the given game object. Returns nil if none exists.
Returns the enemy closest to a point on the path. It uses the start of the path if no point is given. Returns nil if none exists.
Returns the enemy closest to the position vector. Returns nil if none exists.
Returns the enemy closest to the position of the transform matrix. Returns nil if none exists.
Returns how many objects with the given team and odf name are closer than the given distance.
These functions return iterator functions for use with Lua's "for <variable> in <expression> do ... end" form. For example: "for h in AllCraft() do print(h, GetLabel(h)) end" will print the game object handle and label of every craft in the world.
Enumerates game objects within the given distance of the game object.
Enumerates game objects within the given distance of the path point. It uses the start of the path if no point is given.
Enumerates game objects within the given distance of the position vector.
Enumerates game objects within the given distance of the transform matrix.
Enumerates all game objects.
Enumerates all craft.
Enumerates all game objects currently selected by the local player.
Enumerates all game objects marked as objectives.
These functions remove scrap, either to reduce the global game object count or to remove clutter around a location.
While the global scrap count is above the limit, remove the oldest scrap piece. It no limit is given, it uses the default limit of 300.
Clear all scrap within the given distance of a game object.
Clear all scrap within the given distance of a point on the path. It uses the start of the path if no point is given.
Clear all scrap within the given distance of a position vector.
Clear all scrap within the given distance of the position of a transform matrix.
These functions look up game objects in team slots.
This is a global table that converts between team slot numbers and team slot names. For example, TeamSlot.PLAYER or TeamSlot["PLAYER"] returns the team slot (0) for the player; TeamSlot[0] returns the team slot name ("PLAYER") for team slot 0. For maintainability, always use this table instead of raw team slot numbers.
Available slots: UNDEFINED, PLAYER, RECYCLER, FACTORY, ARMORY, CONSTRUCT, MIN_OFFENSE, MAX_OFFENSE, MIN_DEFENSE, MAX_DEFENSE, MIN_UTILITY, MAX_UTILITY, MIN_BEACON, MAX_BEACON, MIN_POWER, MAX_POWER, MIN_COMM, MAX_COMM, MIN_REPAIR, MAX_REPAIR, MIN_SUPPLY, MAX_SUPPLY, MIN_SILO, MAX_SILO, MIN_BARRACKS, MAX_BARRACKS, MIN_GUNTOWER, MAX_GUNTOWER.
Slots starting with MIN_ and MAX_ represent the lower and upper bound of a range of slots.
Get the game object in the specified team slot.
It uses the local player team if no team is given.
Returns the game object controlled by the local player. Returns nil if none exists.
Returns the game object controlled by the player on the given team. Returns nil if none exists.
Returns the Recycler on the given team. Returns nil if none exists.
It uses the local player team if no team is given.
Returns the Factory on the given team. Returns nil if none exists.
It uses the local player team if no team is given.
Returns the Armory on the given team. Returns nil if none exists.
It uses the local player team if no team is given.
Returns the Constructor on the given team. Returns nil if none exists.
It uses the local player team if no team is given.
These functions get and set pilot counts for a team.
Adds pilots to the team's pilot count, clamped between zero and maximum count.
Returns the new pilot count.
Sets the team's pilot count, clamped between zero and maximum count.
Returns the new pilot count.
Returns the team's pilot count.
Adds pilots to the team's maximum pilot count.
Returns the new pilot count.
Sets the team's maximum pilot count.
Returns the new pilot count.
Returns the team's maximum pilot count.
These functions get and set scrap values for a team.
Adds to the team's scrap count, clamped between zero and maximum count.
Returns the new scrap count.
Sets the team's scrap count, clamped between zero and maximum count.
Returns the new scrap count.
Returns the team's scrap count.
Adds to the team's maximum scrap count.
Returns the new maximum scrap count.
Sets the team's maximum scrap count.
Returns the new maximum scrap count.
Returns the team's maximum scrap count.
Returns true if the game object is a deployed craft. Returns false otherwise.
Tells the game object to deploy.
Returns true if the game object is selected. Returns false otherwise.
Sets what weapons the unit's AI process will use.
To calculate the mask value, add up the values of the weapon hardpoint slots you want to enable.
weaponHard1: 1 weaponHard2: 2 weaponHard3: 4 weaponHard4: 8 weaponHard5: 16
Gives the game object the named weapon in the given slot. If no slot is given, it chooses a slot based on hardpoint type and weapon priority like a weapon powerup would. If the weapon name is empty, nil, or blank and a slot is given, it removes the weapon in that slot.
Returns true if it succeeded. Returns false otherwise.
Returns the odf name of the weapon in the given slot on the game object. Returns nil if the game object does not exist or the slot is empty.
For example, an "avtank" game object would return "gatstab" for index 0 and "gminigun" for index 1.
Tells the game object to fire at the given target.
Applies damage to the game object.
These function return time values.
Returns the elapsed time in seconds since the start of the mission.
Returns the simulation time step in seconds.
Returns the current system time in milliseconds. This is mostly useful for performance profiling.
Enables (or disables) strategic AI control for a given team. As of version <IP_ADDRESS>, mission scripts must enable AI control for any team that intends to use an AIP.
IMPORTANT SAFETY TIP: only call this function from the "root" of the Lua mission script! The strategic AI gets set up shortly afterward and attempting to use SetAIControl later will crash the game.
Returns true if a given team is AI controlled. Returns false otherwise.
Unlike SetAIControl, this function may be called at any time.
Returns the current AIP for the team. It uses team 2 if no team number is given.
Switches the team's AI plan. It uses team 2 if no team number is given.
Fails the mission after the given time elapses. If supplied with a filename (usually a .des), it sets the failure message to text from that file.
Succeeds the mission after the given time elapses. If supplied with a filename (usually a .des), it sets the success message to text from that file.
Note: Seemingly a bit buggy at times. Workaround: Use an if statement to check for a time value, which then calls SucceedMission at the current time.
These functions control the objective panel visible at the right of the screen.
Clears all objective messages.
Adds an objective message from the given file (usually an .otf).
The message defaults to white if no color is given. The color may be "black", "dkgrey", "grey", "white", "blue", "dkblue", "green", "dkgreen", "yellow", "dkyellow", "red", or "dkred"; the value is case-insensitive.
The message lasts 8 seconds if no duration is given.
Updates the objective message with the given file name. If no objective exists with that file name, it does nothing.
The message defaults to white if no color is given. The color may be "black", "dkgrey", "grey", "white", "blue", "dkblue", "green", "dkgreen", "yellow", "dkyellow", "red", or "dkred"; the value is case-insensitive.
The message lasts 8 seconds if no duration is given.
Removes the objective message with the given file name. Messages after the removed message will be moved up to fill the vacancy. If no objective exists with that file name, it does nothing.
These functions control the large timer at the top of the screen.
Starts the cockpit timer counting down from the given time. If a warn time is given, the timer will turn yellow when it reaches that value. If an alert time is given, the timer will turn red when it reaches that value. All time values are in seconds.
The start time can be up to 35999, which will appear on-screen as 9:59:59. If the remaining time is an hour or less, the timer will show only minutes and seconds.
Starts the cockpit timer counting up from the given time. If a warn time is given, the timer will turn yellow when it reaches that value. If an alert time is given, the timer will turn red when it reaches that value. All time values are in seconds.
The on-screen timer will always show hours, minutes, and seconds The hours digit will malfunction after 10 hours.
Stops the cockpit timer.
Hides the cockpit timer.
Returns the current time in seconds on the cockpit timer.
These functions control the global earthquake effect.
Starts a global earthquake effect.
Changes the magnitude of an existing earthquake effect.
Important: note the inconsistent capitalization, which matches the internal C++ script utility functions.
Stops the global earthquake effect.
These functions set the looping type of a path.
Changes the named path to one-way. Once a unit reaches the end of the path, it will stop.
Changes the named path to round-trip. Once a unit reaches the end of the path, it will follow the path backwards to the start and begin again.
Changes the named path to looping. Once a unit reaches the end of the path, it will continue along to the start and begin again.
These functions send commands to units or query their command state.
This is a global table that converts between command numbers and command names. For example, AiCommand.GO or AiCommand["GO"] returns the command number (3) for the "go" command; AiCommand[3] returns the command name ("GO") for command number 3. For maintainability, always use this table instead of raw command numbers.
Available commands: NONE, SELECT, STOP, GO, ATTACK, FOLLOW, FORMATION, PICKUP, DROPOFF, NO_DROPOFF, GET_REPAIR, GET_RELOAD, GET_WEAPON, GET_CAMERA, GET_BOMB, DEFEND, GO_TO_GEYSER, RESCUE, RECYCLE, SCAVENGE, HUNT, BUILD, PATROL, STAGE, SEND, GET_IN, LAY_MINES.
Returns true if the game object can be commanded. Returns false otherwise.
Returns true if the game object is a producer that can build at the moment. Returns false otherwise.
Returns true if the game object is a producer and currently busy. Returns false otherwise.
Returns the current command for the game object. Looking up the command number in the AiCommand table will convert it to a string. Looking up the command string in the AiCommand table will convert it back to a number.
Returns the target of the current command for the game object. Returns nil if it has none.
Gets the independence of a unit.
Sets the independence of a unit. 1 (the default) lets the unit take initiative (e.g. attack nearby enemies), while 0 prevents that.
Commands the unit using the give parameters. Be careful with this since not all commands work with all units and some have strict requirements on their parameters.
"Command" is the command to issue, normally chosen from the global AiCommand table (e.g. AiCommand.GO). "Priority" is the command priority; a value of 0 leaves the unit commandable while the default value of 1 makes it uncommandable. "Who" is the optional target game object. "Where" is the destination. "When" is an optional absolute time value only used by command AiCommand.STAGE. Param is an optional odf name only used by command AiCommand.BUILD.
Commands the unit using the give parameters. Be careful with this since not all commands work with all units and some have strict requirements on their parameters.
"Command" is the command to issue, normally chosen from the global AiCommand table (e.g. AiCommand.GO). "Priority" is the command priority; a value of 0 leaves the unit commandable while the default value of 1 makes it uncommandable. "Who" is the optional target game object. "Where" is the destination. "When" is an optional absolute time value only used by command AiCommand.STAGE. Param is an optional odf name only used by command AiCommand.BUILD.
Commands the unit using the give parameters. Be careful with this since not all commands work with all units and some have strict requirements on their parameters.
"Command" is the command to issue, normally chosen from the global AiCommand table (e.g. AiCommand.GO). "Priority" is the command priority; a value of 0 leaves the unit commandable while the default value of 1 makes it uncommandable. "Who" is the optional target game object. "Path" is the optional name of a path to follow. "When" is an optional absolute time value only used by command AiCommand.STAGE. Param is an optional odf name only used by command AiCommand.BUILD.
Commands the unit to attack the given target.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to go to the named path.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to go to the given target
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to go to the given position vector
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to go to the position of the given transform matrix
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to lay mines at the named path; only minelayer units support this.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to lay mines at the given position vector
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to lay mines at the position of the transform matrix
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to follow the given target.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to defend its current location.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to defend the given target.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to stop at its current location.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to patrol along the named path. This is equivalent to Goto with an independence of 1.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to retreat to the named path. This is equivalent to Goto with an independence of 0.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to retreat to the given target. This is equivalent to Goto with an independence of 0.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the pilot to get into the target vehicle.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to pick up the target object. Deployed units pack up (ignoring the target), scavengers pick up scrap, and tugs pick up and carry objects.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to drop off at the named path. Tugs drop off their cargo and Construction Rigs build the selected item at the location using their current facing.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to drop off at the position vector. Tugs drop off their cargo and Construction Rigs build the selected item at the location using their current facing.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands the unit to drop off at the position of the transform matrix. Tugs drop off their cargo and Construction Rigs build the selected item with the facing of the transform matrix.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands a producer to build the given odf name. The Armory and Construction Rig need an additional Dropoff to give them a location to build but first need at least one simulation update to process the Build.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands a producer to build the given odf name at the location of the target game object. A Construction Rig will build at the location and an Armory will launch the item to the location. Other producers will ignore the location.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands a producer to build the given odf name at the named path. A Construction Rig will build at the location and an Armory will launch the item to the location. Other producers will ignore the location.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands a producer to build the given odf name at the position vector. A Construction Rig will build at the location with their current facing and an Armory will launch the item to the location. Other producers will ignore the location.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Commands a producer to build the given odf name at the transform matrix. A Construction Rig will build at the location with the facing of the transform and an Armory will launch the item to the location. Other producers will ignore the location.
Priority 0 leaves the unit commandable while the default priority 1 makes it uncommandable.
Returns true if the unit is a tug carrying cargo.
Returns the tug carrying the object. Returns nil if not carried.
These functions control the pilot of a vehicle.
Commands the vehicle's pilot to eject.
Commands the vehicle's pilot to hop out.
Kills the vehicle's pilot as if sniped.
Removes the vehicle's pilot cleanly.
Returns the vehicle that the pilot most recently hopped out of.
These functions get and set health values on a game object.
Returns the fractional health of the game object between 0 and 1.
Returns the current health value of the game object.
Returns the maximum health value of the game object.
Sets the current health of the game object.
Sets the maximum health of the game object.
Adds to the current health of the game object.
These functions get and set ammo values on a game object.
Returns the fractional ammo of the game object between 0 and 1.
Returns the current ammo value of the game object.
Returns the maximum ammo value of the game object.
Sets the current ammo of the game object.
Sets the maximum ammo of the game object.
Adds to the current ammo of the game object.
These functions control the cinematic camera for in-engine cut scenes (or "cineractives" as the Interstate '76 team at Activision called them).
Starts the cinematic camera and disables normal input.
Always returns true.
Moves a cinematic camera along a path at a given height and speed while looking at a target game object.
Returns true when the camera arrives at its destination. Returns false otherwise.
Moves a cinematic camera long a path at a given height and speed while looking along the path direction.
Returns true when the camera arrives at its destination. Returns false otherwise.
Returns true when the camera arrives at its destination. Returns false otherwise.
Offsets a cinematic camera from a base game object while looking at a target game object. The right, up, and forward offets are in centimeters.
Returns true if the base or handle game object does not exist. Returns false otherwise.
Finishes the cinematic camera and enables normal input.
Always returns true.
Returns true if the player canceled the cinematic. Returns false otherwise.
Returns true if the game object inspected by the info display matches the given odf name.
LuaMission currently has limited network support, but can detect if the mission is being run in multiplayer and if the local machine is hosting.
Returns true if the game is a network game. Returns false otherwise.
Returns true if the local machine is hosting a network game. Returns false otherwise.
Sets the game object as local to the machine the script is running on, transferring ownership from its original owner if it was remote. Important safety tip: only call this on one machine at a time!
Returns true if the game is local to the machine the script is running on. Returns false otherwise.
Returns true if the game object is remote to the machine the script is running on. Returns false otherwise.
Send a script-defined message across the network.
To is the player network id of the recipient. None, nil, or 0 broadcasts to all players.
Type is a one-character string indicating the script-defined message type.
Other parameters will be sent as data and passed to the recipient's Receive function as parameters. Send supports nil, boolean, handle, integer, number, string, vector, and matrix data types. It does not support function, thread, or arbitrary userdata types.
These functions read values from an external ODF, INI, or TRN file.
Opens the named file as an ODF. If the file name has no extension, the function will append ".odf" automatically.
If the file is not already open, the function reads in and parses the file into an internal database. If you need to read values from it relatively frequently, save the handle into a global variable to prevent it from closing.
Returns the file handle if it succeeded. Returns nil if it failed.
Reads a boolean value from the named label in the named section of the ODF file. Use a nil section to read labels that aren't in a section.
It considers values starting with 'Y', 'y', 'T', 't', or '1' to be true and value starting with 'N', 'n', 'F', 'f', or '0' to be false. Other values are considered undefined.
If a value is not found or is undefined, it uses the default value. If no default value is given, the default value is false.
Returns the value and whether the value was found.
Reads an integer value from the named label in thenamed section of the ODF file. Use nil as the section to read labels that aren't in a section.
If no value is found, it uses the default value. If no default value is given, the default value is 0.
Returns the value and whether the value was found.
Reads a floating-point value from the named label in the named section of the ODF file. Use nil as the section to read labels that aren't in a section.
If no value is found, it uses the default value. If no default value is given, the default value is 0.0.
Returns the value and whether the value was found.
Reads a string value from the named label in the named section of the ODF file. Use nil as the section to read labels that aren't in a section.
If a value is not found, it uses the default value. If no default value is given, the default value is nil.
Returns the value and whether the value was found.
Returns the name of the TRN file for the map. This can be used with OpenODF() to read values from the TRN file.
These functions return height and normal from the terrain height field.
Returns the terrain height and normal vector at the location of the game object.
Does not seem to be working at the moment. Use GetFloorHeightAndNormal(GetPosition(h)) as a workaround.
Returns the terrain height and normal vector at a point on the named path. It uses the start of the path if no point is given.
Returns the terrain height and normal vector at the position vector.
Returns the terrain height and normal vector at the position of the transform matrix.
These functions return height and normal from the terrain height field and the upward-facing polygons of any entities marked as floor owners.
Returns the floor height and normal vector at the location of the game object.
Does not seem to be working at the moment. Use GetFloorHeightAndNormal(GetPosition(h)) as a workaround.
Returns the floor height and normal vector at a point on the named path. It uses the start of the path if no point is given.
Returns the floor height and normal vector at the position vector.
Returns the floor height and normal vector at the position of the transform matrix.
This is a custom userdata representing a position or direction. It has three number components: x, y, and z.
Returns a vector whose components have the given number values. If no value is given for a component, the default value is 0.0.
Returns the dot product between vectors a and b.
Equivalent to a.x * b.x + a.y * b.y + a.z * b.z.
Returns the cross product between vectors a and b.
Equivalent to SetVector(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x).
Returns the vector scaled to unit length.
Equivalent to SetVector(v.x * scale, v.y * scale, v.z * scale) where scale is 1.0f / sqrt(v.x2 + v.y2 + v.z2).
Returns the length of the vector.
Equivalent to sqrt(v.x2 + v.y2 + v.z2).
Returns the squared length of the vector.
Equivalent to v.x2 + v.y2 + v.z2.
Returns the 2D distance between vectors a and b.
Equivalent to sqrt((b.x - a.x)2 + (b.z - a.z)2).
Returns the squared 2D distance of the vector.
Equivalent to (b.x - a.x)2 + (b.z - a.z)2.
Returns the 3D distance between vectors a and b.
Equivalent to sqrt((b.x - a.x)2 + (b.y - a.y)2 + (b.z - a.z)2).
Returns the squared 3D distance of the vector.
Equivalent to (b.x - a.x)2 + (b.y - a.y)2 + (b.z - a.z)2.
Negate the vector.
Equivalent to SetVector(-vector.x, -vector.y, -vector.z).
Add two vectors.
Equivalent to SetVector(vector1.x + vector2.x, vector1.y + vector2.y, vector1.z + vector2.z).
Subtract two vectors.
Equivlent to SetVector(vector1.x - vector2.x, vector1.y - vector2.y, vector1.z - vector2.z).
Multiply a number by a vector.
Equivalent to SetVector( number * vector.x, number * vector.y, number * vector.z).
Multiply a vector by a number.
Equivalent to SetVector(vector.x * number, vector.y * number, vector.z * number).
Multiply two vectors.
Equivlent to SetVector(vector1.x * vector2.x, vector1.y * vector2.y, vector1.z * vector2.z)
Divide a number by a vector.
Equivalent to SetVector( number / vector.x, number / vector.y, number / vector.z).
Divide a vector by a number.
Equivalent to SetVector(vector.x / number, vector.y / number, vector.z / number).
Divide two vectors.
Equivlent to SetVector(vector1.x / vector2.x, vector1.y / vector2.y, vector1.z / vector2.z)
Check if two vectors are equal.
Check if two vectors are not equal.
This is a custom userdata representing an orientation and position in space. It has four vector components (right, up, front, and posit) sharing space with twelve number components (right_x, right_y, right_z, up_x, up_y, up_z, front_x, front_y, front_z, posit_x, posit_y, posit_z).
Returns a matrix whose componets have the given number values. If no value is given for a component, the default value is zero. Be careful with this since it's easy to build a non-orthonormal matrix that will break all kinds of built-in assumptions.
To get:
[A,B,C]
[D,E,F]
[G,H,I]
Type SetMatrix(D,E,F,A,B,C,G,H,I)
Global value representing the identity matrix.
Equivalent to SetMatrix(0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0).
Build a matrix representing a rotation by an angle around an axis. The angle is in radians. If no value is given for the angle or an axis component, the default value is zero. The axis must be unit-length (i.e. axis_x2 + axis_y2 + axis_z2 = 1.0 or the resulting matrix will be wrong.
Build a matrix representing a rotation by an angle around an axis. The angle is in radians. If no value is given for the angle, the default value is zero. The axis must be unit-length (i.e. axis.x2 + axis.y2 + axis.z2 = 1.0 or the resulting matrix will be wrong.
Build a matrix with the given pitch, yaw, and roll angles and position. The angles are in radians. If no value is given for a component, the default value is zero.
Build a matrix with the given pitch, yaw, and roll angles and position. The angles are in radians. If no value is given for a component, the default value is zero.
Build a matrix with zero position, its up axis along the specified up vector, oriented so that its front axis points as close as possible to the heading vector. If up is not specified, the default value is the Y axis. If heading is not specified, the default value is the Z axis.
Build a matrix with the given position vector, its front axis pointing along the direction vector, and zero roll. If position is not specified, the default value is a zero vector. If direction is not specified, the default value is the Z axis.
Multiply two matrices.
Transform a vector by a matrix.


-
1. Click to draw walls. Right click to switch between vertical and horizontal walls
-
2. If a wall is built with no fuzzballs on a side, that area will fill in and is "captured". Captured area adds to your score
-
3. If a fuzzball hits a wall as it is being built the wall disappears and you will lose a life
-
4. Once both sides of a growing wall hit either another wall or the game edge, the wall solidifies and the balls can no longer pass through
-
5. Claim the target percentage of area to advance levels


The home of the Wilsons
Click the News link to get to a blog containing all the latest and greatest news about this website and the Wilson family in general.
We're also currently running a Wiki, but this is largely experimental, and may not hang around forever. If you're planning on using it, please drop me a line first.
The Sheep's Ahoy link will take you to Deb's wool business. If you're looking for her blog, it now hangs off that site. However, if you're looking for some of her older content, you should be able to find an archive here.
Also, the [HBDI: ... ] links are online versions of my albums. Feel free to download and listen to them. If you'd like to leave a comment on any of them, just find the matching announcement for the album in the blog and leave a comment there.


{% extends "base_generic.html" %} {% block content %}
To begin, fill out the form below. If you do not see your school, add a school with the link below.
Next, check if your course catalog already exists in the form. If your catalog is not there, you can upload a PDF and we will process it.
When the page is done loading, go here for your results. Don't click on this page before submitting a request!
Results {% endblock %}


| DOSE: |
8.0 mg |
oral |
DOI |
(powder / crystals) |
The Basics:
Subject: Twenty-five year old white male. Recently quit smoking (again). Overweight, but in very good health according to the latest physical.
Substance: 8mg of DOI in a 1:1(ml) solution of vodka. It's actually left over from the last batch I mixed up, so it's been sitting in solution in my freezer for a while (a month? Two?).
The Short Version: Peaked anywhere from 90 minutes to 3 hours from ingestion (see below). Down to +1 within 14 hours. A lot like acid, but a lot not.
The Long Version:
I've always been a fan of long trips. My first trip was on LSD, and so maybe the earth-shattering nature of that trip set the tone for what I'd expect all future trips to be in terms of length and intensity. Tryptamines are great, and I eat them when I'm in the mood for a short shift of mood or mindset, but aside from mushrooms they're just not my choice for visionary exploration. 2C-E was great, but PEAs really made my day when I got a chance to try DOI. It's been unpredictable for me, and I'm a bit of a hardhead anyway, so for my latest experiment I decided to try 8mg. The result totally blew me away.
It's Saturday afternoon, and I know this one could last a while. I've never experienced the epic lengths other people seem to with DOI-- my several 2-5mg experiments have been up and down in about 10 hours-- but I know that 8mg is a jump, and I want to budget plenty of time just in case.
I ran out of cigarettes a couple of weeks ago, and just for shits and giggles I decided to see what would happen if I simply didn't buy more. I quit every now and then for periods of time with varying degrees of seriousness. It's going so so. Quitting alcohol has gone a lot better for me. I had a couple of beers at a club the other night for atmosphere, but I got nothing out of the experience besides an appreciation for how much clubs jack up the price of a bottle of Budweiser. I haven't touched hard liquor or been drunk in months. For this reason, the hardest part of the whole trip for me is the taste of even 8ml of vodka.  I used to drink vodka neat all the time, and I don't remember it being this nasty... Chased with coke. Down the hatch.
It's about 5pm. I settle into bed to read for a bit and wait for the effects to come up. I'm reading The Celestine Prophecy, and I'm right near the end. The ideas in the book are interesting, by the writing is by far some of the shittiest I've ever seen. The fact that this book was such a bestseller astounds me, and gives me hope for my own writing. Don't use allegory to tell a story if the best you can do is a really shitty allegory! Keep some artistic integrity and go non-fiction! So yeah, the ideas are neat, but the writing is almost physically painful to me. At some point, approximately 30 minutes after dosing, I fall asleep.
I 'wake up' at 8pm, in the sense that I regain control of my consciousness and am objectively aware that I exist in a bed somewhere in Kentucky. How was I asleep? How long did I dream? Am I still dreaming? The visions are -intense-. It takes all of my energy not to stare dumbfounded at the shifting patterns of light and crawling geometric figures on my walls. For a while I do just that. I am aware of a great energy and joy bubbling up within me.
This has always been the thing I loved most about DOI. Sometimes it's mind-crushingly psychedelic and visual, and sometimes it hits me like LSD in more of an analytical, 'thought-loopy' kind of way without being overtly hallucinogenic. Yet always at the heart of it all is that irrepressible energy. It puts me in touch with a sense of what I can only call childlike exuberance. For a little while everything seems new, and the world is exploding with possibilities. Maybe it's always like this, and the cruel cynicism and dejectedness of the daily grind won't let me see it. The joy and happiness bubbling out of me makes me want to cry, and I think for a while I do that too.
The CEVs are the most amazing and intense CEVs I've ever experienced in my life. I've always kind of ignored the closed-eye stuff until now, but this totally taught me respect. At times it was like my whole head was filled with color, in stark bands of, for example, red, with clearly defined sweeping edges between shades. I experienced reds, blues, greens, purples, oranges; and with each color I could actually feel bodily sensation. With red I felt warmer, with blue I felt cooler, with green my skin would tingle, with purples it felt like someone was running their fingers over my body. At other times it's like there is a film running on the backs of my eyelids which I am watching in high definition. The depth and fluidity of it just amazed me.
Coming out of sleep in a heavy +3 like is like seeing the entire world again for the first time. As I wake up my brain is interpreting every single thing I see as new information. I roll around for a while, lost somewhere between dreaming and awake. I know there were thoughts carrying over from frenzied psychedelic dreams I was having, but I cannot now remember them. At some point I finish the last few pages of The Celestine Prophecy, and by 9:30 I'm ready to put on some music and move around. I'm a huge fan of The Crystal Method, and so I put on Legion of Boom and dance around my house. As always, this amuses my dog.
The last track of the disc is one of my favorite TCM choons of all time, and it perfectly encapsulates the feeling of the trip. I'm going through what I feel is a time of cleansing in my life.
Energy has always eluded me. I am aware of my energy, the energy of places, the energy of music, the energy of so many things; yet I'm unable to harness this energy and do anything with it, or feel anything from it. I always feel somehow distant from situations and places, and from other people. Music and reading are the only two activities that can generally get me into a meditative zone where I can feel /something/, but it's still like I'm missing something.
This track comes on, and for 7 minutes and 25 seconds, I get it. During that time I was totally in touch with the energy I felt inside of me, and with the thing that makes me Me, and that sustains me. As the song says, 'I have been informed... that it's Totally. Wide. Open.' I had a moment in there where I just completely hippied out and became one with the universe, and it felt so amazing that I can't express it. If I knew how to recapture that feeling, waking and sober, I'd persist in nirvana until the second of my death.
The rest of the trip was great, but for me the absolute peak of it was the seven and a half minutes in which I was Totally Wide Open. Things wound down from there, and by 5am I'm at +1. By 7am I can go to sleep without feeling like I'm missing anything wortwhile. I woke up at 4pm feeling like a million bucks, although still at a loss at to just how to harness all the energy around me.
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.


COOKIE'S FORTUNE A film review by David N. Butterworth Copyright 1999 David N. Butterworth
**1/2 (out of ****)
Like so many of the great Robert Altman films--"Nashville," "The Player," "Short Cuts"--and even some of his not-so-memorable ones ("Prêt-à-Porter"), "Cookie's Fortune" is a character-driven drama that engages the viewer through the slowly unfolding interactions of its multiple leading players.
 But even a minor Altman movie challenges an audience in a way few Hollywood products can.
The setting of Cookie's Fortune is the sleepy Southern hamlet of Holly Springs. Here, the local police force spend more time fishing--or talking about fishing--than they do citing parking violations, the most serious crime in town. But that's about to change.
The Grande Dame of Holly Springs is an aging matriarch called Jewell Mae Orcutt, known to everyone as Cookie. Recently widowed, Cookie is so starved of her husband's company and affection that she decides to join him in the afterlife via a pistol shot to the head. Upon discovering the body, Cookie's nieces Camille and Cora decide to disguise the suicide as a murder, not simply to eliminate any chance of a scandal blackening the family name, but to make a bid for the sizable ancestral estate.
As Cookie, veteran actress Patricia Neal ("Hud") heads Altman's cast of keen ensemble players. Whereas Neal is convincing in the role, her character outplays her welcome early on. Cookie moves slower than molasses, all the time ruminating over her recent loss. When the gunshot comes, it's a relief to all.
Charles Dutton, as Cookie's hired hand and confidante, fairs much better. As Willis, Dutton evokes a sympathetic character of immensely human proportions. He's the kind of person who "borrows" a half pint of bourbon from the local bar only to return a fresh bottle, surreptitiously, the next day. When he's accused of the murder (because his are the only fingerprints besides Cookie's found in the house), even the cops don't believe it. Fortunately for them, Willis proves a game Scrabble opponent.
Glenn Close (in the role of Camille) continues her recent trend of wide-eyed, melodramatic characters. When Camille is not crossing police lines with gay abandon, she's directing the local congregation in an adaptation of Salomé. Julianne Moore, wearing little if any makeup, is oddly effective as the impotent Cora. Rounding out the cast is Altman favorite (although I still haven't figured out why) Lyle Lovett, who plays the same creepy oddball he played in "Prêt-à-Porter" and "Short Cuts." Liv Tyler is the tomboyish Emma, and Chris O'Donnell plays the young cop who has the hots for her.
Altman doesn't quite know when to call it quits, and that twanging guitar constantly reminding us of where we are soon grows tiresome. But along the way we're treated to some assured performances, stunning cinematography, and exchanges of wonderfully wistful dialogue courtesy former script supervisor Anne Rapp.
"Cookie's Fortune" might not be among Altman's best works, but it's another rich and intriguing film from this most creative of filmmakers.
-- David N. Butterworth<EMAIL_ADDRESS>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


A "
{{federalProducerText}}" is a {{licensedProducerText}} of cannabis
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares
held).
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares
held).
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares
held).
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares
held).
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares held).
Provide the relationship of the family member, the name of the {{federalProducerText}}, the type of shares,
percentage of
ownership, and any other details about the holding of voting shares
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares
held).
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares
held).s
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares
held).
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares
held)
Provide the name of the {{federalProducerText}} and details of the connection (e.g. percentage and type of
shares
held)
Indentify the licence(s), the individual(s) involved in the association, the nature of the association, and
(where applicable) the percentage of ownership.


An utility that allows to hash and salt a solr password to be used in the security.json file for Basic Authentication.
The salt is a random generated String of 16 alphanumeric characters. See Solr Basic Authentication Plugin for reference.
an example security.json
file with the encrypted password
{ "authentication":{ "blockUnknown": true, "class":"solr.BasicAuthPlugin", "credentials":{"solr":""}, "realm":"My Solr users", "forwardCredentials": false } }Github source repository


--- layout: post date: 2006-08-16 time: "09:00:00" authors: ["Greg Wilson"] title: "SciPy and Software Carpentry" tags: ["Community"] ---
I'm flying down to CalTech this evening to give a talk on Software Carpentry at SciPy'06. There's been a fair bit of traffic on the web site in the last couple of weeks, and I'm looking forward to hearing how else we can help scientists and engineers become more productive programmers.
Total visits: 4354 in 15 days, from 731 distinct domains (excluding obvious robots).