On emoncms, is there a way to exclude small values being reported by the CT, which I assume are noise, before the Input gets put into a Feed.
So a function like if less than 5W, ignore input.
I know I can do this within the sketch, but it seems like unnecessary processing.
Re: Exclude Input CT noise values before it is posted to a Feed
Afraid not, although I agree that it's a worthwhile suggestion.
I've coded this within the emonTX sketch, to overcome false readings delivered by my solar inverter during the night, which you have already considered...
Paul
Re: Exclude Input CT noise values before it is posted to a Feed
How do you work out it is night, in your sketch? Or do you just work on threshold?
Have you connected a clock module to your emontx?
Re: Exclude Input CT noise values before it is posted to a Feed
You can get really strange readings from invertors when they go into sleep mode, so I added a line of code to disregard negative readings, also readings less than 20W, so not a perfect solution, but better than seeing -20W in a graph at 2am in the morning.
Re: Exclude Input CT noise values before it is posted to a Feed
OK, I thought you were doing something more creative with a Real Time Clock module attached and excluding the small values only between two time periods.
But I do agree that we need some conditional calibration at the emoncms level rather than suppressing the values at source. emoncms knows the time, so that should be easy too. i.e. only apply correction if time between 2130 - 0530
Re: Exclude Input CT noise values before it is posted to a Feed
I doubt whether using a timer would be effective, because inverters go to sleep and wake up at different times depending upon sunlight according to the time of year, and also factor in weather conditions and DST. In mid winter, I've known my inverter not even bother waking up all day!
I don't think that the 20W threshold makes much difference to accuracy, because I recall when setting this figure, I had noticed that 20W was probably the absolute minimum that it would supply before shutting down anyway.
See this post re power factor.
Paul
Re: Exclude Input CT noise values before it is posted to a Feed
It's extremely strange but the noise level being picked up on my solar CT is less than 1W, but my diversion CT is often picking up between 5-6W even when I know there is no diversion taking place. Ofcourse this is much better because previously with a long CT cable wrapped up next to another power cable it was picking up in excess of 12-15Ws.
So I do think we need some exclusion ability in emoncms so that we can exclude values on different feeds below a certain level. The Calibration function isn't really useful here.


|
|
bool | CreateDeviceObjects () |
| |
|
void | CreateFontsTexture () |
| |
|
void | Init (const Window &window) |
| |
|
void | InvalidateDeviceObjects () |
| |
|
void | NewFrame () |
| |
|
bool | ProcessEvent (SDL_Event *_event) |
| |
|
void | Shutdown () |
| |
| virtual void | OnEvent (Event::SDLEventArg eventArg) |
| | Overridable function for custom logic. More...
|
| |
|
| EventBase () |
| | Event lives until its parenting object dies.
|
| |
|
| ~EventBase () |
| | Event dies along with parenting object.
|
| |
|
|
static const char * | GetClipboardText (void *) |
| |
|
static UserInterfaceImpl & | GetInstance () |
| |
|
static void | Render () |
| |
| static void | RenderDrawLists (ImDrawData *draw_data) |
| |
|
static void | SetClipboardText (void *, const char *text) |
| |
|
|
double | m_Time |
| |
|
bool | m_MousePressed [3] |
| |
|
float | m_MouseWheel |
| |
|
UInt32 | m_FontTexture |
| |
|
Int32 | m_ShaderHandle |
| |
|
Int32 | m_VertHandle |
| |
|
Int32 | m_FragHandle |
| |
|
Int32 | m_AttribLocationTex |
| |
|
Int32 | m_AttribLocationProjMtx |
| |
|
Int32 | m_AttribLocationPosition |
| |
|
Int32 | m_AttribLocationUV |
| |
|
Int32 | m_AttribLocationColor |
| |
|
UInt32 | m_VboHandle |
| |
|
UInt32 | m_ElementsHandle |
| |
|
Window | m_window |
| |
◆ OnEvent()
◆ RenderDrawLists()
| static void ace::UserInterfaceImpl::RenderDrawLists |
( |
ImDrawData * |
draw_data | ) |
|
|
inlinestatic |
if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND); if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE); if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST); if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST);
The documentation for this class was generated from the following file:
- src/Ace/UserInterface.cpp


Class Border
A simple border composed of one ore more ICurve2D objects.
A Border is always invariant, i.e. you annot change it (like System.String).
If a border is closed, then it is oriented counterclockwise. A border may be
produced by the BorderBuilder object (or by its constructors).
Inheritance
System.Object
Border
Implements
System.Runtime.Serialization.ISerializable
System.Runtime.Serialization.IDeserializationCallback
Inherited Members
System.Object.Equals(System.Object)
System.Object.Equals(System.Object, System.Object)
System.Object.GetHashCode()
System.Object.GetType()
System.Object.MemberwiseClone()
System.Object.ReferenceEquals(System.Object, System.Object)
System.Object.ToString()
Assembly: CADability.dll
Syntax
[Serializable]
public class Border : ISerializable, IDeserializationCallback
Constructors
|
Improve this Doc
View Source
Border(ICurve2D)
Declaration
public Border(ICurve2D onlySegment)
Parameters
| Type |
Name |
Description |
| ICurve2D |
onlySegment |
|
|
Improve this Doc
View Source
Border(ICurve2D[])
Constructs a Border from a list of ICurve2D objects. The objects must be in the
correct order and must be continous, i.e. EndPoint of ICurve2D[i] must be
equal to Startpoint of ICurve2D[i+1]. Equality refers to Precision.IsEqual().
It will be checked automatically, whether the border is closed and if so,
it will be oriented counterclockwise.
Declaration
public Border(ICurve2D[] segments)
Parameters
| Type |
Name |
Description |
| ICurve2D[] |
segments |
list of curves to make the border
|
|
Improve this Doc
View Source
Border(ICurve2D[], Boolean, Boolean)
Create a border with the provided segments assumed to be in correct order and orientation. If forceConnected
is true, the border will be closed.
Declaration
public Border(ICurve2D[] segments, bool forceConnected, bool flatten = true)
Parameters
| Type |
Name |
Description |
| ICurve2D[] |
segments |
The oriented and ordered segments
|
| System.Boolean |
forceConnected |
True: border will be closed even if segments aren't connected at the end
|
| System.Boolean |
flatten |
|
|
Improve this Doc
View Source
Border(GeoPoint2D[])
Declaration
public Border(GeoPoint2D[] polyline)
Parameters
|
Improve this Doc
View Source
Border(out Boolean, ICurve2D[])
Declaration
public Border(out bool reversed, ICurve2D[] segments)
Parameters
| Type |
Name |
Description |
| System.Boolean |
reversed |
|
| ICurve2D[] |
segments |
|
|
Improve this Doc
View Source
Border(SerializationInfo, StreamingContext)
Constructor required by deserialization
Declaration
protected Border(SerializationInfo info, StreamingContext context)
Parameters
| Type |
Name |
Description |
| System.Runtime.Serialization.SerializationInfo |
info |
SerializationInfo
|
| System.Runtime.Serialization.StreamingContext |
context |
StreamingContext
|
Properties
|
Improve this Doc
View Source
Area
Declaration
public double Area { get; }
Property Value
| Type |
Description |
| System.Double |
|
|
Improve this Doc
View Source
Count
Declaration
public int Count { get; }
Property Value
| Type |
Description |
| System.Int32 |
|
|
Improve this Doc
View Source
EndPoint
Declaration
public GeoPoint2D EndPoint { get; }
Property Value
|
Improve this Doc
View Source
Extent
Declaration
public BoundingRect Extent { get; }
Property Value
|
Improve this Doc
View Source
IsClosed
Declaration
public bool IsClosed { get; }
Property Value
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
IsEmpty
Declaration
public bool IsEmpty { get; }
Property Value
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
Item[Int32]
Declaration
public ICurve2D this[int index] { get; }
Parameters
| Type |
Name |
Description |
| System.Int32 |
index |
|
Property Value
|
Improve this Doc
View Source
Length
Declaration
public double Length { get; }
Property Value
| Type |
Description |
| System.Double |
|
|
Improve this Doc
View Source
SomeInnerPoint
Declaration
public GeoPoint2D SomeInnerPoint { get; }
Property Value
|
Improve this Doc
View Source
StartPoint
Declaration
public GeoPoint2D StartPoint { get; }
Property Value
Methods
|
Improve this Doc
View Source
AddToGraphicsPath(GraphicsPath, Boolean)
Declaration
public void AddToGraphicsPath(GraphicsPath path, bool counterClockWise)
Parameters
| Type |
Name |
Description |
| System.Drawing.Drawing2D.GraphicsPath |
path |
|
| System.Boolean |
counterClockWise |
|
|
Improve this Doc
View Source
AsPath()
Returns this Border as a Path2D object.
Declaration
Returns
|
Improve this Doc
View Source
ChangeCyclicalStart(Int32)
Declaration
public void ChangeCyclicalStart(int newStartIndex)
Parameters
| Type |
Name |
Description |
| System.Int32 |
newStartIndex |
|
|
Improve this Doc
View Source
Clip(ICurve2D, Boolean)
Declaration
public double[] Clip(ICurve2D toClip, bool returnInsideParts)
Parameters
| Type |
Name |
Description |
| ICurve2D |
toClip |
|
| System.Boolean |
returnInsideParts |
|
Returns
| Type |
Description |
| System.Double[] |
|
|
Improve this Doc
View Source
Clone()
Declaration
Returns
|
Improve this Doc
View Source
CounterClockwise(ICurve2D[])
Declaration
public static bool CounterClockwise(ICurve2D[] curves)
Parameters
Returns
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
CounterClockwise(List<ICurve2D>)
Declaration
public static bool CounterClockwise(List<ICurve2D> curves)
Parameters
| Type |
Name |
Description |
| System.Collections.Generic.List<ICurve2D> |
curves |
|
Returns
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
DirectionAt(Double)
Declaration
public GeoVector2D DirectionAt(double par)
Parameters
| Type |
Name |
Description |
| System.Double |
par |
|
Returns
|
Improve this Doc
View Source
DistanceAtDirection(Border, GeoVector2D)
Calculates the distance between this Border and the other
Border respecting the given direction dir
.
Or in other words: how far can you move this Border in the direction dir until it touches the other border.
The result may be double.MaxValue, which means they will never touch each other or negative, if you would have to move this
border in the opposite direction of dir.
Declaration
public double DistanceAtDirection(Border other, GeoVector2D dir)
Parameters
| Type |
Name |
Description |
| Border |
other |
The border to meassure the distance to
|
| GeoVector2D |
dir |
Direction for the distance
|
Returns
| Type |
Description |
| System.Double |
Distance
|
|
Improve this Doc
View Source
FromUnorientedList(ICurve2D[], Boolean)
segments enthält die Kurven zwar in richtiger Reohenfolge doch u.U. in falscher Richtung.
Hier wird also vor dem Erzeugen der Border ggf. umorientiert
Declaration
public static Border FromUnorientedList(ICurve2D[] segments, bool forceClosed)
Parameters
| Type |
Name |
Description |
| ICurve2D[] |
segments |
|
| System.Boolean |
forceClosed |
|
Returns
|
Improve this Doc
View Source
GetClonedSegments()
Declaration
public ICurve2D[] GetClonedSegments()
Returns
|
Improve this Doc
View Source
GetIntersectionPoints(ICurve2D)
Returns a list of all intersectionpoints of this border with the given curve.
Some intersectionpoints may be found twice, if the Curve passes through a vertex
of this border. The par1 member of the intersectionpoint is the parameter
of this border (0.0<=par1<=this.Count) the par2 member is the parameter
of the curve (0.0<=par1<=1.0).
Declaration
public GeoPoint2DWithParameter[] GetIntersectionPoints(ICurve2D IntersectWith)
Parameters
| Type |
Name |
Description |
| ICurve2D |
IntersectWith |
curve to intersect this border with
|
Returns
|
Improve this Doc
View Source
GetIntersectionPoints(ICurve2D, Double)
Declaration
public GeoPoint2DWithParameter[] GetIntersectionPoints(ICurve2D IntersectWith, double precision)
Parameters
| Type |
Name |
Description |
| ICurve2D |
IntersectWith |
|
| System.Double |
precision |
|
Returns
|
Improve this Doc
View Source
GetIntersectionPoints(Border)
Declaration
public GeoPoint2DWithParameter[] GetIntersectionPoints(Border IntersectWith)
Parameters
| Type |
Name |
Description |
| Border |
IntersectWith |
|
Returns
|
Improve this Doc
View Source
GetIntersectionPoints(Border, Double)
Declaration
public GeoPoint2DWithParameter[] GetIntersectionPoints(Border IntersectWith, double precision)
Parameters
| Type |
Name |
Description |
| Border |
IntersectWith |
|
| System.Double |
precision |
|
Returns
|
Improve this Doc
View Source
GetMinDistance(Border)
Declaration
public double GetMinDistance(Border Other)
Parameters
| Type |
Name |
Description |
| Border |
Other |
|
Returns
| Type |
Description |
| System.Double |
|
|
Improve this Doc
View Source
GetModified(ModOp2D)
Declaration
public Border GetModified(ModOp2D m)
Parameters
Returns
|
Improve this Doc
View Source
GetObjectData(SerializationInfo, StreamingContext)
Implements System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)
Declaration
public void GetObjectData(SerializationInfo info, StreamingContext context)
Parameters
| Type |
Name |
Description |
| System.Runtime.Serialization.SerializationInfo |
info |
The System.Runtime.Serialization.SerializationInfo to populate with data.
|
| System.Runtime.Serialization.StreamingContext |
context |
The destination (System.Runtime.Serialization.StreamingContext) for this serialization.
|
|
Improve this Doc
View Source
GetParallel(Double, Boolean, Double, Double)
Yields a set of borders that are parallel to this border with a given distance. Positive
distance yields a border to the right side (or outside if closed) of this border, negative
to the left side or inside. In some cases there is no soltuion (e.g. an inside parallel
border of a closed border must have a distance less than half of the diameter of the border)
In other cases there may be a set of solutions, e.g. if the border is not convex.
Declaration
public Border[] GetParallel(double dist, bool approxSpline, double precision, double roundAngle)
Parameters
| Type |
Name |
Description |
| System.Double |
dist |
the distance of the desired parallel border
|
| System.Boolean |
approxSpline |
|
| System.Double |
precision |
|
| System.Double |
roundAngle |
|
Returns
| Type |
Description |
| Border[] |
array of parallel borders (maybe empty)
|
|
Improve this Doc
View Source
GetParameter(GeoPoint2D)
Liefert den Parameter des Punktes p auf den Bahnkurven des Borders. Für jede
Kurve durchläuft der Parameter Werte von 0.0 (Startpunkt) bis 1.0 (Endpunkt)
Das Ergebnis dieser Methode ist dieser Parameter + Index der betreffenden Kurve.
Declaration
public double GetParameter(GeoPoint2D p)
Parameters
| Type |
Name |
Description |
| GeoPoint2D |
p |
Punkt, zu dem der Parameter gesucht ist, muss auf dem Rand liegen
|
Returns
| Type |
Description |
| System.Double |
der Parameter
|
|
Improve this Doc
View Source
GetPart(Double, Double, Boolean)
Declaration
public ICurve2D[] GetPart(double startParam, double endParam, bool forward)
Parameters
| Type |
Name |
Description |
| System.Double |
startParam |
|
| System.Double |
endParam |
|
| System.Boolean |
forward |
|
Returns
|
Improve this Doc
View Source
GetPosition(BoundingRect)
Returns the Border.Position of the given Point relative to this Border.
If the outline of the border interferes with a square around p (width and height
is 2*precision), the result will be OnCurve.
Declaration
public Border.Position GetPosition(BoundingRect rect)
Parameters
Returns
| Type |
Description |
| Border.Position |
Inside, Outside or OnCurve (on the outline of this border)
|
|
Improve this Doc
View Source
GetPosition(GeoPoint2D)
Declaration
public Border.Position GetPosition(GeoPoint2D p)
Parameters
| Type |
Name |
Description |
| GeoPoint2D |
p |
The Point to test
|
Returns
| Type |
Description |
| Border.Position |
Inside, Outside or OnCurve (on the outline of this border)
|
|
Improve this Doc
View Source
getRoughArea()
Declaration
protected double getRoughArea()
Returns
| Type |
Description |
| System.Double |
|
|
Improve this Doc
View Source
GetSelfIntersection(Double)
Declaration
public double[] GetSelfIntersection(double precision)
Parameters
| Type |
Name |
Description |
| System.Double |
precision |
|
Returns
| Type |
Description |
| System.Double[] |
|
|
Improve this Doc
View Source
IsInside(ICurve2D[], GeoPoint2D)
Returnes true, when the provided point is inside the loop of curves.
When the curves are oriented clockwise, true means outside (the hole)
Declaration
public static bool IsInside(ICurve2D[] curves, GeoPoint2D toTest)
Parameters
Returns
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
IsPointOnOutline(ICurve2D[], GeoPoint2D, Double)
Declaration
public static bool IsPointOnOutline(ICurve2D[] curves, GeoPoint2D toTest, double precision)
Parameters
Returns
| Type |
Description |
| System.Boolean |
|
|
Improve this Doc
View Source
MakeCircle(GeoPoint2D, Double)
Declaration
public static Border MakeCircle(GeoPoint2D center, double radius)
Parameters
| Type |
Name |
Description |
| GeoPoint2D |
center |
|
| System.Double |
radius |
|
Returns
|
Improve this Doc
View Source
MakeLongHole(ICurve2D, Double)
Declaration
public static Border MakeLongHole(ICurve2D centerCurve, double radius)
Parameters
| Type |
Name |
Description |
| ICurve2D |
centerCurve |
|
| System.Double |
radius |
|
Returns
|
Improve this Doc
View Source
MakeLongHole(GeoPoint2D, GeoPoint2D, Double, Double)
Declaration
public static Border MakeLongHole(GeoPoint2D startPoint, GeoPoint2D endPoint, double startRadius, double endRadius)
Parameters
| Type |
Name |
Description |
| GeoPoint2D |
startPoint |
|
| GeoPoint2D |
endPoint |
|
| System.Double |
startRadius |
|
| System.Double |
endRadius |
|
Returns
|
Improve this Doc
View Source
MakeRectangle(Double, Double, Double, Double)
Declaration
public static Border MakeRectangle(double left, double right, double bottom, double top)
Parameters
| Type |
Name |
Description |
| System.Double |
left |
|
| System.Double |
right |
|
| System.Double |
bottom |
|
| System.Double |
top |
|
Returns
|
Improve this Doc
View Source
PointAt(Double)
Declaration
public GeoPoint2D PointAt(double par)
Parameters
| Type |
Name |
Description |
| System.Double |
par |
|
Returns
|
Improve this Doc
View Source
Project(Plane, Plane)
Declaration
public Border Project(Plane fromPlane, Plane toPlane)
Parameters
| Type |
Name |
Description |
| Plane |
fromPlane |
|
| Plane |
toPlane |
|
Returns
|
Improve this Doc
View Source
Recalc(out Boolean)
Declaration
protected void Recalc(out bool reversed)
Parameters
| Type |
Name |
Description |
| System.Boolean |
reversed |
|
|
Improve this Doc
View Source
RecalcArea()
Declaration
protected double RecalcArea()
Returns
| Type |
Description |
| System.Double |
|
|
Improve this Doc
View Source
RemoveSmallSegments(Double)
Removes small segments which are smaller than minLength
and connects the remaining segments.
Declaration
public void RemoveSmallSegments(double minLength)
Parameters
| Type |
Name |
Description |
| System.Double |
minLength |
Segments smaller than this value are beeing removed
|
|
Improve this Doc
View Source
Split(Double[])
Returns an array of Border objects by breaking this border at the given positions.
Parameter must be an ordered list of double values. Each value must be greater 0.0
and less the number of iCurve2D objects in this Border.
Declaration
public Border[] Split(double[] Parameter)
Parameters
| Type |
Name |
Description |
| System.Double[] |
Parameter |
|
Returns
Operators
|
Improve this Doc
View Source
Addition(Border, Border)
Concatenates two border objects. Both borders must be open (not closed) and
the endpoint of the first border must be equal to the startpoint of the second
border (as defined by Precision.IsEqual).
Declaration
public static Border operator +(Border first, Border second)
Parameters
Returns
Explicit Interface Implementations
|
Improve this Doc
View Source
IDeserializationCallback.OnDeserialization(Object)
Declaration
void IDeserializationCallback.OnDeserialization(object sender)
Parameters
| Type |
Name |
Description |
| System.Object |
sender |
|
Implements
System.Runtime.Serialization.ISerializable
System.Runtime.Serialization.IDeserializationCallback


Home
|
Contact
Paige Ponzeka's Interactive Resume
Home
About
Resume
Interactive
Designed
Designed BW
Plain Text
Samples
Subway Squeeze
Wordz
Photoshop
Web Design Creation
Contact
Welcome to
Paige Ponzeka's Website


E-DREAMS A film review by Max Messier Copyright 2001 filmcritic.com
All great things come to an end, and the dot-com era embodies that perfectly. Beneath a mound of bankruptcy paperwork lies the remains of a former dot-com darling, the company Kozmo.com, an online convenience store stocked with ice cream, porn videos, and other basic necessities of a urban dweller, all hand-delivered by couriers within an hour.
Designed in 1997 by two college roommates -- Joseph Parks, a 27 year old Goldman Sachs banker, and Yong Kang - Kozmo flamed out in three short years, raising more than $280 million in venture capital funding and from partnerships with such bigwigs as Starbucks and Amazon.com. By December 1999, the company boasted 4,000 employees in 11 cities, its barking CEO Park attracting all kinds of media attention. The company was set for an IPO in May 2000... until April 14, 2000, the day the stock market took its first big dive, ending the Internet era. By April 13, 2001, Kozmo was out of money and ceased operations.
Unlike the earlier, similar documentary Startup.com, which chronicled the rise and fall of another dot-com, GovWorks, e-dreams focuses both on its original founders, especially Park, and on the common folks that ran the day-to-day operations. The contrast is amazing, showing how a cult persona can convince anyone that any idea is the Next Big Thing.
The film's director, Wonsuk Chin (Too Tired to Die), expertly juxtaposes upper management company meetings with on-the-spot interviews with the bike messengers, general managers, and floor staff that kept Kozmo humming. The film's images give a backbone to the company and provide an emotional edge to its ultimate demise.
The most satisfying part of the film comes in understanding, to a degree, the expectations of numerous CEOs commanding these Titanic-type businesses. In the film's final interviews with Park, we learn what happens when the money dries up and backers don't return phone calls. In the end, the name of the game was profit, and if you couldn't make money, even the dreamers got the axe.
Screened at the 24th Annual Mill Valley Film Festival.

Visit filmcritic.com on the Web at http://www.filmcritic.com
========== X-RAMR-ID: 29856 X-Language: en X-RT-SourceID: 178 X-RT-AuthorID: 1198 X-RT-RatingText: 4/5
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


Exceeding threshold temperatures could have catastrophic impacts. However, existing studies on the impacts of temperature increase seldom consider the threshold behavior of climate systems in their assessments. Difficulties in considering climate system thresholds in impact assessments arise from uncertainties associated with the thresholds, including the possible range of threshold temperatures. However, a probabilistic approach can be used to cope with these uncertainties. Several studies using IAMs have evaluated climate impacts while considering the probability of crossing threshold temperatures (e.g., Hope 2006, 2011; Cai et al. 2015; Lontzek et al. 2015). Lontzek et al. ( 2015) introduced a threshold module into a stochastic version of the dynamic stochastic integrated climate and economy model, which is an IAM that has been widely used for evaluating the economic impacts of climate change (Watkiss 2011). The module’s parameter to set the probability of crossing the threshold temperature was determined by referring to the study of Kriegler et al. ( 2009), which used expert elicitations from 43 experts. Meanwhile, Screen and Williamson ( 2017) assessed the probability of an ice-free state Arctic sea focusing on the temperature targets in the Paris Agreement. These studies provide important insights into the probability of exceeding the thresholds of the climate system. However a framework to estimate the probability of exceeding various thresholds has not yet been established, whereas the probabilities estimated using such a framework can be incorporated into IAMs and the importance of incorporating thresholds has previously been discussed (Lenton and Ciscar 2013).
Here, we present a framework to execute a probabilistic assessment of exceeding the threshold of the climate system focusing on two TEs, the Greenland ice sheet and Arctic summer sea-ice. Within our framework, uncertainty in the threshold temperatures is represented by probability density functions (PDFs). The parameters of the PDFs are determined based on a literature review, enabling us to obtain the PDF for each TE separately. In this study, temperature increase represents the temperature anomaly with respect to preindustrial levels.
Figure 1 presents the algorithm used to assess the probability of exceeding the threshold temperatures of the TEs. In this algorithm, the uncertainties of the global mean temperature increase and the threshold temperature of the TEs are represented by PDFs. For the two major TEs, we set the PDF and threshold temperature of the two TEs based on the following rationale.
Flow chart of a method for estimating the probability of exceeding the threshold temperature by a target year under different policy choices
First, the threshold of Greenland ice-sheet melting is defined as the temperature increase at which the surface mass balance of the Greenland ice sheet becomes negative. It should be noted that it may take hundreds of years to reach a negative mass balance after the temperature increases to the threshold. In the AR5 (IPCC 2013), the threshold temperature of the Greenland ice sheet is given as greater than 1 °C (low confidence) and lower than 4 °C (medium confidence). These statements suggest that we can be relatively confident that the threshold of Greenland ice sheet melting is below 4 °C, and also implies that the threshold might be lower, and closer to 1 than 4 °C. Robinson et al. ( 2012) estimated the threshold temperature to be 1.6 °C with a 95% confidence interval of 0.8–3.2 °C. In addition to the above studies, Leverman et al. (2013) discussed the threshold of abrupt Greenland ice sheet loss to be between 0.8 and 2.2 °C (90% credible interval). Based on these values, we employed a log-normal distribution for the threshold temperature of Greenland ice-sheet melting using 1.6 °C as the best estimate and 1.0–4.0 °C as the 95% confidence interval., This setting of the PDF is consistent with our assumption of a threshold around 1.6 °C with a right-skewed distribution. Second, the threshold of Arctic summer sea-ice loss is the temperature at which the Arctic Ocean is in a nearly ice-free in September, and was determined as follows. Several models have estimated that a largely ice-free Arctic sea in summer would begin around 2 °C above the present temperature (Lenton 2012). Massonnet et al. ( 2012) identified a Coupled Model Intercomparison Project Phase 5 (CMIP5) subset to represent September Arctic sea ice extent, indicating an increase of 1.6–2.1 °C (mean 1.9 °C) from the present period (2.2–2.7 °C and mean 2.5 °C from preindustrial levels) as the annual mean global surface temperature threshold for a nearly ice-free state of the Arctic Ocean in September. Therefore, we set the PDF for the threshold temperature of Arctic summer sea ice of 2.45 °C as the mean and 2.2–2.7 °C as the 68% confidence interval. The mean of 2.45 °C was almost consistent with a mean value of 2.5 °C in the CMIP 5 subset presented in Fig. 12.31e of AR5 (IPCC 2013), and did not conflict with the best estimate of ~ 2.0 °C (above present) given by Mahlstein and Knutti ( 2012). Meanwhile, setting 2.2–2.7 °C as the 68% confidence interval (1.95–2.95 °C as the 95% confidence interval) enabled the possibility of the threshold falling in the range beyond of 2.2–2.7 °C, which should be considered because of the large variabilities of the thresholds in the models presented in Figs. 12.30 and 12.31 of the AR5 (IPCC 2013).
To estimate the probability of exceeding the thresholds by the end of this century, we used a set of global mean temperature increase projections conducted as IAM simulations in ICA-RUS. The IAM simulations were performed for several policy choices based on the target temperature at the end of this century. Details of the IAM simulations can be found in Su et al. ( 2017), who computed four sets of future emission pathways, including T15, T20, and T25. Each emission pathway corresponds to a temperature pathway. These pathways each correspond to a policy target that limits the temperature increase in 2100 to below 1.5, 2.0, and 2.5 °C from preindustrial levels, respectively. The IAM simulations in ICA-RUS assume the existence of a policy-maker who presumes climate sensitivity as 3.65 °C, which yields a 66% probability of achieving the policy target by additionally assuming that climate sensitivity follows a normal distribution with a mean of 3.0 and standard deviation of 1.5 (ICA-RUS report 2017).
In addition to T15, T20, and T25, Su et al. ( 2017) computed a set of future emission pathways for a business-as-usual (BaU) scenario. The T15, T20, T25, or BaU scenarios were each associated with several future emission pathways (temperature pathways) depending on the actual climate sensitivity, which were set to 1.50, 3.00, 3.65, or 4.00 °C. These settings of climate sensitivities were used because the actual climate sensitivity for policy-making is currently unknown; that is, even though policy-makers assume 3.65 °C as the climate sensitivity, future emission pathways (temperature pathways) could differ according to the discrepancy between the actual climate sensitivity and the climate sensitivity assumed by policy-makers. For this reason, four sets of actual climate sensitivities were assumed for each of the policy choices (i.e., T15, T20, T25, and BaU). Although the IAM simulations in the ICA-RUS were also conducted under three Shared Socioeconomic Pathways (SSPs), we focused on SSP2, which is a middle-of-the-road scenario (O’Neil et al. 2014). As a result, our analysis included 16 emission pathways or temperature pathways (i.e., the four temperature goals, including the BaU scenario, multiplied by the four sets of climate sensitivities under SSP2).
Figure 2 shows some of the temperature pathways with threshold ranges of 1.0–4.0 °C for the Greenland ice sheet and 1.95–2.95 °C for Arctic summer sea ice. If the actual climate sensitivity were to differ from the climate sensitivity adopted in a policy, the actual temperature increases at the end of this century would differ from the temperature goal (Su et al. 2015). As such, our framework incorporated this uncertainty in the future temperature increase using the IAM simulations for different climate sensitivities.
Relationship between global temperature paths of ICA-RUS and threshold temperatures of a Arctic summer sea ice and b Greenland ice sheet. The temperature paths assume that the climate sensitivity assumed by policy maker is 3.65 °C and the climate sensitivity of actual climate is 3.00 °C. The temperature paths were adjusted so that mean temperature increase during 1986–2005 is 0.61 °C from average of 1850–1900 (IPCC 2013)
Using the 16 emission pathways (i.e., 16 temperature pathways) and assumptions of the PDFs of the threshold temperatures, the algorithm in Fig. 1 was executed as follows. First, we estimated the PDFs of the threshold temperature and climate sensitivity (Step 1). The PDF of climate sensitivity was estimated following the assumption used in the ICA-RUS (i.e., climate sensitivity is normally distributed with a mean of 3.0 and standard deviation of 1.5). Then, for each policy choice, we estimated the regression line (Step 2) between the temperature increase in 2100 and actual climate sensitivity (i.e., 1.5, 3.00, 3.65, and 4.5 °C). Scatter plots of the temperature increase in 2100 and actual climate sensitivity suggested that the relationship between the temperature increase in 2100 and actual climate sensitivity could be approximated based on linear regression lines (Fig. 3). Therefore, we used the estimated linear regression lines to convert the PDF of climate sensitivity into the PDF of the temperature increase in 2100 (Step 3).
Relationship between the actual climate sensitivities (i.e., actual climate sensitivity = 1.5, 3.0, 3.65, or 4.5 °C) and temperature increase in 2100. The relationship and regression line are shown for the business-as-usual (plus and black line), T15 (triangle and blue line), T20 (circle and red line), and T25 (square and cyan line) scenarios
It should be noted that, although linear response theory of climate sensitivity suggests that the multiplicative (i.e., two) of climate sensitivity should correspond to the same multiplicative (i.e., two) of temperature increase, such multiplicative features do not appear in Fig. 3 (i.e., a twofold increase in the climate sensitivity from 1.5 to 3.0 °C does not correspond to a twofold temperature increase in 2100). The reason for this response feature of temperature increase against climate sensitivity is due to the setting of the target temperature in the IAM. When the climate sensitivity assumed by the policy is in accordance with the climate sensitivity of the actual climate, the temperature increase obtained from the IAM is almost the same as the policy target temperature, as seen at x = 3.65 in Fig. 3. However, when the policy assumes a climate sensitivity greater than that of the actual climate, a more stringent effort to reduce emissions is performed in the IAM (Su et al. 2015), and accordingly the temperature increase at 2100 is lower than the policy target temperature. Similarly, when policy assumes a lower climate sensitivity than that of the actual climate, the temperature increase at 2100 exceeds the policy target temperature. In other words, because we use the IAM, which controls emissions according to the policy temperature target and policy-maker assumptions regarding climate sensitivity, the temperature increase at 2100 is strongly controlled by both the temperature target at 2100 and by how much the climate sensitivity of the actual climate departs from the climate sensitivity assumed by the policy. As a result, the temperature increase in 2100 does not show a linear response to increasing of climate sensitivity.
Next, we made a joint PDF from the PDFs of the temperature increase at 2100 and the threshold temperature (Step 4). Finally, we integrated this PDF over the domain where the threshold temperature was lower than the temperature increase at 2100 to obtain probability of exceeding the threshold temperature (Step 5).
From the above-described algorithm, we obtained the probabilities of exceeding the threshold temperatures by 2100 (see Step 5 of the algorithm). As examples of how we integrated the joint PDFs to obtain the probabilities of exceeding the threshold, Fig. 4a, b (Arctic summer sea ice under T20 and BaU, respectively) and Fig. 5a, b (Greenland ice sheet under T20 and BaU, respectively) show the joint PDF and the PDFs of the threshold temperature and temperature increase at 2100, respectively. Comparison of Fig. 4a, b (or Fig. 5a, b) shows that BaU has higher probabilities of large temperature increases than T20. Compared with T20, the higher probabilities of larger temperature increases in BaU shift the center of the joint probability density from outside of the integration domain (see Figs. 4a, 5a) to inside of the domain (see Figs. 4b, 5b), resulting in higher probabilities of exceeding the thresholds under BaU. In fact, the cumulative probabilities of exceeding the thresholds, which are obtained by integrating the domain where the temperature increase is greater than the threshold, confirmed that higher target temperatures result in higher probabilities of exceeding the thresholds (see “ Appendix 1”).
Probability density functions (PDFs) of the threshold temperature for Arctic summer sea ice (red) and temperature increase (blue) at 2100. The PDFs are shown for a T20 and b business as usual. Joint probability density function (green) between the PDFs is shown on the plain spanned by temperature increase and threshold temperature axis. The domain for integration to obtain the probability of exceeding threshold is colored with gray
Probability density functions (PDFs) of the threshold temperature for Greenland ice sheet (red) and temperature increase (blue) at 2100. The PDFs are shown for a T20 and b business as usual. Joint probability density function (green) between the PDFs is shown on the plain spanned by temperature increase and threshold temperature axis. The domain for integration to obtain the probability of exceeding threshold is colored with gray
Table 1 presents the probabilities of exceeding the threshold temperatures for Arctic summer sea ice and the Greenland ice sheet (see Step 5 of the algorithm). The probabilities of exceeding the threshold for the Greenland ice sheet were estimated as 24.8 (13.6)% for T15, 44.5 (26.4)% for T20, 62.5 (39.8)% for T25, and 88.1 (77.6)% for BaU, where the number in parentheses is the probability estimated assuming that the PDF of the threshold temperature follows a uniform distribution. The probability using a uniform distribution was also applied here to investigate the sensitivity of the estimated probability against the choice of probability distribution. A uniform distribution was used for this comparative PDF as an alternative assumption. The probabilities of exceeding the threshold for Arctic summer sea ice were estimated as 2.7 (3.0)% for T15, 16.6 (17.1)% for T20, 37.3 (37.5)% for T25, and 82.4 (82.2)% for BaU. Screen and Williamson ( 2017) estimated that the probability of a nearly ice-free Arctic sea at the end of summer was less than 1/100,000 for a 1.5 °C increase in temperature. Although our estimation showed a slightly higher probability for T15 than that of Screen and Williamson ( 2017), both studies indicated that the probability of exceeding the threshold temperature for Arctic summer sea ice would be low under T15.
Probability (%) of exceeding threshold temperature by 2100
| T15 | T20 | T25 | BaU | |
|---|---|---|---|---|
| Greenland ice sheet | 24.8 (13.6) | 44.5 (26.4) | 60.2 (39.8) | 88.1 (77.6) |
| Arctic summer sea ice | 2.7 (3.0) | 16.6 (17.1) | 37.3 (37.5) | 83.4 (82.2) |
The numbers in parenthesis represent the probability estimated by assuming that the probability density function of the threshold temperature exhibits a uniform distribution
The range of the uniform distribution is 1.0–4.0 for Greenland ice sheet and 1.95–2.95 for Arctic summer sea ice. These ranges are given as the 95% confidence intervals of the log-normal distribution for Greenland ice sheet and normal distribution for Arctic summer sea ice
The results showed that if the policy target temperature were low, the likelihood of exceeding the threshold for the Greenland ice sheet would be higher than that of Arctic summer sea ice. This was due to our assumption that the lower bound of the threshold for the Greenland ice sheet was lower than that of Arctic summer sea ice. The assumption that the PDF of the Greenland ice sheet was right-skewed also explained the relatively high probability of exceeding the threshold even though the temperature target was low.
However, under a high temperature increase (i.e., BaU), the probability of crossing the threshold for Arctic summer sea ice would rapidly increase, as indicated by a sudden increase in the probability from 37.3% (T2.5) to 82.4% (BaU). This rapid increase in probability arose because the upper bound of the threshold temperature of Arctic summer sea ice was lower than that of the Greenland ice sheet, even though the lower bound of the threshold temperature of Arctic summer sea ice was higher than that of the Greenland ice sheet. Therefore, the probability of exceeding the threshold of Arctic summer sea ice increases rapidly under high temperature increases. However, it should be noted that these trends in the probability of exceeding thresholds strongly depend on the assumptions of the form of the PDF and range of the confidence interval.
Our probabilistic assessment quantitatively showed the variations in the probability of exceeding thresholds according to policy target temperature. By placing assumptions on climate sensitivity and tipping points, this computation suggested that identifying the lower bound of the threshold and narrowing the uncertainty range of the threshold, as well as identifying their PDFs could greatly improve the confidence of the estimated probability of exceeding the threshold temperature.
It should be noted that the probabilities of exceeding thresholds were derived from several assumptions. For instance, we assumed a log-normal distribution for the Greenland ice sheet and a normal distribution for the Arctic summer sea ice, despite the fact that the probability distributions for those thresholds remain unknown. Thereby, a sensitivity analysis of the estimated probabilities was performed using a uniform distribution as the PDF of tipping points. The ranges of uniform distribution for the Greenland ice sheet and Arctic summer sea ice were set as (1.0–4.0) and (1.95–2.95), respectively. The sensitivity analysis (see the numbers in parenthesis in Table 1) suggested that the probabilities varied according to the choice of PDFs. Therefore, it is crucial to keep updating the PDFs and threshold ranges to enhance the reliability of the assessed probabilities of exceeding thresholds. Moreover, further advancement in scientific understanding of climate sensitivity is also vitally important, because previous studies employed various PDFs to fit climate sensitivity (e.g., Hare and Meinshausen 2006; Annan and Hargreaves 2011) and the likely range of climate sensitivity given in AR5 (IPCC 2013) is still wide (i.e., 1.5–4.5).
In addition, the meaning of “exceeding thresholds” should be interpreted carefully. Passing the threshold of the Greenland ice sheet does not mean that it reaches the point of no return; if the temperature reaches only slightly above the threshold and then decreases below the threshold within the transition time, the surface mass balance of the Greenland ice sheet could become positive, although it might not recover to the original state observed before crossing the threshold (Robinson et al. 2012). Passing the threshold of Arctic summer sea ice indicates a nearly ice-free state of Arctic Ocean in September and does not necessarily mean that the climate system of the Arctic Ocean has passed into a different phase; as described in AR5 (IPCC 2013), although sudden loss of Arctic summer sea ice was indicated in some climate projections (Holland et al. 2006; Vavrus et al. 2012; Döscher and Koenigk 2013), those projections are not necessarily associated with the existence of a tipping point to another stable state or irreversible process (Amstrup et al. 2010; Lenton 2012).


category: '' date: 2022-04-23 16:23:29 UTC-06:00 description: '' link: '' slug: terran-academy tags: '' title: Terran Academy type: text
Write your post here.


German Shepherd is the second-most popular dog breed by registrations (129,186) worldwide.
The German Shepherd is a breed of medium to large-sized working dog that originated in Germany. The breed's officially recognized name is German Shepherd Dog in the English language. The breed is also known as the Alsatian in Britain and Ireland.


Your dedicated local industry expert, working on your side
Curated list of best properties & areas, delivered directly to your inbox
One single point of contact to organise, prepare viewings & coordinate
Uncover critical information for an informed decision, through accompanied or remote viewings
Take the time & stress out of home hunting
Get the best deal & save money; no need for stopgap accommodation


Nyzo version 619 (commit on GitHub) improves utility classes used by the client.
This version affects the client only.
A new class, ClientArgumentUtil, provides methods that assist in processing of arguments passed to client commands.
The ClientArgumentUtil.getInteger() methods process int arguments, providing a default value for unparsable inputs and optional range limits.
The ClientArgumentUtil.getLong() methods process long arguments, providing the same options as the getInteger() methods.
The ClientArgumentUtil.getSenderData() method processes sender-data inputs, handling both plain text and normalized sender-data strings.
In ClientTransactionUtil.bytesFromNormalizedSenderDataString(), the underscoreIndex is now set to 66 when there are no underscores in the string. This allows 32-byte values to be decoded properly.
The remaining changes in this version are testing code. The ClientArgumentUtilTest class ensures that the ClientArgumentUtil class interprets arguments as expected.
The ClientArgumentUtilTest.main() method allows this test to be run separately.
The ClientArgumentUtilTest.run() method implements the top level of the test. Both pairs of numerical methods are tested. Then, the sender-data method is tested.
The ClientArgumentUtilTest.testIntegerMethods() method tests both valid and invalid inputs, testing both the simple and range-limited ClientArgumentUtil.getInteger() overloads.
The ClientArgumentUtilTest.testLongMethods() method parallels ClientArgumentUtilTest.testIntegerMethods().
The ClientArgumentUtilTest.testSenderDataMethod() method examines the behavior of ClientArgumentUtil.getSenderData() with a variety of text and normalized sender-data string inputs. One of the test cases in this method revealed the inability of ClientTransactionUtil.bytesFromNormalizedSenderDataString() to process values of 32 bytes in length.
The ClientArgumentUtilTest.array() method is a simple alias to ByteUtil.byteArrayFromHexString(). This method was added to make ClientArgumentUtilTest.testSenderDataMethod() more readable.
The ClientArgumentUtilTest.getFailureCause() exposes failureCause, as required by the NyzoTest interface.
The CommandManagerTest ensures that no ambiguous command strings are present in CommandManager. A similar test is already completed on client initialization. The main() method, following NyzoTest convention, allows separate execution of this test class.
The CommandManagerTest.run() method performs a simple check of the command strings specified by all commands in CommandManager.
ClientArgumentUtilTest and CommandManagerTest were added to TestUtil.


Statement of capital
What is the currency?
This is the total number of shares multiplied by the nominal values. The nominal value is the value for each share.
This is the total number of shares multiplied by the nominal values. The nominal value is the value for each share.


Since 2021, Red Paws has been working towards rescuing old and abandoned dogs, and providing permanent homes to neglected or abused dogs.
You can drop by - even without prior appointment - to help volunteer. Volunteering includes feeding the dogs and spending time with traumatized dogs(that includes cuddling).
Unfortunately, fear and ignorance have led many Indian citizens and officials to see street dogs as nothing but a nuisance and to seek eradication using inhumane methods such as poisoning and beating.
Our main goal is to make people aware and erradicate the ongoing abuse to dogs.Through our programs, all the dogs within a community or region are sterilized and then released back to their territories.
The result: dog breeding stops and their population declines.
All of our dogs are Spayed/Neutered, Microchipped, Vaccinated, De-wormed, and HW/FIV tested and Prevention Given prior to adoption. Adoption fees cover these vetting expenses.
Puppies receive 3 Distemper/Parvo shots and other vetting once they reach 6 months old.
Rescued from Noida
Rescued from Chennai
Rescued from Kolkata


Basic example of using the CUTLASS Python interface#
This notebook walks through a basic example of using the CUTLASS Python interface to declare, compile, and run GEMMs.
We first import various packages needed for the example and construct the input and output tensors that will be used in our example.
[1]:
import numpy as np
import random
import cutlass
# This controls whether ther C++ GEMM declaration will be printed at each step. Set to `false` to
# omit this information.
print_module = True
m = 128
n = m
k = m
dtype = np.float16
type_A = np.float16
type_B = np.float16
type_C = np.float16
type_D = np.float16
np.random.seed(1234)
random.seed(1234)
scope_min = -4
scope_max = 4
tensor_A = np.ceil(np.random.uniform(low=scope_min, high=scope_max, size=(m, k)).astype(type_A))
tensor_B = np.ceil(np.random.uniform(low=scope_min, high=scope_max, size=(k, n)).astype(type_B))
tensor_C = np.ceil(np.random.uniform(low=scope_min, high=scope_max, size=(m, n)).astype(type_C))
alpha = np.float16(1.)
beta = np.float16(0.)
tensor_D = np.zeros(tensor_C.shape).astype(type_D)
/usr/local/lib/python3.8/dist-packages/tqdm/auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
Declaring and running a GEMM#
To get started, one only needs to provide the tensors declared above to the cutlass.op.Gemm
call. This sets up a default GEMM operation for the given device on which you are running.
Assuming that we are running on SM80, this default to using a GEMM that leverages FP16 Tensor Core operations.
Calling plan.run()
will generate the CUTLASS C++ kernel in question, compile it, and run it on the tensors we previously passed in. By setting print_module
to true
, the C++ code that is emitted is printed.
[2]:
# We specify `element_accumulator` here so as to match the kernel run by NumPy below. However,
# specifying `element_accumulator` is not required if it is the same as `element`
plan = cutlass.Gemm(element=dtype, layout=cutlass.LayoutType.RowMajor, element_accumulator=np.float32)
plan.run(tensor_A, tensor_B, tensor_C, tensor_D, print_module=print_module)
// Gemm operator cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_256x128_64x3_tt_align8
using cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_256x128_64x3_tt_align8_base =
typename cutlass::gemm::kernel::DefaultGemmUniversal<
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 8,
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 8,
cutlass::half_t, cutlass::layout::RowMajor,
float,
cutlass::arch::OpClassTensorOp,
cutlass::arch::Sm80,
cutlass::gemm::GemmShape<256, 128, 64>,
cutlass::gemm::GemmShape<64, 64, 64>,
cutlass::gemm::GemmShape<16, 8, 16>,
cutlass::epilogue::thread::LinearCombination<cutlass::half_t, 8, float, float>,
cutlass::gemm::threadblock::GemmIdentityThreadblockSwizzle<1>,
3,
cutlass::arch::OpMultiplyAdd
>::GemmKernel;
// Define named type
struct cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_256x128_64x3_tt_align8_type :
public cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_256x128_64x3_tt_align8_base { };
[2]:
<cutlass.backend.gemm_operation.GemmArguments2x at 0x7f79cc556070>
There are many other ways to construct a plan from cutlass.op.Gemm
(e.g., by specifiying they types and layouts of each operand, by providing representative tensors as inputs). For more details on these, see the documentation in the cutlass.op.Gemm
constructor.
We then compare the output to running the GEMM using NumPy.
[3]:
tensor_D_numpy = (alpha * (tensor_A @ tensor_B)) + (beta * tensor_C)
np.testing.assert_array_equal(tensor_D, tensor_D_numpy)
Note that one could use the same kernel just declared for tensors provided by other frameworks beyond NumPy, such as PyTorch or CuPy.
Changing operation modes#
By default, the CUTLASS Python interface will try to use Tensor Core operations whenever possible. If the configuration provided to cutlass.op.Gemm
is not supported on Tensor Cores, the interface will fall back to using a SIMT kernel.
The operation mode currently in use can be returned via the plan.opclass
property. In this case Tensor Core operations.
[4]:
print(plan.opclass)
OpcodeClass.TensorOp
Suppose that we don’t want to use Tensor Cores for this GEMM. One can change to using CUTLASS’s SIMT GEMMs by setting the plan’s opclass
field.
As is shown in the printed output, the emitted kernel uses template parameters that fit CUTLASS’s SIMT GEMMs.
Also notice that, this time around, we provided tensor parameters to plan.run()
. One is free to provide different parameters to plan.run()
than were passed in at the initial call to cutlass.op.Gemm
, provided that the passed-in tensors have the same data type and layout as those passed in on intialization.
[5]:
tensor_D_simt = np.zeros(tensor_C.shape).astype(type_D)
plan.opclass = cutlass.OpcodeClass.Simt
plan.run(tensor_A, tensor_B, tensor_C, tensor_D_simt, alpha, beta, print_module=print_module)
// Gemm operator cutlass_sm80_simt_f16_sgemm_f16_1x1x1_128x128_8x2_tt_align1
using cutlass_sm80_simt_f16_sgemm_f16_1x1x1_128x128_8x2_tt_align1_base =
typename cutlass::gemm::kernel::DefaultGemmUniversal<
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 1,
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 1,
cutlass::half_t, cutlass::layout::RowMajor,
float,
cutlass::arch::OpClassSimt,
cutlass::arch::Sm80,
cutlass::gemm::GemmShape<128, 128, 8>,
cutlass::gemm::GemmShape<32, 64, 8>,
cutlass::gemm::GemmShape<1, 1, 1>,
cutlass::epilogue::thread::LinearCombination<cutlass::half_t, 1, float, float>,
cutlass::gemm::threadblock::GemmIdentityThreadblockSwizzle<1>,
2,
cutlass::arch::OpMultiplyAdd
>::GemmKernel;
// Define named type
struct cutlass_sm80_simt_f16_sgemm_f16_1x1x1_128x128_8x2_tt_align1_type :
public cutlass_sm80_simt_f16_sgemm_f16_1x1x1_128x128_8x2_tt_align1_base { };
[5]:
<cutlass.backend.gemm_operation.GemmArguments2x at 0x7f7b3075abe0>
If we compare the output of the Tensor Core and SIMT GEMMs we just ran we see that they are equal.
[6]:
np.testing.assert_array_equal(tensor_D, tensor_D_simt)
Running cached kernels#
You may have noticed that the plan.run()
calls for the previous two kernels took some time to execute. This is because the kernel being emitted had not yet been compiled.
CUTLASS caches compiled binaries so that recompilation isn’t necessary every time a kernel is run. For example, if we change modes back to using Tensor Cores and call plan.run()
again (with a different set of tensor parameters), you’ll find the call to return much faster.
[7]:
m = 2400
n = 3232
k = 4096
tensor_A = np.ceil(np.random.uniform(low=scope_min, high=scope_max, size=(m, k)).astype(type_A))
tensor_B = np.ceil(np.random.uniform(low=scope_min, high=scope_max, size=(k, n)).astype(type_B))
tensor_C = np.ceil(np.random.uniform(low=scope_min, high=scope_max, size=(m, n)).astype(type_C))
tensor_D = np.zeros(tensor_C.shape).astype(type_D)
alpha = np.float16(1.)
beta = np.float16(2.)
plan.opclass = cutlass.OpcodeClass.TensorOp
plan.run(tensor_A, tensor_B, tensor_C, tensor_D, alpha, beta, print_module=print_module)
// Gemm operator cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_256x128_64x3_tt_align8
using cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_256x128_64x3_tt_align8_base =
typename cutlass::gemm::kernel::DefaultGemmUniversal<
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 8,
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 8,
cutlass::half_t, cutlass::layout::RowMajor,
float,
cutlass::arch::OpClassTensorOp,
cutlass::arch::Sm80,
cutlass::gemm::GemmShape<256, 128, 64>,
cutlass::gemm::GemmShape<64, 64, 64>,
cutlass::gemm::GemmShape<16, 8, 16>,
cutlass::epilogue::thread::LinearCombination<cutlass::half_t, 8, float, float>,
cutlass::gemm::threadblock::GemmIdentityThreadblockSwizzle<1>,
3,
cutlass::arch::OpMultiplyAdd
>::GemmKernel;
// Define named type
struct cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_256x128_64x3_tt_align8_type :
public cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_256x128_64x3_tt_align8_base { };
[7]:
<cutlass.backend.gemm_operation.GemmArguments2x at 0x7f7b30fb9880>
Running non-default GEMMs#
The previous examples showed how it is simple to get started running a default GEMM kernel in CUTLASS. But, what do you do if you want a bit more control over the parameters to the GEMM?
Under the hood, CUTLASS enumerates the different GEMM configuration parameters possible for this kernel from the CUTLASS profiler. The code below shows how one can access the tile descriptions for the kernels (e.g., cluster, threadblock, and warp shape).
[8]:
tiles = plan.tile_descriptions()
print('{} tile descriptions returned'.format(len(tiles)))
num_print = 10
print('First {} tile descriptions are:'.format(num_print))
for td in tiles[:num_print]:
print(td)
132 tile descriptions returned
First 10 tile descriptions are:
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [256, 128, 64]
WarpCount: [4, 2, 1]
Stages: 3
Kernel schedule: ScheduleAuto
}
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [128, 256, 64]
WarpCount: [2, 4, 1]
Stages: 3
Kernel schedule: ScheduleAuto
}
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [256, 128, 64]
WarpCount: [4, 2, 1]
Stages: 3
Kernel schedule: ScheduleAuto
}
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [128, 256, 64]
WarpCount: [2, 4, 1]
Stages: 3
Kernel schedule: ScheduleAuto
}
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [256, 128, 32]
WarpCount: [4, 2, 1]
Stages: 3
Kernel schedule: ScheduleAuto
}
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [128, 256, 32]
WarpCount: [2, 4, 1]
Stages: 3
Kernel schedule: ScheduleAuto
}
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [256, 64, 64]
WarpCount: [4, 1, 1]
Stages: 4
Kernel schedule: ScheduleAuto
}
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [64, 256, 64]
WarpCount: [1, 4, 1]
Stages: 4
Kernel schedule: ScheduleAuto
}
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [128, 128, 64]
WarpCount: [2, 2, 1]
Stages: 4
Kernel schedule: ScheduleAuto
}
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [256, 64, 64]
WarpCount: [4, 1, 1]
Stages: 3
Kernel schedule: ScheduleAuto
}
Next, we’ll pick one of these configurations at random and compile and run it.
[9]:
idx = random.randint(0, len(tiles)-1)
td = tiles[idx]
print('Tile description {} is: {}'.format(idx, td))
plan.compile(td)
plan.run(tensor_A, tensor_B, tensor_C, tensor_D, alpha, beta, print_module=print_module)
Tile description 112 is:
{
ClusterShape: [1, 1, 1]
ThreadblockShape: [128, 128, 32]
WarpCount: [2, 2, 1]
Stages: 4
Kernel schedule: ScheduleAuto
}
// Gemm operator cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_128x128_32x4_tt_align8
using cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_128x128_32x4_tt_align8_base =
typename cutlass::gemm::kernel::DefaultGemmUniversal<
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 8,
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 8,
cutlass::half_t, cutlass::layout::RowMajor,
float,
cutlass::arch::OpClassTensorOp,
cutlass::arch::Sm80,
cutlass::gemm::GemmShape<128, 128, 32>,
cutlass::gemm::GemmShape<64, 64, 32>,
cutlass::gemm::GemmShape<16, 8, 16>,
cutlass::epilogue::thread::LinearCombination<cutlass::half_t, 8, float, float>,
cutlass::gemm::threadblock::GemmIdentityThreadblockSwizzle<1>,
4,
cutlass::arch::OpMultiplyAdd
>::GemmKernel;
// Define named type
struct cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_128x128_32x4_tt_align8_type :
public cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_128x128_32x4_tt_align8_base { };
[9]:
<cutlass.backend.gemm_operation.GemmArguments2x at 0x7f79cc58de20>
One can also change the swizzling function used by the kernel. For example, one can modify the kernel to use the stream K feature of CUTLASS via:
[10]:
# Stream K is only supported pre-SM90 (at least when this example was written)
if plan.cc != 90:
plan.swizzling_functor = cutlass.swizzle.ThreadblockSwizzleStreamK
plan.run(tensor_A, tensor_B, tensor_C, tensor_D, alpha, beta, print_module=print_module)
// Gemm operator cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_128x128_32x4_tt_align8
using cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_128x128_32x4_tt_align8_base =
typename cutlass::gemm::kernel::DefaultGemmUniversal<
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 8,
cutlass::half_t, cutlass::layout::RowMajor, cutlass::ComplexTransform::kNone, 8,
cutlass::half_t, cutlass::layout::RowMajor,
float,
cutlass::arch::OpClassTensorOp,
cutlass::arch::Sm80,
cutlass::gemm::GemmShape<128, 128, 32>,
cutlass::gemm::GemmShape<64, 64, 32>,
cutlass::gemm::GemmShape<16, 8, 16>,
cutlass::epilogue::thread::LinearCombination<cutlass::half_t, 8, float, float>,
cutlass::gemm::threadblock::ThreadblockSwizzleStreamK,
4,
cutlass::arch::OpMultiplyAdd
>::GemmKernel;
// Define named type
struct cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_128x128_32x4_tt_align8_type :
public cutlass_sm80_tensorop_f16_s16x8x16gemm_f16_1x1x1_128x128_32x4_tt_align8_base { };
Handling errors#
The CUTLASS Python interface attempts to catch runtime and compilation errors in Python so as to provide more understandable error messages.
Here’s an example in which we try to use too many stages for a given GEMM kernel. Normally, this would result in a runtime error due to the GPU having insufficient shared memory to launch the kernel with 8 stages. The CUTLASS Python interface is able to detect this issue before compiling the kernel, and reports it back to the user.
[11]:
# td = tiles[0]
# td.stages = 8
# plan.compile(td)


The process over product concept helped me be less frustrated with how my website looks when compared to other peoples. I have accepted that I am learning right now and I am not a web design master yet.
Before watching the Google video on meditation, I had associated meditation with Buddhists or ninjas. I did not think it was something that could help everyone. I learned that meditation creates a clear mind, and that a clear mind leads to happiness. This is because the "default" state of the mind is happiness. I found that to be beautiful. I also learned that there is no wrong way to meditate. The mental training in meditation comes from snapping mind back into a clear state. Meditation has positive physical implications as well. It releives stress levels which thereby strengthens the imune response. I like the suggested process of mindfull meditation in which one follows their breath, gets distracted, then regains attention. I am glad that you do not have to follow the optimal meditation posture because I am not that flexible.


This rumination is sparked most immediately by reflection on the roiling debate within the academic left and the academic left dressed up as a political left that has taken shape since the 2016 election. The debate initially centered on how to interpret “white working class” support for Donald Trump, specifically, whether we should understand white people’s votes for Trump generically as indicative of their essential commitments to racism, patriarchy, homophobia, nativism, transphobia, etc., or whether some of that vote should be understood as a consequence of Democratic liberals’ failure to address working people’s concerns with economic insecurity, because of the Democrats’ commitments to the dynamics of neoliberalization that have intensified economic inequality across the board nationally and have undermined access to public goods and social supports for poor and working people generally. The practical stakes of that argument have to do with what strategic lessons “progressives” should draw from Trump’s victory with eyes on the 2018 mid-term elections, 2020, and beyond.
In early iterations of the debate, various antiracist commentators and official Democratic operatives and their propaganda apparatus at MSNBC, the Root, and elsewhere on the internet-chattering and posing left have insisted that Trump’s victory exposed the extent to which a deep vein of white Americans of all classes (except maybe the “woke” elements of the urbane professional-managerial strata) are committed to “white supremacy” before and beyond all else. The strategic takeaway from that view is that those Trump voters—even the estimated just under 7 million to just over 9 million who had previously voted for Sanders and at least once for Obama1—are hopeless reactionaries and cannot be relied upon as potential allies because their deepest commitments are anti-egalitarian, that their support for Trump reflected anxiety over perceived loss of status in relation to nonwhites, women, immigrants or others.2 This conviction has underwritten a contention that the lesson from Trump’s victory is that it’s not practical, or moral (the two are difficult to distinguish in this argument) to focus on increasing economic inequality and intensifying upward redistribution as the basis for left political appeals and instead that the necessary strategy should center on intensified mobilization of nominally oppressed groups, mainly nonwhite, and women as a generic category on the basis of opposition to the disparate distribution of goods and bads in the society among groups so identified and in support of the principles of diversity as generally understood in left-of-center political discourse.
As the argument has progressed, a de facto alliance between ostensibly progressive identitarians and Wall Street Democrats has come together around asserting, along with Paul Krugman and others,3 that “horizontal inequality”—i.e., inequality between statistically defined racial/ethnic groups—is a more important problem than “vertical inequality,” characterized as inequality between individuals and households. That distinction instructively makes class and class inequality disappear, which is consistent with the trajectory of American liberalism across the more than seven decades since the end of World War II. Moreover, in a sort of mission creep, opponents of what they decry as a “class-first” position increasingly have come to denounce any expressions of concern for economic inequality as in effect catering to white supremacy. This tendency, which Touré Reed has argued rests on a race-reductionism,4 has surfaced and spread within the newly revitalized Democratic Socialists of America (DSA), as even many among those who consider themselves socialists object to the organization’s selection of Medicare for All as its key political campaign on the grounds that pursuit of decommodified health care for all is objectionable because doing so does not sufficiently center antiracist and anti-disparitarian agendas. I submit that there’s clearly a problem when anti-socialism is defined as socialism.
The race-reductionist argument is propelled by a combination of intense moral fervor and crude self-interest. I’ve argued in 2018 articles in nonsite, the Baffler, and Dialectical Anthropology, that, as it has evolved, the post-2016 debate has thrown into bold relief the class character of antiracist and other expressions of identity politics.5 That could be a salutary product of the controversy. It’s good in this sort of debate for the mist of ideology to burn off and the material stakes involved to be clear and in the open. However, many people who have followed or even participated in the debates have not connected the dots to see that obvious point or to acknowledge its implications. One reason for failure to do so is summed up pithily in Upton Sinclair’s quip, “It is difficult to get a man to understand something when his salary depends upon his not understanding it.”
Not only would pursuit of an agenda focused on addressing “horizontal inequality,” if successful, disproportionately benefit upper-status, already well-off people—as Walter Benn Michaels and I have noted tirelessly over the past decade at least, the reality of a standard of justice based on eliminating group disparities is that a society could be just if 1% of the population controlled 90% of the resources, so long as the one percent featured blacks, Hispanics, women, lesbians and gays, etc. in rough proportion to their representation in the general population; also, advocacy of defining the only meaningful inequality as disparities between groups is itself a career trajectory in the academy, as well as in the corporate, nonprofit and freelance commentary worlds.
Purblindness to identitarianism’s ever more clearly exposed class character also rests on naïvely habituated ideological thinking. Most of us operate with more or less vague or inchoate recognition that the past included bad old-timey times marked by openly racist practices like slavery and compulsory racial segregation, genocide against Native Americans, Chinese Exclusion, imposed gender hierarchies, etc. In lieu of examining the discrete sources of inequality in the present, antiracist ideology in particular depends on asserting superficial analogies to those earlier historical periods when racial exclusion and discrimination were more direct impediments to black Americans’ and other nonwhites’ social position and well-being. Thus, for example, Michelle Alexander proposes that contemporary mass incarceration be understood as a “new Jim Crow”6—though even she allows that the analogy doesn’t work—and expressions of outrage at miscarriages of justice in the present commonly allude to practices associated with slavery or the segregation era.
As I have argued, such assertions are not to be taken literally as empirical claims; they are rhetorical. No sane or at all knowledgeable person can believe that black Americans live under similarly constrained and perilous conditions as they did a century ago or longer. Those analogies and allusions carry a silent preface: “(This incident/phenomenon/pattern makes it seem as though) Nothing has changed.” Yet the claim itself presumes that things have changed because the charge is essentially a denunciation of objectionable conditions or incidents in the present as atavistic and a call for others to regard them as such. Attempting to mobilize outrage about some action or expression through associating it with discredited or vilified views or practices is a common gambit in hortatory political rhetoric, more or less effective for a rally or leaflet. But this antiracist politics is ineffective and even destructive when it takes the place of scholarly interpretation or strategic political analysis.7
Political controversies in contemporary New Orleans provide an apt frame of reference for demonstrating antiracism’s limitations, and class character, as a politics. Antiracist political critique failed abysmally after Katrina to mobilize significant opposition to elimination of low-income public housing or to the ongoing destruction of public schools. In a context in which black people participate as administrators, functionaries, contractors, and investors—all in the blessèd name of racial representation—in the commercial opportunities provided by privatization and destruction of those institutions, that politics, which posits an abstract “black community” against an equally abstract “racism,” could not provide persuasive responses to the blend of underclass ideology that stigmatizes public housing as an incubator of a degraded population or that proffers culturalist explanations for failing schools.8
Debate over displacement for upscaling redevelopment, including proliferation of the Airbnb industry, is another powerful case in point in that city as elsewhere. In opting for a language of “gentrification,” opponents of displacement, often without necessarily intending to do so, cloud a simple, straightforward dynamic—public support of private developers’ pursuit of rent-intensifying redevelopment—with cultural implications that shift critique away from the issue of using public authority to engineer upward redistribution and impose hardship on relatively vulnerable residents. Instead, discussion of gentrification slides into objections about display of privilege, and lack of recognition or respect that, notwithstanding the moral outrage that accompanies them, accept the logic of rent-intensifying redevelopment as given and demand that newcomers acknowledge and honor aboriginal habitus and practices and that the “community” be involved in the processes of upgrading.
The same racial or cultural discourse has unhelpfully shaped opposition to charterization of public education by focusing on the racial dimension of the process. The fundamental problem with Teach for America and the corporate privatizers for whom TFA are shock troops, after all, is not that the missionaries are mainly white and unfamiliar with native culture or even that many of them are tourists building extracurriculars for their graduate and professional school dossiers. Those are only idiosyncratically distasteful features of a particular line of attack on one front in a broader war on public goods and the idea of social solidarity, in line with marketization of all human needs.
And that sort of culturalist discourse also opens opportunities for petty, and not so petty, entrepreneurship in the name of respect or recognition of the community, within the logic of neoliberalization. Race reductionism enables a sleight-of-hand in which benefits to individuals can appear to be victories for the generic racial population or community. The more deeply embedded a groupist notion of fairness or justice becomes as common sense, the more easily that sleight-of-hand works under labels like “community empowerment,” “voice,” “opportunity,” or “representation” to propel and legitimate accumulation by dispossession.9
This takes us back to Sinclair’s dictum, which underlies the material truth of antiracist politics and other expressions of identitarianism that are hostile to politics based on class solidarities. Yet even the crudest self-interest depends on ideological mystification for legitimacy. And race/racism—the former term is inconceivable without the latter—has always worked in exactly that way; only now, in the aftermath of the victories of the 1960s, it can work to the benefit as well as the detriment of nonwhites. The cornerstone of race ideology, which is not now and never has been incompatible with capitalism, is presumption of ontological-level differences among human populations apportioned into racial groups. Just as nineteenth and early twentieth century white supremacists insisted that fundamental differences preempt political alliances based on common material conditions, antiracists posit whites’ transhistorical—and thus primordial—commitment to racial supremacy toward the same end.
That’s the more insidious basis of the impulse to argue for the primacy of race in contemporary politics via allusion to the past. Like all forms of race-reductionism it masks a class-skewed agenda. That underlying reality helps make sense both of why antiracists seem unconcerned that their elevation of challenging disparities to the paramount, if not exclusive, goal of egalitarian politics is entirely consistent with neoliberalism’s regime of intensifying economic inequality and why their de facto alliance with corporate and Wall Street Democrats against the conventional left has been automatic and untroubling.
So I’ll conclude as I’d initially intended to begin this rumination, with several postulates about black American political history to counter the idealist mystifications that posit a primordial white racism or a transhistorical, reified White Supremacy capable of acting in the world on the conviction that, as Nihkil Singh and Joshua Clover most recently characterized it in a Verso blogpost, “black lives matter less.”
- Slavery was fundamentally a labor relation, not an extreme system of race relations. To paraphrase Barbara and Karen Fields, its objective was to produce cotton, sugar, tobacco, and rice, not white supremacy. Its appeal to the planter class was that it secured a labor force that had no rights or recourse, not that it was a permanent sadistic camp. Historian Kenneth Stampp quotes a slaveowner’s succinct explanation: “For what purpose does the master hold the servant? Is it not that by his labor, he, the master, may accumulate wealth?”10 An irony of the view that defines slavery as institutionalized brutality is its implication that slavery without extremes of brutalization might not be objectionable.
- The segregationist regime was a historically specific social order based on disfranchisement of the vast majority of blacks and a substantial percentage of whites, imposed by southern elites after defeat of the interracial Populist political insurgency in the late nineteenth century. It was defined by an extensive, legally codified system of racial subordination. That order was not fully consolidated before World War I, and its institutional foundations were crushed by the late 1960s. That is, it was a regime that prevailed for roughly sixty years, depending on location.
- There is no singular, transhistorical “Black Liberation Struggle” or “Black Freedom Movement,” and there never has been. Black Americans have engaged in many different forms of political expression in many different domains, around many different issues, both those considered racial and not. They have engaged in race-solidaristic formations and in close concert with others, in class-based and multiclass alliances. As Cedric Johnson has argued forcefully, contemporary scholarly discussion reads “black politics”—the ethnic pluralist group politics articulated mainly since the 1960s—anachronistically back onto the varying and pragmatically grounded political expressions in which black Americans have engaged since Emancipation, which he describes as “black American political life.” Political differentiation has been as common among black Americans as among all others. Moreover, issues bearing specifically on race or racial disparities have never exhausted, or exclusively defined, black Americans’ expressed political concerns.
- As a corollary of 3, the issues driving the postwar southern mass mobilization against segregation and the emergent black interest-group urban politics in the North and West, and the big city South, were distinct. Lumping them together under a blanket construct like the “long civil rights movement” does not help us comprehend the discrete features of either or, more important, the distinct trajectories each set in motion.
- Black Power was not a mass, radical insurgent movement. It was a militant expression of ethnic pluralism. Radicals of various sorts—including ideological race nationalists—occupied its fringes, but the driving and commanding forces of Black Power politics were always the assertive elements within the new black political and professional-managerial class that emerged from opportunity structures opened by the victories of the Civil Rights movement, the dynamics of urban demographic transition and incorporation into governing regimes, and War on Poverty, Model Cities, and foundation-funded programs. Nominally radical groups, such as the Black Panther Party (BPP), the League of Revolutionary Black Workers, and others with less cachet among the left, were not serious alternatives, certainly not the romantic “roads tragically not taken” of post-New Left fantasies. General Baker, longtime United Auto Workers activist and co-founder of both the Dodge Revolutionary Union Movement (DRUM) and the League of Revolutionary Black Workers, was emphatically clear that those tendencies were entirely specific to Detroit and the centrality of the union in local Democratic politics. The BPP was founded in 1966, and by the end of the decade was already in disarray, especially outside Oakland, as a result of police repression, to be sure, but also of their political incoherence.
- Neither Malcolm X, Frantz Fanon, C. L. R. James, nor Stuart Hall can tell us anything strategically useful about the black American political situation. Appeals to their putative wisdom stem from academic leftists’ romantic attachments and commitments to race-reductionist politics. Malcolm was dead before nearly all the big events understood to define “the Sixties” had occurred. Fanon died several years before Malcolm, and in any case his focus was always elsewhere; he gave only the most general, perfunctory attention to the United States. James’s time in the United States, as I have said, was on the political equivalent of a tourist visa. He was not enmeshed in black American politics and understood its internal and external dynamics in only an abstract, formalist way. The same pertains to Stuart Hall. Attachments to the likes of Malcolm, Fanon, James, and Hall are more totemic than intellectually or politically productive. There is a more pernicious aspect of embrace of those figures’ supposed cultural authority. Each is read as propounding trans-contextual insights about “race.” And such insights are necessarily race-reductionist.


Happy Hour Specials Yes
Takes Reservations Yes
Delivery Yes
Take-out Yes
Accepts Credit Cards Yes
Accepts Apple Pay No
Accepts Google Pay No
Accepts Cryptocurrency No
Good For Lunch, Dinner
Parking Valet, Garage
Bike Parking Yes
Wheelchair Accessible Yes
Good for Kids Yes
Good for Groups Yes
Attire Casual
Ambience Casual
Noise Level Avarage
Good For Dancing No
Alcohol Full Bar
Good For Happy Hour Yes
Coat Check Yes
Outdoor Seating No
Wi-Fi Free
Has TV Yes
Dogs Allowed No
Waiter Service Yes
Caters No
Has Pool Table No


Consider a harmonic with poloidal mode number and toroidal mode number
,
|
(326) |
Choose a radial profile of the amplitude
|
(327) |
Figure 35 plots the two-dimensional mode structures on the poloidal
plane for two profiles of the radial phase variation given by
|
(328) |
and
|
(329) |
respectively. Note that, compared with the case of
(no radial
phase variation), the radial phase variation given by Eq. (329)
influence the mode structure on the poloidal plane, generating the so-called
mode twist or shear[11], as shown by the left figure of Fig.
35.
Figure:
Two dimensional structure (on
plane)
given by Eqs. (326) and (327) with , ,
, . Left figure is for
and right
figure is for given by Eq. (334). The mode propagates
(rotates) in the clockwise direction on the poloidal plane (the zero point
of coordinate is at the low-field-side of the midplane and the
positive direction is in the anti-clockwise direction). A GIF animation of
the time evolution of the mode can be found at
http://theory.ipp.ac.cn/~yj/figures/mode_rotation3.gif
|
Consider a mode composed of two poloidal harmonics
|
(330) |
where and are the poloidal mode number of the two poloidal
harmonics. Consider the case
. Then at the high field side
of the midplane
of
poloidal plane, equation
(330) is written
|
(331) |
At the low field side of the midplane
of
poloidal
plane, equation (330) is written
|
(332) |
Equations (331) and (332) indicates the amplitude of the mode
at the low field side is larger than that at the strong field side, i.e., the
mode exhibits a ballooning structure.
For a radial profile given by
|
(333) |
and an initial phase
, Figure 36 plots the
two-dimensional structure of the mode on the poloidal plane. The inital phase
can have radial varation and this has effects on the 2D structure of
the mode. For instance, is chosen to be of the form
|
(334) |
The resulting 2D mode structure is given in the right figure of Fig.
36, where the so-called mode shear can be seen[11].
Figure 36:
Two dimensional structure (on
plane)
given by Eqs. (330) and (333) with
, ,
, . Left figure is for
and right figure is for given by Eq. (334). Note
that the mode amplitude at the low field side is larger than that at the
high field side. The mode propagates (rotates) in the clockwise direction on
the poloidal plane. A GIF animation of the time evolution of the mode can be
found at http://theory.ipp.ac.cn/~yj/figures/ballooning_animation.gif
|
yj
2015-09-04


 A lot of minds across the world already got inspired. Remebering Charlie Hebdo.
Sorry for the late posting
peace
justass


Easy setup on mobile device and quick sync to wearable for instant use.
Water and shock resistant for a range of lifestyles.
Includes wake-up and immediate alert for different emergency situations.
Project Proposal Report
Read morePresentation Slides
Read morePoster Presentation
Read moreUser Research
Read morePrototype Report
Read moreFinal Report
Read more


nest BFDV-positive BFDV swabs boxes breeding nests birds blood disease feather nestlings box samples transmission parents beak elegans occupied infection study virus {border-style cloacal nesting px;} tested #ffffff;} indirect (Eastwood detection qPCR swab used weeks wild contamination detected infected psittacine test Australian BFDV-negative method pathogen season, data shedding (.%, DNA Veterinary antigen collected containing control material parent pathogens season. threshold using bird birds, eximius females presence prevalence surveillance contaminated environmental nestling results unoccupied University contained groups number species status swabs, viral (Table BFDV-positive, Eastwood Martens breeding, considered controls did endangered excretion non-invasive potential px; sample season wildlife {font-family Nest Sarker active approximately avian boxes, determined experiments, font-size high hollows host parrots samples, swabs. time (.%) (Platycercus BFDV-negative. Cross, Deakin Department Raidal Research Wildlife approved before, days diseases double; environment exact following likely nestlings, outside paired role sampling studies study, taken testing (Fig. (Peters (Raidal (Raidal, (hereafter .–.) Additionally, Australia However, New Peters, S). Sabine Using age analysis authored border-color border-width boxes. draft. drafts elegans, ethanol field final group human infectious nest, nestlings. nests, old paper, parents, performed positive possible reported reviewed solid; success {font-style {font-weight (.°S, (.–.) (BFDV) (parents .–.), Austral BFDV, BFDV. BFDV–positive Cacatua Crimson Indirect Information Mycoplasma Peters Platycercus Table Zealand [.–.]) added adult and/or associated background based birds. bold box. brood centrifuged cockatoos complete conceived conservation conservative cotton courier; derived designed detection, dynamics eggs em; evidence example, extraction fledging gallisepticum groups, haemagglutination implications important lab long low occupying parental particularly percentage persist persistence pt;} resulting significantly suggesting survival thought threat transmitted types young


IDEA
“I had always been fascinated by flight and radio controlled planes and one day we saw a very crude remote controlled model with a camera attached. It didn’t really do the job but we knew if the technology could be sorted this could be the answer.”


Saving Grace Starring Brenda Blethyn and Craig Ferguson Screenplay by Craig Ferguson and Mark Crowdy; story by Crowdy Directed by Nigel Cole
IN SHORT: Stone cold funny.
Another death in a small British town story, complete with a Steve Harley song in the soundtrack, is Saving Grace. This film, which proves that "intelligent dope humor" is not an oxymoron, is co-scripted by star Craig Ferguson of the Drew Carey Show, who did a similar turn on The Big Tease earlier in the year. This one is much funnier and allows us Yanks to see a much lighter side of twice Oscar nominated actress Brenda Blethyn. It also maintains a streak of small Brit films that, like Waking Ned Devine and The Full Monty, are gangbusters comedy and sweet as fine chocolate.
The talk in the town of Cornwall is that Grace Trevathan's husband was looking for the loo when he stepped out the door of a plane and plummeted ten thousand feet or so to his death. It matters not to Grace (Blethyn), who has spent the last thirty or so years in her greenhouse, cultivating hybrid flowers.  With a minimum monthly nut of £2000 to meet -- and we haven't even gotten to what the greedy banker in London wants -- this poor woman, who's never worked a day in her life finds herself involving her gardener Matthew (Ferguson), who also has never worked a day in his life, in a very illegal scheme.
Y'see, Matthew has a small stash of hemp plants out behind the local RC church which provides a poor quality smoke for the local bartender and doctor and friends. But winter is coming in and his plants are getting sick and he asks the best plant person he knows, Grace, for help. Grace recognizes the plants. She knows they are illegal, but the beating horticulturist heart within allows her to take one and only one plant from its resting place, and save it in the quiet of her greenhouse. There, the weed grows like gangbusters. Quite innocently, Grace askes Matthew how much the plant is worth? "It's like gold" he says, and a plan sprouts in Grace's head. Grace rescues the remainder of Matthew's hidden stock and sets to work breeding new sprouts in a hydroponic garden. That takes an enormous amount of capital, specifically, hours and hours of the brightest light, which illuminates the countryside for miles around. The entire town sees the lightshow. They set their clocks by it and the local constable seems blissfully ignorant. The plants which Grace has cultivated, when all is said and done, would win raves from anyone who has ever had any exposure to raw buds on a stick. High Times magazine could do a cover story.
Two things to emphasize here: Grace is not a dopehead. She doesn't have anything to do with the stuff until she insists on a sample so that she could know what this pernicious weed is doing to people. Second, Grace doesn't want anyone taking a fall for her illegal actions, so she packs up a couple of sticks and heads for London's sleazy market district on Portobello Road, leaving Matthew far behind. She sticks out like a sore thumb and is rescued from certain doom by her late husband's mistress. There's little anger between the two ladies, though one has connections the other doesn't. Then, in slam bang fashion, a street hippie is praying to his God after two tokes on a sample, a connection is made with a sleazy underworld type Dealer (Tcheky Karyo), and a breakneck chase is on as Grace heads back up to Cornwall to fulfill her part of the bargain. Following her is a lackey of the Dealer and the hippie. Following them are the local cops. And waiting at her home is the banker, ready to seize the estate.
 So see it already.
Blethyn's Grace may be sweet and a bit naive, but she's got gumption.
On average, a first run movie ticket will run you Eight Bucks. Were Cranky able to set his own price to Saving Grace, he would have paid...
$7.00
An absolute delight.
Cranky Critic® is a Registered Trademark of, and Copyright © 2000 by, Chuck Schwartz. All Rights Reserved. Cranky on the web at www.crankycritic.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Playing Your Scene
To play your scene from the Scene Editor, click the
Play Scene
icon at the top of the screen
(as shown in Figure 1.1.1)
.
Figure 1.1.1
Or, you can go to the Project menu and select
Run Game
(as shown in Figure 1.1.2)
.
Figure 1.1.2


Toggle navigation
Ed Exchange
Docs
Server Info
Transactions
Send Transcript
Request Transcript
Sign In
Name
Account


Info
Error
Gallerion - DApp Gallery
Welcome to the "Gallerion" DApp. It is a fully-functional Decentralized Application consisting of Solidity smart contract in the Ethereum blockchain + client-side app (HTML5) and server-side logic (JavaScript). The Gallerion keeps some data and logic in the Ethereum blockchain and provides UI to access it.
- Each picture consists of an image stored in IPFS
- Guests can view the photos and pictures
- Guests can register as users and buy pictures
- Users should have a MetaMask wallet
- Authors register and list picures for sell in the Ethereum blockchain
Developer Team:
Emil Yordanov
and
Submit an Image
Authors can register (upload) new images to the "Gallerion" smart contract on the Ethereum blockchain decentralized network.
Price:
Images
Users can view images in the gallery on the Ethereum network.


A way to link to items by name, not URL
/// Link to [f()]
pub struct S;
pub fn f() {}
Cross-crate re-exports!
// Crate `inner`
/// Link to [f()]
pub struct S;
pub fn f() {}
// outer crate
pub use inner::S;
Rustdoc would use the scope of the re-export, not the original item.
The rustdoc fix originally caused this code to crash (!!)
#![feature(decl_macro)]
fn main() {
|| {
macro m() {}
};
}
Rustdoc was transforming it internally to
fn main() {
{
macro m { () => { } }
}
loop { }
}
everybody_loops


This year, we set up a program aligned with our values of inspiration, benevolence, caring and authenticity. You will find human, professional and ethical commitments, people who are trying to reverse the status quo as well as people who want to understand each other and propose new interactions.
Not all content is translated, but we are working on it.
{% if site.tickets.selling %} {% endif %}


Currently active:
{{admin.selectedCycleDetails.active?'Yes':'No'}}
Force sharing with feedback recipient:
{{admin.selectedCycleDetails.hasForcedSharing?'Yes':'No'}}
Allow optional sharing with feedback recipient:
{{admin.selectedCycleDetails.hasOptionalSharing?'Yes':'No'}}