Sort-Based Blocking Shuffle Implementation in Flink - Part One
October 26, 2021 - Yingjie Cao (Kevin) Daisy TsangPart one of this blog post will explain the motivation behind introducing sort-based blocking shuffle, present benchmark results, and provide guidelines on how to use this new feature.
How data gets passed around between operators #
Data shuffling is an important stage in batch processing applications and describes how data is sent from one operator to the next. In this phase, output data of the upstream operator will spill over to persistent storages like disk, then the downstream operator will read the corresponding data and process it. Blocking shuffle means that intermediate results from operator A are not sent immediately to operator B until operator A has completely finished.
The hash-based and sort-based blocking shuffle are two main blocking shuffle implementations widely adopted by existing distributed data processing frameworks:
- Hash-Based Approach: The core idea behind the hash-based approach is to write data consumed by different consumer tasks to different files and each file can then serve as a natural boundary for the partitioned data.
- Sort-Based Approach: The core idea behind the sort-based approach is to write all the produced data together first and then leverage sorting to cluster data belonging to different data partitions or even keys.
The sort-based blocking shuffle was introduced in Flink 1.12 and further optimized and made production-ready in 1.13 for both stability and performance. We hope you enjoy the improvements and any feedback is highly appreciated.
Motivation behind the sort-based implementation #
The hash-based blocking shuffle has been supported in Flink for a long time. However, compared to the sort-based approach, it can have several weaknesses:
- Stability: For batch jobs with high parallelism (tens of thousands of subtasks), the hash-based approach opens many files concurrently while writing or reading data, which can give high pressure to the file system (i.e. maintenance of too many file metas, exhaustion of inodes or file descriptors). We have encountered many stability issues when running large-scale batch jobs via the hash-based blocking shuffle.
- Performance: For large-scale batch jobs, the hash-based approach can produce too many small files: for each data shuffle (or connection), the number of output files is (producer parallelism) * (consumer parallelism) and the average size of each file is (shuffle data size) / (number of files). The random IO caused by writing/reading these fragmented files can influence the shuffle performance a lot, especially on spinning disks. See the benchmark results section for more information.
By introducing the sort-based blocking shuffle implementation, fewer data files will be created and opened, and more sequential reads are done. As a result, better stability and performance can be achieved.
Moreover, the sort-based implementation can save network buffers for large-scale batch jobs. For the hash-based implementation, the network buffers needed for each output result partition are proportional to the consumers’ parallelism. For the sort-based implementation, the network memory consumption can be decoupled from the parallelism, which means that a fixed size of network memory can satisfy requests for all result partitions, though more network memory may lead to better performance.
Benchmark results on stability and performance #
Aside from the problem of consuming too many file descriptors and inodes mentioned in the above section, the hash-based blocking shuffle also has a known issue of creating too many files which blocks the TaskExecutor’s main thread (FLINK-21201). In addition, some large-scale jobs like q78 and q80 of the tpc-ds benchmark failed to run on the hash-based blocking shuffle in our tests because of the “connection reset by peer” exception which is similar to the issue reported in FLINK-19925 (reading shuffle data by Netty threads can influence network stability).
We ran the tpc-ds test suit (10T scale with 1050 max parallelism) for both the hash-based and the sort-based blocking shuffle. The results show that the sort-based shuffle can achieve 2-6 times more performance gain compared to the hash-based one on spinning disks. If we exclude the computation time, up to 10 times performance gain can be achieved for some jobs. Here are some performance results of our tests:
| Jobs | Time used for Sort-Shuffle (s) | Time used for Hash-Shuffle (s) | Speedup Factor |
|---|---|---|---|
| q4.sql | 986 | 5371 | 5.45 |
| q11.sql | 348 | 798 | 2.29 |
| q14b.sql | 883 | 2129 | 2.51 |
| q17.sql | 269 | 781 | 2.90 |
| q23a.sql | 418 | 1199 | 2.87 |
| q23b.sql | 376 | 843 | 2.24 |
| q25.sql | 413 | 873 | 2.11 |
| q29.sql | 354 | 1038 | 2.93 |
| q31.sql | 223 | 498 | 2.23 |
| q50.sql | 215 | 550 | 2.56 |
| q64.sql | 217 | 442 | 2.04 |
| q74.sql | 270 | 962 | 3.56 |
| q75.sql | 166 | 713 | 4.30 |
| q93.sql | 204 | 540 | 2.65 |
The throughput per disk of the new sort-based implementation can reach up to 160MB/s for both writing and reading on our testing nodes:
| Disk Name | Disk SDI | Disk SDJ | Disk SDK |
|---|---|---|---|
| Writing Speed (MB/s) | 189 | 173 | 186 |
| Reading Speed (MB/s) | 112 | 154 | 158 |
**Note:** The following table shows the settings for our test cluster. Because we have a large available memory size per node, those jobs of small shuffle size will exchange their shuffle data purely via memory (page cache). As a result, evident performance differences are seen only between those jobs which shuffle a large amount of data.
| Number of Nodes | Memory Size Per Node | Cores Per Node | Disks Per Node |
|---|---|---|---|
| 12 | About 400G | 96 | 3 |
How to use this new feature #
The sort-based blocking shuffle is introduced mainly for large-scale batch jobs but it also works well for batch jobs with low parallelism.
The sort-based blocking shuffle is not enabled by default. You can enable it by setting the taskmanager.network.sort-shuffle.min-parallelism config option to a smaller value. This means that for parallelism smaller than this threshold, the hash-based blocking shuffle will be used, otherwise, the sort-based blocking shuffle will be used (it has no influence on streaming applications). Setting this option to 1 will disable the hash-based blocking shuffle.
For spinning disks and large-scale batch jobs, you should use the sort-based blocking shuffle. For low parallelism (several hundred processes or fewer) on solid state drives, both implementations should be fine.
There are several other config options that can have an impact on the performance of the sort-based blocking shuffle:
-
taskmanager.network.blocking-shuffle.compression.enabled: This enables shuffle data compression, which can reduce both the network and the disk IO with some CPU overhead. It is recommended to enable shuffle data compression unless the data compression ratio is low. It works for both sort-based and hash-based blocking shuffle.
-
taskmanager.network.sort-shuffle.min-buffers: This declares the minimum number of required network buffers that can be used as the in-memory sort-buffer per result partition for data caching and sorting. Increasing the value of this option may improve the blocking shuffle performance. Several hundreds of megabytes of memory is usually enough for large-scale batch jobs.
-
taskmanager.memory.framework.off-heap.batch-shuffle.size: This configuration defines the maximum memory size that can be used by data reading of the sort-based blocking shuffle per task manager. Increasing the value of this option may improve the shuffle read performance, and usually, several hundreds of megabytes of memory is enough for large-scale batch jobs. Because this memory is cut from the framework off-heap memory, you may also need to increase taskmanager.memory.framework.off-heap.size before you increase this value.
For more information about blocking shuffle in Flink, please refer to the official documentation.
Note: From the optimization mechanism in part two, we can see that the IO scheduling relies on the concurrent data read requests of the downstream consumer tasks for more sequential reads. As a result, if the downstream consumer task is running one by one (for example, because of limited resources), the advantage brought by IO scheduling disappears, which can influence performance. We may further optimize this scenario in future versions.
What’s next? #
For details on the design and implementation of this feature, please refer to the second part of this blog!


A variable is a temporary spot that holds information.  You use the = symbol to set your variable's value.
To create a variable, use the var
keyword in this way:
var VARIABLE_NAME = VALUE ;
Note: remember that semicolon at the end of a line of code.
Here are a few examples of variables below (you can change ANY of the code below. If you break something, no big deal, just refresh the page!):


Matt Michalska-Smith
Lindsey Otto-Hanson, Georgiana May
Elizabeth Borer, Eric Seabloom
Linda Kinkel
Experiment overview
Network analysis
Summary / Conclusions
Control
NPK+ Supplemented
Control
NPK Supplemented
Experiment overview
Network analysis
Degree distributions
Network structures
Triads
Summary / Conclusions
Interaction Type
NPK Supplemented
Control
T-test p-value
KS-test p-value
Bacteria → Bacteria
0.661
0.659
0.896
0.116
Bacteria → Fungi
0.494
0.408
< 0.001
< 0.001
Fungi → Bacteria
0.731
0.831
< 0.001
< 0.001
Fungi → Fungi
0.656
0.724
< 0.001
< 0.001
Treatment
Interaction Type
Formula
p-value
Adjusted $R^2$
Control
Bacteria → Any
indegree ~ 19.252 · outdegree - 0.508
< 0.001
0.767
Bacteria → Bacteria
indegree ~ 9.467 · outdegree - 0.597
< 0.001
0.743
Bacteria → Fungi
indegree ~ 10.072 · outdegree - 0.449
< 0.001
0.733
Fungi → Any
indegree ~ 19.996 · outdegree - 0.649
< 0.001
0.623
Fungi → Bacteria
indegree ~ 10.582 · outdegree - 0.79
< 0.001
0.511
Fungi → Fungi
indegree ~ 9.991 · outdegree - 0.558
< 0.001
0.643
NPK Supplemented
Bacteria → Any
indegree ~ 17.442 · outdegree - 0.385
< 0.001
0.546
Bacteria → Bacteria
indegree ~ 8.765 · outdegree - 0.474
< 0.001
0.589
Bacteria → Fungi
indegree ~ 8.839 · outdegree - 0.31
< 0.001
0.369
Fungi → Any
indegree ~ 18.355 · outdegree - 0.569
< 0.001
0.673
Fungi → Bacteria
indegree ~ 8.676 · outdegree - 0.512
< 0.001
0.471
Fungi → Fungi
indegree ~ 9.546 · outdegree - 0.617
< 0.001
0.772
Term
df
sum squared error
mean squared error
p-value
treatment
1
3.989
3.989
0.419
interaction_type
3
150.053
50.018
< 0.001
treatment:interaction_type
3
6.4
2.133
0.789
Residuals
432
2636.528
6.103
Adjusted $R^2$
0.04209
Control
NPK Supplemented
Comparing isolate kingdoms
Comparing network treatments
Comparing network treatments — Triad counts
Comparing network treatments — against random
Triad counts — against random
Experiment overview
Network analysis
Summary / Conclusions
Kingdom comparisons
Treatment comparisons
Take-home
Comparing Kingdom
Degree distributions differ significantly between interaction types
in particular, fungi tend to have a larger impact on bacteria than vice versa (especially for control plants)
Isolates cluster by kingdom
especially in weighted networks (though more noticeable in binary!)
Bacteria and fungi differ in their node-specific structure only in control plants
Comparing Treatment
Degree distributions also differ significantly beween treatments
But...
There are few / weak differences in network-wide structure between treatments
(Binary) networks show many significant deviations from their random expectations
but these differences tended to be small
Conclusions
Nutrient ammendments level the playing field
Fungi tend to have wider niches and greater overlap on bacterial isolates
But these differences are attenuated in NPK plants
Despite pairwise differences, differences not visible in larger network structure
These small resource competition networks seem to be dominated by pairwise effects
No evidence of higher-order interactions
Thank you!


Customization
There isn’t any way to customize the templates nor the CSS yet, though I will investigate this if the need arises. This is because both the templates and CSS are currently compiled at compile-time instead of run-time.
There isn’t any way to customize the templates nor the CSS yet, though I will investigate this if the need arises. This is because both the templates and CSS are currently compiled at compile-time instead of run-time.


Evolutionary Robotics
Evolutionary Computation: Genetic Algorithm, Evolutionary Strategy, Genetic Programming, etc.
Deep Learning: CNN, RNN, Reinforcement Learning, etc.
2D/3D Physics Engine
Python, C/C++, CUDA


Josh Lippy
Activity Log
Signout
Josh Lippy
Yard Supervisor
Dashboard
Yard Map
Tracks
Typography
Tracks
Overview
Zone
Zone - 1
Zone - 2
Zone - 3
Zone - 4
Zone - 5
Track
TXR
ZMB
TRX - 3
TRX - 4
ZDB - 5
Emit
KAOH313131
KAOH313131
Modal title
×
...


Trip Planner Lite
Search for any city in the world and retrieve realtime information about weather, local attractions & accomodations!
Created by Elliott, Emma, My and Steven


|
Privacy Policy IMC-Bill operates the following websites: clubseventeen.com seventeenlive.com clubsweethearts.com youngbusty.com mysexykittens.com packofporn.com (network) elegantraw.com beautyandthesenior.com groupsexgames.com jimslip.com larasplayground.com redlightsextrips.com rodox.com retroraw.com vintageclassicporn.com livetopcams.com fapplr.com stockerz.com passie.nl sinfulxxx.com bbvideo.com secretfriends.com clubbangboys.com teensfromtokyo.com whyfap.com submissed.com plumperd.com bbwsandwich.com bbwfightclub.com fatsitting.com teenrs.com 18dom.com cfnm18.com drfeelgood.com spicyroulette.com chatgf.com tubecamgirl.com interraced.com amsterdamsextrips.com gojimslip.com screampies.com ganzgeil.com groupbanged.com twinkerd.com daringsexhd.com daringsex.com vrteenrs.com vrtagteam.com grandmams.com swhores.com granddadz.com 1. IMC-BILL (the "website") applies the following Privacy Policy in order to protect your privacy. We understand your privacy is crucial to you. 2. We will let you know what information we may use and in what way we will be using it. The privacy policy applies to online activities done by you in IMC-BILL. 3. Changes: This policy may change from time to time. Please review the privacy policy periodically. 4. Information we may collect from you - Personal information IMC-BILL may collect personal information in order to operate the website. this information may include, but is not limited to, email address, username, age, registration, purchase information, browsing history, search history, browser type, operating system, communication with other members within IMC-BILL, gender, zip code, postal code, city and country. Purchase details, browser type, operating system, browsing history and communications in the website are not disclosed anywhere. Other details may be disclosed on the website and reachable to other members in order to operate the website. Please note that we do not collect knowingly any personal information from users that are under the age of 18, as we require that all users represent upon registration that they are at least 18 years old. - Cookies Cookies are small piece of data sent from a website and stored in a user's web browser while a user is browsing a website IMC-BILL may use cookies to keep track of your activity in the website. Cookies help us improve your experience on the website and give you the most optimized options, while protecting your account. Please note that if you choose to disable cookies tracking by changing the settings of your browser, this may restrict you from using some sections of the website. - IP Address It is very common to collect IP address on e-commerce sites. This is done automatically each time you use IMC-BILL. In addition we collect the website you previously came from IMC-BILL. This is used to present you with the right options on the website. This information helps us to identify and optimize the service you are using. - Information gathered by third parties Third party advertisers or partners on the IMC-BILL may also read cookies through their advertising or link placement. Please note that IMC-BILL does not control third party advertisers or links and their business practices and or privacy policies. 5. Using the information we collect Your personal information is not shared with any third parties and is used mainly to communicate with you and provide you an optimized service. We mainly use this information to improve the services provided to you and present you with the correct options on the website. Also this information is used to deliver you, mainly through email and through your online account information and communication from other members or users. These communications are known as "Operational Communications." You can change your email preferences through your account and limit those emails. By creating a profile on the website you positively opt-in to receive messages from members and user in the website As well this information may be used to help you use the site, answer inquiries, solve problems and provide technical assistance. 5.1 We may be required to share your information in order to operate the service successfully. Sharing may be required with our representatives and service providers so they can operate their service such as payment services, email services, customer service and promotional services. We request that those representatives and service providers do not to share or use your information for anything other than providing their service to the website. 5.2 We may also use this information to present third parties with statistical information but this will not identify you personally. 5.3 We may disclose your information if we are required to do so by a law enforcement agency or in case we need to use this information in order to enforce intellectual rights or resolve trademark issues. 6. Changing the information stored by our website You can modify your email preferences and opt-out from certain communications or change your personal information by updating your profile here. Please note that due to server synchronization updates, changes may take a few hours to appear on the website. You can also contact our customer service by clicking here or delete your account. The data will be saved by us but your profile will not be visible anymore. |


Choose uni library
Currently
MMU
Manchester Metropolitan
Shefffield Hallam
Uni of Manchester
Uni of Sheffield
Choose
Turn off


Reproducible documents in Rmarkdown have focused on science and technical data. Along with distributed version control, the R package system, unit testing and continuous integration resources there is a suite of tools which were originally developed for collaborating and testing code but now are being used more widely for all types of documentation and processes in science and beyond.
Continue reading
The R package servr can be used to set up an HTTP server to serve files under a directory. Since servr v0.2, it has added a function servr::jekyll()
specifically designed for websites based on Jekyll and R Markdown. The main features of this function are:
Continue reading


Schedular
Sign Out
+
Select Categories
Optimizer
Optimize
Priority
Due Date
×
Create Task
Invalid Name!
Invalid Value! Please enter a Number.
Category:
University
Work
Fun
Chores
Hobby
Other
Repeat:
None
Every day
Every week
Every month
Every year
Due Date:
×
Edit Task
Invalid Name!
Invalid Value! Please enter a Number.
Category:
University
Work
Fun
Chores
Hobby
Other
Repeat:
None
Every day
Every week
Every month
Every year
×
Edit Task
Invalid Name!
Category:
University
Work
Fun
Chores
Hobby
Other
Repeat:
None
Every day
Every week
Every month
Every year
Due Date:
×
New Category
Colour:
#6578a0
#84b79d
#c3c60b
#e5a190
#c18fe8
grey


Key radiative and non-radiative feedbacks in polar regions that are related to the atmosphere, ocean, sea ice, ice sheets and land surfaces and can be measured using a feedback factor
| Name | Description | Measure | Reference(s) | |
|---|---|---|---|---|
| Radiative feedbacks | Planck (−) | Higher surface and atmospheric temperatures increase outgoing longwave radiation, avoiding runaway warming | Change of TOA flux due to temperature change at constant lapse rate divided by surface temperature change | 12– 14, 18 |
| Lapse rate (+ in Arctic, close to 0 in Antarctic) | In a warmer world and at high latitudes, stable stratification conditions in the lower troposphere result in a larger warming of the lower than of the upper troposphere, leading to a smaller increase in outgoing longwave radiation compared to vertically uniform warming, and thus to further warming | Change of TOA flux due to lapse rate changes divided by surface temperature change (normalized by Planck feedback) | 19, 20 | |
| Surface albedo (+) | Melting ice and snow lowers surface albedo, leading to increased absorption of shortwave radiation and amplified warming | Change of TOA flux due to surface albedo change divided by surface temperature change (normalized by Planck feedback) | 19, 27, 28, 101 | |
| Water vapor (+) | In a warming climate, the amount of water vapor in the atmosphere increases, which amplifies the greenhouse effect and leads to further warming | Change of TOA flux due to water vapor change divided by surface temperature change (normalized by Planck feedback) | 22– 24 | |
| Cloud (+/−) Two examples are provided below | Warming of the atmosphere leads to changes in the amount and characteristics of clouds, modifying the radiative balance. The cloud contribution can be decomposed in several ways, two examples being given below | Change of TOA flux due to changes in cloud properties divided by surface temperature change (normalized by Planck feedback) | 14, 31– 41 | |
| Example 1: Cloud-sea ice (+ in non-summer months, close to 0 in summer) | Decreased sea ice extent in non-summer months results in greater cloud cover and increased downwelling longwave radiation, leading to further sea ice loss | Change of TOA flux due to changes in cloud amount and opacity resulting from varying sea ice concentration divided by surface temperature change | 36– 39 | |
| Example 2: Cloud optical depth (−) | As the climate warms, the fraction of liquid water in mixed-phase clouds increases, resulting in higher cloud albedo, more reflection of shortwave radiation and reduced warming | Change of TOA flux due to changes in cloud optical depth divided by surface temperature change | 32, 34, 40 | |
| Non-radiative feedbacks | Ice production–entrainment (−) (mostly active in Southern Ocean) | Brine rejection during sea ice formation induces an ocean mixed layer deepening that brings to the surface warmer water from deeper levels, melting a part of the ice initially formed and inhibiting further ice production. | Ratio of the sea ice melt due to the entrainment of warmer water in the mixed layer to the initial ice formation | 50, 51 |
| Ice production–ocean heat storage (+) (mostly active in Southern Ocean) | Anomalous sea ice production induces vertical exchanges of salt, a higher stratification, storage of heat at depth and finally lower oceanic heat fluxes that favor further ice production. | Ratio of the latent heat associated to ice production to the heat content change of the ocean subsurface layer | 52, 53 | |
| Ice growth–thickness (−) | Thin sea ice grows more rapidly than thick sea ice due to its higher heat conduction, dampening the response to an initial decrease imposed by a perturbation. | Normalized difference in the thickness response to an energetic perturbation with and without thickness dependence of the ice growth rate | 48, 49 | |
| Surface mass balance–elevation (+) (mostly active in Greenland Ice Sheet) | Increased air temperature leads to ice melting, which lowers the surface elevation of the ice sheet, hence leading to ice exposure to warmer air temperatures and further ice melting. | Ratio of the additional sea level contribution due to this feedback to the sea level contribution without feedback | 56, 57 | |
| Ice shelf melting sea ice (−) (mostly active in Southern Ocean) | Ocean warming leads to ice shelf melting, which releases freshwater into the ocean and reduces vertical mixing. This results in sea ice expansion and reduced ocean warming. | Ratio of the additional change in sea ice extent caused by this feedback to the total change in extent without feedback | 63, 64 | |
| Marine ice sheet instability (+) (mostly active in West Antarctic Ice Sheet) | An initial retreat in the grounding line position of a marine ice sheet on an upward-sloping bed towards the ocean leads to increased ice discharge, ice thinning and further retreat. | Ratio of the additional sea level contribution due to this feedback to the sea level contribution without feedback | 58– 60 |
The proposed selection is illustrative rather than exhaustive. The sign in the first column indicates whether the feedback is positive or negative in polar regions


For this exec, nothing beats thinking about nothing at all
-
Which psychotherapy books does a psychotherapist read?
-
Deliveries by chauffeur: Harrolds set to make e-commerce debut
-
How London's getting Frenchy and chic thanks to Australia
-
AFR Magazine wins Best Newspaper-Inserted Magazine for 7th year
-
This new eatery serves 5-star dishes on 2 billion-year-old plates


This app gets Analytics data for videos that have been added to Video Cloud over some recent period (which you define in the inputs). Note that this app only returns reports on a single dimension, though it could be modified to report on multiple dimensions.


BeatsMe is a basic music player built on the Beats Music API. The web player for Beats Music doesn't include 'the Sentence' feature that exists on the phone. BeatsMe leverages the API to provide access to 'the Sentence' from a browser, saving the battery life of my phone. BeatsMe has a simple Express server serving up an AngularJS web app.
Check out BeatsMeClinical Trials lets you search the Federal Government's database of clinical trials. Results are displayed by status and condition. Clinical Trials is built on AngularJS and Highcharts on the front end with Expres and Node running server side. The server handles xml responses from clinicaltrial.gov and responds with a parsed json.
Check out Clinical TrialsSF-Sense is built on the MEAN stack. The app makes routine api calls to data.sfgov.org to pull daily crime data and stores it in our MongoDB. We use Google's Map API to display crimes and allow users to search by street addresses. The front-end mobile app javascript, using AngularJS and the ionic framework we're able to build a hybrid native mobile app.
Check out SF-SenseHRX provides client applications an API to consume alumni data. This data is created from social network integration and Hack Reactor internal sources. HRX makes routine updates to its database to act as the school's source of truth on alumni information.
Built with Twitter Bootstrap, Meh Profile Stats tells you things you don't care about. Integration with Facebook Graph API and Google Maps API generate a map with markers on where you've posted status updates and photos.
Check out Meh Profile Stats


Welcome To Project Volo!
Settings
Shutdown
Restart
Suspend
Hibernate
Help
https://github.com/artur9010/lightdm-webkit-material/issues
Setting a profile icon
See https://github.com/Antergos/lightdm-webkit2-greeter/tree/master/themes/antergos#user-icons-management for more info.
Crafted with
in Poland and the USA.


Welcome! Here you can find following things:
Company's logo
List of employees
Company's logo
Company uses following logos:
New logo:
Old logo:
List of employees
First name
Last name
Mary
Williams
James
Smith


{% extends 'base.html' %} {% block body %}
SeDIT tool is used for comparison of expression levels of specific genes between males' and females' 11 immune cell types.
There are 4 independent RNA-sequencing datasets. All datasets were produced according to ImmGen1 pipeline (http://www.immgen.org/Protocols/11Cells.pdf). Alignment to the genome and quantification were done by Hisat2 and Tuxedo3 pipeline.
Datasets description:
All datasets are RNA- sequencing data from male and female mice of 11 naïve immune cell types:
| Dataset | Description | Mapped reads per sample |
|---|---|---|
| DS_A | 3 replicates. Including interferon (IFN) stimulated samples for GN (10k IFN), MF (10k IFN) and B (1k and 10k IFN). |
Naïve: 6-24 M (mean 12) IFN: 3-21 M (mean 12) |
| DS_B | Samples from young (2 months), adult (6 months) and old (17 months males, 20 months females) mice. No replicates (two replicates of 6 months B and T4 samples). |
7-18 M (mean 12) |
| DS_C | No replicates. Male and female samples were produced in separate batches. | Males: 19-117 M (mean 70) Females: 7-41 M (mean 25) |
| DS_D | No replicates. | 4-20 M (mean 13) |
SeDIT allows browsing at two levels of resolution:
Pan Immune - presenting replicates of all immune cell types from selected datasets. Figure 1 displays this presentation for Xist in one dataset (DS_A). On the website, more figures will appear below and present the results of all available datasets.
Per cell type - presenting replicates of specific cell types from all datasets, figure 2.
References:


In this demo the black image strip is a directive with a templateUrl,this directive is used at two places. We will also be doing a tutorial on how to create this css3 fade out animation,stay tuned.


Refresh
Roles of current user:
Choose table id:
Select rows to revise:
Choose
_default_access
FULL
MODIFY
READ_ONLY
HIDDEN
Choose
_row_owner
The "owner" of the row
Apply changes


99.7% of midwives have treated homeless mums in the last 6 months
Midwives in the UK have said they see a pregnant woman at risk of homelessness every working day.
A ground-breaking survey of midwives who collectively care for over 15,000 women per month found almost all of them had seen a pregnant woman who was homeless in the past six months.
Frontline maternity staff said cuts to benefits, changes in the welfare system, and widespread issues with suitable housing in many areas of the UK are disproportionately affecting pregnant women.
The shocking findings have been brought to light in a new Channel 4 Dispatches programme conducted alongside the Royal College of Midwives.
Born Homeless follows three mums fighting to keep their families safe and off the street.
One such mum is Kady, who was made homeless when she was three months pregnant with her second child after the breakdown of her marriage.
Kady said she suffered from depression after another of her babies was stillborn in 2015 and her relationship suffered.
Advertisement Advertisement
She is still living in temporary accommodation with her baby son, who is now one, and her daughter, five.
Kady told Metro.co.uk: ‘I had been going through a lot and it all just slid from there really.
‘I don’t really know what was the catalyst for me ending up homeless.
‘I was working, I had been with my partner for years but that relationship broke down and it made it difficult for me to live there anymore.’
She said she wanted to share her story to show how easily and quickly someone in a seemingly stable situation can find themselves homeless.
What the Dispatches and Royal College of Midwives investigation found
99.7% of the midwives who responded to the survey reported that they had seen a pregnant woman who was homeless in the past 6 months
96.7% reported that they had seen a pregnant woman who they believed to be at risk of homelessness in the past 6 months
97% had seen at least one pregnant woman sharing over-crowded or otherwise unsuitable accommodation
99% had seen at least one pregnant woman living in hostels, shelters or temporary accommodation
97% had seen at least one pregnant woman sofa-surfing
81% had seen at least one pregnant woman who was street homeless
Kady said: ‘When I realised how many pregnant women, young women with babies and children, were going through the same, I was shocked.
‘I’ve still got the support of my family and the community and children’s centres. I lean on that to get by.
Advertisement Advertisement
‘But for some women, they don’t have any support, they’re bringing children up in one room in shared accomodation. They’ve got nowhere to go and nothing to do.’
Kady studied and worked before she became pregnant and said she had done ‘all the things that a person is supposed to do’.
She told the programme: ‘I got married before I had my children with somebody that I went to school with.
‘I had an idea of what I wanted my life to be like and it just didn’t pan out that way.’
Kady and her two children have been in temporary accommodation for a year and a half, and she is still having to bid for council properties online but said she feels hopeless.
She is one of 10,000 people on a waiting list for properties and has been told that if she is offered somewhere and refuses it, she will become ‘intentionally homeless’.
She said: ‘Basically it makes you feel really anxious. I am worried that I will be offered something, without knowing where it is or if it is suitable, with no viewing or way of seeing it beforehand, and I will have to agree to move there.’

Advertisement
‘It’s hard enough with a newborn as it is, your hormones are all over the place.
Kady said she is hopeful for the future. She aims to complete a course in child psychology so she can further her career working with children with special educational needs.
She added: ‘I want to give my kids everything I have ever wanted to give them.
‘I hope to finish my training and buy my own place. That’s the long-term dream.’
Clare Livingstone Professional Policy Advisor at The Royal College of Midwives (RCM) said: ‘Every day midwives and other health professionals working in our NHS are caring for people who are homeless or at risk of being homeless.
‘They are among the most vulnerable in our society and midwives have a unique insight into the problem, visiting all women and babies where they live.
‘The RCM’s recent guidance for midwives on the duty to refer pregnant women who are homeless or at risk of becoming homeless needs the backing of NHS employers, in enabling staff to undertake training and providing the time for them to appropriately care for women in these circumstances.
‘We have all got to do everything we can to tackle the scourge of homelessness.
‘We know that homelessness leads to stress and ill health in pregnancy and that there are potentially adverse effects for the babies of these vulnerable mothers.’
Advertisement
Born Homeless: Channel 4 Dispatches, Tonight , Channel 4, 8pm
Got a story for Metro.co.uk?
Get in touch with our news team by emailing us at<EMAIL_ADDRESS>For more stories like this, check our news page.


{% extends 'layout.html' %} {% block body %}
Molecular modeling and chemoinformatics Four years experience in molecular design, including virtual screening, molecular docking and molecular dynamics simulations.
Small molecule synthesis Three years experience in small molecule synthesis, modification and characterization.
Machine learning Hands on experience in machine learning model building and result analysis, visualization.
Programming skills Proficient in Python, SQL and version control with git, familiar with R, Javascript, shell scripting and web programming.
Data analysis Proficient in statistics and exploratory data analysis, data visualization.
Chinese Mother tongue.
English Advanced level (C1).
German Intermediate level (B2).
LaTeX Two years user experience.
MS office softwares Proficient in Word, PowerPoint and familiar in Excel.
{% endblock %}


Please wait...
MLN range of fruit drinks & juices believes that Mother Nature if personified, will certainly look like a fruit. Hence, like her, all our fruit drinks & fruit juices are fruitful, healthful and joyful.
We take pride with our resolve to use only the highest grade of raw materials backed by the latest production techniques. This way, all your sips, and slurps will be naturally sweet to taste, low in calories and assure Vitamins, Fiber and other nutrients required for your daily wellness.
Know MoreWater - Mother Nature’s elixir of life and one of the five fundamental elements behind all earthly creations. It comprises 70% of our body, much of which is lost through urine and sweat. This explains why medical professional and nutritionists emphasize the need to be hydrated at all times. Water detoxifies our physiological system and promotes various metabolic activities.
Know MoreHealthy, Tasty and Fun!
MLN’s range of Fytobact chocolates is specifically made for this! Fytobact Chocolates focuses on creating innovative and wholesome products. Everything we do, we do it with passion and responsibility. We care about our customers.
Know More


No more need to leave your code when mocking your GET requests.
Fast & real time editor, with validation and data previsualisation.
One minute to handle the syntax, inspired by JSON.


Week 3
3.6 Technical Blog
Jan 18 2016
Classes vs ID's
The topic of discussion today is classes and id's. What are they, what are some of the differences between them, and some of the best practices associated with both of them.
Classes and Id's are what's known as selectors. Selectors are are used in CSS to find elements based on certain values. In this case the selector would find html elements with the assigned class or id value. Once it finds a particular element with that certain class or id assignment it performs an operation on that element. In this case it styles that element based on whatever styling commands are associated with that class or id.
In syntax classes and id's look very similar. They assigned in html code almost the same way. "Element class/id="name"s. The only difference between the two that one may see is word class or id. That doesn't, on its face, seem all that significant. Let's look at how they are defined in CSS. In a styling page an id selector is defined using '#' before the id name. The class selector is defined using a '.'. So an id would look like `#id-name` and a class would look like `.class-name`. Again, on it's face it doesn't seem all that significant. At a glance it looks like the two are almost interchangeable. The significant difference between the two is in usage.
The usage of class is almost limitless while the usage of id is extremely specific. The class selector can be used as many times as you want throughout an html document. An id can only be used once in an entire html document. Newer browser, in my case Chrome, will still render the page the way you intended it too. You will not, however, be able to validate your html code with multiple instances of the same id selector. Another big difference is an individual element can only have one id assignment whereas it can have as many class assignments as you wish to give it. The final large difference is the precedence that is given to each. An id will override an already existing class assigment. If you have a block of html code that's being styled by a class selector an assignment of id will override the specific styling of the element that the id is directed at.
Basically you'll want to remember that if you plan on using a given selector in more than one place, even if you think you might, go with the class selector over the id. The id is used in very specific cases. You can only assign an id selector to one element and each element can have, at most, one id selector assigned to it. You can run wild with the class selector. You can use the class selector over and over again and you can assign multiple classes to each element.


class: center, middle, inverse, title-slide # 2.1 — Game Theory & Property ## ECON 315 • Economics of the Law • Spring 2021 ### Ryan Safner
Assistant Professor of Economics
<EMAIL_ADDRESS>ryansafner/lawS21
lawS21.classes.ryansafner.com
--- class: inverse, center, middle # Review of Static Game Theory --- # Game Theory .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/93gtv9xei0q5fik/gametheory.jpg?raw=1) ] ] .pull-right[ - .hi[Game theory]: a set of tools that model .hi-purple[trategic interactions] (.hi-purple[“games”]) between rational agents, 3 elements: 1. **Players** 2. **Strategies** that each player can choose from 3. **Payoffs** to each player that are *jointly-determined* from combination of all players’ strategies ] --- # Game Theory vs. Decision Theory Models I .pull-left[ .center[ ![](https://www.dropbox.com/s/kjm2fzw4o3p0sk3/optimize.jpg?raw=1) ] ] .pull-right[ - Traditional economic models are often called .hi[“Decision theory”]: - .hi-purple[Optimization models] **ignore all other agents** and just focus on how can **you** maximize **your** objective within **your** constraints - Consumers max utility; firms max profit, etc. - **Outcome**: .hi-purple[optimum]: decision where *you* have no better alternatives ] --- # Game Theory vs. Decision Theory Models I .pull-left[ .center[ ![](https://www.dropbox.com/s/9d2bkesu20g5fj7/crowdartistic.jpg?raw=1) ] ] .pull-right[ - Traditional economic models are often called .hi[“Decision theory”]: - .hi-purple[Equilibrium models] assume that there are **so many agents** that **no agent’s decision can affect the outcome** - Firms are price-takers or the *only* buyer or seller - **Ignores all other agents’ decisions**! - **Outcome**: .hi-purple[equilibrium]: where *nobody* has no better alternatives ] --- # Game Theory vs. Decision Theory Models III .pull-left[ .center[ ![:scale 90%](https://www.dropbox.com/s/tymdsxbqaq2scxq/chessknights.jpg?raw=1) ] ] .pull-right[ - .hi[Game theory models] directly confront .hi-purple[strategic interactions] between players - How each player would optimally respond to a strategy chosen by other player(s) - Lead to a stable outcome where everyone has considered and chosen mutual best responses - .hi-purple[Nash equilibrium]: set of strategy profiles where *nobody* wants to switch strategies *given the strategies everyone else is playing* - each player is playing a **best response** against other players’ strategies ] --- # As a Prisoner's Dilemma I .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/uj1jxo2s1dr8yeb/applevsgoogle.jpg?raw=1) ] ] .pull-right[ - Suppose we have a simple **duopoly** between .hi-red[Apple] and .hi-blue[Google] - Each is planning to launch a new tablet, and choose to sell it at a **High Price** or a **Low Price** ] --- # As a Prisoner's Dilemma I .pull-left[ - Payoff matrix represents profits to each firm - First number in each box goes to .hi-red[Row player (Apple)] - Second number in each box goes to .hi-blue[Column player (Google)] ] .pull-right[ .center[ ![](https://www.dropbox.com/s/7z7okbojvajbfmq/pdapplegoogle.png?raw=1) ] ] --- # As a Prisoner's Dilemma II .pull-left[ - From .hi-red[Apple]'s perspective: - .hi-red[Low Price] is a .hi-purple[dominant strategy] for .hi-red[Apple] ] .pull-right[ .center[ ![](https://www.dropbox.com/s/223j924yyaph1sk/pdapple1.png?raw=1) ] ] --- # As a Prisoner's Dilemma II .pull-left[ - From Google's perspective: - .hi-blue[Low Price] is a .hi-purple[dominant strategy] for .hi-blue[Google] ] .pull-right[ .center[ ![](https://www.dropbox.com/s/5vzsainx3h556ke/pdgoogle1.png?raw=1) ] ] --- # As a Prisoner's Dilemma II .pull-left[ - .hi[Nash equilibrium]: (.hi-red[Low Price], .hi-blue[Low Price]) - neither player has an incentive to change price, *given the other's price* ] .pull-right[ .center[ ![](https://www.dropbox.com/s/9xram8ppumhfuoq/pdapplegooglenash.png?raw=1) ] ] --- # As a Prisoner's Dilemma III .pull-left[ - .hi[Nash equilibrium]: (.hi-red[Low Price], .hi-blue[Low Price]) - neither player has an incentive to change price, *given the other's price* - A possible **Pareto improvement**: (.hi-red[High Price], .hi-blue[High Price]) - Both players are better off, nobody worse off! - Is it a Nash Equilibrium? ] .pull-right[ .center[ ![](https://www.dropbox.com/s/y2903cwtikr31e4/pdapplegooglecartel.png?raw=1) ] ] --- # As a Prisoner's Dilemma IV .pull-left[ - Google and Apple could .hi-purple[collude] with one another and agree to both raise prices - .hi[Cartel]: group of sellers coordinate to raise prices to act like a collective monopoly and split the profits ] .pull-right[ .center[ ![](https://www.dropbox.com/s/nxgqbud4hgatv2s/backroomdeal.png?raw=1) ] ] --- # Game Theory: Some Generalizations .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/tymdsxbqaq2scxq/chessknights.jpg?raw=1) ] ] .pull-right[ There's a *lot* more to game theory than a one-shot prisoners' dilemma: - one shot vs. repeated game - discrete vs. continuous strategies - perfect vs. incomplete vs. and asymmetric information - simultaneous vs. sequential game - See my [game theory course](https://ryansafner.com/courses/econ316/) for more (likely taught next in Fall 2021) ] --- # Solution Concepts .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/j7xenkgo3p71vke/equilibriumbalance.png?raw=1) ] ] .pull-right[ - We use .hi-purple["solution concepts"] to allow us to predict an .hi-purple[equilibrium] of a game - .hi[Nash Equilibrium] is the primarly solution concept - Note it has *many* variants depending on if games are sequential vs. simultaneous, perfect vs. imperfect information, etc. ] --- # Solution Concepts: Nash Equilibrium .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/j7xenkgo3p71vke/equilibriumbalance.png?raw=1) ] ] .pull-right[ - Recall, .hi[Nash Equilibrium]: no players want to change their strategy given what everyone else is playing - All players are playing a best response to each other ] --- # Solution Concepts: Nash Equilibrium .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/j7xenkgo3p71vke/equilibriumbalance.png?raw=1) ] ] .pull-right[ - Important about Nash equilibrium: 1. N.E. `\(\neq\)` the "*best*" or *optimal* outcome - Recall the Prisoners' Dilemma! 2. Game may have *multiple* N.E. 3. Game may have *no* N.E. (in "pure" strategies) ] --- # Example: Coordination Game .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/k431qrlyj2nbnc3/standards_game.png?raw=1) ] ] .pull-right[ - A .hi-purple[Coordination Game] - No dominant strategies ] --- # Example: Coordination Game .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/a0i4xlq2uipi360/standards_game_Nashes.png?raw=1) ] ] .pull-right[ - .hi-purple[Two Nash equilibria]: (.red[A],.blue[A]) and (.red[B],.blue[B]) - Either just as good - Coordination is most important ] --- # Example: Coordination Game .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/a0i4xlq2uipi360/standards_game_Nashes.png?raw=1) ] ] .pull-right[ - Two general methods to solve for Nash equilibria: .hi-purple[1) Cell-by-Cell Inspection]: look in each cell, does either player want to deviate? - .hi-purple[If no: a Nash equilibrium] - If yes: *not a Nash equilibrium* ] --- # Example: Coordination Game .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/k431qrlyj2nbnc3/standards_game.png?raw=1) ] ] .pull-right[ - Two general methods to solve for Nash equilibria: .hi-purple[2) Best-Response Analysis]: take the perspective of each player. If the other player plays a particular strategy, what is your strategy(s) that gets you the highest payoff? - Ties are allowed - .hi-purple[Any cell where both players are playing a best response is a Nash Equilibrium] ] --- # Example: Coordination Game .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/cn8l8c81yy6tcwh/standards_game_1br.png?raw=1) .red[Player 1's] best responses ] ] .pull-right[ - Two general methods to solve for Nash equilibria: .hi-purple[2) Best-Response Analysis]: take the perspective of each player. If the other player plays a particular strategy, what is your strategy(s) that gets you the highest payoff? - Ties are allowed - .hi-purple[Any cell where both players are playing a best response is a Nash Equilibrium] ] --- # Example: Coordination Game .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/etk1nlasbo788h8/standards_game_2br.png?raw=1) .blue[Player 2's] best responses ] ] .pull-right[ - Two general methods to solve for Nash equilibria: .hi-purple[2) Best-Response Analysis]: take the perspective of each player. If the other player plays a particular strategy, what is your strategy(s) that gets you the highest payoff? - Ties are allowed - .hi-purple[Any cell where both players are playing a best response is a Nash Equilibrium] ] --- # Example: Coordination Game .pull-left[ .center[ ![:scale 100%](https://www.dropbox.com/s/8yzrc25hzb6fd9x/standards_game_brnashes.png?raw=1) .hi-purple[N.E.]: each player is playing a best response ] ] .pull-right[ - Two general methods to solve for Nash equilibria: .hi-purple[2) Best-Response Analysis]: take the perspective of each player. If the other player plays a particular strategy, what is your strategy(s) that gets you the highest payoff? - Ties are allowed - .hi-purple[Any cell where both players are playing a best response is a Nash Equilibrium] ] --- # A Change in the Game .pull-left[ .center[ ![](https://www.dropbox.com/s/8r7nkpwplojj4pd/standards_game_lockin.png?raw=1) ] ] .pull-right[ - Two Nash equilibria again: (.red[A],.blue[A]) and (.red[B],.blue[B]) - But here (.red[A],.blue[A]) `\(\succ\)` (.red[B],.blue[B])! ] --- # A Change in the Game .pull-left[ .center[ ![](https://www.dropbox.com/s/8r7nkpwplojj4pd/standards_game_lockin.png?raw=1) ] ] .pull-right[ - .hi-purple[Path Dependence]: early choices may affect later ability to choose or switch - .hi-purple[Lock-in]: the switching cost of moving from one equilibrium to another becomes prohibitive - Suppose we are currently in equilibrium (B,B) - .hi-purple[Inefficient lock-in]: - Standard A is superior to B - But too costly to switch from B to A ] --- # Some Games Have No Nash Equilibrium .pull-left[ .center[ ![](../images/soccer-game.png) ] ] --- # Some Games Have No Nash Equilibrium .pull-left[ .center[ ![](../images/soccer-game-best-responses.png) ] ] .pull-right[ - Best responses - No strategy profile where both players are playing a best responses - No Nash Equilibrium in .hi-purple[“pure strategies”] - But there is (always) a Nash Equilibrium in .hi-turquoise[“mixed strategies”] ] --- class: inverse, center, middle # The Problem, Philosophically, and Game-Theoretically --- # Why Do We Need Property Law? .pull-left[ - A solution to the tragedy of the commons - Imagine two neighboring farmers - game theoretic interaction - each farmer can either .hi-purple[Farm] or .hi-purple[Steal] ] .pull-right[ .center[ ![](../images/wheatfarmfence.jpg) ] ] --- # Why Do We Need Property Law? .pull-left[ - Suppose: - crops are valued at 15 - planting & watering costs 5 - stealing costs 3 ] .pull-right[ .center[ ![](../images/wheatfarmfence.jpg) ] ] --- # Why Do We Need Property Law? .pull-left[ - Suppose: - crops are valued at 15 - planting & watering costs 5 - stealing costs 3 - With no legal system, the game looks like: ] .pull-right[ .center[ ![](../images/propertygame.png) ] ] --- # Why Do We Need Property Law? .pull-left[ - .hi-purple[Nash Equilibrium]: (.red[Steal],.blue[Steal]) ] .pull-right[ .center[ ![](../images/propertygameNE.png) ] ] --- # The Hobbesian Dilemma .left-column[ .center[ ![:scale 80%](https://www.dropbox.com/s/yejb6ou2bwaqlxb/hobbes.png?raw=1) Thomas Hobbes 1588-1679 ] ] .right-column[ > "In [the state of nature], there is no place for Industry; because the fruit thereof is uncertain; and consequently no Culture of the Earth...no Knowledge of the face of the Earth; no account of Time; no Arts; no Letters; no Society; and which is worst of all, continuall feare, and danger of violent death; .ji[And the life of man, solitary, poore, nasty, brutish, and short], (Ch. XVIII). ] .source[Hobbes, Thomas, 1651, [*Leviathan: Or the Matter, Forme and Power of a Commonwealth, Ecclesiasticall and Civil*](https://www.gutenberg.org/files/3207/3207-h/3207-h.htm)] --- # The Hobbesian Dilemma .left-column[ .center[ ![:scale 80%](https://www.dropbox.com/s/yejb6ou2bwaqlxb/hobbes.png?raw=1) Thomas Hobbes 1588-1679 ] ] .right-column[ > "And because the condition of man...is a condition of .hi[war of every one against every] one...it followeth that in such a condition .hi[every man has a right to every thing, even to one another's body]. And therefore, as long as this natural right of every man to every thing endureth, .hi[there can be no security to any man]...The .hi[first fundamental law of nature] is: .hi[to seek peace and follow it] (Ch. XVIV). ] .source[Hobbes, Thomas, 1651, [*Leviathan: Or the Matter, Forme and Power of a Commonwealth, Ecclesiasticall and Civil*](https://www.gutenberg.org/files/3207/3207-h/3207-h.htm)] --- # The Hobbesian Dilemma .left-column[ .center[ ![:scale 80%](https://www.dropbox.com/s/yejb6ou2bwaqlxb/hobbes.png?raw=1) Thomas Hobbes 1588-1679 ] ] .right-column[ > "For the Lawes of Nature (as Justice, Equity, Modesty, Mercy, and (in summe) Doing To Others, As Wee Would Be Done To,) if themselves, without the terrour of some Power, to cause them to be observed, are contrary to our naturall Passions, that carry us to Partiality, Pride, Revenge, and the like. And .hi[Covenants, without the Sword, are but Words, and of no strength to secure a man at all], (Ch. XVIII). ] .source[Hobbes, Thomas, 1651, [*Leviathan: Or the Matter, Forme and Power of a Commonwealth, Ecclesiasticall and Civil*](https://www.gutenberg.org/files/3207/3207-h/3207-h.htm)] --- # The Hobbesian Dilemma .pull-left[ - .hi[Nash equilibrium]: everyone *steals*! - Pareto-improvement: (.red[Farm],.blue[Farm]) - This is the .hi-purple[socially optimal equilibrium] - Hobbes' insight: .hi-purple[no _individual_ has an incentive to farm when everyone steals!] ] .pull-right[ .center[ ![](../images/propertygameNE.png) ] ] --- # The Hobbesian Solution .left-column[ .center[ ![:scale 80%](https://www.dropbox.com/s/yejb6ou2bwaqlxb/hobbes.png?raw=1) Thomas Hobbes 1588-1679 ] ] .right-column[ > "It is a real unity of them all in one and the same person, made by covenant of every man with every man, in such manner as ife every man should say to every man: .hi[I authorise and give up my right of governing myself to this man, or to this assembly of men, on this condition; that thou give up, thy right to him, and authorise all his actions in like manner]. This done, the multitude so united in one person is called a .hi[COMMONWEALTH]," (Ch. XVII). ] .source[Hobbes, Thomas, 1651, [*Leviathan: Or the Matter, Forme and Power of a Commonwealth, Ecclesiasticall and Civil*](https://www.gutenberg.org/files/3207/3207-h/3207-h.htm)] --- # The Hobbesian Solution .center[ ![:scale 70%](https://www.dropbox.com/s/aby3cf6ijkrjs7k/benevolentdespot.jpg?raw=1) ] --- # The Hobbesian Solution Is Not the Only Solution .left-column[ .center[ ![:scale 80%](../images/hume.png) David Hume 1711-1776 ] ] .right-column[ > But although men can maintain a small uncultivated society without government, they can’t possibly maintain a society of any kind without justice, i.e. without obeying the three fundamental laws concerning the stability of ownership, its transfer by consent, and the keeping of promises. .source[Hume, David, 1751, *Enquiry Concerning the Principles of Morals*] ] --- # Why Do We Need Property Law? .pull-left[ - Suppose there are many farmers that face the same problem - They recognize that establishing rules of property and punishing theft gets them the Pareto improvement - Setting up a property law system (and someone to enforce it) has costs `\(c\)` - The punishment to theft is `\(P\)` - If `\(10-c>12-P\)`, then (.red[Farm],.blue[Farm]) becomes an equilibrium ] .pull-right[ .center[ ![](../images/propertygame2.png) ] ] --- # Rent-Seeking .pull-left[ .smaller[ - .hi[Rent-seeking]: a party investing resources to transfer wealth from other parties to themselves (or investing resources to *prevent* transfer of their wealth to others) - Grew out of literature on lobbying and government favors - a much more general problem, even if no government exists to hand out favors! - .hi[Economic rent]: a return above an asset's opportunity cost ] ] .pull-right[ .center[ ![](../images/rents.jpg) ] ] --- # Rent-Seeking .left-column[ .center[ ![:scale 80%](https://www.dropbox.com/s/dxqyaa7xr9nsfj0/tullock2.jpg?raw=1) Gordon Tullock 1922-2014 ] ] .right-column[ .smallest[ > “Transfers themselves cost society nothing, but for the people engaging in them they are just like any other activity, and this means that large resources may be invested in attempting to make or prevent transfers. These largely offsetting commitments of resources are totally wasted from the standpoint of society as a whole,” (p.230). ] .source[Tullock, Gordon, (1967), "The Welfare Cost of Tariffs, Monopolies, and Theft," *Western Economic Journal* 5(3): 224-232.] ] --- # Rent-Seeking .left-column[ .center[ ![:scale 80%](https://www.dropbox.com/s/dxqyaa7xr9nsfj0/tullock2.jpg?raw=1) Gordon Tullock 1922-2014 ] ] .right-column[ .smallest[ > “The total social cost of theft is the sum of the efforts invested in the activity of theft, private protection against theft, and the public investment in police protection. The theft itself is a pure transfer, and has no welfare cost, but the existence of theft as a potential activity results in very substantial diversion of resources to fields where they essentially offset each other,and produce no positive product. .hi[The problem with income transfers is not that they directly inflict welfare losses, but that they lead people to employ resources in attempting to obtain or prevent such transfers.] A successful bank robbery will inspire potential thieves to greater efforts, lead to, the installation of improved protective equipment in other banks, and perhaps result in the hiring of additional policemen. These are its social costs, and they can be very sizable,” (p.231) ] .source[Tullock, Gordon, (1967), "The Welfare Cost of Tariffs, Monopolies, and Theft," *Western Economic Journal* 5(3): 224-232.] ] --- # Conflict is Costly .left-column[ .center[ ![:scale 80%](https://www.dropbox.com/s/dxqyaa7xr9nsfj0/tullock2.jpg?raw=1) Gordon Tullock 1922-2014 ] ] .right-column[ .smallest[ > “[Conflicts] lead to investment of resources by *A* to get *B*’s property and by *B* to defend it. .hi[Regardless of the outcome of the conflict, the use of resources for this purpose is offsetting and therefore inherently wasteful.]” > “.hi[Social contrivances for reducing such [rent-seeking] investment are, on the whole, desirable], although there may be cases where it is more efficient to place no institutional restrictions on such conflict,” (p. 5). ] .source[Tullock, Gordon, (1975), *The Social Dilemma*] ] --- # Government Exists to Protect Property Rights .left-column[ .center[ ![:scale 70%](https://www.dropbox.com/s/6jvd6w2jfdfx35f/locke.png?raw=1) .smallest[ John Locke 1632-1704 ] ] ] .right-column[ .smallest[ > "Why will he part with his freedom? ... Though .hi[in the state of nature he hath such a right, yet the enjoyment of it is very uncertain, and constantly exposed to the invasion of others]...the enjoyment of the property he has in this state is very unsafe very unsecure....hi[[He] is willing to join in society with others...for the mutual preservation of their lives, liberties, and estates], which I call by the general name, .hi[property.]" (Ch. IX). > "The great and chief end, therefore, of men's uniting into commonwealths, and putting themselves under government, is the preservation of their property." (Ch. IX). ] .source[Locke, John, 1689, *Second Treatise on Government*] ]


Monitor
Controls
+
Smoothing
-
State
On
Off
Iterations
Count
-
+
Hue
Range
-
+
Offset
-
+
Timer
On
Off
Speed
-
+
Saturation
Value
-
+
Lightness
Mode
0
1
2
Scale
-
+
Other
Camera controls
Move W,A,S,D
Zoom R,F
Rotate Q,E
Random Brot
Mutate Brot


Talk.CSS #39 (22 May 2019)
By:Chen Hui Jing @hj_chenYeo Kheng Meng @yeokm1
Fun fact, the presentation was done on the Windows 3.1 machine with Powerpoint 4. Because we could.


The code provided here originally demonstrated the main algorithms from Rasmussen and Williams: Gaussian Processes for Machine Learning. It has since grown to allow more likelihood functions, further inference methods and a flexible framework for specifying GPs. Other GP packages can be found here.
The code is written by Carl Edward Rasmussen and Hannes Nickisch; it runs on both Octave 3.2.x and Matlab® 7.x and later. The code is based on previous versions written by Carl Edward Rasmussen and Chris Williams.
All the code including demonstrations and html documentation can be downloaded in a tar or zip archive file.
Minor changes and incremental bugfixes to the current version are documented in the changelog, changes from previous versions are documented in README.
Please read the copyright notice.
After unpacking the tar or zip file you will find 6 subdirectories: cov, doc, inf, lik, mean and util. It is not necessary to install anything to get started, just run the startup script to set your path.
Details about the directory contents and on how to compile mex files can be found in the README. The getting started guide is the remainder of the html file you are currently reading (also available at http://gaussianprocess.org/gpml/code/matlab/doc). A Developer's Guide containing technical documentation is found in manual.pdf, but for the casual user, the guide is below.
Gaussian Processes (GPs) can conveniently be used for Bayesian supervised learning, such as regression and classification. In its simplest form, GP inference can be implemented in a few lines of code. However, in practice, things typically get a little more complicated: you might want to use complicated covariance functions and mean functions, learn good values for hyperparameters, use non-Gaussian likelihood functions (rendering exact inference intractable), use approximate inference algorithms, or combinations of many or all of the above. This is what the GPML software package does.
Before going straight to the examples, just a brief note about the organization of the package. There are four types of objects which you need to know about:
| Inference | GPML name | Exact infExact |
EP infEP |
Laplace infLaplace |
Variational Bayes infVB |
Sampling infMCMC |
LOO infLOO |
type, output domain |
alternate names |
Likelihood | FITC infFITC |
FITC-EP infFITC_EP |
FITC-Laplace infFITC_Laplace |
| Gaussian | likGauss | regression, IR | |||||||
| Sech-squared | likSech2 | regression, IR | |||||||
| Laplacian | likLaplace | regression, IR | double exponential | ||||||
| Student's t | likT | regression, IR | |||||||
| Mixture | likMix | classification, ±1 and regression, IR | mixing meta likelihood | ||||||
| Uniform | likUni | classification, ±1 | label noise | ||||||
| Error function | likErf | classification, ±1 | probit regression | ||||||
| Logistic function | likLogistic | classification, ±1 | logistic regression logit regression |
||||||
| Poisson | likPoisson | count data, IN | Poisson regression |
All of the objects described above are written in a modular way, so you can add functionality if you feel constrained despite the considerable flexibility provided. Details about how to do this are provided in the developer documentation.
Inference by MCMC sampling is the only inference method that cannot be used as a black box. Also gradient-based marginal likelihood optimisation is not possible with MCMC. Please see usageSampling for a toy example illustrating the usage of the implemented samplers.
Using the GPML package is simple. There is only one single function to call: gp, it does posterior inference, learns hyperparameters, computes the marginal likelihood and makes predictions. Generally, the gp function takes the following arguments: a hyperparameter struct, an inference method, a mean function, a covariance function, a likelihood function, training inputs, training targets, and possibly test cases. The exact computations done by the function is controlled by the number of input and output arguments in the call. Here is part of the help message for the gp function (follow the link to see the whole thing):
function [varargout] = gp(hyp, inf, mean, cov, lik, x, y, xs, ys) [ ... snip ...] Two modes are possible: training or prediction: if no test cases are supplied, then the negative log marginal likelihood and its partial derivatives wrt the hyperparameters is computed; this mode is used to fit the hyperparameters. If test cases are given, then the test set predictive probabilities are returned. Usage: training: [nlZ dnlZ ] = gp(hyp, inf, mean, cov, lik, x, y); prediction: [ymu ys2 fmu fs2 ] = gp(hyp, inf, mean, cov, lik, x, y, xs); or: [ymu ys2 fmu fs2 lp] = gp(hyp, inf, mean, cov, lik, x, y, xs, ys); [ .. snip ...]
Here x and y are training inputs and outputs, and xs and ys are test set inputs and outputs, nlZ is the negative log marginal likelihood and dnlZ its partial derivatives wrt the hyperparameters (which are used for training the hyperparameters). The prediction outputs are ymu and ys2 for test output mean and covariance, and fmu and fs2 are the equivalent quenteties for the corresponding latent variables. Finally, lp are the test output log probabilities.
Instead of exhaustively explaining all the possibilities, we will give two illustrative examples to give you the idea; one for regression and one for classification. You can either follow the example here on this page, or using the two scripts demoRegression and demoClassification (using the scripts, you still need to follow the explanation on this page).
You can either follow the example here on this page, or use the script demoRegression.
This is a simple example, where we first generate n=20 data points from a GP, where the inputs are scalar (so that it is easy to plot what is going on). We then use various other GPs to make inferences about the underlying function.
First, generate some data from a Gaussian process (it is not essential to understand the details of this):
clear all, close all meanfunc = {@meanSum, {@meanLinear, @meanConst}}; hyp.mean = [0.5; 1]; covfunc = {@covMaterniso, 3}; ell = 1/4; sf = 1; hyp.cov = log([ell; sf]); likfunc = @likGauss; sn = 0.1; hyp.lik = log(sn); n = 20; x = gpml_randn(0.3, n, 1); K = feval(covfunc{:}, hyp.cov, x); mu = feval(meanfunc{:}, hyp.mean, x); y = chol(K)'*gpml_randn(0.15, n, 1) + mu + exp(hyp.lik)*gpml_randn(0.2, n, 1); plot(x, y, '+')
Above, we first specify the mean function meanfunc, covariance function covfunc of a GP and a likelihood function, likfunc. The corresponding hyperparameters are specified in the hyp structure:
The mean function is composite, adding (using meanSum function) a linear (meanLinear) and a constant (meanConst) to get an affine function. Note, how the different components are composed using cell arrays. The hyperparameters for the mean are given in hyp.mean and consists of a single (because the input will one dimensional, i.e. D=1) slope (set to 0.5) and an off-set (set to 1). The number and the order of these hyperparameters conform to the mean function specification. You can find out how many hyperparameters a mean (or covariance or likelihood function) expects by calling it without arguments, such as feval(@meanfunc{:}). For more information on mean functions see meanFunctions and the directory mean/.
The covariance function is of the Matérn form with isotropic distance measure covMaterniso. This covariance function is also composite, as it takes a constant (related to the smoothness of the GP), which in this case is set to 3. The covariance function takes two hyperparameters, a characteristic length-scale ell and the standard deviation of the signal sf. Note, that these positive parameters are represented in hyp.cov using their logarithms. For more information on covariance functions see covFunctions and cov/.
Finally, the likelihood function is specified to be Gaussian. The standard deviation of the noise sn is set to 0.1. Again, the representation in the hyp.lik is given in terms of its logarithm. For more information about likelihood functions, see likFunctions and lik/.
Then, we generate a dataset with n=20 examples. The inputs x are drawn from a unit Gaussian (using the gpml_randn utility, which generates unit Gaussian pseudo random numbers with a specified seed). We then evaluate the covariance matrix K and the mean vector m by calling the corresponding functions with the hyperparameters and the input locations x. Finally, the targets y are computed by drawing randomly from a Gaussian with the desired covariance and mean and adding Gaussian noise with standard deviation exp(hyp.lik). The above code is a bit special because we explicitly call the mean and covariance functions (in order to generate samples from a GP); ordinarily, we would only directly call the gp function.
Let's ask the model to compute the (joint) negative log probability (density) nlml (also called marginal likelihood or evidence) and to generalize from the training data to other (test) inputs z:
nlml = gp(hyp, @infExact, meanfunc, covfunc, likfunc, x, y) z = linspace(-1.9, 1.9, 101)'; [m s2] = gp(hyp, @infExact, meanfunc, covfunc, likfunc, x, y, z); f = [m+2*sqrt(s2); flipdim(m-2*sqrt(s2),1)]; fill([z; flipdim(z,1)], f, [7 7 7]/8) hold on; plot(z, m); plot(x, y, '+')
The gp function is called with a struct of hyperparameters hyp, and inference method, in this case @infExact for exact inference and the mean, covariance and likelihood functions, as well as the inputs and outputs of the training data. With no test inputs, gp returns the negative log probability of the training data, in this example nlml=11.97.
To compute the predictions at test locations we add the test inputs z as a final argument, and gp returns the mean m variance s2 at the test location. The program is using algorithm 2.1 from the GPML book. Plotting the mean function plus/minus two standard deviations (corresponding to a 95% confidence interval):
Typically, we would not a priori know the values of the hyperparameters hyp, let alone the form of the mean, covariance or likelihood functions. So, let's pretend we didn't know any of this. We assume a particular structure and learn suitable hyperparameters:
covfunc = @covSEiso; hyp2.cov = [0; 0]; hyp2.lik = log(0.1); hyp2 = minimize(hyp2, @gp, -100, @infExact, [], covfunc, likfunc, x, y); exp(hyp2.lik) nlml2 = gp(hyp2, @infExact, [], covfunc, likfunc, x, y) [m s2] = gp(hyp2, @infExact, [], covfunc, likfunc, x, y, z); f = [m+2*sqrt(s2); flipdim(m-2*sqrt(s2),1)]; fill([z; flipdim(z,1)], f, [7 7 7]/8) hold on; plot(z, m); plot(x, y, '+')
First, we guess that a squared exponential covariance function covSEiso may be suitable. This covariance function takes two hyperparameters: a characteristic length-scale and a signal standard deviation (magnitude). These hyperparameters are non-negative and represented by their logarithms; thus, initializing hyp2.cov to zero, correspond to unit characteristic length-scale and unit signal standard deviation. The likelihood hyperparameter in hyp2.lik is also initialized. We assume that the mean function is zero, so we simply ignore it (and when in the following we call gp, we give an empty argument for the mean function).
In the following line, we optimize over the hyperparameters, by minimizing the negative log marginal likelihood w.r.t. the hyperparameters. The third parameter in the call to minimize limits the number of function evaluations to a maximum of 100. The inferred noise standard deviation is exp(hyp2.lik)=0.15, somewhat larger than the one used to generate the data (0.1). The final negative log marginal likelihood is nlml2=14.13, showing that the joint probability (density) of the training data is about exp(14.13-11.97)=8.7 times smaller than for the setup actually generating the data. Finally, we plot the predictive distribution.
This plot shows clearly, that the model is indeed quite different from the generating process. This is due to the different specifications of both the mean and covariance functions. Below we'll try to do a better job, by allowing more flexibility in the specification.
Note that the confidence interval in this plot is the confidence for the distribution of the (noisy) data. If instead you want the confidence region for the underlying function, you should use the 3rd and 4th output arguments from gp as these refer to the latent process, rather than the data points.
hyp.cov = [0; 0]; hyp.mean = [0; 0]; hyp.lik = log(0.1); hyp = minimize(hyp, @gp, -100, @infExact, meanfunc, covfunc, likfunc, x, y); [m s2] = gp(hyp, @infExact, meanfunc, covfunc, likfunc, x, y, z); f = [m+2*sqrt(s2); flipdim(m-2*sqrt(s2),1)]; fill([z; flipdim(z,1)], f, [7 7 7]/8) hold on; plot(z, m); plot(x, y, '+');
Here, we have changed the specification by adding the affine mean function. All the hyperparameters are learnt by optimizing the marginal likelihood.
This shows that a much better fit is achieved when allowing a mean function (although the covariance function is still different from that of the generating process).
In case the number of training inputs x exceeds a few thousands, exact inference using infExact.m takes too long. We offer the FITC approximation based on a low-rank plus diagonal approximation to the exact covariance to deal with these cases. The general idea is to use inducing points u and to base the computations on cross-covariances between training, test and inducing points only.
Using the FITC approximation is very simple, we just have to wrap the covariance function covfunc into covFITC.m and call gp.m with the inference method infFITC.m as demonstrated by the following lines of code.
nu = fix(n/2); u = linspace(-1.3,1.3,nu)'; covfuncF = {@covFITC, {covfunc}, u}; [mF s2F] = gp(hyp, @infFITC, meanfunc, covfuncF, likfunc, x, y, z);
We define equispaced inducing points u that are shown in the figure as black circles. Note that the predictive variance is overestimated outside the support of the inducing inputs. In a multivariate example where densely sampled inducing inputs are infeasible, one can simply use a random subset of the training points.
nu = fix(n/2); iu = randperm(n); iu = iu(1:nu); u = x(iu,:);
You can either follow the example here on this page, or use the script demoClassification.
The difference between regression and classification isn't of fundamental nature. We can use a Gaussian process latent function in essentially the same way, it is just that the Gaussian likelihood function often used for regression is inappropriate for classification. And since exact inference is only possible for Gaussian likelihood, we also need an alternative, approximate, inference method.
Here, we will demonstrate binary classification, using two partially overlapping Gaussian sources of data in two dimensions. First we generate the data:
clear all, close all n1 = 80; n2 = 40; % number of data points from each class S1 = eye(2); S2 = [1 0.95; 0.95 1]; % the two covariance matrices m1 = [0.75; 0]; m2 = [-0.75; 0]; % the two means x1 = bsxfun(@plus, chol(S1)'*gpml_randn(0.2, 2, n1), m1); x2 = bsxfun(@plus, chol(S2)'*gpml_randn(0.3, 2, n2), m2); x = [x1 x2]'; y = [-ones(1,n1) ones(1,n2)]'; plot(x1(1,:), x1(2,:), 'b+'); hold on; plot(x2(1,:), x2(2,:), 'r+');
120 data points are generated from two Gaussians with different means and covariances. One Gaussian is isotropic and contains 2/3 of the data (blue), the other is highly correlated and contains 1/3 of the points (red). Note, that the labels for the targets are ±1 (and not 0/1).
In the plot, we superimpose the data points with the posterior equi-probability contour lines for the probability of class two given complete information about the generating mechanism
[t1 t2] = meshgrid(-4:0.1:4,-4:0.1:4); t = [t1(:) t2(:)]; n = length(t); % these are the test inputs tmm = bsxfun(@minus, t, m1'); p1 = n1*exp(-sum(tmm*inv(S1).*tmm/2,2))/sqrt(det(S1)); tmm = bsxfun(@minus, t, m2'); p2 = n2*exp(-sum(tmm*inv(S2).*tmm/2,2))/sqrt(det(S2)); contour(t1, t2, reshape(p2./(p1+p2), size(t1)), [0.1:0.1:0.9]);
We specify a Gaussian process model as follows: a constant mean function, with initial parameter set to 0, a squared exponential with automatic relevance determination (ARD) covariance function covSEard. This covariance function has one characteristic length-scale parameter for each dimension of the input space, and a signal magnitude parameter, for a total of 3 parameters (as the input dimension is D=2). ARD with separate length-scales for each input dimension is a very powerful tool to learn which inputs are important for predictions: if length-scales are short, inputs are very important, and when they grow very long (compared to the spread of the data), the corresponding inputs will be largely ignored. Both length-scales and the signal magnitude are initialized to 1 (and represented in the log space). Finally, the likelihood function likErf has the shape of the error-function (or cumulative Gaussian), which doesn't take any hyperparameters (so hyp.lik does not exist).
meanfunc = @meanConst; hyp.mean = 0; covfunc = @covSEard; ell = 1.0; sf = 1.0; hyp.cov = log([ell ell sf]); likfunc = @likErf; hyp = minimize(hyp, @gp, -40, @infEP, meanfunc, covfunc, likfunc, x, y); [a b c d lp] = gp(hyp, @infEP, meanfunc, covfunc, likfunc, x, y, t, ones(n, 1)); plot(x1(1,:), x1(2,:), 'b+'); hold on; plot(x2(1,:), x2(2,:), 'r+') contour(t1, t2, reshape(exp(lp), size(t1)), [0.1:0.1:0.9]);
We train the hyperparameters using minimize, to minimize the negative log marginal likelihood. We allow for 40 function evaluations, and specify that inference should be done with the Expectation Propagation (EP) inference method @infEP, and pass the usual parameters. Training is done using algorithm 3.5 and 5.2 from the gpml book. When computing test probabilities, we call gp with additional test inputs, and as the last argument a vector of targets for which the log probabilities lp should be computed. The fist four output arguments of the function are mean and variance for the targets and corresponding latent variables respectively. The test set predictions are computed using algorithm 3.6 from the GPML book. The contour plot for the predictive distribution is shown below. Note, that the predictive probability is fairly close to the probabilities of the generating process in regions of high data density. Note also, that as you move away from the data, the probability approaches 1/3, the overall class probability.
Examining the two ARD characteristic length-scale parameters after learning, you will find that they are fairly similar, reflecting the fact that for this data set, both inputs important.
In case the number of training inputs x exceeds a few hundreds, approximate inference using infLaplace.m, infEP.m and infVB.m takes too long. As in regression, we offer the FITC approximation based on a low-rank plus diagonal approximation to the exact covariance to deal with these cases. The general idea is to use inducing points u and to base the computations on cross-covariances between training, test and inducing points only.
Using the FITC approximation is very simple, we just have to wrap the covariance function covfunc into covFITC.m and call gp.m with the inference methods infFITC_Laplace.m and infFITC_EP.m as demonstrated by the following lines of code.
[u1,u2] = meshgrid(linspace(-2,2,5)); u = [u1(:),u2(:)]; clear u1; clear u2 nu = size(u,1); covfuncF = {@covFITC, {covfunc}, u}; inffunc = @infFITC_EP; % also @infFITC_Laplace is possible hyp = minimize(hyp, @gp, -40, inffunc, meanfunc, covfuncF, likfunc, x, y); [a b c d lp] = gp(hyp, inffunc, meanfunc, covfuncF, likfunc, x, y, t, ones(n,1));
We define equispaced inducing points u that are shown in the figure as black circles. Alternatively, a random subset of the training points can be used as inducing points.
Innumerable colleagues have helped to improve this software. Some of these are: John Cunningham, Máté Lengyel, Joris Mooij, Iain Murray, David Duvenaud, James Lloyd, Andrew McHutchon, Rowan McAllister, Daniel Marthaler and Chris Williams. Especially Ed Snelson helped to improve the code and to include sparse approximations.


Create Event
SUBMIT
{{event.name}}
Date:
{{event.date | date:'mediumDate'}}
Time:
{{event.time}}
Price:
{{34 | currency}}
Address:
{{event.location.address}}
{{event.location.city}}, {{event.location.state}}
{{ event | json }}
Sessions
Sort By:
Name
Vote Count
Show:
All
Introductory
Intermediate
Advanced
{{session.upVoteCount}}
{{session.name}}
{{session.creatorName}}
Duration: {{session.duration | durations }}
Level: {{session.level}}
{{session.abstract}}


Villa Park in salute to legend Ron Saunders
Villa fans paid tribute to legendary manager Ron Saunders during yesterday’s Premier League clash with Leicester.
by Matt MaherSaunders passed away on Saturday, aged 87.
Players from both sides wore black armbands while there was applause prior to kick off and in the 81st minute to mark Saunders’ 1980/81 league title triumph.
One of the Villa’s greatest managers, Saunders joined the club in June 1974, helping them clinch promotion from Division Two in his first season in charge.
Villa also won the League Cup in 1975 and 1977, but the biggest prize of all arrived four years later when they were crowned champions of England.
In early February 1982, Saunders sensationally quit, apparently over a contract dispute, with Villa in the quarter-finals of the European Cup, which they went on to win under assistant Tony Barton.
Remarkably, nine days after he walked out on Villa, he joined cross-city rivals Birmingham City before quitting in 1986. He then took charge of Albion, and remains the only man to manage all three clubs.


SettingsGeneralShortcutsLanguagesDocumentsWorkspaceDesignPerformanceMenuAuthor
Enable autosaving
Interval:
Enable File Backup
Workspace:
Use Workspace as default
Design:
Window Transparency:
Editor
Raster Size
Raster Color
Performance
Menu
Author
GeneralSoftwareEditorMenuTools
Shortcuts
Section A
This Section is currently under development.
Section B
This Section is currently under development.
Section C
This Section is currently under development.
GeneralInstall
Languages
Available Languages
This Section is currently under development.


Inline Formatting
I want to make sure I handle all inline formatting. I need to handle
bold, italic, code
, verbatim
, underline, strikethrough.
In addition, I need to make sure I can handle links. We’ve got simple links, like this:
Note the last one is not a link, as the source doesn’t include it in double-brackets and I don’t auto-recognize URLs.
I should also handle links with helpful text.
Helpful addition from punchagan, we now recognize when the link goes to an image and make the link anchor be the image, like this:
Also, if you make the descriptive text be an image, then it will get formatted with an image tag, like so:
Helpful addition from wallyqs:
While “naked” links don’t work (like http://www.google.com), angle links do work. This should look like a link: http://www.google.com.
It should be possible to use both kind of links on the same paragraph:
This is an angle link http://google.com and this is a bracket link to a repository.
This is a bracket link to a repository and this is an angle link http://google.com.
This is a bracket link to a repository and this is a bracket link too to a repository.
This is an angle link http://google.com and this is an angle link too http://google.com.


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Makes 9 large cupcakes
Please your little monsters with these cute Franken-cupcakes for a Halloween party. They can even help decorate!
Preheat the oven to 180C/350F/Gas 4. Line a muffin tray with 9 paper cases.
Sift the flour, cocoa powder and baking powder into a bowl. Add the sugar and butter and beat the mixture together until well combined.
Whisk in the egg and milk until the mixture is thick and smooth.
Divide the mixture between the paper case and bake in the oven for 20-25 minutes, or until springy to the touch and skewer inserted into the middle of one of the cakes comes out clean. Set aside to cool on a wire rack.
Put the butter into a large bowl and beat with an electric hand mixer until light and fluffy.
Sift in the icing sugar, then work it into the butter, starting slowly at first, then beating more vigorously once all the sugar is combined.
Add the milk and the vanilla, then beat until creamy and smooth.
Set aside 1 tablespoon of the icing to colour red. Colour the remaining icing green (you may need to add the tiniest amount of red to make an olive green colour).
Place a heaped tablespoon of icing on each cupcake. Use a palette knife to smooth the sides at an angle and flatten the top.
Decorate with licorice twists, candy eyes, crumbled flaked chocolate and chocolate sprinkles. Use the red icing to draw on stitches with a cocktail stick.


Hi! My name is Yugyeong Lee. I was born in Korea but grew up in the southern part of Texas. I graduated from Sharyland High School in 2015 and am currently studying architecture in Carnegie Mellon University as a first year student.
I am fascinated by the impact of architecture in human culture and how architecture involves multiple intelligences to work simultaneously in order to create an effective design. Aside from architecture, I have a strong passtion towards music.
For more information or questions, feel free to contact me!
(956)-358-2307


By working in parallel, jobs can be completed in hours, not days.
By slicing documents into snippets of text, there is no risk of widespread data leakage.
We charge per document, not per hour of time spent working.


Example AngularJS
Pagination
Addition
Subtraction
Example AngularJS Web
An example of web made with AngularJS


Stay Auspicious
A beautiful design crafted from pen to computer
Coded with HTML5, CSS3, & Javascript
24/7 Monitoring and unbeatable support
Reign Hookahs is a full-service mobile hookah catering company in Houston, Tx.
I was tasked with redesigning their website and incorporating a paid appointment system.
Darwin Jewelry Designs is an early stage jewelery company based in Los Angeles. I was tasked
with creating a logo and display it in a photo-realistic mock-up.
Dream Con is an anime convention bringing together like-minded individuals to enjoy
the festivities of Japanese culture as well as comics, gaming, art, music and more.
The event will take place from August 10-12, 2018 in Waco, Texas.
I was tasked with redesigning and maintaining their website.
Jay White Digital Media is a company which specializes in both photography and cinematography. I was tasked
with creating their online portolio.
© 2020 Shoko Designs


Address Book
First Name:
Last Name:
Telephone Number:
Add Contact
Display Contact
Delete Contact
Hide Contacts


Our primary purpose is to produce Banana
puree
and tropical fruit juices for the international markets.
We select the fruits carefully and count on proper technology to offer excellent
quality products.
The puree is made with the
same bananas found in the best supermarkets around
the world. The bananas are ripened carefully under strictly controlled conditions that assure
its
optimum flavour and aroma.
The manual peeling combined with the use of the best technology available
results
in:
We commit to our clients. No matter were you are.
We are passionate about delivering the best flavor around the world.
To grow the agro industrial sector in Honduras and to provide better living conditions for the population.
To be leaders in the international market of banana puree and tropical fruit juices, serving our clients with excellent and safe products
To deliver quality products observing all the necessary personal hygiene rules and applying a good manufacturing process to ensure complete satisfaction.


Facebook
Enter Facebook Token
Lets Go...!
Sections
Basics Details
About
Profile Picture
Education
Work
Posts
Basics Details
Name
Birthday
Inrested In
Languages
Gender
About
Quote
Mail
Profile Picture
Education Information
School :
College :
Work Information
Comapany Name
Position
Facebook Post Retrieval


InvocationHandler.invoke
that do not proxy standard
Object
methods like hashCode()
, equals()
, and toString()
.
Failing to handle these methods might cause unexpected problems upon calling them on a proxy instance.
Example:
Runnable myProxy = (Runnable) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] {Runnable.class}, (proxy, method, params) -> { System.out.println("Hello World!"); return null; });
The code snippet above is designed to only proxy the Runnable.run()
method. However, the calls to Object’s
virtual methods are dispatched as well, which may lead to problems like NullPointerException
on trying
to add myProxy
to a HashSet
.
New in 2020.2


January, 2014
March, 2013 + 1
Jess: Seems like statically it's getting impossible to achieve any sort of results in nearest future. The only thing we can hope for is pressing one of these two buttons:
$14,595
$7,647
73 at 14am
23.06.2013


Welcome to the Bus Mall!
Please add the items to your shopping cart.
Amount
Add to cart
Address:
Client Name
Street Name
City
Zip Code
Phone Number
Go to cart


1.The lyrics and the chords of the song must be written using microsoft notepad software. (Start menu-> All programs-> Accessories->notepad)
2.The lyrics of the songs must be written using english letters.
3.Only .text file format is allowed for the upload.
4.Tablatures must have the following formats.
5.Intros,interludes and solos are welcomed.


how to easily develop a non-blocking concurrent application ?Most programmers are good at a synchronous mode that be executed sequentially in a thread, In a blocking system, wait thread is idle but continue to consume system resources. here is a formula for high transaction volume:
Blocking system is running under a very ineffective mode. No high throughout, no high CPU load.blocking is not fit for multi-core CPU, and it is cancer that will kill the system later. when we read data from socket by this way:
To avoid synchronous lock and blocking, we need use "volatile" or "Visibility" and "immutable", they are maybe difficult for most programmers. A good way for non-blocking concurrent is queue of no lock, not JDK's BlockingQueue , the RingBuffer of Disruptor is a no-lock queue that can be shared between two threads. Actors mode is another non-blocking concurrent , it shares nothing. In a non-blocking concurrent system: make a call which returns a result. don't need to use the result until at a much later stage of your process. don't need to wait immediately after making the call, instead you can proceed to do other things until you reach the point where you need to use the result. the call itself will return a "future" handle immediately. The caller can go off doing other things and later poll the "future" handle to see if the response if ready. We can use Domain Events wrapping the RingBuffer of Disruptor, so threads communicates through events or messages, so no shared state, nothing to synchronize.this is Message-Passing Concurrency. we design Message-Passing Concurrency into open source jdon framework. the non-blocking concurrent way of jdon framework is here: Domain Model sends events to another thread(a consumer) by RingBuffer in Disruptor, so two threads can communicates through event ;After the consumer done, it will put the result in another RingBuffer that publisher can read or blocking read it, decided by business is or not executed sequentially. by domain events and DCI in jdon framework we make an exploratory to promote non-blocking concurrent programming paradigm. jdon framework can help most programmers quietly going to the way of non-blocking concurrent programming when they thinking in DDD. DCI and Domain Events are different abstract high levels based concurrent programming, DCI is easier to be understand than Domain Events , DCI and UML colors analysis method can successfully docking, it is the highest level of abstraction of business-oriented. here shows how to use DCI and Domain Events in jdon framework :
If we already hold on a model object, we can implements various functions by its domain events,such as modify/update a model.Otherwise:We create a context, and there we inject events or functions into a new model object by RoleAssigner,such as create or delete a model. details in : DDD DCI and Domain Events example
|
|


Javadoc is not applicable to a Scala project
This placeholder documentation is only here to meet the requirements of maven central


| lesson 53 In the Public interest |
| The Scandinavian countries are much admired all over the world for their enlightened social policies. |
| Sweden has evolved an excellent system for protecting the individual citizen from highhanded or incompetent public officers. |
| The system has worked so well, that it has been adopted in other countries too. |
| The Swedes were the first to recognize that public officials like civil servants, police officers, health inspectors or tax-collectors can make mistakes or act over-zealously in the belief that they are serving the public. |
| As long ago as 1809, the Swedish Parliament introduced a scheme to safeguard the interest of the individual. |
| A parliamentary committee representing all political parties appoints a person who is suitably qualified to investigate private grievances against the State. |
| The official title of the person is 'Justiteombudsman', but the Swedes commonly refer to him as the 'J. O. ' or 'Ombudsman'. |
| The Ombudsman is not subject to political pressure. |
| He investigates complaints large and small that come to him from all levels of society. |
| As complaints must be made in writing, the Ombudsman receives an average of 1, 200 letters a year. |
| He has eight lawyer assistants to help him and he examines every single letter in detail. |
| There is nothing secretive about the Ombudsman's work, for his correspondence is open to public inspection. |
| If a citizen's complaint is justified, the Ombudsman will act on his behalf. |
| The action he takes varies according to the nature of the complaint. |
| He may gently reprimand an official or even suggest to parliament that a law be altered. |
| The following case is a typical example of the Ombudsman's work. |
| A foreigner living in a Swedish village wrote to the Ombudsman complaining that he had been ill-treated by the police, |
| simply because he was a foreigner. |
| The Ombudsman immediately wrote to the Chief of Police in the district asking him to send a record of the case. |
| There was nothing in the record to show that the foreigner's complaint was justified and the Chief of Police strongly denied the accusation. |
| It was impossible for the Ombudsman to take action, |
| but when he received a similar complaint from another foreigner in the same village, |
| he immediately sent one of his layers to investigate the matter. |
| The lawyer ascertained that a policeman had indeed dealt roughly with foreigners on several occasions. |
| The fact that the policeman was prejudiced against foreigners could not be recorded in the official files. |
| It was only possible for the Ombudsman to find this out by sending one of his representatives to check the facts. |
| The policeman in question was severely reprimanded and was informed that if any further complaints were lodged against him, he would be prosecuted. |
| The Ombudsman's prompt action at once put an end to an unpleasant practice which might have gone unnoticed. |