public class Geodesic
extends java.lang.Object
The shortest path between two points on a ellipsoid at (lat1, lon1) and (lat2, lon2) is called the geodesic. Its length is s12 and the geodesic from point 1 to point 2 has azimuths azi1 and azi2 at the two end points. (The azimuth is the heading measured clockwise from north. azi2 is the "forward" azimuth, i.e., the heading that takes you beyond point 2 not back to point 1.)
Given lat1, lon1, azi1, and s12, we can
determine lat2, lon2, and azi2. This is the
direct geodesic problem and its solution is given by the function
Direct
. (If s12 is sufficiently large that the
geodesic wraps more than halfway around the earth, there will be another
geodesic between the points with a smaller s12.)
Given lat1, lon1, lat2, and lon2, we can
determine azi1, azi2, and s12. This is the
inverse geodesic problem, whose solution is given by Inverse
. Usually, the solution to the inverse problem is unique. In cases
where there are multiple solutions (all with the same s12, of
course), all the solutions can be easily generated once a particular
solution is provided.
The standard way of specifying the direct problem is the specify the
distance s12 to the second point. However it is sometimes useful
instead to specify the arc length a12 (in degrees) on the auxiliary
sphere. This is a mathematical construct used in solving the geodesic
problems. The solution of the direct problem in this form is provided by
ArcDirect
. An arc length in excess of 180° indicates
that the geodesic is not a shortest path. In addition, the arc length
between an equatorial crossing and the next extremum of latitude for a
geodesic is 90°.
This class can also calculate several other quantities related to geodesics. These are:
The quantities m12, M12, M21 which all specify the behavior of nearby geodesics obey addition rules. If points 1, 2, and 3 all lie on a single geodesic, then the following rules hold:
The results of the geodesic calculations are bundled up into a GeodesicData
object which includes the input parameters and all the
computed results, i.e., lat1, lon1, azi1, lat2,
lon2, azi2, s12, a12, m12, M12,
M21, S12.
The functions Direct
,
ArcDirect
, and
Inverse
include an
optional final argument outmask which allows you specify which
results should be computed and returned. If you omit outmask, then
the "standard" geodesic results are computed (latitudes, longitudes,
azimuths, and distance). outmask is bitor'ed combination of GeodesicMask
values. For example, if you wish just to compute the distance
between two points you would call, e.g.,
GeodesicData g = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2,
GeodesicMask.DISTANCE);
Additional functionality is provided by the GeodesicLine
class,
which allows a sequence of points along a geodesic to be computed.
The shortest distance returned by the solution of the inverse problem is (obviously) uniquely defined. However, in a few special cases there are multiple azimuths which yield the same shortest distance. Here is a catalog of those cases:
The calculations are accurate to better than 15 nm (15 nanometers) for the WGS84 ellipsoid. See Sec. 9 of arXiv:1102.1215v1 for details. The algorithms used by this class are based on series expansions using the flattening f as a small parameter. These are only accurate for |f| < 0.02; however reasonably accurate results will be obtained for |f| < 0.2. Here is a table of the approximate maximum error (expressed as a distance) for an ellipsoid with the same major radius as the WGS84 ellipsoid and different values of the flattening.
|f| error 0.01 25 nm 0.02 30 nm 0.05 10 um 0.1 1.5 mm 0.2 300 mm
The algorithms are described in
Example of use:
// Solve the direct geodesic problem.
// This program reads in lines with lat1, lon1, azi1, s12 and prints
// out lines with lat2, lon2, azi2 (for the WGS84 ellipsoid).
import java.util.*;
import net.sf.geographiclib.*;
public class Direct {
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
double lat1, lon1, azi1, s12;
while (true) {
lat1 = in.nextDouble(); lon1 = in.nextDouble();
azi1 = in.nextDouble(); s12 = in.nextDouble();
GeodesicData g = Geodesic.WGS84.Direct(lat1, lon1, azi1, s12);
System.out.println(g.lat2 + " " + g.lon2 + " " + g.azi2);
}
}
catch (Exception e) {}
}
}
| Modifier and Type | Field and Description |
|---|---|
protected double |
_a |
protected double |
_b |
protected double |
_c2 |
protected double |
_e2 |
protected double |
_ep2 |
protected double |
_f |
protected double |
_f1 |
protected static int |
GEOGRAPHICLIB_GEODESIC_ORDER
The order of the expansions used by Geodesic.
|
protected static int |
nA1_ |
protected static int |
nA2_ |
protected static int |
nA3_ |
protected static int |
nA3x_ |
protected static int |
nC1_ |
protected static int |
nC1p_ |
protected static int |
nC2_ |
protected static int |
nC3_ |
protected static int |
nC3x_ |
protected static int |
nC4_ |
protected static int |
nC4x_ |
protected static double |
tiny_ |
static Geodesic |
WGS84
A global instantiation of Geodesic with the parameters for the WGS84
ellipsoid.
|
| Constructor and Description |
|---|
Geodesic(double a,
double f)
Constructor for a ellipsoid with
|
| Modifier and Type | Method and Description |
|---|---|
protected static double |
A1m1f(double eps) |
protected static double |
A2m1f(double eps) |
protected void |
A3coeff() |
protected double |
A3f(double eps) |
GeodesicData |
ArcDirect(double lat1,
double lon1,
double azi1,
double a12)
Solve the direct geodesic problem where the length of the geodesic
is specified in terms of arc length.
|
GeodesicData |
ArcDirect(double lat1,
double lon1,
double azi1,
double a12,
int outmask)
Solve the direct geodesic problem where the length of the geodesic is
specified in terms of arc length and with a subset of the geodesic results
returned.
|
protected static void |
C1f(double eps,
double[] c) |
protected static void |
C1pf(double eps,
double[] c) |
protected static void |
C2f(double eps,
double[] c) |
protected void |
C3coeff() |
protected void |
C3f(double eps,
double[] c) |
protected void |
C4coeff() |
protected void |
C4f(double eps,
double[] c) |
GeodesicData |
Direct(double lat1,
double lon1,
double azi1,
boolean arcmode,
double s12_a12,
int outmask)
The general direct geodesic problem.
|
GeodesicData |
Direct(double lat1,
double lon1,
double azi1,
double s12)
Solve the direct geodesic problem where the length of the geodesic
is specified in terms of distance.
|
GeodesicData |
Direct(double lat1,
double lon1,
double azi1,
double s12,
int outmask)
Solve the direct geodesic problem where the length of the geodesic is
specified in terms of distance and with a subset of the geodesic results
returned.
|
double |
EllipsoidArea() |
double |
Flattening() |
GeodesicData |
Inverse(double lat1,
double lon1,
double lat2,
double lon2)
Solve the inverse geodesic problem.
|
GeodesicData |
Inverse(double lat1,
double lon1,
double lat2,
double lon2,
int outmask)
Solve the inverse geodesic problem with a subset of the geodesic results
returned.
|
GeodesicLine |
Line(double lat1,
double lon1,
double azi1)
Set up to compute several points on a single geodesic.
|
GeodesicLine |
Line(double lat1,
double lon1,
double azi1,
int caps)
Set up to compute several points on a single geodesic with a subset of the
capabilities included.
|
double |
MajorRadius() |
protected static double |
SinCosSeries(boolean sinp,
double sinx,
double cosx,
double[] c) |
protected static final int GEOGRAPHICLIB_GEODESIC_ORDER
protected static final int nA1_
protected static final int nC1_
protected static final int nC1p_
protected static final int nA2_
protected static final int nC2_
protected static final int nA3_
protected static final int nA3x_
protected static final int nC3_
protected static final int nC3x_
protected static final int nC4_
protected static final int nC4x_
protected static final double tiny_
protected double _a
protected double _f
protected double _f1
protected double _e2
protected double _ep2
protected double _b
protected double _c2
public static final Geodesic WGS84
public Geodesic(double a, double f)
a
- equatorial radius (meters).f
- flattening of ellipsoid. Setting f = 0 gives a sphere.
Negative f gives a prolate ellipsoid.GeographicErr
- if a or (1 − f ) a is
not positive.public GeodesicData Direct(double lat1, double lon1, double azi1, double s12)
lat1
- latitude of point 1 (degrees).lon1
- longitude of point 1 (degrees).azi1
- azimuth at point 1 (degrees).s12
- distance between point 1 and point 2 (meters); it can be
negative.GeodesicData
object with the following fields:
lat1, lon1, azi1, lat2, lon2,
azi2, s12, a12.
lat1 should be in the range [−90°, 90°]. The values of lon2 and azi2 returned are in the range [−180°, 180°).
If either point is at a pole, the azimuth is defined by keeping the longitude fixed, writing lat = ±(90° − ε), and taking the limit ε → 0+. An arc length greater that 180° signifies a geodesic which is not a shortest path. (For a prolate ellipsoid, an additional condition is necessary for a shortest path: the longitudinal extent must not exceed of 180°.)
public GeodesicData Direct(double lat1, double lon1, double azi1, double s12, int outmask)
lat1
- latitude of point 1 (degrees).lon1
- longitude of point 1 (degrees).azi1
- azimuth at point 1 (degrees).s12
- distance between point 1 and point 2 (meters); it can be
negative.outmask
- a bitor'ed combination of GeodesicMask
values
specifying which results should be returned.GeodesicData
object with the fields specified by
outmask computed.
lat1, lon1, azi1, s12, and a12 are
always included in the returned result. The value of lon2 returned
is in the range [−180°, 180°), unless the outmask
includes the GeodesicMask.LONG_UNROLL
flag.
public GeodesicData ArcDirect(double lat1, double lon1, double azi1, double a12)
lat1
- latitude of point 1 (degrees).lon1
- longitude of point 1 (degrees).azi1
- azimuth at point 1 (degrees).a12
- arc length between point 1 and point 2 (degrees); it can
be negative.GeodesicData
object with the following fields:
lat1, lon1, azi1, lat2, lon2,
azi2, s12, a12.
lat1 should be in the range [−90°, 90°]. The values of lon2 and azi2 returned are in the range [−180°, 180°).
If either point is at a pole, the azimuth is defined by keeping the longitude fixed, writing lat = ±(90° − ε), and taking the limit ε → 0+. An arc length greater that 180° signifies a geodesic which is not a shortest path. (For a prolate ellipsoid, an additional condition is necessary for a shortest path: the longitudinal extent must not exceed of 180°.)
public GeodesicData ArcDirect(double lat1, double lon1, double azi1, double a12, int outmask)
lat1
- latitude of point 1 (degrees).lon1
- longitude of point 1 (degrees).azi1
- azimuth at point 1 (degrees).a12
- arc length between point 1 and point 2 (degrees); it can
be negative.outmask
- a bitor'ed combination of GeodesicMask
values
specifying which results should be returned.GeodesicData
object with the fields specified by
outmask computed.
lat1, lon1, azi1, and a12 are always included
in the returned result. The value of lon2 returned is in the range
[−180°, 180°), unless the outmask includes the GeodesicMask.LONG_UNROLL
flag.
public GeodesicData Direct(double lat1, double lon1, double azi1, boolean arcmode, double s12_a12, int outmask)
lat1
- latitude of point 1 (degrees).lon1
- longitude of point 1 (degrees).azi1
- azimuth at point 1 (degrees).arcmode
- boolean flag determining the meaning of the
s12_a12.s12_a12
- if arcmode is false, this is the distance between
point 1 and point 2 (meters); otherwise it is the arc length between
point 1 and point 2 (degrees); it can be negative.outmask
- a bitor'ed combination of GeodesicMask
values
specifying which results should be returned.GeodesicData
object with the fields specified by
outmask computed.
The GeodesicMask
values possible for outmask are
The function value a12 is always computed and returned and this
equals s12_a12 is arcmode is true. If outmask
includes GeodesicMask.DISTANCE
and arcmode is false, then
s12 = s12_a12. It is not necessary to include GeodesicMask.DISTANCE_IN
in outmask; this is automatically
included is arcmode is false.
public GeodesicData Inverse(double lat1, double lon1, double lat2, double lon2)
lat1
- latitude of point 1 (degrees).lon1
- longitude of point 1 (degrees).lat2
- latitude of point 2 (degrees).lon2
- longitude of point 2 (degrees).GeodesicData
object with the following fields:
lat1, lon1, azi1, lat2, lon2,
azi2, s12, a12.
lat1 and lat2 should be in the range [−90°, 90°]. The values of azi1 and azi2 returned are in the range [−180°, 180°).
If either point is at a pole, the azimuth is defined by keeping the longitude fixed, writing lat = ±(90° − ε), taking the limit ε → 0+.
The solution to the inverse problem is found using Newton's method. If this fails to converge (this is very unlikely in geodetic applications but does occur for very eccentric ellipsoids), then the bisection method is used to refine the solution.
public GeodesicData Inverse(double lat1, double lon1, double lat2, double lon2, int outmask)
lat1
- latitude of point 1 (degrees).lon1
- longitude of point 1 (degrees).lat2
- latitude of point 2 (degrees).lon2
- longitude of point 2 (degrees).outmask
- a bitor'ed combination of GeodesicMask
values
specifying which results should be returned.GeodesicData
object with the fields specified by
outmask computed.
The GeodesicMask
values possible for outmask are
lat1, lon1, lat2, lon2, and a12 are always included in the returned result.
public GeodesicLine Line(double lat1, double lon1, double azi1)
lat1
- latitude of point 1 (degrees).lon1
- longitude of point 1 (degrees).azi1
- azimuth at point 1 (degrees).GeodesicLine
object.
lat1 should be in the range [−90°, 90°]. The full set of capabilities is included.
If the point is at a pole, the azimuth is defined by keeping the lon1 fixed, writing lat1 = ±(90 − ε), taking the limit ε → 0+.
public GeodesicLine Line(double lat1, double lon1, double azi1, int caps)
lat1
- latitude of point 1 (degrees).lon1
- longitude of point 1 (degrees).azi1
- azimuth at point 1 (degrees).caps
- bitor'ed combination of GeodesicMask
values specifying
the capabilities the GeodesicLine
object should possess, i.e.,
which quantities can be returned in calls to GeodesicLine.Position
.GeodesicLine
object.
The GeodesicMask
values are
If the point is at a pole, the azimuth is defined by keeping lon1 fixed, writing lat1 = ±(90 − ε), and taking the limit ε → 0+.
public double MajorRadius()
public double Flattening()
public double EllipsoidArea()
protected static double SinCosSeries(boolean sinp, double sinx, double cosx, double[] c)
protected double A3f(double eps)
protected void C3f(double eps, double[] c)
protected void C4f(double eps, double[] c)
protected static double A1m1f(double eps)
protected static void C1f(double eps, double[] c)
protected static void C1pf(double eps, double[] c)
protected static double A2m1f(double eps)
protected static void C2f(double eps, double[] c)
protected void A3coeff()
protected void C3coeff()
protected void C4coeff()


Publish
Note: submission will result in a HTTP 204 response to acknowledge; in browsers this looks like a no-op
Publisher Diagnostics
Retrieve details about a topic URL.
Note: This hub ignores publisher notifications about feeds with no
subscribers. If you are trying to test that your publisher works correctly,
you may want to use the Subscription page to subscribe
the example subscriber
app to your feed.


This was a project presented to the cadastral unit of Bogota (UAECD) during the DS4A program of data science. We presented an application that modeled the price of properties in Bogota and showed analytics of the city.
Software Developer with background in Economics and Data Science. Driven by intellectual curiosity, highly adaptable and flexible, enjoys collaborative working and problem solving.
I have proficiency in Python using libraries like Tensorflow, Keras, Scikit-learn, Pandas, Numpy, Matplotlib and Seaborn. I recently finished a program in Data Science in which I worked together with a team in a project on valuation of properties in Bogotá.
I come from San Andrés, an island situated in the colombian caribbean where my family has a touristic business. I moved to Bogotá for my studies in Economics thanks to an Scholarship given by the university. I was a student representative of the program and graduated with a thesis about rent-seeking and pressure groups. Later on I got interested in the Holberton’s Machine Learning program and started learning software development from the basics.
my resume.
I like reading classic books, listening to experimental and progressive rock, play tennis and now I'm learning how to play the guitar.


Machine learning based employee attrition predictor
Please enter employee's information
Job role:
Healthcare Representative
Human Resources
Laboratory Technician
Manager
Manufacturing Director
Research Director
Research Scientist
Sales Executive
Sales Representative
Department:
Human Resources
Research and Development
Sales
Business travel:
Non-Travel
Travel_Rarely
Travel_Frequently
Education field:
Human Resources
Sales
Marketing
Medical
Other
Marital status:
Single
Married
Divorced
Predict
{{ prediction_text }}


%inherit file="base.html"/> % if not client:
| ZeroMQ endpoint used to connect clients like circusctl or circushttpd | ${goptions['endpoint']} |
| ZeroMQ endpoint used for pub/sub | ${goptions['pubsub_endpoint']} |
| ZeroMQ endpoint used for the pub/sub stats | ${goptions['stats_endpoint']} |
| Delay in seconds for the ZMQ polling. | ${goptions['check_delay']} |


Welcome to Pier Paolo Ippolito Augmented Reality Business Card!
Once the camera is loaded,
click "Start" and aim your device camera to the business card marker.
To select any of the menu options, just center the pointer on them and wait for a few seconds.
Start
* In case of any problem, try on desktop


Display Other Content
Action
Call 411
Send Mail
Send SMS
Load Web Site
Load a page with iframes
Load page with query param
Android Only
Map IBM
Search Android market
View image app
Back


## Mako can find this base file because it's in the settings.py -> MAKO_TEMPLATES_DIRS list <%inherit file="base.htm" /> <%block name="content">
We are here to answer any questions you have about MyStuff and digital photography in general.
If there is something you want or need even if you can not find it on our website, let us know and we will do everything we can to help you find it.
%block>


Introduction
SO API Handler
SO API Handler utilizes RESTful interfaces to interact with consumer applications. The SO interface is used to orchestrate VNFs, allow for manual task completion, and send vnf replace requests. It contains both the SOServiceInstantiation API and SOManualTasks API.
SOServiceInstantiation API
The SOServiceInstantiation API handles service instance requests, and supports both macro and aLaCarte orchestrations. Change management operations, activation and deactivation of service instances, and new requests for configuration resources are handled by this API. This API is currently set for version 6 ("v6") while also supporting versions 4 and 5 ("v4", "v5") minus additional "v6" features.
SOManualTasks API
The SOManualTasks API handles queries about open manual tasks. This API also accepts POST requests containing information about how SO should proceed with handling the open tasks, and resolving the errors. SOManualTasks API currently supports version 1 ("v1").


The ARIA link and button controls are keyboard accessible.
Press the Tab key to navigate between the ARIA link and button controls. Press the Enter key to activate the selected link or button. Mouse users can click a link or button to activate it as usual.


In the fall of 2013, the Hammer Museum launched an initiative to transform Westwood Village in L.A. For three weeks, artists and artisans took over storefront spaces in Westwood and transformed the neighborhood.
Arts Restore LA needed a robust site that could showcase the unique vendors and dozens of events which took place over the course of the initiative. The site also needed to be completely responsive since many visitors would be accessing it from mobile devices as they explored the neighborhood on foot. I handled both design and development for this project.
Website visible here: Arts Restore LA


Home
Accomodations
Activities
Travel Arrangements
Gallery
Contact
Gallery
Views of the resort, take a glimpse into what could be yours...


February will be awesome
After chatting with a lot of friends yesterday, I realized: February will be awesome. Here’s why:
- I get to finish the Erlang FoundationDB driver.
- I have a friend with a well established email marketing business that is hiring me (again) for a couple of weeks to fix some really challenging issues in .Net.
- I have another client is hiring me this month. When he hires me, it is usually to get them up to speed with new tech. In the past I have introduced them to TDD, BDD, DDD, continuous integration and dynamic cloud provisioning, just to name a few. They even sent me out to Italy once for a few days to evaluate the software architecture of an app they were considering to buy. I am eager to find out what it will be this time….
- A lot of people in my personal and social network are reaching out and handing me work/opportunities; some on the short term, some on the long term, and some even permanent. They help me, and I can help them as well, so it’s a great feeling. I still have quite some leads up and running, and all thanks to you…
As you all know, I love challenges, so that’s why I am so excited. Know anyone that has trouble with software development? Here’s what I can help you with:
- Team
- Agile PM.
- non-communicating or malfunctioning teams.
- Software practices:
- Functional and technical analysis .
- Brownfield refactoring: how to convert legacy code into a proper code base (teach & do).
- Best software practices (BDD/TDD/DDD/SOLID/…).
- Software architecture (lots of knowledge on CQRS/ES).
- Git(hub), feature branching and -toggles
- Model storming: model your problem/solution space in a unique way, (combining ICT & business).
- Languages:
- Proficient: .Net (C#, VB.Net)
- Intermediate: JavaScript, CoffeeScript, Erlang, Elixir, C, CPP
- Notions: Python, PHP, Haskell, Ruby, F#, GoLang, Bash
- Platforms:
- OS: Linux/Windows
- Persistence: Microsoft SQL Server/Oracle/RavenDB/MongoDB/FoundationDB/MemCached/…
- Cloud: Windows Azure/DigitalOcean/…
You can find even more info and references from my former projects at my LinkedIn profile.
Contact me today:
- Call at +32 478 336 376 .
- Mail at tom@corebvba.
- Skype @ToJanss


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object coins.flow.DataFlowImpl
Implementation of the DataFlow interface.
There are some dependencies between the methods in this class.
For example, findReach() mustn't be called before both findDef() and findKill() have been called,
and findKill() in turn depends on the result of findDefined().
Access restrictions (or the like) that reflect these dependencies are not yet implemented. Please be careful in using.
findAll()
method calls these methods in the correct order.
| Field Summary | |
protected DefVector |
DEF_INVERTED
|
protected DefVector |
DEF_ZERO
|
protected ExpVector |
EXP_INVERTED
|
protected ExpVector |
EXP_ZERO
|
int |
fDbgFlow
|
protected int |
fDefCount
|
protected int[] |
fDefNodeIndexTable
|
protected FlowAnalSym[] |
fFlowAnalSymTable
|
Flow |
flow
|
FlowRoot |
flowRoot
|
protected RecordAlias |
fRecordAlias
|
protected ShowDataFlow |
fShowDataFlow
|
protected SubpFlow |
fSubpFlow
|
protected java.util.Set[] |
fUndefinedUseNodesOfSym
|
HirRoot |
hirRoot
|
IoRoot |
ioRoot
|
ShowDataFlowByName |
showDataFlowByName
|
SymRoot |
symRoot
|
| Constructor Summary | |
DataFlowImpl()
|
|
DataFlowImpl(FlowRoot pFlowRoot,
SubpFlow pSubpFlow)
Constructs a DataFlow instance and prepares for DFA. |
| Method Summary | |
protected void |
addEGenExpId(java.util.Set pEGenSet,
java.util.Set pEKillSet,
SetRefRepr pSetRefRepr)
addEGenExpId EGen computation by using ExpId. |
protected void |
allocateSpace()
allocateSpace Allocates space to store BitVector instances for the entire flow. |
protected java.util.Set |
callModSyms(IR pCallNode,
SubpFlow pCurrentSubpFlow)
|
void |
clean()
Cleans the environment that may contain junk information for the current DFA. |
int |
defLookup(int pNodeIndex)
Changes the IR node index into the "Def" index. |
int |
defReverseLookup(int pBitPosition)
Changes the "Def" index into the IR node index. |
int |
expLookup(int pExpIdIndex)
Changes the ExpId index into the position in the ExpVector. |
int |
expReverseLookup(int pBitPosition)
Changes the position in the ExpVector into the ExpId index. |
void |
findAll()
Finds and sets all the data flow information. |
void |
findAllBitVectors()
Finds and sets all the BitVectors, that is, Def, Kill, In, Out, Reach, Defined, Exposed, EGen, EKill, AvailIn, AvailOut, LiveIn, LiveOut, DefIn, and DefOut vectors. |
void |
findAvailInAvailOut()
Finds and sets the AvailIn and AvailOut vectors from the EGen and EKill vectors using the data flow equations. |
void |
findBasic()
Finds and sets the data flow items that are independent of the control flow, that is, Def, Kill, Defined, Exposed, EGen, and EKill vectors. |
void |
findDef()
Finds and sets the Def vectors for the entire flow. |
void |
findDef(BBlock pBBlock)
Finds and sets the Def vector for the given BBlock. |
void |
findDefInDefOut()
Finds and sets the DefIn and DefOut vectors from the Defined vectors using the data flow equations. |
void |
findDefined()
Finds and sets the Defined vectors for the entire flow. |
void |
findDefined(BBlock pBBlock)
Finds and sets the Defined vector for the given BBlock. |
void |
findDefUse()
Finds and sets the DefUseList for each FlowAnalSym without considering side effects of call and alias. |
void |
findDefUseExhaustively()
Finds and sets the DefUseList for each FlowAnalSym considering side effects of call and alias. |
void |
findEGen()
Finds and sets the EGen vectors for the entire flow. |
void |
findEGen(BBlock pBBlock)
Finds and sets the EGen vector for the given BBlock. |
void |
findEKill()
Finds and sets the EKill vectors for the entire flow. |
void |
findEKill(BBlock pBBlock)
Finds and sets the EGen vector for the given BBlock. |
void |
findExposed()
Finds and sets the Exposed vectors for the entire flow. |
void |
findExposed(BBlock pBBlock)
Finds and sets the Exposed vector for the given BBlock. |
void |
findKill()
Finds and sets the Kill vectors for the entire flow. |
void |
findKill(BBlock pBBlock)
Finds and sets the Kill vector for the given BBlock using the Defined vector for that BBlock. |
void |
findLiveInLiveOut()
Finds and sets the LiveIn and LiveOut vectors from the Exposed and Defined vectors using the data flow equations. |
void |
findReach()
Finds and sets the Reach vectors from the Def and Kill vectors using the data flow equations. |
void |
findUsed()
Finds and sets the Used vectors for the entire flow. |
void |
findUsed(BBlock pBBlock)
Finds and sets the Used vector for the given BBlock. |
void |
findUseDef()
Find UseDef relations and DefUse relations without considering side effects of call and alias. |
protected void |
findUseDef(BBlock pBBlock,
boolean pExhaustive)
findUseDef Compute both DefUse relations and UseDef relations for pBBlock. |
void |
findUseDefExhaustively()
Find UseDef relations and DefUse relations considering side effects of call and alias. |
java.util.List |
getBBlockList()
Returns the List of BBlocks in the flow. |
int |
getDefCount()
getDefCount |
int |
getDefIndex(int NodeIndex)
getDefIndex |
int |
getDefNodeIndex(int pDefSetRefReprNo)
getNodeIndex |
FlowAnalSym |
getFlowAnalSym(int ExpIndex)
getExpId |
int |
getFlowAnalSymCount()
// getExpIdCount getFlowAnalSymCount |
IR |
getNode(int pNodeIndex)
getNode(int) Returns the node that has the given index. |
IR |
getNodeFromDefIndex(int pDefIndex)
Returns the IR node that corresponds to the given DefSetRefRepr index (entry of the DefVector). |
int |
getPointCount()
getPointCount |
java.util.Set |
getUndefinedUseNodeOfSym(FlowAnalSym lSym)
|
java.util.Set |
getUseFlowAnalSyms(FlowAnalSym pFlowAnalSym)
Returns the Set of ExpIds that are contained in the given ExpId and are used. |
java.util.Set |
getUseFlowAnalSyms(IR pSubtree)
!!HIR Returns the Set of ExpIds that fall under the given subtree and are used. |
java.util.Set |
getUseFlowAnalSymsForHir(HIR pSubtree)
|
protected void |
handleCall(IR pCallNode,
SubpFlow pSubpFlow,
java.util.Set pDDefSyms,
ListValuedMap pSymToPDefNode)
findUseDefObsolete Compute both DefUse relations and UseDef relations for pBBlock. |
protected void |
initiateDataFlow()
|
protected void |
recordExpId()
allocateExpId Creates a table that retrieves ExpId from its index value. |
(package private) void |
recordSetRefReprs()
Records the SetRefReprs each BBlock contains. |
void |
showAll()
Shows all the information found in this DFA. |
void |
showAllBitVectors()
Shows all the BitVectors. |
void |
showAvailIn()
Shows the AvailIn vector for every BBlock. |
void |
showAvailInAvailOutRelated()
Shows BitVectors related to (needed to solve) AvailIn/AvailOut vectors, that is, EGen, EKill, AvailIn, and AvailOut vectors. |
void |
showAvailOut()
Shows the AvailOut vector for every BBlock. |
void |
showBasic()
Shows all the data flow items that are independent of the control flow, that is, Def, Kill, Defined, Exposed, EGen, and EKill vectors. |
void |
showDef()
Shows the Def vector for every BBlock. |
void |
showDefIn()
Shows the DefIn vector for every BBlock. |
void |
showDefInDefOutRelated()
Shows BitVectors related to (needed to solve) DefIn/DefOut vectors, that is, Defined, DefIn, and DefOut vectors. |
void |
showDefined()
Shows the Defined vector for every BBlock. |
void |
showDefOut()
Shows the DefOut vector for every BBlock. |
void |
showDefUse()
Shows the DefUseList for each FlowAnalSym. |
void |
showDefVectors()
Shows all the DefVectors for all the BBlocks. |
void |
showEGen()
Shows the EGen vector for every BBlock. |
void |
showEKill()
Shows the EKill vector for every BBlock. |
void |
showExposed()
Shows the Exposed vector for every BBlock. |
void |
showExpVectors()
Shows all the ExpVectors for all the BBlocks. |
void |
showKill()
Shows the Kill vector for every BBlock. |
void |
showLiveIn()
Shows the LiveIn vector for every BBlock. |
void |
showLiveInLiveOutRelated()
Shows BitVectors related to (needed to solve) LiveIn/LiveOut vectors, that is, Exposed, Defined, LiveIn, and LiveOut vectors. |
void |
showLiveOut()
Shows the LiveOut vector for every BBlock. |
void |
showReach()
Shows the Reach vector for every BBlock. |
void |
showReachRelated()
Shows BitVectors related to (needed to solve) Reach vectors, that is, Def, Kill, and Reach vectors. |
void |
showSolved()
Shows all the data flow items data flow equations have found, that is, In, Out, Reach, AvailIn, AvailOut, LiveIn, LiveOut, DefIn, and DefOut vectors. |
void |
showSummary()
Show summary of data flow information. |
void |
showUseDef()
Shows the UseDefList for each FlowAnalSym. |
(package private) void |
showVector(BitVector pBitVector)
Shows the given BitVector. |
(package private) void |
showVector(BitVector pBitVector,
java.lang.String pComment)
Shows the given BitVector w/ a comment(heading). |
void |
solveAll()
Solves all the data flow equations to find In, Out, Reach, AvailIn, AvailOut, LiveIn, LiveOut, DefIn, and DefOut vectors. |
(package private) ExpVector |
toExpVector(java.util.Set pSymbolSet)
toExpVector Converts the given Set of symbols to an ExpVector where each bit of the vector corresponds to an element in the Set set. |
(package private) java.util.Set |
toSet(ExpVector pExpVector)
Converts the given ExpVector to a Set that has elements that correspond to the set bits of the ExpVector. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
public final FlowRoot flowRoot
public final IoRoot ioRoot
public final SymRoot symRoot
public final HirRoot hirRoot
public final Flow flow
public ShowDataFlowByName showDataFlowByName
protected SubpFlow fSubpFlow
protected ShowDataFlow fShowDataFlow
protected int fDefCount
protected DefVector DEF_ZERO
protected DefVector DEF_INVERTED
protected ExpVector EXP_ZERO
protected ExpVector EXP_INVERTED
protected int[] fDefNodeIndexTable
protected FlowAnalSym[] fFlowAnalSymTable
protected java.util.Set[] fUndefinedUseNodesOfSym
protected RecordAlias fRecordAlias
public final int fDbgFlow
| Constructor Detail |
public DataFlowImpl(FlowRoot pFlowRoot, SubpFlow pSubpFlow)
public DataFlowImpl()
| Method Detail |
protected void initiateDataFlow()
void recordSetRefReprs()
public java.util.List getBBlockList()
getBBlockList
in interface DataFlow
protected void recordExpId()
public int getDefCount()
getDefCount
in interface DataFlow
public int getFlowAnalSymCount()
getFlowAnalSymCount
in interface DataFlow
public int getPointCount()
getPointCount
in interface DataFlow
public FlowAnalSym getFlowAnalSym(int ExpIndex)
getFlowAnalSym
in interface DataFlow
public int getDefIndex(int NodeIndex)
getDefIndex
in interface DataFlow
public int getDefNodeIndex(int pDefSetRefReprNo)
getDefNodeIndex
in interface DataFlow
pDefSetRefReprNo
- index of value-setting SetRefRepr.
public IR getNode(int pNodeIndex)
getNode
in interface DataFlow
pNodeIndex
- index of the node to be gotten.
public IR getNodeFromDefIndex(int pDefIndex)
getNodeFromDefIndex
in interface DataFlow
protected void allocateSpace()
public void findDef()
findDef
in interface DataFlow
public void findDef(BBlock pBBlock)
findDef
in interface DataFlow
pBBlock
- BBlock whose Def vector to find.public void findKill()
findKill
in interface DataFlow
public void findKill(BBlock pBBlock)
findKill
in interface DataFlow
pBBlock
- BBlock whose Kill vector to find.
See #findDefined()public void findDefined()
findDefined
in interface DataFlow
public void findDefined(BBlock pBBlock)
findDefined
in interface DataFlow
pBBlock
- BBlock whose Defined vector to find.public void findUsed()
findUsed
in interface DataFlow
public void findUsed(BBlock pBBlock)
findUsed
in interface DataFlow
pBBlock
- BBlock whose Used vector to find.public void findExposed()
findExposed
in interface DataFlow
public void findExposed(BBlock pBBlock)
findExposed
in interface DataFlow
pBBlock
- BBlock whose Exposed vector to find.public void findEGen()
findEGen
in interface DataFlow
protected void addEGenExpId(java.util.Set pEGenSet, java.util.Set pEKillSet, SetRefRepr pSetRefRepr)
pEGenSet
- accumulated set of EGen ExpIds in the current BBlock.pEKillSet
- accumulated set of EKill ExpIds in the current BBlock.pSetRefRepr
- SetRefRepr of an expression.public void findEGen(BBlock pBBlock)
findEGen
in interface DataFlow
pBBlock
- BBlock whose EGen vector to find.public void findEKill()
findEKill
in interface DataFlow
public void findEKill(BBlock pBBlock)
findEKill
in interface DataFlow
pBBlock
- BBlock whose EGen vector to be found.public void findReach()
findReach
in interface DataFlow
public void findAvailInAvailOut()
findAvailInAvailOut
in interface DataFlow
public void findLiveInLiveOut()
findLiveInLiveOut
in interface DataFlow
public void findDefInDefOut()
findDefInDefOut
in interface DataFlow
public int defLookup(int pNodeIndex)
defLookup
in interface DataFlow
pNodeIndex
- index of the value-setting node (AssignStmt in HIR).public int defReverseLookup(int pBitPosition)
defReverseLookup
in interface DataFlow
pBitPosition
- index in the DefVector for which to find the node index.public int expLookup(int pExpIdIndex)
expLookup
in interface DataFlow
pExpIdIndex
- index of ExpId.public int expReverseLookup(int pBitPosition)
expReverseLookup
in interface DataFlow
pBitPosition
- position in the ExpVector.public java.util.Set getUseFlowAnalSyms(IR pSubtree)
getUseFlowAnalSyms
in interface DataFlow
pSubtree
- IR node that is the root of the subtree to examine.
public java.util.Set getUseFlowAnalSymsForHir(HIR pSubtree)
getUseFlowAnalSymsForHir
in interface DataFlow
public java.util.Set getUseFlowAnalSyms(FlowAnalSym pFlowAnalSym)
public void clean()
public void findBasic()
findBasic
in interface DataFlow
DataFlow.findDef()
,
DataFlow.findDefined()
,
DataFlow.findKill()
,
DataFlow.findExposed()
,
DataFlow.findEGen()
,
DataFlow.findEKill()
public void solveAll()
solveAll
in interface DataFlow
DataFlow.findReach()
,
DataFlow.findAvailInAvailOut()
,
DataFlow.findLiveInLiveOut()
,
DataFlow.findDefInDefOut()
public void findAllBitVectors()
findAllBitVectors
in interface DataFlow
DataFlow.findBasic()
,
DataFlow.solveAll()
public void findDefUse()
findDefUse
in interface DataFlow
public void findDefUseExhaustively()
findDefUseExhaustively
in interface DataFlow
public void findUseDef()
findUseDef
in interface DataFlow
public void findUseDefExhaustively()
findUseDefExhaustively
in interface DataFlow
protected void findUseDef(BBlock pBBlock, boolean pExhaustive)
pBBlock
- protected void handleCall(IR pCallNode, SubpFlow pSubpFlow, java.util.Set pDDefSyms, ListValuedMap pSymToPDefNode)
protected java.util.Set callModSyms(IR pCallNode, SubpFlow pCurrentSubpFlow)
public void findAll()
findAll
in interface DataFlow
DataFlow.findAllBitVectors()
,
DataFlow.findDefUse()
public void showDef()
showDef
in interface DataFlow
public void showKill()
showKill
in interface DataFlow
public void showReach()
showReach
in interface DataFlow
public void showDefined()
showDefined
in interface DataFlow
public void showExposed()
showExposed
in interface DataFlow
public void showEGen()
showEGen
in interface DataFlow
public void showEKill()
showEKill
in interface DataFlow
public void showAvailIn()
showAvailIn
in interface DataFlow
public void showAvailOut()
showAvailOut
in interface DataFlow
public void showLiveIn()
showLiveIn
in interface DataFlow
public void showLiveOut()
showLiveOut
in interface DataFlow
public void showDefIn()
showDefIn
in interface DataFlow
public void showDefOut()
showDefOut
in interface DataFlow
public void showDefVectors()
showDefVectors
in interface DataFlow
DataFlow.showDef()
,
//@see #showIn()
//@see #showOut()
,
DataFlow.showReach()
public void showExpVectors()
showExpVectors
in interface DataFlow
DataFlow.showDefined()
,
DataFlow.showExposed()
,
DataFlow.showEGen()
,
DataFlow.showEKill()
,
DataFlow.showAvailIn()
,
DataFlow.showAvailOut()
,
DataFlow.showLiveIn()
,
DataFlow.showLiveOut()
,
DataFlow.showDefIn()
,
DataFlow.showDefOut()
public void showBasic()
showBasic
in interface DataFlow
DataFlow.showDef()
,
DataFlow.showKill()
,
DataFlow.showDefined()
,
DataFlow.showExposed()
,
DataFlow.showEGen()
,
DataFlow.showEKill()
public void showSolved()
showSolved
in interface DataFlow
DataFlow.showReach()
,
DataFlow.showAvailIn()
,
DataFlow.showAvailOut()
,
DataFlow.showLiveIn()
,
DataFlow.showLiveOut()
,
DataFlow.showDefIn()
,
DataFlow.showDefOut()
public void showReachRelated()
showReachRelated
in interface DataFlow
DataFlow.showDef()
,
DataFlow.showKill()
,
DataFlow.showReach()
public void showAvailInAvailOutRelated()
showAvailInAvailOutRelated
in interface DataFlow
DataFlow.showEGen()
,
DataFlow.showEKill()
,
DataFlow.showAvailIn()
,
DataFlow.showAvailOut()
public void showLiveInLiveOutRelated()
showLiveInLiveOutRelated
in interface DataFlow
DataFlow.showExposed()
,
DataFlow.showDefined()
,
DataFlow.showLiveIn()
,
DataFlow.showLiveOut()
public void showDefInDefOutRelated()
showDefInDefOutRelated
in interface DataFlow
DataFlow.showDefined()
,
DataFlow.showDefIn()
,
DataFlow.showDefOut()
public void showAllBitVectors()
showAllBitVectors
in interface DataFlow
DataFlow.showDefVectors()
,
DataFlow.showExpVectors()
public void showDefUse()
showDefUse
in interface DataFlow
public void showUseDef()
showUseDef
in interface DataFlow
public void showAll()
showAll
in interface DataFlow
DataFlow.showAllBitVectors()
,
DataFlow.showDefUse()
public void showSummary()
DataFlow
showSummary
in interface DataFlow
void showVector(BitVector pBitVector)
pBitVector
- BitVector to display
See ShowDataFlow#showVector()void showVector(BitVector pBitVector, java.lang.String pComment)
pBitVector
- BitVector to displaypComment
- Comment that is displayed before the BitVector
See ShowDataFlow#showVector()public java.util.Set getUndefinedUseNodeOfSym(FlowAnalSym lSym)
getUndefinedUseNodeOfSym
in interface DataFlow
ExpVector toExpVector(java.util.Set pSymbolSet)
java.util.Set toSet(ExpVector pExpVector)
pExpVector
- ExpVector to convert.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


{{ $ := .root }} {{ $page := .page }} {{ $hash_id := .hash_id }}
We are located steps from 🌴 😎 ⛰ 🏖 🏄🏿♀ 🌊 🐬 in the Department of Psychological & Brain Sciences at UC Santa Barbara. Check out the UCSB drone footage 👇 to see our beautiful campus.
{{ . | markdownify | emojify }}
{{ end }} {{ if $item.cta_url }} {{ $pack := or .cta_icon_pack "fas" }} {{ $pack_prefix := $pack }} {{ if in (slice "fab" "fas" "far" "fal") $pack }} {{ $pack_prefix = "fa" }} {{ end }}{{- with $item.cta_icon -}}{{- end -}} {{- $item.cta_label | emojify | safeHTML -}}
{{ end }}Our lab uses theories and methods from social psychology, cognitive neuroscience (e.g., fMRI, EEG), and related disciplines to investigate how people see and understand themselves and others. Most of our current work focuses on face processing, intergroup bias, and the interplay of social perception and mental and physical health.
{{ end }}


Specific bulk reaction with Da $\in [0,1]$ and $\text{Sc}=100$
Use data from interfacial region at $\Sigma$ to train machine learning model
Results in an explicit expression $f (\bar{c}, r, \text{Da})$
Validation - 2D
Same setup, but different flow parameters:
$\chi=2.5, \; \text{Re} = 175, \; \text{Da} = 0.6$
Overall mass transfer: global Sherwood number
$\text{Sh}_\text{gl} = \frac{1}{|A|} \int_A \text{Sh}_\text{loc} \; \text{dA}
\text{, where } \text{Sh}_\text{loc} = \frac{\left( \partial_r c \right)_\Sigma}{c_\Sigma} d_b$
Validation - 3D
Bubble in low Re-regime ($Re \approx 4$) with physisorption
Hydrodynamics from
Satapathy, Smith(1960). JFM, volume 10, part 4, p.561-570
$\text{Re} \approx 4$, $\text{Sc} = 500$
Outside training data parameter range!
Generalization for different flow regimes seem possible
Resolution can be reduced by a factor of 10
Outlook
Investigate and extend parameter range
How general is the SGS-ML model?
Include higher reaction rates
Generalization to more complex reaction systems
Can current workflow be used for multiple species?
Use competitive reaction schemes to investigate local selectivity
Application to deformable rising bubbles
Thank you for your attention!
Remaining questions?
Dennis Hillenbrand<EMAIL_ADDRESS>Andre Weiner<EMAIL_ADDRESS>Dieter Bothe<EMAIL_ADDRESS>Holger Marschall<EMAIL_ADDRESS>More information in Weiner, Hillenbrand, Marschall, Bothe (2019). CET, volume 42, issue 7, p. 1349-1356
SGS model - Workflow
Machine learning - MLP
Combination of single perceptrons
$y = f \left( \sum_i w_i x_i \right)$
Possible activation function: sigmoid
$f(z) = \frac{1}{1+e^{-z}}$
Optimization of weights $w_i$ such that specified loss (e.g. mean squared error)
decreases for given set of data pairs
Output of each perceptron is used as input for another perceptron in hidden layers
Weights can be efficiently adjusted by backpropagation algorithm
Offers much flexibility for constructing the whole network
Machine learning
Settings for multilayer perceptron
Framework: pyTorch
One model with one scalar output for each label
Multilayer perceptron with two hidden layers
Input layer: 3 neurons; 1 for each input feature
Hidden layers: 16 neurons per layer
Output layer: single node (scalar output)
Sigmoid activation function
$10^6$ datapoints split into training (75%) and validation data (25%)
ADAM optimizer
MSE as loss function to optimize
Training takes approx. 30 minutes on Nvidia GTX 960 GPU
Choice of input data
Transformation and sampling
Reduce variance of labels if possible
(e.g. difference to average concentration instead of face concentration value)
Transform data to intervals in the range of [0,1]
Evaluate feature importance
Sample subsets such that each label is nearly uniformly distributed over its range
Choice of input data
Sequential backward selection, based on k-Nearest-Neighbors and the L2-norm
Average concentration the most important feature
No improvement after first three features (No local velocity data necessary )


View my labs work here:
Lab 2 Lab 4 Lab 5 Lab 6 Lab 7 Lab 8 Lab 9 Lab 10 Lab 11 Lab 12 Lab 13 Lab 14 Lab 15 Lab 16 Lab 17 Lab 18 Lab 19


| DOSE: |
1 tablet |
oral |
MDMA |
(pill / tablet) |
Every year I celebrate something I like to call my unbirthday. Unlike the unbirthday of Lewis Carroll's Alice in Wonderland (which happens 364 days a year) this one happens only once. It real terms it is more important to me than my actual birthday or any other anniversary I have had in my life to date.

Every year I try to celebrate that date. Some years I do a better job than others in finding a good way to experience my joy at being alive. I'm here. As Granny Weatherwax would say 'I aten't dead yet'. In 2006 I somehow managed to not have anything planned except for a teammate's wedding celebration, which as recognition of other people's here-ness and affirmation of their life seemed to be good enough.
At the time I still didn't know who he was (there is no coach but coach and coach is his name). I had a vague idea that he had once been a whom and that I was incredibly lucky to be one of the few amateurs in our province who was picked for his once-a-year classes. I already knew about his first trip to the Olympics as an athlete. I didn't yet know about trips he'd made as a coach or that he wasn't actually retired just that he spent most of his time living here. I'd mention the sport but by now I'm somewhat well known in it from an organizational point of view and I prefer to remain anonymous. Going to his classes meant pain. It meant that I was doing little more than eat, sleep, train, and go for massage. I regularly skipped the graduate classes I was paying for because his classes were more important.
There I was coming home way too late at night because the massage place had gotten so accustomed to my falling asleep there that they would wait until they wanted to go to sleep to kick me out. In my almost deserted housing complex I see that one of the other foreign students is having a party.  Hey, I'm wide awake and it's 2am, can I join the party. Usually I'm not quite so forward but what the hell, it was already past midnight, my unbirthday had started already, and I was going to do something.
Sure. But, we're doing drugs. You want to come drug with us?
It was already past midnight. My unbirthday had already started. Of all days in the year that are available to get such an invitation, this was the only one where I was mentally and emotionally willing to just say yes.
I quickly went home, showered, brushed my hair, changed, and went over to the party.
I honestly cannot think of any other time in my life when I have been so reckless. Every other socially unacceptable thing I have chosen to do has been the result of weeks and sometimes even months of careful planning to make sure that it really is what I want to do.
Andy welcomed me. I remember handing over some kind of food gift. I'd also brought my wireless heartrate monitor. Didn't know if it would be of any use but it's got some cool geeky number things going on and well maybe one of them would like data as much I do. As most of them were already rolling at least a little and since they already knew me for a geek and an athlete they were warm and appreciative that I had been thoughtful enough to bring it but after being passed around the room once or twice it was abandoned in favor of more interesting playthings.
On subsequent trips I have chosen to wear the monitor and record my heart rate. I find it quite interesting that although I subjectively feel like my heart is racing it isn't actually. My resting heartrate goes up from a normal 65 beats per minute to around 95 beats per minute but when dancing I only go up to about 110 bpm instead of the 120 I would usually be at and no amount of trying has ever managed to force me above 135. I've often wondered about this and if this is one of the reasons why (as someone who can be quite an active dancer when sober) I am less tired than many of my non-athlete friends are after a night of E.
He looked me right in the eyes and said 'This is Ecstasy. Do you know what it is?'

I think I actually said 'bloody'.
He put the pill in the palm of my hand. There was a flower on the top. Again he looked me in the eyes. 'Have you ever heard of E?'
'I don't think so.'
'Do you know anything about the effects of E?'
'No.'
'Are you really sure you want to take this?'
I answered by putting it in my mouth and swallowing without water. Years back when I'd first gotten out of the hospital after the accident I was taking so many pills a day from blood thinners to iron pills, to narcotics for the pain and stool softeners to deal with the combined binding effect of iron and percocet. This plus my lifelong hayfever allergy meant I could take a pill like a pro. It wasn't like it was very big and I didn't need anything to make it go down.
At the time the texture reminded me of decongestant and the flavor reminded me of tylenol. Now I just think of it as the E flavor.
Coming from the vantage point of having absolutely no idea what E was, how it worked, or what it did as well as never having actually been high on anything other than an intensive care administered morphine drip I didn't really know what to expect nor what I wasn't exactly what you would call very surprised when absolutely nothing happened.
I went into the living room and sat down on a wicker legless chair and began to talk with someone. Probably Chinese Mike but it may have been one of my classmates. One boy came in off the balcony and said to me that the topic of the night's discussion was first sexual experiences and would I share mine.
I entered into the conversation with the frank knowledge that the drug was doing absolutely nothing. I was participating in this conversation and sharing information which even as I shared it still felt private and wrong to share with these almost strangers solely because the people I was with had decided that they were talking about that subject. I am, however, the kind of person who, if someone had made such a declaration could (would and has) entered into similar discussions when fully sober. It had nothing to do with the drug. Twenty minutes of anticipation about my first truly illegal drug use wasted. Guess it was a good thing I hadn't gone in for long term planning this time.
My first sexual experience was a carefully made decision with someone whom I wasn't extremely attracted to but was with solely because he wanted me and as the underage whizz kid I had a bad record of finding someone male and interesting who would continue to talk to me after he found out how old I was. I was in the middle of describing his reaction to discovering my real age (he knew I was in college, he just didn't know how many years of school I had skipped) when the E hit.
I feel kind of funny.
Someone handed me a bottle of water. 'Drink this. It will make you feel better.'
I drank it. As water in and of itself it did not actually make me feel better. However, because the high was just coming on it served as a catalyst on which to focus the belief that drinking it made me feel better. Therefore it made me feel better. It made me feel much better. I had never felt so much better before. This better was real betterness. It was the betterness of feeling better. Real better.
Someone asked me how I felt. 'Better. Much better. Much much better.' I repeated these words many times feeling the sound and taste of them. The rhythm of them. The way in which each letter turned itself into a syllable which strung themselves together to make words and the words turned into sentences with meaning. As a language and linguistics student and hobbiest this was something that was unimaginably cool.
And then Andy suggested I get up. Walk around the room. Touch things.
Getting up was hard enough. During the Summer of the Wheelchair someone big and strong offered me a hand up from where I was sitting on the floor at a party. He hadn't apparently realized just how much of my weight I was going to put on him in getting up and getting my crutches so I could get to my 'chair and he dropped me. It hurt. A lot. And since that time I have never been especially comfortable with allowing anyone to give me a hand for steadying balance and the very idea of having someone help me up off the ground is inordinately scary. Although I clearly needed the help because my balance was not going to let me get up on my own I also wasn't quite far enough into the E to trust these people who I had only known for a year at most to give me a hand.
And then I was up off the ground. Going to walk.
That day in December when I was 19 and my mom sat in her bedroom in the same black armchair she had sat in so many years before the first time that she held her arms out and had her baby clumsily take her first steps and walk across the room with no help at all wasn't as wobbly as this walk was. The world and my spatial perceptions of it simply refused to stay put.
One of the few things I regard as unfortunate about my now taking E somewhat more regularly is that I know what to look for as symptoms of my beginning to rush and although I have since experienced some pretty amazing highs have never again gone so completely from absolute nothing to a b s o l u t e e v e r y t h i n g.
I believe I said 'wow.' Of all of the many words that language has given us and of all the words I have in all the languages I have studied (whether I am fluent or not) there was no word that could better encompass what I was feeling. It was quite simply wow. That's the great thing about those Anglo-Saxon words. They don't make up a very large part of our modern vocabulary but they are the most important part. If it has four letters or less it probably came from Anglo-Saxon.
I walked around the rooms of the apartment. I tried many things.  I took a warm shower (which felt okay but not spectacular. later experiments tell me that cold showers feel spectacular). I stood in the kitchen eating habanero pepper paste straight out of the jar and reveling in the burn. I became entranced by the maps.
Maps are one of those things I like. I'm especially fond of accurate maps. On a later high at the same apartment I would spend nearly two hours correcting the map of the city that was taped to one wall. But nothing about the prettier than usual colors or the interesting way the first few maps now looked even more interesting than maps usually do prepared me at all for the map of China.
I fell in love with that map.
I stood inches away from where it was taped to the wall and looked at the map.
By moving closer and farther and farther and closer to the map I could make the Chinese names of the small towns and cities change perspective and go fuzzy. The lines vibrated. I found myself able to look at the map and know exactly where the borders of each province were and only that. I could identify every major city at a glance. I could ignore the roads and see only the great network of blue lines that represented bodies of water. Only I wasn't consciously switching back and forth from expressway to political boundary to river and back. The did it by themselves. The lines. One set would simply disappear to be replaced by another set. And while I knew that all of the sets were simultaneously present whichever set was currently there was the only one that was there. I was really into the map.
Someone came by and said that if I was so interested in the map, perhaps I would like to see what outside was like.
After three or four times of my wandering back to the map he finally had to physically pull me away from it to get me out the door.  Two of the partygoers wanted some privacy for a while and my insistence that I wouldn't bother them because I was busy with my map was not the answer the others wanted.
So they got me outside. On a nine person expedition to go down the street and buy bubblegum.
I possess the ability to move at a normal pace when rolling. It requires complete conscious control on my part and the absolute decision that for the duration of this set of movements I will if not be 'not high' at least be 'not as high'. This is not a skill I especially like utilizing nor was it a skill I had yet learned. Even now one of the frequent complaints among my drugfriends is how godawful slow I move when I'm rolling.
They'd gotten pretty far ahead of me and Andy and he decides that the two of us are going to sit down on some steps. He starts asking me questions about my accident and totally checking out my scars. I got to admit they are pretty cool scars and being high probably makes them all that much cooler looking. I don't recall if I asked him or if he volunteered to give me a foot massage. Sitting there on the steps with a celibate friend for whom I possessed no physical attraction I orgasmed again and again.
And that was before he started gently running his fingers along the nerve damaged areas.
I tried and failed to convince him to hit me in the big scar. It's a damn inconveniently placed one which I've been known to smack into things over the years and it has all sorts of interesting badly wired pieces of nerve damage under it. Slamming it into something can make my world dissolve into colors when nothing chemical is going on. He refused. Didn't want to hurt me. Wouldn't believe that he couldn't really hurt me. So far I've yet to find a friend who is willing to give me a great big punch in the middle of the funny nerve zone when I'm high but it is still something I have this strange urge to experience.
We went and got gum.
I asked every single guy there if he would kiss me.  They all refused. So I kissed Isabelle. On the lips. Very suddenly. Out of surprise she didn't pull back but I don't think she kissed back either. It was about as interesting as kissing a girl should be which is to say utterly boring. Maps are more interesting than girls. My analytical mind demands that I try again at a future time with one of my bisexual friends too make certain that kissing girls really is less fun than hugging trees but if ever I was certain that I'm straight that confirmed it.
(If you have never found yourself naked in a grove of bamboo at 3am in the morning reciting love poetry to the trees you have never really taken psychedelics.)
Andy suggested to me that I look up at the stars because stars are so beautiful when you are high. We walked out of the convenience store, pointed our heads up at the dark sky, and welcomed the sudden rain with shrieks of delight. We walked back to the apartment in the rain not caring that we got wet in the process and with everyone (who despite higher dosages had not been as high as me and came down quicker) keeping an eye on me to make sure I didn't jump in the mud puddles. No telling what kinds of broken glass or rusty metal could be lurking in mud puddles near the university.
The night went on and on and on and on with each fresh new discovery a new way of seeing just how beautiful the world was until finally it was sunrise and I went home to my own bed to go to sleep.
I've since taken E many times in a wide variety of settings. The trips have ranged from merely interesting to fantabulous. In the next few months I am preparing to take LSD for the first time and if I ever see Andy again I will be sure to let him know how glad I am that he welcomed me to the wide wild world of drugs.
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.


Dear Our Revolution Member,
We're excited to review your candidate nomination. We deeply appreciate the time, energy, and care you put into researching and nominating candidates.
Let's review the next steps from here.
As you know, the progressive movement is highly energized, and this is something we all should be proud of. As a result, we receive dozens of nominations each month, therefore, this process takes several weeks. Lastly, as I'm sure you can understand, we cannot endorse every nominated candidate.
Your candidate's application is now submitted in our system.
If the Political Committee votes to endorse the candidate, which we do not promise, please expect four to six weeks for a public endorsement to occur from the time your candidate submission is complete. Sometimes, unfortunately, it can take longer. We greatly appreciate your patience throughout this rigorous and very important process.
Solidarity,
The Our Revolution Team


New orders will dispatch within a week.
We are pleased to announce that new packaging has enabled us to reduce shipping costs to $100.
Please note all sales are final.
Need help placing your order. Call for support.
☎ 1-(408) 402-5432
At this time we are shipping exclusively to U.S. customers with standard UPS Ground delivery.
Please read ROTA's Terms & Conditions of sale policy prior to purchase. Follow link.
Please read ROTA's Liability Waiver policy prior to purchase. Follow link.
One year warranty from date of shipment. All warranty repairs will be carried by approved mechanics.


Welcome to Effective JavaScript and Testing
Core JavaScript Exercises:
Primitives
Control Flow
Parsing
Copy Function
Arrays
Closures
Strings
Flags
Events
Ajax
Advanced JavaScript Exercises:
Discography App
Popular JavaScript APIs
Popular JavaScript Frameworks
CSS Exercises and Examples:
Advanced Selectors
Background Images
Image Sprites
Blocks (and Inline)
The Box Model
Layout Lab
Flexible Box Sandbox
General Purpose
DOM Playground
JavaScript Sandbox


{% include head.html %}
{% include /es/nav.html %} {% include /es/header.html %} {% include /es/call-to-action.html %} {% include /es/services.html %} {% include /es/portfolio.html %} {% include /es/contact.html %} {% include scripts.html %} {% include /es/team.html %} {% include /es/aside.html %}


What's yo name?
What's yo number?
Preferred Locations
Good
Bad
Ugly
Romantic stuff
Soda
Tea
Kombucha
Adventure Stuff
Coffee
Tea
Kombucha
Find Your Match
Your Celbrity Date!
You get good Christopher Walkens.
You get bad Christopher Walkens.


First things first, we need to configure our development environments and verify that they are working as expected.
This project could be completed using a variety of toolchains and technologies, but we're going to be using the C++
programming language with Visual Studio on Windows and GCC on Linux. We'll be using the SDL library to handle input
and graphics. If you already have Visual Studio and GCC installed and configured, skip ahead to Step 2.
Windows: Setting up Visual Studio 2015 for C++ development on Windows 10
1) Download Visual Studio from
www.visualstudio.com.
I'll be using the Visual Studio 2015 Community Edition since it is free and does everything we need it to.
The installation process is lengthy, but fairly straightforward.
Make sure to select "Custom" for the installation type:
Then place a checkmark next to the option to install "Common Tools for Visual C++ 2015.":
2) Once the installation completes, open up Visual Studio. Create a new project, select the "Empty Project" template,
and name it "Hello World". Select the "Source Files" folder in the Solution Explorer, and press "Ctrl-Shift-a" to add a new item.
Add a "C++ File" and name it whatever you'd like, I named mine "Main.cpp". Type in the following code for a basic program:
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "Hello World!" << std::endl;
// Wait for user input. We only do this to keep the cmd window visible.
int tmp;
std::cin >> tmp;
}
3) Press "F5" to build and execute your program.
If you see something like the image below, you have a working Windows development environment.
If you get an error or some other output, start by doing some research on Google. If you still can't get it to work, leave a comment.


What is your name?:
What is your quest?: To seek the grail To chop down the tallest tree in the forrest with a herring To recruit knights for my Round Table
What is your favorite color?: Green Blue
One does not simply walk into Mordor: True False
Labels are boring: Melted cheese bavarian bergkase pecorino. Cheeseburger feta croque monsieur goat red leicester danish fontina cheesy grin lancashire. Danish fontina cheesecake cheddar airedale stilton bocconcini fondue cheese slices. Paneer bocconcini pecorino when the cheese comes out everybody's happy roquefort cow parmesan boursin. Danish fontina port-salut.
Select a thing: Orange Persimmon Grapefruit Ice cream


from Quackr.repositories.inmemory import MemberRepository from Quackr.exceptions import ValidationError
Put your hand up if you have an endpoint that looks like this:
@app.route('/register-member', methods=['GET', 'POST']) def register_user(): form = NewUserForm() if form.validate_on_submit(): new_user = User() form.populate_obj(new_user) db.session.add(new_user) db.session.commit() return redirect(url_for('user.profile', username=form.username.data)) return render_template('register_user.html', form=form)
My hand’s up. Maybe you use Django and simply call form.save() instead. Maybe you don’t use Python but that looks really friggin familiar.
It works, what’s the big deal?
Does it? Can you test it without with mock.patching everything? :( I can’t. And unit test doesn’t mean, “I don’t talk to the database…sometimes” or “Use SQLite instead of Postgres”.
@mock.patch('myapp.views.NewUserForm', form) @mock.patch('myapp.views.db', db) @mock.patch('myapp.views.redirect', redirect) @mock.patch('myapp.views.url_for', url_for) @mock.patch('myapp.views.render_template', render) def test_register_new_user(render, url_for, redirect, db, form): # TODO: Write test assert True
Worse off, unless you allow users with the same username, where’s that logic at? It’s in the form, isn’t it? I’ve done that. Shouldn’t the form library be concerned with, “Was the form filled out correctly?” and transforming a POST request into a data structure.
Feature Request: Create users from CLI tool
Say you have a CLI tool and now your issue tracker is filled with feature requests to create users from there. How can we fix this?
from myapp.cli.utils import fake_post_request from myapp.views import register_user as _register_user @cli.command def register_user(username, email, password): with fake_post_request(username=username, email=email, password=password): _register_user()
Of course, no one would do that. Especially me. Rather, there’s the sane option:
@cli.command def register_user(username, email, password): crutch = SimpleNamespace(username=username, email=email, password=password) form = NewUserForm(obj=crutch) if form.validate(): new_user = User() form.populate_obj(new_user) db.session.add(new_user) db.session.commit() cli.echo("Registered {0}".format(username)) cli.echo(form.errors)
git commit -m "Add CLI user creation" -m "Closes #341, #344, #345"; git push -u
Ignoring the fact that using a form library in a CLI tool is balls-to-the-wall bonkers, if we need to add a step between populating the user and persistence — say, send a verification email — there’s two places to change that now. Maybe on the CLI we just want to auto verify the user, but that’s still a concern we need to address.
The Big Reveal
@app.route('/register-member', methods=['GET', 'POST']) def register_user(): form = NewUserForm() if form.validate_on_submit(): command = RegisterUserCommand(username=form.username.data, email=form.email.data, password=form.password.data) current_app.command_bus.execute(command) return redirect(url_for('user.profile', username=form.username.data)) return render_template('register_user.html', form=form)
That’s it, boring message passing. The bits under the surface aren’t even that interesting, honestly. It’s just a service layer and a dictionary. But the sheer mundaneness of it all is what’s actually interesting — to me at least.
Services
I was going to write something about entities and models here. But I don’t think the actual Member entity should have any say over the registration. Having a rule like, “Can’t have the same username as someone else” is something you want to keep close to your domain, but it’s more “Well, by the way…” than essential logic.
Service classes are great at these in-between rules. They’re unafraid to take on extra logic that doesn’t seem to fit somewhere else. We just have to be careful not to turn them into a pandora’s box, i.e. a monstrous service layer rather than many small, cohesive classes.
So what would a registration service look like?
class RegistrationService: def __init__(self, member_repository, password_hasher): self._repository = member_repository self._password_hasher = password_hasher def register_user(self, username, email, password): password = self._password_hasher(password) new_member = self._repository.create(username, email, password) self._validate_member(new_member) self._repository.persist(new_member) def _validate_user(self, new_member): if self._repository.find_by_username(new_member.username): raise ValidationError('Username in use already') if self._repository.find_by_email(new_member.email): raise ValidationError('Email in use already')
If we need to add another rule or cause a side-effect — sending that verification email — there’s a distinct place for it. We can also immediately begin using this class in both the web UI and the CLI tool. Our form library goes back to doing what it’s best at — validating a form — and our CLI tool stops using the form library.
Another benefit is testing this. Since data access is hidden behind a repository, it’s trivial to fake. You don’t need mock.patch. You don’t even have to use mock at all. That said, using mock.create_autospec for creating easy fakes is pretty handy:
def test_registration_fails_with_duplicated_email(): repository = mock.create_autospec(MemberRepositoryABC) repository.find_by_username.return_value = False repository.find_by_email.return_value = True service = RegistrationService(repository, hash_password) with pytest.raises(ValidationError) as excinfo: service.register_user('fred'<EMAIL_ADDRESS>'fredpass') assert 'Email in use already' == excinfo.value.args[0] def test_registration_fails_with_duplicated_username(): repository = mock.create_autospec(MemberRepositoryABC) repository.find_by_username.return_value = True service = RegistrationService(repository, hash_password) with pytest.raises(ValidationError) as excinfo: service.register_user('fred'<EMAIL_ADDRESS>'fredpass') assert 'Username in use already' == excinfo.value.args[0] def test_registration_hashes_password(): repository = mock.create_autospec(MemberRepositoryABC) repository.find_by_username.return_value = False repository.find_by_email.return_value = False service = RegistrationService(repository, hash_password) service.register_user('fred'<EMAIL_ADDRESS>'fredpass') assert repository.create.call_args == mock.call('fred'<EMAIL_ADDRESS>hash_password('fredpass'))
You get the idea. We can set up conditions to test exactly what we want. And since we can write these tests, there’s immediate design feedback: Validation should be its own thing. Which makes the service layer more about orchestration and less about logic. But that’s a different topic for a different time.
Honestly, this is a fine place to stop. Especially if you’re building a relatively simple application. However, if this produces a degree of coupling that makes you uncomfortable, or if your registration service becomes involved enough that you need stick a facade in front of it, you need to grep -r RegistrationService myapp to make sure you change all the references to it.  It has command types as keys and their handlers as values. You might be inclined to insert a handler layer between the services and the command bus, but if it’s not doing anything (dispatching domain events, for example), I think it’s kind of pointless. Rather, I like mapping bound methods directly to commands.
def _get_obj_type(obj): if isinstance(obj, type): return obj return type(obj) class HandlerNotFound(Exception): pass class CommandBus: def __init__(self): self._mapping = {} def register(self, command, handler): self._mapping[_get_obj_type(command)] = handler def execute(self, command): command_type = _get_obj_type(command) try: handler = self._mapping[command_type] except KeyError: raise HandlerNotFound("Handler not found for {0!r}".format(command_type)) from None else: handler(*comand)
The only thing missing now is the actual commands. I like using namedtuple for this. They’re lightweight, immutable and provide dotted access if we need it.
RegisterUserCommand = namedtuple('RegisterUserCommand', ['username', 'email', 'password'])
Wiring it all up
Wiring up this example is really easy. The dependencies are straight forward and don’t form any cycles.
from hashlib import sha256 def hash_password(password): return sha256(password.encode()).hexdigest() registar = RegistrationService(MemberRepository(), hash_password) bus = CommandBus() bus.register(RegisterUserCommand, registar.register_user)
But for an actual application, you’ll likely want to use some sort of factory. Many Flask apps already follow this pattern. There’s a create_app function that creates the initial application and then calls things like register_blueprints and initialize_extensions. Following the same pattern here could be beneficial.
That’s it. That’s the heart of all this. I do have some thoughts and then some more code at the bottom. But if you’re eyes have glazed over, it might a good time to head over to /r/pitbulls for a little while.
Thoughts
This isn’t new. I don’t think I’m a revolutionary or even going, “I’m so stinking smart.” I’m just a guy, dumb as a box of rocks, trying to figure out something better, trying to figure out, “Why the heck are my tests hard to write and why aren’t they reliable?” I do think there’s merit here.
This style of architecture allows loose coupling between the UI and the logic. Our web UI and CLI tool simply need to drop a command off onto a dispatcher. They only thing they’re really worried about is building that command.
This has a very interesting consequence: inputs become better defined. What’s required for registering a user — or anything else — is strictly defined by the command. The command can’t be created without a username, email and password. And if that’s all that’s needed to create the command, our form or CLI inputs don’t need to grow beyond that. That feeling of dread that washes over me when I look at my User model and my form library and wonder, “What the hell do I do?” is gone.
By using service layers, we provide a home for things like validation, registration, and any other in-between logic instead of it being shoved into a model or controller or even view!† By giving things homes, we must also give them names. I feel the same way towards repositories, they give a home and a name to all the random queries that just chill out in the application. I’m not knocking on SQLAlchemy, Django’s ORM or any other ORM, they’re excellent tools but I’d much rather support what I need, rather than the whole shebang.
Adding new functionality isn’t terrible difficult either. If there’s a need to create a fully fleshed out member (set the permission level, add groups, etc) from the admin panel, it’s a matter of figuring out if this fits into the current scope or if manual_create_user needs to be created.
But, it’s not all sunshine and rainbows, though — there does need to be rain for rainbows.
Is it really that loosely coupled? Our command is coupled to the signature of RegistrationService.register_user by both the number and arrangement of arguments because we simply unravel the command. In turn, our UI is coupled to the structure of the command. And adding an new argument means cutting across all these layers at once. This sort of coupling can’t be removed by a completely generic solution.
There’s also the real chance that by moving towards this architecture, code goes from spaghetti to lasagna. From no structure to too much structure. This is my biggest worry, honestly. If we need to add a verify flag to this code we need to change in three different places: UI, RegisterNewUserCommand and RegistrationService.register_user. It could be argued that a change like this is important enough to warrant changing all those things. But if this pattern repeats again and again, even for trivial changes then it’s worth reevaluating choices.
For these problems, I don’t have a good solution. A smarter command bus or more flexible command data structure could be the answer. Maybe that introduces new issues and problems. A dotted dictionary immediately seems like a good fix, but how do we determine what command it represents? Subclassing it for every command seems silly, but providing a name attribute could conflict with potential values. There’s also the potential for filling it out wrong. Like I said, I don’t have a good solution. My best advice is do what fits your brain the best.
Other things
Not enough code? Well, I got some more right here.
Even though our command bus doesn’t return anything, it does allow exceptions to propagate out of it. It’d be nice if we could translate that error back into a form error. One change might be adding an attribute to the ValidationError that allows specifying which field caused the error:
class ValidationError(Exception): def __init__(self, msg, field): self.msg = msg self.field = field super().__init__(msg, field)
You could argue that this is a UI concern leaking into the domain. And there’s some definite merit to that, but a small allowance like this creates a better UI experience — or at least better UI code. Praciticality beats Purity. It’s much simpler to yank this field off rather than attempting to parse an error message to determine where to place the error.
And even though the controller above is nice and tight, it can be improved. I think this is a great use case for Flask’s class based views.
class RegisterUser(MethodView): def __init__(self): self.form = NewUserForm() def get(self): return self._render() def post(self): if self.form.validate_on_submit(): return self._pass_command() else: return self._render() def _pass_command(self): command = RegisterUserCommand(self.form.username.data, self.form.email.data, self.form.password.data) try: current_app.command_bus.execute(command) except ValidationError as e: self.form.errors[e.field].append(e.msg) return self._render() else: return self._redirect() def _render(self): return render_template('user_registration.html', form=self.form) def _redirect(self): return redirect(url_for('user.profile', username=self.form.username))
Yes, it’s more code than before. But it’s simpler code than before. We’ve also gained the feature of rendering errors from the command back to the user and letting them know, “Hey, that email’s taken.” The controller’s only actual logic is two conditional branches, which are really easy to check. There’s only five test cases that can be written here.
The command bus can be swapped out easily, or wrapped up in a decorator (not the @whatever kind) to provide additional behavior. Maybe you want to log every command that comes down the pipe. Or maybe you want to push some commands out of process or even submit them as JSON to a third party service. If your logic is tightly coupled to your UI, this becomes a nightmare to do.
Thanks, Attributions and Further Consumption
To the PHP community, in particular Ross Tuck, Chris Fidao and Shawn McCool were huge inspirations for this.
In the Ruby world, Matt Wynne for his Hexagonal Rails talk at GoRuCo 2012 and Sandi Metz’s All the Little Things that provided the inspiration for the “talk-back” controller above. There’s countless others here as well.
Alistair Cockburn’s original hexagonal architecture post.
And to all the DDD, XP and Clean Code people I’ve shamelessly stolen ideas from.
†: As an aside, let’s just recognize that Flask is MVC, or atleast VC. Whatever most people call the “view” is actually the controller and the “template” is actually just part of the view — the whole view being the Response object generated: body, headers, status code.
I spilled my brains, spill some of yours.


Welcome to Gilligang's Island, the most luxurious private island resort on Earth!
Book a once in a lifetime experience today!
Accomodations
Activities
Travel Arrangements
Images
Contact Information


Which Guitar Player Are you?
What is your favorite Fruit?
Javascripts is so important to build website
JavaScript - Document Object Model or DOM. ... A Document object represents the HTML document that is
displayed in that window. The Document object has various properties that refer to other objects which
allow access to and modification of document content.
C# is a fanstactic language to build app
C# provides a mechanism for programmers to document their code using a special comment syntax that
contains XML text. In source code files, comments having a certain form can be used to direct a tool to
produce XML from those comments and the source code elements, which they precede. Comments using such
syntax are called
Python is a faster language to learn
Python is also usable as an extension language for applications written in other languages that need
easy-to-use scripting or automation interfaces. Python is widely considered as the preferred language
for teaching and learning Ml (Machine Learning). Few simple reasons are: >It's simple to learn


Description Project List
Classification
Build
Run
Project Team
AWL-FS-EQU-COO-OPE-OC-PM-PT3
AWL-FS-EQU-COO-OPE-OC-PM-PM
AWL-FS-EQU-COO-OPE-OC-PM
AWL-EQWL-COO-OPE-OSO-IA-CS
AWL-EQWL-COO-OPE-OSO-IA-CS
AWL-EQWL-COO-OPE-TE-S2-OT4
Firstname
Lastname
Internal Code To
DGT
SBA
CED
PT1
MRP
EHT
Domain
Executive/Sponsor name
Type
Large
Medium
Small
Priority
0
1
2
3
9
Country
FRA
BEL
DEU
ITA
NLD
ESP
IPP Tag
?
EW17-18A
EW17-18B
EW17-18D
Internal Code To
OTP Code(NESSIE)
OTP Title
Subtitle(Project,Stage,Other)
Project Constraints and milestones
Begin
Initial Go live
Project Follow-up
Status
Engagement
To Start
Ongoing
Pending
Standby
BuildToRun
To close
Closed
Cancelled
Work Priority
0
1
2
3
R/A/G Status
Risk Level
0-Null
Medium
high
Critical
Initial forecast
Build Rate
End
Reestimated GO Live
Initial Technical Delivery milestones
DEV
RCI/IUA
RCE/EUA
RCT/TUA
Pre-PROD
PROD
DRS
DRS Test
Technical Delivery milestones
DEV
RCI/IUA
RCE/EUA
RCT/TUA
Pre-PROD
PROD
DRS
DRS Test
Comments/remarks


{% extends 'sproject_manager/base.html' %} {% block content %}
Looking at details for {{ task.name }}
Are you sure you want to delete {{ task.name }}?


Merge master and another branch¶
1.  Merge branch into master¶
create new branch from master
git checkout master
git pull
git checkout -b fusion_branch
2.1. case 1:
git merge --no-commit devices
git status
git add <file names for adding to commit>
git commit -m <commit name>
git push --set-upstream origin fusion_branch
create pull request to merge fusion_branch into master
2.1. case 2:
add to commit particular folders/files
git checkout origin/devices --Heedbook/HbApi
git checkout origin/devices --Heedbook/HbOperations
open project in IDE (VS, VS Code) remove settings from commit
make pull request to merge your stages into master from fusion_branch


Banana Units
Bananas
Bananas/Second
Cubic Banans
Banana Time
Nanners
Banana Heavies
Calculate
Metric Units
Meters
Meters/Second
Milliliters
Seconds
Kilojoules
Grams
Calculate
Imperial Units
Feet
Feet/second
Cups
Seconds
Kilojoules
Ounces
Calculate


{% extends 'base.html' %}
{% load widget_tweaks %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Dashboard{% endblock %}
{% block content %}
Total number of patients: {{ count }} Number of appointments in the next week: {{ appointment_next_week }} Number of appointments in the week after next: {{ appointment_next_week2 }}General statistics:


Firefox
Mozilla Firefox (or simply Firefox) is a free and open-source web browser developed by The Mozilla Foundation and its subsidiary, Mozilla Corporation. Firefox is available for Windows, macOS, Linux, BSD, illumos and Solaris operating systems. Its sibling, Firefox for Android, is available for Android. Firefox uses the Gecko layout engine to render web pages, which implements current and anticipated web standards. In 2016, Firefox began incorporating new technology under the code name Quantum to promote parallelism and a more intuitive user interface. An additional version, Firefox for iOS, was released on November 12, 2015. Due to platform restrictions, it uses the WebKit layout engine instead of Gecko, as with all other iOS web browsers.
Firefox was created in 2002 under the codename "Phoenix" by the Mozilla community members who desired a standalone browser, rather than the Mozilla Application Suite bundle. During its beta phase, Firefox proved to be popular with its testers and was praised for its speed, security, and add-ons compared to Microsoft's then-dominant Internet Explorer 6. Firefox was released on November 9, 2004, and challenged Internet Explorer's dominance with 60 million downloads within nine months. Firefox is the spiritual successor of Netscape Navigator, as the Mozilla community was created by Netscape in 1998 before their acquisition by AOL.
Firefox usage grew to a peak of 32% at the end of 2009, temporarily making version 3.5 the world's most popular browser. Usage then declined in competition with Google Chrome. As of March 2018, Firefox has 11.6% usage share as a "desktop" browser, according to StatCounter, making it the second-most popular such web browser; usage across all platforms is lower at 5.44% (and then 4th-most popular overall). Firefox is still the most popular desktop browser in Cuba (even most popular overall at 62.77%) and Eritrea with 78.3% and 91% of the market share, respectively. According to Mozilla, as of December 2014, there were half a billion Firefox users around the world.
Previous


JavaScript Date Picker Summary
The JavaScript Date Picker is a standalone script you can use to add a date-selector with a pop-out calendar to your pages..
Please read the date picker documentation for instructions on how to use the plugin.
This is the live demo, view the documentation. Written by Steve Fenton.
The JavaScript Date Picker is a standalone script you can use to add a date-selector with a pop-out calendar to your pages..
Please read the date picker documentation for instructions on how to use the plugin.