#001 | A Visual Guide To Sustainable Software Engineering
RESOURCES TO EXPLORE
- Start Here: Principles of Sustainable Software Engineering
- UNESCO: Sustainable Engineering
- Sustainable Software Blog
- Sustainability @Microsoft
- 2020 Sustainability Announcement
- 2020 Environmental Sustainability Report
- Cloud Adoption Framework: Sustainability Outcomes and Benefits
- Sustainable Software Engineering Principles in AKS
What does Sustainability Mean?
According to UNESCO, sustainable engineering is the process of using resources in a way that does not compromise the environment or deplete the materials for future generations. By definition, this requires an interdisciplinary approach across multiple engineering fields.
The United Nations also defined 17 sustainable development goals to measure socio-economic improvement by tackling challenges like poverty, hunger, equality, clean energy, climate action, and more. Delivering on their ambitious 2030 agenda requires us to take urgent action immediately.
In my role as both a parent and a Cloud Advocate at Microsoft, this subject intrigued me! So I did what any engineer would do – I went looking for resources to educate myself. This is what I learned.
What does Sustainability Mean At Microsoft?
My first stop was the Microsoft Sustainability website. In Jan 2020, Microsoft announced they would not just be carbon negative by 2030 - but that they would eliminate historical carbon emissions (starting from 1975, when Microsoft was founded) by 2050.And setup a billion-dollar climate innovation fund to support this.
Their approach was grounded in science, with invesments in carbon reduction and removal technology - coupled with a partnership approach enlisting both employees and customers to adopt, amplify, and align with, these measures. And they promised transparency on the progress. One year later, we have a 96-page report
I first learned about our efforts here over a year ago, with the announcement that Microsoft would be carbon negative by 2030, with associated pledges to remove historical carbon emissions by 2050, and setup a $1B climate innovation fund. The post set out a principled approach grounded in science, with investments in carbon reduction and removal technology, enlisting of employees and customers to engage in activities.
They also promised transparency on progress - and a year later, we got the first 2020 Environmental Sustainability Report - 96 pages long! It might be easier to read this succinct review or scan the big picture.
My key takeaway was that we would focus on 4 areas for impact:
- CARBON - be carbon negative by 2030, remove all historical emissions by 2050.
- WATER - be water positive by 2030, reducing water intensity in all direct operations.
- WASTE - be zero waste by 2030, reducing as much waste as we create, in all direct operations.
- ECOSYSTEM - aggregate, analyze, and act upon, envionmental data - protect ecosystems in decline!
What does Sustainability Mean To Me?
Living in the Hudson Valley, I perceive sustainability as a community priority, with cause for local activism. Even a small individual action can have huge collective impact when aggregated at village, district, county or state levels. And with pandemic scenarios where more of us work remotely, the sustainable engineering habits of the workplace must necessarily translate to our homes and communities.
As a cloud advocate at Microsoft, I’ve been learning more green technology from the Green Cloud Advocacy Lead, Asim Hussain, who hosts a podcast (The Climate Fix), organizes a community (ClimateAction.tech) and maintains a website (Principles.Green) on the topic. But it was his Principles of Sustainable Software Engineering course that really helped me wrap my head around the terminology and core concepts for this topic. So, I sat down last week, completed the course, and made a sketchnote to give me the “big picture”!
You can download a printable version of the image from the cloud-skills.dev site. Take a few minutes to scan it - then go check out the Principles of Sustainable Software Engineering course. You might find it much easier to complete, and get more insights in the process.
Five Things I Learned About Sustainable Software Engineering
Here’s what I learned from my completion of that course:
Sustainability is a Collective Effort. | There are two core philosophies: everyone has a part to play and sustainability as the end goal is enough to justify the effort. Basically this is about butterfly effects (the smallest action can have large collective impact) and a duty to protect (do this for its own sake and not because there might be other benefits you get from it).
Sustainability is Inter-Disciplinary. Every human contributes to climate change and global warming, with every activity they do. Sustinable software engineering is at the intersection of multiple engineering fields - from climate science and electricity markets, to data center design, sofware and hardware engineering. Whatever your background, chances are that educating yourself will open your eyes to opportunities for optimization in your own workflows.
Carbon is a Proxy Measure | Electricity & Hardware are Carbon Proxies. Carbon dioxide is the most ubiquitous greenhouse gas (GHG), making carbon dioxide equivalent (aka “carbon”) a standard measure for other entities or activities that contribute to global warming. Hardware has embodied carbon - think of this as the fixed carbon costs for creation or disposal of hardware. Electricity has carbon intensity - think of this as the variable carbon costs associated with demand for computing resources. Because our electricity is drawn from a power grid that is supplied by both good sources (renewables like wind, solar, hyrdoelectric) and bad sources (fossil fuels like coal, gas), the carbon intensity can vary by time and by region.
Hardware & Energy Efficiency Are Key. Extending hardware lifetime amortizes the effective embodied carbon costs per year. Extend life by recycling the hardware (reuse parts) or refactoring the software (to run on older hardware). Energy efficiency is about reducing carbon intensity for workloads. Do this by demand shifting (move workloads to slots with lower carbon intensity) or demand shaping (adjust current workload to maximize use of renewables, and minimize use of fossil fuels e.g., in marginal power plants that are recruited when demand outstrips supply).
Think: Observability & Optimization. Observability is about being able to measure or estimate carbon footprints meaningfully, picking the criterion (carbon, energy, cost, data) that gives us the best (or most easily understood) estimate for evaluating impact of our actions. Optimization can then take two forms – be carbon-efficient (take actions that are transparent to users, and automated for aggressive impact) or be carbon-aware (make actions visible to users, often by sharing intelligence that can shape their decisions).
Next Steps: Actions You Can Take!
- Spend 30 minutes to understand the Principles of Sustainable Software Engineering.
- Learn about Microsoft Sustainability and read the Microsoft 2020 Sustainability Report recap.
- Read the UN Sustainability Goals to understand broader challenges for the ecosystem.
- Think about 1-2 actions you can take, in your home or work environment, to be sustainable.
If you have additional resources, or insights, please leave a comment in the Discussion Forum.


Hello Jerrod Smith!
Issued: Apr 2, 2018
Record locator: SMLSDVS
Greenville Spartanburg
Charlotte
Seats: --
Class: Economy (V)
Meals:
American Airlines 6500
OPERATED BY PSA AIRLINES AS AMERICAN EAGLE.
Charlotte
Boston
Seats: 14C
Class: Economy (V)
Meals: Food For Purchase
American Airlines 6500
Boston
Washington Reagan
Seats: 8C
Class: Economy (S)
Meals:
American Airlines 6500
Washington Reagan
Greenville Spartanburg
Seats: --
Class: Economy (S)
Meals:
American Airlines 6500
OPERATED BY PSA AIRLINES AS AMERICAN EAGLE.
AAdvantage # 00SMLS05
Ticket #<PHONE_NUMBER>650
American Express XXXXXXXXXXXXX650
Jerrod Smith
FARE-USD
TAXES AND CARRIER-IMPOSED FEES
TICKET TOTAL
$ 391.63
$ 68.97
$ 460.60
Get the American Airlines app
Baggage Information
Baggage charges for your itinerary will be governed by American Airlines BAG ALLOWANCE -GSPBOS-No free checked bags/ American Airlines BAG ALLOWANCE -BOSGSP-No free checked bags/ American Airlines 1STCHECKED BAG FEE-GSPBOS-USD25.00/ American Airlines /UP TO 50 LB/23 KG AND UP TO 62 LINEAR IN/158 LINEAR CM 1STCHECKED BAG FEE-BOSGSP-USD25.00/ American Airlines /UP TO 50 LB/23 KG AND UP TO 62 LINEAR IN/158 LINEAR CM 2NDCHECKED BAG FEE-GSPBOS-USD35.00/ American Airlines /UP TO 50 LB/23 KG AND UP TO 62 LINEAR IN/158 LINEAR CM 2NDCHECKED BAG FEE-BOSGSP-USD35.00/ American Airlines /UP TO 50 LB/23 KG AND UP TO 62 LINEAR IN/158 LINEAR CM ADDITIONAL ALLOWANCES AND/OR DISCOUNTS MAY APPLY
You have purchased a NON-REFUNDABLE fare. The itinerary must be canceled before the ticketed departure time of the first unused coupon or the ticket has no value. If the fare allows changes, a fee may be assessed for changes and restrictions may apply.
You have up to 24 hours from the time of ticket purchase to receive a full refund if you booked at least 2 days before departure. You must log in on aa.com or Contact Reservations to cancel. Once cancelled, your refund will be processed automatically.Refund Policy>>.
One or more of your flights is a Codeshare flight and is operated by a Partner Airline. If your journey begins with a flight operated by one of American's Partner Airlines, then please check-in with the Partner Airline for that portion of your journey. Upon check-in, they will check your luggage to its final destination and provide boarding passes for your connecting flights, if applicable.
Some American Airlines check-in counters do not accept cash as a form of payment. For more information, visit our Airport Information page.
Some everyday products, like e-cigarettes and aerosol spray starch, can be dangerous when transported on the aircraft in carry-on and/or checked baggage. Changes in temperature or pressure can cause some items to leak, generate toxic fumes or start a fire. Carriage of prohibited items may result in fines or in certain cases imprisonment. Please ensure there are no forbidden hazardous materials in your baggage like:
Some Lithium batteries (e.g. spares in checked baggage, batteries over a certain size), Explosives / Fireworks, Strike anywhere matches/ Lighter fluid, Compressed gases / Aerosols Oxygen bottles/ Liquid oxygen, Flammable liquids, Pesticides/ Poison, Corrosive material.
There are special exceptions for small quantities (up to 70 ounces total) of medicinal and toilet articles carried in your luggage, spare lithium batteries for most consumer electronic devices in carry-on baggage, and certain smoking materials carried on your person.
Certain items are required to be carried with you onboard the aircraft. For example, spare lithium batteries for portable electronic devices, cigarette lighters and e-cigarettes must be removed from checked or gate-checked baggage and carried onboard the aircraft. However, e-cigarettes may not be used on-board the aircraft.
Traveling with medical oxygen, liquid oxygen, mobility aids and other assistive devices may require airline pre-approval or be restricted from carriage entirely. Passengers requiring these items should contact the airline operator for information on use of such devices.
To change your reservation, please call 1-800-433-7300 and refer to your record locator.
NOTICE OF INCORPORATED TERMS OF CONTRACT
Air Transportation, whether it is domestic or international (including domestic portions of international journeys), is subject to the individual terms of the transporting air carriers, which are herein incorporated by reference and made part of the contract of carriage. Other carriers on which you may be ticketed may have different conditions of carriage. International air transportation, including the carrier's liability, may also be governed by applicable tariffs on file with the U.S. and other governments and by the Warsaw Convention, as amended, or by the Montreal Convention. Incorporated terms may include, but are not restricted to: 1. Rules and limits on liability for personal injury or death, 2. Rules and limits on liability for baggage, including fragile or perishable goods, and availability of excess valuation charges, 3. Claim restrictions, including time periods in which passengers must file a claim or bring an action against the air carrier, 4. Rights on the air carrier to change terms of the contract, 5. Rules on reconfirmation of reservations, check-in times and refusal to carry, 6. Rights of the air carrier and limits on liability for delay or failure to perform service, including schedule changes, substitution of alternate air carriers or aircraft and rerouting.
You can obtain additional information on items 1 through 6 above at any U.S. location where the transporting air carrier's tickets are sold. You have the right to inspect the full text of each transporting air carrier's terms at its airport and city ticket offices. You also have the right, upon request, to receive (free of charge) the full text of the applicable terms incorporated by reference from each of the transporting air carriers. Information on ordering the full text of each air carrier's terms is available at any U.S. location where the air carrier's tickets are sold or you can click on the Conditions of Carriage button below.
Air transportation on American Airlines and the American Eagle carriers® is subject to American's conditions of carriage.
NOTICE: This email and any information, files or attachments are for the exclusive and confidential use of the intended recipient(s). This message contains confidential and proprietary information of American Airlines (such as customer and business data) that may not be read, searched, distributed or otherwise used by anyone other than the intended recipient. If you are not an intended recipient, please do not read, distribute, or take action in reliance upon this message. If you suspect you have received this email in error, please notify the sender and promptly delete this message and its attachments from your computer.
NRID:<PHONE_NUMBER>0000006500000


--- layout: post status: publish published: true title: 'Dynamic Modeling: Aligning Business and IT' author: display_name: Tomas Restrepo login: tomasr email<EMAIL_ADDRESS>url: http://winterdom.com/ author_login: tomasr author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ wordpress_id: 297 wordpress_url: http://winterdom.com/2006/08/dynamicmodelingaligningbusinessandit date: '2006-08-06 20:09:58 +0000' date_gmt: '2006-08-06 20:09:58 +0000' categories: - Architecture tags: [] comments: [] ---
John Devados announces here the first book in the Architecture Journal series: Dynamic Modeling: Aligning Business and IT. His post also includes the foreword. I just downloaded it and skimmed over it and read selected portions of it that caught my eye.
Pretty interesting stuff and it's great to see the Architecture Journal expanding (I really enjoy the magazine itself). The layout is pretty good, easy on the eyes (and ready to be printed if you are so inclined, from the looks of it). Worth a good look.


Posted:
◀ prev ▲ next ▶*REDUCED 2 SELL TONITE $420* BNI IPhone 5S 16GB Gold Rogers w Receipt1 - $400 (Richmond center - brighouse SKYTRAIN)
Richmond center at number 2 road
(google map) (yahoo map)
condition: new
show contact info LIGHT ME UP Internetz! ¡1♡!
I'm selling a Brand New In Box, never used 16GB IPhone 5S in Champagne Gold.
The Phone comes with all the peripherals and accessories. IS LOCKED TO ROGERS, Will apparently work with a chatr sim also. The phone can also be unlocked for ~ an additional $60 after market by any number of places.
COMES WITH THE RECEIPT - FROM JUST A COUPLE DAYS AGO.

It has never been used, is 100% percent legit, and my name IDs, favorite color,
matches that on the receipt etc. etc. even the plastic shrink wrap, which was just opened once by the clerk at the store when he activated the phone. My girlfriend had been asking for an 5S (as in Samsung Galaxy) for her birthday (Monday) and I mixed up with S5.
I'm marking it down to $50 dollars less than the lowest post from the past week for a comparable device hoping it will sell before 6PM TODAY - FRIDAY. So that I have time to sort out a backup plan for my infantesties bday gift.
Call or text asap show contact info / e-mail also works i'm told ... mostly through a series of tubes?
- do NOT contact me with unsolicited services or offers


{% extends 'products/product_base.html' %} {% load static %} {% block css %}
Roll over image to zoom in
Sold on Amazon and Ebay


By utilizing elements and principles of Material Design, we were able to create a framework that incorporates
Use discount15 as discount code


Engaged leader
You are equally at ease presenting to elected officials at Cabinet meetings as you are whiteboarding with developers. You work across organizational and sectoral boundaries to build partnerships and ecosystems.


Fill in your details:
Age:
Sex:
Male
Female
BMI:
Number of children:
Are you a smoker?:
Yes
No
Region:
South-west
South-east
North-west
North-east
{% if result %} {% for variable, value in original_input.items() %}
{{ variable }}
: {{ value }} {% endfor %}
Predicted insurance premium:
{{ result }}
{% endif %}


@@include('src/components/head.component.html', { "page-title": "Home" })
*Leave as is if you do not wish to change it.*


TGMapViewController
@interface TGMapViewController : GLKViewController <UIGestureRecognizerDelegate>
TGMapViewController
is a flexible and customizable map view managing the lifecycle of a
GLKView component.
This view provides default gesture handlers for tap, double tap, long press, pan,
pinch, rotate and shove.
The public interface provides dynamic map marker placement, change of camera view settings, and map description changes through scene updates.
This view uses scenes descibed by the Tangram YAML scene syntax allowing you to fully customize your map description using your own data. Some pre-made basemap styles can be found here using Mapzen data sources.
To use basemap styles you can sign up for an API key and load it through your application:
let sceneURL = "https://mapzen.com/carto/walkabout-style-more-labels/walkabout-style-more-labels.yaml";
view.loadSceneFile(sceneURL, sceneUpdates: [ TGSceneUpdate(path: "sources.mapzen.url_params", value: "{ api_key: \(YOUR_API_KEY) }") ]);
Note
All the screen positions used in this inteface are in logical pixel or drawing coordinate system (based on aUIKit
coordinate system); which is independent of the phone pixel density. Refer the
Apple documentation
Coordinate Systems and Drawing in iOS for more informations.
-
If continuous rendering is set to
true
, the map view will render continuously, otherwise, the map will render only when an event occurs on the map (gesture, animation, view update…).Some styles can be set to be
animated
and this default value will be set appropriately, see the style parameter for more details.Note
Any changes to this value will override the default induced value from theanimated
style parameter. Setting this parameter to true will negatively impact battery life if left set for extended periods of time. Before setting, make sure battery usage is not something critical to your application.Declaration
Objective-C
@property (assign, readwrite, nonatomic) BOOL continuous;
Swift
var continuous: Bool { get set }
-
Assign a gesture recognizer delegate, may be
nil
, seeTGRecognizerDelegate
for more detailsDeclaration
Objective-C
@property (readwrite, nonatomic, nullable) id<TGRecognizerDelegate> gestureDelegate;
Swift
weak var gestureDelegate: TGRecognizerDelegate? { get set }
-
Assign a map viw delegate, may be
nil
, seeTGMapViewDelegate
for more detailsDeclaration
Objective-C
@property (readwrite, nonatomic, nullable) id<TGMapViewDelegate> mapViewDelegate;
Swift
weak var mapViewDelegate: TGMapViewDelegate? { get set }
-
Assign a
TGCameraType
to the view cameraDeclaration
Objective-C
@property (assign, readwrite, nonatomic) TGCameraType cameraType;
Swift
var cameraType: TGCameraType { get set }
-
Assign a longitude and latitude to the map view camera
Declaration
Objective-C
@property (assign, readwrite, nonatomic) TGGeoPoint position;
Swift
var position: TGGeoPoint { get set }
-
Assign a floating point zoom to the map view camera
Declaration
Objective-C
@property (assign, readwrite, nonatomic) float zoom;
Swift
var zoom: Float { get set }
-
Assign a rotation angle in radians to the map view camera
Declaration
Objective-C
@property (assign, readwrite, nonatomic) float rotation;
Swift
var rotation: Float { get set }
-
Assign a tilt angle in radians to the map view camera
Declaration
Objective-C
@property (assign, readwrite, nonatomic) float tilt;
Swift
var tilt: Float { get set }
-
Assign
TGHttpHandler
for network request management. A http handler with a default configuration is already provided to the map view.Must be non-
nil
.Note
Assigning a http handler is optional and should only be done if you want to change any network related configuration (cache path and network cache size, both memory and disk, or be notified when a network request completes). More informations on the default provided configuration can be found on the description ofTGHttpHandler
.Declaration
Objective-C
@property (readwrite, strong, nonatomic) TGHttpHandler *_Nonnull httpHandler;
Swift
var httpHandler: TGHttpHandler { get set }
-
Assign the default resource root for this map view. The resource root is the default directory where Tangram will try to load resources and scene assets.
Must be non
-nil
.Note
By default the resource root is the main bundle resource URL.Declaration
Objective-C
@property (readwrite, strong, nonatomic) NSURL *_Nonnull resourceRoot;
Swift
var resourceRoot: URL { get set }
-
Adds a named data layer to the map. See
TGMapData
for more details.Note
You cannot create more than one data source with the same name, otherwise the same object will be returned.
Declaration
Objective-C
- (nullable TGMapData *)addDataLayer:(nonnull NSString *)name;
Swift
func addDataLayer(_ name: String) -> TGMapData?
Parameters
name
the name of the data layer.
Return Value
the map data, nil if the data source can’t be initialized
-
Asks to capture a screenshot of the map view buffer.
A delegate should be set to the map view and
-[TGMapViewDelegate didCaptureScreenshot:view:screenshot]
implemented to receive the screenshot image data.Declaration
Objective-C
- (void)captureScreenshot:(BOOL)waitForViewComplete;
Swift
func captureScreenshot(_ waitForViewComplete: Bool)
Parameters
waitForViewComplete
whether the view should await for all of the map tiles of the current view to complete building and rendering
-
Set a
TGDebugFlag
to the map viewDeclaration
Objective-C
- (void)setDebugFlag:(TGDebugFlag)debugFlag value:(BOOL)on;
Swift
func setDebugFlag(_ debugFlag: TGDebugFlag, value on: Bool)
Parameters
debugFlag
the debug flag to set
value
whether the flag is on or off
-
Get the status of a specific
TGDebugFLag
Declaration
Objective-C
- (BOOL)getDebugFlag:(TGDebugFlag)debugFlag;
Swift
func getDebugFlag(_ debugFlag: TGDebugFlag) -> Bool
Parameters
debugFlag
the debug flag to get the status of
Return Value
whether the flag is currently on or off for the map view
-
Changes the status of a debug flag. If a debug flag is on, this will turn it off and vice-versa.
Declaration
Objective-C
- (void)toggleDebugFlag:(TGDebugFlag)debugFlag;
Swift
func toggle(_ debugFlag: TGDebugFlag)
Parameters
debugFlag
the debug flag to toggle the status of
-
Loads a scene file synchronously.
If the scene file is set as a resource in your application bundle, make sure to resolve the path for this URL relative to your bundle (for example
Resources/scene.yaml
).If your scene is hosted remotely (any path starting with
https://
orhttp://
is considered a remote scene file) Tangram will automatically load that remote scene file.Declaration
Objective-C
- (void)loadSceneFile:(nonnull NSString *)path;
Swift
func loadSceneFile(_ path: String)
Parameters
path
the scene path URL
-
Loads a scene file (similar to
-loadSceneFile:
), with a list of updates to be applied to the scene. If a scene update error happens, scene updates won’t be applied.Declaration
Objective-C
- (void)loadSceneFile:(nonnull NSString *)path sceneUpdates:(nonnull NSArray<TGSceneUpdate *> *)sceneUpdates;
Swift
func loadSceneFile(_ path: String, sceneUpdates: [TGSceneUpdate])
Parameters
path
the scene path URL
sceneUpdates
a list of
TGSceneUpdate
to apply to the scene -
Loads a scene file asynchronously, may call
-[TGMapViewDelegate mapView:didLoadSceneAsync:]
if aTGMapViewDelegate
is set to the map view.Declaration
Objective-C
- (void)loadSceneFileAsync:(nonnull NSString *)path;
Swift
func loadSceneFileAsync(_ path: String)
Parameters
path
the scene path URL
-
Loads a scene asynchronously (similar to
-loadSceneFileAsync:
), with a list of updates to be applied to the scene. If a scene update error happens, scene updates won’t be applied.Declaration
Objective-C
- (void)loadSceneFileAsync:(nonnull NSString *)path sceneUpdates:(nonnull NSArray<TGSceneUpdate *> *)sceneUpdates;
Swift
func loadSceneFileAsync(_ path: String, sceneUpdates: [TGSceneUpdate])
Parameters
path
the scene path URL
sceneUpdates
a list of
TGSceneUpdate
to apply to the scene -
Queue a scene update.
The path is a series of yaml keys separated by a ‘.’ and the value is a string of yaml to replace the current value at the given path in the scene.
Note
Scene updates must be applied with
-applySceneUpdates:
Declaration
Objective-C
- (void)queueSceneUpdate:(nonnull NSString *)componentPath withValue:(nonnull NSString *)value;
Swift
func queueSceneUpdate(_ componentPath: String, withValue value: String)
Parameters
componentPath
the path of the scene component to update @value the value to assign to the YAML component selected with
componentPath
-
Queue a list of scene updates.
Note
Scene updates must be applied with
-applySceneUpdates:
Declaration
Objective-C
- (void)queueSceneUpdates:(nonnull NSArray<TGSceneUpdate *> *)sceneUpdates;
Swift
func queue(_ sceneUpdates: [TGSceneUpdate])
Parameters
sceneUpdates
a list of updates to apply to the scene, see
TGSceneUpdate
for more infos -
Apply scene updates queued with
-queueSceneUpdate*
methods. If a scene update error happens, scene udpates won’t be applied.Declaration
Objective-C
- (void)applySceneUpdates;
Swift
func applySceneUpdates()
-
Set the radius in logical pixels to use when picking features on the map (default is
0.5
).This affects the way
-pick*
method will behave, the large this value is, the more selectable elements would get selected.Declaration
Objective-C
- (void)setPickRadius:(float)logicalPixels;
Swift
func setPickRadius(_ logicalPixels: Float)
Parameters
logicalPixels
the pixel radius in logical pixel size
-
Selects a feature marked as
interactive
in the stylesheet.Returns the result in `[TGMapViewDelegate mapView:didSelectFeature:atScreenPosition:].
Note
to receive events you must implement set
TGMapViewDelegate
to the map view and implement[TGMapViewDelegate mapView:didSelectFeature:atScreenPosition:]
.Declaration
Objective-C
- (void)pickFeatureAt:(CGPoint)screenPosition;
Swift
func pickFeature(at screenPosition: CGPoint)
Parameters
screenPosition
the logical pixels screen position used for the feature selection query
-
Selects a label (elements under points style or text styles) marked as
interactive
in the stylesheet.Returns the result in `[TGMapViewDelegate mapView:didSelectLabel:atScreenPosition:].
Note
To receive events you must set a
TGMapViewDelegate
to the map view and implement[TGMapViewDelegate mapView:didSelectLabel:atScreenPosition:]
.Declaration
Objective-C
- (void)pickLabelAt:(CGPoint)screenPosition;
Swift
func pickLabel(at screenPosition: CGPoint)
Parameters
screenPosition
the logical pixels screen position used for the feature selection query
-
Selects a marker marked as
interactive
and returns the result in `[TGMapViewDelegate mapView:didSelectMarker:atScreenPosition:].To set a marker interactive, you must set it when styling it:
TGMarker marker; marker.styling = "{ style: 'points', interactive : true, color: 'white', size: [30px, 30px], order: 500 }"
Note
To receive events you must set a
TGMapViewDelegate
to the map view and implement[TGMapViewDelegate mapView:didSelectMarker:atScreenPosition:]
.Declaration
Objective-C
- (void)pickMarkerAt:(CGPoint)screenPosition;
Swift
func pickMarker(at screenPosition: CGPoint)
Parameters
screenPosition
the logical pixels screen position used for the feature selection query
-
Removes all the markers added to the map view
Declaration
Objective-C
- (void)markerRemoveAll;
Swift
func markerRemoveAll()
-
Requests the view to draw another frame
Note
This method should only be called if reimplemented in a class that inherits fromTGMapViewController
Declaration
Objective-C
- (void)requestRender;
Swift
func requestRender()
-
Draws a frame
Note
This method should only be called if reimplemented in a class that inherits fromTGMapViewController
Declaration
Objective-C
- (void)renderOnce;
Swift
func renderOnce()
-
Requests the view to update
Note
This method should only be called if reimplemented in a class that inherits fromTGMapViewController
Declaration
Objective-C
- (void)update;
Swift
func update()
-
Converts a longitude and latitude to a screen position
Declaration
Objective-C
- (CGPoint)lngLatToScreenPosition:(TGGeoPoint)lngLat;
Swift
func lngLat(toScreenPosition lngLat: TGGeoPoint) -> CGPoint
Parameters
lngLat
the longitude and latitude of the geographic coordinate to convert
Return Value
the screen position,
(nil, nil)
if the value is incoherent or not visible on the screen -
Given coordinates in screen space (
x
right,y
down), set the output longitude and latitude to the geographic location corresponding to that point.Declaration
Objective-C
- (TGGeoPoint)screenPositionToLngLat:(CGPoint)screenPosition;
Swift
func screenPosition(toLngLat screenPosition: CGPoint) -> TGGeoPoint
Parameters
screenPosition
the 2d screen position to convert
Return Value
the longitude and latitude,
(nil, nil)
if the point is not visible on the screen
-
Animate the map view to another geographic coordinate.
Note
default ease type for this animation is set to cubic, see
TGEaseType
for more details.Declaration
Objective-C
- (void)animateToPosition:(TGGeoPoint)position withDuration:(float)seconds;
Swift
func animate(toPosition position: TGGeoPoint, withDuration seconds: Float)
Parameters
position
the map view geographic coordinate
seconds
the duration in seconds
-
Animate the map view to another geographic coordinate with a specific animation ease.
Declaration
Objective-C
- (void)animateToPosition:(TGGeoPoint)position withDuration:(float)seconds withEaseType:(TGEaseType)easeType;
Swift
func animate(toPosition position: TGGeoPoint, withDuration seconds: Float, with easeType: TGEaseType)
Parameters
position
the map view geographic coordinate
seconds
the duration of the animation given in seconds
easeType
the ease type to use for the animation, see
TGEaseType
for more details. -
Animate the map view to another zoom.
Note
default ease type for this animation is set to cubic, see
TGEaseType
for more details.Declaration
Objective-C
- (void)animateToZoomLevel:(float)zoomLevel withDuration:(float)seconds;
Swift
func animate(toZoomLevel zoomLevel: Float, withDuration seconds: Float)
Parameters
zoomLevel
the map view zoom level
seconds
the duration of the animation given in seconds
-
Animate the map view to another zoom level with a specific animation ease.
Declaration
Objective-C
- (void)animateToZoomLevel:(float)zoomLevel withDuration:(float)seconds withEaseType:(TGEaseType)easeType;
Swift
func animate(toZoomLevel zoomLevel: Float, withDuration seconds: Float, with easeType: TGEaseType)
Parameters
zoomLevel
the map view zoom level
seconds
the duration of the animation given in seconds
easeType
the ease type to use for the animation, see
TGEaseType
for more details. -
Animate the map view to another rotation.
Note
default ease type for this animation is set to cubic, see
TGEaseType
for more details.Declaration
Objective-C
- (void)animateToRotation:(float)radians withDuration:(float)seconds;
Swift
func animate(toRotation radians: Float, withDuration seconds: Float)
Parameters
radians
the map view rotation in radians
seconds
the duration of the animation given in seconds
-
Animate the map view to another rotation with a specific animation ease.
Declaration
Objective-C
- (void)animateToRotation:(float)radians withDuration:(float)seconds withEaseType:(TGEaseType)easeType;
Swift
func animate(toRotation radians: Float, withDuration seconds: Float, with easeType: TGEaseType)
Parameters
radians
the map view rotation in radians
seconds
the duration of the animation given in seconds
easeType
the ease type to use for the animation, see
TGEaseType
for more details. -
Animate the map view to another tilt.
Note
default ease type for this animation is set to cubic, see
TGEaseType
for more details.Declaration
Objective-C
- (void)animateToTilt:(float)radians withDuration:(float)seconds;
Swift
func animate(toTilt radians: Float, withDuration seconds: Float)
Parameters
radians
the map view tilt in radians
seconds
the duration of the animation given in seconds
-
Animate the map view to another tilt with a specific animation ease.
Declaration
Objective-C
- (void)animateToTilt:(float)radians withDuration:(float)seconds withEaseType:(TGEaseType)easeType;
Swift
func animate(toTilt radians: Float, withDuration seconds: Float, with easeType: TGEaseType)
Parameters
radians
the map view tilt in radians
seconds
the duration of the animation given in seconds
easeType
the ease type to use for the animation, see
TGEaseType
for more details.


Like mkdir -p
, but in node.js!
var mkdirp = require('mkdirp');
mkdirp('/tmp/foo/bar/baz', function (err) {
if (err) console.error(err)
else console.log('pow!')
});
Output
pow!
And now /tmp/foo/bar/baz exists, huzzah!
var mkdirp = require('mkdirp');
Create a new directory and any necessary subdirectories at dir
with octal
permission string opts.mode
. If opts
is a non-object, it will be treated as
the opts.mode
.
If opts.mode
isn’t specified, it defaults to 0777 & (~process.umask())
.
cb(err, made)
fires with the error or the first directory made
that had to be created, if any.
You can optionally pass in an alternate fs
implementation by passing in
opts.fs
. Your implementation should have opts.fs.mkdir(path, mode, cb)
and
opts.fs.stat(path, cb)
.
Synchronously create a new directory and any necessary subdirectories at dir
with octal permission string opts.mode
. If opts
is a non-object, it will be
treated as the opts.mode
.
If opts.mode
isn’t specified, it defaults to 0777 & (~process.umask())
.
Returns the first directory that had to be created, if any.
You can optionally pass in an alternate fs
implementation by passing in
opts.fs
. Your implementation should have opts.fs.mkdirSync(path, mode)
and
opts.fs.statSync(path)
.
This package also ships with a mkdirp
command.
usage: mkdirp [DIR1,DIR2..] {OPTIONS}
Create each supplied directory including any necessary parent directories that
don't yet exist.
If the directory already exists, do nothing.
OPTIONS are:
-m, --mode If a directory needs to be created, set the mode as an octal
permission string.
With npm do:
npm install mkdirp
to get the library, or
npm install -g mkdirp
to get the command.
MIT


Happy Birthday Akka!
I hope you have a wonderful birthday!
-Dad,Mom,Grand Parents,Aunt,Uncle & Brother


The Butler
Plot
In 2009, an elderly Cecil Gaines recounts his life story, while waiting at the White House to meet the newly inaugurated president.
In 1926, at the age of seven, Gaines is raised on a cotton plantation in Macon, Georgia, by his sharecropping parents. One day, the farm's owner, Thomas Westfall, rapes Cecil's mother, Hattie Pearl. Cecil's father confronts Westfall, and is shot dead. Cecil is taken in by Annabeth Westfall, the estate's caretaker and owner's grandmother, who trains Cecil as a house servant.
In 1937, at age eighteen, he leaves the plantation and his mother, who has been mute since the incident and presumably dies of old age by the time the plantation shuts down. One night, Cecil breaks into a hotel pastry shop and is, unexpectedly, hired. He learns advanced skills from the master servant, Maynard, who, after several years, recommends Cecil for a position in a Washington D.C. hotel. While working at the D.C. hotel, Cecil meets and marries Gloria, and the couple have two sons: Louis and Charlie. In 1957, Cecil is hired by the White House during Dwight D. Eisenhower's administration. White House maître d' Freddie Fallows shows Cecil around, introducing him to head butler Carter Wilson and co-worker James Holloway. At the White House, Cecil witnesses Eisenhower's reluctance to use troops to enforce school desegregation in the South, then his resolve to uphold the law by racially integrating Little Rock Central High School in Arkansas.
The Gaines family celebrates Cecil's new occupation with their neighbors, Howard and Gina. Louis, the elder son, becomes a first generation university student at Fisk University in Tennessee, although Cecil feels that the South is too volatile; he wanted Louis to enroll at Howard University instead. Louis joins a student program led by Southern Christian Leadership Conference (SCLC) activist James Lawson, which leads to a nonviolent sit-in at a segregated diner, where he is arrested. Furious, Cecil confronts Louis for disobeying him. Gloria, who feels that Cecil puts his job ahead of her, descends into alcoholism and an affair with the Gaines's neighbor, Howard.
In 1961, after John F. Kennedy's inauguration, Louis and a dozen others are attacked by the Ku Klux Klan while traveling on a bus in Alabama. Louis is shown participating in the 1963 Birmingham Children's Crusade, where dogs and water cannons were used to stop the marchers, one of the movement's actions which inspired Kennedy to deliver a national address proposing the Civil Rights Act of 1964. Several months after the speech, Kennedy is assassinated. His successor, Lyndon B. Johnson, enacts the transformative legislation into law. As a goodwill gesture, Jackie Kennedy gives Cecil one of the former president's neckties before she leaves the White House.
Louis is later shown participating in the 1965 Selma Voting Rights Movement, which inspired Johnson to demand that Congress enact the landmark Voting Rights Act of 1965. Johnson also gives Cecil a tie bar.
In the late 1960s, after civil rights activist Martin Luther King, Jr.'s assassination, Louis visits and tells his family that he has joined the Black Panthers. Outraged, Cecil orders Louis and his girlfriend, Carol, to leave his house. Louis is soon arrested, and Carter bails him out. Cecil becomes aware of President Richard Nixon's plans to suppress the movement.
The Gaines' other son, Charlie, confides to Louis that he plans to join the Army in the war in Vietnam. Louis announces that he won't attend Charlie's funeral if he is killed there because while Louis sees Americans as multiple races, Charlie sees the country as one race. A few months later, Charlie is killed and buried at Arlington National Cemetery. Louis does not attend. However, when the Black Panthers resort to violence in response to racial confrontations, Louis leaves the organization and returns to college, earning his master's degree in political science and eventually running for a seat in Congress.
Meanwhile, Cecil confronts his supervisor at the White House over the unequal pay and career advancement provided to the black White House staff. With President Ronald Reagan's support, he prevails, and his professional reputation grows to the point that he and his wife are invited by President and Nancy Reagan to be guests at a state dinner. Yet at the dinner and afterwards, Cecil becomes increasingly uncomfortable with the class divisions in the White House. Finally, after witnessing Reagan's refusal to support economic sanctions against South Africa, he resigns. Afterwards, Cecil and Gloria visit the Georgia plantation where he was raised, which by then had long been abandoned.
Gloria, wanting Cecil to mend his relationship with Louis, reveals to him that Louis has told her that he loves and respects them both. Realizing his son's actions are heroic, Cecil joins Louis at a Free South Africa Movement protest against South African apartheid, and they are arrested and jailed together.
In 2008, Gloria dies shortly before Barack Obama is elected as the nation's first African-American president, a milestone which leaves Cecil and Louis in awe. Two months, two weeks and one day later, Cecil prepares to meet the newly inaugurated President at the White House, wearing the articles he had received from the previous presidents.
Cast
Director:
- Lee Daniels
Writers:
- Danny Strong
- Wil Haygood
Stars
- Forest Whitaker as Cecil Gaines
- Oprah Winfrey as Gloria Gaines
- John Cusack as Richard Nixon


Suzhiyam Industrial Machines Private Limited, Chennai,
Tamilnadu
Biomass fired Thermic Fluid heater and Boiler conversion and
automation consultants
-
Capacity 2MW to 20MW
-
Multi fuel: Briquette, Pellet, Wood Chip, Municipal Solid
waste
-
Fully automatic no manual intervention required
-
Designed and Developed by IIT Madras Alumni
-
India's first and only water/oil cooled technology
-
Inbuilt Industrail Internet of things for Industry 4.0
standards
Contact: Ashok nagar, Chennai<EMAIL_ADDRESS>8123418241 /
9994603600
whatsapp chat
whatsapp chat
to watch video on mobile please use landscape mode (Rotate
Device)
Services offered
FO/Diesel/LPG/CNG/LDO fired Thermic Fluid Heater & Boiler
Convert your Fossil fuel based system to fully automated Biomass fired
system
Benefits
-
Reduce fuel cost by 50%
-
Get performance at par with Diesel burners
-
minimal man power operation
Fire Wood Fired Thermic Fluid Heater & Boiler
Automate your fired wood fired system to fully automated biomass fired
syste
Benefits
-
Reduce man power by 80%
-
increase boiler efficiency by 90%
-
multi fuel system Briquette, pellet, wood chip, Municipal solid
waste
-
no more pollution from chimney get pollution control
certificate


{% extends 'recipes/base.html' %} {% block content %}
by {{recipe.author}}
{{recipe.description|linebreaksbr}}
Time Required: {{recipe.time_required}}


Screenplay Selenium Webdriver tasks
Serenity provides a large number of built-in Screenplay tasks that make interacting with a web application quicker and easier to write. In this chapter, we will look at everything you need to know to write web tests with Serenity Screenplay.
Screenplay WebDriver abilities
Before a Screenplay actor can interact with a web page, we need to give them a WebDriver instance to work with. You do this with the BrowseTheWeb
ability. In a JUnit test, this code could look like the following:
@Managed
WebDriver driver;
...
Actor sam = Actor.named("Sam");
sam.can(BrowseTheWeb.with(driver));
If you are using Cucumber, Serenity will manage the WebDriver instances for you. You just need to define a Cast
object, whose job it is to provide actors to the scenarios. A simple approach is to use the OnlineCast
, which returns actors who can all browse the web with the default browser:
@Before
public void setTheStage() {
OnStage.setTheStage(new OnlineCast());
}
You can also use the whereEveryoneCan
method to provide additional abilities, e.g.
@Before
public void setTheStage() {
OnStage.setTheStage(
OnlineCast.whereEveryoneCan(
CallAnApi.at("http://my.server.endpoint")
)
);
}
This will provide actors who can both use WebDriver tasks and RestAssured tasks.
Opening a web page
In Screenplay, you open a new page using the Open
interaction. This can work with a URL, e.g:
sam.attemptsTo(Open.url("https://google.com"));
If you have defined a Page Object with a default url, you can open a page object:
@DefaultUrl("https://google.com")
public class GooglePage extends PageObject {}
...
GooglePage googlePage;
...
sam.attemptsTo(Open.browserOn().the(googlePage));
Or you can use the class directly, e.g.
sam.attemptsTo(Open.browserOn().the(GooglePage.class));
Simple WebDriver interactions
Common WebDriver actions are represented by their own Interaction classes in Serenity Screenplay.

Target SUBMIT_BUTTON = Target.the("Submit button").located(By.cssSelector("input[value='Go']"))
sam.attemptsTo(Click.on(SUBMIT_BUTTON));
In addition to a Target
object, the Click.on(…)
method lets you click on a By
locator, an XPath or CSS expression in String form, or a WebElementFacade
. For example:
sam.attemptsTo(Click.on(By.cssSelector("input[value='Go']")));
sam.attemptsTo(Click.on("#submit-button"));
WebElementFacade submitButton = find(By.cssSelector("input[value='Go']"));
sam.attemptsTo(Click.on(submitButton));
You can also provide a list of locators, to progressively narrow down the search. For example, the following will click on the link with the text "Accounts" inside the main menu element:
sam.attemptsTo(Click.on(By.cssSelector("#mainMenu"), By.linkText("Accounts")));
As with a standard Serenity click operation, if the target is a form element (input
, button
, select
, textarea
, link
, option
), Serenity will wait until the element is enabled before clicking.
Typing values into fields
To type values into fields (where a conventional Selenium test would use the sendKeys()
method), you use the Enter
interaction class. The Enter
class uses a simple DSL
Target NEW_TODO = Target.the("New Todo input field").locatedBy(".new-todo");
sam.attemptsTo(
Enter.theValue("Walk the dog").into(NEW_TODO)
);
You can also use the thenHit()
method as a convenience to enter a text value and then send an individual key to the same element:
sam.attemptsTo(
Enter.theValue("Walk the dog").into(NEW_TODO).thenHit(Keys.ENTER)
);
Serenity waits until a field is enabled before typing a value into the field, and clear the field beforehand. For some UIs, this may not be necessary, or may even interfer with the screen behaviour. To precisely replicate the WebDriver sendKeys()
behaviour, you can use the keyValues()
method instead of enterValues()
:
sam.attemptsTo(
Enter.keyValues("Walk the dog").into(NEW_TODO)
);
Hitting a key
If you just want to hit a single key into a field, you can also use the Hit
interaction class. This class also uses sendKeys()
under the hood, but can sometimes be more readable:
sam.attemptsTo(
Hit.the(Keys.ENTER).into(NEW_TODO)
);
Or (for equivalent results):
Target SELECT_CITY = Target.the("City dropdown").locatedBy(".city-selection-list");
sam.attemptsTo(
Hit.the(Keys.ARROW_DOWN).keyIn(SELECT_CITY)
);
Working with dropdowns
We can use the SelectFromOptions
interaction to select a value in a dropdown list, either by value, by visible text, or by index. An example is shown below:
sam.attemptsTo(
SelectFromOptions.byVisibleText("Paris").from(SELECT_CITY)
);
Moving the mouse
Some tests need us to hover over an element, for example to display a menu or icon. In Serenity Screenplay you can use the MoveMouse
interaction class to do this. Like the other interaction classes, this will work with an element, an XPath or CSS selector, a locator or a sequence of locators.
Target PROFILE_BUTTON = Target.the("Profile Button").locatedBy("#profile");
sam.attemptsTo(
MoveMouse.to(PROFILE_BUTTON)
);
Often when we move the mouse over an element, we want to perform another action afterwards. The MoveMouse
interaction class lets us do this using the andThen()
method, which takes a lambda expression as a parameter. The lambda takes an Actions
object as a parameter, which can be used to define subsequent actions. For example to move over a button and then doubleclick, we could write the following:
sam.attemptsTo(
MoveMouse.to(PROFILE_BUTTON).andThen( actions -> actions.doubleClick() )
);
Or we could shorten the code to a method reference:
sam.attemptsTo(
MoveMouse.to(PROFILE_BUTTON).andThen( Actions::doubleClick() )
);
JavaScript Clicks
On some sites, a normal WebDriver click does not work, and we need to use JavaScript directly. We can do this using the JavaScriptClick
interaction class. This has an identical usage as Click
, as shown here:
sam.attemptsTo(JavaScriptClick.on(SUBMIT_BUTTON));
Scrolling
The ScrollTo
interaction class lets you scroll to a specified element:
sam.attemptsTo(Scroll.to(SUBMIT_BUTTON));
You can also specify whether to align the scrolling with the top or bottom of the target element by andAlignToTop()
and andAlignToBottom()
methods:
sam.attemptsTo(Scroll.to(SUBMIT_BUTTON).andAlignToTop());
Querying a web UI
Serenity Screenplay also gives you a large number of options when it comes to querying a web UI. Most involve special types of Question
class.
In Screenplay web tests, you can simply implement a question which returns the object type you are interested, and then query the UI in a conventional Webdriver way. For example, suppose we want to read the user name on a page, which can be located with the ".user-name" CSS selector.
A Screenplay assertion to check the user name might look like this:
sam.should(seeThat(TheUserName.value(), equalTo("sam")));
We could create a TheUserName
question class to query this field as follows:
@Subject("the displayed username")
public class TheUserName implements Question<String> {
@Override
public String answeredBy(Actor actor) {
return BrowseTheWeb.as(actor).findBy(".user-name").getText();
}
public static Question<String> value() { return new TheUserName(); }
}
Here we use BrowseTheWeb.as(actor)
to get the Serenity WebDriver API for the actor’s webdriver instance, which gives access to the full range of Serenity Page Object methods.
We could also use a Target to locate the user name, which we could store in a separate Page Compenent class:
public static Target USER_NAME = Target.the("User name").locatedBy(".user-name");
We can then use the resolveFor()
method to find the element matching that target in the actor’s browser:
@Subject("the displayed username")
public class TheUserName implements Question<String> {
@Override
public String answeredBy(Actor actor) {
return USER_NAME.resolveFor(actor).getText();
}
public static Question<String> value() { return new TheUserName(); }
}
Alternatively, we could write this class as a factory, and use a lambda expression instead of a fully blown Qeustion class:
public class TheUserName {
public static Question<String> value() {
return actor -> USER_NAME.resolveFor(actor).getText();
}
}
In this case, the @Subject
annotation will have no effect, so we need to pass in the name of the object we are checking in the Screenplay assertion:
sam.should(seeThat("the displayed username", TheUserName.value(), equalTo("sam")));
Serenity also provides a number of shortcuts related to querying web pages, which you will find in the net.serenitybdd.screenplay.questions
package. In the following sections we look at how these work.
Reading text
Reading a value from an element is one of the most common ways we interact with a web page. The Text
class can be used to read text values in a more fluent style. The basic usage pattern looks something like this:
Text.of(<target>).viewedBy(actor).as<Type>();
Using this style, we could rewrite the user name question from the previous section like this:
public class TheUserName {
public static Question<String> value() {
return actor -> Text.of(USER_NAME).viewedBy(actor).asString();
}
}
Reading numbers
This would not be a very strong use case by itself. But the Text
class makes it easy to do type conversions in a very readable way. For example, if we wanted to read an Integer value rather than a String, we can use the asInteger()
method in the place of asString()
. This might lead to a factory class like the following:
public class TheUser {
public static Question<String> name() {
return actor -> Text.of(USER_NAME).viewedBy(actor).asString();
}
public static Question<Integer> age() {
return actor -> Text.of(USER_AGE).viewedBy(actor).asInteger();
}
}
You can also use asLong()
, asDouble()
, asFloat()
and asBigDecimal()
to convert the value to other numerical types.
Reading lists
We can also return a list of values located by a given target, with the asList()
method, illustrated in the following example:
@Subject("the displayed todo items")
public class DisplayedItems implements Question<List<String>> {
@Override
public List<String> answeredBy(Actor actor) {
return Text.of(TodoList.ITEMS)
.viewedBy(actor)
.asList();
}
}
Reading dates
You can convert a retrieved value to a LocalDate
using the asLocalDate()
method, e.g.
public static Question<LocalDate> dateOfBirth() {
return actor -> Text.of(USER_DOB).viewedBy(actor).asLocalDate("dd-MMM-yyyy");
}
Reading enums
It is often convenient to convert displayed values directly to enums. You can do this by using the asEnum()
method. For example, suppose we have the following enum class:
public enum TodoStatusFilter {
All, Active, Completed
}
We could write a class to convert a text value on a page to the TodoStatusFilter
enum as shown here:
public class CurrentFilter implements Question<TodoStatusFilter> {
@Override
public TodoStatusFilter answeredBy(Actor actor) {
return Text.of(TodoList.SELECTED_FILTER)
.viewedBy(actor)
.asEnum(TodoStatusFilter.class);
}
public static CurrentFilter selected() {
return new CurrentFilter();
}
}
Reading off-screen text
The WebDriver getText()
method may fail in certain cases if the element being read is not visible on the screen. For example, if you have a long list, elements below the bottom of the screen may not be accessible.
To get around this issue, you can scroll to the element before retrieving the text, but this can be slow and not always reliable.
Another approach is to read th textContent
attribute, which will return a value whether the element is displayed or not. You can use the TextContent
class in the place of the Text
class to achieve this. For example, you could read the full list of results, even if some where below the bottom of the page, like this:
@Subject("the displayed todo items") public class DisplayedItems implements Question<List<String>> { @Override public List<String> answeredBy(Actor actor) { return TextContent.of(TodoList.ITEMS) .viewedBy(actor) .asList(); } }
Reading values
For HTML form elements, we are often more interested in the value
attribute than the text content. In native WebDriver, you would get the value by calling element.getAttribute("value")
. In Serenity Screenplay, we can use the Value
class to achieve this.
For example, suppose we have a registration form
public class TheRegistrationForm {
public static Question<String> firstName() {
return actor -> Value.of(FIRST_NAME).viewedBy(actor).asString();
}
}
The Value.of()
method follows the same pattern as Text.of()
, so all of the conversion strategies discussed in the previous section also apply to Value.of()
.
Reading from dropdown lists
You can read the selected value or values from a dropdown list using either the SelectedValue
or SelectedVisibleTextValue
class. For example, imagine our registration form had an age dropdown, with integer values. We could reead the selected value as follows:
public class TheRegistrationForm {
public static Question<Integer> age() {
return actor -> SelectedValue.of(AGE).viewedBy(actor).asInteger();
}
}
If you needed to return the displayed value, you could use SelectedVisibleTextValue
instead:
public class TheRegistrationForm {
public static Question<String> age() {
return actor -> SelectedVisibleTextValue.of(AGE).viewedBy(actor).asString();
}
}
Reading attributes
Sometimes you need to read values directly HTML or CSS attributes. You can do this using the Attribute
and CSSValue
classes. Some examples are shown below:
public class TheRegistrationForm {
public static Question<Boolean> hasOptedIn() {
return actor -> Attribute.of(OPT_IN).named("checked").viewedBy(actor).as(Boolean)
}
public static Question<String> titleFont() {
return actor -> CSSValue.of(TITLE).named("font").viewedBy(actor).asString()
}
}
Checking UI state
You can also ask about the state of elements on the page. State includes things like visibiliy or presence on the page, whether a field is enabled or disabled, and whether a field is selected.
The WebElementStateMatchers
contains a set of Hamcrest matchers which can be used to check the state of an element, as well as whether the field contains a given text or value. Possible matchers include:
-
isVisible()
-
isNotVisible()
-
isCurrentlyVisible()
-
isNotCurrentlyVisible()
-
isEnabled()
-
isNotEnabled()
-
isCurrentlyEnabled()
-
isNotCurrentlyEnabled()
-
isPresent()
-
isNotPresent()
-
isSelected()
-
isNotSelected()
-
containsText()
-
containsOnlyText()
-
containsSelectOption()
-
hasValue()
To check the state of an element, you first need to convert the locator used to locate the element into a Question
about the state of the element. This locator can be a Target
, a By
locator, or an XPath or CSS expression.
To convert a locator to a Question about the element’s state, we use the WebElementQuestion
class. This class has three static DSL methods, which are all equivalent (you just use the one that reads the most fluently):
-
WebElementQuestion.stateOf(locator)
-
WebElementQuestion.valueOf(locator)
-
WebElementQuestion.the(locator)
Once you have converted the locator to a question, you can combine this with a WebElementStateMatchers
method to form a Screenplay assertion. For example, to check the visibility of a field, we could write the following:
sam.should(
seeThat(
WebElementQuestion.the(TITLE),
WebElementStateMatchers.isVisible()
)
)
Using static imports will make the code more readable:
import static net.serenitybdd.screenplay.matchers.WebElementStateMatchers.*;
import static net.serenitybdd.screenplay.questions.WebElementQuestion.the;
.
.
.
sam.should(
seeThat(the(TITLE), isVisible())
)
The following example checks the value of the AGE field:
sam.should(
seeThat(the(AGE), hasValue("40"))
)
Performing waits
When writing web tests, you often need to wait for specific states or events. In Screenplay, you can use the WaitUntil
interaction class to do this. This class lets you wait for a given state, using the same DSL as we saw in the previous section. For example, to wait until the title is visible, we could write the following:
sam.attemptsTo(
WaitUntil.the(TITLE, isVisible())
)
We could also specify a maximum wait time:
sam.attemptsTo(
WaitUntil.the(TITLE, isVisible()).forNoMoreThan(10).seconds()
)


Bitml
Transcript By: Bryan Bishop
Tags: Security, Smart contracts
Category: Conference
Developing secure bitcoin contracts using BitML
Stefano Lande
paper: https://arxiv.org/abs/1905.07639
https://twitter.com/kanzure/status/1171695588116746240
This is shared work with my collaborators and coauthors.
 It’s a program that can move cryptoassets. It’s executed in a decentralized environment. Generally speaking, we can say there’s two classes of smart contracts. A smart contract is a program. While in blockchain like bitcoin, smart contracts are cryptographic protocols. This effects how we can reason about a blockchain; bitcoin has many more security proofs for script than ethereum.
As a consequence, though, programming a smart contract on ethereum feels easier because of high-level danger languages like Solidity. While on bitcoin, you can only work with the script language. You have to get creative when thinking about writing scripts.
There’s also a difference for automatic verification. There are many tools that can apply standard verification techniques to verify contracts. Still, in bitcoin, you have to build complex cryptographic proofs usually in academic papers.
Can we get the best of both worlds? Can we build another language that supports for automatic verification and can also be deployed on a blockchain?
This slide is to give you an idea of smart contracts on bitcoin and their complexity. This example is a hash commitment. It’s a small game where either a hash preimage is revealed, or an absolute timelock timeout lets another key spend.
Languages for bitcoin scripts
There’s a few languages for formalizing bitcoin scripts, like Balzac, miniscript, ivy (chain), and simplicity. Say we use these kinds of languages to build a language for cryptographic protocols, and then compile down to bitcoin transactions. It’s not entirely easy to use though.
BitML: Bitcoin modeling language
We designed a high-leve language for smart contracts on bitcoin, it’s called bitcoin modeling language or BitML. A contract can be a choice between one or more contracts. We have contracts that are either withdrawal that transfers the whole balance, split which splits the balance between concurrently executed contracts, or we have A : D which means wait for A’s authorization, we have after t : D which means wait until time t has passed, then we have put x . C which collects deposits x at run time. Finally, we have reveal a b … if p . C where we reveal secrets a, b, and p is a predicate we can express on those secrets.
A basic example
Say Alice wants to buy something from Bob’s online store. The payment contract would say if Alice is satisfied, she sends bitcoin to Bob, otherwise Bob refunds her. The contract has a precondition saying that Alice must pay bitcoin to this contract.
Mediating disputes (with oracles)
We can use an oracle that acts as a mediator in the contract. So we can build a contract that includes escrow. It’s the same contract as before, but it has two more branches. These branches can be applied unilaterally either by Alice or Bob to activate the contract for resolving which involves the oracle. Some payment goes to the mediator for his service, and then the bitcoin goes either to Alice or Bob depending on the mediator.
Time commitment in BitML
The time commitment requires Alice to deposit a bitcoin, and commit a secret that we call little a. The contract has reveal little a and withdraw A. In the second branch, which is active after time t has passed, then withdraw B meaning Bob can get the bitcoin.
Compiled time commitment
BitML features a compiler to turn contracts into sets of bitcoin transactions. Executing these equates to applying the sum of these to the blockchain. In this example, either Alice or Bob can redeem the coins, based on different conditions. We need the signatures of both Alice and Bob. These signatures are exchanged during this situation in the contract. Before the contract hits the blockchain, you setup the transaction tree and sign it before you fund it, thus no player can refuse to sign after funding which would be bad.
A two-players lottery
Time commitment is useful for more involved contracts like a two-player lottery. The precondition of the contract requires each player to choose a secret and deposit two bitcoin for collateral. The contract is a split between three subcontracts. One is a time commitment for Alice. The other is a time commitment for Bob. Then there’s another one. The lottery is active after both players reveal the secret. If the secrets are different, then Bob wins. If the secrets are identical, then Alice wins.
This contract has a problem because it’s extremely unfair to Alice. She can’t guess Bob’s entropy because Bob can use arbitrarily high amounts of entropy. So we constrain Bob to using a value of zero or one, so an honest player has at least a 50% chance of winning the lottery. Bob can commit to this secret. He will for sure win the lottery because of probability, but he will lose the collateral in the time commitment.
Compiler security
How can we be sure that the BitML compiler doesn’t introduce security vulnerabilities during compilation? One of our main results is that our compiler is computationally sound, so we can trust the compiler. We can trust the compiler, but can we trust the developers of smart contracts. Are they going to make errors when they design contracts?
Verification
We have a way of doing automatic verification of contract properties. We can verify both contract-dependent properties (expressed as LTL formulae) and liquidity (funds are never frozen in the contract).
BitML toolchain
We have a secure analyzer that can check the properties. There’s a compiler that turns from BitML to a transaction then to standard bitcoin transactions. There are also benchmarks and tool demos. We showed some lotteries in the demos. There’s a correlation between the number of players, the number of transactions, and the verification time. In particular, you can see a big jump in the number of transactions in the 2 player lottery and we were limited because scripts had to be max of 520-bytes, so we needed to use more than one step and because of that the verification time exploded but in other cases verification is a matter of seconds at most.
In all of these use cases, the transactions are standard and are limited to 520 bytes of length.
BitML wishlist
To conclude, I want to talk about some future developments of BitML that would make it more useful in practice. We’re open to any type of collaboration regarding BitML. If you’re interested, please talk with me.
We want to overcome the fact that BitML is not “bitcoin complete” and it can’t express every bitcoin contract. For example, a contract is fixed at compile time. We should be able to use sighash modes to let escrow express contracts like escrow funding where we don’t care who adds the money, anyone can add money to a BitML contract in that case.
We want to explore relative timelocks so that we can express time constraints relative to the last BitML case that was executed.
We’re also working on dynamic stipulation of subcontracts, which would allow BitML to express payment channels.
We are currently working on executing BitML contracts off-chain because in the current execution model, each BitML step corresponds to a transaction that will change. This doesn’t scale well, because a complex contract can require dozens of transactions on-chain. We want to move off-chain and have participants verify correctness of execution.
Finally, we would like BitML over taproot. This would exploit forthcoming MAST and Schnorr signature proposals. Unexpected script branches remain off-chain, and this is more space efficient and increases expressivity (520 bytes limit). It’s also private, so BitML contract execution won’t hit the blockchain. i


Drop us a message
You have reached our mailbox, please leave a message after the
By entering any information in the form below you acknowledge that you are sharing sensitive information with us. We make no promise the entered information will be kept safe and thus refrain from using this form altogether.


compass_riket.Rd
Radar plot with axis names using ggplot2.
compass_riket( df, riket_name = "Riket", axis_titles = names(df)[-1], poly_color = "#D95F02", color_alpha = 0.6, title = "Kvalitetsindikatorer", subtitle = "värdekompass - riksgenomsnitt", title_size = 12, subtitle_size = 8, axis_text_size = 8, line_size = 0.1, axis_text_position = 1, v_just = "outward", h_just = "middle" )
| df | Data frame. |
|---|---|
| riket_name | Hos to adress the nation. |
| axis_titles | Titles on the axis, character vector works. |
| poly_color | Color of the polygon. |
| color_alpha | Modify color transparency for polygon color. Should be the same as alpha_riket for function compass. |
| title | Title of the compass, use NULL for no title. |
| subtitle | Small text under the title, use NULL for no subtitle. |
| title_size | Text size of title in pt. |
| subtitle_size | Text size of subtitle in pt. |
| axis_text_size | Text size of axis titles in pt. |
| line_size | Size of the lines in the choord, useful to change if large dpi! |
| axis_text_position | Where the text is on the axis. |
| v_just | Vertical adjustments to the text on the axis, "outward" is default means text is aligned away from the center. |
| h_just | Horizontal adjustments to the text on the axis, "middle" is default. |
ggplot object containing compass plot of Swedish average with text on the axis.
# Create one Swedish average compass with normalized data axis_titles <- c( "Tillfredst\u00E4llelse", "Vinst i sm\u00E4rta\nefter 1 \u00E5r", "EQ5D-vinst\nefter 1 \u00E5r", "Adverse events\ninom 90 dagar", "T\u00E4ckningsgrad", "Reoperation\ninom 2 \u00E5r", "Implantat-\n \u00F6verlevnad 5 \u00E5r", "Implantat-\n\u00F6verlevnad 10 \u00E5r" ) compass_riket(norm_compass_data, axis_titles = axis_titles)


Home
About
Services
Sign Up
Login To your account
Stay Logged in
Login
Sign in with Google
Forgot Password
Verify Account


/**
* @private
*/
Ext.define('Ext.device.device.Cordova', {
alternateClassName: 'Ext.device.device.PhoneGap',
extend: 'Ext.device.device.Abstract',
availableListeners: [
'pause',
'resume',
'backbutton',
'batterycritical',
'batterylow',
'batterystatus',
'menubutton',
'searchbutton',
'startcallbutton',
'endcallbutton',
'volumeupbutton',
'volumedownbutton'
],
constructor: function() {
// We can't get the device details until the device is ready, so lets wait.
if (Ext.isReady) {
this.onReady();
} else {
Ext.onReady(this.onReady, this, {single: true});
}
},
/**
* @property {String} cordova
* Returns the version of Cordova running on the device.
*
* alert('Device cordova: ' + Ext.device.Device.cordova);
*/
/**
* @property {String} version
* Returns the operating system version.
*
* alert('Device Version: ' + Ext.device.Device.version);
*/
/**
* @property {String} model
* Returns the device's model name.
*
* alert('Device Model: ' + Ext.device.Device.model);
*/
/**
* @event pause
* Fires when the application goes into the background
*/
/**
* @event resume
* Fires when the application goes into the foreground
*/
/**
* @event batterycritical
* This event that fires when a Cordova application detects the percentage of battery
* has reached the critical battery threshold.
*/
/**
* @event batterylow
* This event that fires when a Cordova application detects the percentage of battery
* has reached the low battery threshold.
*/
/**
* @event batterystatus
* This event that fires when a Cordova application detects the percentage of battery
* has changed by at least 1 percent.
*/
/**
* @event backbutton
* This is an event that fires when the user presses the back button.
*/
* @event menubutton
* This is an event that fires when the user presses the menu button.
*/
/**
* @event searchbutton
* This is an event that fires when the user presses the search button.
*/
/**
* @event startcallbutton
* This is an event that fires when the user presses the start call button.
*/
/**
* @event endcallbutton
* This is an event that fires when the user presses the end call button.
*/
/**
* @event volumeupbutton
* This is an event that fires when the user presses the volume up button.
*/
/**
* @event volumedownbutton
* This is an event that fires when the user presses the volume down button.
*/
onReady: function() {
var me = this,
device = window.device;
me.name = device.name || device.model;
me.cordova = device.cordova;
me.platform = device.platform || Ext.os.name;
me.uuid = device.uuid;
me.version = device.version;
me.model = device.model;
},
doAddListener: function(name) {
if (!this.addedListeners) {
this.addedListeners = [];
}
if (this.availableListeners.indexOf(name) != -1 && this.addedListeners.indexOf(name) == -1) {
// Add the listeners
this.addedListeners.push(name);
document.addEventListener(name, function() {
me.fireEvent(name, me);
});
}
Ext.device.Device.mixins.observable.doAddListener.apply(Ext.device.Device.mixins.observable, arguments);
}
});


The following run-on phrases have been found in your text:
A run-on sentence is a written sequence of two or more main clauses that are not separated by a period or semicolon or joined by a conjunction.
Example: I rushed out to the shop I had no milk left.


TIN CUP A film review by Christina Nunez Copyright 1996 Christina Nunez
For all you golf romantics out there, Tin Cup is the movie to see this summer (presumably the golf Butt-heads out there have already been satisfied by the release of Happy Gilmore. Brought to you by the same guy who directed Bull Durham, Tin Cup returns Kevin Costner to his element as the diamond-in-the-rough women can't resist. Roy McAvoy is a super-talented golf pro who has a weak follow-through, and of course we're not talking just about his swing.
His run-down driving range out in west Texas gets shaken up by the arrival of Dr. Molly Griswold (Rene Russo), the first lady McAvoy considers worthy of more than cheap thrills. But she's not there for the taking, don't you know.  Roy's an endearing underdog, trying to win Molly and, ultimately, show up Simms in--what're you, crazy, Roy?--the U.S. Open of all things! Well, you know where the plot goes from here. That's why you're watching, isn't it? Certainly it's not for suprises--but the movie delivers in filling this mold with cute, watchable characters.
Kevin Costner, when he's not running around barely dressed with Native Americans or in some seascape, actually makes an engaging leading man every once in awhile. His scenery gets stolen more than once by Cheech Marin as his sidekick, and by Johnson, another likable star with a mostly regrettable resume. Rene Russo, whose exaggerated but not unattractive features suggest a younger, pre-Wayne Flowers Madam, has a pretty straight shot of a role as the uptight therapist. She may grate occasionally, but she does her best with the role and with a watery final scene.
I would be remiss if I didn't warn non-golf aficionados that, no matter what you do, no matter how many camera angles you use or plot twists you wring or strings you swell on the soundtrack, it's still GOLF. And watching 18 holes, even when Costner's the one swinging, still feels as suspenseful as watching the Astroturf grow for 9 innings at Wrigley Stadium. But it remains a "cute" movie, and you can make that your own endorsement or damnation.
Check t@p online's film section for reviews, clips, and news. http://www.taponline.com/tap/entertainment/film
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Hi. just built he EmonTx2 and having the following problem which I dont understand:
FTDI plugged in doesn't seem to power the EmonTx, and any uploading results in a not in sync error
FTDI blue light does come on and driver registers for FTDI fine.
Same FTDI plugged into NanodeRF does get the Nanode's red light to flash for a bit
EmonTx plugged in via USB port registers 3.3V and around 5V all around the board except around the RF module
If I plug both in, the board powers up, but I still get the not in sync error on uploading a sketch
I can't see any short circuits on the board but can post pics if that helps?
does that make any sense.
grateful for any advice.
Re: EmonTx not in sync error with a twist (SOLVED)
Points to check:
1. You have the programmer the right way round on the FTDI header. GND is nearest the USB socket.
2. The 10 k connected to pin 1 of the processor (RESET) is not shorting to the ground plane.
3. You have 5 V on pin 3 of the FTDI when the programmer is connected.
4. Did you get the programmer from the shop? There are two sorts, I'm not sure of the difference, so can't help any more there.
Re: EmonTx not in sync error with a twist (SOLVED)
Thanks for this
I did some resoldering and managed to get power via the FTDI. I successfully used the FTDI to upload a Sketch to the NanodeRF as well, so the FTDI must be working.
But the 'not in sync' error remains on the EmonTx:
1. You have the programmer the right way round on the FTDI header. GND is nearest the USB socket. - YES
2. The 10 k connected to pin 1 of the processor (RESET) is not shorting to the ground plane. - NO, READS 3.3v and 3.27V
3. You have 5 V on pin 3 of the FTDI when the programmer is connected. - YES 5.17V
4. Did you get the programmer from the shop? There are two sorts, I'm not sure of the difference, so can't help any more there. - YES, from the shop
Re: EmonTx not in sync error with a twist (SOLVED)
This isn't making sense at the moment. Obviously correct: Your programmer, drivers, USB lead, power supplies on your emonTx.
If you put the processor from the emonTx into the Nanode, can you program it there?
Re: EmonTx not in sync error with a twist (SOLVED)
The Nanode processor looks soldered on.
I'm ordering a Funduino where I can then hopefully swap out the processor and check if this one is working.
I wonder whether the FTDI interface pins are long enough in my Emontx
Re: EmonTx not in sync error with a twist (SOLVED)
I wonder whether the FTDI interface pins are long enough in my Emontx
If you can't feel the contact springs making, it's easily verified with a continuity test! Did you solder the header in the wrong way round (short side should go through the PCB).
If it does prove to be the processor, it might be that is is missing its bootloader. In that case, an email to the shop should solve the problem.
Re: EmonTx not in sync error with a twist (SOLVED)
Thanks
Please advise what you mean by a continuity test? Short side of FTDI definitely goes through PCB, and the fact that power is registering means that at least the power pins are reaching. But some of the other pins are a couple of mm lower. How long do the pins need to be to make contact with the FTDI?
When you say drop an email to the shop on the processor regarding the bootloader. What does that mean in practice? Can I not install the bootloader using the Arduini IDE?
Re: EmonTx not in sync error with a twist (SOLVED)
Can I not install the bootloader using the Arduini IDE?
You'll need an ISP and an ISP header on the device where you plan installing the bootloader (those empty 6 holes at the bottom of your CPU in your second photo). You can also build an ISP out of an Arduino.
Re: EmonTx not in sync error with a twist (SOLVED)
Thanks, I've got an Arduino on its way in the post.
Do I need to get resistors as well?
Re: EmonTx not in sync error with a twist (SOLVED)
I'm not sure what resistors you're referring to. But you want to do something like this:
http://arduino.cc/en/Tutorial/ArduinoISP
I've not tried it myself. I use an AVRISP MarkII, but it should be pretty straight forward.
[EDIT]
CAUTION: You need to be aware of the Vcc voltages. If you're programming an 3.3V AVR in-situ, then you need to use a 3.3V ISP. The AVRISP MarkII senses your target's Vcc via the 6-pin header and then uses the appropriate voltage. The ISP built out of an Arduino probably doesn't / can't. So you'll need to either move the AVR to a 5V environment before programming with that, or use a proper ISP.
Re: EmonTx not in sync error with a twist (SOLVED)
Hi. I don't need to install the bootloader after all. The problem is not the chip:
I swapped the Atmel chip into an Arduino, and it works fine. I got the LED blink sketch working on it, and (after changing the LED pin number) I also got the chip blinking the LED in the EmonTX.
I then installed the EmonTX CT sketch via the Arduino and swapped the chip back into the EmonTX. It doesn't transmit anything to the NanodeRF. (both are set in the their Sketches to use 433hz to match their boards).
So clearly the chip works, the LED part of the EmonTX works, but the circuits that attach the RF module and FTDI have problems. Not sure how to test these.
NB. I resoldered so the FTDI pins on the EmonTX stick out all the same length out of the board.
Thanks to you all for you help - I realy appreciate this
Any advice on my next move?
Re: EmonTx not in sync error with a twist (SOLVED)
You've certainly narrowed it down a lot then. Robert's suggestion of a continuity test would be your best bet next. And I see nobody answered your query about that. With the power off on your EmonTX, your multimeter set to continuity-test mode, and a copy of the schematic by your side, you want to buzz out the circuits that appear not to be working. So for example, confirm that each of the FTDI pins run all the way to where they're supposed to run. I don't have the schematic handy, but presumably most of them end up at the AVR pins.
Now that you have an image that at least flashes the LED on the EmonTx, you should also be able to determine if your IDE is able to reset the AVR by observing the LED when you attempt do download a new image. It's only by yanking on /RESET (via RTS or DTR) that the IDE is then able to talk to the bootloader and send it a new system image. If your blinking LED sketch remains undisturbed during a failed system image download, that would suggest that reset path is not working. You might want to change it so that it's blinking the LED fairly rapidly, so you can notice any disturbances to the beat. If the reset path is working, but the data path isn't, the bootloader will wait for about a second, see that it's not getting a new image and jump back to the current LED flashing image, so you're looking for a 1 second interruption to the LED flashing.
Re: EmonTx not in sync error with a twist (SOLVED)
Oh dear!
The LED is not flashing this morning on the EmonTX.
The chip however is still working fine as I have checked a number of times by swapping it into the Arduino
Checking voltage readings on the chip when in the EmonTX:
PIN 15 (for the LED pin) reads zero - but should be oscillating between high and low
PIN 1 (Reset) reads 2.89V
PIN 7 (VCC) reads 3.3V
PIN 20 (AVCC) reads 2.59V
PIN 26 (ADC3) reads 1.4V
PIN 24 (ADC1) reads 1.75V
PIN 9 and 10 (TOSC) read low V around 0.4-0.6V
PIN 6 (XCK) reads 3.95V
Does any of this make sense? In the Arduino PIN 15 as expected registers HIGH and LOW V as per sketch.
I also tried the continuity test on the reset path from the FTDI, and circuit is fine on both sides of capacitor C1, but could C1 be bust?
Re: EmonTx not in sync error with a twist (SOLVED)
If the LED was flashing, and now it isn't, and you have touched nothing else, there has to be a bad joint or a component that is physically strained and/or damaged.
Pin 15 not switching means the sketch is not running, therefore either it's perpetually reset, the clock oscillator isn't running or, if you've moved away from the LED blink sketch and have a sketch that drives the RFM12B module, it's sticking while trying to initialise that. Pin 1 high rules out the perpetual reset.
Pin 20 not reading the same as Pin 7 is a worry - it's only a short track away so that needs checking. They read the same (to 2 decimal places - 3.27 V) on mine.
Are the USB connector pins soldered properly - it's hard to tell from the picture (but irrelevant if you're powering via the FTDI).
C5 also appears to not have enough solder on one leg.
Pins 24 & 26 should be 1.65 V - but that isn't this problem, those not being exactly mid-voltage between 0 V and Vcc will restrict the analogue input range, but not stop it working.
You won't read a sensible voltage on the oscillator pins (9 & 10) - mine read about the same as yours on a normal multimeter.
C1 only comes into play when programming - if the reset line is high, it's not going to stop the sketch from working. But if it is broken/lost capacitance, the processor won't program.
So sorry, but apart from the AVcc voltage, there's nothing abnormal there.
There appear to be some solder splashes. You could clean the board (solder side) by scrubbing the excess flux off with a hard brush (e.g. a discarded toothbrush) dipped in white spirit, afterwards wash the board in warm soapy water and allow to dry thoroughly (and by thoroughly I mean underneath all the components and inside the connectors, including beneath the RF module). Doing that might make it easier for you to see any soldering faults.
Re: EmonTx not in sync error with a twist (SOLVED)
Thanks again Robert
I've cleaned the board as you suggested. Still waiting for it to dry completely, but from what I can see there aren't any solder short circuits. I had previously resoldered the FTDI pins and had already patched up C5.
There is some minor heat damage to the PCB around a couple of the FTDI pins now and also around between the aerial and adjacent pins of the RF module. Looking closely at these though I can't see any shorts or splatter. I'm thinking that I should probably remove the RF module completely once the board is dry. However I haven't used any sketches beyond the modified blink sketch for testing, so RF shouldn't have been engaged.
I keep wondering whether the most suspicious component here is the Crystal or a capacitor. (But I note that C1 is not relevant if the sketch is already on the chip). Are there any other capacitors that I should worry about at this stage?
I'm wondering whether desoldering some components now would help to narrow down the problem. Which ones should come off first? Also, does the soldering of the DIL socket in my pic look dodgy?
Re: EmonTx not in sync error with a twist (SOLVED)
At this stage, until you have proved a faulty component, I would suggest that desoldering anything should be kept as the means of last resort. I have to recommend that you do NOT try to remove the RFM12B. Unless you have access to the proper desoldering station, it's very likely that you will damage either the RF module or the PCB or both in the attempt. If you you are not driving the RF module, I think it can be discounted.
I didn't notice any other suspect soldering - I've seen a lot worse that has been OK, but it's much easier when you are looking at it for real than in a photo.
If you're still using the blink sketch, then provided all the soldering is good, I have to think it's got to be the crystal or the capacitors around it. I think it's possible to use an internal oscillator to drive the processor, but I'd need to look it up - unless of course someone else wants to chip in here?
I think you let it dry thoroughly, then check the AVcc voltage again. If that's still wrong, you need to find out why (with the processor out).
Re: EmonTx not in sync error with a twist (SOLVED)
If you're still using the blink sketch, then provided all the soldering is good, I have to think it's got to be the crystal or the capacitors around it.
I'd concur with that. If you give these AVRs a good Vcc and a good crystal, they can't help but run.
I think it's possible to use an internal oscillator to drive the processor, but I'd need to look it up - unless of course someone else wants to chip in here?
Yes, the CKSEL bits in the Fuse Low Byte lets you control the clock source, and it also lets you control how big a swing you put into the crystal. If you set it to Full Swing you can generally see it on a scope. But you'll need an ISP to change those fuse bits, and if you do decide to go that way, recall my Vcc caution above. Using the internal oscillator has it's own issues: you'd need to calibrate it if you want accurate timing (and you do want accurate timing to drive the UARTs at the correct baud rate). So going that route might help narrow down the problem, but probably isn't where you want to end up. And given it involves ISPs etc. it may be more trouble than it's worth.
then check the AVcc voltage again. If that's still wrong, you need to find out why (with the processor out).
Yes, that's very odd. It would be interesting to see if AVCC is still low when the AVR is removed, i.e. is it the AVR that's dragging it low? Is anything getting warm?
Re: EmonTx not in sync error with a twist (SOLVED)
Thanks both
The board is dry and I've rechecked the voltages with the chip back in and the AVCC is still 2.something while the VCC is 3.2x.
I also checked the the LED with the chip out, by shorting one of the 3.3V keyholes to the pin 15 on the DIL socket. LED lights up fine.
I'll measure the Vs with the chip out and see what readings I get on the empty DIL socket:
(PIN numbers relate to Atmega328 mapping with PIN 1 = reset)
PINs 1-5 = 0V
PIN 6 = 5.14V
PIN 7 = 3.30V
PINs 8-14 = 0V
PINs 15 - 22 = 0V
PIN 23 = 1.34V (takes a few secs to settle)
PIN 24 = 1.35V
PIN 25 = 0
PIN 26 = 1.35V
PINs 27-28 = 0
So, I wonder why Pin 20 AVCC is reading 0V!!
Re: EmonTx not in sync error with a twist (SOLVED)
So the schematic shows Pin 20 (AVCC) and Pin 7 (VCC) are connected, and should both read 3.3V. It looks to me like your Pin20 is for some reason not connected.  They should all be connected.
Pin6 looks a bit high for a part that is being run 3.3V. The schematic shows it runs via a 4.7K R to either VCC (3.3V) or PWR (5V) depending on the setting of SJ2. It looks like there are a couple of jumpers that select VCC or PWR (SJ1 and SJ2). I'll hand over to someone more familiar with the schematic than I am to explain what that's all about.
[EDIT]
I'm not sure why your Pin1 (/RESET) is 0V either. That suggests something (presumably the FTDI programmer?) is holding the AVR in reset. With the power off, you might want to check the path from Pin1 thru the 10K pull-up to Vcc also.
I'm almost starting to wonder if all your Vcc are actually at Vcc.
Re: EmonTx not in sync error with a twist (SOLVED)
Pin 20 should definietly be the same voltage as p7 as they are connected by track under the AVR (see shop pic attached - the track just clips the bottom of the screenprinted "8")
Pin 6 does look high but is probably the result of 5v being picked up via the 4.7K res. There was an error on the first PCB's and a permanent short to 5v is present on the temp senser jumper pads, this was never changed as it panned out the temp sensor worked better at 5v even on a 3.3v based circuit.
Paul
Re: EmonTx not in sync error with a twist (SOLVED)
Great work guys, and thanks for your help.
I resoldered some of the DIL pins (created a bit of a mess on PIN 20 which makes it now stick out above).
Now - my modified blink sketch is working, and the FTDI is working, and allowing me to upload sketch.
Next step now is to check if the RFM12b module is working. However, given the progress, I'm marking this thread as solved.
Re: EmonTx not in sync error with a twist (SOLVED)
The RFM12b module is not working: the EmonTX Sketches don't work.
To test further, I set up a Sketch to initialise the module, as per the EmontTX transmit test example Sketch. I added in the lines required to blink the LED. If I comment out the rfm calls, then the blinks work.
I guess therefore that the RFM12b needs to be resoldered as well. Are there any voltages it should read that I should check for first?
Re: EmonTx not in sync error with a twist (SOLVED)
Your photo is not quite pin-sharp, but it looks as if the middle pad on the left-hand side of the RFM12B is a bit dodgy. I can't really tell for any of the others.
I did note that the module is twisted slightly, before you touch anything make certain that it is not skewed so far so as to make one of the pads touch the adjacent pad as well. Whatever you do, remember my warning above about unsoldering the module.
Robin Emley's technique for the RFM12B is to sit the module on a pad of double-sided tape to position it, then solder. (Obviously, that's too late for you.)
Re: EmonTx not in sync error with a twist (SOLVED)
Okay. Had a go at resoldering the RFM12b.
Terrible result burned three slots - see the pic attached.
To my total surprise, it works and the NanodeRF is receiving data from this EmonTx!
thanks again Robert, Paul and 'dBc'
Given the resoldering damage, I don't know if thus is going to work for long, and I still need to check the CT sensor inputs but very glad for now for the advice and persisting with this.
Re: EmonTx not in sync error with a twist (SOLVED)
In all honesty, I think you need some soldering practice before you next embark on something of this complexity and size, and I wonder whether the tools you are using are up to the job. The best advice I can give you is buy a mixed bag of cheap components and some stripboard, look at one of the many soldering guides and practice. Then when it comes to small stuff like the RFM12B and smaller still like the emonTx, get a big stand-mounted magnifier as well. You also need to make sure your soldering iron has the correct sized bit and is at the correct temperature. Generally, you'll do more damage if it is not hot enough (yes!) because you'll apply the heat for too long. You should be able to solder a single joint on stripboard in about 1 s. The usual reason tracks and pads lift is because the heat was on for too long.
Re: EmonTx not in sync error with a twist (SOLVED)
LOL. Yes, this was my first electronics soldering project. I also wanted to go lead free.
My next project will be to burn a few PCBs. ;)
Re: EmonTx not in sync error with a twist (SOLVED)
You seem to have got away with it, but I'm afraid you came very close to making an expensive mistake. Get a handful of cheap components, some stripboard and practice, before you try your next plated-through double-sided PCB. Seriously.


History of snowboarding!
Hello and welcome to my page about snowboarding. Snowboarding truly begain in the 1970's with people like Tom Sims and Jake Burton. They created their own snowboards out of things that they were able to find in school and at home. Early snowboards were basically pieces of wood with makeshift bindings attached to them. The first bindings were usually made of ropes to tie their feet to the boards. Not long after this snowboarding competitions began! Nowadays Snowboarding is one of the top extreme sports and is now even an olympic event. For more info on the history of snowboarding CLICK HERE!
| Tom Sims 1973 | Jake Burton 1981 |
Snowboarding Styles!
- Freeride
- Freestyle
- Urban


1. Here's a fancy paragraph decorated with inline CSS
2 .  This one is formatted using #special
4. This paragraph is the first one after something with id="special", so it's formatted using #special +
5. This one has different padding, and is selected using the pseudo class .content::nth-child(5) and also uses the ::first-line pseudo element
| HW# | Date assigned | Tentative date due |
|---|---|---|
| 1 | 7/6 | 7/8 |
| 2 | 7/8 | 7/13 |
| 3 | 7/10 | 7/22 |
| 4 | 7/15 | 7/27 |
| 5 | 7/22 | 7/27 |
| 6 | 7/27 | 8/3 |
| 7 | 8/3 | 8/12 |


--- layout: page title: "Linked Data Platform 1.0 (LDP)" description: "Linked Data Platform (LDP) defines a set of rules for HTTP operations on web resources, some based on RDF, to provide an architecture for read-write Linked Data on the web." ---
| Document Name: | W3C TR http://www.w3.org/TR/ldp |
|---|---|
| Document URI: |
http://www.w3.org/TR/ldp
|
| Online Version: |
http://www.w3.org/TR/ldp
|
| Organization: | World Wide Web Consortium (W3C) |
| Series: | Technical Report (TR) |
| Abstract: | Linked Data Platform (LDP) defines a set of rules for HTTP operations on web resources, some based on RDF, to provide an architecture for read-write Linked Data on the web. |
Accept-Post
describedby
Return to ( Series | Organization | all Specifications )


--- layout: default class: home title: Freelance Web Designer excerpt: I'm Ken. I help small businesses and startups create fun and friendly web experiences. sitemap: priority: 0.7 changefreq: monthly lastmod: 2013-09-10T12:49:30-05:00 ---
I'm sure every other web design company you talk with will tell you they are the best in the industry. No one wants to be second. The same goes here. I want you to have the best website imaginable.
My approach to web design starts with learning about your business goals and history. I'll review your current web properties and learn what works and what doesn't from you, your staff and your customers.
If you'd like to learn more about the process, please get in touch and start the conversation.
Ken Howard at Simplicated Web Designs did a great job for us! I looked for several months to find somebody that could redesign our web site. Everything was done well and our conversion rate is up from 5% to over 20%.
Dan Clark / Edgewater Funding, Inc.
elderloan.com


One Two Three Four linear easeOut easeInQuad easeOutQuad easeInOutQuad easeInCubic easeOutCubic easeInOutCubic easeInQuart easeOutQuart easeInOutQuart easeInQuint easeOutQuint easeInOutQuint


Your Local Weather
Wind:
Wind Direction:
Feels Like:
Humidity:
Precipitation:
Pressure:
Sunrise:
Sunset:


Money Play. How should Red play 54?
pips Red=149 White=134
(CorrectAnswer= 0/0, ErrorScore= 0)
Red can take the passive approach of playing safely with 13/9, 13/8 but things will have to go very well for him to win after that move. He wins only about 16% of the time.
The alternative is to try to create a counter-prime with 9/5, 6/1*. This is very bold but wins another 6% of the time. It also loses about 11% more gammons.
If White held the cube the passive play would be correct but holding the cube Red can engineer positions where he can make effective use of the cube. This makes enough of a difference that 9/5, 6/1* is the correct move and the passive play is a small error.
The alternative is to try to create a counter-prime with 9/5, 6/1*. This is very bold but wins another 6% of the time. It also loses about 11% more gammons.
If White held the cube the passive play would be correct but holding the cube Red can engineer positions where he can make effective use of the cube. This makes enough of a difference that 9/5, 6/1* is the correct move and the passive play is a small error.
1. Cubeful 2-ply 9/5 6/1* Eq.: -0.743 0.222 0.060 0.002 - 0.778 0.296 0.028 2. Cubeful 2-ply 13/9 13/8 Eq.: -0.764 (-0.021) 0.173 0.033 0.001 - 0.827 0.194 0.008 3. Cubeful 2-ply 8/4 6/1* Eq.: -0.777 (-0.034) 0.191 0.050 0.002 - 0.809 0.256 0.020 4. Cubeful 2-ply 13/9 6/1* Eq.: -0.794 (-0.051) 0.190 0.043 0.001 - 0.810 0.260 0.023 5. Cubeful 2-ply 9/5 9/4 Eq.: -0.804 (-0.061) 0.190 0.041 0.001 - 0.810 0.268 0.023


Filter Project
Have fun using filters to change your image
Load Image:
Choose a filter
Filters:
Reset Image:


Tickr.
Services
Booking
Food
Gift
Reservation
Order
Medical
Joe Bloggs
Profile
Menu Item
Menu Item
Logout
Create Payment
End Conversation
Find Nearby Place
Name


+
Things are not going well
(with the website)
The wedding is still on, this website is just struggling a bit.
Please try again later.