In this project, you'll use generative adversarial networks to generate new images of faces.
You'll be using two datasets in this project:
Since the celebA dataset is complex and you're doing GANs in a project for the first time, we want you to test your neural network on MNIST before CelebA. Running the GANs on MNIST will allow you to see how well your model trains sooner.
If you're using FloydHub, set data_dir
to "/input" and use the FloydHub data ID "R5KrjnANiKVhLWAkpXhNBe".
data_dir = './data'
# FloydHub - Use with data ID "R5KrjnANiKVhLWAkpXhNBe"
#data_dir = '/input'
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
import helper
helper.download_extract('mnist', data_dir)
helper.download_extract('celeba', data_dir)
show_n_images = 25
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
%matplotlib inline
import os
from glob import glob
from matplotlib import pyplot
mnist_images = helper.get_batch(glob(os.path.join(data_dir, 'mnist/*.jpg'))[:show_n_images], 28, 28, 'L')
pyplot.imshow(helper.images_square_grid(mnist_images, 'L'), cmap='gray')
The CelebFaces Attributes Dataset (CelebA) dataset contains over 200,000 celebrity images with annotations. Since you're going to be generating faces, you won't need the annotations. You can view the first number of examples by changing show_n_images
.
show_n_images = 25
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
mnist_images = helper.get_batch(glob(os.path.join(data_dir, 'img_align_celeba/*.jpg'))[:show_n_images], 28, 28, 'RGB')
pyplot.imshow(helper.images_square_grid(mnist_images, 'RGB'))
Since the project's main focus is on building the GANs, we'll preprocess the data for you. The values of the MNIST and CelebA dataset will be in the range of -0.5 to 0.5 of 28x28 dimensional images. The CelebA images will be cropped to remove parts of the image that don't include a face, then resized down to 28x28.

You'll build the components necessary to build a GANs by implementing the following functions below:
model_inputs
discriminator
generator
model_loss
model_opt
train
This will check to make sure you have the correct version of TensorFlow and access to a GPU
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
from distutils.version import LooseVersion
import warnings
import tensorflow as tf
# Check TensorFlow Version
assert LooseVersion(tf.__version__) >= LooseVersion('1.0'), 'Please use TensorFlow version 1.0 or newer. You are using {}'.format(tf.__version__)
print('TensorFlow Version: {}'.format(tf.__version__))
# Check for a GPU
if not tf.test.gpu_device_name():
warnings.warn('No GPU found. Please use a GPU to train your neural network.')
else:
print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
Implement the model_inputs
function to create TF Placeholders for the Neural Network. It should create the following placeholders:
image_width
, image_height
, and image_channels
.z_dim
.Return the placeholders in the following the tuple (tensor of real input images, tensor of z data)
import problem_unittests as tests
def model_inputs(image_width, image_height, image_channels, z_dim):
"""
Create the model inputs
:param image_width: The input image width
:param image_height: The input image height
:param image_channels: The number of image channels
:param z_dim: The dimension of Z
:return: Tuple of (tensor of real input images, tensor of z data, learning rate)
"""
# TODO: Implement Function
inputs_real = tf.placeholder(tf.float32, (None, image_width, image_height, image_channels), name='input_real')
inputs_z = tf.placeholder(tf.float32, (None, z_dim), name='input_z')
learning_rate = tf.placeholder(tf.float32, name="learning_rate")
return inputs_real, inputs_z, learning_rate
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_inputs(model_inputs)
Implement discriminator
to create a discriminator neural network that discriminates on images
. This function should be able to reuse the variables in the neural network. Use tf.variable_scope
with a scope name of "discriminator" to allow the variables to be reused. The function should return a tuple of (tensor output of the discriminator, tensor logits of the discriminator).
def discriminator(images, reuse=False):
"""
Create the discriminator network
:param images: Tensor of input image(s)
:param reuse: Boolean if the weights should be reused
:return: Tuple of (tensor output of the discriminator, tensor logits of the discriminator)
"""
# TODO: Implement Function
with tf.variable_scope('discriminator', reuse=reuse):
alpha = 0.2
keep_prob = 0.5
# Input layer is 28x28x3
x1 = tf.layers.conv2d(images, 64, 5, strides=2, padding='same',
kernel_initializer=tf.contrib.layers.xavier_initializer())
relu1 = tf.maximum(alpha * x1, x1)
drop1 = tf.nn.dropout(relu1, keep_prob=keep_prob)
# 14x14x64
x2 = tf.layers.conv2d(drop1, 128, 5, strides=2, padding='same',
kernel_initializer=tf.contrib.layers.xavier_initializer())
bn2 = tf.layers.batch_normalization(x2, training=True)
relu2 = tf.maximum(alpha * bn2, bn2)
drop2 = tf.nn.dropout(relu2, keep_prob=keep_prob)
# 7x7x128
x3 = tf.layers.conv2d(relu2, 256, 5, strides=2, padding='same',
kernel_initializer=tf.contrib.layers.xavier_initializer())
bn3 = tf.layers.batch_normalization(x3, training=True)
relu3 = tf.maximum(alpha * bn3, bn3)
drop3 = tf.nn.dropout(relu3, keep_prob=keep_prob)
# 4x4x256
# Flatten it
flat = tf.reshape(drop3, (-1, 4*4*256))
logits = tf.layers.dense(flat, 1)
out = tf.sigmoid(logits)
return out, logits
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_discriminator(discriminator, tf)
Implement generator
to generate an image using z
. This function should be able to reuse the variables in the neural network. Use tf.variable_scope
with a scope name of "generator" to allow the variables to be reused. The function should return the generated 28 x 28 x out_channel_dim
images.
def generator(z, out_channel_dim, is_train=True):
"""
Create the generator network
:param z: Input z
:param out_channel_dim: The number of channels in the output image
:param is_train: Boolean if generator is being used for training
:return: The tensor output of the generator
"""
# TODO: Implement Function
with tf.variable_scope('generator', reuse=not is_train):
alpha = 0.2
keep_prob = 0.5
# First fully connected layer
x1 = tf.layers.dense(z, 7*7*256)
# Reshape it to start the convolutional stack
x1 = tf.reshape(x1, (-1, 7, 7, 256))
x1 = tf.layers.batch_normalization(x1, training=is_train)
x1 = tf.maximum(alpha * x1, x1)
x1 = tf.nn.dropout(x1, keep_prob=keep_prob)
# 4x4x256 now
x2 = tf.layers.conv2d_transpose(x1, 128, 5, strides=2, padding='same')
x2 = tf.layers.batch_normalization(x2, training=is_train)
x2 = tf.maximum(alpha * x2, x2)
x2 = tf.nn.dropout(x2, keep_prob=keep_prob)
# 14x14x128 now
x3 = tf.layers.conv2d_transpose(x2, 64, 5, strides=2, padding='same')
x3 = tf.layers.batch_normalization(x3, training=is_train)
x3 = tf.maximum(alpha * x3, x3)
x3 = tf.nn.dropout(x3, keep_prob=keep_prob)
# 28x28x64 now
# Output layer
logits = tf.layers.conv2d_transpose(x3, out_channel_dim, 5, strides=1, padding='same')
# 28x28x3 now
out = tf.tanh(logits)
return out
return None
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_generator(generator, tf)
Implement model_loss
to build the GANs for training and calculate the loss. The function should return a tuple of (discriminator loss, generator loss). Use the following functions you implemented:
discriminator(images, reuse=False)
generator(z, out_channel_dim, is_train=True)
def model_loss(input_real, input_z, out_channel_dim):
"""
Get the loss for the discriminator and generator
:param input_real: Images from the real dataset
:param input_z: Z input
:param out_channel_dim: The number of channels in the output image
:return: A tuple of (discriminator loss, generator loss)
"""
# TODO: Implement Function
g_model = generator(input_z, out_channel_dim, is_train=True)
d_model_real, d_logits_real = discriminator(input_real, reuse=False)
d_model_fake, d_logits_fake = discriminator(g_model, reuse=True)
d_loss_real = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_real, labels=tf.ones_like(d_model_real) * 0.9))
d_loss_fake = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.zeros_like(d_model_fake)))
g_loss = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.ones_like(d_model_fake)))
d_loss = d_loss_real + d_loss_fake
return d_loss, g_loss
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_loss(model_loss)
Implement model_opt
to create the optimization operations for the GANs. Use tf.trainable_variables
to get all the trainable variables. Filter the variables with names that are in the discriminator and generator scope names. The function should return a tuple of (discriminator training operation, generator training operation).
def model_opt(d_loss, g_loss, learning_rate, beta1):
"""
Get optimization operations
:param d_loss: Discriminator loss Tensor
:param g_loss: Generator loss Tensor
:param learning_rate: Learning Rate Placeholder
:param beta1: The exponential decay rate for the 1st moment in the optimizer
:return: A tuple of (discriminator training operation, generator training operation)
"""
# TODO: Implement Function
# Get weights and bias to update
t_vars = tf.trainable_variables()
d_vars = [var for var in t_vars if var.name.startswith('discriminator')]
g_vars = [var for var in t_vars if var.name.startswith('generator')]
# Optimize
with tf.control_dependencies(tf.get_collection(tf.GraphKeys.UPDATE_OPS)):
d_train_opt = tf.train.AdamOptimizer(learning_rate, beta1=beta1).minimize(d_loss, var_list=d_vars)
g_train_opt = tf.train.AdamOptimizer(learning_rate, beta1=beta1).minimize(g_loss, var_list=g_vars)
return d_train_opt, g_train_opt
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_opt(model_opt, tf)
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
import numpy as np
def show_generator_output(sess, n_images, input_z, out_channel_dim, image_mode):
"""
Show example output for the generator
:param sess: TensorFlow session
:param n_images: Number of Images to display
:param input_z: Input Z Tensor
:param out_channel_dim: The number of channels in the output image
:param image_mode: The mode to use for images ("RGB" or "L")
"""
cmap = None if image_mode == 'RGB' else 'gray'
z_dim = input_z.get_shape().as_list()[-1]
example_z = np.random.uniform(-1, 1, size=[n_images, z_dim])
samples = sess.run(
generator(input_z, out_channel_dim, False),
feed_dict={input_z: example_z})
images_grid = helper.images_square_grid(samples, image_mode)
pyplot.imshow(images_grid, cmap=cmap)
pyplot.show()
Implement train
to build and train the GANs. Use the following functions you implemented:
model_inputs(image_width, image_height, image_channels, z_dim)
model_loss(input_real, input_z, out_channel_dim)
model_opt(d_loss, g_loss, learning_rate, beta1)
Use the show_generator_output
to show generator
output while you train. Running show_generator_output
for every batch will drastically increase training time and increase the size of the notebook. It's recommended to print the generator
output every 100 batches.
def train(epoch_count, batch_size, z_dim, learning_rate, beta1, get_batches, data_shape, data_image_mode):
"""
Train the GAN
:param epoch_count: Number of epochs
:param batch_size: Batch Size
:param z_dim: Z dimension
:param learning_rate: Learning Rate
:param beta1: The exponential decay rate for the 1st moment in the optimizer
:param get_batches: Function to get batches
:param data_shape: Shape of the data
:param data_image_mode: The image mode to use for images ("RGB" or "L")
"""
# TODO: Build Model
input_real, input_z, _ = model_inputs(data_shape[1], data_shape[2], data_shape[3], z_dim)
d_loss, g_loss = model_loss(input_real, input_z, data_shape[3])
d_train_opt, g_train_opt = model_opt(d_loss, g_loss, learning_rate, beta1)
steps = 0
print_every=10
show_every=100
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch_i in range(epoch_count):
for batch_images in get_batches(batch_size):
# TODO: Train Model
steps += 1
# Images are in the range [-0.5,+0.5] and need to be rescaled to [-1,+1].
batch_images = batch_images * 2
# Sample random noise for G
batch_z = np.random.uniform(-1, 1, size=(batch_size, z_dim))
# Run optimizers
_ = sess.run(d_train_opt, feed_dict={input_real: batch_images, input_z: batch_z})
# Run g_opt twice to make sure that d_loss does not go to zero
# as explained here: http://bamos.github.io/2016/08/09/deep-completion/
# and here: https://github.com/carpedm20/DCGAN-tensorflow
_ = sess.run(g_train_opt, feed_dict={input_real: batch_images, input_z: batch_z})
_ = sess.run(g_train_opt, feed_dict={input_real: batch_images, input_z: batch_z})
if steps % print_every == 0:
train_loss_d = d_loss.eval({input_z: batch_z, input_real: batch_images})
train_loss_g = g_loss.eval({input_z: batch_z})
print("Epoch {}/{}...".format(epoch_i + 1, epochs),
"Discriminator Loss: {:.4f}...".format(train_loss_d),
"Generator Loss: {:.4f}".format(train_loss_g))
if steps % show_every == 0:
show_generator_output(sess, 25, input_z, data_shape[3], data_image_mode)
Test your GANs architecture on MNIST. After 2 epochs, the GANs should be able to generate images that look like handwritten digits. Make sure the loss of the generator is lower than the loss of the discriminator or close to 0.
batch_size = 32
z_dim = 100
learning_rate = 0.0002
beta1 = 0.5
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
epochs = 2
mnist_dataset = helper.Dataset('mnist', glob(os.path.join(data_dir, 'mnist/*.jpg')))
with tf.Graph().as_default():
train(epochs, batch_size, z_dim, learning_rate, beta1, mnist_dataset.get_batches,
mnist_dataset.shape, mnist_dataset.image_mode)
Run your GANs on CelebA. It will take around 20 minutes on the average GPU to run one epoch. You can run the whole epoch or stop when it starts to generate realistic faces.
batch_size = 32
z_dim = 100
learning_rate = 0.0002
beta1 = 0.5
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
epochs = 1
celeba_dataset = helper.Dataset('celeba', glob(os.path.join(data_dir, 'img_align_celeba/*.jpg')))
with tf.Graph().as_default():
train(epochs, batch_size, z_dim, learning_rate, beta1, celeba_dataset.get_batches,
celeba_dataset.shape, celeba_dataset.image_mode)
When submitting this project, make sure to run all the cells before saving the notebook. Save the notebook file as "dlnd_face_generation.ipynb" and save it as a HTML file under "File" -> "Download as". Include the "helper.py" and "problem_unittests.py" files in your submission.


Location Searched: {{ weatherData?.name }}
Weather: {{ weatherData?.weather[0].main }}
Current: {{ weatherData?.main.temp }}


Hello! I'm Alessandra Burckhalter and I'm happy that you are here.
It's kinda hard to talk about ourselves, isn't it? Well, I will try my best.
I was born and raised in Brazil. I've been living in the USA for about 3 years.
Life is always changing for me, which is not a bad thing. I like to discover and learn new things.
Now my new change is focused on my career. I decided to venture into the world of technology and it's been fun.
I'm very excited about this new chapter in my life. It is never too late to start something new.


Trump considering whether Apple should be exempt from China tariffs
TEXAS, Nov 21 — President Donald Trump said yesterday after touring a plant that assembles Apple Inc computers that he was considering whether to exempt the US company from tariffs on imports from China.
“We’re looking at that,” Trump said in answer to a reporter’s question about the tariffs, after touring a plant in Austin, Texas, with Apple chief executive Tim Cook that assembles the company’s Mac Pro desktop computers.
Cook, who has a strong relationship with Trump, has sought relief for Apple from the US tariffs, which are part of a months-long tit-for-tat trade war between the world’s largest economies.
“The problem we have is you have Samsung. It’s a great company but it’s a competitor of Apple, and it’s not fair if, because we have a trade deal with Korea — we made a great trade deal with South Korea — but we have to treat Apple on a somewhat similar basis as we treat Samsung,” Trump said.
Apple announced in September it would make its new Mac Pro computers in Austin. The announcement came days after US trade regulators approved 10 out of 15 requests for tariff exemptions filed by Apple amid a broader reprieve on levies on computer parts.
Earlier this month, Apple also asked the Trump administration to waive tariffs on Chinese-made Apple Watches, iPhone components and other consumer products.
Trump has made boosting the US manufacturing sector one of the goals of his presidency, taking to Twitter to pressure US companies into keeping jobs at home.
Earlier yesterday, Apple said it had started construction of a new campus in Austin that will employ 5,000 workers, with the capacity to grow to 15,000. It is expected to open in 2022. — Reuters


In this example, we will use cinema_lib command line tools to find contours in slices of Nyx data. These contours correspond to dark matter halos and connecting filaments.
Be sure that cinema command line tools have been installed.
$ cd /<path-to-repo>/cinema_tutorial_2019-11_SC/materials/data/nyx
$ cinema -itvq -d slices.cdb
Take note of the column names (timestep, slice, FILE) and associated column numbers.
This workflow will use the command line tools library, cinema_lib, to extract statistical properties from the data and to find and draw isolines to identify features - halos - in the data.
The computer vision based operations use openCV. The -cv-grey option takes the column number of the image as its argument. This database has three columns:
timestep,slice,FILE
First convert the database image to greyscale. Note from validating the database that FILE has column=2:
$ cinema -d slices.cdb --cv-grey 2
You can check the database column headers if you want. Notice the added column with the greyscale image.
$ cinema -i -d slices.cdb
Each command line directive adds an output column to the Cinema database, creating an updated data.csv.
Now run a series of statistical calculations, each adding a column and moving the FILE column farther down:
$ cinema -d slices.cdb --image-mean 3
$ cinema -d slices.cdb --image-stddev 4
$ cinema -d slices.cdb --image-entropy 5
Now run the contour finding algorithm. This takes two arguments: the column number of the FILE image and a contour threshold. Run it twice to compare different thresholds:
$ cinema -d slices.cdb --cv-contour-threshold 5 70
$ cinema -d slices.cdb --cv-contour-threshold 5 45
Open CinemaCompare in Firefox:
$ firefox /<path-to-repo>/cinema_tutorial_2019-11_SC/materials/cinema_explorer.html
Use the parallel coordinates to select on the different parameters and explore the output database. The dropdown Select Database menu can be used to check the original database (before this workflow) and a finished database (after this workflow) to see if your output is as expected. Be sure to click Load after selecting a specific database.


"x" "1" "SMITH,C, PAYNE,V, DOOLITTLE,DJ, DEBNATH,AK, LAWLOR,T AND HANSCH,C,MUTAGENIC ACTIVITY OF A SERIES OF SYNTHETIC AND NATURALLY OCCURRING HETEROCYCLICAMINES IN SALMONELLA, MUTAT. RES. 279(1):61-73, 1992"


Event Study¶
-
class
finmarketpy.economics.eventstudy.
EventStudy
¶ Provides functions for doing event studies on price action on an intraday basis and daily basis.
-
get_economic_event_ret_over_custom_event_day
(data_frame_in, event_dates, name, event, start, end, lagged=False, NYC_cutoff=10)¶
-
get_intraday_moves_over_custom_event
(data_frame_rets, ef_time_frame, vol=False, minute_start=5, mins=180, min_offset=0, create_index=False, resample=False, freq='minutes', cumsum=True)¶
-
get_surprise_against_intraday_moves_over_custom_event
(data_frame_cross_orig, ef_time_frame, cross, event_fx, event_name, start, end, offset_list=[1, 5, 30, 60], add_surprise=False, surprise_field='survey-average', freq='minutes')¶
-
-
class
finmarketpy.economics.eventstudy.
EventsFactory
(df=None)¶ Provides methods to fetch data on economic data events and to perform basic event studies for market data around these events. Note, requires a file of input of the following (transposed as columns!) - we give an example for NFP released on 7 Feb 2003 (note, that release-date-time-full, need not be fully aligned by row).
USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.Date 31/01/2003 00:00 USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.close xyz USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.actual-release 143 USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.survey-median xyz USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.survey-average xyz USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.survey-high xyz USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.survey-low xyz USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.survey-high.1 xyz USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.number-observations xyz USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.first-revision 185 USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.first-revision-date 20030307 USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.release-dt 20030207 USD-US Employees on Nonfarm Payrolls Total MoM Net Change SA.release-date-time-full 08/01/1999 13:30
-
create_event_desciptor_field
(name, event, field)¶
-
dump_economic_events_csv
(path)¶
-
get_all_economic_events
()¶
-
get_all_economic_events_date_time
()¶
-
get_daily_moves_over_event
()¶
-
get_economic_event_date
(name, event=None)¶
-
get_economic_event_date_time
(name, event=None, csv=None)¶
-
get_economic_event_date_time_dataframe
(name, event=None, csv=None)¶
-
get_economic_event_date_time_fields
(fields, name, event=None)¶
-
get_economic_event_ret_over_custom_event_day
(data_frame_in, name, event, start, end, lagged=False, NYC_cutoff=10)¶
-
get_economic_event_vol_over_event_day
(vol_in, name, event, start, end, realised=False)¶
-
get_economic_events
()¶
-
get_intraday_moves_over_event
(data_frame_rets, cross, event_fx, event_name, start, end, vol, mins=180, min_offset=0, create_index=False, resample=False, freq='minutes')¶
-
get_surprise_against_intraday_moves_over_event
(data_frame_cross_orig, cross, event_fx, event_name, start, end, offset_list=[1, 5, 30, 60], add_surprise=False, surprise_field='survey-average')¶
-
harvest_category
(category_name)¶
-
load_economic_events
()¶
-


Trump: US to hike tariffs if no China trade deal is reached
The United States would raise tariffs on Chinese imports if no deal is reached with Beijing to end a trade war, US President Donald Trump said, threatening an escalation of the spat that has damaged economic growth worldwide.
Speaking at a cabinet meeting at the White House on Tuesday, Trump said he has a good relationship with China, noting that China is “moving along”. However, he said China would have to make a deal “I like”.
“If we don’t make a deal with China, I’ll just raise the tariffs even higher,” he told a room filled with senior US officials.
The US and China have been locked in successive waves of tit-for-tat tariffs that have roiled financial markets and threatened to drag growth in the global economy to its lowest rate since the 2007-2008 financial crisis.
Hopes were high that a partial trade deal could be signed at a summit in Santiago, Chile that was scheduled for mid-November. The summit was canceled amid unrest in Chile and a path forward for a deal remains unclear.
Sticking points include how and when to reduce tariffs and how much US agricultural products China would commit to buy.
White House economic adviser Larry Kudlow said last week that the two countries were getting close to an agreement to end the 16-month-long trade war, but he gave no further details on the timing of a possible deal.
Still, Chinese state media outlet Xinhua said “constructive talks” were held by phone on Saturday between China’s Vice Premier Liu He, US Trade Representative Robert Lighthizer and Treasury Secretary Steven Mnuchin. Reuters
– Contact us at<EMAIL_ADDRESS>CG


INPUT
What kind of donut would you like:
Would you like sprinkles (Yes/No):
How 'bout extra glaze on that donut (Yes/No):
Would you like to wash all that down with a cup of coffee:
OUTPUT


"9.43/10" - IGN
Relocate your home to a cloud. We dissect and retrofit your room to fit into a standard commercial airliner, allowing you (and others) access to your home from around the globe.
We work with real humans, not bots. Take advantage of our service-as-a-service (SaaS) and drag-and-drop your home - or a friend's home - into the cloud.
With a quick tweaking of parameters, we'll reconstruct your home at larger scales. Want a 3x scale-up for your ant-sized home? No problem.
*Once we hire iOS, Android and TI-83 developers.
(This website is a parody. Unless you want to invest - in which case we're opening up our Series A round to VC firms soon.)


PONG
FELLOWS
Home
Game Setup
Records
About Us
Rules
Team Name
VS
--
New Opponent
Game Length
11
15
21
Start Game


Jonny Bairstow added to England squad for New Zealand Test series
| England's tour of New Zealand |
|---|
| Coverage: Ball-by-ball Test Match Special commentary on BBC Radio 5 Live Sports Extra, Radio 4 LW (Tests only), online, tablets, mobiles and BBC Sport app; live text commentary on the BBC Sport website |
Jonny Bairstow has been added to the England Test squad for the two-match series in New Zealand as back-up for the injured Joe Denly.
Following the conclusion of the five-match Twenty20 international series on Sunday, Bairstow will stay for the two warm-up matches against New Zealand Cricket XI.
The first match starts in Whangarei on Tuesday (22:00 GMT on Monday).
Denly sustained ligament damage to his right ankle in practice last week.
The Kent batsman is making progress on his rehabilitation and is hoping that he will be fit to play in the second three-day warm-up match, starting on Friday, 15 November (22:00 GMT on 14 November).
England's Test specialists arrived in Auckland this week and will travel to Whangarei on Monday with the rest of the squad and management.
New Zealand hold a 2-1 series lead before the fourth Twenty20 international in Napier on Friday (05:00 GMT).