|
Copyright 2013-01-06 Werner Randelshofer | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.monte.media.image.BitmapImage
public class BitmapImage
A BitmapImage is comprised of a ColorModel and an accessible byte array of image data.
The image data is expressed in several layers of rectangular regions called bit-planes. To determine the bits that form a single pixel one must combine all data-bits at the same x,y position in each bit-plane. This is known as a "planar" storage layout as it was used on Commodore Amiga Computers.
The bit-planes can be stored contiguously or can be interleaved at each scanline of the image.
Fig 1. A sample image:
.+++<EMAIL_ADDRESS>This sample uses 4 colors: +...+.@@.@@.+.#.....+...+ . = color 0 (all bits clear) +++++<EMAIL_ADDRESS>+ = color 1 (bit 0 set, bit 1 clear) +...+<EMAIL_ADDRESS>@ = color 2 (bit 0 clear, bit 1 set) +...+<EMAIL_ADDRESS># = color 3 (all bits set)
Fig 2. Contiguous bit-plane storage layout.
01110000 00001001 11000111 0....... This is the first bit-plane. 10001000 00001010 00001000 1....... Each number represents a bit 11111000 00001010 01101111 1....... in the storage layout. Eight 10001000 00001010 00101000 1....... bits are grouped into one byte. 10001000 00001001 11101000 1....... Dots indicate unused bits.Fig 3. Interleaved bit-plane storage layout.00000010 00100001 11000000 0....... This is the second bit-plane. 00000011 01100010 00000000 0....... 00000010 10100010 01100000 0....... 00000010 00100010 00100000 0....... 00000010 00100001 11100000 0.......
01110000 00001001 11000111 0....... This is the first bit-plane. 00000010 00100001 11000000 0....... This is the second bit-plane.For more details refer to "Amiga ROM Kernel Reference Manual: Libraries, Addison Wesley"10001000 00001010 00001000 1....... The bit-planes are interleaved 00000011 01100010 00000000 0....... at every scanline of the image.
11111000 00001010 01101111 1....... 00000010 10100010 01100000 0.......
10001000 00001010 00101000 1....... 00000010 00100010 00100000 0.......
10001000 00001001 11101000 1....... 00000010 00100001 11100000 0.......
Responsibility
Gives clients direct access to the image data of the bitmap. Knows how to convert the bitmap into chunky image data according to the current color model. Supports indexed color model, direct color model, 6 and 8 bit HAM color model.
| Field Summary | |
|---|---|
static int |
BYTE_PIXEL
Tag for byte pixel data. |
static int |
INT_PIXEL
Tag for integer pixel data. |
static int |
NO_PIXEL
Tag indicating that no pixel data is available. |
static int |
SHORT_PIXEL
Tag for short pixel data. |
| Constructor Summary | |
|---|---|
BitmapImage(int width,
int height,
int depth,
java.awt.image.ColorModel colorModel)
Construct an interleaved bitmap with the specified size, depth and color model. |
|
BitmapImage(int width,
int height,
int depth,
java.awt.image.ColorModel colorModel,
boolean isInterleaved)
Construct a bitmap with the specified size, depth and color model and with optional interleave. |
|
BitmapImage(int width,
int height,
int depth,
java.awt.image.ColorModel colorModel,
int bitStride,
int scanlineStride)
Construct a bitmap with the specified size, depth, color model and interleave. |
| Method Summary | |
|---|---|
BitmapImage |
clone()
Creates a clone. |
void |
convertFromChunky(java.awt.image.BufferedImage image)
Converts the indicated area of the bitmap data into pixel data. |
int |
convertToChunky()
Converts the planar image data into chunky pixel data. |
int |
convertToChunky(int top,
int left,
int bottom,
int right)
Converts the indicated area of the bitmap data into pixel data. |
void |
flushPixels()
Frees the memory allocated for the pixel data. |
byte[] |
getBitmap()
Gives you direct access to the bitmap data array. |
int |
getBitplaneStride()
Returns the number of bytes that you must add to a bitmap address to advance to the next bit of a scanline. |
byte[] |
getBytePixels()
Returns a reference to the byte pixel data that has been generated by a previous call to #converToChunky. |
java.awt.image.ColorModel |
getChunkyColorModel()
Returns the current color model of the chunky image in this bitmap. |
int |
getDepth()
Returns the depth of the image. |
int |
getHeight()
Returns the height of the image. |
int[] |
getIntPixels()
Returns a reference to the integer pixel data that has been generated by a previous call to #converToChunky. |
int |
getPixelType()
Returns the available type of pixel data. |
java.awt.image.ColorModel |
getPlanarColorModel()
Returns the current color model of the planar image in this bitmap. |
int |
getScanlineStride()
Returns the numer of bytes you must add to a given address in the bitmap to advance to the next scanline of the image. |
short[] |
getShortPixels()
Returns a reference to the byte pixel data that has been generated by a previous call to #converToChunky. |
int |
getWidth()
Returns the width of the image. |
boolean |
isEnforceDirectColors()
If this returns true, then convertToChunky always generates chunky pixels using a DirectColorModel. |
void |
setBytePixels(byte[] buf)
|
void |
setEnforceDirectColors(boolean b)
If you set this to true, then convertToChunky always generates chunky pixels using a DirectColorModel. |
void |
setIntPixels(int[] buf)
|
void |
setPlanarColorModel(java.awt.image.ColorModel colorModel)
Replaces the color model used for conversions from/to chunky pixels. |
void |
setPreferredChunkyColorModel(java.awt.image.ColorModel colorModel)
Sets the preferred color model used for to chunky pixels. |
void |
setShortPixels(short[] buf)
|
| Methods inherited from class java.lang.Object |
|---|
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final int BYTE_PIXEL
public static final int INT_PIXEL
public static final int SHORT_PIXEL
public static final int NO_PIXEL
| Constructor Detail |
|---|
public BitmapImage(int width, int height, int depth, java.awt.image.ColorModel colorModel)
Pre condition: -
Post condition: Interleaved bitmap constructed.
Obligation: -
width
- Width in pixels.height
- Height in pixels.depth
- Number of bits per pixel.colorModel
- Color model to be used for conversions from/to chunky pixels.public BitmapImage(int width, int height, int depth, java.awt.image.ColorModel colorModel, boolean isInterleaved)
Pre condition: -
Post condition: BitmapImage constructed.
Obligation: -
width
- Width in pixels.height
- Height in pixels.depth
- Number of bits per pixel.colorModel
- Color model to be used for conversions from/to chunky pixels.isInterleaved
- Indicator for contiguous or interleaved bit-planes.public BitmapImage(int width, int height, int depth, java.awt.image.ColorModel colorModel, int bitStride, int scanlineStride)
Pre condition: ScanlineStride must be a multiple of BitplaneStride or vice versa.
Post condition: BitmapImage constructed.
Obligation: -
width
- Width in pixels.height
- Height in pixels.depth
- Number of bits per pixel.colorModel
- Color model to be used for conversions from/to chunky pixels.bitStride
- Number of data array elements between two bits of the same image pixel.scanlineStride
- Number of data array elements between a given pixel and the pixel in the same column of
the next scanline.| Method Detail |
|---|
public void setEnforceDirectColors(boolean b)
public boolean isEnforceDirectColors()
public int getWidth()
Pre condition: -
Post condition: -
Obligation: -
public int getHeight()
Pre condition: -
Post condition: -
Obligation: -
public int getDepth()
The depth indicates how many bits are used to form a single pixel.
Pre condition: -
Post condition: -
Obligation: -
public int getScanlineStride()
Pre condition: -
Post condition: -
Obligation: -
public int getBitplaneStride()
Pre condition: -
Post condition: -
Obligation: -
public void setPlanarColorModel(java.awt.image.ColorModel colorModel)
Pre condition: The new color model must correspond with the depth of the bitmap.
Post condition: Color model changed.
Obligation: -
colorModel
- The new color model.public java.awt.image.ColorModel getPlanarColorModel()
Pre condition: -
Post condition: -
Obligation: -
public void setPreferredChunkyColorModel(java.awt.image.ColorModel colorModel)
Pre condition: -
Post condition: Color model changed.
Obligation: -
colorModel
- The new color model.public java.awt.image.ColorModel getChunkyColorModel()
Pre condition: -
Post condition: -
Obligation: -
public byte[] getBitmap()
Pre condition: -.
Post condition: -
Obligation: The bitmap data array remains property of the BitmapImage and will be used at the next conversion to chunky. You can access it as you like (even during conversion) since this class does never change the contents of the bitmap.
public byte[] getBytePixels()
Pre condition: -
Post condition: -
Obligation: You may modify the contents of the array as you like to get some nice effects for the next call to #convertToChunky. Note whovewer that #convertToChunky will not reuse this array when the colorModel has been changed to a color format that requires pixels in integer format.
public short[] getShortPixels()
Pre condition: -
Post condition: -
Obligation: You may modify the contents of the array as you like to get some nice effects for the next call to #convertToChunky. Note whovewer that #convertToChunky will not reuse this array when the colorModel has been changed to a color format that requires pixels in integer format.
public int[] getIntPixels()
Pre condition: -
Post condition: -
Obligation: You may modify the contents of the array as you like to get some nice effects for the next call to #convertToChunky. Note however that #convertToChunky will not reuse this array when the colorModel has been changed to a color format that requires pixels in byte format.
public int getPixelType()
Pre condition: -
Post condition: -
Obligation: -
public BitmapImage clone()
Pre condition: -
Post condition: Clone created.
clone
in class java.lang.Object
public int convertToChunky()
This method will either generate byte pixel data or integer pixel data (depending on the color model).
The pixel array that resulted to a prior call to this method will be reused when the image dimension and the color model allows for it.
Pre condition: -
Post condition: Chunky pixels generated.
Obligation: -
public int convertToChunky(int top, int left, int bottom, int right)
This method will either generate byte pixel data or integer pixel data (depending on the color model).
Note that the size of the generated pixel data always corresponds to the size of the complete image. You do only specify a subset of the image to be converted not a subset to be extracted. Note also that the pixel data that resulted from prior calls to this method will be reused when the generated pixel array was of the same size and type.
Pre condition: -
Post condition: The indicated part of the bitmap has been converted into chunky pixels.
Obligation: -
public void convertFromChunky(java.awt.image.BufferedImage image)
This method will either generate byte pixel data or integer pixel data (depending on the color model).
Note that the size of the generated pixel data always corresponds to the size of the complete image. You do only specify a subset of the image to be converted not a subset to be extracted. Note also that the pixel data that resulted from prior calls to this method will be reused when the generated pixel array was of the same size and type.
Pre condition: -
Post condition: The indicated part of the bitmap has been converted into chunky pixels.
Obligation: -
public void flushPixels()
Pre condition: -
Post condition: The bitmap has given up all its references to the pixel data.
Obligation: The pixel data will not be reused at the next call to #convertToChunky.
public void setIntPixels(int[] buf)
public void setBytePixels(byte[] buf)
public void setShortPixels(short[] buf)
|
Copyright 2013-01-06 Werner Randelshofer | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Answer all Questions before submitting
1. Can we compare int variable with a boolean variable?
2. What is the size of booleanvariable?
3.What is the default value of float variable?
4. Can be constructor be made private?
Deletion is faster in LinkedListthan ArrayList.


“One day the Lord gathered together all the insects in the world, all the beetles, bugs, bees, mosquitoes, ants, locusts, grasshoppers, and other creatures who fly or hop or crawl, and shut them up in a huge sack well tied at the end. What a queer, squirming, muffled-buzzing bundle it made, to be sure! Then the Lord called the woman to him and said, ‘Woman, I would have you take this sack and throw it into the sea’.” — Abbie Farwell Brown, The Curious Book Of Birds


It is about T=18.00 CET, took about 200mg 99.3% pure BZP in a capsule. From reading about it, I expected to feel something after 30 minutes. But felt nothing. Also, I was on empty stomach.
T+1h
I had thoughts that the stuff I have is not pure enough or maybe fake.  My expectation was to feel after 2 minutes, but I felt as before this experiment began. The way I smoked, was with foil from a chewinggum packet and a rolled paper roll (the usual way that I smoke yaba). It tasted soapy and then I became convinced that it is BZP. There was a weak taste of burnt plastic too, pherhaps that was from the foil, I was sure that I burnt the plastic off before use, pherhaps there was some left? Also I snorted very little, it did not burnt, but it cleared away some snot. I thought for myself that I've found a best way to clear snot from the nose.
T+1.5h
At this point, my eyes were not dilated. But there was something going on in my body. To enhance my feelings, I went to the local store, bought some beer, then drank 4 beers (14 cl alcohol).
I was on party mood, called friends, but nobody could go out with me, they have to work the day after.
T+3h
I found that BZP is too weak for me, so I made 3 new caps. Took them all at once, then went alone to the city. There was now 1000mg BZP in my body.
T+4h
Now I started to experince that I'm stoned, I walked on the escalators and felt myself lighter, as the floating when on ecstacy. But that feeling lasted only for few seconds. Anyway, I knew that I was stoned. I ended up in a bar, where I sat alone, found myself looking at people very interesting. In the bar they played only hiphop, and I don't like that kind of music. So I left after 45 minutes. At this point my eyes were fully dilated.
T+4h to T+6h
I looked for a disco, but couldn't find any good one. Felt for female company, but not sex. When I spoke to people, they did not understand what I said to them. In my opinion I spoke clearly. When I walked I did it very quickly, sort of like running. Time went slow, and standing in queues were somewhat annoying. Most people ignored me when I asked what time it was etc. I must have had a very stoned look.
T+6h
I got to a place that played hip hop. While dancing I found out that my heart is beating rapid. I got a anxious, tried to talk with people, they did not understand what I talked about, or they just turned away ignoring me. Later I sat down next to a table with lot of glasses. Then a few guys came, and it was OK for me to sit there. I tried to explain about my pulse to some guy and told him to watch 1 minute for me, instead he bought me a drink. Well.. later I was back on the dancefloor.
T+8h
The place closed and I went to another one. I tried to write my phone number on a piece of paper, but couldnīt see what I wrote. The person I gave my number to had a hard time reading what I wrote. I had a hard time talking and understanding what people spoke to me. Anyway, my pulse was high, but not as high as in the disco.
T+10h
This third place closes and I walk around in the city. Take the subway home. On the way home I had problems with my pockets, I don't know what pocket is there and I can't examine them. It is also very hard to wrap up the paper from gum.
T+13h
I'm back home. Couldn't read the newspaper. It is still hard to read, the letters are just a big mess. Tried to read a map, it was too much information for me. Saw myself in the mirror, my pupils were not only dilated, my eyes were really wide open. I think this could have been the reason people avoided me. I had a weird look. I stopped drinking water, didn't feel thirsty. During the night I think I had several liters of water.

T+34h
My eyes are still dilated. I goto sleep.
T+39h
I wake up. My eyes are back to normal. Everything is as it used to be, except that my lips are very dry.
Myself, I prefer ecstacy. I think this could be an alternative to those who find ecstacy too heavy. To be stoned on BZP is closer to meth than ecstacy. On meth I talk more and meth is also heavier. That my eyes were dilated for a such long time was really annoying. If I take this again, I will take 300-500mg. No way more, and if I wouldn't feel anything, I don't care, because I don't want to repeat this eye dilation. And a having a friend watching me is a good idea, what if I would have collapsed on the dancefloor?? And I almost got stopped by police, I saw them staring at me from their car, that would have been an unpleasant experience. I had harder time making contact with people on BZP than on other drugs.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


org.hsqldb
Interface Trigger
- All Known Implementing Classes:
- TriggerSample
- public interface Trigger
The interface an HSQLDB TRIGGER must implement. The user-supplied class that
implements this must have a default constructor.
- Since:
- 1.7.0
- Author:
- Peter Hudson
|
Method Summary |
void |
fire(int type,
java.lang.String trigName,
java.lang.String tabName,
java.lang.Object[] oldRow,
java.lang.Object[] newRow)
The method invoked upon each triggered action. |
INSERT_AFTER
public static final int INSERT_AFTER
- See Also:
- Constant Field Values
DELETE_AFTER
public static final int DELETE_AFTER
- See Also:
- Constant Field Values
UPDATE_AFTER
public static final int UPDATE_AFTER
- See Also:
- Constant Field Values
INSERT_BEFORE
public static final int INSERT_BEFORE
- See Also:
- Constant Field Values
DELETE_BEFORE
public static final int DELETE_BEFORE
- See Also:
- Constant Field Values
UPDATE_BEFORE
public static final int UPDATE_BEFORE
- See Also:
- Constant Field Values
INSERT_AFTER_ROW
public static final int INSERT_AFTER_ROW
- See Also:
- Constant Field Values
DELETE_AFTER_ROW
public static final int DELETE_AFTER_ROW
- See Also:
- Constant Field Values
UPDATE_AFTER_ROW
public static final int UPDATE_AFTER_ROW
- See Also:
- Constant Field Values
INSERT_BEFORE_ROW
public static final int INSERT_BEFORE_ROW
- See Also:
- Constant Field Values
DELETE_BEFORE_ROW
public static final int DELETE_BEFORE_ROW
- See Also:
- Constant Field Values
UPDATE_BEFORE_ROW
public static final int UPDATE_BEFORE_ROW
- See Also:
- Constant Field Values
fire
public void fire(int type,
java.lang.String trigName,
java.lang.String tabName,
java.lang.Object[] oldRow,
java.lang.Object[] newRow)
- The method invoked upon each triggered action.
When UPDATE triggers are fired, oldRow contains the
existing values of the table row and newRow contains the
new values.
For INSERT triggers, oldRow is null and newRow contains the
table row to be inserted.
For DELETE triggers, newRow is null and oldRow contains the
table row to be deleted.
type contains the integer index id for trigger type, e.g.
TriggerDef.INSERT_AFTER (fredt@users)
- Parameters:
trigName
- the name of the triggertabName
- the name of the table upon which the
triggered action is occuringoldRow
- the old rownewRow
- the new row
Copyright © 2001 - 2005 HSQL Development Group. All Rights Reserved.


Source code:
run when neutral or forward var x var clicks x = 3 goto forward_label loop: clicks = steering forward_label: goto loop end
Assemble
Assembler output:


#assign testing="active">
During testing we often want to wire the bean context but supply some test doubles for certain dependencies.
We use withMock
and withSpy
to use Mockito mocks and spys and otherwise use
withBean
to use some other test double that we supply.
We can use withMock()
to have Mockito mocks
injected in place of the normal behaviour.
@Test public void myComponentTest() { try (BeanContext context = new BootContext() .withMock(Pump.class) .withMock(Heater.class) .withMock(Grinder.class, grinder -> { // setup the mock when(grinder.grindBeans()).thenReturn("stub response"); }) .load()) { // Act CoffeeMaker coffeeMaker = context.getBean(CoffeeMaker.class); coffeeMaker.makeIt(); Grinder grinder = context.getBean(Grinder.class); verify(grinder).grindBeans(); }
We can use withSpy()
to get the beans to be enhanced with Mockito Spy.
We typically want to do this when we want the bean to have most or all of it's behaviour and only stub out some of it's behaviour and track it's interactions.
@Test public void myComponentTest() { try (BeanContext context = new BootContext() .withSpy(Pump.class, pump -> { // setup the spy, only stub out pumpWater() doNothing().when(pump).pumpWater(); }) .load()) { // or setup here ... Pump pump = context.getBean(Pump.class); doNothing().when(pump).pumpSteam(); // act CoffeeMaker coffeeMaker = context.getBean(CoffeeMaker.class); coffeeMaker.makeIt(); verify(pump).pumpWater(); verify(pump).pumpSteam(); } }
We can use withBeans()
to supply our own test doubles.
@Test public void myComponentTest() { // create our test doubles to use Pump pump = mock(Pump.class); Grinder grinder = mock(Grinder.class); try (BeanContext context = new BootContext() .withBeans(pump, grinder) .load()) { // act CoffeeMaker coffeeMaker = context.getBean(CoffeeMaker.class); coffeeMaker.makeIt(); // assert assertThat(...) } }<@next "Modules" "modules"/>


Class RelationshipController
- java.lang.Object
-
- edu.cnm.deepdive.tunefull.controller.RelationshipController
-
@RestController @ExposesResourceFor(Relationship.class) public class RelationshipController extends java.lang.Object
RelationshipController
provides endpoints which allow the client to access data relating toRelationship
.- Since:
- 1.0
- Version:
- 1.0
- Author:
- Robert Dominugez, Roderick Frechette, Laura Steiner
-
-
Constructor Summary
Constructors Constructor Description RelationshipController(RelationshipService relationshipService, UserService userService)
Autowired constructor forRelationshipController
.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.util.List<Relationship>
myFollows(org.springframework.security.core.Authentication auth)
Gets all relationships in which the current user is following another user.java.util.List<Relationship>
myFriends(org.springframework.security.core.Authentication auth)
Gets all relationships in which the current user is a friend.java.util.List<Relationship>
myPendingRequests(org.springframework.security.core.Authentication auth)
Gets all relationships in which the user has received a friend request and hasn't yet responded.Relationship
requestFriendship(org.springframework.security.core.Authentication auth, User user)
Creates a relationship between the current user and another user.boolean
setFriendshipAccepted(org.springframework.security.core.Authentication auth, long relationshipId, boolean accepted)
Updates a relationship between two users.Relationship
startFollowing(org.springframework.security.core.Authentication auth, User user)
Lets the current user start following another user.
-
-
-
Constructor Detail
-
RelationshipController
public RelationshipController(RelationshipService relationshipService, UserService userService)
Autowired constructor forRelationshipController
.- Parameters:
relationshipService
- RelationshipServiceuserService
- UserService
-
-
Method Detail
-
myFriends
@GetMapping(value="/friendships", produces="application/json") public java.util.List<Relationship> myFriends(org.springframework.security.core.Authentication auth)
Gets all relationships in which the current user is a friend.- Parameters:
auth
- Authentication- Returns:
- List<Relationship>
-
myFollows
@GetMapping(value="/follows", produces="application/json") public java.util.List<Relationship> myFollows(org.springframework.security.core.Authentication auth)
Gets all relationships in which the current user is following another user.- Parameters:
auth
- Authentication- Returns:
- List<Relationship>
-
myPendingRequests
@GetMapping(value="/pending", produces="application/json") public java.util.List<Relationship> myPendingRequests(org.springframework.security.core.Authentication auth)
Gets all relationships in which the user has received a friend request and hasn't yet responded.- Parameters:
auth
- Authentication- Returns:
- List<Relationship>
-
requestFriendship
@ResponseStatus(CREATED) @PostMapping(value="/friendships", consumes="application/json", produces="application/json") public Relationship requestFriendship(org.springframework.security.core.Authentication auth, @RequestBody User user)
Creates a relationship between the current user and another user. This relationship is not yet a friendship, but is a follow and a friend request rolled into one.- Parameters:
auth
- Authenticationuser
- User- Returns:
- a new relationship between two users.
-
startFollowing
@ResponseStatus(CREATED) @PostMapping(value="/follows", consumes="application/json", produces="application/json") public Relationship startFollowing(org.springframework.security.core.Authentication auth, @RequestBody User user)
Lets the current user start following another user.- Parameters:
auth
- Authenticationuser
- User- Returns:
- a new relationship following another user
-
setFriendshipAccepted
@PutMapping(value="/friendships/{relationshipId}", consumes="application/json", produces="application/json") public boolean setFriendshipAccepted(org.springframework.security.core.Authentication auth, @PathVariable long relationshipId, @RequestBody boolean accepted)
Updates a relationship between two users.- Parameters:
auth
- AuthenticationrelationshipId
- longaccepted
- boolean- Returns:
- the updated relationship
-
-


Questions
- When is a program good enough to ship? Have you built what the customer wanted?
- Why (and how) does Netflix deliberately and randomly take down its own servers?
- What can we learn from the Boeing 737 disaster?
- How did Twitter eradicate the Fail Whale? And what does it have to do with Ruby?
- How do you get a patch accepted into an open-source project?
- You can write code. Can you build software?
Overview
Successful software projects require more than just technical expertise. Figuring out what the client wants, collaborating in a team, managing complexity, mitigating risks, staying on time and budget, and determining under various constraints when a product is good enough to be shipped are at least equally important topics that often have a significant human component. 17-313 explores these issues broadly covering the fundamentals of modern software engineering.
Assuming reasonably solid programming skills (including unit testing and code-level design), we will explore the following topics:
- Process consideration for software development
(How do avoid problems early? When and how much to design? When and how much to test? When and how to involve the customers? Agile methods...) - Requirements elicitation, documentation, and evaluation
(How to figure out what the customer really wants? Who else has an interest? How can we measure success objectively? How can we reliably document expectations? ...) - Design for quality attributes
(How can we design a system to be able to scale to millions of users? How can we design security into a system? ...) - Strategies for quality assurance, including measurement, inspection, and static and dynamic analysis
(What quality assurance strategy is best for a given system? What can we automate and when should we keep humans in the loop? How much testing and what kind of testing should we do? What qualities are important to assure beyond functional correctness? Can we evaluate usability, scalability, reliability, performance? How can we statically guarantee the absence of certain security issues? ...) - Empirical methods in software engineering
(How can we measure quality attributes such as performance, security, and reliability? How can we measure how users interact with the system? How can we know whether the difference matters? ...) - Time and team management
(How to estimate the duration and costs of a project? How to monitor progress and risks to recognize issues early? How to coordinate developers in a team? How to form and develop teams? How to select and motivate team members? How to deal with team dynamics such as social loafing? ...) - Economics of software development
(business models, outsourcing, open source, ...)
This course has a strong technical focus, and includes assignments with and without programming. Assignments also include written components. Students will get experience with team management and modern software-engineering tools. The course puts students on a fast track toward project management positions.
Assignments (mostly done in groups) include:
- An introduction assignment where individual students will learn to engage with an existing code base.
- A requirements assignment in which each team will interview stakeholders to elicit and document requirements for a software system.
- An architecture assignment in which teams will train and deploy an ML model using microservices. A project in which each team contributes to an open source project of their choice. This involves identifying an issue in the existing project, understanding the development process of that project and how to contribute, and actually making a contribution such as fixing a bug or adding a feature. Extra credit will be awarded if the contribution is merged into the project.
Logistics and People
Fall 2020, this course is designated as a hybrid offerring.
- All lectures will take place over zoom.
- Two recitations are assigned classrooms, when undergraduate in-person instruction is permitted; two are remote-only. Note that only individuals registered for a given in-person recitation may attend that in-person recitation. This is due to strict classroom capacity requirements.
- If you are assigned to Sections A or B, but know for sure you do not want to attend in person, please contact us to discuss the best way we can accommodate you.
Lectures:
- Tue/Thu 3:20-4:40 p.m. ET on Zoom
- Wed 1:20-2:10 p.m. ET in WEH 5403 (Section A)
- Wed 2:40-3:30 p.m. ET in WEH 5409 (Section B)
- Fri 1:20-2:10 p.m. ET on Zoom (Section C)
- Fri 2:40-3:30 p.m. ET on Zoom (Section D)
Office hours: Fri 9:15 - 10:15 am, 12:30 - 1:30 pm
Email<EMAIL_ADDRESS>Office hours: Tue 7:00 - 8:00 PM, Wed 10:00 - 11:00 AM
Email<EMAIL_ADDRESS>Please feel free reach out to the instructors on Slack outside of office hours if you have any questions; we'll try to answer you as quickly as possible, and are happy to set up ad hoc zoom meetings whenever possible.
Schedule
The following schedule describes the current planing status and the covered concepts. It is subject to change and will be updated as the semester progresses, especially to help focus on requested topics or support learning. The readings are almost always associated with a reading quiz; please check Canvas!
| Date | Topic | Reading assignments* | Assignments due* | |
|---|---|---|---|---|
| 1-Sep | Introduction | |||
| 2/4-Sep | Tools for collaborative software development | rec1 Recitation 1 | ||
| 3-Sep | Metrics and Measurement | Scheduling/background surveys | ||
| 8-Sep | Case Study: 737-MAX | Seattle Times Article on the Boeing 737 Max | ||
| 9/11-Sep | Docker and Docker Compose | rec2 Recitation 2 | ||
| 10-Sep | Milestones, Estimation, and Planning | Homework 2 PDF | ||
| 15-Sep | Software archaeology | hw1 Homework 1 | ||
| 16/18-Sep | Software Archaeology | rec3 Recitation 3 | ||
| 17-Sep | Requirements: Concepts and Challenges | Course notes on requirements | ||
| 22-Sep | Requirements: Elicitation and Documentation | Interview question prep | hw2 Homework 2 (Initial Plan) | |
| 23/25-Sep | Requirements Interviews | rec4 Recitation 4 | ||
| 24-Sep | Ethics | Ethics in technology prompt | ||
| 29-Sep | Software Engineering for Machine Learning | hw2 Homework 2 (Code Artifacts) | ||
| 30-Sep/2-Oct | Software Requirements | rec5 Recitation 5 | ||
| 1-Oct | Software Engineering for Machine Learning, Part 2 Demo Notebook |
hw2 Homework 2 (Reflection) | ||
| 6-Oct | Software Architecture -- Intro and Overview | Twitter Case Study | ||
| 7/9-Oct | Machine Learning | rec6 Recitation 6 Setup rec6 Recitation 6 |
||
| 8-Oct | Architecture: Documentation, Patterns, Tactics | Architecture Travelogue | ||
| 13-Oct | Architecture: Design Docs | System Design | ||
| 14/16-Oct | Midterm Review | |||
| 15-Oct | Microservices | hw3 Homework 3 | ||
| 20-Oct | DevOps | |||
| 21/23-Oct | Midterm Review | |||
| 22-Oct | Midterm | |||
| 27-Oct | QA & Testing | Netflix blog posts on AWS, Chaos Monkey, Simian Army | hw4 Homework 4a | |
| 28/30-Oct | Kubernetes | rec7 Recitation 7 | ||
| 29-Oct | Chaos Engineering | |||
| 3-Nov | Static Analysis (1/2) | Notes on static analysis | hw4 Homework 4b NOTE: DUE NOV 4 |
|
| 4/6-Nov | Continuous Integration and Static Analysis | rec8 Recitation 8 | ||
| 5-Nov | Static Analysis (2/2) | Interview question for Gremlin | hw4 Homework 4c NOTE: DUE NOV 6 |
|
| 10-Nov | ML Explainability and Testing | hw4 Homework 4d | ||
| 11/13-Nov | Chaos Engineering | rec9 Recitation 9 | ||
| 12-Nov | ML Explainability and Testing, Part 2 | |||
| 17-Nov | QA Process | Sadowski et al., Static Analysis at Google | ||
| 18/20-Nov | No recitation | |||
| 19-Nov | QA Process, Inspections/Code Review | |||
| 24-Nov | Thanksgiving Week | hw5 Homework 5 | ||
| 25/27-Nov | Thanksgiving Week | |||
| 26-Nov | Thanksgiving Week | |||
| 1-Dec | Process: From Iterative to Agile | UC report excerpts, UC article | ||
| 2/4-Dec | Agile Process | rec10 Recitation 10 | ||
| 3-Dec | Peopleware | |||
| 8-Dec | Interviewing | hw6 Homework 6(a) | ||
| 9/11-Dec | Team Dysfunction | rec11 Recitation 11 | ||
| 10-Dec | TBD | |||
| 17-Dec | NO CLASS FINALS WEEK | hw6 Homework 6 (rest) | ||
| Dec 18, 1-4 pm | Final Project Presentations |
* = For details, see assignment in Canvas.
Course Syllabus and Policies
The course will use zoom for lectures, remote recitation, and office hours; links are available through Canvas. The course uses Canvas (and Gradescope) for homework submission, grading, discussion, questions, announcements, lecture recordings, and supplementary documents; slides will be posted here; GitHub is used to coordinate group work. We will also use Slack for communication and group work. See Canvas for the sign up link.
Waitlist: We believe the waitlist is cleared; if you disagree or are having trouble enrolling, please contact us.
Prerequisites: No formal prerequisites, but you will get more out of the course if you have experience with some larger development projects, for example, through larger class projects (e.g., 17-214, 15-410), internships, or open-source contributions.
Communication: We make announcements through Canvas, including clarifying homework assignments. We will also be using Slack both for communication with the instructors, and to support your group work communication. The instructors and TAs hold weekly office hours and are reachable by email and Slack. Reach out for additional appointments.
Teamwork: Teamwork is an essential part of this course. Most assignments are done in teams of 3-5 students. Teams will be assigned by the instructor and stay together for multiple assignments. We will consider your time zones and availability when assigning teams. Guidance on teamwork, reflection, and conflict resolution will be provided throughout the semester and are an essential component of the class. Most assignments have a component that is graded for the entire group and a component that is graded individually. The team policy posted on Canvas applies and describes roles and teams and how to deal with conflicts and imbalances.
Textbook: Various readings throughout the semester available online or through the library; we do not have a single text book but rather assemble readings from different sources. As optional supplementary reading consider Ian Sommerville, Software Engineering, 7th or 8th edition. Note that we do not expect that the bookstore will carry the old edition; instead, many copies are available online, such as through Amazon.com (and many other booksellers and textbook reseller) for significantly less than 20USD.
Assessment: Evaluation will be based on the following distribution: 60% assignments, 20% midterm, 10% in-class exercises (which may be completed asynchronously), 10% reading quizzes. The midterm will be open-everything and take-home, designed to be completed in a standard 80-minute class period, but assigned over a 24-hour period to accommodate various remote time zones.
Time management: This is a 12-unit course, and it is our intention to manage it so that you spend close to 12 hours a week on the course, on average. In general, 4 hours/week will be spent in class and 8 hours on reading and assignments. Notice that most homework is done in groups, so please account for the overhead and decreased time flexibility that comes with groupwork. Please feel free to give the course staff feedback on how much time the course is taking for you.
Late work policy: Late work will receive feedback but no credit. Due to heavy reliance on teamwork in this course there are no late days. Exceptions to this policy will be made only in extraordinary circumstances, almost always involving a family or medical emergency---with your academic advisor or the Dean of Student Affairs requesting the exception on your behalf. Accommodations for travel (e.g., for interviews) are possible if requested at least 3 days in advance. Please communicate also with your team about timing issues.
Writing: Describing tradeoffs among decisions and communication with less technical stakeholders are key aspects of this class. Most homework assignments have a component that require discussing issues in written form or reflecting about experiences. To practice writing skills, the Global Communications Center (GCC) offers one-on-one help for students, along with workshops. The instructors are also happy to provide additional guidance if requested.
Professionalism: Your classmates are your colleagues. This is particularly true in this course, where we aim to provide you with principles, practices, tools, and paradigms that will enable you to be an effective, real-world Software Engineer. We ask that you treat one another like the professionals you are and that you are preparing to be.
To that end, we will not tolerate harassement in this class. We define harassment as unwelcome or hostile behavior of an ad hominem nature, i.e., that focuses not on ideas but on people and identity.
Harassment is against the law and we have no tolerance for it, and neither does the university. Even when behavior does not rise to the level of harassment (even if you think you're "just joking!"), it can still make people very uncomfortable, and harm their educational and professional career by forcing them to devote mental energy to something other than the material they are trying to learn or the professional successes they are trying to acheive. However, we expect that we do not need to threaten you to earn your respect on this matter: we simply ask that you treat one another like professionals, in the most positive sense.
 Do not be a bystander to unprofessional behavior.
- If you do not feel comfortable doing so, and/or if the behavior persists, send a private email to the course instructors or set up a meeting with us to discuss the matter. We will preserve your anonymity.
We, the course staff, are committed to affording you the same respect we ask you to afford one another. If you feel that we are not doing so, we hope you will feel comfortable either telling us so directly, or approaching another one of the course staff with your concerns.
(Thank you to Shriram Krishnamurthi and Evan Peck for sharing their own policies, from which we drew inspiration for this one.)
Academic honesty and collaboration: The usual policies apply, especially the University Policy on Academic Integrity. Many of the assignments will be done in groups. We expect that group members collaborate with one another, but that groups work independently from one another, not exchanging results with other groups. Within groups, we expect that you are honest about your contribution to the group's work. This implies not taking credit for others' work and not covering for team members that have not contributed to the team. Otherwise, our expectations regarding academic honestly and collaboration for group work are the same as for individual work, substituting elevated to the level of "group."
The course includes both individual assignments and individual components of group assignments. Although your solutions for individual parts will be based on the content produced for the group component (e.g., written reflections on lessons learned), we treat individual component of group assignments as equivalent to individual assignments overall, and expect you to complete such components independently of your groupmates.
The rest of this academic honesty and collaboration content is taken from the policy used in 15-214, which we reuse almost directly (with minor modifications, and attribution).
"You may not copy any part of a solution to a problem that was written by another student, or was developed together with another student, or was copied from another unauthorized source such as the Internet. You may not look at another student's solution, even if you have completed your own, nor may you knowingly give your solution to another student or leave your solution where another student can see it.
Here are some examples of behavior that are inappropriate:
- Copying or retyping, or referring to, files or parts of files (such as source code, written text, or unit tests) from another person or source (whether in final or draft form, regardless of the permissions set on the associated files) while producing your own. This is true even if your version includes minor modifications such as style or variable name changes or minor logic modifications.
- Getting help that you do not fully understand, and from someone whom you do not acknowledge on your solution.
- Writing, using, or submitting a program that attempts to alter or erase grading information or otherwise compromise security of course resources.
- Lying to course staff.
- Giving copies of work to others, or allowing someone else to copy or refer to your code or written assignment to produce their own, either in draft or final form. This includes making your work publicly available in a way that other students (current or future) can access your solutions, even if others' access is accidental or incidental to your goals. Beware the privacy settings on your open source accounts!
- Coaching others step-by-step without them understanding your help.
If any of your work contains any statement that was not written by you, you must put it in quotes and cite the source. If you are paraphrasing an idea you read elsewhere, you must acknowledge the source. Using existing material without proper citation is plagiarism, a form of cheating. If there is any question about whether the material is permitted, you must get permission in advance. We will be using automated systems to detect software plagiarism.
It is not considered cheating to clarify vague points in the assignments, lectures, lecture notes; to give help or receive help in using the computer systems, compilers, debuggers, profilers, or other facilities; or to discuss ideas at a very high level, without referring to or producing code.
Any violation of this policy is cheating. The minimum penalty for cheating (including plagiarism) will be a zero grade for the whole assignment. Cheating incidents will also be reported through University channels, with possible additional disciplinary action (see the above-linked University Policy on Academic Integrity).
If you have any question about how this policy applies in a particular situation, ask the instructors or TAs for clarification."
Note that the instructors respect honesty in these (and indeed most!) situations.
A note on self care. Please take care of yourself. Do your best to maintain a healthy lifestyle this semester by eating well, exercising, avoiding drugs and alcohol, getting enough sleep and taking some time to relax. This will help you achieve your goals and cope with stress. All of us benefit from support during times of struggle. You are not alone. There are many helpful resources available on campus and an important part of the college experience is learning how to ask for help. Asking for support sooner rather than later is often helpful.
If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support. Counseling and Psychological Services (CaPS) is here to help: call<PHONE_NUMBER> and visit their website at http://www.cmu.edu/counseling/. Consider reaching out to a friend, faculty or family member you trust for help getting connected to the support that can help.


PICS OF THE DAY: Zimbabweans Left Crying ‘Why’ Me After Heavy Rains
by Philip MangwiroHeavy rains in Zimbabwe leave citizens counting their losses.
It rained heavily yesterday throughout the country and whilst many are rejoicing that the rains have finally arrived, some are counting their losses after trees were uprooted in Harare CBD damaging cars.
YOU MAY ALSO LIKE:
In Other News..
The Chinese Embassy in Zimbabwe has disputed the figures of aid they donated to Zimbabwe which were given out by Finance Minister Mthuli Ncube during the 2020 National Budget presentation last week.
According to Mthuli Ncube, the Chinese donated only US$3.6 million. This figure pales in comparison to the US$50 donated by the United State government, the US$50 million donated by the United Kingdom, the US$41 million donated by the European Union and the US$28 million donated by Sweden.
Unsurprisingly the Chinese were not happy about these figures and insisted that there was a shortfall of more than US$133 million. According to the Chinese Embassy, the bilateral aid to Zimbabwe stands at US$136.8m and not US$3.6 million…….
………………The Embassy of the People’s Republic of China in Zimbabwe has taken note of the release of 2020 National Budget Statement by the Zimbabwean government. The Embassy appreciates the positive role the budget will play in promoting the policies and propagating the facts and figures related to the economic development of the country.
To View and Apply for the latest Jobs and Vacancies in Zimbabwe, Please Visit our Sister website iHarare Jobs


Bull Call Spread is an options strategy involving two call option contracts with the same expiration but different strikes. The strategy buys one call option with a lower strike and sells another call option with a higher strike price.
This strategy creates a ceiling and floor for the profit. By purchasing a call and selling a call with higher strike simultaneously, traders can reduce the cost of just one long call option with the premium of a short call option. But the premium of ITM call is more expensive than the OTM call. The strategy limits the loss resulting from a drop in the price of the underlying stock but still creates a ceiling to the profit while the underlying price is increasing.
Take GOOG as an example. If the share price of GOOG is $950 at time 0, the premium of ITM call option is 50 with strike 900 and the premium of OTM call option is 2 with strike 1000. If we ignore the commission, dividends and other transaction fees, the payoff of Bull Call Spread strategy is as follows:
price = np.arange(800,1100,1) k_low = 900 # lower strike price for call k_high = 1000 # higher strike price for call premium_low = 20 # premium of call option with lower strike premium_high = 2 # premium of call option with higher strike # long call with lower strike payoff_long_call = [max(-premium, i-k_low-premium_low ) for i in price] # short call with higher strike payoff_short_call = [min(premium, -(i-k_high-premium_high)) for i in price] payoff = np.sum([payoff_long_call, payoff_short_call], axis=0) plt.figure(figsize=(20,11)) plt.plot(price, payoff_long_call, label = 'long call') plt.plot(price, payoff_short_call, label = 'short call') plt.plot(price, payoff, label = 'Bull Call Spread') plt.legend(fontsize = 20) plt.xlabel('Stock Price at Expiry',fontsize = 15) plt.ylabel('payoff',fontsize = 15) plt.title('Bull Call Spread Payoff at Expiration',fontsize = 20) plt.grid(True)
From the payoff plot we can see, the maximum payoff of the strategy is the difference between the option strike prices minus the difference between the premiums.


"""""quote"""""
For the times in your life when you
really
want to emphasize what was """""said"""""
Number of quotes
Text to quote
Quoted text
(click to copy)


parsemsg.js is a really simple tool that converts app formatted message to HTML. It's built using regular expressions in combination with functional Javascript. It's really tiny (about 150 lines of code) and supports common popular platforms (Whatsapp, Youtube, Slack, and Tenor.cards). Plus, it can be easily extended by adding more regular expressions. Most common apps message format syntax features are supported. To check the recognized syntax rules, have a look at the README.
To use the parser, just grab the javascript code from here and simply call one of the following functions:
var parsedWA = parseWhatsappMessage(yourText);
var parsedYT = parseYoutubeMessage(yourText);
var parsedSlack = parseSlackMessage(yourText);
var parsedTC = parseTenorCardsMessage(yourText);
for the parser to parse the contents of yourText
as HTML.
Actions speak louder than words, right? Well, let's see it at work then! Enter some valid message text in the input field below, then press the buttons below it to convert it to HTML instantly!


The New Jersey Website Directory
*
Accountants
*
Airports
*
Antiques
*
Architects
*
Atlantic City
*
Auto Dealers
*
Auto Repair/ Parts
*
Bakeries/ Bagels
*
Banks/ Savings&Loans
*
Beauty Salons
*
Beauty Supplies
*
Bed & Breakfasts
*
Bicycles/ Bicycling
*
Books
*
Bridal/Weddings
*
Building Supplies
*
Careers/Jobs
*
Child Day Care Centers
*
Chiropractors
*
Coffee Houses
*
Computer Sales/Repair
*
Commuter Information
*
Contractors
*
Dance
*
Dentists
*
Farms
*
Fire Departments
*
Florists
*
Food Stores/Delis
*
Freight / Trucking
*
Funerals/Cemeteries
*
Gardening/Landscaping
*
Golf Courses
*
Government
*
Health
*
Historical Societies
*
History
*
Hobbies/Crafts
*
Holistic Medicine
*
Hospitals
*
Hotels/ Motels/ Inns
*
Insurance Agencies
*
Internet Service
*
Jewelry
*
Lakes/Rivers
*
Lawyers/Legal
*
Limos/Taxis
*
Lottery
*
Maps of New Jersey
*
Mortgages
*
Movie Theatres
*
Municipalities/Towns
*
Museums/Zoos
*
Music
*
Newspapers
*
NJ Counties
*
NJ Education Links
*
NJ Higher Education
*
NJ High Schools
*NJ History
*
NJ Grammar Schools
*
NJ Web Cams
*
Nightclubs
*
Parks
*
Performing Arts
*
Pets/Animals
*
Pharmacies
*
Photographers
*
Physicians
*
Police Departments
*
Printers
*
Radio & Television
*
Real Estate
*
Religion
*
Restaurants/Dining
*
Rescue Squads
*
Saltwater Fishing
*
Senior Citizens
*
Shopping
*
Shore Points
*
Skiing/Snowboarding
*
Sports
*
Support Groups
*
Transportation
*
Travel Agencies
*
Website Design
*
Wineries
*
ZIP CODES
*
MISCELLANEOUS
FREE
New Jersey
Classified Ads
on
metrojersey.com!
(Click Here and Sell)
Home
-
The Directory
-
Submit Your Site to metrojersey.com
-
Contact Us
-
NJ Forum
-
Privacy Policy
Copyright@ 1998-2003,
metrojersey.com
metrojersey.com is owned and operated by
Monarch Optimizing LLP, Kenilworth, NJ & Woodcliff Lake, NJ
.


| Total net profit | 37.6 | Gross profit | 165.0 | Gross loss | -127.4 |
| Profit factor | 1.3 | Expected payoff | 0.85 | ||
| Absolute drawdown | -30.3 | Maximal drawdown (%) | 23.3 (-332.86%) | ||
| Total trades | 44 | Profit trades (% of total) | 28 (63.64%) | Loss trades (% of total) | 16 (36.36%) |
| Long positions (won %) | 17 (70.59%) | Short positions (won %) | 27 (59.26%) | ||
| Largest | profit trade | 18.3 | loss trade | -14.3 | |
| Average | profit trade | 5.89 | loss trade | -7.96 | |
| Minimum | profit trade | 1.3 | loss trade | -5.5 | |
| Maximum | take profit in pips | 1830.0 | stop loss in pips | -1410.0 | |
| Average | take profit in pips | 642.5 | stop loss in pips | -789.1 | |
| Minimum | take profit in pips | 320.0 | stop loss in pips | -540.0 | |
| Maximum | Reward-Risk | 1.8 | Duration in minutes | 3088 | |
| Average | Reward-Risk | 0.8 | Duration in minutes | 624.3 | |
| Minimum | Reward-Risk | 0.3 | Duration in minutes | 21 | |
| Maximum | consecutive wins (profit in money) | 4.0 (32.5) | consecutive losses (loss in money) | 3.0 (-23.2) | |
| Average | consecutive wins | 2.0 | consecutive losses | 1.0 |
| Total net profit | 30.9 | Gross profit | 75.7 | Gross loss | -44.8 |
| Profit factor | 1.69 | Expected payoff | 1.82 | ||
| Absolute drawdown | -5.4 | Maximal drawdown (%) | 14.3 (51.07%) | ||
| Total trades | 17 | Profit trades (% of total) | 12 (70.59%) | Loss trades (% of total) | 5 (29.41%) |
| Largest | profit trade | 18.3 | loss trade | -14.3 | |
| Average | profit trade | 6.31 | loss trade | -8.96 | |
| Minimum | profit trade | 3.2 | loss trade | -6.3 | |
| Maximum | take profit in pips | 1830.0 | stop loss in pips | -1410.0 | |
| Average | take profit in pips | 620.0 | stop loss in pips | -854.1 | |
| Minimum | take profit in pips | 320.0 | stop loss in pips | -610.0 | |
| Maximum | Reward-Risk | 1.8 | Duration in minutes | 3088.0 | |
| Average | Reward-Risk | 0.7 | Duration in minutes | 595.7 | |
| Minimum | Reward-Risk | 0.3 | Duration in minutes | 21.0 | |
| Maximum | consecutive wins (profit in money) | 4.0 (33.4) | consecutive losses (loss in money) | 1.0 (-7.5) | |
| Average | consecutive wins | 1.0 | consecutive losses | 1.0 |
| Total net profit | 6.7 | Gross profit | 89.3 | Gross loss | -82.6 |
| Profit factor | 1.08 | Expected payoff | 0.25 | ||
| Absolute drawdown | -30.3 | Maximal drawdown (%) | 23.3 (-332.86%) | ||
| Total trades | 27 | Profit trades (% of total) | 16 (59.26%) | Loss trades (% of total) | 11 (40.74%) |
| Largest | profit trade | 11.0 | loss trade | -8.2 | |
| Average | profit trade | 5.58 | loss trade | -7.51 | |
| Minimum | profit trade | 1.3 | loss trade | -5.5 | |
| Maximum | take profit in pips | 1170.0 | stop loss in pips | -1040.0 | |
| Average | take profit in pips | 656.7 | stop loss in pips | -748.1 | |
| Minimum | take profit in pips | 390.0 | stop loss in pips | -540.0 | |
| Maximum | Reward-Risk | 1.5 | Duration in minutes | 2803.0 | |
| Average | Reward-Risk | 0.9 | Duration in minutes | 642.3 | |
| Minimum | Reward-Risk | Duration in minutes | 44.0 | ||
| Maximum | consecutive wins (profit in money) | 6.0 (27.7) | consecutive losses (loss in money) | 3.0 (-23.2) | |
| Average | consecutive wins | 2.0 | consecutive losses | 1.0 |


Try on sites which reflect our IP
We need to spoof
X-Forwarded-For
header such
X-Forwarded-For: "><img src=x onerror=alert(0);>
This injection can affect even persons who are inspecting server logs.


JOHN WILCOCK: Applying for a Permit to Exorcise the Pentagon of Evil Spirits, Levitating It Ten Feet Off the Ground
by Persoff and MarshallAbbie Hoffman and Martin Carey arrive at The Pentagon to do a literal hand-count on how many protestors will be needed to encircle the building for a protest. On the way out they apply for, and receive, a permit to initiate an Exorcism to rid the base of its evil demons.
Part one of "LEVITATION OF THE PENTAGON" — Continued Next Week
From John Wilcock, New York Years, by Ethan Persoff and Scott Marshall.


Email address
We'll never share your email with anyone else.
Password
Check me out
Submit
Registrate


An exploration of technology and the future of global development.
The 2020 Virtual Impact Summit has now concluded! But don't fret, you can watch our speaker livestreams here.
Subscribe to our newsletter to be notified when applications for the next year's summit open!
The Impact Summit unites young people who are passionate about technology and social good, while connecting them with entrepreneurs, civic activists, and thought leaders who are leveraging technology for social impact.
In addition to creating a strong community of students and professionals passionate about technology and social good, the summit provides an opportunity for students to find meaningful career opportunities and ignite the ideas that will create a more equitable, sustainable world!
Our mission is to bring together the most eager and optimistic minds to authentically form long-lasting relationships, learn together about the challenges we face, and ultimately work with one another to build a more just world.
We invite all who are compelled by that vision. This can mean computer science students who want to use their skills for social good; young entrepreneurs who hope to start companies that solve big, sticky problems; and passionate activists, policy makers, and philosophers fighting for a more humane technological society.
Anyone who thinks critically about the challenges we’re facing in the 21st century and has the guts to do something about them is encouraged to attend!
Featured speakers from The Impact Summit 2020.
During the summit, we host a pitch competition for young social entrepreneurs working on projects that are changing the world for the better, with funding awarded to the winners!
Check out the pitches from The Impact Summit 2020 and hear from founders who are making algorithms less biased, using AI for mental health, and growing CRISPR-edited algae to fight climate change!
Our mission is to demystify the path to a career in tech for social good by providing meaningful, accessible, actionable opportunities in the space.
To that end, we host a career expo that showcases the top companies that are doing well by doing good, all looking for new team members!
We reserve lots of time for group discussions and more relaxed time to hang with one another!
See the complete schedule and the programming packet for The Impact Summit 2020 here!
So many reasons! We're building a community of ambitious, like-minded students who have the chance to connect with social entrepreneurs, mentors, career opportunities, and capital. We want you to leave the conference feeling like you took one giant step closer to your future at the intersection of tech and social good. Maybe that's because you won some prize money for a venture you've already been working on. Or maybe it's because you found your next internship. Or maybe it's because you made a best friend for the summer. Whatever it is, we want to be a part of making that possible!
Lots of learning, lots of laughter, and lots of kind people; really interesting conversations on life, the universe, and everything; a dope virtual career fair with some awesome high-impact companies; great talks from super cool people (including your peers)!
A cure for the Coronavirus.
Anyone who thinks critically about the challenges we’re facing in the 21st century and has the guts to do something about them!
So glad you asked! See our 2018 programming packet, our 2019 packets from Opening Day and Closing Day, and our packet from 2020 for a complete list of all past speakers.
We’ve got you covered! Reach out to<EMAIL_ADDRESS>and we’ll respond as quickly as we can :)


In this email I'll be highlighting some things we may need from you.
Don't worry if you don't have all them, we'll try work with what you
have.
The List
1 - As much detail as possible about the project and it's purpose (If
you don't know what you need forward us your architect's detail or just
give us a call and we can discuss). Here are some things to think about:
What type of plans do you need? And How many?
Are there any restrictions to getting access to the property?
Do you need the drawings quickly?
2 - Location plan of the property - Don't have one? check out buyaplan.co.uk you can get one for
around £9.00. You'll need it for your planning application anyway.
3 - Photographs (if you have any)
4 - Double check that the address is correct - You'll be suprised as to
how many times the address or post code is wrong.
How Do I Send the Info?
There are two ways you can do this;
1) Reply to this email; or, 2) use the link below to update your enquiry
What's Next?
We are usually quick at sending out a quote; - usually within 30-45min
during office hours.
If you've submitted it outside the hours, sit tight we'll take a look at
it when we're back in the office.


Successively declared variables in C or Fortran are not necessarily stored at contiguous locations. Thus, care must be exercised that displacements do not cross from one variable to another. Also, in machines with a segmented address space, addresses are not unique and address arithmetic has some peculiar properties. Thus, the use of addresses, that is, displacements relative to the start address MPI_BOTTOM, has to be restricted.
Variables belong to the same sequential storage if they belong to the same array, to the same COMMON block in Fortran, or to the same structure in C. Valid addresses are defined recursively as follows:
The rules above impose no constraints on the use of derived datatypes, as long as they are used to define a communication buffer that is wholly contained within the same sequential storage. However, the construction of a communication buffer that contains variables that are not within the same sequential storage must obey certain restrictions. Basically, a communication buffer with variables that are not within the same sequential storage can be used only by specifying in the communication call buf = MPI_BOTTOM, count = 1, and using a datatype argument where all displacements are valid (absolute) addresses.
[] Advice to users.
It is not expected that MPI implementations will be able to detect
erroneous, ``out of bound'' displacements --- unless those overflow the
user address space --- since the MPI call may not know the extent of the
arrays and records in the host program.
( End of advice to users.)
[] Advice
to implementors.
There is no need to distinguish (absolute) addresses and (relative)
displacements on a machine with contiguous address space:
MPI_BOTTOM is
zero, and both addresses and displacements are integers. On machines where the
distinction is required, addresses are recognized as expressions that involve
MPI_BOTTOM.
( End of advice to implementors.)
Note that in Fortran, Fortran INTEGERs may be too small to contain an
address (e.g., 32 bit INTEGERs on a machine with 64bit pointers).
Because of this, in Fortran, implementations may restrict the use of
absolute addresses to only part of the process memory, and restrict the
use of relative displacements to subranges of the process memory where they
are constrained by the size of Fortran INTEGERs.


John Enverga
LinkedIn
●
Chicago, IL
Full Stack Developer
Full stack developer specializing in Javascript and SQL. Has technical background in math and science.
- Trained in full stack development.
- Has a lot of mathematical and scientific knowledge.
Core Competenecies
- Having a Bachelor of Science degree in Physics from the Illinois Institute of Technology, John has a mathematical and scientific background.
- John also has a technical background and computer literate, competent several programming languages such as Java, Javascript, and C++, as well as HTML, CSS, and SQL.
Certifications/Technical Proficiencies
- Full Stack Development, Microtrain Technologies
- CNC Manufacturing, Wright College, City Colleges of Chicago
Professional Experience
Professional Tutor, One Million Degrees - March 2018 - Present
- Using mathematical and scientific knowledge, tutored college students in math and science subjects to help increase their grades and understanding of the material in their courses.
- Is well-respected and liked among his pupils. Scholars found the material easier to study as a result of John's tutoring.


Cloud native security is a hot topic! Join our community-driven network live or watch the recording on YouTube. Join the slack discussion to suggest topics and guests here.
This community-driven network was created as a forum for cloud native security discussions. Hosted by Kris Nova, and sponsored by Sysdig, we will bring a range of content including presentations, interviews, demos, and reviews of cloud-native tools. Anything cloud-native is fair game.


[§521-6] Territorial application. This chapter applies to rights, remedies, and obligations of the parties to any residential rental agreement wherever made of a dwelling unit within this State. [L 1972, c 132, pt of §1]


KRIPPENDORF'S TRIBE
A Film Review by James Berardinelli
RATING: *1/2 OUT OF ****
United States, 1998 U.S. Release Date: 2/27/98 (wide) Running Length: 1:35 MPAA Classification: PG-13 (Profanity, sexual situations) Theatrical Aspect Ratio: 1.85:1
Cast: Richard Dreyfuss, Jenna Elfman, Lily Tomlin, Natasha Lyonne, Gregory Smith, Carl Michael Linder, David Ogden Stiers Director: Todd Holland Producer: Larry Brezner Screenplay: Charlie Peters based on the book by Frank Parkin Cinematography: Dean Cundey Music: Bruce Broughton U.S. Distributor: Touchstone Pictures
Even though I have the utmost respect for Richard Dreyfuss as an actor, his presence in a motion picture does not guarantee any particular level of quality. Like everyone else, Dreyfuss has bills to pay, so he occasionally accepts big paychecks for prominent roles in bad movies. Consequently, while his career highlights include JAWS, CLOSE ENCOUNTERS OF THE THIRD KIND, STAKEOUT, and TIN MEN, his resume is dotted with titles like MOON OVER PARADOR, LET IT RIDE, and now KRIPPENDORF'S TRIBE.
Let me start out by saying that KRIPPENDORF'S TRIBE is occasionally funny (although never riotously so), but that's about its only asset. The best word to describe this film is "asinine." The target audience would appear to be recent nursery school graduates if not for the numerous sexual innuendoes, which are aimed at someone going through puberty. KRIPPENDORF'S TRIBE tries to be a zany, off-the-wall comedy, but the film makers have forgotten three important rules. The first is that some minimal level of plot credibility has to exist. The second is that viewers should be able to identify with, or at least care about, a character or two. Finally, and most importantly, more than 5% of the jokes have to work.
Once upon a time, James Krippendorf (Dreyfuss) was a respected professor of anthropology at little Bounderby College. He and his wife obtained a grant to seek out a "lost tribe" somewhere in the wilds of New Guinea, a goal which they never accomplished. Shortly after their return from the failed trip, Krippendorf's wife died and he was left with the Herculean task of raising three children -- Shelly (Natasha Lyonne), Mickey (Gregory Smith), and Edmund (Carl Michael Linder) -- on his own. Now, over a year later, the college wants to see the results of the money they gave Krippendorf (which he has spent not on research, but on things for his family), so they send a new member of their faculty, Professor Veronica Micelli (Jenna Elfman), to inform him that he has been scheduled to give a lecture on his findings. When he arrives at the college for the momentous event, rather than telling the truth and risking being sent to jail for misappropriating school funds, he fabricates a tale about a mythical lost tribe, the "Shelmikedmu". To provide video footage, he films his children dressed in native garb. Soon, much to Krippendorf's surprise, the Shelmikedmu are a national phenomenon. But one disaffected professor (Lily Tomlin) is determined to prove that the tribe is a fraud.
The only way KRIPPENDORF'S TRIBE works is if you assume that all of the characters (not to mention the viewers) are dumber than dirt.  Director Todd Holland completely fails to develop any character into something more substantial than a device to implement various dubious gags. Meanwhile, attempts at satirizing the shallowness of American culture (i.e., how easily the public can be fooled into jumping on the bandwagon of the latest trend) come across as feeble and derivative.
The acting in underwhelming. Dreyfuss has definitely not given his "all" to the role of James Krippendorf. Alongside him, Jenna Elfman, the spunky co-star of TV's DHARMA AND GREG, radiates perkiness and little else. This quality, while fine for a 22-minute television program, quickly becomes irritating in the arena of a feature-length movie. No one in the supporting cast -- Lily Tomlin, David Ogden Stiers, Natasha Lyonne (Woody Allen's daughter in EVERYONE SAYS I LOVE YOU) -- excels.
I know that a movie's in trouble when it's half the length of TITANIC, but seems much longer. Most of what comes on screen is generic sit-com level material -- the kind of slop that people will absorb while dozing off in their favorite easy chair in front of the television set. If there's any upside, it's that I don't see much box-office support developing for this lame, ill-marketed miscue. KRIPPENDORF'S TRIBE will quickly become extinct.
Copyright 1998 James Berardinelli
- James Berardinelli e-mail<EMAIL_ADDRESS>Now with more than 1300 reviews... The ReelViews web site: http://movie-reviews.colossus.net/
"No art passes our conscience in the way film does, and goes directly to our feelings, deep down into the dark rooms of our souls"
- Ingmar Bergman
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


{% extends "base.html" %} {% block title %}
Medieval catalogues > SECULAR INSTITUTIONS: Hospitals, Towns, and the Professions > Sherburn, hospital > Bequest by Lionel Jackson, 15 October 1514
{% endif %}6 identified entries found.
All data was derived from the List of Identifications by Professor Richard Sharpe.
{% if not printing %}
A key to codes used in the List is available (opens in new tab).{% endif %}


VV Puram is Bangalore’s most famous Food Street and a complete must-do for anyone visiting or staying in Bangalore.  This guide attempts to cover almost each of the outlets starting from when one enters the street at Sajjan Rao Circle. Before that a few basic guidelines about this food street and what we suggest you keep in mind while planning this gastronomical adventure.
To taste maximum number of dishes and make the most of this trail, do it in a group of 8 or more people (who do not mind sharing food). There is so much on offer that just a couple of bites of the top items at each joint will fill you up to a point when the senses may crave but the stomach will refuse to take in any more. No point eating one or two items and heading back, we say.
VV Puram comes alive around 7:30 – 8:00 in the evening. While some of the shops start serving from 5:30-6:00 PM onwards, all of them are ready only by 7:00 PM.
 The crowds can mean having to wait a fair bit of time at some of the shops.
Finding parking is not extremely easy on weekends – try one of the roads leading into Sajjan Rao Circle if you can’t find parking around the circle itself.
Do use dustbins to dispose of the plates etc. Most shops will have dustbins placed at prominent locations.
Try and avoid wasting food.
Now a quick overview of the food before we get into the specifics of what each of the joints serve. There are about 15 outlets serving different types of food (listed below outlet by outlet). We would classify the food varieties into the following categories in decreasing order of specialty – from must- have to do-try to not-what-this-is-known-for. That is not to say that food listed in the last category is not good – it’s just not what this street is known for. Also, some of those in the last category are relatively new additions to this otherwise old food street, and purists that we are, we would like to call them out.
Not-what-this-street-is-known-for but can-try shops because their food is good:
Mumbai Pao Bhaji, Dabeli, Tawa Pulao,
Punjabi chaats (pani puri, papdi chaat, bread pakora, cutlets)
Paranthas / Rajasthani roti sabzi,
Lassi / Rose Milk / Kulfi
Chinese
Sandwiches
Mumbai Pao Bhaji, Dabeli, Tawa Pulao,


Arbitrary key-values appended to the geofence event and posted to your configured Config.url.
Unique geofence identifier.
Latitude of geofence center
Minimum time in milliseconds the device must "loiter" within this geofence before notifyOnDwell event fires.
Longitude of geofence center.
Set true
to fire event when device "loiters" within this geofence for loiteringDelay milliseconds.
Set true
to fire event when device enters this geofence.
ℹ See also:
Set true
to fire event when device exits this geofence.
Radius of the circular geofence.
⚠ The minimum reliable radius
is 200
meters. Anything less will likely not cause a geofence to trigger. This is documented by Apple here:
"The specific threshold distances are determined by the hardware and the location technologies that are currently available. For example, if WiFi is disabled, region monitoring is significantly less accurate. However, for testing purposes, you can assume that the minimum distance is approximately 200 meters".
Generated using TypeDoc
The Background Geolocation SDK implements the native iOS and Android Geofencing APIs.
ℹ Note:
200
meters.Always
—When in Use
will not work.Adding Geofences
Adding a single geofence with addGeofence.
Adding multiple geofences with addGeofences.
ℹ Note: Adding a geofence having an identifier which already exists within the SDK geofence database will cause the previous record to be destroyed and the new one inserted.
Listening for Geofence Events
Listen to geofence events with BackgroundGeolocation.onGeofence.
Infinite Geofencing
The Background Geolocation SDK contains unique and powerful Geofencing features that allow you to monitor any number of circular geofences you wish (thousands even), in spite of limits imposed by the native platform APIs (20 for iOS; 100 for Android).
The SDK achieves this by storing your geofences in its database, using a geospatial query to determine those geofences in proximity (geofenceProximityRadius), activating only those geofences closest to the device's current location (according the limit imposed by the corresponding platform).
1000
meters.Listening for changes in the actively-monitored set-of-geofences.
As the SDK periodically queries for geofences within the geofenceProximityRadius, you can listen for changes in the actively-monitored geofences using the event onGeofencesChange. This event will let you know those geofences which have begun to be actively monitored (GeofencesChangeEvent.on) in addition to those which just ceased to be actively monitored (GeofencesChangeEvent.off).
⚠ Note:
Removing Geofences
Once a geofence has been inserted into the SDK's database using addGeofence or addGeofences, they will be monitored forever. If you've configured stopOnTerminate
false
and startOnBoottrue
, geofences will continue to be monitored even if the application is terminated or device rebooted. To cease monitoring a geofence or geofences, you must remove them from the SDK's database.Querying Geofences
Use the method getGeofences to retrieve the entire Array of Geofence stored in the SDK's database.
Monitoring only geofences
The BackgroundGeolocation SDK allows you to optionally monitor only geofences without constant location-tracking. To engage geofences-only mode, use the method startGeofences instead of start.
Use option Config.geofenceModeHighAccuracy:true to improve the responsiveness of geofence events.
Toggling between tracking-modes start and startGeofences
The SDK can easily be toggled between State.trackingMode simply by executing the corresponding start or startGeofences methods.


<%sys_shortname%>
A reboot is performed to make these changes effective. Please wait while the system is rebooting: ???
The connection may be re-established via this link.


What is ASCEND ?
The ASEAN Standards and Certification for Experts in Disaster Management (ASCEND) project seeks to create a regionally recognised certification scheme for professions in disaster management to ensure and promote higher standards and quality in the management of disasters in the region. ASCEND can also be beneficial in identifying competent disaster management professionals in the region with a strong capacity to manage disasters to reduce the loss of life, respond effectively, recover more quickly, and decrease disaster risks throughout the ASEAN region wherever possible.
Through the generous funding from the Republic of Korea, the AHA Centre will implement the ASCEND project for three years in collaboration with the Korean National Fire Agency (KNFA) of the Republic of Korea. The project will be critical for the development of ASCEND since the AHA Centre will focus on the pilot application of the ASCEND Framework in identified ASEAN countries, which will be selected voluntarily. The objectives of the ASCEND are as follows:
- To enhance the capacity of the ASEAN countries in the implementation of ASCEND.
- To establish regionally recognised competency standards and assessment process covering five professions in disaster management.
- To improve the capacity of the AHA Centre to serve as the ASCEND secretariat.
- To promote understanding of the ASCEND Framework among the ASEAN Member
States (AMS) and other sectors in ASEAN in preparation towards the inclusion of ASCEND into the ASEAN Mutually Recognised Agreement (MRA).
Do you want to participate in ASCEND project?
Register NowAlready member? Please login to take the course.
Login


Murder mystery
Coordinator : Shivansh Mishra
Rules(Subject to change) :
- The hunt will comprise of 2 rounds - 1 written and another mystery
- Only 12 teams will be allowed to get past the first round based on time limit.
- Registration can be done anytime before 15 mins of the first round.
Items req: None (Budget already mentioned in the sheet)
Venue: 107, Acad


by Michael Martin (@problogdesign) from Deloitte Digital
Navigating reloads the entire page every time.
App downloaded once. Only data loaded from then on.
Lots of reasons. Evidenced by Stack Overflow's 2016 developer survey.
Easy to build fast, interactive apps without learning a huge set of new commands.
Each component is responsible for one thing. A component can have child components which each do a specific task.
We'll make the video and play button.
Every component has a render method, which describes how it looks.
JSX makes it easy to write render methods because it feels like writing HTML.
<button type="button">Play</button>
class VideoPlayer extends React.Component {
render() {
return (

<PlayButton />

);
}
}
class PlayButton extends React.Component {
render() {
return <button type="button">Play</button>;
}
}
How do I tell the button if it's a "Play" or "Pause" button?
Data flows from parents to children.
Props - Data from a parent component.
State - Data owned by the current component.
class VideoPlayer extends React.Component {
constructor() {
this.state = { isPlaying: false };
}
render() {
...
<PlayButton isPlaying={this.state.isPlaying} />
...
}
}
class PlayButton extends React.Component {
render() {
console.log(this.props.isPlaying);
}
}
If isPlaying is true, write "Pause". If false, write "Play."
Don't worry about what it was before. React handles that for you. Simple!
class PlayButton extends React.Component {
render() {
return (
<button>
{this.props.isPlaying ? 'Pause' : 'Play'}
</button>
);
}
}
But how can clicking "Play" change the "isPlaying" state in VideoPlayer?
Parents give the children a function to call when they need to pass something back up the tree.
class VideoPlayer extends React.Component {
// The function to "give" to the child.
togglePlaying() {
this.setState({
isPlaying: !this.state.isPlaying
});
}
render() {
...
<PlayButton
onClick={this.togglePlaying.bind(this)}
isPlaying={this.state.isPlaying} />
...
}
}
class PlayButton extends React.Component {
render() {
return (
<button onClick={this.props.onClick}>
{this.props.isPlaying ? 'Pause' : 'Play'}
</button>
);
}
}
Carry on editing our app in JSBin. It's the ideal playground.
React only draws components, you pick the rest.
Use a starter kit to skip that. Learn one piece at a time.
Ready to learn what those other pieces are?
(PS - We're hiring web developers)


This library supports creating and managing one or more half duplex serial connections with peripheral devices. The pointer returned when a connection is opened can be used to identify the connection for other calls with serial parameter types in this library. The identifier can also be used to identify the serial connection for higher level formatted text transmit/receive functions with text_t parameter types in the simpletext library.
More...
Go to the source code of this file.
Typedefs |
|
typedef struct serial_info | Serial_t |
|
typedef text_t | serial |
| | Makes declarations like serial lcd to stand in for text_t lcd. Spelling is choice of Parallax education, not the author.
|
Detailed Description
This library supports creating and managing one or more half duplex serial connections with peripheral devices. The pointer returned when a connection is opened can be used to identify the connection for other calls with serial parameter types in this library. The identifier can also be used to identify the serial connection for higher level formatted text transmit/receive functions with text_t parameter types in the simpletext library.
- Author
- Steve Denson, with naming conventions supplied by Parallax.
- Copyright
- Copyright (c) 2008-2013, Steve Denson, all Rights MIT Licensed.
- Core Usage
- No extra cores are used by the half duplex serial connection. The code gets copied to unused memory within the cog that calls serial_open.
- Memory Models
- Use with CMM, LMM, or XMMC.
- Version
- 0.85
- Help Improve this Library
- Please submit bug reports, suggestions, and improvements to this code to edito.nosp@m.r@pa.nosp@m.ralla.nosp<EMAIL_ADDRESS>Function Documentation
| void serial_close |
( |
serial * |
device | ) |
|
Close serial connection.
- Parameters
-
| Identifier | returned by serial_open. |
| serial* serial_open |
( |
int |
rxpin, |
|
|
int |
txpin, |
|
|
int |
mode, |
|
|
int |
baudrate |
|
) |
| |
Open a simple (half duplex) serial connection.
- Parameters
-
| rxpin | Serial input pin, receives serial data. |
| txpin | Serial output pin, transmits serial data. |
| mode | Unused mode field (for FdSerial compatibility) |
| baudrate | Bit value transmit rate, 9600, 115200, etc... |
- Returns
- serial pointer for use as an identifier for serial and simpletext library functions that have serial or text_t parameter types.
| int serial_rxChar |
( |
serial * |
device | ) |
|
Receive a byte. Waits until next byte is received.
- Parameters
-
| Identifier | returned by serial_open. |
- Returns
- receive byte 0 to 0xff or -1 if none available
| int serial_txChar |
( |
serial * |
device, |
|
|
int |
txbyte |
|
) |
| |
Send a byte.
- Parameters
-
| device | is a previously open/started serial device. |
| Identifier | returned by serial_open. |
- Returns
- Byte that was transmitted.


DependsOn
attribute
With the DependsOn
attribute you can specify that the creation of a specific
resource follows another. When you add a DependsOn
attribute to a resource,
that resource is created only after the creation of the resource specified in the
DependsOn
attribute.
Dependent stacks also have implicit dependencies in the form of target properties
!Ref
, !GetAtt
, and !Sub
. For example, if the properties of
resource A use a !Ref
to resource B, the following rules apply:
-
Resource B is created before resource A.
-
Resource A is deleted before resource B.
-
Resource B is updated before resource A.
You can use the DependsOn
attribute with any resource. Here are some typical
uses:
-
Determine when a wait condition goes into effect. For more information, see Creating wait conditions in a template.
-
Declare dependencies for resources that must be created or deleted in a specific order. For example, you must explicitly declare dependencies on gateway attachments for some resources in a VPC. For more information, see When a DependsOn attribute is required.
-
Override default parallelism when creating, updating, or deleting resources. AWS CloudFormation creates, updates, and deletes resources in parallel to the extent possible. It automatically determines which resources in a template can be parallelized and which have dependencies that require other operations to finish first. You can use
DependsOn
to explicitly specify dependencies, which overrides the default parallelism and directs CloudFormation to operate on those resources in a specified order.
During a stack update, resources that depend on updated resources are updated automatically. CloudFormation makes no changes to the automatically updated resources, but, if a stack policy is associated with these resources, your account must have the permissions to update them.
Syntax
The DependsOn
attribute can take a single string or list of
strings.
"DependsOn" : [
String, ...
]
Example
The following template contains an AWS::EC2::Instance resource with a DependsOn
attribute that
specifies myDB, an AWS::RDS::DBInstance. When CloudFormation creates this stack, it first creates
myDB, then creates Ec2Instance.
JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-0ff8a91507f77f867" }, "us-west-1" : { "AMI" : "ami-0bdb828fd58c52235" }, "eu-west-1" : { "AMI" : "ami-047bb4163c506cd98" }, "ap-northeast-1" : { "AMI" : "ami-06cd52961ce9f0d85" }, "ap-southeast-1" : { "AMI" : "ami-08569b978cc4dfa10" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "AMI" ] } }, "DependsOn" : "myDB" }, "myDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "5", "DBInstanceClass" : "db.t2.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : "MyName", "MasterUserPassword" : "MyPassword" } } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Mappings: RegionMap: us-east-1: AMI: ami-0ff8a91507f77f867 us-west-1: AMI: ami-0bdb828fd58c52235 eu-west-1: AMI: ami-047bb4163c506cd98 ap-northeast-1: AMI: ami-06cd52961ce9f0d85 ap-southeast-1: AMI: ami-08569b978cc4dfa10 Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: Fn::FindInMap: - RegionMap - Ref: AWS::Region - AMI DependsOn: myDB myDB: Type: AWS::RDS::DBInstance Properties: AllocatedStorage: '5' DBInstanceClass: db.t2.small Engine: MySQL EngineVersion: '5.5' MasterUsername: MyName MasterUserPassword: MyPassword
When a DependsOn
attribute is
required
VPC-gateway attachment
Some resources in a VPC require a gateway (either an Internet or VPN gateway). If your
CloudFormation template defines a VPC, a gateway, and a gateway attachment, any resources
that require the gateway are dependent on the gateway attachment. For example, an Amazon EC2
instance with a public IP address is dependent on the VPC-gateway attachment if the
VPC
and InternetGateway
resources are also declared in the
same template.
Currently, the following resources depend on a VPC-gateway attachment when they have an associated public IP address and are in a VPC.
-
Auto Scaling groups
-
Amazon EC2 instances
-
Elastic Load Balancing load balancers
-
Elastic IP addresses
-
Amazon RDS database instances
-
Amazon VPC routes that include the Internet gateway
A VPN gateway route propagation depends on a VPC-gateway attachment when you have a VPN gateway.
The following snippet shows a sample gateway attachment and an Amazon EC2 instance that depends on a gateway attachment:
JSON
"GatewayToInternet" : { "Type" : "AWS::EC2::VPCGatewayAttachment", "Properties" : { "VpcId" : { "Ref" : "VPC" }, "InternetGatewayId" : { "Ref" : "InternetGateway" } } }, "EC2Host" : { "Type" : "AWS::EC2::Instance", "DependsOn" : "GatewayToInternet", "Properties" : { "InstanceType" : { "Ref" : "EC2InstanceType" }, "KeyName" : { "Ref" : "KeyName" }, "ImageId": { "Fn::FindInMap": [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "EC2InstanceType" }, "Arch" ] } ] }, "NetworkInterfaces" : [ { "GroupSet" : [ { "Ref" : "EC2SecurityGroup" } ], "AssociatePublicIpAddress" : "true", "DeviceIndex" : "0", "DeleteOnTermination" : "true", "SubnetId" : { "Ref" : "PublicSubnet" } } ] } }
YAML
GatewayToInternet: Type: AWS::EC2::VPCGatewayAttachment Properties: VpcId: Ref: VPC InternetGatewayId: Ref: InternetGateway EC2Host: Type: AWS::EC2::Instance DependsOn: GatewayToInternet Properties: InstanceType: Ref: EC2InstanceType KeyName: Ref: KeyName ImageId: Fn::FindInMap: - AWSRegionArch2AMI - Ref: AWS::Region - Fn::FindInMap: - AWSInstanceType2Arch - Ref: EC2InstanceType - Arch NetworkInterfaces: - GroupSet: - Ref: EC2SecurityGroup AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: Ref: PublicSubnet
Amazon ECS service and Auto Scaling group
When you use Auto Scaling or Amazon Elastic Compute Cloud (Amazon EC2) to create container instances for an Amazon ECS cluster, the Amazon ECS service resource must have a dependency on the Auto Scaling group or Amazon EC2 instances, as shown in the following snippet. That way the container instances are available and associated with the Amazon ECS cluster before CloudFormation creates the Amazon ECS service.
JSON
"service": { "Type": "AWS::ECS::Service", "DependsOn": [ "ECSAutoScalingGroup" ], "Properties" : { "Cluster": { "Ref": "ECSCluster" }, "DesiredCount": "1", "LoadBalancers": [ { "ContainerName": "simple-app", "ContainerPort": "80", "LoadBalancerName" : { "Ref" : "EcsElasticLoadBalancer" } } ], "Role" : { "Ref":"ECSServiceRole" }, "TaskDefinition" : { "Ref":"taskdefinition" } } }
YAML
service: Type: AWS::ECS::Service DependsOn: - ECSAutoScalingGroup Properties: Cluster: Ref: ECSCluster DesiredCount: 1 LoadBalancers: - ContainerName: simple-app ContainerPort: 80 LoadBalancerName: Ref: EcsElasticLoadBalancer Role: Ref: ECSServiceRole TaskDefinition: Ref: taskdefinition
IAM role policy
Resources that make additional calls to AWS require a service role, which
permits a service to make calls to AWS on your behalf. For example, the
AWS::CodeDeploy::DeploymentGroup
resource requires a service role
so that CodeDeploy has permissions to deploy applications to your instances. When you
have a single template that defines a service role, the role's policy (by using the
AWS::IAM::Policy
or AWS::IAM::ManagedPolicy
resource),
and a resource that uses the role, add a dependency so that the resource depends on
the role's policy. This dependency ensures that the policy is available throughout
the resource's lifecycle.
For example, imagine that you have a template with a deployment group resource, a service role, and the role's policy. When you create a stack, CloudFormation won't create the deployment group until it creates the role's policy. Without the dependency, CloudFormation can create the deployment group resource before it creates the role's policy. If that happens, the deployment group will fail to create because of insufficient permissions.
If the role has an embedded policy, don't specify a dependency. CloudFormation creates the role and its policy at the same time.