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
real_input = tf.placeholder(tf.float32, (None, image_width, image_height, image_channels), name='real_input')
z_input = tf.placeholder(tf.float32, (None, z_dim), name='z_input')
lr = tf.placeholder(tf.float32, name='lr')
return real_input, z_input, lr
"""
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
alpha = 0.2
with tf.variable_scope('discriminator', reuse=reuse):
conv1 = tf.layers.conv2d(images, 64, 5, 2, padding='same')
conv1 = tf.maximum(alpha * conv1, conv1)
#print(conv1.get_shape().as_list())
conv2 = tf.layers.conv2d(conv1, 128, 5, 2, padding='same')
conv2 = tf.layers.batch_normalization(conv2, training=True)
conv2 = tf.maximum(alpha * conv2, conv2)
#print(conv2.get_shape().as_list())
conv3 = tf.layers.conv2d(conv2, 256, 5, 2, padding='same')
conv3 = tf.layers.batch_normalization(conv3, training=True)
conv3 = tf.maximum(alpha * conv3, conv3)
#print(conv3.get_shape().as_list())
conv4 = tf.layers.conv2d(conv3, 512, 5, 1, padding='same')
conv4 = tf.layers.batch_normalization(conv4, training=True)
conv4 = tf.maximum(alpha * conv4, conv4)
#print(conv4.get_shape().as_list())
dimensions = conv4.get_shape().as_list()
flatten = tf.reshape(conv4, (-1, dimensions[1]*dimensions[2]*dimensions[3]))
logits = tf.layers.dense(flatten, 1)
out = tf.nn.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
alpha = 0.2
with tf.variable_scope('generator', reuse=not is_train):
dense = tf.layers.dense(z, 2*2*1024)
dense = tf.reshape(dense, (-1, 2, 2, 1024))
dense_norm = tf.layers.batch_normalization(dense, training=is_train)
dense_relu = tf.maximum(alpha * dense_norm, dense_norm)
#dense_relu = tf.nn.relu(dense_norm)
#print(dense_relu.get_shape().as_list())
conv1 = tf.layers.conv2d_transpose(dense_relu, 512, 5, 2, padding='SAME')
#print(conv1.get_shape().as_list())
conv1_norm = tf.layers.batch_normalization(conv1, training=is_train)
conv1_relu = tf.maximum(alpha * conv1_norm, conv1_norm)
#conv1_relu = tf.nn.relu(conv1_norm)
#print(conv1_relu.get_shape().as_list())
conv2 = tf.layers.conv2d_transpose(conv1_relu, 256, 4, 1, padding='VALID')
#print(conv2.get_shape().as_list())
conv2_norm = tf.layers.batch_normalization(conv2, training=is_train)
conv2_relu = tf.maximum(alpha * conv2_norm, conv2_norm)
#conv1_relu = tf.nn.relu(conv1_norm)
#print(conv2_relu.get_shape().as_list())
conv3 = tf.layers.conv2d_transpose(conv2_relu, 128, 5, 2, padding='SAME')
#print(conv3.get_shape().as_list())
conv3_norm = tf.layers.batch_normalization(conv3, training=is_train)
conv3_relu = tf.maximum(alpha * conv3_norm, conv3_norm)
#conv2_relu = tf.nn.relu(conv2_norm)
#print(conv3_relu.get_shape().as_list())
conv4 = tf.layers.conv2d_transpose(conv3_relu, out_channel_dim, 5, 2, padding='SAME')
#print(conv4.get_shape().as_list())
output = tf.nn.tanh(conv4)
return output
"""
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)
#Perform label smoothing as advised here: https://github.com/soumith/ganhacks#6-use-soft-and-noisy-labels
real_label_dim = d_model_real.get_shape().as_list()[1]
real_labels_smoothed = tf.random_uniform([real_label_dim], 0.7, 1.2)
real_labels_smoothed = tf.reshape(real_labels_smoothed, (-1, real_label_dim))
fake_label_dim = d_model_fake.get_shape().as_list()[1]
fake_labels_smoothed = tf.random_uniform([fake_label_dim], 0, 0.3)
fake_labels_smoothed = tf.reshape(fake_labels_smoothed, (-1, fake_label_dim))
fake_labels_smoothed_ones = tf.random_uniform([fake_label_dim], 0.7, 1.2)
fake_labels_smoothed_ones = tf.reshape(fake_labels_smoothed_ones, (-1, fake_label_dim))
d_loss_real = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_real,
labels=real_labels_smoothed))
#labels=tf.ones_like(d_model_real)*(1-smooth)))
d_loss_fake = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake,
labels=fake_labels_smoothed))
#labels=tf.zeros_like(d_model_real)))
g_loss = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake,
labels=fake_labels_smoothed_ones))
#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
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')]
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
real_input, z_input, lr = model_inputs(*data_shape[1:], z_dim)
d_loss, g_loss = model_loss(real_input, z_input, data_shape[3])
d_train_opt, g_train_opt = model_opt(d_loss, g_loss, learning_rate, beta1)
steps = 0
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
num_gen = 1
batch_z = np.random.uniform(-1, 1, size=(num_gen, batch_size, z_dim))
#normalize images from (-0.5, 0.5) to (-1, 1)
batch_images = batch_images * 2
sess.run(d_train_opt, feed_dict={real_input: batch_images, z_input: batch_z[0]})
for i in range(num_gen):
sess.run(g_train_opt, feed_dict={z_input: batch_z[i], real_input: batch_images})
if steps % 20 == 0:
# At the end of each epoch, get the losses and print them out
train_loss_d = d_loss.eval({z_input: batch_z[0], real_input: batch_images})
train_loss_g = g_loss.eval({z_input: batch_z[0]})
print("Epoch {}/{}...".format(epoch_i+1, epochs),
"Discriminator Loss: {:.4f}...".format(train_loss_d),
"Generator Loss: {:.4f}".format(train_loss_g))
if steps%150 == 0:
show_generator_output(sess, 25, z_input, 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 = 16
z_dim = 128
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 = 16
z_dim = 128
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.


Logo
Home
Services
Contact Us
Home
Services
Contact Us
menu
Contact
account_circle
First Name
phone
Email
mode_edit
Message
Send
send


auxiliary¶
- pilot.util.auxiliary.check_for_final_server_update(update_server)[source]¶
Do not set graceful stop if pilot has not finished sending the final job update i.e. wait until SERVER_UPDATE is DONE_FINAL. This function sleeps for a maximum of 20*30 s until SERVER_UPDATE env variable has been set to SERVER_UPDATE_FINAL.
- Parameters
update_server – args.update_server boolean.
- Returns
- pilot.util.auxiliary.convert_to_pilot_error_code(exit_code)[source]¶
This conversion function is used to revert a batch system exit code back to a pilot error code. Note: the function is used by Harvester.
- Parameters
exit_code – batch system exit code (int).
- Returns
pilot error code (int).
- pilot.util.auxiliary.cut_output(txt, cutat=1024, separator='\n[...]\n')[source]¶
Cut the given string if longer that 2*cutat value.
- Parameters
txt – text to be cut at position cutat (string).
cutat – max length of uncut text (int).
separator – separator text (string).
- Returns
cut text (string).
- pilot.util.auxiliary.display_architecture_info()[source]¶
Display OS/architecture information. The function attempts to use the lsb_release -a command if available. If that is not available, it will dump the contents of
- Returns
- pilot.util.auxiliary.extract_memory_usage_value(output)[source]¶
Extract the memory usage value from the ps output (in kB).
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND # usatlas1 13917 1.5 0.0 1324968 152832 ? Sl 09:33 2:55 /bin/python2 .. # -> 152832 (kB)
- Parameters
output – ps output (string).
- Returns
memory value in kB (int).
- pilot.util.auxiliary.get_batchsystem_jobid()[source]¶
Identify and return the batch system job id (will be reported to the server)
- Returns
batch system job id
- pilot.util.auxiliary.get_error_code_translation_dictionary()[source]¶
Define the error code translation dictionary.
- Returns
populated error code translation dictionary.
- pilot.util.auxiliary.get_job_scheduler_id()[source]¶
Get the job scheduler id from the environment variable PANDA_JSID
- Returns
job scheduler id (string)
- pilot.util.auxiliary.get_logger(job_id, log=None)[source]¶
Return the logger object. Use this function to get the proper logger object. It relies on a python 2.7 function, getChild(), but if the queue is only using Python 2.6, the standard logger object will be returned instead.
WARNING: it seems using this function can lead to severe memory leaks (multiple GB) in some jobs. Do not use. Keep this definition for possible later investigation.
- Parameters
jod_id – PanDA job id (string).
- Returns
logger object.
- pilot.util.auxiliary.get_memory_usage(pid)[source]¶
Return the memory usage string (ps auxf <pid>) for the given process.
- Parameters
pid – process id (int).
- Returns
ps exit code (int), stderr (strint), stdout (string).
- pilot.util.auxiliary.get_object_size(obj, seen=None)[source]¶
Recursively find the size of any objects
- Parameters
obj – object.
- pilot.util.auxiliary.get_pilot_id()[source]¶
Get the pilot id from the environment variable GTAG
- Returns
pilot id (string)
- pilot.util.auxiliary.get_pilot_state(job=None)[source]¶
Return the current pilot (job) state. If the job object does not exist, the environmental variable PILOT_JOB_STATE will be queried instead.
- Parameters
job –
- Returns
pilot (job) state (string).
- pilot.util.auxiliary.get_resource_name()[source]¶
Return the name of the resource (only set for HPC resources; e.g. Cori, otherwise return ‘grid’).
- Returns
resource_name (string).
- pilot.util.auxiliary.get_size(obj_0)[source]¶
Recursively iterate to sum size of object & members. Note: for size measurement to work, the object must have set the data members in the __init__().
- Parameters
obj_0 – object to be measured.
- Returns
size in Bytes (int).
- pilot.util.auxiliary.is_virtual_machine()[source]¶
Are we running in a virtual machine? If we are running inside a VM, then linux will put ‘hypervisor’ in cpuinfo. This function looks for the presence of that.
- Returns
boolean.
- pilot.util.auxiliary.set_pilot_state(job=None, state='')[source]¶
Set the internal pilot state. Note: this function should update the global/singleton object but currently uses an environmental variable (PILOT_JOB_STATE). The function does not update job.state if it is already set to finished or failed. The environmental variable PILOT_JOB_STATE will always be set, in case the job object does not exist.
- Parameters
job – optional job object.
state – internal pilot state (string).
- Returns
- pilot.util.auxiliary.shell_exit_code(exit_code)[source]¶
Translate the pilot exit code to a proper exit code for the shell (wrapper). Any error code that is to be converted by this function, should be added to the traces object like:
traces.pilot[‘error_code’] = errors.<ERRORCODE>
The traces object will be checked by the pilot module.
- Parameters
exit_code – pilot error code (int).
- Returns
standard shell exit code (int).


This challenge allows you to practice the concepts and techniques learned over the past week and apply them in a concrete project. This Sprint explored advanced CSS techniques using Responsive Design and Preprocessing. During this Sprint, you studied how to use the viewport meta tag, media queries, setting up a preprocessor, and advanced use of preprocessing techniques. In your challenge this week, you will demonstrate proficiency by updating a website that is missing content as well as adding mobile styling.
Read these instructions carefully. Understand exactly what is expected before starting this Sprint Challenge.
This is an individual assessment. All work must be your own. Your challenge score is a measure of your ability to work independently using the material covered through this sprint. You need to demonstrate proficiency in the concepts and objectives introduced and practiced in preceding days.
You are not allowed to collaborate during the Sprint Challenge. However, you are encouraged to follow the twenty-minute rule and seek support from your PM and Instructor in your cohort help channel on Slack. Your work reflects your proficiency in advanced css and your command of the concepts and techniques in responsive web design and preprocessing.
You have three hours to complete this challenge. Plan your time accordingly.
Commit your code regularly and meaningfully. This helps both you (in case you ever need to return to old code for any number of reasons) and your project manager.
The client for this challenge is Spacewalkers Magazine. Spacewalkers needs your help to build a small proof of concept website for their marketing team. They have provided designs for both desktop and phone views. In addition to designs and content they have most of the home page coded for you. You just need to finish the navigation and header as well as the mobile styles.
In meeting the minimum viable product (MVP) specifications listed below, your web page should look like the solution design files of the desktop and mobile views:
Click here to review the home design
Click here to review the mobile design
Demonstrate your understanding of this week’s concepts by answering the following free-form questions.
Edit this document to include your answers after each question. Make sure to leave a blank line above and below your answer so it is clear and easy to read by your project manager
Adaptive websites kind of tries it best to adapt to every screen(like using responsive fexbox properties on the desktop version) but most likely it will look quite broken on other screen sizes despite trying to adapt to it. A fully resposnive website works at it’s best on all: whether desktop, tablet or mobile as well as everything in between.
Desktop first meaning you first build your CSS to make a webpage look good on desktop and then use max-width to go slowly smaller and smaller. Mobile first is the opposite where you make a webpage look good small and then expand it slowly for every screen using min-width.
font-size: 62.5%
in the html
tag do for us when using rem
units?
It sets a standard of 10px essencially, thus allowing us to make easy calculations(I’m still using em’s and guessing, can’ stop myself :D)
Is it the one w/ SASS and LESS? It re-compiles your written SASS/LESS code into standrd CSS, by doing it it makes lives of developers easier.
I love how it lets me automate stuff by re-using mixins & using parametic mixins!
You are expected to be able to answer all these questions. Your responses contribute to your Sprint Challenge grade. Skipping this section will prevent you from passing this challenge.
Follow these steps to set up your project:
<firstName-lastName>
.
<firstName-lastName>
branch, committing changes regularly.
<firstName-lastName>
.
Follow these steps for completing your project.
lessc -v
in your terminal, if you don’t get a version message back, reach out to your project manager for help.
cd
command
less-watch-compiler less css index.less
background-color
on the html
selector to red
in your index.less
file.
Your finished project must include all of the following requirements:
index.less
file. Notice the file is blank. You have been asked to use a certain import order. That order is as follows:
1.variables.less
2.mixins.less
3.reset.less
4.global.less
5.navigation.less
6.footer.less
7.home-page.less
You will know everything is working properly when you see the styles enabled for the provided content.
[ ] Take 10 minutes to review the code that has already been provided for you. Take time to see how the home page was built.
[ ] Add a viewport meta tag to the head of your index.html page
[ ] Review the provided home desktop design file. You are to build the missing navigation system and header image. You have been provided all content necessary in the index.html file
[ ] Navigation Styles: Use the navigation.less
file for styling.
[ ] Main Content Styles: Use the home-page.less
file for styling
[ ] LESS Mixins: Create and use 2 different mixins to aid your styling. Use the mixins.less
file for your mixins
[ ] LESS Parametric Mixin: create a parametric mixin that is used to create the sign up
button styles.
[ ] Use at least 2 parameters to create your button
[ ] Create a hover state that swaps the background color and font color of the base button styles.
[ ] Create a @phone
variable that contains a max-width: 500px
media query string. Use the @phone
variable for all your nested mobile styling.
[ ] Review the provided home mobile design file. Match your mobile styling the best you can using the design file.
[ ] Push your changes and create a pull request if you haven’t already.
In your solution, it is essential that you follow best practices and produce clean and professional results. Schedule time to review, refine, and assess your work and perform basic professional polishing including spell-checking and grammar-checking on your work. It is better to submit a challenge that meets MVP than one that attempts too much and does not.
After finishing your required elements, you can push your work further. These goals may or may not be things you have learned in this module but they build on the material you just studied. Time allowing, stretch your limits and see if you can deliver on the following optional goals:
[ ] Build a page of your choosing from the navigation items. Come up with content and images that fit the theme.
[ ] Introduce CSS animations to your site.
[ ] Create a fixed navigation and add some opacity to the background
[ ] Create a form that would allow someone to sign up for a Spacewalkers Magazine subscription


rotten > Library > Sex > Rolodex of Love
The Rolodex of Love
The following sexual acts and descriptions are part of a fad that has run through the internet, that of coming up with the most terms for whatever extreme things you could do in bed with your partner. Most of them were born with the 21st century but some are decades old. They are generally crude, rude, and nasty to women; if you find them that way, don't do them. Thank you.
 When she gets up she'll look like
an angry dragon.

The Bait N' Tackle
The sailors used this one in the old Navy days. Before you go off for a
long, lonely voyage, get yourself a tall jar and fill it completely with
earthworms.  The earthworms will provide some slithery stimulation, and your protein load
will keep them nicely fed. Gone fishing!
Ballsacking
Takes some luck of the gene pool, but if you're able to do it, always great fun. While you are straddling her, take your nutsack and spread it out over her face like pizza dough. See also Teabagging.

Beef Curtain
The shanked out remains of the labia after being stretched like
Play-Doh from an hour or so of jimmy-jam.
Beer Dick
This is what most guys get after a good night of drinking.
Blumpy
You need to find a real tramp to do this right.
The Bronco
You start by going doggy style and then just when she is really
enjoying it, you grab her tits as tight as possible and yell another girls name. This gives you the feeling of riding a wild bronco as she desperately tries to buck you off.

Brunski
When a man puts his face between a woman's breasts and quickly moves his head back and forth while saying "Brunski" in a very drawn out and exaggerated manner. (There are many other variant names.)
The Bullwinkle
The sign given to a friend in hiding while doggie styling' some chick. It is performed by placing both hands over the head, with palms facing out and waving wildly. Can be supplemented by shouting "Hey Rocky." (Make sure to use appropriate Bullwinkle voice tone.)
Butter Face
When you see a chick with an awesome body, "but her face", is nasty.
 Lick Ubu lick. Good Dog. Arf!
 Not recommended with large women.

  Wow!
Cold Lunch
The act of vomiting directly onto some chick's head while she's
performing fellatio.
The Concoction
First, ejaculate all over the floor.   Proceed to paint yourselves up silly, just as if you were in kindergarten again.
The Compton Gangbang
You meet a young lady at the bar. She tells you she has a boyfriend, but she ends up going home with you anyway for a one-night stand. When you take her to your place, tell your friends to wait outside your bedroom door.   (Ladies, feel free to perform a Compton Gangbang on guys too. I know you've got some fat girlfriends to help you out.)
Cop's Delight
The act of taking a girl in the ass, pulling out, and spewing all over her "pastry buns", thus transforming her rump into the allusion of an oversized, quivering glazed donut.
The Corkscrew
Cross your fingers, middle over index. Twist your wrist back and forth and go to work on your desired orifice. With practice, you'll have the effectiveness of a dill press and within weeks you'll be able to bore through wood.
Corn
Originating from the fine campus of Cornell University comes this unique, rarely used term.  Can be used as a great pick-up line or friendly compliment, for instance; "Baby, you're more Corn than Green Giant", or "Damn bitch, you are Corn!"
Couch Bombing
When you fill a small ziploc sandwich bag with Crisco (or your
favorite lubrication) and place it between the cushions on the couch.  However, you realize that your arm is wrapped around her. Therefore you must gnaw off your own arm to get out of the situation. Can be very painful.

Cum Guzzling Sperm Burping Bitch
The once in a lifetime act when blowing a hot steamy load down the back of the girl's throat, proceed to give her a large cold bottle of your most favorite carbonated drink and make her guzzle it down. Then, shake her head vigorously back and forth to create the Cum Guzzling, Sperm Burping effect. A great way to impress your friends.
 Partners can be gay, lesbian or straight.
 Can come in handy on those cold winter nights.

 It is so named because it can be just as hard as keeping a dog in the tub while giving it a bath.

Dutch Treat
The unexpected result of a Dutch Oven gone terribly awry. Can be very messy.
DVDA
The abbreviation for "double-vagina, double-anal". This is the term used when a girl takes four cocks in two holes. A hard core porn industry norm.
 After arousing you, she then takes a car battery and clamps two jumper cables to each nut sack. This causes you to have all sorts of synapses, spasms, and convulsions. She then mounts your Frankenstein and proceeds to get electrofucked. Warning! May cause erectile dysfunction after performed.
Felching
A gay activity which I do not condone at all.  Only included for those of you who are considering going to jail.
*note: never seen it done with a straw...
 Thereupon she turns around in a one-eyed winking motionsignaling that she has been there and done that.

The Fire Island
This consists of telling someone you're going to spunk on their face while they are asleep, only half-jokingly, and then when they don't believe you, doing it just to prove that you're that demented.
Flaming Amazon
This one's for all you pyromaniacs out there.
 Applies to butt pirates as well.
The Flying Camel
A personal favorite. As she is lying on her back and you are hammering her from your knees.  You then proceed to flap your arms and let out a long shrieking howl much like a flying camel. Strictly a class move.
The Flying Dutchman
This didn't used to be a specific deviant sexual act, it was just a phrase that sounded dirty and would be shouted out during intercourse on occasion simply for the novelty factor. However, its popularity increased and it has now developed into a specific act, namely that of, just as you are about to blow a load, in any sort of sexual situation (even masturbation for those true pioneers who are constantly on the cutting edge of the sexual revolution) you begin to shout, "Here comes the Flying Dutchman!" This should confuse your sexual partner (or whoever is in hearing range) completely, sometimes causing interesting side effects.

(Better in her bed)
Fur Ball
You're chomping away at some mighty trollop who has a mane between her legs the size of Lionel Richie's afro, a mammoth hair ball gets lodged into your throat.

Golden Shower
Any form of dropping piss all over your partner. Great for those who like watersports.
 or "Sorry honey, but you asked for the Greek salad
Ham And Cheese Sandwich
Eating a woman's box after you ejaculate all over it. A delightful, tasty combination of her yummy meat curtains with your added cheesy topping is sure to appeal to anyone's appetite.
 Don't hurt her feelings by getting grossed out though, just pretend it's extra lube.
High Dive
The skill of pulling your Johnson all the way out of your partner's hole and in one motion jamming it home again. Best suited for use in the corn hole, but can be very dangerous.
The Hindenburg
When some slut who is so bad at oral sex, you're forced to cry "Oh! The humanity!" as her teeth scrape your man tool.
 Best accomplished with large groups friends.
 Just try not to get a huge boner once it's in, or you'll get a nice snapparoo.

Hot Karl Candy Cane
A variation of the above in which the man who is receiving the oral cock cleaning gives the woman a reach around.

Hummer
The well known added variation to a blowjob in which a broad hums her favorite tune while she sucks away.
The Hunter Gatherer
You and your partner defecate while 69ing. Pretty much
self-explanatory.

The Jelly Donut
Give some skank a facial and follow it up with a swift pimp crack in the nose. The resulting blood and jizz that covers her face bears a resemblance to a jelly donut.

Kennebunkport Surprise
The act of covertly filling your cheeks with chunky-style New England clam chowder, and screaming in disgust as you hurl it between your partners legs while eating her out.

 Next, the guy also naked as well as stiff cocked, walks to the opposite end of the room, places his palms together and raises them above his head, (thus imitating the dorsal fin of a shark) and begins chanting the theme to Jaws.
The Lorena Bobbit
Obviously, this one is for the ladies.

 Always lots of fun.

Monroe Transfer
When you and your partner connect each other's assholes with a tube. One defecates through the tube, thus transferring the turds to the rectum of the other.
The Moped
A chick that's a fun ride until your friends see you on it, if you know what I mean.
 (Please note: Not complete until you finish it off with a Nanoo-Nanoo!)
 Derived from the Biblical figure Moses, who parted the Red Sea.
The Motorboat
While performing oral sex on a girl, flap your lips together on her clit, thus imitating the sound of a motorboat. She'll love you
forever.
Muff Teaser
Finger, suck, eat, etc. a girl until she is begging for it.  Right when her frustration is at its highest level, stop and finish with a DIY(do it yourself) handjob. Then leave the room without saying a word.
The Mung
Obtain a female that has been dead for 2-3 days (the time period since death is important).  Have a friend jump on her stomach, and try to catch as much stuff that comes out as you can in your mouth.
Mushy Biscuit
This is actually a very fun game. Just choose a piece of food that you and your male friends like to eat.  Last one to bust a nut gets the prize of eating the food.
 This procedure is most effective from behind.
 Happy trails.
The Nixon
A variation of the Bullwinkle in which you give two peace signs as your signal of dominance. May enhance the act by shaking jowls and yelling, "I'm not a crook". This is considered very bold and is frowned upon for those with a modicum of decorum.
Oyster
A derivation of the tea bag which is accomplished by numbing one's testicles with ice and then inserting them in a chicks mouth and letting the tramp munch on them.
 (A close cousin to the Cleveland Steamer.)
Pattycake
While you're nailing some girl doggie style and your friend is
catching some head off the same girl, you get a quick game of
pattycake going. This makes you reminisce of your childhood memories and eases the sight of watching your friend blow his load.
Paying The Rent
A position in which the woman is folded in half, knees above shoulders, while the man holds the back of her calves and bangs ferociously.
Peanut Butter And Jelly Sandwich
Shit on a woman's snatch during menstruation. Proceed to munch. Mmmm Mmmm Nasty! (Crunchy or smooth...depending on what you've been eating.)
Pearl Necklace
Well known. Whenever you cum on the neck/cleavage area of a girl - it takes on the look of beautiful jewelry.
 Very Similar to Chinese Finger Cuffs.
Pink Glove
Hate when this happens. Every so often a girl is not wet enough during sex. When you finally pull out to give her money, the inside of her twat sticks to your hog. Thus, the pink glove.
 After you've found this buried treasure deep in her booty, you scream, "Argh!", like a pirate.
 It gives them a nice view without all the messy cleanup. How come you don't see that on any Dawn commercials.
The Popcorn Trick
First, take your girlfriend to the cinemas, for a nice romantic date. Buy a tub of popcorn, wait until the lights dim, and carefully make a hole in the bottom on the tub.  When she digs in, she will find nice surprise. Who doesn't love buttered popcorn?
Puerto Rican Fog Bank
While 69ing with your partner, release a cloud of sphincter fog directly into her nostrils.
 It should leave a lasting impression similar to a purple mushroom.
Queef
A well known, but sometimes embarrassing occurrence. Queefing happens when air gets trapped inside a girl's vagina, and makes a soft hissing, or farting kind of a sound while that air is released.
The Ram
When attacking from behind, you start ramming her head against the wall in a rhythmic motion. The force of the wall should allow for deeper penetration. Very handy in those lulls in penile sensitivity.
Rear Admiral
An absolute blast. When getting a chick from behind (while both partners standing), make sure you don't let her grab on to anything when she is bent over. Then, drive you hips into her backside so that you end up pushing her forwards. The goal is to push her into a wall or table. It's almost as much fun watch her face hit the floor. You rise to Admiral status when you can bang her around the room without crashing into anything and not using your hands to grab onto her hips
Red Wings
Another name for navigating the moose knuckle with your tongue while discovering the girl is on her rag. Be a real man and earn your red wings soldier!
Resuscitation
When a girl is asleep, carefully open her mouth so that she doesn't awake.  When the time is right, you let rip the biggest baddest fart ever known to man and see if it wakes her up. Great fun during those long sleepless nights.
The Roddy Piper
When getting your girl from behind, you toss the sleeper hold on her and knock her out ala Rowdy Roddy Piper. While nailing your unconscious victim, you get to simulate your life long dream of necrophilia. Now you never have to break into the morgue again.
The Rodeo
Similar to the Bronco. You start once again, banging a chick from behind. At a pre-arranged time you grab her hair with one hand just as several buddies bust into the room. See if you can hang on for 8 seconds cowboy. Yee Haw!
The Rose Creeper
Seductively brush a beautiful long stem red rose against your sweetheart's neck, breasts, and inner thigh.  After working her into the mood for some deep love making, unzip your fly and pull out your raging boner. Begin to punish-fuck her dumper while whipping her with the rose and screaming nasty obscenities at her. I bet she never saw that coming.
The Rusty Trombone
This is what happens when you've got a less-than-respectable female's tongue deep in your chute. She wiggles her tongue as she does the reach around to pump you like a Catholic priest doing an Alter Boy, thus mimicking a trombone player.
Sandbag
Under an assumed name in a tropical region, you meet a young hottie and engage in the well known cliche of sex on the beach. Just before insertion, remove the rubber (without getting caught of course), and proceed to bang away until you blow your load, without pulling out.  Especially lots of fun when accomplished during the spring break season.
The Screwnicorn
When a dyke puts her strap-on dildo on her forehead and proceeds to go at her partner like a crazed unicorn.

 After giving her a few good minutes of double duty finger banging, pull your fingers out and give your index and middle finger a quick sniff and pinky a good sucking, all in one smooth motion.(a.k.a. Smoking the Pinky.)
Shop Vac
When a dirty, talented tramp stuffs you're entire package (balls and all) into her mouth, and blows you with amazing suction power.

Skiing
While facing in the same direction, a girl gets between two guys and jerks them both off, thus imitating some hardcore cross-country action.
Slumpbuster
When a professional athlete finds the dirtiest, nastiest, fattest, most disease-ridden skank and puts the wood to her with the intent that it will break up a slump.
 Really popular with the lavender boys, hence the expression, "Oh Lance, Nergle me you Snerd"...
 Those gays have way too much free time. Can be used at as a great derogatory term as in, "You Snoodler!"
 This
happens when a girl blows you and spits the jizz in your mouth.
  Just ask your friends if it has, cause they probably already know and have been laughing their asses off at you.

Stranger
Sitting on your hand until it falls asleep and then jerking off, giving you the feeling of a hand job from someone else.
 Spanken not stirred.
 Thus eliciting the feeling of a hand job from someone else, from someone else.

 As you watch the rippling effect of her rolls with every thrust, along with the feeling of being drenched, off balance, out of control, and in danger, you are given the sense of riding the ultimate wave.
 Hopefully, you will give her an infection.
Tea Bag
To perform the tea bag, have the girl lay flat on her back.
The Tortoise
When you eat out someone who doesn't have pubic hair yet - i.e. you got there before the hair (hare) did.

Tuna Melt
You're down on a chick lapping away and discover that it just happens to be that time of the month. By no means do you stop though. When the whale spews tartar sauce with a hint of raspberry smothers your face.
  Now that's some great S&M fun.
Vegetarian Hot Lunch
A variation of the Hot Lunch in which the diner stretches a piece of saran wrap over her mouth such that chewing (for texture) is possible, but no actual contact with waste product occurs.
Wake Up Call
Waking up in the middle of the night with the hard on of your life.  The clincher to performing a wake up call is to act like nothing of the sort happened in the morning. E.g. "Sweetheart, what's that on your back?"
The Walrus
After spunking in a girl's mouth, you pinch the center of her two lips together and hold her nose. This will force the cum to dribble out of the sides of her mouth, thus the teeth of the walrus.
 It is the same grip that rodeo folks use, hence, western.
Westside Glaze
Same as the eastside glaze, but the majority of your jizz lands on the left side of her face.

 Then, just when you're ready to spew a good week's worth of goo, blast that hefty load in both eyes. This temporary state of blindness will produce the zombie effect as she stumbles around the room with arms outstretched, and moaning like the walking dead.
Pornopolis |
Rotten |
Faces of Death |
Famous Nudes
|


Welcome To RockQuiz
Login
User Name
Password
Keep me logged in
Guest
Register Now
Quick Link
Stanford University
CS108 Course Website


The Express technical committee meets online every two weeks (as needed) to discuss development and maintenance of Express, and other issues relevant to the Express project. Each meeting is typically announced in an expressjs/discussions issue with a link to join or view the meeting, which is open to all observers.
The meetings are recorded; for a list of the recordings, see the Express.js YouTube channel.
Members of the Express technical committee are:
Active:
Inactive:
Our vibrant community has created a large variety of extensions, middleware modules and higher-level frameworks.
Additionally, the Express community maintains modules in these two GitHub orgs:
To keep up with what is going on in the whole community, check out the ExpressJS StatusBoard.
The expressjs/express chatroom is great place for developers interested in the everyday discussions related to Express.
If you’ve come across what you think is a bug, or just want to make a feature request open a ticket in the issue queue.
View dozens of Express application examples in the repository covering everything from API design and authentication to template engine integration.
Join over 2000 Express users or browse over 5000 discussions in the Google Group.
Hundreds of developers idle in #express on freenode every day. If you have questions about the framework, jump in for quick feedback.


Police issue update on missing East Kilbride schoolboy
Aiden, who is believed to have autism, was last seen heading towards an underpass at Telford Road in the town
by Fraser N Wilson, https://www.dailyrecord.co.uk/authors/fraser-n-wilson/A 14-year-old boy missing in East Kilbride has been found safe and well.
We told you early on Saturday how Aiden Lochrie had not been seen since 2.45pm on Friday afternoon.
That led to a frantic search and online appeal to trace the missing Duncanrig Secondary pupil.
Aiden, who is believed to have autism, was last seen heading towards an underpass at Telford Road in the town.
Family and friends of the schoolboy took to social media in a desperate plea for information.
Thankfully in a statement at just after midday on Saturday, Police Scotland said the teenager had been found.
It simply read: “Aiden Lochrie, who had been missing from East Kilbride since Friday, November 22, has now been traced safe and well.
“Thanks to everyone who shared our post.”


--- title: "Select Variations" description: |
The select element comes in the following color variants:
evo_c-form__dropdown--white
evo_c-form__dropdown--primary
evo_c-form__dropdown--secondary
You can change its size by using the following classes:
evo_c-form__dropdown--small
evo_c-form__dropdown--large


The Seize object allocates one or more units of a specified set of Resources on receiving an incoming entity.
If any of the Resources have insufficient units available, the received entity is directed to a Queue object identified by the WaitQueue keyword. All entities received by the Seize object first pass through this Queue object, even if sufficient units of the Resources are available.
Entities can be sent directly to the Queue specified by the WaitQueue keyword. Whenever an entity is added to the Queue, all the Seize objects that specified this Queue as their WaitQueue will be notified. The first Seize block that has sufficient resource units available will then remove the entity for processing.
Entities waiting for the same Resources at more than one Seize object are processed in order of the priority assigned to them by the input to their Queue’s Priority keyword. If the entities in two or more Queues have the same priority value, then the one that has waited the longest is chosen.
All of the specified Resources for the selected entity must be available before any are seized. Once all of them are available, they are seized simultaneously.


Mike Pence surprises troops in Iraq with an early Thanksgiving
by Mary Kay LingeVice President Mike Pence and his wife, Karen, traveled to Iraq on Saturday for a surprise pre-Thanksgiving visit to US troops.
The second lady, toting a container of candied yams, and the veep, balancing a platter of roasted turkey, served lunch to 150 service members stationed at Al Asad Air Base in western Iraq.
“It’s Thanksgiving week in America and Karen and I couldn’t be more honored and privileged to come here and give you a little bit of a taste of home,” Pence said.
Pence had a private briefing with military officials and then made a phone call to Iraqi Prime Minister Adil Abdul-Mahdi.
President Trump made a similar unannounced visit to troops at the base last Christmas, his first trip to Iraq.
After his lunch with the troops, Pence stopped off in Erbil in northern Iraq for a meeting with Nechirvan Barzani, the president of its Kurdistan region.
Praising the “enduring bond that exists between the Kurdish people and the people of the United States,” Pence said that he “welcomed the opportunity on behalf of President Donald Trump to reiterate the strong bonds forged in the fires of war.”
Trump has come under fire for pulling troops out of Kurdish-held territory in northern Syria. The area was promptly invaded by Turkey, a NATO ally of the US.
Barzani told Pence that he hopes the Kurds’ relationship with Trump “will continue to develop further,” Politico reported.


pcaExplorer User Guide
vignettes/pcaExplorer.Rmd
pcaExplorer.Rmd
Abstract
pcaExplorer provides functionality for interactive visualization of RNA-seq datasets based on Principal Components Analysis. Such methods allow for quick information extraction and effective data exploration. A Shiny application encapsulates the whole analysis, and is developed to become a practical companion for any RNA-seq dataset. This app supports reproducible research with state saving and automated report generation.
Package: pcaExplorer
Authors: Federico Marini [aut, cre] (https://orcid.org/0000-0003-3252-7758)
Version: 2.15.1
Compiled date: 2020-06-02
Last edited: 2019-02-26
License: MIT + file LICENSE
pcaExplorer is an R package distributed as part of the Bioconductor project. To install the package, start R and enter:
if (!requireNamespace("BiocManager", quietly=TRUE)) install.packages("BiocManager") BiocManager::install("pcaExplorer")
To install pcaExplorer with all its dependencies (i.e. also the ones listed in the Suggests:
field of the DESCRIPTION
file, which include the dataset from the airway package used as a demo), use this command instead:
BiocManager::install("pcaExplorer", dependencies = TRUE)
If you prefer, you can install and use the development version, which can be retrieved via Github (https://github.com/federicomarini/pcaExplorer). To do so, use:
library("devtools") install_github("federicomarini/pcaExplorer")
Once pcaExplorer is installed, it can be loaded by the following command.
library("pcaExplorer")
pcaExplorer is a Bioconductor package containing a Shiny application for analyzing expression data in different conditions and experimental factors.
It is a general-purpose interactive companion tool for RNA-seq analysis, which guides the user in exploring the Principal Components of the data under inspection.
pcaExplorer provides tools and functionality to detect outlier samples, genes that show particular patterns, and additionally provides a functional interpretation of the principal components for further quality assessment and hypothesis generation on the input data.
Moreover, a novel visualization approach is presented to simultaneously assess the effect of more than one experimental factor on the expression levels.
Thanks to its interactive/reactive design, it is designed to become a practical companion to any RNA-seq dataset analysis, making exploratory data analysis accessible also to the bench biologist, while providing additional insight also for the experienced data analyst.
Starting from development version 1.1.3, pcaExplorer supports reproducible research with state saving and automated report generation. Each generated plot and table can be exported by simple mouse clicks on the dedicated buttons.
If you use pcaExplorer for your analysis, please cite it as here below:
citation("pcaExplorer")
To cite the package 'pcaExplorer' in publications use:
Federico Marini, Harald Binder (2019). pcaExplorer: an R/Bioconductor
package for interacting with RNA-seq principal components URL
http://bioconductor.org/packages/pcaExplorer/,
https://doi.org/10.1186/s12859-019-2879-1 doi:
10.1186/s12859-019-2879-1, 10.18129/B9.bioc.pcaExplorer
A BibTeX entry for LaTeX users is
@Article{,
title = {pcaExplorer: an R/Bioconductor package for interacting with RNA-seq principal components},
journal = {BMC Bioinformatics},
author = {Federico Marini and Harald Binder},
volume = {20},
number = {1},
pages = {331},
year = {2019},
month = {Jun},
day = {13},
doi = {10.1186/s12859-019-2879-1},
url = {http://bioconductor.org/packages/pcaExplorer/},
}
After loading the package, the pcaExplorer app can be launched in different modes:
pcaExplorer(dds = dds, dst = dst)
, where dds
is a DESeqDataSet
object and dst
is a DESeqTransform
object, which were created during an existing session for the analysis of an RNA-seq dataset with the DESeq2 package.
pcaExplorer(dds = dds)
, where dds
is a DESeqDataSet
object. The dst
object can be automatically computed upon launch, choosing between rlog transformation, variance stabilizing transformations, or shifted logarithm transformation (with pseudocount = 1).
pcaExplorer(countmatrix = countmatrix, coldata = coldata)
, where countmatrix
is a count matrix, generated after assigning reads to features such as genes via tools such as HTSeq-count
or featureCounts
, and coldata
is a data frame containing the experimental covariates of the experiments, such as condition, tissue, cell line, run batch and so on. If the data is provided in this way, the user can click on the “Generate the dds and dst objects” button to complete the setup and enable the subsequent steps in the other panels.
pcaExplorer()
, and then subsequently uploading the count matrix and the covariates data frame through the user interface. These files need to be formatted as tab, semicolon, or comma separated text files, all of which are common formats for storing such count values.
Additional parameters and objects that can be provided to the main pcaExplorer function are:
pca2go
, which is an object created by the pca2go
function, which scans the genes with high loadings in each principal component and each direction, and looks for functions (such as GO Biological Processes) that are enriched above the background. The offline pca2go
function is based on the routines and algorithms of the topGO package, but as an alternative, this object can be computed live during the execution of the app with limmaquickpca2go
(which relies on the goana
function provided by the limma package). Although this likely provides more general (and probably less informative) functions, it is a good compromise for quickly obtaining a further data interpretation.
annotation
, a data frame object, with row.names
as gene identifiers (e.g. ENSEMBL ids) identical to the row names of the count matrix or dds
object, and an extra column gene_name
, containing e.g. HGNC-based gene symbols. This can be used for making information extraction easier, as ENSEMBL ids (a usual choice when assigning reads to features) do not provide an immediate readout for which gene they refer to. This can be either passed as a parameter when launching the app, or also uploaded as a text file (either tab, comma, or semicolon-separated). The package provides two functions, get_annotation
and get_annotation_orgdb
, as a convenient wrapper to obtain the updated annotation information, respectively from biomaRt
or via the org.XX.eg.db
packages.
pcaExplorer supports a number of file formats when uploading the data via the file input widgets. Starting from version 2.9.5, we added functionality to select the separator character for each of the uploadable files. An information box is also shown by clicking on the question mark icon in the Data upload panel, with detailed information (text, as well as screenshots of valid input files) on the format specification.
In general, pcaExplorer requires by default tab separated files:
countmatrix
: contains the expression matrix, with one gene per row and one sample per column; the first column should contain the gene identifiers, and the header (first row) specifies the sample names.coldata
: one sample per row, and one experimental covariate per column. Row names should be specified in the first column, and have to match the column names of the countmatrix
. Column names will contain the specific experimental covariates.annotation
(optional): one gene per row, and one identifier type per column. Gene identifiers in the first column are identical to the row names of the countmatrix
or dds
objects. At least an extra column gene_name
, containing e.g. HGNC-based gene symbols, needs to be provided.We recommend users to switch to the dedicated vignette, entitled “Up and running with pcaExplorer”.
This document describes a use case for pcaExplorer, based on the dataset in the airway package.
The pcaExplorer app is structured in different panels, each focused on a different aspect of the data exploration.
Most of the panels work extensively with click-based and brush-based interactions, to gain additional depth in the explorations, for example by zooming, subsetting, selecting. This is possible thanks to the recent developments in the shiny package/framework.
The available panels are described in the following subsections.
These file input controls are available when no dds
or countmatrix
+ coldata
are provided. Additionally, it is possible to upload the annotation
data frame. If the objects are already passed as parameters, or after they have been successfully uploaded, a brief overview/summary for them can be displayed, by clicking on each respective action button.
This panel is where you can perform the preprocessing steps on the data you uploaded/provided:
dds
object (if you provided countmatrix
and coldata
)dst
object).As a note regarding the normalization procedure: the normalization method (implemented in estimateSizeFactors
) relies on the hypothesis that most of the genes are not differentially expressed across experimental groups, and this holds true for the majority of scenarios. The DESeqDataSet
object, which pcaExplorer takes as main data container, can still accommodate sample (and gene) specific normalization factors. Should this assumption be violated, users can pre-compute these factors and store them in the input dds
object.
This is where you might be reading a version of the “Up and running with pcaExplorer” vignette. Additionally, you can easily reach the fully rendered vignettes, either installed locally, or directly from the Bioconductor package page.
Interactive tables for the raw, normalized or transformed (rlog, variance stabilized, or shifted log) counts are shown in this tab. The user can also generate a sample-to-sample correlation scatter plot with the selected data.
This panel displays information on the objects in use, either passed as parameters or generated from the count matrix provided. Displayed information comprise the design metadata, a sample to sample distance heatmap, the number of million of reads per sample and some basic summary for the counts.
This panel displays the PCA projections of sample expression profiles onto any pair of components, a scree plot, a zoomed PCA plot, a plot of the genes with top and bottom loadings. Additionally, this section presents a PCA plot where it is possible to remove samples deemed to be outliers in the analysis, which is very useful to check the effect of excluding them. If needed, an interactive 3D visualization of the principal components is also available.
This panel displays the PCA projections of genes abundances onto any pair of components, with samples as biplot variables, to identify interesting groups of genes. Zooming is also possible, and clicking on single genes, a boxplot is returned, grouped by the factors of interest. A static and an interactive heatmap are provided, including the subset of selected genes, also displayed as (standardized) expression profiles across the samples. These are also reported in datatable
objects, accessible in the bottom part of the tab.
The user can search and display the expression values of a gene of interest, either by ID or gene name, as provided in the annotation
. A handy panel for quick screening of shortlisted genes, again grouped by the factors of interest. The graphic can be readily exported as it is, and this can be iterated on a shortlisted set of genes. For each of them, the underlying data is displayed in an interactive table, also exportable with a click.
This panel shows the functional annotation of the principal components, with GO functions enriched in the genes with high loadings on the selected principal components. It allows for the live computing of the object, that can otherwise provided as a parameter when launching the app. The panel displays a PCA plot for the samples, surrounded on each side by the tables with the functions enriched in each component and direction.
pca2go
parameterA note on the functionality provided by the PCA2GO tab: if it is not provided in the pca2go
parameter, the user can still compute this object while using the app, and this is done using limma::goana
. The implementation of this function supports a few organism packages, which cover many use cases (human, mouse, rat, fruit fly, or chimpanzee), but some use cases are not directly covered (e.g. if you are working with plants like Arabidopsis Thaliana).
For example, with a dataset from Arabidopsis where the genes are encoded as TAIR (The Arabidopsis Information Resource) identifiers, one would ideally call the following commands
BiocManager::install("org.At.tair.db") library("org.At.tair.db") # skipping the steps where you normally would generate your dds_at object... dds_at vst_at <- DESeq2::vst(dds_at) anno_at <- get_annotation_orgdb(dds_at,"org.At.tair.db", idtype = "TAIR") # subset the background to include only the expressed genes bg_ids <- rownames(dds_at)[rowSums(counts(dds_at)) > 0] library(topGO) pca2go_at <- pca2go(vst_at, annotation = anno_at, annopkg = "org.At.tair.db", ensToGeneSymbol = TRUE, background_genes = bg_ids) # and finally, with all the objects prepared... pcaExplorer(dds = dds_at, dst = vst_at, annotation = anno_at, pca2go = pca2go_at)
This panel allows for the multifactor exploration of datasets with 2 or more experimental factors. The user has to select first the two factors and the levels for each. Then, it is possible to combine samples from Factor1-Level1 in the selected order by clicking on each sample name, one for each level available in the selected Factor2. In order to build the matrix, an equal number of samples for each level of Factor 1 is required, to keep the design somehow balanced. A typical case for choosing factors 1 and 2 is for example when different conditions and tissues are present.
Once constructed, a plot is returned that tries to represent simultaneously the effect of the two factors on the data. Each gene is represented by a dot-line-dot structure, with the color that is indicating the tissue (factor 2) where the gene is mostly expressed. Each gene has two dots, one for each condition level (factor 1), and the position of the points is dictated by the scores of the principal components calculated on the matrix object. The line connecting the dots is darker when the tissue where the gene is mostly expressed varies throughout the conditions.
This representation is under active development, and it is promising for identifying interesting sets or clusters of genes according to their behavior on the Principal Components subspaces. Zooming and exporting of the underlying genes is also allowed by brushing on the main plot.
The report editor is the backbone for generating and editing the interactive report on the basis of the uploaded data and the current state of the application. General Markdown options
and Editor options
are available, and the text editor, based on the shinyAce
package, contains a comprehensive template report, that can be edited to the best convenience of the user.
The editor supports R code autocompletion, making it easy to add new code chunks for additional sections. A preview is available in the tab itself, and the report can be generated, saved and subsequently shared with simple mouse clicks.
The functionality to display the report preview is based on knit2html
, and some elements such as DataTable
objects might not render correctly. To render them correctly, please install the PhantomJS executable before launching the app. This can be done by using the webshot package and calling webshot::install_phantomjs()
- HTML widgets will be rendered automatically as screenshots. Keep in mind that the fully rendered report (the one you can obtain with the “Generate & Save” button) is not affected by this, since it uses rmarkdown::render()
.
Contains general information on pcaExplorer, including the developer’s contact, the link to the development version in Github, as well as the output of sessionInfo
, to use for reproducibility sake - or bug reporting. Information for citing pcaExplorer is also reported.
pcaExplorer
on published datasetsWe can run pcaExplorer for demonstration purpose on published datasets that are available as SummarizedExperiment in a Bioconductor experiment package.
We will use the airway dataset, which can be installed with this command:
if (!requireNamespace("BiocManager", quietly=TRUE)) install.packages("BiocManager") BiocManager::install("airway")
The airway package provides a RangedSummarizedExperiment
object of read counts in genes for an RNA-Seq experiment on four human airway smooth muscle cell lines treated with dexamethasone. More details such as gene models and count quantifications can be found in the airway package vignette.
The easiest way to explore the airway dataset is by clicking on the dedicated button in the Data Upload panel.
Otherwise, to run pcaExplorer on this dataset from the terminal/RStudio IDE, the following commands are required. First, prepare the objects to be passed as parameters of pcaExplorer.
library(airway) library(DESeq2) data(airway) dds_airway <- DESeqDataSet(airway,design= ~ cell + dex) dds_airway
class: DESeqDataSet
dim: 64102 8
metadata(2): '' version
assays(1): counts
rownames(64102): ENSG00000000003 ENSG00000000005 ... LRG_98 LRG_99
rowData names(0):
colnames(8): SRR1039508 SRR1039509 ... SRR1039520 SRR1039521
colData names(9): SampleName cell ... Sample BioSample
rld_airway <- rlogTransformation(dds_airway) rld_airway
class: DESeqTransform
dim: 64102 8
metadata(2): '' version
assays(1): ''
rownames(64102): ENSG00000000003 ENSG00000000005 ... LRG_98 LRG_99
rowData names(7): baseMean baseVar ... dispFit rlogIntercept
colnames(8): SRR1039508 SRR1039509 ... SRR1039520 SRR1039521
colData names(10): SampleName cell ... BioSample sizeFactor
Then launch the app itself.
pcaExplorer(dds = dds_airway, dst = rld_airway)
The annotation
for this dataset can be built by exploiting the org.Hs.eg.db package.
library(org.Hs.eg.db) genenames_airway <- mapIds(org.Hs.eg.db,keys = rownames(dds_airway),column = "SYMBOL",keytype="ENSEMBL") annotation_airway <- data.frame(gene_name = genenames_airway, row.names = rownames(dds_airway), stringsAsFactors = FALSE) head(annotation_airway)
gene_name
ENSG00000000003 TSPAN6
ENSG00000000005 TNMD
ENSG00000000419 DPM1
ENSG00000000457 SCYL3
ENSG00000000460 C1orf112
ENSG00000000938 FGR
or alternatively, by using the get_annotation
or get_annotation_orgdb
wrappers.
anno_df_orgdb <- get_annotation_orgdb(dds = dds_airway, orgdb_species = "org.Hs.eg.db", idtype = "ENSEMBL") anno_df_biomart <- get_annotation(dds = dds_airway, biomart_dataset = "hsapiens_gene_ensembl", idtype = "ensembl_gene_id")
'select()' returned 1:many mapping between keys and columns
head(anno_df_orgdb)
gene_id gene_name
ENSG00000000003 ENSG00000000003 TSPAN6
ENSG00000000005 ENSG00000000005 TNMD
ENSG00000000419 ENSG00000000419 DPM1
ENSG00000000457 ENSG00000000457 SCYL3
ENSG00000000460 ENSG00000000460 C1orf112
ENSG00000000938 ENSG00000000938 FGR
Then again, the app can be launched with:
pcaExplorer(dds = dds_airway, dst = rld_airway, annotation = annotation_airway) # or anno_df_orgdb, or anno_df_biomart
If desired, alternatives can be used. See the well written annotation workflow available at the Bioconductor site (https://bioconductor.org/help/workflows/annotation/annotation/).
pcaExplorer
on synthetic datasetsFor testing and demonstration purposes, a function is also available to generate synthetic datasets whose counts are generated based on two or more experimental factors.
This can be called with the command:
dds_multifac <- makeExampleDESeqDataSet_multifac(betaSD_condition = 3,betaSD_tissue = 1)
See all the available parameters by typing ?makeExampleDESeqDataSet_multifac
. Credits are given to the initial implementation by Mike Love in the DESeq2 package.
The following steps run the app with the synthetic dataset.
dds_multifac <- makeExampleDESeqDataSet_multifac(betaSD_condition = 1,betaSD_tissue = 3) dds_multifac
class: DESeqDataSet
dim: 1000 12
metadata(1): version
assays(1): counts
rownames(1000): gene1 gene2 ... gene999 gene1000
rowData names(4): trueIntercept trueBeta_condition trueBeta_tissue
trueDisp
colnames(12): sample1 sample2 ... sample11 sample12
colData names(2): condition tissue
rld_multifac <- rlogTransformation(dds_multifac) rld_multifac
class: DESeqTransform
dim: 1000 12
metadata(1): version
assays(1): ''
rownames(1000): gene1 gene2 ... gene999 gene1000
rowData names(11): trueIntercept trueBeta_condition ... dispFit
rlogIntercept
colnames(12): sample1 sample2 ... sample11 sample12
colData names(3): condition tissue sizeFactor
## checking how the samples cluster on the PCA plot pcaplot(rld_multifac,intgroup = c("condition","tissue"))
Launch the app for exploring this dataset with:
pcaExplorer(dds = dds_multifac, dst = rld_multifac)
When such a dataset is provided, the panel for multifactorial exploration is also usable at its best.
The functions exported by the pcaExplorer package can be also used in a standalone scenario, provided the required objects are in the working environment. They are listed here for an overview, but please refer to the documentation for additional details. Where possible, for each function a code snippet will be provided for its typical usage.
pcaplot
pcaplot
plots the sample PCA for DESeqTransform
objects, such as rlog-transformed data. This is the workhorse of the Samples View tab.
pcascree
pcascree
produces a scree plot of the PC computed on the samples. A prcomp
object needs to be passed as main argument.
correlatePCs
and plotPCcorrs
correlatePCs
and plotPCcorrs
respectively compute and plot significance of the (cor)relation of each covariate versus a principal component. The input for correlatePCs
is a prcomp
object.
res_pcairway <- correlatePCs(pcaobj_airway,colData(dds_airway)) res_pcairway
SampleName cell dex albut Run avgLength Experiment
PC_1 0.4288799 0.68227033 0.02092134 NA 0.4288799 0.2554109 0.4288799
PC_2 0.4288799 0.11161023 0.56370286 NA 0.4288799 0.1993592 0.4288799
PC_3 0.4288799 0.10377716 0.38647623 NA 0.4288799 0.1864725 0.4288799
PC_4 0.4288799 0.08331631 0.56370286 NA 0.4288799 0.4635148 0.4288799
Sample BioSample
PC_1 0.4288799 0.4288799
PC_2 0.4288799 0.4288799
PC_3 0.4288799 0.4288799
PC_4 0.4288799 0.4288799
plotPCcorrs(res_pcairway)
hi_loadings
hi_loadings
extracts and optionally plots the genes with the highest loadings.
# extract the table of the genes with high loadings hi_loadings(pcaobj_airway,topN = 10,exprTable=counts(dds_airway))
SRR1039508 SRR1039509 SRR1039512 SRR1039513 SRR1039516
ENSG00000143127 11 108 24 485 41
ENSG00000168309 12 274 35 451 1
ENSG00000101347 1632 17126 2098 19694 1598
ENSG00000211445 916 15749 3142 24057 1627
ENSG00000096060 260 4652 381 3875 601
ENSG00000163884 70 1325 52 702 36
ENSG00000171819 4 50 19 543 1
ENSG00000127954 13 247 25 889 2
ENSG00000152583 62 2040 99 1172 100
ENSG00000109906 4 739 5 429 1
ENSG00000162692 914 62 1192 55 1359
ENSG00000178695 4746 830 4805 414 5321
ENSG00000214814 312 24 193 28 501
ENSG00000164742 1506 347 275 14 137
ENSG00000138316 1327 207 1521 118 1962
ENSG00000123610 444 136 303 36 1170
ENSG00000124766 2483 406 2057 185 2829
ENSG00000105989 562 47 1575 106 106
ENSG00000013293 268 23 435 56 558
ENSG00000146250 330 41 907 89 720
SRR1039517 SRR1039520 SRR1039521
ENSG00000143127 607 77 660
ENSG00000168309 65 4 193
ENSG00000101347 17697 1683 32036
ENSG00000211445 16274 1741 24883
ENSG00000096060 5493 154 4118
ENSG00000163884 487 34 1355
ENSG00000171819 10 14 1067
ENSG00000127954 199 20 462
ENSG00000152583 1924 79 2138
ENSG00000109906 581 12 1113
ENSG00000162692 171 646 31
ENSG00000178695 1391 4411 606
ENSG00000214814 65 789 76
ENSG00000164742 37 475 56
ENSG00000138316 618 1045 152
ENSG00000123610 195 473 37
ENSG00000124766 870 1851 301
ENSG00000105989 24 382 46
ENSG00000013293 75 562 74
ENSG00000146250 123 439 60
# or alternatively plot the values hi_loadings(pcaobj_airway,topN = 10,annotation = annotation_airway)
genespca
genespca
computes and plots the principal components of the genes, eventually displaying the samples as in a typical biplot visualization. This is the function in action for the Genes View tab.
groups_airway <- colData(dds_airway)$dex cols_airway <- scales::hue_pal()(2)[groups_airway] # with many genes, do not plot the labels of the genes genespca(rld_airway,ntop=5000, choices = c(1,2), arrowColors=cols_airway,groupNames=groups_airway, alpha = 0.2, useRownamesAsLabels=FALSE, varname.size = 5 )
topGOtable
topGOtable
is a convenient wrapper for extracting functional GO terms enriched in a subset of genes (such as the differentially expressed genes), based on the algorithm and the implementation in the topGO package.
# example not run due to quite long runtime dds_airway <- DESeq(dds_airway) res_airway <- results(dds_airway) res_airway$symbol <- mapIds(org.Hs.eg.db, keys=row.names(res_airway), column="SYMBOL", keytype="ENSEMBL", multiVals="first") res_airway$entrez <- mapIds(org.Hs.eg.db, keys=row.names(res_airway), column="ENTREZID", keytype="ENSEMBL", multiVals="first") resOrdered <- as.data.frame(res_airway[order(res_airway$padj),]) head(resOrdered) # extract DE genes de_df <- resOrdered[resOrdered$padj < .05 & !is.na(resOrdered$padj),] de_symbols <- de_df$symbol # extract background genes bg_ids <- rownames(dds_airway)[rowSums(counts(dds_airway)) > 0] bg_symbols <- mapIds(org.Hs.eg.db, keys=bg_ids, column="SYMBOL", keytype="ENSEMBL", multiVals="first") # run the function topgoDE_airway <- topGOtable(de_symbols, bg_symbols, ontology = "BP", mapping = "org.Hs.eg.db", geneID = "symbol")
pca2go
pca2go
provides a functional interpretation of the principal components, by extracting the genes with the highest loadings for each PC, and then runs internally topGOtable
on them for efficient functional enrichment analysis. This function requires a DESeqTransform
object as main parameter.
pca2go_airway <- pca2go(rld_airway, annotation = annotation_airway, organism = "Hs", ensToGeneSymbol = TRUE, background_genes = bg_ids) # for a smooth interactive exploration, use DT::datatable datatable(pca2go_airway$PC1$posLoad) # display it in the normal R session... head(pca2go_airway$PC1$posLoad) # ... or use it for running the app and display in the dedicated tab pcaExplorer(dds_airway,rld_airway, pca2go = pca2go_airway, annotation = annotation_airway)
limmaquickpca2go
limmaquickpca2go
is an alternative to pca2go
, used in the live running app, thanks to its fast implementation based on the limma::goana
function.
goquick_airway <- limmaquickpca2go(rld_airway, pca_ngenes = 10000, inputType = "ENSEMBL", organism = "Hs") # display it in the normal R session... head(goquick_airway$PC1$posLoad) # ... or use it for running the app and display in the dedicated tab pcaExplorer(dds_airway,rld_airway, pca2go = goquick_airway, annotation = annotation_airway)
makeExampleDESeqDataSet_multifac
makeExampleDESeqDataSet_multifac
constructs a simulated DESeqDataSet
of Negative Binomial dataset from different conditions. The fold changes between the conditions can be adjusted with the betaSD_condition
and betaSD_tissue
arguments.
dds_simu <- makeExampleDESeqDataSet_multifac(betaSD_condition = 3,betaSD_tissue = 0.5) dds_simu
class: DESeqDataSet
dim: 1000 12
metadata(1): version
assays(1): counts
rownames(1000): gene1 gene2 ... gene999 gene1000
rowData names(4): trueIntercept trueBeta_condition trueBeta_tissue
trueDisp
colnames(12): sample1 sample2 ... sample11 sample12
colData names(2): condition tissue
dds2_simu <- makeExampleDESeqDataSet_multifac(betaSD_condition = 0.5,betaSD_tissue = 2) dds2_simu
class: DESeqDataSet
dim: 1000 12
metadata(1): version
assays(1): counts
rownames(1000): gene1 gene2 ... gene999 gene1000
rowData names(4): trueIntercept trueBeta_condition trueBeta_tissue
trueDisp
colnames(12): sample1 sample2 ... sample11 sample12
colData names(2): condition tissue
rld_simu <- rlogTransformation(dds_simu) rld2_simu <- rlogTransformation(dds2_simu) pcaplot(rld_simu,intgroup = c("condition","tissue")) + ggplot2::ggtitle("Simulated data - Big condition effect, small tissue effect")
distro_expr
Plots the distribution of expression values, either with density lines, boxplots or violin plots.
distro_expr(rld_airway,plot_type = "density") distro_expr(rld_airway,plot_type = "violin")
distro_expr(rld_airway,plot_type = "boxplot")
geneprofiler
Plots the profile expression of a subset of genes, optionally as standardized values.
dds <- makeExampleDESeqDataSet_multifac(betaSD_condition = 3,betaSD_tissue = 1) dst <- DESeq2::rlogTransformation(dds) set.seed(42) geneprofiler(dst,paste0("gene",sample(1:1000,20)), plotZ = FALSE)
you provided 20 unique identifiers
20 out of 20 provided genes were found in the data
get_annotation
and get_annotation_orgdb
These two wrapper functions retrieve the latest annotations for the dds
object, to be used in the call to the pcaExplorer
function. They use respectively the biomaRt
package and the org.XX.eg.db
packages.
anno_df_biomart <- get_annotation(dds = dds_airway, biomart_dataset = "hsapiens_gene_ensembl", idtype = "ensembl_gene_id") anno_df_orgdb <- get_annotation_orgdb(dds = dds_airway, orgdb_species = "org.Hs.eg.db", idtype = "ENSEMBL")
Additional functionality for the pcaExplorer will be added in the future, as it is tightly related to a topic under current development research.
Improvements, suggestions, bugs, issues and feedback of any type can be sent to<EMAIL_ADDRESS>


Responsive site is a site that users can easily navigate regardless on what device they are using. In an easy word you can view responsive site on mobiles, i pad, desktop and other devices without the website screen cutting off, text size being too small and so on. Responsive site is important because it is user friendly and it is much more easier to navigate responsive site than the none responsive site.
Mobile first design is when website developers make their html and css file for the website they start off testing this file with a small screen not on the big screen. In easy word they test what website might look like on the mobile screen than desktop screen. Mobile first design is important because if you start off designing on the big screen later on when you would like to design for the small screen website developers would need to take out many elements that they have used for the big screen because they can't fit eveything on a small screen. It is more efficient if you design mobile first.
I guess framework is the basic structure of making the website. This involves columns and rows of the website, navigation that would always be on your site, logo or footer if you need them and so on. Basically If you think of the website as a burger columns, rows, navigation and other things that would always be on the website is hamburger buns and all the other contents that would change would be other ingredients.. The pros of having framework is that it takes less time if you have basic structure of the website and the cons would be because you normally copy and paste this basic structure you might forget how to use certain html or css, and also the layout could get a bit repetitive.
Wireframe is a mock up drawing of your website before you start making the actual one. We use this so we have basic outline of what our website might look like and how the navigation would work and so on.
At this stage I have struggled to use rows and columns for the blog page but I have partially managed to make similar look but without javascript I don't think I can make a navigation tool that works like a tab.. I can create a tab but it would not look like the wireframe that I have drawn. Otherwise they are similar looking.
design to web blog Working on responsive website


11 Times Old Furniture Gained New Life
Alaska distinguishes itself from the lower 48 states by its abundance of natural resources—crude oil, natural gas, and seafood—as well […]
Transport specializes in the safe transportation of office, computer, and medical related equipment. From a single laptop to an...
Transport offers a host of logistic management services and supply chain solutions. We provide innovative solutions with the best...
Transport has access to over a ten million square feet of storage space in strategic partnership locations throughout the...
Structure Construction Group is one of the most experienced and respected building and civil construction firms in the United Kingdom. For over a century, we have been transforming the ideas and visions of our clients into award-winning projects.
We build with the intention of exceeding our clients’ expectations for safety, quality, functionality, and aesthetics, and deliver finished products that stand the test of time.
Alaska distinguishes itself from the lower 48 states by its abundance of natural resources—crude oil, natural gas, and seafood—as well […]
Alaska distinguishes itself from the lower 48 states by its abundance of natural resources—crude oil, natural gas, and seafood—as well […]
Alaska distinguishes itself from the lower 48 states by its abundance of natural resources—crude oil, natural gas, and seafood—as well […]
Frankie Kao Fouder & CEO ThemeMove Ltd.,I’ve been happy with the services provided by Construction LLC. Scooter Libby has been wonderful! He has returned my calls quickly, and he answered all my questions
Johny Vu CEO Transport Ltd.,I have always received good service from Transport. Timing and quality have always met my expectations and everything is communicated in a professional and timely manner.
John Doe CEO Transport Ltd.,I’ve been happy with the services provided by Transport. Scooter Libby has been wonderful! He has returned my calls quickly, and he answered all my questions


A channel to discuss claiming Komodo's 5.1% rewards.
100 messages
Before 05-Dec-19 12:00 AM
KevinS10-Jul-19 03:21 PM
@Deleted User got some help from JL, i have the right equation, just not the right rate of 0.05 annually. projected months means how many months you're projecting your interest
Komodo Electrum wallet. Contribute to KomodoPlatform/electrum-komodo development by creating an account on GitHub.
3
Pinned a message.
lukechilds04-Nov-19 10:17 AM
there is currently an attacker bringing down nodes on the KMD network, they have taken down the node we query for the ledger rewards claim app
this is why it isn't working
james has pushed a fix
I will update and everything should be working again shortly
sorry for the inconvenience
2
jl777c04-Nov-19 10:23 AM
what requests does this server fulfill? is there a way to do it locally?
SHossain04-Nov-19 10:46 AM
yes, would be better if users could run the claim app locally. @hyperDEX said an app like this might be released a while ago.
lukechilds04-Nov-19 11:17 AM
All good now
@jl777c@SHossain it's just a standard insight node
we just spun up our own instance with generous API limits because BIP44 account discovery requires a lot of requests and all the existing API servers banned us if we tried to use them
jl777c04-Nov-19 11:19 AM
you might consider using libnspv, it supports a similar dataset as insight
lukechilds04-Nov-19 11:19 AM
but anyone can run the app locally and point it to their own local insight server or another remote insight server
A few weeks ago while reading the flyclient paper, i came up with the idea for nSPV. Rapidly, i modified komodod to have a -nSPV=1 mode to…
yes, it supports addressindex calls
it even supports mempool queries, rather queries about the mempool
lukechilds04-Nov-19 11:21 AM
nice
I'm assuming this is talking over the p2p protocol?
so wouldn't work from a browser without a HTTP proxy?
jl777c04-Nov-19 11:22 AM
yes, using p2p protocol
i have heard that it builds via wasm, but not familiar with the details
lukechilds04-Nov-19 11:23 AM
that's really cool
but yeah, you'd still need some sort of browser <=> komodo network bridge
even if it builds with wasm it'll likely be using websockets to communicate so it'll be on it's own isolated browser network until a bridge node connects the websocket/komodo networks together
where are all the indexes stored?
do you need special fully indexed full nodes that are indexing all addresses?
jl777c04-Nov-19 11:25 AM
on fullnodes that support it
lukechilds04-Nov-19 11:25 AM
are they indexing everything like insight/electrum?
jl777c04-Nov-19 11:26 AM
it uses the same -addressindex that insight explorers are calling
insight is just a html front end to the -addressindex calls
the DB is inside the komodod, not the insight, at least there is no need for a DB at the insight level as the addressindex rpc calls returns all the relevant info
lukechilds04-Nov-19 11:28 AM
that's awesome
do you know why addressindex isn't supported in bitcoin core?
jl777c04-Nov-19 11:32 AM
do you know why 4MB blocks arent supported in bitcoin legacy?
even though segwit blocks can be 4MB in size
lukechilds04-Nov-19 11:52 AM
because there wasn't consensus to hardfork to a bigger block size
genuinely interested in the reasoning behind -addressindex being rejected though
jl777c04-Nov-19 11:55 AM
why do they deprecate rpc that is universally used?
lukechilds04-Nov-19 12:09 PM
Cos bitcoin-cli RPC sucks and rather than keep bloating the same methods they add new more specific ones
if you don't know the reason why no worries, I just assumed there was some history behind it as I'm sure BitPay tried to get it merged in but Googled and can't find a PR or any more info on it
jl777c04-Nov-19 12:13 PM
you can try to justify changing how an existing rpc call works and making a different rpc call that worked the way it used to, but really there is no excuse for such breaking of backward compatibility. just make new functionality have new rpc, and dont break the existing


{_program Programs} can be moved around in the Programs screen simply by {_drag dragging} them.
If you want to copy a program, you {_tap} its button to select it, then {_long-press} the target location, and tap "store" in the {_popup}.
If you want to move programs between banks, long-press the other bank number at the top of the screen. That number is highlighted in blue, and the screen is split between the two banks, so you can drag programs from one to the other. Naturally, you can select programs in the second bank, too, or long-press them to see the {Program_popup}.
In this state, tapping bank numbers changes the upper bank, and long-pressing bank numbers changes the lower bank. To exchange the position of the two banks, tap the blue bank button. To revert to a single bank, tap the white bank button.


|
|
|---|
Pointer This activates the pointer.
Pointer Mode1 When clicked once this activates the pointer and allows you to highlight anything.
Pointer Mode2 When clicked twice this activates the pointer and allows you to highlight only brushes.
Pointer Mode3 When clicked three times this activates the pointer and allows you to highlight only entities.
Camera Activates the 3D view camera.
Zoom Activates the zoom tool.
Paint Object Paints the current selection (whole brush or surface) with the current texture.
Entity This allows you to select and drop entities into current map.
Brush Creation This allows you to choose and drop a brush type into the map.
Face Properties This allows you to adjust the texture and surface properties of a selected brush.
Vertex Manipulation This allows you to manipulate the verticies of a selected brush.
Clip Split This will clip or split a brush.
Clip Split Mode1 When clicked once this will clip a brush.
Clip Split Mode2 When clicked again this will split a brush.
Texture Lock This will lock the texture orientation.
Build Map This will start the map compiler.


-
{ "titles": ["Program", "JSON"] }
Walker program
Representation
JSON to format
Representation
JSON converted to a string


For the last two questions on the page, select the appropriate rating on a scale of 1 to 10 (10 being `excellent') by clicking on the pull down menus for each. If you want to change your selection, simply reselect your choice from the pull down menus. If you cannot answer either of these two questions, select `Do Not Know' from the menus.


I graduated with distiction in Applied Mathematics & Environmental Hydrology from the University of Arizona in the Spring of 2013.
I'm a published technical writer with the United States Geological Survery, and I have an upcoming authorship for my work in Forest Infrastructure with the World Resources Institute in Washington DC.
I'm self-taught in a wide array of technical applications - ArcGIS, Spatial Analysis Tools, QGIS, ArcScene, HTML5, CSS, Javascript, jQuery, ModelBuilder, Mapbox.js, Leaflet.js, Database Management BMPs, Python, along with several other 3rd party GIS programs peppered in.
I'm most passionate about current issues in urban planning, smart-city design, public transit infrastructure, city design, urban water management, and urban environmental sustainability.
What I can provide to you are years of expertise gained via the accomplishments listed above. I've worked both on independant projects or as part of a team, and I can support a variety of research projects in geospatial analysis services. I'm well equiped to assist at any phase of of GIS project timelines - from initial project proposals, throughout development, or during final product release for end-users.


--- layout: default --- Reaching the World In Our Generation Training and support for missionaries going to reach the world for Christ. Interested in being a missionary? Start Your Mission Adventure Need more info? Find out more about our mission board Ready to help? Specific ways you can get involved Next Upcoming Event Our Generation Summit Get away • Be with other missions-minded people • Focus on the needs of the world. December 27 - December 31, 2017
Interested in being a missionary?
Need more info?
Ready to help?
Next Upcoming Event
December 27 - December 31, 2017


Mr Beko Eze Secretary to the Niger Delta Development Commission Old Secretariat Complex Victorial-Island Lagos Dear Sir I am a highly placed official of Government of Nigeria and also a founding member of the ruling Peoples Democratic Party My committee - The Niger Delta Development Commission NDDC which is in charge of managing and supervising the disbursement of oil sales revenues for the Nigerian government which covers payment to foreign and local contractors that have executed contracts for our country The revenue under our control runs into several hundred of millions of dollars monthly Myself and other colleagues in the NDDC are currently in need of a foreign partner with whose bank account we shall transfer the sum of Forty Nine Million Five Hundred Thosand United States Dollars $49 5M This fund was accrued from various over invoicing of foreign contractors' payments made over the years The Total fund is presently waiting in the Government Account named CBN FGN INDEPENDENT REVENUE account Central Bank of Nigeria However by virtue of our position as civil servants and members of the NDDC we cannot acquire this funds in our name This is because as top civil servants we are not allowed by law of the land to own or operate bank accounts outside our country for now I have been delegated as a matter of trust by my colleagues to look for an overseas partner in whose account we would transfer the fund hence the reason for this mail We shall be Transferring the money to your account with your company as the beneficiary under the guise that you are being paid for a contract which youyour company executed for our country through the NDDC and any other Federal Ministry that we decide to use to siphon the funds through For your support and partnership please reply me to negotiate your fees or the percentage you wish to be paid when the funds arrive your bank account You must however note that this transaction with regards to our disposition to continue with you is subject to these terms Firstly our conviction of your transparencySecondly that you treat this transaction with utmost secrecy and confidentiality Finally and above all that you will provide an account over which you have absolute control The transaction although discrete is legitimate and there is no risk or legal lliability either to ourselves or yourself now or in the future as we have put in place the neccesary machinery that will ensure a hitch free transfer into your account upon acceptance The transfer will be effected to your account within ten to fourteen working days from the date we reach an agreement and furnish me with your contact telephone and fax numbers in your first response I am looking forward to doing business with you and do solicit your confidentiality in this transaction Please mail your response to me through my confidential email address for me to update you on our plans as to how we intend to actualize this transaction Yours Sincerely Mr Beko Eze


|
PMIC
|
TIM Timers. More...
#include <stm32f103xb.h>
Data Fields | |
| __IO uint32_t | CR1 |
| __IO uint32_t | CR2 |
| __IO uint32_t | SMCR |
| __IO uint32_t | DIER |
| __IO uint32_t | SR |
| __IO uint32_t | EGR |
| __IO uint32_t | CCMR1 |
| __IO uint32_t | CCMR2 |
| __IO uint32_t | CCER |
| __IO uint32_t | CNT |
| __IO uint32_t | PSC |
| __IO uint32_t | ARR |
| __IO uint32_t | RCR |
| __IO uint32_t | CCR1 |
| __IO uint32_t | CCR2 |
| __IO uint32_t | CCR3 |
| __IO uint32_t | CCR4 |
| __IO uint32_t | BDTR |
| __IO uint32_t | DCR |
| __IO uint32_t | DMAR |
| __IO uint32_t | OR |
TIM Timers.
| __IO uint32_t ARR |
TIM auto-reload register, Address offset: 0x2C
| __IO uint32_t BDTR |
TIM break and dead-time register, Address offset: 0x44
| __IO uint32_t CCER |
TIM capture/compare enable register, Address offset: 0x20
| __IO uint32_t CCMR1 |
TIM capture/compare mode register 1, Address offset: 0x18
| __IO uint32_t CCMR2 |
TIM capture/compare mode register 2, Address offset: 0x1C
| __IO uint32_t CCR1 |
TIM capture/compare register 1, Address offset: 0x34
| __IO uint32_t CCR2 |
TIM capture/compare register 2, Address offset: 0x38
| __IO uint32_t CCR3 |
TIM capture/compare register 3, Address offset: 0x3C
| __IO uint32_t CCR4 |
TIM capture/compare register 4, Address offset: 0x40
| __IO uint32_t CNT |
TIM counter register, Address offset: 0x24
| __IO uint32_t CR1 |
TIM control register 1, Address offset: 0x00
| __IO uint32_t CR2 |
TIM control register 2, Address offset: 0x04
| __IO uint32_t DCR |
TIM DMA control register, Address offset: 0x48
| __IO uint32_t DIER |
TIM DMA/interrupt enable register, Address offset: 0x0C
| __IO uint32_t DMAR |
TIM DMA address for full transfer register, Address offset: 0x4C
| __IO uint32_t EGR |
TIM event generation register, Address offset: 0x14
| __IO uint32_t OR |
TIM option register, Address offset: 0x50
| __IO uint32_t PSC |
TIM prescaler register, Address offset: 0x28
| __IO uint32_t RCR |
TIM repetition counter register, Address offset: 0x30
| __IO uint32_t SMCR |
TIM slave Mode Control register, Address offset: 0x08
| __IO uint32_t SR |
TIM status register, Address offset: 0x10