Biggest Oil and Gas companies in the world: Shell, Saudi Aramco beaten by Chinese conglomerate China's Sinopec continued to lead the world’s biggest oil and gas companies in 2018 while U.S. oil and gas company Exxon Mobil ranked sixth. 14 Nov 2019 Following are the 10 biggest Oil and Gas giants according to their revenue collection for 2018 with data from statista.com. (Image: Reuters) No 10 | Petrobras | Country: Brazil | Revenue: $95.58 billion (Image: Reuters) No 9 | Gazprom | Country: Russia | Revenue: $113.38 billion (*Data from 2017) (Image: Reuters) No 8 | Chevron | Country: US | Revenue: $158.90 billion (Image: Reuters) No 7 | Total | Country: France | Revenue: $209.36 billion (Image: Reuters) No 6 | Exxon Mobil | Country: USA | Revenue: $279.33 billion (Image: Reuters) No 5 | British Petroleum | Country: US | Revenue: $298.76 billion (Image: Reuters) No 4 | PetroChina | Country: China | Revenue: $342.21 billion (Image: Reuters) No 3 | Saudi Aramco | Country: Saudi Arabia | Revenue: $356.00 billion (Image: Reuters) No 2 | Royal Dutch Shell | Country: England-Holand | Revenue: $388.38 billion (Image: Reuters) No 1 | Sinopec | Country: China | Revenue: $420.38 billion (Image: Reuters)


This is my personal website where I blog about some great technologies I've used at hackathons and highlight projects and research I've been involved in. I am currently a software engineer at Ultimate Software who are the makers of UltiPro, a cloud based human capital management solution. I am core engineer behind the Workforce Management Solution, a product we grew from Alpha phase and into General Availability.
I love attending hackathons to explore what's new out there, as well as working on hobby projects like mobile apps.
Feel free to reach out to me at anytime at dxuprog [~AT~] gmail (DOT) com.


- delete(String, String) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Deletes an existing record from the store.
- delete(Object) - Method in class org.opensaml.storage.AbstractStorageService
-
Deletes an existing record from the store, using an annotated object as the source.
- delete(String, String) - Method in interface org.opensaml.storage.StorageService
-
Deletes an existing record from the store.
- delete(Object) - Method in interface org.opensaml.storage.StorageService
-
Deletes an existing record from the store, using an annotated object as the source.
- deleteContext(String) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Forcibly removes all records in a given context along with any
associated resources devoted to maintaining the context.
- deleteContext(String) - Method in interface org.opensaml.storage.StorageService
-
Forcibly removes all records in a given context along with any
associated resources devoted to maintaining the context.
- deleteImpl(Long, String, String) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Internal method to implement delete functions.
- deleteWithVersion(long, String, String) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Deletes an existing record from the store if it currently has a specified version.
- deleteWithVersion(long, Object) - Method in class org.opensaml.storage.AbstractStorageService
-
Deletes an existing record from the store, using an annotated object as the source, if it
currently has a specified version.
- deleteWithVersion(long, String, String) - Method in interface org.opensaml.storage.StorageService
-
Deletes an existing record from the store if it currently has a specified version.
- deleteWithVersion(long, Object) - Method in interface org.opensaml.storage.StorageService
-
Deletes an existing record from the store, using an annotated object as the source, if it
currently has a specified version.
- deserialize(long, String, String, String, Long) - Method in interface org.opensaml.storage.StorageSerializer
-
- doDestroy() - Method in class org.opensaml.storage.AbstractStorageService
- doInitialize() - Method in class org.opensaml.storage.AbstractStorageService
- doInitialize() - Method in class org.opensaml.storage.ReplayCache
- getAnnotation(Object, Class<T>) - Static method in class org.opensaml.storage.annotation.AnnotationSupport
-
Returns an annotation of a specified type attached to a target object.
- getCapabilities() - Method in class org.opensaml.storage.AbstractStorageService
-
Returns the capabilities of the underlying store.
- getCapabilities() - Method in interface org.opensaml.storage.StorageService
-
Returns the capabilities of the underlying store.
- getCleanupInterval() - Method in class org.opensaml.storage.AbstractStorageService
-
Gets the number of milliseconds between one cleanup and another.
- getCleanupTask() - Method in class org.opensaml.storage.AbstractStorageService
-
Returns a cleanup task function to schedule for background cleanup.
- getCleanupTaskTimer() - Method in class org.opensaml.storage.AbstractStorageService
-
Gets the timer used to schedule cleanup tasks.
- getContext(Object) - Static method in class org.opensaml.storage.annotation.AnnotationSupport
-
Gets the value of the field indicated by the
Context
annotation on the given object.
- getContextMap() - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Get the map of contexts to manipulate during operations.
- getContextSize() - Method in class org.opensaml.storage.AbstractStorageService
-
Gets max size of context labels in characters.
- getContextSize() - Method in interface org.opensaml.storage.StorageCapabilities
-
Gets max size of context labels in characters.
- getExpiration(Object) - Static method in class org.opensaml.storage.annotation.AnnotationSupport
-
Gets the value of the field indicated by the
Expiration
annotation on the given object,
or null if none.
- getExpiration() - Method in class org.opensaml.storage.StorageRecord
-
Get the record expiration.
- getField(Object, String) - Static method in class org.opensaml.storage.annotation.AnnotationSupport
-
Returns a
Field
from a target object.
- getFieldValue(Object, String) - Static method in class org.opensaml.storage.annotation.AnnotationSupport
-
Returns the value of a field from an object using reflection.
- getKey(Object) - Static method in class org.opensaml.storage.annotation.AnnotationSupport
-
Gets the value of the field indicated by the
Key
annotation on the given object.
- getKeySize() - Method in class org.opensaml.storage.AbstractStorageService
-
Gets max size of keys in characters.
- getKeySize() - Method in interface org.opensaml.storage.StorageCapabilities
-
Gets max size of keys in characters.
- getLock() - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Get the shared lock to synchronize access.
- getStorage() - Method in class org.opensaml.storage.ReplayCache
-
Get the backing store for the cache.
- getValue(Object) - Static method in class org.opensaml.storage.annotation.AnnotationSupport
-
Gets the value of the field indicated by the
Value
annotation on the given object.
- getValue() - Method in class org.opensaml.storage.StorageRecord
-
Get the record value.
- getValue(StorageSerializer<Type>, String, String) - Method in class org.opensaml.storage.StorageRecord
-
Get the record value, using a custom deserialization process.
- getValueSize() - Method in class org.opensaml.storage.AbstractStorageService
-
Gets max size of values in characters.
- getValueSize() - Method in interface org.opensaml.storage.StorageCapabilities
-
Gets max size of values in characters.
- getVersion() - Method in class org.opensaml.storage.StorageRecord
-
Get the record version.
- read(String, String) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Returns an existing record from the store, if one exists.
- read(String, String, long) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Returns an existing record from the store, along with its version.
- read(Object) - Method in class org.opensaml.storage.AbstractStorageService
-
Returns an existing record from the store, if one exists, and uses it to
update the annotated fields of a target object.
- read(String, String) - Method in interface org.opensaml.storage.StorageService
-
Returns an existing record from the store, if one exists.
- read(Object) - Method in interface org.opensaml.storage.StorageService
-
Returns an existing record from the store, if one exists, and uses it to
update the annotated fields of a target object.
- read(String, String, long) - Method in interface org.opensaml.storage.StorageService
-
Returns an existing record from the store, along with its version.
- readImpl(String, String, Long) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Internal method to implement read functions.
- reap(String) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Manually trigger a cleanup of expired records.
- reap(String) - Method in interface org.opensaml.storage.StorageService
-
Manually trigger a cleanup of expired records.
- reapWithLock(Map<String, MutableStorageRecord>, long) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Locates and removes expired records from the input map.
- ReplayCache - Class in org.opensaml.storage
-
Tracks non-replayable values in order to detect replays of the values, commonly used to track message identifiers.
- ReplayCache() - Constructor for class org.opensaml.storage.ReplayCache
-
- RequestScopedStorageService - Interface in org.opensaml.storage
-
Deprecated.
- update(String, String, String, Long) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Updates an existing record in the store.
- update(String, String, Object, StorageSerializer, Long) - Method in class org.opensaml.storage.AbstractStorageService
-
Updates an existing record in the store using a custom serialization strategy.
- update(Object) - Method in class org.opensaml.storage.AbstractStorageService
-
Updates an existing record in the store, using an annotated object as the source.
- update(String, String, String, Long) - Method in interface org.opensaml.storage.StorageService
-
Updates an existing record in the store.
- update(String, String, Object, StorageSerializer, Long) - Method in interface org.opensaml.storage.StorageService
-
Updates an existing record in the store using a custom serialization strategy.
- update(Object) - Method in interface org.opensaml.storage.StorageService
-
Updates an existing record in the store, using an annotated object as the source.
- updateContextExpiration(String, Long) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Updates the expiration time of all records in the context.
- updateContextExpiration(String, Long) - Method in interface org.opensaml.storage.StorageService
-
Updates the expiration time of all records in the context.
- updateExpiration(String, String, Long) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Updates expiration of an existing record in the store.
- updateExpiration(Object) - Method in class org.opensaml.storage.AbstractStorageService
-
Updates expiration of an existing record in the store, using an annotated object as the source.
- updateExpiration(String, String, Long) - Method in interface org.opensaml.storage.StorageService
-
Updates expiration of an existing record in the store.
- updateExpiration(Object) - Method in interface org.opensaml.storage.StorageService
-
Updates expiration of an existing record in the store, using an annotated object as the source.
- updateImpl(Long, String, String, String, Long) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Internal method to implement update functions.
- updateWithVersion(long, String, String, String, Long) - Method in class org.opensaml.storage.AbstractMapBackedStorageService
-
Updates an existing record in the store, if a version matches.
- updateWithVersion(long, String, String, Object, StorageSerializer, Long) - Method in class org.opensaml.storage.AbstractStorageService
-
Updates an existing record in the store, if a version matches, using a custom serialization strategy.
- updateWithVersion(long, Object) - Method in class org.opensaml.storage.AbstractStorageService
-
Updates an existing record in the store, if a version matches, using an annotated object as the source.
- updateWithVersion(long, String, String, String, Long) - Method in interface org.opensaml.storage.StorageService
-
Updates an existing record in the store, if a version matches.
- updateWithVersion(long, String, String, Object, StorageSerializer, Long) - Method in interface org.opensaml.storage.StorageService
-
Updates an existing record in the store, if a version matches, using a custom serialization strategy.
- updateWithVersion(long, Object) - Method in interface org.opensaml.storage.StorageService
-
Updates an existing record in the store, if a version matches, using an annotated object as the source.


Tab Example!
all examples
Header 1
article 1
Header 2
article 2
header 3
article 3
Header One
article One
Header Two
article Two
header Three
article Three
header Four
article Four
Head two of Five
art two of five
Head two of Five
art two of FIve
head one of Five
art one of Five
Head One
art One
Head Two
art Two
Head Two of Three
art Two of Three
Head one of Three
art one of Three
Head one of Three
art one of Three
Head Two of Three
art Two of Three


{% extends "base.html" %} {% block content %}
The idea for this site started in 2013, when a friend was trying to go back and retag her old Tumblr posts. Without a way to easily see all her untagged posts, it was impossible for her to be sure that she was done. I wrote her a Python script, and that was that.
In 2014, I noticed I was getting a lot of hits to this blog post, but a Python script isn’t very user friendly. I wrote this site to be an easier way to get a list of your untagged posts, because clearly it was something people wanted.
It's been through a number of iterations – previously it was written in Angular, then a client-side JavaScript app. The current iteration is a Flask app, served through UWSGI and nginx, and hosted on Linode. All the source code is on GitHub and released under an MIT license.
Hi, I’m Alex! I'm a software developer, and from time-to-time I do bits of open-source work, or mini projects like this site. You can usually find more up-to-date info on my blog.


AccountSetup
SocialProfiles
PersonalDetails
what you are
Student
Working
None
Submit
Add your locations
next
Add your locations
next
Add your locations
next
upload
skip


The Google Cloud Dataflow SDK for Java provides a simple and elegant programming model to express your data processing pipelines; see our product page for more information and getting started instructions.
The easiest way to use the Google Cloud Dataflow SDK for Java is via one of the released artifacts from the Maven Central Repository. See our release notes for more information about each released version.
Version numbers use the form major.minor.incremental and are incremented as follows:
Please note that APIs marked {@link com.google.cloud.dataflow.sdk.annotations.Experimental @Experimental} may change at any point and are not guaranteed to remain compatible across versions.


Download Tic Tac Toy Logo Background. (this account is managed by an adult) purchase tic tac toy and xoxo gaming merch here: We carry toys for all ages, from rattles for newborns to family games for adults.
Hi tic tac toy fans! 2020 popular 1 trends in men's clothing, sports & entertainment, toys & hobbies, consumer electronics with tic tac to and 1. Polish your personal project or design with these tic tac toe transparent png images, make it even more personalized and more attractive.
Average rating:(4.3)out of 5 stars166ratings, based on166reviews.
Product titletic tac toy xoxo hugs plush? Product titletic tac toy xoxo friends multi pack surprise, pack 1 of 12. Food and drink in russia. We are jason, lucy, addy, maya and colin.


Logo
Administrative Login
Administrative Login
menu
Login or Register to continue.
Login
Register
UserName
Password
Login
send
First Name
Last Name
UserName
Email
Password
Retype - Password
Register
send


USEEIO Widgets
A collection of embeddable components for visualizing data from the
USEEIO API.
Local JSON files may be generated from the API
or you can use pre-generated files.
Sector List Widget
Commodity data from the U.S. Bureau of Economic Analysis (BEA)
Impact Chart Widgets
Environmentally-Enabled Input-Output Comparison
Filters and Configuration Test
Communication occurs between widgets using hash values. Test your setup.
We encourage you to fork and expand on the widgets to add features.
View sample page combining multiple widgets.


10 and value.align_columnar_images == "right" %}margin-left{% endif %}">
{# For empty paragraph content the value of length is 10. If their is no paragraph content the image(s) should take entire width without any margin as full width image #}
{% with value.images|length as images_length %}
{% for image in value.images %}
{% if value.height > 560 %}
{% image image.image height-1120 as image %}
{% else %}
{% image image.image height-560 as image %}
{% endif %}
{% image image.image max-1400x1120 as slide_image %}
{% if image.image.photographers.all %}
PHOTO CREDIT •
{% for photographer in image.image.photographers.all %}
{{ photographer }}
{% if not forloop.last %},
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endwith %}
{{ value.caption }}


Supplementary Marathon List for 2003
Scheduled but not verified ENG 29 Mar Darlington Cleveland Survival ENG 04 May Thorpness Rotary Heritage Coast (21st) ENG 10 May Caythorpe Caythorpe Canter ENG 08 Jul Osmotherley Osmotherley Phoenix ENG 20 Sep Ludford Harvest Hobble ENG 28 Sep Dawlish Dawlish Dawdle GER 10 Aug Südmoslesfehn Wardenburg Natur WAL 22 Mar Cwmdauddwr Powys Rhayader Mountain Trail
Scheduled but cancelled
FRA 04 Oct Argentan Argentan
ITA 09 Nov Assemini Sarda
USA 13 Apr Worcester MA Fred's
USA 27 Apr Brooklyn NY Achilles
USA 27 Apr Van Wert OH Van Wert Reservoir
Marathons that are not races (fun runs or non-competitive walks)
ENG 09 Apr Bath Bath Beat
ENG 28 Jun Grindleford The Ladybower Challenge
ENG 13 Jul Rottingdean Rottingdean Windmill
ENG 27 Jul Easton-on-the-Hill Rutland Venture
ENG 14 Sep Lane End Buckinghamshire
ENG 19 Oct Gornshall Founders Challenge
ENG 09 Nov Barton-Le-Clay Steppingley Step
JPN 12 Oct Tokyo Tokyo Yumemai (4th)
"Marathons" that are not marathons
ENG 02 Feb Godalming Punchbowl (25 or 30 miles)
ENG Jun Lowe Alpine
ENG 28 Jun Malvern Malvern (35 miles)
ENG Jul Saunders Lakeland Mountain
ENG 06 Jul Tanners (30 miles)
ENG 25 Oct Karrimor International Mountain
IOM 10 Apr Ramsey Manx Mountain (30.7 miles)
Last Updated on 18 Jan 2011


Review: Nightbreed (and David Cronenberg) Finally Gets an Action Figure
by Luke Y. ThompsonFor those who’ve never seen it, Clive Barker‘s Nightbreed plays like a horror-tinged X-Men. At a certain age, protagonist Boone starts developing special abilities. He’s convinced he’s a monster, notably by his doctor, Decker. But it turns out Decker is secretly a serial killer framing Boone — and Boone flees to the city of Midian, where other powered monsters dwell. Despite persecution from the small-town residents nearby.
Particularly in the recently released director’s cut, Nightbreed plays the persecuted minority card heavier than X-Men, as an obvious metaphor for small-town LGBT folks who find themselves in the bigger urban areas. It’s a massive in-joke that the real monster, normal human Dr. Decker, dons a monstrous mask to kill. And he’s played by horror directing icon David Cronenberg.
Nightbreed is full of creative mutations (see the card insert above), and fans have asked for toys for decades now. It’s ironic that the most normal-looking of the bunch finally became the first to get a figure. But fitting, since a Cronenberg figure has more cache than one of star Craig Sheffer. And there’s something more creepy about “Buttonface” than most of the actual Nightbreed. They’re crazy creatures, but he’s almost normal in that nice suit. And yet…not.
Decker comes in plastic clamshell packaging that NECA says is resealable, but I’ve never managed to get open without destroying. Maybe with a lot of patience, it can be separated cleanly, but sooner or later, however well I try, there’s always a jagged crack somewhere. He’s loaded with accessories. A briefcase opens up to carry two knives and a straight razor, while the remaining long knife and machete can be held in his silver gloves.
The figure uses a generic body, which is how the company keeps costs down for niche licenses. Headsculpts on this series tend to be softer on the likeness, but since this figure is only trying to recreate a mask, that’s no issue. Cronenberg’s rights were presumably not included, but the mask recreation is as heavy on the detail as anything NECA does.
RELATED: For Alien Day, NECA Announces Harry Dean Stanton Action Figure
The suit, at this scale, will obviously be a tad loose. But in general it hangs well, and the tie doesn’t get weird. The toy could even double as a figure from The Strangers among your less-cultured horror friends. For fans of the likes of Living Dead Dolls, which use traditional doll styles and infuse them with horror, this fits right in. Albeit in a different (8-inch) scale. He’ll run you between $30-$40.
Now, how the heck did he ever see through that thing? Or is it like Coraline, where living in the other world requires buttons for eyes? The answer is that as long as it looks cool, and seems functional within the movie itself, none of the rest matters.
Peep at more images of the demented doctor in our gallery below. Will you covet this Cronenberg collectible? Comment beneath and channel your thoughts.


{% extends 'courses/coursesbase.html' %} {% block address %} {{ block.super }} {% endblock %} {% block course_title_head %} Certificate in Core Java {% endblock %}1 {% block course_title %} Certificate in Core Java {% endblock %} {% block course_duration %} To be filled later {% endblock %} {% block course_fee %} To be filled later {% endblock %} {% block course_content %}


libname = ximport("libname")
The ximport() command is of historical interest to NodeBox users and is no longer necessary in PlotDevice. It allowed for importing ‘Libraries’ that had been installed in the ~/Library/Application Support/PlotDevice
directory.
When called with a string whose value matches the name of an installed Library, the Library will be loaded and returned as a module. In addition, a reference to the current "graphics context" is handed to the module, allowing it to change the graphics state, draw to the canvas, etc.
You can assign the module to a variable of any name you choose. Most of the time it makes sense to use the same name as the Library, but you're free to pick something shorter if it's too much of a mouthful.
The PlotDevice Libraries have been updated to work with the standard Python import
statement.
colors = ximport("colors") background(colors.papayawhip()) fill(colors.chocolate()) rect(10, 10, 50, 50)


Mothercare confirms intention to appoint administrators
by Jessica ClarkMothercare has confirmed it is preparing to appoint administrators later today.
The company announced this morning that a notice of intent to appoint administrators to Mothercare UK and Mothercare Business Services has been filed with the court.
The companies will continue to trade and the administration is a “necessary step in the restructuring and refinancing of the group”.
Mothercare said plans for the future of the group are “well advanced and being finalised for execution imminently”.
More to follow


One of the things the Monitor class allows you to do is to listen for certain events that occur in the composition of the replication group. Your Monitor can be notified of these events by running an event listener using Monitor.startListener(). For example:
Monitor.startListener()
takes a single
argument, and that is an instance of MonitorChangeListener.
MonitorChangeListener
is an interface
that you implement for the purpose of handling replication
group events.
There are four events that the change listener can be notified of. Each of these are represented by a unique class:
A new instance of this event is generated each time an electable or monitor node, but not a secondary node, is added or removed from the replication group.
A new instance of this event is generated each time a new Master is elected.
A new instance of this event is generated each time an electable or secondary node, but not a monitor node, joins a group. The event is generated on a "best effort" basis. It may not be generated, for example, if the joining node was unable to communicate with the monitor due to a network problem. The application must be resilient in the face of such missing events.
A new instance of this event is generated each time an electable or secondary node, but not a monitor node, node leaves the group. The event is generated on a "best effort" basis. It may not be generated if the node leaving the group dies (for example, it was killed) before it has a chance to generate the event, or if the node was unable to communicate with the monitor due to a network problem. The application must be resilient in the face of such missing events.
For example, an implementation of the MonitorChangeListener interface might be:
class MyChangeListener implements MonitorChangeListener { public void notify(NewMasterEvent newMasterEvent) { String newNodeName = newMasterEvent.getNodeName(); InetSocketAddress newMasterAddr = newMasterEvent.getSocketAddress(); String newMasterHostName = newMasterAddr.getHostName(); int newMasterPort = newMasterAddr.getPort(); // Do something with this information here. } public void notify(GroupChangeEvent groupChangeEvent) { ReplicationGroup repGroup = groupChangeEvent.getRepGroup(); // Do something with the new ReplicationGroup composition here. } ... }
You can then start the Monitor listener as follows:
// Initialize the monitor node config
ReplicationConfig config =
new ReplicationConfig("MyRepGroupName",
"mon1",
"monhost1.acme.com:7000");
config.setNodeType(NodeType.MONITOR);
config.setHelperHosts("node1.acme.com:5000,node2.acme.com:5000");
Monitor monitor = new Monitor(config);
// If the monitor has not been registered as a member of the
// group, register it now. register() returns the current node
// that is the master.
ReplicationNode currentMaster = monitor.register();
// Start up the listener, so that it can be used to track changes
// in the master node, or group composition.
monitor.startListener(new MyChangeListener());


Did you mess up? Did you mess up real bad? And now, do you not know what to do about it? Fear not! Our patent-pending, artificially intelligent ContritionEngine™© will craft a perfectly formed apology, customized for your personality, lifestyle and situation. Whatever you may have done, and whomever you may have wronged, this apology is guaranteed to melt hearts and mend bridges.
Inspiration


Click a feature type to select it for markup.
Markup regions with this feature type.
Mouse over a feature type to display markup.
Mouse wheel to zoom in and out. Left-click and drag to move while zoomed in. Right-click and drag to zoom in and out. Left-click to markup tiles. Shift-left-click to erase tiles. Mouse wheel to zoom in and out. Right-click and drag to move while zoomed in.


Lawyers want speedy Fishrot probe 21 Nov 2019, 07:03 by Kuzeeko Tjitemisa Home \ Front Page News \ Lawyers want speedy Fishrot probe - New Era Live


Realtime collaborative drum machine and sampling
Shout.js lets you construct a groove and collaborate on it in realtime across the web. Changes to the pattern are automatically pushed to all clients.
Call the phone number displayed and record new samples which you can then add to the pattern.
Copy the url and share it with your friends to start collaborating...


-
Apple's "warrant canary" disappears, suggesting new Patriot Act demands
gigaom.com
Apple included language in its first Transparency Report to say that it had not been subject to a Section 215 Patriot Act request. That language is ...
-
Petition to Obama Administration: End the Harassment and Targeting of ...
www.eff.org
Imagine the United States without independent reporters. Where would the news come from? Press releases and corporate statements? Government-run ...
-
Ilham Tohti, Online Voice of China's Uyghurs, Sentenced to Life in Prison
www.eff.org
On Tuesday, Chinese Uyghur scholar, Ilham Tohti, was sentenced to life in prison after a court in Urumqi—the capital of the Xinjiang Uyghur ...
-
EFF Pioneer Awards 2014
www.eff.org
On October 2 in San Francisco, we will be celebrating the work of the 2014 Pioneer Award winners. The celebration will include drinks, bytes, and ...
-
Australian Government Scrambles to Authorize Mass Surveillance
www.eff.org
This week, Australian Prime Minister Tony Abbott used recent terrorist threats as the backdrop of a dire warning to Australians that “for some time ...
-
Where Books Are Banned, The Internet Can Be a Lifesaver
www.eff.org
The censorship or banning of books is a phenomenon that occurs in countries around the world. Books that are considered “scandalous” or inciteful in ...
-
Parliament 'bullied' to pass national security laws, says Greens senator ...
www.smh.com.au
Controversial anti-terrorism laws expected to pass in the Senate as early as this week will give spy agency ASIO the power to monitor the entire ...
-
EFF Asks President Obama To Support Open Innovation
www.eff.org
Every few years, the White House updates its Strategy for American Innovation and asks for comments from the public. EFF’s submission explains that ...
-
Banned Books Week: Celebrating Free Expression and the Open Flow of ...
www.eff.org
It’s Banned Books Week! An annual event held in the last week of September, Banned Books Week seeks to draw attention to books being banned or ...
-
Local Use of Military Equipment is Drawing Scrutiny—But Local Use of ...
www.eff.org
Since the police shooting of Michael Brown and the response in the streets, militarization of the police, especially with surplus military hardware ...
-
Person Of Interest's Creators Explain Why A.I. Could Be The New A-Bomb
io9.com
Person of Interest returns tonight with an even scarier look at ubiquitous surveillance than before. The Electronic Frontier Foundation's Dave Maass ...
-
Follow your favorite charity on eBay
givingworks.ebay.com
Help Electronic Frontier Foundation raise more funds by adding them as your favorite charity on eBay
-
Lawmakers seek new powers for privacy board
thehill.com
A new bill would give the board “the teeth it needs," Sen. Ron Wyden said.
-
Back to School: Get Your Digital Rights Student Group Started Right Away
www.eff.org
Watch for it. This year student protest and resistance to mass surveillance might be bursting at the seams. The Internet, which students across the ...
-
Before they could track cell phone data, police had to sign a NDA with the ...
www.muckrock.com
FOI Requests:
-
New Video Exposes Canadian Spy Agency's Unchecked Surveillance Program
www.eff.org
The Canadian government's surveillance of innocent Canadians is secretive, expensive, and out-of-control—that’s the message of a new video launched ...
-
Statement on the Use of Finfisher by Members of the Freedom Online ...
www.eff.org
Documents recently released by WikiLeaks have brought new evidence to the public eye that the intrusive surveillance spyware FinFisher may be in use ...
-
Court Lets Cisco Systems Off the Hook for Helping China Detain, Torture ...
www.eff.org
Chinese citizens who suffered forced detention, torture, and a panoply of brutal human rights abuses at the hands of the Chinese government have been ...
-
Opportunity Missed: Why We're Not Thrilled By Restoration of PACER Access ...
www.eff.org
The Administrative Office of the United States Courts (AO) announced on Friday that it would make reams of court records once again accessible ...
-
Tor Challenge Inspires 1,635 Tor Relays
www.eff.org
Good news for whistleblowers, journalists, and everyone who likes to browse the Internet with an added cloak of privacy: the Tor network got a little ...
-
13 Principles Week of Action: While Australia Shirks Its International ...
www.eff.org
This is a guest post from Angela Daly and Angus Murray, members of the Policy and Research Standing Committee, Electronic Frontiers Australia. Angela ...
-
EFF at World Maker Faire New York
www.eff.org
Celebrate innovation with EFF at the World Maker Faire New York! Find our booth outdoors with the hackerspaces. We are pleased to participate in the ...
-
Bill Introduced in Congress to Let You Actually Own Things, Even if They ...
www.eff.org
We’ve written before about how copyright is chipping away at your right to own devices you’ve bought and paid for—from e-books to toasters and even ...
-
Kurt Opsahl of the Electronic Frontier Foundation: A Conversation About ...
cyber.law.harvard.edu
Friday September 19, 2014 12-1PM, WCC 3019 Lunch will be served Hosted/Co-sponsored by the Cyberlaw Clinic
-
Mijn vriend $#236dsdfiulgsd^%&@ | Liga voor Mensenrechten
www.mensenrechten.be
Naar aanleiding van het lekken van privéfoto's van een aantal beroemdheden stellen velen zich, terecht, vragen bij de veiligheid van de cloud. In dit ...
-
13 Principles Week of Action: The World Needs More Whistleblowers
www.eff.org
This is a guest post from Sana Saleem, Advisory Board Member, Courage Foundation. If you have comments on this post, you can contact Sana on Twitter.
-
EFF to Defend Student Bitcoin Developers in Court
www.eff.org
Newark, NJ - Electronic Frontier Foundation (EFF) Staff Attorney Hanni Fakhoury will appear before a New Jersey Superior Court judge on Monday, Sept. ...
-
Blog | Access
www.accessnow.org
Between 15th-19th of September, 2014, in the week leading up the first year anniversary of the International Principles on the Application of Human ...
-
13 Principles Week of Action: Five Eyes’ Quest For Security Has Given Us ...
www.eff.org
This is a guest post from Aaron Gluck Thaler, Privacy International.* If you have comments on this post, you can contact Privacy International on ...


@*
* Copyright 2021 HM Revenue & Customs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*@
@(businessType: Option[String],
someRadioField: Option[Field],
inputField: Field,
youOrThey: String,
ariaLabelledBy: Option[String] = None,
formHasErrors: Boolean = false)(implicit messages: Messages, formInstance: Option[Form[_]] = None)
@import play.api.i18n._
@import views.helpers.{InputTypeRadioGroupParams, InputTypeTextParams, QuestionAnswerParameters}
@import views.html.helpers._
@iDoNotKnowUTRHintQuestion = @{
youOrThey match {
case "they" => Messages("awrs.generic.iDoNotKnowTheirUTR_question")
case _ => Messages("awrs.generic.iDoNotKnowMyUTR_question")
}
}
@iDoNotKnowUTRHintAnswer = @{
youOrThey match {
case "they" => Html(Messages("awrs.generic.iDoNotKnowTheirUTR_text","
"))
case _ => Html(Messages("awrs.generic.iDoNotKnowMyUTR_text","
"))
}
}
@legend = @{
businessType.map {
//for the sole trader entity, the do they version of the question will never be asked, so there's no need to customise the message here
case "SOP" => Messages("awrs.generic.do_you_have_sa_UTR")
case "Partnership" | "LP" | "LLP" | "LLP_GRP" => Messages(s"awrs.generic.do_${youOrThey}_have_partnership_UTR")
case _ => Messages(s"awrs.generic.do_${youOrThey}_have_CT_UTR")
}
}
@core(withQuestion : Boolean) = @{
val (wrapperClassSetting : Option[String], labelSetting : Option[String]) =
withQuestion match {
case true => (Some("panel-indent"), Some(Messages("awrs.generic.UTR_number")))
case false => (None, businessType.map {
case "SOP" => Messages("awrs.generic.sa_UTR_number")
case "Partnership" | "LP" | "LLP" | "LLP_GRP" => Messages(s"awrs.generic.partnership_UTR_number")
case _ => Messages(s"awrs.generic.CT_UTR_number")
}
)
}
val mainInput = awrsInputTypeText(
InputTypeTextParams(
inputField,
parentForm = formInstance,
inputId = inputField.name,
maxLength = frontendDefaultLen,
wrapperClass = wrapperClassSetting,
label = labelSetting,
labelHighlight = true,
required = true,
formHint = Messages("awrs.generic.do_you_have_UTR_information"),
formHintId = "utr-information",
ariaLabelledBy = ariaLabelledBy,
formHasErrors = formHasErrors
)
)
val outsideHint = awrsAnswerQuestionHelper(
QuestionAnswerParameters(
question = iDoNotKnowUTRHintQuestion,
questionId = "utr-HelpLink",
wrapperClass = "panel-indent",
answer = iDoNotKnowUTRHintAnswer
)
)
withQuestion match {
case true => mainInput
case false => Seq(mainInput, outsideHint) // this will appened the two appendables when twirl generates the templates
}
}
@withQuestion(questionField : Field) = {
@awrsInputTypeRadioGroup(
InputTypeRadioGroupParams(
questionField,
Seq("Yes" -> Messages("awrs.generic.yes"),
"No" -> Messages("awrs.generic.no")),
fieldSetAttributes = "id="+questionField.name+"_field",
legend = legend,
legendId = questionField.name+"-legend",
fieldSetClass = "inline",
fieldSetQuestion = iDoNotKnowUTRHintQuestion,
fieldSetQuestionAnswer = iDoNotKnowUTRHintAnswer,
fieldSetQuestionId = "utr-HelpLink",
fieldSetQuestionWrapperClass = "panel-indent"
)
)


:: com :: sun :: star :: text ::
|
| interface XTextContent |
- Base Interfaces
XTextContent
┗ ::com::sun::star::lang::XComponent
| ::com::sun::star::lang::XComponent |
- (referenced interface's summary:)
- allows to exclicitly free resources and break cyclic references.
|
|
- Description
- enables objects to be inserted into a text and to provide their
location in a text once they are inserted into it.
- Developers Guide
- Text - Navigating - Locating Text Contents
|
| Methods' Summary |
| attach |
is called when this object gets embedded in a text.
|
| getAnchor |
|
| Methods' Details |
attach
- Description
- is called when this object gets embedded in a text.
This acts like a multi-phase construction, thus the object may be
invalid until it is attached to a text position. In general, this method
is called from within
.
Both text objects and text content objects may only be connected
to each other if they are created by the same component. When
implementing new components, this behaviour is deprecated.
|
|
getAnchor
- Returns
- the text range to which the content is attached.
Note: The anchor of the actual implementation for text tables
does not have a position in the text. Thus that anchor can not be
used for some operation like attach for example or
insertTextContent
or other function that require the object to have a position in the text.
The reason why a text table still needs an anchor is that for example
tables should be insertable via insertTextContent
and that interface uses a parameter of that type.
|
|
Top of Page
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


class: center, middle, inverse, title-slide # Autocorrelation
in spatial regression
with Random Forest ### Blas M. Benito ### University of Alicante (Spain) ### 2021-09-09 --- class: center, middle  # Availability .left[ .small[ Live slideshow: [https://blasbenito.github.io/spatialRF_talk/talk.html](https://blasbenito.github.io/spatialRF_talk/talk.html) Github repo: [BlasBenito/spatialRF_talk](https://github.com/BlasBenito/spatialRF_talk) ] ]  --- class: inverse, center, middle # WHAT IS
 SPATIAL AUTOCORRELATION
 AND
 WHY DO WE CARE? --- class: center, middle ## Tobler’s First Law of Geography .blockquote[ Everything is usually related to all else, but those which are near to each other are more related when compared to those that are further away. .right[-- Waldo Tobler, 1970] ]
 .content-box[Similarity depends on distance]
 .medium[We call it **spatial autocorrelation** (SAC)] --- class: center  --- class: center middle  --- class: center, middle .content-box[What does SAC *really* represent?] ## The *footprint*
 of the process generating
 the variable of interest! .medium[(mixed with the observation scale and sampling structure)] --- class: center ## Cholera map (John Snow1, 1854)
 .small[ .footnote[ [1] Not *that* John Snow ] ] --- class: center ## Cholera map (John Snow, 1854)  --- class: center ## Colony of Imperial cormorants
 (*Leucocarbo atriceps*)  .small[ Source: [www.dailymail.co.uk](https://www.dailymail.co.uk/news/article-2982830/Amazing-photographs-thousands-nesting-Cormorants-gather-crowded-beach-annual-nesting-season.html) ] --- class: center ## Colony of Imperial cormorants
 (*Leucocarbo atriceps*)  .small[ Source: [www.dailymail.co.uk](https://www.dailymail.co.uk/news/article-2982830/Amazing-photographs-thousands-nesting-Cormorants-gather-crowded-beach-annual-nesting-season.html) ] --- class: inverse middle center # SPATIAL PREDICTORS --- class: middle center ## WHAT ARE
 SPATIAL PREDICTORS? .medium[ **Variables representing
 the spatial structure of the data**

 Proxies of the process
 originating spatial autocorrelation

 How?: **Eigenvectors of a neighborhood matrix** ] --- class: middle center ### A GOOD PAPER TO START  --- class: middle center ## MAIN IDEA .medium[ **Linear combinations of the eigenvectors of a neighborhood matrix represent all the possible spatial configurations of a given set of spatial records** ] .small[Let's see how that works!] --- class: middle center ### HYPOTHETIC SPATIAL RECORDS  --- class: middle center ### DISTANCE MATRIX
  --- class: middle center ### MATRIX OF WEIGHTS .small[ Computed as 1/distance matrix ]  --- class: middle center ### NORMALIZED AND DOUBLE-CENTERED .small[ column and row means are 0 ]  --- class: middle center ### EIGENVECTORS IN SPACE  --- class: middle center ### EIGENVECTORS WITH MORAN'S I > 0  --- class: middle center ### MODEL TRAINING  --- class: inverse middle center # Example with the R package *spatialRF* --- class: middle center ## The R package *spatialRF* .left[ - Github repo: [https://github.com/BlasBenito/spatialRF](https://github.com/BlasBenito/spatialRF) - Website: [https://blasbenito.github.io/spatialRF/](https://blasbenito.github.io/spatialRF/) - Not in CRAN yet. .small[Install:] .medium[ ```r remotes::install_github( repo = "blasbenito/spatialRF", ref = "development" ) library(spatialRF) ``` ] ] --- class: middle left ## EXAMPLE DATA .pull-left[ .tiny[ - **Response variable**: plant richness of the American ecoregions - **14 predictors** (climate, fragmentation, human impact, etc) - **Distance matrix** among the ecoregion polygons (centroids shown in the figure) ] ] .pull-right[  ] --- class: middle left ### MODELLING SETUP .left[ .small[ ```r #loading training data and distance matrix data(plant_richness_df) data(distance_matrix) #names of the response and predictors response.name <- "richness_species_vascular" predictor.names <- c( "human_population", #human "human_population_density", "human_footprint_average", "climate_hypervolume", #climate "climate_bio1_average", "climate_bio15_minimum", "climate_aridity_index_average", "climate_velocity_lgm_average", "neighbors_area", #neighbours "neighbors_count", "neighbors_percent_shared_edge", "bias_area_km2", #size and shape "fragmentation_cohesion", "fragmentation_division" ) #distance thresholds in km distance.thresholds <- c(50, 500, 5000) ``` ] ] --- class: middle left ### FITTING THE MODELS .medium[ ```r #non-spatial model, predictors only model.non.spatial <- spatialRF::rf( data = plant_richness_df, dependent.variable.name = response.name, predictor.variable.names = predictor.names, distance.matrix = distance_matrix, distance.thresholds = distance.thresholds ) ``` ```r #spatial model, predictors and spatial predictors model.spatial <- spatialRF::rf_spatial( model = model.non.spatial, method = "mem.moran.sequential" ) ``` ] --- class: middle left ## COMPARING THE MODELS WITH SPATIAL CROSS-VALIDATION .pull-left[ .small[
 ```r model.comparison <- spatialRF::rf_compare( models = list( model.non.spatial = model.non.spatial, model.spatial = model.spatial ), xy = plant_richness_df[, c("x", "y")], repetitions = 100, metrics = "rmse" ) ``` ] ] .pull-right[  ] --- class: middle center ## MODEL COMPARISON

  Model 	  spatial predictors 	  Moran's I of residuals 	  RMSE spatial cv

  Non spatial 	  0 	  0.15 	  3104

  Spatial 	  18 	  0.03 	  3514

 --- class: middle center ## VARIABLE IMPORTANCE  --- class: middle center ## IMPORTANCE OF SPATIAL PREDICTORS  --- class: middle center ## RESPONSE CURVES  --- class: middle left ## A FEW IDEAS - **Spatial predictors** reduce SAC in model residuals - **Spatial predictors** hinder model transferability - **Eigenvectors**: Outcome similar to base model, plus information about the importance of spatial processes - Computational demands limit sample size (1000 to 5000, depending on the available RAM) --- class: middle center ## FINAL MESSAGE .medium[ Incorporating spatial predictors into machine learning models might help unveil underlying spatial processes not represented by the covariates. ] --- class: middle background-image: url("figures/end.png") background-size: contain


Loading ...
Scan for Subresource Integrity (SRI)
Scan
Hide from Statistics
This service allows you to scan any website for
Subresource Integrity (SRI)
cryptographic hashes


Look into wiki to get a better overview.
Locals (Aktors hired) are building a wordpress-page for court what shall be linked or otherwise integrated with our system.
Dubai has a proffesional e-court system - we can learn some of that page as it is a role model for client.
As an international project with participans from different locations/companies (I can count 3 in Estonia and 2 in Kurdistan) it needs speciflicly good toolset for collaboration. TFS is good for some things, I would add Asana for tracking and Slack for communicationg and Usersnap[https://usersnap.com/] for onscreen commenting. For all listed tools the testaccounts are created (named Kurdi Kohus), depends on project manager wether they will be used or not.
Hanno has written about their tools for collaboration, peek-in into their general workflow is here. Read about Slack and Asana
We go with the bulletproofed Google fonts: Roboto (light, Normal, Medium e.g. 300, 400, 500) for english version, Noto for arabic and kurdish. Thats for the webpage. All the documents influenced by MS Word and possibly sent by email shall use unicode fonts.
Other suggestionst for arabic webfonts by community, in Google fonts are arabic-persian fonts under early access fonts. Note that arabic and kurdish letters are not the same.
Pay attention that rtl-writing starts from end - in our understanding. They take the file and start to fill it from end.
As we are going with scss version, there is a helper for rtl-support
The color pallette should be nordic and unobtrusive - was the clients wish. The sample pallettes are in Coolor account.
This article giver probably a pretty good overview of available tools. Session recording app for windows would be Usability Studio - as local computers have built-in camera, the implementation would be easy.


{% extends "base.html" %} {% load scribbler_tags %} {% block title %}About{% endblock %} {% block body_id %}about-page{% endblock body_id %} {% block content %}
Open-NC.org is a catalog of digital public data created by state and local governments in North Carolina. It was created by Ryan Thornburg, an Associate Professor in the School of Journalism and Mass Communication at the University of North Carolina at Chapel Hill with funding from a John S. & James L. Knight Foundation News Challenge grant.
The site’s goal is to make it easier for you to to find, request and share information about digital public data in North Carolina. With easy access to this public data, we hope to support the transparency of North Carolina government, to lower the cost of watchdog reporting and to increase innovation and economic development.
The UNC School of Journalism and Mass Communication’s responsibility is to train the next generation of media professionals, including journalists, strategic communicators, teachers and researchers – and to serve journalism and communication professionals.
The John S. and James L. Knight Foundation is a 501(c)3 tax-exempt private foundation that supports transformational ideas that promote quality journalism, advance media innovation, engage communities and foster the arts.
{% endscribble %}


Module: Concurrent::Promises::Future::ThrottleIntegration
- Included in:
- Concurrent::Promises::Future
- Defined in:
- lib/concurrent/edge/throttle.rb
Instance Method Summary (collapse)
-
- (Promises::Future) rescue_throttled_by(throttle, *args, &block)
Behaves as #rescue but the it is throttled.
-
- (Promises::Future) then_throttled_by(throttle, *args, &block)
Behaves as #then but the it is throttled.
Instance Method Details
- (Promises::Future) rescue_throttled_by(throttle, *args, &block)
Behaves as Concurrent::Promises::Future#rescue but the it is throttled.
184 185 186 |
# File 'lib/concurrent/edge/throttle.rb', line 184 def rescue_throttled_by(throttle, *args, &block) throttled_by(throttle) { |trigger| trigger.rescue(*args, &block) } end |
- (Promises::Future) then_throttled_by(throttle, *args, &block)
Behaves as Concurrent::Promises::Future#then but the it is throttled.
177 178 179 |
# File 'lib/concurrent/edge/throttle.rb', line 177 def then_throttled_by(throttle, *args, &block) throttled_by(throttle) { |trigger| trigger.then(*args, &block) } end |


ETJump is a modification for Wolfenstein: Enemy Territory. It is actively developed by Zero, XIS, Vallz and Ryven.


Class: Concurrent::ScheduledTask
- Inherits:
-
IVar
- Object
- Concurrent::Synchronization::LockableObject
- IVar
- Concurrent::ScheduledTask
- Includes:
- Comparable
- Defined in:
- lib/concurrent/scheduled_task.rb
Overview
Time calculations one all platforms and languages are sensitive to changes to the system clock. To alleviate the potential problems associated with changing the system clock while an application is running, most modern operating systems provide a monotonic clock that operates independently of the system clock. A monotonic clock cannot be used to determine human-friendly clock times. A monotonic clock is used exclusively for calculating time intervals. Not all Ruby platforms provide access to an operating system monotonic clock. On these platforms a pure-Ruby monotonic clock will be used as a fallback. An operating system monotonic clock is both faster and more reliable than the pure-Ruby implementation. The pure-Ruby implementation should be fast and reliable enough for most non-realtime operations. At this time the common Ruby platforms that provide access to an operating system monotonic clock are MRI 2.1 and above and JRuby (all versions).
ScheduledTask
is a close relative of Concurrent::Future
but with one
important difference: A Future
is set to execute as soon as possible
whereas a ScheduledTask
is set to execute after a specified delay. This
implementation is loosely based on Java's
ScheduledExecutorService.
It is a more feature-rich variant of timer.
The intended schedule time of task execution is set on object construction
with the delay
argument. The delay is a numeric (floating point or integer)
representing a number of seconds in the future. Any other value or a numeric
equal to or less than zero will result in an exception. The actual schedule
time of task execution is set when the execute
method is called.
The constructor can also be given zero or more processing options. Currently the only supported options are those recognized by the Dereferenceable module.
The final constructor argument is a block representing the task to be performed.
If no block is given an ArgumentError
will be raised.
States
ScheduledTask
mixes in the Obligation module thus giving it
"future" behavior. This includes the expected lifecycle states. ScheduledTask
has one additional state, however. While the task (block) is being executed the
state of the object will be :processing
. This additional state is necessary
because it has implications for task cancellation.
Cancellation
A :pending
task can be cancelled using the #cancel
method. A task in any
other state, including :processing
, cannot be cancelled. The #cancel
method returns a boolean indicating the success of the cancellation attempt.
A cancelled ScheduledTask
cannot be restarted. It is immutable.
Obligation and Observation
The result of a ScheduledTask
can be obtained either synchronously or
asynchronously. ScheduledTask
mixes in both the Obligation
module and the
Observable
module from the Ruby standard library. With one exception ScheduledTask
behaves identically to Future with regard to these modules.
Copy Options
Object references in Ruby are mutable. This can lead to serious
problems when the Concern::Obligation#value of an object is a mutable reference. Which
is always the case unless the value is a Fixnum
, Symbol
, or similar
"primitive" data type. Each instance can be configured with a few
options that can help protect the program from potentially dangerous
operations. Each of these options can be optionally set when the object
instance is created:
:dup_on_deref
When true the object will call the#dup
method on thevalue
object every time the#value
method is called (default: false):freeze_on_deref
When true the object will call the#freeze
method on thevalue
object every time the#value
method is called (default: false):copy_on_deref
When given aProc
object theProc
will be run every time the#value
method is called. TheProc
will be given the currentvalue
as its only argument and the result returned by the block will be the return value of the#value
call. Whennil
this option will be ignored (default: nil)
When multiple deref options are set the order of operations is strictly defined. The order of deref operations is:
:copy_on_deref
:dup_on_deref
:freeze_on_deref
Because of this ordering there is no need to #freeze
an object created by a
provided :copy_on_deref
block. Simply set :freeze_on_deref
to true
.
Setting both :dup_on_deref
to true
and :freeze_on_deref
to true
is
as close to the behavior of a "pure" functional language (like Erlang, Clojure,
or Haskell) as we are likely to get in Ruby.
Class Method Summary (collapse)
-
+ (ScheduledTask) execute(delay, opts = {}, &task)
Create a new
ScheduledTask
object with the given block, execute it, and return the:pending
object.
Instance Method Summary (collapse)
-
- (Boolean) cancel
Cancel this task and prevent it from executing.
-
- (Boolean) cancelled?
Has the task been cancelled?.
-
- (ScheduledTask) execute
Execute an
:unscheduled
ScheduledTask
. -
- (Float) initial_delay
The
delay
value given at instanciation. -
- (ScheduledTask) initialize(delay, opts = {}) { ... }
constructor
Schedule a task for execution at a specified future time.
-
- (Boolean) processing?
In the task execution in progress?.
-
- (Boolean) reschedule(delay)
Reschedule the task using the given delay and the current time.
-
- (Boolean) reset
Reschedule the task using the original delay and the current time.
-
- (Float) schedule_time
The monotonic time at which the the task is scheduled to be executed.
Constructor Details
- (ScheduledTask) initialize(delay, opts = {}) { ... }
Schedule a task for execution at a specified future time.
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/concurrent/scheduled_task.rb', line 165 def initialize(delay, opts = {}, &task) raise ArgumentError.new('no block given') unless block_given? raise ArgumentError.new('seconds must be greater than zero') if delay.to_f < 0.0 super(NULL, opts, &nil) synchronize do ns_set_state(:unscheduled) @parent = opts.fetch(:timer_set, Concurrent.global_timer_set) @args = get_arguments_from(opts) @delay = delay.to_f @task = task @time = nil @executor = Options.(opts) || Concurrent.global_io_executor self.observers = Collection::CopyOnNotifyObserverSet.new end end |
Class Method Details
+ (ScheduledTask) execute(delay, opts = {}, &task)
Create a new ScheduledTask
object with the given block, execute it, and return the
:pending
object.
277 278 279 |
# File 'lib/concurrent/scheduled_task.rb', line 277 def self.execute(delay, opts = {}, &task) new(delay, opts, &task).execute end |
Instance Method Details
- (Boolean) cancel
Cancel this task and prevent it from executing. A task can only be cancelled if it is pending or unscheduled.
222 223 224 225 226 227 228 229 230 231 |
# File 'lib/concurrent/scheduled_task.rb', line 222 def cancel if compare_and_set_state(:cancelled, :pending, :unscheduled) complete(false, nil, CancelledOperationError.new) # To avoid deadlocks this call must occur outside of #synchronize # Changing the state above should prevent redundant calls @parent.send(:remove_task, self) else false end end |
- (Boolean) cancelled?
Has the task been cancelled?
207 208 209 |
# File 'lib/concurrent/scheduled_task.rb', line 207 def cancelled? synchronize { ns_check_state?(:cancelled) } end |
- (ScheduledTask) execute
Execute an :unscheduled
ScheduledTask
. Immediately sets the state to :pending
and starts counting down toward execution. Does nothing if the ScheduledTask
is
in any state other than :unscheduled
.
260 261 262 263 264 265 |
# File 'lib/concurrent/scheduled_task.rb', line 260 def execute if compare_and_set_state(:pending, :unscheduled) synchronize{ ns_schedule(@delay) } end self end |
- (Float) initial_delay
The delay
value given at instanciation.
186 187 188 |
# File 'lib/concurrent/scheduled_task.rb', line 186 def initial_delay synchronize { @delay } end |
- (Boolean) processing?
In the task execution in progress?
214 215 216 |
# File 'lib/concurrent/scheduled_task.rb', line 214 def processing? synchronize { ns_check_state?(:processing) } end |
- (Boolean) reschedule(delay)
Reschedule the task using the given delay and the current time.
A task can only be reset while it is :pending
.
249 250 251 252 253 |
# File 'lib/concurrent/scheduled_task.rb', line 249 def reschedule(delay) delay = delay.to_f raise ArgumentError.new('seconds must be greater than zero') if delay < 0.0 synchronize{ ns_reschedule(delay) } end |
- (Boolean) reset
Reschedule the task using the original delay and the current time.
A task can only be reset while it is :pending
.
237 238 239 |
# File 'lib/concurrent/scheduled_task.rb', line 237 def reset synchronize{ ns_reschedule(@delay) } end |
- (Float) schedule_time
The monotonic time at which the the task is scheduled to be executed.
193 194 195 |
# File 'lib/concurrent/scheduled_task.rb', line 193 def schedule_time synchronize { @time } end |


Follow these steps to generate a report of a backtest:
lean init
in.lean report
to generate a report of the most recent backtest.
$ lean report 20210322 20:03:48.718 TRACE:: QuantConnect.Report.Main(): Parsing source files...backtest-data-source-file.json, 20210322 20:03:51.602 TRACE:: QuantConnect.Report.Main(): Instantiating report... Successfully generated report to './report.html'
./report.html
, although you can change this by providing a custom path with the --report-destination <path>
option.
If you want to generate a report of a backtest that is not the most recent one, you can use the --backtest-results <path>
option to specify the path to the backtest results JSON file to generate a report for.
Optionally you can also configure the following details:
--strategy-name <value>
. This value defaults to the name of the project directory.--strategy-version <value>
.--strategy-description
. This value defaults to the description stored in the project's configuration.--live-results <path>
. The provided path must point to a JSON file containing live results.


--- layout: post authors: ["Greg Wilson"] title: "Catch and Hold" date: 2013-12-27 time: "09:00:00" tags: ["Opinion", "Community"] ---
I'm a big fan of Mark Guzdial's work on computing education. Last week, he tweeted this:
Google is made of people who succeed in current CS teaching model. Hard for them to realize that it's wrong for most people. #GoogleCSFirst
Separately, on his blog, he cited John Dewey:
...interest operates by a process of "catch" and "hold"—first the individual's interest must be captured, and then it must be maintained.
I've been thinking about both points a fair bit while making plans for the new year. The people who are most active in Software Carpentry, myself included, are not typical of most scientists, so it's often hard for us to think outside our own heads about what will attract regular scientists' interest and hold it long enough to stick. Claiming that better technical skills enable more open science and reproducible research isn't enough: in my experience, those arguments mostly bounce off people who don't already care. Instead, most working scientists seem more interested in productivity and empowerment. We need to find ways to reconcile these, which means doing more follow-ups like Philip Fowler's.
Further down in that same blog post, Guzdial said something else that I've been thinking about:
We know more about how to retain students these days...consider the UCSD results and the MediaComp results. But...we are particularly bad at catching the attention of women and minority students. Our enrollment numbers are rising, but the percentage of women and under-represented minorities is not.
We've made progress with respect to gender balance (even outwith our WiSE bootcamps), but not with under-represented minorities, with smaller, poorer, and more remote schools, or with developing countries. Building community in the global South is a high priority for the Mozilla Science Lab, so we'll be trying to reach out more widely in the new year, and would appreciate any introductions our readers or alumni can make.


polimplot -- Plot a polarization vector mapUSAGE polimplot inpol inpopa poi_err inpoer inpaer xybin poscal polow pohigh pacorr xysam polab title xlabel ylabel device left right bottom top erase
- inpol = "" [name]
- Input linear polarization image (in %) to plot.
- inpopa = "" [name]
- Input image for position angle of linear polarization vectors (degrees).
- poi_err = "" [boolean]
- Switch to control whether polarization errors are plotted as separate vectors.
- inpoer = "" [name]
- Name of corresponding polarization error image (%). Must be same size as polarization image.
- inpaer = "" [name]
- Name of corresponding polarization position angle error image (degrees). Must be same size as polarization image.
- xybin = "" [integer]
- Binning factor in x and y direction used to produce polarization images from data frames.
- poscal = "" [real]
- Scaling factor to convert linear polarization (in %) to length in pixels.
- polow = "" [real]
- Lowest value of percentage polarization to plot.
- pohigh = "" [real]
- Highest value of percentage polarization to plot.
- pacorr = "" [real]
- Additive correction to position angles for plotting.
- xysam = "" [integer]
- Number of points to skip in each axis when plotting vectors (0 to plot all pixel vectors).
- polab = "" [boolean]
- Switch to control labelling of plot.
- title = "" [name]
- Title for plot.
- xlabel = "" [name]
- Label for X (lower) axis.
- ylabel = "" [name]
- Label for Y (left) axis.
- device = "" [name]
- Graphics device for plot.
- (left = "") [real]
- Viewport limit in Normalised Device Coordinates (NDC): minimum X.
- (right = "") [real]
- Viewport limit in NDC: maximum X.
- (bottom = "") [real]
- Viewport limit in NDC: minimum Y.
- (top = "") [real]
- Viewport limit in NDC: maximum Y.
- erase = "" [boolean]
- Switch to control whether graphics device is erased before vector plot. Should be set false for hardcopy devices.
This task is a flexible tool for plotting a polarization vector map from two images of the polarization and the position angle of the polarization vector. Whilst it can be used to plot general vector maps, it is primarily aimed at polarization maps, such as the output images from the task hstpolima.If polarization and position angle error images are available there is an option to plot them as vectors centred on the plotted points but with larger and smaller lengths given by the plus and minus polarization error bars and rotations given by the maximum and mimumum offset angles specified by the plus and minus position angle errors. The 'error' vectors are plotted as dotted lines. Note however that the polarization and position angle errors may not strictly be 1 sigma errors, so this should be seen as an illustrative tool.
If the data has been binned in producing the polarization and position angle maps, and it is required to plot the vector map on the unbinned scale, then the binning factor must be supplied in order to match the polarization map with an unbinned image or plot. If the binning factor is not given then the labelled plot will display binned pixels only.
In order to convert the polarization in percent to a length, a scalar multipler is used to convert vector length to pixel length before plotting. A little trial and error, together with altering the parameter to control the parameter which sets the number of points to skip over in plotting (parameter xysam), will soon produce a map where the vectors do not overlay each other.
The range of polarization values to plot can be selected - this helps to avoid having points (dots) where the polarization is zero or very close to zero, or where there may be large polarization values (usually associated with large errors). An additive correction can be applied to the position angle values to ensure that the absolute position angle is plotted. Such rotations can be introduced by instrument rotation or realignment of images.
In order to overplot the polarization vector map on an image device (imd) it is necessary to specify the normalised device coordinates (NDC) of the left and right ends of the X axis and the bottom and top ends of the Y axis. Once an image has been displayed, the NDC of the four limits can be determined using stsdas.graphics.sdisplay imdisp_pos. The four values can then be entered in order to the parameters left, right, bottom, top. See the help for fieldplot and imdisp_pos for more details.
1. To plot an unbinned 512x512 pixel polarization map and vectors for the errors over the polarization range 2 to 100%, correcting the position angle by +12.5 degrees and plotting every fourth point, with axes and labelling on the standard graphics display in square format:cl> polimplot inpol="nebpol.fits" inpopa="nebpa.fits" poi_err=yes inpoer="nebpoer.fits" inpaer="nebpaer.fits" xybin=1 poscal=0.25 polow=2.0 pohigh=100.0 pacorr=12.5 xysam=3 polab=yes title="Reflection Nebula" xlabel="Alpha" ylabel="Delta" device="stdgraph" left=0.19 right=0.82 bottom=0.12 top=0.96 erase=yes
2. To display an intensity image on the image display device, determine the NDC of the corners of the displayed image and overplot a polarization map which has been produced by binning the raw data by 2x2, plotting the polarization range 1 to 50% and plotting every second point, without error vectors or labelling:
cl> display ima="nebint.fits" cl> imdisp_pos image="nebint.fits" cl> lpar imdisp_pos cl> polimplot inpol="nebpol.fits" inpopa="nebpa.fits" poi_err=no inpoer="" inpaer="" xybin=2 poscal=0.10 polow=1.0 pohigh=50.0 pacorr=0.0 xysam=1 polab=no title="" xlabel="" ylabel="" device="imdr" left=0.3402 right=0.6598 bottom=0.3402 top=0.6598 erase=yes
None known.
hstpolima, polimodel, fieldplot, imdisp_pos


So after a long long thursday of doing work I decided I needed to take a vicodin (hydrocodone) to chill out a little after midnight. As soon as it kicked it I went and joined my friends who were partying down the street. They were all quite drunk and I realized that I needed to chill myself out a little more as I was on edge after about 12 straight hours of reading and writing papers and going to class. So, I crushed up 2 10mg valiums and blew half of the powder, sharing the rest with my friend. As soon as I walked out of her bedroom my other friend offered me some coke. I hesitated at first but hearing the crazyness going on in the living room I decided it would be a good idea. I went into the bathroom when he left it and found a large (for me, I don't do a lot of coke) line, said what the hell, and blew it.
By the way, the reason I was doing pharmies instead of drinking in the first place was to prevent getting a hangover so that I could finish a midterm in the morning. After doing the coke, I felt that I NEEDED a drink. Initially, the cocktail of uppers and downers made it a little hard to interact, but after about three glasses of wine (I say about because I drank them out of the plastic bag of a franzia box) I saw this really cute girl I have a huge crush on and after feeling sketchy at first, settled into the conversation and had a really good time flirting and talking with her, though we eventually parted ways b/c I have a girlfriend.
But, after this we left the apartment and I started to feel GREAT! The combination of drugs spread a warm euphoria throughout my body and I felt like I could say whatever I wanted, even if I knew it might not make the most sense.   The feeling inside my mind and body was really unbelievable, a state of being absolutely in the moment and not caring about anything but making the present fun and having a good time.
Remarkably, I awoke at 9:30 the next morning feeling perfectly clear minded and lucid with no hangover whatsoever. The combination of substances was perfect, I would do it every night if it wasn't for the obvious fact that mixing such highly addictive drugs probably isn't a good habit to get into.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


🧮 The Squeeze Theorem and Why I like it
An intuitive explanation of an awesome theorem.
While I was studying calculus, I came across this statement:
$$\lim _{\theta \rightarrow 0} \frac{\sin \theta}{\theta}=1$$
This amazed my because of the fact that sin of 0 is 0, so with substitution of theta in the fraction next to the limit, it would end up as 0/0 or undefined. Now, I had already studied limits a bit and knew about l’hopital’s rule. So, I proceeded to take the derivative of the top and bottom of the fraction with respect to theta and checked out what I got. This got me to the expected answer of 1/1 = 1 because the derivative of sin(x) is cos(x) and cos(0) is 1. Now this was all fine and dandy, but as I did more research into the limit listed above, I found a theorem called The Squeeze Theorem which I thought was a much more fun way to solve this same problem. This article is my shot at fully explaining the proof that accompanies the limit shown above using the Squeeze Theorem.
The Proof
To begin, take a look at this picture of a few triangles drawn using different points around a unit circle. If you don’t already know, a unit circle is one with a radius of 1. The point A is at (0,0), point C is at some point on the edge of the circle, point D is at (1,0), and point E is at some point (1, x).
Using this visual, let us compare the areas of two triangles and a sector.
$$△ACD \le ⌔ACD \le △AED$$
We can see that this is true by just looking at the graph. Next, I will define the values of the areas. Note that theta will refer to the angle made on the unit circle with each of the shapes (the bottom left angle of the triangle or sector).
$$\begin{array}{c}{\triangle ACD=\frac{1}{2} b h=\frac{1}{2} \cdot 1 \cdot \sin \theta=\frac{\sin \theta}{2}} \\ {⌔ACD=\frac{1}{2} r^{2} \theta=\frac{1}{2} \cdot 1^{2} \cdot \theta=\frac{\theta}{2}} \\ {\triangle AED=\frac{1}{2} b h=\frac{1}{2} \cdot 1 \cdot \tan \theta=\frac{\tan \theta}{2}}\end{array}$$
Just FYI, the hight of triangle △AED is tan(x) because tan(x) is opposite over adjacent and adjacent is 1, so it is really just the side opposite the angle, which is the hight. (That confused me at first too 😂)
Now that we have this, we can re-compare (is that a word?) the areas using actual values.
$$\frac{\sin \theta}{2} \leq \frac{\theta}{2} \leq \frac{\tan \theta}{2}$$
Next, I am going to perform a set of operation to all of the elements in the inequality. This is legal as it preserves the truthfulness of the inequality like applying the same operation to each side of an equals sign preserves the equality.
First, I will multiply each element by 2.
$$\sin \theta \leq \theta \leq \tan \theta$$
Second, I will divide by sin(𝜃).
$$1 \leq \frac{\theta}{\sin \theta} \leq \frac{1}{\cos \theta}$$
Finally, I will take the reciprocal of each.
$$1 \geq \frac{\sin \theta}{\theta} \geq \cos \theta$$
These reciprocals will get us to the final result that we want. All we have to do now is take the limit as listed at the top and analyze the results.
$$\begin{array}{c}{\lim _{\theta \rightarrow 0}\left[1 \geq \frac{\sin \theta}{\theta} \geq \cos \theta\right]} \\ {\lim _{\theta \rightarrow 0}\left[1 \geq \frac{\sin \theta}{\theta} \geq 1\right]} \\ {1 \geq \lim _{\theta \rightarrow 0} \frac{\sin \theta}{\theta} \geq 1}\end{array}$$
As you can most likely see (I highlighted it), by substitution of the limit value into each element of the inequality, we get 1 is greater than or equal to the limit of sin theta over theta as theta approaches 0 which is greater than or equal to 1.
Because we know this:
$$\begin{array}{c}{\text {if}} \\ {1 \geq x \geq 1} \\ {\text {then,}} \\{x=1}\end{array}$$
Now we can say that the limit of sin of theta over theta as theta approaches 0 has to be 1 because of what I just stated above. Kinda cool, right?
I loved learning about the squeeze theorem more than others just because of all of the steps involved in getting to the final solution. It was a giant puzzle and a journey! This is just one reason of many why math is fun and intuitive.
Please stay tuned for more and clap as your heart desires 👏


Although CONSTELLATION provides this Quality Control View, the user remains responsible for ensuring that their data is acceptable for further analysis.
| CONSTELLATION Action | User Action | Menu Icon |
|---|---|---|
| Open Quality Control View |
Views -> Quality Control View Keyboard Shortcut: Ctrl + Shift + Q |
|
| Select rows | Left click row | |
| Select multiple rows | Hold shift and left click rows | |
| Toggle row selection | Hold ctrl and left click rows | |
| Show all registered rules and scores | Double click a row |
The Quality Control View is a quick and easy way to look at nodes on the graph and determine whether or not they have any obvious quality issues based on a series of rules built into CONSTELLATION. Selecting nodes in the graph will cause them to be processed against any registered quality control rules, and ranked in the Quality Control View according to their quality. This quality rating will be a score out of 100 (with higher scores indicating lesser quality) along with reasoning as to why they may pose a quality control issue. Users can then highlight rows in the quality control view and apply options via the buttons at the bottom of the view.
There are four levels of quality control for nodes that are selected.
Double-clicking a row in the Quality Control View will open a dialog box that shows the scores given to the node in that row by the rules.


- Install new version of Unity
- Experimented with physics-based platforming
- Unity physics engine is imprecise
- Can't set jump force based on block height
- Distance of jumper to ground is not always 0
- Have to handle sticking to walls by
- Setting wall friction to 0, which menas splitting the collider into multiple boxes, which means the platformer can get stuck
- Collision detection


Everybody Needs to Wake Up
a survey of android alarm clock application design
Kashev Dalmia
A Project for ARTD 313 @ UIUC, Sp 2014
good [examples of digital interaction design] oscillate between hiding and revealing themselves
- Good design shows itself, and makes a strong first impression.
- Then, good design takes a back seat to the functionality of the application.
- The user is never overwhelmed with figuring out how to navigate or accomplish a task.
- Things just work the way that you expect them to.
This Project
For this project, I chose to compare two relatively popular Android alarm clock applications: Timely, and Warmly. I think alarm clocks are an interesting thing to investigate because of their simplicity and pervasiveness. These apps in particular are on on the platform with the most market share, so are available to the vast majority of those who use their phones. Combined with the fact that 83 percent of people between the ages of 18 and 29 use their mobile phones to wake up in the morning, it's likely that Timely and Warmly could be considered by a variety of people looking to just Wake Up.
The Timely Approach
You know the stock alarm clock that came with your phone? Timely wants you to never open that again. (Google might too.) The design, however, is decidedly unlike Google's recent flat design language that it has brought to Android. It features a multicolor, customizable, animated background with mostly translucent design elements. One of the key differentiators is the interaction design. Actions like setting an alarm or timer duration are predominantly gesture controlled (with traditional push button fall backs).
Timely is an everything and the kitchen sink type alarm clock application, like the stock one it aims to replace. It has not only an alarm clock, but also a clock intended to use on a dock, a stopwatch, and a timer. The alarms are highly customizable; the sounds are changeable, the days that the alarm sounds are customizable, and the app even allows for custom puzzles to be set to reduce the likelihood of turning off the alarm without actually waking up.
Timely - Setting and Customizing an Alarm
Timely - Time, Timer and Stopwatch
Timely - Alarm Going Off
The Warmly Approach
Warmly doesn't want to replace the timer application on your phone.  There isn't a stopwatch, a timer, or even multiple alarms. You just tell Warmly what time you'd like to wake up, what days you'd like to wake up, and then what sound you'd like to wake up to. That's all. After that, Warmly shows you a dark clock that disappears with one tap, if anything else on the phone needs to be used.
Unlike Timely's loud, electronic noises, Warmly's alarm sounds are inspired by real life. You can select chirping birds, percolating coffee, frying bacon, or even the sounds of trains next to your cheap New York apartment. When the alarm sounds, the process starts a few minutes before you set the alarm. The alarm sound builds up, giving you the chance to wake up slowly, rather than with a start.
Warmly - Setting and Customizing an Alarm
Warmly - Clock and Alarm Going Off
Windows and Mirrors
Timely opens strongly by having a striking appearance that looks almost alien on the Android operating system. The background is animated and bubbly; an iOS7 Trojan horse. This all disappears into being a background when an alarm is set. The mechanism for doing this is with a swipe, which is in many ways more natural than traditional soft button touching. Timers are set in a way that recalls twisting a dial, except with a single finger. Switching between functions only requires a swipe across the screen. The usage of the app is easy, intuitive, and while well designed, does not feel over-designed.
Warmly is not nearly as feature filled, and doesn't care to hide this fact. The first thing a user will notice is the bold yellow color, reminiscent of the sun. The user is asked to turn on the app, then the alarm setting screen comes up. Holding the alarm sound buttons starts a preview of the sound. Time setting is intuitive to Android users (the time picker isn't unique like the one in Timely). However, once the time is set, the app knows that its task is done. It displays a dark bedside clock until the alarm goes off, or the screen is tapped, and the app yields control of the screen to the Android operating system, quite literally transitioning from showing itself to hiding itself.
User Personas
In Agile and other user-centric design paradigms, User Personas are made up customers, fictional characters that have needs and wants that could be fulfilled by an application being crafted by the development team.
What if the teams who designed Timely and Warmly had made some user personas?
Eric
Eric is a college freshman who did poorly last semester. The main reason? He had trouble waking up for his 8:00 AM classes. Well, it's his first spring semester, his parents just got him a Nexus 5, and the earliest he's got class is 9:00 AM. He just needs to wake up for it.
- He is a very heavy sleeper, and will mash on the snooze button if given the opportunity.
- He might need to time himself. Sometimes his five minute breaks stretch into twenty...
- He has class at different times on different days, and might need to wake up at varying times.
- He grew up in the computer age, and is tech savvy. He likes to have the latest and greatest tech.
- He doesn't like to be jarred awake. (Does anyone?)
- He is a little homesick. Breakfasts in the dining hall simply don't compare to his mom's Mexican omelets.
- He wants simplify his life as much as possible. He doesn't need too many external distractions. He finds plenty of those on his own.
 She is looking to replace her aging alarm clock with something more high tech. She's going to impress her kids.
- She liked the look of her husband's iPhone, but got an Android phone because it was cheaper.
- She has a lot of things she does during the day, and sometimes has trouble making meetings on time because she's working on something at her desk longer than she should.
- She is an avid baker. And she also subscribes to the Pomodoro Technique. So she might need to set a timer for herself.
- She's not as tech savvy as her children. So simpler will almost always be better for Becky.
- Her husband wakes up later than her, so she often wants to wake up without waking him up as well.
- She thinks her bedside clock is outdated. Perhaps her phone in a small stand could serve the same purpose?
- She always checks the weather in the morning, so she can make sure to dress appropriately.
So what do these users want to do?
In Agile, what users want to do are described in User Stories. Large pieces of functionality are described in Epics, and then the functionality is broken down into smaller, implementable descriptions of what users want to do.
Timely User Stories
- Epic: Users want to wake up.
- Users can set alarms.
- Users can set the days of the week that the alarm goes off.
- Users can select the sounds that plays when the alarm goes off.
- Users can set multiple alarms.
- Users can set puzzles to make sure that they wake up.
- Users can sync alarms across devices.
- Epic: Users want to see the current time on their phone.
- Users can display the time on a dedicated screen.
- Users can set the screen to 'night mode', for bedside viewing.
- Epic: Users want to set timers.
- Users can set timers on a dedicated screen.
- Epic: Users want to have a stopwatch.
- Users can use a stopwatch with lap functionality on a dedicated screen.
Warmly User Stories
- Epic: Users want to wake up.
- Users can set alarms.
- Users can set the days of the week that the alarm goes off.
- Users can select the sounds that plays when the alarm goes off.
- Users can see weather information on the alarm screen.
- Users can wake up gradually because the alarm is gradual.
- Epic: Users want to see the current time on their phone.
- Users can display the time on a dedicated screen.
Use Cases
All these user stories can be combined into one large use case diagram, which describes how the user interacts with the system.
Timely Use Case Diagram
Warmly Use Case Diagram
...but what about Eric and Becky?
Eric
Why Timely?
- He is a heavy sleeper. The alarm is loud, which wakes him up, the snooze is configurable to be shorter with every snooze, and there are puzzles to make sure he's functioning and not just going through the motions.
- He needs to time himself. Timely has a timer feature that allows him to make sure he's getting through his morning ablutions quickly.
- He has class at different times on different days. Timely allows him to set separate alarms with separate repeating patterns. He can even select different sounds.
- The interface is intuitive. He grew up in the computer age, so after a quick tutorial, setting alarms is effortless.
Why Warmly?
- He doesn't like to be jarred awake. Warmly's natural alarm sounds, which build in volume by design, allow Eric to wake up over the course of 5 minutes or so, rather than all at once.
- He misses home. Warmly's breakfast sounds remind him of his mother's bacon!
- He wants simple. Eric might not want to spend all of his time setting alarms, trying to make sure he can sleep until the absolute last possible minute. He just wants to wake up every day, and Warmly allows him to easily set a single, recurring alarm.
Becky
Why Timely?
- It reminds her of her husband's iPhone. Which is very pretty.
- She need to remind herself to do things during the day. Because she can name alarms in Timely, she can use alarms to remind herself to attend her meetings, even when she's not looking at her Outlook calendar. She can even use multiple alarms to remind her when she needs to pick up her daughter from dance class.
- She needs to have a convenient timer for both her baking and her pomodoro time management. Timely has a robust timer that is easy to set one handed.
Why Warmly?
- She doesn't really know her way around her phone yet. Unlike Timely, Warmly is pretty obvious to navigate, and doesn't require a tutorial.
- She doesn't want to wake her husband sleeping when she wakes up. Warmly's gentle sounds wake her up, but don't affect her husband's slumber.
- She wants a bed time clock to replace her old alarm clock. After she's set her Warmly alarm, the dark clock on the dark screen displayed is perfect for propping up on her nightstand while she charges her phone at night.
- She wants to know the weather so she can know how to dress herself. Warmly's alarm screen displays weather information based on current location.
A Clear Winner?
Everyone has different taste, and taste can't be easily accounted for. However, unless you really, really want to wake up the sound of frying bacon, I have no trouble recommending Timely as the Android alarm clock app you should install. Despite being more complex than Warmly, it is suitably easy to learn, and makes waking up easier.


Hi! I will speak a line in your list aloud and then wait for you to say "next" or "okay" before I speak the next line.
Begin our conversation by pressing "Start talk" button below the list. Your browser will ask you a permission to access your microphone.
Google Chrome 33 or greater is required. Also ensure both your microfone and speakers are working and loud enough.
next, okay - say the next line
again, repeat - say the line again
back, previous - say the previous line
stop - stop listening
Paste your list here:
Fork me in GitHub